commit 77545385a81f0bbae40ba35cd8b7b2ddbe0e04da Author: yann Date: Mon Dec 23 11:11:15 2024 +0100 first commit diff --git a/.env_file b/.env_file new file mode 100644 index 0000000..2cad54c --- /dev/null +++ b/.env_file @@ -0,0 +1,58 @@ +SHELL=/bin/bash +SESSION_MANAGER=local/PC1:@/tmp/.ICE-unix/1441,unix/PC1:/tmp/.ICE-unix/1441 +COLORTERM=truecolor +XDG_CONFIG_DIRS=/etc/xdg +XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0 +XDG_MENU_PREFIX=xfce- +TERMINATOR_DBUS_PATH=/net/tenshu/Terminator2 +LC_ADDRESS=fr_FR.UTF-8 +LC_NAME=fr_FR.UTF-8 +SSH_AUTH_SOCK=/tmp/ssh-XXXXXXQ9lzqM/agent.1536 +XDG_CONFIG_HOME=/home/yann/.config +TERMINATOR_UUID=urn:uuid:9fd3d9b2-ff47-4e04-9a81-7405d5374258 +DESKTOP_SESSION=xfce +LC_MONETARY=fr_FR.UTF-8 +SSH_AGENT_PID=1538 +EDITOR=nano +GTK_MODULES=canberra-gtk-module:canberra-gtk-module +XDG_SEAT=seat0 +PWD=/home/yann/media/yannstatic +LOGNAME=yann +XDG_SESSION_DESKTOP=xfce +XDG_SESSION_TYPE=x11 +PANEL_GDK_CORE_DEVICE_EVENTS=0 +XAUTHORITY=/home/yann/.Xauthority +XDG_GREETER_DATA_DIR=/var/lib/lightdm-data/yann +MOTD_SHOWN=pam +HOME=/home/yann +LC_PAPER=fr_FR.UTF-8 +LANG=fr_FR.UTF-8 +XDG_CURRENT_DESKTOP=XFCE +VTE_VERSION=7801 +XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0 +TERMINATOR_DBUS_NAME=net.tenshu.Terminator21a9d5db22c73a993ff0b42f64b396873 +XDG_CACHE_HOME=/home/yann/.cache +GEM_HOME=/home/yann/.local/share/gem/ruby/3.3.0/gems +XDG_SESSION_CLASS=user +TERM=xterm-256color +LC_IDENTIFICATION=fr_FR.UTF-8 +USER=yann +DISPLAY=:0.0 +SHLVL=1 +LC_TELEPHONE=fr_FR.UTF-8 +LC_MEASUREMENT=fr_FR.UTF-8 +XDG_VTNR=7 +XDG_SESSION_ID=2 +XDG_RUNTIME_DIR=/run/user/1000 +DEBUGINFOD_URLS=https://debuginfod.archlinux.org +LC_TIME=fr_FR.UTF-8 +GTK3_MODULES=xapp-gtk3-module:xapp-gtk3-module +XDG_DATA_DIRS=/usr/local/share:/usr/share +BROWSER=firefox +PATH=/home/yann/.local/share/gem/ruby/3.3.0/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl +GDMSESSION=xfce +DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus +MAIL=/var/spool/mail/yann +LC_NUMERIC=fr_FR.UTF-8 +_=/usr/bin/env +OLDPWD=/home/yann diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..68b4215 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +files +_posts +images +htmldoc +htmldoc.md +.jekyll-cache +.jekyll-metadata +static + diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..764a8a7 --- /dev/null +++ b/Gemfile @@ -0,0 +1,6 @@ +source "https://rubygems.org" + +# gem "github-pages", group: :jekyll_plugins +gem "jekyll-text-theme" +gem "html-pipeline" +gem "sass-embedded", "1.76.0" diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..701f8f7 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,187 @@ +GEM + remote: https://rubygems.org/ + specs: + activesupport (8.0.0) + base64 + benchmark (>= 0.3) + bigdecimal + concurrent-ruby (~> 1.0, >= 1.3.1) + connection_pool (>= 2.2.5) + drb + i18n (>= 1.6, < 2) + logger (>= 1.4.2) + minitest (>= 5.1) + securerandom (>= 0.3) + tzinfo (~> 2.0, >= 2.0.5) + uri (>= 0.13.1) + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) + base64 (0.2.0) + benchmark (0.4.0) + bigdecimal (3.1.8) + colorator (1.1.0) + concurrent-ruby (1.3.4) + connection_pool (2.4.1) + drb (2.2.1) + em-websocket (0.5.3) + eventmachine (>= 0.12.9) + http_parser.rb (~> 0) + eventmachine (1.2.7) + ffi (1.17.0-aarch64-linux-gnu) + ffi (1.17.0-aarch64-linux-musl) + ffi (1.17.0-arm-linux-gnu) + ffi (1.17.0-arm-linux-musl) + ffi (1.17.0-arm64-darwin) + ffi (1.17.0-x86-linux-gnu) + ffi (1.17.0-x86-linux-musl) + ffi (1.17.0-x86_64-darwin) + ffi (1.17.0-x86_64-linux-gnu) + ffi (1.17.0-x86_64-linux-musl) + forwardable-extended (2.6.0) + gemoji (4.1.0) + google-protobuf (4.28.3) + bigdecimal + rake (>= 13) + google-protobuf (4.28.3-aarch64-linux) + bigdecimal + rake (>= 13) + google-protobuf (4.28.3-arm64-darwin) + bigdecimal + rake (>= 13) + google-protobuf (4.28.3-x86-linux) + bigdecimal + rake (>= 13) + google-protobuf (4.28.3-x86_64-darwin) + bigdecimal + rake (>= 13) + google-protobuf (4.28.3-x86_64-linux) + bigdecimal + rake (>= 13) + html-pipeline (2.14.3) + activesupport (>= 2) + nokogiri (>= 1.4) + http_parser.rb (0.8.0) + i18n (1.14.6) + concurrent-ruby (~> 1.0) + jekyll (4.3.4) + addressable (~> 2.4) + colorator (~> 1.0) + em-websocket (~> 0.5) + i18n (~> 1.0) + jekyll-sass-converter (>= 2.0, < 4.0) + jekyll-watch (~> 2.0) + kramdown (~> 2.3, >= 2.3.1) + kramdown-parser-gfm (~> 1.0) + liquid (~> 4.0) + mercenary (>= 0.3.6, < 0.5) + pathutil (~> 0.9) + rouge (>= 3.0, < 5.0) + safe_yaml (~> 1.0) + terminal-table (>= 1.8, < 4.0) + webrick (~> 1.7) + jekyll-feed (0.17.0) + jekyll (>= 3.7, < 5.0) + jekyll-paginate (1.1.0) + jekyll-sass-converter (3.0.0) + sass-embedded (~> 1.54) + jekyll-sitemap (1.4.0) + jekyll (>= 3.7, < 5.0) + jekyll-text-theme (2.2.6) + jekyll (>= 3.6, < 5.0) + jekyll-feed (~> 0.1) + jekyll-paginate (~> 1.1) + jekyll-sitemap (~> 1.0) + jemoji (~> 0.8) + jekyll-watch (2.2.1) + listen (~> 3.0) + jemoji (0.13.0) + gemoji (>= 3, < 5) + html-pipeline (~> 2.2) + jekyll (>= 3.0, < 5.0) + kramdown (2.5.1) + rexml (>= 3.3.9) + kramdown-parser-gfm (1.1.0) + kramdown (~> 2.0) + liquid (4.0.4) + listen (3.9.0) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) + logger (1.6.1) + mercenary (0.4.0) + minitest (5.25.1) + nokogiri (1.16.7-aarch64-linux) + racc (~> 1.4) + nokogiri (1.16.7-arm-linux) + racc (~> 1.4) + nokogiri (1.16.7-arm64-darwin) + racc (~> 1.4) + nokogiri (1.16.7-x86-linux) + racc (~> 1.4) + nokogiri (1.16.7-x86_64-darwin) + racc (~> 1.4) + nokogiri (1.16.7-x86_64-linux) + racc (~> 1.4) + pathutil (0.16.2) + forwardable-extended (~> 2.6) + public_suffix (6.0.1) + racc (1.8.1) + rake (13.2.1) + rb-fsevent (0.11.2) + rb-inotify (0.11.1) + ffi (~> 1.0) + rexml (3.3.9) + rouge (4.5.1) + safe_yaml (1.0.5) + sass-embedded (1.76.0-aarch64-linux-gnu) + google-protobuf (>= 3.25, < 5.0) + sass-embedded (1.76.0-aarch64-linux-musl) + google-protobuf (>= 3.25, < 5.0) + sass-embedded (1.76.0-arm-linux-gnueabihf) + google-protobuf (>= 3.25, < 5.0) + sass-embedded (1.76.0-arm-linux-musleabihf) + google-protobuf (>= 3.25, < 5.0) + sass-embedded (1.76.0-arm64-darwin) + google-protobuf (>= 3.25, < 5.0) + sass-embedded (1.76.0-x86-linux-gnu) + google-protobuf (>= 3.25, < 5.0) + sass-embedded (1.76.0-x86-linux-musl) + google-protobuf (>= 3.25, < 5.0) + sass-embedded (1.76.0-x86_64-darwin) + google-protobuf (>= 3.25, < 5.0) + sass-embedded (1.76.0-x86_64-linux-gnu) + google-protobuf (>= 3.25, < 5.0) + sass-embedded (1.76.0-x86_64-linux-musl) + google-protobuf (>= 3.25, < 5.0) + securerandom (0.3.2) + terminal-table (3.0.2) + unicode-display_width (>= 1.1.1, < 3) + tzinfo (2.0.6) + concurrent-ruby (~> 1.0) + unicode-display_width (2.6.0) + uri (1.0.2) + webrick (1.9.0) + +PLATFORMS + aarch64-linux + aarch64-linux-gnu + aarch64-linux-musl + arm-linux + arm-linux-gnu + arm-linux-gnueabihf + arm-linux-musl + arm-linux-musleabihf + arm64-darwin + x86-linux + x86-linux-gnu + x86-linux-musl + x86_64-darwin + x86_64-linux-gnu + x86_64-linux-musl + +DEPENDENCIES + html-pipeline + jekyll-text-theme + sass-embedded (= 1.76.0) + +BUNDLED WITH + 2.5.23 diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000..1091e06 --- /dev/null +++ b/_config.yml @@ -0,0 +1,97 @@ +# Bienvenue à Jekyll ! +# +# Ce fichier de configuration est destiné aux paramètres qui affectent l'ensemble de votre blog, des valeurs +# que vous êtes censé configurer une fois et rarement besoin de modifier par la suite. +# Pour des raisons techniques, ce fichier n'est *PAS* rechargé automatiquement lorsque vous utilisez +# 'jekyll serve'. Si vous modifiez ce fichier, veuillez redémarrer le processus de serveur. +# +# Modification octobre 2024 + +## => Paramètres du site +############################## +theme : jekyll-text-theme +text_skin : dark # "default" (par défaut), "dark", "forest", "ocean", "chocolate", "orange". +highlight_theme : tomorrow-night-bright # "default" (par défaut), "tomorrow", "tomorrow-night", "tomorrow-night-eighties", "tomorrow-night-blue", "tomorrow-night-bright". +url : https://static.rnmkcy.eu # le nom d'hôte et le protocole de base pour votre site, par exemple https://www.someone.com +baseurl : # ne comprend pas le nom d'hôte +title : YannStatic +description : > # cela signifie qu'il faut ignorer les nouvelles lignes jusqu'à "Language & timezone". + Expérimentations et tests + +## => Language and Timezone +############################## +lang : fr # le language du site, par défaut "en" +timezone : Europe/Paris # voir https://en.wikipedia.org/wiki/List_of_tz_database_time_zones + + +## => Chemins +############################## +paths: + root : # title link url, "/" (default) + home : # home layout url, "/" (default) + archive : # "/archive.html" (default) + rss : # "/feed.xml" (default) + + +## => Post +############################## +## excerpt +excerpt_separator: + +## license +license: # "CC-BY-4.0", "CC-BY-SA-4.0", "CC-BY-NC-4.0", "CC-BY-ND-4.0" + +## TOC +toc: + selectors: h1,h2,h3,h4 # "h1,h2,h3" (default) + + +## => Paginate +############################## +paginate: 10 +## paginate_path: /page:num # don't change this unless for special need + + +## => Sources +############################## +sources: # bootcdn (default), unpkg + + +## => Recherche +############################## +search: + provider: "custom" # "default" (default), false, "custom" + +## => Build +############################## +markdown : kramdown +highlighter : rouge +permalink : date + +# http://jekyllrb.com/docs/configuration/options/ +exclude: [LISEZMOI.md,.jekyll-cache/,.git/,Gemfile,Gemfile.lock,static,aide-jekyll-text-theme.md] +include: [search.json] + +defaults: + - scope: + path: "" + type: posts + values: + layout: article + sharing: true + license: false # true + aside: + toc: true + show_edit_on_github: true + show_subscribe: true + pageview: true + + +## => Plugins +############################## +plugins: + - jekyll-feed + - jekyll-paginate + - jekyll-sitemap + - jemoji + diff --git a/_data/authors.yml b/_data/authors.yml new file mode 100644 index 0000000..e69de29 diff --git a/_data/licenses.yml b/_data/licenses.yml new file mode 100644 index 0000000..dda29f1 --- /dev/null +++ b/_data/licenses.yml @@ -0,0 +1,16 @@ +CC-BY-4.0: + name: Attribution 4.0 International + url: https://creativecommons.org/licenses/by/4.0/deed.fr + image: https://i.creativecommons.org/l/by/4.0/88x31.png +CC-BY-SA-4.0: + name: Attribution-ShareAlike 4.0 International + url: https://creativecommons.org/licenses/by-sa/4.0/deed.fr + image: https://i.creativecommons.org/l/by-sa/4.0/88x31.png +CC-BY-NC-4.0: + name: Attribution-NonCommercial 4.0 International + url: https://creativecommons.org/licenses/by-nc/4.0/deed.fr + image: https://i.creativecommons.org/l/by-nc/4.0/88x31.png +CC-BY-ND-4.0: + name: Attribution-NoDerivatives 4.0 International + url: https://creativecommons.org/licenses/by-nd/4.0/deed.fr + image: https://i.creativecommons.org/l/by-nd/4.0/88x31.png diff --git a/_data/locale.yml b/_data/locale.yml new file mode 100644 index 0000000..ce8c029 --- /dev/null +++ b/_data/locale.yml @@ -0,0 +1,66 @@ +# @start locale config +## => English +######################## +en: &EN + SUBSCRIBE : "Subscribe" + READMORE : "Read more" + SEARCH : "Search" + CANCEL : "Cancel" + VIEWS : "views" + LAST_UPDATED : "Last updated" + PREVIOUS : "PREVIOUS" + NEXT : "NEXT" + ARTICLE_DATE_FORMAT : "%b %d, %Y" + ARTICLE_LIST_DATE_FORMAT: "%b %d" + STATISTICS : "[POST_COUNT] post articles, [PAGE_COUNT] pages." + LICENSE_ANNOUNCE : "This work is licensed under a [LICENSE] license." + POST_ON_GITHUB : "Edit on Github" + FOLLOW_ME : "Follow me on [NAME]." + FOLLOW_US : "Follow us on [NAME]." + EMAIL_ME : "Send me an Email." + EMAIL_US : "Send us an Email." + COPYRIGHT_DATES : "2020" + +en-GB: + <<: *EN +en-US: + <<: *EN +en-CA: + <<: *EN +en-AU: + <<: *EN + +## => French +######################## +fr: &FR + SUBSCRIBE : "S'abonner" + READMORE : "Plus" + SEARCH : "Recherche" + CANCEL : "Annuler" + VIEWS : "vues" + LAST_UPDATED : "Dernière modification" + PREVIOUS : "PRÉCÉDENT" + NEXT : "SUIVANT" + ARTICLE_DATE_FORMAT : "%d %b, %Y" + ARTICLE_LIST_DATE_FORMAT: "%d %b" + STATISTICS : "[POST_COUNT] articles, [PAGE_COUNT] pages." + LICENSE_ANNOUNCE : "[LICENSE]" + POST_ON_GITHUB : "Modifier sur Github" + FOLLOW_ME : "Suivez-moi sur [NAME]." + FOLLOW_US : "Suivez-nous sur [NAME]." + EMAIL_ME : "Envoyez-moi un courriel." + EMAIL_US : "Envoyez-nous un courriel" + COPYRIGHT_DATES : "2020" + DONATE : "Faites un don de [NAME]." + +fr-BE: + <<: *FR +fr-CA: + <<: *FR +fr-CH: + <<: *FR +fr-FR: + <<: *FR +fr-LU: + <<: *FR +# @end locale config diff --git a/_data/navigation.yml b/_data/navigation.yml new file mode 100644 index 0000000..c67c623 --- /dev/null +++ b/_data/navigation.yml @@ -0,0 +1,25 @@ +header: + - titles: + # @start locale config + fr : &FR Etiquettes + # @end locale config + url: /archive.html + + - titles: + # @start locale config + fr : &FR Documents + # @end locale config + url: /htmldoc.html + + - titles: + # @start locale config + fr : &FR Liens + # @end locale config + url: /liens_ttrss.html + + - titles: + # @start locale config + fr : &FR Aide + # @end locale config + url: /syntaxe-markdown.html + diff --git a/_data/variables.yml b/_data/variables.yml new file mode 100644 index 0000000..8322ee6 --- /dev/null +++ b/_data/variables.yml @@ -0,0 +1,54 @@ +default: + text_skin: default + highlight_theme: default + lang: fr + paths: + root: / + home: / + archive: /archive.html + rss: /feed.xml + toc: + selectors: 'h1,h2,h3' + sources: bootcdn + + page: + mode: normal + type: webpage + article_header: + align: left + theme: light + articles: + show_cover: true + show_excerpt: false + show_readmore: false + show_info: false + show_title: true + show_edit_on_github: false + show_date: true + show_tags: true + show_author_profile: false + show_subscribe: false + full_width: false + sharing: false + comment: true + license: false + pageview: false + search: default + +sources: + bootcdn: + font_awesome: 'https://use.fontawesome.com/releases/v5.0.13/css/all.css' # '/assets/css/all.css' + jquery: '/assets/js/jquery.min.js' + #leancloud_js_sdk: '//cdn.jsdelivr.net/npm/leancloud-storage@3.13.2/dist/av-min.js' + #gitalk: + # js: 'https://cdn.bootcss.com/gitalk/1.2.2/gitalk.min.js' + # css: 'https://cdn.bootcss.com/gitalk/1.2.2/gitalk.min.css' + #valine: 'https://unpkg.com/valine/dist/Valine.min.js' # bootcdn not available + unpkg: + font_awesome: 'https://unpkg.com/browse/@fortawesome/fontawesome-free@6.4.2/css/all.min.css' # 'https://use.fontawesome.com/releases/v5.0.13/css/all.css' + jquery: '/assets/js/jquery.min.js' + leancloud_js_sdk: '//cdn.jsdelivr.net/npm/leancloud-storage@3.13.2/dist/av-min.js' + gitalk: + js: 'https://unpkg.com/gitalk@1.2.2/dist/gitalk.min.js' + css: 'https://unpkg.com/gitalk@1.2.2/dist/gitalk.css' + valine: 'https//unpkg.com/valine/dist/Valine.min.js' diff --git a/_includes/article-footer.html b/_includes/article-footer.html new file mode 100644 index 0000000..c66e7c9 --- /dev/null +++ b/_includes/article-footer.html @@ -0,0 +1,58 @@ +{%- include snippets/assign.html + target=site.data.variables.default.page.show_author_profile + source0=layout.show_author_profile source1=page.show_author_profile -%} +{%- assign _show_author_profile = __return -%} + +{%- include snippets/assign.html + target=site.data.variables.default.page.show_subscribe + source0=layout.show_subscribe source1=page.show_subscribe -%} +{%- assign _show_subscribe = __return -%} + +{%- include snippets/assign.html + target=site.data.variables.default.page.license + source0=layout.license source1=page.license -%} +{%- assign _license = __return -%} + + diff --git a/_includes/article-header.html b/_includes/article-header.html new file mode 100644 index 0000000..a98a6c6 --- /dev/null +++ b/_includes/article-header.html @@ -0,0 +1,49 @@ +{%- include snippets/get-article-title.html article=include.article-%} +{%- assign _article_title = __return -%} + +{%- if include.html != false -%} + + {%- include snippets/assign.html + target=site.data.variables.default.page.show_title + source0=layout.show_title source1=include.article.show_title -%} + {%- assign _show_title = __return -%} + + {%- include snippets/assign.html + target=site.data.variables.default.page.show_edit_on_github + source0=layout.show_edit_on_github source1=include.article.show_edit_on_github -%} + {%- assign _show_edit_on_github = __return -%} + + {%- if _show_title or _show_edit_on_github -%} +
+ {%- if _show_title -%} +

{{ _article_title }}

+ {%- endif -%} + {%- if _show_edit_on_github -%} + {%- if site.repository and site.repository_tree -%} + {%- include snippets/is_collection.html page=include.article -%} + {%- assign _is_article_collection = __return -%} + {%- include snippets/get-locale-string.html key='POST_ON_GITHUB' -%} + {%- assign _locale_post_on_github = __return -%} + {%- if _is_article_collection -%} + {%- include snippets/prepend-path.html path=include.article.path prepend_path=site.collections_dir -%} + {%- assign _article_path = __return -%} + {%- else -%} + {%- assign _article_path = include.article.path -%} + {%- endif -%} + {%- assign _github_path = site.repository | append: '/tree/' | append: site.repository_tree | append: '/' | append: _article_path | replace:'//','/' -%} +   + + + {%- endif -%} + {%- endif -%} +
+ {%- else -%} +

{{ _article_title }}

+ {%- endif -%} +{%- endif -%} + +{%- if include.semantic != false -%} + +{%- endif -%} diff --git a/_includes/article-info.html b/_includes/article-info.html new file mode 100644 index 0000000..b43c45e --- /dev/null +++ b/_includes/article-info.html @@ -0,0 +1,101 @@ +{%- assign _author = site.data.authors[include.article.author] | default: site.author -%} + +{%- if include.html != false -%} + + {%- include snippets/assign.html + target=site.data.variables.default.page.show_date + source0=layout.show_date source1=include.article.show_date -%} + {%- assign _show_date = __return -%} + {%- if _show_date and include.article.modif -%} + {%- assign _show_date = true -%} + {%- else -%} + {%- assign _show_date = false -%} + {%- endif -%} + + {%- include snippets/assign.html + target=site.data.variables.default.page.show_tags + source0=layout.show_tags source1=include.article.show_tags -%} + {%- assign _show_tags = __return -%} + {%- if _show_tags and include.article.tags[0] -%} + {%- assign _show_tags = true -%} + {%- else -%} + {%- assign _show_tags = false -%} + {%- endif -%} + + {%- assign _show_author = include.article.author -%} + + {%- include snippets/assign.html target=site.data.variables.default.page.pageview + source0=layout.pageview source1=page.pageview -%} + {%- assign _pageview = __return -%} + {%- if _pageview or include.show_pageview -%} + {%- assign _pageview = true -%} + {%- else -%} + {%- assign _pageview = false -%} + {%- endif -%} + + {%- assign _paths_archive = site.paths.archive | default: site.data.variables.default.paths.archive -%} + + {%- if _show_tags or _show_author or _show_date or _pageview -%} +
+ {%- if _show_tags -%} + + + {%- endif -%} + + {%- if _show_author or _show_date or _pageview -%} + + {%- endif -%} + +
+ {%- endif -%} +{%- endif -%} + + +{%- if include.semantic != false -%} + {%- if _author -%} + + {%- endif -%} + {%- if include.article.modif -%} + + {%- endif -%} + {%- if include.article.tags[0] -%} + {%- assign _keywords = include.article.tags | join: ',' %} + + {%- endif -%} +{%- endif -%} diff --git a/_includes/article-list.html b/_includes/article-list.html new file mode 100644 index 0000000..748de5a --- /dev/null +++ b/_includes/article-list.html @@ -0,0 +1,143 @@ +{%- assign _excerpt_truncate = include.excerpt_truncate | default: 350 -%} + +{%- assign _excerpt_type = include.excerpt_type -%} + +{%- include snippets/get-locale-string.html key='READMORE' -%} +{%- assign _locale_readmore = __return -%} + +{%- assign _sorted_list = site.posts | sort_natural: "modif" | reverse -%} + +{%- if include.type == 'item' -%} +
+{%- elsif include.type == 'brief' -%} +
+{%- elsif include.type == 'grid' -%} + {%- if include.size == 'sm' -%} +
+ {%- else -%} +
+ {%- endif -%} +{%- endif -%} + + {%- for _article in _sorted_list -%} + + {%- include snippets/prepend-baseurl.html path=_article.url -%} + {%- assign _article_url = __return -%} + + {%- if _article.cover -%} + {%- include snippets/get-nav-url.html path=_article.cover -%} + {%- assign _article_cover = __return -%} + {%- endif -%} + + {%- if include.type == 'item' -%} + {%- if include.article_type == 'BlogPosting' -%} + +
+ {%- else -%} + +
+ {%- endif -%} + {%- if _article.cover and include.show_cover-%} + {%- include snippets/get-nav-url.html path=_article.cover -%} + {%- assign _article_cover = __return -%} +
+ {%- if include.cover_size == 'lg' -%} + + {%- elsif include.cover_size == 'sm' -%} + + {%- else -%} + + {%- endif -%} +
+ {%- endif -%} +
+

{{ _article.title }}

+
+ {%- if _article.excerpt and include.show_excerpt -%} +
+ {%- if _excerpt_type == 'html' -%} + {{ _article.excerpt }} + {%- else -%} + {{ _article.excerpt | strip_html | strip | truncate: _excerpt_truncate }} + {%- endif -%} +
+ {%- endif -%} + {%- if include.show_readmore -%} +

{{ _locale_readmore }}

+ {%- endif -%} +
+ + {%- if include.show_info -%} + {%- include snippets/assign.html target=site.data.variables.default.page.pageview + source0=_article.pageview -%} + {%- assign _show_pageview = __return -%} + {%- include article-info.html article=_article show_pageview=_show_pageview -%} + {%- endif -%} + +
+
+
+ + + {%- elsif include.type == 'brief' -%} + {%- assign _tags = '' -%} + {%- for _tag in _article.tags -%} + {%- assign _tag_encode = _tag | strip | url_encode -%} + {%- if forloop.last -%} + {%- assign _tags = _tags | append: _tag_encode -%} + {%- else -%} + {%- assign _tags = _tags | append: _tag_encode | append: ',' -%} + {%- endif -%} + {%- endfor -%} + {%- if include.group_by == 'year' -%} + {%- assign _currentdate = _article.modif | date: '%Y' -%} + {%- if _currentdate != _date -%} + {%- unless forloop.first -%}{%- endunless -%} +

{{ _currentdate }}

    + {%- assign _date = _currentdate -%} + {%- endif -%} + {%- endif -%} +
  • +
    + {%- if include.show_info -%} + {%- assign d = _article.modif | date: "%-d" -%}{%- case d -%}{%- when '1' -%}{{ d }}r{%- when '2' -%} {{ d }}{%- when '3' -%} {{ d }}{%- when '4' -%} {{ d }}{%- when '5' -%} {{ d }}{%- when '6' -%} {{ d }}{%- when '7' -%} {{ d }}{%- when '8' -%} {{ d }}{%- when '9' -%} {{ d }}{%- else -%}{{ d }}{%- endcase -%}  {%- assign m = _article.modif | date: "%-m" -%}{%- case m -%}{%- when '1' -%}janv.{%- when '2' -%}févr.{%- when '3' -%}mars {%- when '4' -%}avr. {%- when '5' -%}mai   {%- when '6' -%}juin  {%- when '7' -%}juil.{%- when '8' -%}août  {%- when '9' -%}sept.{%- when '10' -%}oct. {%- when '11' -%}nov. {%- when '12' -%}déc. {%- endcase -%} + + {%- endif -%} + {{ _article.title }}
    +
  • + + {%- elsif include.type == 'grid' -%} + {%- if include.size == 'sm' -%} +
    +
    + {%- if _article.cover -%} +
    + + +
    + {%- endif -%} +
    +
    + {%- else -%} + +
    +
    + {%- if _article.cover -%} +
    + {%- endif -%} + +
    +
    + {%- endif -%} + {%- endif -%} + {%- endfor -%} + +
diff --git a/_includes/article-section-navigator.html b/_includes/article-section-navigator.html new file mode 100644 index 0000000..a88aaf9 --- /dev/null +++ b/_includes/article-section-navigator.html @@ -0,0 +1,54 @@ +{%- if page.sidebar.nav -%} + {%- assign _sidebar_nav = site.data.navigation[page.sidebar.nav] -%} + {%- if _sidebar_nav -%} + {%- assign _find_cur = false -%} + {%- assign _find_next = false -%} + + {%- for _item in _sidebar_nav -%} + {%- if _find_next -%} {%- break -%} {%- endif -%} + {%- if _item.children -%} + + {%- for _child in _item.children -%} + {%- include snippets/get-nav-url.html path=_child.url -%} + {%- assign _nav_url = __return -%} + {%- include snippets/get-nav-url.html path=page.url -%} + {%- assign _page_url = __return -%} + + {%- if _nav_url == _page_url -%} + {%- assign _find_cur = true -%} + {%- elsif _find_cur and _find_next != true -%} + {%- assign _find_next = true -%} + {%- assign _next = _child -%} + {%- break -%} + {%- else -%} + {%- assign _previous = _child -%} + {%- endif -%} + {%- endfor -%} + + {%- endif -%} + {%- endfor -%} + {%- endif -%} + +{%- else -%} + {%- assign _previous = page.previous -%} + {%- assign _next = page.next -%} +{%- endif -%} + +{%- if _next or _previous -%} +
+ {%- if _previous -%} + {%- include snippets/prepend-baseurl.html path=_previous.url -%} + {%- assign _href = __return -%} + {%- include snippets/get-locale-string.html key='PREVIOUS' -%} + {%- assign _locale_previous = __return -%} + + {%- endif -%} + {%- if _next -%} + {%- include snippets/prepend-baseurl.html path=_next.url -%} + {%- assign _href = __return -%} + {%- include snippets/get-locale-string.html key='NEXT' -%} + {%- assign _locale_next = __return -%} + + {%- endif -%} +
+{%- endif -%} diff --git a/_includes/article/footer/author-profile.html b/_includes/article/footer/author-profile.html new file mode 100644 index 0000000..8b0d72d --- /dev/null +++ b/_includes/article/footer/author-profile.html @@ -0,0 +1,47 @@ +{%- assign _author = include.author -%} + +{%- if _author.type == 'organization' -%} + {%- assign _author_itemtype = 'http://schema.org/Organization' -%} +{%- else -%} + {%- assign _author_itemtype = 'http://schema.org/Person' -%} +{%- endif -%} + +
+ {%- if _author.avatar -%} + {%- if _author.url -%} + + {%- endif -%} + {%- include snippets/get-nav-url.html path=_author.avatar -%} + {%- assign _author_avatar = __return -%} + + {%- if _author.url -%} + + {%- endif -%} + {%- endif -%} + + +
+ + {%- if _author.name -%} + +

+ {%- if _author.url -%} + + + {%- endif -%} + {{ _author.name }} + {%- if _author.url -%} + + {%- endif -%} +

+ {%- endif -%} + + {%- if _author.bio -%} +

{{ _author.bio }}

+ {%- endif -%} + + +
+
diff --git a/_includes/article/footer/custom.html b/_includes/article/footer/custom.html new file mode 100644 index 0000000..edcd06d --- /dev/null +++ b/_includes/article/footer/custom.html @@ -0,0 +1,3 @@ + + + diff --git a/_includes/article/footer/license.html b/_includes/article/footer/license.html new file mode 100644 index 0000000..5e66136 --- /dev/null +++ b/_includes/article/footer/license.html @@ -0,0 +1,7 @@ +{%- include snippets/get-locale-string.html key='LICENSE_ANNOUNCE' -%} +{%- assign _license_announce = __return -%} + +{%- if include.license -%} + + {{ include.license.name }} +{%- endif -%} diff --git a/_includes/article/footer/subscribe.html b/_includes/article/footer/subscribe.html new file mode 100644 index 0000000..a91a2ab --- /dev/null +++ b/_includes/article/footer/subscribe.html @@ -0,0 +1,7 @@ +{%- assign _paths_rss = site.paths.rss | default: site.data.variables.default.paths.rss -%} +{%- include snippets/get-nav-url.html path=_paths_rss -%} +{%- assign _paths_rss = __return -%} +{%- include snippets/get-locale-string.html key='SUBSCRIBE' -%} +{%- assign _locale_nav_subscribe = __return -%} + + diff --git a/_includes/article/top/custom.html b/_includes/article/top/custom.html new file mode 100644 index 0000000..a1197ab --- /dev/null +++ b/_includes/article/top/custom.html @@ -0,0 +1,50 @@ + + + + + + + + + diff --git a/_includes/chart.html b/_includes/chart.html new file mode 100644 index 0000000..1d40edc --- /dev/null +++ b/_includes/chart.html @@ -0,0 +1,14 @@ + + diff --git a/_includes/footer.html b/_includes/footer.html new file mode 100644 index 0000000..35b05fd --- /dev/null +++ b/_includes/footer.html @@ -0,0 +1,15 @@ +
+ {%- assign _paths_rss = site.paths.rss | default: site.data.variables.default.paths.rss -%} + {%- include snippets/get-nav-url.html path=_paths_rss -%} + {%- assign _paths_rss = __return -%} + {%- include snippets/get-locale-string.html key='SUBSCRIBE' -%} + {%- assign _locale_nav_subscribe = __return -%} + +   + {%- include snippets/get-locale-string.html key='COPYRIGHT_DATES' -%} + {%- assign _locale_copyright_dates = __return -%} + {{ site.title }} {{ _locale_copyright_dates }}, + Propulsé par Jekyll & TeXt Theme +
+ diff --git a/_includes/head.html b/_includes/head.html new file mode 100644 index 0000000..e0d2bfc --- /dev/null +++ b/_includes/head.html @@ -0,0 +1,25 @@ + + + + +{%- include snippets/get-article-title.html article=page -%} +{%- if __return -%}{{ __return }} - {{ site.title }}{%- else -%}{{ site.title }}{%- endif -%} + + + + +{%- assign _paths_rss = site.paths.rss | default: site.data.variables.default.paths.rss -%} +{%- include snippets/get-nav-url.html path=_paths_rss -%} + + + + + +{%- include snippets/prepend-baseurl.html path='/assets/css/main.css' -%} + + +{%- include snippets/get-sources.html -%} +{%- assign _sources = __return -%} + + +{%- include head/custom.html -%} diff --git a/_includes/head/custom.html b/_includes/head/custom.html new file mode 100644 index 0000000..d74ed28 --- /dev/null +++ b/_includes/head/custom.html @@ -0,0 +1,4 @@ + +{%- include snippets/prepend-baseurl.html path='/assets/css/expand.css' -%} + + \ No newline at end of file diff --git a/_includes/head/favicon.html b/_includes/head/favicon.html new file mode 100644 index 0000000..773eb60 --- /dev/null +++ b/_includes/head/favicon.html @@ -0,0 +1,24 @@ + +{%- include snippets/prepend-baseurl.html path='/assets/favicon/apple-touch-icon.png' -%} + + +{%- include snippets/prepend-baseurl.html path='/assets/favicon/favicon-32x32.png' -%} + + +{%- include snippets/prepend-baseurl.html path='/assets/favicon/favicon-16x16.png' -%} + + +{%- include snippets/prepend-baseurl.html path='/assets/favicon/android-chrome-192x192.png' -%} + + +{%- include snippets/prepend-baseurl.html path='/assets/favicon/android-chrome-512x512.png' -%} + + +{%- include snippets/prepend-baseurl.html path='/assets/favicon/site.webmanifest' -%} + + +{%- include snippets/prepend-baseurl.html path='/assets/favicon/favicon.ico' -%} + + + + \ No newline at end of file diff --git a/_includes/header.html b/_includes/header.html new file mode 100644 index 0000000..556a194 --- /dev/null +++ b/_includes/header.html @@ -0,0 +1,76 @@ +{%- if include.theme == 'dark' -%} +
+{%- elsif include.theme == 'light' -%} +
+{%- else -%} +
+{%- endif -%} +
+
+
+ {%- include svg/logo.svg -%} + {%- assign _paths_root = site.paths.root | default: site.data.variables.default.paths.root -%} + {%- include snippets/get-nav-url.html path=_paths_root -%} + {%- if site.title -%} + {{ site.title }} + {%- endif -%} +
+ {%- if site.search.provider -%} + + {%- if site.search.provider -%} + + + + + + + + + + {%- endif -%} + + {%- endif -%} +
+ {%- if site.data.navigation.header -%} + + {%- endif -%} +
+
+ diff --git a/_includes/main/bottom/custom.html b/_includes/main/bottom/custom.html new file mode 100644 index 0000000..799bfea --- /dev/null +++ b/_includes/main/bottom/custom.html @@ -0,0 +1,2 @@ + + diff --git a/_includes/main/top/custom.html b/_includes/main/top/custom.html new file mode 100644 index 0000000..ecd5530 --- /dev/null +++ b/_includes/main/top/custom.html @@ -0,0 +1,6 @@ + + {%- if site.search.provider -%} +
+ {%- endif -%} + + diff --git a/_includes/mathjax.html b/_includes/mathjax.html new file mode 100644 index 0000000..1755206 --- /dev/null +++ b/_includes/mathjax.html @@ -0,0 +1,3 @@ + + + diff --git a/_includes/mermaid.html b/_includes/mermaid.html new file mode 100644 index 0000000..bb25658 --- /dev/null +++ b/_includes/mermaid.html @@ -0,0 +1,8 @@ + \ No newline at end of file diff --git a/_includes/paginator.html b/_includes/paginator.html new file mode 100644 index 0000000..58f8ff5 --- /dev/null +++ b/_includes/paginator.html @@ -0,0 +1,100 @@ +{%- if paginator.total_pages > 1 -%} + +{%- endif -%} diff --git a/_includes/scripts/archieve.js b/_includes/scripts/archieve.js new file mode 100644 index 0000000..96549b5 --- /dev/null +++ b/_includes/scripts/archieve.js @@ -0,0 +1,135 @@ +(function() { + var SOURCES = window.TEXT_VARIABLES.sources; + function queryString() { + // This function is anonymous, is executed immediately and + // the return value is assigned to QueryString! + var i = 0, queryObj = {}, pair; + var queryStr = window.location.search.substring(1); + var queryArr = queryStr.split('&'); + for (i = 0; i < queryArr.length; i++) { + pair = queryArr[i].split('='); + // If first entry with this name + if (typeof queryObj[pair[0]] === 'undefined') { + queryObj[pair[0]] = pair[1]; + // If second entry with this name + } else if (typeof queryObj[pair[0]] === 'string') { + queryObj[pair[0]] = [queryObj[pair[0]], pair[1]]; + // If third or later entry with this name + } else { + queryObj[pair[0]].push(pair[1]); + } + } + return queryObj; + } + + var setUrlQuery = (function() { + var baseUrl = window.location.href.split('?')[0]; + return function(query) { + if (typeof query === 'string') { + window.history.replaceState(null, '', baseUrl + query); + } else { + window.history.replaceState(null, '', baseUrl); + } + }; + })(); + + window.Lazyload.js(SOURCES.jquery, function() { + var $tags = $('.js-tags'); + var $articleTags = $tags.find('button'); + var $tagShowAll = $tags.find('.tag-button--all'); + var $result = $('.js-result'); + var $sections = $result.find('section'); + var sectionArticles = []; + var $lastFocusButton = null; + var sectionTopArticleIndex = []; + var hasInit = false; + + $sections.each(function() { + sectionArticles.push($(this).find('.item')); + }); + + function init() { + var i, index = 0; + for (i = 0; i < $sections.length; i++) { + sectionTopArticleIndex.push(index); + index += $sections.eq(i).find('.item').length; + } + sectionTopArticleIndex.push(index); + } + + function searchButtonsByTag(_tag/*raw tag*/) { + if (!_tag) { + return $tagShowAll; + } + var _buttons = $articleTags.filter('[data-encode="' + _tag + '"]'); + if (_buttons.length === 0) { + return $tagShowAll; + } + return _buttons; + } + function buttonFocus(target) { + if (target) { + target.addClass('focus'); + $lastFocusButton && !$lastFocusButton.is(target) && $lastFocusButton.removeClass('focus'); + $lastFocusButton = target; + } + } + + function tagSelect (tag/*raw tag*/, target) { + var result = {}, $articles; + var i, j, k, _tag; + + for (i = 0; i < sectionArticles.length; i++) { + $articles = sectionArticles[i]; + for (j = 0; j < $articles.length; j++) { + if (tag === '' || tag === undefined) { + result[i] || (result[i] = {}); + result[i][j] = true; + } else { + var tags = $articles.eq(j).data('tags').split(','); + for (k = 0; k < tags.length; k++) { + if (tags[k] === tag) { + result[i] || (result[i] = {}); + result[i][j] = true; break; + } + } + } + } + } + + for (i = 0; i < sectionArticles.length; i++) { + result[i] && $sections.eq(i).removeClass('d-none'); + result[i] || $sections.eq(i).addClass('d-none'); + for (j = 0; j < sectionArticles[i].length; j++) { + if (result[i] && result[i][j]) { + sectionArticles[i].eq(j).removeClass('d-none'); + } else { + sectionArticles[i].eq(j).addClass('d-none'); + } + } + } + + hasInit || ($result.removeClass('d-none'), hasInit = true); + + + if (target) { + buttonFocus(target); + _tag = target.attr('data-encode'); + if (_tag === '' || typeof _tag !== 'string') { + setUrlQuery(); + } else { + setUrlQuery('?tag=' + _tag); + } + } else { + buttonFocus(searchButtonsByTag(tag)); + } + } + + var query = queryString(), _tag = query.tag; + init(); tagSelect(_tag); + $tags.on('click', 'button', function() { + tagSelect($(this).data('encode'), $(this)); + }); + + }); +})(); diff --git a/_includes/scripts/article.js b/_includes/scripts/article.js new file mode 100644 index 0000000..9b18ef5 --- /dev/null +++ b/_includes/scripts/article.js @@ -0,0 +1,24 @@ +(function() { + var SOURCES = window.TEXT_VARIABLES.sources; + window.Lazyload.js(SOURCES.jquery, function() { + $(function() { + var $this ,$scroll; + var $articleContent = $('.js-article-content'); + var hasSidebar = $('.js-page-root').hasClass('layout--page--sidebar'); + var scroll = hasSidebar ? '.js-page-main' : 'html, body'; + $scroll = $(scroll); + + $articleContent.find('.highlight').each(function() { + $this = $(this); + $this.attr('data-lang', $this.find('code').attr('data-lang')); + }); + $articleContent.find('h1[id], h2[id], h3[id], h4[id], h5[id], h6[id]').each(function() { + $this = $(this); + $this.append($('').html('')); + }); + $articleContent.on('click', '.anchor', function() { + $scroll.scrollToAnchor('#' + $(this).parent().attr('id'), 400); + }); + }); + }); +})(); diff --git a/_includes/scripts/aside/affix.js b/_includes/scripts/aside/affix.js new file mode 100644 index 0000000..1db3b8e --- /dev/null +++ b/_includes/scripts/aside/affix.js @@ -0,0 +1,26 @@ +(function() { + var SOURCES = window.TEXT_VARIABLES.sources; + window.Lazyload.js(SOURCES.jquery, function() { + var $window = $(window), $pageFooter = $('.js-page-footer'); + var $pageAside = $('.js-page-aside'); + var affix; + var tocDisabled = false; + var hasSidebar = $('.js-page-root').hasClass('layout--page--sidebar'); + + affix = $pageAside.affix({ + offsetBottom: $pageFooter.outerHeight(), + scrollTarget: hasSidebar ? '.js-page-main' : null, + scroller: hasSidebar ? '.js-page-main' : null, + scroll: hasSidebar ? $('.js-page-main').children() : null, + disabled: tocDisabled + }); + + $window.on('resize', window.throttle(function() { + affix && affix.setOptions({ + disabled: tocDisabled + }); + }, 100)); + + window.pageAsideAffix = affix; + }); +})(); diff --git a/_includes/scripts/aside/toc.js b/_includes/scripts/aside/toc.js new file mode 100644 index 0000000..a19ea95 --- /dev/null +++ b/_includes/scripts/aside/toc.js @@ -0,0 +1,35 @@ +(function() { + var SOURCES = window.TEXT_VARIABLES.sources; + var TOC_SELECTOR = window.TEXT_VARIABLES.site.toc.selectors; + window.Lazyload.js(SOURCES.jquery, function() { + var $window = $(window); + var $articleContent = $('.js-article-content'); + var $tocRoot = $('.js-toc-root'), $col2 = $('.js-col-aside'); + var toc; + var tocDisabled = false; + var hasSidebar = $('.js-page-root').hasClass('layout--page--sidebar'); + var hasToc = $articleContent.find(TOC_SELECTOR).length > 0; + + function disabled() { + return $col2.css('display') === 'none' || !hasToc; + } + + tocDisabled = disabled(); + + toc = $tocRoot.toc({ + selectors: TOC_SELECTOR, + container: $articleContent, + scrollTarget: hasSidebar ? '.js-page-main' : null, + scroller: hasSidebar ? '.js-page-main' : null, + disabled: tocDisabled + }); + + $window.on('resize', window.throttle(function() { + tocDisabled = disabled(); + toc && toc.setOptions({ + disabled: tocDisabled + }); + }, 100)); + + }); +})(); diff --git a/_includes/scripts/common.js b/_includes/scripts/common.js new file mode 100644 index 0000000..09400a2 --- /dev/null +++ b/_includes/scripts/common.js @@ -0,0 +1,7 @@ +(function () { + var $root = document.getElementsByClassName('root')[0]; + if (window.hasEvent('touchstart')) { + $root.dataset.isTouch = true; + document.addEventListener('touchstart', function(){}, false); + } +})(); diff --git a/_includes/scripts/components/lightbox.js b/_includes/scripts/components/lightbox.js new file mode 100644 index 0000000..51689c2 --- /dev/null +++ b/_includes/scripts/components/lightbox.js @@ -0,0 +1,49 @@ +{%- include scripts/utils/imagesLoad.js -%} +(function () { + var SOURCES = window.TEXT_VARIABLES.sources; + window.Lazyload.js(SOURCES.jquery, function() { + var $pageGalleryModal = $('.js-page-gallery-modal'); + var $images = $('.page__content').find('img:not(.lightbox-ignore)'); + window.imagesLoad($images).then(function() { + /* global Gallery */ + var pageGalleryModal = $pageGalleryModal.modal({ onChange: handleModalChange }); + var gallery = null; + var modalVisible = false; + var i, items = [], image, item; + if($images && $images.length > 0) { + for (i = 0; i < $images.length; i++) { + image = $images.eq(i); + if (image.get(0).naturalWidth > 800) { + items.push({ src: image.attr('src'), w: image.get(0).naturalWidth, h: image.get(0).naturalHeight, $el: image}); + } + } + } + + if(items.length > 0) { + gallery = new Gallery('.gallery', items); + gallery.setOptions({ disabled: !modalVisible }); + gallery.init(); + for (i = 0; i < items.length; i++) { + item = items[i]; + item.$el && (item.$el.addClass('popup-image'), item.$el.on('click', (function() { + var index = i; + return function() { + pageGalleryModal.show(); + gallery.setOptions({ initialSlide: index }); + gallery.refresh(true, { animation: false }); + }; + })())); + } + } + + function handleModalChange(visible) { + modalVisible = visible; + gallery && gallery.setOptions({ disabled: !modalVisible }); + } + + $pageGalleryModal.on('click', function() { + pageGalleryModal.hide(); + }); + }); + }); +})(); diff --git a/_includes/scripts/components/search.js b/_includes/scripts/components/search.js new file mode 100644 index 0000000..e1c8c27 --- /dev/null +++ b/_includes/scripts/components/search.js @@ -0,0 +1,86 @@ + +(function () { + var SOURCES = window.TEXT_VARIABLES.sources; + window.Lazyload.js(SOURCES.jquery, function() { + // search panel + var search = (window.search || (window.search = {})); + var useDefaultSearchBox = window.useDefaultSearchBox === undefined ? + true : window.useDefaultSearchBox ; + + var $searchModal = $('.js-page-search-modal'); + var $searchToggle = $('.js-search-toggle'); + var searchModal = $searchModal.modal({ onChange: handleModalChange, hideWhenWindowScroll: true }); + var modalVisible = false; + search.searchModal = searchModal; + + var $searchBox = null; + var $searchInput = null; + var $searchClear = null; + + function getModalVisible() { + return modalVisible; + } + search.getModalVisible = getModalVisible; + + function handleModalChange(visible) { + modalVisible = visible; + if (visible) { + search.onShow && search.onShow(); + useDefaultSearchBox && $searchInput[0] && $searchInput[0].focus(); + } else { + search.onShow && search.onHide(); + useDefaultSearchBox && $searchInput[0] && $searchInput[0].blur(); + setTimeout(function() { + useDefaultSearchBox && ($searchInput.val(''), $searchBox.removeClass('not-empty')); + search.clear && search.clear(); + window.pageAsideAffix && window.pageAsideAffix.refresh(); + }, 400); + } + } + + $searchToggle.on('click', function() { + modalVisible ? searchModal.hide() : searchModal.show(); + }); + // Char Code: 83 S, 191 / + $(window).on('keyup', function(e) { + if (!modalVisible && !window.isFormElement(e.target || e.srcElement) && (e.which === 83 || e.which === 191)) { + modalVisible || searchModal.show(); + } + }); + + if (useDefaultSearchBox) { + $searchBox = $('.js-search-box'); + $searchInput = $searchBox.children('input'); + $searchClear = $searchBox.children('.js-icon-clear'); + search.getSearchInput = function() { + return $searchInput.get(0); + }; + search.getVal = function() { + return $searchInput.val(); + }; + search.setVal = function(val) { + $searchInput.val(val); + }; + + $searchInput.on('focus', function() { + $(this).addClass('focus'); + }); + $searchInput.on('blur', function() { + $(this).removeClass('focus'); + }); + $searchInput.on('input', window.throttle(function() { + var val = $(this).val(); + if (val === '' || typeof val !== 'string') { + search.clear && search.clear(); + } else { + $searchBox.addClass('not-empty'); + search.onInputNotEmpty && search.onInputNotEmpty(val); + } + }, 400)); + $searchClear.on('click', function() { + $searchInput.val(''); $searchBox.removeClass('not-empty'); + search.clear && search.clear(); + }); + } + }); +})(); diff --git a/_includes/scripts/components/sidebar.js b/_includes/scripts/components/sidebar.js new file mode 100644 index 0000000..92c5591 --- /dev/null +++ b/_includes/scripts/components/sidebar.js @@ -0,0 +1,30 @@ +(function() { + var SOURCES = window.TEXT_VARIABLES.sources; + + window.Lazyload.js(SOURCES.jquery, function() { + var $pageMask = $('.js-page-mask'); + var $pageRoot = $('.js-page-root'); + var $sidebarShow = $('.js-sidebar-show'); + var $sidebarHide = $('.js-sidebar-hide'); + + function freeze(e) { + if (e.target === $pageMask[0]) { + e.preventDefault(); + } + } + function stopBodyScrolling(bool) { + if (bool === true) { + window.addEventListener('touchmove', freeze, { passive: false }); + } else { + window.removeEventListener('touchmove', freeze, { passive: false }); + } + } + + $sidebarShow.on('click', function() { + stopBodyScrolling(true); $pageRoot.addClass('show-sidebar'); + }); + $sidebarHide.on('click', function() { + stopBodyScrolling(false); $pageRoot.removeClass('show-sidebar'); + }); + }); +})(); diff --git a/_includes/scripts/home.js b/_includes/scripts/home.js new file mode 100644 index 0000000..91d05b9 --- /dev/null +++ b/_includes/scripts/home.js @@ -0,0 +1,3 @@ +/*(function () { + +})();*/ diff --git a/_includes/scripts/lib/affix.js b/_includes/scripts/lib/affix.js new file mode 100644 index 0000000..779442f --- /dev/null +++ b/_includes/scripts/lib/affix.js @@ -0,0 +1,111 @@ +(function() { + var SOURCES = window.TEXT_VARIABLES.sources; + window.Lazyload.js(SOURCES.jquery, function() { + function affix(options) { + var $root = this, $window = $(window), $scrollTarget, $scroll, + offsetBottom = 0, scrollTarget = window, scroll = window.document, disabled = false, isOverallScroller = true, + rootTop, rootLeft, rootHeight, scrollBottom, rootBottomTop, + hasInit = false, curState; + + function setOptions(options) { + var _options = options || {}; + _options.offsetBottom && (offsetBottom = _options.offsetBottom); + _options.scrollTarget && (scrollTarget = _options.scrollTarget); + _options.scroll && (scroll = _options.scroll); + _options.disabled !== undefined && (disabled = _options.disabled); + $scrollTarget = $(scrollTarget); + isOverallScroller = window.isOverallScroller($scrollTarget[0]); + $scroll = $(scroll); + } + function preCalc() { + top(); + rootHeight = $root.outerHeight(); + rootTop = $root.offset().top + (isOverallScroller ? 0 : $scrollTarget.scrollTop()); + rootLeft = $root.offset().left; + } + function calc(needPreCalc) { + needPreCalc && preCalc(); + scrollBottom = $scroll.outerHeight() - offsetBottom - rootHeight; + rootBottomTop = scrollBottom - rootTop; + } + function top() { + if (curState !== 'top') { + $root.removeClass('fixed').css({ + left: 0, + top: 0 + }); + curState = 'top'; + } + } + function fixed() { + if (curState !== 'fixed') { + $root.addClass('fixed').css({ + left: rootLeft + 'px', + top: 0 + }); + curState = 'fixed'; + } + } + function bottom() { + if (curState !== 'bottom') { + $root.removeClass('fixed').css({ + left: 0, + top: rootBottomTop + 'px' + }); + curState = 'bottom'; + } + } + function setState() { + var scrollTop = $scrollTarget.scrollTop(); + if (scrollTop >= rootTop && scrollTop <= scrollBottom) { + fixed(); + } else if (scrollTop < rootTop) { + top(); + } else { + bottom(); + } + } + function init() { + if(!hasInit) { + var interval, timeout; + calc(true); setState(); + // run calc every 100 millisecond + interval = setInterval(function() { + calc(); + }, 100); + timeout = setTimeout(function() { + clearInterval(interval); + }, 45000); + window.pageLoad.then(function() { + setTimeout(function() { + clearInterval(interval); + clearTimeout(timeout); + }, 3000); + }); + $scrollTarget.on('scroll', function() { + disabled || setState(); + }); + $window.on('resize', function() { + disabled || (calc(true), setState()); + }); + hasInit = true; + } + } + + setOptions(options); + if (!disabled) { + init(); + } + $window.on('resize', window.throttle(function() { + init(); + }, 200)); + return { + setOptions: setOptions, + refresh: function() { + calc(true, { animation: false }); setState(); + } + }; + } + $.fn.affix = affix; + }); +})(); diff --git a/_includes/scripts/lib/gallery.js b/_includes/scripts/lib/gallery.js new file mode 100644 index 0000000..1793f04 --- /dev/null +++ b/_includes/scripts/lib/gallery.js @@ -0,0 +1,192 @@ +(function() { + {%- include scripts/lib/swiper.js -%} + var SOURCES = window.TEXT_VARIABLES.sources; + window.Lazyload.js(SOURCES.jquery, function() { + var template = + ''; + function setState($item, zoom, translate) { + $item.css('transform', 'scale(' + zoom + ') translate(' + translate.x + 'px,' + translate.y + 'px)'); + } + function Gallery(root, items) { + this.$root = $(root); + this.$swiper = null; + this.$swiperWrapper = null; + this.$activeItem = null; + this.$items = []; + this.contentWidth = 0; + this.contentHeight = 0; + this.swiper = null; + this.items = items; + this.disabled = false; + this.curIndex = 0; + this.touchCenter = null; + this.lastTouchCenter = null; + this.zoomRect = null; + this.lastZoomRect = null; + this.lastTranslate = null; + this.translate = null; + this.lastZoom = 1; + this.preZoom = 1; + this.zoom = 1; + } + Gallery.prototype.init = function() { + var i, item, items = this.items, size, self = this, touchstartFingerCount = 0; + this.$root.append(template); + this.$swiper = this.$root.find('.gallery__swiper'); + this.$swiperWrapper = this.$root.find('.swiper__wrapper'); + this.contentWidth = this.$swiperWrapper && this.$swiperWrapper.width(); + this.contentHeight = this.$swiperWrapper && this.$swiperWrapper.height(); + for (i = 0; i < items.length; i++) { + item = items[i]; + size = this._calculateImageSize(item.w, item.h); + this.$items.push($( + '
' + + '' + + '
' + )); + } + this.$swiperWrapper && this.$swiperWrapper.append(this.$items); + this.swiper = this.$swiper && this.$swiper.swiper({ + onChangeEnd: function() { + self._handleChangeEnd.apply(self, Array.prototype.slice.call(arguments)); + } + }); + $(window).on('resize', function() { + if (self.disabled) { return; } + self._resizeImageSize(); + }); + // Char Code: 37 ⬅, 39 ➡ + $(window).on('keyup', function(e) { + if (window.isFormElement(e.target || e.srcElement) || self.disabled) { return; } + if (e.which === 37) { + self.swiper && self.swiper.previous(); + } else if (e.which === 39) { + self.swiper && self.swiper.next(); + } + }); + function getRect(touch0, touch1) { + return { + o: { + x: (touch0.pageX + touch1.pageX) / 2, + y: (touch0.pageY + touch1.pageY) / 2 + }, + w: Math.abs(touch0.pageX - touch1.pageX), + h: Math.abs(touch0.pageY - touch1.pageY) + }; + } + function getTouches(e) { + return e.touches || e; + } + function getTouchesCount(e) { + if (e.touches) { + return e.touches.length; + } else { + return 1; + } + } + this.$swiperWrapper.on('touchstart', function(e) { + var touch0, touch1, rect; + touchstartFingerCount = getTouchesCount(e); + if (touchstartFingerCount > 1) { + touch0 = e.touches[0]; + touch1 = e.touches[1]; + rect = getRect(touch0, touch1); + self.lastZoomRect = { w: rect.w, h: rect.h }; + self.lastTouchCenter = rect.o; + } else { + var touch = getTouches(e)[0]; + self.lastTouchCenter = { x: touch.pageX, y: touch.pageY }; + } + }); + this.$swiperWrapper.on('touchmove', function(e) { + if (touchstartFingerCount === getTouchesCount(e)) { + if (touchstartFingerCount > 1) { + var touch0 = e.touches[0]; + var touch1 = e.touches[1]; + var rect = getRect(touch0, touch1); + self.zoomRect = { w: rect.w, h: rect.h }; + self.touchCenter = rect.o; + self._zoom(); self._translate(); + setState(self.$activeItem, self.zoom, self.translate); + } else { + var touch = getTouches(e)[0]; + self.touchCenter = { x: touch.pageX, y: touch.pageY }; + self._translate(); + setState(self.$activeItem, self.zoom, self.translate); + } + } + }); + this.$swiperWrapper.on('touchend', function(e) { + self.lastZoom = self.zoom; + self.lastTranslate = self.translate; + touchstartFingerCount = 0; + }); + this.$root.on('touchmove', function(e) { + if (self.disabled) { return; } + e.preventDefault(); + }); + }; + + Gallery.prototype._translate = function() { + this.translate = this.touchCenter && this.lastTouchCenter && this.lastTranslate ? { + x: (this.touchCenter.x - this.lastTouchCenter.x) / this.zoom + this.lastTranslate.x, + y: (this.touchCenter.y - this.lastTouchCenter.y) / this.zoom + this.lastTranslate.y + } : { x: 0, y: 0 }; + } + Gallery.prototype._zoom = function() { + this.zoom = (this.zoomRect.w + this.zoomRect.h) / (this.lastZoomRect.w + this.lastZoomRect.h) * this.lastZoom; + this.zoom > 1 ? this.$activeItem.addClass('zoom') : this.$activeItem.removeClass('zoom'); + this.preZoom = this.zoom; + } + + Gallery.prototype._calculateImageSize = function(w, h) { + var scale = 1; + if (this.contentWidth > 0 && this.contentHeight > 0 && w > 0 && h > 0) { + scale = Math.min( + Math.min(w, this.contentWidth) / w, + Math.min(h, this.contentHeight) / h); + } + return { w: Math.floor(w * scale), h: Math.floor(h * scale) }; + }; + + Gallery.prototype._resizeImageSize = function() { + var i, $item, $items = this.$items, item, size; + this.contentWidth = this.$swiperWrapper && this.$swiperWrapper.width(); + this.contentHeight = this.$swiperWrapper && this.$swiperWrapper.height(); + if ($items.length < 1) { return; } + for (i = 0; i < $items.length; i++) { + item = this.items[i], $item = $items[i]; + size = this._calculateImageSize(item.w, item.h); + item.width = size.w; item.height = size.h; + $item && $item.find('img').css({ width: size.w, height: size.h }); + } + }; + Gallery.prototype._handleChangeEnd = function(index, $dom, preIndex, $preDom) { + this.curIndex = index; + this.lastZoomRect = null; this.lastZoomRect = null; + this.lastTranslate = this.translate = { x: 0, y:0 }; + this.lastZoom = this.preZoom = this.zoom = 1; + this.$activeItem = $dom.find('.gallery-item__content'); + setState($preDom.find('.gallery-item__content'), this.zoom, this.translate); + }; + + Gallery.prototype.refresh = function() { + this.swiper && this.swiper.refresh(); + this._resizeImageSize(); + }; + Gallery.prototype.setOptions = function(options) { + this.disabled = options.disabled; + this.swiper && this.swiper.setOptions(options); + }; + window.Gallery = Gallery; + }); +})(); \ No newline at end of file diff --git a/_includes/scripts/lib/lazyload.js b/_includes/scripts/lib/lazyload.js new file mode 100644 index 0000000..9911535 --- /dev/null +++ b/_includes/scripts/lib/lazyload.js @@ -0,0 +1,143 @@ +(function() { + var Set = (function() { + var add = function(item) { + var i, data = this._data; + for (i = 0; i < data.length; i++) { + if (data[i] === item) { + return; + } + } + this.size ++; + data.push(item); + return data; + }; + + var Set = function(data) { + this.size = 0; + this._data = []; + var i; + if (data.length > 0) { + for (i = 0; i < data.length; i++) { + add.call(this, data[i]); + } + } + }; + Set.prototype.add = add; + Set.prototype.get = function(index) { return this._data[index]; }; + Set.prototype.has = function(item) { + var i, data = this._data; + for (i = 0; i < data.length; i++) { + if (this.get(i) === item) { + return true; + } + } + return false; + }; + Set.prototype.is = function(map) { + if (map._data.length !== this._data.length) { return false; } + var i, j, flag, tData = this._data, mData = map._data; + for (i = 0; i < tData.length; i++) { + for (flag = false, j = 0; j < mData.length; j++) { + if (tData[i] === mData[j]) { + flag = true; + break; + } + } + if (!flag) { return false; } + } + return true; + }; + Set.prototype.values = function() { + return this._data; + }; + return Set; + })(); + + window.Lazyload = (function(doc) { + var queue = {js: [], css: []}, sources = {js: {}, css: {}}, context = this; + var createNode = function(name, attrs) { + var node = doc.createElement(name), attr; + for (attr in attrs) { + if (attrs.hasOwnProperty(attr)) { + node.setAttribute(attr, attrs[attr]); + } + } + return node; + }; + var end = function(type, url) { + var s, q, qi, cbs, i, j, cur, val, flag; + if (type === 'js' || type ==='css') { + s = sources[type], q = queue[type]; + s[url] = true; + for (i = 0; i < q.length; i++) { + cur = q[i]; + if (cur.urls.has(url)) { + qi = cur, val = qi.urls.values(); + qi && (cbs = qi.callbacks); + for (flag = true, j = 0; j < val.length; j++) { + cur = val[j]; + if (!s[cur]) { + flag = false; + } + } + if (flag && cbs && cbs.length > 0) { + for (j = 0; j < cbs.length; j++) { + cbs[j].call(context); + } + qi.load = true; + } + } + } + } + }; + var load = function(type, urls, callback) { + var s, q, qi, node, i, cur, + _urls = typeof urls === 'string' ? new Set([urls]) : new Set(urls), val, url; + if (type === 'js' || type ==='css') { + s = sources[type], q = queue[type]; + for (i = 0; i < q.length; i++) { + cur = q[i]; + if (_urls.is(cur.urls)) { + qi = cur; + break; + } + } + val = _urls.values(); + if (qi) { + callback && (qi.load || qi.callbacks.push(callback)); + callback && (qi.load && callback()); + } else { + q.push({ + urls: _urls, + callbacks: callback ? [callback] : [], + load: false + }); + for (i = 0; i < val.length; i++) { + node = null, url = val[i]; + if (s[url] === undefined) { + (type === 'js' ) && (node = createNode('script', { src: url })); + (type === 'css') && (node = createNode('link', { rel: 'stylesheet', href: url })); + if (node) { + node.onload = (function(type, url) { + return function() { + end(type, url); + }; + })(type, url); + (doc.head || doc.body).appendChild(node); + s[url] = false; + } + } + } + } + } + }; + return { + js: function(url, callback) { + load('js', url, callback); + }, + css: function(url, callback) { + load('css', url, callback); + } + }; + })(this.document); +})(); diff --git a/_includes/scripts/lib/modal.js b/_includes/scripts/lib/modal.js new file mode 100644 index 0000000..cb5d188 --- /dev/null +++ b/_includes/scripts/lib/modal.js @@ -0,0 +1,64 @@ +(function() { + var SOURCES = window.TEXT_VARIABLES.sources; + window.Lazyload.js(SOURCES.jquery, function() { + var $body = $('body'), $window = $(window); + var $pageRoot = $('.js-page-root'), $pageMain = $('.js-page-main'); + var activeCount = 0; + function modal(options) { + var $root = this, visible, onChange, hideWhenWindowScroll = false; + var scrollTop; + function setOptions(options) { + var _options = options || {}; + visible = _options.initialVisible === undefined ? false : show; + onChange = _options.onChange; + hideWhenWindowScroll = _options.hideWhenWindowScroll; + } + function init() { + setState(visible); + } + function setState(isShow) { + if (isShow === visible) { + return; + } + visible = isShow; + if (visible) { + activeCount++; + scrollTop = $(window).scrollTop() || $pageMain.scrollTop(); + $root.addClass('modal--show'); + $pageMain.scrollTop(scrollTop); + activeCount === 1 && ($pageRoot.addClass('show-modal'), $body.addClass('of-hidden')); + hideWhenWindowScroll && window.hasEvent('touchstart') && $window.on('scroll', hide); + $window.on('keyup', handleKeyup); + } else { + activeCount > 0 && activeCount--; + $root.removeClass('modal--show'); + $window.scrollTop(scrollTop); + activeCount === 0 && ($pageRoot.removeClass('show-modal'), $body.removeClass('of-hidden')); + hideWhenWindowScroll && window.hasEvent('touchstart') && $window.off('scroll', hide); + $window.off('keyup', handleKeyup); + } + onChange && onChange(visible); + } + function show() { + setState(true); + } + function hide() { + setState(false); + } + function handleKeyup(e) { + // Char Code: 27 ESC + if (e.which === 27) { + hide(); + } + } + setOptions(options); + init(); + return { + show: show, + hide: hide, + $el: $root + }; + } + $.fn.modal = modal; + }); +})(); diff --git a/_includes/scripts/lib/scroll-to.js b/_includes/scripts/lib/scroll-to.js new file mode 100644 index 0000000..e5a0ea2 --- /dev/null +++ b/_includes/scripts/lib/scroll-to.js @@ -0,0 +1,13 @@ +(function() { + var SOURCES = window.TEXT_VARIABLES.sources; + window.Lazyload.js(SOURCES.jquery, function() { + function scrollToAnchor(anchor, duration, callback) { + var $root = this; + $root.animate({ scrollTop: $(anchor).position().top }, duration, function() { + window.history.replaceState(null, '', window.location.href.split('#')[0] + anchor); + callback && callback(); + }); + } + $.fn.scrollToAnchor = scrollToAnchor; + }); +})(); diff --git a/_includes/scripts/lib/swiper.js b/_includes/scripts/lib/swiper.js new file mode 100644 index 0000000..3d06419 --- /dev/null +++ b/_includes/scripts/lib/swiper.js @@ -0,0 +1,203 @@ +(function() { + var SOURCES = window.TEXT_VARIABLES.sources; + window.Lazyload.js(SOURCES.jquery, function() { + function swiper(options) { + var $window = $(window), $root = this, $swiperWrapper, $swiperSlides, $swiperButtonPrev, $swiperButtonNext, + initialSlide, animation, onChange, onChangeEnd, + rootWidth, count, preIndex, curIndex, translateX, CRITICAL_ANGLE = Math.PI / 3; + + function setOptions(options) { + var _options = options || {}; + initialSlide = _options.initialSlide || 0; + animation = _options.animation === undefined && true; + onChange = onChange || _options.onChange; + onChangeEnd = onChangeEnd || _options.onChangeEnd; + } + + function init() { + $swiperWrapper = $root.find('.swiper__wrapper'); + $swiperSlides = $root.find('.swiper__slide'); + $swiperButtonPrev = $root.find('.swiper__button--prev'); + $swiperButtonNext = $root.find('.swiper__button--next'); + animation && $swiperWrapper.addClass('swiper__wrapper--animation'); + calc(true); + } + + function preCalc() { + rootWidth = $root.width(); + count = $swiperWrapper.children('.swiper__slide').length; + if (count < 2) { + $swiperButtonPrev.addClass('d-none'); + $swiperButtonNext.addClass('d-none'); + } + curIndex = initialSlide || 0; + translateX = getTranslateXFromCurIndex(); + } + + var calc = (function() { + var preAnimation, $swiperSlide, $preSwiperSlide; + return function (needPreCalc, params) { + needPreCalc && preCalc(); + var _animation = (params && params.animation !== undefined) ? params.animation : animation; + if (preAnimation === undefined || preAnimation !== _animation) { + preAnimation = _animation ? $swiperWrapper.addClass('swiper__wrapper--animation') : + $swiperWrapper.removeClass('swiper__wrapper--animation'); + } + if (preIndex !== curIndex) { + ($preSwiperSlide = $swiperSlides.eq(preIndex)).removeClass('active'); + ($swiperSlide = $swiperSlides.eq(curIndex)).addClass('active'); + onChange && onChange(curIndex, $swiperSlides.eq(curIndex), $swiperSlide, $preSwiperSlide); + if (onChangeEnd) { + if (_animation) { + setTimeout(function() { + onChangeEnd(curIndex, $swiperSlides.eq(curIndex), $swiperSlide, $preSwiperSlide); + }, 400); + } else { + onChangeEnd(curIndex, $swiperSlides.eq(curIndex), $swiperSlide, $preSwiperSlide); + } + } + preIndex = curIndex; + } + $swiperWrapper.css('transform', 'translate(' + translateX + 'px, 0)'); + if (count > 1) { + if (curIndex <= 0) { + $swiperButtonPrev.addClass('disabled'); + } else { + $swiperButtonPrev.removeClass('disabled'); + } + if (curIndex >= count - 1) { + $swiperButtonNext.addClass('disabled'); + } else { + $swiperButtonNext.removeClass('disabled'); + } + } + }; + })(); + + function getTranslateXFromCurIndex() { + return curIndex <= 0 ? 0 : - rootWidth * curIndex; + } + + function moveToIndex(index ,params) { + preIndex = curIndex; + curIndex = index; + translateX = getTranslateXFromCurIndex(); + calc(false, params); + } + + function move(type) { + var nextIndex = curIndex, unstableTranslateX; + if (type === 'prev') { + nextIndex > 0 && nextIndex--; + } else if (type === 'next') { + nextIndex < count - 1 && nextIndex++; + } + if (type === 'cur') { + moveToIndex(curIndex, { animation: true }); + return; + } + unstableTranslateX = translateX % rootWidth !== 0; + if (nextIndex !== curIndex || unstableTranslateX) { + unstableTranslateX ? moveToIndex(nextIndex, { animation: true }) : moveToIndex(nextIndex); + } + } + + setOptions(options); + init(); + preIndex = curIndex; + + $swiperButtonPrev.on('click', function(e) { + e.stopPropagation(); + move('prev'); + }); + $swiperButtonNext.on('click', function(e) { + e.stopPropagation(); + move('next'); + }); + $window.on('resize', function() { + calc(true, { animation: false }); + }); + + (function() { + var pageX, pageY, velocityX, preTranslateX = translateX, timeStamp, touching; + function handleTouchstart(e) { + var point = e.touches ? e.touches[0] : e; + pageX = point.pageX; + pageY = point.pageY; + velocityX = 0; + preTranslateX = translateX; + } + function handleTouchmove(e) { + if (e.touches && e.touches.length > 1) { + return; + } + var point = e.touches ? e.touches[0] : e; + var deltaX = point.pageX - pageX; + var deltaY = point.pageY - pageY; + velocityX = deltaX / (e.timeStamp - timeStamp); + timeStamp = e.timeStamp; + if (e.cancelable && Math.abs(Math.atan(deltaY / deltaX)) < CRITICAL_ANGLE) { + touching = true; + translateX += deltaX; + calc(false, { animation: false }); + } + pageX = point.pageX; + pageY = point.pageY; + } + function handleTouchend() { + touching = false; + var deltaX = translateX - preTranslateX; + var distance = deltaX + velocityX * rootWidth; + if (Math.abs(distance) > rootWidth / 2) { + distance > 0 ? move('prev') : move('next'); + } else { + move('cur'); + } + } + $swiperWrapper.on('touchstart', handleTouchstart); + $swiperWrapper.on('touchmove', handleTouchmove); + $swiperWrapper.on('touchend', handleTouchend); + $swiperWrapper.on('touchcancel', handleTouchend); + + (function() { + var pressing = false, moved = false; + $swiperWrapper.on('mousedown', function(e) { + pressing = true; handleTouchstart(e); + }); + $swiperWrapper.on('mousemove', function(e) { + pressing && (e.preventDefault(), moved = true, handleTouchmove(e)); + }); + $swiperWrapper.on('mouseup', function(e) { + pressing && (pressing = false, handleTouchend(e)); + }); + $swiperWrapper.on('mouseleave', function(e) { + pressing && (pressing = false, handleTouchend(e)); + }); + $swiperWrapper.on('click', function(e) { + moved && (e.stopPropagation(), moved = false); + }); + })(); + + $root.on('touchmove', function(e) { + if (e.cancelable & touching) { + e.preventDefault(); + } + }); + })(); + + return { + setOptions: setOptions, + previous: function(){ + move('prev'); + }, + next: function(){ + move('next'); + }, + refresh: function() { + calc(true, { animation: false }); + } + }; + } + $.fn.swiper = swiper; + }); +})(); diff --git a/_includes/scripts/lib/throttle.js b/_includes/scripts/lib/throttle.js new file mode 100644 index 0000000..2add23c --- /dev/null +++ b/_includes/scripts/lib/throttle.js @@ -0,0 +1,28 @@ +(function() { + window.throttle = function(func, wait) { + var args, result, thisArg, timeoutId, lastCalled = 0; + + function trailingCall() { + lastCalled = new Date; + timeoutId = null; + result = func.apply(thisArg, args); + } + return function() { + var now = new Date, + remaining = wait - (now - lastCalled); + + args = arguments; + thisArg = this; + + if (remaining <= 0) { + clearTimeout(timeoutId); + timeoutId = null; + lastCalled = now; + result = func.apply(thisArg, args); + } else if (!timeoutId) { + timeoutId = setTimeout(trailingCall, remaining); + } + return result; + }; + }; +})(); diff --git a/_includes/scripts/lib/toc.js b/_includes/scripts/lib/toc.js new file mode 100644 index 0000000..fb43857 --- /dev/null +++ b/_includes/scripts/lib/toc.js @@ -0,0 +1,107 @@ +(function() { + var SOURCES = window.TEXT_VARIABLES.sources; + window.Lazyload.js(SOURCES.jquery, function() { + function toc(options) { + var $root = this, $window = $(window), $scrollTarget, $scroller, $tocUl = $('
    '), $tocLi, $headings, $activeLast, $activeCur, + selectors = 'h1,h2,h3', container = 'body', scrollTarget = window, scroller = 'html, body', disabled = false, + headingsPos, scrolling = false, hasRendered = false, hasInit = false; + + function setOptions(options) { + var _options = options || {}; + _options.selectors && (selectors = _options.selectors); + _options.container && (container = _options.container); + _options.scrollTarget && (scrollTarget = _options.scrollTarget); + _options.scroller && (scroller = _options.scroller); + _options.disabled !== undefined && (disabled = _options.disabled); + $headings = $(container).find(selectors).filter('[id]'); + $scrollTarget = $(scrollTarget); + $scroller = $(scroller); + } + function calc() { + headingsPos = []; + $headings.each(function() { + headingsPos.push(Math.floor($(this).position().top)); + }); + } + function setState(element, disabled) { + var scrollTop = $scrollTarget.scrollTop(), i; + if (disabled || !headingsPos || headingsPos.length < 1) { return; } + if (element) { + $activeCur = element; + } else { + for (i = 0; i < headingsPos.length; i++) { + if (scrollTop >= headingsPos[i]) { + $activeCur = $tocLi.eq(i); + } else { + $activeCur || ($activeCur = $tocLi.eq(i)); + break; + } + } + } + $activeLast && $activeLast.removeClass('active'); + ($activeLast = $activeCur).addClass('active'); + } + function render() { + if(!hasRendered) { + $root.append($tocUl); + $headings.each(function() { + var $this = $(this); + $tocUl.append($('
  • ').addClass('toc-' + $this.prop('tagName').toLowerCase()) + .append($('').text($this.text()).attr('href', '#' + $this.prop('id')))); + }); + $tocLi = $tocUl.children('li'); + $tocUl.on('click', 'a', function(e) { + e.preventDefault(); + var $this = $(this); + scrolling = true; + setState($this.parent()); + $scroller.scrollToAnchor($this.attr('href'), 400, function() { + scrolling = false; + }); + }); + } + hasRendered = true; + } + function init() { + var interval, timeout; + if(!hasInit) { + render(); calc(); setState(null, scrolling); + // run calc every 100 millisecond + interval = setInterval(function() { + calc(); + }, 100); + timeout = setTimeout(function() { + clearInterval(interval); + }, 45000); + window.pageLoad.then(function() { + setTimeout(function() { + clearInterval(interval); + clearTimeout(timeout); + }, 3000); + }); + $scrollTarget.on('scroll', function() { + disabled || setState(null, scrolling); + }); + $window.on('resize', window.throttle(function() { + if (!disabled) { + render(); calc(); setState(null, scrolling); + } + }, 100)); + } + hasInit = true; + } + + setOptions(options); + if (!disabled) { + init(); + } + $window.on('resize', window.throttle(function() { + init(); + }, 200)); + return { + setOptions: setOptions + }; + } + $.fn.toc = toc; + }); +})(); diff --git a/_includes/scripts/page.js b/_includes/scripts/page.js new file mode 100644 index 0000000..91d05b9 --- /dev/null +++ b/_includes/scripts/page.js @@ -0,0 +1,3 @@ +/*(function () { + +})();*/ diff --git a/_includes/scripts/utils/imagesLoad.js b/_includes/scripts/utils/imagesLoad.js new file mode 100644 index 0000000..63a6bdf --- /dev/null +++ b/_includes/scripts/utils/imagesLoad.js @@ -0,0 +1,28 @@ +(function() { + window.imagesLoad = function(images) { + images = images || document.getElementsByTagName('img'); + var imagesCount = images.length, loadedCount = 0, image; + var i, j, loaded = false, cbs = []; + imagesCount < 1 && (loaded = true); + for (i = 0; i < imagesCount; i++) { + image = images[i]; + image.complete ? handleImageLoad() : image.addEventListener('load', handleImageLoad); + } + function handleImageLoad() { + loadedCount++; + if (loadedCount === imagesCount) { + loaded = true; + if (cbs.length > 0) { + for (j = 0; j < cbs.length; j++) { + cbs[j](); + } + } + } + } + return { + then: function(cb) { + cb && (loaded ? cb() : (cbs.push(cb))); + } + }; + }; +})(); diff --git a/_includes/scripts/utils/utils.js b/_includes/scripts/utils/utils.js new file mode 100644 index 0000000..e7bce45 --- /dev/null +++ b/_includes/scripts/utils/utils.js @@ -0,0 +1,39 @@ +(function() { + window.isArray = function(val) { + return Object.prototype.toString.call(val) === '[object Array]'; + }; + window.isString = function(val) { + return typeof val === 'string'; + }; + + window.hasEvent = function(event) { + return 'on'.concat(event) in window.document; + }; + + window.isOverallScroller = function(node) { + return node === document.documentElement || node === document.body || node === window; + }; + + window.isFormElement = function(node) { + var tagName = node.tagName; + return tagName === 'INPUT' || tagName === 'SELECT' || tagName === 'TEXTAREA'; + }; + + window.pageLoad = (function () { + var loaded = false, cbs = []; + window.addEventListener('load', function () { + var i; + loaded = true; + if (cbs.length > 0) { + for (i = 0; i < cbs.length; i++) { + cbs[i](); + } + } + }); + return { + then: function(cb) { + cb && (loaded ? cb() : (cbs.push(cb))); + } + }; + })(); +})(); diff --git a/_includes/scripts/variables.html b/_includes/scripts/variables.html new file mode 100644 index 0000000..0b04821 --- /dev/null +++ b/_includes/scripts/variables.html @@ -0,0 +1,33 @@ +{%- include snippets/get-sources.html -%} +{%- assign _sources = __return -%} + +{%- include snippets/get-nav-url.html path="/assets/search.js" -%} +{%- assign _paths_search_js = __return -%} + + diff --git a/_includes/search-providers/custom/search-script.js b/_includes/search-providers/custom/search-script.js new file mode 100644 index 0000000..3afbb60 --- /dev/null +++ b/_includes/search-providers/custom/search-script.js @@ -0,0 +1,433 @@ +/*! + * Simple-Jekyll-Search + * Copyright 2015-2020, Christian Fei + * Licensed under the MIT License. + */ + +(function(){ +'use strict' + +var _$Templater_7 = { + compile: compile, + setOptions: setOptions +} + +const options = {} +options.pattern = /\{(.*?)\}/g +options.template = '' +options.middleware = function () {} + +function setOptions (_options) { + options.pattern = _options.pattern || options.pattern + options.template = _options.template || options.template + if (typeof _options.middleware === 'function') { + options.middleware = _options.middleware + } +} + +function compile (data) { + return options.template.replace(options.pattern, function (match, prop) { + const value = options.middleware(prop, data[prop], options.template) + if (typeof value !== 'undefined') { + return value + } + return data[prop] || match + }) +} + +'use strict'; + +function fuzzysearch (needle, haystack) { + var tlen = haystack.length; + var qlen = needle.length; + if (qlen > tlen) { + return false; + } + if (qlen === tlen) { + return needle === haystack; + } + outer: for (var i = 0, j = 0; i < qlen; i++) { + var nch = needle.charCodeAt(i); + while (j < tlen) { + if (haystack.charCodeAt(j++) === nch) { + continue outer; + } + } + return false; + } + return true; +} + +var _$fuzzysearch_1 = fuzzysearch; + +'use strict' + +/* removed: const _$fuzzysearch_1 = require('fuzzysearch') */; + +var _$FuzzySearchStrategy_5 = new FuzzySearchStrategy() + +function FuzzySearchStrategy () { + this.matches = function (string, crit) { + return _$fuzzysearch_1(crit.toLowerCase(), string.toLowerCase()) + } +} + +'use strict' + +var _$LiteralSearchStrategy_6 = new LiteralSearchStrategy() + +function LiteralSearchStrategy () { + this.matches = function (str, crit) { + if (!str) return false + + str = str.trim().toLowerCase() + crit = crit.trim().toLowerCase() + + return crit.split(' ').filter(function (word) { + return str.indexOf(word) >= 0 + }).length === crit.split(' ').length + } +} + +'use strict' + +var _$Repository_4 = { + put: put, + clear: clear, + search: search, + setOptions: __setOptions_4 +} + +/* removed: const _$FuzzySearchStrategy_5 = require('./SearchStrategies/FuzzySearchStrategy') */; +/* removed: const _$LiteralSearchStrategy_6 = require('./SearchStrategies/LiteralSearchStrategy') */; + +function NoSort () { + return 0 +} + +const data = [] +let opt = {} + +opt.fuzzy = false +opt.limit = 10 +opt.searchStrategy = opt.fuzzy ? _$FuzzySearchStrategy_5 : _$LiteralSearchStrategy_6 +opt.sort = NoSort +opt.exclude = [] + +function put (data) { + if (isObject(data)) { + return addObject(data) + } + if (isArray(data)) { + return addArray(data) + } + return undefined +} +function clear () { + data.length = 0 + return data +} + +function isObject (obj) { + return Boolean(obj) && Object.prototype.toString.call(obj) === '[object Object]' +} + +function isArray (obj) { + return Boolean(obj) && Object.prototype.toString.call(obj) === '[object Array]' +} + +function addObject (_data) { + data.push(_data) + return data +} + +function addArray (_data) { + const added = [] + clear() + for (let i = 0, len = _data.length; i < len; i++) { + if (isObject(_data[i])) { + added.push(addObject(_data[i])) + } + } + return added +} + +function search (crit) { + if (!crit) { + return [] + } + return findMatches(data, crit, opt.searchStrategy, opt).sort(opt.sort) +} + +function __setOptions_4 (_opt) { + opt = _opt || {} + + opt.fuzzy = _opt.fuzzy || false + opt.limit = _opt.limit || 10 + opt.searchStrategy = _opt.fuzzy ? _$FuzzySearchStrategy_5 : _$LiteralSearchStrategy_6 + opt.sort = _opt.sort || NoSort + opt.exclude = _opt.exclude || [] +} + +function findMatches (data, crit, strategy, opt) { + const matches = [] + for (let i = 0; i < data.length && matches.length < opt.limit; i++) { + const match = findMatchesInObject(data[i], crit, strategy, opt) + if (match) { + matches.push(match) + } + } + return matches +} + +function findMatchesInObject (obj, crit, strategy, opt) { + for (const key in obj) { + if (!isExcluded(obj[key], opt.exclude) && strategy.matches(obj[key], crit)) { + return obj + } + } +} + +function isExcluded (term, excludedTerms) { + for (let i = 0, len = excludedTerms.length; i < len; i++) { + const excludedTerm = excludedTerms[i] + if (new RegExp(excludedTerm).test(term)) { + return true + } + } + return false +} + +/* globals ActiveXObject:false */ + +'use strict' + +var _$JSONLoader_2 = { + load: load +} + +function load (location, callback) { + const xhr = getXHR() + xhr.open('GET', location, true) + xhr.onreadystatechange = createStateChangeListener(xhr, callback) + xhr.send() +} + +function createStateChangeListener (xhr, callback) { + return function () { + if (xhr.readyState === 4 && xhr.status === 200) { + try { + callback(null, JSON.parse(xhr.responseText)) + } catch (err) { + callback(err, null) + } + } + } +} + +function getXHR () { + return window.XMLHttpRequest ? new window.XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP') +} + +'use strict' + +var _$OptionsValidator_3 = function OptionsValidator (params) { + if (!validateParams(params)) { + throw new Error('-- OptionsValidator: required options missing') + } + + if (!(this instanceof OptionsValidator)) { + return new OptionsValidator(params) + } + + const requiredOptions = params.required + + this.getRequiredOptions = function () { + return requiredOptions + } + + this.validate = function (parameters) { + const errors = [] + requiredOptions.forEach(function (requiredOptionName) { + if (typeof parameters[requiredOptionName] === 'undefined') { + errors.push(requiredOptionName) + } + }) + return errors + } + + function validateParams (params) { + if (!params) { + return false + } + return typeof params.required !== 'undefined' && params.required instanceof Array + } +} + +'use strict' + +var _$utils_9 = { + merge: merge, + isJSON: isJSON +} + +function merge (defaultParams, mergeParams) { + const mergedOptions = {} + for (const option in defaultParams) { + mergedOptions[option] = defaultParams[option] + if (typeof mergeParams[option] !== 'undefined') { + mergedOptions[option] = mergeParams[option] + } + } + return mergedOptions +} + +function isJSON (json) { + try { + if (json instanceof Object && JSON.parse(JSON.stringify(json))) { + return true + } + return false + } catch (err) { + return false + } +} + +var _$src_8 = {}; +(function (window) { + 'use strict' + + let options = { + searchInput: null, + resultsContainer: null, + json: [], + success: Function.prototype, + searchResultTemplate: '
  • {title}
  • ', + templateMiddleware: Function.prototype, + sortMiddleware: function () { + return 0 + }, + noResultsText: 'No results found', + limit: 10, + fuzzy: false, + debounceTime: null, + exclude: [] + } + + let debounceTimerHandle + const debounce = function (func, delayMillis) { + if (delayMillis) { + clearTimeout(debounceTimerHandle) + debounceTimerHandle = setTimeout(func, delayMillis) + } else { + func.call() + } + } + + const requiredOptions = ['searchInput', 'resultsContainer', 'json'] + + /* removed: const _$Templater_7 = require('./Templater') */; + /* removed: const _$Repository_4 = require('./Repository') */; + /* removed: const _$JSONLoader_2 = require('./JSONLoader') */; + const optionsValidator = _$OptionsValidator_3({ + required: requiredOptions + }) + /* removed: const _$utils_9 = require('./utils') */; + + window.SimpleJekyllSearch = function (_options) { + const errors = optionsValidator.validate(_options) + if (errors.length > 0) { + throwError('You must specify the following required options: ' + requiredOptions) + } + + options = _$utils_9.merge(options, _options) + + _$Templater_7.setOptions({ + template: options.searchResultTemplate, + middleware: options.templateMiddleware + }) + + _$Repository_4.setOptions({ + fuzzy: options.fuzzy, + limit: options.limit, + sort: options.sortMiddleware, + exclude: options.exclude + }) + + if (_$utils_9.isJSON(options.json)) { + initWithJSON(options.json) + } else { + initWithURL(options.json) + } + + const rv = { + search: search + } + + typeof options.success === 'function' && options.success.call(rv) + return rv + } + + function initWithJSON (json) { + _$Repository_4.put(json) + registerInput() + } + + function initWithURL (url) { + _$JSONLoader_2.load(url, function (err, json) { + if (err) { + throwError('failed to get JSON (' + url + ')') + } + initWithJSON(json) + }) + } + + function emptyResultsContainer () { + options.resultsContainer.innerHTML = '' + } + + function appendToResultsContainer (text) { + options.resultsContainer.innerHTML += text + } + + function registerInput () { + options.searchInput.addEventListener('input', function (e) { + if (isWhitelistedKey(e.which)) { + emptyResultsContainer() + debounce(function () { search(e.target.value) }, options.debounceTime) + } + }) + } + + function search (query) { + if (isValidQuery(query)) { + emptyResultsContainer() + render(_$Repository_4.search(query), query) + } + } + + function render (results, query) { + const len = results.length + if (len === 0) { + return appendToResultsContainer(options.noResultsText) + } + for (let i = 0; i < len; i++) { + results[i].query = query + appendToResultsContainer(_$Templater_7.compile(results[i])) + } + } + + function isValidQuery (query) { + return query && query.length > 0 + } + + function isWhitelistedKey (key) { + return [13, 16, 20, 37, 38, 39, 40, 91].indexOf(key) === -1 + } + + function throwError (message) { + throw new Error('SimpleJekyllSearch --- ' + message) + } +})(window) + +}()); diff --git a/_includes/search-providers/custom/search.html b/_includes/search-providers/custom/search.html new file mode 100644 index 0000000..efd4c67 --- /dev/null +++ b/_includes/search-providers/custom/search.html @@ -0,0 +1,31 @@ + + + + + + + diff --git a/_includes/search-providers/default/search-data.js b/_includes/search-providers/default/search-data.js new file mode 100644 index 0000000..46aa4d9 --- /dev/null +++ b/_includes/search-providers/default/search-data.js @@ -0,0 +1,17 @@ +window.TEXT_SEARCH_DATA={ + {%- for _collection in site.collections -%} + {%- unless forloop.first -%},{%- endunless -%} + '{{ _collection.label }}':[ + {%- for _article in _collection.docs -%} + {%- unless forloop.first -%},{%- endunless -%} + {'title':{{ _article.title | jsonify }}, + {%- include snippets/prepend-baseurl.html path=_article.url -%} + {%- assign _url = __return -%} + 'url':{{ _url | jsonify }}, + 'create':{{ _article.create | jsonify }}, + 'date':{{ _article.modif | jsonify }} + } + {%- endfor -%} + ] + {%- endfor -%} +}; diff --git a/_includes/search-providers/default/search.html b/_includes/search-providers/default/search.html new file mode 100644 index 0000000..a21512c --- /dev/null +++ b/_includes/search-providers/default/search.html @@ -0,0 +1,18 @@ + + diff --git a/_includes/search-providers/default/search.js b/_includes/search-providers/default/search.js new file mode 100644 index 0000000..b01de90 --- /dev/null +++ b/_includes/search-providers/default/search.js @@ -0,0 +1,112 @@ +var SOURCES = window.TEXT_VARIABLES.sources; +var PAHTS = window.TEXT_VARIABLES.paths; +window.Lazyload.js([SOURCES.jquery, PAHTS.search_js], function() { + var search = (window.search || (window.search = {})); + var searchData = window.TEXT_SEARCH_DATA || {}; + + function memorize(f) { + var cache = {}; + return function () { + var key = Array.prototype.join.call(arguments, ','); + if (key in cache) return cache[key]; + else return cache[key] = f.apply(this, arguments); + }; + } + + /// search + function searchByQuery(query) { + var i, j, key, keys, cur, _title, result = {}; + keys = Object.keys(searchData); + for (i = 0; i < keys.length; i++) { + key = keys[i]; + for (j = 0; j < searchData[key].length; j++) { + cur = searchData[key][j], _title = cur.title; + if ((result[key] === undefined || result[key] && result[key].length < 4 ) + && _title.toLowerCase().indexOf(query.toLowerCase()) >= 0) { + if (result[key] === undefined) { + result[key] = []; + } + result[key].push(cur); + } + } + } + return result; + } + + var renderHeader = memorize(function(header) { + return $('

    ' + header + '

    '); + }); + + var renderItem = function(index, title, url) { + return $('
  • ' + '___' + title + '
  • '); + }; + + function render(data) { + if (!data) { return null; } + var $root = $('
      '), i, j, key, keys, cur, itemIndex = 0; + keys = Object.keys(data); + for (i = 0; i < keys.length; i++) { + key = keys[i]; + $root.append(renderHeader(key)); + for (j = 0; j < data[key].length; j++) { + cur = data[key][j]; + $root.append(renderItem(itemIndex++, cur.title, cur.url)); + } + } + return $root; + } + + // search box + var $result = $('.js-search-result'), $resultItems; + var lastActiveIndex, activeIndex; + + function clear() { + $result.html(null); + $resultItems = $('.search-result__item'); activeIndex = 0; + } + function onInputNotEmpty(val) { + $result.html(render(searchByQuery(val))); + $resultItems = $('.search-result__item'); activeIndex = 0; + $resultItems.eq(0).addClass('active'); + } + + search.clear = clear; + search.onInputNotEmpty = onInputNotEmpty; + + function updateResultItems() { + lastActiveIndex >= 0 && $resultItems.eq(lastActiveIndex).removeClass('active'); + activeIndex >= 0 && $resultItems.eq(activeIndex).addClass('active'); + } + + function moveActiveIndex(direction) { + var itemsCount = $resultItems ? $resultItems.length : 0; + if (itemsCount > 1) { + lastActiveIndex = activeIndex; + if (direction === 'up') { + activeIndex = (activeIndex - 1 + itemsCount) % itemsCount; + } else if (direction === 'down') { + activeIndex = (activeIndex + 1 + itemsCount) % itemsCount; + } + updateResultItems(); + } + } + + // Char Code: 13 Enter, 37 ⬅, 38 ⬆, 39 ➡, 40 ⬇ + $(window).on('keyup', function(e) { + var modalVisible = search.getModalVisible && search.getModalVisible(); + if (modalVisible) { + if (e.which === 38) { + modalVisible && moveActiveIndex('up'); + } else if (e.which === 40) { + modalVisible && moveActiveIndex('down'); + } else if (e.which === 13) { + modalVisible && $resultItems && activeIndex >= 0 && $resultItems.eq(activeIndex).children('a')[0].click(); + } + } + }); + + $result.on('mouseover', '.search-result__item > a', function() { + var itemIndex = $(this).parent().data('index'); + itemIndex >= 0 && (lastActiveIndex = activeIndex, activeIndex = itemIndex, updateResultItems()); + }); +}); diff --git a/_includes/search.html b/_includes/search.html new file mode 100644 index 0000000..680dd35 --- /dev/null +++ b/_includes/search.html @@ -0,0 +1,20 @@ +{%- include snippets/get-locale-string.html key='CANCEL' -%} +{%- assign _locale_cancel = __return -%} +{%- include snippets/get-locale-string.html key='SEARCH' -%} +{%- assign _locale_search = __return -%} + +{%- if site.search.provider == 'google' -%} + +{%- endif -%} + +{%- if site.search.provider -%} + +{%- endif -%} + +{%- if site.search.provider == 'default' -%} + {%- include search-providers/default/search.html -%} +{%- elsif site.search.provider == 'google' -%} + {%- include search-providers/google-custom-search-engine/search.html -%} +{%- elsif site.search.provider == 'custom' -%} + {%- include search-providers/custom/search.html -%} +{%- endif -%} diff --git a/_includes/sidebar/toc.html b/_includes/sidebar/toc.html new file mode 100644 index 0000000..4e3469e --- /dev/null +++ b/_includes/sidebar/toc.html @@ -0,0 +1,25 @@ +{%- if page.sidebar.nav -%} + +{%- endif -%} \ No newline at end of file diff --git a/_includes/snippets/assign.html b/_includes/snippets/assign.html new file mode 100644 index 0000000..c2691f5 --- /dev/null +++ b/_includes/snippets/assign.html @@ -0,0 +1,9 @@ +{%- if include.source1 == nil -%} + {%- if include.source0 == nil -%} + {%- assign __return = include.target -%} + {%- else -%} + {%- assign __return = include.source0 -%} + {%- endif -%} +{%- else -%} + {%- assign __return = include.source1 -%} +{%- endif -%} diff --git a/_includes/snippets/get-article-title.html b/_includes/snippets/get-article-title.html new file mode 100644 index 0000000..395b793 --- /dev/null +++ b/_includes/snippets/get-article-title.html @@ -0,0 +1,11 @@ +{%- assign _title = include.article.title | default: layout.title -%} +{%- assign _titles = include.article.titles | default: layout.titles -%} + +{%- if _title -%} + {%- assign __return = _title -%} +{%- elsif _titles -%} + {%- include snippets/get-string-from-locale-config.html locale=_titles -%} + {%- assign __return = __return -%} +{%- else -%} + {%- assign __return = nil -%} +{%- endif -%} diff --git a/_includes/snippets/get-lang.html b/_includes/snippets/get-lang.html new file mode 100644 index 0000000..028c52a --- /dev/null +++ b/_includes/snippets/get-lang.html @@ -0,0 +1,6 @@ +{%- assign __return = site.data.variables.default.lang -%} +{%- if page.lang -%} + {%- assign __return = page.lang -%} +{%- elsif site.lang -%} + {%- assign __return = site.lang -%} +{%- endif -%} diff --git a/_includes/snippets/get-locale-string.html b/_includes/snippets/get-locale-string.html new file mode 100644 index 0000000..a7069ae --- /dev/null +++ b/_includes/snippets/get-locale-string.html @@ -0,0 +1,12 @@ +{%- include snippets/get-lang.html -%} +{%- assign _lang = __return -%} +{%- assign _local_lang = site.data.locale[_lang] -%} +{%- assign _local_lang_en = site.data.locale.en -%} +{%- if _local_lang == nil -%} + {%- assign _local_lang = _local_lang_en -%} +{%- endif -%} +{%- if _local_lang[include.key] -%} + {%- assign __return = _local_lang[include.key] -%} +{%- else -%} + {%- assign __return = _local_lang_en[include.key] -%} +{%- endif -%} diff --git a/_includes/snippets/get-nav-url.html b/_includes/snippets/get-nav-url.html new file mode 100644 index 0000000..3b1b122 --- /dev/null +++ b/_includes/snippets/get-nav-url.html @@ -0,0 +1,8 @@ +{%- assign _pre7 = include.path | slice: 0, 7 -%} +{%- assign _pre8 = include.path | slice: 0, 8 -%} +{%- if _pre7 == 'http://' or _pre8 == 'https://' -%} + {%- assign __return = include.path -%} +{%- else -%} + {%- include snippets/prepend-baseurl.html path=include.path -%} + {%- assign __return = __return -%} +{%- endif -%} diff --git a/_includes/snippets/get-sources.html b/_includes/snippets/get-sources.html new file mode 100644 index 0000000..0de1cb5 --- /dev/null +++ b/_includes/snippets/get-sources.html @@ -0,0 +1,2 @@ +{%- assign _sources = site.sources | default: site.data.variables.default.sources -%} +{%- assign __return = site.data.variables.sources[_sources] -%} diff --git a/_includes/snippets/get-string-from-locale-config.html b/_includes/snippets/get-string-from-locale-config.html new file mode 100644 index 0000000..03325fa --- /dev/null +++ b/_includes/snippets/get-string-from-locale-config.html @@ -0,0 +1,7 @@ +{%- include snippets/get-lang.html -%} +{%- assign _lang = __return -%} +{%- if include.locale[_lang] -%} + {%- assign __return = include.locale[_lang] -%} +{%- else -%} + {%- assign __return = include.locale.en -%} +{%- endif -%} diff --git a/_includes/snippets/is_collection.html b/_includes/snippets/is_collection.html new file mode 100644 index 0000000..559a624 --- /dev/null +++ b/_includes/snippets/is_collection.html @@ -0,0 +1,6 @@ +{%- assign _page_path_first_char = include.page.path | slice: 0, 1 -%} +{%- if _page_path_first_char == '_' -%} + {%- assign __return = true -%} +{%- else -%} + {%- assign __return = false -%} +{%- endif -%} diff --git a/_includes/snippets/page-url.html b/_includes/snippets/page-url.html new file mode 100644 index 0000000..3e9815d --- /dev/null +++ b/_includes/snippets/page-url.html @@ -0,0 +1,2 @@ +{%- include snippets/prepend-baseurl.html path=page.url -%} +{{ __return | prepend: site.url }} \ No newline at end of file diff --git a/_includes/snippets/prepend-baseurl.html b/_includes/snippets/prepend-baseurl.html new file mode 100644 index 0000000..d5d24ef --- /dev/null +++ b/_includes/snippets/prepend-baseurl.html @@ -0,0 +1,4 @@ +{%- assign _include_path_replace_index = include.path | replace: 'index.html', '' -%} +{%- include snippets/prepend-path.html + path=_include_path_replace_index + prepend_path=site.baseurl -%} \ No newline at end of file diff --git a/_includes/snippets/prepend-path.html b/_includes/snippets/prepend-path.html new file mode 100644 index 0000000..5f6e904 --- /dev/null +++ b/_includes/snippets/prepend-path.html @@ -0,0 +1 @@ +{%- assign __return = include.path | prepend: '/' | prepend: include.prepend_path | replace:'///','/' | replace:'//','/' -%} diff --git a/_includes/svg/icon/social/behance.svg b/_includes/svg/icon/social/behance.svg new file mode 100644 index 0000000..bba499c --- /dev/null +++ b/_includes/svg/icon/social/behance.svg @@ -0,0 +1,3 @@ + + + diff --git a/_includes/svg/icon/social/douban.svg b/_includes/svg/icon/social/douban.svg new file mode 100644 index 0000000..42a07d5 --- /dev/null +++ b/_includes/svg/icon/social/douban.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/_includes/svg/icon/social/facebook.svg b/_includes/svg/icon/social/facebook.svg new file mode 100644 index 0000000..ba901bd --- /dev/null +++ b/_includes/svg/icon/social/facebook.svg @@ -0,0 +1,3 @@ + + + diff --git a/_includes/svg/icon/social/flicker.svg b/_includes/svg/icon/social/flicker.svg new file mode 100644 index 0000000..eaacc73 --- /dev/null +++ b/_includes/svg/icon/social/flicker.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/_includes/svg/icon/social/github.svg b/_includes/svg/icon/social/github.svg new file mode 100644 index 0000000..c5439a9 --- /dev/null +++ b/_includes/svg/icon/social/github.svg @@ -0,0 +1,3 @@ + + + diff --git a/_includes/svg/icon/social/googleplus.svg b/_includes/svg/icon/social/googleplus.svg new file mode 100644 index 0000000..69ab1e5 --- /dev/null +++ b/_includes/svg/icon/social/googleplus.svg @@ -0,0 +1,3 @@ + + + diff --git a/_includes/svg/icon/social/linkedin.svg b/_includes/svg/icon/social/linkedin.svg new file mode 100644 index 0000000..3c26dbc --- /dev/null +++ b/_includes/svg/icon/social/linkedin.svg @@ -0,0 +1,3 @@ + + + diff --git a/_includes/svg/icon/social/mail.svg b/_includes/svg/icon/social/mail.svg new file mode 100644 index 0000000..a0d0751 --- /dev/null +++ b/_includes/svg/icon/social/mail.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/_includes/svg/icon/social/medium.svg b/_includes/svg/icon/social/medium.svg new file mode 100644 index 0000000..2dfdd92 --- /dev/null +++ b/_includes/svg/icon/social/medium.svg @@ -0,0 +1,3 @@ + + + diff --git a/_includes/svg/icon/social/npm.svg b/_includes/svg/icon/social/npm.svg new file mode 100644 index 0000000..c382c30 --- /dev/null +++ b/_includes/svg/icon/social/npm.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/_includes/svg/icon/social/pinterest.svg b/_includes/svg/icon/social/pinterest.svg new file mode 100644 index 0000000..68f400b --- /dev/null +++ b/_includes/svg/icon/social/pinterest.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/_includes/svg/icon/social/qq.svg b/_includes/svg/icon/social/qq.svg new file mode 100644 index 0000000..a305a5b --- /dev/null +++ b/_includes/svg/icon/social/qq.svg @@ -0,0 +1,3 @@ + + + diff --git a/_includes/svg/icon/social/telegram.svg b/_includes/svg/icon/social/telegram.svg new file mode 100644 index 0000000..1fc8d78 --- /dev/null +++ b/_includes/svg/icon/social/telegram.svg @@ -0,0 +1,4 @@ + + + + diff --git a/_includes/svg/icon/social/twitter.svg b/_includes/svg/icon/social/twitter.svg new file mode 100644 index 0000000..b04f68d --- /dev/null +++ b/_includes/svg/icon/social/twitter.svg @@ -0,0 +1,3 @@ + + + diff --git a/_includes/svg/icon/social/weibo.svg b/_includes/svg/icon/social/weibo.svg new file mode 100644 index 0000000..2ccd8b1 --- /dev/null +++ b/_includes/svg/icon/social/weibo.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/_includes/svg/icon/social/weixin.svg b/_includes/svg/icon/social/weixin.svg new file mode 100644 index 0000000..c2ed41b --- /dev/null +++ b/_includes/svg/icon/social/weixin.svg @@ -0,0 +1,3 @@ + + + diff --git a/_includes/svg/icon/social/zhihu.svg b/_includes/svg/icon/social/zhihu.svg new file mode 100644 index 0000000..210fb2e --- /dev/null +++ b/_includes/svg/icon/social/zhihu.svg @@ -0,0 +1,3 @@ + + + diff --git a/_includes/svg/logo.svg b/_includes/svg/logo.svg new file mode 100644 index 0000000..b51a23b --- /dev/null +++ b/_includes/svg/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_includes/svg/logo_.svg b/_includes/svg/logo_.svg new file mode 100644 index 0000000..0eb5ccd --- /dev/null +++ b/_includes/svg/logo_.svg @@ -0,0 +1,65 @@ + + + + + +Created by potrace 1.13, written by Peter Selinger 2001-2015 + + + image/svg+xml + + + + + + + + + diff --git a/_includes/tags.html b/_includes/tags.html new file mode 100644 index 0000000..424804c --- /dev/null +++ b/_includes/tags.html @@ -0,0 +1,52 @@ +{%- assign _tag_max_size = 1 -%} +{%- assign _tag_min_size = 1 -%} +{%- assign _tag_cur_size = 1 -%} +{%- assign _tags = site.tags | sort -%} +{%- for _tag in _tags -%} + {%- assign _tag_cur_size = _tag[1].size -%} + {%- if _tag_cur_size > _tag_max_size -%} + {%- assign _tag_max_size = _tag_cur_size -%} + {%- endif -%} + {%- if _tag_cur_size < _tag_min_size -%} + {%- assign _tag_min_size = _tag_cur_size -%} + {%- endif -%} +{%- endfor -%} +{%- assign _tag_gap_size = _tag_max_size | minus: _tag_min_size | plus: 1 | divided_by: 4 -%} +{%- if _tag_gap_size < 1 -%} + {%- assign _tag_gap_size = 1 -%} +{%- endif -%} +
      + +
      diff --git a/_layouts/404.html b/_layouts/404.html new file mode 100644 index 0000000..4dd94a6 --- /dev/null +++ b/_layouts/404.html @@ -0,0 +1,13 @@ +--- +layout: page +title: 404 +show_title: false +--- +
      +
      +

      404

      +

      Page not found :(

      +
      +
      + +{{ content }} diff --git a/_layouts/archive.html b/_layouts/archive.html new file mode 100644 index 0000000..a03a078 --- /dev/null +++ b/_layouts/archive.html @@ -0,0 +1,30 @@ +--- +layout: page +titles: + # @start locale config + en : &EN Archive + en-GB : *EN + en-US : *EN + en-CA : *EN + en-AU : *EN + fr : &FR Etiquettes + fr-BE : *FR + fr-CA : *FR + fr-CH : *FR + fr-FR : *FR + fr-LU : *FR + # @end locale config +--- + +
      + {%- include tags.html -%} +
      + {%- include article-list.html articles=site.posts type='brief' show_info=true reverse=true group_by='year' -%} +
      +
      + + + +{{ content }} diff --git a/_layouts/article.html b/_layouts/article.html new file mode 100644 index 0000000..addd5fb --- /dev/null +++ b/_layouts/article.html @@ -0,0 +1,41 @@ +--- +layout: page +type: article +--- + +
      + {%- include article/top/custom.html -%} + +
      + {%- if page.toc -%} +
      + Afficher/cacher Sommaire + +
      +
      + {%- endif -%} + {{ content }} +
      + + {%- if page.mathjax -%} + {%- include mathjax.html -%} + {%- endif -%} + + {% if page.mermaid %} + {% include mermaid.html %} + {% endif %} + + {% if page.chart %} + {% include chart.html %} + {% endif %} + +
      + {%- include article-footer.html -%} + {%- include article-section-navigator.html -%} +
      + +
      + + diff --git a/_layouts/articles.html b/_layouts/articles.html new file mode 100644 index 0000000..10a99d0 --- /dev/null +++ b/_layouts/articles.html @@ -0,0 +1,90 @@ +--- +layout: page +--- + +{%- assign _page_articles_data_source = page.articles.data_source | default: layout.articles.data_source -%} + +{%- if _page_articles_data_source -%} +{%- assign _keys = _page_articles_data_source | split: '.' -%} +{%- endif -%} + +{%- assign _articles = nil -%} +{%- for _key in _keys -%} + {%- if forloop.first -%} + {%- case _key -%} + {%- when 'site' -%} + {%- assign _articles = site -%} + {%- when 'page' -%} + {%- assign _articles = page -%} + {%- when 'layout' -%} + {%- assign _articles = layout -%} + {%- when 'paginator' -%} + {%- assign _articles = paginator -%} + {%- else -%} + {%- assign _articles = site[_key] -%} + {%- else -%} + {%- endcase -%} + {%- else -%} + {%- assign _articles = _articles[_key] -%} + {%- endif -%} +{%- endfor -%} + +{%- assign _type = page.articles.type | default: layout.articles.type -%} + +{%- if _articles -%} + + +
      + + {%- if _type == 'grid' -%} + {%- if page.articles.size == 'sm' -%} + {%- include article-list.html articles=_articles type='grid' size='sm' -%} + {%- else -%} + {%- include article-list.html articles=_articles type='grid' -%} + {%- endif -%} + + {%- elsif _type == 'brief' -%} + {%- include snippets/assign.html + target=site.data.variables.default.page.articles.show_info + source0=layout.articles.show_info source1=page.articles.show_info -%} + {%- assign _show_info = __return -%} + + {%- include article-list.html articles=_articles type='brief' show_info=_show_info -%} + + {%- else -%} + {%- include snippets/assign.html + target=site.data.variables.default.page.articles.show_cover + source0=layout.articles.show_cover source1=page.articles.show_cover -%} + {%- assign _show_cover = __return -%} + + {%- include snippets/assign.html + target=site.data.variables.default.page.articles.show_excerpt + source0=layout.articles.show_excerpt source1=page.articles.show_excerpt -%} + {%- assign _show_excerpt = __return -%} + + {%- include snippets/assign.html + target=site.data.variables.default.page.articles.show_readmore + source0=layout.articles.show_readmore source1=page.articles.show_readmore -%} + {%- assign _show_readmore = __return -%} + + {%- include snippets/assign.html + target=site.data.variables.default.page.articles.show_info + source0=layout.articles.show_info source1=page.articles.show_info -%} + {%- assign _show_info = __return -%} + + {%- assign _article_type = page.articles.article_type | default: layout.articles.article_type -%} + {%- assign _cover_size = page.articles.cover_size | default: layout.articles.cover_size -%} + {%- assign _excerpt_type = page.articles.excerpt_type | default: layout.articles.excerpt_type -%} + + {%- include article-list.html articles=_articles type='item' + article_type=_article_type + show_cover=_show_cover cover_size=_cover_size + show_excerpt=_show_excerpt excerpt_type=_excerpt_type + show_readmore=_show_readmore show_info=_show_info -%} + + {%- endif -%} + +
      +{%- endif -%} + +{{ content }} diff --git a/_layouts/base.html b/_layouts/base.html new file mode 100644 index 0000000..8a02572 --- /dev/null +++ b/_layouts/base.html @@ -0,0 +1,25 @@ +--- +layout: none +--- + +{%- include snippets/get-lang.html -%} + + + {%- include analytics.html -%} + {%- include head.html -%} + + {%- include scripts/variables.html -%} + + +
      + {{ content }} +
      + + + diff --git a/_layouts/home.html b/_layouts/home.html new file mode 100644 index 0000000..6237276 --- /dev/null +++ b/_layouts/home.html @@ -0,0 +1,30 @@ +--- +layout: articles +titles: + # @start locale config + en : &EN Home + en-GB : *EN + en-US : *EN + en-CA : *EN + en-AU : *EN + fr : &FR Accueil + fr-BE : *FR + fr-CA : *FR + fr-CH : *FR + fr-FR : *FR + fr-LU : *FR + # @end locale config +show_title: false +articles: + data_source: paginator.posts + article_type: BlogPosting + show_cover: false + show_excerpt: true + show_readmore: true + show_info: true +--- + + +{{ content }} diff --git a/_layouts/landing.html b/_layouts/landing.html new file mode 100644 index 0000000..306067b --- /dev/null +++ b/_layouts/landing.html @@ -0,0 +1,178 @@ +--- +layout: page +header: false +full_width: true +article_header: + type: overlay + align: center + height: 80vh +--- +
      +
      + {%- for _section in page.data.sections -%} + {%- include snippets/get-nav-url.html path=_section.background_image.src -%} + {%- assign _url = __return -%} + {%- if _section.theme == 'light' -%} +
      + {%- else -%} + style="background-image: url({{ _url }});"> + {%- endif -%} + +
      +
      + +

      {{ _section.title }}

      + {%- if _section.excerpt-%} +

      {{ _section.excerpt }}

      + {%- endif -%} + + {%- if _section.actions -%} + + {%- endif -%} + +
      + + {%- if _section.children -%} + {%- assign _size = _section.children | size -%} +
      +
      + + {%- for child in _section.children -%} + + {%- if _size >= 2 -%} + {%- assign _cell_md_col = 6 -%} + {%- else -%} + {%- assign _cell_md_col = 12 | divided_by: _size -%} + {%- endif -%} + + {%- if _size >= 4 -%} + {%- assign _cell_lg_col = 3 -%} + {%- else -%} + {%- assign _cell_lg_col = 12 | divided_by: _size -%} + {%- endif -%} + +
      + +
      +

      {{ child.title }}

      + + {%- if child.excerpt-%} +

      {{ child.excerpt }}

      + {%- endif -%} + + {%- if child.actions -%} + + {%- endif -%} +
      + + {%- if child.image and child.image.src -%} + + {%- if child.image.url -%} + {%- include snippets/get-nav-url.html path=child.image.url -%} + {%- assign _item_image_url = __return -%} + {%- else -%} + {%- assign _item_image_url = nil -%} + {%- endif -%} + + {%- include snippets/get-nav-url.html path=child.image.src -%} + {%- assign _item_image_src = __return -%} + + {%- if child.image.is_row -%} +
      + {%- endif -%} +
      + {%- if _item_image_url -%} + + {%- endif -%} + + {%- if _item_image_url -%} + + {%- endif -%} +
      + {%- if child.image.is_row -%} +
      + {%- endif -%} + {%- endif -%} + + {%- if child.content-%} +

      {{ child.content }}

      + {%- endif -%} + +
      + {%- endfor-%} + +
      +
      + {%- endif -%} + + {%- if _section.image.full_width == true -%} +
      {% comment %} end hero__content {% endcomment %} + {%- endif -%} + + {%- if _section.image and _section.image.src -%} + + {%- if _section.image.url -%} + {%- include snippets/get-nav-url.html path=_section.image.url -%} + {%- assign _section_image_url = __return -%} + {%- else -%} + {%- assign _section_image_url = nil -%} + {%- endif -%} + + {%- include snippets/get-nav-url.html path=_section.image.src -%} + {%- assign _section_image_src = __return -%} + + {%- if _section.image.is_row -%} +
      + {%- endif -%} + + {%- if _section.image.is_row -%} +
      + {%- endif -%} + {%- endif -%} + + {%- if _section.image.full_width != true -%} +
      {% comment %} end hero__content {% endcomment %} + {%- endif -%} + + {%- if _section.content-%} +

      {{ _section.content }}

      + {%- endif -%} + + {%- endfor -%} +
      +
      + +{{ content }} diff --git a/_layouts/none.html b/_layouts/none.html new file mode 100644 index 0000000..cddd070 --- /dev/null +++ b/_layouts/none.html @@ -0,0 +1 @@ +{{ content }} diff --git a/_layouts/page.html b/_layouts/page.html new file mode 100644 index 0000000..b265ba2 --- /dev/null +++ b/_layouts/page.html @@ -0,0 +1,270 @@ +--- +layout: base +--- +{%- assign _page_mode = page.mode | default: layout.mode | default: site.data.variables.default.page.mode -%} +{%- assign _page_type = page.type | default: layout.type | default: site.data.variables.default.page.type -%} +{%- assign _article_header_type = page.article_header.type | default: layout.article_header.type -%} + +{%- include snippets/assign.html + target=layout.header source0=page.header -%} +{%- assign _header = __return -%} + +{%- include snippets/assign.html + target=layout.footer source0=page.footer -%} +{%- assign _footer = __return -%} + +{%- assign _footer = false -%} + +{%- include snippets/assign.html + target=layout.lightbox source0=page.lightbox -%} +{%- assign _lightbox = __return -%} + +{%- include snippets/assign.html + target = site.data.variables.default.page.full_width + source0=layout.full_width source1=page.full_width -%} +{%- assign _full_width = __return -%} + +{%- include snippets/assign.html + target = site.data.variables.default.page.comment + source0=layout.comment source1=page.comment -%} +{%- assign _comment = __return -%} + + +{%- assign _article_header_excerpt_truncate = include.excerpt_truncate | default: 200 -%} + +{%- if page.sidebar -%} +
      +
      +
      +
      + +
      + +
      + +
      + {%- include sidebar/toc.html -%} +
      + +{%- else -%} +
      +{%- endif -%} + + {%- assign _page_main_class = 'page__main js-page-main' -%} + {%- if _page_mode == 'immersive' -%} + {%- assign _page_main_class = _page_main_class | append: ' page__main--immersive' -%} + {%- endif -%} + {%- unless page.sidebar -%} + {%- assign _page_main_class = _page_main_class | append: ' page__viewport' -%} + {%- endunless -%} + {%- if _footer == false -%} + {%- assign _page_main_class = _page_main_class | append: ' hide-footer' -%} + {%- endif -%} + + + {%- assign _page_main_class = _page_main_class | append: ' has-aside' -%} + +
      + +
      + {%- if _header != false -%} + + {%- endif -%} + + +
      + {%- if _article_header_type == 'overlay' or _article_header_type == 'cover' -%} + + {%- if _article_header_type == 'overlay' -%} + + {%- assign _article_header_height = page.article_header.height | default: layout.article_header.height -%} + {%- assign _article_header_align = page.article_header.align | default: layout.article_header.align | default: site.data.variables.default.page.article_header.align -%} + {%- assign _article_header_theme = page.article_header.theme | default: layout.article_header.theme | default: site.data.variables.default.page.article_header.theme -%} + + {%- if page.article_header.background_image.src -%} + {%- assign _header_background_image_src = page.article_header.background_image.src -%} + {%- elsif page.article_header.background_image != false and page.cover -%} + {%- assign _header_background_image_src = page.cover -%} + {%- endif -%} + + {%- if page.article_header.background_image.gradient -%} + {%- assign _header_background_image = page.article_header.background_image.gradient -%} + {%- if _header_background_image_src -%} + {%- assign _header_background_image = _header_background_image | append: ',' -%} + {%- endif -%} + {%- endif -%} + + {%- if _header_background_image_src -%} + {%- include snippets/get-nav-url.html path=_header_background_image_src -%} + {%- assign _header_background_image_src = __return -%} + {%- assign _header_background_image = _header_background_image + | append: 'url(' | append: _header_background_image_src | append: ')'-%} + {%- endif -%} + + {%- assign _header_style = 'background-image:' | append: _header_background_image | append: ';' -%} + + {%- if page.article_header.background_color -%} + {%- assign _header_style = _header_style | append: 'background-color:' | append: page.article_header.background_color | append: ';' -%} + {%- endif -%} + + {%- if _article_header_height -%} + {%- assign _header_style = _header_style | append: 'min-height:' | append: _article_header_height | append: ';' -%} + {%- endif -%} + +
      + + {%- if _article_header_theme == 'light' -%} + {%- if _article_header_align == 'center' -%} +
      + {%- else -%} +
      + {%- endif -%} + {%- elsif _article_header_theme == 'dark' -%} + {%- if _article_header_align == 'center' -%} +
      + {%- else -%} +
      + {%- endif -%} + {%- else -%} + {%- if _article_header_align == 'center' -%} +
      + {%- else -%} +
      + {%- endif -%} + {%- endif -%} +
      + {%- if _full_width == false -%} +
      + {%- endif -%} + {%- include article-info.html article=page semantic=false -%} + {%- include article-header.html article=page semantic=false -%} + {%- if page.excerpt -%} +

      {{ page.excerpt | strip_html | strip_newlines | strip | truncate: _article_header_excerpt_truncate }}

      + {%- endif -%} + {%- if page.article_header.actions -%} + + {%- endif -%} + {%- if _full_width == false -%} +
      + {%- endif -%} +
      +
      +
      + {%- elsif _article_header_type == 'cover' -%} + {%- if page.article_header.image.src -%} + {%- include snippets/get-nav-url.html path=page.article_header.image.src -%} + {%- assign _header_image_src = __return -%} + + {%- endif -%} + {%- endif -%} + + {%- endif -%} + + + {%- if _full_width == false -%} +
      + {%- endif -%} +
      +
      + {%- include main/top/custom.html -%} + {%- if _page_type == 'article' -%} +
      + {%- elsif _page_type == 'webpage' -%} +
      + {%- else -%} +
      + {%- endif -%} + + {%- if _article_header_type == 'overlay' or page.article_header == false -%} + {%- include article-header.html article=page html=false -%} + {%- include article-info.html article=page html=false -%} + {%- else -%} + {%- include article-header.html article=page -%} + {%- include article-info.html article=page -%} + {%- endif -%} + +
      + {{ content }} +
      + {%- if _comment != false -%} +
      {%- include comments.html -%}
      + {%- endif -%} +
      + {%- include main/bottom/custom.html -%} +
      +
      + + {%- if _full_width == false -%} +
      + {%- endif -%} +
      + + {%- if _footer != false -%} + + {%- endif -%} +
      +
      {%- comment -%} end page__main {%- endcomment -%} +{%- if page.sidebar -%} +
      {%- comment -%} end grid {%- endcomment -%} +
      {%- comment -%} end page__viewport {%- endcomment -%} +{%- endif -%} + + +{%- if _lightbox == true -%} + +{%- endif -%} +{%- if _header != false -%} + +{%- endif -%} +
      + + + + +{%- if page.sidebar -%} + +{%- endif -%} + +{%- if page.aside -%} + +{%- endif -%} + +{%- include markdown-enhancements.html -%} + diff --git a/_sass/additional/_alert.scss b/_sass/additional/_alert.scss new file mode 100644 index 0000000..fa5651f --- /dev/null +++ b/_sass/additional/_alert.scss @@ -0,0 +1,29 @@ +.article__content { + p.success { + padding: map-get($spacers, 2) map-get($spacers, 3); + background-color: rgba($green, .1); + border: 1px solid $green; + border-radius: map-get($base, border-radius); + } + + p.info { + padding: map-get($spacers, 2) map-get($spacers, 3); + background-color: rgba($blue, .1); + border: 1px solid $blue; + border-radius: map-get($base, border-radius); + } + + p.warning { + padding: map-get($spacers, 2) map-get($spacers, 3); + background-color: rgba($yellow, .1); + border: 1px solid $yellow; + border-radius: map-get($base, border-radius); + } + + p.error { + padding: map-get($spacers, 2) map-get($spacers, 3); + background-color: rgba($red, .1); + border: 1px solid $red; + border-radius: map-get($base, border-radius); + } +} diff --git a/_sass/additional/_photo-frame.scss b/_sass/additional/_photo-frame.scss new file mode 100644 index 0000000..55a30c7 --- /dev/null +++ b/_sass/additional/_photo-frame.scss @@ -0,0 +1,17 @@ +.article__content { + img.shadow, .shadow > img { + @include box-shadow(); + } + + img.border, .border > img { + border: 1px solid $border-color-l; + } + + img.rounded, .rounded > img { + border-radius: map-get($base, border-radius); + } + + img.circle, .circle > img { + border-radius: 50%; + } +} diff --git a/_sass/additional/_tag.scss b/_sass/additional/_tag.scss new file mode 100644 index 0000000..6a418ed --- /dev/null +++ b/_sass/additional/_tag.scss @@ -0,0 +1,21 @@ +.article__content { + code.success { + color: $text-color-function; + background-color: $green; + } + + code.info { + color: $text-color-function; + background-color: $blue; + } + + code.warning { + color: $text-color-function; + background-color: $yellow; + } + + code.error { + color: $text-color-function; + background-color: $red; + } +} diff --git a/_sass/animate/_fade-in-down.scss b/_sass/animate/_fade-in-down.scss new file mode 100644 index 0000000..a32a4e7 --- /dev/null +++ b/_sass/animate/_fade-in-down.scss @@ -0,0 +1,10 @@ +@include keyframes(fade-in-down) { + from { + opacity: 0; + @include transform(translateY(-2rem)); + } + to { + opacity: 1; + @include transform(translateY(0)); + } +} diff --git a/_sass/animate/_fade-in-up.scss b/_sass/animate/_fade-in-up.scss new file mode 100644 index 0000000..920a0bb --- /dev/null +++ b/_sass/animate/_fade-in-up.scss @@ -0,0 +1,10 @@ +@include keyframes(fade-in-up) { + from { + opacity: 0; + @include transform(translateY(2rem)); + } + to { + opacity: 1; + @include transform(translateY(0)); + } +} diff --git a/_sass/animate/_fade-in.scss b/_sass/animate/_fade-in.scss new file mode 100644 index 0000000..03fdea8 --- /dev/null +++ b/_sass/animate/_fade-in.scss @@ -0,0 +1,8 @@ +@include keyframes(fade-in) { + from { + opacity: 0; + } + to { + opacity: 1; + } +} diff --git a/_sass/common/_classes.scss b/_sass/common/_classes.scss new file mode 100644 index 0000000..b5615d8 --- /dev/null +++ b/_sass/common/_classes.scss @@ -0,0 +1,24 @@ +/* stylelint-disable at-rule-name-space-after, at-rule-semicolon-space-before */ +@charset "utf-8"; +@import + "common/classes/animation", + "common/classes/transform", + "common/classes/transition", + "common/classes/user-select", + + "common/classes/clearfix", + "common/classes/media", + "common/classes/clickable", + "common/classes/display", + "common/classes/flex", + "common/classes/horizontal-rules", + "common/classes/pseudo", + "common/classes/link", + "common/classes/text", + "common/classes/overflow", + "common/classes/shadow", + "common/classes/spacing", + "common/classes/split-line", + "common/classes/grid" +; +/* stylelint-enable */ diff --git a/_sass/common/_function.scss b/_sass/common/_function.scss new file mode 100644 index 0000000..1de2492 --- /dev/null +++ b/_sass/common/_function.scss @@ -0,0 +1,15 @@ +@function get-color-theme($color) { + @if lightness($color) < 15% { + @return "dark"; + } @else { + @return "light"; + } +} + +@function breakpoint-infix($name, $breakpoints: default) { + @if $breakpoints == default { + $breakpoints: $responsive; + } + $min: map-get($breakpoints, $name); + @return if($min != 0, "#{$name}-", ""); +} diff --git a/_sass/common/_print.scss b/_sass/common/_print.scss new file mode 100644 index 0000000..d798d87 --- /dev/null +++ b/_sass/common/_print.scss @@ -0,0 +1,20 @@ +@media print { + a { + @include plain() { + text-decoration: underline; + } + @include hover() { + text-decoration: underline; + } + @include active() { + text-decoration: underline; + } + } + + img, + tr, + pre, + blockquote { + page-break-inside: avoid; + } +} diff --git a/_sass/common/_reset.scss b/_sass/common/_reset.scss new file mode 100644 index 0000000..8fbcab6 --- /dev/null +++ b/_sass/common/_reset.scss @@ -0,0 +1,170 @@ +@mixin block-elements { + h1, + h2, + h3, + h4, + h5, + h6, + p, + hr, + blockquote, + figure, + pre, + .highlighter-rouge, + ul, + ol, + dl, + table, + .footnotes { + @content; + } +} +@mixin heading-elements { + h1, h2, h3, h4, h5, h6 { + @content; + } +} + +*, +::before, +::after { + box-sizing: border-box; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +/** + * 1. Prevent adjustments of font size after orientation changes in iOS. + **/ + +html { + font-size: map-get($base, font-size-root); + -webkit-text-size-adjust: 100%; /* 1 */ + @media print { + font-size: map-get($base, font-size-root-sm); + } +} + +body { + padding: 0; + margin: 0; + font: map-get($base, font-weight) #{map-get($base, font-size)}/#{map-get($base, line-height)} map-get($base, font-family); + ::-moz-selection { + background: $select-color; + } + ::-webkit-selection { + background: $select-color; + } + ::selection { + background: $select-color; + } +} + +@include block-elements() { + padding: 0; + margin: map-get($spacers, 2) 0; +} + +input, textarea, select, button { + font: map-get($base, font-weight) #{map-get($base, font-size)}/#{map-get($base, line-height)} map-get($base, font-family); + color: $text-color; +} + +h1, +h2, +h3, +h4, +h5, +h6, +strong { + font-weight: map-get($base, font-weight-bold); +} + +h1 { + font-size: map-get($base, font-size-h1); + color: $text-color-d; + @include media-breakpoint-down(md) { + font-size: map-get($base, font-size-h1-sm); + } +} + +h2 { + font-size: map-get($base, font-size-h2); + color: $text-color-d; + @include media-breakpoint-down(md) { + font-size: map-get($base, font-size-h2-sm); + } +} + +h3 { + font-size: map-get($base, font-size-h3); + color: $text-color-d; + @include media-breakpoint-down(md) { + font-size: map-get($base, font-size-h3-sm); + } +} + +h4 { + font-size: map-get($base, font-size-h4); + color: $text-color; + @include media-breakpoint-down(md) { + font-size: map-get($base, font-size-h4-sm); + } +} + +h5 { + font-size: map-get($base, font-size-h5); + color: $text-color; + @include media-breakpoint-down(md) { + font-size: map-get($base, font-size-h5-sm); + } +} + +h6 { + font-size: map-get($base, font-size-h6); + color: $text-color-l; + @include media-breakpoint-down(md) { + font-size: map-get($base, font-size-h6-sm); + } +} + +a { + font-weight: map-get($base, font-weight-bold); + @include link-colors($main-color-1); +} + +pre, code { + font-family: map-get($base, font-family-code); +} + +code { + font-size: map-get($base, font-size-xs); + line-height: map-get($base, line-height-sm); +} + +figure > img { + display: block; +} + +figcaption { + font-size: map-get($base, font-size-sm); +} + +button { + padding: 0; + margin: 0; + font-size: map-get($spacers, 3); + cursor: pointer; + background-color: transparent; + border-width: 0; + outline: none; +} + +input { + &::-ms-clear { + display: none; + } + &:focus { + outline: none; + } +} + diff --git a/_sass/common/_variables.scss b/_sass/common/_variables.scss new file mode 100644 index 0000000..97f82e7 --- /dev/null +++ b/_sass/common/_variables.scss @@ -0,0 +1,152 @@ +@use "sass:math"; + +$base: ( + font-family: (-apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif), + font-family-code: (Menlo, Monaco, Consolas, Andale Mono, lucida console, Courier New, monospace), + + font-size-root: 16px, + font-size-root-sm: 14px, + + font-size-xl: 1.5rem, + font-size-lg: 1.25rem, + font-size: 1rem, + font-size-sm: .85rem, + font-size-xs: .7rem, + + font-size-h1-xl: 3.5rem, + font-size-h2-xl: 2.5rem, + font-size-h3-xl: 2rem, + font-size-h4-xl: 1.75rem, + font-size-h5-xl: 1.5rem, + font-size-h6-xl: 1.5rem, + + font-size-h1-lg: 3rem, + font-size-h2-lg: 2rem, + font-size-h3-lg: 1.75rem, + font-size-h4-lg: 1.5rem, + font-size-h5-lg: 1.25rem, + font-size-h6-lg: 1.25rem, + + font-size-h1: 2.5rem, + font-size-h2: 1.9rem, + font-size-h3: 1.5rem, + font-size-h4: 1.2rem, + font-size-h5: 1rem, + font-size-h6: 1rem, + + font-size-h1-sm: 2rem, + font-size-h2-sm: 1.5rem, + font-size-h3-sm: 1.35rem, + font-size-h4-sm: 1.15rem, + font-size-h5-sm: 1rem, + font-size-h6-sm: 1rem, + + font-size-h1-xs: 1.05rem, + font-size-h2-xs: 1rem, + font-size-h3-xs: .95rem, + font-size-h4-xs: .9rem, + font-size-h5-xs: .85rem, + font-size-h6-xs: .85rem, + + font-weight: 400, + font-weight-bold: 700, + + line-height-xl: 2, + line-height-lg: 1.8, + line-height: 1.6, + line-height-sm: 1.4, + line-height-xs: 1.2, + + spacer: 1rem, + + border-radius-lg: .8rem, + border-radius: .4rem, + border-radius-sm: .2rem +); + +$spacers: ( + 0: 0, + 1: map-get($base, spacer) * .25, + 2: map-get($base, spacer) * .5, + 3: map-get($base, spacer), + 4: map-get($base, spacer) * 1.5, + 5: map-get($base, spacer) * 3 +); + +$z-indexes: ( + actions: 996, + mask: 997, + sidebar: 998, + modal: 999 +); + +$layout: ( + header-height: 5rem, + header-height-sm: 3rem, + content-max-width: 950px, + sidebar-width: 250px, + sidebar-header-height: 3rem, + aside-width: 220px +); + +// sm md lg +// | ------ | ------ | ------ | +// 0 500 1024 - + +$responsive: ( + sm: 0, + md: 500px, + lg: 1024px +); + +$animation: ( + duration: .4s, + duration-sm: .2s, + timing-function: ease-in-out +); + +$clickable: ( + transition: all .2s ease-in-out +); + +$button-height-xl: 2.8rem; +$button-height-lg: 2.3rem; +$button-height: 1.9rem; +$button-height-sm: 1.5rem; +$button-height-xs: 1.2rem; + +$button: ( + padding-y-xl: ($button-height-xl - map-get($base, font-size-xl)) * 0.5, + padding-x-xl: math.div($button-height-xl, 3), + padding-y-lg: ($button-height-lg - map-get($base, font-size-lg)) * 0.5, + padding-x-lg: math.div($button-height-lg, 3), + padding-y: ($button-height - map-get($base, font-size)) * 0.5, + padding-x: math.div($button-height, 3), + padding-y-sm: ($button-height-sm - map-get($base, font-size-sm)) * 0.5, + padding-x-sm: math.div($button-height-sm, 3), + padding-y-xs: ($button-height-xs - map-get($base, font-size-xs)) * 0.5, + padding-x-xs: math.div($button-height-xs, 3), + + pill-radius: 6rem, + + circle-diameter-xl: $button-height-xl, + circle-diameter-lg: $button-height-lg, + circle-diameter: $button-height, + circle-diameter-sm: $button-height-sm, + circle-diameter-xs: $button-height-xs, + + font-weight: map-get($base, font-weight-bold) +); + +$image: ( + width-xl: 20em, + width-lg: 16rem, + width: 12rem, + width-sm: 8rem, + width-xs: 4rem +); + +$menu: ( + horizontal-spacer: 1, + horizontal-item-vertical-spacer: 1 +); \ No newline at end of file diff --git a/_sass/common/classes/_animation.scss b/_sass/common/classes/_animation.scss new file mode 100644 index 0000000..2dbc47d --- /dev/null +++ b/_sass/common/classes/_animation.scss @@ -0,0 +1,13 @@ +@mixin animation($value) { + -webkit-animation: $value; + animation: $value; +} + +@mixin keyframes($name) { + @-webkit-keyframes #{$name} { + @content; + } + @keyframes #{$name} { + @content; + } +} diff --git a/_sass/common/classes/_clearfix.scss b/_sass/common/classes/_clearfix.scss new file mode 100644 index 0000000..caf3124 --- /dev/null +++ b/_sass/common/classes/_clearfix.scss @@ -0,0 +1,19 @@ +@mixin clearfix() { + &::after { + display: table; + clear: both; + content: ""; + } +} + +.clearfix { + @include clearfix(); +} + +.left { + float: left; +} + +.right { + float: right; +} diff --git a/_sass/common/classes/_clickable.scss b/_sass/common/classes/_clickable.scss new file mode 100644 index 0000000..af32eff --- /dev/null +++ b/_sass/common/classes/_clickable.scss @@ -0,0 +1,159 @@ +@mixin clickable($clr, $bg-clr, $hover-clr: default, $hover-bg-clr: default, $active-clr: default, $active-bg-clr: default, $focus-clr: default, $focus-bg-clr: default, $theme: default, $ignore-path: default) { + + @if $theme == default { + @if $bg-clr == null and $hover-bg-clr == null { + @if $hover-clr == default { + $theme: get-color-theme($clr); + } @else { + $theme: get-color-theme($hover-clr); + } + } @else { + @if $hover-bg-clr == default { + $theme: get-color-theme($bg-clr); + } @else { + $theme: get-color-theme($hover-bg-clr); + } + } + } + + @if $ignore-path == default { + $ignore-path: false; + } @else { + $ignore-path: true; + } + + @include transition(map-get($clickable, transition)); + @if $ignore-path == false { + svg { + path { + @include transition(map-get($clickable, transition)); + } + } + } + + // hover + @if $hover-clr == default { + @if $hover-bg-clr == null { + @if $theme == "light" { + $hover-clr: darken($clr, 14%); + } + @if $theme == "dark" { + $hover-clr: lighten($clr, 18%); + } + } @else if $hover-bg-clr == default { + $hover-clr: $clr; + } + } + + @if $hover-bg-clr == default { + @if $theme == "light" { + $hover-bg-clr: darken($bg-clr, 14%); + } + @if $theme == "dark" { + $hover-bg-clr: lighten($bg-clr, 18%); + } + } + + // active + @if $active-clr == default { + @if $active-bg-clr == null { + @if $theme == "light" { + $active-clr: darken($hover-clr, 15%); + } + @if $theme == "dark" { + $active-clr: lighten($hover-clr, 16%); + } + } @else if $active-bg-clr == default { + $active-clr: $hover-clr; + } + } + + @if $active-bg-clr == default { + @if $theme == "light" { + $active-bg-clr: darken($hover-bg-clr, 15%); + } + @if $theme == "dark" { + $active-bg-clr: lighten($hover-bg-clr, 16%); + } + } + + // focus + @if $focus-clr == default { + @if $focus-bg-clr == null { + $focus-clr: $hover-clr; + } @else if $hover-bg-clr == default { + $focus-clr: $hover-clr; + } + } + + @if $focus-bg-clr == default { + $focus-bg-clr: $hover-bg-clr; + } + + @include plain() { + color: $clr; + @if $bg-clr { + background-color: $bg-clr; + } + @if $ignore-path == false { + svg path { + fill: $clr; + } + } + } + @include hover() { + color: $hover-clr; + @if $hover-bg-clr { + background-color: $hover-bg-clr; + } + @if $ignore-path == false { + svg path { + fill: $hover-clr; + } + } + } + @include active() { + color: $active-clr; + @if $active-bg-clr { + background-color: $active-bg-clr; + } + @if $ignore-path == false { + svg path { + fill: $active-clr; + } + } + } + @include focus() { + color: $focus-clr; + @if $focus-bg-clr{ + background-color: $focus-bg-clr; + box-shadow: 0 0 0 2px rgba($focus-bg-clr, .4); + } + @if $ignore-path == false { + svg path { + fill: $focus-clr; + } + } + } + @include disabled() { + @if $theme == "light" { + color: rgba($clr, .2) !important; + } + @if $theme == "dark" { + color: rgba($clr, .4) !important; + } + @if $bg-clr { + background-color: $bg-clr !important; + } + @if $ignore-path == false { + svg path { + @if $theme == "light" { + fill: rgba($clr, .2) !important; + } + @if $theme == "dark" { + fill: rgba($clr, .4) !important; + } + } + } + } +} diff --git a/_sass/common/classes/_display.scss b/_sass/common/classes/_display.scss new file mode 100644 index 0000000..411611e --- /dev/null +++ b/_sass/common/classes/_display.scss @@ -0,0 +1,13 @@ +@each $breakpoint in map-keys($responsive) { + @include media-breakpoint-up($breakpoint) { + .d-#{breakpoint-infix($breakpoint)}none { + display: none !important; + } + } +} + +.d-print-none { + @media print { + display: none !important; + } +} diff --git a/_sass/common/classes/_flex.scss b/_sass/common/classes/_flex.scss new file mode 100644 index 0000000..019f9b2 --- /dev/null +++ b/_sass/common/classes/_flex.scss @@ -0,0 +1,396 @@ +// Flexbox Mixins +// http://philipwalton.github.io/solved-by-flexbox/ +// https://github.com/philipwalton/solved-by-flexbox +// +// Copyright (c) 2013 Brian Franco +// +// 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. +// +// This is a set of mixins for those who want to mess around with flexbox +// using the native support of current browsers. For full support table +// check: http://caniuse.com/flexbox +// +// Basically this will use: +// +// * Fallback, old syntax (IE10, mobile webkit browsers - no wrapping) +// * Final standards syntax (FF, Safari, Chrome, IE11, Opera) +// +// This was inspired by: +// +// * http://dev.opera.com/articles/view/advanced-cross-browser-flexbox/ +// +// With help from: +// +// * http://w3.org/tr/css3-flexbox/ +// * http://the-echoplex.net/flexyboxes/ +// * http://msdn.microsoft.com/en-us/library/ie/hh772069(v=vs.85).aspx +// * http://css-tricks.com/using-flexbox/ +// * http://dev.opera.com/articles/view/advanced-cross-browser-flexbox/ +// * https://developer.mozilla.org/en-us/docs/web/guide/css/flexible_boxes + +//---------------------------------------------------------------------- + +// Flexbox Containers +// +// The 'flex' value causes an element to generate a block-level flex +// container box. +// +// The 'inline-flex' value causes an element to generate a inline-level +// flex container box. +// +// display: flex | inline-flex +// +// http://w3.org/tr/css3-flexbox/#flex-containers +// +// (Placeholder selectors for each type, for those who rather @extend) + +@mixin flexbox { + display: -webkit-box; + display: -webkit-flex; + display: -moz-flex; + display: -ms-flexbox; + display: flex; +} + +%flexbox { @include flexbox; } + +//---------------------------------- + +@mixin inline-flex { + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -moz-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; +} + +%inline-flex { @include inline-flex; } + +//---------------------------------------------------------------------- + +// Flexbox Direction +// +// The 'flex-direction' property specifies how flex items are placed in +// the flex container, by setting the direction of the flex container's +// main axis. This determines the direction that flex items are laid out in. +// +// Values: row | row-reverse | column | column-reverse +// Default: row +// +// http://w3.org/tr/css3-flexbox/#flex-direction-property + +@mixin flex-direction($value: row) { + @if $value == row-reverse { + -webkit-box-direction: reverse; + -webkit-box-orient: horizontal; + } @else if $value == column { + -webkit-box-direction: normal; + -webkit-box-orient: vertical; + } @else if $value == column-reverse { + -webkit-box-direction: reverse; + -webkit-box-orient: vertical; + } @else { + -webkit-box-direction: normal; + -webkit-box-orient: horizontal; + } + + -webkit-flex-direction: $value; + -moz-flex-direction: $value; + -ms-flex-direction: $value; + flex-direction: $value; + +} +// Shorter version: +@mixin flex-dir($args...) { @include flex-direction($args...); } + +//---------------------------------------------------------------------- + +// Flexbox Wrap +// +// The 'flex-wrap' property controls whether the flex container is single-line +// or multi-line, and the direction of the cross-axis, which determines +// the direction new lines are stacked in. +// +// Values: nowrap | wrap | wrap-reverse +// Default: nowrap +// +// http://w3.org/tr/css3-flexbox/#flex-wrap-property + +@mixin flex-wrap($value: nowrap) { + // No Webkit Box fallback. + -webkit-flex-wrap: $value; + -moz-flex-wrap: $value; + @if $value == nowrap { + -ms-flex-wrap: none; + } @else { + -ms-flex-wrap: $value; + } + flex-wrap: $value; +} + +//---------------------------------------------------------------------- + +// Flexbox Flow (shorthand) +// +// The 'flex-flow' property is a shorthand for setting the 'flex-direction' +// and 'flex-wrap' properties, which together define the flex container's +// main and cross axes. +// +// Values: | +// Default: row nowrap +// +// http://w3.org/tr/css3-flexbox/#flex-flow-property + +@mixin flex-flow($values: (row nowrap)) { + // No Webkit Box fallback. + -webkit-flex-flow: $values; + -moz-flex-flow: $values; + -ms-flex-flow: $values; + flex-flow: $values; +} + +//---------------------------------------------------------------------- + +// Flexbox Order +// +// The 'order' property controls the order in which flex items appear within +// their flex container, by assigning them to ordinal groups. +// +// Default: 0 +// +// http://w3.org/tr/css3-flexbox/#order-property + +@mixin order($int: 0) { + -ms-flex-order: $int; + -webkit-order: $int; + -moz-order: $int; + order: $int; + -webkit-box-ordinal-group: $int + 1; +} + +//---------------------------------------------------------------------- + +// Flexbox Grow +// +// The 'flex-grow' property sets the flex grow factor. Negative numbers +// are invalid. +// +// Default: 0 +// +// http://w3.org/tr/css3-flexbox/#flex-grow-property + +@mixin flex-grow($int: 0) { + -webkit-box-flex: $int; + -webkit-flex-grow: $int; + -moz-flex-grow: $int; + -ms-flex-positive: $int; + flex-grow: $int; +} + +//---------------------------------------------------------------------- + +// Flexbox Shrink +// +// The 'flex-shrink' property sets the flex shrink factor. Negative numbers +// are invalid. +// +// Default: 1 +// +// http://w3.org/tr/css3-flexbox/#flex-shrink-property + +@mixin flex-shrink($int: 1) { + -webkit-flex-shrink: $int; + -moz-flex-shrink: $int; + -ms-flex-negative: $int; + flex-shrink: $int; +} + +//---------------------------------------------------------------------- + +// Flexbox Basis +// +// The 'flex-basis' property sets the flex basis. Negative lengths are invalid. +// +// Values: Like "width" +// Default: auto +// +// http://www.w3.org/TR/css3-flexbox/#flex-basis-property + +@mixin flex-basis($value: auto) { + -webkit-flex-basis: $value; + -moz-flex-basis: $value; + -ms-flex-preferred-size: $value; + flex-basis: $value; +} + +//---------------------------------------------------------------------- + +// Flexbox "Flex" (shorthand) +// +// The 'flex' property specifies the components of a flexible length: the +// flex grow factor and flex shrink factor, and the flex basis. When an +// element is a flex item, 'flex' is consulted instead of the main size +// property to determine the main size of the element. If an element is +// not a flex item, 'flex' has no effect. +// +// Values: none | || +// Default: See individual properties (1 1 0). +// +// http://w3.org/tr/css3-flexbox/#flex-property + +@mixin flex($fg: 1, $fs: null, $fb: null) { + + // Set a variable to be used by box-flex properties + $fg-boxflex: $fg; + + // Box-Flex only supports a flex-grow value so let's grab the + // first item in the list and just return that. + @if type-of($fg) == "list" { + $fg-boxflex: nth($fg, 1); + } + + -webkit-box-flex: $fg-boxflex; + -webkit-flex: $fg $fs $fb; + -moz-box-flex: $fg-boxflex; + -moz-flex: $fg $fs $fb; + -ms-flex: $fg $fs $fb; + flex: $fg $fs $fb; +} + +//---------------------------------------------------------------------- + +// Flexbox Justify Content +// +// The 'justify-content' property aligns flex items along the main axis +// of the current line of the flex container. This is done after any flexible +// lengths and any auto margins have been resolved. Typically it helps distribute +// extra free space leftover when either all the flex items on a line are +// inflexible, or are flexible but have reached their maximum size. It also +// exerts some control over the alignment of items when they overflow the line. +// +// Note: 'space-*' values not supported in older syntaxes. +// +// Values: flex-start | flex-end | center | space-between | space-around +// Default: flex-start +// +// http://w3.org/tr/css3-flexbox/#justify-content-property + +@mixin justify-content($value: flex-start) { + @if $value == flex-start { + -webkit-box-pack: start; + -ms-flex-pack: start; + } @else if $value == flex-end { + -webkit-box-pack: end; + -ms-flex-pack: end; + } @else if $value == space-between { + -webkit-box-pack: justify; + -ms-flex-pack: justify; + } @else if $value == space-around { + -ms-flex-pack: distribute; + } @else { + -webkit-box-pack: $value; + -ms-flex-pack: $value; + } + -webkit-justify-content: $value; + -moz-justify-content: $value; + justify-content: $value; +} +// Shorter version: +@mixin flex-just($args...) { @include justify-content($args...); } + +//---------------------------------------------------------------------- + +// Flexbox Align Items +// +// Flex items can be aligned in the cross axis of the current line of the +// flex container, similar to 'justify-content' but in the perpendicular +// direction. 'align-items' sets the default alignment for all of the flex +// container's items, including anonymous flex items. 'align-self' allows +// this default alignment to be overridden for individual flex items. (For +// anonymous flex items, 'align-self' always matches the value of 'align-items' +// on their associated flex container.) +// +// Values: flex-start | flex-end | center | baseline | stretch +// Default: stretch +// +// http://w3.org/tr/css3-flexbox/#align-items-property + +@mixin align-items($value: stretch) { + @if $value == flex-start { + -webkit-box-align: start; + -ms-flex-align: start; + } @else if $value == flex-end { + -webkit-box-align: end; + -ms-flex-align: end; + } @else { + -webkit-box-align: $value; + -ms-flex-align: $value; + } + -webkit-align-items: $value; + -moz-align-items: $value; + align-items: $value; +} + +//---------------------------------- + +// Flexbox Align Self +// +// Values: auto | flex-start | flex-end | center | baseline | stretch +// Default: auto + +@mixin align-self($value: auto) { + // No Webkit Box Fallback. + -webkit-align-self: $value; + -moz-align-self: $value; + @if $value == flex-start { + -ms-flex-item-align: start; + } @else if $value == flex-end { + -ms-flex-item-align: end; + } @else { + -ms-flex-item-align: $value; + } + align-self: $value; +} + +//---------------------------------------------------------------------- + +// Flexbox Align Content +// +// The 'align-content' property aligns a flex container's lines within the +// flex container when there is extra space in the cross-axis, similar to +// how 'justify-content' aligns individual items within the main-axis. Note, +// this property has no effect when the flexbox has only a single line. +// +// Values: flex-start | flex-end | center | space-between | space-around | stretch +// Default: stretch +// +// http://w3.org/tr/css3-flexbox/#align-content-property + +@mixin align-content($value: stretch) { + // No Webkit Box Fallback. + -webkit-align-content: $value; + -moz-align-content: $value; + @if $value == flex-start { + -ms-flex-line-pack: start; + } @else if $value == flex-end { + -ms-flex-line-pack: end; + } @else { + -ms-flex-line-pack: $value; + } + align-content: $value; +} diff --git a/_sass/common/classes/_grid.scss b/_sass/common/classes/_grid.scss new file mode 100644 index 0000000..7084e96 --- /dev/null +++ b/_sass/common/classes/_grid.scss @@ -0,0 +1,82 @@ +@use "sass:math"; + +$grid-columns: 12; + +.grid-container { + @include overflow(hidden); +} +.cell { + min-width: 0; +} + +@mixin make-cell($columns) { + @if $columns == "auto" { + @include flex(1 1 0); + width: auto; + } @else if $columns == "shrink" { + @include flex(0 0 auto); + width: auto; + } @else if $columns == "stretch" { + @include flex(1); + } @else { + @include flex(none); + width: percentage(math.div($columns, $grid-columns)); + } +} + +@mixin make-grid-cell($columns, $breakpoint) { + @include media-breakpoint-up($breakpoint) { + .cell--#{breakpoint-infix($breakpoint)}#{$columns} { + @include make-cell($columns); + } + } +} + +.grid { + @include flexbox(); + @include flex-wrap(wrap); + & > { + @each $breakpoint in map-keys($responsive) { + @for $i from 1 through $grid-columns { + @include make-grid-cell($i, $breakpoint); + } + @include make-grid-cell("auto", $breakpoint); + @include make-grid-cell("shrink", $breakpoint); + @include make-grid-cell("stretch", $breakpoint); + } + } +} + +.grid--reverse { + flex-direction: row-reverse; +} + +@mixin make-grid() { + $types: ("p"); + $directions: ("x", "y", ""); + $spacers: (0, 1, 2, 3, 4, 5); + + @each $type in $types { + @each $direction in $directions { + @each $spacer in $spacers { + @if $direction == "" { + .grid--#{$type}-#{$spacer} { + @include make-spacing("m", "", $spacer, true); + .cell { + @include make-spacing($type, "", $spacer); + } + } + } @else { + .grid--#{$type}#{$direction}-#{$spacer} { + @include make-spacing("m", $direction, $spacer, true); + .cell { + @include make-spacing($type, $direction, $spacer); + } + } + } + } + } + } +} + +@include make-grid(); diff --git a/_sass/common/classes/_horizontal-rules.scss b/_sass/common/classes/_horizontal-rules.scss new file mode 100644 index 0000000..74882cf --- /dev/null +++ b/_sass/common/classes/_horizontal-rules.scss @@ -0,0 +1,14 @@ +@mixin horizontal-rules() { + &::before { + display: block; + font-size: map-get($base, font-size-h2); + color: $text-color-l; + text-align: center; + letter-spacing: map-get($spacers, 4); + content: "..."; + } +} + +.horizontal-rules { + @include horizontal-rules(); +} diff --git a/_sass/common/classes/_link.scss b/_sass/common/classes/_link.scss new file mode 100644 index 0000000..5e0cb48 --- /dev/null +++ b/_sass/common/classes/_link.scss @@ -0,0 +1,12 @@ +@mixin link-colors($clr, $hover-clr: default, $active-clr: default, $focus-clr: null, $theme: default, $ignore-path: false) { + @include plain() { + text-decoration: none; + } + @include hover() { + text-decoration: underline; + } + @include active() { + text-decoration: none; + } + @include clickable($clr, null, $hover-clr, null, $active-clr, null, $focus-clr, null, $theme, $ignore-path); +} diff --git a/_sass/common/classes/_media.scss b/_sass/common/classes/_media.scss new file mode 100644 index 0000000..e17544e --- /dev/null +++ b/_sass/common/classes/_media.scss @@ -0,0 +1,17 @@ +@mixin media-breakpoint-down($name, $breakpoints: default) { + @if $breakpoints == default { + $breakpoints: $responsive; + } + @media (max-width: map-get($breakpoints, $name) - 1) { + @content; + } +} + +@mixin media-breakpoint-up($name, $breakpoints: default) { + @if $breakpoints == default { + $breakpoints: $responsive; + } + @media (min-width: map-get($breakpoints, $name)) { + @content; + } +} diff --git a/_sass/common/classes/_overflow.scss b/_sass/common/classes/_overflow.scss new file mode 100644 index 0000000..6529bf0 --- /dev/null +++ b/_sass/common/classes/_overflow.scss @@ -0,0 +1,26 @@ +@mixin overflow($overflow: auto, $direction: default) { + @if $direction == default { + overflow: $overflow; + } @else if $direction == "x" { + @if $overflow == auto { + overflow: hidden; + } + overflow-x: $overflow; + } @else if $direction == "y" { + @if $overflow == auto { + overflow: hidden; + } + overflow-y: $overflow; + } + @if $overflow == auto { + -webkit-overflow-scrolling: touch; + } +} + +.of-auto { + @include overflow(auto); +} + +.of-hidden { + @include overflow(hidden); +} diff --git a/_sass/common/classes/_pseudo.scss b/_sass/common/classes/_pseudo.scss new file mode 100644 index 0000000..53310a9 --- /dev/null +++ b/_sass/common/classes/_pseudo.scss @@ -0,0 +1,33 @@ +@mixin plain() { + &, + &:link, + &:visited { + @content; + } +} + +@mixin hover() { + .root[data-is-touch="false"] &:hover { + @content; + } +} + +@mixin active() { + .root[data-is-touch] &.active, + .root[data-is-touch] &:active { + @content; + } +} + +@mixin focus() { + .root[data-is-touch] &.focus { + @content; + } +} + +@mixin disabled() { + &.disabled, + &:disabled { + @content; + } +} diff --git a/_sass/common/classes/_shadow.scss b/_sass/common/classes/_shadow.scss new file mode 100644 index 0000000..e28b9ca --- /dev/null +++ b/_sass/common/classes/_shadow.scss @@ -0,0 +1,22 @@ +@mixin box-shadow($level: default, $color: default) { + @if $color == default { + $color: #000; + } + @if $level == 0 { + box-shadow: none; + } + @if $level == 1 or $level == default { + box-shadow: 0 4px 8px rgba($color, .23), 0 1px 3px rgba($color, .08), 0 6px 12px rgba($color, .02); + } + @if $level == 2 { + box-shadow: 0 8px 16px rgba($color, .23), 0 2px 6px rgba($color, .08), 0 12px 24px rgba($color, .02); + } +} + +.box-shadow-1 { + @include box-shadow(); +} + +.box-shadow-2 { + @include box-shadow(2); +} diff --git a/_sass/common/classes/_spacing.scss b/_sass/common/classes/_spacing.scss new file mode 100644 index 0000000..c07fdce --- /dev/null +++ b/_sass/common/classes/_spacing.scss @@ -0,0 +1,81 @@ +@mixin make-spacing($property, $side, $spacer, $negative: false) { + + $css_property: null; + $css_sides: null; + + @if ($property == "m") { + $css_property: "margin"; + } @else if ($property == "p") { + $css_property: "padding"; + } + + @if ($side == "t") { + $css_sides: ("top"); + } + @else if ($side == "b") { + $css_sides: ("bottom"); + } + @else if ($side == "l") { + $css_sides: ("left"); + } + @else if ($side == "r") { + $css_sides: ("right"); + } + @else if ($side == "x") { + $css_sides: ("left", "right"); + } + @else if ($side == "y") { + $css_sides: ("top", "bottom"); + } + @else if ($side == "") { + $css_sides: (""); + } + + @each $side in $css_sides { + @if ($spacer == "auto") { + @if ($side == "") { + #{$css_property}: auto; + } @else { + #{$css_property}-#{$side}: auto; + } + } @else { + @if ($side == "") { + @if ($negative == true) { + #{$css_property}: - map-get($spacers, $spacer); + } @else { + #{$css_property}: map-get($spacers, $spacer); + } + } @else { + @if ($negative == true) { + #{$css_property}-#{$side}: - map-get($spacers, $spacer); + } @else { + #{$css_property}-#{$side}: map-get($spacers, $spacer); + } + } + } + } +} + +@mixin make-spacings() { + $propertys: ("m", "p"); + $sides: ("t", "b", "l", "r", "x", "y", ""); + $spacers: (0, 1, 2, 3, 4, 5); + + @each $property in $propertys { + @each $side in $sides { + @each $spacer in $spacers { + .#{$property}#{$side}-#{$spacer} { + @include make-spacing($property, $side, $spacer); + } + } + } + } + + @each $side in $sides { + .m#{$side}-auto { + @include make-spacing("m", $side, "auto"); + } + } +} + +@include make-spacings(); diff --git a/_sass/common/classes/_split-line.scss b/_sass/common/classes/_split-line.scss new file mode 100644 index 0000000..4434c6f --- /dev/null +++ b/_sass/common/classes/_split-line.scss @@ -0,0 +1,24 @@ +@mixin split-line($direction: default, $width: default, $color: default) { + @if $direction == default { + $direction: top; + } + @if $color == default { + $color: $border-color-l; + } + @if $width == default { + $width: 1px; + } + border: 0 solid $color; + @if $direction == top { + border-top-width: $width; + } + @if $direction == right { + border-right-width: $width; + } + @if $direction == bottom { + border-bottom-width: $width; + } + @if $direction == left { + border-left-width: $width; + } +} diff --git a/_sass/common/classes/_text.scss b/_sass/common/classes/_text.scss new file mode 100644 index 0000000..ac36726 --- /dev/null +++ b/_sass/common/classes/_text.scss @@ -0,0 +1,37 @@ +@mixin text-light { + color: $text-color-theme-light; + h1, h2, h3 { + color: $text-color-theme-light-d; + } + h4, h5 { + color: $text-color-theme-light; + } + h6 { + color: $text-color-theme-light-l; + } + a:not(.button) { + @include link-colors($text-color-theme-light, $main-color-1); + } +} +@mixin text-dark { + color: $text-color-theme-dark; + h1, h2, h3 { + color: $text-color-theme-dark-d; + } + h4, h5 { + color: $text-color-theme-dark; + } + h6 { + color: $text-color-theme-dark-l; + } + a:not(.button) { + @include link-colors($text-color-theme-dark, $main-color-1); + } +} + +.text--light { + @include text-light(); +} +.text--dark { + @include text-dark(); +} diff --git a/_sass/common/classes/_transform.scss b/_sass/common/classes/_transform.scss new file mode 100644 index 0000000..a552879 --- /dev/null +++ b/_sass/common/classes/_transform.scss @@ -0,0 +1,4 @@ +@mixin transform($value) { + -webkit-transform: $value; + transform: $value; +} diff --git a/_sass/common/classes/_transition.scss b/_sass/common/classes/_transition.scss new file mode 100644 index 0000000..a58b3f8 --- /dev/null +++ b/_sass/common/classes/_transition.scss @@ -0,0 +1,4 @@ +@mixin transition($value) { + & { -webkit-transition: $value; } + & {transition: $value; } +} diff --git a/_sass/common/classes/_user-select.scss b/_sass/common/classes/_user-select.scss new file mode 100644 index 0000000..104cbb5 --- /dev/null +++ b/_sass/common/classes/_user-select.scss @@ -0,0 +1,6 @@ +@mixin user-select($value) { + -webkit-user-select: $value; + -moz-user-select: $value; + -ms-user-select: $value; + user-select: $value; +} diff --git a/_sass/common/components/_button.scss b/_sass/common/components/_button.scss new file mode 100644 index 0000000..08ce7a9 --- /dev/null +++ b/_sass/common/components/_button.scss @@ -0,0 +1,163 @@ +@mixin button() { + display: inline-block; + font-weight: map-get($button, font-weight); + line-height: 1 !important; + text-decoration: none !important; + cursor: pointer; + outline: none; + @include user-select(none); + svg { + width: 1rem; + height: 1rem; + } + @include disabled() { + cursor: not-allowed; + } +} + +.button { + @include button(); +} + +.button--primary { + @include clickable($text-color-1, $main-color-1); +} + +.button--secondary { + @include clickable($text-color-3, $main-color-3); +} + +.button--success { + @include clickable($text-color-function, $green); +} + +.button--info { + @include clickable($text-color-function, $blue); +} + +.button--warning { + @include clickable($text-color-function, $yellow); +} + +.button--error { + @include clickable($text-color-function, $red); +} + +.button--theme-light { + @include clickable($text-color-theme-dark, $main-color-theme-light); +} + +.button--theme-dark { + @include clickable($text-color-theme-light, $main-color-theme-dark); +} + +.button--outline-primary { + color: $main-color-1; + border: 1px solid $main-color-1; + @include clickable($main-color-1, transparent, $text-color-1, $main-color-1); +} + +.button--outline-secondary { + color: $main-color-3; + border: 1px solid $main-color-3; + @include clickable($main-color-3, transparent, $text-color-3, $main-color-3); +} + +.button--outline-success { + color: $green; + border: 1px solid $green; + @include clickable($green, transparent, $text-color-function, $green); +} + +.button--outline-info { + color: $blue; + border: 1px solid $blue; + @include clickable($blue, transparent, $text-color-function, $blue); +} + +.button--outline-warning { + color: $yellow; + border: 1px solid $yellow; + @include clickable($yellow, transparent, $text-color-function, $yellow); +} + +.button--outline-error { + color: $red; + border: 1px solid $red; + @include clickable($red, transparent, $text-color-function, $red); +} + +.button--outline-theme-light { + color: $main-color-theme-light; + border: 1px solid $main-color-theme-light; + @include clickable($main-color-theme-light, transparent, $text-color-theme-dark, $main-color-theme-light); +} + +.button--outline-theme-dark { + color: $main-color-theme-dark; + border: 1px solid $main-color-theme-dark; + @include clickable($main-color-theme-dark, transparent, $text-color-theme-light, $main-color-theme-dark); +} + +.button--pill { + border-radius: map-get($button, pill-radius); + @extend .button--md; +} + +.button--rounded { + border-radius: map-get($base, border-radius); + @extend .button--md; +} + +.button--circle { + @include inline-flex(); + @include justify-content(center); + @include align-items(center); + border-radius: 50%; + @extend .button--md; +} + +.button--md { + padding: map-get($button, padding-y) map-get($button, padding-x); + font-size: map-get($base, font-size); + &.button--circle { + width: map-get($button, circle-diameter); + height: map-get($button, circle-diameter); + } +} + +.button--xs { + padding: map-get($button, padding-y-xs) map-get($button, padding-x-xs); + font-size: map-get($base, font-size-xs); + &.button--circle { + width: map-get($button, circle-diameter-xs); + height: map-get($button, circle-diameter-xs); + } +} + +.button--sm { + padding: map-get($button, padding-y-sm) map-get($button, padding-x-sm); + font-size: map-get($base, font-size-sm); + &.button--circle { + width: map-get($button, circle-diameter-sm); + height: map-get($button, circle-diameter-sm); + } +} + +.button--lg { + padding: map-get($button, padding-y-lg) map-get($button, padding-x-lg); + font-size: map-get($base, font-size-lg); + &.button--circle { + width: map-get($button, circle-diameter-lg); + height: map-get($button, circle-diameter-lg); + } +} + +.button--xl { + padding: map-get($button, padding-y-xl) map-get($button, padding-x-xl); + font-size: map-get($base, font-size-xl); + &.button--circle { + width: map-get($button, circle-diameter-xl); + height: map-get($button, circle-diameter-xl); + } +} diff --git a/_sass/common/components/_card.scss b/_sass/common/components/_card.scss new file mode 100644 index 0000000..2431461 --- /dev/null +++ b/_sass/common/components/_card.scss @@ -0,0 +1,103 @@ + +.card { + max-width: 18rem; + border-radius: map-get($base, border-radius); + @include box-shadow(); + @include transition(box-shadow map-get($animation, duration) map-get($animation, timing-function)); + & > :first-child { + border-top-left-radius: map-get($base, border-radius); + border-top-right-radius: map-get($base, border-radius); + } + & > :last-child { + border-bottom-right-radius: map-get($base, border-radius); + border-bottom-left-radius: map-get($base, border-radius); + } +} + +.cell { + & > .card { + max-width: unset; + } +} + +.card__content { + padding: map-get($spacers, 2) map-get($spacers, 3); +} + +.card__header, .card__header > a { + @include link-colors($text-color-d, $main-color-1); +} + +.card__image { + position: relative; + width: 100%; + & > img { + display: block; + width: 100%; + height: auto; + border-radius: inherit; + } + & > .overlay { + position: absolute; + width: 100%; + max-height: 100%; + padding: map-get($spacers, 2); + a { + text-decoration: none !important; + } + } + & > .overlay, & > .overlay--top { + top: 0; + bottom: auto; + border-top-left-radius: inherit; + border-top-right-radius: inherit; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + } + & > .overlay--bottom { + top: auto; + bottom: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: inherit; + border-bottom-left-radius: inherit; + } + & > .overlay--full { + top: 0; + bottom: 0; + } + & > .overlay, & > .overlay--dark { + @extend .text--dark; + background-color: rgba(#000, .4); + } + & > .overlay--light { + @extend .text--light; + background: rgba(#fff, .4); + } +} + +.card--clickable { + cursor: pointer; + @include hover() { + @include box-shadow(2); + .card__image { + & > img { + height: inherit; + } + } + } + @include transition(map-get($clickable, transition)); +} + +.card--flat { + @include box-shadow(0); + .card__image { + & > img { + border-radius: map-get($base, border-radius); + } + } + .card__content { + padding-top: 0; + padding-left: 0; + } +} diff --git a/_sass/common/components/_gallery.scss b/_sass/common/components/_gallery.scss new file mode 100644 index 0000000..689eeae --- /dev/null +++ b/_sass/common/components/_gallery.scss @@ -0,0 +1,21 @@ +.gallery { + height: 100%; + @include flexbox(); + @include flex-direction(column); +} + +.gallery__swiper { + @include flex(1); +} + +.gallery-item { + @include flexbox(); + @include align-items(center); + @include justify-content(center); + height: 100%; + overflow: hidden; +} + +.gallery-item__main { + display: block; +} diff --git a/_sass/common/components/_hero.scss b/_sass/common/components/_hero.scss new file mode 100644 index 0000000..81a72cc --- /dev/null +++ b/_sass/common/components/_hero.scss @@ -0,0 +1,70 @@ +.hero { + background-position: 50% 50%; + @include flexbox(); + @include flex-direction(column); + @include justify-content(center); + h1 { font-size: map-get($base, font-size-h1-xl); } + h2 { font-size: map-get($base, font-size-h2-xl); } + h3 { font-size: map-get($base, font-size-h3-xl); } + h4 { font-size: map-get($base, font-size-h4-xl); } + h5 { font-size: map-get($base, font-size-h5-xl); } + h6 { font-size: map-get($base, font-size-h6-xl); } + p { font-size: map-get($base, font-size-xl); } + @include media-breakpoint-down(lg) { + h1 { font-size: map-get($base, font-size-h1-lg); } + h2 { font-size: map-get($base, font-size-h2-lg); } + h3 { font-size: map-get($base, font-size-h3-lg); } + h4 { font-size: map-get($base, font-size-h4-lg); } + h5 { font-size: map-get($base, font-size-h5-lg); } + h6 { font-size: map-get($base, font-size-h6-lg); } + p { font-size: map-get($base, font-size-lg); } + } + @include media-breakpoint-down(md) { + h1 { font-size: map-get($base, font-size-h1-sm); } + h2 { font-size: map-get($base, font-size-h2-sm); } + h3 { font-size: map-get($base, font-size-h3-sm); } + h4 { font-size: map-get($base, font-size-h4-sm); } + h5 { font-size: map-get($base, font-size-h5-sm); } + h6 { font-size: map-get($base, font-size-h6-sm); } + p { font-size: map-get($base, font-size); } + } + background-size: cover; + +} + +.hero--center { + text-align: center; + .menu { + @extend .menu--center; + } +} + +.hero--light { + @extend .text--light; +} + +.hero--dark { + @extend .text--dark; +} + +.hero__content { + margin: map-get($spacers, 5); + @include media-breakpoint-down(lg) { + margin: map-get($spacers, 5) map-get($spacers, 4); + } + @include media-breakpoint-down(md) { + margin: map-get($spacers, 4) map-get($spacers, 3); + } +} + +.heros { + & > .hero { + margin: map-get($spacers, 5); + @include media-breakpoint-down(lg) { + margin: map-get($spacers, 3); + } + @include media-breakpoint-down(md) { + margin: map-get($spacers, 2) 0; + } + } +} diff --git a/_sass/common/components/_image.scss b/_sass/common/components/_image.scss new file mode 100644 index 0000000..9d1a220 --- /dev/null +++ b/_sass/common/components/_image.scss @@ -0,0 +1,19 @@ +.image { + max-width: 100%; + @extend .image--md; +} +.image--md { + width: map-get($image, width); +} +.image--xl { + width: map-get($image, width-xl); +} +.image--lg { + width: map-get($image, width-lg); +} +.image--sm { + width: map-get($image, width-sm); +} +.image--xs { + width: map-get($image, width-xs); +} diff --git a/_sass/common/components/_item.scss b/_sass/common/components/_item.scss new file mode 100644 index 0000000..a1a9fd0 --- /dev/null +++ b/_sass/common/components/_item.scss @@ -0,0 +1,100 @@ +.item { + @include flexbox(); + @include media-breakpoint-down(md) { + @include flex-direction(column); + } +} + +.item__image { + margin-right: map-get($spacers, 3); + & + .item__content { + & > :first-child { + margin-top: 0; + & > :first-child { + margin-top: 0; + } + } + } + @include media-breakpoint-down(md) { + margin-right: 0; + } +} + +.item__content { + @include flex(1); + min-width: 0; +} + +a > .item__header, a.item__header, .item__header > a { + @include link-colors($text-color-d, $main-color-1); +} + +.item__meta { + color: $text-color-l; +} + +.item__description { + &, .article__content { + font-size: map-get($base, font-size-sm); + line-height: map-get($base, line-height); + @include block-elements() { + margin-top: map-get($spacers, 2); + margin-bottom: map-get($spacers, 2); + } + @include heading-elements() { + margin-top: map-get($spacers, 3); + } + h1, h2, h3 { + color: $text-color; + } + h1, h2 { + padding: 0; + border: none; + } + h1 { + font-size: map-get($base, font-size-h1-xs); + } + h2 { + font-size: map-get($base, font-size-h2-xs); + } + h3 { + font-size: map-get($base, font-size-h3-xs); + } + h4 { + font-size: map-get($base, font-size-h4-xs); + } + h5 { + font-size: map-get($base, font-size-h5-xs); + } + h6 { + font-size: map-get($base, font-size-h6-xs); + } + img { + max-height: 32rem; + @include media-breakpoint-down(md) { + max-height: 14rem; + } + } + } +} + +.items { + & > .item { + &:not(:last-child) { + margin-bottom: map-get($spacers, 2); + } + } +} + +.items--divided { + & > .item { + &:not(:first-child) { + padding-top: map-get($spacers, 4); + } + &:not(:last-child) { + padding-bottom: map-get($spacers, 4); + @include split-line(bottom); + } + list-style-type: none; + } +} diff --git a/_sass/common/components/_menu.scss b/_sass/common/components/_menu.scss new file mode 100644 index 0000000..222676a --- /dev/null +++ b/_sass/common/components/_menu.scss @@ -0,0 +1,67 @@ +@mixin menu-direction($direction: default) { + @if $direction == default { + $direction: "horizontal"; + } + @if $direction == "vertical" { + @include flex-direction(column); + } @else { + @include flex-direction(row); + } +} + +@mixin menu($horizontal-spacer: default, $horizontal-item-vertical-spacer: default, $wrap: default) { + @if $horizontal-spacer == default { + $horizontal-spacer: map-get($menu, horizontal-spacer); + } + @if $horizontal-item-vertical-spacer == default { + $horizontal-item-vertical-spacer: map-get($menu, horizontal-item-vertical-spacer); + } + @if $wrap == default { + $wrap: wrap; + } + @include flexbox(); + @include flex-wrap($wrap); + margin-top: 0; + margin-bottom: 0; + & > li { + @if $horizontal-item-vertical-spacer { + margin-top: map-get($spacers, $horizontal-item-vertical-spacer); + margin-bottom: map-get($spacers, $horizontal-item-vertical-spacer); + } + margin-right: map-get($spacers, $horizontal-spacer); + list-style-type: none; + &:last-child { + margin-right: 0; + } + } +} + +.menu { + @include menu(); + @include menu-direction(); + @include align-items(center); +} + +.menu--vertical { + @include menu-direction("vertical"); + @include align-items(normal); + & > li { + margin-right: 0; + } +} + +.menu--inline { + @include inline-flex(); +} + +.menu--center { + @include justify-content(center); +} + +.menu--nowrap { + @include flex-wrap(nowrap); +} + +.menu--grow { + @include flex-grow(1); +} diff --git a/_sass/common/components/_modal.scss b/_sass/common/components/_modal.scss new file mode 100644 index 0000000..cd71628 --- /dev/null +++ b/_sass/common/components/_modal.scss @@ -0,0 +1,39 @@ +@mixin modal($z-index: default, $color: default, $background-color: default) { + @if $z-index == default { + $z-index: map-get($z-indexes, modal); + } + @if $color == default { + $color: $text-color-theme-dark; + } + @if $background-color == default { + $background-color: $mask-color; + } + position: fixed; + top: 0; + left: 0; + z-index: $z-index; + width: 100%; + height: 100%; + color: $color; + touch-action: none; + background-color: $background-color; + opacity: 0; + @include transform(translate(100%, 0)); + @include transition(#{opacity map-get($animation, duration) map-get($animation, timing-function), + transform 0s map-get($animation, duration) map-get($animation, timing-function)}); +} +@mixin modal--show() { + opacity: 1; + @include transform(translate(0, 0)); + @include transition(#{opacity map-get($animation, duration) map-get($animation, timing-function)}); +} + +.modal { + @include modal(); +} +.modal--show { + @include modal--show(); +} +.modal--overflow { + @include overflow(auto); +} diff --git a/_sass/common/components/_swiper.scss b/_sass/common/components/_swiper.scss new file mode 100644 index 0000000..3493a62 --- /dev/null +++ b/_sass/common/components/_swiper.scss @@ -0,0 +1,48 @@ +.swiper { + position: relative; + @include overflow(hidden); +} + +.swiper__wrapper, .swiper__slide { + width: 100%; + height: 100%; +} + +.swiper__wrapper { + @include flexbox(); +} + +.swiper__wrapper--animation { + @include transition(transform map-get($animation, duration) map-get($animation, timing-function)); +} + +.swiper__slide { + @include flex-shrink(0); + & > img { + max-width: 100%; + } +} + +.swiper__button { + position: absolute; + top: 50%; + @extend .button, .button--circle; + @include transform(translate(0, -50%)); + @include clickable($text-color-d, rgba($main-color-3, .4)); +} + +.swiper--light .swiper__button { + @include clickable($text-color-theme-light, rgba($main-color-theme-dark, .4)); +} + +.swiper--dark .swiper__button { + @include clickable($text-color-theme-dark, rgba($main-color-theme-light, .4)); +} + +.swiper__button--prev { + left: 10px; +} + +.swiper__button--next { + right: 10px; +} diff --git a/_sass/common/components/_toc.scss b/_sass/common/components/_toc.scss new file mode 100644 index 0000000..ee16545 --- /dev/null +++ b/_sass/common/components/_toc.scss @@ -0,0 +1,124 @@ +ul.toc { + display: block; + margin: 0; + color: $text-color; + list-style-type: none; + & > li { + margin: map-get($spacers, 1) * 0.5 0; + a { + display: inline-block; + margin: map-get($spacers, 1) * 0.25 0; + text-decoration: none !important; + } + } + .toc-h1, + .toc-h2, + .toc-h3, + .toc-h4, + .toc-h5, + .toc-h6 { + a { + @include link-colors($text-color, $main-color-1); + } + &.active { + a { + @include link-colors($main-color-1); + } + } + } + + .toc-h2, + .toc-h3, + .toc-h4, + .toc-h5, + .toc-h6 { + &, a { + font-size: map-get($base, font-size-xs); + font-weight: map-get($base, font-weight); + line-height: map-get($base, line-height-xs); + } + } + .toc-h1 { + @include split-line(bottom); + padding: map-get($spacers, 2) 0 map-get($spacers, 1) 0; + margin-bottom: map-get($spacers, 2); + color: $text-color-d; + &, a { + font-size: map-get($base, font-size-sm); + font-weight: map-get($base, font-weight-bold); + line-height: map-get($base, line-height-sm); + } + a { + @include link-colors($text-color-d, $main-color-1); + } + } + .toc-h2 { + &, a { + font-weight: map-get($base, font-weight-bold); + } + } + .toc-h3 { + margin-left: map-get($spacers, 3); + } + .toc-h4 { + margin-left: map-get($spacers, 3) * 2; + } + .toc-h5, + .toc-h6 { + margin-left: map-get($spacers, 3) * 3; + } + .toc-h6 { + color: $text-color-l; + a { + @include link-colors($text-color-l, $main-color-1); + } + } +} + +ul.toc--ellipsis { + & > li { + @include overflow(hidden); + text-overflow: ellipsis; + white-space: nowrap; + } +} + +ul.toc--navigator { + & > li { + a { + padding-left: map-get($spacers, 2); + margin: map-get($spacers, 1) 0; + } + &.active { + a { + margin-left: -4px; + @include split-line(left, 4px, $main-color-1); + } + } + } + .toc-h2, + .toc-h3, + .toc-h4 { + color: $text-color-l; + a { + @include link-colors($text-color-l); + } + } + .toc-h1 { + &, a { + font-size: map-get($base, font-size); + line-height: map-get($base, line-height); + } + color: $text-color; + a { + @include link-colors($text-color-d); + } + } + .toc-h2 { + &, a { + font-size: map-get($base, font-size-sm); + font-weight: map-get($base, font-weight-bold); + line-height: map-get($base, line-height-sm); + } + } +} \ No newline at end of file diff --git a/_sass/components/_article-content.scss b/_sass/components/_article-content.scss new file mode 100644 index 0000000..6dbda0d --- /dev/null +++ b/_sass/components/_article-content.scss @@ -0,0 +1,221 @@ +.article__content { + line-height: map-get($base, line-height-lg); + word-wrap: break-word; + @media print { + line-height: map-get($base, line-height); + } + @include block-elements() { + margin: map-get($spacers, 3) 0; + @media print { + margin: map-get($spacers, 2) 0; + } + } + @include heading-elements() { + position: relative; + margin-top: map-get($spacers, 4); + @media print { + margin-top: map-get($spacers, 3); + } + & > .anchor { + @include link-colors($border-color, $main-color-1); + margin-left: map-get($spacers, 1); + text-decoration: none; + visibility: hidden; + opacity: 0; + & > i { + font-size: map-get($base, font-size-sm); + } + } + @include hover() { + & > .anchor { + cursor: pointer; + visibility: visible; + opacity: 1; + } + } + } + h1, + h2 { + @include split-line(bottom); + } + hr { + border: none; + @include horizontal-rules(); + } + blockquote { + padding-left: map-get($spacers, 3); + font-size: map-get($base, font-size-sm); + color: $text-color-l; + @include split-line(left, 4px, $border-color); + p { + margin: map-get($spacers, 2) 0; + } + & > :last-child { + margin-bottom: 0; + } + } + img:not(.emoji) { + max-width: 100%; + vertical-align: middle; + } + .emoji { + display: inline-block; + width: map-get($base, line-height-lg) * .7rem; + height: map-get($base, line-height-lg) * .7rem; + vertical-align: text-bottom; + } + .footnotes { + @include split-line(); + margin-top: map-get($spacers, 5); + @media print { + margin-top: map-get($spacers, 2) * 2; + } + } + code { + padding: map-get($spacers, 1) map-get($spacers, 2); + background-color: $text-background-color; + border-radius: map-get($base, border-radius); + span { + padding: 0; + margin: 0; + } + } + pre { + @include overflow(auto); + & > code { + padding: 0; + word-wrap: normal; + background-color: transparent; + &.language-mermaid, &.language-chart { + svg { + width: 100%; + } + display: none; + &[data-processed] { + display: block; + } + } + } + } + .highlighter-rouge > .highlight, figure.highlight { + & > pre { + padding: map-get($spacers, 3) 0 map-get($spacers, 3) map-get($spacers, 3); + margin: 0; + background-color: $text-background-color; + border-radius: map-get($base, border-radius); + & > code { + display: block; + } + } + } + figure.highlight { + &::before { + display: block; + padding: map-get($spacers, 2) map-get($spacers, 3) map-get($spacers, 2) 0; + font-weight: map-get($base, font-weight-bold); + color: $decorate-color; + text-align: right; + text-transform: uppercase; + content: attr(data-lang); + background-color: $text-background-color; + border-top-left-radius: map-get($base, border-radius); + border-top-right-radius: map-get($base, border-radius); + } + & > pre { + padding-top: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; + & > code { + & > .rouge-table { + width: auto; + margin: 0 0 #{- map-get($spacers, 3)} #{- map-get($spacers, 3)}; + tbody, tr, td { + padding-top: 0; + padding-bottom: 0; + border: none; + } + & > tbody { + @include flexbox; + & > tr { + width: 100%; + @include flexbox; + & > .code { + padding: 0 0 map-get($spacers, 3) map-get($spacers, 2); + @include overflow(auto); + } + } + } + tbody td { + &.gl { + padding-left: map-get($spacers, 3); + } + & > pre { + display: block; + margin: 0; + border-radius: 0; + @include overflow(auto); + &.lineno { + color: $text-color-l; + @include user-select(none); + } + } + } + } + } + } + } + ul, ol { + margin-left: map-get($spacers, 4); + ul, ol { + margin-top: 0; + margin-bottom: 0; + } + li { + p { + margin: map-get($spacers, 2); + @media print { + margin: map-get($spacers, 1); + } + } + } + } + dl { + dt, dd { + p { + margin: map-get($spacers, 2); + @media print { + margin: map-get($spacers, 1); + } + } + } + dt { + font-weight: map-get($base, font-weight-bold); + } + dd { + margin-left: 2rem; + } + } + ul.task-list { + margin-left: 0; + list-style-type: none; + ul, ol { + margin-left: map-get($spacers, 4); + } + } + table { + display: block; + width: 100%; + border-collapse: collapse; + @include overflow(auto); + thead, tfoot { + background-color: $text-background-color; + } + th, td { + padding: map-get($spacers, 2); + border: 1px solid $border-color-l; + } + th { + font-weight: map-get($base, font-weight-bold); + } + } +} diff --git a/_sass/components/_article-footer.scss b/_sass/components/_article-footer.scss new file mode 100644 index 0000000..575bc8d --- /dev/null +++ b/_sass/components/_article-footer.scss @@ -0,0 +1,17 @@ +.article__footer { + margin: map-get($spacers, 4) 0; + font-size: map-get($base, font-size-sm); +} + +.article__license, .article__subscribe { + a { + @include link-colors($text-color, $main-color-1); + } +} + +.article__license { + color: $text-color-l; + img { + height: map-get($base, font-size) * 1.6; + } +} diff --git a/_sass/components/_article-header.scss b/_sass/components/_article-header.scss new file mode 100644 index 0000000..002cc8c --- /dev/null +++ b/_sass/components/_article-header.scss @@ -0,0 +1,50 @@ +.article__header { + margin-top: map-get($spacers, 5); + margin-bottom: map-get($spacers, 4); + @include media-breakpoint-down(md) { + margin-top: map-get($spacers, 4); + } + header, h1 { + display: inline; + } + h1 { + word-wrap: break-word; + } + .split-space { + @include user-select(none); + } + .edit-on-github { + text-decoration: none !important; + } +} + +.article__header--overlay { + .overlay { + min-height: 36rem; + padding-top: map-get($spacers, 5) * 2; + padding-bottom: map-get($spacers, 5) * 2; + @include media-breakpoint-down(md) { + min-height: 29rem; + padding-top: map-get($spacers, 5); + padding-bottom: map-get($spacers, 5); + } + } + .overlay__excerpt { + font-size: map-get($base, font-size-h3-xl); + @include media-breakpoint-down(lg) { + font-size: map-get($base, font-size-h3-lg); + } + @include media-breakpoint-down(md) { + font-size: map-get($base, font-size-h3-sm); + } + font-weight: map-get($base, font-weight-bold); + } + + .article__header { + margin-top: 0; + } +} + +.article__header--cover { + width: 100%; +} diff --git a/_sass/components/_article-info.scss b/_sass/components/_article-info.scss new file mode 100644 index 0000000..bebf9b5 --- /dev/null +++ b/_sass/components/_article-info.scss @@ -0,0 +1,25 @@ +.article__info { + font-size: map-get($base, font-size-sm); + color: $text-color-l; + .left-col { + float: left; + @include media-breakpoint-down(md) { + float: none; + } + } + .right-col { + float: right; + margin-left: map-get($button, padding-x-sm); + @include media-breakpoint-down(md) { + float: none; + } + & > li { + &:not(:last-child) { + @include split-line(right, default, $text-color-l); + padding-right: map-get($spacers, 2); + margin-right: map-get($spacers, 2); + line-height: map-get($base, line-height-xs); + } + } + } +} diff --git a/_sass/components/_article-list.scss b/_sass/components/_article-list.scss new file mode 100644 index 0000000..c59550d --- /dev/null +++ b/_sass/components/_article-list.scss @@ -0,0 +1,18 @@ +.article-list { + .item__meta { + padding: 0 map-get($spacers, 3) 0 0; + font-family: map-get($base, font-family-code); + font-size: map-get($base, font-size-sm); + white-space: nowrap; + } + &.grid--sm { + .card__header { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + } +} +.article-list__group-header { + margin-top: map-get($spacers, 3); +} diff --git a/_sass/components/_author-links.scss b/_sass/components/_author-links.scss new file mode 100644 index 0000000..efe09c2 --- /dev/null +++ b/_sass/components/_author-links.scss @@ -0,0 +1,43 @@ +.author-links { + & > ul { + margin: 0; + & > li > { + .mail-button { + @include clickable($text-color-1, $mail-color); + } + .facebook-button { + @include clickable($text-color-1, $facebook-color); + } + .twitter-button { + @include clickable($text-color-1, $twitter-color); + } + .weibo-button { + @include clickable($text-color-1, $weibo-color); + } + .googlepluse-button { + @include clickable($text-color-1, $google-plus-color); + } + .telegram-button { + @include clickable($text-color-1, $telegram-color); + } + .medium-button { + @include clickable($text-color-1, $medium-color); + } + .zhihu-button { + @include clickable($text-color-1, $zhihu-color); + } + .douban-button { + @include clickable($text-color-1, $douban-color); + } + .linkedin-button { + @include clickable($text-color-1, $linkedin-color); + } + .github-button { + @include clickable($text-color-1, $github-color); + } + .npm-button { + @include clickable($text-color-1, $npm-color); + } + } + } +} diff --git a/_sass/components/_author-profile.scss b/_sass/components/_author-profile.scss new file mode 100644 index 0000000..b506715 --- /dev/null +++ b/_sass/components/_author-profile.scss @@ -0,0 +1,26 @@ +.author-profile { + max-width: 25rem; + padding: map-get($spacers, 2) map-get($spacers, 3); + margin: map-get($spacers, 4) 0; + font-size: map-get($base, font-size-sm); + background-color: $text-background-color; + @include media-breakpoint-down(md) { + text-align: center; + } +} +.author-profile__avatar { + width: 5rem; + height: 5rem; + margin-top: map-get($spacers, 2); + border-radius: 50%; +} +.author-profile__name { + font-size: map-get($base, font-size-lg); + font-weight: map-get($base, font-weight-bold); + a { + @include link-colors($text-color, $main-color-1); + } +} +.author-profile__links { + @include overflow(auto); +} diff --git a/_sass/components/_extensions.scss b/_sass/components/_extensions.scss new file mode 100644 index 0000000..6bf58ec --- /dev/null +++ b/_sass/components/_extensions.scss @@ -0,0 +1,36 @@ +@use 'sass:math'; +.extensions { + margin: map-get($spacers, 3) 0; + @extend .d-print-none; +} + +.extensions--video, .extensions--slide, .extensions--demo { + position: relative; + width: 100%; + padding: 0; + & > iframe { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + } +} + +.extensions--video { + padding-top: math.div(315, 560); +} + +.extensions--slide { + padding-top: math.div(487, 599); +} + +.extensions--demo { + min-height: 340px; + padding-top: math.div(315, 560); +} + +.extensions--audio { + display: block; + max-width: 100% !important; +} diff --git a/_sass/components/_footer.scss b/_sass/components/_footer.scss new file mode 100644 index 0000000..63ed8fe --- /dev/null +++ b/_sass/components/_footer.scss @@ -0,0 +1,33 @@ +/** + * Site Info + */ + +.footer { + @include flexbox(); + @include align-items(center); + color: $footer-text-color; + background: $footer-background; + a { + @include link-colors ($footer-text-color, $main-color-1); + } + .site-info { + font-size: map-get($base, font-size-xs); + text-align: center; + .menu { + line-height: map-get($base, line-height-xs); + & > * { + &:not(:last-child) { + @include split-line(right, default, $footer-text-color); + padding-right: map-get($spacers, 1); + margin-right: map-get($spacers, 1); + } + } + } + } +} +.footer__author-links { + @include overflow(auto); + .author-links { + text-align: center; + } +} diff --git a/_sass/components/_header.scss b/_sass/components/_header.scss new file mode 100644 index 0000000..44d108d --- /dev/null +++ b/_sass/components/_header.scss @@ -0,0 +1,123 @@ +.header { + background: $header-background; + a { + font-weight: map-get($base, font-weight); + text-decoration: none !important; + @include link-colors($header-text-color, $main-color-1); + } + .main { + @include flexbox(); + @include media-breakpoint-down(md) { + @include flex-direction(column); + } + } +} + +.header--dark { + @extend .text--dark; + background: rgba(#000, .15); + .navigation__item--active { + &::after { + @include split-line(bottom, 4px, $text-color-theme-dark); + } + } +} + +.header--light { + @extend .text--light; + background: rgba(#fff, .15); + .navigation__item--active { + &::after { + @include split-line(bottom, 4px, $text-color-theme-light); + } + } +} + +.header__title { + @include menu(3, 0); + @include align-items(center); + @include flex-wrap(nowrap); + @include flex(1); + height: map-get($layout, header-height); + margin-right: map-get($spacers, 3); + white-space: nowrap; + @include media-breakpoint-down(md) { + height: auto; + margin-right: 0; + } + & > .header__brand { + @include flex(1); + @include media-breakpoint-down(md) { + height: map-get($layout, header-height-sm); + } + } + & > .search-button { + display: none; + margin-left: map-get($spacers, 2); + @include media-breakpoint-down(md) { + @include flexbox(); + } + } +} + +.header__brand { + @include flexbox(); + @include align-items(center); + & > svg { + width: map-get($base, font-size-h4) * 1.6; + height: map-get($base, font-size-h4) * 1.6; + margin-right: map-get($spacers, 3); + vertical-align: middle; + @include media-breakpoint-down(md) { + width: map-get($base, font-size-h4) * 1.2; + height: map-get($base, font-size-h4) * 1.2; + } + } + & > a { + display: inline-block; + font-size: map-get($base, font-size-h4); + @include media-breakpoint-down(md) { + font-size: map-get($base, font-size-h4-small); + } + } +} + +.navigation { + @include overflow(auto, "x"); + & > ul { + height: map-get($layout, header-height); + padding-bottom: 0; + margin: 0; + @include media-breakpoint-down(md) { + padding-bottom: 4px; + margin: -4px 0 0 0; + } + @include menu(3, 2, nowrap); + @include align-items(center); + @include media-breakpoint-down(md) { + height: auto; + } + .search-button { + @include media-breakpoint-down(md) { + display: none; + } + } + } +} + +.navigation__item { + &::after { + display: block; + margin-bottom: -4px; + content: ""; + @include split-line(bottom, 4px, transparent); + } +} +.navigation__item--active { + a { + @include link-colors($main-color-1, $main-color-1); + } + &::after { + @include split-line(bottom, 4px, $main-color-1); + } +} diff --git a/_sass/components/_lightbox.scss b/_sass/components/_lightbox.scss new file mode 100644 index 0000000..4dad32b --- /dev/null +++ b/_sass/components/_lightbox.scss @@ -0,0 +1,7 @@ +.popup-image { + cursor: pointer; + @include hover() { + @include box-shadow(2); + } + @include transition(map-get($clickable, transition)); +} diff --git a/_sass/components/_main.scss b/_sass/components/_main.scss new file mode 100644 index 0000000..265c727 --- /dev/null +++ b/_sass/components/_main.scss @@ -0,0 +1,28 @@ +.main { + width: 100%; + max-width: map-get($layout, content-max-width); + padding: 0 map-get($spacers, 5); + margin: 0 auto; + @include media-breakpoint-down(lg) { + padding: 0 map-get($spacers, 4); + } + @include media-breakpoint-down(md) { + padding: 0 map-get($spacers, 3); + } +} + +.has-aside { + .main { + max-width: map-get($layout, content-max-width) + map-get($layout, aside-width); + @include media-breakpoint-down(lg) { + max-width: map-get($layout, content-max-width); + } + } +} + +.full-width { + .main { + width: 100%; + max-width: 100%; + } +} diff --git a/_sass/components/_search.scss b/_sass/components/_search.scss new file mode 100644 index 0000000..d28dabc --- /dev/null +++ b/_sass/components/_search.scss @@ -0,0 +1,186 @@ +.search { + @include overflow(auto); + +} +.search--google-custom-search-engine { + .main { + padding-top: map-get($spacers, 4); + padding-bottom: map-get($spacers, 4); + @include media-breakpoint-down(md) { + position: absolute; + padding: 0; + } + } +} + +.search__header { + margin-top: map-get($spacers, 4); + font-size: map-get($base, font-size-h1); + font-weight: map-get($base, font-weight-bold); + color: $text-color-d; + .search--light & { + color: $text-color-theme-light-d; + } + .search--dark & { + color: $text-color-theme-dark-d; + } + @include media-breakpoint-down(md) { + display: none; + } +} + +.search-bar { + @include flexbox(); + margin: map-get($spacers, 3) 0 map-get($spacers, 4) 0; +} + +.search-box { + position: relative; + width: 100%; + max-width: 22rem; + @include media-breakpoint-down(md) { + width: 100%; + max-width: none; + } + & > input { + display: inline-block; + width: 100%; + height: $button-height-lg; + padding: 0 2rem; + margin: 0; + line-height: 1 !important; + color: $text-color; + background-color: transparent; + border: 2px solid $border-color; + border-radius: map-get($button, pill-radius); + -webkit-appearance: none; /* fix iOS don't display box-shadow properly */ + @include transition(box-shadow map-get($animation, duration) map-get($animation, timing-function)); + @include focus { + box-shadow: 0 0 0 2px rgba($border-color, .4); + } + .search--light & { + color: $text-color-theme-light; + border-color: $text-color-theme-light; + @include focus { + box-shadow: 0 0 0 2px rgba($text-color-theme-light, .4); + } + } + .search--dark & { + color: $text-color-theme-dark; + border-color: $text-color-theme-dark; + @include focus { + box-shadow: 0 0 0 2px rgba($text-color-theme-dark, .4); + } + } + } + & > .search-box__icon-search { + color: $text-color-l; + .search--light & { + color: $text-color-theme-light-l; + } + .search--dark & { + color: $text-color-theme-dark-l; + } + } + & > .search-box__icon-clear { + & > a { + @include link-colors($text-color); + .search--light & { + @include link-colors($text-color-theme-light); + } + .search--dark & { + @include link-colors($text-color-theme-dark); + } + cursor: pointer; + } + } + & > .search-box__icon-search, & > .search-box__icon-clear { + position: absolute; + width: $button-height-lg; + height: $button-height-lg; + line-height: $button-height-lg; + text-align: center; + vertical-align: middle; + } + &.not-empty > .search-box__icon-clear { + display: block; + } + & > .search-box__icon-clear { + top: 0; + right: 0; + display: none; + } + & > .search-box__icon-search { + top: 0; + left: 0; + } +} + +.search__cancel { + margin-left: map-get($spacers, 2); + font-weight: map-get($base, font-weight-bold); + white-space: nowrap; +} + +.search-result { + margin: map-get($spacers, 4) 0; + font-size: map-get($base, font-size-sm); + line-height: map-get($base, line-height-sm); +} + +.search-result__header { + margin: map-get($spacers, 3) 0 map-get($spacers, 2) 0; + font-size: map-get($base, font-size-lg); + font-weight: map-get($base, font-weight-bold); + color: $text-color-l; + text-transform: uppercase; + .search--light & { + color: $text-color-theme-light-l; + } + .search--dark & { + color: $text-color-theme-dark-l; + } +} + +.search-result__item { + list-style-type: none; + a { + padding: map-get($spacers, 1) map-get($spacers, 3); + @include transition(none); + @include clickable($text-color, transparent, $text-color-3, $main-color-3); + .search--light & { + @include clickable($text-color-theme-light, transparent, $text-color-theme-dark, $main-color-theme-light); + } + .search--dark & { + @include clickable($text-color-theme-dark, transparent, $text-color-theme-light, $main-color-theme-dark); + } + } + &.active { + a { + @include plain() { + color: $text-color-3; + background-color: $main-color-3; + .search--light & { + color: $text-color-theme-dark; + background-color: $main-color-theme-light; + } + .search--dark & { + color: $text-color-theme-light; + background-color: $main-color-theme-dark; + } + } + @include active() { + @include transition(map-get($clickable, transition)); + } + } + } +} + +// google search +.gsc-control-cse { + *, + ::before, + ::after { + box-sizing: initial; + } +} diff --git a/_sass/components/_tags.scss b/_sass/components/_tags.scss new file mode 100644 index 0000000..946b1b6 --- /dev/null +++ b/_sass/components/_tags.scss @@ -0,0 +1,24 @@ +.site-tags { + .tag-button { + @include clickable($text-color-3, $main-color-3, default, default, $text-color-2,$main-color-2, $text-color-2,$main-color-2); + & > .tag-button__count { + display: inline-block; + margin-left: map-get($spacers, 1); + font-size: map-get($base, font-size-xs); + line-height: 1; + vertical-align: top; + } + } + .tag-button-1 { + @include clickable($text-color-1, rgba($main-color-1, .4), default, default, $text-color-2,$main-color-2, $text-color-2,$main-color-2); + } + .tag-button-2 { + @include clickable($text-color-1, rgba($main-color-1, .55), default, default, $text-color-2,$main-color-2, $text-color-2,$main-color-2); + } + .tag-button-3 { + @include clickable($text-color-1, rgba($main-color-1, .7), default, default, $text-color-2,$main-color-2, $text-color-2,$main-color-2); + } + .tag-button-4 { + @include clickable($text-color-1, rgba($main-color-1, .9), default, default, $text-color-2,$main-color-2, $text-color-2,$main-color-2); + } +} diff --git a/_sass/custom.scss b/_sass/custom.scss new file mode 100644 index 0000000..aa7b944 --- /dev/null +++ b/_sass/custom.scss @@ -0,0 +1,3 @@ +/* start custom scss snippet */ + +/* end custom scss snippet */ diff --git a/_sass/layout/_404.scss b/_sass/layout/_404.scss new file mode 100644 index 0000000..e206f76 --- /dev/null +++ b/_sass/layout/_404.scss @@ -0,0 +1,14 @@ +.layout--404 { + .sign { + display: table; + margin: map-get($spacers, 4) auto; + margin-top: map-get($spacers, 5); + h1 { + font-size: map-get($base, font-size-xl) * 4; + line-height: 1; + } + p { + font-size: map-get($base, font-size-xl) * 1.2; + } + } +} diff --git a/_sass/layout/_archive.scss b/_sass/layout/_archive.scss new file mode 100644 index 0000000..7dc417f --- /dev/null +++ b/_sass/layout/_archive.scss @@ -0,0 +1,5 @@ +.layout--archive { + & > .layout--archive__result { + margin: map-get($spacers, 4) 0; + } +} diff --git a/_sass/layout/_article.scss b/_sass/layout/_article.scss new file mode 100644 index 0000000..dd83384 --- /dev/null +++ b/_sass/layout/_article.scss @@ -0,0 +1,29 @@ +.article__sharing { + margin: map-get($spacers, 4) 0; +} +.article__section-navigator { + padding-top: map-get($spacers, 3); + margin: map-get($spacers, 4) 0 map-get($spacers, 3) 0; + word-wrap: break-word; + @include split-line(top, 4px); + & > .previous, & > .next { + width: 50%; + & > span { + font-weight: map-get($base, font-weight-bold); + color: $text-color-l; + } + & > a { + display: block; + @include link-colors($text-color, $main-color-1); + } + } + & > .previous { + float: left; + padding-right: map-get($spacers, 2); + } + & > .next { + float: right; + padding-left: map-get($spacers, 2); + text-align: right; + } +} diff --git a/_sass/layout/_articles.scss b/_sass/layout/_articles.scss new file mode 100644 index 0000000..85f258c --- /dev/null +++ b/_sass/layout/_articles.scss @@ -0,0 +1,17 @@ +.layout--articles { + margin: map-get($spacers, 4) 0; + margin-top: map-get($spacers, 5); + @include media-breakpoint-down(md) { + margin-top: map-get($spacers, 4); + } + .card__header { + font-size: map-get($base, font-size); + } + .card__image { + & > .overlay { + &, .card__header { + font-size: map-get($base, font-size-sm); + } + } + } +} diff --git a/_sass/layout/_base.scss b/_sass/layout/_base.scss new file mode 100644 index 0000000..6200ec5 --- /dev/null +++ b/_sass/layout/_base.scss @@ -0,0 +1,6 @@ +.icon { + display: block; + > svg { + display: block; + } +} diff --git a/_sass/layout/_home.scss b/_sass/layout/_home.scss new file mode 100644 index 0000000..298e6b9 --- /dev/null +++ b/_sass/layout/_home.scss @@ -0,0 +1,15 @@ +.layout--home { + .pagination { + margin: map-get($spacers, 4) 0; + } + .pagination__menu { + max-width: 100%; + @include overflow(auto); + } + .pagination__omit { + color: $text-color-l; + } + .items { + margin-top: map-get($spacers, 4) * 1.5; + } +} diff --git a/_sass/layout/_landing.scss b/_sass/layout/_landing.scss new file mode 100644 index 0000000..752d4e7 --- /dev/null +++ b/_sass/layout/_landing.scss @@ -0,0 +1,23 @@ +.layout--landing { + .heros { + max-width: map-get($layout, content-max-width) * 2; + margin-right: auto; + margin-left: auto; + } + .hero { + img { + display: block; + width: 100%; + margin: 0 auto; + } + } + .hero__content { + margin-bottom: 0; + } + .hero__cover { + max-width: map-get($layout, content-max-width); + } + .hero__cover--full-width { + max-width: none; + } +} diff --git a/_sass/layout/_page.scss b/_sass/layout/_page.scss new file mode 100644 index 0000000..bb42331 --- /dev/null +++ b/_sass/layout/_page.scss @@ -0,0 +1,165 @@ +body, +html, +.root, +.layout--page { + height: 100%; +} + +.layout--page { + &.layout--page--sidebar { + .page__viewport, + .page__grid { + height: 100%; + } + @include media-breakpoint-down(lg) { + .page__main { + @include overflow(unset); + } + } + } +} + +.page__main { + height: 100%; + color: $text-color; + .col-aside { + display: none; + & > aside { + position: absolute; + width: map-get($layout, aside-width); + @include overflow(hidden); + } + } +} + +.page__main-inner { + position: relative; + @include flexbox(); + @include flex-direction(column); + min-height: 100%; + background-color: $background-color; +} + +.page__content { + @include flex(1); + width: 100%; + margin: 0 auto; + @media print { + padding-bottom: 0; + } +} +.hide-footer { + .page__content { + padding-bottom: 0; + } +} + +.page__comments { + margin: map-get($spacers, 4) 0; +} + +.page__aside { + .toc-aside { + padding: map-get($spacers, 5) 0 map-get($spacers, 3) map-get($spacers, 5); + } +} + +.page__actions { + position: fixed; + bottom: map-get($spacers, 5); + left: map-get($spacers, 3); + z-index: map-get($z-indexes, actions); + display: none; +} + +.page__sidebar { + z-index: map-get($z-indexes, sidebar); + display: block; + width: 80%; + max-width: map-get($layout, sidebar-width); + height: 100%; + background-color: $background-color; + @include split-line(right); + @include transition(transform map-get($animation, duration)); + @include overflow(auto); + .sidebar-toc { + padding: map-get($spacers, 3) map-get($spacers, 3) map-get($spacers, 4) map-get($spacers, 4); + } +} +.sidebar-button { + @include clickable($text-color-d, rgba($main-color-3, .75)); +} + +.page__mask { + @include modal(map-get($z-indexes, mask)); + cursor: pointer; +} +.layout--page--sidebar { + .page__main { + @include overflow(auto); + @media print { + @include overflow(unset); + } + } +} + +.has-aside { + .col-aside { + position: relative; + display: block; + width: map-get($layout, aside-width); + & > aside { + &.fixed { + position: fixed; + -webkit-font-smoothing: subpixel-antialiased; + } + } + @include media-breakpoint-down(lg) { + display: none; + } + } +} + +@include media-breakpoint-down(lg) { + .page__sidebar { + position: fixed; + @include transform(translate(- map-get($layout, sidebar-width), 0)); + } + + .page__actions { + display: block; + } + + .show-sidebar { + .page__actions { + visibility: hidden; + } + .page__sidebar { + @include transform(translate(0)); + } + .page__mask { + @include modal--show(); + } + } +} + +.hero--light { + .article__info { + color: $text-color-theme-light; + } +} +.hero--dark { + .article__info { + color: $text-color-theme-dark; + } +} + +.page__main--immersive { + .page__header { + position: absolute; + width: 100%; + } + .hero__content { + padding-top: map-get($layout, header-height); + } +} diff --git a/_sass/skins/_chocolate.scss b/_sass/skins/_chocolate.scss new file mode 100644 index 0000000..b2098d5 --- /dev/null +++ b/_sass/skins/_chocolate.scss @@ -0,0 +1,74 @@ +/// +// Skin: Chocolate +// Author: Tian Qi +// Email: kitian616@outlook.com +/// + +// main colors +$main-color-1: #563a20; +$text-color-1: rgba(#fff, .85); + +$main-color-2: #8a2827; +$text-color-2: rgba(#fff, .85); + +$main-color-3: #b49b92; +$text-color-3: rgba(#fff, .85); + +$main-color-theme-light: rgba(#000, .9); +$main-color-theme-dark: rgba(#fff, .9); + +// page background +$background-color: #d2c2bc; + +// text colors +$text-color-theme-light-d: rgba(#000, .95); +$text-color-theme-light: rgba(#000, .85); +$text-color-theme-light-l: rgba(#000, .5); + +$text-color-theme-dark-d: #fff; +$text-color-theme-dark: rgba(#fff, .95); +$text-color-theme-dark-l: rgba(#fff, .85); + +$text-color-d: $text-color-theme-light-d; +$text-color: $text-color-theme-light; +$text-color-l: $text-color-theme-light-l; + +$text-background-color: rgba(#000, .05); + +// header and footer colors +$header-text-color: $text-color-3; +$header-background: $main-color-3; + +$footer-text-color: $text-color-3; +$footer-background: $main-color-3; + +// border and shadow colors +$border-color: $main-color-3; +$border-color-l: mix(#000, $background-color, 10%); +$decorate-color: rgba(#000, .1); +$mask-color: rgba(#000, .9); +$select-color: rgba($main-color-3, .5); + +// function colors +$green: #5baa34; +$blue: #1c7cd4; +$yellow: #c9771f; +$red: #da3d45; +$text-color-function: rgba(#fff, .85); + +// logo colors +$mail-color: #0072c5; +$facebook-color: #4267b2; +$twitter-color: #1da1f2; +$weibo-color: #e6162d; +$google-plus-color:#ea4335; +$telegram-color: #32afed; +$medium-color: #000; +$zhihu-color: #0084ff; +$douban-color: #42bd56; +$linkedin-color: #1074af; +$github-color: #000; +$npm-color: #fff; + +// highlight colors +@import "skins/highlight/tomorrow-night-eighties"; diff --git a/_sass/skins/_dark.scss b/_sass/skins/_dark.scss new file mode 100644 index 0000000..7250a87 --- /dev/null +++ b/_sass/skins/_dark.scss @@ -0,0 +1,74 @@ +/// +// Skin: Dark +// Author: Tian Qi +// Email: kitian616@outlook.com +/// + +// main colors +$main-color-1: #ff9500; +$text-color-1: rgba(#fff, .8); + +$main-color-2: #ff006a; +$text-color-2: rgba(#fff, .8); + +$main-color-3: #202020; +$text-color-3: rgba(#fff, .8); + +$main-color-theme-light: rgba(#000, .8); +$main-color-theme-dark: rgba(#fff, .8); + +// page background +$background-color: #121212; + +// text colors +$text-color-theme-light-d: #000; +$text-color-theme-light: #222; +$text-color-theme-light-l: #888; + +$text-color-theme-dark-d: rgba(#fff, .8); +$text-color-theme-dark: rgba(#fff, .7); +$text-color-theme-dark-l: rgba(#fff, .5); + +$text-color-d: $text-color-theme-dark-d; +$text-color: $text-color-theme-dark; +$text-color-l: $text-color-theme-dark-l; + +$text-background-color: rgba(#fff, .05); + +// header and footer colors +$header-text-color: $text-color-3; +$header-background: $main-color-3; + +$footer-text-color: $text-color-3; +$footer-background: $main-color-3; + +// border and shadow colors +$border-color: mix(#fff, $background-color, 20%); +$border-color-l: mix(#fff, $background-color, 10%); +$decorate-color: rgba(#fff, .1); +$mask-color: rgba(#000, .9); +$select-color: rgba($main-color-1, .5); + +// function colors +$green: #5baa34; +$blue: #1c7cd4; +$yellow: #c9771f; +$red: #da3d45; +$text-color-function: rgba(#fff, .8); + +// logo colors +$mail-color: #0072c5; +$facebook-color: #4267b2; +$twitter-color: #1da1f2; +$weibo-color: #e6162d; +$google-plus-color:#ea4335; +$telegram-color: #32afed; +$medium-color: #000; +$zhihu-color: #0084ff; +$douban-color: #42bd56; +$linkedin-color: #1074af; +$github-color: #000; +$npm-color: #fff; + +// highlight colors +@import "skins/highlight/tomorrow-night"; diff --git a/_sass/skins/_default.scss b/_sass/skins/_default.scss new file mode 100644 index 0000000..fc28935 --- /dev/null +++ b/_sass/skins/_default.scss @@ -0,0 +1,74 @@ +/// +// Skin: Default +// Author: Tian Qi +// Email: kitian616@outlook.com +/// + +// main colors +$main-color-1: #fc4d50; +$text-color-1: #fff; + +$main-color-2: #fca24d; +$text-color-2: #fff; + +$main-color-3: #f2f2f2; +$text-color-3: #333; + +$main-color-theme-light: rgba(#000, .9); +$main-color-theme-dark: rgba(#fff, .9); + +// page background +$background-color: #fff; + +// text colors +$text-color-theme-light-d: #000; +$text-color-theme-light: #222; +$text-color-theme-light-l: #888; + +$text-color-theme-dark-d: #fff; +$text-color-theme-dark: rgba(#fff, .95); +$text-color-theme-dark-l: rgba(#fff, .85); + +$text-color-d: $text-color-theme-light-d; +$text-color: $text-color-theme-light; +$text-color-l: $text-color-theme-light-l; + +$text-background-color: rgba(#000, .05); + +// header and footer colors +$header-text-color: $text-color-3; +$header-background: $main-color-3; + +$footer-text-color: $text-color-3; +$footer-background: $main-color-3; + +// border and shadow colors +$border-color: mix(#000, $background-color, 20%); +$border-color-l: mix(#000, $background-color, 10%); +$decorate-color: rgba(#000, .1); +$mask-color: rgba(#000, .9); +$select-color: rgba($main-color-1, .5); + +// function colors +$green: #52c41a; +$blue: #1890ff; +$yellow: #fa8c16; +$red: #f5222d; +$text-color-function: #fff; + +// logo colors +$mail-color: #0072c5; +$facebook-color: #4267b2; +$twitter-color: #1da1f2; +$weibo-color: #e6162d; +$google-plus-color:#ea4335; +$telegram-color: #32afed; +$medium-color: #000; +$zhihu-color: #0084ff; +$douban-color: #42bd56; +$linkedin-color: #1074af; +$github-color: #000; +$npm-color: #fff; + +// highlight colors +@import "skins/highlight/tomorrow"; diff --git a/_sass/skins/_forest.scss b/_sass/skins/_forest.scss new file mode 100644 index 0000000..df2c63a --- /dev/null +++ b/_sass/skins/_forest.scss @@ -0,0 +1,74 @@ +/// +// Skin: Forest +// Author: Tian Qi +// Email: kitian616@outlook.com +/// + +// main colors +$main-color-1: #bb6170; +$text-color-1: #fff; + +$main-color-2: #f3c584; +$text-color-2: #fff; + +$main-color-3: #7cc7bb; +$text-color-3: #fff; + +$main-color-theme-light: rgba(#000, .9); +$main-color-theme-dark: rgba(#fff, .9); + +// page background +$background-color: #f8fcfb; + +// text colors +$text-color-theme-light-d: #325f74; +$text-color-theme-light: #3e758f; +$text-color-theme-light-l: #619dbb; + +$text-color-theme-dark-d: #fff; +$text-color-theme-dark: rgba(#fff, .95); +$text-color-theme-dark-l: rgba(#fff, .85); + +$text-color-d: $text-color-theme-light-d; +$text-color: $text-color-theme-light; +$text-color-l: $text-color-theme-light-l; + +$text-background-color: rgba(#000, .05); + +// header and footer colors +$header-text-color: $text-color-3; +$header-background: $main-color-3; + +$footer-text-color: $text-color-3; +$footer-background: $main-color-3; + +// border and shadow colors +$border-color: #3e758f; +$border-color-l: mix(#000, $background-color, 10%); +$decorate-color: rgba(#bb6170, .15); +$mask-color: rgba(#000, .9); +$select-color: rgba($main-color-1, .5); + +// function colors +$green: #52c41a; +$blue: #1890ff; +$yellow: #fa8c16; +$red: #f5222d; +$text-color-function: #fff; + +// logo colors +$mail-color: #0072c5; +$facebook-color: #4267b2; +$twitter-color: #1da1f2; +$weibo-color: #e6162d; +$google-plus-color:#ea4335; +$telegram-color: #32afed; +$medium-color: #000; +$zhihu-color: #0084ff; +$douban-color: #42bd56; +$linkedin-color: #1074af; +$github-color: #000; +$npm-color: #fff; + +// highlight colors +@import "skins/highlight/tomorrow"; diff --git a/_sass/skins/_ocean.scss b/_sass/skins/_ocean.scss new file mode 100644 index 0000000..c4da252 --- /dev/null +++ b/_sass/skins/_ocean.scss @@ -0,0 +1,74 @@ +/// +// Skin: Ocean +// Author: Tian Qi +// Email: kitian616@outlook.com +/// + +// main colors +$main-color-1: #0366d6; +$text-color-1: #fff; + +$main-color-2: #a5917f; +$text-color-2: #fff; + +$main-color-3: #f1f8ff; +$text-color-3: #0366d6; + +$main-color-theme-light: rgba(#000, .9); +$main-color-theme-dark: rgba(#fff, .9); + +// page background +$background-color: #fff; + +// text colors +$text-color-theme-light-d: rgba(#000, .95); +$text-color-theme-light: rgba(#000, .85); +$text-color-theme-light-l: rgba(#000, .5); + +$text-color-theme-dark-d: #fff; +$text-color-theme-dark: rgba(#fff, .95); +$text-color-theme-dark-l: rgba(#fff, .85); + +$text-color-d: $text-color-theme-light-d; +$text-color: $text-color-theme-light; +$text-color-l: $text-color-theme-light-l; + +$text-background-color: rgba(#000, .05); + +// header and footer colors +$header-text-color: $text-color-3; +$header-background: $main-color-3; + +$footer-text-color: $text-color-3; +$footer-background: $main-color-3; + +// border and shadow colors +$border-color: mix(#000, $background-color, 20%); +$border-color-l: mix(#000, $background-color, 10%); +$decorate-color: rgba(#000, .1); +$mask-color: rgba(#000, .9); +$select-color: rgba($main-color-1, .5); + +// function colors +$green: #52c41a; +$blue: #1890ff; +$yellow: #fa8c16; +$red: #f5222d; +$text-color-function: #fff; + +// logo colors +$mail-color: #0072c5; +$facebook-color: #4267b2; +$twitter-color: #1da1f2; +$weibo-color: #e6162d; +$google-plus-color:#ea4335; +$telegram-color: #32afed; +$medium-color: #000; +$zhihu-color: #0084ff; +$douban-color: #42bd56; +$linkedin-color: #1074af; +$github-color: #000; +$npm-color: #fff; + +// highlight colors +@import "skins/highlight/tomorrow-night-blue"; diff --git a/_sass/skins/_orange.scss b/_sass/skins/_orange.scss new file mode 100644 index 0000000..4ffdbb1 --- /dev/null +++ b/_sass/skins/_orange.scss @@ -0,0 +1,74 @@ +/// +// Skin: Orange +// Author: Tian Qi +// Email: kitian616@outlook.com +/// + +// main colors +$main-color-1: #f92651; +$text-color-1: #fff; + +$main-color-2: #fdb824; +$text-color-2: #fff; + +$main-color-3: #ff8a64; +$text-color-3: #fff; + +$main-color-theme-light: rgba(#000, .9); +$main-color-theme-dark: rgba(#fff, .9); + +// page background +$background-color: #fffdfa; + +// text colors +$text-color-theme-light-d: rgba(#000, .95); +$text-color-theme-light: rgba(#000, .85); +$text-color-theme-light-l: rgba(#000, .5); + +$text-color-theme-dark-d: rgba(#fff, .95); +$text-color-theme-dark: rgba(#fff, .85); +$text-color-theme-dark-l: rgba(#fff, .65); + +$text-color-d: $text-color-theme-light-d; +$text-color: $text-color-theme-light; +$text-color-l: $text-color-theme-light-l; + +$text-background-color: rgba(#000, .05); + +// header and footer colors +$header-text-color: $text-color-3; +$header-background: linear-gradient(60deg, #ffa650 0%, #ff7b50 100%); + +$footer-text-color: $text-color-3; +$footer-background: linear-gradient(60deg, #ffa650 0%, #ff7b50 100%); + +// border and shadow colors +$border-color: mix($main-color-1, $background-color, 50%); +$border-color-l: mix(#000, $background-color, 10%); +$decorate-color: rgba(#000, .1); +$mask-color: rgba(#000, .9); +$select-color: rgba($main-color-3, .5); + +// function colors +$green: #52c41a; +$blue: #1890ff; +$yellow: #fa8c16; +$red: #f5222d; +$text-color-function: #fff; + +// logo colors +$mail-color: #0072c5; +$facebook-color: #4267b2; +$twitter-color: #1da1f2; +$weibo-color: #e6162d; +$google-plus-color:#ea4335; +$telegram-color: #32afed; +$medium-color: #000; +$zhihu-color: #0084ff; +$douban-color: #42bd56; +$linkedin-color: #1074af; +$github-color: #000; +$npm-color: #fff; + +// highlight colors +@import "skins/highlight/tomorrow-night-eighties"; diff --git a/_sass/skins/highlight/_default.scss b/_sass/skins/highlight/_default.scss new file mode 100644 index 0000000..e69de29 diff --git a/_sass/skins/highlight/_tomorrow-night-blue.scss b/_sass/skins/highlight/_tomorrow-night-blue.scss new file mode 100644 index 0000000..473cbff --- /dev/null +++ b/_sass/skins/highlight/_tomorrow-night-blue.scss @@ -0,0 +1,2 @@ +@import "./tomorrow/night-blue"; +@import "./tomorrow/highlight"; diff --git a/_sass/skins/highlight/_tomorrow-night-bright.scss b/_sass/skins/highlight/_tomorrow-night-bright.scss new file mode 100644 index 0000000..05af36c --- /dev/null +++ b/_sass/skins/highlight/_tomorrow-night-bright.scss @@ -0,0 +1,2 @@ +@import "./tomorrow/night-bright"; +@import "./tomorrow/highlight"; diff --git a/_sass/skins/highlight/_tomorrow-night-eighties.scss b/_sass/skins/highlight/_tomorrow-night-eighties.scss new file mode 100644 index 0000000..4144a5e --- /dev/null +++ b/_sass/skins/highlight/_tomorrow-night-eighties.scss @@ -0,0 +1,2 @@ +@import "./tomorrow/night-eighties"; +@import "./tomorrow/highlight"; diff --git a/_sass/skins/highlight/_tomorrow-night.scss b/_sass/skins/highlight/_tomorrow-night.scss new file mode 100644 index 0000000..2cb5d72 --- /dev/null +++ b/_sass/skins/highlight/_tomorrow-night.scss @@ -0,0 +1,2 @@ +@import "./tomorrow/night"; +@import "./tomorrow/highlight"; diff --git a/_sass/skins/highlight/_tomorrow.scss b/_sass/skins/highlight/_tomorrow.scss new file mode 100644 index 0000000..90aaf3b --- /dev/null +++ b/_sass/skins/highlight/_tomorrow.scss @@ -0,0 +1,2 @@ +@import "./tomorrow/default"; +@import "./tomorrow/highlight"; diff --git a/_sass/skins/highlight/tomorrow/_default.scss b/_sass/skins/highlight/tomorrow/_default.scss new file mode 100644 index 0000000..c739cf7 --- /dev/null +++ b/_sass/skins/highlight/tomorrow/_default.scss @@ -0,0 +1,10 @@ +$highlight-background : #f7f7f7; +$highlight-foreground : #4d4d4c; +$highlight-comment : #8e908c; +$highlight-red : #c82829; +$highlight-orange : #f5871f; +$highlight-yellow : #eab700; +$highlight-green : #718c00; +$highlight-aqua : #3e999f; +$highlight-blue : #4271ae; +$highlight-purple : #8959a8; diff --git a/_sass/skins/highlight/tomorrow/_highlight.scss b/_sass/skins/highlight/tomorrow/_highlight.scss new file mode 100644 index 0000000..c026a44 --- /dev/null +++ b/_sass/skins/highlight/tomorrow/_highlight.scss @@ -0,0 +1,74 @@ +figure.highlight::before { + color: $highlight-comment !important; + background-color: $highlight-background !important; +} +pre.lineno { + color: $highlight-comment !important; +} +.highlight > pre { + color: $highlight-foreground; + background-color: $highlight-background !important; + .c { color: $highlight-comment; } /* Comment */ + .err { color: $highlight-red; } /* Error */ + .k { color: $highlight-purple; } /* Keyword */ + .l { color: $highlight-orange; } /* Literal */ + .n { color: $highlight-foreground; } /* Name */ + .o { color: $highlight-aqua; } /* Operator */ + .p { color: $highlight-foreground; } /* Punctuation */ + .cm { color: $highlight-comment; } /* Comment.Multiline */ + .cp { color: $highlight-comment; } /* Comment.Preproc */ + .c1 { color: $highlight-comment; } /* Comment.Single */ + .cs { color: $highlight-comment; } /* Comment.Special */ + .gd { color: $highlight-red; } /* Generic.Deleted */ + .ge { font-style: italic; } /* Generic.Emph */ + .gh { font-weight: bold; color: $highlight-foreground; } /* Generic.Heading */ + .gi { color: $highlight-green; } /* Generic.Inserted */ + .gp { font-weight: bold; color: $highlight-comment; } /* Generic.Prompt */ + .gs { font-weight: bold; } /* Generic.Strong */ + .gu { font-weight: bold; color: $highlight-aqua; } /* Generic.Subheading */ + .kc { color: $highlight-purple; } /* Keyword.Constant */ + .kd { color: $highlight-purple; } /* Keyword.Declaration */ + .kn { color: $highlight-aqua; } /* Keyword.Namespace */ + .kp { color: $highlight-purple; } /* Keyword.Pseudo */ + .kr { color: $highlight-purple; } /* Keyword.Reserved */ + .kt { color: $highlight-yellow; } /* Keyword.Type */ + .ld { color: $highlight-green; } /* Literal.Date */ + .m { color: $highlight-orange; } /* Literal.Number */ + .s { color: $highlight-green; } /* Literal.String */ + .na { color: $highlight-blue; } /* Name.Attribute */ + .nb { color: $highlight-foreground; } /* Name.Builtin */ + .nc { color: $highlight-yellow; } /* Name.Class */ + .no { color: $highlight-red; } /* Name.Constant */ + .nd { color: $highlight-aqua; } /* Name.Decorator */ + .ni { color: $highlight-foreground; } /* Name.Entity */ + .ne { color: $highlight-red; } /* Name.Exception */ + .nf { color: $highlight-blue; } /* Name.Function */ + .nl { color: $highlight-foreground; } /* Name.Label */ + .nn { color: $highlight-yellow; } /* Name.Namespace */ + .nx { color: $highlight-blue; } /* Name.Other */ + .py { color: $highlight-foreground; } /* Name.Property */ + .nt { color: $highlight-aqua; } /* Name.Tag */ + .nv { color: $highlight-red; } /* Name.Variable */ + .ow { color: $highlight-aqua; } /* Operator.Word */ + .w { color: $highlight-foreground; } /* Text.Whitespace */ + .mf { color: $highlight-orange; } /* Literal.Number.Float */ + .mh { color: $highlight-orange; } /* Literal.Number.Hex */ + .mi { color: $highlight-orange; } /* Literal.Number.Integer */ + .mo { color: $highlight-orange; } /* Literal.Number.Oct */ + .sb { color: $highlight-green; } /* Literal.String.Backtick */ + .sc { color: $highlight-foreground; } /* Literal.String.Char */ + .sd { color: $highlight-comment; } /* Literal.String.Doc */ + .s2 { color: $highlight-green; } /* Literal.String.Double */ + .se { color: $highlight-orange; } /* Literal.String.Escape */ + .sh { color: $highlight-green; } /* Literal.String.Heredoc */ + .si { color: $highlight-orange; } /* Literal.String.Interpol */ + .sx { color: $highlight-green; } /* Literal.String.Other */ + .sr { color: $highlight-green; } /* Literal.String.Regex */ + .s1 { color: $highlight-green; } /* Literal.String.Single */ + .ss { color: $highlight-green; } /* Literal.String.Symbol */ + .bp { color: $highlight-foreground; } /* Name.Builtin.Pseudo */ + .vc { color: $highlight-red; } /* Name.Variable.Class */ + .vg { color: $highlight-red; } /* Name.Variable.Global */ + .vi { color: $highlight-red; } /* Name.Variable.Instance */ + .il { color: $highlight-orange; } /* Literal.Number.Integer.Long */ +} diff --git a/_sass/skins/highlight/tomorrow/_night-blue.scss b/_sass/skins/highlight/tomorrow/_night-blue.scss new file mode 100644 index 0000000..74fbf7f --- /dev/null +++ b/_sass/skins/highlight/tomorrow/_night-blue.scss @@ -0,0 +1,10 @@ +$highlight-background :#002451; +$highlight-foreground :#fff; +$highlight-comment :#7285b7; +$highlight-red :#ff9da4; +$highlight-orange :#ffc58f; +$highlight-yellow :#ffeead; +$highlight-green :#d1f1a9; +$highlight-aqua :#9ff; +$highlight-blue :#bbdaff; +$highlight-purple :#ebbbff; diff --git a/_sass/skins/highlight/tomorrow/_night-bright.scss b/_sass/skins/highlight/tomorrow/_night-bright.scss new file mode 100644 index 0000000..39d6cfc --- /dev/null +++ b/_sass/skins/highlight/tomorrow/_night-bright.scss @@ -0,0 +1,10 @@ +$highlight-background :#000; +$highlight-foreground :#eaeaea; +$highlight-comment :#969896; +$highlight-red :#d54e53; +$highlight-orange :#e78c45; +$highlight-yellow :#e7c547; +$highlight-green :#b9ca4a; +$highlight-aqua :#70c0b1; +$highlight-blue :#7aa6da; +$highlight-purple :#c397d8; diff --git a/_sass/skins/highlight/tomorrow/_night-eighties.scss b/_sass/skins/highlight/tomorrow/_night-eighties.scss new file mode 100644 index 0000000..4bd0ddb --- /dev/null +++ b/_sass/skins/highlight/tomorrow/_night-eighties.scss @@ -0,0 +1,10 @@ +$highlight-background :#2d2d2d; +$highlight-foreground :#ccc; +$highlight-comment :#999; +$highlight-red :#f2777a; +$highlight-orange :#f99157; +$highlight-yellow :#fc6; +$highlight-green :#9c9; +$highlight-aqua :#6cc; +$highlight-blue :#69c; +$highlight-purple :#c9c; diff --git a/_sass/skins/highlight/tomorrow/_night.scss b/_sass/skins/highlight/tomorrow/_night.scss new file mode 100644 index 0000000..98a0294 --- /dev/null +++ b/_sass/skins/highlight/tomorrow/_night.scss @@ -0,0 +1,10 @@ +$highlight-background : #1d1f21; +$highlight-foreground : #c5c8c6; +$highlight-comment : #969896; +$highlight-red : #c66; +$highlight-orange : #de935f; +$highlight-yellow : #f0c674; +$highlight-green : #b5bd68; +$highlight-aqua : #8abeb7; +$highlight-blue : #81a2be; +$highlight-purple : #b294bb; diff --git a/aide-jekyll-text-theme.md b/aide-jekyll-text-theme.md new file mode 100644 index 0000000..a757ec7 --- /dev/null +++ b/aide-jekyll-text-theme.md @@ -0,0 +1,2186 @@ +--- +layout: article +title: Aide Jekyll TeXt thème +mermaid: true +chart: true +--- + +*TeXt est un thème Jekyll super personnalisable pour site personnel, site d’équipe, blog, projet, documentation, etc…* + +## Sommaire + +- [Caractéristiques](#caractéristiques) +- [Démarrage rapide](#démarrage-rapide) + - [Installer le thème](#installer-le-thème) + - [Configuration](#configuration) + - [Paramètres du site](#paramètres-du-site) +- [Navigation](#navigation) + - [Header Navigation](#header-navigation) + - [Sidebar Navigation](#sidebar-navigation) +- [Layout](#layout) + - [Mise en page](#mise-en-page) + - [Article Layout](#article-layout) + - [Home Layout](#home-layout) + - [Archive Layout](#archive-layout) + - [Landing Layout](#landing-layout) + - [404 Layout](#404-layout) +- [Logo et Favicon](#logo-et-favicon) + - [Logo](#logo) + - [Favicon](#favicon) +- [Auteurs](#auteurs) +- [Internationalisation](#internationalisation) +- [Rédaction des messages](#rédaction-des-messages) + - [Création de fichiers de poste](#création-de-fichiers-de-poste) +- [Chart](#chart) +- [Autres styles](#autres-styles) + - [Alerte](#alerte) + - [Tag](#tag) + - [Image](#image) +- [Spacing](#spacing) + - [EXEMPLES](#exemples) +- [Grid](#grid) + - [Base](#base) + - [Responsive](#responsive) + - [Auto Sizing](#auto-sizing) + - [Gutters](#gutters) + - [Overflow](#overflow) +- [Icons](#icons) +- [Image](#image) + - [Size](#size) +- [Button](#button) + - [Type](#type) + - [Shape](#shape) + - [Size](#size) +- [Item](#item) + - [Content](#content) + - [Image and Content](#image-and-content) + - [Image Size](#image-size) +- [Card](#card) + - [Image](#image) + - [Content](#content) + - [Image and Content](#image-and-content) + - [Image Overlay](#image-overlay) + - [Flat](#flat) + - [Clickable](#clickable) +- [Hero](#hero) + - [Normal](#normal) + - [Center](#center) + - [Dark Theme](#dark-theme) + - [Background Image](#background-image) + - [Height](#height) + - [Background Image + Center](#background-image--center) +- [Swiper](#swiper) + - [Normal](#normal) + - [Light Theme](#light-theme) + - [Dark Theme](#dark-theme) + + +## Caractéristiques + +* [Github jekyll-text-theme (original)](https://github.com/kitian616/jekyll-TeXt-theme) +- Responsive +- HTML sémantique +- Skins +- Thème principal +- Internationalisation +- Recherchez +- Table des matières +- Auteurs +- Styles supplémentaires (alerte, tag, image, icône, bouton, grille, etc.) +- Extensions (audios, vidéos, diapositives, démos) +- Améliorations de la démarque ([mermaid](https://mermaidjs.github.io/), [chartjs](http://www.chartjs.org/)) +- RSS ([jekyll-feed](https://github.com/jekyll/jekyll-feed)) + +**Skins** + +TeXt dispose de 6 skins intégrés, vous pouvez également créer votre propre skin. + +| `default` | `dark` | `forest` | +| --- | --- | --- | +| ![Default](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/screenshots/skins_default.jpg) | ![Dark](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/screenshots/skins_dark.jpg) | ![Forest](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/screenshots/skins_forest.jpg) | + +| `ocean` | `chocolate` | `orange` | +| --- | --- | --- | +| ![Ocean](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/screenshots/skins_ocean.jpg) | ![Chocolate](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/screenshots/skins_chocolate.jpg) | ![Orange](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/screenshots/skins_orange.jpg) | + +**Highlight Theme** + +TeXt utilise [Tomorrow](https://github.com/chriskempson/tomorrow-theme) comme thème principal. + +| `tomorrow` | `tomorrow-night` | `tomorrow-night-eighties` | `tomorrow-night-blue` | `tomorrow-night-bright` | +| --- | --- | --- | --- | --- | +| ![Tomorrow](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/screenshots/highlight_tomorrow.png) | ![Tomorrow Night](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/screenshots/highlight_tomorrow-night.png) | ![Tomorrow Night Eighties](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/screenshots/highlight_tomorrow-night-eighties.png) | ![Tomorrow Night Blue](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/screenshots/highlight_tomorrow-night-blue.png) | ![Tomorrow Night Bright](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/screenshots/highlight_tomorrow-night-bright.png) | + +## Démarrage rapide + +TeXt Theme est 100% compatible avec les pages GitHub et a été développé en tant que [thèmes basés sur les pierres précieuses](https://jekyllrb.com/docs/themes/) pour une utilisation plus facile. + +Dans ce document, vous apprendrez comment **installer le thème**, **régler votre site**, **prévision locale** pour le développement, **construire** et **publier**. + + + +```mermaid +graph LR; + A0(Installing TeXt) + B0(Common Method) + B1[Ruby Gem Method] + C0[Fork this repo] + C1[Clone from GitHub] + C2[Download] + D0[Setup Your Site] + E0(Installing Development Environment) + F0[Installing Directly] + F1[Docker] + A0-->B0; + A0-->B1; + B0-->C0; + B0-->C1; + B0-->C2; + B1-->D0; + C1-->E0 + C2-->E0 + D0-->E0 + E0-->F0 + E0-->F1 +``` + +### Installer le thème + +**Méthode commune** + +Pour l'installer avec la méthode commune, il vous suffit de copier tous les fichiers du thème dans votre projet. Il y a plusieurs façons de le faire : + +1. Cloner [jekyll-TeXt-theme](https://github.com/kitian616/jekyll-TeXt-theme) à partir de github. + + **Clone avec HTTPS:** + + ```bash + git clone https://github.com/kitian616/jekyll-TeXt-theme.git + ``` + + **Clone with SSH:** + + ```bash + git clone git@github.com:kitian616/jekyll-TeXt-theme.git + ``` + +2. Téléchargez et dézippez le fichier dans le répertoire de votre site Jekyll. + + Download TeXt Theme + +3. Si vous hébergez votre site sur les pages GitHub, vous pouvez simplement bifurquer vers [jekyll-TeXt-theme](https://github.com/kitian616/jekyll-TeXt-theme), puis renommer le dépôt en **USERNAME.github.io** - en remplaçant **USERNAME** par votre nom d'utilisateur GitHub. + + ![Fork](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/docs/assets/images/github-fork.jpg) + + ![Rename](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/docs/assets/images/github-rename-repo.jpg) + +**Méthode Ruby Gem** + +1. Ajoutez cette ligne au *Gemfile* de votre site Jekyll : + + ```ruby + gem "jekyll-text-theme" + ``` + +2. Ajoutez cette ligne au fichier *_config.yml* de votre site Jekyll : + + ```yaml + theme: jekyll-text-theme + ``` + +**Configurez votre site** + +Si vous installez le thème avec la méthode commune, vous pouvez passer directement à l'étape suivante. Mais **si vous installez le thème avec la méthode ruby gem, vous devez faire quelques travaux supplémentaires**. + +Avec les thèmes basés sur gem, certains des répertoires du site (tels que les répertoires *assets*, *_layouts*, *_includes* et *_sass*) sont stockés dans le gem du thème, cachés de votre vue immédiate. Vous devez ajouter quelques fichiers dans le répertoire de votre site Jekyll : + +```bash +├── 404.html +├── Gemfile +├── _config.yml +├── _data +│   └── locale.yml +├── _posts +│   └── ... +├── about.md +├── archive.html +└── index.html +``` + +Vous pouvez vous référer au dossier [/test](https://github.com/kitian616/jekyll-TeXt-theme/tree/master/test), c'est un exemple avec des thèmes basés sur les pierres précieuses. + +**Installation de l'environnement de développement** + +Si vous souhaitez les exécuter localement, vous devez d'abord installer Ruby et Jekyll, voir [Installation](https://jekyllrb.com/docs/installation/) pour plus de détails. + +Ensuite, lancez le bundler pour installer les dépendances : + +```bash +bundle install --path vendor/bundle +``` + +De plus, TeXt offre [Docker](https://www.docker.com/) un soutien au développement et au public, ce qui facilite la mise en place de l'environnement. + +![Docker](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/docs/assets/images/docker.jpg){:width="400px"} + +Il suffit de suivre ces trois étapes : + +1. [Installer le docker](https://docs.docker.com/install/). + +2. Générer *Gemfile.lock* : + + ```bash + docker run --rm -v "$PWD":/usr/src/app -w /usr/src/app ruby:2.6 bundle install + ``` + +3. Construire l'image du Docker : + + ```bash + docker-compose -f ./docker/docker-compose.build-image.yml build + ``` + +**Avant-première locale** + +Lancez le service `bundle exec jekyll serve` pour démarrer le serveur de développement, puis vous pouvez visiter [http://localhost:4000/](http://localhost:4000/) pour prévisualiser votre site. + +Pour Docker, lancez `docker-compose -f./docker/docker-compose.default.yml up` pour démarrer le serveur de développement. + +**Construction et publication** + + +Si vous hébergez votre site sur les pages GitHub, il suffit de pousser la source vers la branche principale de votre dépôt USERNAME.github.io, GitHub se construira automatiquement. Vous pouvez visiter votre site sur **https://USERNAME.github.io** quelques minutes plus tard. + +Si vous hébergez votre site sur votre serveur, vous devez d'abord lancer `JEKYLL_ENV=production bundle exec jekyll build` pour générer votre site, puis mettre à jour les fichiers du dossier *_site* sur votre serveur. + +**Structure** + + +```bash +├── _data +│ ├── locale.yml +│ ├── navigation.yml +│ └── variables.yml +├── _includes +│ ├── analytics-providers +│ ├── aside +│ ├── comments-providers +│ ├── markdown-enhancements +│ ├── pageview-providers +│ ├── scripts +│ ├── sidebar +│ ├── snippets +│ ├── svg +│ │ ├── icon +│ │ │ ├── social +│ │ │ │ ├── facebook.svg +│ │ │ │ └── ... +│ │ └── logo.svg +│ └── ... +├── _layouts +│ ├── 404.html +│ ├── archive.html +│ ├── article.html +│ ├── base.html +│ ├── home.html +│ ├── none.html +│ └── page.html +├── _sass +├── assets +│ ├── css +│ │ └── blog.scss +│ └── images +├── tools +├── 404.html +├── Gemfile +├── _config.yml +├── about.md +├── archive.html +├── favicon.ico +├── gulpfile.js +├── index.html +├── jekyll-text-theme.gemspec +└── package.json +``` + +### Configuration + +Jekyll vous permet de concocter vos sites comme vous le souhaitez, et c'est grâce aux options de configuration puissantes et flexibles que cela est possible. Ces options peuvent être spécifiées soit dans un fichier *_config.yml* placé dans le répertoire racine de votre site, soit sous forme de drapeaux pour l'exécutable jekyll dans le terminal. + +Pour des raisons techniques, *_config.yml* n'est **PAS** rechargé automatiquement lorsque vous utilisez `jekyll serve`. Si vous modifiez ce fichier, veuillez redémarrer le processus du serveur. +{:.warning} + + + +### Paramètres du site + +**Thème** + +Si vous utilisez la version Ruby gem du thème, vous aurez besoin de cette ligne pour l'activer : + +```yaml +theme: jekyll-text-theme +``` + +**Skin** + +TeXt dispose de 6 skins intégrés, vous pouvez également créer votre propre skin. + +| `default` | `dark` | `forest` | +| --- | --- | --- | +| ![Default](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/screenshots/skins_default.jpg) | ![Dark](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/screenshots/skins_dark.jpg) | ![Forest](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/screenshots/skins_forest.jpg) | + +| `ocean` | `chocolate` | `orange` | +| --- | --- | --- | +| ![Ocean](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/screenshots/skins_ocean.jpg) | ![Chocolate](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/screenshots/skins_chocolate.jpg) | ![Orange](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/screenshots/skins_orange.jpg) | + +```yaml +text_skin: default # "default" (default), "dark", "forest", "ocean", "chocolate", "orange" +``` + +**Highlight Theme** + +TeXt use [Tomorrow](https://github.com/chriskempson/tomorrow-theme) as the highlight theme. + +| `tomorrow` | `tomorrow-night` | `tomorrow-night-eighties` | `tomorrow-night-blue` | `tomorrow-night-bright` | +| --- | --- | --- | --- | --- | +| ![Tomorrow](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/screenshots/highlight_tomorrow.png) | ![Tomorrow Night](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/screenshots/highlight_tomorrow-night.png) | ![Tomorrow Night Eighties](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/screenshots/highlight_tomorrow-night-eighties.png) | ![Tomorrow Night Blue](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/screenshots/highlight_tomorrow-night-blue.png) | ![Tomorrow Night Bright](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/screenshots/highlight_tomorrow-night-bright.png) | + +Every skin has a default highlight theme, but you can overwrite it by `highlight_theme` variable. + +```yaml +highlight_theme: default # "default" (default), "tomorrow", "tomorrow-night", "tomorrow-night-eighties", "tomorrow-night-blue", "tomorrow-night-bright" +``` + +**URL** + +Le nom d'hôte et le protocole de base de votre site. Si vous hébergez le site sur des pages Github, celui-ci sera défini comme le domaine des pages GitHub (cname ou user domain) [^gitHub_metadata]. Par exemple, https://kitian616.github.io ou https://tianqi.name s'il y a un fichier cname. + +Jekyll 3.3 remplace cette valeur par l'url suivante : http://localhost:4000 lorsque vous exécutez `jekyll serve` dans un environnement de développement [^jekyll_site_variables]. Vous pouvez spécifier l'environnement Jekyll [^jekyll_specifying_environment] à l'environnement de production par `JEKYLL_ENV=production` pour éviter ce comportement. +{:.warning} + +[^gitHub_metadata]: [GitHub Metadata, a.k.a. site.github](https://github.com/jekyll/github-metadata#what-it-does) + +[^jekyll_site_variables]: [Variables#Site Variables](https://jekyllrb.com/docs/variables/#site-variables) + +[^jekyll_specifying_environment]: [Configuration#Specifying a Jekyll environment at build timePermalink](https://jekyllrb.com/docs/configuration/#specifying-a-jekyll-environment-at-build-time) + +**URL de base** + +L'URL de base de votre site, par défaut, est "/". Si vous hébergez le site sur des pages Github, elle sera définie comme le nom du projet pour les pages de projet si aucune n'est définie [^gitHub_metadata]. + +**Titre** + +Le nom de votre site. + +```yaml +title: "My Awesome Website" +``` + +**Description** + +Utilisez quelques mots pour décrire votre site. + +```yaml +description: > # this means to ignore newlines until "nav_lists:" + A website with awesome stories. +``` + +**Langue et fuseau horaire** + +La langue de votre site, vous pouvez la remplacer par d'autres sur des postes spécifiques, des pages de YAML Front Matter [^font_matter], en savoir plus sur [Internationalisation](#internationalisation). + +```yaml +lang: fr +``` + +[^font_matter]: [Front Matter](https://jekyllrb.com/docs/frontmatter/) + +Définissez le fuseau horaire pour la génération du site. Cela définit la variable d'environnement TZ, que Ruby utilise pour gérer la création et la manipulation de l'heure et de la date. Une liste de toutes les valeurs disponibles se trouve [ICI](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). + +Lorsque le service est effectué sur une machine locale, le fuseau horaire par défaut est défini par votre système d'exploitation. Mais lorsqu'il est servi sur un hôte/serveur distant, le fuseau horaire par défaut dépend du paramétrage ou de l'emplacement du serveur [^jekyll_global_configuration]. + +[^jekyll_global_configuration]: [Configuration#Global Configuration](https://jekyllrb.com/docs/configuration/#global-configuration) + +```yaml +timezone: Europe/Paris +``` + +**Auteur et social** + +Informations sur l'auteur du site (une personne, une équipe ou une organisation). + +**Type** + +Type de l'auteur du site, une personne ou une organisation, utilisé par le balisage [schema.org](https://schema.org/), par défaut "personne". + +**Nom** + +Utilisé pour désigner l'auteur d'un site. + +**Avatar** + +Photo ou Logo de l'auteur du site + +**Bio** + +Brève introduction pour l'auteur du site + +**Social** + +Nom d'utilisateur ou identifiant des réseaux sociaux de l'auteur du site. + +TeXt supporte Email, Facebook, Twitter, Weibo, Google Plus, Telegram, Medium, Zhihu, Douban, Linkedin, Github et Npm, plus à ajouter. + +En fonction de vos paramètres, les boutons de réseau social s'afficheront dans le pied de page de chaque page. + +**Dépôt GitHub** + +Pour plus d'informations sur l'installation du plugin [GitHub Metadata](https://github.com/jekyll/github-metadata), veuillez consulter [ICI](https://github.com/jekyll/github-metadata/blob/master/docs/configuration.md#configuration). + +Pour que jekyll-github-metadata sache quelles métadonnées rechercher, il doit être capable de déterminer le dépôt NWO à demander à GitHub. + +"NWO" signifie "nom avec propriétaire". Il s'agit du nom d'utilisateur du propriétaire du dépôt, plus une barre oblique vers l'avant et le nom du dépôt, par exemple kitian616/jekyll-TeXt-theme, où "kitian616" est le propriétaire et "jekyll-TeXt-theme" est le nom du dépôt. + +```yaml +repository: user_name/repo_name +``` + +**Post Extrait** + +Chaque message prend automatiquement le premier bloc de texte, du début du contenu à la première occurrence de `excerpt_separator`, et le définit comme l'extrait du message. + +L'extrait de l'article est affiché dans la liste des articles dans la mise en page d'accueil. Il existe deux types d'extrait, le type texte et le type html. + +| Type Name | Description | +| --- | --- | +| **text** | l'extrait est un texte simple qui filtre tous les éléments non textuels (tels que le titre, le lien, la liste, le tableau, l'image, etc.) et ne comporte que 350 caractères au maximum.| +| **html** | L'extrait est un document HTML tout comme le contenu de l'article. Il affiche tout le contenu par défaut, à l'exception de l'ajout de `` dans le fichier Markdown de l'article. Vous pouvez trouver plus d'informations [ICI](https://jekyllrb.com/docs/posts/#post-excerpts). | + +```yaml +excerpt_separator: +excerpt_type: text # text (default), html +``` + +**Licence** + +| Name | License | Image | +| --- | --- | --- | +| CC-BY-4.0 | [Attribution 4.0 International](https://creativecommons.org/licenses/by/4.0/) | ![CC-BY-4.0](https://i.creativecommons.org/l/by/4.0/88x31.png) | +| CC-BY-SA-4.0 | [Attribution-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-sa/4.0/) | ![CC-BY-SA-4.0](https://i.creativecommons.org/l/by-sa/4.0/88x31.png) | +| CC-BY-NC-4.0 | [Attribution-NonCommercial 4.0 International](https://creativecommons.org/licenses/by-nc/4.0/) | ![CC-BY-NC-4.0](https://i.creativecommons.org/l/by-nc/4.0/88x31.png) | +| CC-BY-ND-4.0 | [Attribution-NoDerivatives 4.0 International](https://creativecommons.org/licenses/by-nd/4.0/) | ![CC-BY-ND-4.0](https://i.creativecommons.org/l/by-nd/4.0/88x31.png) | + +```yaml +license: CC-BY-NC-4.0 +``` + +**TOC** + +Éléments à utiliser comme titres. + +```yaml +toc: + selectors: "h1,h2,h3" +``` + +**Améliorations markdown** + +Afin d'améliorer l'expérience de l'utilisateur tant pour la lecture que pour l'écriture des messages, TeXt a apporté quelques améliorations pour la démarque. Par défaut, toutes les améliorations pour la démarque sont activées. Vous devez régler les paramètres sur true pour les activer : + +```yaml +## Mermaid +mermaid: true + +## Chart +chart: true +``` + +Et vous pouvez également le remplacer par d'autres sur des postes spécifiques, des pages de YAML Front Matter [^font_matter]. + +Vérifiez [Writing Posts](/) pour une utilisation détaillée. + +**Paginer** + +Paramètres du plugin [Jekyll Paginate](https://github.com/jekyll/jekyll-paginate). Pour activer la pagination des articles de votre blog, ajoutez une ligne au fichier *_config.yml* qui précise le nombre d'articles à afficher par page : + +```yaml +paginate: 8 +``` + +Le nombre doit être le nombre maximum de messages que vous souhaitez voir affichés par page dans le site généré. + +Vous pouvez également spécifier la destination des pages de pagination : + +```yaml +paginate_path: /page:num # don't change this unless for special need +``` + +**Sources** + +TeXt utilise CDN[^cdn] pour améliorer la vitesse, vous pouvez choisir [BootCDN](http://www.bootcdn.cn/) (par défaut) ou [unpkg](https://unpkg.com/) comme fournisseur CDN de votre site, les deux sont open source et gratuits. + +Si votre site est principalement destiné aux Chinois, utilisez simplement BootCDN. + +```yaml +sources: bootcdn # bootcdn (default), unpkg +``` + +[^cdn]: [Content delivery network](https://en.wikipedia.org/wiki/Content_delivery_network) + +**Partage** + +| Name | Sharing Provider | Minimum Version | +| --- | --- | --- | +| **addtoany** | [AddToAny](https://www.addtoany.com/) | 2.2.2 | +| **addthis** | [AddThis](https://www.addthis.com/) | 2.2.3 | +| **custom** | | | + +**AddToAny** + +```yaml +comments: + provider: addtoany +``` + +**AddThis** + +```yaml +comments: + provider: addthis + addthis: + id: "your-addthis-pubid" +``` + +Vous DEVEZ définir la variable "sharing" comme "true" dans le **YAML Front Matter** de la page pour permettre le partage sur cette page +{:.warning} + +## Navigation + +Il existe deux types de navigation dans TeXt : **Header Navigation** et **Sidebar Navigation**, toutes deux définies dans *data/navigation.yml*. + + + +### Header Navigation + +La navigation dans l'en-tête est définie sous la clé "header" dans *data/navigation.yml*, c'est un tableau de titre(s) et d'url : + +```yaml +header: + - title: Docs + url: /docs/en/quick-start + - title: 文档 + url: /docs/zh/quick-start + - titles: + en: Archive + zh: 归档 + zh-Hans: 归档 + zh-Hant: 歸檔 + url: /archive.html + - titles: + en: About + zh: 关于 + zh-Hans: 关于 + zh-Hant: 關於 + url: /about.html + - title: GitHub + url: https://github.com/kitian616/jekyll-TeXt-theme +``` + +Vous pouvez utiliser des `titles` pour un nom multilingue. + +### Sidebar Navigation + +Pour utiliser la navigation latérale, vous devez d'abord définir une navigation dans *data/navigation.yml*. + +```yaml +docs-en: + - title: Start + children: + - title: Quick Start + url: /docs/en/quick-start + - title: Structure + url: /docs/en/structure + ... + - title: Customization + children: + - title: Configuration + url: /docs/en/configuration + - title: Navigation + url: /docs/en/navigation + ... +``` + +Ensuite, utilisez la navigation définie comme navigation latérale de l'article dans le Front Matter : + +```yaml +sidebar: + nav: docs-en +``` + +## Layout + + +```mermaid +graph TB; + NONE[none] + BASE[base] + PAGE[page] + ARTICLE[article] + ARTICLES[articles] + HOME[home] + ARCHIVE[archive] + LANDING[landing] + 404[404] + NONE-->BASE; + BASE-->PAGE; + PAGE-->ARTICLE; + PAGE-->ARTICLES; + ARTICLES-->HOME; + PAGE-->ARCHIVE; + PAGE-->LANDING; + PAGE-->404; +``` + +### Mise en page + +Base sur le schéma de base. + +| Variable | Option Values | Description | Minimum Version | +| --- | --- | --- | --- | +| **mode** | normal (default), immersive | mode of the page. | 2.2.0 | +| **type** | webpage (default), article | type of the page, used by [schema.org](https://schema.org/) markup. | | +| **key** | `!!str` | Unique key for the post, required by Comments and Pageview. begin with a letter (`[A-Za-z]`) and may be followed by any number of letters, digits (`[0-9]`), hyphens (`-`), underscores (`_`), colons (`:`), and periods (`.`). | | +| **lang** | en (default), zh, zh-Hans, zh-Hant | Language of this page. | | +| **show_title** | true (default), false | Set as `false` to hide title on this page. | | +| **show_date** | true (default), false | Set as `false` to hide date on this page. | 2.2.0 | +| **show_tags** | true (default), false | Set as `false` to hide tags on this page. | 2.2.0 | +| **full_width** | true, false (default) | Set as `true` to make main full width on this page. | | +| **pageview** | true, false (default) | Set as `true` to enable pageview on this page. | 2.2.0 | +| **comment** | true (default), false | Set as `false` to disable comment on this page. | | +| **mermaid** | true, false | Set as `true` to enable Mermaid on this page. | | +| **chart** | true, false | Set as `true` to enable Chart on this page. | | +| **cover** | `!!str` | Url of the cover image. | 2.2.0 | +| **header** | false, `!!map` | Set as `false` to hide header on this page. | 2.2.0 | +| **article_header**| `!!map` | | 2.2.0 | +| **aside** | `!!map` | | | +| **sidebar** | `!!map` | | | +| **footer** | false | Set as `false` to hide footer on this page. | 2.2.3 | +| **lightbox** | true, false | Set as `true` to enable lightbox (modal image gallery) for large images on this page, you can set `lightbox-ignore` class name to ignore the certain image. | 2.2.4 | + +**header** + +| Variable | Option Values | Description | +| --- | --- | --- | +| **theme** | light, dark | | +| **background** | `!!str` | Available when specified theme. | + +**article_header** + +| Variable | Option Values | Description | +| --- | --- | --- | +| **type** | overlay, cover | | +| **align** | left (default), center| | +| **theme** | light (default), dark | | +| **background_color** | `!!str` | Available when type is `overlay`. If set to a dark color, you need set theme as 'dark'. | +| **background_image** | `!!map` | Available when type is `overlay`, set as `false` can overwrite `cover` to disable background image. | +| **image** | `!!map` | Available when type is `cover`. | +| **actions** | `!!seq` | | + +**article_header.background_image** + +| Variable | Option Values | Description | +| --- | --- | --- | +| **gradient** | `!!str` | | +| **src** | `!!str` | Default to `cover` | + +**article_header.image** + +| Variable | Option Values | Description | +| --- | --- | --- | +| **src** | `!!str` | | + +**aside** + +| Variable | Option Values | Description | +| --- | --- | --- | +| **toc** | true, false | Set as `true` to enable TOC on this page's aside. | + +**sidebar** + +| Variable | Option Values | Description | +| --- | --- | --- | +| **nav** | `!!str` | | + +### Article Layout + +Basé sur Page Layout. + +| Variable | Option Values | Description | Minimum Version | +| --- | --- | --- | --- | +| **modify_date** | `!!str` | The last modified date of this article, the date is modified in the format `YYYY-MM-DD HH:MM:SS +/-TTTT`; hours, minutes, seconds, and timezone offset are optional. just like `date` variable. | | +| **sharing** | true, false (default) | Set as `true` to enable Sharing on this article. | 2.2.2 | +| **show_author_profile** | true, false (default) | Set as `true` to show author profile at the beginning of the article. | | +| **show_subscribe**| true, false (default) | Set as `true` to show subscribe info on this page. | latest | +| **license** | true, false (default), CC-BY-4.0, CC-BY-SA-4.0, CC-BY-NC-4.0, CC-BY-ND-4.0 | license of the article. Set true to use `license` variable that set in *_config.yml*, set false to enable it. | | + +**Articles Layout** + +Basé sur Page Layout, valable depuis version **2.2.0**. + +| Variable | Option Values | Description | +| --- | --- | --- | +| **articles** | `!!map` | | + +**articles** + +| Variable | Option Values | Description | +| --- | --- | --- | +| **data_source** | `!!str` | You can set it as a collections name, then the page will show the article list of this collections. You can refer to [Collections](https://jekyllrb.com/docs/collections/) to learn more about collections. | +| **type** | item, brief, grid | TeXt supports 3 article list type with various settings, yan can find EXEMPLES [ICI](https://tianqi.name/jekyll-TeXt-theme/samples.html#articles-layout). | +| **size** | md, sm | Available when type is `grid`. | +| **article_type** | BlogPosting | Available when type is `normal`. | +| **show_cover** | true (default), false | Available when type is `normal`. Before set it to `true`, you need first set each article a cover image, refer to the `cover` variable in [Page Layout](#page-layout). | +| **cover_size** | lg, md, sm | Available when type is `normal`. | +| **show_excerpt** | true, false (default) | Available when type is `normal`, refer to [excerpt_type](#excerpt_type) below. | +| **excerpt_type** | text, html | Available when type is `normal`. | +| **show_readmore** | true, false (default) | Available when type is `normal`. | +| **show_info** | true, false (default) | Available when type is `normal` or `brief`. | + +**articles.excerpt_type** + +Chaque message prend automatiquement le premier bloc de texte, du début du contenu à la première occurrence de `excerpt_separator`, et le définit comme l'extrait du message. + +L'extrait est affiché dans la liste des articles dans les articles et la mise en page d'accueil. Il existe deux types d'extrait, le type texte et le type html. + +| Type Name | Description | +| --- | --- | +| **text** | l'extrait est un texte simple qui filtre tous les éléments non textuels (tels que le titre, le lien, la liste, le tableau, l'image, etc.) et ne comporte que 350 caractères au maximum. | +| **html** | l'extrait est un document HTML tout comme le contenu de l'article, Cela affichera tout le contenu par défaut, sauf l'ajout de `` dans le fichier Markdown de l'article, Vous pouvez trouver plus d'informations [ICI](https://jekyllrb.com/docs/posts/#post-excerpts). | + +Pour la page d'accueil, vous pouvez mettre `excerpt_type` à `HTML` comme ceci : + +```yaml +layout: home +articles: + excerpt_type: html +``` + +### Home Layout + +Basé sur Articles Layout. + +### Archive Layout + +Basé sur Page Layout. + +### Landing Layout + +Basé sur Page Layout. + +| Variable | Option Values | Description | +| --- | --- | --- | +| **data** | `!!map` | | + +### 404 Layout + +Basé surPage Layout. + +## Logo et Favicon + + +### Logo + +

      TeXt {% include svg/logo.svg %} comme logo, vous pouvez le changer en remplaçant _includes/svg/logo.svg par votre propre logo.

      + +### Favicon + +TeXt recommande [RealFaviconGenerator](https://realfavicongenerator.net/) pour générer des favicons. + +Ouvrez [RealFaviconGenerator](https://realfavicongenerator.net/), cliquez sur "Select your Favicon picture" et choisissez ensuite votre image de favicon. + +![Sélectionnez votre image Favicon](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/docs/assets/images/realfavicongenerator-select-favicon-picture.jpg) + +Après les réglages, vous devez indiquer au générateur où vous placerez les fichiers favicon, TeXt les met par défaut à */actifs*. + +Il est recommandé de placer les fichiers favicon à la racine de votre site. +{:.warning} + +![Sélectionnez votre chemin Favicon](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/docs/assets/images/realfavicongenerator-path.jpg) + +Si tout est fait, il suffit de cliquer sur "Générez vos Favicons et votre code HTML" à la dernière étape. + +![Résultat](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/docs/assets/images/realfavicongenerator-result.jpg) + +Téléchargez le paquet favicon et dézippez-le dans le chemin que vous venez de définir, et remplacez le code HTML dans *_includes/head/favicon.html*. + +## Auteurs + +Par défaut, tous les messages ou pages sont rédigés par l'"auteur" configuré dans *_config.yml*, mais vous pouvez l'écraser dans le YAML Front Mater de la page. + +Pour ce faire, vous devez créer *_data/authors.yml* et ajouter des auteurs en utilisant le format suivant. Toutes les variables se trouvant sous "auteur" dans *_config.yml* peuvent être utilisées (type, nom, url, avatar, bio, email, facebook, etc.). + +```yml +Tian Qi: + name : Tian Qi + url : https://tianqi.name + avatar : https://wx3.sinaimg.cn/large/73bd9e13ly1fjkqy66hl8j208c08c0td.jpg + bio : Author of TeXt. + email : kitian616@outlook.com + facebook : # "user_name" the last part of your profile url, e.g. https://www.facebook.com/user_name + twitter : kitian616 # "user_name" the last part of your profile url, e.g. https://twitter.com/user_name + weibo : 234695683 # "user_id" the last part of your profile url, e.g. https://www.weibo.com/user_id/profile?... + googleplus: 101827554735084402671 # "user_id" the last part of your profile url, e.g. https://plus.google.com/u/0/user_id + telegram : # "user_name" the last part of your profile url, e.g. https://t.me/user_name + medium : # "user_name" the last part of your profile url, e.g. https://medium.com/user_name + zhihu : # "user_name" the last part of your profile url, e.g. https://www.zhihu.com/people/user_name + douban : # "user_name" the last part of your profile url, e.g. https://www.douban.com/people/user_name + linkedin : # "user_name" the last part of your profile url, e.g. https://www.linkedin.com/in/user_name + github : kitian616 # "user_name" the last part of your profile url, e.g. https://github.com/user_name + npm : # "user_name" the last part of your profile url, e.g. https://www.npmjs.com/~user_name +``` + +Assignez un des auteurs dans *authors.yml* à un message ou une page que vous souhaitez remplacer par `site.author`. + + --- + author: Yann M + --- + +## Internationalisation + + +Les textes des éléments de l'interface utilisateur sont regroupés sous forme d'un ensemble de clés de traduction dans *_data/locale.yml*, ce qui permet à TeXt de prendre facilement en charge différentes langues. + +En utilisant les `titres`, vous pouvez définir un nom multilingue pour la page, la mise en page et le titre du navigateur. Par défaut, TeXt a défini un nom multilingue dans *_data/navigation*, *_layouts/archive*, *_layouts/home* et *about.md*. + + + +Les clés de traduction et les noms multilingues mentionnés ci-dessus prennent en charge les langues suivantes : + + +| Language | `lang` | +| --- | --- | +| **English** | en, en-GB, en-US, en-CA, en-AU | +| **French** | fr, fr-BE, fr-CA, fr-CH, fr-FR, fr-LU | + + +Vous pouvez voir des exemples pour différentes langues [ICI](https://tianqi.name/jekyll-TeXt-theme/samples.html#languages). + +## Rédaction des messages + +Comme expliqué sur la page [structure des répertoires](https://jekyllrb.com/docs/structure/), **le dossier */_posts* est l'endroit où se trouvent les articles de votre blog**. Ces fichiers sont généralement Markdown ou HTML. Tous les articles doivent avoir le format YAML Front Matter, et ils seront convertis de leur format source en une page HTML qui fait partie de votre site statique. + + + +### Création de fichiers de poste + +Pour créer un nouveau poste, il suffit de créer un fichier dans le répertoire */_posts*. Jekyll exige que les fichiers de messages de blog soient nommés comme ceux-ci : + + 2011-12-31-new-years-eve-is-awesome.md + 2012-09-12-how-to-write-a-blog.markdown + +**Contenu** + +Tous les fichiers d'articles de blog doivent commencer par YAML Front Matter. + +Afin d'améliorer l'expérience de l'utilisateur tant pour la lecture que pour l'écriture des billets, TeXt a apporté quelques améliorations pour la démarque et quelques styles supplémentaires. + +**YAML Front Matter** + + --- + layout: article + title: Document - Writing Posts + --- + +Entre ces lignes à triple pointillés, vous pouvez définir des variables. Vous pouvez considérer cela comme une configuration de page, celles-ci remplaceraient la configuration globale dans *_config.yml*. + +En plus des variables prédéfinies par Jekyll, TeXt définit de nouvelles variables pour chaque mise en page, voir [Layout](#layout) pour plus de détails. + +## Chart + +[Chart.js](http://www.chartjs.org/docs/latest/) supporte 7 sortes of graphique: + +- [Line Chart](http://www.chartjs.org/docs/latest/charts/line.html) +- [Bar Chart](http://www.chartjs.org/docs/latest/charts/bar.html) +- [Radar Chart](http://www.chartjs.org/docs/latest/charts/radar.html) +- [Polar Area Chart](http://www.chartjs.org/latest/charts/polar.html) +- [Pie Chart](http://www.chartjs.org/docs/latest/charts/doughnut.html) +- [Doughnut Chart](http://www.chartjs.org/docs/latest/charts/doughnut.html) +- [Bubble Chart](http://www.chartjs.org/docs/latest/charts/bubble.html) + +## Autres styles + + +Jekyll utilise kramdown comme processeur de démarque par défaut. kramdown peut ajouter des attributs aux éléments de niveau bloc et span thgird-containre ALDs [^ALDs] feature. avec l'aide des ALD, nous pouvons définir les noms de classe d'un élément par `{ :.class-name1.class-name-2}`. + + +[^ALDs]: [Attribute List Definitions](https://kramdown.gettalong.org/syntax.html#attribute-list-definitions) + +### Alerte + +| Class Names | +| ---- | +| **success** | +| **info** | +| **warning** | +| **error** | + +Success Text. +{:.success} + +Info Text. +{:.info} + +Warning Text. +{:.warning} + +Error Text. +{:.error} + +**markdown:** + + Success Text. + {:.success} +^ + Info Text. + {:.info} +^ + Warning Text. + {:.warning} +^ + Error Text. + {:.error} + +### Tag + +| Class Names | +| ---- | +| **success** | +| **info** | +| **warning** | +| **error** | + +`success`{:.success} + +`info`{:.info} + +`warning`{:.warning} + +`error`{:.error} + +**markdown:** + + `success`{:.success} +^ + `info`{:.info} +^ + `warning`{:.warning} +^ + `error`{:.error} + +### Image + +| Class Names | +| ---- | +| **border** | +| **shadow** | +| **rounded** | +| **circle** | + +**Border** + +
      +
      +
      +![Image](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/docs/assets/images/image.jpg "Image_border"){:.border} +
      +
      + ![Image](path-to-image){:.border} +
      +
      +
      + +**Shadow** + +
      +
      +
      +![Image](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/docs/assets/images/image.jpg "Image_shadow"){:.shadow} +
      +
      + ![Image](path-to-image){:.shadow} +
      +
      +
      + +**Rounded** + +
      +
      +
      +![Image](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/docs/assets/images/image.jpg "Image_rounded"){:.rounded} +
      +
      + ![Image](path-to-image){:.rounded} +
      +
      +
      + +**Circle** + +
      +
      +
      +![Image](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/docs/assets/images/image.jpg "Image_circle"){:.circle} +
      +
      + ![Image](path-to-image){:.circle} +
      +
      +
      + +**Mixture** + +
      +
      +
      +![Image](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/docs/assets/images/image.jpg "Image_border+rounded"){:.border.rounded} +
      +
      + ![Image](path-to-image){:.border.rounded} +
      +
      +
      + +
      +
      +
      +![Image](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/docs/assets/images/image.jpg "Image_circle+shadow"){:.circle.shadow} +
      +
      + ![Image](path-to-image){:.circle.shadow} +
      +
      +
      + +
      +
      +
      +![Image](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/docs/assets/images/image.jpg "Image_circle+border+shadow"){:.circle.border.shadow} +
      +
      + ![Image](path-to-image){:.circle.border.shadow} +
      +
      +
      + +## Spacing + + +Spacing classes are named using the format `{property}{side}-{spacer}`. + +where *property* is one of: + +- `m` - for classes that set `margin` +- `p` - for classes that set `padding` + +where *side* is one of: + +- `t` - for classes that set `margin-top` or `padding-top` +- `b` - for classes that set `margin-bottom` or `padding-bottom` +- `l` - for classes that set `margin-left` or `padding-left` +- `r` - for classes that set `margin-right` or `padding-right` +- `x` - for classes that set both `*-left` and `*-right` +- `y` - for classes that set both `*-top` and `*-bottom` + +blank - for classes that set a `margin` or `padding` on all 4 sides of the element + +where *spacer* is one of: + +- 0 - for classes that eliminate the `margin` or `padding` by setting it to `0` +- 1 - for classes that set the `margin` or `padding` to `$spacer * .25` +- 2 - for classes that set the `margin` or `padding` to `$spacer * .5` +- 3 - for classes that set the `margin` or `padding` to `$spacer` +- 4 - for classes that set the `margin` or `padding` to `$spacer * 1.5` +- 5 - for classes that set the `margin` or `padding` to `$spacer * 3` +- auto - for classes that set the `margin` to `auto` + +`$spacer` is default to `1rem`, you can change or add new entries to the `$spacers` Sass map variable. + +### EXEMPLES + +```html +
      +
      +``` + +```html +
      +
      +``` + +```html +
      +
      +``` + +## Grid + + + + +### Base + +
      +
      +
      6 cells
      +
      2 cells
      +
      4 cells
      +
      +
      + +```html +
      +
      6 cells
      +
      2 cells
      +
      4 cells
      +
      +``` + +### Responsive + +
      +
      +
      12/12/6 cells
      +
      12/4/2 cells
      +
      12/8/4 cells
      +
      +
      + +```html +
      +
      12/12/6 cells
      +
      12/4/2 cells
      +
      12/8/4 cells
      +
      +``` + +### Auto Sizing + +
      +
      +
      2 cells
      +
      Whatever's left!
      +
      +
      + +```html +
      +
      2 cells
      +
      whatever's left!
      +
      +``` + +
      +
      +
      shrink
      +
      expand
      +
      +
      + +```html +
      +
      shrink
      +
      expand
      +
      +``` + +### Gutters + +
      +
      +
      +
      6 cells
      +
      +
      +
      6 cells
      +
      +
      +
      6 cells
      +
      +
      +
      6 cells
      +
      +
      +
      + +```html +
      +
      +
      6 cells
      +
      6 cells
      +
      6 cells
      +
      6 cells
      +
      +
      +``` + +
      +
      +
      +
      6 cells
      +
      +
      +
      6 cells
      +
      +
      +
      6 cells
      +
      +
      +
      6 cells
      +
      +
      +
      + +```html +
      +
      +
      6 cells
      +
      6 cells
      +
      6 cells
      +
      6 cells
      +
      +
      +``` + +
      +
      +
      +
      6 cells
      +
      +
      +
      6 cells
      +
      +
      +
      6 cells
      +
      +
      +
      6 cells
      +
      +
      +
      + +```html +
      +
      +
      6 cells
      +
      6 cells
      +
      6 cells
      +
      6 cells
      +
      +
      +``` + +### Overflow + +
      +
      +
      +
      loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong
      +
      +
      +
      loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong
      +
      +
      +
      + +
      +
      +
      +
      loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong
      +
      +
      +
      loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong
      +
      +
      +
      + +
      +
      +
      +
      loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong
      +
      +
      +
      loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong
      +
      +
      +
      + +## Icons + + +TeXt uses Font Awesome for icons, you can search available icon code snippet [ICI](https://fontawesome.com/icons?d=gallery&q=donw&m=free). + + + +```html + +``` + +
      Download TeXt Theme
      + +```html + Download TeXt Theme +``` + +## Image + + +| Type | Class Names | +| ---- | ---- | +| **base** | image | +| **size** | image\-\-md (default), image\-\-xs, image\-\-sm, image\-\-lg, image\-\-xl | + +### Size + +**Extreme Small** + + + +```html + +``` + +**Small** + + + +```html + +``` + +**Middle** + + + +```html + +``` + +**Large** + + + +```html + +``` + +**Extreme Large** + + + +```html + +``` + +## Button + + +| Type | Class Names | +| ---- | ---- | +| **base** | button | +| **type** | button\-\-primary, button\-\-secondary, button\-\-success, button\-\-info, button\-\-warning, button\-\-error, button\-\-outline\-primary, button\-\-outline\-secondary, button\-\-outline\-success, button\-\-outline\-info, button\-\-outline\-warning, button\-\-outline\-error | +| **shape** | button\-\-pill, button\-\-rounded, button\-\-circle | +| **size** | button\-\-md (default), button\-\-xs, button\-\-sm, button\-\-lg, button\-\-xl | + +### Type + +**Primary** + +
      BUTTON
      + + [BUTTON](#){:.button.button--primary.button--pill} + +```html +BUTTON +``` + +**Secondary** + +
      BUTTON
      + + [BUTTON](#){:.button.button--secondary.button--pill} + +```html +BUTTON +``` + +**Success** + +
      BUTTON
      + + [BUTTON](#){:.button.button--success.button--pill} + +```html +BUTTON +``` + +**Outline** + +
      BUTTON
      + + [BUTTON](#){:.button.button--outline-success.button--pill} + +```html +BUTTON +``` + +### Shape + +**Pill** + +
      BUTTON
      + + [BUTTON](#){:.button.button--primary.button--pill} + +```html +BUTTON +``` + +**Rounded** + +
      BUTTON
      + + [BUTTON](#){:.button.button--primary.button--rounded} + +```html +BUTTON +``` + +**Circle** + +
      X
      + + [X](#){:.button.button--primary.button--circle} + +```html +X +``` + +### Size + +**Extreme Small** + +
      BUTTON
      + + [BUTTON](#){:.button.button--primary.button--rounded.button--xs} + +```html +BUTTON +``` + +**Small** + +
      BUTTON
      + + [BUTTON](#){:.button.button--primary.button--rounded.button--sm} + +```html +BUTTON +``` + +**Middle** + +
      BUTTON
      + + [BUTTON](#){:.button.button--primary.button--rounded} + +```html +BUTTON +``` + +**Large** + +
      BUTTON
      + + [BUTTON](#){:.button.button--primary.button--rounded.button--lg} + +```html +BUTTON +``` + +**Extreme Large** + +
      BUTTON
      + + [BUTTON](#){:.button.button--primary.button--rounded.button--xl} + +```html +BUTTON +``` + +## Item + + +### Content + +
      +
      +
      +

      Photograph

      +
      +
      +

      + A photograph is an image created by light falling on a photosensitive surface, usually photographic film or an electronic image sensor, such as a CCD or a CMOS chip. +

      +
      +
      +
      + +```html +
      +
      +
      +

      Photograph

      +
      +
      +

      ...

      +
      +
      +
      +``` + +### Image and Content + + +
      +
      + +
      +
      +
      +

      Photograph

      +
      +
      +
      + +```html +
      +
      + +
      +
      +
      +

      Photograph

      +
      +
      +
      +``` + +
      +
      + +
      +
      +
      +

      Photograph

      +
      +
      +

      + A photograph is an image created by light falling on a photosensitive surface, usually photographic film or an electronic image sensor, such as a CCD or a CMOS chip. +

      +
      +
      +
      + +```html +
      +
      + +
      +
      +
      +

      Photograph

      +
      +
      +

      ...

      +
      +
      +
      +``` + +### Image Size + +
      +
      + +
      +
      +
      +

      Photograph

      +
      +
      +
      + +```html +
      +
      + +
      +
      +
      +

      Photograph

      +
      +
      +
      +``` + +
      +
      + +
      +
      +
      +

      Photograph

      +
      +
      +

      + A photograph is an image created by light falling on a photosensitive surface, usually photographic film or an electronic image sensor, such as a CCD or a CMOS chip. +

      +
      +
      +
      + +```html +
      +
      + +
      +
      +
      +

      Photograph

      +
      +
      +

      ...

      +
      +
      +
      +``` + +
      +
      + +
      +
      +
      +

      Photograph

      +
      +
      +

      + A photograph is an image created by light falling on a photosensitive surface, usually photographic film or an electronic image sensor, such as a CCD or a CMOS chip. +

      +
      +
      +
      + +```html +
      +
      + +
      +
      +
      +

      Photograph

      +
      +
      +

      ...

      +
      +
      +
      +``` + +## Card + + + +### Image + +
      +
      + +
      +
      + +```html +
      +
      + +
      +
      +``` + +### Content + +
      +
      +
      +

      Photograph

      +
      +

      A photograph is an image created by light falling on a photosensitive surface, usually photographic film or an electronic image sensor, such as a CCD or a CMOS chip.

      +
      +
      + +```html +
      +
      +
      +

      Photograph

      +
      +

      ...

      +
      +
      +``` + +### Image and Content + +
      +
      + +
      +
      +
      +

      Photograph

      +
      +
      +
      + +```html +
      +
      + +
      +
      +
      +

      Photograph

      +
      +
      +
      +``` + +
      +
      + +
      +
      +
      +

      Photograph

      +
      +

      + A photograph is an image created by light falling on a photosensitive surface, usually photographic film or an electronic image sensor, such as a CCD or a CMOS chip. +

      +
      +
      + +```html +
      +
      + +
      +
      +
      +

      Photograph

      +
      +

      ...

      +
      +
      +``` + +### Image Overlay + +
      +
      + +
      +

      Photograph

      +
      +
      +
      + +```html +
      +
      + +
      +

      Photograph

      +
      +
      +
      +``` + +
      +
      + +
      +

      Photograph

      +
      +
      +
      + +```html +
      +
      + +
      +

      Photograph

      +
      +
      +
      +``` + +### Flat + +
      +
      + +
      +
      +
      +

      Photograph

      +
      +
      +
      + +```html +
      +
      + +
      +
      +
      +

      Photograph

      +
      +
      +
      +``` + +### Clickable + +
      +
      +
      + +
      +
      +
      + +```html + +
      +
      + +
      +
      +
      +``` + +## Hero + +### Normal + +
      +
      +

      Hero

      +
      +
      + +```html +
      +
      +

      Hero

      +
      +
      +``` + +### Center + +
      +
      +

      Hero

      +
      +
      + +```html +
      +
      +

      Hero

      +
      +
      +``` + +### Dark Theme + +
      +
      +

      Hero

      +
      +
      + +```html +
      +
      +

      Hero

      +
      +
      +``` + +### Background Image + +
      +
      +

      Hero

      +
      +
      + +```html +
      +
      +

      Hero

      +
      +
      +``` + +
      +
      +

      Hero

      +

      There's a hero, If you look inside your heart,

      +

      You don't have to be afraid of what you are.

      +
      +
      + +```html +
      +
      +

      Hero

      +

      ...

      +
      +
      +``` + +### Height + +
      +
      +

      Hero

      +

      There's a hero, If you look inside your heart,

      +

      You don't have to be afraid of what you are.

      +
      +
      + +```html +
      +
      +

      Hero

      +

      ...

      +
      +
      +``` + +### Background Image + Center + +
      +
      +

      Hero

      +

      There's a hero, If you look inside your heart,

      +

      You don't have to be afraid of what you are.

      +
      +
      + +```html +
      +
      +

      Hero

      +

      ...

      +
      +
      +``` + +
      +
      +

      Hero

      +

      There's a hero, If you look inside your heart,

      +

      You don't have to be afraid of what you are.

      +
      +
      + +```html + + +
      +
      +

      Hero

      +

      ...

      +
      +
      +``` + +## Swiper + + + + +`Alpha`{:.warning} + +### Normal + +
      +
      +
      1
      +
      2
      +
      3
      +
      4
      +
      5
      +
      6
      +
      7
      +
      + +
      +
      + +
      + +```css +.swiper-demo { + height: 220px; +} +``` + +```html +
      +
      +
      1
      +
      2
      +
      3
      +
      4
      +
      5
      +
      6
      +
      7
      +
      +
      +
      +
      +``` + +```js +{%- raw -%} +{%- include scripts/lib/swiper.js -%} +var SOURCES = window.TEXT_VARIABLES.sources; +window.Lazyload.js(SOURCES.jquery, function() { + $('.swiper-demo').swiper(); +}); +{% endraw %} +``` + +### Light Theme + +
      +
      +
      1
      +
      2
      +
      3
      +
      4
      +
      5
      +
      6
      +
      7
      +
      +
      +
      +
      + +### Dark Theme + +
      +
      +
      1
      +
      2
      +
      3
      +
      4
      +
      5
      +
      6
      +
      7
      +
      +
      +
      +
      + + +**Without Animation** + +
      +
      +
      1
      +
      2
      +
      3
      +
      4
      +
      5
      +
      6
      +
      7
      +
      +
      +
      +
      + + diff --git a/archive.html b/archive.html new file mode 100755 index 0000000..89dc810 --- /dev/null +++ b/archive.html @@ -0,0 +1,3 @@ +--- +layout: archive +--- diff --git a/assets/css/all.css b/assets/css/all.css new file mode 100644 index 0000000..8539c00 --- /dev/null +++ b/assets/css/all.css @@ -0,0 +1,5 @@ +/*! + * Font Awesome Free 5.0.13 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +.fa,.fab,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{animation:a 2s infinite linear}.fa-pulse{animation:a 1s infinite steps(8)}@keyframes a{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-aws:before{content:"\f375"}.fa-backward:before{content:"\f04a"}.fa-balance-scale:before{content:"\f24e"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bicycle:before{content:"\f206"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blind:before{content:"\f29d"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-book:before{content:"\f02d"}.fa-book-open:before{content:"\f518"}.fa-bookmark:before{content:"\f02e"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-btc:before{content:"\f15a"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-certificate:before{content:"\f0a3"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-square:before{content:"\f14a"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-credit-card:before{content:"\f09d"}.fa-crop:before{content:"\f125"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-deviantart:before{content:"\f1bd"}.fa-diagnoses:before{content:"\f470"}.fa-dice:before{content:"\f522"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-excel:before{content:"\f1c3"}.fa-file-image:before{content:"\f1c5"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fire:before{content:"\f06d"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-fulcrum:before{content:"\f50b"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-gift:before{content:"\f06b"}.fa-git:before{content:"\f1d3"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-martini:before{content:"\f000"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hashtag:before{content:"\f292"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-heart:before{content:"\f004"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-houzz:before{content:"\f27c"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-internet-explorer:before{content:"\f26b"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-joget:before{content:"\f3b7"}.fa-joomla:before{content:"\f1aa"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-meh:before{content:"\f11a"}.fa-memory:before{content:"\f538"}.fa-mercury:before{content:"\f223"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-moon:before{content:"\f186"}.fa-motorcycle:before{content:"\f21c"}.fa-mouse-pointer:before{content:"\f245"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nintendo-switch:before{content:"\f418"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-old-republic:before{content:"\f510"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-osi:before{content:"\f41a"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-paint-brush:before{content:"\f1fc"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-people-carry:before{content:"\f4ce"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-volume:before{content:"\f2a0"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-plane:before{content:"\f072"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poo:before{content:"\f2fe"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-r-project:before{content:"\f4f7"}.fa-random:before{content:"\f074"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-rendact:before{content:"\f3e4"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-retweet:before{content:"\f079"}.fa-ribbon:before{content:"\f4d6"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-rupee-sign:before{content:"\f156"}.fa-safari:before{content:"\f267"}.fa-sass:before{content:"\f41e"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-search:before{content:"\f002"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shower:before{content:"\f2cc"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skull:before{content:"\f54c"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowflake:before{content:"\f2dc"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-spinner:before{content:"\f110"}.fa-spotify:before{content:"\f1bc"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-star:before{content:"\f005"}.fa-star-half:before{content:"\f089"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toolbox:before{content:"\f552"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-train:before{content:"\f238"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-moving:before{content:"\f4df"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-uikit:before{content:"\f403"}.fa-umbrella:before{content:"\f0e9"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-glass:before{content:"\f4e3"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:Font Awesome\ 5 Brands;font-style:normal;font-weight:400;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:Font Awesome\ 5 Brands}@font-face{font-family:Font Awesome\ 5 Free;font-style:normal;font-weight:400;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.far{font-weight:400}@font-face{font-family:Font Awesome\ 5 Free;font-style:normal;font-weight:900;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.far,.fas{font-family:Font Awesome\ 5 Free}.fa,.fas{font-weight:900} \ No newline at end of file diff --git a/assets/css/all.min.css b/assets/css/all.min.css new file mode 100644 index 0000000..d949e4f --- /dev/null +++ b/assets/css/all.min.css @@ -0,0 +1,9 @@ +/*! + * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2023 Fonticons, Inc. + */ +.fa{font-family:var(--fa-style-family,"Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-classic,.fa-regular,.fa-sharp,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:"Font Awesome 6 Free"}.fa-brands,.fab{font-family:"Font Awesome 6 Brands"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-transition-delay:0s;transition-delay:0s;-webkit-transition-duration:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,none));transform:rotate(var(--fa-rotate-angle,none))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)} + +.fa-0:before{content:"\30"}.fa-1:before{content:"\31"}.fa-2:before{content:"\32"}.fa-3:before{content:"\33"}.fa-4:before{content:"\34"}.fa-5:before{content:"\35"}.fa-6:before{content:"\36"}.fa-7:before{content:"\37"}.fa-8:before{content:"\38"}.fa-9:before{content:"\39"}.fa-fill-drip:before{content:"\f576"}.fa-arrows-to-circle:before{content:"\e4bd"}.fa-chevron-circle-right:before,.fa-circle-chevron-right:before{content:"\f138"}.fa-at:before{content:"\40"}.fa-trash-alt:before,.fa-trash-can:before{content:"\f2ed"}.fa-text-height:before{content:"\f034"}.fa-user-times:before,.fa-user-xmark:before{content:"\f235"}.fa-stethoscope:before{content:"\f0f1"}.fa-comment-alt:before,.fa-message:before{content:"\f27a"}.fa-info:before{content:"\f129"}.fa-compress-alt:before,.fa-down-left-and-up-right-to-center:before{content:"\f422"}.fa-explosion:before{content:"\e4e9"}.fa-file-alt:before,.fa-file-lines:before,.fa-file-text:before{content:"\f15c"}.fa-wave-square:before{content:"\f83e"}.fa-ring:before{content:"\f70b"}.fa-building-un:before{content:"\e4d9"}.fa-dice-three:before{content:"\f527"}.fa-calendar-alt:before,.fa-calendar-days:before{content:"\f073"}.fa-anchor-circle-check:before{content:"\e4aa"}.fa-building-circle-arrow-right:before{content:"\e4d1"}.fa-volleyball-ball:before,.fa-volleyball:before{content:"\f45f"}.fa-arrows-up-to-line:before{content:"\e4c2"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-circle-minus:before,.fa-minus-circle:before{content:"\f056"}.fa-door-open:before{content:"\f52b"}.fa-right-from-bracket:before,.fa-sign-out-alt:before{content:"\f2f5"}.fa-atom:before{content:"\f5d2"}.fa-soap:before{content:"\e06e"}.fa-heart-music-camera-bolt:before,.fa-icons:before{content:"\f86d"}.fa-microphone-alt-slash:before,.fa-microphone-lines-slash:before{content:"\f539"}.fa-bridge-circle-check:before{content:"\e4c9"}.fa-pump-medical:before{content:"\e06a"}.fa-fingerprint:before{content:"\f577"}.fa-hand-point-right:before{content:"\f0a4"}.fa-magnifying-glass-location:before,.fa-search-location:before{content:"\f689"}.fa-forward-step:before,.fa-step-forward:before{content:"\f051"}.fa-face-smile-beam:before,.fa-smile-beam:before{content:"\f5b8"}.fa-flag-checkered:before{content:"\f11e"}.fa-football-ball:before,.fa-football:before{content:"\f44e"}.fa-school-circle-exclamation:before{content:"\e56c"}.fa-crop:before{content:"\f125"}.fa-angle-double-down:before,.fa-angles-down:before{content:"\f103"}.fa-users-rectangle:before{content:"\e594"}.fa-people-roof:before{content:"\e537"}.fa-people-line:before{content:"\e534"}.fa-beer-mug-empty:before,.fa-beer:before{content:"\f0fc"}.fa-diagram-predecessor:before{content:"\e477"}.fa-arrow-up-long:before,.fa-long-arrow-up:before{content:"\f176"}.fa-burn:before,.fa-fire-flame-simple:before{content:"\f46a"}.fa-male:before,.fa-person:before{content:"\f183"}.fa-laptop:before{content:"\f109"}.fa-file-csv:before{content:"\f6dd"}.fa-menorah:before{content:"\f676"}.fa-truck-plane:before{content:"\e58f"}.fa-record-vinyl:before{content:"\f8d9"}.fa-face-grin-stars:before,.fa-grin-stars:before{content:"\f587"}.fa-bong:before{content:"\f55c"}.fa-pastafarianism:before,.fa-spaghetti-monster-flying:before{content:"\f67b"}.fa-arrow-down-up-across-line:before{content:"\e4af"}.fa-spoon:before,.fa-utensil-spoon:before{content:"\f2e5"}.fa-jar-wheat:before{content:"\e517"}.fa-envelopes-bulk:before,.fa-mail-bulk:before{content:"\f674"}.fa-file-circle-exclamation:before{content:"\e4eb"}.fa-circle-h:before,.fa-hospital-symbol:before{content:"\f47e"}.fa-pager:before{content:"\f815"}.fa-address-book:before,.fa-contact-book:before{content:"\f2b9"}.fa-strikethrough:before{content:"\f0cc"}.fa-k:before{content:"\4b"}.fa-landmark-flag:before{content:"\e51c"}.fa-pencil-alt:before,.fa-pencil:before{content:"\f303"}.fa-backward:before{content:"\f04a"}.fa-caret-right:before{content:"\f0da"}.fa-comments:before{content:"\f086"}.fa-file-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-code-pull-request:before{content:"\e13c"}.fa-clipboard-list:before{content:"\f46d"}.fa-truck-loading:before,.fa-truck-ramp-box:before{content:"\f4de"}.fa-user-check:before{content:"\f4fc"}.fa-vial-virus:before{content:"\e597"}.fa-sheet-plastic:before{content:"\e571"}.fa-blog:before{content:"\f781"}.fa-user-ninja:before{content:"\f504"}.fa-person-arrow-up-from-line:before{content:"\e539"}.fa-scroll-torah:before,.fa-torah:before{content:"\f6a0"}.fa-broom-ball:before,.fa-quidditch-broom-ball:before,.fa-quidditch:before{content:"\f458"}.fa-toggle-off:before{content:"\f204"}.fa-archive:before,.fa-box-archive:before{content:"\f187"}.fa-person-drowning:before{content:"\e545"}.fa-arrow-down-9-1:before,.fa-sort-numeric-desc:before,.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-face-grin-tongue-squint:before,.fa-grin-tongue-squint:before{content:"\f58a"}.fa-spray-can:before{content:"\f5bd"}.fa-truck-monster:before{content:"\f63b"}.fa-w:before{content:"\57"}.fa-earth-africa:before,.fa-globe-africa:before{content:"\f57c"}.fa-rainbow:before{content:"\f75b"}.fa-circle-notch:before{content:"\f1ce"}.fa-tablet-alt:before,.fa-tablet-screen-button:before{content:"\f3fa"}.fa-paw:before{content:"\f1b0"}.fa-cloud:before{content:"\f0c2"}.fa-trowel-bricks:before{content:"\e58a"}.fa-face-flushed:before,.fa-flushed:before{content:"\f579"}.fa-hospital-user:before{content:"\f80d"}.fa-tent-arrow-left-right:before{content:"\e57f"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-binoculars:before{content:"\f1e5"}.fa-microphone-slash:before{content:"\f131"}.fa-box-tissue:before{content:"\e05b"}.fa-motorcycle:before{content:"\f21c"}.fa-bell-concierge:before,.fa-concierge-bell:before{content:"\f562"}.fa-pen-ruler:before,.fa-pencil-ruler:before{content:"\f5ae"}.fa-people-arrows-left-right:before,.fa-people-arrows:before{content:"\e068"}.fa-mars-and-venus-burst:before{content:"\e523"}.fa-caret-square-right:before,.fa-square-caret-right:before{content:"\f152"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-sun-plant-wilt:before{content:"\e57a"}.fa-toilets-portable:before{content:"\e584"}.fa-hockey-puck:before{content:"\f453"}.fa-table:before{content:"\f0ce"}.fa-magnifying-glass-arrow-right:before{content:"\e521"}.fa-digital-tachograph:before,.fa-tachograph-digital:before{content:"\f566"}.fa-users-slash:before{content:"\e073"}.fa-clover:before{content:"\e139"}.fa-mail-reply:before,.fa-reply:before{content:"\f3e5"}.fa-star-and-crescent:before{content:"\f699"}.fa-house-fire:before{content:"\e50c"}.fa-minus-square:before,.fa-square-minus:before{content:"\f146"}.fa-helicopter:before{content:"\f533"}.fa-compass:before{content:"\f14e"}.fa-caret-square-down:before,.fa-square-caret-down:before{content:"\f150"}.fa-file-circle-question:before{content:"\e4ef"}.fa-laptop-code:before{content:"\f5fc"}.fa-swatchbook:before{content:"\f5c3"}.fa-prescription-bottle:before{content:"\f485"}.fa-bars:before,.fa-navicon:before{content:"\f0c9"}.fa-people-group:before{content:"\e533"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-heart-broken:before,.fa-heart-crack:before{content:"\f7a9"}.fa-external-link-square-alt:before,.fa-square-up-right:before{content:"\f360"}.fa-face-kiss-beam:before,.fa-kiss-beam:before{content:"\f597"}.fa-film:before{content:"\f008"}.fa-ruler-horizontal:before{content:"\f547"}.fa-people-robbery:before{content:"\e536"}.fa-lightbulb:before{content:"\f0eb"}.fa-caret-left:before{content:"\f0d9"}.fa-circle-exclamation:before,.fa-exclamation-circle:before{content:"\f06a"}.fa-school-circle-xmark:before{content:"\e56d"}.fa-arrow-right-from-bracket:before,.fa-sign-out:before{content:"\f08b"}.fa-chevron-circle-down:before,.fa-circle-chevron-down:before{content:"\f13a"}.fa-unlock-alt:before,.fa-unlock-keyhole:before{content:"\f13e"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-headphones-alt:before,.fa-headphones-simple:before{content:"\f58f"}.fa-sitemap:before{content:"\f0e8"}.fa-circle-dollar-to-slot:before,.fa-donate:before{content:"\f4b9"}.fa-memory:before{content:"\f538"}.fa-road-spikes:before{content:"\e568"}.fa-fire-burner:before{content:"\e4f1"}.fa-flag:before{content:"\f024"}.fa-hanukiah:before{content:"\f6e6"}.fa-feather:before{content:"\f52d"}.fa-volume-down:before,.fa-volume-low:before{content:"\f027"}.fa-comment-slash:before{content:"\f4b3"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-compress:before{content:"\f066"}.fa-wheat-alt:before,.fa-wheat-awn:before{content:"\e2cd"}.fa-ankh:before{content:"\f644"}.fa-hands-holding-child:before{content:"\e4fa"}.fa-asterisk:before{content:"\2a"}.fa-check-square:before,.fa-square-check:before{content:"\f14a"}.fa-peseta-sign:before{content:"\e221"}.fa-header:before,.fa-heading:before{content:"\f1dc"}.fa-ghost:before{content:"\f6e2"}.fa-list-squares:before,.fa-list:before{content:"\f03a"}.fa-phone-square-alt:before,.fa-square-phone-flip:before{content:"\f87b"}.fa-cart-plus:before{content:"\f217"}.fa-gamepad:before{content:"\f11b"}.fa-circle-dot:before,.fa-dot-circle:before{content:"\f192"}.fa-dizzy:before,.fa-face-dizzy:before{content:"\f567"}.fa-egg:before{content:"\f7fb"}.fa-house-medical-circle-xmark:before{content:"\e513"}.fa-campground:before{content:"\f6bb"}.fa-folder-plus:before{content:"\f65e"}.fa-futbol-ball:before,.fa-futbol:before,.fa-soccer-ball:before{content:"\f1e3"}.fa-paint-brush:before,.fa-paintbrush:before{content:"\f1fc"}.fa-lock:before{content:"\f023"}.fa-gas-pump:before{content:"\f52f"}.fa-hot-tub-person:before,.fa-hot-tub:before{content:"\f593"}.fa-map-location:before,.fa-map-marked:before{content:"\f59f"}.fa-house-flood-water:before{content:"\e50e"}.fa-tree:before{content:"\f1bb"}.fa-bridge-lock:before{content:"\e4cc"}.fa-sack-dollar:before{content:"\f81d"}.fa-edit:before,.fa-pen-to-square:before{content:"\f044"}.fa-car-side:before{content:"\f5e4"}.fa-share-alt:before,.fa-share-nodes:before{content:"\f1e0"}.fa-heart-circle-minus:before{content:"\e4ff"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-microscope:before{content:"\f610"}.fa-sink:before{content:"\e06d"}.fa-bag-shopping:before,.fa-shopping-bag:before{content:"\f290"}.fa-arrow-down-z-a:before,.fa-sort-alpha-desc:before,.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-mitten:before{content:"\f7b5"}.fa-person-rays:before{content:"\e54d"}.fa-users:before{content:"\f0c0"}.fa-eye-slash:before{content:"\f070"}.fa-flask-vial:before{content:"\e4f3"}.fa-hand-paper:before,.fa-hand:before{content:"\f256"}.fa-om:before{content:"\f679"}.fa-worm:before{content:"\e599"}.fa-house-circle-xmark:before{content:"\e50b"}.fa-plug:before{content:"\f1e6"}.fa-chevron-up:before{content:"\f077"}.fa-hand-spock:before{content:"\f259"}.fa-stopwatch:before{content:"\f2f2"}.fa-face-kiss:before,.fa-kiss:before{content:"\f596"}.fa-bridge-circle-xmark:before{content:"\e4cb"}.fa-face-grin-tongue:before,.fa-grin-tongue:before{content:"\f589"}.fa-chess-bishop:before{content:"\f43a"}.fa-face-grin-wink:before,.fa-grin-wink:before{content:"\f58c"}.fa-deaf:before,.fa-deafness:before,.fa-ear-deaf:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-road-circle-check:before{content:"\e564"}.fa-dice-five:before{content:"\f523"}.fa-rss-square:before,.fa-square-rss:before{content:"\f143"}.fa-land-mine-on:before{content:"\e51b"}.fa-i-cursor:before{content:"\f246"}.fa-stamp:before{content:"\f5bf"}.fa-stairs:before{content:"\e289"}.fa-i:before{content:"\49"}.fa-hryvnia-sign:before,.fa-hryvnia:before{content:"\f6f2"}.fa-pills:before{content:"\f484"}.fa-face-grin-wide:before,.fa-grin-alt:before{content:"\f581"}.fa-tooth:before{content:"\f5c9"}.fa-v:before{content:"\56"}.fa-bangladeshi-taka-sign:before{content:"\e2e6"}.fa-bicycle:before{content:"\f206"}.fa-rod-asclepius:before,.fa-rod-snake:before,.fa-staff-aesculapius:before,.fa-staff-snake:before{content:"\e579"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-ambulance:before,.fa-truck-medical:before{content:"\f0f9"}.fa-wheat-awn-circle-exclamation:before{content:"\e598"}.fa-snowman:before{content:"\f7d0"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-road-barrier:before{content:"\e562"}.fa-school:before{content:"\f549"}.fa-igloo:before{content:"\f7ae"}.fa-joint:before{content:"\f595"}.fa-angle-right:before{content:"\f105"}.fa-horse:before{content:"\f6f0"}.fa-q:before{content:"\51"}.fa-g:before{content:"\47"}.fa-notes-medical:before{content:"\f481"}.fa-temperature-2:before,.fa-temperature-half:before,.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-dong-sign:before{content:"\e169"}.fa-capsules:before{content:"\f46b"}.fa-poo-bolt:before,.fa-poo-storm:before{content:"\f75a"}.fa-face-frown-open:before,.fa-frown-open:before{content:"\f57a"}.fa-hand-point-up:before{content:"\f0a6"}.fa-money-bill:before{content:"\f0d6"}.fa-bookmark:before{content:"\f02e"}.fa-align-justify:before{content:"\f039"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-helmet-un:before{content:"\e503"}.fa-bullseye:before{content:"\f140"}.fa-bacon:before{content:"\f7e5"}.fa-hand-point-down:before{content:"\f0a7"}.fa-arrow-up-from-bracket:before{content:"\e09a"}.fa-folder-blank:before,.fa-folder:before{content:"\f07b"}.fa-file-medical-alt:before,.fa-file-waveform:before{content:"\f478"}.fa-radiation:before{content:"\f7b9"}.fa-chart-simple:before{content:"\e473"}.fa-mars-stroke:before{content:"\f229"}.fa-vial:before{content:"\f492"}.fa-dashboard:before,.fa-gauge-med:before,.fa-gauge:before,.fa-tachometer-alt-average:before{content:"\f624"}.fa-magic-wand-sparkles:before,.fa-wand-magic-sparkles:before{content:"\e2ca"}.fa-e:before{content:"\45"}.fa-pen-alt:before,.fa-pen-clip:before{content:"\f305"}.fa-bridge-circle-exclamation:before{content:"\e4ca"}.fa-user:before{content:"\f007"}.fa-school-circle-check:before{content:"\e56b"}.fa-dumpster:before{content:"\f793"}.fa-shuttle-van:before,.fa-van-shuttle:before{content:"\f5b6"}.fa-building-user:before{content:"\e4da"}.fa-caret-square-left:before,.fa-square-caret-left:before{content:"\f191"}.fa-highlighter:before{content:"\f591"}.fa-key:before{content:"\f084"}.fa-bullhorn:before{content:"\f0a1"}.fa-globe:before{content:"\f0ac"}.fa-synagogue:before{content:"\f69b"}.fa-person-half-dress:before{content:"\e548"}.fa-road-bridge:before{content:"\e563"}.fa-location-arrow:before{content:"\f124"}.fa-c:before{content:"\43"}.fa-tablet-button:before{content:"\f10a"}.fa-building-lock:before{content:"\e4d6"}.fa-pizza-slice:before{content:"\f818"}.fa-money-bill-wave:before{content:"\f53a"}.fa-area-chart:before,.fa-chart-area:before{content:"\f1fe"}.fa-house-flag:before{content:"\e50d"}.fa-person-circle-minus:before{content:"\e540"}.fa-ban:before,.fa-cancel:before{content:"\f05e"}.fa-camera-rotate:before{content:"\e0d8"}.fa-air-freshener:before,.fa-spray-can-sparkles:before{content:"\f5d0"}.fa-star:before{content:"\f005"}.fa-repeat:before{content:"\f363"}.fa-cross:before{content:"\f654"}.fa-box:before{content:"\f466"}.fa-venus-mars:before{content:"\f228"}.fa-arrow-pointer:before,.fa-mouse-pointer:before{content:"\f245"}.fa-expand-arrows-alt:before,.fa-maximize:before{content:"\f31e"}.fa-charging-station:before{content:"\f5e7"}.fa-shapes:before,.fa-triangle-circle-square:before{content:"\f61f"}.fa-random:before,.fa-shuffle:before{content:"\f074"}.fa-person-running:before,.fa-running:before{content:"\f70c"}.fa-mobile-retro:before{content:"\e527"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-spider:before{content:"\f717"}.fa-hands-bound:before{content:"\e4f9"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-plane-circle-exclamation:before{content:"\e556"}.fa-x-ray:before{content:"\f497"}.fa-spell-check:before{content:"\f891"}.fa-slash:before{content:"\f715"}.fa-computer-mouse:before,.fa-mouse:before{content:"\f8cc"}.fa-arrow-right-to-bracket:before,.fa-sign-in:before{content:"\f090"}.fa-shop-slash:before,.fa-store-alt-slash:before{content:"\e070"}.fa-server:before{content:"\f233"}.fa-virus-covid-slash:before{content:"\e4a9"}.fa-shop-lock:before{content:"\e4a5"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-blender-phone:before{content:"\f6b6"}.fa-building-wheat:before{content:"\e4db"}.fa-person-breastfeeding:before{content:"\e53a"}.fa-right-to-bracket:before,.fa-sign-in-alt:before{content:"\f2f6"}.fa-venus:before{content:"\f221"}.fa-passport:before{content:"\f5ab"}.fa-heart-pulse:before,.fa-heartbeat:before{content:"\f21e"}.fa-people-carry-box:before,.fa-people-carry:before{content:"\f4ce"}.fa-temperature-high:before{content:"\f769"}.fa-microchip:before{content:"\f2db"}.fa-crown:before{content:"\f521"}.fa-weight-hanging:before{content:"\f5cd"}.fa-xmarks-lines:before{content:"\e59a"}.fa-file-prescription:before{content:"\f572"}.fa-weight-scale:before,.fa-weight:before{content:"\f496"}.fa-user-friends:before,.fa-user-group:before{content:"\f500"}.fa-arrow-up-a-z:before,.fa-sort-alpha-up:before{content:"\f15e"}.fa-chess-knight:before{content:"\f441"}.fa-face-laugh-squint:before,.fa-laugh-squint:before{content:"\f59b"}.fa-wheelchair:before{content:"\f193"}.fa-arrow-circle-up:before,.fa-circle-arrow-up:before{content:"\f0aa"}.fa-toggle-on:before{content:"\f205"}.fa-person-walking:before,.fa-walking:before{content:"\f554"}.fa-l:before{content:"\4c"}.fa-fire:before{content:"\f06d"}.fa-bed-pulse:before,.fa-procedures:before{content:"\f487"}.fa-shuttle-space:before,.fa-space-shuttle:before{content:"\f197"}.fa-face-laugh:before,.fa-laugh:before{content:"\f599"}.fa-folder-open:before{content:"\f07c"}.fa-heart-circle-plus:before{content:"\e500"}.fa-code-fork:before{content:"\e13b"}.fa-city:before{content:"\f64f"}.fa-microphone-alt:before,.fa-microphone-lines:before{content:"\f3c9"}.fa-pepper-hot:before{content:"\f816"}.fa-unlock:before{content:"\f09c"}.fa-colon-sign:before{content:"\e140"}.fa-headset:before{content:"\f590"}.fa-store-slash:before{content:"\e071"}.fa-road-circle-xmark:before{content:"\e566"}.fa-user-minus:before{content:"\f503"}.fa-mars-stroke-up:before,.fa-mars-stroke-v:before{content:"\f22a"}.fa-champagne-glasses:before,.fa-glass-cheers:before{content:"\f79f"}.fa-clipboard:before{content:"\f328"}.fa-house-circle-exclamation:before{content:"\e50a"}.fa-file-arrow-up:before,.fa-file-upload:before{content:"\f574"}.fa-wifi-3:before,.fa-wifi-strong:before,.fa-wifi:before{content:"\f1eb"}.fa-bath:before,.fa-bathtub:before{content:"\f2cd"}.fa-underline:before{content:"\f0cd"}.fa-user-edit:before,.fa-user-pen:before{content:"\f4ff"}.fa-signature:before{content:"\f5b7"}.fa-stroopwafel:before{content:"\f551"}.fa-bold:before{content:"\f032"}.fa-anchor-lock:before{content:"\e4ad"}.fa-building-ngo:before{content:"\e4d7"}.fa-manat-sign:before{content:"\e1d5"}.fa-not-equal:before{content:"\f53e"}.fa-border-style:before,.fa-border-top-left:before{content:"\f853"}.fa-map-location-dot:before,.fa-map-marked-alt:before{content:"\f5a0"}.fa-jedi:before{content:"\f669"}.fa-poll:before,.fa-square-poll-vertical:before{content:"\f681"}.fa-mug-hot:before{content:"\f7b6"}.fa-battery-car:before,.fa-car-battery:before{content:"\f5df"}.fa-gift:before{content:"\f06b"}.fa-dice-two:before{content:"\f528"}.fa-chess-queen:before{content:"\f445"}.fa-glasses:before{content:"\f530"}.fa-chess-board:before{content:"\f43c"}.fa-building-circle-check:before{content:"\e4d2"}.fa-person-chalkboard:before{content:"\e53d"}.fa-mars-stroke-h:before,.fa-mars-stroke-right:before{content:"\f22b"}.fa-hand-back-fist:before,.fa-hand-rock:before{content:"\f255"}.fa-caret-square-up:before,.fa-square-caret-up:before{content:"\f151"}.fa-cloud-showers-water:before{content:"\e4e4"}.fa-bar-chart:before,.fa-chart-bar:before{content:"\f080"}.fa-hands-bubbles:before,.fa-hands-wash:before{content:"\e05e"}.fa-less-than-equal:before{content:"\f537"}.fa-train:before{content:"\f238"}.fa-eye-low-vision:before,.fa-low-vision:before{content:"\f2a8"}.fa-crow:before{content:"\f520"}.fa-sailboat:before{content:"\e445"}.fa-window-restore:before{content:"\f2d2"}.fa-plus-square:before,.fa-square-plus:before{content:"\f0fe"}.fa-torii-gate:before{content:"\f6a1"}.fa-frog:before{content:"\f52e"}.fa-bucket:before{content:"\e4cf"}.fa-image:before{content:"\f03e"}.fa-microphone:before{content:"\f130"}.fa-cow:before{content:"\f6c8"}.fa-caret-up:before{content:"\f0d8"}.fa-screwdriver:before{content:"\f54a"}.fa-folder-closed:before{content:"\e185"}.fa-house-tsunami:before{content:"\e515"}.fa-square-nfi:before{content:"\e576"}.fa-arrow-up-from-ground-water:before{content:"\e4b5"}.fa-glass-martini-alt:before,.fa-martini-glass:before{content:"\f57b"}.fa-rotate-back:before,.fa-rotate-backward:before,.fa-rotate-left:before,.fa-undo-alt:before{content:"\f2ea"}.fa-columns:before,.fa-table-columns:before{content:"\f0db"}.fa-lemon:before{content:"\f094"}.fa-head-side-mask:before{content:"\e063"}.fa-handshake:before{content:"\f2b5"}.fa-gem:before{content:"\f3a5"}.fa-dolly-box:before,.fa-dolly:before{content:"\f472"}.fa-smoking:before{content:"\f48d"}.fa-compress-arrows-alt:before,.fa-minimize:before{content:"\f78c"}.fa-monument:before{content:"\f5a6"}.fa-snowplow:before{content:"\f7d2"}.fa-angle-double-right:before,.fa-angles-right:before{content:"\f101"}.fa-cannabis:before{content:"\f55f"}.fa-circle-play:before,.fa-play-circle:before{content:"\f144"}.fa-tablets:before{content:"\f490"}.fa-ethernet:before{content:"\f796"}.fa-eur:before,.fa-euro-sign:before,.fa-euro:before{content:"\f153"}.fa-chair:before{content:"\f6c0"}.fa-check-circle:before,.fa-circle-check:before{content:"\f058"}.fa-circle-stop:before,.fa-stop-circle:before{content:"\f28d"}.fa-compass-drafting:before,.fa-drafting-compass:before{content:"\f568"}.fa-plate-wheat:before{content:"\e55a"}.fa-icicles:before{content:"\f7ad"}.fa-person-shelter:before{content:"\e54f"}.fa-neuter:before{content:"\f22c"}.fa-id-badge:before{content:"\f2c1"}.fa-marker:before{content:"\f5a1"}.fa-face-laugh-beam:before,.fa-laugh-beam:before{content:"\f59a"}.fa-helicopter-symbol:before{content:"\e502"}.fa-universal-access:before{content:"\f29a"}.fa-chevron-circle-up:before,.fa-circle-chevron-up:before{content:"\f139"}.fa-lari-sign:before{content:"\e1c8"}.fa-volcano:before{content:"\f770"}.fa-person-walking-dashed-line-arrow-right:before{content:"\e553"}.fa-gbp:before,.fa-pound-sign:before,.fa-sterling-sign:before{content:"\f154"}.fa-viruses:before{content:"\e076"}.fa-square-person-confined:before{content:"\e577"}.fa-user-tie:before{content:"\f508"}.fa-arrow-down-long:before,.fa-long-arrow-down:before{content:"\f175"}.fa-tent-arrow-down-to-line:before{content:"\e57e"}.fa-certificate:before{content:"\f0a3"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-suitcase:before{content:"\f0f2"}.fa-person-skating:before,.fa-skating:before{content:"\f7c5"}.fa-filter-circle-dollar:before,.fa-funnel-dollar:before{content:"\f662"}.fa-camera-retro:before{content:"\f083"}.fa-arrow-circle-down:before,.fa-circle-arrow-down:before{content:"\f0ab"}.fa-arrow-right-to-file:before,.fa-file-import:before{content:"\f56f"}.fa-external-link-square:before,.fa-square-arrow-up-right:before{content:"\f14c"}.fa-box-open:before{content:"\f49e"}.fa-scroll:before{content:"\f70e"}.fa-spa:before{content:"\f5bb"}.fa-location-pin-lock:before{content:"\e51f"}.fa-pause:before{content:"\f04c"}.fa-hill-avalanche:before{content:"\e507"}.fa-temperature-0:before,.fa-temperature-empty:before,.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-bomb:before{content:"\f1e2"}.fa-registered:before{content:"\f25d"}.fa-address-card:before,.fa-contact-card:before,.fa-vcard:before{content:"\f2bb"}.fa-balance-scale-right:before,.fa-scale-unbalanced-flip:before{content:"\f516"}.fa-subscript:before{content:"\f12c"}.fa-diamond-turn-right:before,.fa-directions:before{content:"\f5eb"}.fa-burst:before{content:"\e4dc"}.fa-house-laptop:before,.fa-laptop-house:before{content:"\e066"}.fa-face-tired:before,.fa-tired:before{content:"\f5c8"}.fa-money-bills:before{content:"\e1f3"}.fa-smog:before{content:"\f75f"}.fa-crutch:before{content:"\f7f7"}.fa-cloud-arrow-up:before,.fa-cloud-upload-alt:before,.fa-cloud-upload:before{content:"\f0ee"}.fa-palette:before{content:"\f53f"}.fa-arrows-turn-right:before{content:"\e4c0"}.fa-vest:before{content:"\e085"}.fa-ferry:before{content:"\e4ea"}.fa-arrows-down-to-people:before{content:"\e4b9"}.fa-seedling:before,.fa-sprout:before{content:"\f4d8"}.fa-arrows-alt-h:before,.fa-left-right:before{content:"\f337"}.fa-boxes-packing:before{content:"\e4c7"}.fa-arrow-circle-left:before,.fa-circle-arrow-left:before{content:"\f0a8"}.fa-group-arrows-rotate:before{content:"\e4f6"}.fa-bowl-food:before{content:"\e4c6"}.fa-candy-cane:before{content:"\f786"}.fa-arrow-down-wide-short:before,.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:"\f160"}.fa-cloud-bolt:before,.fa-thunderstorm:before{content:"\f76c"}.fa-remove-format:before,.fa-text-slash:before{content:"\f87d"}.fa-face-smile-wink:before,.fa-smile-wink:before{content:"\f4da"}.fa-file-word:before{content:"\f1c2"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-arrows-h:before,.fa-arrows-left-right:before{content:"\f07e"}.fa-house-lock:before{content:"\e510"}.fa-cloud-arrow-down:before,.fa-cloud-download-alt:before,.fa-cloud-download:before{content:"\f0ed"}.fa-children:before{content:"\e4e1"}.fa-blackboard:before,.fa-chalkboard:before{content:"\f51b"}.fa-user-alt-slash:before,.fa-user-large-slash:before{content:"\f4fa"}.fa-envelope-open:before{content:"\f2b6"}.fa-handshake-alt-slash:before,.fa-handshake-simple-slash:before{content:"\e05f"}.fa-mattress-pillow:before{content:"\e525"}.fa-guarani-sign:before{content:"\e19a"}.fa-arrows-rotate:before,.fa-refresh:before,.fa-sync:before{content:"\f021"}.fa-fire-extinguisher:before{content:"\f134"}.fa-cruzeiro-sign:before{content:"\e152"}.fa-greater-than-equal:before{content:"\f532"}.fa-shield-alt:before,.fa-shield-halved:before{content:"\f3ed"}.fa-atlas:before,.fa-book-atlas:before{content:"\f558"}.fa-virus:before{content:"\e074"}.fa-envelope-circle-check:before{content:"\e4e8"}.fa-layer-group:before{content:"\f5fd"}.fa-arrows-to-dot:before{content:"\e4be"}.fa-archway:before{content:"\f557"}.fa-heart-circle-check:before{content:"\e4fd"}.fa-house-chimney-crack:before,.fa-house-damage:before{content:"\f6f1"}.fa-file-archive:before,.fa-file-zipper:before{content:"\f1c6"}.fa-square:before{content:"\f0c8"}.fa-glass-martini:before,.fa-martini-glass-empty:before{content:"\f000"}.fa-couch:before{content:"\f4b8"}.fa-cedi-sign:before{content:"\e0df"}.fa-italic:before{content:"\f033"}.fa-church:before{content:"\f51d"}.fa-comments-dollar:before{content:"\f653"}.fa-democrat:before{content:"\f747"}.fa-z:before{content:"\5a"}.fa-person-skiing:before,.fa-skiing:before{content:"\f7c9"}.fa-road-lock:before{content:"\e567"}.fa-a:before{content:"\41"}.fa-temperature-arrow-down:before,.fa-temperature-down:before{content:"\e03f"}.fa-feather-alt:before,.fa-feather-pointed:before{content:"\f56b"}.fa-p:before{content:"\50"}.fa-snowflake:before{content:"\f2dc"}.fa-newspaper:before{content:"\f1ea"}.fa-ad:before,.fa-rectangle-ad:before{content:"\f641"}.fa-arrow-circle-right:before,.fa-circle-arrow-right:before{content:"\f0a9"}.fa-filter-circle-xmark:before{content:"\e17b"}.fa-locust:before{content:"\e520"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-list-1-2:before,.fa-list-numeric:before,.fa-list-ol:before{content:"\f0cb"}.fa-person-dress-burst:before{content:"\e544"}.fa-money-check-alt:before,.fa-money-check-dollar:before{content:"\f53d"}.fa-vector-square:before{content:"\f5cb"}.fa-bread-slice:before{content:"\f7ec"}.fa-language:before{content:"\f1ab"}.fa-face-kiss-wink-heart:before,.fa-kiss-wink-heart:before{content:"\f598"}.fa-filter:before{content:"\f0b0"}.fa-question:before{content:"\3f"}.fa-file-signature:before{content:"\f573"}.fa-arrows-alt:before,.fa-up-down-left-right:before{content:"\f0b2"}.fa-house-chimney-user:before{content:"\e065"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-puzzle-piece:before{content:"\f12e"}.fa-money-check:before{content:"\f53c"}.fa-star-half-alt:before,.fa-star-half-stroke:before{content:"\f5c0"}.fa-code:before{content:"\f121"}.fa-glass-whiskey:before,.fa-whiskey-glass:before{content:"\f7a0"}.fa-building-circle-exclamation:before{content:"\e4d3"}.fa-magnifying-glass-chart:before{content:"\e522"}.fa-arrow-up-right-from-square:before,.fa-external-link:before{content:"\f08e"}.fa-cubes-stacked:before{content:"\e4e6"}.fa-krw:before,.fa-won-sign:before,.fa-won:before{content:"\f159"}.fa-virus-covid:before{content:"\e4a8"}.fa-austral-sign:before{content:"\e0a9"}.fa-f:before{content:"\46"}.fa-leaf:before{content:"\f06c"}.fa-road:before{content:"\f018"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-person-circle-plus:before{content:"\e541"}.fa-chart-pie:before,.fa-pie-chart:before{content:"\f200"}.fa-bolt-lightning:before{content:"\e0b7"}.fa-sack-xmark:before{content:"\e56a"}.fa-file-excel:before{content:"\f1c3"}.fa-file-contract:before{content:"\f56c"}.fa-fish-fins:before{content:"\e4f2"}.fa-building-flag:before{content:"\e4d5"}.fa-face-grin-beam:before,.fa-grin-beam:before{content:"\f582"}.fa-object-ungroup:before{content:"\f248"}.fa-poop:before{content:"\f619"}.fa-location-pin:before,.fa-map-marker:before{content:"\f041"}.fa-kaaba:before{content:"\f66b"}.fa-toilet-paper:before{content:"\f71e"}.fa-hard-hat:before,.fa-hat-hard:before,.fa-helmet-safety:before{content:"\f807"}.fa-eject:before{content:"\f052"}.fa-arrow-alt-circle-right:before,.fa-circle-right:before{content:"\f35a"}.fa-plane-circle-check:before{content:"\e555"}.fa-face-rolling-eyes:before,.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-object-group:before{content:"\f247"}.fa-chart-line:before,.fa-line-chart:before{content:"\f201"}.fa-mask-ventilator:before{content:"\e524"}.fa-arrow-right:before{content:"\f061"}.fa-map-signs:before,.fa-signs-post:before{content:"\f277"}.fa-cash-register:before{content:"\f788"}.fa-person-circle-question:before{content:"\e542"}.fa-h:before{content:"\48"}.fa-tarp:before{content:"\e57b"}.fa-screwdriver-wrench:before,.fa-tools:before{content:"\f7d9"}.fa-arrows-to-eye:before{content:"\e4bf"}.fa-plug-circle-bolt:before{content:"\e55b"}.fa-heart:before{content:"\f004"}.fa-mars-and-venus:before{content:"\f224"}.fa-home-user:before,.fa-house-user:before{content:"\e1b0"}.fa-dumpster-fire:before{content:"\f794"}.fa-house-crack:before{content:"\e3b1"}.fa-cocktail:before,.fa-martini-glass-citrus:before{content:"\f561"}.fa-face-surprise:before,.fa-surprise:before{content:"\f5c2"}.fa-bottle-water:before{content:"\e4c5"}.fa-circle-pause:before,.fa-pause-circle:before{content:"\f28b"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-apple-alt:before,.fa-apple-whole:before{content:"\f5d1"}.fa-kitchen-set:before{content:"\e51a"}.fa-r:before{content:"\52"}.fa-temperature-1:before,.fa-temperature-quarter:before,.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-cube:before{content:"\f1b2"}.fa-bitcoin-sign:before{content:"\e0b4"}.fa-shield-dog:before{content:"\e573"}.fa-solar-panel:before{content:"\f5ba"}.fa-lock-open:before{content:"\f3c1"}.fa-elevator:before{content:"\e16d"}.fa-money-bill-transfer:before{content:"\e528"}.fa-money-bill-trend-up:before{content:"\e529"}.fa-house-flood-water-circle-arrow-right:before{content:"\e50f"}.fa-poll-h:before,.fa-square-poll-horizontal:before{content:"\f682"}.fa-circle:before{content:"\f111"}.fa-backward-fast:before,.fa-fast-backward:before{content:"\f049"}.fa-recycle:before{content:"\f1b8"}.fa-user-astronaut:before{content:"\f4fb"}.fa-plane-slash:before{content:"\e069"}.fa-trademark:before{content:"\f25c"}.fa-basketball-ball:before,.fa-basketball:before{content:"\f434"}.fa-satellite-dish:before{content:"\f7c0"}.fa-arrow-alt-circle-up:before,.fa-circle-up:before{content:"\f35b"}.fa-mobile-alt:before,.fa-mobile-screen-button:before{content:"\f3cd"}.fa-volume-high:before,.fa-volume-up:before{content:"\f028"}.fa-users-rays:before{content:"\e593"}.fa-wallet:before{content:"\f555"}.fa-clipboard-check:before{content:"\f46c"}.fa-file-audio:before{content:"\f1c7"}.fa-burger:before,.fa-hamburger:before{content:"\f805"}.fa-wrench:before{content:"\f0ad"}.fa-bugs:before{content:"\e4d0"}.fa-rupee-sign:before,.fa-rupee:before{content:"\f156"}.fa-file-image:before{content:"\f1c5"}.fa-circle-question:before,.fa-question-circle:before{content:"\f059"}.fa-plane-departure:before{content:"\f5b0"}.fa-handshake-slash:before{content:"\e060"}.fa-book-bookmark:before{content:"\e0bb"}.fa-code-branch:before{content:"\f126"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-bridge:before{content:"\e4c8"}.fa-phone-alt:before,.fa-phone-flip:before{content:"\f879"}.fa-truck-front:before{content:"\e2b7"}.fa-cat:before{content:"\f6be"}.fa-anchor-circle-exclamation:before{content:"\e4ab"}.fa-truck-field:before{content:"\e58d"}.fa-route:before{content:"\f4d7"}.fa-clipboard-question:before{content:"\e4e3"}.fa-panorama:before{content:"\e209"}.fa-comment-medical:before{content:"\f7f5"}.fa-teeth-open:before{content:"\f62f"}.fa-file-circle-minus:before{content:"\e4ed"}.fa-tags:before{content:"\f02c"}.fa-wine-glass:before{content:"\f4e3"}.fa-fast-forward:before,.fa-forward-fast:before{content:"\f050"}.fa-face-meh-blank:before,.fa-meh-blank:before{content:"\f5a4"}.fa-parking:before,.fa-square-parking:before{content:"\f540"}.fa-house-signal:before{content:"\e012"}.fa-bars-progress:before,.fa-tasks-alt:before{content:"\f828"}.fa-faucet-drip:before{content:"\e006"}.fa-cart-flatbed:before,.fa-dolly-flatbed:before{content:"\f474"}.fa-ban-smoking:before,.fa-smoking-ban:before{content:"\f54d"}.fa-terminal:before{content:"\f120"}.fa-mobile-button:before{content:"\f10b"}.fa-house-medical-flag:before{content:"\e514"}.fa-basket-shopping:before,.fa-shopping-basket:before{content:"\f291"}.fa-tape:before{content:"\f4db"}.fa-bus-alt:before,.fa-bus-simple:before{content:"\f55e"}.fa-eye:before{content:"\f06e"}.fa-face-sad-cry:before,.fa-sad-cry:before{content:"\f5b3"}.fa-audio-description:before{content:"\f29e"}.fa-person-military-to-person:before{content:"\e54c"}.fa-file-shield:before{content:"\e4f0"}.fa-user-slash:before{content:"\f506"}.fa-pen:before{content:"\f304"}.fa-tower-observation:before{content:"\e586"}.fa-file-code:before{content:"\f1c9"}.fa-signal-5:before,.fa-signal-perfect:before,.fa-signal:before{content:"\f012"}.fa-bus:before{content:"\f207"}.fa-heart-circle-xmark:before{content:"\e501"}.fa-home-lg:before,.fa-house-chimney:before{content:"\e3af"}.fa-window-maximize:before{content:"\f2d0"}.fa-face-frown:before,.fa-frown:before{content:"\f119"}.fa-prescription:before{content:"\f5b1"}.fa-shop:before,.fa-store-alt:before{content:"\f54f"}.fa-floppy-disk:before,.fa-save:before{content:"\f0c7"}.fa-vihara:before{content:"\f6a7"}.fa-balance-scale-left:before,.fa-scale-unbalanced:before{content:"\f515"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-comment-dots:before,.fa-commenting:before{content:"\f4ad"}.fa-plant-wilt:before{content:"\e5aa"}.fa-diamond:before{content:"\f219"}.fa-face-grin-squint:before,.fa-grin-squint:before{content:"\f585"}.fa-hand-holding-dollar:before,.fa-hand-holding-usd:before{content:"\f4c0"}.fa-bacterium:before{content:"\e05a"}.fa-hand-pointer:before{content:"\f25a"}.fa-drum-steelpan:before{content:"\f56a"}.fa-hand-scissors:before{content:"\f257"}.fa-hands-praying:before,.fa-praying-hands:before{content:"\f684"}.fa-arrow-right-rotate:before,.fa-arrow-rotate-forward:before,.fa-arrow-rotate-right:before,.fa-redo:before{content:"\f01e"}.fa-biohazard:before{content:"\f780"}.fa-location-crosshairs:before,.fa-location:before{content:"\f601"}.fa-mars-double:before{content:"\f227"}.fa-child-dress:before{content:"\e59c"}.fa-users-between-lines:before{content:"\e591"}.fa-lungs-virus:before{content:"\e067"}.fa-face-grin-tears:before,.fa-grin-tears:before{content:"\f588"}.fa-phone:before{content:"\f095"}.fa-calendar-times:before,.fa-calendar-xmark:before{content:"\f273"}.fa-child-reaching:before{content:"\e59d"}.fa-head-side-virus:before{content:"\e064"}.fa-user-cog:before,.fa-user-gear:before{content:"\f4fe"}.fa-arrow-up-1-9:before,.fa-sort-numeric-up:before{content:"\f163"}.fa-door-closed:before{content:"\f52a"}.fa-shield-virus:before{content:"\e06c"}.fa-dice-six:before{content:"\f526"}.fa-mosquito-net:before{content:"\e52c"}.fa-bridge-water:before{content:"\e4ce"}.fa-person-booth:before{content:"\f756"}.fa-text-width:before{content:"\f035"}.fa-hat-wizard:before{content:"\f6e8"}.fa-pen-fancy:before{content:"\f5ac"}.fa-digging:before,.fa-person-digging:before{content:"\f85e"}.fa-trash:before{content:"\f1f8"}.fa-gauge-simple-med:before,.fa-gauge-simple:before,.fa-tachometer-average:before{content:"\f629"}.fa-book-medical:before{content:"\f7e6"}.fa-poo:before{content:"\f2fe"}.fa-quote-right-alt:before,.fa-quote-right:before{content:"\f10e"}.fa-shirt:before,.fa-t-shirt:before,.fa-tshirt:before{content:"\f553"}.fa-cubes:before{content:"\f1b3"}.fa-divide:before{content:"\f529"}.fa-tenge-sign:before,.fa-tenge:before{content:"\f7d7"}.fa-headphones:before{content:"\f025"}.fa-hands-holding:before{content:"\f4c2"}.fa-hands-clapping:before{content:"\e1a8"}.fa-republican:before{content:"\f75e"}.fa-arrow-left:before{content:"\f060"}.fa-person-circle-xmark:before{content:"\e543"}.fa-ruler:before{content:"\f545"}.fa-align-left:before{content:"\f036"}.fa-dice-d6:before{content:"\f6d1"}.fa-restroom:before{content:"\f7bd"}.fa-j:before{content:"\4a"}.fa-users-viewfinder:before{content:"\e595"}.fa-file-video:before{content:"\f1c8"}.fa-external-link-alt:before,.fa-up-right-from-square:before{content:"\f35d"}.fa-table-cells:before,.fa-th:before{content:"\f00a"}.fa-file-pdf:before{content:"\f1c1"}.fa-bible:before,.fa-book-bible:before{content:"\f647"}.fa-o:before{content:"\4f"}.fa-medkit:before,.fa-suitcase-medical:before{content:"\f0fa"}.fa-user-secret:before{content:"\f21b"}.fa-otter:before{content:"\f700"}.fa-female:before,.fa-person-dress:before{content:"\f182"}.fa-comment-dollar:before{content:"\f651"}.fa-briefcase-clock:before,.fa-business-time:before{content:"\f64a"}.fa-table-cells-large:before,.fa-th-large:before{content:"\f009"}.fa-book-tanakh:before,.fa-tanakh:before{content:"\f827"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-clipboard-user:before{content:"\f7f3"}.fa-child:before{content:"\f1ae"}.fa-lira-sign:before{content:"\f195"}.fa-satellite:before{content:"\f7bf"}.fa-plane-lock:before{content:"\e558"}.fa-tag:before{content:"\f02b"}.fa-comment:before{content:"\f075"}.fa-birthday-cake:before,.fa-cake-candles:before,.fa-cake:before{content:"\f1fd"}.fa-envelope:before{content:"\f0e0"}.fa-angle-double-up:before,.fa-angles-up:before{content:"\f102"}.fa-paperclip:before{content:"\f0c6"}.fa-arrow-right-to-city:before{content:"\e4b3"}.fa-ribbon:before{content:"\f4d6"}.fa-lungs:before{content:"\f604"}.fa-arrow-up-9-1:before,.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-litecoin-sign:before{content:"\e1d3"}.fa-border-none:before{content:"\f850"}.fa-circle-nodes:before{content:"\e4e2"}.fa-parachute-box:before{content:"\f4cd"}.fa-indent:before{content:"\f03c"}.fa-truck-field-un:before{content:"\e58e"}.fa-hourglass-empty:before,.fa-hourglass:before{content:"\f254"}.fa-mountain:before{content:"\f6fc"}.fa-user-doctor:before,.fa-user-md:before{content:"\f0f0"}.fa-circle-info:before,.fa-info-circle:before{content:"\f05a"}.fa-cloud-meatball:before{content:"\f73b"}.fa-camera-alt:before,.fa-camera:before{content:"\f030"}.fa-square-virus:before{content:"\e578"}.fa-meteor:before{content:"\f753"}.fa-car-on:before{content:"\e4dd"}.fa-sleigh:before{content:"\f7cc"}.fa-arrow-down-1-9:before,.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:"\f162"}.fa-hand-holding-droplet:before,.fa-hand-holding-water:before{content:"\f4c1"}.fa-water:before{content:"\f773"}.fa-calendar-check:before{content:"\f274"}.fa-braille:before{content:"\f2a1"}.fa-prescription-bottle-alt:before,.fa-prescription-bottle-medical:before{content:"\f486"}.fa-landmark:before{content:"\f66f"}.fa-truck:before{content:"\f0d1"}.fa-crosshairs:before{content:"\f05b"}.fa-person-cane:before{content:"\e53c"}.fa-tent:before{content:"\e57d"}.fa-vest-patches:before{content:"\e086"}.fa-check-double:before{content:"\f560"}.fa-arrow-down-a-z:before,.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:"\f15d"}.fa-money-bill-wheat:before{content:"\e52a"}.fa-cookie:before{content:"\f563"}.fa-arrow-left-rotate:before,.fa-arrow-rotate-back:before,.fa-arrow-rotate-backward:before,.fa-arrow-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-hard-drive:before,.fa-hdd:before{content:"\f0a0"}.fa-face-grin-squint-tears:before,.fa-grin-squint-tears:before{content:"\f586"}.fa-dumbbell:before{content:"\f44b"}.fa-list-alt:before,.fa-rectangle-list:before{content:"\f022"}.fa-tarp-droplet:before{content:"\e57c"}.fa-house-medical-circle-check:before{content:"\e511"}.fa-person-skiing-nordic:before,.fa-skiing-nordic:before{content:"\f7ca"}.fa-calendar-plus:before{content:"\f271"}.fa-plane-arrival:before{content:"\f5af"}.fa-arrow-alt-circle-left:before,.fa-circle-left:before{content:"\f359"}.fa-subway:before,.fa-train-subway:before{content:"\f239"}.fa-chart-gantt:before{content:"\e0e4"}.fa-indian-rupee-sign:before,.fa-indian-rupee:before,.fa-inr:before{content:"\e1bc"}.fa-crop-alt:before,.fa-crop-simple:before{content:"\f565"}.fa-money-bill-1:before,.fa-money-bill-alt:before{content:"\f3d1"}.fa-left-long:before,.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-dna:before{content:"\f471"}.fa-virus-slash:before{content:"\e075"}.fa-minus:before,.fa-subtract:before{content:"\f068"}.fa-chess:before{content:"\f439"}.fa-arrow-left-long:before,.fa-long-arrow-left:before{content:"\f177"}.fa-plug-circle-check:before{content:"\e55c"}.fa-street-view:before{content:"\f21d"}.fa-franc-sign:before{content:"\e18f"}.fa-volume-off:before{content:"\f026"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before,.fa-hands-american-sign-language-interpreting:before,.fa-hands-asl-interpreting:before{content:"\f2a3"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-droplet-slash:before,.fa-tint-slash:before{content:"\f5c7"}.fa-mosque:before{content:"\f678"}.fa-mosquito:before{content:"\e52b"}.fa-star-of-david:before{content:"\f69a"}.fa-person-military-rifle:before{content:"\e54b"}.fa-cart-shopping:before,.fa-shopping-cart:before{content:"\f07a"}.fa-vials:before{content:"\f493"}.fa-plug-circle-plus:before{content:"\e55f"}.fa-place-of-worship:before{content:"\f67f"}.fa-grip-vertical:before{content:"\f58e"}.fa-arrow-turn-up:before,.fa-level-up:before{content:"\f148"}.fa-u:before{content:"\55"}.fa-square-root-alt:before,.fa-square-root-variable:before{content:"\f698"}.fa-clock-four:before,.fa-clock:before{content:"\f017"}.fa-backward-step:before,.fa-step-backward:before{content:"\f048"}.fa-pallet:before{content:"\f482"}.fa-faucet:before{content:"\e005"}.fa-baseball-bat-ball:before{content:"\f432"}.fa-s:before{content:"\53"}.fa-timeline:before{content:"\e29c"}.fa-keyboard:before{content:"\f11c"}.fa-caret-down:before{content:"\f0d7"}.fa-clinic-medical:before,.fa-house-chimney-medical:before{content:"\f7f2"}.fa-temperature-3:before,.fa-temperature-three-quarters:before,.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-mobile-android-alt:before,.fa-mobile-screen:before{content:"\f3cf"}.fa-plane-up:before{content:"\e22d"}.fa-piggy-bank:before{content:"\f4d3"}.fa-battery-3:before,.fa-battery-half:before{content:"\f242"}.fa-mountain-city:before{content:"\e52e"}.fa-coins:before{content:"\f51e"}.fa-khanda:before{content:"\f66d"}.fa-sliders-h:before,.fa-sliders:before{content:"\f1de"}.fa-folder-tree:before{content:"\f802"}.fa-network-wired:before{content:"\f6ff"}.fa-map-pin:before{content:"\f276"}.fa-hamsa:before{content:"\f665"}.fa-cent-sign:before{content:"\e3f5"}.fa-flask:before{content:"\f0c3"}.fa-person-pregnant:before{content:"\e31e"}.fa-wand-sparkles:before{content:"\f72b"}.fa-ellipsis-v:before,.fa-ellipsis-vertical:before{content:"\f142"}.fa-ticket:before{content:"\f145"}.fa-power-off:before{content:"\f011"}.fa-long-arrow-alt-right:before,.fa-right-long:before{content:"\f30b"}.fa-flag-usa:before{content:"\f74d"}.fa-laptop-file:before{content:"\e51d"}.fa-teletype:before,.fa-tty:before{content:"\f1e4"}.fa-diagram-next:before{content:"\e476"}.fa-person-rifle:before{content:"\e54e"}.fa-house-medical-circle-exclamation:before{content:"\e512"}.fa-closed-captioning:before{content:"\f20a"}.fa-hiking:before,.fa-person-hiking:before{content:"\f6ec"}.fa-venus-double:before{content:"\f226"}.fa-images:before{content:"\f302"}.fa-calculator:before{content:"\f1ec"}.fa-people-pulling:before{content:"\e535"}.fa-n:before{content:"\4e"}.fa-cable-car:before,.fa-tram:before{content:"\f7da"}.fa-cloud-rain:before{content:"\f73d"}.fa-building-circle-xmark:before{content:"\e4d4"}.fa-ship:before{content:"\f21a"}.fa-arrows-down-to-line:before{content:"\e4b8"}.fa-download:before{content:"\f019"}.fa-face-grin:before,.fa-grin:before{content:"\f580"}.fa-backspace:before,.fa-delete-left:before{content:"\f55a"}.fa-eye-dropper-empty:before,.fa-eye-dropper:before,.fa-eyedropper:before{content:"\f1fb"}.fa-file-circle-check:before{content:"\e5a0"}.fa-forward:before{content:"\f04e"}.fa-mobile-android:before,.fa-mobile-phone:before,.fa-mobile:before{content:"\f3ce"}.fa-face-meh:before,.fa-meh:before{content:"\f11a"}.fa-align-center:before{content:"\f037"}.fa-book-dead:before,.fa-book-skull:before{content:"\f6b7"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-heart-circle-exclamation:before{content:"\e4fe"}.fa-home-alt:before,.fa-home-lg-alt:before,.fa-home:before,.fa-house:before{content:"\f015"}.fa-calendar-week:before{content:"\f784"}.fa-laptop-medical:before{content:"\f812"}.fa-b:before{content:"\42"}.fa-file-medical:before{content:"\f477"}.fa-dice-one:before{content:"\f525"}.fa-kiwi-bird:before{content:"\f535"}.fa-arrow-right-arrow-left:before,.fa-exchange:before{content:"\f0ec"}.fa-redo-alt:before,.fa-rotate-forward:before,.fa-rotate-right:before{content:"\f2f9"}.fa-cutlery:before,.fa-utensils:before{content:"\f2e7"}.fa-arrow-up-wide-short:before,.fa-sort-amount-up:before{content:"\f161"}.fa-mill-sign:before{content:"\e1ed"}.fa-bowl-rice:before{content:"\e2eb"}.fa-skull:before{content:"\f54c"}.fa-broadcast-tower:before,.fa-tower-broadcast:before{content:"\f519"}.fa-truck-pickup:before{content:"\f63c"}.fa-long-arrow-alt-up:before,.fa-up-long:before{content:"\f30c"}.fa-stop:before{content:"\f04d"}.fa-code-merge:before{content:"\f387"}.fa-upload:before{content:"\f093"}.fa-hurricane:before{content:"\f751"}.fa-mound:before{content:"\e52d"}.fa-toilet-portable:before{content:"\e583"}.fa-compact-disc:before{content:"\f51f"}.fa-file-arrow-down:before,.fa-file-download:before{content:"\f56d"}.fa-caravan:before{content:"\f8ff"}.fa-shield-cat:before{content:"\e572"}.fa-bolt:before,.fa-zap:before{content:"\f0e7"}.fa-glass-water:before{content:"\e4f4"}.fa-oil-well:before{content:"\e532"}.fa-vault:before{content:"\e2c5"}.fa-mars:before{content:"\f222"}.fa-toilet:before{content:"\f7d8"}.fa-plane-circle-xmark:before{content:"\e557"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen-sign:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble-sign:before,.fa-ruble:before{content:"\f158"}.fa-sun:before{content:"\f185"}.fa-guitar:before{content:"\f7a6"}.fa-face-laugh-wink:before,.fa-laugh-wink:before{content:"\f59c"}.fa-horse-head:before{content:"\f7ab"}.fa-bore-hole:before{content:"\e4c3"}.fa-industry:before{content:"\f275"}.fa-arrow-alt-circle-down:before,.fa-circle-down:before{content:"\f358"}.fa-arrows-turn-to-dots:before{content:"\e4c1"}.fa-florin-sign:before{content:"\e184"}.fa-arrow-down-short-wide:before,.fa-sort-amount-desc:before,.fa-sort-amount-down-alt:before{content:"\f884"}.fa-less-than:before{content:"\3c"}.fa-angle-down:before{content:"\f107"}.fa-car-tunnel:before{content:"\e4de"}.fa-head-side-cough:before{content:"\e061"}.fa-grip-lines:before{content:"\f7a4"}.fa-thumbs-down:before{content:"\f165"}.fa-user-lock:before{content:"\f502"}.fa-arrow-right-long:before,.fa-long-arrow-right:before{content:"\f178"}.fa-anchor-circle-xmark:before{content:"\e4ac"}.fa-ellipsis-h:before,.fa-ellipsis:before{content:"\f141"}.fa-chess-pawn:before{content:"\f443"}.fa-first-aid:before,.fa-kit-medical:before{content:"\f479"}.fa-person-through-window:before{content:"\e5a9"}.fa-toolbox:before{content:"\f552"}.fa-hands-holding-circle:before{content:"\e4fb"}.fa-bug:before{content:"\f188"}.fa-credit-card-alt:before,.fa-credit-card:before{content:"\f09d"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-hand-holding-hand:before{content:"\e4f7"}.fa-book-open-reader:before,.fa-book-reader:before{content:"\f5da"}.fa-mountain-sun:before{content:"\e52f"}.fa-arrows-left-right-to-line:before{content:"\e4ba"}.fa-dice-d20:before{content:"\f6cf"}.fa-truck-droplet:before{content:"\e58c"}.fa-file-circle-xmark:before{content:"\e5a1"}.fa-temperature-arrow-up:before,.fa-temperature-up:before{content:"\e040"}.fa-medal:before{content:"\f5a2"}.fa-bed:before{content:"\f236"}.fa-h-square:before,.fa-square-h:before{content:"\f0fd"}.fa-podcast:before{content:"\f2ce"}.fa-temperature-4:before,.fa-temperature-full:before,.fa-thermometer-4:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-bell:before{content:"\f0f3"}.fa-superscript:before{content:"\f12b"}.fa-plug-circle-xmark:before{content:"\e560"}.fa-star-of-life:before{content:"\f621"}.fa-phone-slash:before{content:"\f3dd"}.fa-paint-roller:before{content:"\f5aa"}.fa-hands-helping:before,.fa-handshake-angle:before{content:"\f4c4"}.fa-location-dot:before,.fa-map-marker-alt:before{content:"\f3c5"}.fa-file:before{content:"\f15b"}.fa-greater-than:before{content:"\3e"}.fa-person-swimming:before,.fa-swimmer:before{content:"\f5c4"}.fa-arrow-down:before{content:"\f063"}.fa-droplet:before,.fa-tint:before{content:"\f043"}.fa-eraser:before{content:"\f12d"}.fa-earth-america:before,.fa-earth-americas:before,.fa-earth:before,.fa-globe-americas:before{content:"\f57d"}.fa-person-burst:before{content:"\e53b"}.fa-dove:before{content:"\f4ba"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-socks:before{content:"\f696"}.fa-inbox:before{content:"\f01c"}.fa-section:before{content:"\e447"}.fa-gauge-high:before,.fa-tachometer-alt-fast:before,.fa-tachometer-alt:before{content:"\f625"}.fa-envelope-open-text:before{content:"\f658"}.fa-hospital-alt:before,.fa-hospital-wide:before,.fa-hospital:before{content:"\f0f8"}.fa-wine-bottle:before{content:"\f72f"}.fa-chess-rook:before{content:"\f447"}.fa-bars-staggered:before,.fa-reorder:before,.fa-stream:before{content:"\f550"}.fa-dharmachakra:before{content:"\f655"}.fa-hotdog:before{content:"\f80f"}.fa-blind:before,.fa-person-walking-with-cane:before{content:"\f29d"}.fa-drum:before{content:"\f569"}.fa-ice-cream:before{content:"\f810"}.fa-heart-circle-bolt:before{content:"\e4fc"}.fa-fax:before{content:"\f1ac"}.fa-paragraph:before{content:"\f1dd"}.fa-check-to-slot:before,.fa-vote-yea:before{content:"\f772"}.fa-star-half:before{content:"\f089"}.fa-boxes-alt:before,.fa-boxes-stacked:before,.fa-boxes:before{content:"\f468"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-assistive-listening-systems:before,.fa-ear-listen:before{content:"\f2a2"}.fa-tree-city:before{content:"\e587"}.fa-play:before{content:"\f04b"}.fa-font:before{content:"\f031"}.fa-rupiah-sign:before{content:"\e23d"}.fa-magnifying-glass:before,.fa-search:before{content:"\f002"}.fa-ping-pong-paddle-ball:before,.fa-table-tennis-paddle-ball:before,.fa-table-tennis:before{content:"\f45d"}.fa-diagnoses:before,.fa-person-dots-from-line:before{content:"\f470"}.fa-trash-can-arrow-up:before,.fa-trash-restore-alt:before{content:"\f82a"}.fa-naira-sign:before{content:"\e1f6"}.fa-cart-arrow-down:before{content:"\f218"}.fa-walkie-talkie:before{content:"\f8ef"}.fa-file-edit:before,.fa-file-pen:before{content:"\f31c"}.fa-receipt:before{content:"\f543"}.fa-pen-square:before,.fa-pencil-square:before,.fa-square-pen:before{content:"\f14b"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-person-circle-exclamation:before{content:"\e53f"}.fa-chevron-down:before{content:"\f078"}.fa-battery-5:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-skull-crossbones:before{content:"\f714"}.fa-code-compare:before{content:"\e13a"}.fa-list-dots:before,.fa-list-ul:before{content:"\f0ca"}.fa-school-lock:before{content:"\e56f"}.fa-tower-cell:before{content:"\e585"}.fa-down-long:before,.fa-long-arrow-alt-down:before{content:"\f309"}.fa-ranking-star:before{content:"\e561"}.fa-chess-king:before{content:"\f43f"}.fa-person-harassing:before{content:"\e549"}.fa-brazilian-real-sign:before{content:"\e46c"}.fa-landmark-alt:before,.fa-landmark-dome:before{content:"\f752"}.fa-arrow-up:before{content:"\f062"}.fa-television:before,.fa-tv-alt:before,.fa-tv:before{content:"\f26c"}.fa-shrimp:before{content:"\e448"}.fa-list-check:before,.fa-tasks:before{content:"\f0ae"}.fa-jug-detergent:before{content:"\e519"}.fa-circle-user:before,.fa-user-circle:before{content:"\f2bd"}.fa-user-shield:before{content:"\f505"}.fa-wind:before{content:"\f72e"}.fa-car-burst:before,.fa-car-crash:before{content:"\f5e1"}.fa-y:before{content:"\59"}.fa-person-snowboarding:before,.fa-snowboarding:before{content:"\f7ce"}.fa-shipping-fast:before,.fa-truck-fast:before{content:"\f48b"}.fa-fish:before{content:"\f578"}.fa-user-graduate:before{content:"\f501"}.fa-adjust:before,.fa-circle-half-stroke:before{content:"\f042"}.fa-clapperboard:before{content:"\e131"}.fa-circle-radiation:before,.fa-radiation-alt:before{content:"\f7ba"}.fa-baseball-ball:before,.fa-baseball:before{content:"\f433"}.fa-jet-fighter-up:before{content:"\e518"}.fa-diagram-project:before,.fa-project-diagram:before{content:"\f542"}.fa-copy:before{content:"\f0c5"}.fa-volume-mute:before,.fa-volume-times:before,.fa-volume-xmark:before{content:"\f6a9"}.fa-hand-sparkles:before{content:"\e05d"}.fa-grip-horizontal:before,.fa-grip:before{content:"\f58d"}.fa-share-from-square:before,.fa-share-square:before{content:"\f14d"}.fa-child-combatant:before,.fa-child-rifle:before{content:"\e4e0"}.fa-gun:before{content:"\e19b"}.fa-phone-square:before,.fa-square-phone:before{content:"\f098"}.fa-add:before,.fa-plus:before{content:"\2b"}.fa-expand:before{content:"\f065"}.fa-computer:before{content:"\e4e5"}.fa-close:before,.fa-multiply:before,.fa-remove:before,.fa-times:before,.fa-xmark:before{content:"\f00d"}.fa-arrows-up-down-left-right:before,.fa-arrows:before{content:"\f047"}.fa-chalkboard-teacher:before,.fa-chalkboard-user:before{content:"\f51c"}.fa-peso-sign:before{content:"\e222"}.fa-building-shield:before{content:"\e4d8"}.fa-baby:before{content:"\f77c"}.fa-users-line:before{content:"\e592"}.fa-quote-left-alt:before,.fa-quote-left:before{content:"\f10d"}.fa-tractor:before{content:"\f722"}.fa-trash-arrow-up:before,.fa-trash-restore:before{content:"\f829"}.fa-arrow-down-up-lock:before{content:"\e4b0"}.fa-lines-leaning:before{content:"\e51e"}.fa-ruler-combined:before{content:"\f546"}.fa-copyright:before{content:"\f1f9"}.fa-equals:before{content:"\3d"}.fa-blender:before{content:"\f517"}.fa-teeth:before{content:"\f62e"}.fa-ils:before,.fa-shekel-sign:before,.fa-shekel:before,.fa-sheqel-sign:before,.fa-sheqel:before{content:"\f20b"}.fa-map:before{content:"\f279"}.fa-rocket:before{content:"\f135"}.fa-photo-film:before,.fa-photo-video:before{content:"\f87c"}.fa-folder-minus:before{content:"\f65d"}.fa-store:before{content:"\f54e"}.fa-arrow-trend-up:before{content:"\e098"}.fa-plug-circle-minus:before{content:"\e55e"}.fa-sign-hanging:before,.fa-sign:before{content:"\f4d9"}.fa-bezier-curve:before{content:"\f55b"}.fa-bell-slash:before{content:"\f1f6"}.fa-tablet-android:before,.fa-tablet:before{content:"\f3fb"}.fa-school-flag:before{content:"\e56e"}.fa-fill:before{content:"\f575"}.fa-angle-up:before{content:"\f106"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-holly-berry:before{content:"\f7aa"}.fa-chevron-left:before{content:"\f053"}.fa-bacteria:before{content:"\e059"}.fa-hand-lizard:before{content:"\f258"}.fa-notdef:before{content:"\e1fe"}.fa-disease:before{content:"\f7fa"}.fa-briefcase-medical:before{content:"\f469"}.fa-genderless:before{content:"\f22d"}.fa-chevron-right:before{content:"\f054"}.fa-retweet:before{content:"\f079"}.fa-car-alt:before,.fa-car-rear:before{content:"\f5de"}.fa-pump-soap:before{content:"\e06b"}.fa-video-slash:before{content:"\f4e2"}.fa-battery-2:before,.fa-battery-quarter:before{content:"\f243"}.fa-radio:before{content:"\f8d7"}.fa-baby-carriage:before,.fa-carriage-baby:before{content:"\f77d"}.fa-traffic-light:before{content:"\f637"}.fa-thermometer:before{content:"\f491"}.fa-vr-cardboard:before{content:"\f729"}.fa-hand-middle-finger:before{content:"\f806"}.fa-percent:before,.fa-percentage:before{content:"\25"}.fa-truck-moving:before{content:"\f4df"}.fa-glass-water-droplet:before{content:"\e4f5"}.fa-display:before{content:"\e163"}.fa-face-smile:before,.fa-smile:before{content:"\f118"}.fa-thumb-tack:before,.fa-thumbtack:before{content:"\f08d"}.fa-trophy:before{content:"\f091"}.fa-person-praying:before,.fa-pray:before{content:"\f683"}.fa-hammer:before{content:"\f6e3"}.fa-hand-peace:before{content:"\f25b"}.fa-rotate:before,.fa-sync-alt:before{content:"\f2f1"}.fa-spinner:before{content:"\f110"}.fa-robot:before{content:"\f544"}.fa-peace:before{content:"\f67c"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-warehouse:before{content:"\f494"}.fa-arrow-up-right-dots:before{content:"\e4b7"}.fa-splotch:before{content:"\f5bc"}.fa-face-grin-hearts:before,.fa-grin-hearts:before{content:"\f584"}.fa-dice-four:before{content:"\f524"}.fa-sim-card:before{content:"\f7c4"}.fa-transgender-alt:before,.fa-transgender:before{content:"\f225"}.fa-mercury:before{content:"\f223"}.fa-arrow-turn-down:before,.fa-level-down:before{content:"\f149"}.fa-person-falling-burst:before{content:"\e547"}.fa-award:before{content:"\f559"}.fa-ticket-alt:before,.fa-ticket-simple:before{content:"\f3ff"}.fa-building:before{content:"\f1ad"}.fa-angle-double-left:before,.fa-angles-left:before{content:"\f100"}.fa-qrcode:before{content:"\f029"}.fa-clock-rotate-left:before,.fa-history:before{content:"\f1da"}.fa-face-grin-beam-sweat:before,.fa-grin-beam-sweat:before{content:"\f583"}.fa-arrow-right-from-file:before,.fa-file-export:before{content:"\f56e"}.fa-shield-blank:before,.fa-shield:before{content:"\f132"}.fa-arrow-up-short-wide:before,.fa-sort-amount-up-alt:before{content:"\f885"}.fa-house-medical:before{content:"\e3b2"}.fa-golf-ball-tee:before,.fa-golf-ball:before{content:"\f450"}.fa-chevron-circle-left:before,.fa-circle-chevron-left:before{content:"\f137"}.fa-house-chimney-window:before{content:"\e00d"}.fa-pen-nib:before{content:"\f5ad"}.fa-tent-arrow-turn-left:before{content:"\e580"}.fa-tents:before{content:"\e582"}.fa-magic:before,.fa-wand-magic:before{content:"\f0d0"}.fa-dog:before{content:"\f6d3"}.fa-carrot:before{content:"\f787"}.fa-moon:before{content:"\f186"}.fa-wine-glass-alt:before,.fa-wine-glass-empty:before{content:"\f5ce"}.fa-cheese:before{content:"\f7ef"}.fa-yin-yang:before{content:"\f6ad"}.fa-music:before{content:"\f001"}.fa-code-commit:before{content:"\f386"}.fa-temperature-low:before{content:"\f76b"}.fa-biking:before,.fa-person-biking:before{content:"\f84a"}.fa-broom:before{content:"\f51a"}.fa-shield-heart:before{content:"\e574"}.fa-gopuram:before{content:"\f664"}.fa-earth-oceania:before,.fa-globe-oceania:before{content:"\e47b"}.fa-square-xmark:before,.fa-times-square:before,.fa-xmark-square:before{content:"\f2d3"}.fa-hashtag:before{content:"\23"}.fa-expand-alt:before,.fa-up-right-and-down-left-from-center:before{content:"\f424"}.fa-oil-can:before{content:"\f613"}.fa-t:before{content:"\54"}.fa-hippo:before{content:"\f6ed"}.fa-chart-column:before{content:"\e0e3"}.fa-infinity:before{content:"\f534"}.fa-vial-circle-check:before{content:"\e596"}.fa-person-arrow-down-to-line:before{content:"\e538"}.fa-voicemail:before{content:"\f897"}.fa-fan:before{content:"\f863"}.fa-person-walking-luggage:before{content:"\e554"}.fa-arrows-alt-v:before,.fa-up-down:before{content:"\f338"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-calendar:before{content:"\f133"}.fa-trailer:before{content:"\e041"}.fa-bahai:before,.fa-haykal:before{content:"\f666"}.fa-sd-card:before{content:"\f7c2"}.fa-dragon:before{content:"\f6d5"}.fa-shoe-prints:before{content:"\f54b"}.fa-circle-plus:before,.fa-plus-circle:before{content:"\f055"}.fa-face-grin-tongue-wink:before,.fa-grin-tongue-wink:before{content:"\f58b"}.fa-hand-holding:before{content:"\f4bd"}.fa-plug-circle-exclamation:before{content:"\e55d"}.fa-chain-broken:before,.fa-chain-slash:before,.fa-link-slash:before,.fa-unlink:before{content:"\f127"}.fa-clone:before{content:"\f24d"}.fa-person-walking-arrow-loop-left:before{content:"\e551"}.fa-arrow-up-z-a:before,.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-fire-alt:before,.fa-fire-flame-curved:before{content:"\f7e4"}.fa-tornado:before{content:"\f76f"}.fa-file-circle-plus:before{content:"\e494"}.fa-book-quran:before,.fa-quran:before{content:"\f687"}.fa-anchor:before{content:"\f13d"}.fa-border-all:before{content:"\f84c"}.fa-angry:before,.fa-face-angry:before{content:"\f556"}.fa-cookie-bite:before{content:"\f564"}.fa-arrow-trend-down:before{content:"\e097"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-draw-polygon:before{content:"\f5ee"}.fa-balance-scale:before,.fa-scale-balanced:before{content:"\f24e"}.fa-gauge-simple-high:before,.fa-tachometer-fast:before,.fa-tachometer:before{content:"\f62a"}.fa-shower:before{content:"\f2cc"}.fa-desktop-alt:before,.fa-desktop:before{content:"\f390"}.fa-m:before{content:"\4d"}.fa-table-list:before,.fa-th-list:before{content:"\f00b"}.fa-comment-sms:before,.fa-sms:before{content:"\f7cd"}.fa-book:before{content:"\f02d"}.fa-user-plus:before{content:"\f234"}.fa-check:before{content:"\f00c"}.fa-battery-4:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-house-circle-check:before{content:"\e509"}.fa-angle-left:before{content:"\f104"}.fa-diagram-successor:before{content:"\e47a"}.fa-truck-arrow-right:before{content:"\e58b"}.fa-arrows-split-up-and-left:before{content:"\e4bc"}.fa-fist-raised:before,.fa-hand-fist:before{content:"\f6de"}.fa-cloud-moon:before{content:"\f6c3"}.fa-briefcase:before{content:"\f0b1"}.fa-person-falling:before{content:"\e546"}.fa-image-portrait:before,.fa-portrait:before{content:"\f3e0"}.fa-user-tag:before{content:"\f507"}.fa-rug:before{content:"\e569"}.fa-earth-europe:before,.fa-globe-europe:before{content:"\f7a2"}.fa-cart-flatbed-suitcase:before,.fa-luggage-cart:before{content:"\f59d"}.fa-rectangle-times:before,.fa-rectangle-xmark:before,.fa-times-rectangle:before,.fa-window-close:before{content:"\f410"}.fa-baht-sign:before{content:"\e0ac"}.fa-book-open:before{content:"\f518"}.fa-book-journal-whills:before,.fa-journal-whills:before{content:"\f66a"}.fa-handcuffs:before{content:"\e4f8"}.fa-exclamation-triangle:before,.fa-triangle-exclamation:before,.fa-warning:before{content:"\f071"}.fa-database:before{content:"\f1c0"}.fa-arrow-turn-right:before,.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-bottle-droplet:before{content:"\e4c4"}.fa-mask-face:before{content:"\e1d7"}.fa-hill-rockslide:before{content:"\e508"}.fa-exchange-alt:before,.fa-right-left:before{content:"\f362"}.fa-paper-plane:before{content:"\f1d8"}.fa-road-circle-exclamation:before{content:"\e565"}.fa-dungeon:before{content:"\f6d9"}.fa-align-right:before{content:"\f038"}.fa-money-bill-1-wave:before,.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-life-ring:before{content:"\f1cd"}.fa-hands:before,.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-calendar-day:before{content:"\f783"}.fa-ladder-water:before,.fa-swimming-pool:before,.fa-water-ladder:before{content:"\f5c5"}.fa-arrows-up-down:before,.fa-arrows-v:before{content:"\f07d"}.fa-face-grimace:before,.fa-grimace:before{content:"\f57f"}.fa-wheelchair-alt:before,.fa-wheelchair-move:before{content:"\e2ce"}.fa-level-down-alt:before,.fa-turn-down:before{content:"\f3be"}.fa-person-walking-arrow-right:before{content:"\e552"}.fa-envelope-square:before,.fa-square-envelope:before{content:"\f199"}.fa-dice:before{content:"\f522"}.fa-bowling-ball:before{content:"\f436"}.fa-brain:before{content:"\f5dc"}.fa-band-aid:before,.fa-bandage:before{content:"\f462"}.fa-calendar-minus:before{content:"\f272"}.fa-circle-xmark:before,.fa-times-circle:before,.fa-xmark-circle:before{content:"\f057"}.fa-gifts:before{content:"\f79c"}.fa-hotel:before{content:"\f594"}.fa-earth-asia:before,.fa-globe-asia:before{content:"\f57e"}.fa-id-card-alt:before,.fa-id-card-clip:before{content:"\f47f"}.fa-magnifying-glass-plus:before,.fa-search-plus:before{content:"\f00e"}.fa-thumbs-up:before{content:"\f164"}.fa-user-clock:before{content:"\f4fd"}.fa-allergies:before,.fa-hand-dots:before{content:"\f461"}.fa-file-invoice:before{content:"\f570"}.fa-window-minimize:before{content:"\f2d1"}.fa-coffee:before,.fa-mug-saucer:before{content:"\f0f4"}.fa-brush:before{content:"\f55d"}.fa-mask:before{content:"\f6fa"}.fa-magnifying-glass-minus:before,.fa-search-minus:before{content:"\f010"}.fa-ruler-vertical:before{content:"\f548"}.fa-user-alt:before,.fa-user-large:before{content:"\f406"}.fa-train-tram:before{content:"\e5b4"}.fa-user-nurse:before{content:"\f82f"}.fa-syringe:before{content:"\f48e"}.fa-cloud-sun:before{content:"\f6c4"}.fa-stopwatch-20:before{content:"\e06f"}.fa-square-full:before{content:"\f45c"}.fa-magnet:before{content:"\f076"}.fa-jar:before{content:"\e516"}.fa-note-sticky:before,.fa-sticky-note:before{content:"\f249"}.fa-bug-slash:before{content:"\e490"}.fa-arrow-up-from-water-pump:before{content:"\e4b6"}.fa-bone:before{content:"\f5d7"}.fa-user-injured:before{content:"\f728"}.fa-face-sad-tear:before,.fa-sad-tear:before{content:"\f5b4"}.fa-plane:before{content:"\f072"}.fa-tent-arrows-down:before{content:"\e581"}.fa-exclamation:before{content:"\21"}.fa-arrows-spin:before{content:"\e4bb"}.fa-print:before{content:"\f02f"}.fa-try:before,.fa-turkish-lira-sign:before,.fa-turkish-lira:before{content:"\e2bb"}.fa-dollar-sign:before,.fa-dollar:before,.fa-usd:before{content:"\24"}.fa-x:before{content:"\58"}.fa-magnifying-glass-dollar:before,.fa-search-dollar:before{content:"\f688"}.fa-users-cog:before,.fa-users-gear:before{content:"\f509"}.fa-person-military-pointing:before{content:"\e54a"}.fa-bank:before,.fa-building-columns:before,.fa-institution:before,.fa-museum:before,.fa-university:before{content:"\f19c"}.fa-umbrella:before{content:"\f0e9"}.fa-trowel:before{content:"\e589"}.fa-d:before{content:"\44"}.fa-stapler:before{content:"\e5af"}.fa-masks-theater:before,.fa-theater-masks:before{content:"\f630"}.fa-kip-sign:before{content:"\e1c4"}.fa-hand-point-left:before{content:"\f0a5"}.fa-handshake-alt:before,.fa-handshake-simple:before{content:"\f4c6"}.fa-fighter-jet:before,.fa-jet-fighter:before{content:"\f0fb"}.fa-share-alt-square:before,.fa-square-share-nodes:before{content:"\f1e1"}.fa-barcode:before{content:"\f02a"}.fa-plus-minus:before{content:"\e43c"}.fa-video-camera:before,.fa-video:before{content:"\f03d"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-person-circle-check:before{content:"\e53e"}.fa-level-up-alt:before,.fa-turn-up:before{content:"\f3bf"} +.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:host,:root{--fa-style-family-brands:"Font Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}.fa-brands,.fab{font-weight:400}.fa-monero:before{content:"\f3d0"}.fa-hooli:before{content:"\f427"}.fa-yelp:before{content:"\f1e9"}.fa-cc-visa:before{content:"\f1f0"}.fa-lastfm:before{content:"\f202"}.fa-shopware:before{content:"\f5b5"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-aws:before{content:"\f375"}.fa-redhat:before{content:"\f7bc"}.fa-yoast:before{content:"\f2b1"}.fa-cloudflare:before{content:"\e07d"}.fa-ups:before{content:"\f7e0"}.fa-wpexplorer:before{content:"\f2de"}.fa-dyalog:before{content:"\f399"}.fa-bity:before{content:"\f37a"}.fa-stackpath:before{content:"\f842"}.fa-buysellads:before{content:"\f20d"}.fa-first-order:before{content:"\f2b0"}.fa-modx:before{content:"\f285"}.fa-guilded:before{content:"\e07e"}.fa-vnv:before{content:"\f40b"}.fa-js-square:before,.fa-square-js:before{content:"\f3b9"}.fa-microsoft:before{content:"\f3ca"}.fa-qq:before{content:"\f1d6"}.fa-orcid:before{content:"\f8d2"}.fa-java:before{content:"\f4e4"}.fa-invision:before{content:"\f7b0"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-centercode:before{content:"\f380"}.fa-glide-g:before{content:"\f2a6"}.fa-drupal:before{content:"\f1a9"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-unity:before{content:"\e049"}.fa-whmcs:before{content:"\f40d"}.fa-rocketchat:before{content:"\f3e8"}.fa-vk:before{content:"\f189"}.fa-untappd:before{content:"\f405"}.fa-mailchimp:before{content:"\f59e"}.fa-css3-alt:before{content:"\f38b"}.fa-reddit-square:before,.fa-square-reddit:before{content:"\f1a2"}.fa-vimeo-v:before{content:"\f27d"}.fa-contao:before{content:"\f26d"}.fa-square-font-awesome:before{content:"\e5ad"}.fa-deskpro:before{content:"\f38f"}.fa-sistrix:before{content:"\f3ee"}.fa-instagram-square:before,.fa-square-instagram:before{content:"\e055"}.fa-battle-net:before{content:"\f835"}.fa-the-red-yeti:before{content:"\f69d"}.fa-hacker-news-square:before,.fa-square-hacker-news:before{content:"\f3af"}.fa-edge:before{content:"\f282"}.fa-threads:before{content:"\e618"}.fa-napster:before{content:"\f3d2"}.fa-snapchat-square:before,.fa-square-snapchat:before{content:"\f2ad"}.fa-google-plus-g:before{content:"\f0d5"}.fa-artstation:before{content:"\f77a"}.fa-markdown:before{content:"\f60f"}.fa-sourcetree:before{content:"\f7d3"}.fa-google-plus:before{content:"\f2b3"}.fa-diaspora:before{content:"\f791"}.fa-foursquare:before{content:"\f180"}.fa-stack-overflow:before{content:"\f16c"}.fa-github-alt:before{content:"\f113"}.fa-phoenix-squadron:before{content:"\f511"}.fa-pagelines:before{content:"\f18c"}.fa-algolia:before{content:"\f36c"}.fa-red-river:before{content:"\f3e3"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-safari:before{content:"\f267"}.fa-google:before{content:"\f1a0"}.fa-font-awesome-alt:before,.fa-square-font-awesome-stroke:before{content:"\f35c"}.fa-atlassian:before{content:"\f77b"}.fa-linkedin-in:before{content:"\f0e1"}.fa-digital-ocean:before{content:"\f391"}.fa-nimblr:before{content:"\f5a8"}.fa-chromecast:before{content:"\f838"}.fa-evernote:before{content:"\f839"}.fa-hacker-news:before{content:"\f1d4"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-adversal:before{content:"\f36a"}.fa-creative-commons:before{content:"\f25e"}.fa-watchman-monitoring:before{content:"\e087"}.fa-fonticons:before{content:"\f280"}.fa-weixin:before{content:"\f1d7"}.fa-shirtsinbulk:before{content:"\f214"}.fa-codepen:before{content:"\f1cb"}.fa-git-alt:before{content:"\f841"}.fa-lyft:before{content:"\f3c3"}.fa-rev:before{content:"\f5b2"}.fa-windows:before{content:"\f17a"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-square-viadeo:before,.fa-viadeo-square:before{content:"\f2aa"}.fa-meetup:before{content:"\f2e0"}.fa-centos:before{content:"\f789"}.fa-adn:before{content:"\f170"}.fa-cloudsmith:before{content:"\f384"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-dribbble-square:before,.fa-square-dribbble:before{content:"\f397"}.fa-codiepie:before{content:"\f284"}.fa-node:before{content:"\f419"}.fa-mix:before{content:"\f3cb"}.fa-steam:before{content:"\f1b6"}.fa-cc-apple-pay:before{content:"\f416"}.fa-scribd:before{content:"\f28a"}.fa-debian:before{content:"\e60b"}.fa-openid:before{content:"\f19b"}.fa-instalod:before{content:"\e081"}.fa-expeditedssl:before{content:"\f23e"}.fa-sellcast:before{content:"\f2da"}.fa-square-twitter:before,.fa-twitter-square:before{content:"\f081"}.fa-r-project:before{content:"\f4f7"}.fa-delicious:before{content:"\f1a5"}.fa-freebsd:before{content:"\f3a4"}.fa-vuejs:before{content:"\f41f"}.fa-accusoft:before{content:"\f369"}.fa-ioxhost:before{content:"\f208"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-app-store:before{content:"\f36f"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-itunes-note:before{content:"\f3b5"}.fa-golang:before{content:"\e40f"}.fa-kickstarter:before{content:"\f3bb"}.fa-grav:before{content:"\f2d6"}.fa-weibo:before{content:"\f18a"}.fa-uncharted:before{content:"\e084"}.fa-firstdraft:before{content:"\f3a1"}.fa-square-youtube:before,.fa-youtube-square:before{content:"\f431"}.fa-wikipedia-w:before{content:"\f266"}.fa-rendact:before,.fa-wpressr:before{content:"\f3e4"}.fa-angellist:before{content:"\f209"}.fa-galactic-republic:before{content:"\f50c"}.fa-nfc-directional:before{content:"\e530"}.fa-skype:before{content:"\f17e"}.fa-joget:before{content:"\f3b7"}.fa-fedora:before{content:"\f798"}.fa-stripe-s:before{content:"\f42a"}.fa-meta:before{content:"\e49b"}.fa-laravel:before{content:"\f3bd"}.fa-hotjar:before{content:"\f3b1"}.fa-bluetooth-b:before{content:"\f294"}.fa-sticker-mule:before{content:"\f3f7"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-hips:before{content:"\f452"}.fa-behance:before{content:"\f1b4"}.fa-reddit:before{content:"\f1a1"}.fa-discord:before{content:"\f392"}.fa-chrome:before{content:"\f268"}.fa-app-store-ios:before{content:"\f370"}.fa-cc-discover:before{content:"\f1f2"}.fa-wpbeginner:before{content:"\f297"}.fa-confluence:before{content:"\f78d"}.fa-mdb:before{content:"\f8ca"}.fa-dochub:before{content:"\f394"}.fa-accessible-icon:before{content:"\f368"}.fa-ebay:before{content:"\f4f4"}.fa-amazon:before{content:"\f270"}.fa-unsplash:before{content:"\e07c"}.fa-yarn:before{content:"\f7e3"}.fa-square-steam:before,.fa-steam-square:before{content:"\f1b7"}.fa-500px:before{content:"\f26e"}.fa-square-vimeo:before,.fa-vimeo-square:before{content:"\f194"}.fa-asymmetrik:before{content:"\f372"}.fa-font-awesome-flag:before,.fa-font-awesome-logo-full:before,.fa-font-awesome:before{content:"\f2b4"}.fa-gratipay:before{content:"\f184"}.fa-apple:before{content:"\f179"}.fa-hive:before{content:"\e07f"}.fa-gitkraken:before{content:"\f3a6"}.fa-keybase:before{content:"\f4f5"}.fa-apple-pay:before{content:"\f415"}.fa-padlet:before{content:"\e4a0"}.fa-amazon-pay:before{content:"\f42c"}.fa-github-square:before,.fa-square-github:before{content:"\f092"}.fa-stumbleupon:before{content:"\f1a4"}.fa-fedex:before{content:"\f797"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-shopify:before{content:"\e057"}.fa-neos:before{content:"\f612"}.fa-square-threads:before{content:"\e619"}.fa-hackerrank:before{content:"\f5f7"}.fa-researchgate:before{content:"\f4f8"}.fa-swift:before{content:"\f8e1"}.fa-angular:before{content:"\f420"}.fa-speakap:before{content:"\f3f3"}.fa-angrycreative:before{content:"\f36e"}.fa-y-combinator:before{content:"\f23b"}.fa-empire:before{content:"\f1d1"}.fa-envira:before{content:"\f299"}.fa-gitlab-square:before,.fa-square-gitlab:before{content:"\e5ae"}.fa-studiovinari:before{content:"\f3f8"}.fa-pied-piper:before{content:"\f2ae"}.fa-wordpress:before{content:"\f19a"}.fa-product-hunt:before{content:"\f288"}.fa-firefox:before{content:"\f269"}.fa-linode:before{content:"\f2b8"}.fa-goodreads:before{content:"\f3a8"}.fa-odnoklassniki-square:before,.fa-square-odnoklassniki:before{content:"\f264"}.fa-jsfiddle:before{content:"\f1cc"}.fa-sith:before{content:"\f512"}.fa-themeisle:before{content:"\f2b2"}.fa-page4:before{content:"\f3d7"}.fa-hashnode:before{content:"\e499"}.fa-react:before{content:"\f41b"}.fa-cc-paypal:before{content:"\f1f4"}.fa-squarespace:before{content:"\f5be"}.fa-cc-stripe:before{content:"\f1f5"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-bitcoin:before{content:"\f379"}.fa-keycdn:before{content:"\f3ba"}.fa-opera:before{content:"\f26a"}.fa-itch-io:before{content:"\f83a"}.fa-umbraco:before{content:"\f8e8"}.fa-galactic-senate:before{content:"\f50d"}.fa-ubuntu:before{content:"\f7df"}.fa-draft2digital:before{content:"\f396"}.fa-stripe:before{content:"\f429"}.fa-houzz:before{content:"\f27c"}.fa-gg:before{content:"\f260"}.fa-dhl:before{content:"\f790"}.fa-pinterest-square:before,.fa-square-pinterest:before{content:"\f0d3"}.fa-xing:before{content:"\f168"}.fa-blackberry:before{content:"\f37b"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-playstation:before{content:"\f3df"}.fa-quinscape:before{content:"\f459"}.fa-less:before{content:"\f41d"}.fa-blogger-b:before{content:"\f37d"}.fa-opencart:before{content:"\f23d"}.fa-vine:before{content:"\f1ca"}.fa-paypal:before{content:"\f1ed"}.fa-gitlab:before{content:"\f296"}.fa-typo3:before{content:"\f42b"}.fa-reddit-alien:before{content:"\f281"}.fa-yahoo:before{content:"\f19e"}.fa-dailymotion:before{content:"\e052"}.fa-affiliatetheme:before{content:"\f36b"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-bootstrap:before{content:"\f836"}.fa-odnoklassniki:before{content:"\f263"}.fa-nfc-symbol:before{content:"\e531"}.fa-ethereum:before{content:"\f42e"}.fa-speaker-deck:before{content:"\f83c"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-patreon:before{content:"\f3d9"}.fa-avianex:before{content:"\f374"}.fa-ello:before{content:"\f5f1"}.fa-gofore:before{content:"\f3a7"}.fa-bimobject:before{content:"\f378"}.fa-facebook-f:before{content:"\f39e"}.fa-google-plus-square:before,.fa-square-google-plus:before{content:"\f0d4"}.fa-mandalorian:before{content:"\f50f"}.fa-first-order-alt:before{content:"\f50a"}.fa-osi:before{content:"\f41a"}.fa-google-wallet:before{content:"\f1ee"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-periscope:before{content:"\f3da"}.fa-fulcrum:before{content:"\f50b"}.fa-cloudscale:before{content:"\f383"}.fa-forumbee:before{content:"\f211"}.fa-mizuni:before{content:"\f3cc"}.fa-schlix:before{content:"\f3ea"}.fa-square-xing:before,.fa-xing-square:before{content:"\f169"}.fa-bandcamp:before{content:"\f2d5"}.fa-wpforms:before{content:"\f298"}.fa-cloudversify:before{content:"\f385"}.fa-usps:before{content:"\f7e1"}.fa-megaport:before{content:"\f5a3"}.fa-magento:before{content:"\f3c4"}.fa-spotify:before{content:"\f1bc"}.fa-optin-monster:before{content:"\f23c"}.fa-fly:before{content:"\f417"}.fa-aviato:before{content:"\f421"}.fa-itunes:before{content:"\f3b4"}.fa-cuttlefish:before{content:"\f38c"}.fa-blogger:before{content:"\f37c"}.fa-flickr:before{content:"\f16e"}.fa-viber:before{content:"\f409"}.fa-soundcloud:before{content:"\f1be"}.fa-digg:before{content:"\f1a6"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-symfony:before{content:"\f83d"}.fa-maxcdn:before{content:"\f136"}.fa-etsy:before{content:"\f2d7"}.fa-facebook-messenger:before{content:"\f39f"}.fa-audible:before{content:"\f373"}.fa-think-peaks:before{content:"\f731"}.fa-bilibili:before{content:"\e3d9"}.fa-erlang:before{content:"\f39d"}.fa-x-twitter:before{content:"\e61b"}.fa-cotton-bureau:before{content:"\f89e"}.fa-dashcube:before{content:"\f210"}.fa-42-group:before,.fa-innosoft:before{content:"\e080"}.fa-stack-exchange:before{content:"\f18d"}.fa-elementor:before{content:"\f430"}.fa-pied-piper-square:before,.fa-square-pied-piper:before{content:"\e01e"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-palfed:before{content:"\f3d8"}.fa-superpowers:before{content:"\f2dd"}.fa-resolving:before{content:"\f3e7"}.fa-xbox:before{content:"\f412"}.fa-searchengin:before{content:"\f3eb"}.fa-tiktok:before{content:"\e07b"}.fa-facebook-square:before,.fa-square-facebook:before{content:"\f082"}.fa-renren:before{content:"\f18b"}.fa-linux:before{content:"\f17c"}.fa-glide:before{content:"\f2a5"}.fa-linkedin:before{content:"\f08c"}.fa-hubspot:before{content:"\f3b2"}.fa-deploydog:before{content:"\f38e"}.fa-twitch:before{content:"\f1e8"}.fa-ravelry:before{content:"\f2d9"}.fa-mixer:before{content:"\e056"}.fa-lastfm-square:before,.fa-square-lastfm:before{content:"\f203"}.fa-vimeo:before{content:"\f40a"}.fa-mendeley:before{content:"\f7b3"}.fa-uniregistry:before{content:"\f404"}.fa-figma:before{content:"\f799"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-dropbox:before{content:"\f16b"}.fa-instagram:before{content:"\f16d"}.fa-cmplid:before{content:"\e360"}.fa-facebook:before{content:"\f09a"}.fa-gripfire:before{content:"\f3ac"}.fa-jedi-order:before{content:"\f50e"}.fa-uikit:before{content:"\f403"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-phabricator:before{content:"\f3db"}.fa-ussunnah:before{content:"\f407"}.fa-earlybirds:before{content:"\f39a"}.fa-trade-federation:before{content:"\f513"}.fa-autoprefixer:before{content:"\f41c"}.fa-whatsapp:before{content:"\f232"}.fa-slideshare:before{content:"\f1e7"}.fa-google-play:before{content:"\f3ab"}.fa-viadeo:before{content:"\f2a9"}.fa-line:before{content:"\f3c0"}.fa-google-drive:before{content:"\f3aa"}.fa-servicestack:before{content:"\f3ec"}.fa-simplybuilt:before{content:"\f215"}.fa-bitbucket:before{content:"\f171"}.fa-imdb:before{content:"\f2d8"}.fa-deezer:before{content:"\e077"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-jira:before{content:"\f7b1"}.fa-docker:before{content:"\f395"}.fa-screenpal:before{content:"\e570"}.fa-bluetooth:before{content:"\f293"}.fa-gitter:before{content:"\f426"}.fa-d-and-d:before{content:"\f38d"}.fa-microblog:before{content:"\e01a"}.fa-cc-diners-club:before{content:"\f24c"}.fa-gg-circle:before{content:"\f261"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-yandex:before{content:"\f413"}.fa-readme:before{content:"\f4d5"}.fa-html5:before{content:"\f13b"}.fa-sellsy:before{content:"\f213"}.fa-sass:before{content:"\f41e"}.fa-wirsindhandwerk:before,.fa-wsh:before{content:"\e2d0"}.fa-buromobelexperte:before{content:"\f37f"}.fa-salesforce:before{content:"\f83b"}.fa-octopus-deploy:before{content:"\e082"}.fa-medapps:before{content:"\f3c6"}.fa-ns8:before{content:"\f3d5"}.fa-pinterest-p:before{content:"\f231"}.fa-apper:before{content:"\f371"}.fa-fort-awesome:before{content:"\f286"}.fa-waze:before{content:"\f83f"}.fa-cc-jcb:before{content:"\f24b"}.fa-snapchat-ghost:before,.fa-snapchat:before{content:"\f2ab"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-rust:before{content:"\e07a"}.fa-wix:before{content:"\f5cf"}.fa-behance-square:before,.fa-square-behance:before{content:"\f1b5"}.fa-supple:before{content:"\f3f9"}.fa-rebel:before{content:"\f1d0"}.fa-css3:before{content:"\f13c"}.fa-staylinked:before{content:"\f3f5"}.fa-kaggle:before{content:"\f5fa"}.fa-space-awesome:before{content:"\e5ac"}.fa-deviantart:before{content:"\f1bd"}.fa-cpanel:before{content:"\f388"}.fa-goodreads-g:before{content:"\f3a9"}.fa-git-square:before,.fa-square-git:before{content:"\f1d2"}.fa-square-tumblr:before,.fa-tumblr-square:before{content:"\f174"}.fa-trello:before{content:"\f181"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-get-pocket:before{content:"\f265"}.fa-perbyte:before{content:"\e083"}.fa-grunt:before{content:"\f3ad"}.fa-weebly:before{content:"\f5cc"}.fa-connectdevelop:before{content:"\f20e"}.fa-leanpub:before{content:"\f212"}.fa-black-tie:before{content:"\f27e"}.fa-themeco:before{content:"\f5c6"}.fa-python:before{content:"\f3e2"}.fa-android:before{content:"\f17b"}.fa-bots:before{content:"\e340"}.fa-free-code-camp:before{content:"\f2c5"}.fa-hornbill:before{content:"\f592"}.fa-js:before{content:"\f3b8"}.fa-ideal:before{content:"\e013"}.fa-git:before{content:"\f1d3"}.fa-dev:before{content:"\f6cc"}.fa-sketch:before{content:"\f7c6"}.fa-yandex-international:before{content:"\f414"}.fa-cc-amex:before{content:"\f1f3"}.fa-uber:before{content:"\f402"}.fa-github:before{content:"\f09b"}.fa-php:before{content:"\f457"}.fa-alipay:before{content:"\f642"}.fa-youtube:before{content:"\f167"}.fa-skyatlas:before{content:"\f216"}.fa-firefox-browser:before{content:"\e007"}.fa-replyd:before{content:"\f3e6"}.fa-suse:before{content:"\f7d6"}.fa-jenkins:before{content:"\f3b6"}.fa-twitter:before{content:"\f099"}.fa-rockrms:before{content:"\f3e9"}.fa-pinterest:before{content:"\f0d2"}.fa-buffer:before{content:"\f837"}.fa-npm:before{content:"\f3d4"}.fa-yammer:before{content:"\f840"}.fa-btc:before{content:"\f15a"}.fa-dribbble:before{content:"\f17d"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-internet-explorer:before{content:"\f26b"}.fa-stubber:before{content:"\e5c7"}.fa-telegram-plane:before,.fa-telegram:before{content:"\f2c6"}.fa-old-republic:before{content:"\f510"}.fa-odysee:before{content:"\e5c6"}.fa-square-whatsapp:before,.fa-whatsapp-square:before{content:"\f40c"}.fa-node-js:before{content:"\f3d3"}.fa-edge-legacy:before{content:"\e078"}.fa-slack-hash:before,.fa-slack:before{content:"\f198"}.fa-medrt:before{content:"\f3c8"}.fa-usb:before{content:"\f287"}.fa-tumblr:before{content:"\f173"}.fa-vaadin:before{content:"\f408"}.fa-quora:before{content:"\f2c4"}.fa-square-x-twitter:before{content:"\e61a"}.fa-reacteurope:before{content:"\f75d"}.fa-medium-m:before,.fa-medium:before{content:"\f23a"}.fa-amilia:before{content:"\f36d"}.fa-mixcloud:before{content:"\f289"}.fa-flipboard:before{content:"\f44d"}.fa-viacoin:before{content:"\f237"}.fa-critical-role:before{content:"\f6c9"}.fa-sitrox:before{content:"\e44a"}.fa-discourse:before{content:"\f393"}.fa-joomla:before{content:"\f1aa"}.fa-mastodon:before{content:"\f4f6"}.fa-airbnb:before{content:"\f834"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-buy-n-large:before{content:"\f8a6"}.fa-gulp:before{content:"\f3ae"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-strava:before{content:"\f428"}.fa-ember:before{content:"\f423"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-teamspeak:before{content:"\f4f9"}.fa-pushed:before{content:"\f3e1"}.fa-wordpress-simple:before{content:"\f411"}.fa-nutritionix:before{content:"\f3d6"}.fa-wodu:before{content:"\e088"}.fa-google-pay:before{content:"\e079"}.fa-intercom:before{content:"\f7af"}.fa-zhihu:before{content:"\f63f"}.fa-korvue:before{content:"\f42f"}.fa-pix:before{content:"\e43a"}.fa-steam-symbol:before{content:"\f3f6"}:host,:root{--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}.fa-regular,.far{font-weight:400}:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-weight:900}@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format("woff2"),url(../webfonts/fa-v4compatibility.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a} \ No newline at end of file diff --git a/assets/css/expand.css b/assets/css/expand.css new file mode 100644 index 0000000..e50e452 --- /dev/null +++ b/assets/css/expand.css @@ -0,0 +1,101 @@ +/* + CSS for the main interaction +*/ +.accordion > input[name="collapse"] { + display: none; + + /*position: absolute; + left: -100vw;*/ +} + +.accordion label, +.accordion .content{ + /*max-width: 620px;*/ + margin: 0 auto; + } + + +.accordion .content { + /*background: rgba(0, 0, 0, 0.7);*/ + overflow: hidden; + height: 0; + transition: 0.5s; + box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.3); +} + +.accordion > input[name="collapse"]:checked ~ .content { + /*height: 380px; + transition: height 0.5s;*/ + height: 100%; +} + +.accordion label { + display: block; + +} + + +/* For Desktop */ +@media only screen and (min-width: 620px){ + + +.accordion > input[name="collapse"]:checked ~ .content { + height: 100%; +} + +} + + + +.accordion { + margin-bottom: 1em; +} + +.accordion > input[name="collapse"]:checked ~ .content { + border-top: 0; + transition: 0.3s; +} + +.accordion .handle { + margin: 0; + font-size: 16px; + +} + +.accordion label { + color: #fff; + cursor: pointer; + font-weight: normal; + padding: 10px; + /*background: #b0100c; rouge*/ + background: #3DB22B; /*vert*/ + user-select: none; + +} + +.accordion label:hover, +.accordion label:focus { + background: #252525; +} + +.accordion .handle label:before { + font-family: "Font Awesome 5 Free"; + /*content: "\f063";*/ + content: "\f055"; + display: inline-block; + margin-right: 10px; + font-size: 1em; + line-height: 1.556em; + vertical-align: middle; + transition: 0.4s; + font-weight: 900; +} + +.accordion > input[name="collapse"]:checked ~ .handle label:before { + /*transform: rotate(180deg);*/ + /*transform-origin: center;*/ + font-family: "Font Awesome 5 Free"; + content: "\f056"; + transition: 0.4s; +} + diff --git a/assets/favicon/android-chrome-192x192.png b/assets/favicon/android-chrome-192x192.png new file mode 100644 index 0000000..44a1b05 Binary files /dev/null and b/assets/favicon/android-chrome-192x192.png differ diff --git a/assets/favicon/android-chrome-512x512.png b/assets/favicon/android-chrome-512x512.png new file mode 100644 index 0000000..cbe1ddd Binary files /dev/null and b/assets/favicon/android-chrome-512x512.png differ diff --git a/assets/favicon/apple-touch-icon.png b/assets/favicon/apple-touch-icon.png new file mode 100644 index 0000000..706928f Binary files /dev/null and b/assets/favicon/apple-touch-icon.png differ diff --git a/assets/favicon/favicon-16x16.png b/assets/favicon/favicon-16x16.png new file mode 100644 index 0000000..2466051 Binary files /dev/null and b/assets/favicon/favicon-16x16.png differ diff --git a/assets/favicon/favicon-32x32.png b/assets/favicon/favicon-32x32.png new file mode 100644 index 0000000..ab00f93 Binary files /dev/null and b/assets/favicon/favicon-32x32.png differ diff --git a/assets/favicon/favicon.ico b/assets/favicon/favicon.ico new file mode 100644 index 0000000..a011591 Binary files /dev/null and b/assets/favicon/favicon.ico differ diff --git a/assets/favicon/favicon.png b/assets/favicon/favicon.png new file mode 100644 index 0000000..ab00f93 Binary files /dev/null and b/assets/favicon/favicon.png differ diff --git a/assets/favicon/site.webmanifest b/assets/favicon/site.webmanifest new file mode 100644 index 0000000..45dc8a2 --- /dev/null +++ b/assets/favicon/site.webmanifest @@ -0,0 +1 @@ +{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} \ No newline at end of file diff --git a/assets/js/Chart.bundle.min.js b/assets/js/Chart.bundle.min.js new file mode 100644 index 0000000..7dd53db Binary files /dev/null and b/assets/js/Chart.bundle.min.js differ diff --git a/assets/js/jquery.min.js b/assets/js/jquery.min.js new file mode 100644 index 0000000..4c5be4c --- /dev/null +++ b/assets/js/jquery.min.js @@ -0,0 +1,4 @@ +/*! jQuery v3.1.1 | (c) jQuery Foundation | jquery.org/license */ +!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.1.1",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext,B=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,C=/^.[^:#\[\.,]*$/;function D(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):C.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(D(this,a||[],!1))},not:function(a){return this.pushStack(D(this,a||[],!0))},is:function(a){return!!D(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var E,F=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,G=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||E,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:F.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),B.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};G.prototype=r.fn,E=r(d);var H=/^(?:parents|prev(?:Until|All))/,I={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function J(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return J(a,"nextSibling")},prev:function(a){return J(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return a.contentDocument||r.merge([],a.childNodes)}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(I[a]||r.uniqueSort(e),H.test(a)&&e.reverse()),this.pushStack(e)}});var K=/[^\x20\t\r\n\f]+/g;function L(a){var b={};return r.each(a.match(K)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?L(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function M(a){return a}function N(a){throw a}function O(a,b,c){var d;try{a&&r.isFunction(d=a.promise)?d.call(a).done(b).fail(c):a&&r.isFunction(d=a.then)?d.call(a,b,c):b.call(void 0,a)}catch(a){c.call(void 0,a)}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b=f&&(d!==N&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:M,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:M)),c[2][3].add(g(0,a,r.isFunction(d)?d:N))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(O(a,g.done(h(c)).resolve,g.reject),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)O(e[c],h(c),g.reject);return g.promise()}});var P=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&P.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var Q=r.Deferred();r.fn.ready=function(a){return Q.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,holdReady:function(a){a?r.readyWait++:r.ready(!0)},ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||Q.resolveWith(d,[r]))}}),r.ready.then=Q.then;function R(){d.removeEventListener("DOMContentLoaded",R), +a.removeEventListener("load",R),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",R),a.addEventListener("load",R));var S=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)S(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h1,null,!0)},removeData:function(a){return this.each(function(){W.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=V.get(a,b),c&&(!d||r.isArray(c)?d=V.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return V.get(a,c)||V.access(a,c,{empty:r.Callbacks("once memory").add(function(){V.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length\x20\t\r\n\f]+)/i,ka=/^$|\/(?:java|ecma)script/i,la={option:[1,""],thead:[1,"","
      "],col:[2,"","
      "],tr:[2,"","
      "],td:[3,"","
      "],_default:[0,"",""]};la.optgroup=la.option,la.tbody=la.tfoot=la.colgroup=la.caption=la.thead,la.th=la.td;function ma(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&r.nodeName(a,b)?r.merge([a],c):c}function na(a,b){for(var c=0,d=a.length;c-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=ma(l.appendChild(f),"script"),j&&na(g),c){k=0;while(f=g[k++])ka.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var qa=d.documentElement,ra=/^key/,sa=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ta=/^([^.]*)(?:\.(.+)|)/;function ua(){return!0}function va(){return!1}function wa(){try{return d.activeElement}catch(a){}}function xa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)xa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=va;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(qa,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(K)||[""],j=b.length;while(j--)h=ta.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.hasData(a)&&V.get(a);if(q&&(i=q.events)){b=(b||"").match(K)||[""],j=b.length;while(j--)if(h=ta.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&V.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(V.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i\x20\t\r\n\f]*)[^>]*)\/>/gi,za=/\s*$/g;function Da(a,b){return r.nodeName(a,"table")&&r.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a:a}function Ea(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Fa(a){var b=Ba.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ga(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(V.hasData(a)&&(f=V.access(a),g=V.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c1&&"string"==typeof q&&!o.checkClone&&Aa.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ia(f,b,c,d)});if(m&&(e=pa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(ma(e,"script"),Ea),i=h.length;l")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=ma(h),f=ma(a),d=0,e=f.length;d0&&na(g,!i&&ma(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(T(c)){if(b=c[V.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[V.expando]=void 0}c[W.expando]&&(c[W.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ja(this,a,!0)},remove:function(a){return Ja(this,a)},text:function(a){return S(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ia(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Da(this,a);b.appendChild(a)}})},prepend:function(){return Ia(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Da(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ia(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ia(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(ma(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return S(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!za.test(a)&&!la[(ja.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c1)}});function Ya(a,b,c,d,e){return new Ya.prototype.init(a,b,c,d,e)}r.Tween=Ya,Ya.prototype={constructor:Ya,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=Ya.propHooks[this.prop];return a&&a.get?a.get(this):Ya.propHooks._default.get(this)},run:function(a){var b,c=Ya.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Ya.propHooks._default.set(this),this}},Ya.prototype.init.prototype=Ya.prototype,Ya.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},Ya.propHooks.scrollTop=Ya.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=Ya.prototype.init,r.fx.step={};var Za,$a,_a=/^(?:toggle|show|hide)$/,ab=/queueHooks$/;function bb(){$a&&(a.requestAnimationFrame(bb),r.fx.tick())}function cb(){return a.setTimeout(function(){Za=void 0}),Za=r.now()}function db(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ba[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function eb(a,b,c){for(var d,e=(hb.tweeners[b]||[]).concat(hb.tweeners["*"]),f=0,g=e.length;f1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?ib:void 0)), +void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&r.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(K);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),ib={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=jb[b]||r.find.attr;jb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=jb[g],jb[g]=e,e=null!=c(a,b,d)?g:null,jb[g]=f),e}});var kb=/^(?:input|select|textarea|button)$/i,lb=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return S(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):kb.test(a.nodeName)||lb.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function mb(a){var b=a.match(K)||[];return b.join(" ")}function nb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,nb(this)))});if("string"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=nb(c),d=1===c.nodeType&&" "+mb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=mb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,nb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=nb(c),d=1===c.nodeType&&" "+mb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=mb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,nb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(K)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=nb(this),b&&V.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":V.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+mb(nb(c))+" ").indexOf(b)>-1)return!0;return!1}});var ob=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":r.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(ob,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:mb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(r.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var pb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!pb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,pb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(V.get(h,"events")||{})[b.type]&&V.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&T(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!T(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=V.access(d,b);e||d.addEventListener(a,c,!0),V.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=V.access(d,b)-1;e?V.access(d,b,e):(d.removeEventListener(a,c,!0),V.remove(d,b))}}});var qb=a.location,rb=r.now(),sb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var tb=/\[\]$/,ub=/\r?\n/g,vb=/^(?:submit|button|image|reset|file)$/i,wb=/^(?:input|select|textarea|keygen)/i;function xb(a,b,c,d){var e;if(r.isArray(b))r.each(b,function(b,e){c||tb.test(a)?d(a,e):xb(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)xb(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(r.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)xb(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&wb.test(this.nodeName)&&!vb.test(a)&&(this.checked||!ia.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:r.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(ub,"\r\n")}}):{name:b.name,value:c.replace(ub,"\r\n")}}).get()}});var yb=/%20/g,zb=/#.*$/,Ab=/([?&])_=[^&]*/,Bb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Cb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Db=/^(?:GET|HEAD)$/,Eb=/^\/\//,Fb={},Gb={},Hb="*/".concat("*"),Ib=d.createElement("a");Ib.href=qb.href;function Jb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(K)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Kb(a,b,c,d){var e={},f=a===Gb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Lb(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Mb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Nb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:qb.href,type:"GET",isLocal:Cb.test(qb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Hb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Lb(Lb(a,r.ajaxSettings),b):Lb(r.ajaxSettings,a)},ajaxPrefilter:Jb(Fb),ajaxTransport:Jb(Gb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Bb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||qb.href)+"").replace(Eb,qb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(K)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Ib.protocol+"//"+Ib.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Kb(Fb,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Db.test(o.type),f=o.url.replace(zb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(yb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(sb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Ab,"$1"),n=(sb.test(f)?"&":"?")+"_="+rb++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Hb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Kb(Gb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Mb(o,y,d)),v=Nb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Ob={0:200,1223:204},Pb=r.ajaxSettings.xhr();o.cors=!!Pb&&"withCredentials"in Pb,o.ajax=Pb=!!Pb,r.ajaxTransport(function(b){var c,d;if(o.cors||Pb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Ob[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r(" + + diff --git a/search.json b/search.json new file mode 100644 index 0000000..5fa2a6f --- /dev/null +++ b/search.json @@ -0,0 +1,18 @@ +--- +regenerate: true +--- +[ + {% assign sorted = site.posts | sort_natural: "modif" | reverse %} + {% for post in sorted %} + { + + "title" : "{{ post.title | strip_html | escape }}", + "url" : "{{ site.baseurl }}{{ post.url }}", + "tags" : "{{ post.tags | join: ', ' }}", + "create" : "{{ post.create }}", + "date" : "{{ post.modif }}" + + } {% unless forloop.last %},{% endunless %} + {% endfor %} +] + diff --git a/syntaxe-markdown.md b/syntaxe-markdown.md new file mode 100644 index 0000000..8df1ce6 --- /dev/null +++ b/syntaxe-markdown.md @@ -0,0 +1,2012 @@ +--- +layout: article +title: Syntaxe markdown + thème +mathjax: true +mermaid: true +chart: true +--- + +*Markdown est un langage de balisage qui se veut être facile à lire par les personnes. Les balises ne doivent pas être abstraites, mais proches de leur véritable signification.* + +## Sommaire + +- [Markdown](#markdown) + - [Entête de fichier markdown pour serveur statique jekyll](#entête-de-fichier-markdown-pour-serveur-statique-jekyll) + - [Icônes Forkawesome](#icônes-forkawesome) + - [Désactiver les balises liquid](#désactiver-les-balises-liquid) + - [Etendre Réduire un contenu](#etendre-réduire-un-contenu) +- [Syntaxe](#syntaxe) + - [Fichiers](#fichiers) + - [Gras et italique](#gras-et-italique) + - [Barré](#barré) + - [Listes](#listes) + - [Case à cocher](#case-à-cocher) + - [Marques , sub et sup](#marques-sub-et-sup) + - [Liens](#liens) + - [notes de bas de page](#notes-de-bas-de-page) + - [Echappatoires et HTML](#echappatoires-et-html) + - [Code et Syntaxe Highlighting](#code-et-syntaxe-highlighting) + - [Tableaux](#tableaux) + - [Repli texte - Citations](#repli-texte---citations) + - [Ligne Horizontale](#ligne-horizontale) + - [Ligne Breaks](#ligne-breaks) + - [Titres](#titres) +- [Alerte et Tag](#alerte-et-tag) + - [Alerte](#alerte) + - [Tag](#tag) +- [Boutons](#boutons) + - [Primaire](#primaire) + - [Secondaire](#secondaire) + - [Succès](#succès) + - [Outline](#outline) + - [Pill](#pill) + - [Arrondi](#arrondi) + - [Cercle](#cercle) + - [Extrêmement petit](#extrêmement-petit) + - [Petite taille](#petite-taille) + - [Moyen](#moyen) + - [Large](#large) + - [Extrêmement Large](#extrêmement-large) +- [Graphes](#graphes) + - [MathJax](#mathjax) + - [Mermaid](#mermaid) + - [Chart](#chart) +- [Vidéos](#vidéos) + - [Youtube](#youtube) + - [Iframe](#iframe) + - [Video](#video) + - [Ted](#ted) + - [Soundcloud](#soundcloud) + - [codepen](#codepen) +- [Images](#images) + - [Icônes](#icônes) + - [Bordure](#bordure) + - [Ombre](#ombre) + - [Arrondi](#arrondi) + - [Cercle](#cercle) + - [Mélange](#mélange) + - [Exemples](#exemples) + - [Extrêmement Petit](#extrêmement-petit) + - [Petit](#petit) + - [Moyen](#moyen) + - [Large](#large) + - [Extrêmement Large](#extrêmement-large) +- [Elément](#elément) + - [Contenu](#contenu) + - [Image et Contenu](#image-et-contenu) + - [Taille Image](#taille-image) +- [Format Carte](#format-carte) + - [Image](#image) + - [Contenu](#contenu) + - [Image et Contenu](#image-et-contenu) + - [Image Overlay](#image-overlay) + - [Flat](#flat) + - [Image Clicquable](#image-clicquable) +- [Class hero](#class-hero) + - [Normal](#normal) + - [Centré](#centré) + - [Theme sombre](#theme-sombre) + - [Image arrière plan](#image-arrière-plan) + - [Hauteur](#hauteur) + - [Image arrière plan Centrée](#image-arrière-plan-centrée) +- [swiper](#swiper) + - [Normal](#normal) + - [Thème clair](#thème-clair) + - [Thème sombre](#thème-sombre) + +## Markdown + +### Entête de fichier markdown pour serveur statique jekyll + +``` +--- +layout: article +title: tmux +toc: true +create: 2020-08-03 +modif: 2019-03-06 +tags: [tmux,divers] +mathjax: (falcutatif) +mermaid: (falcutatif) +chart: (falcutatif) +--- +``` + +* **layout** : toujours **post** **(Obligatoire)** +* **title** : le titre du billet **(Obligatoire)** +* **toc** : true pour avoir un menu de lien des différentes entêtes du billet +* **date** : respecter le format **aaaa-mm-jj** **(Obligatoire)** +* **categories** et **tags** : un mot entre crochets sans espace ni caractères spéciaux , si plusieurs une virgule pour les séparer + +### Icônes Forkawesome + +` ` + + +`` + + +`` + + +Ajout `fa-fw` pour afficher: +` ` + + +### Désactiver les balises liquid + +Il est possible de désactiver les balises liquid en utilisant raw / endraw + +Exemple +![](/images/raw-endraw.png) + +### Etendre Réduire un contenu + +
      +Etendre Réduire + +{% highlight text %} +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed quam augue, volutpat a vehicula in, elementum ac nibh. Duis gravida sodales lobortis. +Nullam venenatis nec mauris ac cursus. Duis tempor volutpat sapien vel molestie. Fusce velit ante, volutpat vitae dui tincidunt, pharetra pulvinar magna. +Pellentesque tincidunt scelerisque sapien, sit amet semper risus dignissim at. Quisque laoreet gravida metus, pharetra egestas urna ultricies eget. +Integer eu lobortis dolor. Donec sollicitudin pulvinar quam, ac tempus lectus convallis ut. Sed ut mollis mi, vel tempor ex. +In quis purus porta, fermentum libero a, luctus nulla. Nulla eget risus scelerisque, maximus sem a, accumsan ante. +Praesent consequat sed odio ac commodo. Maecenas sit amet dictum lorem. +Nullam libero augue, suscipit vitae fermentum aliquet, malesuada at arcu. +{% endhighlight %} + +
      + +Syntaxe + +``` +
      +Etendre Réduire +{% raw %}{% highlight text %}{% endraw %} +{% raw %}{% endhighlight %}{% endraw %} +
      +``` + +## Syntaxe + +* [Kramdown Syntax](https://kramdown.gettalong.org/syntax) +* [Jekyll Formatting Cheatsheet](https://www.hansenh.com/post/jekyll-formatting-cheatsheet/) +* [Faire un lien interne sur un autre billet](https://www.digitalocean.com/community/tutorials/controlling-urls-and-links-in-jekyll) + +### Fichiers + +Les fichiers sont dans le dossier **/files** + +``` +[Fichier téléchargeable]({{ site.baseurl }}/files/nomFichier) +``` + +### Gras et italique + +Écrire en gras et en italique est particulièrement facile avec Markdown. Il suffit d’utiliser les étoiles, appelées aussi astérisques. Pour écrire en italique, insérez tout simplement une étoile devant et derrière l’expression le mot ou concerné. Pour le gras, insérez deux étoiles avant et après. Pour le gras et l’italique, vous devrez opter pour trois étoiles. Une autre option consiste à utiliser les tirets bas. + +``` +*Texte en italique* +_Texte en italique_ +**Texte en gras** +__Texte en gras__ +***Texte en italique et en gras*** +___Texte en italique et en gras___ +``` + +*Texte en italique* +_Texte en italique_ +**Texte en gras** +__Texte en gras__ +***Texte en italique et en gras*** +___Texte en italique et en gras___ + +### Barré + +Pour barrer un texte avec Markdown, précédez-le de `` et refermez la chaîne avec ``. + +``` +Ce texte est barré.mais pas celui-là. +``` + +Ce texte est barré.mais pas celui-là. + +### Listes + +(Dans cet exemple, des espaces de tête et de sentier sont montrés avec des points:: ⋅) + +``` +1. Première liste commandée +2. Autre question +...* Sous-liste non ordonnée. +1. Les chiffres réels n'ont pas d'importance, juste que c'est un nombre +....1 Sous-liste commandée +4. Et un autre article. + +⋅⋅ Vous pouvez avoir correctement identifié des paragraphes dans les éléments de la liste. Notez la ligne blanche ci-dessus, et les principaux espaces (au moins un, mais nous utiliserons trois ici pour aligner également la marque brute). + +⋅⋅ Pour avoir une rupture de ligne sans un paragraphe, vous aurez besoin d'utiliser deux espaces traînants. +⋅⋅ Notez que cette ligne est séparée, mais dans le même paragraphe.⋅⋅ + +* Liste non ordonnée peut utiliser des astérisques +- Ou minuses ++ Ou plus. +``` + +1. Première liste commandée +2. Autre question + * Sous-liste non ordonnée.. +1. Les chiffres réels n'ont pas d'importance, juste que c'est un nombre + 1. Sous-liste commandée +4. Et un autre article. + + Vous pouvez avoir correctement identifié des paragraphes dans les éléments de la liste. Notez la ligne blanche ci-dessus, et les principaux espaces (au moins un, mais nous utiliserons trois ici pour aligner également la marque brute). + + Pour avoir une pause de ligne sans un paragraphe, vous devrez utiliser **deux espaces de sentier**. + Notez que cette ligne est séparée, mais dans le même paragraphe. + +* Liste non ordonnée peut utiliser des astérisques +- Ou moins ++ Ou plus + + + * List 0 + * List +* Hello! + +### Case à cocher + +Markdown permet aussi d’éditer des listes à cocher. Ces listes sont précédées d’une case à cocher pouvant être activée par clic. Ces cases peuvent d’ailleurs être cochées par défaut au moment de la création de la liste. Pour ce faire, vous devez utiliser les crochets et le X. + +``` +- [x] Task one is done. +- [ ] Task two is undergoing. +- [ ] Stay awesome! +``` + +- [x] Task one is done. +- [ ] Task two is undergoing. +- [ ] Stay awesome! + + + +### Marques , sub et sup + +``` +Je dois souligner ces mots très importants. +``` + +Je dois souligner ces mots très importants. + +``` +H2O +X2 +``` + +H2O +X2 + + + +### Liens + +Markdown permet aussi d’insérer des images et des hyperliens dans votre texte. Cette insertion se fait en combinant des parenthèses et des crochets. Pour créer un lien, vous devrez écrire les mots ou les phrases visibles dans le texte entre crochets, suivis directement de l’adresse URL entre parenthèses. Si vous souhaitez ajouter au lien un titre facultatif, visible par l’utilisateur au survol de la souris, c’est tout à fait possible : ce texte devra être ajouté à l’adresse URL entre les parenthèses, mais sera séparé d’une espace de l’URL, et inscrit entre guillemets doubles. + +``` +Ici ce qui suit [Lien](https://example.com/ "titre de lien optionnel"). +``` + +Ici ce qui suit [Lien](https://example.com/ "titre de lien optionnel"). + +Si vous insérez une adresse URL ou une adresse électronique dans votre texte ordinaire, la plupart des éditeurs Markdown créeront automatiquement un hyperlien accessible par clic. Pour forcer cette fonction, utilisez les signes inférieur et supérieur à. Si, en revanche, vous souhaitez empêcher les éditeurs d’activer cette fonction, marquez l’URL comme code, et utilisez à nouveau les apostrophes inversées. + +``` + +`https://example.com` +``` + + +`https://example.com` + + +### notes de bas de page + +Markdown vous permet aussi d’éditer des notes de bas de page. Ajoutez tout simplement dans votre texte un numéro d’annotation, et reprenez ce numéro en bas de votre page dans une note de bas de page. Markdown créera alors automatiquement une ligne. Le chiffre correspondant à l’annotation est automatiquement formaté en lien, ce qui vous permet d’atteindre la note de bas de page par un simple clic. Pour pouvoir bénéficier de cet automatisme, commencez par inscrire le numéro de l’annotation derrière le mot souhaité : commencez par écrire un accent circonflexe entre les crochets, suivi du numéro. + +Le choix du chiffre (ou autres valeurs) n’a aucune espèce d’importance. Comme pour la création de liste, Markdown se charge de la numérotation. Ce qui est important, c’est de créer ensuite un renvoi vers la désignation que vous aurez sélectionnée. Pour ce faire, vous devez reprendre le même chiffre dans une nouvelle ligne, inséré à nouveau entre crochets avec un accent circonflexe, vous ajoutez le signe des deux points, et vous rédigez le texte de l’annotation. Ce texte pourra d’ailleurs faire l’objet d’un formatage de votre choix, et s’étendre sur plusieurs lignes. + +``` +Dans le texte ordinaire [^1] vous pouvez facilement placer des notes de bas de page [^2] +[^1]: Vous trouverez ici le texte de la note de bas de page. + [^2]: **Note de page de page** peut aussi être *formatée*. +Et celles-ci comprennent même plusieurs lignes +``` + +Dans le texte ordinaire [^1] vous pouvez facilement placer des notes de bas de page [^2] +[^1]: Vous trouverez ici le texte de la note de bas de page. + [^2]: **Note de page de page** peut aussi être *formatée*. +Et celles-ci comprennent même plusieurs lignes + +### Echappatoires et HTML + +En plus des caractères spéciaux imposés par HTML, Markdown utilise quelques autres caractères pour le formatage. Si l’on insère ces caractères, l’analyseur syntaxique en tiendra compte au moment de la conversion. Voici les caractères concernés : + +* Astérisque : `*` +* Trait d’union : `-` +* Souligné : `_` +* Parenthèses : `()` +* Crochets : `[]` +* Accolades : `{}` +* Point : `.` +* Point d’exclamation : `!` +* Dièse : `#` +* Accent grave : ` +* Barre oblique inversée : `\` + +Si l’on veut utiliser ces caractères dans leur sens premier, il suffit de les précéder d’une barre oblique inversée. Important : Cette barre oblique inversée doit impérativement précéder chacun de ces caractères. Cela concerne donc autant une parenthèse ouvrante qu’une parenthèse fermante. + +Que faire si l'on veut seulement afficher les astérisques, et non les italiques ? + +* ceci apparaît en italique : *un jour heureux* +* ceci n'apparaît pas en italique : \*un jour heureux\* + +Markdown : + +``` +* ceci apparaît en italique : *un jour heureux* +* ceci n'apparaît pas en italique : \*un jour heureux\* +``` + +Les barres obliques inversées disparaîtront et laisseront place aux astérisques. Vous pouvez faire la même chose avec n'importe quel caractère ayant une signification spéciale pour Markdown. + +De nombreuses balises HTML simples sont autorisées, par exemple `` +Les balises inconnues seront supprimées. Pour afficher un `` littéral ou une balise inconnue comme ``, vous devez l'échapper avec des entités HTML : + +``` +ce sera en gras +vous devez échapper aux balises <inconnues> +© special entities work +&copy; if you want to escape it +``` + +Sortie: + +ce sera en gras +vous devez échapper aux balises <inconnues> +© les entités spéciales fonctionnent +&copy; si vous voulez y échapper + +HTML tags that are block-level like
      can be used, but if there is markdown formatting within it, you must add a "markdown" attribute:
      Some safe attributes are also allowed, permitting basic styling and layout:
      + +Individual ampersands (&) and less-than signs (<) are fine, they will be shown as expected. + +Les balises HTML au niveau du bloc, comme `
      `, peuvent être utilisées, mais si elles contiennent un formatage markdown, vous devez ajouter un attribut "markdown" : `
      ` +Certains attributs sûrs sont également autorisés, permettant un style et une mise en page de base : `
      ` + +Les esperluettes (`&`) et les signes moins que (`<`) sont acceptables, ils seront affichés comme prévu. + + + + + + + + + + + + +
      un deux trois
      Foo1 Foo2 Foo3
      + + + +### Code et Syntaxe Highlighting + +Pour écrire un morceau de code dans un texte, Markdown l’identifie au moyen du caractère appelé le Backtick ou apostrophe inversée. Attention, à ne pas confondre avec les guillemets. Le marquage est donc constitué d’une apostrophe inversée au début et à la fin du segment correspondant au code. C’est ainsi que vous pourrez incorporer directement le code source ou une commande logicielle dans le texte. + +``` +Le `code` en ligne est entouré de `back-ticks`. +``` + +Le `code` en ligne est entouré de `back-ticks`. + +Les blocs de code sont soit délimités par des lignes comportant trois crochets, soit indentés de quatre espaces. Je recommande de n'utiliser que les blocs de code clôturés : ils sont plus faciles à utiliser et sont les seuls à prendre en charge la coloration syntaxique. + +![indent code](/images/syntax-code-indent.png) + +``` + s = "Code with space indent" + print s +``` + +highlighting codes + + +![highlighting code](/images/syntax-code-highlight.png) + +```bash +#!/bin/sh +#lancement jekyll +cd /srv/wikistatic/ +#bundle exec jekyll serve +/usr/local/bin/bundle exec jekyll build --watch +``` + +Exemples de code + +bash + +```bash +#/bin/bash +fichierindex="indexA.html" +echo ' + + + + Fichiers html + + +
        ' > $fichierindex +OIFS=$IFS +IFS=$'\n' + for file in $(find /home/yannick/Documents/html/ -name "*.html") + do + lien=$(basename ${file%.*}) + echo '
      • '$lien'
      • ' >> $fichierindex + done +IFS=$OIFS +echo ' +
      + +' >> $fichierindex +``` + + +Entre deux \` \` (altgr 7) + +`entre deux altgr 7` + +python + +```python +#!/usr/bin/env python +import os +from gi.repository import Gtk +from gi.repository import AppIndicator3 + +class AppIndicatorExample: + def __init__(self, indicator_id): + self.ind = AppIndicator3.Indicator.new(str(indicator_id), os.path.abspath('sample_icon.svg'), AppIndicator3.IndicatorCategory.SYSTEM_SERVICES) + self.ind.set_status(AppIndicator3.IndicatorStatus.ACTIVE) + + # create a menu + self.menu = Gtk.Menu() + + item = Gtk.MenuItem(str(indicator_id)) + item.show() + self.menu.append(item) + + image = Gtk.ImageMenuItem(Gtk.STOCK_QUIT) + self.menu.append(image) + + self.menu.show() + + self.ind.set_menu(self.menu) + + def quit(self, widget, data=None): + Gtk.main_quit() + +if __name__ == "__main__": + indicator = AppIndicatorExample(1) + Gtk.main() +``` + +perl + +```perl +#!/usr/bin/perl -w + +use strict; +use warnings; + +use constant VERSION => 0.03; + +if(scalar @ARGV != 4) { + &help; +} + +my $image_web; +my $dimensions; + +# Détermination des arguments +for(my $i = 0; $i < scalar @ARGV; $i +=2) { + if($ARGV[$i] eq "-s") { + $dimensions = $ARGV[$i + 1]; + } + elsif($ARGV[$i] eq "-i") { + $image_web = $ARGV[$i + 1]; + } + else { + print STDERR "Argument $ARGV[$i] inconnu\n"; + &help; + } +} + +``` + +javascript + +```javascript + function init() { + /* Sidebar height set */ + $sidebarStyles = $('.sidebar').attr('style') + $sidebarStyles += ' min-height: ' + $(document).height() + 'px;'; + $('.sidebar').attr('style', $sidebarStyles); + + /* Secondary contact links */ + var $scontacts = $('#contact-list-secondary'); + var $contactList = $('#contact-list'); + + $scontacts.hide(); + $contactList.mouseenter(function(){ $scontacts.fadeIn(); }); + $contactList.mouseleave(function(){ $scontacts.fadeOut(); }); + + /** + * Tags & categories tab activation based on hash value. If hash is undefined then first tab is activated. + */ + function activateTab() { + if(['/tags.html', '/categories.html'].indexOf(window.location.pathname) > -1) { + var hash = window.location.hash; + if(hash) + $('.tab-pane').length && $('a[href="' + hash + '"]').tab('show'); + else + $('.tab-pane').length && $($('.cat-tag-menu li a')[0]).tab('show'); + } + } + + // watch hash change and activate relevant tab + $(window).on('hashchange', activateTab); + + // initial activation + activateTab(); + }; +``` + +**Liste des formats du bloc de code Markdown** +Les langues prises en charge dépendent fortement de l'analyseur Markdown que vous utilisez. Ce qui suit est une liste de plusieurs langues et formats courants que vous pouvez essayer. Si votre langue ne figure pas dans cette liste, je vous suggère d'essayer simplement si elle est supportée. Vous pouvez également consulter la documentation de votre langage Markdown spécifique. + +``` + actionscript3 + apache + applescript + asp + brainfuck + c + cfm + clojure + cmake + coffee-script, coffeescript, coffee + cpp – C++ + cs + csharp + css + csv + bash + diff + elixir + erb – HTML + Embedded Ruby + go + haml + http + java + javascript + json + jsx + less + lolcode + make – Makefile + markdown + matlab + nginx + objectivec + pascal + PHP + Perl + python + profile – python profiler output + rust + salt, saltstate – Salt + shell, sh, zsh, bash – Shell scripting + scss + sql + svg + swift + rb, jruby, ruby – Ruby + smalltalk + vim, viml – Vim Script + volt + vhdl + vue + xml – XML and also used for HTML with inline CSS and Javascript + yaml +``` + + +### Tableaux + +Pour créer un tableau vous devez placer une ligne de tirets (-) sous la ligne d'entête et séparer les colonnes avec des `|`. +Vous pouvez aussi préciser l'alignement en utilisant des `:. :` + +``` +| Aligné à gauche | Centré | Aligné à droite | +| :--------------- |:---------------:| -----:| +| Aligné à gauche | ce texte | Aligné à droite | +| Aligné à gauche | est | Aligné à droite | +| Aligné à gauche | centré | Aligné à droite | + +Markdown | Less | Pretty +--- | --- | --- +*Still* | `renders` | **nicely** +1 | 2 | 3 +``` + +| Aligné à gauche | Centré | Aligné à droite | +| :--------------- |:---------------:| -----:| +| Aligné à gauche | ce texte | Aligné à droite | +| Aligné à gauche | est | Aligné à droite | +| Aligné à gauche | centré | Aligné à droite | + +Markdown | Less | Pretty +--- | --- | --- +*Still* | `renders` | **nicely** +1 | 2 | 3 + +### Repli texte - Citations + +``` +> Le repli texte à l'aide de `>` est très pratique dans les courriels pour émuler un texte de réponse. +> Cette ligne fait partie de la même citation. + +Saut de citation. + +> Il s'agit d'une très longue ligne qui sera toujours citée correctement lorsqu'elle sera enveloppée. Oh, continuons à écrire pour nous assurer que la ligne est assez longue pour que tout le monde puisse la lire. Oh, vous pouvez *mettre* **Markdown** dans un blockquote. +``` + +> Le repli texte à l'aide de `>` est très pratique dans les courriels pour émuler un texte de réponse. +> Cette ligne fait partie de la même citation. + +Saut de citation. + +> Il s'agit d'une très longue ligne qui sera toujours citée correctement lorsqu'elle sera enveloppée. Oh, continuons à écrire pour nous assurer que la ligne est assez longue pour que tout le monde puisse la lire. Oh, vous pouvez *mettre* **Markdown** dans un blockquote. + +### Ligne Horizontale + +``` +Trois ou plus... + +--- + +Traits d'union + +*** + +Astérisques + +___ + +Soulignés +``` + +**Trois ou plus...** + +--- + +Traits d'union + +*** + +Astérisques + +___ + +Soulignés + + +### Ligne Breaks + +``` +Voici une ligne pour commencer. + +Cette ligne est séparée de la précédente par deux nouvelles lignes, ce qui en fait un *paragraphe séparé*. + +Cette ligne commence également un paragraphe séparé, mais... +Cette ligne n'est séparée que par deux espaces et une seule nouvelle ligne, c'est une ligne distincte dans le *même paragraphe*. + +``` + +Voici une ligne pour commencer. + +Cette ligne est séparée de la précédente par deux nouvelles lignes, ce qui en fait un *paragraphe séparé*. + +Cette ligne commence également un paragraphe séparé, mais... +Cette ligne n'est séparée que par deux espaces et une seule nouvelle ligne, il s'agit donc d'une ligne distincte dans le *même paragraphe*. + +### Titres + +Par défaut, pour rédiger un titre avec Markdown, on utilise le dièse. On le sépare du texte avec une espace. Pour créer des sous-titres de hiérarchie inférieure, et donc rédigés en plus petits, il suffit d’insérer des dièses supplémentaires. Comme pour l’édition HTML, vous pourrez créer jusque 6 niveaux de sous-titres. + +``` +# H1 +## H2 +### H3 +#### H4 +##### H5 +###### H6 + +Alternatively, for H1 and H2, an underline-ish style: + +Alt-H1 +====== + +Alt-H2 +------ +``` + +## Alerte et Tag + +### Alerte + +Success Text. +{:.success} + +Info Text. +{:.info} + +Warning Text. +{:.warning} + +Error Text. +{:.error} + +**markdown:** + + Success Text. + {:.success} +^ + Info Text. + {:.info} +^ + Warning Text. + {:.warning} +^ + Error Text. + {:.error} + +### Tag + +`success`{:.success} + +`info`{:.info} + +`warning`{:.warning} + +`error`{:.error} + +**markdown:** + + `success`{:.success} +^ + `info`{:.info} +^ + `warning`{:.warning} +^ + `error`{:.error} + +## Boutons + +| Type | Class Names | +| ---- | ---- | +| **base** | button | +| **type** | button\-\-primary, button\-\-secondary, button\-\-success, button\-\-info, button\-\-warning, button\-\-error, button\-\-outline\-primary, button\-\-outline\-secondary, button\-\-outline\-success, button\-\-outline\-info, button\-\-outline\-warning, button\-\-outline\-error | +| **shape** | button\-\-pill, button\-\-rounded, button\-\-circle | +| **size** | button\-\-md (default), button\-\-xs, button\-\-sm, button\-\-lg, button\-\-xl | + +### Primaire + +
      BUTTON
      + + [BUTTON](#){:.button.button--primary.button--pill} + +```html +BUTTON +``` + +### Secondaire + +
      BUTTON
      + + [BUTTON](#){:.button.button--secondary.button--pill} + +```html +BUTTON +``` + +### Succès + +
      BUTTON
      + + [BUTTON](#){:.button.button--success.button--pill} + +```html +BUTTON +``` + +### Outline + +
      BUTTON
      + + [BUTTON](#){:.button.button--outline-success.button--pill} + +```html +BUTTON +``` + +### Pill + +
      BUTTON
      + + [BUTTON](#){:.button.button--primary.button--pill} + +```html +BUTTON +``` + +### Arrondi + +
      BUTTON
      + + [BUTTON](#){:.button.button--primary.button--rounded} + +```html +BUTTON +``` + +### Cercle + +
      X
      + + [X](#){:.button.button--primary.button--circle} + +```html +X +``` + +### Extrêmement petit + +
      BUTTON
      + + [BUTTON](#){:.button.button--primary.button--rounded.button--xs} + +```html +BUTTON +``` + +### Petite taille + +
      BUTTON
      + + [BUTTON](#){:.button.button--primary.button--rounded.button--sm} + +```html +BUTTON +``` + +### Moyen + +
      BUTTON
      + + [BUTTON](#){:.button.button--primary.button--rounded} + +```html +BUTTON +``` + +### Large + +
      BUTTON
      + + [BUTTON](#){:.button.button--primary.button--rounded.button--lg} + +```html +BUTTON +``` + +### Extrêmement Large + +
      BUTTON
      + + [BUTTON](#){:.button.button--primary.button--rounded.button--xl} + +```html +BUTTON +``` + +## Graphes + +### MathJax + +Ajouter au Front matter `mathjax: true` + +``` +When $$a \ne 0$$, there are two solutions to $$ax^2 + bx + c = 0$$ +and they are + +$$x_1 = {-b + \sqrt{b^2-4ac} \over 2a}$$ + +$$x_2 = {-b - \sqrt{b^2-4ac} \over 2a} \notag$$ +``` + +When $$a \ne 0$$, there are two solutions to $$ax^2 + bx + c = 0$$ +and they are + +$$x_1 = {-b + \sqrt{b^2-4ac} \over 2a}$$ + +$$x_2 = {-b - \sqrt{b^2-4ac} \over 2a} \notag$$ + +### Mermaid + +* [Jekyll - Diagram with Mermaid](https://jojozhuang.github.io/tutorial/jekyll-diagram-with-mermaid/) + +Ajouter au Front matter `mermaid: true` + +```mermaid +graph LR + A --- B + B-->C[Happy] + B-->D(Sad); +``` + +Markdown + + ```mermaid + graph LR + A --- B + B-->C[Happy] + B-->D(Sad); + ``` + +Autre exemple + +```mermaid +graph TD + B[peace] + B-->C[fa:fa-ban forbidden] + B-->D(fa:fa-spinner); + B-->E(fa:fa-camera-retro perhaps?); +``` + +### Chart + +ajouter au Front matter `chart: true` + +**Line Chart** + +```chart +{ + "type": "line", + "data": { + "labels": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July" + ], + "datasets": [ + { + "label": "# of bugs", + "fill": false, + "lineTension": 0.1, + "backgroundColor": "rgba(75,192,192,0.4)", + "borderColor": "rgba(75,192,192,1)", + "borderCapStyle": "butt", + "borderDash": [], + "borderDashOffset": 0, + "borderJoinStyle": "miter", + "pointBorderColor": "rgba(75,192,192,1)", + "pointBackgroundColor": "#fff", + "pointBorderWidth": 1, + "pointHoverRadius": 5, + "pointHoverBackgroundColor": "rgba(75,192,192,1)", + "pointHoverBorderColor": "rgba(220,220,220,1)", + "pointHoverBorderWidth": 2, + "pointRadius": 1, + "pointHitRadius": 10, + "data": [ + 65, + 59, + 80, + 81, + 56, + 55, + 40 + ], + "spanGaps": false + } + ] + }, + "options": {} +} +``` + +**markdown:** + + ```chart + { + "type": "polarArea", + "data": { + "datasets": [ + { + "data": [ + 11, + 16, + 7, + 3, + 14 + ], + "backgroundColor": [ + "#FF6384", + "#4BC0C0", + "#FFCE56", + "#E7E9ED", + "#36A2EB" + ], + "label": "My dataset" + } + ], + "labels": [ + "Red", + "Green", + "Yellow", + "Grey", + "Blue" + ] + }, + "options": {} + } + ``` + +Pie chart + +```chart +{ + "type": "pie", + "data": { + "labels": ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"], + "datasets": [{ + "label": "Votes", + "data": [12, 19, 3, 5, 2, 3], + "backgroundColor": [ + "rgba(255, 99, 132, 0.2)", + "rgba(54, 162, 235, 0.2)", + "rgba(255, 206, 86, 0.2)", + "rgba(75, 192, 192, 0.2)", + "rgba(153, 102, 255, 0.2)", + "rgba(255, 159, 64, 0.2)" + ], + "borderColor": [ + "rgba(255, 99, 132, 1)", + "rgba(54, 162, 235, 1)", + "rgba(255, 206, 86, 1)", + "rgba(75, 192, 192, 1)", + "rgba(153, 102, 255, 1)", + "rgba(255, 159, 64, 1)" + ], + "borderWidth": 1 + }] + }, + "options": {} +} +``` + +## Vidéos + +### Youtube + +**Youtube (markdown)** +On affiche la première image de la vidéo , un clic permet la lecture sur le site **youtube** +Syntaxe dans le "post" + +``` +[![IMAGE ALT TEXT](https://img.youtube.com/vi/YOUTUBE_VIDEO_ID_HERE/0.jpg)](https://www.youtube.com/watch?v=YOUTUBE_VIDEO_ID_HERE "Video Title") +``` + +Exemple vidéo youtube : **Markdown tutorial** + +``` +[![Markdown tutorial](https://img.youtube.com/vi/6A5EpqqDOdk/0.jpg)](https://www.youtube.com/watch?v=6A5EpqqDOdk "Markdown tutorial") +``` + +[![Markdown tutorial](https://img.youtube.com/vi/6A5EpqqDOdk/0.jpg)](https://www.youtube.com/watch?v=6A5EpqqDOdk "Markdown tutorial") + +**Youtube (iframe)** + +``` + +``` + + + +### Iframe + +**Syntaxe directe (iframe)** + +``` + +``` + + + +### Video + +**HTML brut (video)** +Vous pouvez toujours écrire du HTML brut dans votre document "de balisage"markdown" : + +``` + +``` + + + +### Ted + +``` + +``` + + + +### Soundcloud + +``` +
      + +
      +``` + +
      + +
      + +### codepen + + + +## Images + +### Icônes + +TeXt uses Font Awesome for icons, you can search available icon code snippet [HERE](https://fontawesome.com/icons?d=gallery&q=donw&m=free). + + + +```html + +``` + +
      Download TeXt Theme
      + +```html + Download TeXt Theme +``` + +| Type | Class Names | +| ---- | ---- | +| **base** | image | +| **size** | image\-\-md (default), image\-\-xs, image\-\-sm, image\-\-lg, image\-\-xl | + +### Bordure + +
      +
      +
      +![Image](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/docs/assets/images/image.jpg "Image_border"){:.border} +
      +
      + ![Image](path-to-image){:.border} +
      +
      +
      + +### Ombre + +
      +
      +
      +![Image](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/docs/assets/images/image.jpg "Image_shadow"){:.shadow} +
      +
      + ![Image](path-to-image){:.shadow} +
      +
      +
      + +### Arrondi + +
      +
      +
      +![Image](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/docs/assets/images/image.jpg "Image_rounded"){:.rounded} +
      +
      + ![Image](path-to-image){:.rounded} +
      +
      +
      + +### Cercle + +
      +
      +
      +![Image](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/docs/assets/images/image.jpg "Image_circle"){:.circle} +
      +
      + ![Image](path-to-image){:.circle} +
      +
      +
      + +### Mélange + +
      +
      +
      +![Image](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/docs/assets/images/image.jpg "Image_border+rounded"){:.border.rounded} +
      +
      + ![Image](path-to-image){:.border.rounded} +
      +
      +
      + +
      +
      +
      +![Image](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/docs/assets/images/image.jpg "Image_circle+shadow"){:.circle.shadow} +
      +
      + ![Image](path-to-image){:.circle.shadow} +
      +
      +
      + +
      +
      +
      +![Image](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/docs/assets/images/image.jpg "Image_circle+border+shadow"){:.circle.border.shadow} +
      +
      + ![Image](path-to-image){:.circle.border.shadow} +
      +
      +
      + +### Exemples + +``` +![alt text](/images/A20-olinuxino-micro-top.png "Top view") +``` + +![alt text](/images/A20-olinuxino-micro-top.png "Top view") + +Images largeur fixée (si hauteur ajouter `height="36px"`) +Avec hauteur et largeur image `{:height="36px" width="30px"}` + +``` +![image](/images/A20-olinuxino-micro-top.png){:width="300px"} +``` + +![image](/images/A20-olinuxino-micro-top.png){:width="300px"} + +### Extrêmement Petit + + + +```html + +``` + +### Petit + + + +```html + +``` + +### Moyen + + + +```html + +``` + +### Large + + + +```html + +``` + +### Extrêmement Large + + + +```html + +``` + +## Elément + +### Contenu + +
      +
      +
      +

      Photograph

      +
      +
      +

      + A photograph is an image created by light falling on a photosensitive surface, usually photographic film or an electronic image sensor, such as a CCD or a CMOS chip. +

      +
      +
      +
      + +```html +
      +
      +
      +

      Photograph

      +
      +
      +

      ...

      +
      +
      +
      +``` + +### Image et Contenu + + +
      +
      + +
      +
      +
      +

      Photograph

      +
      +
      +
      + +```html +
      +
      + +
      +
      +
      +

      Photograph

      +
      +
      +
      +``` + +
      +
      + +
      +
      +
      +

      Photograph

      +
      +
      +

      + A photograph is an image created by light falling on a photosensitive surface, usually photographic film or an electronic image sensor, such as a CCD or a CMOS chip. +

      +
      +
      +
      + +```html +
      +
      + +
      +
      +
      +

      Photograph

      +
      +
      +

      ...

      +
      +
      +
      +``` + +### Taille Image + +
      +
      + +
      +
      +
      +

      Photograph

      +
      +
      +
      + +```html +
      +
      + +
      +
      +
      +

      Photograph

      +
      +
      +
      +``` + +
      +
      + +
      +
      +
      +

      Photograph

      +
      +
      +

      + A photograph is an image created by light falling on a photosensitive surface, usually photographic film or an electronic image sensor, such as a CCD or a CMOS chip. +

      +
      +
      +
      + +```html +
      +
      + +
      +
      +
      +

      Photograph

      +
      +
      +

      ...

      +
      +
      +
      +``` + +
      +
      + +
      +
      +
      +

      Photograph

      +
      +
      +

      + A photograph is an image created by light falling on a photosensitive surface, usually photographic film or an electronic image sensor, such as a CCD or a CMOS chip. +

      +
      +
      +
      + +```html +
      +
      + +
      +
      +
      +

      Photograph

      +
      +
      +

      ...

      +
      +
      +
      +``` + +## Format Carte + +### Image + +
      +
      + +
      +
      + +```html +
      +
      + +
      +
      +``` + +### Contenu + +
      +
      +
      +

      Photograph

      +
      +

      A photograph is an image created by light falling on a photosensitive surface, usually photographic film or an electronic image sensor, such as a CCD or a CMOS chip.

      +
      +
      + +```html +
      +
      +
      +

      Photograph

      +
      +

      ...

      +
      +
      +``` + +### Image et Contenu + +
      +
      + +
      +
      +
      +

      Photograph

      +
      +
      +
      + +```html +
      +
      + +
      +
      +
      +

      Photograph

      +
      +
      +
      +``` + +
      +
      + +
      +
      +
      +

      Photograph

      +
      +

      + A photograph is an image created by light falling on a photosensitive surface, usually photographic film or an electronic image sensor, such as a CCD or a CMOS chip. +

      +
      +
      + +```html +
      +
      + +
      +
      +
      +

      Photograph

      +
      +

      ...

      +
      +
      +``` + +### Image Overlay + +
      +
      + +
      +

      Photograph

      +
      +
      +
      + +```html +
      +
      + +
      +

      Photograph

      +
      +
      +
      +``` + +
      +
      + +
      +

      Photograph

      +
      +
      +
      + +```html +
      +
      + +
      +

      Photograph

      +
      +
      +
      +``` + +### Flat + +
      +
      + +
      +
      +
      +

      Photograph

      +
      +
      +
      + +```html +
      +
      + +
      +
      +
      +

      Photograph

      +
      +
      +
      +``` + +### Image Clicquable + +
      +
      +
      + +
      +
      +
      + +```html + +
      +
      + +
      +
      +
      +``` + +## Class hero + + + +### Normal + +
      +
      +

      Hero

      +
      +
      + +```html +
      +
      +

      Hero

      +
      +
      +``` + +### Centré + +
      +
      +

      Hero

      +
      +
      + +```html +
      +
      +

      Hero

      +
      +
      +``` + +### Theme sombre + +
      +
      +

      Hero

      +
      +
      + +```html +
      +
      +

      Hero

      +
      +
      +``` + +### Image arrière plan + +
      +
      +

      Hero

      +
      +
      + +```html +
      +
      +

      Hero

      +
      +
      +``` + +
      +
      +

      Hero

      +

      There's a hero, If you look inside your heart,

      +

      You don't have to be afraid of what you are.

      +
      +
      + +```html +
      +
      +

      Hero

      +

      ...

      +
      +
      +``` + +### Hauteur + +
      +
      +

      Hero

      +

      There's a hero, If you look inside your heart,

      +

      You don't have to be afraid of what you are.

      +
      +
      + +```html +
      +
      +

      Hero

      +

      ...

      +
      +
      +``` + +### Image arrière plan Centrée + +
      +
      +

      Hero

      +

      There's a hero, If you look inside your heart,

      +

      You don't have to be afraid of what you are.

      +
      +
      + +```html +
      +
      +

      Hero

      +

      ...

      +
      +
      +``` + +
      +
      +

      Hero

      +

      There's a hero, If you look inside your heart,

      +

      You don't have to be afraid of what you are.

      +
      +
      + +```html + + +
      +
      +

      Hero

      +

      ...

      +
      +
      +``` + +## swiper + + + +`Alpha`{:.warning} + +### Normal + +
      +
      +
      1
      +
      2
      +
      3
      +
      4
      +
      5
      +
      6
      +
      7
      +
      + +
      +
      + +
      + +```css +.swiper-demo { + height: 220px; +} +``` + +```html +
      +
      +
      1
      +
      2
      +
      3
      +
      4
      +
      5
      +
      6
      +
      7
      +
      +
      +
      +
      +``` + +```js +{%- raw -%} +{%- include scripts/lib/swiper.js -%} +var SOURCES = window.TEXT_VARIABLES.sources; +window.Lazyload.js(SOURCES.jquery, function() { + $('.swiper-demo').swiper(); +}); +{% endraw %} +``` + +### Thème clair + +
      +
      +
      1
      +
      2
      +
      3
      +
      4
      +
      5
      +
      6
      +
      7
      +
      +
      +
      +
      + +### Thème sombre + +
      +
      +
      1
      +
      2
      +
      3
      +
      4
      +
      5
      +
      6
      +
      7
      +
      +
      +
      +
      + + diff --git a/yannstatic.sh b/yannstatic.sh new file mode 100755 index 0000000..b6542ff --- /dev/null +++ b/yannstatic.sh @@ -0,0 +1,4 @@ +#!/bin/sh +cd /srv/media/yannstatic +/home/yann/gems/bin/jekyll build --watch --incremental --source "/srv/media/yannstatic" --destination "/srv/media/yannstatic/static" +