diff --git a/404.md b/404.md new file mode 100644 index 0000000..fa2e148 --- /dev/null +++ b/404.md @@ -0,0 +1,13 @@ +--- +title: "404" +excerpt: "Page Not Found" +permalink: 404.html +indexing: false +sitemap: false +--- + +Sorry, but the page could not be found. + +Are you looking for: + +{% include nav-default.html %} diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..3a8358c --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +alembic.darn.es diff --git a/Gemfile b/Gemfile index bd07a20..b4e2a20 100644 --- a/Gemfile +++ b/Gemfile @@ -1,9 +1,3 @@ -# frozen_string_literal: true - source "https://rubygems.org" -gem "github-pages", group: :jekyll_plugins - gemspec - -gem "webrick", "~> 1.8" diff --git a/Gemfile.lock b/Gemfile.lock index 9c15786..e886539 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,9 +1,17 @@ PATH remote: . specs: - jekyll-theme-tactile (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) + alembic-jekyll-theme (4.1.0) + jekyll (~> 4.1) + jekyll-commonmark (~> 1.3.1) + jekyll-feed (~> 0.15) + jekyll-include-cache (~> 0.2) + jekyll-mentions (~> 1.6.0) + jekyll-paginate (~> 1.1.0) + jekyll-redirect-from (~> 0.16) + jekyll-seo-tag (~> 2.7.1) + jekyll-sitemap (~> 1.4.0) + jemoji (~> 0.12) GEM remote: https://rubygems.org/ @@ -20,311 +28,105 @@ GEM tzinfo (~> 2.0) addressable (2.8.6) public_suffix (>= 2.0.2, < 6.0) - ast (2.4.2) base64 (0.2.0) bigdecimal (3.1.6) - coffee-script (2.4.1) - coffee-script-source - execjs - coffee-script-source (1.12.2) colorator (1.1.0) commonmarker (0.23.10) concurrent-ruby (1.2.3) connection_pool (2.4.1) - dnsruby (1.70.0) - simpleidn (~> 0.2.1) - drb (2.2.0) - ruby2_keywords + drb (2.2.1) em-websocket (0.5.3) eventmachine (>= 0.12.9) http_parser.rb (~> 0) - ethon (0.16.0) - ffi (>= 1.15.0) eventmachine (1.2.7) - execjs (2.9.1) - faraday (2.9.0) - faraday-net_http (>= 2.0, < 3.2) - faraday-net_http (3.1.0) - net-http ffi (1.16.3) forwardable-extended (2.6.0) gemoji (4.1.0) - github-pages (231) - github-pages-health-check (= 1.18.2) - jekyll (= 3.9.5) - jekyll-avatar (= 0.8.0) - jekyll-coffeescript (= 1.2.2) - jekyll-commonmark-ghpages (= 0.4.0) - jekyll-default-layout (= 0.1.5) - jekyll-feed (= 0.17.0) - jekyll-gist (= 1.5.0) - jekyll-github-metadata (= 2.16.1) - jekyll-include-cache (= 0.2.1) - jekyll-mentions (= 1.6.0) - jekyll-optional-front-matter (= 0.3.2) - jekyll-paginate (= 1.1.0) - jekyll-readme-index (= 0.3.0) - jekyll-redirect-from (= 0.16.0) - jekyll-relative-links (= 0.6.1) - jekyll-remote-theme (= 0.4.3) - jekyll-sass-converter (= 1.5.2) - jekyll-seo-tag (= 2.8.0) - jekyll-sitemap (= 1.4.0) - jekyll-swiss (= 1.0.0) - jekyll-theme-architect (= 0.2.0) - jekyll-theme-cayman (= 0.2.0) - jekyll-theme-dinky (= 0.2.0) - jekyll-theme-hacker (= 0.2.0) - jekyll-theme-leap-day (= 0.2.0) - jekyll-theme-merlot (= 0.2.0) - jekyll-theme-midnight (= 0.2.0) - jekyll-theme-minimal (= 0.2.0) - jekyll-theme-modernist (= 0.2.0) - jekyll-theme-primer (= 0.6.0) - jekyll-theme-slate (= 0.2.0) - jekyll-theme-tactile (= 0.2.0) - jekyll-theme-time-machine (= 0.2.0) - jekyll-titles-from-headings (= 0.5.3) - jemoji (= 0.13.0) - kramdown (= 2.4.0) - kramdown-parser-gfm (= 1.1.0) - liquid (= 4.0.4) - mercenary (~> 0.3) - minima (= 2.5.1) - nokogiri (>= 1.13.6, < 2.0) - rouge (= 3.30.0) - terminal-table (~> 1.4) - github-pages-health-check (1.18.2) - addressable (~> 2.3) - dnsruby (~> 1.60) - octokit (>= 4, < 8) - public_suffix (>= 3.0, < 6.0) - typhoeus (~> 1.3) + google-protobuf (3.25.3-arm64-darwin) html-pipeline (2.14.3) activesupport (>= 2) nokogiri (>= 1.4) - html-proofer (3.19.4) - addressable (~> 2.3) - mercenary (~> 0.3) - nokogiri (~> 1.13) - parallel (~> 1.10) - rainbow (~> 3.0) - typhoeus (~> 1.3) - yell (~> 2.0) http_parser.rb (0.8.0) i18n (1.14.1) concurrent-ruby (~> 1.0) - jekyll (3.9.5) + jekyll (4.3.3) addressable (~> 2.4) colorator (~> 1.0) em-websocket (~> 0.5) - i18n (>= 0.7, < 2) - jekyll-sass-converter (~> 1.0) + i18n (~> 1.0) + jekyll-sass-converter (>= 2.0, < 4.0) jekyll-watch (~> 2.0) - kramdown (>= 1.17, < 3) + kramdown (~> 2.3, >= 2.3.1) + kramdown-parser-gfm (~> 1.0) liquid (~> 4.0) - mercenary (~> 0.3.3) + mercenary (>= 0.3.6, < 0.5) pathutil (~> 0.9) - rouge (>= 1.7, < 4) + rouge (>= 3.0, < 5.0) safe_yaml (~> 1.0) - jekyll-avatar (0.8.0) - jekyll (>= 3.0, < 5.0) - jekyll-coffeescript (1.2.2) - coffee-script (~> 2.2) - coffee-script-source (~> 1.12) - jekyll-commonmark (1.4.0) - commonmarker (~> 0.22) - jekyll-commonmark-ghpages (0.4.0) - commonmarker (~> 0.23.7) - jekyll (~> 3.9.0) - jekyll-commonmark (~> 1.4.0) - rouge (>= 2.0, < 5.0) - jekyll-default-layout (0.1.5) - jekyll (>= 3.0, < 5.0) + terminal-table (>= 1.8, < 4.0) + webrick (~> 1.7) + jekyll-commonmark (1.3.1) + commonmarker (~> 0.14) + jekyll (>= 3.7, < 5.0) jekyll-feed (0.17.0) jekyll (>= 3.7, < 5.0) - jekyll-gist (1.5.0) - octokit (~> 4.2) - jekyll-github-metadata (2.16.1) - jekyll (>= 3.4, < 5.0) - octokit (>= 4, < 7, != 4.4.0) jekyll-include-cache (0.2.1) jekyll (>= 3.7, < 5.0) jekyll-mentions (1.6.0) html-pipeline (~> 2.3) jekyll (>= 3.7, < 5.0) - jekyll-optional-front-matter (0.3.2) - jekyll (>= 3.0, < 5.0) jekyll-paginate (1.1.0) - jekyll-readme-index (0.3.0) - jekyll (>= 3.0, < 5.0) jekyll-redirect-from (0.16.0) jekyll (>= 3.3, < 5.0) - jekyll-relative-links (0.6.1) - jekyll (>= 3.3, < 5.0) - jekyll-remote-theme (0.4.3) - addressable (~> 2.0) - jekyll (>= 3.5, < 5.0) - jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0) - rubyzip (>= 1.3.0, < 3.0) - jekyll-sass-converter (1.5.2) - sass (~> 3.4) - jekyll-seo-tag (2.8.0) + jekyll-sass-converter (3.0.0) + sass-embedded (~> 1.54) + jekyll-seo-tag (2.7.1) jekyll (>= 3.8, < 5.0) jekyll-sitemap (1.4.0) jekyll (>= 3.7, < 5.0) - jekyll-swiss (1.0.0) - jekyll-theme-architect (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-cayman (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-dinky (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-hacker (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-leap-day (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-merlot (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-midnight (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-minimal (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-modernist (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-primer (0.6.0) - jekyll (> 3.5, < 5.0) - jekyll-github-metadata (~> 2.9) - jekyll-seo-tag (~> 2.0) - jekyll-theme-slate (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-time-machine (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-titles-from-headings (0.5.3) - jekyll (>= 3.3, < 5.0) jekyll-watch (2.2.1) listen (~> 3.0) jemoji (0.13.0) gemoji (>= 3, < 5) html-pipeline (~> 2.2) jekyll (>= 3.0, < 5.0) - json (2.7.1) kramdown (2.4.0) rexml kramdown-parser-gfm (1.1.0) kramdown (~> 2.0) - language_server-protocol (3.17.0.3) liquid (4.0.4) listen (3.9.0) rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) - mercenary (0.3.6) - minima (2.5.1) - jekyll (>= 3.5, < 5.0) - jekyll-feed (~> 0.9) - jekyll-seo-tag (~> 2.1) + mercenary (0.4.0) minitest (5.22.2) mutex_m (0.2.0) - net-http (0.4.1) - uri nokogiri (1.16.2-arm64-darwin) racc (~> 1.4) - octokit (4.25.1) - faraday (>= 1, < 3) - sawyer (~> 0.9) - parallel (1.24.0) - parser (3.3.0.5) - ast (~> 2.4.1) - racc pathutil (0.16.2) forwardable-extended (~> 2.6) public_suffix (5.0.4) racc (1.7.3) - rack (3.0.9.1) - rainbow (3.1.1) rb-fsevent (0.11.2) rb-inotify (0.10.1) ffi (~> 1.0) - regexp_parser (2.9.0) rexml (3.2.6) - rouge (3.30.0) - rubocop (1.60.2) - json (~> 2.3) - language_server-protocol (>= 3.17.0) - parallel (~> 1.10) - parser (>= 3.3.0.2) - rainbow (>= 2.2.2, < 4.0) - regexp_parser (>= 1.8, < 3.0) - rexml (>= 3.2.5, < 4.0) - rubocop-ast (>= 1.30.0, < 2.0) - ruby-progressbar (~> 1.7) - unicode-display_width (>= 2.4.0, < 3.0) - rubocop-ast (1.30.0) - parser (>= 3.2.1.0) - rubocop-github (0.20.0) - rubocop (>= 1.37) - rubocop-performance (>= 1.15) - rubocop-rails (>= 2.17) - rubocop-performance (1.20.2) - rubocop (>= 1.48.1, < 2.0) - rubocop-ast (>= 1.30.0, < 2.0) - rubocop-rails (2.23.1) - activesupport (>= 4.2.0) - rack (>= 1.1) - rubocop (>= 1.33.0, < 2.0) - rubocop-ast (>= 1.30.0, < 2.0) - ruby-progressbar (1.13.0) - ruby2_keywords (0.0.5) - rubyzip (2.3.2) + rouge (4.2.0) safe_yaml (1.0.5) - sass (3.7.4) - sass-listen (~> 4.0.0) - sass-listen (4.0.0) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - sawyer (0.9.2) - addressable (>= 2.3.5) - faraday (>= 0.17.3, < 3) - simpleidn (0.2.1) - unf (~> 0.1.4) - terminal-table (1.6.0) - typhoeus (1.4.1) - ethon (>= 0.9.0) + sass-embedded (1.71.1-arm64-darwin) + google-protobuf (~> 3.25) + terminal-table (3.0.2) + unicode-display_width (>= 1.1.1, < 3) tzinfo (2.0.6) concurrent-ruby (~> 1.0) - unf (0.1.4) - unf_ext - unf_ext (0.0.9.1) unicode-display_width (2.5.0) - uri (0.13.0) - w3c_validators (1.3.7) - json (>= 1.8) - nokogiri (~> 1.6) - rexml (~> 3.2) webrick (1.8.1) - yell (2.2.2) PLATFORMS arm64-darwin-22 DEPENDENCIES - github-pages - html-proofer (~> 3.0) - jekyll-theme-tactile! - rubocop-github (~> 0.16) - w3c_validators (~> 1.3) - webrick (~> 1.8) + alembic-jekyll-theme! BUNDLED WITH 2.3.26 diff --git a/LICENSE b/LICENSE index 670154e..87f45e1 100644 --- a/LICENSE +++ b/LICENSE @@ -1,116 +1,21 @@ -CC0 1.0 Universal - -Statement of Purpose - -The laws of most jurisdictions throughout the world automatically confer -exclusive Copyright and Related Rights (defined below) upon the creator and -subsequent owner(s) (each and all, an "owner") of an original work of -authorship and/or a database (each, a "Work"). - -Certain owners wish to permanently relinquish those rights to a Work for the -purpose of contributing to a commons of creative, cultural and scientific -works ("Commons") that the public can reliably and without fear of later -claims of infringement build upon, modify, incorporate in other works, reuse -and redistribute as freely as possible in any form whatsoever and for any -purposes, including without limitation commercial purposes. These owners may -contribute to the Commons to promote the ideal of a free culture and the -further production of creative, cultural and scientific works, or to gain -reputation or greater distribution for their Work in part through the use and -efforts of others. - -For these and/or other purposes and motivations, and without any expectation -of additional consideration or compensation, the person associating CC0 with a -Work (the "Affirmer"), to the extent that he or she is an owner of Copyright -and Related Rights in the Work, voluntarily elects to apply CC0 to the Work -and publicly distribute the Work under its terms, with knowledge of his or her -Copyright and Related Rights in the Work and the meaning and intended legal -effect of CC0 on those rights. - -1. Copyright and Related Rights. A Work made available under CC0 may be -protected by copyright and related or neighboring rights ("Copyright and -Related Rights"). Copyright and Related Rights include, but are not limited -to, the following: - - i. the right to reproduce, adapt, distribute, perform, display, communicate, - and translate a Work; - - ii. moral rights retained by the original author(s) and/or performer(s); - - iii. publicity and privacy rights pertaining to a person's image or likeness - depicted in a Work; - - iv. rights protecting against unfair competition in regards to a Work, - subject to the limitations in paragraph 4(a), below; - - v. rights protecting the extraction, dissemination, use and reuse of data in - a Work; - - vi. database rights (such as those arising under Directive 96/9/EC of the - European Parliament and of the Council of 11 March 1996 on the legal - protection of databases, and under any national implementation thereof, - including any amended or successor version of such directive); and - - vii. other similar, equivalent or corresponding rights throughout the world - based on applicable law or treaty, and any national implementations thereof. - -2. Waiver. To the greatest extent permitted by, but not in contravention of, -applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and -unconditionally waives, abandons, and surrenders all of Affirmer's Copyright -and Related Rights and associated claims and causes of action, whether now -known or unknown (including existing as well as future claims and causes of -action), in the Work (i) in all territories worldwide, (ii) for the maximum -duration provided by applicable law or treaty (including future time -extensions), (iii) in any current or future medium and for any number of -copies, and (iv) for any purpose whatsoever, including without limitation -commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes -the Waiver for the benefit of each member of the public at large and to the -detriment of Affirmer's heirs and successors, fully intending that such Waiver -shall not be subject to revocation, rescission, cancellation, termination, or -any other legal or equitable action to disrupt the quiet enjoyment of the Work -by the public as contemplated by Affirmer's express Statement of Purpose. - -3. Public License Fallback. Should any part of the Waiver for any reason be -judged legally invalid or ineffective under applicable law, then the Waiver -shall be preserved to the maximum extent permitted taking into account -Affirmer's express Statement of Purpose. In addition, to the extent the Waiver -is so judged Affirmer hereby grants to each affected person a royalty-free, -non transferable, non sublicensable, non exclusive, irrevocable and -unconditional license to exercise Affirmer's Copyright and Related Rights in -the Work (i) in all territories worldwide, (ii) for the maximum duration -provided by applicable law or treaty (including future time extensions), (iii) -in any current or future medium and for any number of copies, and (iv) for any -purpose whatsoever, including without limitation commercial, advertising or -promotional purposes (the "License"). The License shall be deemed effective as -of the date CC0 was applied by Affirmer to the Work. Should any part of the -License for any reason be judged legally invalid or ineffective under -applicable law, such partial invalidity or ineffectiveness shall not -invalidate the remainder of the License, and in such case Affirmer hereby -affirms that he or she will not (i) exercise any of his or her remaining -Copyright and Related Rights in the Work or (ii) assert any associated claims -and causes of action with respect to the Work, in either case contrary to -Affirmer's express Statement of Purpose. - -4. Limitations and Disclaimers. - - a. No trademark or patent rights held by Affirmer are waived, abandoned, - surrendered, licensed or otherwise affected by this document. - - b. Affirmer offers the Work as-is and makes no representations or warranties - of any kind concerning the Work, express, implied, statutory or otherwise, - including without limitation warranties of title, merchantability, fitness - for a particular purpose, non infringement, or the absence of latent or - other defects, accuracy, or the present or absence of errors, whether or not - discoverable, all to the greatest extent permissible under applicable law. - - c. Affirmer disclaims responsibility for clearing rights of other persons - that may apply to the Work or any use thereof, including without limitation - any person's Copyright and Related Rights in the Work. Further, Affirmer - disclaims responsibility for obtaining any necessary consents, permissions - or other rights required for any use of the Work. - - d. Affirmer understands and acknowledges that Creative Commons is not a - party to this document and has no duty or obligation with respect to this - CC0 or use of the Work. - -For more information, please see - +MIT License + +Copyright (c) 2017 David Darnes + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index bc859f9..fbb8443 100644 --- a/README.md +++ b/README.md @@ -1,118 +1,286 @@ -# Go to our website: [LLaVA-XRay-Vision](https://lord-of-bugs.github.io/LLaVA-XRay-Vision/) +# [Alembic](https://alembic.darn.es/) +[![Gem Version](https://badge.fury.io/rb/alembic-jekyll-theme.svg)](https://badge.fury.io/rb/alembic-jekyll-theme) + +⚗ A Jekyll boilerplate theme designed to be a starting point for any Jekyll website. + +![Screenshot](https://raw.githubusercontent.com/daviddarnes/alembic/master/screenshot.png) -# The Tactile theme +[](https://buymeacoffee.com/daviddarnes#support) -[![.github/workflows/ci.yaml](https://github.com/pages-themes/tactile/actions/workflows/ci.yaml/badge.svg)](https://github.com/pages-themes/tactile/actions/workflows/ci.yaml) [![Gem Version](https://badge.fury.io/rb/jekyll-theme-tactile.svg)](https://badge.fury.io/rb/jekyll-theme-tactile) +## Contents +- [About](#about) +- [Features](#features) +- [Examples](#examples) +- [Installation](#installation) +- [Customising](#customising) +- [Configuration](#configuration) + - [Gem dependency settings](#gem-dependency-settings) + - [Site settings](#site-settings) + - [Site performance settings](#site-performance-settings) + - [Site navigation](#site-navigation) + - [Custom fonts](#custom-fonts) +- [Using includes](#using-includes) +- [Page layouts](#page-layouts) +- [Page and Post options](#page-and-post-options) +- [Credits](#credits) -*Tactile is a Jekyll theme for GitHub Pages. You can [preview the theme to see what it looks like](http://pages-themes.github.io/tactile), or even [use it today](#usage).* +## About -![Thumbnail of Tactile](thumbnail.png) +**Alembic is a starting point for [Jekyll](https://jekyllrb.com/) projects. Rather than starting from scratch, this boilerplate theme is designed to get rolling immediately. Install it, configure it, tweak it, push it.** -## Usage +## Features -To use the Tactile theme: +- Available as a **theme gem** and **GitHub Pages** theme +- Clear and elegant design that can be used out of the box or as solid starting point +- Tested in all major browsers, including **IE and Edge** +- Built in **Service Worker** so it can work offline and on slow connections +- **Configurable colours** and typography in a single settings file +- Extensive set of **shortcodes** to include various elements; such as buttons, icons, figure images and more +- Solid **typographic framework** from [Sassline](https://sassline.com/) +- Configurable navigation via a single file +- Modular Jekyll components +- Post category support in the form of a single post index page grouped by category +- Built in live search using JavaScript +- **Contact form** built in using [Formspree](https://formspree.io/) or [Netlify Forms](https://www.netlify.com/features/#forms) +- Designed with **[Siteleaf](http://www.siteleaf.com/)** in mind +- Has 9 of the most popular networks as performant sharing buttons +- Has documentation -1. Add the following to your site's `_config.yml`: +## Examples - ```yml - remote_theme: pages-themes/tactile@v0.2.0 - plugins: - - jekyll-remote-theme # add this line to the plugins list if you already have one - ``` +Here are a few examples of Alembic out in the wild being used in a variety of ways: -2. Optionally, if you'd like to preview your site on your computer, add the following to your site's `Gemfile`: +- [billmei.net](https://billmei.net/) +- [bawejakunal.github.io](https://bawejakunal.github.io/) +- [case2111.github.io](https://case2111.github.io/) +- [karateca.org](https://www.karateca.org/) - ```ruby - gem "github-pages", group: :jekyll_plugins - ``` +## Installation -## Customizing +### Quick setup -### Configuration variables +To give you a running start I've put together some starter kits that you can download, fork or even deploy immediately: -Tactile will respect the following variables, if set in your site's `_config.yml`: +- Vanilla Jekyll starter kit: + [![Deploy to Netlify](https://www.netlify.com/img/deploy/button.svg)](https://app.netlify.com/start/deploy?repository=https://github.com/daviddarnes/alembic-kit) +- Forestry starter kit: + [![Deploy to Forestry](https://assets.forestry.io/import-to-forestry.svg)](https://app.forestry.io/quick-start?repo=daviddarnes/alembic-forestry-kit&engine=jekyll) + [![Deploy to Netlify](https://www.netlify.com/img/deploy/button.svg)](https://app.netlify.com/start/deploy?repository=https://github.com/daviddarnes/alembic-forestry-kit) +- Netlify CMS starter kit: + [![Deploy to Netlify](https://www.netlify.com/img/deploy/button.svg)](https://app.netlify.com/start/deploy?repository=https://github.com/daviddarnes/alembic-netlifycms-kit&stack=cms) -```yml -title: [The title of your site] -description: [A short description of your site's purpose] -``` +- GitHub Pages with remote theme kit - **[Download kit](https://github.com/daviddarnes/alembic-kit/archive/remote-theme.zip)** +- Stackbit starter kit: + [![Create with Stackbit](https://assets.stackbit.com/badge/create-with-stackbit.svg)](https://app.stackbit.com/create?theme=https://github.com/daviddarnes/alembic-stackbit-kit) + +### As a Jekyll theme + +1. Add `gem "alembic-jekyll-theme"` to your `Gemfile` to add the theme as a dependancy +2. Run the command `bundle install` in the root of project to install the theme and its dependancies +3. Add `theme: alembic-jekyll-theme` to your `_config.yml` file to set the site theme +4. Run `bundle exec jekyll serve` to build and serve your site +5. Done! Use the [configuration](#configuration) documentation and the example [`_config.yml`](https://github.com/daviddarnes/alembic/blob/master/_config.yml) file to set things like the navigation, contact form and social sharing buttons + +### As a GitHub Pages remote theme + +1. Add `gem "jekyll-remote-theme"` to your `Gemfile` to add the theme as a dependancy +2. Run the command `bundle install` in the root of project to install the jekyll remote theme gem as a dependancy +3. Add `jekyll-remote-theme` to the list of `plugins` in your `_config.yml` file +4. Add `remote_theme: daviddarnes/alembic@main` to your `_config.yml` file to set the site theme +5. Run `bundle exec jekyll serve` to build and serve your site +6. Done! Use the [configuration](#configuration) documentation and the example [`_config.yml`](https://github.com/daviddarnes/alembic/blob/master/_config.yml) file to set things like the navigation, contact form and social sharing buttons + +### As a Boilerplate / Fork + +_(deprecated, not recommended)_ + +1. [Fork the repo](https://github.com/daviddarnes/alembic#fork-destination-box) +2. Replace the `Gemfile` with one stating all the gems used in your project +3. Delete the following unnecessary files/folders: `.github`, `LICENSE`, `screenshot.png`, `CNAME` and `alembic-jekyll-theme.gemspec` +4. Run the command `bundle install` in the root of project to install the jekyll remote theme gem as a dependancy +5. Run `bundle exec jekyll serve` to build and serve your site +6. Done! Use the [configuration](#configuration) documentation and the example [`_config.yml`](https://github.com/daviddarnes/alembic/blob/master/_config.yml) file to set things like the navigation, contact form and social sharing buttons + +## Customising + +When using Alembic as a theme means you can take advantage of the file overriding method. This allows you to overwrite any file in this theme with your own custom file, by matching the file name and path. The most common example of this would be if you want to add your own styles or change the core style settings. + +To add your own styles copy the [`styles.scss`](https://github.com/daviddarnes/alembic/blob/master/assets/styles.scss) into your own project with the same file path (`assets/styles.scss`). From there you can add your own styles, you can even optionally ignore the theme styles by removing the `@import "alembic";` line. + +If you're looking to set your own colours and fonts you can overwrite them by matching the variable names from the [`_settings.scss`](https://github.com/daviddarnes/alembic/blob/master/_sass/_settings.scss) file in your own `styles.scss`, make sure to state them before the `@import "alembic";` line so they take effect. The settings are a mixture of custom variables and settings from [Sassline](https://medium.com/@jakegiltsoff/sassline-v2-0-e424b2881e7e) - follow the link to find out how to configure the typographic settings. + +## Configuration + +There are a number of optional settings for you to configure. Use the example [`_config.yml`](https://github.com/daviddarnes/alembic/blob/master/_config.yml) file in the repo and use the documentation below to configure your site: + +### Gem dependency settings + +`twitter`, `author` and `social` values will need to be changed to the projects' social information or removed. Look for the `Gem settings` comment within the `/_config.yml` file. These values are for the [jekyll-seo-tag](https://github.com/jekyll/jekyll-seo-tag) - follow the link to find out more. + +### Site settings + +You'll need to change the `description`, `title` and `url` to match with the project. You'll also need to replace the logos, default social and default offline images in the `/assets/` directory with your own graphics. Setting the site language can be done with `lang`, the theme will default to `en-US`. The `email` needs to be changed to the email you want to receive contact form enquires with. The `disqus` value can be changed to your project username on [Disqus](https://disqus.com), remove this from the `/_config.yml` file if you don't want comments enabled. Look for the `Site settings` comment within the `/_config.yml` file. The `repo` setting is optional, for now, and can be removed entirely, if you wish. + +Google Analytics can be enabled via the site configuration too. Add your tracking ID to the `/_config.yml` file in the following method: `google_analytics: 'UA-XXXXXXXX-1'`. By default all IPs of site visitors are anonymous to maintain a level of privacy for the audience. If you wish to turn this off set the `google_analytics_anonymize_ip` key to `false`. + +Date format can be customised in the `/_config.yml` with the option `date_format` (please refer to Liquid date filters documentation for learning about formatting possibilities). Only placeholder formatting is supported, do not try to use ordinal dates introduced in Jekyll 3.8. + +The `short_name` option within `/_config.yml` is to add a custom name to the site's web application counterpart. When the website is added to a device this name will appear alonside the app icon. The short name will default to the site title if this isn't set. + +### Site performance settings + +Alembic comes with a couple of options to enhance the speed and overall performance of the site you build upon it. + +By default the built in Service Worker is enabled, and will work on a 'network first' method. Meaning if there's no internet connection the content the Service Worker has cached will be used until the connection comes back. It will always look for a live version of the code first. To disable the Service Worker add an option called `service_worker` with a value of `false` in the `/_config.yml` file. + +Another option to speed up Alembic is to enable inline CSS, which is off by default. You can enable this by setting `css_inline: true` inside your `/_config.yml` file. By switching to inline styles you bypass the use `/assets/styles.scss`, any custom styles will need to be added in `/_includes/site-styles.html` or in a new custom file. + +Please note that these options aren't a "silver bullet" for making your site faster, make sure to audit and debug your site to get the best performance for your situation. + +### Site navigation + +There are a total of 4 different navigation types: + +- `navigation_header`: The links shown in the header (it is also used on the 404 page) +- `navigation_footer`: The links shown in the footer +- `social_links`: The social icon links that are shown in the sidebar +- `sharing_links`: The social sharing buttons that are shown at the bottom of blog posts + +All navigations can be edited using the `_config.yml` file. To see example usage either look for the `Site navigation` comment within the `/_config.yml` file or see [the nav-share.html include](#nav-sharehtml). + +If there are no items for the `navigation_header` or `navigation_footer`, they will fallback to a list of pages within the site. The `social_navigation` properties should either be one that is already in the list (so `Twitter` or `Facebook`) or a regular `link`, this is so an icon can be set for the link. + +### Custom fonts + +Alembic comes with custom fonts served from Google fonts. By default it requests Merriweather but this can be any font from any provider assuming it supports requesting fonts in the same manner and does not require javascript. + +This can be configured under the `custom_fonts` key. + +- `urls`: The urls supplied to you from your font provider (eg https://fonts.googleapis.com/css2?family=Merriweather). For best performance try to use as few urls as possible +- `preconnect`: (optional) If your font provider serves the font files from another domain it can be useful to make a connection to that domain in advance. For example google load the font files from fonts.gstatic.com. This can be omitted if not required + +If you want to customise this further you can find the include for custom fonts in `_includes/site-custom-fonts.html`. + +## Using includes + +There are 2 main types of includes: ones designed for the site and ones that are designed as shortcodes. Here are a list of the shortcode includes: + +### `button.html` +A button that can link to a page of any kind. + +Example usage: `{% include button.html text="I'm a button" link="https://david.darn.es" %}` + +Available options: +- `text`: The text of the button _required_ +- `link`: The link that the button goes to _required_ +- `icon`: The icon that is added to the end of the button text +- `color`: The colour of the button + +### `figure.html` +An image with optional caption. + +Example usage: `{% include figure.html image="/uploads/feature-image.jpg" caption="Check out my photo" %}` + +Available options: +- `image`: The image shown _required_ +- `caption`: A caption to explain the image +- `position`: The position of the image; `left`, `right` or `center` +- `width` & `height`: Optional width and height attributes of the containing image + +### `icon.html` +An icon. + +Example usage: `{% include icon.html id="twitter" %}` + +Available options: +- `id`: The reference for the icon _required_ +- `title`: The accessible label for the icon +- `color`: The desired colour of the icon +- `width` & `height`: Width and height attributes for the icon, default is `16` + +### `nav-share.html` +A set of buttons that share the current page to various social networks, which is controlled within the `_config.yml` file under the `sharing_links` keyword. -Additionally, you may choose to set the following optional variables: +Example usage: `{% include nav-share.html %}` -```yml -show_downloads: ["true" or "false" (unquoted) to indicate whether to provide a download URL] -google_analytics: [Your Google Analytics tracking ID] +Available options: +``` yml +Twitter: "#1DA1F2" +facebook: "#3B5998" +Pinterest: "#BD081C" +LinkedIn: "#0077B5" +tumblr: "#36465D" +Reddit: "#FF4500" +HackerNews: "#ff6600" +DesignerNews: "#2D72D9" +Email: true ``` -### Stylesheet +_The first item is the name of the network (must be one of the ones stated above) and the second is the colour of the button. To remove a button remove the line of the same name._ -If you'd like to add your own custom styles: +### `video.html` +A YouTube video. -1. Create a file called `/assets/css/style.scss` in your site -2. Add the following content to the top of the file, exactly as shown: - ```scss - --- - --- +Example usage: `{% include video.html id="zrkcGL5H3MU" %}` - @import "{{ site.theme }}"; - ``` -3. Add any custom CSS (or Sass, including imports) you'd like immediately after the `@import` line +Available options: +- `id`: The YouTube ID for the video _required_ -*Note: If you'd like to change the theme's Sass variables, you must set new values before the `@import` line in your stylesheet.* +### `map.html` +A Google map. _See Google [My Maps](https://www.google.com/mymaps)_ -### Layouts +Example usage: `{% include map.html id="1UT-2Z-Vg_MG_TrS5X2p8SthsJhc" %}` -If you'd like to change the theme's HTML layout: +Available options: +- `id`: The map ID for the video _required_ -1. For some changes such as a custom `favicon`, you can add custom files in your local `_includes` folder. The files [provided with the theme](https://github.com/pages-themes/tactile/tree/master/_includes) provide a starting point and are included by the [original layout template](https://github.com/pages-themes/tactile/blob/master/_layouts/default.html). -2. For more extensive changes, [copy the original template](https://github.com/pages-themes/tactile/blob/master/_layouts/default.html) from the theme's repository
(*Pro-tip: click "raw" to make copying easier*) -3. Create a file called `/_layouts/default.html` in your site -4. Paste the default layout content copied in the first step -5. Customize the layout as you'd like +### `site-form.html` +Adds a contact form to the page. This can be used with [Formspree](https://formspree.io/) or [Netlify Forms](https://www.netlify.com/docs/form-handling/) depending on your setup. -### Customizing Google Analytics code +Example usage: `{% include site-form.html %}` -Google has released several iterations to their Google Analytics code over the years since this theme was first created. If you would like to take advantage of the latest code, paste it into `_includes/head-custom-google-analytics.html` in your Jekyll site. +Available options: +- `netlify_form=true`: Set whether you would like to use Netlify Forms, otherwise the form will default to Formspree +- `name`: Give the form a name, by default the form is called "Contact". The name will be reflected when form submissions come through in Netlify or in your email client. The name is also used in the label and input elements for accessibility -### Overriding GitHub-generated URLs -Templates often rely on URLs supplied by GitHub such as links to your repository or links to download your project. If you'd like to override one or more default URLs: +Use the `email` option in the `/_config.yml` to change to the desired email. -1. Look at [the template source](https://github.com/pages-themes/tactile/blob/master/_layouts/default.html) to determine the name of the variable. It will be in the form of `{{ site.github.zip_url }}`. -2. Specify the URL that you'd like the template to use in your site's `_config.yml`. For example, if the variable was `site.github.url`, you'd add the following: - ```yml - github: - zip_url: http://example.com/download.zip - another_url: another value - ``` -3. When your site is built, Jekyll will use the URL you specified, rather than the default one provided by GitHub. +### `site-search.html` +Adds a search form to the page. -*Note: You must remove the `site.` prefix, and each variable name (after the `github.`) should be indent with two space below `github:`.* +Example usage: `{% include site-search.html %}` -For more information, see [the Jekyll variables documentation](https://jekyllrb.com/docs/variables/). +This include has no options. This include will add a block of javascript to the page and javascript reference in order for the search field to work correctly. -## Roadmap +### `site-before-start.html` & `site-before-end.html` +Optional html includes for adding scripts, css, js or any embed code you wish to add to every page without the need to overwrite the entire `default.html` template. -See the [open issues](https://github.com/pages-themes/tactile/issues) for a list of proposed features (and known issues). +**Example usage:** These are different to other includes as they are designed to be overwritten. If you create a `site-before-start.html` file in the `_includes/` the contents of the file will be included immediately before the closing `` tag. If you create a `site-before-end.html` file the contents of the file will be included immediately before the closing `` tag. -## Project philosophy +## Page layouts -The Tactile theme is intended to make it quick and easy for GitHub Pages users to create their first (or 100th) website. The theme should meet the vast majority of users' needs out of the box, erring on the side of simplicity rather than flexibility, and provide users the opportunity to opt-in to additional complexity if they have specific needs or wish to further customize their experience (such as adding custom CSS or modifying the default layout). It should also look great, but that goes without saying. +As well as `page`, `post`, `blog`, there are a few alternative layouts that can be used on pages: -## Contributing +- `categories`: Shows all posts grouped by category, with an index of categories in a left hand sidebar +- `search`: Adds a search field to the page as well as a simplified version of the sidebar to allow more focus on the search results -Interested in contributing to Tactile? We'd love your help. Tactile is an open source project, built one contribution at a time by users like you. See [the CONTRIBUTING file](docs/CONTRIBUTING.md) for instructions on how to contribute. +## Page and Post options -### Previewing the theme locally +There are some more specific options you can apply when creating a page or a post: -If you'd like to preview the theme locally (for example, in the process of proposing a change): +- `aside: true`: Adds a sidebar to the page or post, this is false by default and will not appear +- `comments: false`: Turns off comments for that post +- `feature_image: "/uploads/feature-image.jpg"`: Adds a full width feature image at the top of the page +- `feature_text: "Example text"`: Adds text to the top of the page as a full width feature with solid colour; supports markdown. This can be used in conjunction with the `feature_image` option to create a feature image with text over it +- `indexing: false`: Adds a `noindex` meta element to the `` to stop crawler bots from indexing the page, used on the 404 page -1. Clone down the theme's repository (`git clone https://github.com/pages-themes/tactile`) -2. `cd` into the theme's directory -3. Run `script/bootstrap` to install the necessary dependencies -4. Run `bundle exec jekyll serve` to start the preview server -5. Visit [`localhost:4000`](http://localhost:4000) in your browser to preview the theme +> **Note:** The Post List Page options are actually in the collection data within the `_config.yml` file. -### Running tests +## Credits -The theme contains a minimal test suite, to ensure a site with the theme would build successfully. To run the tests, simply run `script/cibuild`. You'll need to run `script/bootstrap` once before the test script will work. +- Thanks to [Simple Icons](https://simpleicons.org/) for providing the brand icons, by [Dan Leech](https://twitter.com/bathtype) +- Thanks to [Sassline](https://sassline.com/) for the typographic basis, by [Jake Giltsoff](https://twitter.com/jakegiltsoff) +- Thanks to [Flexbox mixin](https://github.com/mastastealth/sass-flex-mixin) by [Brian Franco](https://twitter.com/brianfranco) +- Thanks to [Normalize](https://necolas.github.io/normalize.css/) by [Nicolas Gallagher](https://twitter.com/necolas) and [Jonathan Neal](https://twitter.com/jon_neal). +- Thanks to [pygments-css](http://richleland.github.io/pygments-css/) for the autumn syntax highlighting, by [Rich Leland](https://twitter.com/richleland) diff --git a/_config.yml b/_config.yml index 00edaf9..d0f0a66 100644 --- a/_config.yml +++ b/_config.yml @@ -1,5 +1,161 @@ -title: LLaVA X-Ray Vision -description: A data science capstone project exploring Deep Learning, Medical Imaging, and multi-modal Large Language Models. -show_downloads: false -google_analytics: -theme: jekyll-theme-tactile \ No newline at end of file +# Site configuration +# 1. Files excluded from Jekyll builds +# 2. Installed Gems +# 3. Gem settings +# 4. Jekyll settings +# 5. Collections +# 6. Jekyll collections settings +# 7. Site settings +# 8. Site favicons & manifest icons +# 9. Site navigation + +# 1. Files excluded from Jekyll builds +exclude: +- README.md +- CODE_OF_CONDUCT.md +- CONTRIBUTING.md +- screenshot.png +- LICENSE +- CNAME +- Gemfile +- Gemfile.lock +- alembic-jekyll-theme.gemspec +- .jekyll-cache + +# 2. Installed Gems +plugins: +- jekyll-sitemap +- jekyll-mentions +- jekyll-paginate +- jekyll-seo-tag +- jekyll-redirect-from +- jekyll-feed +- jekyll-commonmark +- jekyll-include-cache +- jemoji + +# 3. Gem settings +paginate: 2 # jekyll-paginate > items per page +paginate_path: blog/page:num # jekyll-paginate > blog page +jekyll-mentions: https://twitter.com # jekyll-mentions > service used when @replying +twitter: + username: DavidDarnes # jekyll-seo-tag > Owners twitter username +author: DavidDarnes # jekyll-seo-tag > default author +social: # jekyll-seo-tag > social overrides + name: David Darnes # jekyll-seo-tag > real name + links: # jekyll-seo-tag > social aliases (sameAs) + - https://twitter.com/DavidDarnes + - https://www.facebook.com/daviddarnes + - https://www.linkedin.com/in/daviddarnes + - https://github.com/daviddarnes +# markdown: CommonMark # Markdown parse settings, CommonMark performs slightly better an others in build time +# commonmark: + # options: ["SMART", "FOOTNOTES"] + # extensions: ["strikethrough", "autolink", "table"] + +# 4. Jekyll settings +sass: + style: compressed # Style compression +permalink: pretty # Permalink style (/YYYY/MM/DD/page-name/) +excerpt_separator: # Marks end of excerpt in posts +timezone: Europe/London # Timezone for blog posts and alike + +# 5. Collections +collections: + posts: + title: Posts # Needed for Siteleaf + output: true + description: "My thoughts and ideas" # The post list page content + feature_text: | + Welcome to the blog + feature_image: "https://picsum.photos/2560/600?image=866" + +# 6. Jekyll collections settings +defaults: + - + scope: + path: "" + values: + image: "/assets/default-social-image.png" # Default image for sharing + - + scope: + path: "" + type: "posts" + values: + layout: post # Set the default layout for posts + - + scope: + path: "" + type: "pages" + values: + layout: page # Set the default layout for pages + +# 7. Site settings +encoding: utf-8 # Make sure the encoding is right +lang: en-GB # Set the site language +title: "Alembic" # Site name or title, also used in jekyll-seo-tag +logo: "/assets/logos/logo.svg" # Site logo, also used in jekyll-seo-tag +description: "Alembic is a starting point for Jekyll projects. Rather than starting from scratch, this boilerplate is designed to get the ball rolling immediately" # Site description and default description, also used in jekyll-seo-tag +url: "https://alembic.darn.es" # Site url, also used in jekyll-seo-tag +baseurl: "" +repo: "https://github.com/daviddarnes/alembic" +email: "me@daviddarnes.com" +# disqus: "alembic-1" # Blog post comments, uncomment the option and set the site ID from your Disqus account +# date_format: "%-d %B %Y" # Blog post date formatting using placeholder formatting +# google_analytics: "" +# google_analytics_anonymize_ip: "" +# service_worker: false # Will turn off the service worker if set to false +# short_name: "Al" # The web application short name, defaults to the site title +css_inline: true # Will insert all styles into a single diff --git a/_includes/site-sw.html b/_includes/site-sw.html new file mode 100644 index 0000000..0e82156 --- /dev/null +++ b/_includes/site-sw.html @@ -0,0 +1,20 @@ + diff --git a/_includes/video.html b/_includes/video.html new file mode 100644 index 0000000..b6e0faa --- /dev/null +++ b/_includes/video.html @@ -0,0 +1,3 @@ +
+ +
diff --git a/_layouts/blog.html b/_layouts/blog.html new file mode 100644 index 0000000..331d774 --- /dev/null +++ b/_layouts/blog.html @@ -0,0 +1,34 @@ +--- +layout: default +--- + +{% include site-header.html %} + +
+ +
+ +
+ + {% if paginator.posts %} + {% assign collectiondata = site.collections | where: "label", page.collectionpage | first %} +

{{ collectiondata.title }}

+ {{ collectiondata.description | markdownify }} + + {% else %} +

{{ page.title }}

+ {{ content }} + + {% endif %} + +
+ + {% include post-list.html %} + +
+ + {% if page.aside == true %}{% include site-aside.html %}{% endif %} + +
+ +{% include site-footer.html %} diff --git a/_layouts/categories.html b/_layouts/categories.html new file mode 100644 index 0000000..62a20b6 --- /dev/null +++ b/_layouts/categories.html @@ -0,0 +1,27 @@ +--- +layout: default +--- + +{% include site-header.html %} + +
+ +
+ +
+ +

{{ page.title }}

+ + {{ content }} + +
+ + {% include post-categories.html %} + +
+ + {% if page.aside == true %}{% include site-aside.html align="left" %}{% endif %} + +
+ +{% include site-footer.html %} diff --git a/_layouts/default.html b/_layouts/default.html index 336a493..9d1616c 100644 --- a/_layouts/default.html +++ b/_layouts/default.html @@ -1,53 +1,58 @@ + - + + - - - - - -{% seo %} - {% include head-custom.html %} + + {% if page.indexing == false %} + + {% endif %} + + {% if page.collectionpage %} + {% seo title=false %} + + {% assign collectiondata = site.collections | where: "label", page.collectionpage | first %} + {{ collectiondata.title }} - {{ site.title }} + + + + {% else %} + {% seo %} + {% endif %} + {% if site.fonts.preconnect_urls %} + {% for url in site.fonts.preconnect_urls %} + + {% endfor %} + {% endif %} + + + + + {% if site.css_inline == true %} + {% include site-styles.html %} + {% else %} + + {% endif %} + + {% if site.favicons or site.avatarurl %}{% include site-favicons.html %}{% endif %} + + {% if site.google_analytics %}{% include site-analytics.html %}{% endif %} + + {% include site-fonts.html %} + + {% include site-before-start.html %} - -
-
- -
-

{{ page.title | default: site.title | default: site.github.repository_name }}

-

{{ page.description | default: site.description | default: site.github.project_tagline }}

-
-
- {% if site.show_downloads %} - Download .zip - Download .tar.gz - {% endif %} - {% if site.github.public %} - {% if site.github.is_project_page %} - View on GitHub - {% else %} - View on GitHub - {% endif %} - {% endif %} -
-
-
- {{ content }} -
- -
- {% if site.github.is_project_page %} - {{ site.title | default: site.github.repository_name }} is maintained by {{ site.github.owner_name }}
- {% endif %} - This page was generated by GitHub Pages. -
- -
-
+ + {% include site-icons.svg %} + + {{ content }} + + {% if site.service_worker != false %}{% include site-sw.html %}{% endif %} + + {% include site-before-end.html %} + diff --git a/_layouts/page.html b/_layouts/page.html new file mode 100644 index 0000000..647b602 --- /dev/null +++ b/_layouts/page.html @@ -0,0 +1,21 @@ +--- +layout: default +--- + +{% include site-header.html %} + +
+ +
+ +

{{ page.title }}

+ + {{ content }} + +
+ + {% if page.aside == true %}{% include site-aside.html %}{% endif %} + +
+ +{% include site-footer.html %} diff --git a/_layouts/post.html b/_layouts/post.html new file mode 100644 index 0000000..91a68ac --- /dev/null +++ b/_layouts/post.html @@ -0,0 +1,25 @@ +--- +layout: default +--- + +{% include site-header.html %} + +
+ +
+ +

{{ page.title }}

+ {% include post-meta.html %} + {{ content }} + + {% include nav-share.html %} + + {% include post-comments.html %} + +
+ + {% if page.aside == true %}{% include site-aside.html %}{% endif %} + +
+ +{% include site-footer.html %} diff --git a/_posts/2016-08-27-example-post-one.md b/_posts/2016-08-27-example-post-one.md new file mode 100644 index 0000000..4a6837c --- /dev/null +++ b/_posts/2016-08-27-example-post-one.md @@ -0,0 +1,15 @@ +--- +title: Description of an Alembic +categories: +- General +- External sources +feature_image: "https://picsum.photos/2560/600?image=872" +--- + +The complete distilling apparatus consists of three parts: the "cucurbit" (Arabic ḳarʿa, Greek βίκος), the still pot containing the liquid to be distilled, which is heated by a flame; the "head" or "cap" (Arabic anbiḳ, Greek ἄμβιξ) which fits over the mouth of the cucurbit to receive the vapors, with an attached downward-sloping "tube" (Greek σωλήν), leading to the "receiver" (Arabic ḳābila, Greek ἄγγος or φιάλη) container. + + + +Retorts have the "cap" and the "cucurbit" made into one. The anbik is also called the raʾs (head) of the cucurbit. The liquid in the cucurbit is heated or boiled; the vapour rises into the anbik, where it cools by contact with the walls and condenses, running down the spout into the receiver. A modern descendant of the alembic is the pot still, used to produce distilled beverages. + +_Originally from [Alembic - Wikipedia](https://en.wikipedia.org/wiki/Alembic)_ diff --git a/_posts/2016-08-28-example-post-two.md b/_posts/2016-08-28-example-post-two.md new file mode 100644 index 0000000..a35c41c --- /dev/null +++ b/_posts/2016-08-28-example-post-two.md @@ -0,0 +1,18 @@ +--- +title: History of the Alembic +categories: +- History +- External sources +feature_text: | + The History of the Alembic tool +--- + +Dioscorides' ambix (described in his De materia medica) is a helmet-shaped lid for gathering condensed mercury. For Athenaeus (~ 225 C.E.) it is a bottle or flask. For later chemists it denotes various parts of crude distillation devices. + + + +Alembic drawings appear in works of Cleopatra the Alchemist, Synesius, and Zosimos of Panopolis. There were alembics with two (dibikos) and three (tribikos) receivers.[4] According to Zosimos of Panopolis, the alembic was invented by Mary the Jewess.[5] + +The anbik is described by Ibn al-Awwam in his Kitab al-Filaha (Book of Agriculture), where he explains how rose-water is distilled. Amongst others, it is mentioned in the Mafatih al-Ulum (Key of Sciences) of Khwarizmi and the Kitab al-Asrar (Book of Secrets) of Al-Razi. Some illustrations occur in the Latin translations of works which are attributed to Geber.[2] + +_Originally from [Alembic - Wikipedia](https://en.wikipedia.org/wiki/Alembic)_ diff --git a/_posts/2016-08-29-example-post-three.md b/_posts/2016-08-29-example-post-three.md new file mode 100644 index 0000000..de259a0 --- /dev/null +++ b/_posts/2016-08-29-example-post-three.md @@ -0,0 +1,18 @@ +--- +title: Description of a Pot Still +categories: +- General +excerpt: | + A pot still is a type of still used in distilling spirits such as whisky or brandy. Heat is applied directly to the pot containing the wash (for whisky) or wine (for brandy). +feature_text: | + ## The Pot Still + The modern pot still is a descendant of the alembic, an earlier distillation device +feature_image: "https://picsum.photos/2560/600?image=733" +image: "https://picsum.photos/2560/600?image=733" +--- + +A pot still is a type of still used in distilling spirits such as whisky or brandy. Heat is applied directly to the pot containing the wash (for whisky) or wine (for brandy). This is called a batch distillation (as opposed to a continuous distillation). + +At standard atmospheric pressure, alcohol boils at 78 °C (172 °F), while water boils at 100 °C (212 °F). During distillation, the vapour contains more alcohol than the liquid. When the vapours are condensed, the resulting liquid contains a higher concentration of alcohol. In the pot still, the alcohol and water vapour combine with esters and flow from the still through the condensing coil. There they condense into the first distillation liquid, the so-called "low wines". The low wines have a strength of about 25–35% alcohol by volume, and flow into a second still. It is then distilled a second time to produce the colourless spirit, collected at about 70% alcohol by volume. Colour is added through maturation in an oak aging barrel, and develops over time. + +The modern pot still is a descendant of the alembic, an earlier distillation device. diff --git a/_sass/_flex.scss b/_sass/_flex.scss new file mode 100644 index 0000000..4246b67 --- /dev/null +++ b/_sass/_flex.scss @@ -0,0 +1,394 @@ +// 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) { + -webkit-box-ordinal-group: $int + 1; + -webkit-order: $int; + -moz-order: $int; + -ms-flex-order: $int; + order: $int; +} + +//---------------------------------------------------------------------- + +// 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/_normalize.scss b/_sass/_normalize.scss new file mode 100644 index 0000000..18ddf7f --- /dev/null +++ b/_sass/_normalize.scss @@ -0,0 +1,419 @@ +/*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */ + +/** + * 1. Change the default font family in all browsers (opinionated). + * 2. Prevent adjustments of font size after orientation changes in IE and iOS. + */ + +html { + font-family: sans-serif; /* 1 */ + -ms-text-size-adjust: 100%; /* 2 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/** + * Remove the margin in all browsers (opinionated). + */ + +body { + margin: 0; +} + +/* HTML5 display definitions + ========================================================================== */ + +/** + * Add the correct display in IE 9-. + * 1. Add the correct display in Edge, IE, and Firefox. + * 2. Add the correct display in IE. + */ + +article, +aside, +details, /* 1 */ +figcaption, +figure, +footer, +header, +main, /* 2 */ +menu, +nav, +section, +summary { /* 1 */ + display: block; +} + +/** + * Add the correct display in IE 9-. + */ + +audio, +canvas, +progress, +video { + display: inline-block; +} + +/** + * Add the correct display in iOS 4-7. + */ + +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress { + vertical-align: baseline; +} + +/** + * Add the correct display in IE 10-. + * 1. Add the correct display in IE. + */ + +template, /* 1 */ +[hidden] { + display: none; +} + +/* Links + ========================================================================== */ + +/** + * 1. Remove the gray background on active links in IE 10. + * 2. Remove gaps in links underline in iOS 8+ and Safari 8+. + */ + +a { + background-color: transparent; /* 1 */ + -webkit-text-decoration-skip: objects; /* 2 */ +} + +/** + * Remove the outline on focused links when they are also active or hovered + * in all browsers (opinionated). + */ + +a:active, +a:hover { + outline-width: 0; +} + +/* Text-level semantics + ========================================================================== */ + +/** + * 1. Remove the bottom border in Firefox 39-. + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + +abbr[title] { + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ + text-decoration: underline dotted; /* 2 */ +} + +/** + * Prevent the duplicate application of `bolder` by the next rule in Safari 6. + */ + +b, +strong { + font-weight: inherit; +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + +b, +strong { + font-weight: bolder; +} + +/** + * Add the correct font style in Android 4.3-. + */ + +dfn { + font-style: italic; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/** + * Add the correct background and color in IE 9-. + */ + +mark { + background-color: #ff0; + color: #000; +} + +/** + * Add the correct font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove the border on images inside links in IE 10-. + */ + +img { + border-style: none; +} + +/** + * Hide the overflow in IE. + */ + +svg:not(:root) { + overflow: hidden; +} + +/* Grouping content + ========================================================================== */ + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +code, +kbd, +pre, +samp { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/** + * Add the correct margin in IE 8. + */ + +figure { + margin: 1em 40px; +} + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + +hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ +} + +/* Forms + ========================================================================== */ + +/** + * 1. Change font properties to `inherit` in all browsers (opinionated). + * 2. Remove the margin in Firefox and Safari. + */ + +button, +input, +select, +textarea { + font: inherit; /* 1 */ + margin: 0; /* 2 */ +} + +/** + * Restore the font weight unset by the previous rule. + */ + +optgroup { + font-weight: bold; +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ + +button, +input { /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ + +button, +select { /* 1 */ + text-transform: none; +} + +/** + * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` + * controls in Android 4. + * 2. Correct the inability to style clickable types in iOS and Safari. + */ + +button, +html [type="button"], /* 1 */ +[type="reset"], +[type="submit"] { + -webkit-appearance: button; /* 2 */ +} + +/** + * Remove the inner border and padding in Firefox. + */ + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ + +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Change the border, margin, and padding in all browsers (opinionated). + */ + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ + +legend { + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ +} + +/** + * Remove the default vertical scrollbar in IE. + */ + +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10-. + * 2. Remove the padding in IE 10-. + */ + +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ + +[type="search"] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/** + * Remove the inner padding and cancel buttons in Chrome and Safari on OS X. + */ + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * Correct the text style of placeholders in Chrome, Edge, and Safari. + */ + +::-webkit-input-placeholder { + color: inherit; + opacity: 0.54; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ + +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} diff --git a/_sass/_sassline-base.scss b/_sass/_sassline-base.scss new file mode 100644 index 0000000..443489a --- /dev/null +++ b/_sass/_sassline-base.scss @@ -0,0 +1,6 @@ +// Import Sassline base SCSS files in order so variables are read correctly. +@import "sassline-base/reset"; +@import "sassline-base/variables"; +@import "sassline-base/modular-scale"; +@import "sassline-base/mixins"; +@import "sassline-base/typography"; diff --git a/_sass/_settings.scss b/_sass/_settings.scss new file mode 100644 index 0000000..ccdc60e --- /dev/null +++ b/_sass/_settings.scss @@ -0,0 +1,38 @@ +// Background colours +$backgroundColour: #ffffff !default; +$codeBackgroundColour: #fafafa !default; +$featureBackgroundColour: #f9fafa !default; +$accentColour: #05bf85 !default; + +// Text colours +$headingColour: #242e2b !default; +$bodyColour: #384743 !default; +$linkColour: #05bf85 !default; +$hoverColour: #008000 !default; +$focusColour: #fa407a !default; +$captionColour: #a8adac !default; +$white: #ffffff !default; + +// Typography +$bodytype: ( + font-family: "Georgia, serif", + regular: 400, + bold: 700, + italic: italic, + cap-height: 0.75 +) !default; + +$headingtype: ( + font-family: '"Merriweather", serif', + regular: 400, + bold: 700, + cap-height: 0.75 +) !default; + +$monospacetype: ( + font-family: "Menlo, monospace", + regular: 400, + cap-height: 0.68 +) !default; + +// TIP: Load custom fonts in _config.yaml diff --git a/_sass/_syntax.scss b/_sass/_syntax.scss new file mode 100644 index 0000000..dc60655 --- /dev/null +++ b/_sass/_syntax.scss @@ -0,0 +1,61 @@ +.hll { background-color: #ffffcc } +.c { color: #999988; font-style: italic } /* Comment */ +.err { color: #a61717; background-color: #e3d2d2 } /* Error */ +.k { color: #000000; font-weight: bold } /* Keyword */ +.o { color: #000000; font-weight: bold } /* Operator */ +.cm { color: #999988; font-style: italic } /* Comment.Multiline */ +.cp { color: #999999; font-weight: bold; font-style: italic } /* Comment.Preproc */ +.c1 { color: #999988; font-style: italic } /* Comment.Single */ +.cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */ +.gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ +.ge { color: #000000; font-style: italic } /* Generic.Emph */ +.gr { color: #aa0000 } /* Generic.Error */ +.gh { color: #999999 } /* Generic.Heading */ +.gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ +.go { color: #888888 } /* Generic.Output */ +.gp { color: #555555 } /* Generic.Prompt */ +.gs { font-weight: bold } /* Generic.Strong */ +.gu { color: #aaaaaa } /* Generic.Subheading */ +.gt { color: #aa0000 } /* Generic.Traceback */ +.kc { color: #000000; font-weight: bold } /* Keyword.Constant */ +.kd { color: #000000; font-weight: bold } /* Keyword.Declaration */ +.kn { color: #000000; font-weight: bold } /* Keyword.Namespace */ +.kp { color: #000000; font-weight: bold } /* Keyword.Pseudo */ +.kr { color: #000000; font-weight: bold } /* Keyword.Reserved */ +.kt { color: #445588; font-weight: bold } /* Keyword.Type */ +.m { color: #009999 } /* Literal.Number */ +.s { color: #d01040 } /* Literal.String */ +.na { color: #008080 } /* Name.Attribute */ +.nb { color: #0086B3 } /* Name.Builtin */ +.nc { color: #445588; font-weight: bold } /* Name.Class */ +.no { color: #008080 } /* Name.Constant */ +.nd { color: #3c5d5d; font-weight: bold } /* Name.Decorator */ +.ni { color: #800080 } /* Name.Entity */ +.ne { color: #990000; font-weight: bold } /* Name.Exception */ +.nf { color: #990000; font-weight: bold } /* Name.Function */ +.nl { color: #990000; font-weight: bold } /* Name.Label */ +.nn { color: #555555 } /* Name.Namespace */ +.nt { color: #000080 } /* Name.Tag */ +.nv { color: #008080 } /* Name.Variable */ +.ow { color: #000000; font-weight: bold } /* Operator.Word */ +.w { color: #bbbbbb } /* Text.Whitespace */ +.mf { color: #009999 } /* Literal.Number.Float */ +.mh { color: #009999 } /* Literal.Number.Hex */ +.mi { color: #009999 } /* Literal.Number.Integer */ +.mo { color: #009999 } /* Literal.Number.Oct */ +.sb { color: #d01040 } /* Literal.String.Backtick */ +.sc { color: #d01040 } /* Literal.String.Char */ +.sd { color: #d01040 } /* Literal.String.Doc */ +.s2 { color: #d01040 } /* Literal.String.Double */ +.se { color: #d01040 } /* Literal.String.Escape */ +.sh { color: #d01040 } /* Literal.String.Heredoc */ +.si { color: #d01040 } /* Literal.String.Interpol */ +.sx { color: #d01040 } /* Literal.String.Other */ +.sr { color: #009926 } /* Literal.String.Regex */ +.s1 { color: #d01040 } /* Literal.String.Single */ +.ss { color: #990073 } /* Literal.String.Symbol */ +.bp { color: #999999 } /* Name.Builtin.Pseudo */ +.vc { color: #008080 } /* Name.Variable.Class */ +.vg { color: #008080 } /* Name.Variable.Global */ +.vi { color: #008080 } /* Name.Variable.Instance */ +.il { color: #009999 } /* Literal.Number.Integer.Long */ diff --git a/_sass/_theme.scss b/_sass/_theme.scss new file mode 100644 index 0000000..8bfd4fc --- /dev/null +++ b/_sass/_theme.scss @@ -0,0 +1,457 @@ +// Structural elements +body { + background: $backgroundColour; + color: $bodyColour; + height: 100%; + display: flex; + @include flex-direction(column); + overflow-x: hidden; +} + +.container { + width: 90%; + max-width: 1200px; + margin: 0 auto; +} + + +// Header, feature and footer +.header, +.footer { + .nav { + text-align: right; + } + .logo { + @include flex(0 0 auto); + } + .container { + @include flexbox; + @include flex-direction(row); + @include justify-content(space-between); + padding: 1rem 0; + @include breakpoint(break-1) { + @include align-items(center); + } + } +} + +.header .nav { + display: flex; + flex-direction: column-reverse; + align-items: flex-end; + justify-content: flex-end; + overflow: hidden; +} + +.feature { + padding-bottom: .4rem; + margin-bottom: 1.6rem; + text-align: center; + background: $featureBackgroundColour; + background-size: cover; + background-position: center; + .container { + min-height: 35vh; + max-width: 60%; + @include flex-direction(column); + @include justify-content(center); + } +} + +.logo { + display: inline-block; + line-height: 0; + max-height: 4rem; + @include flexbox; + @include align-items(center); + img { + max-height: 5rem; + } +} + +.nav { + a { + padding: .2rem; + } + &--social a { + display: inline-block; + line-height: 1; + } +} + +.small { + padding-top: .8rem; + color: $captionColour; + display: inline-block; +} + +.footer { + background: $headingColour; + color: $captionColour; + a { + color: $captionColour; + &:hover { + color: $backgroundColour; + } + } + .container { + @include flex-wrap(wrap); + } + .small { + padding-top: 0; + } +} + + +// Pagination nav +.nav--paginator { + @include flexbox; + @include justify-content(space-between); + color: $captionColour; + text-align: center; +} + +.pagination { + min-width: 20%; +} + + +// Main content +.main { + @include flexbox; + @include flex-direction(column); + @include flex(1, 0, auto); + @include justify-content(flex-start); + margin-bottom: 1.6rem; + @include breakpoint(break-1) { + @include justify-content(center); + @include flex-direction(row); + } +} + +.header, +.feature, +.footer { + @include flex(0, 0, auto); +} + +.content { + @include breakpoint(break-1) { + width: 62%; + } +} + +.share .button { + margin-right: .3rem; +} + +.aside { + @include breakpoint(break-1) { + max-width: 34%; + margin-left: 4%; + @include flex(1, 0, auto); + opacity: 0.5; + transition: opacity .1s; + .section { + position: sticky; + top: 0; + } + &--left { + margin-left: 0; + margin-right: 4%; + order: -1; + } + &:hover { + opacity: 1; + } + } +} + +.section { + margin: 0; +} + + +// Lists +.list { + list-style: none; + &--nav { + overflow: hidden; + margin-bottom: var(--listHeight, 0); + } + .item--post, + .item--result, + .item--category { + margin-left: 0; + } +} + +.item { + &--nav { + @include breakpoint(break-1) { + margin-left: .4rem; + display: inline-block; + } + &:first-of-type { + margin-left: 0; + } + } + &--current { + a { + color: $captionColour; + } + } +} + + +// Links, icons and images +a .icon { + transition: fill .1s; + &:hover { + fill: currentColor; + } +} + +.icon { + vertical-align: middle; + width: 1.1em; + height: 1.1em; + fill: CurrentColor; +} + +// Media content +img { + max-width: 100%; + height: auto; +} + +.figure { + line-height: 0; + &--left { + float: left; + padding-right: .8rem; + } + &--right { + float: right; + text-align: right; + padding-left: .8rem; + } + &--center { + text-align: center; + clear: both; + } +} + +.video, +.map { + position: relative; + padding-bottom: 56.25%; + height: 0; + iframe { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + } +} + +.map { + padding-bottom: 70%; +} + +.figure, +.video, +.map, +.form { + margin-bottom: .8rem; +} + +audio, +video { + width: 100%; +} + + +// Form elements and buttons +.form { + position: relative; + &__legend { + font-style: italic; + color: $captionColour; + position: absolute; + overflow: hidden; + right: 0; + clip: rect(0 0 0 0); + } +} + +button, +.button, +input[type="text"], +input[type="email"], +input[type="search"], +input[type="submit"], +input[type="color"], +textarea, +select { + padding: .6rem 1.2rem; + margin-bottom: .6rem; + transition: color .1s, background-color .1s, border .1s; + line-height: inherit; + border: none; + box-shadow: none; + border-radius: 0; + -webkit-appearance: none; + .icon { + margin: 0 0 .35rem; + } +} + +input[type="submit"], +button, +.button { + cursor: pointer; + display: inline-block; + color: $backgroundColour; + background: $accentColour; + transition: box-shadow .1s; + will-change: box-shadow; + box-shadow: inset 0 0 0 2rem transparent; + &:hover { + box-shadow: inset 0 0 0 2rem rgba(0,0,0,0.25); + } + &:active, + &:focus { + box-shadow: inset 0 0 0 2rem rgba(0,0,0,0.25); + } +} + +.button--nav { + @include breakpoint(break-1) { + display: none; + } + background: none; + color: $linkColour; + margin-bottom: 0; + min-height: 4rem; + min-width: 4rem; + &:hover, + &:focus { + box-shadow: none; + color: $hoverColour; + } +} + +a, +button, +.button, +input, +textarea, +select { + &:focus, + &:hover:focus { + outline: solid .12rem $focusColour; + outline-offset: -.12rem; + } +} + +a:hover:focus { + outline: none; +} + +input[type="text"], +input[type="email"], +input[type="search"], +input[type="color"], +textarea, +select { + width: 100%; + border: 1px solid $captionColour; + &:hover { + border-color: $bodyColour; + } +} + +select { + background: $codeBackgroundColour; +} + +textarea { + resize: vertical; +} + +label { + @include baseline($fontsize: zeta, $font: $bodytype, $lineheight: 2, $below: 2, $breakpoint: all); +} + +code { + padding: .12rem .2rem; + color: $headingColour; +} + +pre code { + padding: 0; +} + +.required { + color: red; +} + +::-webkit-input-placeholder { + opacity: 0.5; +} +::-moz-placeholder { + opacity: 0.5; +} +:-ms-input-placeholder { + opacity: 0.5; +} +:-moz-placeholder { + opacity: 0.5; +} + +::selection { + background: $headingColour; + color: $backgroundColour; + text-shadow: none; +} + + +// Sassline overrides +.typeset { + a > code { + text-shadow: none; + } + .button, + button { + background-image: none; + text-shadow: none; + color: $backgroundColour; + &:hover, + &:active, + &:focus { + background-image: none; + color: $backgroundColour; + } + } + hr { + width: 100%; + } + li { + > p { + padding: 0; + margin: 0; + } + } + .nav a { + padding-left: 0; + padding-right: 0; + margin-left: .2rem; + margin-right: .2rem; + } + pre { + white-space: pre; + overflow-x: scroll; + } +} diff --git a/_sass/alembic.scss b/_sass/alembic.scss new file mode 100644 index 0000000..5404837 --- /dev/null +++ b/_sass/alembic.scss @@ -0,0 +1,11 @@ +@charset "utf-8"; + +// Import frameworks & theme styles +@import + "normalize", + "settings", + "sassline-base", + "syntax", + "flex", + "theme" +; diff --git a/_sass/jekyll-theme-tactile.scss b/_sass/jekyll-theme-tactile.scss deleted file mode 100644 index e57c5da..0000000 --- a/_sass/jekyll-theme-tactile.scss +++ /dev/null @@ -1,383 +0,0 @@ -@import "rouge-base16-dark"; -@import url('https://fonts.googleapis.com/css?family=Chivo:900'); - -/* http://meyerweb.com/eric/tools/css/reset/ - v2.0 | 20110126 - License: none (public domain) -*/ -html, body, div, span, applet, object, iframe, -h1, h2, h3, h4, h5, h6, p, blockquote, pre, -a, abbr, acronym, address, big, cite, code, -del, dfn, em, img, ins, kbd, q, s, samp, -small, strike, strong, sub, sup, tt, var, -b, u, i, center, -dl, dt, dd, ol, ul, li, -fieldset, form, label, legend, -table, caption, tbody, tfoot, thead, tr, th, td, -article, aside, canvas, details, embed, -figure, figcaption, footer, header, hgroup, -menu, nav, output, ruby, section, summary, -time, mark, audio, video { - padding: 0; - margin: 0; - font: inherit; - font-size: 100%; - vertical-align: baseline; - border: 0; -} -/* HTML5 display-role reset for older browsers */ -article, aside, details, figcaption, figure, -footer, header, hgroup, menu, nav, section { - display: block; -} -body { - line-height: 1; -} -ol, ul { - list-style: none; -} -blockquote, q { - quotes: none; -} -blockquote:before, blockquote:after, -q:before, q:after { - content: ''; - content: none; -} -table { - border-spacing: 0; - border-collapse: collapse; -} - -/* LAYOUT STYLES */ -body { - font-family: 'Helvetica Neue', Helvetica, Arial, serif; - font-size: 1em; - line-height: 1.5; - color: #6d6d6d; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); - background: #e7e7e7 url(../images/body-bg.png) 0 0 repeat; -} - -a { - color: #d5000d; -} -a:hover { - color: #c5000c; -} - -header { - padding-top: 35px; - padding-bottom: 25px; -} - -header h1 { - font-family: 'Chivo', 'Helvetica Neue', Helvetica, Arial, serif; - font-size: 48px; font-weight: 900; - line-height: 1.2; - color: #303030; - letter-spacing: -1px; -} - -header h2 { - font-size: 24px; - font-weight: normal; - line-height: 1.3; - color: #aaa; - letter-spacing: -1px; -} - -#container { - min-height: 595px; - background: transparent url(../images/highlight-bg.jpg) 50% 0 no-repeat; -} - -.inner { - width: 620px; - margin: 0 auto; -} - -#container .inner img { - max-width: 100%; -} - -#downloads { - margin-bottom: 40px; -} - -a.button { - display: block; - float: left; - width: 179px; - padding: 12px 8px 12px 8px; - margin-right: 14px; - font-size: 15px; - font-weight: bold; - line-height: 25px; - color: #303030; - background: #fdfdfd; /* Old browsers */ - background: -moz-linear-gradient(top, #fdfdfd 0%, #f2f2f2 100%); /* FF3.6+ */ - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#fdfdfd), color-stop(100%,#f2f2f2)); /* Chrome,Safari4+ */ - background: -webkit-linear-gradient(top, #fdfdfd 0%,#f2f2f2 100%); /* Chrome10+,Safari5.1+ */ - background: -o-linear-gradient(top, #fdfdfd 0%,#f2f2f2 100%); /* Opera 11.10+ */ - background: -ms-linear-gradient(top, #fdfdfd 0%,#f2f2f2 100%); /* IE10+ */ - background: linear-gradient(to top, #fdfdfd 0%,#f2f2f2 100%); /* W3C */ - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fdfdfd', endColorstr='#f2f2f2',GradientType=0 ); /* IE6-9 */ - border-top: solid 1px #cbcbcb; - border-right: solid 1px #b7b7b7; - border-bottom: solid 1px #b3b3b3; - border-left: solid 1px #b7b7b7; - border-radius: 30px; - -webkit-box-shadow: 10px 10px 5px #888; - -moz-box-shadow: 10px 10px 5px #888; - box-shadow: 0px 1px 5px #e8e8e8; - -moz-border-radius: 30px; - -webkit-border-radius: 30px; -} -a.button:hover { - background: #fafafa; /* Old browsers */ - background: -moz-linear-gradient(top, #fdfdfd 0%, #f6f6f6 100%); /* FF3.6+ */ - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#fdfdfd), color-stop(100%,#f6f6f6)); /* Chrome,Safari4+ */ - background: -webkit-linear-gradient(top, #fdfdfd 0%,#f6f6f6 100%); /* Chrome10+,Safari5.1+ */ - background: -o-linear-gradient(top, #fdfdfd 0%,#f6f6f6 100%); /* Opera 11.10+ */ - background: -ms-linear-gradient(top, #fdfdfd 0%,#f6f6f6 100%); /* IE10+ */ - background: linear-gradient(to top, #fdfdfd 0%,#f6f6f6, 100%); /* W3C */ - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fdfdfd', endColorstr='#f6f6f6',GradientType=0 ); /* IE6-9 */ - border-top: solid 1px #b7b7b7; - border-right: solid 1px #b3b3b3; - border-bottom: solid 1px #b3b3b3; - border-left: solid 1px #b3b3b3; -} - -a.button span { - display: block; - height: 23px; - padding-left: 50px; -} - -#download-zip span { - background: transparent url(../images/zip-icon.png) 12px 50% no-repeat; -} -#download-tar-gz span { - background: transparent url(../images/tar-gz-icon.png) 12px 50% no-repeat; -} -#view-on-github span { - background: transparent url(../images/octocat-icon.png) 12px 50% no-repeat; -} -#view-on-github { - margin-right: 0; -} - -code, pre { - margin-bottom: 30px; - font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace; - font-size: 14px; - color: #222; -} - -code { - padding: 0 3px; - background-color: #f2f2f2; - border: solid 1px #ddd; -} - -pre { - padding: 20px; - overflow: auto; - color: #f2f2f2; - text-shadow: none; - background: #303030; -} -pre code { - padding: 0; - color: #f2f2f2; - background-color: #303030; - border: none; -} - -ul, ol, dl { - margin-bottom: 20px; -} - - -/* COMMON STYLES */ - -hr { - height: 1px; - padding-bottom: 1em; - margin-top: 1em; - line-height: 1px; - background: transparent url('../images/hr.png') 50% 0 no-repeat; - border: none; -} - -strong { - font-weight: bold; -} - -em { - font-style: italic; -} - -table { - width: 100%; - border: 1px solid #ebebeb; -} - -th { - font-weight: 500; -} - -td { - font-weight: 300; - text-align: center; - border: 1px solid #ebebeb; -} - -form { - padding: 20px; - background: #f2f2f2; - -} - - -/* GENERAL ELEMENT TYPE STYLES */ - -h1 { - font-size: 32px; -} - -h2 { - margin-bottom: 8px; - font-size: 22px; - font-weight: bold; - color: #303030; -} - -h3 { - margin-bottom: 8px; - font-size: 18px; - font-weight: bold; - color: #d5000d; -} - -h4 { - font-size: 16px; - font-weight: bold; - color: #303030; -} - -h5 { - font-size: 1em; - color: #303030; -} - -h6 { - font-size: .8em; - color: #303030; -} - -p { - margin-bottom: 20px; - font-weight: 300; -} - -a { - text-decoration: none; -} - -p a { - font-weight: 400; -} - -blockquote { - padding: 0 0 0 30px; - margin-bottom: 20px; - font-size: 1.6em; - border-left: 10px solid #e9e9e9; -} - -ul li { - list-style-position: inside; - list-style: disc; - padding-left: 20px; -} - -ol li { - list-style-position: inside; - list-style: decimal; - padding-left: 3px; -} - -dl dt { - color: #303030; -} - -footer { - padding-top: 20px; - padding-bottom: 30px; - margin-top: 40px; - font-size: 13px; - color: #aaa; - background: transparent url('../images/hr.png') 0 0 no-repeat; -} - -footer a { - color: #666; -} -footer a:hover { - color: #444; -} - -/* MISC */ -.clearfix:after { - display: block; - height: 0; - clear: both; - visibility: hidden; - content: '.'; -} - -.clearfix {display: inline-block;} -* html .clearfix {height: 1%;} -.clearfix {display: block;} - -/* #Media Queries -================================================== */ - -/* Smaller than standard 960 (devices and browsers) */ -@media only screen and (max-width: 959px) { } - -/* Tablet Portrait size to standard 960 (devices and browsers) */ -@media only screen and (min-width: 768px) and (max-width: 959px) { } - -/* All Mobile Sizes (devices and browser) */ -@media only screen and (max-width: 767px) { - header { - padding-top: 10px; - padding-bottom: 10px; - } - #downloads { - margin-bottom: 25px; - } - #download-zip, #download-tar-gz { - display: none; - } - .inner { - width: 94%; - margin: 0 auto; - } - ul li { - margin-left: 10px; - padding-left: 10px; - } - ol li { - margin-left: 10px; - } -} - -/* Mobile Landscape Size to Tablet Portrait (devices and browsers) */ -@media only screen and (min-width: 480px) and (max-width: 767px) { } - -/* Mobile Portrait Size to Mobile Landscape Size (devices and browsers) */ -@media only screen and (max-width: 479px) { } diff --git a/_sass/rouge-base16-dark.scss b/_sass/rouge-base16-dark.scss deleted file mode 100644 index c303bd5..0000000 --- a/_sass/rouge-base16-dark.scss +++ /dev/null @@ -1,81 +0,0 @@ -/* - generated by rouge http://rouge.jneen.net/ - original base16 by Chris Kempson (https://github.com/chriskempson/base16) -*/ - -.highlight table td { padding: 5px; } -.highlight table pre { margin: 0; } -.highlight, .highlight .w { - color: #d0d0d0; -} -.highlight .err { - color: #151515; - background-color: #ac4142; -} -.highlight .c, .highlight .cd, .highlight .cm, .highlight .c1, .highlight .cs { - color: #888; -} -.highlight .cp { - color: #f4bf75; -} -.highlight .nt { - color: #f4bf75; -} -.highlight .o, .highlight .ow { - color: #d0d0d0; -} -.highlight .p, .highlight .pi { - color: #d0d0d0; -} -.highlight .gi { - color: #90a959; -} -.highlight .gd { - color: #ac4142; -} -.highlight .gh { - color: #6a9fb5; - font-weight: bold; -} -.highlight .k, .highlight .kn, .highlight .kp, .highlight .kr, .highlight .kv { - color: #aa759f; -} -.highlight .kc { - color: #d28445; -} -.highlight .kt { - color: #d28445; -} -.highlight .kd { - color: #d28445; -} -.highlight .s, .highlight .sb, .highlight .sc, .highlight .sd, .highlight .s2, .highlight .sh, .highlight .sx, .highlight .s1 { - color: #90a959; -} -.highlight .sr { - color: #75b5aa; -} -.highlight .si { - color: #8f5536; -} -.highlight .se { - color: #8f5536; -} -.highlight .nn { - color: #f4bf75; -} -.highlight .nc { - color: #f4bf75; -} -.highlight .no { - color: #f4bf75; -} -.highlight .na { - color: #6a9fb5; -} -.highlight .m, .highlight .mf, .highlight .mh, .highlight .mi, .highlight .il, .highlight .mo, .highlight .mb, .highlight .mx { - color: #90a959; -} -.highlight .ss { - color: #90a959; -} diff --git a/_sass/sassline-base/_mixins.scss b/_sass/sassline-base/_mixins.scss new file mode 100644 index 0000000..08fc704 --- /dev/null +++ b/_sass/sassline-base/_mixins.scss @@ -0,0 +1,420 @@ +// SCSS mixins +// --------------------------------------- + +// Global variables used in mixins. + +// Number of breakpoints. +$breakpoints-limit: length($breakpoints); + +// List of rootsizes, breakpoints, and max-widths. +$sizes: map-values($rootsizes); +$points: map-values($breakpoints); +$line-widths: map-values($measures); +$max-widths: map-values($maxwidths); + + +// Breakpoints. Either set one to one of the breakpoint variables, or use a custom value for minor breakpoints. +// Defaults to min-width, but both min->max and max-width are available too. +// Parts based on https://gist.github.com/timknight/03e6335b8816aa534cf7 +@mixin breakpoint($break: 0, $max: 0) { + // Type of break variable + $value: type-of($break); + + // If it is a string (i.e. a breakpoint variable). + @if $value == string { + // If using 'break-1', 'break-2' etc output the correct breakpoints from map. + @if map-has-key($breakpoints, $break) { + @media screen and (min-width: #{map-get($breakpoints, $break) / 16 * 1em} ) { @content; } + } @else { + @warn "#{$break} is not a set breakpoint variable"; + } + + // If it is a number, use this for the breakpoint. + } @else if $value == number { + // If using other numbers output value in ems either for min, min & max or max width breakpoints. + $query: "all" !default; + @if $break != 0 and $max != 0 { $query: "(min-width: #{$break / 16 * 1em}) and (max-width: #{$max / 16 * 1em})"; } + @else if $break != 0 and $max == 0 { $query: "(min-width: #{$break / 16 * 1em})"; } + @else if $break == 0 and $max != 0 { $query: "(max-width: #{$max / 16 * 1em})"; } + @media #{$query} { @content; } + + } @else { + @warn "#{$break} is not valid to use as a breakpoint"; + } +} + +// Root font-size in %, outputted in correct breakpoints. +@mixin rootsize { + font-size: nth($sizes, 1) / 16 * 100%; + + // Loop through breakpoints. + @for $i from 2 through $breakpoints-limit { + @media screen and (min-width: nth($points, $i) / 16 * 1em ) { + font-size: nth($sizes, $i) / 16 * 100%; + } + } +} + +// Max-widths for typeset containers, outputted in correct breakpoints. +@mixin maxwidth($breakpoint: 0) { + // Type of chosen variables. + $break-value: type-of($breakpoint); + + // If specifying a breakpoint to use (and breakpoint exists). + @if $break-value == number and $breakpoint <= ($breakpoints-limit - 1) and $breakpoint >= 0 { + + max-width: #{nth($max-widths, ($breakpoint + 1)) / nth($sizes, ($breakpoint + 1))}rem; + + } @else if $breakpoint == all { + max-width: #{nth($max-widths, 1) / nth($sizes, 1)}rem; + + // Loop through breakpoints. + @for $i from 2 through $breakpoints-limit { + @media screen and (min-width: nth($points, $i) / 16 * 1em ) { + max-width: #{nth($max-widths, $i) / nth($sizes, $i)}rem; + } + } + } +} + +// Set the measure for single columns, outputted in correct breakpoints. +@mixin measure($breakpoint: 0) { + // Type of chosen variables. + $break-value: type-of($breakpoint); + + // If specifying a breakpoint to use (and breakpoint exists). + @if $break-value == number and $breakpoint <= ($breakpoints-limit - 1) and $breakpoint >= 0 { + + max-width: #{nth($line-widths, ($breakpoint + 1)) / nth($sizes, ($breakpoint + 1))}rem; + + } @else if $breakpoint == all { + max-width: #{nth($line-widths, 1) / nth($sizes, 1)}rem; + + // Loop through breakpoints. + @for $i from 2 through $breakpoints-limit { + @media screen and (min-width: nth($points, $i) / 16 * 1em ) { + max-width: #{nth($line-widths, $i) / nth($sizes, $i)}rem; + } + } + } +} + +// Calculate percentage width of container to get optimal measure for main text columns. +// Defaults to all breakpoints. +// Note: will not output for base breakpoint as this comes from the 'measure' mixin. +@mixin ideal-measure($breakpoint: 0, $gutter: 0, $main: true, $output: max-width) { + // Type of chosen variables. + $break-value: type-of($breakpoint); + + // If specifying a breakpoint to use (and breakpoint exists and is larger than 0). + @if $break-value == number and $breakpoint <= ($breakpoints-limit - 1) and $breakpoint > 0 { + + @if $gutter == small { + $gutter: map-get($gutterwidths, small) * 2 / 1rem; + } @else if $gutter == medium { + $gutter: map-get($gutterwidths, medium) * 2 / 1rem; + } @else if $gutter == large { + $gutter: map-get($gutterwidths, large) * 2 / 1rem; + } @else { + $gutter: 0; + } + + $rootsize: map-get($rootsizes, rootsize-#{$breakpoint}); + $ideal-measure: map-get($measures, measure-#{$breakpoint}); + $gutter-size: ($gutter * $rootsize); + $container-width: map-get($maxwidths, width-#{$breakpoint}); + + $percentage: percentage(($ideal-measure + $gutter-size) / $container-width); + + @if $percentage < 55 { + $percentage: 55%; + } @else if $percentage > 65 { + $percentage: 65%; + } + + @if $main == false { + $percentage: 100 - $percentage; + } + + #{$output}: $percentage; + } +} + +// Value in scale in $modular-scale? +// Used in following fontsize mixin. +@function in-modular-scale($scale, $key) { + $map: map-get($modular-scale, $scale); + $output: map-has-key($map, $key); + @return $output; +} + +// Font-size in rems. Either set per breakpoint or for all. +// Use values as you would for pixels i.e. 16 or use values from the modular scale. +@mixin fontsize($fontsize, $breakpoint: 0) { + // Type of chosen variables. + $font-value: type-of($fontsize); + $break-value: type-of($breakpoint); + + // Check if value exists in scale. + $in-scale: in-modular-scale(scale-0, $fontsize); + + // If specifying a breakpoint to use (and breakpoint exists). + @if $break-value == number and $breakpoint <= ($breakpoints-limit - 1) and $breakpoint >= 0 { + + // If using a number for fontsize. + @if $font-value == number { + font-size: #{$fontsize / nth($sizes, ($breakpoint + 1))}rem; + + // If using a variable from the scale for fontsize. + } @else if $in-scale == true { + $get-scale: map-get($modular-scale, scale-#{$breakpoint}); + $get-size: map-get($get-scale, $fontsize); + + font-size: #{$get-size / nth($sizes, ($breakpoint + 1))}rem; + + } @else { + @warn "#{$fontsize} is not a valid scale variable"; + } + + // If want to use value for all breakpoints. + } @else if $breakpoint == all { + + // If using a number for fontsize. + @if $font-value == number { + font-size: #{$fontsize / nth($sizes, 1)}rem; + + // Loop through breakpoints. + @for $i from 2 through $breakpoints-limit { + @media screen and (min-width: nth($points, $i) / 16 * 1em ) { + font-size: #{$fontsize / nth($sizes, $i)}rem; + } + } + + // If using a variable from the scale for fontsize. + } @else if $in-scale == true { + $get-scale: map-get($modular-scale, scale-0); + $get-size: map-get($get-scale, $fontsize); + font-size: #{$get-size / nth($sizes, 1)}rem; + + // Loop through breakpoints. + @for $i from 2 through $breakpoints-limit { + $get-scale: map-get($modular-scale, scale-#{$i - 1}); + $get-size: map-get($get-scale, $fontsize); + + @media screen and (min-width: nth($points, $i) / 16 * 1em ) { + font-size: #{$get-size / nth($sizes, $i)}rem; + } + } + + } @else { + @warn "#{$fontsize} is not a valid scale variable"; + } + + } @else { + @warn "#{$breakpoint} is not valid to use as a breakpoint"; + } +} + +// Advanced baseline magic. +// ! Read the README to help understand what is going on here. +// Parts based on https://gist.github.com/razwan/10662500 +@mixin baseline($fontsize, $font, $lineheight: 2, $below: 2, $breakpoint: 0) { + // Type of chosen variables. + $font-value: type-of($fontsize); + $break-value: type-of($breakpoint); + + // Cap height + $cap-height: map-get($font, cap-height); + + // Check if value exists in scale. + $in-scale: in-modular-scale(scale-0, $fontsize); + + // Set the line-height (if it isn't set at 0). + @if $lineheight != 0 { + line-height: #{$lineheight}rem; + } + + // If specifying a breakpoint to use (and breakpoint exists). + @if $break-value == number and $breakpoint <= ($breakpoints-limit - 1) and $breakpoint >= 0 { + + // If using a number for fontsize. + @if $font-value == number { + $rootsize: nth($sizes, ($breakpoint + 1)); + $baseline-shift: #{($fontsize / 2 * (($lineheight * $rootsize / $fontsize) - $cap-height)) / $rootsize + 0.00001}; + $baseline-push: #{$below - (($fontsize / 2 * (($lineheight * $rootsize / $fontsize) - $cap-height)) / $rootsize + 0.00001)}; + + margin-bottom: #{$baseline-push}rem; + padding-top: #{$baseline-shift}rem; + + // If using a variable from the scale for fontsize. + } @else if $in-scale == true { + $get-scale: map-get($modular-scale, scale-#{$breakpoint}); + $get-size: map-get($get-scale, $fontsize); + $rootsize: nth($sizes, ($breakpoint + 1)); + + $baseline-shift: #{($get-size / 2 * (($lineheight * $rootsize / $get-size) - $cap-height)) / $rootsize + 0.00001}; + $baseline-push: #{$below - (($get-size / 2 * (($lineheight * $rootsize / $get-size) - $cap-height)) / $rootsize + 0.00001)}; + + margin-bottom: #{$baseline-push}rem; + padding-top: #{$baseline-shift}rem; + + } @else { + @warn "#{$fontsize} is not a valid scale variable"; + } + + // If want to use value for all breakpoints. + } @else if $breakpoint == all { + + // If using a number for fontsize. + @if $font-value == number { + $rootsize: nth($sizes, 1); + $baseline-shift: #{($fontsize / 2 * (($lineheight * $rootsize / $fontsize) - $cap-height)) / $rootsize + 0.00001}; + $baseline-push: #{$below - (($fontsize / 2 * (($lineheight * $rootsize / $fontsize) - $cap-height)) / $rootsize + 0.00001)}; + + margin-bottom: #{$baseline-push}rem; + padding-top: #{$baseline-shift}rem; + + // Loop through breakpoints. + @for $i from 2 through $breakpoints-limit { + $rootsize: nth($sizes, $i); + $baseline-shift: #{($fontsize / 2 * (($lineheight * $rootsize / $fontsize) - $cap-height)) / $rootsize + 0.00001}; + $baseline-push: #{$below - (($fontsize / 2 * (($lineheight * $rootsize / $fontsize) - $cap-height)) / $rootsize + 0.00001)}; + + @media screen and (min-width: nth($points, $i) / 16 * 1em ) { + margin-bottom: #{$baseline-push}rem; + padding-top: #{$baseline-shift}rem; + } + } + + // If using a variable from the scale for fontsize. + } @else if $in-scale == true { + $get-scale: map-get($modular-scale, scale-0); + $get-size: map-get($get-scale, $fontsize); + $rootsize: nth($sizes, 1); + + $baseline-shift: #{($get-size / 2 * (($lineheight * $rootsize / $get-size) - $cap-height)) / $rootsize + 0.00001}; + $baseline-push: #{$below - (($get-size / 2 * (($lineheight * $rootsize / $get-size) - $cap-height)) / $rootsize + 0.00001)}; + + margin-bottom: #{$baseline-push}rem; + padding-top: #{$baseline-shift}rem; + + // Loop through breakpoints. + @for $i from 2 through $breakpoints-limit { + $get-scale: map-get($modular-scale, scale-#{$i - 1}); + $get-size: map-get($get-scale, $fontsize); + $rootsize: nth($sizes, $i); + + $baseline-shift: #{($get-size / 2 * (($lineheight * $rootsize / $get-size) - $cap-height)) / $rootsize + 0.00001}; + $baseline-push: #{$below - (($get-size / 2 * (($lineheight * $rootsize / $get-size) - $cap-height)) / $rootsize + 0.00001)}; + + @media screen and (min-width: nth($points, $i) / 16 * 1em ) { + margin-bottom: #{$baseline-push}rem; + padding-top: #{$baseline-shift}rem; + } + } + + } @else { + @warn "#{$fontsize} is not a valid scale variable"; + } + + } @else { + @warn "#{$breakpoint} is not valid to use as a breakpoint"; + } +} + +// Set fontsize and baseline at once. Mix of fontsize and baseline mixin. +@mixin sassline($fontsize, $font, $lineheight: 2, $below: 2, $breakpoint: 0) { + $font-value: type-of($fontsize); + $break-value: type-of($breakpoint); + $cap-height: map-get($font, cap-height); + $in-scale: in-modular-scale(scale-0, $fontsize); + + line-height: #{$lineheight}rem; + + @if $break-value == number and $breakpoint <= ($breakpoints-limit - 1) and $breakpoint >= 0 { + + @if $font-value == number { + $rootsize: nth($sizes, ($breakpoint + 1)); + $baseline-shift: #{($fontsize / 2 * (($lineheight * $rootsize / $fontsize) - $cap-height)) / $rootsize + 0.00001}; + $baseline-push: #{$below - (($fontsize / 2 * (($lineheight * $rootsize / $fontsize) - $cap-height)) / $rootsize + 0.00001)}; + font-size: #{$fontsize / nth($sizes, ($breakpoint + 1))}rem; + margin-bottom: #{$baseline-push}rem; + padding-top: #{$baseline-shift}rem; + + } @else if $in-scale == true { + $get-scale: map-get($modular-scale, scale-#{$breakpoint}); + $get-size: map-get($get-scale, $fontsize); + $rootsize: nth($sizes, ($breakpoint + 1)); + $baseline-shift: #{($get-size / 2 * (($lineheight * $rootsize / $get-size) - $cap-height)) / $rootsize + 0.00001}; + $baseline-push: #{$below - (($get-size / 2 * (($lineheight * $rootsize / $get-size) - $cap-height)) / $rootsize + 0.00001)}; + font-size: #{$get-size / nth($sizes, ($breakpoint + 1))}rem; + margin-bottom: #{$baseline-push}rem; + padding-top: #{$baseline-shift}rem; + + } @else { + @warn "#{$fontsize} is not a valid scale variable"; + } + + } @else if $breakpoint == all { + + @if $font-value == number { + $rootsize: nth($sizes, 1); + $baseline-shift: #{($fontsize / 2 * (($lineheight * $rootsize / $fontsize) - $cap-height)) / $rootsize + 0.00001}; + $baseline-push: #{$below - (($fontsize / 2 * (($lineheight * $rootsize / $fontsize) - $cap-height)) / $rootsize + 0.00001)}; + font-size: #{$fontsize / nth($sizes, 1)}rem; + margin-bottom: #{$baseline-push}rem; + padding-top: #{$baseline-shift}rem; + + @for $i from 2 through $breakpoints-limit { + $rootsize: nth($sizes, $i); + $baseline-shift: #{($fontsize / 2 * (($lineheight * $rootsize / $fontsize) - $cap-height)) / $rootsize + 0.00001}; + $baseline-push: #{$below - (($fontsize / 2 * (($lineheight * $rootsize / $fontsize) - $cap-height)) / $rootsize + 0.00001)}; + @media screen and (min-width: nth($points, $i) / 16 * 1em ) { + font-size: #{$fontsize / nth($sizes, $i)}rem; + margin-bottom: #{$baseline-push}rem; + padding-top: #{$baseline-shift}rem; + } + } + + } @else if $in-scale == true { + $get-scale: map-get($modular-scale, scale-0); + $get-size: map-get($get-scale, $fontsize); + $rootsize: nth($sizes, 1); + $baseline-shift: #{($get-size / 2 * (($lineheight * $rootsize / $get-size) - $cap-height)) / $rootsize + 0.00001}; + $baseline-push: #{$below - (($get-size / 2 * (($lineheight * $rootsize / $get-size) - $cap-height)) / $rootsize + 0.00001)}; + font-size: #{$get-size / nth($sizes, 1)}rem; + margin-bottom: #{$baseline-push}rem; + padding-top: #{$baseline-shift}rem; + + @for $i from 2 through $breakpoints-limit { + $get-scale: map-get($modular-scale, scale-#{$i - 1}); + $get-size: map-get($get-scale, $fontsize); + $rootsize: nth($sizes, $i); + $baseline-shift: #{($get-size / 2 * (($lineheight * $rootsize / $get-size) - $cap-height)) / $rootsize + 0.00001}; + $baseline-push: #{$below - (($get-size / 2 * (($lineheight * $rootsize / $get-size) - $cap-height)) / $rootsize + 0.00001)}; + @media screen and (min-width: nth($points, $i) / 16 * 1em ) { + font-size: #{$get-size / nth($sizes, $i)}rem; + margin-bottom: #{$baseline-push}rem; + padding-top: #{$baseline-shift}rem; + } + } + + } @else { + @warn "#{$fontsize} is not a valid scale variable"; + } + + } @else { + @warn "#{$breakpoint} is not valid to use as a breakpoint"; + } +} + +// Clearfix. +@mixin clearfix { + &:before, &:after{ + display: table; + content: ""; + } + &:after{ + clear: both; + } +} diff --git a/_sass/sassline-base/_modular-scale.scss b/_sass/sassline-base/_modular-scale.scss new file mode 100644 index 0000000..35b1532 --- /dev/null +++ b/_sass/sassline-base/_modular-scale.scss @@ -0,0 +1,66 @@ +// Modular scale +// --------------------------------------- + +// Setting responsive modular-scales. Use appropriate scales for viewport sizes. +$modular-scale: ( + // Major Third http://www.modularscale.com/?16,28&px&1.25&web&text + scale-0: ( + alpha: 28.0, + beta: 25.0, + gamma: 22.4, + delta: 20.0, + epsilon: 17.9, + zeta: 16.0, + eta: 14.3, + theta: 12.8, + iota: 11.5 + ), + // Major Third http://www.modularscale.com/?17,30&px&1.25&web&text + scale-1: ( + alpha: 30.0, + beta: 26.6, + gamma: 24.0, + delta: 21.3, + epsilon: 19.2, + zeta: 17.0, + eta: 15.3, + theta: 13.6, + iota: 12.8 + ), + // Major Third http://www.modularscale.com/?18,32&px&1.25&web&text + scale-2: ( + alpha: 32.0, + beta: 28.1, + gamma: 25.6, + delta: 22.5, + epsilon: 20.5, + zeta: 18.0, + eta: 16.3, + theta: 14.4, + iota: 13.1 + ), + // Perfect Fourth http://www.modularscale.com/?20,40&px&1.333&web&text + scale-3: ( + alpha: 40.0, + beta: 35.5, + gamma: 30.0, + delta: 26.7, + epsilon: 22.5, + zeta: 20.0, + eta: 16.9, + theta: 15.0, + iota: 12.7 + ), + // Aug. Fourth http://www.modularscale.com/?22,50&px&1.414&web&text + scale-4: ( + alpha: 50.0, + beta: 43.9, + gamma: 35.3, + delta: 31.1, + epsilon: 25.0, + zeta: 22.0, + eta: 17.6, + theta: 15.6, + iota: 12.5 + ) +); diff --git a/_sass/sassline-base/_reset.scss b/_sass/sassline-base/_reset.scss new file mode 100644 index 0000000..13b1cc7 --- /dev/null +++ b/_sass/sassline-base/_reset.scss @@ -0,0 +1,13 @@ +// Reset +// --------------------------------------- + +// Reset all the things +* { box-sizing: border-box; } +html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { margin: 0; padding: 0; border: 0; font-size: 100%; font: inherit; vertical-align: baseline; } +article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { display: block; } +html, body { height: 100%; } +a img { border: none; } +blockquote { quotes: none; } +blockquote:before, blockquote:after { content: ''; content: none; } +table { border-collapse: collapse; border-spacing: 0; } +caption, th, td { text-align: left; font-weight: normal; vertical-align: middle; } diff --git a/_sass/sassline-base/_typography.scss b/_sass/sassline-base/_typography.scss new file mode 100644 index 0000000..4146bd0 --- /dev/null +++ b/_sass/sassline-base/_typography.scss @@ -0,0 +1,363 @@ +// Typography +// --------------------------------------- + +// Setting root sizes and base styles. +html { + @include rootsize; + + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +// Site-wide base styles. +body { + @include fontsize(zeta, all); + + font-family: unquote(map-get($bodytype, font-family)); + font-style: normal; + font-weight: map-get($bodytype, regular); + line-height: 2rem; +} + +// Links. +a { + color: $linkColour; + text-decoration: none; + transition: color .1s, background-color .1s; + + &:hover, &:active, &:focus { + color: $hoverColour; + text-decoration: none; + } +} + +// Styles for typeset text. +.typeset { + + // Nice underlines for text links. + p a, li a { + background-image: linear-gradient(to bottom,rgba(0, 0, 0, 0) 50%,$linkColour 50%); + background-position: 0 93%; + background-repeat: repeat-x; + background-size: 100% 0.15rem; + text-shadow: 0.1rem 0 $backgroundColour, + 0.15rem 0 $backgroundColour, + -0.1rem 0 $backgroundColour, + -0.15rem 0 $backgroundColour; + + &:hover, &:active, &:focus { + background-image: linear-gradient(to bottom,rgba(0, 0, 0, 0) 50%,$hoverColour 50%); + } + } + + // Paragraphs. OpenType ligatures and oldstyle figures enabled if available. + p { + @include baseline($fontsize: zeta, $font: $bodytype, $lineheight: 2, $below: 2, $breakpoint: all); + + font-feature-settings: 'kern', 'onum', 'liga'; + } + + // Headings. OpenType ligatures, discretionary ligatures and lining figures enabled if available. + h1, h2, h3, h4, h5, h6 { + color: $headingColour; + font-family: unquote(map-get($headingtype, font-family)); + font-feature-settings: 'dlig', 'liga', 'lnum', 'kern'; + font-style: normal; + font-weight: map-get($headingtype, bold); + } + + // Heading level 1. + h1, .alpha { + @include sassline($fontsize: alpha, $font: $headingtype, $lineheight: 3, $below: 1, $breakpoint: all); + } + + // Heading level 2. + h2, .beta { + @include sassline(beta, $headingtype, 3, 1, all); + } + + // Heading level 3. + h3, .gamma { + @include sassline(gamma, $headingtype, 3, 1, all); + } + + // Heading level 4. + h4, .delta { + @include sassline(delta, $headingtype, 2, 0, all); + } + + // Heading level 5. + h5, .epsilon { + @include sassline(epsilon, $headingtype, 2, 0, all); + } + + // Heading level 6. + h6, .zeta { + @include sassline(zeta, $headingtype, 2, 0, all); + } + + // Lists. + ul, ol { + @include baseline(zeta, $bodytype, 2, 2, all); + + li { + font-feature-settings: 'kern', 'onum', 'liga'; + margin-left: 2rem; + + @include breakpoint(break-1) { + margin-left: 0; + } + + ol, ul { + padding-top: 1rem; + margin-bottom: 1rem; + margin-left: 2rem; + } + } + } + + // Ordered lists. + ol { + list-style-type: none; + + li { + counter-increment: top-level; + + &:before { + content: counter(top-level) '.'; + font-feature-settings: 'lnum', 'tnum'; + margin-left: -3rem; + position: absolute; + text-align: right; + width: 2em; + } + + ul { + + li { + + &:before { + content: ''; + } + + ol { + + li { + counter-increment: alt-level; + + &:before { + content: counter(alt-level) '.'; + } + } + } + } + } + + ol { + + li { + counter-increment: sub-level; + + &:before { + content: counter(top-level) '.' counter(sub-level); + } + + ul { + + li { + + &:before { + content: ''; + } + } + } + + ol { + + li { + counter-increment: sub-sub-level; + + &:before { + content: counter(top-level) '.' counter(sub-level) '.' counter(sub-sub-level); + } + } + } + } + } + } + } + + // Definition lists. + dl { + @include baseline(zeta, $bodytype, 2, 2, all); + + dt, dd { + font-feature-settings: 'kern', 'onum', 'liga'; + margin-left: 2rem; + + @include breakpoint(break-1) { + margin-left: 0; + } + } + + dt { + font-weight: map-get($bodytype, bold); + } + + dd + dt { + padding-top: 1rem; + } + } + + // Tables. + table { + @include sassline(eta, $headingtype, 2, 0, all); + + font-family: unquote(map-get($headingtype, font-family)); + font-feature-settings: 'liga', 'lnum', 'tnum', 'kern'; + font-style: normal; + font-weight: map-get($headingtype, regular); + width: 100%; + + thead { + + th { + @include sassline(zeta, $headingtype, 2, 0, all); + padding-bottom: 1px; + } + } + } + + // Bold. + b, strong, .bold { + font-weight: map-get($bodytype, bold); + } + + // Italic. + em, i, .italic { + font-style: map-get($bodytype, italic); + } + + // Caption and inline small text. + small, .caption { + @include fontsize(theta, all); + + font-family: unquote(map-get($headingtype, font-family)); + font-style: normal; + font-weight: map-get($headingtype, regular); + } + + small { + line-height: 1rem; + } + + .caption { + @include baseline(theta, $headingtype, 2, 2, all); + + color: $captionColour; + } + + // Nice spacing for captions. + h1 + .caption, .alpha + .caption, h2 + .caption, .beta + .caption, h3 + .caption, .gamma + .caption { + margin-top: -1rem; + } + + .delta + .caption, .epsilon + .caption, .zeta + .caption { + margin-top: 0rem; + } + + // Quotes. + blockquote { + + p { + border-left: 0.15rem solid $linkColour; + font-style: map-get($bodytype, italic); + padding-left: 1rem; + + // Add spacing below blockquote paragraphs to align to baseline grid. + $get-scale: map-get($modular-scale, scale-0); + $get-size: map-get($get-scale, zeta); + $rootsize: nth($sizes, 1); + $baseline-shift: #{($get-size / 2 * ((2 * $rootsize / $get-size) - map-get($bodytype, cap-height))) / $rootsize + 0.00001}; + $baseline-push: #{3 - (($get-size * ((2 * $rootsize / $get-size) - map-get($bodytype, cap-height))) / $rootsize + 0.00001)}; + + margin-bottom: #{$baseline-push}rem; + padding-bottom: #{$baseline-shift}rem; + + @for $i from 2 through $breakpoints-limit { + $get-scale: map-get($modular-scale, scale-#{$i - 1}); + $get-size: map-get($get-scale, zeta); + $rootsize: nth($sizes, $i); + $baseline-shift: #{($get-size / 2 * ((2 * $rootsize / $get-size) - map-get($bodytype, cap-height))) / $rootsize + 0.00001}; + $baseline-push: #{3 - (($get-size * ((2 * $rootsize / $get-size) - map-get($bodytype, cap-height))) / $rootsize + 0.00001)}; + + @media screen and (min-width: nth($points, $i) / 16 * 1em ) { + margin-bottom: #{$baseline-push}rem; + padding-bottom: #{$baseline-shift}rem; + } + } + } + + @include breakpoint(break-1) { + margin-left: -1rem; + } + } + + // Horizontal rule. + hr { + background-image: linear-gradient(to bottom,rgba(0, 0, 0, 0) 50%,$captionColour 50%); + background-position: 0 50%; + background-repeat: repeat-x; + background-size: 100% 0.15rem; + border: 0; + margin: 0; + padding-bottom: 3rem; + padding-top: 3rem; + } + + // Code block. + code, pre { + background-color: $codeBackgroundColour; + font-family: unquote(map-get($monospacetype, font-family)); + } + + pre { + display: block; + margin-bottom: 2rem; + padding: 1rem; + white-space: pre; + white-space: pre-wrap; + word-break: break-all; + word-wrap: break-word; + } + + code { + @include fontsize(theta, all); + + line-height: 1rem; + } + + // Letter space those capitals people, Jan Tschichold would be proud. + .upper { + font-kerning: normal; + letter-spacing: 0.1rem; + text-transform: uppercase; + } + + // Real small caps. + .small-caps { + font-feature-settings: 'smcp', 'kern'; + font-kerning: normal; + letter-spacing: 0.1rem; + } + + // Consistent height numbers with OpenType. + .lining-numerals { + font-feature-settings: 'lnum', 'kern'; + } + + // Ascending and descending numbers with OpenType. + .oldstyle-numerals { + font-feature-settings: 'onum', 'kern'; + } +} diff --git a/_sass/sassline-base/_variables.scss b/_sass/sassline-base/_variables.scss new file mode 100644 index 0000000..0b47153 --- /dev/null +++ b/_sass/sassline-base/_variables.scss @@ -0,0 +1,96 @@ +// SCSS variables +// --------------------------------------- + +// Note: For the following Sass maps enter values as if they would be px units. + +// Breakpoint sizes from px to ems. Add more values here to add more breakpoints. +// Change names if you prefer, it wont break the mixin as long as they are strings not just numbers. +$breakpoints: ( + break-0: 0, // 0px Mobile first + break-1: 640, // 640px ~ Small tablet up + break-2: 800, // 800px ~ Large tablet up + break-3: 1024, // 1024px ~ Desktop up + break-4: 1600 // 1600px ~ Large desktop up +) !default; + +// Root font-sizes for each breakpoint. Set to half desired line-height of body text. +// ! Make sure to have as many sizes as breakpoints above. +$rootsizes: ( + rootsize-0: 12, // 24px line-height body text + rootsize-1: 14, // 28px line-height body text + rootsize-2: 15, // 30px line-height body text + rootsize-3: 17, // 34px line-height body text + rootsize-4: 19 // 38px line-height body text +) !default; + +// Set the optimum line-length for your text (based on typeface). +// Aim for 75-100 characters a line when possible, at smaller sizes type size is more important. +// ! Make sure to have as many widths as breakpoints above. +// Note: this was 'maxwidths' in previous versions. +$measures: ( + measure-0: 500, // 500px wide + measure-1: 550, // 550px wide + measure-2: 600, // 600px wide + measure-3: 680, // 680px wide + measure-4: 750 // 750px wide +) !default; + +// Set the max-widths for containers (based on design). +// ! Make sure to have as many widths as breakpoints above. +$maxwidths: ( + width-0: 500, // 500px wide + width-1: 600, // 600px wide + width-2: 800, // 800px wide + width-3: 1100, // 110px wide + width-4: 1300 // 1300px wide +) !default; + +// Gutter widths +$gutterwidths: ( + small: 1rem, + medium: 2rem, + large: 4rem +) !default; + +// Add typefaces here. +// Add weight and style details too. +// ! Set cap height to set to the baseline. +$bodytype: ( + font-family: 'Georgia, serif', + regular: 400, + bold: 700, + italic: italic, + cap-height: 0.66 +) !default; + +$headingtype: ( + font-family: 'Helvetica, sans-serif', + regular: 400, + bold: 700, + cap-height: 0.66 +) !default; + +$monospacetype: ( + font-family: 'Menlo, monospace', + regular: 400, + cap-height: 0.68 +) !default; + +// Here are some local fonts cap-height sizes to get you started: +// Georgia: 0.66, Times / Times New Roman: 0.65, Palatino: 0.52 +// Lucida Grande: 0.72, Helvetica: 0.66, Verdana: 0.76, Tahoma: 0.76 + +// Selection of Typekit fonts cap-height sizes: +// Proxima Nova: 0.57, Museo Slab: 0.66, JAF Facit: 0.7, Brandon Grotesque: 0.65, Clavo: 0.7, Adelle: 0.66, FF Tisa Pro: 0.82, Jubilat: 0.66, Futura PT: 0.66, Chaparral Pro: 0.5, Minion Pro: 0.66, Myriad Pro: 0.66, Adobe Caslon Pro: 0.36 + +// Text colours. British English. +$headingColour: #2E2E2E !default; +$bodyColour: #494949 !default; +$linkColour: #0E58F5 !default; +$hoverColour: #0B348B !default; +$captionColour: #BDC8CC !default; +$white: #FFFFFF !default; + +// Background colours. +$backgroundColour: #FCFCFC !default; +$codeBackgroundColour: #F5F4F2 !default; diff --git a/_sass/tactile.scss b/_sass/tactile.scss deleted file mode 100644 index d1cfc8f..0000000 --- a/_sass/tactile.scss +++ /dev/null @@ -1,4 +0,0 @@ -// Placeholder file. If your site uses -// @import "{{ site.theme }}"; -// Then using this theme with jekyll-remote-theme will work fine. -@import "jekyll-theme-tactile"; diff --git a/_site/404.html b/_site/404.html new file mode 100644 index 0000000..5bd86ba --- /dev/null +++ b/_site/404.html @@ -0,0 +1,378 @@ + + + + + + + + + + + + + + +404 | Alembic + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ + + + + + + + +
+ + +
+ + + + + +
+ + + + + + + + + + + + + diff --git a/_site/LICENSE b/_site/LICENSE deleted file mode 100644 index 670154e..0000000 --- a/_site/LICENSE +++ /dev/null @@ -1,116 +0,0 @@ -CC0 1.0 Universal - -Statement of Purpose - -The laws of most jurisdictions throughout the world automatically confer -exclusive Copyright and Related Rights (defined below) upon the creator and -subsequent owner(s) (each and all, an "owner") of an original work of -authorship and/or a database (each, a "Work"). - -Certain owners wish to permanently relinquish those rights to a Work for the -purpose of contributing to a commons of creative, cultural and scientific -works ("Commons") that the public can reliably and without fear of later -claims of infringement build upon, modify, incorporate in other works, reuse -and redistribute as freely as possible in any form whatsoever and for any -purposes, including without limitation commercial purposes. These owners may -contribute to the Commons to promote the ideal of a free culture and the -further production of creative, cultural and scientific works, or to gain -reputation or greater distribution for their Work in part through the use and -efforts of others. - -For these and/or other purposes and motivations, and without any expectation -of additional consideration or compensation, the person associating CC0 with a -Work (the "Affirmer"), to the extent that he or she is an owner of Copyright -and Related Rights in the Work, voluntarily elects to apply CC0 to the Work -and publicly distribute the Work under its terms, with knowledge of his or her -Copyright and Related Rights in the Work and the meaning and intended legal -effect of CC0 on those rights. - -1. Copyright and Related Rights. A Work made available under CC0 may be -protected by copyright and related or neighboring rights ("Copyright and -Related Rights"). Copyright and Related Rights include, but are not limited -to, the following: - - i. the right to reproduce, adapt, distribute, perform, display, communicate, - and translate a Work; - - ii. moral rights retained by the original author(s) and/or performer(s); - - iii. publicity and privacy rights pertaining to a person's image or likeness - depicted in a Work; - - iv. rights protecting against unfair competition in regards to a Work, - subject to the limitations in paragraph 4(a), below; - - v. rights protecting the extraction, dissemination, use and reuse of data in - a Work; - - vi. database rights (such as those arising under Directive 96/9/EC of the - European Parliament and of the Council of 11 March 1996 on the legal - protection of databases, and under any national implementation thereof, - including any amended or successor version of such directive); and - - vii. other similar, equivalent or corresponding rights throughout the world - based on applicable law or treaty, and any national implementations thereof. - -2. Waiver. To the greatest extent permitted by, but not in contravention of, -applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and -unconditionally waives, abandons, and surrenders all of Affirmer's Copyright -and Related Rights and associated claims and causes of action, whether now -known or unknown (including existing as well as future claims and causes of -action), in the Work (i) in all territories worldwide, (ii) for the maximum -duration provided by applicable law or treaty (including future time -extensions), (iii) in any current or future medium and for any number of -copies, and (iv) for any purpose whatsoever, including without limitation -commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes -the Waiver for the benefit of each member of the public at large and to the -detriment of Affirmer's heirs and successors, fully intending that such Waiver -shall not be subject to revocation, rescission, cancellation, termination, or -any other legal or equitable action to disrupt the quiet enjoyment of the Work -by the public as contemplated by Affirmer's express Statement of Purpose. - -3. Public License Fallback. Should any part of the Waiver for any reason be -judged legally invalid or ineffective under applicable law, then the Waiver -shall be preserved to the maximum extent permitted taking into account -Affirmer's express Statement of Purpose. In addition, to the extent the Waiver -is so judged Affirmer hereby grants to each affected person a royalty-free, -non transferable, non sublicensable, non exclusive, irrevocable and -unconditional license to exercise Affirmer's Copyright and Related Rights in -the Work (i) in all territories worldwide, (ii) for the maximum duration -provided by applicable law or treaty (including future time extensions), (iii) -in any current or future medium and for any number of copies, and (iv) for any -purpose whatsoever, including without limitation commercial, advertising or -promotional purposes (the "License"). The License shall be deemed effective as -of the date CC0 was applied by Affirmer to the Work. Should any part of the -License for any reason be judged legally invalid or ineffective under -applicable law, such partial invalidity or ineffectiveness shall not -invalidate the remainder of the License, and in such case Affirmer hereby -affirms that he or she will not (i) exercise any of his or her remaining -Copyright and Related Rights in the Work or (ii) assert any associated claims -and causes of action with respect to the Work, in either case contrary to -Affirmer's express Statement of Purpose. - -4. Limitations and Disclaimers. - - a. No trademark or patent rights held by Affirmer are waived, abandoned, - surrendered, licensed or otherwise affected by this document. - - b. Affirmer offers the Work as-is and makes no representations or warranties - of any kind concerning the Work, express, implied, statutory or otherwise, - including without limitation warranties of title, merchantability, fitness - for a particular purpose, non infringement, or the absence of latent or - other defects, accuracy, or the present or absence of errors, whether or not - discoverable, all to the greatest extent permissible under applicable law. - - c. Affirmer disclaims responsibility for clearing rights of other persons - that may apply to the Work or any use thereof, including without limitation - any person's Copyright and Related Rights in the Work. Further, Affirmer - disclaims responsibility for obtaining any necessary consents, permissions - or other rights required for any use of the Work. - - d. Affirmer understands and acknowledges that Creative Commons is not a - party to this document and has no duty or obligation with respect to this - CC0 or use of the Work. - -For more information, please see - diff --git a/_site/README.md b/_site/README.md deleted file mode 100644 index bc859f9..0000000 --- a/_site/README.md +++ /dev/null @@ -1,118 +0,0 @@ -# Go to our website: [LLaVA-XRay-Vision](https://lord-of-bugs.github.io/LLaVA-XRay-Vision/) - -# The Tactile theme - -[![.github/workflows/ci.yaml](https://github.com/pages-themes/tactile/actions/workflows/ci.yaml/badge.svg)](https://github.com/pages-themes/tactile/actions/workflows/ci.yaml) [![Gem Version](https://badge.fury.io/rb/jekyll-theme-tactile.svg)](https://badge.fury.io/rb/jekyll-theme-tactile) - -*Tactile is a Jekyll theme for GitHub Pages. You can [preview the theme to see what it looks like](http://pages-themes.github.io/tactile), or even [use it today](#usage).* - -![Thumbnail of Tactile](thumbnail.png) - -## Usage - -To use the Tactile theme: - -1. Add the following to your site's `_config.yml`: - - ```yml - remote_theme: pages-themes/tactile@v0.2.0 - plugins: - - jekyll-remote-theme # add this line to the plugins list if you already have one - ``` - -2. Optionally, if you'd like to preview your site on your computer, add the following to your site's `Gemfile`: - - ```ruby - gem "github-pages", group: :jekyll_plugins - ``` - -## Customizing - -### Configuration variables - -Tactile will respect the following variables, if set in your site's `_config.yml`: - -```yml -title: [The title of your site] -description: [A short description of your site's purpose] -``` - -Additionally, you may choose to set the following optional variables: - -```yml -show_downloads: ["true" or "false" (unquoted) to indicate whether to provide a download URL] -google_analytics: [Your Google Analytics tracking ID] -``` - -### Stylesheet - -If you'd like to add your own custom styles: - -1. Create a file called `/assets/css/style.scss` in your site -2. Add the following content to the top of the file, exactly as shown: - ```scss - --- - --- - - @import "{{ site.theme }}"; - ``` -3. Add any custom CSS (or Sass, including imports) you'd like immediately after the `@import` line - -*Note: If you'd like to change the theme's Sass variables, you must set new values before the `@import` line in your stylesheet.* - -### Layouts - -If you'd like to change the theme's HTML layout: - -1. For some changes such as a custom `favicon`, you can add custom files in your local `_includes` folder. The files [provided with the theme](https://github.com/pages-themes/tactile/tree/master/_includes) provide a starting point and are included by the [original layout template](https://github.com/pages-themes/tactile/blob/master/_layouts/default.html). -2. For more extensive changes, [copy the original template](https://github.com/pages-themes/tactile/blob/master/_layouts/default.html) from the theme's repository
(*Pro-tip: click "raw" to make copying easier*) -3. Create a file called `/_layouts/default.html` in your site -4. Paste the default layout content copied in the first step -5. Customize the layout as you'd like - -### Customizing Google Analytics code - -Google has released several iterations to their Google Analytics code over the years since this theme was first created. If you would like to take advantage of the latest code, paste it into `_includes/head-custom-google-analytics.html` in your Jekyll site. - -### Overriding GitHub-generated URLs - -Templates often rely on URLs supplied by GitHub such as links to your repository or links to download your project. If you'd like to override one or more default URLs: - -1. Look at [the template source](https://github.com/pages-themes/tactile/blob/master/_layouts/default.html) to determine the name of the variable. It will be in the form of `{{ site.github.zip_url }}`. -2. Specify the URL that you'd like the template to use in your site's `_config.yml`. For example, if the variable was `site.github.url`, you'd add the following: - ```yml - github: - zip_url: http://example.com/download.zip - another_url: another value - ``` -3. When your site is built, Jekyll will use the URL you specified, rather than the default one provided by GitHub. - -*Note: You must remove the `site.` prefix, and each variable name (after the `github.`) should be indent with two space below `github:`.* - -For more information, see [the Jekyll variables documentation](https://jekyllrb.com/docs/variables/). - -## Roadmap - -See the [open issues](https://github.com/pages-themes/tactile/issues) for a list of proposed features (and known issues). - -## Project philosophy - -The Tactile theme is intended to make it quick and easy for GitHub Pages users to create their first (or 100th) website. The theme should meet the vast majority of users' needs out of the box, erring on the side of simplicity rather than flexibility, and provide users the opportunity to opt-in to additional complexity if they have specific needs or wish to further customize their experience (such as adding custom CSS or modifying the default layout). It should also look great, but that goes without saying. - -## Contributing - -Interested in contributing to Tactile? We'd love your help. Tactile is an open source project, built one contribution at a time by users like you. See [the CONTRIBUTING file](docs/CONTRIBUTING.md) for instructions on how to contribute. - -### Previewing the theme locally - -If you'd like to preview the theme locally (for example, in the process of proposing a change): - -1. Clone down the theme's repository (`git clone https://github.com/pages-themes/tactile`) -2. `cd` into the theme's directory -3. Run `script/bootstrap` to install the necessary dependencies -4. Run `bundle exec jekyll serve` to start the preview server -5. Visit [`localhost:4000`](http://localhost:4000) in your browser to preview the theme - -### Running tests - -The theme contains a minimal test suite, to ensure a site with the theme would build successfully. To run the tests, simply run `script/cibuild`. You'll need to run `script/bootstrap` once before the test script will work. diff --git a/_site/another-page.html b/_site/another-page.html deleted file mode 100644 index eb88dbc..0000000 --- a/_site/another-page.html +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - - -Welcome to another page | LLaVA X-Ray Vision - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-

Welcome to another page

-

A data science capstone project exploring Deep Learning, Medical Imaging, and multi-modal Large Language Models.

-
-
- - -
-
-
-

Welcome to another page

- -

yay

- -

back

- -
- - - -
-
- - diff --git a/_site/assets/css/print.css b/_site/assets/css/print.css deleted file mode 100644 index 696e98d..0000000 --- a/_site/assets/css/print.css +++ /dev/null @@ -1,228 +0,0 @@ -html, body, div, span, applet, object, iframe, -h1, h2, h3, h4, h5, h6, p, blockquote, pre, -a, abbr, acronym, address, big, cite, code, -del, dfn, em, img, ins, kbd, q, s, samp, -small, strike, strong, sub, sup, tt, var, -b, u, i, center, -dl, dt, dd, ol, ul, li, -fieldset, form, label, legend, -table, caption, tbody, tfoot, thead, tr, th, td, -article, aside, canvas, details, embed, -figure, figcaption, footer, header, hgroup, -menu, nav, output, ruby, section, summary, -time, mark, audio, video { - padding: 0; - margin: 0; - font: inherit; - font-size: 100%; - vertical-align: baseline; - border: 0; -} -/* HTML5 display-role reset for older browsers */ -article, aside, details, figcaption, figure, -footer, header, hgroup, menu, nav, section { - display: block; -} -body { - line-height: 1; -} -ol, ul { - list-style: none; -} -blockquote, q { - quotes: none; -} -blockquote:before, blockquote:after, -q:before, q:after { - content: ''; - content: none; -} -table { - border-spacing: 0; - border-collapse: collapse; -} -body { - font-family: 'Helvetica Neue', Helvetica, Arial, serif; - font-size: 1.25em; - line-height: 1.5; - color: #000; -} - -a { - font-weight: bold; - color: #d5000d; -} - -header { - padding-top: 35px; - padding-bottom: 10px; -} - -header h1 { - font-size: 48px; - font-weight: bold; - line-height: 1.2; - color: #303030; - letter-spacing: -1px; -} - -header h2 { - font-size: 30px; - font-weight: normal; - line-height: 1.3; - color: #aaa; - letter-spacing: -1px; -} -#downloads { - display: none; -} -#main_content { - padding-top: 20px; -} - -code, pre { - margin-bottom: 30px; - font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal; - font-size: 12px; - color: #222; -} - -code { - padding: 0 3px; -} - -pre { - padding: 20px; - overflow: auto; - border: solid 1px #ddd; -} -pre code { - padding: 0; -} - -ul, ol, dl { - margin-bottom: 20px; -} - - -/* COMMON STYLES */ - -table { - width: 100%; - border: 1px solid #ebebeb; -} - -th { - font-weight: 500; -} - -td { - font-weight: 300; - text-align: center; - border: 1px solid #ebebeb; -} - -form { - padding: 20px; - background: #f2f2f2; - -} - - -/* GENERAL ELEMENT TYPE STYLES */ - -h1 { - font-size: 2.8em; -} - -h2 { - margin-bottom: 8px; - font-size: 32px; - font-weight: bold; - color: #303030; -} - -h3 { - margin-bottom: 8px; - font-size: 18px; - font-weight: bold; - color: #d5000d; -} - -h4 { - font-size: 16px; - font-weight: bold; - color: #303030; -} - -h5 { - font-size: 1em; - color: #303030; -} - -h6 { - font-size: .8em; - color: #303030; -} - -p { - margin-bottom: 20px; - font-weight: 300; -} - -a { - text-decoration: none; -} - -p a { - font-weight: 400; -} - -blockquote { - padding: 0 0 0 30px; - margin-bottom: 20px; - font-size: 1.6em; - border-left: 10px solid #e9e9e9; -} - -ul li { - list-style-position: inside; - list-style: disc; - padding-left: 20px; -} - -ol li { - list-style-position: inside; - list-style: decimal; - padding-left: 3px; -} - -dl dd { - font-style: italic; - font-weight: 100; -} - -footer { - padding-top: 20px; - padding-bottom: 30px; - margin-top: 40px; - font-size: 18px; - color: #aaa; -} - -footer a { - color: #666; -} - -/* MISC */ -.clearfix:after { - display: block; - height: 0; - clear: both; - visibility: hidden; - content: '.'; -} - -.clearfix {display: inline-block;} -* html .clearfix {height: 1%;} -.clearfix {display: block;} diff --git a/_site/assets/css/style.css b/_site/assets/css/style.css deleted file mode 100644 index a5f74b3..0000000 --- a/_site/assets/css/style.css +++ /dev/null @@ -1,387 +0,0 @@ -/* generated by rouge http://rouge.jneen.net/ original base16 by Chris Kempson (https://github.com/chriskempson/base16) -*/ -@import url("https://fonts.googleapis.com/css?family=Chivo:900"); -@import url("https://fonts.googleapis.com/css?family=Chivo:900"); -.highlight table td { padding: 5px; } - -.highlight table pre { margin: 0; } - -.highlight, .highlight .w { color: #d0d0d0; } - -.highlight .err { color: #151515; background-color: #ac4142; } - -.highlight .c, .highlight .cd, .highlight .cm, .highlight .c1, .highlight .cs { color: #888; } - -.highlight .cp { color: #f4bf75; } - -.highlight .nt { color: #f4bf75; } - -.highlight .o, .highlight .ow { color: #d0d0d0; } - -.highlight .p, .highlight .pi { color: #d0d0d0; } - -.highlight .gi { color: #90a959; } - -.highlight .gd { color: #ac4142; } - -.highlight .gh { color: #6a9fb5; font-weight: bold; } - -.highlight .k, .highlight .kn, .highlight .kp, .highlight .kr, .highlight .kv { color: #aa759f; } - -.highlight .kc { color: #d28445; } - -.highlight .kt { color: #d28445; } - -.highlight .kd { color: #d28445; } - -.highlight .s, .highlight .sb, .highlight .sc, .highlight .sd, .highlight .s2, .highlight .sh, .highlight .sx, .highlight .s1 { color: #90a959; } - -.highlight .sr { color: #75b5aa; } - -.highlight .si { color: #8f5536; } - -.highlight .se { color: #8f5536; } - -.highlight .nn { color: #f4bf75; } - -.highlight .nc { color: #f4bf75; } - -.highlight .no { color: #f4bf75; } - -.highlight .na { color: #6a9fb5; } - -.highlight .m, .highlight .mf, .highlight .mh, .highlight .mi, .highlight .il, .highlight .mo, .highlight .mb, .highlight .mx { color: #90a959; } - -.highlight .ss { color: #90a959; } - -/* http://meyerweb.com/eric/tools/css/reset/ v2.0 | 20110126 License: none (public domain) -*/ -html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { padding: 0; margin: 0; font: inherit; font-size: 100%; vertical-align: baseline; border: 0; } - -/* HTML5 display-role reset for older browsers */ -article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { display: block; } - -body { line-height: 1; } - -ol, ul { list-style: none; } - -blockquote, q { quotes: none; } - -blockquote:before, blockquote:after, q:before, q:after { content: ''; content: none; } - -table { border-spacing: 0; border-collapse: collapse; } - -/* LAYOUT STYLES */ -body { font-family: 'Helvetica Neue', Helvetica, Arial, serif; font-size: 1em; line-height: 1.5; color: #6d6d6d; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); background: #e7e7e7 url(../images/body-bg.png) 0 0 repeat; } - -a { color: #d5000d; } - -a:hover { color: #c5000c; } - -header { padding-top: 35px; padding-bottom: 25px; } - -header h1 { font-family: 'Chivo', 'Helvetica Neue', Helvetica, Arial, serif; font-size: 48px; font-weight: 900; line-height: 1.2; color: #303030; letter-spacing: -1px; } - -header h2 { font-size: 24px; font-weight: normal; line-height: 1.3; color: #aaa; letter-spacing: -1px; } - -#container { min-height: 595px; background: transparent url(../images/highlight-bg.jpg) 50% 0 no-repeat; } - -.inner { width: 620px; margin: 0 auto; } - -#container .inner img { max-width: 100%; } - -#downloads { margin-bottom: 40px; } - -a.button { display: block; float: left; width: 179px; padding: 12px 8px 12px 8px; margin-right: 14px; font-size: 15px; font-weight: bold; line-height: 25px; color: #303030; background: #fdfdfd; /* Old browsers */ background: -moz-linear-gradient(top, #fdfdfd 0%, #f2f2f2 100%); /* FF3.6+ */ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fdfdfd), color-stop(100%, #f2f2f2)); /* Chrome,Safari4+ */ background: -webkit-linear-gradient(top, #fdfdfd 0%, #f2f2f2 100%); /* Chrome10+,Safari5.1+ */ background: -o-linear-gradient(top, #fdfdfd 0%, #f2f2f2 100%); /* Opera 11.10+ */ background: -ms-linear-gradient(top, #fdfdfd 0%, #f2f2f2 100%); /* IE10+ */ background: linear-gradient(to top, #fdfdfd 0%, #f2f2f2 100%); /* W3C */ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fdfdfd', endColorstr='#f2f2f2',GradientType=0 ); /* IE6-9 */ border-top: solid 1px #cbcbcb; border-right: solid 1px #b7b7b7; border-bottom: solid 1px #b3b3b3; border-left: solid 1px #b7b7b7; border-radius: 30px; -webkit-box-shadow: 10px 10px 5px #888; -moz-box-shadow: 10px 10px 5px #888; box-shadow: 0px 1px 5px #e8e8e8; -moz-border-radius: 30px; -webkit-border-radius: 30px; } - -a.button:hover { background: #fafafa; /* Old browsers */ background: -moz-linear-gradient(top, #fdfdfd 0%, #f6f6f6 100%); /* FF3.6+ */ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fdfdfd), color-stop(100%, #f6f6f6)); /* Chrome,Safari4+ */ background: -webkit-linear-gradient(top, #fdfdfd 0%, #f6f6f6 100%); /* Chrome10+,Safari5.1+ */ background: -o-linear-gradient(top, #fdfdfd 0%, #f6f6f6 100%); /* Opera 11.10+ */ background: -ms-linear-gradient(top, #fdfdfd 0%, #f6f6f6 100%); /* IE10+ */ background: linear-gradient(to top, #fdfdfd 0%, #f6f6f6, 100%); /* W3C */ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fdfdfd', endColorstr='#f6f6f6',GradientType=0 ); /* IE6-9 */ border-top: solid 1px #b7b7b7; border-right: solid 1px #b3b3b3; border-bottom: solid 1px #b3b3b3; border-left: solid 1px #b3b3b3; } - -a.button span { display: block; height: 23px; padding-left: 50px; } - -#download-zip span { background: transparent url(../images/zip-icon.png) 12px 50% no-repeat; } - -#download-tar-gz span { background: transparent url(../images/tar-gz-icon.png) 12px 50% no-repeat; } - -#view-on-github span { background: transparent url(../images/octocat-icon.png) 12px 50% no-repeat; } - -#view-on-github { margin-right: 0; } - -code, pre { margin-bottom: 30px; font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace; font-size: 14px; color: #222; } - -code { padding: 0 3px; background-color: #f2f2f2; border: solid 1px #ddd; } - -pre { padding: 20px; overflow: auto; color: #f2f2f2; text-shadow: none; background: #303030; } - -pre code { padding: 0; color: #f2f2f2; background-color: #303030; border: none; } - -ul, ol, dl { margin-bottom: 20px; } - -/* COMMON STYLES */ -hr { height: 1px; padding-bottom: 1em; margin-top: 1em; line-height: 1px; background: transparent url("../images/hr.png") 50% 0 no-repeat; border: none; } - -strong { font-weight: bold; } - -em { font-style: italic; } - -table { width: 100%; border: 1px solid #ebebeb; } - -th { font-weight: 500; } - -td { font-weight: 300; text-align: center; border: 1px solid #ebebeb; } - -form { padding: 20px; background: #f2f2f2; } - -/* GENERAL ELEMENT TYPE STYLES */ -h1 { font-size: 32px; } - -h2 { margin-bottom: 8px; font-size: 22px; font-weight: bold; color: #303030; } - -h3 { margin-bottom: 8px; font-size: 18px; font-weight: bold; color: #d5000d; } - -h4 { font-size: 16px; font-weight: bold; color: #303030; } - -h5 { font-size: 1em; color: #303030; } - -h6 { font-size: .8em; color: #303030; } - -p { margin-bottom: 20px; font-weight: 300; } - -a { text-decoration: none; } - -p a { font-weight: 400; } - -blockquote { padding: 0 0 0 30px; margin-bottom: 20px; font-size: 1.6em; border-left: 10px solid #e9e9e9; } - -ul li { list-style-position: inside; list-style: disc; padding-left: 20px; } - -ol li { list-style-position: inside; list-style: decimal; padding-left: 3px; } - -dl dt { color: #303030; } - -footer { padding-top: 20px; padding-bottom: 30px; margin-top: 40px; font-size: 13px; color: #aaa; background: transparent url("../images/hr.png") 0 0 no-repeat; } - -footer a { color: #666; } - -footer a:hover { color: #444; } - -/* MISC */ -.clearfix:after { display: block; height: 0; clear: both; visibility: hidden; content: '.'; } - -.clearfix { display: inline-block; } - -* html .clearfix { height: 1%; } - -.clearfix { display: block; } - -/* #Media Queries -================================================== */ -/* Smaller than standard 960 (devices and browsers) */ -/* Tablet Portrait size to standard 960 (devices and browsers) */ -/* All Mobile Sizes (devices and browser) */ -@media only screen and (max-width: 767px) { header { padding-top: 10px; padding-bottom: 10px; } - #downloads { margin-bottom: 25px; } - #download-zip, #download-tar-gz { display: none; } - .inner { width: 94%; margin: 0 auto; } - ul li { margin-left: 10px; padding-left: 10px; } - ol li { margin-left: 10px; } } -/* Mobile Landscape Size to Tablet Portrait (devices and browsers) */ -/* Mobile Portrait Size to Mobile Landscape Size (devices and browsers) */ -/* generated by rouge http://rouge.jneen.net/ original base16 by Chris Kempson (https://github.com/chriskempson/base16) -*/ -.highlight table td { padding: 5px; } - -.highlight table pre { margin: 0; } - -.highlight, .highlight .w { color: #d0d0d0; } - -.highlight .err { color: #151515; background-color: #ac4142; } - -.highlight .c, .highlight .cd, .highlight .cm, .highlight .c1, .highlight .cs { color: #888; } - -.highlight .cp { color: #f4bf75; } - -.highlight .nt { color: #f4bf75; } - -.highlight .o, .highlight .ow { color: #d0d0d0; } - -.highlight .p, .highlight .pi { color: #d0d0d0; } - -.highlight .gi { color: #90a959; } - -.highlight .gd { color: #ac4142; } - -.highlight .gh { color: #6a9fb5; font-weight: bold; } - -.highlight .k, .highlight .kn, .highlight .kp, .highlight .kr, .highlight .kv { color: #aa759f; } - -.highlight .kc { color: #d28445; } - -.highlight .kt { color: #d28445; } - -.highlight .kd { color: #d28445; } - -.highlight .s, .highlight .sb, .highlight .sc, .highlight .sd, .highlight .s2, .highlight .sh, .highlight .sx, .highlight .s1 { color: #90a959; } - -.highlight .sr { color: #75b5aa; } - -.highlight .si { color: #8f5536; } - -.highlight .se { color: #8f5536; } - -.highlight .nn { color: #f4bf75; } - -.highlight .nc { color: #f4bf75; } - -.highlight .no { color: #f4bf75; } - -.highlight .na { color: #6a9fb5; } - -.highlight .m, .highlight .mf, .highlight .mh, .highlight .mi, .highlight .il, .highlight .mo, .highlight .mb, .highlight .mx { color: #90a959; } - -.highlight .ss { color: #90a959; } - -/* http://meyerweb.com/eric/tools/css/reset/ v2.0 | 20110126 License: none (public domain) -*/ -html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { padding: 0; margin: 0; font: inherit; font-size: 100%; vertical-align: baseline; border: 0; } - -/* HTML5 display-role reset for older browsers */ -article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { display: block; } - -body { line-height: 1; } - -ol, ul { list-style: none; } - -blockquote, q { quotes: none; } - -blockquote:before, blockquote:after, q:before, q:after { content: ''; content: none; } - -table { border-spacing: 0; border-collapse: collapse; } - -/* LAYOUT STYLES */ -body { font-family: 'Helvetica Neue', Helvetica, Arial, serif; font-size: 1em; line-height: 1.5; color: #6d6d6d; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); background: #e7e7e7 url(../images/body-bg.png) 0 0 repeat; } - -a { color: #d5000d; } - -a:hover { color: #c5000c; } - -header { padding-top: 35px; padding-bottom: 25px; } - -header h1 { font-family: 'Chivo', 'Helvetica Neue', Helvetica, Arial, serif; font-size: 48px; font-weight: 900; line-height: 1.2; color: #303030; letter-spacing: -1px; } - -header h2 { font-size: 24px; font-weight: normal; line-height: 1.3; color: #aaa; letter-spacing: -1px; } - -#container { min-height: 595px; background: transparent url(../images/highlight-bg.jpg) 50% 0 no-repeat; } - -.inner { width: 620px; margin: 0 auto; } - -#container .inner img { max-width: 100%; } - -#downloads { margin-bottom: 40px; } - -a.button { display: block; float: left; width: 179px; padding: 12px 8px 12px 8px; margin-right: 14px; font-size: 15px; font-weight: bold; line-height: 25px; color: #303030; background: #fdfdfd; /* Old browsers */ background: -moz-linear-gradient(top, #fdfdfd 0%, #f2f2f2 100%); /* FF3.6+ */ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fdfdfd), color-stop(100%, #f2f2f2)); /* Chrome,Safari4+ */ background: -webkit-linear-gradient(top, #fdfdfd 0%, #f2f2f2 100%); /* Chrome10+,Safari5.1+ */ background: -o-linear-gradient(top, #fdfdfd 0%, #f2f2f2 100%); /* Opera 11.10+ */ background: -ms-linear-gradient(top, #fdfdfd 0%, #f2f2f2 100%); /* IE10+ */ background: linear-gradient(to top, #fdfdfd 0%, #f2f2f2 100%); /* W3C */ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fdfdfd', endColorstr='#f2f2f2',GradientType=0 ); /* IE6-9 */ border-top: solid 1px #cbcbcb; border-right: solid 1px #b7b7b7; border-bottom: solid 1px #b3b3b3; border-left: solid 1px #b7b7b7; border-radius: 30px; -webkit-box-shadow: 10px 10px 5px #888; -moz-box-shadow: 10px 10px 5px #888; box-shadow: 0px 1px 5px #e8e8e8; -moz-border-radius: 30px; -webkit-border-radius: 30px; } - -a.button:hover { background: #fafafa; /* Old browsers */ background: -moz-linear-gradient(top, #fdfdfd 0%, #f6f6f6 100%); /* FF3.6+ */ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fdfdfd), color-stop(100%, #f6f6f6)); /* Chrome,Safari4+ */ background: -webkit-linear-gradient(top, #fdfdfd 0%, #f6f6f6 100%); /* Chrome10+,Safari5.1+ */ background: -o-linear-gradient(top, #fdfdfd 0%, #f6f6f6 100%); /* Opera 11.10+ */ background: -ms-linear-gradient(top, #fdfdfd 0%, #f6f6f6 100%); /* IE10+ */ background: linear-gradient(to top, #fdfdfd 0%, #f6f6f6, 100%); /* W3C */ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fdfdfd', endColorstr='#f6f6f6',GradientType=0 ); /* IE6-9 */ border-top: solid 1px #b7b7b7; border-right: solid 1px #b3b3b3; border-bottom: solid 1px #b3b3b3; border-left: solid 1px #b3b3b3; } - -a.button span { display: block; height: 23px; padding-left: 50px; } - -#download-zip span { background: transparent url(../images/zip-icon.png) 12px 50% no-repeat; } - -#download-tar-gz span { background: transparent url(../images/tar-gz-icon.png) 12px 50% no-repeat; } - -#view-on-github span { background: transparent url(../images/octocat-icon.png) 12px 50% no-repeat; } - -#view-on-github { margin-right: 0; } - -code, pre { margin-bottom: 30px; font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace; font-size: 14px; color: #222; } - -code { padding: 0 3px; background-color: #f2f2f2; border: solid 1px #ddd; } - -pre { padding: 20px; overflow: auto; color: #f2f2f2; text-shadow: none; background: #303030; } - -pre code { padding: 0; color: #f2f2f2; background-color: #303030; border: none; } - -ul, ol, dl { margin-bottom: 20px; } - -/* COMMON STYLES */ -hr { height: 1px; padding-bottom: 1em; margin-top: 1em; line-height: 1px; background: transparent url("../images/hr.png") 50% 0 no-repeat; border: none; } - -strong { font-weight: bold; } - -em { font-style: italic; } - -table { width: 100%; border: 1px solid #ebebeb; } - -th { font-weight: 500; } - -td { font-weight: 300; text-align: center; border: 1px solid #ebebeb; } - -form { padding: 20px; background: #f2f2f2; } - -/* GENERAL ELEMENT TYPE STYLES */ -h1 { font-size: 32px; } - -h2 { margin-bottom: 8px; font-size: 22px; font-weight: bold; color: #303030; } - -h3 { margin-bottom: 8px; font-size: 18px; font-weight: bold; color: #d5000d; } - -h4 { font-size: 16px; font-weight: bold; color: #303030; } - -h5 { font-size: 1em; color: #303030; } - -h6 { font-size: .8em; color: #303030; } - -p { margin-bottom: 20px; font-weight: 300; } - -a { text-decoration: none; } - -p a { font-weight: 400; } - -blockquote { padding: 0 0 0 30px; margin-bottom: 20px; font-size: 1.6em; border-left: 10px solid #e9e9e9; } - -ul li { list-style-position: inside; list-style: disc; padding-left: 20px; } - -ol li { list-style-position: inside; list-style: decimal; padding-left: 3px; } - -dl dt { color: #303030; } - -footer { padding-top: 20px; padding-bottom: 30px; margin-top: 40px; font-size: 13px; color: #aaa; background: transparent url("../images/hr.png") 0 0 no-repeat; } - -footer a { color: #666; } - -footer a:hover { color: #444; } - -/* MISC */ -.clearfix:after { display: block; height: 0; clear: both; visibility: hidden; content: '.'; } - -.clearfix { display: inline-block; } - -* html .clearfix { height: 1%; } - -.clearfix { display: block; } - -/* #Media Queries -================================================== */ -/* Smaller than standard 960 (devices and browsers) */ -/* Tablet Portrait size to standard 960 (devices and browsers) */ -/* All Mobile Sizes (devices and browser) */ -@media only screen and (max-width: 767px) { header { padding-top: 10px; padding-bottom: 10px; } - #downloads { margin-bottom: 25px; } - #download-zip, #download-tar-gz { display: none; } - .inner { width: 94%; margin: 0 auto; } - ul li { margin-left: 10px; padding-left: 10px; } - ol li { margin-left: 10px; } } -/* Mobile Landscape Size to Tablet Portrait (devices and browsers) */ -/* Mobile Portrait Size to Mobile Landscape Size (devices and browsers) */ -header h1 { font-family: "Cormorant Garamond", serif; font-size: 48px; font-weight: 900; line-height: 1.2; text-shadow: 3px 3px 3px #929aab; color: #132743; letter-spacing: -1px; } - -header h2 { font-size: 30px; font-weight: normal; line-height: 1.3; color: #a7bcb9; -webkit-text-stroke: 0.5px black; letter-spacing: -1px; } - -.inner { width: 900px; margin: 0 auto; } - -h2 { margin-bottom: 8px; font-size: 28px; font-weight: bold; color: #303030; text-shadow: 1px 1px 2px #929aab; } - -footer { padding-top: 20px; padding-bottom: 30px; margin-top: 40px; font-size: 18px; color: #85a6b1; background: transparent url("../images/hr.png") 0 0 no-repeat; } - -body { font-family: "Cormorant Garamond", serif; font-size: 1.25em; font-style: normal; font-weight: normal; line-height: 1.5; color: #85a6b1; -webkit-text-stroke: 0.25px black; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); background: #e7e7e7 url(../images/body-bg.png) 0 0 repeat; } - -hr { height: 1px; padding-bottom: 1em; margin-top: 1em; line-height: 1px; background: transparent url("../images/hr.png") 50% 0 no-repeat; border: none; } diff --git a/_site/assets/default-offline-image.png b/_site/assets/default-offline-image.png new file mode 100644 index 0000000..e3f8d6f Binary files /dev/null and b/_site/assets/default-offline-image.png differ diff --git a/_site/assets/default-social-image.png b/_site/assets/default-social-image.png new file mode 100644 index 0000000..7119c42 Binary files /dev/null and b/_site/assets/default-social-image.png differ diff --git a/_site/assets/images/body-bg.png b/_site/assets/images/body-bg.png deleted file mode 100644 index 5e8c4c2..0000000 Binary files a/_site/assets/images/body-bg.png and /dev/null differ diff --git a/_site/assets/images/highlight-bg.jpg b/_site/assets/images/highlight-bg.jpg deleted file mode 100644 index 355e089..0000000 Binary files a/_site/assets/images/highlight-bg.jpg and /dev/null differ diff --git a/_site/assets/images/hr.png b/_site/assets/images/hr.png deleted file mode 100644 index d32f689..0000000 Binary files a/_site/assets/images/hr.png and /dev/null differ diff --git a/_site/assets/images/octocat-icon.png b/_site/assets/images/octocat-icon.png deleted file mode 100644 index 2406608..0000000 Binary files a/_site/assets/images/octocat-icon.png and /dev/null differ diff --git a/_site/assets/images/tar-gz-icon.png b/_site/assets/images/tar-gz-icon.png deleted file mode 100644 index 502e67d..0000000 Binary files a/_site/assets/images/tar-gz-icon.png and /dev/null differ diff --git a/_site/assets/images/zip-icon.png b/_site/assets/images/zip-icon.png deleted file mode 100644 index 732aced..0000000 Binary files a/_site/assets/images/zip-icon.png and /dev/null differ diff --git a/_site/assets/logos/logo.svg b/_site/assets/logos/logo.svg new file mode 100644 index 0000000..4c483c6 --- /dev/null +++ b/_site/assets/logos/logo.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/_site/assets/logos/logo@1024px.png b/_site/assets/logos/logo@1024px.png new file mode 100644 index 0000000..ac9fcac Binary files /dev/null and b/_site/assets/logos/logo@1024px.png differ diff --git a/_site/assets/logos/logo@120px.png b/_site/assets/logos/logo@120px.png new file mode 100644 index 0000000..9bcefe4 Binary files /dev/null and b/_site/assets/logos/logo@120px.png differ diff --git a/_site/assets/logos/logo@144px.png b/_site/assets/logos/logo@144px.png new file mode 100644 index 0000000..c8bc1bc Binary files /dev/null and b/_site/assets/logos/logo@144px.png differ diff --git a/_site/assets/logos/logo@16px.png b/_site/assets/logos/logo@16px.png new file mode 100644 index 0000000..864c271 Binary files /dev/null and b/_site/assets/logos/logo@16px.png differ diff --git a/_site/assets/logos/logo@180px.png b/_site/assets/logos/logo@180px.png new file mode 100644 index 0000000..74c153a Binary files /dev/null and b/_site/assets/logos/logo@180px.png differ diff --git a/_site/assets/logos/logo@32px.png b/_site/assets/logos/logo@32px.png new file mode 100644 index 0000000..f4bd79e Binary files /dev/null and b/_site/assets/logos/logo@32px.png differ diff --git a/_site/assets/logos/logo@512px.png b/_site/assets/logos/logo@512px.png new file mode 100644 index 0000000..56444e4 Binary files /dev/null and b/_site/assets/logos/logo@512px.png differ diff --git a/_site/assets/logos/logo@96px.png b/_site/assets/logos/logo@96px.png new file mode 100644 index 0000000..b8c41f1 Binary files /dev/null and b/_site/assets/logos/logo@96px.png differ diff --git a/_site/assets/scripts/fetch.js b/_site/assets/scripts/fetch.js new file mode 100644 index 0000000..dfb74be --- /dev/null +++ b/_site/assets/scripts/fetch.js @@ -0,0 +1,458 @@ +(function(self) { + 'use strict'; + + if (self.fetch) { + return + } + + var support = { + searchParams: 'URLSearchParams' in self, + iterable: 'Symbol' in self && 'iterator' in Symbol, + blob: 'FileReader' in self && 'Blob' in self && (function() { + try { + new Blob() + return true + } catch(e) { + return false + } + })(), + formData: 'FormData' in self, + arrayBuffer: 'ArrayBuffer' in self + } + + if (support.arrayBuffer) { + var viewClasses = [ + '[object Int8Array]', + '[object Uint8Array]', + '[object Uint8ClampedArray]', + '[object Int16Array]', + '[object Uint16Array]', + '[object Int32Array]', + '[object Uint32Array]', + '[object Float32Array]', + '[object Float64Array]' + ] + + var isDataView = function(obj) { + return obj && DataView.prototype.isPrototypeOf(obj) + } + + var isArrayBufferView = ArrayBuffer.isView || function(obj) { + return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1 + } + } + + function normalizeName(name) { + if (typeof name !== 'string') { + name = String(name) + } + if (/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(name)) { + throw new TypeError('Invalid character in header field name') + } + return name.toLowerCase() + } + + function normalizeValue(value) { + if (typeof value !== 'string') { + value = String(value) + } + return value + } + + // Build a destructive iterator for the value list + function iteratorFor(items) { + var iterator = { + next: function() { + var value = items.shift() + return {done: value === undefined, value: value} + } + } + + if (support.iterable) { + iterator[Symbol.iterator] = function() { + return iterator + } + } + + return iterator + } + + function Headers(headers) { + this.map = {} + + if (headers instanceof Headers) { + headers.forEach(function(value, name) { + this.append(name, value) + }, this) + + } else if (headers) { + Object.getOwnPropertyNames(headers).forEach(function(name) { + this.append(name, headers[name]) + }, this) + } + } + + Headers.prototype.append = function(name, value) { + name = normalizeName(name) + value = normalizeValue(value) + var oldValue = this.map[name] + this.map[name] = oldValue ? oldValue+','+value : value + } + + Headers.prototype['delete'] = function(name) { + delete this.map[normalizeName(name)] + } + + Headers.prototype.get = function(name) { + name = normalizeName(name) + return this.has(name) ? this.map[name] : null + } + + Headers.prototype.has = function(name) { + return this.map.hasOwnProperty(normalizeName(name)) + } + + Headers.prototype.set = function(name, value) { + this.map[normalizeName(name)] = normalizeValue(value) + } + + Headers.prototype.forEach = function(callback, thisArg) { + for (var name in this.map) { + if (this.map.hasOwnProperty(name)) { + callback.call(thisArg, this.map[name], name, this) + } + } + } + + Headers.prototype.keys = function() { + var items = [] + this.forEach(function(value, name) { items.push(name) }) + return iteratorFor(items) + } + + Headers.prototype.values = function() { + var items = [] + this.forEach(function(value) { items.push(value) }) + return iteratorFor(items) + } + + Headers.prototype.entries = function() { + var items = [] + this.forEach(function(value, name) { items.push([name, value]) }) + return iteratorFor(items) + } + + if (support.iterable) { + Headers.prototype[Symbol.iterator] = Headers.prototype.entries + } + + function consumed(body) { + if (body.bodyUsed) { + return Promise.reject(new TypeError('Already read')) + } + body.bodyUsed = true + } + + function fileReaderReady(reader) { + return new Promise(function(resolve, reject) { + reader.onload = function() { + resolve(reader.result) + } + reader.onerror = function() { + reject(reader.error) + } + }) + } + + function readBlobAsArrayBuffer(blob) { + var reader = new FileReader() + var promise = fileReaderReady(reader) + reader.readAsArrayBuffer(blob) + return promise + } + + function readBlobAsText(blob) { + var reader = new FileReader() + var promise = fileReaderReady(reader) + reader.readAsText(blob) + return promise + } + + function readArrayBufferAsText(buf) { + var view = new Uint8Array(buf) + var chars = new Array(view.length) + + for (var i = 0; i < view.length; i++) { + chars[i] = String.fromCharCode(view[i]) + } + return chars.join('') + } + + function bufferClone(buf) { + if (buf.slice) { + return buf.slice(0) + } else { + var view = new Uint8Array(buf.byteLength) + view.set(new Uint8Array(buf)) + return view.buffer + } + } + + function Body() { + this.bodyUsed = false + + this._initBody = function(body) { + this._bodyInit = body + if (!body) { + this._bodyText = '' + } else if (typeof body === 'string') { + this._bodyText = body + } else if (support.blob && Blob.prototype.isPrototypeOf(body)) { + this._bodyBlob = body + } else if (support.formData && FormData.prototype.isPrototypeOf(body)) { + this._bodyFormData = body + } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) { + this._bodyText = body.toString() + } else if (support.arrayBuffer && support.blob && isDataView(body)) { + this._bodyArrayBuffer = bufferClone(body.buffer) + // IE 10-11 can't handle a DataView body. + this._bodyInit = new Blob([this._bodyArrayBuffer]) + } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) { + this._bodyArrayBuffer = bufferClone(body) + } else { + throw new Error('unsupported BodyInit type') + } + + if (!this.headers.get('content-type')) { + if (typeof body === 'string') { + this.headers.set('content-type', 'text/plain;charset=UTF-8') + } else if (this._bodyBlob && this._bodyBlob.type) { + this.headers.set('content-type', this._bodyBlob.type) + } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) { + this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8') + } + } + } + + if (support.blob) { + this.blob = function() { + var rejected = consumed(this) + if (rejected) { + return rejected + } + + if (this._bodyBlob) { + return Promise.resolve(this._bodyBlob) + } else if (this._bodyArrayBuffer) { + return Promise.resolve(new Blob([this._bodyArrayBuffer])) + } else if (this._bodyFormData) { + throw new Error('could not read FormData body as blob') + } else { + return Promise.resolve(new Blob([this._bodyText])) + } + } + + this.arrayBuffer = function() { + if (this._bodyArrayBuffer) { + return consumed(this) || Promise.resolve(this._bodyArrayBuffer) + } else { + return this.blob().then(readBlobAsArrayBuffer) + } + } + } + + this.text = function() { + var rejected = consumed(this) + if (rejected) { + return rejected + } + + if (this._bodyBlob) { + return readBlobAsText(this._bodyBlob) + } else if (this._bodyArrayBuffer) { + return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer)) + } else if (this._bodyFormData) { + throw new Error('could not read FormData body as text') + } else { + return Promise.resolve(this._bodyText) + } + } + + if (support.formData) { + this.formData = function() { + return this.text().then(decode) + } + } + + this.json = function() { + return this.text().then(JSON.parse) + } + + return this + } + + // HTTP methods whose capitalization should be normalized + var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'] + + function normalizeMethod(method) { + var upcased = method.toUpperCase() + return (methods.indexOf(upcased) > -1) ? upcased : method + } + + function Request(input, options) { + options = options || {} + var body = options.body + + if (input instanceof Request) { + if (input.bodyUsed) { + throw new TypeError('Already read') + } + this.url = input.url + this.credentials = input.credentials + if (!options.headers) { + this.headers = new Headers(input.headers) + } + this.method = input.method + this.mode = input.mode + if (!body && input._bodyInit != null) { + body = input._bodyInit + input.bodyUsed = true + } + } else { + this.url = String(input) + } + + this.credentials = options.credentials || this.credentials || 'omit' + if (options.headers || !this.headers) { + this.headers = new Headers(options.headers) + } + this.method = normalizeMethod(options.method || this.method || 'GET') + this.mode = options.mode || this.mode || null + this.referrer = null + + if ((this.method === 'GET' || this.method === 'HEAD') && body) { + throw new TypeError('Body not allowed for GET or HEAD requests') + } + this._initBody(body) + } + + Request.prototype.clone = function() { + return new Request(this, { body: this._bodyInit }) + } + + function decode(body) { + var form = new FormData() + body.trim().split('&').forEach(function(bytes) { + if (bytes) { + var split = bytes.split('=') + var name = split.shift().replace(/\+/g, ' ') + var value = split.join('=').replace(/\+/g, ' ') + form.append(decodeURIComponent(name), decodeURIComponent(value)) + } + }) + return form + } + + function parseHeaders(rawHeaders) { + var headers = new Headers() + rawHeaders.split(/\r?\n/).forEach(function(line) { + var parts = line.split(':') + var key = parts.shift().trim() + if (key) { + var value = parts.join(':').trim() + headers.append(key, value) + } + }) + return headers + } + + Body.call(Request.prototype) + + function Response(bodyInit, options) { + if (!options) { + options = {} + } + + this.type = 'default' + this.status = 'status' in options ? options.status : 200 + this.ok = this.status >= 200 && this.status < 300 + this.statusText = 'statusText' in options ? options.statusText : 'OK' + this.headers = new Headers(options.headers) + this.url = options.url || '' + this._initBody(bodyInit) + } + + Body.call(Response.prototype) + + Response.prototype.clone = function() { + return new Response(this._bodyInit, { + status: this.status, + statusText: this.statusText, + headers: new Headers(this.headers), + url: this.url + }) + } + + Response.error = function() { + var response = new Response(null, {status: 0, statusText: ''}) + response.type = 'error' + return response + } + + var redirectStatuses = [301, 302, 303, 307, 308] + + Response.redirect = function(url, status) { + if (redirectStatuses.indexOf(status) === -1) { + throw new RangeError('Invalid status code') + } + + return new Response(null, {status: status, headers: {location: url}}) + } + + self.Headers = Headers + self.Request = Request + self.Response = Response + + self.fetch = function(input, init) { + return new Promise(function(resolve, reject) { + var request = new Request(input, init) + var xhr = new XMLHttpRequest() + + xhr.onload = function() { + var options = { + status: xhr.status, + statusText: xhr.statusText, + headers: parseHeaders(xhr.getAllResponseHeaders() || '') + } + options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL') + var body = 'response' in xhr ? xhr.response : xhr.responseText + resolve(new Response(body, options)) + } + + xhr.onerror = function() { + reject(new TypeError('Network request failed')) + } + + xhr.ontimeout = function() { + reject(new TypeError('Network request failed')) + } + + xhr.open(request.method, request.url, true) + + if (request.credentials === 'include') { + xhr.withCredentials = true + } + + if ('responseType' in xhr && support.blob) { + xhr.responseType = 'blob' + } + + request.headers.forEach(function(value, name) { + xhr.setRequestHeader(name, value) + }) + + xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit) + }) + } + self.fetch.polyfill = true +})(typeof self !== 'undefined' ? self : this); diff --git a/_site/assets/search.json b/_site/assets/search.json new file mode 100644 index 0000000..6337a3e --- /dev/null +++ b/_site/assets/search.json @@ -0,0 +1,61 @@ + + +[ + + + + + { + "title": "Description of an Alembic", + "excerpt": "The complete distilling apparatus consists of three parts: the “cucurbit” (Arabic ḳarʿa, Greek βίκος), the still pot containing the liquid to be distilled, which is heated by a flame; the “head” or “cap” (Arabic anbiḳ, Greek ἄμβιξ) which fits over the mouth of the cucurbit to receive the vapors, with an attached downward-sloping “tube” (Greek σωλήν), leading to the “receiver” (Arabic ḳābila, Greek ἄγγος or φιάλη) container.\n\n", + "content": "The complete distilling apparatus consists of three parts: the “cucurbit” (Arabic ḳarʿa, Greek βίκος), the still pot containing the liquid to be distilled, which is heated by a flame; the “head” or “cap” (Arabic anbiḳ, Greek ἄμβιξ) which fits over the mouth of the cucurbit to receive the vapors, with an attached downward-sloping “tube” (Greek σωλήν), leading to the “receiver” (Arabic ḳābila, Greek ἄγγος or φιάλη) container.\n\n\n\nRetorts have the “cap” and the “cucurbit” made into one. The anbik is also called the raʾs (head) of the cucurbit. The liquid in the cucurbit is heated or boiled; the vapour rises into the anbik, where it cools by contact with the walls and condenses, running down the spout into the receiver. A modern descendant of the alembic is the pot still, used to produce distilled beverages.\n\nOriginally from Alembic - Wikipedia\n", + "url": "/general/external%20sources/2016/08/27/example-post-one/" + }, + + { + "title": "History of the Alembic", + "excerpt": "Dioscorides’ ambix (described in his De materia medica) is a helmet-shaped lid for gathering condensed mercury. For Athenaeus (~ 225 C.E.) it is a bottle or flask. For later chemists it denotes various parts of crude distillation devices.\n\n", + "content": "Dioscorides’ ambix (described in his De materia medica) is a helmet-shaped lid for gathering condensed mercury. For Athenaeus (~ 225 C.E.) it is a bottle or flask. For later chemists it denotes various parts of crude distillation devices.\n\n\n\nAlembic drawings appear in works of Cleopatra the Alchemist, Synesius, and Zosimos of Panopolis. There were alembics with two (dibikos) and three (tribikos) receivers.[4] According to Zosimos of Panopolis, the alembic was invented by Mary the Jewess.[5]\n\nThe anbik is described by Ibn al-Awwam in his Kitab al-Filaha (Book of Agriculture), where he explains how rose-water is distilled. Amongst others, it is mentioned in the Mafatih al-Ulum (Key of Sciences) of Khwarizmi and the Kitab al-Asrar (Book of Secrets) of Al-Razi. Some illustrations occur in the Latin translations of works which are attributed to Geber.[2]\n\nOriginally from Alembic - Wikipedia\n", + "url": "/history/external%20sources/2016/08/28/example-post-two/" + }, + + { + "title": "Description of a Pot Still", + "excerpt": "A pot still is a type of still used in distilling spirits such as whisky or brandy. Heat is applied directly to the pot containing the wash (for whisky) or wine (for brandy).\n", + "content": "A pot still is a type of still used in distilling spirits such as whisky or brandy. Heat is applied directly to the pot containing the wash (for whisky) or wine (for brandy). This is called a batch distillation (as opposed to a continuous distillation).\n\nAt standard atmospheric pressure, alcohol boils at 78 °C (172 °F), while water boils at 100 °C (212 °F). During distillation, the vapour contains more alcohol than the liquid. When the vapours are condensed, the resulting liquid contains a higher concentration of alcohol. In the pot still, the alcohol and water vapour combine with esters and flow from the still through the condensing coil. There they condense into the first distillation liquid, the so-called “low wines”. The low wines have a strength of about 25–35% alcohol by volume, and flow into a second still. It is then distilled a second time to produce the colourless spirit, collected at about 70% alcohol by volume. Colour is added through maturation in an oak aging barrel, and develops over time.\n\nThe modern pot still is a descendant of the alembic, an earlier distillation device.\n", + "url": "/general/2016/08/29/example-post-three/" + }, + + + + + { + "title": "Categories", + "excerpt": "Category index\n", + "content": "\n", + "url": "/categories/" + }, + + { + "title": "Elements", + "excerpt": "A demo of Markdown and HTML includes\n", + "content": "Heading 1\n\nHeading 2\n\nHeading 3\n\nHeading 4\n\nHeading 5\n\nHeading 6\n\nA small element\n\nA link\n\nLorem ipsum dolor sit amet, consectetur adip* isicing elit, sed do eiusmod *tempor incididunt ut labore et dolore magna aliqua.\n\nDuis aute irure dolor in A link reprehenderit in voluptate velit esse cillum bold text dolore eu fugiat nulla pariatur. Excepteur span element sint occaecat cupidatat non proident, sunt italicised text in culpa qui officia deserunt mollit anim id some code est laborum.\n\n\n An item\n An item\n An item\n An item\n An item\n\n\n\n Item one\n Item two\n Item three\n Item four\n Item five\n\n\n\n A simple blockquote\n\n\nSome HTML…\n\n<blockquote cite=\"http://www.imdb.com/title/tt0284978/quotes/qt1375101\">\n <p>You planning a vacation, Mr. Sullivan?</p>\n <footer>\n <a href=\"http://www.imdb.com/title/tt0284978/quotes/qt1375101\">Sunways Security Guard</a>\n </footer>\n</blockquote>\n\n\n…CSS…\n\nblockquote {\n text-align: center;\n font-weight: bold;\n}\nblockquote footer {\n font-size: .8rem;\n}\n\n\n…and JavaScript\n\nconst blockquote = document.querySelector(\"blockquote\")\nconst bolden = (keyString, string) =>\n string.replace(new RegExp(keyString, 'g'), '<strong>'+keyString+'</strong>')\n\nblockquote.innerHTML = bolden(\"Mr. Sullivan\", blockquote.innerHTML)\n\n\nSingle line of code\n\nHTML Includes\n\nContact form\n\n\n \n Contact\n Name: *\n \n\n Email Address: *\n \n\n Message: *\n \n\n \n \n * indicates a required field\n\n \n \n \n \n \n \n\n\n\n\nPlease enable JavaScript to use the form.\n\n{% include site-form.html %}\n\n\nDemo map embed\n\n\n\n{% include map.html id=\"XXXXXX\" title=\"Coffee shop map\" %}\n\n\nButton include\n\nA button\n\nA button with icon  twitter\n\n\n{% include button.html text=\"A button\" link=\"https://david.darn.es\" %}\n{% include button.html text=\"A button with icon\" link=\"https://twitter.com/daviddarnes\" icon=\"twitter\" %}\n\n\nIcon include\n\ntwitter\ntwitter\n\n\n{% include icon.html id=\"twitter\" title=\"twitter\" %}\n[{% include icon.html id=\"linkedin\" title=\"twitter\" %}](https://www.linkedin.com/in/daviddarnes)\n\n\nVideo include\n\n\n \n\n\n{% include video.html id=\"zrkcGL5H3MU\" title=\"Siteleaf tutorial video\" %}\n\n\nImage includes\n\n\n \n Image with caption\n\n\n\n \n Right aligned image\n\n\n\n \n Left aligned image\n\n\n\n \n \n\n\n{% include figure.html image=\"https://picsum.photos/600/800?image=894\" caption=\"Image with caption\" width=\"300\" height=\"800\" %}\n\n{% include figure.html image=\"https://picsum.photos/600/800?image=894\" caption=\"Right aligned image\" position=\"right\" width=\"300\" height=\"800\" %}\n\n{% include figure.html image=\"https://picsum.photos/600/800?image=894\" caption=\"Left aligned image\" position=\"left\" width=\"300\" height=\"800\" %}\n\n{% include figure.html image=\"https://picsum.photos/1600/800?image=894\" alt=\"Image with just alt text\" %}\n\n", + "url": "/elements/" + }, + + { + "title": "About Alembic", + "excerpt": "Alembic is a starting point for Jekyll projects. Rather than starting from scratch, this boilerplate is designed to get the ball rolling immediately. Install it, configure it, tweak it, push it.\n", + "content": "Alembic is a starting point for Jekyll projects. Rather than starting from scratch, this boilerplate is designed to get rolling immediately. Install it, configure it, tweak it, push it.\n\nFork it  github\n\n Buy me a coffee ☕️\n Tweet it  twitter\n\n Install Alembic ⚗️\n\nFeatures\n\n\n Available as a theme gem and GitHub Pages theme\n Clear and elegant design that can be used out of the box or as solid starting point\n Tested in all major browsers, including IE and Edge\n Built in Service Worker so it can work offline and on slow connections\n Configurable colours and typography in a single settings file\n Extensive set of shortcodes to include various elements; such as buttons, icons, figure images and more\n Solid typographic framework from Sassline\n Configurable navigation via a single file\n Modular Jekyll components\n Post category support in the form of a single post index page grouped by category\n Built in live search using JavaScript\n Contact form built in using Formspree\n Designed with Siteleaf in mind\n Has 9 of the most popular networks as performant sharing buttons\n Has documentation\n\n\nExamples\n\nHere are a few examples of Alembic out in the wild being used in a variety of ways:\n\n\n bawejakunal.github.io\n case2111.github.io\n karateca.org\n\n\nInstallation\n\nQuick setup\n\nTo give you a running start I’ve put together some starter kits that you can download, fork or even deploy immediately:\n\n\n ⚗️🍨 Vanilla Jekyll starter kit\n\n ⚗️🌲 Forestry starter kit\n\n\n \n ⚗️💠 Netlify CMS starter kit\n\n \n \n ⚗️:octocat: GitHub Pages with remote theme kit\nDownload kit\n \n ⚗️🚀 Stackbit starter kit\n\n\n\nAs a Jekyll theme\n\n\n Add gem \"alembic-jekyll-theme\" to your Gemfile to add the theme as a dependancy\n Run the command bundle install in the root of project to install the theme and its dependancies\n Add theme: alembic-jekyll-theme to your _config.yml file to set the site theme\n Run bundle exec jekyll serve to build and serve your site\n Done! Use the configuration documentation and the example _config.yml file to set things like the navigation, contact form and social sharing buttons\n\n\nAs a GitHub Pages remote theme\n\n\n Add gem \"jekyll-remote-theme\" to your Gemfile to add the theme as a dependancy\n Run the command bundle install in the root of project to install the jekyll remote theme gem as a dependancy\n Add jekyll-remote-theme to the list of plugins in your _config.yml file\n Add remote_theme: daviddarnes/alembic@main to your _config.yml file to set the site theme\n Run bundle exec jekyll serve to build and serve your site\n Done! Use the configuration documentation and the example _config.yml file to set things like the navigation, contact form and social sharing buttons\n\n\nAs a Boilerplate / Fork\n\n(deprecated, not recommended)\n\n\n Fork the repo\n Replace the Gemfile with one stating all the gems used in your project\n Delete the following unnecessary files/folders: .github, LICENSE, screenshot.png, CNAME and alembic-jekyll-theme.gemspec\n Run the command bundle install in the root of project to install the jekyll remote theme gem as a dependancy\n Run bundle exec jekyll serve to build and serve your site\n Done! Use the configuration documentation and the example _config.yml file to set things like the navigation, contact form and social sharing buttons\n\n\nCustomising\n\nWhen using Alembic as a theme means you can take advantage of the file overriding method. This allows you to overwrite any file in this theme with your own custom file, by matching the file name and path. The most common example of this would be if you want to add your own styles or change the core style settings.\n\nTo add your own styles copy the styles.scss into your own project with the same file path (assets/styles.scss). From there you can add your own styles, you can even optionally ignore the theme styles by removing the @import \"alembic\"; line.\n\nIf you’re looking to set your own colours and fonts you can overwrite them by matching the variable names from the _settings.scss file in your own styles.scss, make sure to state them before the @import \"alembic\"; line so they take effect. The settings are a mixture of custom variables and settings from Sassline - follow the link to find out how to configure the typographic settings.\n", + "url": "/" + }, + + { + "title": "Search", + "excerpt": "Search for a page or post you’re looking for\n", + "content": "{% include site-search.html %}\n", + "url": "/search/" + } + +] + diff --git a/_site/assets/styles.css b/_site/assets/styles.css new file mode 100644 index 0000000..5ae1121 --- /dev/null +++ b/_site/assets/styles.css @@ -0,0 +1 @@ +/*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block}audio:not([controls]){display:none;height:0}progress{vertical-align:baseline}template,[hidden]{display:none}a{background-color:rgba(0,0,0,0);-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}svg:not(:root){overflow:hidden}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}button,input,select,textarea{font:inherit;margin:0}optgroup{font-weight:bold}button,input{overflow:visible}button,select{text-transform:none}button,html [type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}*{box-sizing:border-box}html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}html,body{height:100%}a img{border:none}blockquote{quotes:none}blockquote:before,blockquote:after{content:"";content:none}table{border-collapse:collapse;border-spacing:0}caption,th,td{text-align:left;font-weight:normal;vertical-align:middle}html{font-size:75%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}@media screen and (min-width: 40em){html{font-size:87.5%}}@media screen and (min-width: 50em){html{font-size:93.75%}}@media screen and (min-width: 64em){html{font-size:106.25%}}@media screen and (min-width: 100em){html{font-size:118.75%}}body{font-size:1.3333333333rem;font-family:Georgia, serif;font-style:normal;font-weight:400;line-height:2rem}@media screen and (min-width: 40em){body{font-size:1.2142857143rem}}@media screen and (min-width: 50em){body{font-size:1.2rem}}@media screen and (min-width: 64em){body{font-size:1.1764705882rem}}@media screen and (min-width: 100em){body{font-size:1.1578947368rem}}a{color:#05bf85;text-decoration:none;transition:color .1s,background-color .1s}a:hover,a:active,a:focus{color:green;text-decoration:none}.typeset p a,.typeset li a{background-image:linear-gradient(to bottom, rgba(0, 0, 0, 0) 50%, #05bf85 50%);background-position:0 93%;background-repeat:repeat-x;background-size:100% .15rem;text-shadow:.1rem 0 #fff,.15rem 0 #fff,-0.1rem 0 #fff,-0.15rem 0 #fff}.typeset p a:hover,.typeset p a:active,.typeset p a:focus,.typeset li a:hover,.typeset li a:active,.typeset li a:focus{background-image:linear-gradient(to bottom, rgba(0, 0, 0, 0) 50%, #008000 50%)}.typeset p{line-height:2rem;margin-bottom:1.49999rem;padding-top:0.50001rem;font-feature-settings:"kern","onum","liga"}@media screen and (min-width: 40em){.typeset p{margin-bottom:1.4553471429rem;padding-top:0.5446528571rem}}@media screen and (min-width: 50em){.typeset p{margin-bottom:1.44999rem;padding-top:0.55001rem}}@media screen and (min-width: 64em){.typeset p{margin-bottom:1.4411664706rem;padding-top:0.5588335294rem}}@media screen and (min-width: 100em){.typeset p{margin-bottom:1.4342005263rem;padding-top:0.5657994737rem}}.typeset h1,.typeset h2,.typeset h3,.typeset h4,.typeset h5,.typeset h6{color:#242e2b;font-family:"Merriweather", serif;font-feature-settings:"dlig","liga","lnum","kern";font-style:normal;font-weight:700}.typeset h1,.typeset .alpha{line-height:3rem;font-size:2.3333333333rem;margin-bottom:0.37499rem;padding-top:0.62501rem}@media screen and (min-width: 40em){.typeset h1,.typeset .alpha{font-size:2.1428571429rem;margin-bottom:0.3035614286rem;padding-top:0.6964385714rem}}@media screen and (min-width: 50em){.typeset h1,.typeset .alpha{font-size:2.1333333333rem;margin-bottom:0.29999rem;padding-top:0.70001rem}}@media screen and (min-width: 64em){.typeset h1,.typeset .alpha{font-size:2.3529411765rem;margin-bottom:0.3823429412rem;padding-top:0.6176570588rem}}@media screen and (min-width: 100em){.typeset h1,.typeset .alpha{font-size:2.6315789474rem;margin-bottom:0.4868321053rem;padding-top:0.5131678947rem}}.typeset h2,.typeset .beta{line-height:3rem;font-size:2.0833333333rem;margin-bottom:0.28124rem;padding-top:0.71876rem}@media screen and (min-width: 40em){.typeset h2,.typeset .beta{font-size:1.9rem;margin-bottom:0.21249rem;padding-top:0.78751rem}}@media screen and (min-width: 50em){.typeset h2,.typeset .beta{font-size:1.8733333333rem;margin-bottom:0.20249rem;padding-top:0.79751rem}}@media screen and (min-width: 64em){.typeset h2,.typeset .beta{font-size:2.0882352941rem;margin-bottom:0.2830782353rem;padding-top:0.7169217647rem}}@media screen and (min-width: 100em){.typeset h2,.typeset .beta{font-size:2.3105263158rem;margin-bottom:0.3664373684rem;padding-top:0.6335626316rem}}.typeset h3,.typeset .gamma{line-height:3rem;font-size:1.8666666667rem;margin-bottom:0.19999rem;padding-top:0.80001rem}@media screen and (min-width: 40em){.typeset h3,.typeset .gamma{font-size:1.7142857143rem;margin-bottom:0.1428471429rem;padding-top:0.8571528571rem}}@media screen and (min-width: 50em){.typeset h3,.typeset .gamma{font-size:1.7066666667rem;margin-bottom:0.13999rem;padding-top:0.86001rem}}@media screen and (min-width: 64em){.typeset h3,.typeset .gamma{font-size:1.7647058824rem;margin-bottom:0.1617547059rem;padding-top:0.8382452941rem}}@media screen and (min-width: 100em){.typeset h3,.typeset .gamma{font-size:1.8578947368rem;margin-bottom:0.1967005263rem;padding-top:0.8032994737rem}}.typeset h4,.typeset .delta{line-height:2rem;font-size:1.6666666667rem;margin-bottom:-0.37501rem;padding-top:0.37501rem}@media screen and (min-width: 40em){.typeset h4,.typeset .delta{font-size:1.5214285714rem;margin-bottom:-0.4294742857rem;padding-top:0.4294742857rem}}@media screen and (min-width: 50em){.typeset h4,.typeset .delta{font-size:1.5rem;margin-bottom:-0.43751rem;padding-top:0.43751rem}}@media screen and (min-width: 64em){.typeset h4,.typeset .delta{font-size:1.5705882353rem;margin-bottom:-0.4110394118rem;padding-top:0.4110394118rem}}@media screen and (min-width: 100em){.typeset h4,.typeset .delta{font-size:1.6368421053rem;margin-bottom:-0.3861942105rem;padding-top:0.3861942105rem}}.typeset h5,.typeset .epsilon{line-height:2rem;font-size:1.4916666667rem;margin-bottom:-0.440635rem;padding-top:0.440635rem}@media screen and (min-width: 40em){.typeset h5,.typeset .epsilon{font-size:1.3714285714rem;margin-bottom:-0.4857242857rem;padding-top:0.4857242857rem}}@media screen and (min-width: 50em){.typeset h5,.typeset .epsilon{font-size:1.3666666667rem;margin-bottom:-0.48751rem;padding-top:0.48751rem}}@media screen and (min-width: 64em){.typeset h5,.typeset .epsilon{font-size:1.3235294118rem;margin-bottom:-0.5036864706rem;padding-top:0.5036864706rem}}@media screen and (min-width: 100em){.typeset h5,.typeset .epsilon{font-size:1.3157894737rem;margin-bottom:-0.5065889474rem;padding-top:0.5065889474rem}}.typeset h6,.typeset .zeta{line-height:2rem;font-size:1.3333333333rem;margin-bottom:-0.50001rem;padding-top:0.50001rem}@media screen and (min-width: 40em){.typeset h6,.typeset .zeta{font-size:1.2142857143rem;margin-bottom:-0.5446528571rem;padding-top:0.5446528571rem}}@media screen and (min-width: 50em){.typeset h6,.typeset .zeta{font-size:1.2rem;margin-bottom:-0.55001rem;padding-top:0.55001rem}}@media screen and (min-width: 64em){.typeset h6,.typeset .zeta{font-size:1.1764705882rem;margin-bottom:-0.5588335294rem;padding-top:0.5588335294rem}}@media screen and (min-width: 100em){.typeset h6,.typeset .zeta{font-size:1.1578947368rem;margin-bottom:-0.5657994737rem;padding-top:0.5657994737rem}}.typeset ul,.typeset ol{line-height:2rem;margin-bottom:1.49999rem;padding-top:0.50001rem}@media screen and (min-width: 40em){.typeset ul,.typeset ol{margin-bottom:1.4553471429rem;padding-top:0.5446528571rem}}@media screen and (min-width: 50em){.typeset ul,.typeset ol{margin-bottom:1.44999rem;padding-top:0.55001rem}}@media screen and (min-width: 64em){.typeset ul,.typeset ol{margin-bottom:1.4411664706rem;padding-top:0.5588335294rem}}@media screen and (min-width: 100em){.typeset ul,.typeset ol{margin-bottom:1.4342005263rem;padding-top:0.5657994737rem}}.typeset ul li,.typeset ol li{font-feature-settings:"kern","onum","liga";margin-left:2rem}@media screen and (min-width: 40em){.typeset ul li,.typeset ol li{margin-left:0}}.typeset ul li ol,.typeset ul li ul,.typeset ol li ol,.typeset ol li ul{padding-top:1rem;margin-bottom:1rem;margin-left:2rem}.typeset ol{list-style-type:none}.typeset ol li{counter-increment:top-level}.typeset ol li:before{content:counter(top-level) ".";font-feature-settings:"lnum","tnum";margin-left:-3rem;position:absolute;text-align:right;width:2em}.typeset ol li ul li:before{content:""}.typeset ol li ul li ol li{counter-increment:alt-level}.typeset ol li ul li ol li:before{content:counter(alt-level) "."}.typeset ol li ol li{counter-increment:sub-level}.typeset ol li ol li:before{content:counter(top-level) "." counter(sub-level)}.typeset ol li ol li ul li:before{content:""}.typeset ol li ol li ol li{counter-increment:sub-sub-level}.typeset ol li ol li ol li:before{content:counter(top-level) "." counter(sub-level) "." counter(sub-sub-level)}.typeset dl{line-height:2rem;margin-bottom:1.49999rem;padding-top:0.50001rem}@media screen and (min-width: 40em){.typeset dl{margin-bottom:1.4553471429rem;padding-top:0.5446528571rem}}@media screen and (min-width: 50em){.typeset dl{margin-bottom:1.44999rem;padding-top:0.55001rem}}@media screen and (min-width: 64em){.typeset dl{margin-bottom:1.4411664706rem;padding-top:0.5588335294rem}}@media screen and (min-width: 100em){.typeset dl{margin-bottom:1.4342005263rem;padding-top:0.5657994737rem}}.typeset dl dt,.typeset dl dd{font-feature-settings:"kern","onum","liga";margin-left:2rem}@media screen and (min-width: 40em){.typeset dl dt,.typeset dl dd{margin-left:0}}.typeset dl dt{font-weight:700}.typeset dl dd+dt{padding-top:1rem}.typeset table{line-height:2rem;font-size:1.1916666667rem;margin-bottom:-0.553135rem;padding-top:0.553135rem;font-family:"Merriweather", serif;font-feature-settings:"liga","lnum","tnum","kern";font-style:normal;font-weight:400;width:100%}@media screen and (min-width: 40em){.typeset table{font-size:1.0928571429rem;margin-bottom:-0.5901885714rem;padding-top:0.5901885714rem}}@media screen and (min-width: 50em){.typeset table{font-size:1.0866666667rem;margin-bottom:-0.59251rem;padding-top:0.59251rem}}@media screen and (min-width: 64em){.typeset table{font-size:0.9941176471rem;margin-bottom:-0.6272158824rem;padding-top:0.6272158824rem}}@media screen and (min-width: 100em){.typeset table{font-size:0.9263157895rem;margin-bottom:-0.6526415789rem;padding-top:0.6526415789rem}}.typeset table thead th{line-height:2rem;font-size:1.3333333333rem;margin-bottom:-0.50001rem;padding-top:0.50001rem;padding-bottom:1px}@media screen and (min-width: 40em){.typeset table thead th{font-size:1.2142857143rem;margin-bottom:-0.5446528571rem;padding-top:0.5446528571rem}}@media screen and (min-width: 50em){.typeset table thead th{font-size:1.2rem;margin-bottom:-0.55001rem;padding-top:0.55001rem}}@media screen and (min-width: 64em){.typeset table thead th{font-size:1.1764705882rem;margin-bottom:-0.5588335294rem;padding-top:0.5588335294rem}}@media screen and (min-width: 100em){.typeset table thead th{font-size:1.1578947368rem;margin-bottom:-0.5657994737rem;padding-top:0.5657994737rem}}.typeset b,.typeset strong,.typeset .bold{font-weight:700}.typeset em,.typeset i,.typeset .italic{font-style:italic}.typeset small,.typeset .caption{font-size:1.0666666667rem;font-family:"Merriweather", serif;font-style:normal;font-weight:400}@media screen and (min-width: 40em){.typeset small,.typeset .caption{font-size:0.9714285714rem}}@media screen and (min-width: 50em){.typeset small,.typeset .caption{font-size:0.96rem}}@media screen and (min-width: 64em){.typeset small,.typeset .caption{font-size:0.8823529412rem}}@media screen and (min-width: 100em){.typeset small,.typeset .caption{font-size:0.8210526316rem}}.typeset small{line-height:1rem}.typeset .caption{line-height:2rem;margin-bottom:1.39999rem;padding-top:0.60001rem;color:#a8adac}@media screen and (min-width: 40em){.typeset .caption{margin-bottom:1.3642757143rem;padding-top:0.6357242857rem}}@media screen and (min-width: 50em){.typeset .caption{margin-bottom:1.35999rem;padding-top:0.64001rem}}@media screen and (min-width: 64em){.typeset .caption{margin-bottom:1.3308723529rem;padding-top:0.6691276471rem}}@media screen and (min-width: 100em){.typeset .caption{margin-bottom:1.3078847368rem;padding-top:0.6921152632rem}}.typeset h1+.caption,.typeset .alpha+.caption,.typeset h2+.caption,.typeset .beta+.caption,.typeset h3+.caption,.typeset .gamma+.caption{margin-top:-1rem}.typeset .delta+.caption,.typeset .epsilon+.caption,.typeset .zeta+.caption{margin-top:0rem}.typeset blockquote p{border-left:.15rem solid #05bf85;font-style:italic;padding-left:1rem;margin-bottom:1.99999rem;padding-bottom:0.50001rem}@media screen and (min-width: 40em){.typeset blockquote p{margin-bottom:1.9107042857rem;padding-bottom:0.5446528571rem}}@media screen and (min-width: 50em){.typeset blockquote p{margin-bottom:1.89999rem;padding-bottom:0.55001rem}}@media screen and (min-width: 64em){.typeset blockquote p{margin-bottom:1.8823429412rem;padding-bottom:0.5588335294rem}}@media screen and (min-width: 100em){.typeset blockquote p{margin-bottom:1.8684110526rem;padding-bottom:0.5657994737rem}}@media screen and (min-width: 40em){.typeset blockquote{margin-left:-1rem}}.typeset hr{background-image:linear-gradient(to bottom, rgba(0, 0, 0, 0) 50%, #a8adac 50%);background-position:0 50%;background-repeat:repeat-x;background-size:100% .15rem;border:0;margin:0;padding-bottom:3rem;padding-top:3rem}.typeset code,.typeset pre{background-color:#fafafa;font-family:Menlo, monospace}.typeset pre{display:block;margin-bottom:2rem;padding:1rem;white-space:pre;white-space:pre-wrap;word-break:break-all;word-wrap:break-word}.typeset code{font-size:1.0666666667rem;line-height:1rem}@media screen and (min-width: 40em){.typeset code{font-size:0.9714285714rem}}@media screen and (min-width: 50em){.typeset code{font-size:0.96rem}}@media screen and (min-width: 64em){.typeset code{font-size:0.8823529412rem}}@media screen and (min-width: 100em){.typeset code{font-size:0.8210526316rem}}.typeset .upper{font-kerning:normal;letter-spacing:.1rem;text-transform:uppercase}.typeset .small-caps{font-feature-settings:"smcp","kern";font-kerning:normal;letter-spacing:.1rem}.typeset .lining-numerals{font-feature-settings:"lnum","kern"}.typeset .oldstyle-numerals{font-feature-settings:"onum","kern"}.hll{background-color:#ffc}.c{color:#998;font-style:italic}.err{color:#a61717;background-color:#e3d2d2}.k{color:#000;font-weight:bold}.o{color:#000;font-weight:bold}.cm{color:#998;font-style:italic}.cp{color:#999;font-weight:bold;font-style:italic}.c1{color:#998;font-style:italic}.cs{color:#999;font-weight:bold;font-style:italic}.gd{color:#000;background-color:#fdd}.ge{color:#000;font-style:italic}.gr{color:#a00}.gh{color:#999}.gi{color:#000;background-color:#dfd}.go{color:#888}.gp{color:#555}.gs{font-weight:bold}.gu{color:#aaa}.gt{color:#a00}.kc{color:#000;font-weight:bold}.kd{color:#000;font-weight:bold}.kn{color:#000;font-weight:bold}.kp{color:#000;font-weight:bold}.kr{color:#000;font-weight:bold}.kt{color:#458;font-weight:bold}.m{color:#099}.s{color:#d01040}.na{color:teal}.nb{color:#0086b3}.nc{color:#458;font-weight:bold}.no{color:teal}.nd{color:#3c5d5d;font-weight:bold}.ni{color:purple}.ne{color:#900;font-weight:bold}.nf{color:#900;font-weight:bold}.nl{color:#900;font-weight:bold}.nn{color:#555}.nt{color:navy}.nv{color:teal}.ow{color:#000;font-weight:bold}.w{color:#bbb}.mf{color:#099}.mh{color:#099}.mi{color:#099}.mo{color:#099}.sb{color:#d01040}.sc{color:#d01040}.sd{color:#d01040}.s2{color:#d01040}.se{color:#d01040}.sh{color:#d01040}.si{color:#d01040}.sx{color:#d01040}.sr{color:#009926}.s1{color:#d01040}.ss{color:#990073}.bp{color:#999}.vc{color:teal}.vg{color:teal}.vi{color:teal}.il{color:#099}body{background:#fff;color:#384743;height:100%;display:flex;-webkit-box-direction:normal;-webkit-box-orient:vertical;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column;overflow-x:hidden}.container{width:90%;max-width:1200px;margin:0 auto}.header .nav,.footer .nav{text-align:right}.header .logo,.footer .logo{-webkit-box-flex:0;-webkit-flex:0 0 auto;-moz-box-flex:0;-moz-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.header .container,.footer .container{display:-webkit-box;display:-webkit-flex;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-direction:normal;-webkit-box-orient:horizontal;-webkit-flex-direction:row;-moz-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:justify;-ms-flex-pack:justify;-webkit-justify-content:space-between;-moz-justify-content:space-between;justify-content:space-between;padding:1rem 0}@media screen and (min-width: 40em){.header .container,.footer .container{-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center}}.header .nav{display:flex;flex-direction:column-reverse;align-items:flex-end;justify-content:flex-end;overflow:hidden}.feature{padding-bottom:.4rem;margin-bottom:1.6rem;text-align:center;background:#f9fafa;background-size:cover;background-position:center}.feature .container{min-height:35vh;max-width:60%;-webkit-box-direction:normal;-webkit-box-orient:vertical;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;-moz-justify-content:center;justify-content:center}.logo{display:inline-block;line-height:0;max-height:4rem;display:-webkit-box;display:-webkit-flex;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center}.logo img{max-height:5rem}.nav a{padding:.2rem}.nav--social a{display:inline-block;line-height:1}.small{padding-top:.8rem;color:#a8adac;display:inline-block}.footer{background:#242e2b;color:#a8adac}.footer a{color:#a8adac}.footer a:hover{color:#fff}.footer .container{-webkit-flex-wrap:wrap;-moz-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.footer .small{padding-top:0}.nav--paginator{display:-webkit-box;display:-webkit-flex;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;-webkit-justify-content:space-between;-moz-justify-content:space-between;justify-content:space-between;color:#a8adac;text-align:center}.pagination{min-width:20%}.main{display:-webkit-box;display:-webkit-flex;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-direction:normal;-webkit-box-orient:vertical;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-flex:1;-webkit-flex:1 0 auto;-moz-box-flex:1;-moz-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;-webkit-box-pack:start;-ms-flex-pack:start;-webkit-justify-content:flex-start;-moz-justify-content:flex-start;justify-content:flex-start;margin-bottom:1.6rem}@media screen and (min-width: 40em){.main{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;-moz-justify-content:center;justify-content:center;-webkit-box-direction:normal;-webkit-box-orient:horizontal;-webkit-flex-direction:row;-moz-flex-direction:row;-ms-flex-direction:row;flex-direction:row}}.header,.feature,.footer{-webkit-box-flex:0;-webkit-flex:0 0 auto;-moz-box-flex:0;-moz-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}@media screen and (min-width: 40em){.content{width:62%}}.share .button{margin-right:.3rem}@media screen and (min-width: 40em){.aside{max-width:34%;margin-left:4%;-webkit-box-flex:1;-webkit-flex:1 0 auto;-moz-box-flex:1;-moz-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;opacity:.5;transition:opacity .1s}.aside .section{position:sticky;top:0}.aside--left{margin-left:0;margin-right:4%;order:-1}.aside:hover{opacity:1}}.section{margin:0}.list{list-style:none}.list--nav{overflow:hidden;margin-bottom:var(--listHeight, 0)}.list .item--post,.list .item--result,.list .item--category{margin-left:0}@media screen and (min-width: 40em){.item--nav{margin-left:.4rem;display:inline-block}}.item--nav:first-of-type{margin-left:0}.item--current a{color:#a8adac}a .icon{transition:fill .1s}a .icon:hover{fill:currentColor}.icon{vertical-align:middle;width:1.1em;height:1.1em;fill:CurrentColor}img{max-width:100%;height:auto}.figure{line-height:0}.figure--left{float:left;padding-right:.8rem}.figure--right{float:right;text-align:right;padding-left:.8rem}.figure--center{text-align:center;clear:both}.video,.map{position:relative;padding-bottom:56.25%;height:0}.video iframe,.map iframe{position:absolute;top:0;left:0;width:100%;height:100%}.map{padding-bottom:70%}.figure,.video,.map,.form{margin-bottom:.8rem}audio,video{width:100%}.form{position:relative}.form__legend{font-style:italic;color:#a8adac;position:absolute;overflow:hidden;right:0;clip:rect(0 0 0 0)}button,.button,input[type=text],input[type=email],input[type=search],input[type=submit],input[type=color],textarea,select{padding:.6rem 1.2rem;margin-bottom:.6rem;transition:color .1s,background-color .1s,border .1s;line-height:inherit;border:none;box-shadow:none;border-radius:0;-webkit-appearance:none}button .icon,.button .icon,input[type=text] .icon,input[type=email] .icon,input[type=search] .icon,input[type=submit] .icon,input[type=color] .icon,textarea .icon,select .icon{margin:0 0 .35rem}input[type=submit],button,.button{cursor:pointer;display:inline-block;color:#fff;background:#05bf85;transition:box-shadow .1s;will-change:box-shadow;box-shadow:inset 0 0 0 2rem rgba(0,0,0,0)}input[type=submit]:hover,button:hover,.button:hover{box-shadow:inset 0 0 0 2rem rgba(0,0,0,.25)}input[type=submit]:active,input[type=submit]:focus,button:active,button:focus,.button:active,.button:focus{box-shadow:inset 0 0 0 2rem rgba(0,0,0,.25)}.button--nav{background:none;color:#05bf85;margin-bottom:0;min-height:4rem;min-width:4rem}@media screen and (min-width: 40em){.button--nav{display:none}}.button--nav:hover,.button--nav:focus{box-shadow:none;color:green}a:focus,a:hover:focus,button:focus,button:hover:focus,.button:focus,.button:hover:focus,input:focus,input:hover:focus,textarea:focus,textarea:hover:focus,select:focus,select:hover:focus{outline:solid .12rem #fa407a;outline-offset:-0.12rem}a:hover:focus{outline:none}input[type=text],input[type=email],input[type=search],input[type=color],textarea,select{width:100%;border:1px solid #a8adac}input[type=text]:hover,input[type=email]:hover,input[type=search]:hover,input[type=color]:hover,textarea:hover,select:hover{border-color:#384743}select{background:#fafafa}textarea{resize:vertical}label{line-height:2rem;margin-bottom:1.49999rem;padding-top:0.50001rem}@media screen and (min-width: 40em){label{margin-bottom:1.4553471429rem;padding-top:0.5446528571rem}}@media screen and (min-width: 50em){label{margin-bottom:1.44999rem;padding-top:0.55001rem}}@media screen and (min-width: 64em){label{margin-bottom:1.4411664706rem;padding-top:0.5588335294rem}}@media screen and (min-width: 100em){label{margin-bottom:1.4342005263rem;padding-top:0.5657994737rem}}code{padding:.12rem .2rem;color:#242e2b}pre code{padding:0}.required{color:red}::-webkit-input-placeholder{opacity:.5}::-moz-placeholder{opacity:.5}:-ms-input-placeholder{opacity:.5}:-moz-placeholder{opacity:.5}::selection{background:#242e2b;color:#fff;text-shadow:none}.typeset a>code{text-shadow:none}.typeset .button,.typeset button{background-image:none;text-shadow:none;color:#fff}.typeset .button:hover,.typeset .button:active,.typeset .button:focus,.typeset button:hover,.typeset button:active,.typeset button:focus{background-image:none;color:#fff}.typeset hr{width:100%}.typeset li>p{padding:0;margin:0}.typeset .nav a{padding-left:0;padding-right:0;margin-left:.2rem;margin-right:.2rem}.typeset pre{white-space:pre;overflow-x:scroll}/*# sourceMappingURL=styles.css.map */ \ No newline at end of file diff --git a/_site/assets/styles.css.map b/_site/assets/styles.css.map new file mode 100644 index 0000000..8aa71cf --- /dev/null +++ b/_site/assets/styles.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../_sass/_normalize.scss","../_sass/sassline-base/_reset.scss","../_sass/sassline-base/_typography.scss","../_sass/sassline-base/_mixins.scss","../_sass/_settings.scss","../_sass/_syntax.scss","../_sass/_theme.scss","../_sass/_flex.scss"],"names":[],"mappings":"AAAA,4EAOA,KACE,uBACA,0BACA,8BAOF,KACE,SAYF,oFAYE,cAOF,4BAIE,qBAOF,sBACE,aACA,SAOF,SACE,wBAQF,kBAEE,aAWF,EACE,+BACA,qCAQF,iBAEE,gBAWF,YACE,mBACA,0BACA,iCAOF,SAEE,oBAOF,SAEE,mBAOF,IACE,kBAQF,GACE,cACA,eAOF,KACE,sBACA,WAOF,MACE,cAQF,QAEE,cACA,cACA,kBACA,wBAGF,IACE,eAGF,IACE,WAUF,IACE,kBAOF,eACE,gBAWF,kBAIE,gCACA,cAOF,OACE,gBAQF,GACE,uBACA,SACA,iBAWF,6BAIE,aACA,SAOF,SACE,iBAQF,aAEE,iBAQF,cAEE,oBASF,qDAIE,0BAOF,wHAIE,kBACA,UAOF,4GAIE,8BAOF,SACE,wBACA,aACA,2BAUF,OACE,sBACA,cACA,cACA,eACA,UACA,mBAOF,SACE,cAQF,6BAEE,sBACA,UAOF,kFAEE,YAQF,cACE,6BACA,oBAOF,qFAEE,wBAOF,4BACE,cACA,YAQF,6BACE,0BACA,aC7ZF,wBACA,2eACA,4FACA,sBACA,kBACA,uBACA,2DACA,gDACA,uECRA,KC2CE,cDxCA,8BACA,0BC2CE,oCD/CJ,KCgDM,iBADF,oCD/CJ,KCgDM,kBADF,oCD/CJ,KCgDM,mBADF,qCD/CJ,KCgDM,mBDxCN,KCwLM,0BDrLJ,2BACA,kBACA,gBACA,iBCyLM,oCD/LR,KCgMU,2BADF,oCD/LR,KCgMU,kBADF,oCD/LR,KCgMU,2BADF,qCD/LR,KCgMU,2BDtLV,EACE,MEdW,QFeX,qBACA,0CAEA,yBACE,MElBU,MFmBV,qBAQF,2BACE,+EACA,0BACA,2BACA,4BACA,sEAKA,uHACE,+EAKJ,WCoLE,iBAgEE,yBACA,uBDlPF,2CC6PI,oCDhQN,WCiQQ,8BACA,6BAFF,oCDhQN,WCiQQ,yBACA,wBAFF,oCDhQN,WCiQQ,8BACA,6BAFF,qCDhQN,WCiQQ,8BACA,6BD3PR,wEACE,MEtDY,QFuDZ,kCACA,kDACA,kBACA,gBAIF,4BCsQA,iBAqDI,0BACA,yBACA,uBAQE,oCDrUN,4BCsUQ,0BACA,8BACA,6BAHF,oCDrUN,4BCsUQ,0BACA,yBACA,wBAHF,oCDrUN,4BCsUQ,0BACA,8BACA,6BAHF,qCDrUN,4BCsUQ,0BACA,8BACA,6BDnUR,2BCiQA,iBAqDI,0BACA,yBACA,uBAQE,oCDhUN,2BCiUQ,iBACA,yBACA,wBAHF,oCDhUN,2BCiUQ,0BACA,yBACA,wBAHF,oCDhUN,2BCiUQ,0BACA,8BACA,6BAHF,qCDhUN,2BCiUQ,0BACA,8BACA,6BD9TR,4BC4PA,iBAqDI,0BACA,yBACA,uBAQE,oCD3TN,4BC4TQ,0BACA,8BACA,6BAHF,oCD3TN,4BC4TQ,0BACA,yBACA,wBAHF,oCD3TN,4BC4TQ,0BACA,8BACA,6BAHF,qCD3TN,4BC4TQ,0BACA,8BACA,6BDzTR,4BCuPA,iBAqDI,0BACA,0BACA,uBAQE,oCDtTN,4BCuTQ,0BACA,+BACA,6BAHF,oCDtTN,4BCuTQ,iBACA,0BACA,wBAHF,oCDtTN,4BCuTQ,0BACA,+BACA,6BAHF,qCDtTN,4BCuTQ,0BACA,+BACA,6BDpTR,8BCkPA,iBAqDI,0BACA,2BACA,wBAQE,oCDjTN,8BCkTQ,0BACA,+BACA,6BAHF,oCDjTN,8BCkTQ,0BACA,0BACA,wBAHF,oCDjTN,8BCkTQ,0BACA,+BACA,6BAHF,qCDjTN,8BCkTQ,0BACA,+BACA,6BD/SR,2BC6OA,iBAqDI,0BACA,0BACA,uBAQE,oCD5SN,2BC6SQ,0BACA,+BACA,6BAHF,oCD5SN,2BC6SQ,iBACA,0BACA,wBAHF,oCD5SN,2BC6SQ,0BACA,+BACA,6BAHF,qCD5SN,2BC6SQ,0BACA,+BACA,6BD1SR,wBCsIE,iBAgEE,yBACA,uBAWE,oCDlNN,wBCmNQ,8BACA,6BAFF,oCDlNN,wBCmNQ,yBACA,wBAFF,oCDlNN,wBCmNQ,8BACA,6BAFF,qCDlNN,wBCmNQ,8BACA,6BDjNN,8BACE,2CACA,iBC9EA,oCD4EF,8BAKI,eAGF,wEACE,iBACA,mBACA,iBAMN,YACE,qBAEA,eACE,4BAEA,sBACE,+BACA,oCACA,kBACA,kBACA,iBACA,UAOE,4BACE,WAKA,2BACE,4BAEA,kCACE,+BASR,qBACE,4BAEA,4BACE,kDAOE,kCACE,WAOJ,2BACE,gCAEA,kCACE,6EAUd,YC2CE,iBAgEE,yBACA,uBAWE,oCDvHN,YCwHQ,8BACA,6BAFF,oCDvHN,YCwHQ,yBACA,wBAFF,oCDvHN,YCwHQ,8BACA,6BAFF,qCDvHN,YCwHQ,8BACA,6BDtHN,8BACE,2CACA,iBCzKA,oCDuKF,8BAKI,eAIJ,eACE,gBAGF,kBACE,iBAKJ,eCuHA,iBAqDI,0BACA,2BACA,wBD3KF,kCACA,kDACA,kBACA,gBACA,WC+KI,oCDtLN,eCuLQ,0BACA,+BACA,6BAHF,oCDtLN,eCuLQ,0BACA,0BACA,wBAHF,oCDtLN,eCuLQ,0BACA,+BACA,6BAHF,qCDtLN,eCuLQ,0BACA,+BACA,6BD9KJ,wBC4GJ,iBAqDI,0BACA,0BACA,uBDjKE,mBCyKA,oCD3KF,wBC4KI,0BACA,+BACA,6BAHF,oCD3KF,wBC4KI,iBACA,0BACA,wBAHF,oCD3KF,wBC4KI,0BACA,+BACA,6BAHF,qCD3KF,wBC4KI,0BACA,+BACA,6BDtKR,0CACE,gBAIF,wCACE,kBAIF,iCC7CI,0BDgDF,kCACA,kBACA,gBC3CI,oCDsCN,iCCrCQ,2BADF,oCDsCN,iCCrCQ,mBADF,oCDsCN,iCCrCQ,2BADF,qCDsCN,iCCrCQ,2BD6CR,eACE,iBAGF,kBCpBE,iBAgEE,yBACA,uBD1CF,MEpPY,QDySR,oCDxDN,kBCyDQ,8BACA,6BAFF,oCDxDN,kBCyDQ,yBACA,wBAFF,oCDxDN,kBCyDQ,8BACA,6BAFF,qCDxDN,kBCyDQ,8BACA,6BDnDR,yIACE,iBAGF,4EACE,gBAMA,sBACE,iCACA,kBACA,kBASA,yBACA,0BASE,oCAtBJ,sBAuBM,8BACA,gCAFF,oCAtBJ,sBAuBM,yBACA,2BAFF,oCAtBJ,sBAuBM,8BACA,gCAFF,qCAtBJ,sBAuBM,8BACA,gCC7QJ,oCDmPJ,oBAgCI,mBAKJ,YACE,+EACA,0BACA,2BACA,4BACA,SACA,SACA,oBACA,iBAIF,2BACE,iBE7TmB,QF8TnB,6BAGF,aACE,cACA,mBACA,aACA,gBACA,qBACA,qBACA,qBAGF,cCzII,0BD4IF,iBCrII,oCDkIN,cCjIQ,2BADF,oCDkIN,cCjIQ,mBADF,oCDkIN,cCjIQ,2BADF,qCDkIN,cCjIQ,2BDwIR,gBACE,oBACA,qBACA,yBAIF,qBACE,oCACA,oBACA,qBAIF,0BACE,oCAIF,4BACE,oCGxWJ,2BACA,gCACA,4CACA,+BACA,+BACA,iCACA,kDACA,iCACA,kDACA,qCACA,iCACA,eACA,eACA,qCACA,eACA,eACA,qBACA,eACA,eACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,cACA,iBACA,eACA,kBACA,gCACA,eACA,mCACA,iBACA,gCACA,gCACA,gCACA,eACA,eACA,eACA,gCACA,cACA,eACA,eACA,eACA,eACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,eACA,eACA,eACA,eACA,eC3DA,KACE,WFDiB,KEEjB,MFKW,QEJX,YACA,aCgGE,6BACA,4BAQF,uBDxGwB,OCyGxB,oBDzGwB,OC0GxB,mBD1GwB,OC2GxB,eD3GwB,OACxB,kBAGF,WACE,UACA,iBACA,cAOA,0BACE,iBAEF,4BCiPA,iBAHe,EAIf,sBACA,cALe,EAMf,mBACA,kBACA,cDnPA,sCCoCA,oBACA,qBACA,kBACA,oBACA,aAyCE,6BACA,8BAEF,uBDlF0B,ICmF1B,oBDnF0B,ICoF1B,mBDpF0B,ICqF1B,eDrF0B,IC8QxB,yBACA,sBAOF,wBDrR2B,cCsR3B,qBDtR2B,cCuR3B,gBDvR2B,cACzB,eHJE,0EIwTF,kBDlTuB,OCmTvB,eDnTuB,OCqTzB,oBDrTyB,OCsTzB,iBDtTyB,OCuTzB,YDvTyB,QAK3B,aACE,aACA,8BACA,qBACA,yBACA,gBAGF,SACE,qBACA,qBACA,kBACA,WF9CwB,QE+CxB,sBACA,2BACA,oBACE,gBACA,cC+CA,6BACA,4BAQF,uBDvD0B,OCwD1B,oBDxD0B,OCyD1B,mBDzD0B,OC0D1B,eD1D0B,OCwPxB,iBDvPyB,OCwPzB,cDxPyB,OC0P3B,wBD1P2B,OC2P3B,qBD3P2B,OC4P3B,gBD5P2B,OAI7B,MACE,qBACA,cACA,gBCDA,oBACA,qBACA,kBACA,oBACA,aAgRE,kBDjRmB,OCkRnB,eDlRmB,OCoRrB,oBDpRqB,OCqRrB,iBDrRqB,OCsRrB,YDtRqB,OACrB,UACE,gBAKF,OACE,cAEF,eACE,qBACA,cAIJ,OACE,kBACA,MFvEc,QEwEd,qBAGF,QACE,WFjFc,QEkFd,MF7Ec,QE8Ed,UACE,MF/EY,QEgFZ,gBACE,MF5Fa,KE+FjB,mBCqCA,kBDpCqB,KCqCrB,eDrCqB,KCyCnB,cDzCmB,KC2CrB,UD3CqB,KAErB,eACE,cAMJ,gBC5CE,oBACA,qBACA,kBACA,oBACA,aAwOE,yBACA,sBAOF,wBDtMyB,cCuMzB,qBDvMyB,cCwMzB,gBDxMyB,cACzB,MFjGc,QEkGd,kBAGF,YACE,cAKF,MCzDE,oBACA,qBACA,kBACA,oBACA,aAmCE,6BACA,4BAQF,uBDWwB,OCVxB,oBDUwB,OCTxB,mBDSwB,OCRxB,eDQwB,OC+IxB,iBD9Ic,EC+Id,sBACA,cDhJc,ECiJd,mBACA,kBACA,cAuBE,uBACA,oBAaF,wBDvLyB,WCwLzB,qBDxLyB,WCyLzB,gBDzLyB,WACzB,qBHlGI,oCG6FN,MCwLI,iBDjLyB,OCkLzB,cDlLyB,OCoL3B,wBDpL2B,OCqL3B,qBDrL2B,OCsL3B,gBDtL2B,OCnBzB,6BACA,8BAEF,uBDiB0B,IChB1B,oBDgB0B,ICf1B,mBDe0B,ICd1B,eDc0B,KAI5B,yBCqIE,iBDlIc,ECmId,sBACA,cDpIc,ECqId,mBACA,kBACA,cJnPI,oCG+GN,SAEI,WAIJ,eACE,mBHtHI,oCGyHN,OAEI,cACA,eCkHF,iBDjHgB,ECkHhB,sBACA,cDnHgB,ECoHhB,mBACA,kBACA,cDrHE,WACA,uBACA,gBACE,gBACA,MAEF,aACE,cACA,gBACA,SAEF,aACE,WAKN,SACE,SAKF,MACE,gBACA,WACE,gBACA,mCAEF,4DAGE,cH9JE,oCGmKJ,WAEI,kBACA,sBAEF,yBACE,cAIF,iBACE,MF5LU,QEmMhB,QACE,oBACA,cACE,kBAIJ,MACE,sBACA,YACA,aACA,kBAIF,IACE,eACA,YAGF,QACE,cACA,cACE,WACA,oBAEF,eACE,YACA,iBACA,mBAEF,gBACE,kBACA,WAIJ,YAEE,kBACA,sBACA,SACA,0BACE,kBACA,MACA,OACA,WACA,YAIJ,KACE,mBAGF,0BAIE,oBAGF,YAEE,WAKF,MACE,kBACA,cACE,kBACA,MF5QY,QE6QZ,kBACA,gBACA,QACA,mBAIJ,0HASE,qBACA,oBACA,qDACA,oBACA,YACA,gBACA,gBACA,wBACA,gLACE,kBAIJ,kCAGE,eACA,qBACA,MF1TiB,KE2TjB,WFxTa,QEyTb,0BACA,uBACA,0CACA,oDACE,4CAEF,2GAEE,4CAIJ,aAIE,gBACA,MFrUW,QEsUX,gBACA,gBACA,eHvTI,oCG+SN,aAEI,cAOF,sCAEE,gBACA,MF3UU,MEqVZ,0LAEE,6BACA,wBAIJ,cACE,aAGF,wFAME,WACA,yBACA,4HACE,aF3WS,QE+Wb,OACE,WFtXqB,QEyXvB,SACI,gBAGJ,MHtJI,iBAgEE,yBACA,uBAWE,oCG0ER,MHzEU,8BACA,6BAFF,oCG0ER,MHzEU,yBACA,wBAFF,oCG0ER,MHzEU,8BACA,6BAFF,qCG0ER,MHzEU,8BACA,6BG4EV,KACE,qBACA,MF9Xc,QEiYhB,SACE,UAGF,UACE,UAGF,4BACE,WAEF,mBACE,WAEF,uBACE,WAEF,kBACE,WAGF,YACE,WFvZc,QEwZd,MF9ZiB,KE+ZjB,iBAMA,gBACE,iBAEF,iCAEE,sBACA,iBACA,MF5ae,KE6af,yIAGE,sBACA,MFjba,KEobjB,YACE,WAGA,cACE,UACA,SAGJ,gBACE,eACA,gBACA,kBACA,mBAEF,aACE,gBACA","sourcesContent":["/*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */\n\n/**\n * 1. Change the default font family in all browsers (opinionated).\n * 2. Prevent adjustments of font size after orientation changes in IE and iOS.\n */\n\nhtml {\n font-family: sans-serif; /* 1 */\n -ms-text-size-adjust: 100%; /* 2 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/**\n * Remove the margin in all browsers (opinionated).\n */\n\nbody {\n margin: 0;\n}\n\n/* HTML5 display definitions\n ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n * 1. Add the correct display in Edge, IE, and Firefox.\n * 2. Add the correct display in IE.\n */\n\narticle,\naside,\ndetails, /* 1 */\nfigcaption,\nfigure,\nfooter,\nheader,\nmain, /* 2 */\nmenu,\nnav,\nsection,\nsummary { /* 1 */\n display: block;\n}\n\n/**\n * Add the correct display in IE 9-.\n */\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n}\n\n/**\n * Add the correct display in iOS 4-7.\n */\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Add the correct display in IE 10-.\n * 1. Add the correct display in IE.\n */\n\ntemplate, /* 1 */\n[hidden] {\n display: none;\n}\n\n/* Links\n ========================================================================== */\n\n/**\n * 1. Remove the gray background on active links in IE 10.\n * 2. Remove gaps in links underline in iOS 8+ and Safari 8+.\n */\n\na {\n background-color: transparent; /* 1 */\n -webkit-text-decoration-skip: objects; /* 2 */\n}\n\n/**\n * Remove the outline on focused links when they are also active or hovered\n * in all browsers (opinionated).\n */\n\na:active,\na:hover {\n outline-width: 0;\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * 1. Remove the bottom border in Firefox 39-.\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Prevent the duplicate application of `bolder` by the next rule in Safari 6.\n */\n\nb,\nstrong {\n font-weight: inherit;\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * Add the correct font style in Android 4.3-.\n */\n\ndfn {\n font-style: italic;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/**\n * Add the correct background and color in IE 9-.\n */\n\nmark {\n background-color: #ff0;\n color: #000;\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10-.\n */\n\nimg {\n border-style: none;\n}\n\n/**\n * Hide the overflow in IE.\n */\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct margin in IE 8.\n */\n\nfigure {\n margin: 1em 40px;\n}\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change font properties to `inherit` in all browsers (opinionated).\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\nselect,\ntextarea {\n font: inherit; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Restore the font weight unset by the previous rule.\n */\n\noptgroup {\n font-weight: bold;\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput { /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect { /* 1 */\n text-transform: none;\n}\n\n/**\n * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n * controls in Android 4.\n * 2. Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\nhtml [type=\"button\"], /* 1 */\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; /* 2 */\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Change the border, margin, and padding in all browsers (opinionated).\n */\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Remove the default vertical scrollbar in IE.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10-.\n * 2. Remove the padding in IE 10-.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding and cancel buttons in Chrome and Safari on OS X.\n */\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * Correct the text style of placeholders in Chrome, Edge, and Safari.\n */\n\n::-webkit-input-placeholder {\n color: inherit;\n opacity: 0.54;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n","// Reset\n// ---------------------------------------\n\n// Reset all the things\n* { box-sizing: border-box; }\nhtml, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { margin: 0; padding: 0; border: 0; font-size: 100%; font: inherit; vertical-align: baseline; }\narticle, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { display: block; }\nhtml, body { height: 100%; }\na img { border: none; }\nblockquote { quotes: none; }\nblockquote:before, blockquote:after { content: ''; content: none; }\ntable { border-collapse: collapse; border-spacing: 0; }\ncaption, th, td { text-align: left; font-weight: normal; vertical-align: middle; }\n","// Typography\n// ---------------------------------------\n\n// Setting root sizes and base styles.\nhtml {\n @include rootsize;\n\n -webkit-text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n}\n\n// Site-wide base styles.\nbody {\n @include fontsize(zeta, all);\n\n font-family: unquote(map-get($bodytype, font-family));\n font-style: normal;\n font-weight: map-get($bodytype, regular);\n line-height: 2rem;\n}\n\n// Links.\na {\n color: $linkColour;\n text-decoration: none;\n transition: color .1s, background-color .1s;\n\n &:hover, &:active, &:focus {\n color: $hoverColour;\n text-decoration: none;\n }\n}\n\n// Styles for typeset text.\n.typeset {\n\n // Nice underlines for text links.\n p a, li a {\n background-image: linear-gradient(to bottom,rgba(0, 0, 0, 0) 50%,$linkColour 50%);\n background-position: 0 93%;\n background-repeat: repeat-x;\n background-size: 100% 0.15rem;\n text-shadow: 0.1rem 0 $backgroundColour,\n 0.15rem 0 $backgroundColour,\n -0.1rem 0 $backgroundColour,\n -0.15rem 0 $backgroundColour;\n\n &:hover, &:active, &:focus {\n background-image: linear-gradient(to bottom,rgba(0, 0, 0, 0) 50%,$hoverColour 50%);\n }\n }\n\n // Paragraphs. OpenType ligatures and oldstyle figures enabled if available.\n p {\n @include baseline($fontsize: zeta, $font: $bodytype, $lineheight: 2, $below: 2, $breakpoint: all);\n\n font-feature-settings: 'kern', 'onum', 'liga';\n }\n\n // Headings. OpenType ligatures, discretionary ligatures and lining figures enabled if available.\n h1, h2, h3, h4, h5, h6 {\n color: $headingColour;\n font-family: unquote(map-get($headingtype, font-family));\n font-feature-settings: 'dlig', 'liga', 'lnum', 'kern';\n font-style: normal;\n font-weight: map-get($headingtype, bold);\n }\n\n // Heading level 1.\n h1, .alpha {\n @include sassline($fontsize: alpha, $font: $headingtype, $lineheight: 3, $below: 1, $breakpoint: all);\n }\n\n // Heading level 2.\n h2, .beta {\n @include sassline(beta, $headingtype, 3, 1, all);\n }\n\n // Heading level 3.\n h3, .gamma {\n @include sassline(gamma, $headingtype, 3, 1, all);\n }\n\n // Heading level 4.\n h4, .delta {\n @include sassline(delta, $headingtype, 2, 0, all);\n }\n\n // Heading level 5.\n h5, .epsilon {\n @include sassline(epsilon, $headingtype, 2, 0, all);\n }\n\n // Heading level 6.\n h6, .zeta {\n @include sassline(zeta, $headingtype, 2, 0, all);\n }\n\n // Lists.\n ul, ol {\n @include baseline(zeta, $bodytype, 2, 2, all);\n\n li {\n font-feature-settings: 'kern', 'onum', 'liga';\n margin-left: 2rem;\n\n @include breakpoint(break-1) {\n margin-left: 0;\n }\n\n ol, ul {\n padding-top: 1rem;\n margin-bottom: 1rem;\n margin-left: 2rem;\n }\n }\n }\n\n // Ordered lists.\n ol {\n list-style-type: none;\n\n li {\n counter-increment: top-level;\n\n &:before {\n content: counter(top-level) '.';\n font-feature-settings: 'lnum', 'tnum';\n margin-left: -3rem;\n position: absolute;\n text-align: right;\n width: 2em;\n }\n\n ul {\n\n li {\n\n &:before {\n content: '';\n }\n\n ol {\n\n li {\n counter-increment: alt-level;\n\n &:before {\n content: counter(alt-level) '.';\n }\n }\n }\n }\n }\n\n ol {\n\n li {\n counter-increment: sub-level;\n\n &:before {\n content: counter(top-level) '.' counter(sub-level);\n }\n\n ul {\n\n li {\n\n &:before {\n content: '';\n }\n }\n }\n\n ol {\n\n li {\n counter-increment: sub-sub-level;\n\n &:before {\n content: counter(top-level) '.' counter(sub-level) '.' counter(sub-sub-level);\n }\n }\n }\n }\n }\n }\n }\n\n // Definition lists.\n dl {\n @include baseline(zeta, $bodytype, 2, 2, all);\n\n dt, dd {\n font-feature-settings: 'kern', 'onum', 'liga';\n margin-left: 2rem;\n\n @include breakpoint(break-1) {\n margin-left: 0;\n }\n }\n\n dt {\n font-weight: map-get($bodytype, bold);\n }\n\n dd + dt {\n padding-top: 1rem;\n }\n }\n\n // Tables.\n table {\n @include sassline(eta, $headingtype, 2, 0, all);\n\n font-family: unquote(map-get($headingtype, font-family));\n font-feature-settings: 'liga', 'lnum', 'tnum', 'kern';\n font-style: normal;\n font-weight: map-get($headingtype, regular);\n width: 100%;\n\n thead {\n\n th {\n @include sassline(zeta, $headingtype, 2, 0, all);\n padding-bottom: 1px;\n }\n }\n }\n\n // Bold.\n b, strong, .bold {\n font-weight: map-get($bodytype, bold);\n }\n\n // Italic.\n em, i, .italic {\n font-style: map-get($bodytype, italic);\n }\n\n // Caption and inline small text.\n small, .caption {\n @include fontsize(theta, all);\n\n font-family: unquote(map-get($headingtype, font-family));\n font-style: normal;\n font-weight: map-get($headingtype, regular);\n }\n\n small {\n line-height: 1rem;\n }\n\n .caption {\n @include baseline(theta, $headingtype, 2, 2, all);\n\n color: $captionColour;\n }\n\n // Nice spacing for captions.\n h1 + .caption, .alpha + .caption, h2 + .caption, .beta + .caption, h3 + .caption, .gamma + .caption {\n margin-top: -1rem;\n }\n\n .delta + .caption, .epsilon + .caption, .zeta + .caption {\n margin-top: 0rem;\n }\n\n // Quotes.\n blockquote {\n\n p {\n border-left: 0.15rem solid $linkColour;\n font-style: map-get($bodytype, italic);\n padding-left: 1rem;\n\n // Add spacing below blockquote paragraphs to align to baseline grid.\n $get-scale: map-get($modular-scale, scale-0);\n $get-size: map-get($get-scale, zeta);\n $rootsize: nth($sizes, 1);\n $baseline-shift: #{($get-size / 2 * ((2 * $rootsize / $get-size) - map-get($bodytype, cap-height))) / $rootsize + 0.00001};\n $baseline-push: #{3 - (($get-size * ((2 * $rootsize / $get-size) - map-get($bodytype, cap-height))) / $rootsize + 0.00001)};\n\n margin-bottom: #{$baseline-push}rem;\n padding-bottom: #{$baseline-shift}rem;\n\n @for $i from 2 through $breakpoints-limit {\n $get-scale: map-get($modular-scale, scale-#{$i - 1});\n $get-size: map-get($get-scale, zeta);\n $rootsize: nth($sizes, $i);\n $baseline-shift: #{($get-size / 2 * ((2 * $rootsize / $get-size) - map-get($bodytype, cap-height))) / $rootsize + 0.00001};\n $baseline-push: #{3 - (($get-size * ((2 * $rootsize / $get-size) - map-get($bodytype, cap-height))) / $rootsize + 0.00001)};\n\n @media screen and (min-width: nth($points, $i) / 16 * 1em ) {\n margin-bottom: #{$baseline-push}rem;\n padding-bottom: #{$baseline-shift}rem;\n }\n }\n }\n\n @include breakpoint(break-1) {\n margin-left: -1rem;\n }\n }\n\n // Horizontal rule.\n hr {\n background-image: linear-gradient(to bottom,rgba(0, 0, 0, 0) 50%,$captionColour 50%);\n background-position: 0 50%;\n background-repeat: repeat-x;\n background-size: 100% 0.15rem;\n border: 0;\n margin: 0;\n padding-bottom: 3rem;\n padding-top: 3rem;\n }\n\n // Code block.\n code, pre {\n background-color: $codeBackgroundColour;\n font-family: unquote(map-get($monospacetype, font-family));\n }\n\n pre {\n display: block;\n margin-bottom: 2rem;\n padding: 1rem;\n white-space: pre;\n white-space: pre-wrap;\n word-break: break-all;\n word-wrap: break-word;\n }\n\n code {\n @include fontsize(theta, all);\n\n line-height: 1rem;\n }\n\n // Letter space those capitals people, Jan Tschichold would be proud.\n .upper {\n font-kerning: normal;\n letter-spacing: 0.1rem;\n text-transform: uppercase;\n }\n\n // Real small caps.\n .small-caps {\n font-feature-settings: 'smcp', 'kern';\n font-kerning: normal;\n letter-spacing: 0.1rem;\n }\n\n // Consistent height numbers with OpenType.\n .lining-numerals {\n font-feature-settings: 'lnum', 'kern';\n }\n\n // Ascending and descending numbers with OpenType.\n .oldstyle-numerals {\n font-feature-settings: 'onum', 'kern';\n }\n}\n","// SCSS mixins\n// ---------------------------------------\n\n// Global variables used in mixins.\n\n// Number of breakpoints.\n$breakpoints-limit: length($breakpoints);\n\n// List of rootsizes, breakpoints, and max-widths.\n$sizes: map-values($rootsizes);\n$points: map-values($breakpoints);\n$line-widths: map-values($measures);\n$max-widths: map-values($maxwidths);\n\n\n// Breakpoints. Either set one to one of the breakpoint variables, or use a custom value for minor breakpoints.\n// Defaults to min-width, but both min->max and max-width are available too.\n// Parts based on https://gist.github.com/timknight/03e6335b8816aa534cf7\n@mixin breakpoint($break: 0, $max: 0) {\n // Type of break variable\n $value: type-of($break);\n\n // If it is a string (i.e. a breakpoint variable).\n @if $value == string {\n // If using 'break-1', 'break-2' etc output the correct breakpoints from map.\n @if map-has-key($breakpoints, $break) {\n @media screen and (min-width: #{map-get($breakpoints, $break) / 16 * 1em} ) { @content; }\n } @else {\n @warn \"#{$break} is not a set breakpoint variable\";\n }\n\n // If it is a number, use this for the breakpoint.\n } @else if $value == number {\n // If using other numbers output value in ems either for min, min & max or max width breakpoints.\n $query: \"all\" !default;\n @if $break != 0 and $max != 0 { $query: \"(min-width: #{$break / 16 * 1em}) and (max-width: #{$max / 16 * 1em})\"; }\n @else if $break != 0 and $max == 0 { $query: \"(min-width: #{$break / 16 * 1em})\"; }\n @else if $break == 0 and $max != 0 { $query: \"(max-width: #{$max / 16 * 1em})\"; }\n @media #{$query} { @content; }\n\n } @else {\n @warn \"#{$break} is not valid to use as a breakpoint\";\n }\n}\n\n// Root font-size in %, outputted in correct breakpoints.\n@mixin rootsize {\n font-size: nth($sizes, 1) / 16 * 100%;\n\n // Loop through breakpoints.\n @for $i from 2 through $breakpoints-limit {\n @media screen and (min-width: nth($points, $i) / 16 * 1em ) {\n font-size: nth($sizes, $i) / 16 * 100%;\n }\n }\n}\n\n// Max-widths for typeset containers, outputted in correct breakpoints.\n@mixin maxwidth($breakpoint: 0) {\n // Type of chosen variables.\n $break-value: type-of($breakpoint);\n\n // If specifying a breakpoint to use (and breakpoint exists).\n @if $break-value == number and $breakpoint <= ($breakpoints-limit - 1) and $breakpoint >= 0 {\n\n max-width: #{nth($max-widths, ($breakpoint + 1)) / nth($sizes, ($breakpoint + 1))}rem;\n\n } @else if $breakpoint == all {\n max-width: #{nth($max-widths, 1) / nth($sizes, 1)}rem;\n\n // Loop through breakpoints.\n @for $i from 2 through $breakpoints-limit {\n @media screen and (min-width: nth($points, $i) / 16 * 1em ) {\n max-width: #{nth($max-widths, $i) / nth($sizes, $i)}rem;\n }\n }\n }\n}\n\n// Set the measure for single columns, outputted in correct breakpoints.\n@mixin measure($breakpoint: 0) {\n // Type of chosen variables.\n $break-value: type-of($breakpoint);\n\n // If specifying a breakpoint to use (and breakpoint exists).\n @if $break-value == number and $breakpoint <= ($breakpoints-limit - 1) and $breakpoint >= 0 {\n\n max-width: #{nth($line-widths, ($breakpoint + 1)) / nth($sizes, ($breakpoint + 1))}rem;\n\n } @else if $breakpoint == all {\n max-width: #{nth($line-widths, 1) / nth($sizes, 1)}rem;\n\n // Loop through breakpoints.\n @for $i from 2 through $breakpoints-limit {\n @media screen and (min-width: nth($points, $i) / 16 * 1em ) {\n max-width: #{nth($line-widths, $i) / nth($sizes, $i)}rem;\n }\n }\n }\n}\n\n// Calculate percentage width of container to get optimal measure for main text columns.\n// Defaults to all breakpoints.\n// Note: will not output for base breakpoint as this comes from the 'measure' mixin.\n@mixin ideal-measure($breakpoint: 0, $gutter: 0, $main: true, $output: max-width) {\n // Type of chosen variables.\n $break-value: type-of($breakpoint);\n\n // If specifying a breakpoint to use (and breakpoint exists and is larger than 0).\n @if $break-value == number and $breakpoint <= ($breakpoints-limit - 1) and $breakpoint > 0 {\n\n @if $gutter == small {\n $gutter: map-get($gutterwidths, small) * 2 / 1rem;\n } @else if $gutter == medium {\n $gutter: map-get($gutterwidths, medium) * 2 / 1rem;\n } @else if $gutter == large {\n $gutter: map-get($gutterwidths, large) * 2 / 1rem;\n } @else {\n $gutter: 0;\n }\n\n $rootsize: map-get($rootsizes, rootsize-#{$breakpoint});\n $ideal-measure: map-get($measures, measure-#{$breakpoint});\n $gutter-size: ($gutter * $rootsize);\n $container-width: map-get($maxwidths, width-#{$breakpoint});\n\n $percentage: percentage(($ideal-measure + $gutter-size) / $container-width);\n\n @if $percentage < 55 {\n $percentage: 55%;\n } @else if $percentage > 65 {\n $percentage: 65%;\n }\n\n @if $main == false {\n $percentage: 100 - $percentage;\n }\n\n #{$output}: $percentage;\n }\n}\n\n// Value in scale in $modular-scale?\n// Used in following fontsize mixin.\n@function in-modular-scale($scale, $key) {\n $map: map-get($modular-scale, $scale);\n $output: map-has-key($map, $key);\n @return $output;\n}\n\n// Font-size in rems. Either set per breakpoint or for all.\n// Use values as you would for pixels i.e. 16 or use values from the modular scale.\n@mixin fontsize($fontsize, $breakpoint: 0) {\n // Type of chosen variables.\n $font-value: type-of($fontsize);\n $break-value: type-of($breakpoint);\n\n // Check if value exists in scale.\n $in-scale: in-modular-scale(scale-0, $fontsize);\n\n // If specifying a breakpoint to use (and breakpoint exists).\n @if $break-value == number and $breakpoint <= ($breakpoints-limit - 1) and $breakpoint >= 0 {\n\n // If using a number for fontsize.\n @if $font-value == number {\n font-size: #{$fontsize / nth($sizes, ($breakpoint + 1))}rem;\n\n // If using a variable from the scale for fontsize.\n } @else if $in-scale == true {\n $get-scale: map-get($modular-scale, scale-#{$breakpoint});\n $get-size: map-get($get-scale, $fontsize);\n\n font-size: #{$get-size / nth($sizes, ($breakpoint + 1))}rem;\n\n } @else {\n @warn \"#{$fontsize} is not a valid scale variable\";\n }\n\n // If want to use value for all breakpoints.\n } @else if $breakpoint == all {\n\n // If using a number for fontsize.\n @if $font-value == number {\n font-size: #{$fontsize / nth($sizes, 1)}rem;\n\n // Loop through breakpoints.\n @for $i from 2 through $breakpoints-limit {\n @media screen and (min-width: nth($points, $i) / 16 * 1em ) {\n font-size: #{$fontsize / nth($sizes, $i)}rem;\n }\n }\n\n // If using a variable from the scale for fontsize.\n } @else if $in-scale == true {\n $get-scale: map-get($modular-scale, scale-0);\n $get-size: map-get($get-scale, $fontsize);\n font-size: #{$get-size / nth($sizes, 1)}rem;\n\n // Loop through breakpoints.\n @for $i from 2 through $breakpoints-limit {\n $get-scale: map-get($modular-scale, scale-#{$i - 1});\n $get-size: map-get($get-scale, $fontsize);\n\n @media screen and (min-width: nth($points, $i) / 16 * 1em ) {\n font-size: #{$get-size / nth($sizes, $i)}rem;\n }\n }\n\n } @else {\n @warn \"#{$fontsize} is not a valid scale variable\";\n }\n\n } @else {\n @warn \"#{$breakpoint} is not valid to use as a breakpoint\";\n }\n}\n\n// Advanced baseline magic.\n// ! Read the README to help understand what is going on here.\n// Parts based on https://gist.github.com/razwan/10662500\n@mixin baseline($fontsize, $font, $lineheight: 2, $below: 2, $breakpoint: 0) {\n // Type of chosen variables.\n $font-value: type-of($fontsize);\n $break-value: type-of($breakpoint);\n\n // Cap height\n $cap-height: map-get($font, cap-height);\n\n // Check if value exists in scale.\n $in-scale: in-modular-scale(scale-0, $fontsize);\n\n // Set the line-height (if it isn't set at 0).\n @if $lineheight != 0 {\n line-height: #{$lineheight}rem;\n }\n\n // If specifying a breakpoint to use (and breakpoint exists).\n @if $break-value == number and $breakpoint <= ($breakpoints-limit - 1) and $breakpoint >= 0 {\n\n // If using a number for fontsize.\n @if $font-value == number {\n $rootsize: nth($sizes, ($breakpoint + 1));\n $baseline-shift: #{($fontsize / 2 * (($lineheight * $rootsize / $fontsize) - $cap-height)) / $rootsize + 0.00001};\n $baseline-push: #{$below - (($fontsize / 2 * (($lineheight * $rootsize / $fontsize) - $cap-height)) / $rootsize + 0.00001)};\n\n margin-bottom: #{$baseline-push}rem;\n padding-top: #{$baseline-shift}rem;\n\n // If using a variable from the scale for fontsize.\n } @else if $in-scale == true {\n $get-scale: map-get($modular-scale, scale-#{$breakpoint});\n $get-size: map-get($get-scale, $fontsize);\n $rootsize: nth($sizes, ($breakpoint + 1));\n\n $baseline-shift: #{($get-size / 2 * (($lineheight * $rootsize / $get-size) - $cap-height)) / $rootsize + 0.00001};\n $baseline-push: #{$below - (($get-size / 2 * (($lineheight * $rootsize / $get-size) - $cap-height)) / $rootsize + 0.00001)};\n\n margin-bottom: #{$baseline-push}rem;\n padding-top: #{$baseline-shift}rem;\n\n } @else {\n @warn \"#{$fontsize} is not a valid scale variable\";\n }\n\n // If want to use value for all breakpoints.\n } @else if $breakpoint == all {\n\n // If using a number for fontsize.\n @if $font-value == number {\n $rootsize: nth($sizes, 1);\n $baseline-shift: #{($fontsize / 2 * (($lineheight * $rootsize / $fontsize) - $cap-height)) / $rootsize + 0.00001};\n $baseline-push: #{$below - (($fontsize / 2 * (($lineheight * $rootsize / $fontsize) - $cap-height)) / $rootsize + 0.00001)};\n\n margin-bottom: #{$baseline-push}rem;\n padding-top: #{$baseline-shift}rem;\n\n // Loop through breakpoints.\n @for $i from 2 through $breakpoints-limit {\n $rootsize: nth($sizes, $i);\n $baseline-shift: #{($fontsize / 2 * (($lineheight * $rootsize / $fontsize) - $cap-height)) / $rootsize + 0.00001};\n $baseline-push: #{$below - (($fontsize / 2 * (($lineheight * $rootsize / $fontsize) - $cap-height)) / $rootsize + 0.00001)};\n\n @media screen and (min-width: nth($points, $i) / 16 * 1em ) {\n margin-bottom: #{$baseline-push}rem;\n padding-top: #{$baseline-shift}rem;\n }\n }\n\n // If using a variable from the scale for fontsize.\n } @else if $in-scale == true {\n $get-scale: map-get($modular-scale, scale-0);\n $get-size: map-get($get-scale, $fontsize);\n $rootsize: nth($sizes, 1);\n\n $baseline-shift: #{($get-size / 2 * (($lineheight * $rootsize / $get-size) - $cap-height)) / $rootsize + 0.00001};\n $baseline-push: #{$below - (($get-size / 2 * (($lineheight * $rootsize / $get-size) - $cap-height)) / $rootsize + 0.00001)};\n\n margin-bottom: #{$baseline-push}rem;\n padding-top: #{$baseline-shift}rem;\n\n // Loop through breakpoints.\n @for $i from 2 through $breakpoints-limit {\n $get-scale: map-get($modular-scale, scale-#{$i - 1});\n $get-size: map-get($get-scale, $fontsize);\n $rootsize: nth($sizes, $i);\n\n $baseline-shift: #{($get-size / 2 * (($lineheight * $rootsize / $get-size) - $cap-height)) / $rootsize + 0.00001};\n $baseline-push: #{$below - (($get-size / 2 * (($lineheight * $rootsize / $get-size) - $cap-height)) / $rootsize + 0.00001)};\n\n @media screen and (min-width: nth($points, $i) / 16 * 1em ) {\n margin-bottom: #{$baseline-push}rem;\n padding-top: #{$baseline-shift}rem;\n }\n }\n\n } @else {\n @warn \"#{$fontsize} is not a valid scale variable\";\n }\n\n } @else {\n @warn \"#{$breakpoint} is not valid to use as a breakpoint\";\n }\n}\n\n// Set fontsize and baseline at once. Mix of fontsize and baseline mixin.\n@mixin sassline($fontsize, $font, $lineheight: 2, $below: 2, $breakpoint: 0) {\n $font-value: type-of($fontsize);\n $break-value: type-of($breakpoint);\n $cap-height: map-get($font, cap-height);\n $in-scale: in-modular-scale(scale-0, $fontsize);\n\n line-height: #{$lineheight}rem;\n\n @if $break-value == number and $breakpoint <= ($breakpoints-limit - 1) and $breakpoint >= 0 {\n\n @if $font-value == number {\n $rootsize: nth($sizes, ($breakpoint + 1));\n $baseline-shift: #{($fontsize / 2 * (($lineheight * $rootsize / $fontsize) - $cap-height)) / $rootsize + 0.00001};\n $baseline-push: #{$below - (($fontsize / 2 * (($lineheight * $rootsize / $fontsize) - $cap-height)) / $rootsize + 0.00001)};\n font-size: #{$fontsize / nth($sizes, ($breakpoint + 1))}rem;\n margin-bottom: #{$baseline-push}rem;\n padding-top: #{$baseline-shift}rem;\n\n } @else if $in-scale == true {\n $get-scale: map-get($modular-scale, scale-#{$breakpoint});\n $get-size: map-get($get-scale, $fontsize);\n $rootsize: nth($sizes, ($breakpoint + 1));\n $baseline-shift: #{($get-size / 2 * (($lineheight * $rootsize / $get-size) - $cap-height)) / $rootsize + 0.00001};\n $baseline-push: #{$below - (($get-size / 2 * (($lineheight * $rootsize / $get-size) - $cap-height)) / $rootsize + 0.00001)};\n font-size: #{$get-size / nth($sizes, ($breakpoint + 1))}rem;\n margin-bottom: #{$baseline-push}rem;\n padding-top: #{$baseline-shift}rem;\n\n } @else {\n @warn \"#{$fontsize} is not a valid scale variable\";\n }\n\n } @else if $breakpoint == all {\n\n @if $font-value == number {\n $rootsize: nth($sizes, 1);\n $baseline-shift: #{($fontsize / 2 * (($lineheight * $rootsize / $fontsize) - $cap-height)) / $rootsize + 0.00001};\n $baseline-push: #{$below - (($fontsize / 2 * (($lineheight * $rootsize / $fontsize) - $cap-height)) / $rootsize + 0.00001)};\n font-size: #{$fontsize / nth($sizes, 1)}rem;\n margin-bottom: #{$baseline-push}rem;\n padding-top: #{$baseline-shift}rem;\n\n @for $i from 2 through $breakpoints-limit {\n $rootsize: nth($sizes, $i);\n $baseline-shift: #{($fontsize / 2 * (($lineheight * $rootsize / $fontsize) - $cap-height)) / $rootsize + 0.00001};\n $baseline-push: #{$below - (($fontsize / 2 * (($lineheight * $rootsize / $fontsize) - $cap-height)) / $rootsize + 0.00001)};\n @media screen and (min-width: nth($points, $i) / 16 * 1em ) {\n font-size: #{$fontsize / nth($sizes, $i)}rem;\n margin-bottom: #{$baseline-push}rem;\n padding-top: #{$baseline-shift}rem;\n }\n }\n\n } @else if $in-scale == true {\n $get-scale: map-get($modular-scale, scale-0);\n $get-size: map-get($get-scale, $fontsize);\n $rootsize: nth($sizes, 1);\n $baseline-shift: #{($get-size / 2 * (($lineheight * $rootsize / $get-size) - $cap-height)) / $rootsize + 0.00001};\n $baseline-push: #{$below - (($get-size / 2 * (($lineheight * $rootsize / $get-size) - $cap-height)) / $rootsize + 0.00001)};\n font-size: #{$get-size / nth($sizes, 1)}rem;\n margin-bottom: #{$baseline-push}rem;\n padding-top: #{$baseline-shift}rem;\n\n @for $i from 2 through $breakpoints-limit {\n $get-scale: map-get($modular-scale, scale-#{$i - 1});\n $get-size: map-get($get-scale, $fontsize);\n $rootsize: nth($sizes, $i);\n $baseline-shift: #{($get-size / 2 * (($lineheight * $rootsize / $get-size) - $cap-height)) / $rootsize + 0.00001};\n $baseline-push: #{$below - (($get-size / 2 * (($lineheight * $rootsize / $get-size) - $cap-height)) / $rootsize + 0.00001)};\n @media screen and (min-width: nth($points, $i) / 16 * 1em ) {\n font-size: #{$get-size / nth($sizes, $i)}rem;\n margin-bottom: #{$baseline-push}rem;\n padding-top: #{$baseline-shift}rem;\n }\n }\n\n } @else {\n @warn \"#{$fontsize} is not a valid scale variable\";\n }\n\n } @else {\n @warn \"#{$breakpoint} is not valid to use as a breakpoint\";\n }\n}\n\n// Clearfix.\n@mixin clearfix {\n &:before, &:after{\n display: table;\n content: \"\";\n }\n &:after{\n clear: both;\n }\n}\n","// Background colours\n$backgroundColour: #ffffff !default;\n$codeBackgroundColour: #fafafa !default;\n$featureBackgroundColour: #f9fafa !default;\n$accentColour: #05bf85 !default;\n\n// Text colours\n$headingColour: #242e2b !default;\n$bodyColour: #384743 !default;\n$linkColour: #05bf85 !default;\n$hoverColour: #008000 !default;\n$focusColour: #fa407a !default;\n$captionColour: #a8adac !default;\n$white: #ffffff !default;\n\n// Typography\n$bodytype: (\n font-family: \"Georgia, serif\",\n regular: 400,\n bold: 700,\n italic: italic,\n cap-height: 0.75\n) !default;\n\n$headingtype: (\n font-family: '\"Merriweather\", serif',\n regular: 400,\n bold: 700,\n cap-height: 0.75\n) !default;\n\n$monospacetype: (\n font-family: \"Menlo, monospace\",\n regular: 400,\n cap-height: 0.68\n) !default;\n\n// TIP: Load custom fonts in _config.yaml\n",".hll { background-color: #ffffcc }\n.c { color: #999988; font-style: italic } /* Comment */\n.err { color: #a61717; background-color: #e3d2d2 } /* Error */\n.k { color: #000000; font-weight: bold } /* Keyword */\n.o { color: #000000; font-weight: bold } /* Operator */\n.cm { color: #999988; font-style: italic } /* Comment.Multiline */\n.cp { color: #999999; font-weight: bold; font-style: italic } /* Comment.Preproc */\n.c1 { color: #999988; font-style: italic } /* Comment.Single */\n.cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */\n.gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */\n.ge { color: #000000; font-style: italic } /* Generic.Emph */\n.gr { color: #aa0000 } /* Generic.Error */\n.gh { color: #999999 } /* Generic.Heading */\n.gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */\n.go { color: #888888 } /* Generic.Output */\n.gp { color: #555555 } /* Generic.Prompt */\n.gs { font-weight: bold } /* Generic.Strong */\n.gu { color: #aaaaaa } /* Generic.Subheading */\n.gt { color: #aa0000 } /* Generic.Traceback */\n.kc { color: #000000; font-weight: bold } /* Keyword.Constant */\n.kd { color: #000000; font-weight: bold } /* Keyword.Declaration */\n.kn { color: #000000; font-weight: bold } /* Keyword.Namespace */\n.kp { color: #000000; font-weight: bold } /* Keyword.Pseudo */\n.kr { color: #000000; font-weight: bold } /* Keyword.Reserved */\n.kt { color: #445588; font-weight: bold } /* Keyword.Type */\n.m { color: #009999 } /* Literal.Number */\n.s { color: #d01040 } /* Literal.String */\n.na { color: #008080 } /* Name.Attribute */\n.nb { color: #0086B3 } /* Name.Builtin */\n.nc { color: #445588; font-weight: bold } /* Name.Class */\n.no { color: #008080 } /* Name.Constant */\n.nd { color: #3c5d5d; font-weight: bold } /* Name.Decorator */\n.ni { color: #800080 } /* Name.Entity */\n.ne { color: #990000; font-weight: bold } /* Name.Exception */\n.nf { color: #990000; font-weight: bold } /* Name.Function */\n.nl { color: #990000; font-weight: bold } /* Name.Label */\n.nn { color: #555555 } /* Name.Namespace */\n.nt { color: #000080 } /* Name.Tag */\n.nv { color: #008080 } /* Name.Variable */\n.ow { color: #000000; font-weight: bold } /* Operator.Word */\n.w { color: #bbbbbb } /* Text.Whitespace */\n.mf { color: #009999 } /* Literal.Number.Float */\n.mh { color: #009999 } /* Literal.Number.Hex */\n.mi { color: #009999 } /* Literal.Number.Integer */\n.mo { color: #009999 } /* Literal.Number.Oct */\n.sb { color: #d01040 } /* Literal.String.Backtick */\n.sc { color: #d01040 } /* Literal.String.Char */\n.sd { color: #d01040 } /* Literal.String.Doc */\n.s2 { color: #d01040 } /* Literal.String.Double */\n.se { color: #d01040 } /* Literal.String.Escape */\n.sh { color: #d01040 } /* Literal.String.Heredoc */\n.si { color: #d01040 } /* Literal.String.Interpol */\n.sx { color: #d01040 } /* Literal.String.Other */\n.sr { color: #009926 } /* Literal.String.Regex */\n.s1 { color: #d01040 } /* Literal.String.Single */\n.ss { color: #990073 } /* Literal.String.Symbol */\n.bp { color: #999999 } /* Name.Builtin.Pseudo */\n.vc { color: #008080 } /* Name.Variable.Class */\n.vg { color: #008080 } /* Name.Variable.Global */\n.vi { color: #008080 } /* Name.Variable.Instance */\n.il { color: #009999 } /* Literal.Number.Integer.Long */\n","// Structural elements\nbody {\n background: $backgroundColour;\n color: $bodyColour;\n height: 100%;\n display: flex;\n @include flex-direction(column);\n overflow-x: hidden;\n}\n\n.container {\n width: 90%;\n max-width: 1200px;\n margin: 0 auto;\n}\n\n\n// Header, feature and footer\n.header,\n.footer {\n .nav {\n text-align: right;\n }\n .logo {\n @include flex(0 0 auto);\n }\n .container {\n @include flexbox;\n @include flex-direction(row);\n @include justify-content(space-between);\n padding: 1rem 0;\n @include breakpoint(break-1) {\n @include align-items(center);\n }\n }\n}\n\n.header .nav {\n display: flex;\n flex-direction: column-reverse;\n align-items: flex-end;\n justify-content: flex-end;\n overflow: hidden;\n}\n\n.feature {\n padding-bottom: .4rem;\n margin-bottom: 1.6rem;\n text-align: center;\n background: $featureBackgroundColour;\n background-size: cover;\n background-position: center;\n .container {\n min-height: 35vh;\n max-width: 60%;\n @include flex-direction(column);\n @include justify-content(center);\n }\n}\n\n.logo {\n display: inline-block;\n line-height: 0;\n max-height: 4rem;\n @include flexbox;\n @include align-items(center);\n img {\n max-height: 5rem;\n }\n}\n\n.nav {\n a {\n padding: .2rem;\n }\n &--social a {\n display: inline-block;\n line-height: 1;\n }\n}\n\n.small {\n padding-top: .8rem;\n color: $captionColour;\n display: inline-block;\n}\n\n.footer {\n background: $headingColour;\n color: $captionColour;\n a {\n color: $captionColour;\n &:hover {\n color: $backgroundColour;\n }\n }\n .container {\n @include flex-wrap(wrap);\n }\n .small {\n padding-top: 0;\n }\n}\n\n\n// Pagination nav\n.nav--paginator {\n @include flexbox;\n @include justify-content(space-between);\n color: $captionColour;\n text-align: center;\n}\n\n.pagination {\n min-width: 20%;\n}\n\n\n// Main content\n.main {\n @include flexbox;\n @include flex-direction(column);\n @include flex(1, 0, auto);\n @include justify-content(flex-start);\n margin-bottom: 1.6rem;\n @include breakpoint(break-1) {\n @include justify-content(center);\n @include flex-direction(row);\n }\n}\n\n.header,\n.feature,\n.footer {\n @include flex(0, 0, auto);\n}\n\n.content {\n @include breakpoint(break-1) {\n width: 62%;\n }\n}\n\n.share .button {\n margin-right: .3rem;\n}\n\n.aside {\n @include breakpoint(break-1) {\n max-width: 34%;\n margin-left: 4%;\n @include flex(1, 0, auto);\n opacity: 0.5;\n transition: opacity .1s;\n .section {\n position: sticky;\n top: 0;\n }\n &--left {\n margin-left: 0;\n margin-right: 4%;\n order: -1;\n }\n &:hover {\n opacity: 1;\n }\n }\n}\n\n.section {\n margin: 0;\n}\n\n\n// Lists\n.list {\n list-style: none;\n &--nav {\n overflow: hidden;\n margin-bottom: var(--listHeight, 0);\n }\n .item--post,\n .item--result,\n .item--category {\n margin-left: 0;\n }\n}\n\n.item {\n &--nav {\n @include breakpoint(break-1) {\n margin-left: .4rem;\n display: inline-block;\n }\n &:first-of-type {\n margin-left: 0;\n }\n }\n &--current {\n a {\n color: $captionColour;\n }\n }\n}\n\n\n// Links, icons and images\na .icon {\n transition: fill .1s;\n &:hover {\n fill: currentColor;\n }\n}\n\n.icon {\n vertical-align: middle;\n width: 1.1em;\n height: 1.1em;\n fill: CurrentColor;\n}\n\n// Media content\nimg {\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n line-height: 0;\n &--left {\n float: left;\n padding-right: .8rem;\n }\n &--right {\n float: right;\n text-align: right;\n padding-left: .8rem;\n }\n &--center {\n text-align: center;\n clear: both;\n }\n}\n\n.video,\n.map {\n position: relative;\n padding-bottom: 56.25%;\n height: 0;\n iframe {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n}\n\n.map {\n padding-bottom: 70%;\n}\n\n.figure,\n.video,\n.map,\n.form {\n margin-bottom: .8rem;\n}\n\naudio,\nvideo {\n width: 100%;\n}\n\n\n// Form elements and buttons\n.form {\n position: relative;\n &__legend {\n font-style: italic;\n color: $captionColour;\n position: absolute;\n overflow: hidden;\n right: 0;\n clip: rect(0 0 0 0);\n }\n}\n\nbutton,\n.button,\ninput[type=\"text\"],\ninput[type=\"email\"],\ninput[type=\"search\"],\ninput[type=\"submit\"],\ninput[type=\"color\"],\ntextarea,\nselect {\n padding: .6rem 1.2rem;\n margin-bottom: .6rem;\n transition: color .1s, background-color .1s, border .1s;\n line-height: inherit;\n border: none;\n box-shadow: none;\n border-radius: 0;\n -webkit-appearance: none;\n .icon {\n margin: 0 0 .35rem;\n }\n}\n\ninput[type=\"submit\"],\nbutton,\n.button {\n cursor: pointer;\n display: inline-block;\n color: $backgroundColour;\n background: $accentColour;\n transition: box-shadow .1s;\n will-change: box-shadow;\n box-shadow: inset 0 0 0 2rem transparent;\n &:hover {\n box-shadow: inset 0 0 0 2rem rgba(0,0,0,0.25);\n }\n &:active,\n &:focus {\n box-shadow: inset 0 0 0 2rem rgba(0,0,0,0.25);\n }\n}\n\n.button--nav {\n @include breakpoint(break-1) {\n display: none;\n }\n background: none;\n color: $linkColour;\n margin-bottom: 0;\n min-height: 4rem;\n min-width: 4rem;\n &:hover,\n &:focus {\n box-shadow: none;\n color: $hoverColour;\n }\n}\n\na,\nbutton,\n.button,\ninput,\ntextarea,\nselect {\n &:focus,\n &:hover:focus {\n outline: solid .12rem $focusColour;\n outline-offset: -.12rem;\n }\n}\n\na:hover:focus {\n outline: none;\n}\n\ninput[type=\"text\"],\ninput[type=\"email\"],\ninput[type=\"search\"],\ninput[type=\"color\"],\ntextarea,\nselect {\n width: 100%;\n border: 1px solid $captionColour;\n &:hover {\n border-color: $bodyColour;\n }\n}\n\nselect {\n background: $codeBackgroundColour;\n}\n\ntextarea {\n resize: vertical;\n}\n\nlabel {\n @include baseline($fontsize: zeta, $font: $bodytype, $lineheight: 2, $below: 2, $breakpoint: all);\n}\n\ncode {\n padding: .12rem .2rem;\n color: $headingColour;\n}\n\npre code {\n padding: 0;\n}\n\n.required {\n color: red;\n}\n\n::-webkit-input-placeholder {\n opacity: 0.5;\n}\n::-moz-placeholder {\n opacity: 0.5;\n}\n:-ms-input-placeholder {\n opacity: 0.5;\n}\n:-moz-placeholder {\n opacity: 0.5;\n}\n\n::selection {\n background: $headingColour;\n color: $backgroundColour;\n text-shadow: none;\n}\n\n\n// Sassline overrides\n.typeset {\n a > code {\n text-shadow: none;\n }\n .button,\n button {\n background-image: none;\n text-shadow: none;\n color: $backgroundColour;\n &:hover,\n &:active,\n &:focus {\n background-image: none;\n color: $backgroundColour;\n }\n }\n hr {\n width: 100%;\n }\n li {\n > p {\n padding: 0;\n margin: 0;\n }\n }\n .nav a {\n padding-left: 0;\n padding-right: 0;\n margin-left: .2rem;\n margin-right: .2rem;\n }\n pre {\n white-space: pre;\n overflow-x: scroll;\n }\n}\n","// Flexbox Mixins\n// http://philipwalton.github.io/solved-by-flexbox/\n// https://github.com/philipwalton/solved-by-flexbox\n// \n// Copyright (c) 2013 Brian Franco\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to\n// permit persons to whom the Software is furnished to do so, subject to\n// the following conditions:\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n//\n// This is a set of mixins for those who want to mess around with flexbox\n// using the native support of current browsers. For full support table\n// check: http://caniuse.com/flexbox\n//\n// Basically this will use:\n//\n// * Fallback, old syntax (IE10, mobile webkit browsers - no wrapping)\n// * Final standards syntax (FF, Safari, Chrome, IE11, Opera)\n//\n// This was inspired by:\n// \n// * http://dev.opera.com/articles/view/advanced-cross-browser-flexbox/\n// \n// With help from:\n// \n// * http://w3.org/tr/css3-flexbox/\n// * http://the-echoplex.net/flexyboxes/\n// * http://msdn.microsoft.com/en-us/library/ie/hh772069(v=vs.85).aspx\n// * http://css-tricks.com/using-flexbox/\n// * http://dev.opera.com/articles/view/advanced-cross-browser-flexbox/\n// * https://developer.mozilla.org/en-us/docs/web/guide/css/flexible_boxes\n\n//----------------------------------------------------------------------\n\n// Flexbox Containers\n//\n// The 'flex' value causes an element to generate a block-level flex\n// container box.\n//\n// The 'inline-flex' value causes an element to generate a inline-level\n// flex container box. \n//\n// display: flex | inline-flex\n//\n// http://w3.org/tr/css3-flexbox/#flex-containers\n//\n// (Placeholder selectors for each type, for those who rather @extend)\n\n@mixin flexbox {\n display: -webkit-box;\n display: -webkit-flex;\n display: -moz-flex;\n display: -ms-flexbox;\n display: flex;\n}\n\n%flexbox { @include flexbox; }\n\n//----------------------------------\n\n@mixin inline-flex {\n display: -webkit-inline-box;\n display: -webkit-inline-flex;\n display: -moz-inline-flex;\n display: -ms-inline-flexbox;\n display: inline-flex;\n}\n\n%inline-flex { @include inline-flex; }\n\n//----------------------------------------------------------------------\n\n// Flexbox Direction\n//\n// The 'flex-direction' property specifies how flex items are placed in\n// the flex container, by setting the direction of the flex container's\n// main axis. This determines the direction that flex items are laid out in. \n//\n// Values: row | row-reverse | column | column-reverse\n// Default: row\n//\n// http://w3.org/tr/css3-flexbox/#flex-direction-property\n\n@mixin flex-direction($value: row) {\n @if $value == row-reverse {\n -webkit-box-direction: reverse;\n -webkit-box-orient: horizontal;\n } @else if $value == column {\n -webkit-box-direction: normal;\n -webkit-box-orient: vertical;\n } @else if $value == column-reverse {\n -webkit-box-direction: reverse;\n -webkit-box-orient: vertical;\n } @else {\n -webkit-box-direction: normal;\n -webkit-box-orient: horizontal;\n }\n -webkit-flex-direction: $value;\n -moz-flex-direction: $value;\n -ms-flex-direction: $value;\n flex-direction: $value;\n}\n // Shorter version:\n @mixin flex-dir($args...) { @include flex-direction($args...); }\n\n//----------------------------------------------------------------------\n\n// Flexbox Wrap\n//\n// The 'flex-wrap' property controls whether the flex container is single-line\n// or multi-line, and the direction of the cross-axis, which determines\n// the direction new lines are stacked in. \n//\n// Values: nowrap | wrap | wrap-reverse\n// Default: nowrap\n//\n// http://w3.org/tr/css3-flexbox/#flex-wrap-property\n\n@mixin flex-wrap($value: nowrap) {\n // No Webkit Box fallback.\n -webkit-flex-wrap: $value;\n -moz-flex-wrap: $value;\n @if $value == nowrap {\n -ms-flex-wrap: none;\n } @else { \n -ms-flex-wrap: $value; \n }\n flex-wrap: $value;\n}\n\n//----------------------------------------------------------------------\n\n// Flexbox Flow (shorthand)\n//\n// The 'flex-flow' property is a shorthand for setting the 'flex-direction'\n// and 'flex-wrap' properties, which together define the flex container's\n// main and cross axes.\n//\n// Values: | \n// Default: row nowrap\n//\n// http://w3.org/tr/css3-flexbox/#flex-flow-property\n\n@mixin flex-flow($values: (row nowrap)) {\n // No Webkit Box fallback.\n -webkit-flex-flow: $values;\n -moz-flex-flow: $values;\n -ms-flex-flow: $values;\n flex-flow: $values;\n}\n\n//----------------------------------------------------------------------\n\n// Flexbox Order\n//\n// The 'order' property controls the order in which flex items appear within\n// their flex container, by assigning them to ordinal groups.\n//\n// Default: 0\n//\n// http://w3.org/tr/css3-flexbox/#order-property\n\n@mixin order($int: 0) {\n -webkit-box-ordinal-group: $int + 1;\n -webkit-order: $int;\n -moz-order: $int;\n -ms-flex-order: $int;\n order: $int;\n}\n\n//----------------------------------------------------------------------\n\n// Flexbox Grow\n//\n// The 'flex-grow' property sets the flex grow factor. Negative numbers\n// are invalid.\n//\n// Default: 0\n//\n// http://w3.org/tr/css3-flexbox/#flex-grow-property\n\n@mixin flex-grow($int: 0) {\n -webkit-box-flex: $int;\n -webkit-flex-grow: $int;\n -moz-flex-grow: $int;\n -ms-flex-positive: $int;\n flex-grow: $int;\n}\n\n//----------------------------------------------------------------------\n\n// Flexbox Shrink\n//\n// The 'flex-shrink' property sets the flex shrink factor. Negative numbers\n// are invalid.\n//\n// Default: 1\n//\n// http://w3.org/tr/css3-flexbox/#flex-shrink-property\n\n@mixin flex-shrink($int: 1) {\n -webkit-flex-shrink: $int;\n -moz-flex-shrink: $int;\n -ms-flex-negative: $int;\n flex-shrink: $int;\n}\n\n//----------------------------------------------------------------------\n\n// Flexbox Basis\n//\n// The 'flex-basis' property sets the flex basis. Negative lengths are invalid. \n//\n// Values: Like \"width\" \n// Default: auto\n//\n// http://www.w3.org/TR/css3-flexbox/#flex-basis-property\n\n@mixin flex-basis($value: auto) {\n -webkit-flex-basis: $value;\n -moz-flex-basis: $value;\n -ms-flex-preferred-size: $value;\n flex-basis: $value;\n}\n\n//----------------------------------------------------------------------\n\n// Flexbox \"Flex\" (shorthand)\n//\n// The 'flex' property specifies the components of a flexible length: the\n// flex grow factor and flex shrink factor, and the flex basis. When an\n// element is a flex item, 'flex' is consulted instead of the main size\n// property to determine the main size of the element. If an element is\n// not a flex item, 'flex' has no effect.\n//\n// Values: none | || \n// Default: See individual properties (1 1 0).\n//\n// http://w3.org/tr/css3-flexbox/#flex-property\n\n@mixin flex($fg: 1, $fs: null, $fb: null) {\n \n // Set a variable to be used by box-flex properties\n $fg-boxflex: $fg;\n\n // Box-Flex only supports a flex-grow value so let's grab the\n // first item in the list and just return that.\n @if type-of($fg) == 'list' {\n $fg-boxflex: nth($fg, 1);\n }\n\n -webkit-box-flex: $fg-boxflex;\n -webkit-flex: $fg $fs $fb;\n -moz-box-flex: $fg-boxflex;\n -moz-flex: $fg $fs $fb;\n -ms-flex: $fg $fs $fb;\n flex: $fg $fs $fb;\n}\n\n//----------------------------------------------------------------------\n\n// Flexbox Justify Content\n//\n// The 'justify-content' property aligns flex items along the main axis\n// of the current line of the flex container. This is done after any flexible\n// lengths and any auto margins have been resolved. Typically it helps distribute\n// extra free space leftover when either all the flex items on a line are\n// inflexible, or are flexible but have reached their maximum size. It also\n// exerts some control over the alignment of items when they overflow the line.\n//\n// Note: 'space-*' values not supported in older syntaxes.\n//\n// Values: flex-start | flex-end | center | space-between | space-around\n// Default: flex-start\n//\n// http://w3.org/tr/css3-flexbox/#justify-content-property\n\n@mixin justify-content($value: flex-start) {\n @if $value == flex-start {\n -webkit-box-pack: start;\n -ms-flex-pack: start;\n } @else if $value == flex-end {\n -webkit-box-pack: end;\n -ms-flex-pack: end;\n } @else if $value == space-between {\n -webkit-box-pack: justify;\n -ms-flex-pack: justify;\n } @else if $value == space-around {\n -ms-flex-pack: distribute; \n } @else {\n -webkit-box-pack: $value;\n -ms-flex-pack: $value;\n }\n -webkit-justify-content: $value;\n -moz-justify-content: $value;\n justify-content: $value;\n}\n // Shorter version:\n @mixin flex-just($args...) { @include justify-content($args...); }\n\n//----------------------------------------------------------------------\n\n// Flexbox Align Items\n//\n// Flex items can be aligned in the cross axis of the current line of the\n// flex container, similar to 'justify-content' but in the perpendicular\n// direction. 'align-items' sets the default alignment for all of the flex\n// container's items, including anonymous flex items. 'align-self' allows\n// this default alignment to be overridden for individual flex items. (For\n// anonymous flex items, 'align-self' always matches the value of 'align-items'\n// on their associated flex container.) \n//\n// Values: flex-start | flex-end | center | baseline | stretch\n// Default: stretch\n//\n// http://w3.org/tr/css3-flexbox/#align-items-property\n\n@mixin align-items($value: stretch) {\n @if $value == flex-start {\n -webkit-box-align: start;\n -ms-flex-align: start;\n } @else if $value == flex-end {\n -webkit-box-align: end;\n -ms-flex-align: end;\n } @else {\n -webkit-box-align: $value;\n -ms-flex-align: $value;\n }\n -webkit-align-items: $value;\n -moz-align-items: $value;\n align-items: $value;\n}\n\n//----------------------------------\n\n// Flexbox Align Self\n//\n// Values: auto | flex-start | flex-end | center | baseline | stretch\n// Default: auto\n\n@mixin align-self($value: auto) {\n // No Webkit Box Fallback.\n -webkit-align-self: $value;\n -moz-align-self: $value;\n @if $value == flex-start {\n -ms-flex-item-align: start;\n } @else if $value == flex-end {\n -ms-flex-item-align: end;\n } @else {\n -ms-flex-item-align: $value;\n }\n align-self: $value;\n}\n\n//----------------------------------------------------------------------\n\n// Flexbox Align Content\n//\n// The 'align-content' property aligns a flex container's lines within the\n// flex container when there is extra space in the cross-axis, similar to\n// how 'justify-content' aligns individual items within the main-axis. Note,\n// this property has no effect when the flexbox has only a single line.\n//\n// Values: flex-start | flex-end | center | space-between | space-around | stretch\n// Default: stretch\n//\n// http://w3.org/tr/css3-flexbox/#align-content-property\n\n@mixin align-content($value: stretch) {\n // No Webkit Box Fallback.\n -webkit-align-content: $value;\n -moz-align-content: $value;\n @if $value == flex-start {\n -ms-flex-line-pack: start;\n } @else if $value == flex-end {\n -ms-flex-line-pack: end;\n } @else {\n -ms-flex-line-pack: $value;\n }\n align-content: $value;\n}\n"],"file":"styles.css"} \ No newline at end of file diff --git a/_site/blog/index.html b/_site/blog/index.html new file mode 100644 index 0000000..6d3a10b --- /dev/null +++ b/_site/blog/index.html @@ -0,0 +1,384 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Posts - Alembic + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ + + + + + +
+
+

Welcome to the blog

+ +
+
+ + + +
+ + +
+ +
+ +
+ + + +

Posts

+

My thoughts and ideas

+ + + + +
+ + +
+
    + +
  • +
    + +

    Description of a Pot Still

    + + + + +

    A pot still is a type of still used in distilling spirits such as whisky or brandy. Heat is applied directly to the pot containing the wash (for whisky) or wine (for brandy).

    + + +
    +
  • + +
  • +
    + +

    History of the Alembic

    + + + + +

    Dioscorides’ ambix (described in his De materia medica) is a helmet-shaped lid for gathering condensed mercury. For Athenaeus (~ 225 C.E.) it is a bottle or flask. For later chemists it denotes various parts of crude distillation devices.

    + + + +
    +
  • + +
+ + +
+ + + +
+ + + +
+ + + + + + + + + + + + + diff --git a/_site/blog/page2/index.html b/_site/blog/page2/index.html new file mode 100644 index 0000000..306f3a3 --- /dev/null +++ b/_site/blog/page2/index.html @@ -0,0 +1,361 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Posts - Alembic + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ + + + + + +
+
+

Welcome to the blog

+ +
+
+ + + +
+ + +
+ +
+ +
+ + + +

Posts

+

My thoughts and ideas

+ + + + +
+ + +
+
    + +
  • +
    + +

    Description of an Alembic

    + + + + +

    The complete distilling apparatus consists of three parts: the “cucurbit” (Arabic ḳarʿa, Greek βίκος), the still pot containing the liquid to be distilled, which is heated by a flame; the “head” or “cap” (Arabic anbiḳ, Greek ἄμβιξ) which fits over the mouth of the cucurbit to receive the vapors, with an attached downward-sloping “tube” (Greek σωλήν), leading to the “receiver”... + +

    +
  • + +
+ + +
+ + + +
+ + + +
+ + + + + + + + + + + + + diff --git a/_site/categories/index.html b/_site/categories/index.html new file mode 100644 index 0000000..9978c28 --- /dev/null +++ b/_site/categories/index.html @@ -0,0 +1,472 @@ + + + + + + + + + + + + +Categories | Alembic + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ + + + + + + + +
+ + +
+ +
+ +
+ +

Categories

+ + + + +
+ + + +
+

General

+
    + + +
  • +
    +

    Description of a Pot Still

    + + + + +

    A pot still is a type of still used in distilling spirits such as whisky or brandy. Heat is applied directly to the pot containing the wash (for whisky) or wine (for brandy).

    + +
    +
  • + + +
  • +
    +

    Description of an Alembic

    + + + + +

    The complete distilling apparatus consists of three parts: the “cucurbit” (Arabic ḳarʿa, Greek βίκος), the still pot containing the liquid to be distilled, which is heated by a flame; the “head” or “cap” (Arabic anbiḳ, Greek ἄμβιξ) which fits over the mouth of the cucurbit to receive the vapors, with an attached downward-sloping “tube” (Greek σωλήν), leading to the “receiver”... +

    + +
    +
  • + +
+
+
+ + +
+

External sources

+
    + + +
  • +
    +

    History of the Alembic

    + + + + +

    Dioscorides’ ambix (described in his De materia medica) is a helmet-shaped lid for gathering condensed mercury. For Athenaeus (~ 225 C.E.) it is a bottle or flask. For later chemists it denotes various parts of crude distillation devices.

    + + +
    +
  • + + +
  • +
    +

    Description of an Alembic

    + + + + +

    The complete distilling apparatus consists of three parts: the “cucurbit” (Arabic ḳarʿa, Greek βίκος), the still pot containing the liquid to be distilled, which is heated by a flame; the “head” or “cap” (Arabic anbiḳ, Greek ἄμβιξ) which fits over the mouth of the cucurbit to receive the vapors, with an attached downward-sloping “tube” (Greek σωλήν), leading to the “receiver”... +

    + +
    +
  • + +
+
+
+ + +
+

History

+
    + + +
  • +
    +

    History of the Alembic

    + + + + +

    Dioscorides’ ambix (described in his De materia medica) is a helmet-shaped lid for gathering condensed mercury. For Athenaeus (~ 225 C.E.) it is a bottle or flask. For later chemists it denotes various parts of crude distillation devices.

    + + +
    +
  • + +
+ +
+ + + + + +
+ + + + +
+ + + + + + + + + + + + + diff --git a/_site/docs/CODE_OF_CONDUCT.md b/_site/docs/CODE_OF_CONDUCT.md deleted file mode 100644 index ab1a9a1..0000000 --- a/_site/docs/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at opensource@github.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/_site/docs/CONTRIBUTING.md b/_site/docs/CONTRIBUTING.md deleted file mode 100644 index c484f3c..0000000 --- a/_site/docs/CONTRIBUTING.md +++ /dev/null @@ -1,88 +0,0 @@ -# Contributing to the Tactile theme - -Hi there! We're thrilled that you'd like to contribute to the Tactile theme. Your help is essential for keeping it great. - -the Tactile theme is an open source project supported by the efforts of an entire community and built one contribution at a time by users like you. We'd love for you to get involved. Whatever your level of skill or however much time you can give, your contribution is greatly appreciated. There are many ways to contribute, from writing tutorials or blog posts, improving the documentation, submitting bug reports and feature requests, helping other users by commenting on issues, or writing code which can be incorporated into the Tactile theme itself. - -Following these guidelines helps to communicate that you respect the time of the developers managing and developing this open source project. In return, they should reciprocate that respect in addressing your issue, assessing changes, and helping you finalize your pull requests. - - -## Looking for support? - -We'd love to help. Check out [the support guidelines](SUPPORT.md). - -## How to report a bug - -Think you found a bug? Please check [the list of open issues](https://github.com/pages-themes/tactile/issues) to see if your bug has already been reported. If it hasn't please [submit a new issue](https://github.com/pages-themes/tactile/issues/new). - -Here are a few tips for writing *great* bug reports: - -* Describe the specific problem (e.g., "widget doesn't turn clockwise" versus "getting an error") -* Include the steps to reproduce the bug, what you expected to happen, and what happened instead -* Check that you are using the latest version of the project and its dependencies -* Include what version of the project your using, as well as any relevant dependencies -* Only include one bug per issue. If you have discovered two bugs, please file two issues -* Even if you don't know how to fix the bug, including a failing test may help others track it down - -**If you find a security vulnerability, do not open an issue. Please email security@github.com instead.** - -## How to suggest a feature or enhancement - -If you find yourself wishing for a feature that doesn't exist in the Tactile theme, you are probably not alone. There are bound to be others out there with similar needs. Many of the features that the Tactile theme has today have been added because our users saw the need. - -Feature requests are welcome. But take a moment to find out whether your idea fits with the scope and goals of the project. It's up to you to make a strong case to convince the project's developers of the merits of this feature. Please provide as much detail and context as possible, including describing the problem you're trying to solve. - -[Open an issue](https://github.com/pages-themes/tactile/issues/new) which describes the feature you would like to see, why you want it, how it should work, etc. - - - -## Your first contribution - -We'd love for you to contribute to the project. Unsure where to begin contributing to the Tactile theme? You can start by looking through these "good first issue" and "help wanted" issues: - -* [Good first issues](https://github.com/pages-themes/tactile/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) - issues which should only require a few lines of code and a test or two -* [Help wanted issues](https://github.com/pages-themes/tactile/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) - issues which may be a bit more involved, but are specifically seeking community contributions - -*p.s. Feel free to ask for help; everyone is a beginner at first* :smiley_cat: - -## How to propose changes - -Here's a few general guidelines for proposing changes: - -* If you are making visual changes, include a screenshot of what the affected element looks like, both before and after. -* Follow the [Jekyll style guide](https://ben.balter.com/jekyll-style-guide). -* If you are changing any user-facing functionality, please be sure to update the documentation -* Each pull request should implement **one** feature or bug fix. If you want to add or fix more than one thing, submit more than one pull request -* Do not commit changes to files that are irrelevant to your feature or bug fix -* Don't bump the version number in your pull request (it will be bumped prior to release) -* Write [a good commit message](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) - -At a high level, [the process for proposing changes](https://guides.github.com/introduction/flow/) is: - -1. [Fork](https://github.com/pages-themes/tactile/fork) and clone the project -2. Configure and install the dependencies: `script/bootstrap` -3. Make sure the tests pass on your machine: `script/cibuild` -4. Create a new branch: `git checkout -b my-branch-name` -5. Make your change, add tests, and make sure the tests still pass -6. Push to your fork and [submit a pull request](https://github.com/pages-themes/tactile/compare) -7. Pat your self on the back and wait for your pull request to be reviewed and merged - -**Interesting in submitting your first Pull Request?** It's easy! You can learn how from this *free* series [How to Contribute to an Open Source Project on GitHub](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github) - -## Bootstrapping your local development environment - -`script/bootstrap` - -## Running tests - -`script/cibuild` - -## Code of conduct - -This project is governed by [the Contributor Covenant Code of Conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. - -## Additional Resources - -* [Contributing to Open Source on GitHub](https://guides.github.com/activities/contributing-to-open-source/) -* [Using Pull Requests](https://help.github.com/articles/using-pull-requests/) -* [GitHub Help](https://help.github.com) diff --git a/_site/docs/SUPPORT.html b/_site/docs/SUPPORT.html deleted file mode 100644 index 186e010..0000000 --- a/_site/docs/SUPPORT.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - - - - - -Where to get help | LLaVA X-Ray Vision - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-

Where to get help

-

A data science capstone project exploring Deep Learning, Medical Imaging, and multi-modal Large Language Models.

-
-
- - -
-
-
-

Where to get help

- -

If you think you’ve found a bug in the Tactile theme, please check the existing issues, and if no one has reported the problem, open a new issue.

- -

If you have a general question about the theme, how to implement it, or how to customize it for your site you have two options:

- -
    -
  1. Search for your query on support.github.com, which will also look for similar topics on github.community
  2. -
  3. Ask your question of the Jekyll community on talk.jekyllrb.com
  4. -
  5. Contact GitHub Support
  6. -
- -
- - - -
-
- - diff --git a/_site/docs/SUPPORT.md b/_site/docs/SUPPORT.md deleted file mode 100644 index 720e2df..0000000 --- a/_site/docs/SUPPORT.md +++ /dev/null @@ -1,9 +0,0 @@ -## Where to get help - -If you think you've found a bug in the Tactile theme, please [check the existing issues](https://github.com/pages-themes/tactile/issues), and if no one has reported the problem, [open a new issue](https://github.com/pages-themes/tactile/issues/new). - -If you have a general question about the theme, how to implement it, or how to customize it for your site you have two options: - -1. Search for your query on [`support.github.com`](https://support.github.com/?q=pages+Tactile+theme), which will also look for similar topics on [`github.community`](https://github.community/search?q=pages+Tactile+theme) -2. Ask your question of the Jekyll community on [talk.jekyllrb.com](https://talk.jekyllrb.com/) -3. [Contact GitHub Support](https://github.com/contact?form%5Bsubject%5D=GitHub%20Pages%20theme%20pages-themes/tactile) diff --git a/_site/elements/index.html b/_site/elements/index.html new file mode 100644 index 0000000..22298bf --- /dev/null +++ b/_site/elements/index.html @@ -0,0 +1,536 @@ + + + + + + + + + + + + +Elements | Alembic + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ + + + + + +
+
+

A demo of Markdown and HTML includes

+ +
+
+ + + +
+ + +
+ +
+ +

Elements

+ +

Heading 1

+ +

Heading 2

+ +

Heading 3

+ +

Heading 4

+ +
Heading 5
+ +
Heading 6
+ +

A small element

+ +

A link

+ +

Lorem ipsum dolor sit amet, consectetur adip* isicing elit, sed do eiusmod *tempor incididunt ut labore et dolore magna aliqua.

+ +

Duis aute irure dolor in A link reprehenderit in voluptate velit esse cillum bold text dolore eu fugiat nulla pariatur. Excepteur span element sint occaecat cupidatat non proident, sunt italicised text in culpa qui officia deserunt mollit anim id some code est laborum.

+ +
    +
  • An item
  • +
  • An item
  • +
  • An item
  • +
  • An item
  • +
  • An item
  • +
+ +
    +
  1. Item one
  2. +
  3. Item two
  4. +
  5. Item three
  6. +
  7. Item four
  8. +
  9. Item five
  10. +
+ +
+

A simple blockquote

+
+ +

Some HTML…

+ +
<blockquote cite="http://www.imdb.com/title/tt0284978/quotes/qt1375101">
+  <p>You planning a vacation, Mr. Sullivan?</p>
+  <footer>
+    <a href="http://www.imdb.com/title/tt0284978/quotes/qt1375101">Sunways Security Guard</a>
+  </footer>
+</blockquote>
+
+ +

…CSS…

+ +
blockquote {
+  text-align: center;
+  font-weight: bold;
+}
+blockquote footer {
+  font-size: .8rem;
+}
+
+ +

…and JavaScript

+ +
const blockquote = document.querySelector("blockquote")
+const bolden = (keyString, string) =>
+  string.replace(new RegExp(keyString, 'g'), '<strong>'+keyString+'</strong>')
+
+blockquote.innerHTML = bolden("Mr. Sullivan", blockquote.innerHTML)
+
+ +

Single line of code

+ +

HTML Includes

+ +

Contact form

+ +
+
+ Contact + + + + + + + + + + +
+ * indicates a required field + + + + + + +
+
+ + + + + +
{% include site-form.html %}
+
+ +

Demo map embed

+ +
+ +
{% include map.html id="XXXXXX" title="Coffee shop map" %}
+
+ +

Button include

+ +

A button

+ +

A button with icon  +

+ +
{% include button.html text="A button" link="https://david.darn.es" %}
+{% include button.html text="A button with icon" link="https://twitter.com/daviddarnes" icon="twitter" %}
+
+ +

Icon include

+ + +

twitter +

+ +
{% include icon.html id="twitter" title="twitter" %}
+[{% include icon.html id="linkedin" title="twitter" %}](https://www.linkedin.com/in/daviddarnes)
+
+ +

Video include

+ +
+ +
+ +
{% include video.html id="zrkcGL5H3MU" title="Siteleaf tutorial video" %}
+
+ +

Image includes

+ +
+ Image with caption +
Image with caption
+
+ +
+ Right aligned image +
Right aligned image
+
+ +
+ Left aligned image +
Left aligned image
+
+ +
+ Image with just alt text + +
+ +
{% include figure.html image="https://picsum.photos/600/800?image=894" caption="Image with caption" width="300" height="800" %}
+
+{% include figure.html image="https://picsum.photos/600/800?image=894" caption="Right aligned image" position="right" width="300" height="800" %}
+
+{% include figure.html image="https://picsum.photos/600/800?image=894" caption="Left aligned image" position="left" width="300" height="800" %}
+
+{% include figure.html image="https://picsum.photos/1600/800?image=894" alt="Image with just alt text" %}
+
+ + +
+ + + + +
+ + + + + + + + + + + + + diff --git a/_site/feed.xml b/_site/feed.xml new file mode 100644 index 0000000..f8618e4 --- /dev/null +++ b/_site/feed.xml @@ -0,0 +1,19 @@ +Jekyll2024-03-01T23:56:33+00:00http://localhost:4000/feed.xmlAlembicAlembic is a starting point for Jekyll projects. Rather than starting from scratch, this boilerplate is designed to get the ball rolling immediatelyDavidDarnesDescription of a Pot Still2016-08-29T00:00:00+01:002016-08-29T00:00:00+01:00http://localhost:4000/general/2016/08/29/example-post-threeA pot still is a type of still used in distilling spirits such as whisky or brandy. Heat is applied directly to the pot containing the wash (for whisky) or wine (for brandy). This is called a batch distillation (as opposed to a continuous distillation).

+ +

At standard atmospheric pressure, alcohol boils at 78 °C (172 °F), while water boils at 100 °C (212 °F). During distillation, the vapour contains more alcohol than the liquid. When the vapours are condensed, the resulting liquid contains a higher concentration of alcohol. In the pot still, the alcohol and water vapour combine with esters and flow from the still through the condensing coil. There they condense into the first distillation liquid, the so-called “low wines”. The low wines have a strength of about 25–35% alcohol by volume, and flow into a second still. It is then distilled a second time to produce the colourless spirit, collected at about 70% alcohol by volume. Colour is added through maturation in an oak aging barrel, and develops over time.

+ +

The modern pot still is a descendant of the alembic, an earlier distillation device.

]]>
DavidDarnes
History of the Alembic2016-08-28T00:00:00+01:002016-08-28T00:00:00+01:00http://localhost:4000/history/external%20sources/2016/08/28/example-post-twoDioscorides’ ambix (described in his De materia medica) is a helmet-shaped lid for gathering condensed mercury. For Athenaeus (~ 225 C.E.) it is a bottle or flask. For later chemists it denotes various parts of crude distillation devices.

+ + + +

Alembic drawings appear in works of Cleopatra the Alchemist, Synesius, and Zosimos of Panopolis. There were alembics with two (dibikos) and three (tribikos) receivers.[4] According to Zosimos of Panopolis, the alembic was invented by Mary the Jewess.[5]

+ +

The anbik is described by Ibn al-Awwam in his Kitab al-Filaha (Book of Agriculture), where he explains how rose-water is distilled. Amongst others, it is mentioned in the Mafatih al-Ulum (Key of Sciences) of Khwarizmi and the Kitab al-Asrar (Book of Secrets) of Al-Razi. Some illustrations occur in the Latin translations of works which are attributed to Geber.[2]

+ +

Originally from Alembic - Wikipedia

]]>
DavidDarnes
Description of an Alembic2016-08-27T00:00:00+01:002016-08-27T00:00:00+01:00http://localhost:4000/general/external%20sources/2016/08/27/example-post-oneThe complete distilling apparatus consists of three parts: the “cucurbit” (Arabic ḳarʿa, Greek βίκος), the still pot containing the liquid to be distilled, which is heated by a flame; the “head” or “cap” (Arabic anbiḳ, Greek ἄμβιξ) which fits over the mouth of the cucurbit to receive the vapors, with an attached downward-sloping “tube” (Greek σωλήν), leading to the “receiver” (Arabic ḳābila, Greek ἄγγος or φιάλη) container.

+ + + +

Retorts have the “cap” and the “cucurbit” made into one. The anbik is also called the raʾs (head) of the cucurbit. The liquid in the cucurbit is heated or boiled; the vapour rises into the anbik, where it cools by contact with the walls and condenses, running down the spout into the receiver. A modern descendant of the alembic is the pot still, used to produce distilled beverages.

+ +

Originally from Alembic - Wikipedia

]]>
DavidDarnes
\ No newline at end of file diff --git a/_site/general/2016/08/29/example-post-three/index.html b/_site/general/2016/08/29/example-post-three/index.html new file mode 100644 index 0000000..d910888 --- /dev/null +++ b/_site/general/2016/08/29/example-post-three/index.html @@ -0,0 +1,367 @@ + + + + + + + + + + + + +Description of a Pot Still | Alembic + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ + + + + + +
+
+

The Pot Still

+

The modern pot still is a descendant of the alembic, an earlier distillation device

+ +
+
+ + + +
+ + +
+ +
+ +

Description of a Pot Still

+ + + + +

A pot still is a type of still used in distilling spirits such as whisky or brandy. Heat is applied directly to the pot containing the wash (for whisky) or wine (for brandy). This is called a batch distillation (as opposed to a continuous distillation).

+ +

At standard atmospheric pressure, alcohol boils at 78 °C (172 °F), while water boils at 100 °C (212 °F). During distillation, the vapour contains more alcohol than the liquid. When the vapours are condensed, the resulting liquid contains a higher concentration of alcohol. In the pot still, the alcohol and water vapour combine with esters and flow from the still through the condensing coil. There they condense into the first distillation liquid, the so-called “low wines”. The low wines have a strength of about 25–35% alcohol by volume, and flow into a second still. It is then distilled a second time to produce the colourless spirit, collected at about 70% alcohol by volume. Colour is added through maturation in an oak aging barrel, and develops over time.

+ +

The modern pot still is a descendant of the alembic, an earlier distillation device.

+ + + + + + + + +
+ + + +
+ + + + + + + + + + + + + diff --git a/_site/general/external sources/2016/08/27/example-post-one/index.html b/_site/general/external sources/2016/08/27/example-post-one/index.html new file mode 100644 index 0000000..e051ddb --- /dev/null +++ b/_site/general/external sources/2016/08/27/example-post-one/index.html @@ -0,0 +1,370 @@ + + + + + + + + + + + + +Description of an Alembic | Alembic + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ + + + + + +
+
+ + +
+
+ + + +
+ + +
+ +
+ +

Description of an Alembic

+ + + + +

The complete distilling apparatus consists of three parts: the “cucurbit” (Arabic ḳarʿa, Greek βίκος), the still pot containing the liquid to be distilled, which is heated by a flame; the “head” or “cap” (Arabic anbiḳ, Greek ἄμβιξ) which fits over the mouth of the cucurbit to receive the vapors, with an attached downward-sloping “tube” (Greek σωλήν), leading to the “receiver” (Arabic ḳābila, Greek ἄγγος or φιάλη) container.

+ + + +

Retorts have the “cap” and the “cucurbit” made into one. The anbik is also called the raʾs (head) of the cucurbit. The liquid in the cucurbit is heated or boiled; the vapour rises into the anbik, where it cools by contact with the walls and condenses, running down the spout into the receiver. A modern descendant of the alembic is the pot still, used to produce distilled beverages.

+ +

Originally from Alembic - Wikipedia

+ + + + + + + + +
+ + + +
+ + + + + + + + + + + + + diff --git a/_site/history/external sources/2016/08/28/example-post-two/index.html b/_site/history/external sources/2016/08/28/example-post-two/index.html new file mode 100644 index 0000000..560fee3 --- /dev/null +++ b/_site/history/external sources/2016/08/28/example-post-two/index.html @@ -0,0 +1,372 @@ + + + + + + + + + + + + +History of the Alembic | Alembic + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ + + + + + +
+
+

The History of the Alembic tool

+ +
+
+ + + +
+ + +
+ +
+ +

History of the Alembic

+ + + + +

Dioscorides’ ambix (described in his De materia medica) is a helmet-shaped lid for gathering condensed mercury. For Athenaeus (~ 225 C.E.) it is a bottle or flask. For later chemists it denotes various parts of crude distillation devices.

+ + + +

Alembic drawings appear in works of Cleopatra the Alchemist, Synesius, and Zosimos of Panopolis. There were alembics with two (dibikos) and three (tribikos) receivers.[4] According to Zosimos of Panopolis, the alembic was invented by Mary the Jewess.[5]

+ +

The anbik is described by Ibn al-Awwam in his Kitab al-Filaha (Book of Agriculture), where he explains how rose-water is distilled. Amongst others, it is mentioned in the Mafatih al-Ulum (Key of Sciences) of Khwarizmi and the Kitab al-Asrar (Book of Secrets) of Al-Razi. Some illustrations occur in the Latin translations of works which are attributed to Geber.[2]

+ +

Originally from Alembic - Wikipedia

+ + + + + + + + +
+ + + +
+ + + + + + + + + + + + + diff --git a/_site/index.html b/_site/index.html index 2bad826..549b78d 100644 --- a/_site/index.html +++ b/_site/index.html @@ -1,97 +1,419 @@ - + + - + + - - - - - - -LLaVA X-Ray Vision | A data science capstone project exploring Deep Learning, Medical Imaging, and multi-modal Large Language Models. - - - - - + + + + + +About Alembic | Alembic + + + + + + - - - - + + + + + + + +{"name":"David Darnes","sameAs":["https://twitter.com/DavidDarnes","https://www.facebook.com/daviddarnes","https://www.linkedin.com/in/daviddarnes","https://github.com/daviddarnes"],"author":{"@type":"Person","name":"DavidDarnes"},"url":"http://localhost:4000/","description":"Alembic is a starting point for Jekyll projects. Rather than starting from scratch, this boilerplate is designed to get the ball rolling immediately. Install it, configure it, tweak it, push it.","@type":"WebSite","publisher":{"@type":"Organization","logo":{"@type":"ImageObject","url":"http://localhost:4000/assets/logos/logo.svg"},"name":"DavidDarnes"},"image":"http://localhost:4000/assets/default-social-image.png","headline":"About Alembic","@context":"https://schema.org"} - + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + - -
-
+ + + + + + + + + + + + + + + + + + + + + + + + + -
-

LLaVA X-Ray Vision

-

A data science capstone project exploring Deep Learning, Medical Imaging, and multi-modal Large Language Models.

-
-
- - -
-
-
-

This project is brought to you by Luke Taylor, Raymond Song, and Muchan Li, under the supervision of our mentor Albert Hsiao MD, PhD.

-

About Us

+
+
+ -
-

Problem Overview

+ +
+ - +
  • + Fork Alembic +
  • + + + + + + + + +
    + + + + + + +
    +
    +

    Alembic

    +

    A Jekyll boilerplate theme designed to be a starting point for any Jekyll website

    -
    +
    + + + + + + +
    + +
    + +

    About Alembic

    + +

    Alembic is a starting point for Jekyll projects. Rather than starting from scratch, this boilerplate is designed to get rolling immediately. Install it, configure it, tweak it, push it.

    + +

    Fork it  github + + + Buy me a coffee ☕️ + Tweet it  + + Install Alembic ⚗️

    + +

    Features

    + +
      +
    • Available as a theme gem and GitHub Pages theme
    • +
    • Clear and elegant design that can be used out of the box or as solid starting point
    • +
    • Tested in all major browsers, including IE and Edge +
    • +
    • Built in Service Worker so it can work offline and on slow connections
    • +
    • +Configurable colours and typography in a single settings file
    • +
    • Extensive set of shortcodes to include various elements; such as buttons, icons, figure images and more
    • +
    • Solid typographic framework from Sassline +
    • +
    • Configurable navigation via a single file
    • +
    • Modular Jekyll components
    • +
    • Post category support in the form of a single post index page grouped by category
    • +
    • Built in live search using JavaScript
    • +
    • +Contact form built in using Formspree +
    • +
    • Designed with Siteleaf in mind
    • +
    • Has 9 of the most popular networks as performant sharing buttons
    • +
    • Has documentation
    • +
    + +

    Examples

    + +

    Here are a few examples of Alembic out in the wild being used in a variety of ways:

    + + + +

    Installation

    + +

    Quick setup

    + +

    To give you a running start I’ve put together some starter kits that you can download, fork or even deploy immediately:

    + +
      +
    • ⚗️🍨 Vanilla Jekyll starter kit
      +Deploy to Netlify +
    • +
    • ⚗️🌲 Forestry starter kit
      +Deploy to Forestry
      +Deploy to Netlify +
    • +
    • +

      ⚗️💠 Netlify CMS starter kit
      +Deploy to Netlify

      +
    • +
    • +

      ⚗️:octocat: GitHub Pages with remote theme kit
      +Download kit

      +
    • +
    • ⚗️🚀 Stackbit starter kit
      +Create with Stackbit +
    • +
    + +

    As a Jekyll theme

    + +
      +
    1. Add gem "alembic-jekyll-theme" to your Gemfile to add the theme as a dependancy
    2. +
    3. Run the command bundle install in the root of project to install the theme and its dependancies
    4. +
    5. Add theme: alembic-jekyll-theme to your _config.yml file to set the site theme
    6. +
    7. Run bundle exec jekyll serve to build and serve your site
    8. +
    9. Done! Use the configuration documentation and the example _config.yml file to set things like the navigation, contact form and social sharing buttons
    10. +
    + +

    As a GitHub Pages remote theme

    + +
      +
    1. Add gem "jekyll-remote-theme" to your Gemfile to add the theme as a dependancy
    2. +
    3. Run the command bundle install in the root of project to install the jekyll remote theme gem as a dependancy
    4. +
    5. Add jekyll-remote-theme to the list of plugins in your _config.yml file
    6. +
    7. Add remote_theme: daviddarnes/alembic@main to your _config.yml file to set the site theme
    8. +
    9. Run bundle exec jekyll serve to build and serve your site
    10. +
    11. Done! Use the configuration documentation and the example _config.yml file to set things like the navigation, contact form and social sharing buttons
    12. +
    + +

    As a Boilerplate / Fork

    + +

    (deprecated, not recommended)

    + +
      +
    1. Fork the repo
    2. +
    3. Replace the Gemfile with one stating all the gems used in your project
    4. +
    5. Delete the following unnecessary files/folders: .github, LICENSE, screenshot.png, CNAME and alembic-jekyll-theme.gemspec +
    6. +
    7. Run the command bundle install in the root of project to install the jekyll remote theme gem as a dependancy
    8. +
    9. Run bundle exec jekyll serve to build and serve your site
    10. +
    11. Done! Use the configuration documentation and the example _config.yml file to set things like the navigation, contact form and social sharing buttons
    12. +
    + +

    Customising

    + +

    When using Alembic as a theme means you can take advantage of the file overriding method. This allows you to overwrite any file in this theme with your own custom file, by matching the file name and path. The most common example of this would be if you want to add your own styles or change the core style settings.

    + +

    To add your own styles copy the styles.scss into your own project with the same file path (assets/styles.scss). From there you can add your own styles, you can even optionally ignore the theme styles by removing the @import "alembic"; line.

    + +

    If you’re looking to set your own colours and fonts you can overwrite them by matching the variable names from the _settings.scss file in your own styles.scss, make sure to state them before the @import "alembic"; line so they take effect. The settings are a mixture of custom variables and settings from Sassline - follow the link to find out how to configure the typographic settings.

    + + +
    + + + +
    + + + + + + + + + + + diff --git a/_site/jekyll-theme-tactile.gemspec b/_site/jekyll-theme-tactile.gemspec deleted file mode 100644 index 71ea044..0000000 --- a/_site/jekyll-theme-tactile.gemspec +++ /dev/null @@ -1,22 +0,0 @@ -# frozen_string_literal: true - -Gem::Specification.new do |s| - s.name = "jekyll-theme-tactile" - s.version = "0.2.0" - s.license = "CC0-1.0" - s.authors = ["Jason Long", "GitHub, Inc."] - s.email = ["opensource+jekyll-theme-tactile@github.com"] - s.homepage = "https://github.com/pages-themes/tactile" - s.summary = "Tactile is a Jekyll theme for GitHub Pages" - - s.files = `git ls-files -z`.split("\x0").select do |f| - f.match(%r{^((_includes|_layouts|_sass|assets)/|(LICENSE|README)((\.(txt|md|markdown)|$)))}i) - end - - s.platform = Gem::Platform::RUBY - s.add_runtime_dependency "jekyll", "> 3.5", "< 5.0" - s.add_runtime_dependency "jekyll-seo-tag", "~> 2.0" - s.add_development_dependency "html-proofer", "~> 3.0" - s.add_development_dependency "rubocop-github", "~> 0.16" - s.add_development_dependency "w3c_validators", "~> 1.3" -end diff --git a/_site/manifest.json b/_site/manifest.json new file mode 100644 index 0000000..4204748 --- /dev/null +++ b/_site/manifest.json @@ -0,0 +1,44 @@ +{ + "lang": "en-GB", + "name": "Alembic", + "short_name": "Alembic", + "theme_color": "#24292e", + "background_color": "#ffffff", + "icons": [ + { + "src": "/assets/logos/logo@16px.png", + "sizes": "16x16" + }, + { + "src": "/assets/logos/logo@32px.png", + "sizes": "32x32" + }, + { + "src": "/assets/logos/logo@96px.png", + "sizes": "96x96" + }, + { + "src": "/assets/logos/logo@120px.png", + "sizes": "120x120" + }, + { + "src": "/assets/logos/logo@144px.png", + "sizes": "144x144" + }, + { + "src": "/assets/logos/logo@180px.png", + "sizes": "180x180" + }, + { + "src": "/assets/logos/logo@512px.png", + "sizes": "512x512" + }, + { + "src": "/assets/logos/logo@1024px.png", + "sizes": "1024x1024" + } + + ], + "start_url": "/", + "display": "standalone" +} diff --git a/_site/offline/index.html b/_site/offline/index.html new file mode 100644 index 0000000..0675a12 --- /dev/null +++ b/_site/offline/index.html @@ -0,0 +1,300 @@ + + + + + + + + + + + + + + +Looks like you’re offline | Alembic + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + +
    + + + + + + + + +
    + + +
    + +
    + +

    Looks like you're offline

    + +

    It appears that you’ve lost your network connection and this document doesn’t exist on your device.

    + +

    Try either returning to the previous page, using the navigation to find your way back, or restore your network connection.

    + + +
    + + + +
    + + + + + + + + + + + + + diff --git a/_site/redirects.json b/_site/redirects.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/_site/redirects.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/_site/robots.txt b/_site/robots.txt new file mode 100644 index 0000000..d297064 --- /dev/null +++ b/_site/robots.txt @@ -0,0 +1 @@ +Sitemap: http://localhost:4000/sitemap.xml diff --git a/_site/script/bootstrap b/_site/script/bootstrap deleted file mode 100755 index 492e553..0000000 --- a/_site/script/bootstrap +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -set -e - -gem install bundler -bundle install diff --git a/_site/script/cibuild b/_site/script/cibuild deleted file mode 100755 index 8f69b90..0000000 --- a/_site/script/cibuild +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh - -set -e - -bundle exec jekyll build -bundle exec htmlproofer ./_site --check-html --check-sri -bundle exec rubocop -D --config .rubocop.yml -bundle exec script/validate-html -gem build jekyll-theme-tactile.gemspec diff --git a/_site/script/release b/_site/script/release deleted file mode 100755 index e7e5426..0000000 --- a/_site/script/release +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/sh -# Tag and push a release. - -set -e - -# Make sure we're in the project root. - -cd $(dirname "$0")/.. - -# Make sure the darn thing works - -bundle update - -# Build a new gem archive. - -rm -rf jekyll-theme-tactile-*.gem -gem build -q jekyll-theme-tactile.gemspec - -# Make sure we're on the master branch. - -(git branch | grep -q 'master') || { - echo "Only release from the master branch." - exit 1 -} - -# Figure out what version we're releasing. - -tag=v`ls jekyll-theme-tactile-*.gem | sed 's/^jekyll-theme-tactile-\(.*\)\.gem$/\1/'` - -# Make sure we haven't released this version before. - -git fetch -t origin - -(git tag -l | grep -q "$tag") && { - echo "Whoops, there's already a '${tag}' tag." - exit 1 -} - -# Tag it and bag it. - -gem push jekyll-theme-tactile-*.gem && git tag "$tag" && - git push origin master && git push origin "$tag" diff --git a/_site/script/validate-html b/_site/script/validate-html deleted file mode 100755 index 0c784f1..0000000 --- a/_site/script/validate-html +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: true - -require "w3c_validators" - -def validator(file) - extension = File.extname(file) - case extension - when ".html" - W3CValidators::NuValidator.new - when ".css" - W3CValidators::CSSValidator.new - end -end - -def validate(file) - puts "Checking #{file}..." - - path = File.expand_path "../_site/#{file}", __dir__ - results = validator(file).validate_file(path) - - return puts "Valid!" if results.errors.empty? - - results.errors.each { |err| puts err.to_s } - exit 1 -end - -validate "index.html" -validate File.join "assets", "css", "style.css" diff --git a/_site/search/index.html b/_site/search/index.html new file mode 100644 index 0000000..2bbb2d5 --- /dev/null +++ b/_site/search/index.html @@ -0,0 +1,356 @@ + + + + + + + + + + + + +Search | Alembic + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + +
    + + + + + + + + +
    + + +
    + +
    + +

    Search

    + + + + + + + + + + + +
    + + + +
    + + + + + + + + + + + + + diff --git a/_site/sitemap.xml b/_site/sitemap.xml new file mode 100644 index 0000000..1ec13a1 --- /dev/null +++ b/_site/sitemap.xml @@ -0,0 +1,33 @@ + + + +http://localhost:4000/general/external%20sources/2016/08/27/example-post-one/ +2016-08-27T00:00:00+01:00 + + +http://localhost:4000/history/external%20sources/2016/08/28/example-post-two/ +2016-08-28T00:00:00+01:00 + + +http://localhost:4000/general/2016/08/29/example-post-three/ +2016-08-29T00:00:00+01:00 + + +http://localhost:4000/categories/ + + +http://localhost:4000/elements/ + + +http://localhost:4000/blog/ + + +http://localhost:4000/ + + +http://localhost:4000/search/ + + +http://localhost:4000/blog/page2/ + + diff --git a/_site/sw.js b/_site/sw.js new file mode 100644 index 0000000..8da80f5 --- /dev/null +++ b/_site/sw.js @@ -0,0 +1,73 @@ +const version = '20240301235633'; +const cacheName = `static::${version}`; + +const buildContentBlob = () => { + return ["/general/2016/08/29/example-post-three/","/history/external%20sources/2016/08/28/example-post-two/","/general/external%20sources/2016/08/27/example-post-one/","/categories/","/elements/","/blog/","/","/manifest.json","/offline/","/assets/search.json","/search/","/assets/styles.css","/redirects.json","/sitemap.xml","/robots.txt","/blog/page2/","/feed.xml","/assets/styles.css.map","/assets/logos/logo.svg", "/assets/default-offline-image.png", "/assets/scripts/fetch.js" + ] +} + +const updateStaticCache = () => { + return caches.open(cacheName).then(cache => { + return cache.addAll(buildContentBlob()); + }); +}; + +const clearOldCache = () => { + return caches.keys().then(keys => { + // Remove caches whose name is no longer valid. + return Promise.all( + keys + .filter(key => { + return key !== cacheName; + }) + .map(key => { + console.log(`Service Worker: removing cache ${key}`); + return caches.delete(key); + }) + ); + }); +}; + +self.addEventListener("install", event => { + event.waitUntil( + updateStaticCache().then(() => { + console.log(`Service Worker: cache updated to version: ${cacheName}`); + }) + ); +}); + +self.addEventListener("activate", event => { + event.waitUntil(clearOldCache()); +}); + +self.addEventListener("fetch", event => { + let request = event.request; + let url = new URL(request.url); + + // Only deal with requests from the same domain. + if (url.origin !== location.origin) { + return; + } + + // Always fetch non-GET requests from the network. + if (request.method !== "GET") { + event.respondWith(fetch(request)); + return; + } + + // Default url returned if page isn't cached + let offlineAsset = "/offline/"; + + if (request.url.match(/\.(jpe?g|png|gif|svg)$/)) { + // If url requested is an image and isn't cached, return default offline image + offlineAsset = "/assets/default-offline-image.png"; + } + + // For all urls request image from network, then fallback to cache, then fallback to offline page + event.respondWith( + fetch(request).catch(async () => { + return (await caches.match(request)) || caches.match(offlineAsset); + }) + ); + return; +}); diff --git a/_site/thumbnail.png b/_site/thumbnail.png deleted file mode 100644 index 745e3d4..0000000 Binary files a/_site/thumbnail.png and /dev/null differ diff --git a/alembic-jekyll-theme.gemspec b/alembic-jekyll-theme.gemspec new file mode 100644 index 0000000..502b32e --- /dev/null +++ b/alembic-jekyll-theme.gemspec @@ -0,0 +1,28 @@ +# coding: utf-8 + +Gem::Specification.new do |spec| + spec.name = "alembic-jekyll-theme" + spec.version = "4.1.0" + spec.authors = ["David Darnes"] + spec.email = ["me@daviddarnes.com"] + + spec.summary = %q{A Jekyll boilerplate theme designed to be a starting point for any Jekyll website.} + spec.description = "A Jekyll boilerplate theme designed to be a starting point for any Jekyll website. Rather than starting from scratch, this boilerplate is designed to get the ball rolling immediately." + spec.homepage = "https://alembic.darn.es" + spec.license = "MIT" + + spec.metadata["plugin_type"] = "theme" + + spec.files = `git ls-files -z`.split("\x0").select { |f| f.match(%r{^(assets|_layouts|_includes|_sass|LICENSE|README|sw|manifest)}i) } + + spec.add_runtime_dependency "jekyll", "~> 4.1" + spec.add_runtime_dependency "jekyll-sitemap", "~> 1.4.0" + spec.add_runtime_dependency "jekyll-mentions", "~> 1.6.0" + spec.add_runtime_dependency "jekyll-paginate", "~> 1.1.0" + spec.add_runtime_dependency "jekyll-seo-tag", "~> 2.7.1" + spec.add_runtime_dependency "jekyll-redirect-from", "~> 0.16" + spec.add_runtime_dependency "jekyll-feed", "~> 0.15" + spec.add_runtime_dependency "jekyll-commonmark", "~> 1.3.1" + spec.add_runtime_dependency "jekyll-include-cache", "~> 0.2" + spec.add_runtime_dependency "jemoji", "~> 0.12" +end diff --git a/another-page.md b/another-page.md deleted file mode 100644 index 03ce0c2..0000000 --- a/another-page.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -layout: default ---- - -## Welcome to another page - -_yay_ - -[back](./) diff --git a/assets/.gitignore b/assets/.gitignore new file mode 100644 index 0000000..1675e65 --- /dev/null +++ b/assets/.gitignore @@ -0,0 +1 @@ +.jekyll-cache/ \ No newline at end of file diff --git a/assets/css/print.css b/assets/css/print.css deleted file mode 100644 index 696e98d..0000000 --- a/assets/css/print.css +++ /dev/null @@ -1,228 +0,0 @@ -html, body, div, span, applet, object, iframe, -h1, h2, h3, h4, h5, h6, p, blockquote, pre, -a, abbr, acronym, address, big, cite, code, -del, dfn, em, img, ins, kbd, q, s, samp, -small, strike, strong, sub, sup, tt, var, -b, u, i, center, -dl, dt, dd, ol, ul, li, -fieldset, form, label, legend, -table, caption, tbody, tfoot, thead, tr, th, td, -article, aside, canvas, details, embed, -figure, figcaption, footer, header, hgroup, -menu, nav, output, ruby, section, summary, -time, mark, audio, video { - padding: 0; - margin: 0; - font: inherit; - font-size: 100%; - vertical-align: baseline; - border: 0; -} -/* HTML5 display-role reset for older browsers */ -article, aside, details, figcaption, figure, -footer, header, hgroup, menu, nav, section { - display: block; -} -body { - line-height: 1; -} -ol, ul { - list-style: none; -} -blockquote, q { - quotes: none; -} -blockquote:before, blockquote:after, -q:before, q:after { - content: ''; - content: none; -} -table { - border-spacing: 0; - border-collapse: collapse; -} -body { - font-family: 'Helvetica Neue', Helvetica, Arial, serif; - font-size: 1.25em; - line-height: 1.5; - color: #000; -} - -a { - font-weight: bold; - color: #d5000d; -} - -header { - padding-top: 35px; - padding-bottom: 10px; -} - -header h1 { - font-size: 48px; - font-weight: bold; - line-height: 1.2; - color: #303030; - letter-spacing: -1px; -} - -header h2 { - font-size: 30px; - font-weight: normal; - line-height: 1.3; - color: #aaa; - letter-spacing: -1px; -} -#downloads { - display: none; -} -#main_content { - padding-top: 20px; -} - -code, pre { - margin-bottom: 30px; - font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal; - font-size: 12px; - color: #222; -} - -code { - padding: 0 3px; -} - -pre { - padding: 20px; - overflow: auto; - border: solid 1px #ddd; -} -pre code { - padding: 0; -} - -ul, ol, dl { - margin-bottom: 20px; -} - - -/* COMMON STYLES */ - -table { - width: 100%; - border: 1px solid #ebebeb; -} - -th { - font-weight: 500; -} - -td { - font-weight: 300; - text-align: center; - border: 1px solid #ebebeb; -} - -form { - padding: 20px; - background: #f2f2f2; - -} - - -/* GENERAL ELEMENT TYPE STYLES */ - -h1 { - font-size: 2.8em; -} - -h2 { - margin-bottom: 8px; - font-size: 32px; - font-weight: bold; - color: #303030; -} - -h3 { - margin-bottom: 8px; - font-size: 18px; - font-weight: bold; - color: #d5000d; -} - -h4 { - font-size: 16px; - font-weight: bold; - color: #303030; -} - -h5 { - font-size: 1em; - color: #303030; -} - -h6 { - font-size: .8em; - color: #303030; -} - -p { - margin-bottom: 20px; - font-weight: 300; -} - -a { - text-decoration: none; -} - -p a { - font-weight: 400; -} - -blockquote { - padding: 0 0 0 30px; - margin-bottom: 20px; - font-size: 1.6em; - border-left: 10px solid #e9e9e9; -} - -ul li { - list-style-position: inside; - list-style: disc; - padding-left: 20px; -} - -ol li { - list-style-position: inside; - list-style: decimal; - padding-left: 3px; -} - -dl dd { - font-style: italic; - font-weight: 100; -} - -footer { - padding-top: 20px; - padding-bottom: 30px; - margin-top: 40px; - font-size: 18px; - color: #aaa; -} - -footer a { - color: #666; -} - -/* MISC */ -.clearfix:after { - display: block; - height: 0; - clear: both; - visibility: hidden; - content: '.'; -} - -.clearfix {display: inline-block;} -* html .clearfix {height: 1%;} -.clearfix {display: block;} diff --git a/assets/css/style.scss b/assets/css/style.scss deleted file mode 100644 index c1c6a0d..0000000 --- a/assets/css/style.scss +++ /dev/null @@ -1,13 +0,0 @@ ---- ---- -@import "{{ site.theme }}"; -@import "jekyll-theme-tactile"; - -header h1 { font-family: "Cormorant Garamond", serif; font-size: 48px; font-weight: 900; line-height: 1.2; text-shadow: 3px 3px 3px #929aab; color: #132743; letter-spacing: -1px; } -header h2 { font-size: 30px; font-weight: normal; line-height: 1.3; color: #a7bcb9; -webkit-text-stroke: 0.5px black; letter-spacing: -1px; } -.inner { width: 900px; margin: 0 auto; } -h2 { margin-bottom: 8px; font-size: 28px; font-weight: bold; color: #303030; text-shadow: 1px 1px 2px #929aab; } -footer { padding-top: 20px; padding-bottom: 30px; margin-top: 40px; font-size: 18px; color: #85a6b1; background: transparent url("../images/hr.png") 0 0 no-repeat; } -body { font-family: "Cormorant Garamond", serif; font-size: 1.25em; font-style: normal; font-weight: normal; line-height: 1.5; color: #85a6b1; -webkit-text-stroke: 0.25px black; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); background: #e7e7e7 url(../images/body-bg.png) 0 0 repeat; } - -hr { height: 1px; padding-bottom: 1em; margin-top: 1em; line-height: 1px; background: transparent url("../images/hr.png") 50% 0 no-repeat; border: none; } diff --git a/assets/default-offline-image.png b/assets/default-offline-image.png new file mode 100644 index 0000000..e3f8d6f Binary files /dev/null and b/assets/default-offline-image.png differ diff --git a/assets/default-social-image.png b/assets/default-social-image.png new file mode 100644 index 0000000..7119c42 Binary files /dev/null and b/assets/default-social-image.png differ diff --git a/assets/images/body-bg.png b/assets/images/body-bg.png deleted file mode 100644 index 5e8c4c2..0000000 Binary files a/assets/images/body-bg.png and /dev/null differ diff --git a/assets/images/highlight-bg.jpg b/assets/images/highlight-bg.jpg deleted file mode 100644 index 355e089..0000000 Binary files a/assets/images/highlight-bg.jpg and /dev/null differ diff --git a/assets/images/hr.png b/assets/images/hr.png deleted file mode 100644 index d32f689..0000000 Binary files a/assets/images/hr.png and /dev/null differ diff --git a/assets/images/octocat-icon.png b/assets/images/octocat-icon.png deleted file mode 100644 index 2406608..0000000 Binary files a/assets/images/octocat-icon.png and /dev/null differ diff --git a/assets/images/tar-gz-icon.png b/assets/images/tar-gz-icon.png deleted file mode 100644 index 502e67d..0000000 Binary files a/assets/images/tar-gz-icon.png and /dev/null differ diff --git a/assets/images/zip-icon.png b/assets/images/zip-icon.png deleted file mode 100644 index 732aced..0000000 Binary files a/assets/images/zip-icon.png and /dev/null differ diff --git a/assets/logos/logo.svg b/assets/logos/logo.svg new file mode 100644 index 0000000..4c483c6 --- /dev/null +++ b/assets/logos/logo.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/logos/logo@1024px.png b/assets/logos/logo@1024px.png new file mode 100644 index 0000000..ac9fcac Binary files /dev/null and b/assets/logos/logo@1024px.png differ diff --git a/assets/logos/logo@120px.png b/assets/logos/logo@120px.png new file mode 100644 index 0000000..9bcefe4 Binary files /dev/null and b/assets/logos/logo@120px.png differ diff --git a/assets/logos/logo@144px.png b/assets/logos/logo@144px.png new file mode 100644 index 0000000..c8bc1bc Binary files /dev/null and b/assets/logos/logo@144px.png differ diff --git a/assets/logos/logo@16px.png b/assets/logos/logo@16px.png new file mode 100644 index 0000000..864c271 Binary files /dev/null and b/assets/logos/logo@16px.png differ diff --git a/assets/logos/logo@180px.png b/assets/logos/logo@180px.png new file mode 100644 index 0000000..74c153a Binary files /dev/null and b/assets/logos/logo@180px.png differ diff --git a/assets/logos/logo@32px.png b/assets/logos/logo@32px.png new file mode 100644 index 0000000..f4bd79e Binary files /dev/null and b/assets/logos/logo@32px.png differ diff --git a/assets/logos/logo@512px.png b/assets/logos/logo@512px.png new file mode 100644 index 0000000..56444e4 Binary files /dev/null and b/assets/logos/logo@512px.png differ diff --git a/assets/logos/logo@96px.png b/assets/logos/logo@96px.png new file mode 100644 index 0000000..b8c41f1 Binary files /dev/null and b/assets/logos/logo@96px.png differ diff --git a/assets/manifest.json b/assets/manifest.json new file mode 100644 index 0000000..2c005b1 --- /dev/null +++ b/assets/manifest.json @@ -0,0 +1,24 @@ +--- +permalink: "manifest.json" +layout: null +sitemap: false +--- +{ + "lang": "{{ site.lang | default: "en-US" }}", + "name": "{{ site.title }}", + "short_name": "{{ site.short_name | default: site.title | replace: ' ', '' }}", + "theme_color": "{{ site.manifest.theme_color | default: '#24292e' }}", + "background_color": "{{ site.manifest.background_color | default: '#ffffff' }}", + {% if site.favicons -%} + "icons": [ + {% for icon in site.favicons -%} + { + "src": "{{ icon[1] | relative_url }}", + "sizes": "{{ icon[0] }}x{{ icon[0] }}" + }{% if forloop.last != true %},{% endif %} + {% endfor %} + ], + {% endif -%} + "start_url": "/", + "display": "standalone" +} diff --git a/assets/scripts/fetch.js b/assets/scripts/fetch.js new file mode 100644 index 0000000..dfb74be --- /dev/null +++ b/assets/scripts/fetch.js @@ -0,0 +1,458 @@ +(function(self) { + 'use strict'; + + if (self.fetch) { + return + } + + var support = { + searchParams: 'URLSearchParams' in self, + iterable: 'Symbol' in self && 'iterator' in Symbol, + blob: 'FileReader' in self && 'Blob' in self && (function() { + try { + new Blob() + return true + } catch(e) { + return false + } + })(), + formData: 'FormData' in self, + arrayBuffer: 'ArrayBuffer' in self + } + + if (support.arrayBuffer) { + var viewClasses = [ + '[object Int8Array]', + '[object Uint8Array]', + '[object Uint8ClampedArray]', + '[object Int16Array]', + '[object Uint16Array]', + '[object Int32Array]', + '[object Uint32Array]', + '[object Float32Array]', + '[object Float64Array]' + ] + + var isDataView = function(obj) { + return obj && DataView.prototype.isPrototypeOf(obj) + } + + var isArrayBufferView = ArrayBuffer.isView || function(obj) { + return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1 + } + } + + function normalizeName(name) { + if (typeof name !== 'string') { + name = String(name) + } + if (/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(name)) { + throw new TypeError('Invalid character in header field name') + } + return name.toLowerCase() + } + + function normalizeValue(value) { + if (typeof value !== 'string') { + value = String(value) + } + return value + } + + // Build a destructive iterator for the value list + function iteratorFor(items) { + var iterator = { + next: function() { + var value = items.shift() + return {done: value === undefined, value: value} + } + } + + if (support.iterable) { + iterator[Symbol.iterator] = function() { + return iterator + } + } + + return iterator + } + + function Headers(headers) { + this.map = {} + + if (headers instanceof Headers) { + headers.forEach(function(value, name) { + this.append(name, value) + }, this) + + } else if (headers) { + Object.getOwnPropertyNames(headers).forEach(function(name) { + this.append(name, headers[name]) + }, this) + } + } + + Headers.prototype.append = function(name, value) { + name = normalizeName(name) + value = normalizeValue(value) + var oldValue = this.map[name] + this.map[name] = oldValue ? oldValue+','+value : value + } + + Headers.prototype['delete'] = function(name) { + delete this.map[normalizeName(name)] + } + + Headers.prototype.get = function(name) { + name = normalizeName(name) + return this.has(name) ? this.map[name] : null + } + + Headers.prototype.has = function(name) { + return this.map.hasOwnProperty(normalizeName(name)) + } + + Headers.prototype.set = function(name, value) { + this.map[normalizeName(name)] = normalizeValue(value) + } + + Headers.prototype.forEach = function(callback, thisArg) { + for (var name in this.map) { + if (this.map.hasOwnProperty(name)) { + callback.call(thisArg, this.map[name], name, this) + } + } + } + + Headers.prototype.keys = function() { + var items = [] + this.forEach(function(value, name) { items.push(name) }) + return iteratorFor(items) + } + + Headers.prototype.values = function() { + var items = [] + this.forEach(function(value) { items.push(value) }) + return iteratorFor(items) + } + + Headers.prototype.entries = function() { + var items = [] + this.forEach(function(value, name) { items.push([name, value]) }) + return iteratorFor(items) + } + + if (support.iterable) { + Headers.prototype[Symbol.iterator] = Headers.prototype.entries + } + + function consumed(body) { + if (body.bodyUsed) { + return Promise.reject(new TypeError('Already read')) + } + body.bodyUsed = true + } + + function fileReaderReady(reader) { + return new Promise(function(resolve, reject) { + reader.onload = function() { + resolve(reader.result) + } + reader.onerror = function() { + reject(reader.error) + } + }) + } + + function readBlobAsArrayBuffer(blob) { + var reader = new FileReader() + var promise = fileReaderReady(reader) + reader.readAsArrayBuffer(blob) + return promise + } + + function readBlobAsText(blob) { + var reader = new FileReader() + var promise = fileReaderReady(reader) + reader.readAsText(blob) + return promise + } + + function readArrayBufferAsText(buf) { + var view = new Uint8Array(buf) + var chars = new Array(view.length) + + for (var i = 0; i < view.length; i++) { + chars[i] = String.fromCharCode(view[i]) + } + return chars.join('') + } + + function bufferClone(buf) { + if (buf.slice) { + return buf.slice(0) + } else { + var view = new Uint8Array(buf.byteLength) + view.set(new Uint8Array(buf)) + return view.buffer + } + } + + function Body() { + this.bodyUsed = false + + this._initBody = function(body) { + this._bodyInit = body + if (!body) { + this._bodyText = '' + } else if (typeof body === 'string') { + this._bodyText = body + } else if (support.blob && Blob.prototype.isPrototypeOf(body)) { + this._bodyBlob = body + } else if (support.formData && FormData.prototype.isPrototypeOf(body)) { + this._bodyFormData = body + } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) { + this._bodyText = body.toString() + } else if (support.arrayBuffer && support.blob && isDataView(body)) { + this._bodyArrayBuffer = bufferClone(body.buffer) + // IE 10-11 can't handle a DataView body. + this._bodyInit = new Blob([this._bodyArrayBuffer]) + } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) { + this._bodyArrayBuffer = bufferClone(body) + } else { + throw new Error('unsupported BodyInit type') + } + + if (!this.headers.get('content-type')) { + if (typeof body === 'string') { + this.headers.set('content-type', 'text/plain;charset=UTF-8') + } else if (this._bodyBlob && this._bodyBlob.type) { + this.headers.set('content-type', this._bodyBlob.type) + } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) { + this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8') + } + } + } + + if (support.blob) { + this.blob = function() { + var rejected = consumed(this) + if (rejected) { + return rejected + } + + if (this._bodyBlob) { + return Promise.resolve(this._bodyBlob) + } else if (this._bodyArrayBuffer) { + return Promise.resolve(new Blob([this._bodyArrayBuffer])) + } else if (this._bodyFormData) { + throw new Error('could not read FormData body as blob') + } else { + return Promise.resolve(new Blob([this._bodyText])) + } + } + + this.arrayBuffer = function() { + if (this._bodyArrayBuffer) { + return consumed(this) || Promise.resolve(this._bodyArrayBuffer) + } else { + return this.blob().then(readBlobAsArrayBuffer) + } + } + } + + this.text = function() { + var rejected = consumed(this) + if (rejected) { + return rejected + } + + if (this._bodyBlob) { + return readBlobAsText(this._bodyBlob) + } else if (this._bodyArrayBuffer) { + return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer)) + } else if (this._bodyFormData) { + throw new Error('could not read FormData body as text') + } else { + return Promise.resolve(this._bodyText) + } + } + + if (support.formData) { + this.formData = function() { + return this.text().then(decode) + } + } + + this.json = function() { + return this.text().then(JSON.parse) + } + + return this + } + + // HTTP methods whose capitalization should be normalized + var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'] + + function normalizeMethod(method) { + var upcased = method.toUpperCase() + return (methods.indexOf(upcased) > -1) ? upcased : method + } + + function Request(input, options) { + options = options || {} + var body = options.body + + if (input instanceof Request) { + if (input.bodyUsed) { + throw new TypeError('Already read') + } + this.url = input.url + this.credentials = input.credentials + if (!options.headers) { + this.headers = new Headers(input.headers) + } + this.method = input.method + this.mode = input.mode + if (!body && input._bodyInit != null) { + body = input._bodyInit + input.bodyUsed = true + } + } else { + this.url = String(input) + } + + this.credentials = options.credentials || this.credentials || 'omit' + if (options.headers || !this.headers) { + this.headers = new Headers(options.headers) + } + this.method = normalizeMethod(options.method || this.method || 'GET') + this.mode = options.mode || this.mode || null + this.referrer = null + + if ((this.method === 'GET' || this.method === 'HEAD') && body) { + throw new TypeError('Body not allowed for GET or HEAD requests') + } + this._initBody(body) + } + + Request.prototype.clone = function() { + return new Request(this, { body: this._bodyInit }) + } + + function decode(body) { + var form = new FormData() + body.trim().split('&').forEach(function(bytes) { + if (bytes) { + var split = bytes.split('=') + var name = split.shift().replace(/\+/g, ' ') + var value = split.join('=').replace(/\+/g, ' ') + form.append(decodeURIComponent(name), decodeURIComponent(value)) + } + }) + return form + } + + function parseHeaders(rawHeaders) { + var headers = new Headers() + rawHeaders.split(/\r?\n/).forEach(function(line) { + var parts = line.split(':') + var key = parts.shift().trim() + if (key) { + var value = parts.join(':').trim() + headers.append(key, value) + } + }) + return headers + } + + Body.call(Request.prototype) + + function Response(bodyInit, options) { + if (!options) { + options = {} + } + + this.type = 'default' + this.status = 'status' in options ? options.status : 200 + this.ok = this.status >= 200 && this.status < 300 + this.statusText = 'statusText' in options ? options.statusText : 'OK' + this.headers = new Headers(options.headers) + this.url = options.url || '' + this._initBody(bodyInit) + } + + Body.call(Response.prototype) + + Response.prototype.clone = function() { + return new Response(this._bodyInit, { + status: this.status, + statusText: this.statusText, + headers: new Headers(this.headers), + url: this.url + }) + } + + Response.error = function() { + var response = new Response(null, {status: 0, statusText: ''}) + response.type = 'error' + return response + } + + var redirectStatuses = [301, 302, 303, 307, 308] + + Response.redirect = function(url, status) { + if (redirectStatuses.indexOf(status) === -1) { + throw new RangeError('Invalid status code') + } + + return new Response(null, {status: status, headers: {location: url}}) + } + + self.Headers = Headers + self.Request = Request + self.Response = Response + + self.fetch = function(input, init) { + return new Promise(function(resolve, reject) { + var request = new Request(input, init) + var xhr = new XMLHttpRequest() + + xhr.onload = function() { + var options = { + status: xhr.status, + statusText: xhr.statusText, + headers: parseHeaders(xhr.getAllResponseHeaders() || '') + } + options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL') + var body = 'response' in xhr ? xhr.response : xhr.responseText + resolve(new Response(body, options)) + } + + xhr.onerror = function() { + reject(new TypeError('Network request failed')) + } + + xhr.ontimeout = function() { + reject(new TypeError('Network request failed')) + } + + xhr.open(request.method, request.url, true) + + if (request.credentials === 'include') { + xhr.withCredentials = true + } + + if ('responseType' in xhr && support.blob) { + xhr.responseType = 'blob' + } + + request.headers.forEach(function(value, name) { + xhr.setRequestHeader(name, value) + }) + + xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit) + }) + } + self.fetch.polyfill = true +})(typeof self !== 'undefined' ? self : this); diff --git a/assets/scripts/sw.js b/assets/scripts/sw.js new file mode 100644 index 0000000..4365485 --- /dev/null +++ b/assets/scripts/sw.js @@ -0,0 +1,88 @@ +--- +permalink: "/sw.js" +layout: null +sitemap: false +--- + +const version = '{{ site.time | date: '%Y%m%d%H%M%S' }}'; +const cacheName = `static::${version}`; + +const buildContentBlob = () => { + return [ + {%- for post in site.posts limit: 10 -%} + "{{ post.url | relative_url }}", + {%- endfor -%} + {%- for page in site.pages -%} + {%- unless page.url contains 'sw.js' or page.url contains '404.html' -%} + "{{ page.url | relative_url }}", + {%- endunless -%} + {%- endfor -%} + "{{ site.logo | relative_url }}", "{{ site.baseurl }}/assets/default-offline-image.png", "{{ site.baseurl }}/assets/scripts/fetch.js" + ] +} + +const updateStaticCache = () => { + return caches.open(cacheName).then(cache => { + return cache.addAll(buildContentBlob()); + }); +}; + +const clearOldCache = () => { + return caches.keys().then(keys => { + // Remove caches whose name is no longer valid. + return Promise.all( + keys + .filter(key => { + return key !== cacheName; + }) + .map(key => { + console.log(`Service Worker: removing cache ${key}`); + return caches.delete(key); + }) + ); + }); +}; + +self.addEventListener("install", event => { + event.waitUntil( + updateStaticCache().then(() => { + console.log(`Service Worker: cache updated to version: ${cacheName}`); + }) + ); +}); + +self.addEventListener("activate", event => { + event.waitUntil(clearOldCache()); +}); + +self.addEventListener("fetch", event => { + let request = event.request; + let url = new URL(request.url); + + // Only deal with requests from the same domain. + if (url.origin !== location.origin) { + return; + } + + // Always fetch non-GET requests from the network. + if (request.method !== "GET") { + event.respondWith(fetch(request)); + return; + } + + // Default url returned if page isn't cached + let offlineAsset = "/offline/"; + + if (request.url.match(/\.(jpe?g|png|gif|svg)$/)) { + // If url requested is an image and isn't cached, return default offline image + offlineAsset = "{{ site.baseurl }}/assets/default-offline-image.png"; + } + + // For all urls request image from network, then fallback to cache, then fallback to offline page + event.respondWith( + fetch(request).catch(async () => { + return (await caches.match(request)) || caches.match(offlineAsset); + }) + ); + return; +}); diff --git a/assets/search.json b/assets/search.json new file mode 100644 index 0000000..1633a8d --- /dev/null +++ b/assets/search.json @@ -0,0 +1,32 @@ +--- +layout: null +sitemap: false +--- + +{% capture json %} +[ + {% assign collections = site.collections | where_exp:'collection','collection.output != false' %} + {% for collection in collections %} + {% assign docs = collection.docs | where_exp:'doc','doc.sitemap != false' %} + {% for doc in docs %} + { + "title": {{ doc.title | jsonify }}, + "excerpt": {{ doc.excerpt | markdownify | strip_html | jsonify }}, + "content": {{ doc.content | markdownify | strip_html | jsonify }}, + "url": {{ site.baseurl | append: doc.url | jsonify }} + }, + {% endfor %} + {% endfor %} + {% assign pages = site.html_pages | where_exp:'doc','doc.sitemap != false' | where_exp:'doc','doc.title != null' %} + {% for page in pages %} + { + "title": {{ page.title | jsonify }}, + "excerpt": {{ page.excerpt | markdownify | strip_html | jsonify }}, + "content": {{ page.content | markdownify | strip_html | jsonify }}, + "url": {{ site.baseurl | append: page.url | jsonify }} + }{% unless forloop.last %},{% endunless %} + {% endfor %} +] +{% endcapture %} + +{{ json | lstrip }} diff --git a/assets/styles.scss b/assets/styles.scss new file mode 100644 index 0000000..992b624 --- /dev/null +++ b/assets/styles.scss @@ -0,0 +1,6 @@ +--- +title: false +styles: true +--- + +@import "alembic"; diff --git a/blog/index.html b/blog/index.html new file mode 100644 index 0000000..f85c96a --- /dev/null +++ b/blog/index.html @@ -0,0 +1,4 @@ +--- +layout: blog +collectionpage: posts +--- diff --git a/categories.md b/categories.md new file mode 100644 index 0000000..924b495 --- /dev/null +++ b/categories.md @@ -0,0 +1,6 @@ +--- +title: Categories +layout: categories +excerpt: "Category index" +aside: true +--- diff --git a/docs/CODE_OF_CONDUCT.md b/docs/CODE_OF_CONDUCT.md deleted file mode 100644 index ab1a9a1..0000000 --- a/docs/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at opensource@github.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md deleted file mode 100644 index c484f3c..0000000 --- a/docs/CONTRIBUTING.md +++ /dev/null @@ -1,88 +0,0 @@ -# Contributing to the Tactile theme - -Hi there! We're thrilled that you'd like to contribute to the Tactile theme. Your help is essential for keeping it great. - -the Tactile theme is an open source project supported by the efforts of an entire community and built one contribution at a time by users like you. We'd love for you to get involved. Whatever your level of skill or however much time you can give, your contribution is greatly appreciated. There are many ways to contribute, from writing tutorials or blog posts, improving the documentation, submitting bug reports and feature requests, helping other users by commenting on issues, or writing code which can be incorporated into the Tactile theme itself. - -Following these guidelines helps to communicate that you respect the time of the developers managing and developing this open source project. In return, they should reciprocate that respect in addressing your issue, assessing changes, and helping you finalize your pull requests. - - -## Looking for support? - -We'd love to help. Check out [the support guidelines](SUPPORT.md). - -## How to report a bug - -Think you found a bug? Please check [the list of open issues](https://github.com/pages-themes/tactile/issues) to see if your bug has already been reported. If it hasn't please [submit a new issue](https://github.com/pages-themes/tactile/issues/new). - -Here are a few tips for writing *great* bug reports: - -* Describe the specific problem (e.g., "widget doesn't turn clockwise" versus "getting an error") -* Include the steps to reproduce the bug, what you expected to happen, and what happened instead -* Check that you are using the latest version of the project and its dependencies -* Include what version of the project your using, as well as any relevant dependencies -* Only include one bug per issue. If you have discovered two bugs, please file two issues -* Even if you don't know how to fix the bug, including a failing test may help others track it down - -**If you find a security vulnerability, do not open an issue. Please email security@github.com instead.** - -## How to suggest a feature or enhancement - -If you find yourself wishing for a feature that doesn't exist in the Tactile theme, you are probably not alone. There are bound to be others out there with similar needs. Many of the features that the Tactile theme has today have been added because our users saw the need. - -Feature requests are welcome. But take a moment to find out whether your idea fits with the scope and goals of the project. It's up to you to make a strong case to convince the project's developers of the merits of this feature. Please provide as much detail and context as possible, including describing the problem you're trying to solve. - -[Open an issue](https://github.com/pages-themes/tactile/issues/new) which describes the feature you would like to see, why you want it, how it should work, etc. - - - -## Your first contribution - -We'd love for you to contribute to the project. Unsure where to begin contributing to the Tactile theme? You can start by looking through these "good first issue" and "help wanted" issues: - -* [Good first issues](https://github.com/pages-themes/tactile/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) - issues which should only require a few lines of code and a test or two -* [Help wanted issues](https://github.com/pages-themes/tactile/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) - issues which may be a bit more involved, but are specifically seeking community contributions - -*p.s. Feel free to ask for help; everyone is a beginner at first* :smiley_cat: - -## How to propose changes - -Here's a few general guidelines for proposing changes: - -* If you are making visual changes, include a screenshot of what the affected element looks like, both before and after. -* Follow the [Jekyll style guide](https://ben.balter.com/jekyll-style-guide). -* If you are changing any user-facing functionality, please be sure to update the documentation -* Each pull request should implement **one** feature or bug fix. If you want to add or fix more than one thing, submit more than one pull request -* Do not commit changes to files that are irrelevant to your feature or bug fix -* Don't bump the version number in your pull request (it will be bumped prior to release) -* Write [a good commit message](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) - -At a high level, [the process for proposing changes](https://guides.github.com/introduction/flow/) is: - -1. [Fork](https://github.com/pages-themes/tactile/fork) and clone the project -2. Configure and install the dependencies: `script/bootstrap` -3. Make sure the tests pass on your machine: `script/cibuild` -4. Create a new branch: `git checkout -b my-branch-name` -5. Make your change, add tests, and make sure the tests still pass -6. Push to your fork and [submit a pull request](https://github.com/pages-themes/tactile/compare) -7. Pat your self on the back and wait for your pull request to be reviewed and merged - -**Interesting in submitting your first Pull Request?** It's easy! You can learn how from this *free* series [How to Contribute to an Open Source Project on GitHub](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github) - -## Bootstrapping your local development environment - -`script/bootstrap` - -## Running tests - -`script/cibuild` - -## Code of conduct - -This project is governed by [the Contributor Covenant Code of Conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. - -## Additional Resources - -* [Contributing to Open Source on GitHub](https://guides.github.com/activities/contributing-to-open-source/) -* [Using Pull Requests](https://help.github.com/articles/using-pull-requests/) -* [GitHub Help](https://help.github.com) diff --git a/docs/SUPPORT.md b/docs/SUPPORT.md deleted file mode 100644 index 720e2df..0000000 --- a/docs/SUPPORT.md +++ /dev/null @@ -1,9 +0,0 @@ -## Where to get help - -If you think you've found a bug in the Tactile theme, please [check the existing issues](https://github.com/pages-themes/tactile/issues), and if no one has reported the problem, [open a new issue](https://github.com/pages-themes/tactile/issues/new). - -If you have a general question about the theme, how to implement it, or how to customize it for your site you have two options: - -1. Search for your query on [`support.github.com`](https://support.github.com/?q=pages+Tactile+theme), which will also look for similar topics on [`github.community`](https://github.community/search?q=pages+Tactile+theme) -2. Ask your question of the Jekyll community on [talk.jekyllrb.com](https://talk.jekyllrb.com/) -3. [Contact GitHub Support](https://github.com/contact?form%5Bsubject%5D=GitHub%20Pages%20theme%20pages-themes/tactile) diff --git a/elements.md b/elements.md new file mode 100644 index 0000000..65d77fe --- /dev/null +++ b/elements.md @@ -0,0 +1,144 @@ +--- +title: Elements +feature_text: | + A demo of Markdown and HTML includes +feature_image: "https://picsum.photos/2560/600?image=873" +excerpt: "A demo of Markdown and HTML includes" +aside: true +--- + +# Heading 1 + +## Heading 2 + +### Heading 3 + +#### Heading 4 + +##### Heading 5 + +###### Heading 6 + +A small element + +[A link](https://david.darn.es "A link") + +Lorem ipsum dolor sit amet, consectetur adip* isicing elit, sed do eiusmod *tempor incididunt ut labore et dolore magna aliqua. + +Duis aute irure dolor in [A link](https://david.darn.es "A link") reprehenderit in voluptate velit esse cillum **bold text** dolore eu fugiat nulla pariatur. Excepteur span element sint occaecat cupidatat non proident, sunt _italicised text_ in culpa qui officia deserunt mollit anim id `some code` est laborum. + +* An item +* An item +* An item +* An item +* An item + +1. Item one +2. Item two +3. Item three +4. Item four +5. Item five + +> A simple blockquote + +Some HTML... + +``` html +
    +

    You planning a vacation, Mr. Sullivan?

    + +
    +``` + +...CSS... + +``` css +blockquote { + text-align: center; + font-weight: bold; +} +blockquote footer { + font-size: .8rem; +} +``` + +...and JavaScript + +``` js +const blockquote = document.querySelector("blockquote") +const bolden = (keyString, string) => + string.replace(new RegExp(keyString, 'g'), ''+keyString+'') + +blockquote.innerHTML = bolden("Mr. Sullivan", blockquote.innerHTML) +``` + +`Single line of code` + +## HTML Includes + +### Contact form + +{% include site-form.html %} + +``` html +{% raw %}{% include site-form.html %}{% endraw %} +``` + +### Demo map embed + +{% include map.html id="1UT-2Z-Vg_MG_TrS5X2p8SthsJhc" title="Coffee shop map" %} + +``` html +{% raw %}{% include map.html id="XXXXXX" title="Coffee shop map" %}{% endraw %} +``` + +### Button include + +{% include button.html text="A button" link="https://david.darn.es" %} + +{% include button.html text="A button with icon" link="https://twitter.com/daviddarnes" icon="twitter" %} + +``` html +{% raw %}{% include button.html text="A button" link="https://david.darn.es" %} +{% include button.html text="A button with icon" link="https://twitter.com/daviddarnes" icon="twitter" %}{% endraw %} +``` + +### Icon include + +{% include icon.html id="twitter" title="twitter" %} [{% include icon.html id="linkedin" title="twitter" %}](https://www.linkedin.com/in/daviddarnes) + +``` html +{% raw %}{% include icon.html id="twitter" title="twitter" %} +[{% include icon.html id="linkedin" title="twitter" %}](https://www.linkedin.com/in/daviddarnes){% endraw %} +``` + +### Video include + +{% include video.html id="zrkcGL5H3MU" title="Siteleaf tutorial video" %} + +``` html +{% raw %}{% include video.html id="zrkcGL5H3MU" title="Siteleaf tutorial video" %}{% endraw %} +``` + + +### Image includes + +{% include figure.html image="https://picsum.photos/600/800?image=894" caption="Image with caption" width="300" height="800" %} + +{% include figure.html image="https://picsum.photos/600/800?image=894" caption="Right aligned image" position="right" width="300" height="800" %} + +{% include figure.html image="https://picsum.photos/600/800?image=894" caption="Left aligned image" position="left" width="300" height="800" %} + +{% include figure.html image="https://picsum.photos/1600/800?image=894" alt="Image with just alt text" %} + +``` html +{% raw %}{% include figure.html image="https://picsum.photos/600/800?image=894" caption="Image with caption" width="300" height="800" %} + +{% include figure.html image="https://picsum.photos/600/800?image=894" caption="Right aligned image" position="right" width="300" height="800" %} + +{% include figure.html image="https://picsum.photos/600/800?image=894" caption="Left aligned image" position="left" width="300" height="800" %} + +{% include figure.html image="https://picsum.photos/1600/800?image=894" alt="Image with just alt text" %}{% endraw %} +``` diff --git a/index.md b/index.md index 9ea9db4..e994c0f 100644 --- a/index.md +++ b/index.md @@ -1,31 +1,93 @@ --- -layout: default +title: About Alembic +feature_text: | + ## Alembic + A Jekyll boilerplate theme designed to be a starting point for any Jekyll website +feature_image: "https://picsum.photos/1300/400?image=989" +excerpt: "Alembic is a starting point for [Jekyll](https://jekyllrb.com/) projects. Rather than starting from scratch, this boilerplate is designed to get the ball rolling immediately. Install it, configure it, tweak it, push it." --- -This project is brought to you by **Luke Taylor**, **Raymond Song**, and **Muchan Li**, under the supervision of our mentor _**Albert Hsiao MD, PhD**_. +Alembic is a starting point for [Jekyll](https://jekyllrb.com/) projects. Rather than starting from scratch, this boilerplate is designed to get rolling immediately. Install it, configure it, tweak it, push it. -## About Us +{% include button.html text="Fork it" icon="github" link="https://github.com/daviddarnes/alembic" color="#0366d6" %} {% include button.html text="Buy me a coffee ☕️" link="https://buymeacoffee.com/daviddarnes#support" color="#f68140" %} {% include button.html text="Tweet it" icon="twitter" link="https://twitter.com/intent/tweet/?url=https://alembic.darn.es&text=Alembic%20-%20A%20Jekyll%20boilerplate%20theme&via=DavidDarnes" color="#0d94e7" %} {% include button.html text="Install Alembic ⚗️" link="https://github.com/daviddarnes/alembic#installation" %} ---- +## Features -## Problem Overview +- Available as a **theme gem** and **GitHub Pages** theme +- Clear and elegant design that can be used out of the box or as solid starting point +- Tested in all major browsers, including **IE and Edge** +- Built in **Service Worker** so it can work offline and on slow connections +- **Configurable colours** and typography in a single settings file +- Extensive set of **shortcodes** to include various elements; such as buttons, icons, figure images and more +- Solid **typographic framework** from [Sassline](https://sassline.com/) +- Configurable navigation via a single file +- Modular Jekyll components +- Post category support in the form of a single post index page grouped by category +- Built in live search using JavaScript +- **Contact form** built in using [Formspree](https://formspree.io/) +- Designed with **[Siteleaf](https://www.siteleaf.com/)** in mind +- Has 9 of the most popular networks as performant sharing buttons +- Has documentation ---- +## Examples -## Data +Here are a few examples of Alembic out in the wild being used in a variety of ways: ---- +- [bawejakunal.github.io](https://bawejakunal.github.io/) +- [case2111.github.io](https://case2111.github.io/) +- [karateca.org](https://www.karateca.org/) -## Method +## Installation ---- +### Quick setup -## Results and Findings +To give you a running start I've put together some starter kits that you can download, fork or even deploy immediately: ---- +- ⚗️🍨 Vanilla Jekyll starter kit + [![Deploy to Netlify](https://www.netlify.com/img/deploy/button.svg)](https://app.netlify.com/start/deploy?repository=https://github.com/daviddarnes/alembic-kit){:style="background: none"} +- ⚗️🌲 Forestry starter kit + [![Deploy to Forestry](https://assets.forestry.io/import-to-forestry.svg)](https://app.forestry.io/quick-start?repo=daviddarnes/alembic-forestry-kit&engine=jekyll){:style="background: none"} + [![Deploy to Netlify](https://www.netlify.com/img/deploy/button.svg)](https://app.netlify.com/start/deploy?repository=https://github.com/daviddarnes/alembic-forestry-kit){:style="background: none"} +- ⚗️💠 Netlify CMS starter kit + [![Deploy to Netlify](https://www.netlify.com/img/deploy/button.svg)](https://app.netlify.com/start/deploy?repository=https://github.com/daviddarnes/alembic-netlifycms-kit&stack=cms){:style="background: none"} -## Discussion and Future Steps +- ⚗️:octocat: GitHub Pages with remote theme kit + {% include button.html text="Download kit" link="https://github.com/daviddarnes/alembic-kit/archive/remote-theme.zip" color="#24292e" %} +- ⚗️🚀 Stackbit starter kit + [![Create with Stackbit](https://assets.stackbit.com/badge/create-with-stackbit.svg)](https://app.stackbit.com/create?theme=https://github.com/daviddarnes/alembic-stackbit-kit){:style="background: none"} ---- +### As a Jekyll theme + +1. Add `gem "alembic-jekyll-theme"` to your `Gemfile` to add the theme as a dependancy +2. Run the command `bundle install` in the root of project to install the theme and its dependancies +3. Add `theme: alembic-jekyll-theme` to your `_config.yml` file to set the site theme +4. Run `bundle exec jekyll serve` to build and serve your site +5. Done! Use the [configuration](#configuration) documentation and the example [`_config.yml`](https://github.com/daviddarnes/alembic/blob/master/_config.yml) file to set things like the navigation, contact form and social sharing buttons + +### As a GitHub Pages remote theme + +1. Add `gem "jekyll-remote-theme"` to your `Gemfile` to add the theme as a dependancy +2. Run the command `bundle install` in the root of project to install the jekyll remote theme gem as a dependancy +3. Add `jekyll-remote-theme` to the list of `plugins` in your `_config.yml` file +4. Add `remote_theme: daviddarnes/alembic@main` to your `_config.yml` file to set the site theme +5. Run `bundle exec jekyll serve` to build and serve your site +6. Done! Use the [configuration](#configuration) documentation and the example [`_config.yml`](https://github.com/daviddarnes/alembic/blob/master/_config.yml) file to set things like the navigation, contact form and social sharing buttons + +### As a Boilerplate / Fork + +_(deprecated, not recommended)_ + +1. [Fork the repo](https://github.com/daviddarnes/alembic#fork-destination-box) +2. Replace the `Gemfile` with one stating all the gems used in your project +3. Delete the following unnecessary files/folders: `.github`, `LICENSE`, `screenshot.png`, `CNAME` and `alembic-jekyll-theme.gemspec` +4. Run the command `bundle install` in the root of project to install the jekyll remote theme gem as a dependancy +5. Run `bundle exec jekyll serve` to build and serve your site +6. Done! Use the [configuration](#configuration) documentation and the example [`_config.yml`](https://github.com/daviddarnes/alembic/blob/master/_config.yml) file to set things like the navigation, contact form and social sharing buttons + +## Customising + +When using Alembic as a theme means you can take advantage of the file overriding method. This allows you to overwrite any file in this theme with your own custom file, by matching the file name and path. The most common example of this would be if you want to add your own styles or change the core style settings. + +To add your own styles copy the [`styles.scss`](https://github.com/daviddarnes/alembic/blob/master/assets/styles.scss) into your own project with the same file path (`assets/styles.scss`). From there you can add your own styles, you can even optionally ignore the theme styles by removing the `@import "alembic";` line. -## References +If you're looking to set your own colours and fonts you can overwrite them by matching the variable names from the [`_settings.scss`](https://github.com/daviddarnes/alembic/blob/master/_sass/_settings.scss) file in your own `styles.scss`, make sure to state them before the `@import "alembic";` line so they take effect. The settings are a mixture of custom variables and settings from [Sassline](https://medium.com/@jakegiltsoff/sassline-v2-0-e424b2881e7e) - follow the link to find out how to configure the typographic settings. diff --git a/jekyll-theme-tactile.gemspec b/jekyll-theme-tactile.gemspec deleted file mode 100644 index 71ea044..0000000 --- a/jekyll-theme-tactile.gemspec +++ /dev/null @@ -1,22 +0,0 @@ -# frozen_string_literal: true - -Gem::Specification.new do |s| - s.name = "jekyll-theme-tactile" - s.version = "0.2.0" - s.license = "CC0-1.0" - s.authors = ["Jason Long", "GitHub, Inc."] - s.email = ["opensource+jekyll-theme-tactile@github.com"] - s.homepage = "https://github.com/pages-themes/tactile" - s.summary = "Tactile is a Jekyll theme for GitHub Pages" - - s.files = `git ls-files -z`.split("\x0").select do |f| - f.match(%r{^((_includes|_layouts|_sass|assets)/|(LICENSE|README)((\.(txt|md|markdown)|$)))}i) - end - - s.platform = Gem::Platform::RUBY - s.add_runtime_dependency "jekyll", "> 3.5", "< 5.0" - s.add_runtime_dependency "jekyll-seo-tag", "~> 2.0" - s.add_development_dependency "html-proofer", "~> 3.0" - s.add_development_dependency "rubocop-github", "~> 0.16" - s.add_development_dependency "w3c_validators", "~> 1.3" -end diff --git a/offline.md b/offline.md new file mode 100644 index 0000000..544330f --- /dev/null +++ b/offline.md @@ -0,0 +1,9 @@ +--- +title: Looks like you're offline +indexing: false +sitemap: false +--- + +It appears that you've lost your network connection and this document doesn't exist on your device. + +Try either returning to the previous page, using the navigation to find your way back, or restore your network connection. diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000..ccb0b8e Binary files /dev/null and b/screenshot.png differ diff --git a/script/bootstrap b/script/bootstrap deleted file mode 100755 index 492e553..0000000 --- a/script/bootstrap +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -set -e - -gem install bundler -bundle install diff --git a/script/cibuild b/script/cibuild deleted file mode 100755 index 8f69b90..0000000 --- a/script/cibuild +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh - -set -e - -bundle exec jekyll build -bundle exec htmlproofer ./_site --check-html --check-sri -bundle exec rubocop -D --config .rubocop.yml -bundle exec script/validate-html -gem build jekyll-theme-tactile.gemspec diff --git a/script/release b/script/release deleted file mode 100755 index e7e5426..0000000 --- a/script/release +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/sh -# Tag and push a release. - -set -e - -# Make sure we're in the project root. - -cd $(dirname "$0")/.. - -# Make sure the darn thing works - -bundle update - -# Build a new gem archive. - -rm -rf jekyll-theme-tactile-*.gem -gem build -q jekyll-theme-tactile.gemspec - -# Make sure we're on the master branch. - -(git branch | grep -q 'master') || { - echo "Only release from the master branch." - exit 1 -} - -# Figure out what version we're releasing. - -tag=v`ls jekyll-theme-tactile-*.gem | sed 's/^jekyll-theme-tactile-\(.*\)\.gem$/\1/'` - -# Make sure we haven't released this version before. - -git fetch -t origin - -(git tag -l | grep -q "$tag") && { - echo "Whoops, there's already a '${tag}' tag." - exit 1 -} - -# Tag it and bag it. - -gem push jekyll-theme-tactile-*.gem && git tag "$tag" && - git push origin master && git push origin "$tag" diff --git a/script/validate-html b/script/validate-html deleted file mode 100755 index 0c784f1..0000000 --- a/script/validate-html +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: true - -require "w3c_validators" - -def validator(file) - extension = File.extname(file) - case extension - when ".html" - W3CValidators::NuValidator.new - when ".css" - W3CValidators::CSSValidator.new - end -end - -def validate(file) - puts "Checking #{file}..." - - path = File.expand_path "../_site/#{file}", __dir__ - results = validator(file).validate_file(path) - - return puts "Valid!" if results.errors.empty? - - results.errors.each { |err| puts err.to_s } - exit 1 -end - -validate "index.html" -validate File.join "assets", "css", "style.css" diff --git a/search.md b/search.md new file mode 100644 index 0000000..cf4d963 --- /dev/null +++ b/search.md @@ -0,0 +1,6 @@ +--- +title: Search +excerpt: "Search for a page or post you're looking for" +--- + +{% include site-search.html %} diff --git a/thumbnail.png b/thumbnail.png deleted file mode 100644 index 745e3d4..0000000 Binary files a/thumbnail.png and /dev/null differ