From caa10a822280b6c2d931b57d53ee6b9bf5495154 Mon Sep 17 00:00:00 2001 From: Toma Nistor Date: Sun, 15 Apr 2018 02:33:53 -0700 Subject: [PATCH 1/8] Added Basin as alternative AJAX contact form option --- layouts/partials/body-bottom.html | 6 ++---- layouts/partials/contact.html | 6 ++++-- layouts/partials/header.html | 8 ++++---- layouts/partials/scripts/contact.min.js | 2 +- static/scripts/contact.min.js | 2 +- static/scripts/src/contact.js | 6 +++--- 6 files changed, 15 insertions(+), 15 deletions(-) diff --git a/layouts/partials/body-bottom.html b/layouts/partials/body-bottom.html index a7beb34..103cf13 100644 --- a/layouts/partials/body-bottom.html +++ b/layouts/partials/body-bottom.html @@ -1,10 +1,8 @@ {{ if .IsHome }} - {{ if .Site.Params.ajaxFormspree }} - + {{ if or (.Site.Params.ajaxFormspree) (.Site.Params.ajaxBasin) }} + {{ end }} {{ else }} diff --git a/layouts/partials/contact.html b/layouts/partials/contact.html index 3b2a13b..2ca181e 100644 --- a/layouts/partials/contact.html +++ b/layouts/partials/contact.html @@ -1,4 +1,4 @@ -{{ if .Site.Params.ajaxFormspree }} +{{ if or (.Site.Params.ajaxFormspree) (.Site.Params.ajaxBasin) }}
@@ -8,14 +8,16 @@

Let's Chat

-
+
+ {{ if .Site.Params.ajaxFormspree }} + {{ end }}
diff --git a/layouts/partials/header.html b/layouts/partials/header.html index 7e39293..5e49431 100644 --- a/layouts/partials/header.html +++ b/layouts/partials/header.html @@ -11,13 +11,13 @@ {{ $url := replace .Permalink ( printf "%s" .Site.BaseURL) "" }} - {{ if .IsHome }} + {{- if .IsHome -}} {{ .Site.Title }} - {{ else if .Params.heading }} + {{- else if .Params.heading -}} {{ .Params.heading }} - {{ else }} + {{- else -}} {{ .Title }} | {{ .Site.Title }} - {{ end }} + {{- end -}} diff --git a/layouts/partials/scripts/contact.min.js b/layouts/partials/scripts/contact.min.js index 18c507c..69fdc70 100644 --- a/layouts/partials/scripts/contact.min.js +++ b/layouts/partials/scripts/contact.min.js @@ -1 +1 @@ -$("#form-contact").addEventListener("submit",function(e){e.preventDefault();var s=$("input[name=name]").value,t=$("input[name=email").value,i=$("input[name=_subject").value,a=$("textarea[name=message]").value,n=new XMLHttpRequest,l={name:s,_replyto:t,email:t,_subject:i,message:a};n.open("POST","https://formspree.io/{{ .Site.Params.email }}",!0),n.setRequestHeader("Content-Type","application/json; charset=UTF-8"),n.onreadystatechange=function(){function e(){t.style.visibility="hidden",t.classList.add("hide"),t.classList.remove("show"),s.style.visibility="visible",s.classList.add("show"),s.classList.remove("hide")}if(4==n.readyState&&200==n.status){$("#form-contact").reset();var s=$("#form-submit"),t=$("#form-thankyou");!function(){s.style.visibility="hidden",s.classList.add("hide"),s.classList.remove("show"),t.style.visibility="visible",t.classList.add("show"),t.classList.remove("hide"),setTimeout(e,6e3)}()}},n.send(JSON.stringify(l))}); +$("#form-contact").addEventListener("submit",function(e){e.preventDefault();var s=$("input[name=name]").value,t=$("input[name=email").value,a=$("input[name=_subject").value,i=$("textarea[name=message]").value,n=new XMLHttpRequest,l={name:s,_replyto:t,email:t,_subject:a,message:i};n.open("POST","{{ if .Site.Params.ajaxFormspree }}https://formspree.io/{{ .Site.Params.email }}{{ else if .Site.Params.ajaxBasin }}{{ .Site.Params.ajaxBasin }}.json{{ end }}",!0),n.setRequestHeader("Accept","application/json; charset=UTF-8"),n.onreadystatechange=function(){function e(){t.style.visibility="hidden",t.classList.add("hide"),t.classList.remove("show"),s.style.visibility="visible",s.classList.add("show"),s.classList.remove("hide")}if(4==n.readyState&&200==n.status){$("#form-contact").reset();var s=$("#form-submit"),t=$("#form-thankyou");!function(){s.style.visibility="hidden",s.classList.add("hide"),s.classList.remove("show"),t.style.visibility="visible",t.classList.add("show"),t.classList.remove("hide"),setTimeout(e,6e3)}()}},n.send(JSON.stringify(l))}); diff --git a/static/scripts/contact.min.js b/static/scripts/contact.min.js index ca17045..69fdc70 100644 --- a/static/scripts/contact.min.js +++ b/static/scripts/contact.min.js @@ -1 +1 @@ -$("#form-contact").addEventListener("submit",function(e){e.preventDefault();var t=$("input[name=name]").value,a=$("input[name=email").value,n=$("input[name=_subject").value,s=$("textarea[name=message]").value,i=new XMLHttpRequest,m={name:t,_replyto:a,email:a,_subject:n,message:s};i.open("POST","https://formspree.io/{{ .Site.Params.email }}",!0),i.setRequestHeader("Content-Type","application/json; charset=UTF-8"),i.send(JSON.stringify(m))}); +$("#form-contact").addEventListener("submit",function(e){e.preventDefault();var s=$("input[name=name]").value,t=$("input[name=email").value,a=$("input[name=_subject").value,i=$("textarea[name=message]").value,n=new XMLHttpRequest,l={name:s,_replyto:t,email:t,_subject:a,message:i};n.open("POST","{{ if .Site.Params.ajaxFormspree }}https://formspree.io/{{ .Site.Params.email }}{{ else if .Site.Params.ajaxBasin }}{{ .Site.Params.ajaxBasin }}.json{{ end }}",!0),n.setRequestHeader("Accept","application/json; charset=UTF-8"),n.onreadystatechange=function(){function e(){t.style.visibility="hidden",t.classList.add("hide"),t.classList.remove("show"),s.style.visibility="visible",s.classList.add("show"),s.classList.remove("hide")}if(4==n.readyState&&200==n.status){$("#form-contact").reset();var s=$("#form-submit"),t=$("#form-thankyou");!function(){s.style.visibility="hidden",s.classList.add("hide"),s.classList.remove("show"),t.style.visibility="visible",t.classList.add("show"),t.classList.remove("hide"),setTimeout(e,6e3)}()}},n.send(JSON.stringify(l))}); diff --git a/static/scripts/src/contact.js b/static/scripts/src/contact.js index adaaf61..6f395a4 100644 --- a/static/scripts/src/contact.js +++ b/static/scripts/src/contact.js @@ -17,9 +17,9 @@ $('#form-contact').addEventListener('submit', function(e) { message:message, } - // Send to Formspree - request.open('POST', 'https://formspree.io/{{ .Site.Params.email }}', true); - request.setRequestHeader('Content-Type', 'application/json; charset=UTF-8'); + // Send to Formspree or Basin + request.open('POST', '{{ if .Site.Params.ajaxFormspree }}https://formspree.io/{{ .Site.Params.email }}{{ else if .Site.Params.ajaxBasin }}{{ .Site.Params.ajaxBasin }}.json{{ end }}', true); + request.setRequestHeader('Accept', 'application/json; charset=UTF-8'); // Call function when the state changes request.onreadystatechange = function() { if (request.readyState == 4 && request.status == 200) { From 61c3bfbcf2e81b813c56d8dfeda7c76d922fe469 Mon Sep 17 00:00:00 2001 From: Toma Nistor Date: Sun, 15 Apr 2018 02:40:08 -0700 Subject: [PATCH 2/8] Added Basin example config to example site and README --- README.md | 64 ++++++++++++++++++++++++++--------------- exampleSite/config.toml | 4 ++- 2 files changed, 44 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index 1637dfd..9d5e9f3 100644 --- a/README.md +++ b/README.md @@ -1,29 +1,33 @@ ![Logo](https://github.com/tomanistor/osprey/blob/master/images/osprey-logo.png) # Osprey + Osprey is a simple, clean, and fast one-page [Hugo](https://gohugo.io/) portfolio accompanied by a blog. ## Features -* Minimalist, clean, and uncluttered theme -* Portfolio display gallery -* [Disqus](https://disqus.com) comments -* [Formspree](https://formspree.io) AJAX contact form -* Responsive Flexbox Grid -* [SASS](http://sass-lang.com/) styling -* Minimized/compressed CSS and JavaScript files with cachebusting hash setup -* Syntax highlighting with [Highlight.js](https://highlightjs.org/) -* SEO-friendly construction -* [Google Analytics](https://analytics.google.com) and [Google Tag Manager](https://tagmanager.google.com) integration -* [OpenGraph](http://ogp.me/) and [Twitter Cards](https://dev.twitter.com/cards/overview) integration -* Quick loading speeds -* Custom CSS + +- Minimalist, clean, and uncluttered theme +- Portfolio display gallery +- [Disqus](https://disqus.com) comments +- [Formspree](https://formspree.io) AJAX contact form +- Responsive Flexbox Grid +- [SASS](http://sass-lang.com/) styling +- Minimized/compressed CSS and JavaScript files with cachebusting hash setup +- Syntax highlighting with [Highlight.js](https://highlightjs.org/) +- SEO-friendly construction +- [Google Analytics](https://analytics.google.com) and [Google Tag Manager](https://tagmanager.google.com) integration +- [OpenGraph](http://ogp.me/) and [Twitter Cards](https://dev.twitter.com/cards/overview) integration +- Quick loading speeds +- Custom CSS ## Screenshot + ![Screenshot](https://github.com/tomanistor/osprey/blob/master/images/tn.png) ## Installation ### Option 1: Clone Repository + In the root of your Hugo site directory run: ```console @@ -32,6 +36,7 @@ $ git clone https://github.com/tomanistor/osprey.git ``` ### Option 2: Create Submodule + Create a submodule linked directly to the theme's GitHub repository in order to receive updates: ```console @@ -45,6 +50,7 @@ $ git submodule update --init --recursive --remote ``` ## Configuration + Osprey comes with several configuration options to aid in site customization. This is an example config.toml file: ```toml @@ -79,7 +85,9 @@ disableKinds = ["taxonomy", "taxonomyTerm"] # This theme does not currently use customCSS = false cacheBustCSS = false cacheBustJS = false - ajaxFormspree = true + # Choose either Formspree contact form or Basin contact form + ajaxFormspree = false + ajaxBasin = "https://usebasin.com/f/0eae7044d4c2" [[menu.main]] name = "About" @@ -100,9 +108,11 @@ disableKinds = ["taxonomy", "taxonomyTerm"] # This theme does not currently use ``` ## Using Osprey + The two main content types are blog posts and gallery images. ### About Section + To create an about section that renders on the home page, run: ```console @@ -110,6 +120,7 @@ $ hugo new about.md ``` ### Blog Posts + To create a new blog post, run: ```console @@ -117,6 +128,7 @@ $ hugo new blog/post-title.md ``` ### Gallery Images + To add a new image to your portfolio, run: ```console @@ -138,25 +150,28 @@ link2 = "https://github.com/tomanistor" ``` ### Contact Form + The email address specified in the config.toml file will be one receiving messages sent through the contact form. The contact form is operated by Formspree and requires that the form must be submitted once initially to confirm the email address being used. See instruction [here](https://formspree.io/). ### Contact Form Troubleshooting -If you have problems with the contact form (doing nothing on submit, seems Formspree ajax implementation works only for paid users), just create a copy of `osprey/layouts/partials/body-bottom.html` file inside `your-site/layouts/partials` and remove or comment lines 4 to 8. + +If you have problems with the contact form (doing nothing on submit, seems Formspree ajax implementation works only for paid users), just create a copy of `osprey/layouts/partials/body-bottom.html` file inside `your-site/layouts/partials` and remove or comment lines 4 to 8. Should look like this. -``` - -{{ if .IsHome }} - -{{ else }} - -{{ end }} -``` + + + {{ if .IsHome }} + + {{ else }} + + {{ end }} + That will override the original osprey body-bottom.html and remove the ajax script. Now you can receive messages through your contact form without any problem. PD: This will add an extra step to the contact form, on submitting the user need to fill a captcha before sending the message. ### Custom CSS + To implement custom CSS sitewide, change the config.toml parameter `customCSS` from `false` to `true` and then create a `css.html` file in your `layouts/partials/` folder like the example below: ```html @@ -171,10 +186,13 @@ To implement custom CSS sitewide, change the config.toml parameter `customCSS` f This will render inline CSS in the head of your site and without adding an extra HTTP request. ### Cache Busting + To implement cache busting of CSS and JS static assets with something like Gulp.js and [gulp-hash](https://www.npmjs.com/package/gulp-hash), change the config.toml parameters `cacheBustCSS` and `cacheBustJS` from `false` to `true` and follow [this setup guide](http://danbahrami.io/articles/building-a-production-website-with-hugo-and-gulp-js/#building-a-gulp-pipeline:c9938300a3bdba2018b469c2485ca2b6). ## Contributions + If you'd like to help with the development of this theme, I encourage you to submit a pull request or create an issue if you find a bug. All help is appreciated. ## License + This theme is released under the GNU 3.0 license. For more information read the [license](https://github.com/tomanistor/osprey/blob/master/LICENSE). diff --git a/exampleSite/config.toml b/exampleSite/config.toml index 8f77da0..a8cc694 100644 --- a/exampleSite/config.toml +++ b/exampleSite/config.toml @@ -29,7 +29,9 @@ disableKinds = ["taxonomy", "taxonomyTerm"] # This theme does not currently use customCSS = false cacheBustCSS = false cacheBustJS = false - ajaxFormspree = true + # Choose either Formspree contact form or Basin contact form + ajaxFormspree = false + ajaxBasin = "https://usebasin.com/f/0eae7044d4c2" [[menu.main]] name = "About" From c470efdd9623aae8ccf85dca17b30feaeb714a88 Mon Sep 17 00:00:00 2001 From: Toma Nistor Date: Sun, 15 Apr 2018 21:03:10 -0700 Subject: [PATCH 3/8] Conditional contact form request headers, added ajaxFormspreeGold param, updated contact form instructions in README --- README.md | 133 ++++++++++-------------- exampleSite/config.toml | 69 ++++++------ images/basin-ajax-setup.png | Bin 0 -> 85472 bytes layouts/partials/body-bottom.html | 2 +- layouts/partials/scripts/contact.min.js | 2 +- static/scripts/contact.min.js | 2 +- static/scripts/src/contact.js | 4 +- 7 files changed, 96 insertions(+), 116 deletions(-) create mode 100644 images/basin-ajax-setup.png diff --git a/README.md b/README.md index 9d5e9f3..5559606 100644 --- a/README.md +++ b/README.md @@ -1,33 +1,29 @@ ![Logo](https://github.com/tomanistor/osprey/blob/master/images/osprey-logo.png) # Osprey - Osprey is a simple, clean, and fast one-page [Hugo](https://gohugo.io/) portfolio accompanied by a blog. ## Features - -- Minimalist, clean, and uncluttered theme -- Portfolio display gallery -- [Disqus](https://disqus.com) comments -- [Formspree](https://formspree.io) AJAX contact form -- Responsive Flexbox Grid -- [SASS](http://sass-lang.com/) styling -- Minimized/compressed CSS and JavaScript files with cachebusting hash setup -- Syntax highlighting with [Highlight.js](https://highlightjs.org/) -- SEO-friendly construction -- [Google Analytics](https://analytics.google.com) and [Google Tag Manager](https://tagmanager.google.com) integration -- [OpenGraph](http://ogp.me/) and [Twitter Cards](https://dev.twitter.com/cards/overview) integration -- Quick loading speeds -- Custom CSS +* Minimalist, clean, and uncluttered theme +* Portfolio display gallery +* [Disqus](https://disqus.com) comments +* [Formspree](https://formspree.io) AJAX contact form (with Formspree Gold) +* [Basin](https://usebasin.com/) AJAX contact form (free) +* Responsive Flexbox Grid +* [SASS](http://sass-lang.com/) styling +* Minimized/compressed CSS and JavaScript files with cachebusting hash setup +* Syntax highlighting with [Highlight.js](https://highlightjs.org/) +* SEO-friendly construction +* [Google Analytics](https://analytics.google.com) and [Google Tag Manager](https://tagmanager.google.com) integration +* [OpenGraph](http://ogp.me/) and [Twitter Cards](https://dev.twitter.com/cards/overview) integration +* Quick loading speeds +* Custom CSS option ## Screenshot - ![Screenshot](https://github.com/tomanistor/osprey/blob/master/images/tn.png) ## Installation - ### Option 1: Clone Repository - In the root of your Hugo site directory run: ```console @@ -36,7 +32,6 @@ $ git clone https://github.com/tomanistor/osprey.git ``` ### Option 2: Create Submodule - Create a submodule linked directly to the theme's GitHub repository in order to receive updates: ```console @@ -50,7 +45,6 @@ $ git submodule update --init --recursive --remote ``` ## Configuration - Osprey comes with several configuration options to aid in site customization. This is an example config.toml file: ```toml @@ -66,53 +60,52 @@ disqusShortname = "tomanistor" disableKinds = ["taxonomy", "taxonomyTerm"] # This theme does not currently use "tag" and "category" taxonomies [Params] - tagline = "Osprey Example Site" - author = "Toma Nistor" - description = "Full-stack web developer and UI/UX enthusiast based in San Diego, CA." - logoBig = "/images/osprey-logo.png" - logoSmall = "/images/osprey-logo.png" - favicon = "favicon.ico" - opengraphImage = "/images/osprey.png" - twitter = "TomaNistor" - linkedin = "tomanistor" - github = "tomanistor" - facebook = "" - email = "" - googleTagManager = "" - highlightJS = true - copyright = true - credit = true - customCSS = false - cacheBustCSS = false - cacheBustJS = false - # Choose either Formspree contact form or Basin contact form - ajaxFormspree = false - ajaxBasin = "https://usebasin.com/f/0eae7044d4c2" + tagline = "Osprey Example Site" + author = "Toma Nistor" + description = "Full-stack web developer and UI/UX enthusiast based in San Diego, CA." + logoBig = "/images/osprey-logo.png" + logoSmall = "/images/osprey-logo.png" + favicon = "favicon.ico" + opengraphImage = "/images/osprey.png" + twitter = "TomaNistor" + linkedin = "tomanistor" + github = "tomanistor" + facebook = "" + email = "" + googleTagManager = "" + highlightJS = true + copyright = true + credit = true + customCSS = false + cacheBustCSS = false + cacheBustJS = false + # Choose either Formspree contact form or Basin contact form + ajaxFormspree = false + ajaxFormspreeGold = false + ajaxBasin = "https://usebasin.com/f/0eae7044d4c2" [[menu.main]] - name = "About" - url = "/#about" - weight = 1 + name = "About" + url = "/#about" + weight = 1 [[menu.main]] - name = "Work" - url = "/#work" - weight = 2 + name = "Work" + url = "/#work" + weight = 2 [[menu.main]] - name = "Blog" - url = "/#blog" - weight = 3 + name = "Blog" + url = "/#blog" + weight = 3 [[menu.main]] - name = "Contact" - url = "/#contact" - weight = 4 + name = "Contact" + url = "/#contact" + weight = 4 ``` ## Using Osprey - The two main content types are blog posts and gallery images. ### About Section - To create an about section that renders on the home page, run: ```console @@ -120,7 +113,6 @@ $ hugo new about.md ``` ### Blog Posts - To create a new blog post, run: ```console @@ -128,7 +120,6 @@ $ hugo new blog/post-title.md ``` ### Gallery Images - To add a new image to your portfolio, run: ```console @@ -150,28 +141,19 @@ link2 = "https://github.com/tomanistor" ``` ### Contact Form +Two contact forms services are offered as options: Formspree and Basin. -The email address specified in the config.toml file will be one receiving messages sent through the contact form. The contact form is operated by Formspree and requires that the form must be submitted once initially to confirm the email address being used. See instruction [here](https://formspree.io/). - -### Contact Form Troubleshooting - -If you have problems with the contact form (doing nothing on submit, seems Formspree ajax implementation works only for paid users), just create a copy of `osprey/layouts/partials/body-bottom.html` file inside `your-site/layouts/partials` and remove or comment lines 4 to 8. - -Should look like this. +#### Formspree +_Update 4/15/18 - [Formspree no longer offers newly set up AJAX contact forms for free. This is now a Formspree Gold feature.](https://github.com/formspree/formspree/pull/173)_ You can either use the non-AJAX version of Formspree (which redirects to a Captcha page on form submit) by setting the config.toml parameter `ajaxFormspreeGold` to `false`, sign up for Formspree Gold and set the parameter to `true`, or sign up for Basin and use their contact form service for free. - - {{ if .IsHome }} - - {{ else }} - - {{ end }} +The email address specified in the config.toml file will be the one receiving messages sent through the contact form. The contact form is operated by Formspree and requires that the form must be submitted once initially to confirm the email address being used. See instruction [here](https://formspree.io/). -That will override the original osprey body-bottom.html and remove the ajax script. Now you can receive messages through your contact form without any problem. +#### Basin +Basin is an alternative, free AJAX contact form service. To use Basin, [sign up for a free account](https://usebasin.com/users/sign_up) and create a form. Copy and paste your form's URL endpoint to the `ajaxBasin` config.toml parameter. To use this as an AJAX form, remove the `Redirect URL` and select `Submit this form via AJAX` on your Basin dashboard. -PD: This will add an extra step to the contact form, on submitting the user need to fill a captcha before sending the message. +![Basin AJAX setup](https://github.com/tomanistor/osprey/blob/master/images/basin-ajax-setup.png) ### Custom CSS - To implement custom CSS sitewide, change the config.toml parameter `customCSS` from `false` to `true` and then create a `css.html` file in your `layouts/partials/` folder like the example below: ```html @@ -186,13 +168,10 @@ To implement custom CSS sitewide, change the config.toml parameter `customCSS` f This will render inline CSS in the head of your site and without adding an extra HTTP request. ### Cache Busting - To implement cache busting of CSS and JS static assets with something like Gulp.js and [gulp-hash](https://www.npmjs.com/package/gulp-hash), change the config.toml parameters `cacheBustCSS` and `cacheBustJS` from `false` to `true` and follow [this setup guide](http://danbahrami.io/articles/building-a-production-website-with-hugo-and-gulp-js/#building-a-gulp-pipeline:c9938300a3bdba2018b469c2485ca2b6). ## Contributions - If you'd like to help with the development of this theme, I encourage you to submit a pull request or create an issue if you find a bug. All help is appreciated. ## License - This theme is released under the GNU 3.0 license. For more information read the [license](https://github.com/tomanistor/osprey/blob/master/LICENSE). diff --git a/exampleSite/config.toml b/exampleSite/config.toml index a8cc694..a9e7b16 100644 --- a/exampleSite/config.toml +++ b/exampleSite/config.toml @@ -10,42 +10,43 @@ disqusShortname = "tomanistor" disableKinds = ["taxonomy", "taxonomyTerm"] # This theme does not currently use "tag" and "category" taxonomies [Params] - tagline = "Osprey Example Site" - author = "Toma Nistor" - description = "Full-stack web developer and UI/UX enthusiast based in San Diego, CA." - logoBig = "/images/osprey-logo.png" - logoSmall = "/images/osprey-logo.png" - favicon = "favicon.ico" - opengraphImage = "/images/osprey.png" - twitter = "TomaNistor" - linkedin = "tomanistor" - github = "tomanistor" - facebook = "" - email = "" - googleTagManger = "" - highlightJS = true - copyright = true - credit = true - customCSS = false - cacheBustCSS = false - cacheBustJS = false - # Choose either Formspree contact form or Basin contact form - ajaxFormspree = false - ajaxBasin = "https://usebasin.com/f/0eae7044d4c2" + tagline = "Osprey Example Site" + author = "Toma Nistor" + description = "Full-stack web developer and UI/UX enthusiast based in San Diego, CA." + logoBig = "/images/osprey-logo.png" + logoSmall = "/images/osprey-logo.png" + favicon = "favicon.ico" + opengraphImage = "/images/osprey.png" + twitter = "TomaNistor" + linkedin = "tomanistor" + github = "tomanistor" + facebook = "" + email = "" + googleTagManger = "" + highlightJS = true + copyright = true + credit = true + customCSS = false + cacheBustCSS = false + cacheBustJS = false + # Choose either Formspree contact form or Basin contact form + ajaxFormspree = false + ajaxFormspreeGold = false + ajaxBasin = "https://usebasin.com/f/0eae7044d4c2" [[menu.main]] - name = "About" - url = "/#about" - weight = 1 + name = "About" + url = "/#about" + weight = 1 [[menu.main]] - name = "Work" - url = "/#work" - weight = 2 + name = "Work" + url = "/#work" + weight = 2 [[menu.main]] - name = "Blog" - url = "/#blog" - weight = 3 + name = "Blog" + url = "/#blog" + weight = 3 [[menu.main]] - name = "Contact" - url = "/#contact" - weight = 4 + name = "Contact" + url = "/#contact" + weight = 4 diff --git a/images/basin-ajax-setup.png b/images/basin-ajax-setup.png new file mode 100644 index 0000000000000000000000000000000000000000..337e34a2954d147fce390060869a22c463eed19f GIT binary patch literal 85472 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 literal 0 HcmV?d00001 diff --git a/layouts/partials/body-bottom.html b/layouts/partials/body-bottom.html index 103cf13..ff00c80 100644 --- a/layouts/partials/body-bottom.html +++ b/layouts/partials/body-bottom.html @@ -1,7 +1,7 @@ {{ if .IsHome }} - {{ if or (.Site.Params.ajaxFormspree) (.Site.Params.ajaxBasin) }} + {{ if or (and (.Site.Params.ajaxFormspree) (.Site.Params.ajaxFormspreeGold)) (.Site.Params.ajaxBasin) }} {{ end }} {{ else }} diff --git a/layouts/partials/scripts/contact.min.js b/layouts/partials/scripts/contact.min.js index 69fdc70..27279ab 100644 --- a/layouts/partials/scripts/contact.min.js +++ b/layouts/partials/scripts/contact.min.js @@ -1 +1 @@ -$("#form-contact").addEventListener("submit",function(e){e.preventDefault();var s=$("input[name=name]").value,t=$("input[name=email").value,a=$("input[name=_subject").value,i=$("textarea[name=message]").value,n=new XMLHttpRequest,l={name:s,_replyto:t,email:t,_subject:a,message:i};n.open("POST","{{ if .Site.Params.ajaxFormspree }}https://formspree.io/{{ .Site.Params.email }}{{ else if .Site.Params.ajaxBasin }}{{ .Site.Params.ajaxBasin }}.json{{ end }}",!0),n.setRequestHeader("Accept","application/json; charset=UTF-8"),n.onreadystatechange=function(){function e(){t.style.visibility="hidden",t.classList.add("hide"),t.classList.remove("show"),s.style.visibility="visible",s.classList.add("show"),s.classList.remove("hide")}if(4==n.readyState&&200==n.status){$("#form-contact").reset();var s=$("#form-submit"),t=$("#form-thankyou");!function(){s.style.visibility="hidden",s.classList.add("hide"),s.classList.remove("show"),t.style.visibility="visible",t.classList.add("show"),t.classList.remove("hide"),setTimeout(e,6e3)}()}},n.send(JSON.stringify(l))}); +$("#form-contact").addEventListener("submit",function(e){e.preventDefault();var s=$("input[name=name]").value,a=$("input[name=email").value,i=$("input[name=_subject").value,t=$("textarea[name=message]").value,n=new XMLHttpRequest,r={name:s,_replyto:a,email:a,_subject:i,message:t};n.open("POST","{{ if .Site.Params.ajaxFormspree }}https://formspree.io/{{ .Site.Params.email }}{{ else if .Site.Params.ajaxBasin }}{{ .Site.Params.ajaxBasin }}.json{{ end }}",!0),n.setRequestHeader("{{ if .Site.Params.ajaxFormspree }}Content-Type{{ else if .Site.Params.ajaxBasin }}Accept{{ end }}","application/json; charset=UTF-8"),n.onreadystatechange=function(){function e(){a.style.visibility="hidden",a.classList.add("hide"),a.classList.remove("show"),s.style.visibility="visible",s.classList.add("show"),s.classList.remove("hide")}if(4==n.readyState&&200==n.status){$("#form-contact").reset();var s=$("#form-submit"),a=$("#form-thankyou");!function(){s.style.visibility="hidden",s.classList.add("hide"),s.classList.remove("show"),a.style.visibility="visible",a.classList.add("show"),a.classList.remove("hide"),setTimeout(e,6e3)}()}},n.send(JSON.stringify(r))}); diff --git a/static/scripts/contact.min.js b/static/scripts/contact.min.js index 69fdc70..27279ab 100644 --- a/static/scripts/contact.min.js +++ b/static/scripts/contact.min.js @@ -1 +1 @@ -$("#form-contact").addEventListener("submit",function(e){e.preventDefault();var s=$("input[name=name]").value,t=$("input[name=email").value,a=$("input[name=_subject").value,i=$("textarea[name=message]").value,n=new XMLHttpRequest,l={name:s,_replyto:t,email:t,_subject:a,message:i};n.open("POST","{{ if .Site.Params.ajaxFormspree }}https://formspree.io/{{ .Site.Params.email }}{{ else if .Site.Params.ajaxBasin }}{{ .Site.Params.ajaxBasin }}.json{{ end }}",!0),n.setRequestHeader("Accept","application/json; charset=UTF-8"),n.onreadystatechange=function(){function e(){t.style.visibility="hidden",t.classList.add("hide"),t.classList.remove("show"),s.style.visibility="visible",s.classList.add("show"),s.classList.remove("hide")}if(4==n.readyState&&200==n.status){$("#form-contact").reset();var s=$("#form-submit"),t=$("#form-thankyou");!function(){s.style.visibility="hidden",s.classList.add("hide"),s.classList.remove("show"),t.style.visibility="visible",t.classList.add("show"),t.classList.remove("hide"),setTimeout(e,6e3)}()}},n.send(JSON.stringify(l))}); +$("#form-contact").addEventListener("submit",function(e){e.preventDefault();var s=$("input[name=name]").value,a=$("input[name=email").value,i=$("input[name=_subject").value,t=$("textarea[name=message]").value,n=new XMLHttpRequest,r={name:s,_replyto:a,email:a,_subject:i,message:t};n.open("POST","{{ if .Site.Params.ajaxFormspree }}https://formspree.io/{{ .Site.Params.email }}{{ else if .Site.Params.ajaxBasin }}{{ .Site.Params.ajaxBasin }}.json{{ end }}",!0),n.setRequestHeader("{{ if .Site.Params.ajaxFormspree }}Content-Type{{ else if .Site.Params.ajaxBasin }}Accept{{ end }}","application/json; charset=UTF-8"),n.onreadystatechange=function(){function e(){a.style.visibility="hidden",a.classList.add("hide"),a.classList.remove("show"),s.style.visibility="visible",s.classList.add("show"),s.classList.remove("hide")}if(4==n.readyState&&200==n.status){$("#form-contact").reset();var s=$("#form-submit"),a=$("#form-thankyou");!function(){s.style.visibility="hidden",s.classList.add("hide"),s.classList.remove("show"),a.style.visibility="visible",a.classList.add("show"),a.classList.remove("hide"),setTimeout(e,6e3)}()}},n.send(JSON.stringify(r))}); diff --git a/static/scripts/src/contact.js b/static/scripts/src/contact.js index 6f395a4..3e17366 100644 --- a/static/scripts/src/contact.js +++ b/static/scripts/src/contact.js @@ -15,11 +15,11 @@ $('#form-contact').addEventListener('submit', function(e) { email:email, _subject:subject, message:message, - } + }; // Send to Formspree or Basin request.open('POST', '{{ if .Site.Params.ajaxFormspree }}https://formspree.io/{{ .Site.Params.email }}{{ else if .Site.Params.ajaxBasin }}{{ .Site.Params.ajaxBasin }}.json{{ end }}', true); - request.setRequestHeader('Accept', 'application/json; charset=UTF-8'); + request.setRequestHeader('{{ if .Site.Params.ajaxFormspree }}Content-Type{{ else if .Site.Params.ajaxBasin }}Accept{{ end }}', 'application/json; charset=UTF-8'); // Call function when the state changes request.onreadystatechange = function() { if (request.readyState == 4 && request.status == 200) { From 1f1452077da515cb349710539753f505dab3e968 Mon Sep 17 00:00:00 2001 From: Toma Nistor Date: Wed, 2 May 2018 22:09:18 -0700 Subject: [PATCH 4/8] Highlightjs custom options --- README.md | 25 ++++++++++++++++++------- exampleSite/config.toml | 19 +++++++++++++++---- layouts/partials/body-bottom.html | 10 +++++++++- layouts/partials/header.html | 6 +++++- static/scripts/main.min.js | 2 +- static/scripts/src/index.js | 1 - static/scripts/src/main.js | 3 --- 7 files changed, 48 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 5559606..ccd3c4a 100644 --- a/README.md +++ b/README.md @@ -67,18 +67,29 @@ disableKinds = ["taxonomy", "taxonomyTerm"] # This theme does not currently use logoSmall = "/images/osprey-logo.png" favicon = "favicon.ico" opengraphImage = "/images/osprey.png" + email = "" + googleTagManager = "" + customCSS = false + + # Social media links in footer twitter = "TomaNistor" linkedin = "tomanistor" github = "tomanistor" facebook = "" - email = "" - googleTagManager = "" + + # Copyright and theme author credit in footer + copyright = false + credit = false + + # Cache busting of static resources (additional set up required) + cacheBustCSS = true + cacheBustJS = true + + # Code highlighting with highlight.js highlightJS = true - copyright = true - credit = true - customCSS = false - cacheBustCSS = false - cacheBustJS = false + highlightJSStyle = "" # For custom highlight.js styles, add your /path/to/styles/default.css + highlightJSScript = "" # For custom highlight.js languages config, add your /path/to/highlight.pack.js + # Choose either Formspree contact form or Basin contact form ajaxFormspree = false ajaxFormspreeGold = false diff --git a/exampleSite/config.toml b/exampleSite/config.toml index a9e7b16..8f75bda 100644 --- a/exampleSite/config.toml +++ b/exampleSite/config.toml @@ -17,18 +17,29 @@ disableKinds = ["taxonomy", "taxonomyTerm"] # This theme does not currently use logoSmall = "/images/osprey-logo.png" favicon = "favicon.ico" opengraphImage = "/images/osprey.png" + email = "" + googleTagManger = "" + customCSS = false + + # Social media links in footer twitter = "TomaNistor" linkedin = "tomanistor" github = "tomanistor" facebook = "" - email = "" - googleTagManger = "" - highlightJS = true + + # Copyright and theme author credit in footer copyright = true credit = true - customCSS = false + + # Cache busting of static resources (additional set up required) cacheBustCSS = false cacheBustJS = false + + # Code highlighting with highlight.js + highlightJS = true + highlightJSStyle = "" # For custom highlight.js styles, add your /path/to/styles/default.css + highlightJSScript = "" # For custom highlight.js languages config, add your /path/to/highlight.pack.js + # Choose either Formspree contact form or Basin contact form ajaxFormspree = false ajaxFormspreeGold = false diff --git a/layouts/partials/body-bottom.html b/layouts/partials/body-bottom.html index ff00c80..6e73f44 100644 --- a/layouts/partials/body-bottom.html +++ b/layouts/partials/body-bottom.html @@ -1,4 +1,12 @@ - +{{ if .Site.Params.highlightJS }} + {{ if .Site.Params.highlightJSScript }} + + {{ else }} + + {{ end }} + +{{ end }} + {{ if .IsHome }} {{ if or (and (.Site.Params.ajaxFormspree) (.Site.Params.ajaxFormspreeGold)) (.Site.Params.ajaxBasin) }} diff --git a/layouts/partials/header.html b/layouts/partials/header.html index 5e49431..b73576a 100644 --- a/layouts/partials/header.html +++ b/layouts/partials/header.html @@ -83,7 +83,11 @@ {{ end }} {{ if .Site.Params.highlightJS }} - + {{ if }} + + {{ else }} + + {{ end }} {{ end }} {{ if .Site.GoogleAnalytics }} diff --git a/static/scripts/main.min.js b/static/scripts/main.min.js index 79e357f..4ee9d7b 100644 --- a/static/scripts/main.min.js +++ b/static/scripts/main.min.js @@ -1 +1 @@ -var $=document.querySelector.bind(document),$$=document.querySelectorAll.bind(document),toggle=function(i){if("visible"===window.getComputedStyle(i).visibility)return i.style.visibility="hidden",i.classList.add("hide"),void i.classList.remove("show");i.style.visibility="visible",i.classList.add("show"),i.classList.remove("hide")};!function(){$("nav").classList.add("nav-fixed"),$$("nav > .logo, nav > .nav-toggle").forEach(function(i){i.style.visibility="visible",i.classList.add("show"),i.classList.remove("hide")}),$(".nav-icon").addEventListener("click",function(){$$(".nav-full, main").forEach(function(i){i.classList.toggle("active")}),this.querySelector("img").classList.toggle("img")}),$$(".nav-full a").forEach(function(i){i.addEventListener("click",function(){$$(".nav-full, main").forEach(function(i){i.classList.toggle("active")}),this.querySelector("nav-icon").classList.toggle("nav-icon")})}),$("body").addEventListener("click",function(){$(".nav-full").classList.contains("active")?$("html").style.overflowY="hidden":$("html").style.overflowY="scroll"}),hljs.initHighlightingOnLoad()}(); +var $=document.querySelector.bind(document),$$=document.querySelectorAll.bind(document),toggle=function(i){if("visible"===window.getComputedStyle(i).visibility)return i.style.visibility="hidden",i.classList.add("hide"),void i.classList.remove("show");i.style.visibility="visible",i.classList.add("show"),i.classList.remove("hide")};!function(){$("nav").classList.add("nav-fixed"),$$("nav > .logo, nav > .nav-toggle").forEach(function(i){i.style.visibility="visible",i.classList.add("show"),i.classList.remove("hide")}),$(".nav-icon").addEventListener("click",function(){$$(".nav-full, main").forEach(function(i){i.classList.toggle("active")}),this.querySelector("img").classList.toggle("img")}),$$(".nav-full a").forEach(function(i){i.addEventListener("click",function(){$$(".nav-full, main").forEach(function(i){i.classList.toggle("active")}),this.querySelector("nav-icon").classList.toggle("nav-icon")})}),$("body").addEventListener("click",function(){$(".nav-full").classList.contains("active")?$("html").style.overflowY="hidden":$("html").style.overflowY="scroll"})}(); diff --git a/static/scripts/src/index.js b/static/scripts/src/index.js index f818e60..e7b49ba 100644 --- a/static/scripts/src/index.js +++ b/static/scripts/src/index.js @@ -69,7 +69,6 @@ var toggle = function(el) { $('html').style.overflowY = 'scroll'; } }); - }()); // Mobile browsers viewport height bug fix diff --git a/static/scripts/src/main.js b/static/scripts/src/main.js index b4dec9b..c145ea9 100644 --- a/static/scripts/src/main.js +++ b/static/scripts/src/main.js @@ -51,7 +51,4 @@ var toggle = function(el) { $('html').style.overflowY = 'scroll'; } }); - - // Highlight.js initialization - hljs.initHighlightingOnLoad(); }()); From 0186d105ea228f10ed865bc4ab956a2eb237bfa2 Mon Sep 17 00:00:00 2001 From: Toma Nistor Date: Wed, 2 May 2018 22:25:34 -0700 Subject: [PATCH 5/8] Fixed highlightjs condition in header --- layouts/partials/header.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/layouts/partials/header.html b/layouts/partials/header.html index b73576a..1c3cb06 100644 --- a/layouts/partials/header.html +++ b/layouts/partials/header.html @@ -12,11 +12,11 @@ {{ $url := replace .Permalink ( printf "%s" .Site.BaseURL) "" }} {{- if .IsHome -}} - {{ .Site.Title }} + {{ .Site.Title }} {{- else if .Params.heading -}} - {{ .Params.heading }} + {{ .Params.heading }} {{- else -}} - {{ .Title }} | {{ .Site.Title }} + {{ .Title }} | {{ .Site.Title }} {{- end -}} @@ -83,7 +83,7 @@ {{ end }} {{ if .Site.Params.highlightJS }} - {{ if }} + {{ if .Site.Params.highlightJSStyle }} {{ else }} From b69cc9ba4e36ca00157d3c351d3f48207461ce98 Mon Sep 17 00:00:00 2001 From: Toma Nistor Date: Sat, 17 Nov 2018 21:44:21 -0800 Subject: [PATCH 6/8] Fixed #45 and linted JS with ESLint --- layouts/partials/scripts/contact.min.js | 2 +- static/scripts/contact.min.js | 2 +- static/scripts/index.min.js | 2 +- static/scripts/main.min.js | 2 +- static/scripts/src/contact.js | 122 ++++++++++++------------ static/scripts/src/index.js | 119 +++++++++++------------ static/scripts/src/main.js | 66 ++++++------- static/styles/main.css | 2 +- 8 files changed, 161 insertions(+), 156 deletions(-) diff --git a/layouts/partials/scripts/contact.min.js b/layouts/partials/scripts/contact.min.js index 27279ab..32e1dd2 100644 --- a/layouts/partials/scripts/contact.min.js +++ b/layouts/partials/scripts/contact.min.js @@ -1 +1 @@ -$("#form-contact").addEventListener("submit",function(e){e.preventDefault();var s=$("input[name=name]").value,a=$("input[name=email").value,i=$("input[name=_subject").value,t=$("textarea[name=message]").value,n=new XMLHttpRequest,r={name:s,_replyto:a,email:a,_subject:i,message:t};n.open("POST","{{ if .Site.Params.ajaxFormspree }}https://formspree.io/{{ .Site.Params.email }}{{ else if .Site.Params.ajaxBasin }}{{ .Site.Params.ajaxBasin }}.json{{ end }}",!0),n.setRequestHeader("{{ if .Site.Params.ajaxFormspree }}Content-Type{{ else if .Site.Params.ajaxBasin }}Accept{{ end }}","application/json; charset=UTF-8"),n.onreadystatechange=function(){function e(){a.style.visibility="hidden",a.classList.add("hide"),a.classList.remove("show"),s.style.visibility="visible",s.classList.add("show"),s.classList.remove("hide")}if(4==n.readyState&&200==n.status){$("#form-contact").reset();var s=$("#form-submit"),a=$("#form-thankyou");!function(){s.style.visibility="hidden",s.classList.add("hide"),s.classList.remove("show"),a.style.visibility="visible",a.classList.add("show"),a.classList.remove("hide"),setTimeout(e,6e3)}()}},n.send(JSON.stringify(r))}); +!function(){var e=document.querySelector.bind(document);document.querySelectorAll.bind(document);e("#form-contact").addEventListener("submit",function(s){s.preventDefault();var t=e("input[name=name]").value,a=e("input[name=email").value,i=e("input[name=_subject").value,n=e("textarea[name=message]").value,o=new XMLHttpRequest,r={name:t,_replyto:a,email:a,_subject:i,message:n};o.open("POST","{{ if .Site.Params.ajaxFormspree }}https://formspree.io/{{ .Site.Params.email }}{{ else if .Site.Params.ajaxBasin }}{{ .Site.Params.ajaxBasin }}.json{{ end }}",!0),o.setRequestHeader("{{ if .Site.Params.ajaxFormspree }}Content-Type{{ else if .Site.Params.ajaxBasin }}Accept{{ end }}","application/json; charset=UTF-8"),o.onreadystatechange=function(){function s(){a.style.visibility="hidden",a.classList.add("hide"),a.classList.remove("show"),t.style.visibility="visible",t.classList.add("show"),t.classList.remove("hide")}if(4===o.readyState&&200===o.status){e("#form-contact").reset();var t=e("#form-submit"),a=e("#form-thankyou");!function(){t.style.visibility="hidden",t.classList.add("hide"),t.classList.remove("show"),a.style.visibility="visible",a.classList.add("show"),a.classList.remove("hide"),setTimeout(s,6e3)}()}},o.send(JSON.stringify(r))})}(); diff --git a/static/scripts/contact.min.js b/static/scripts/contact.min.js index 27279ab..d92b2df 100644 --- a/static/scripts/contact.min.js +++ b/static/scripts/contact.min.js @@ -1 +1 @@ -$("#form-contact").addEventListener("submit",function(e){e.preventDefault();var s=$("input[name=name]").value,a=$("input[name=email").value,i=$("input[name=_subject").value,t=$("textarea[name=message]").value,n=new XMLHttpRequest,r={name:s,_replyto:a,email:a,_subject:i,message:t};n.open("POST","{{ if .Site.Params.ajaxFormspree }}https://formspree.io/{{ .Site.Params.email }}{{ else if .Site.Params.ajaxBasin }}{{ .Site.Params.ajaxBasin }}.json{{ end }}",!0),n.setRequestHeader("{{ if .Site.Params.ajaxFormspree }}Content-Type{{ else if .Site.Params.ajaxBasin }}Accept{{ end }}","application/json; charset=UTF-8"),n.onreadystatechange=function(){function e(){a.style.visibility="hidden",a.classList.add("hide"),a.classList.remove("show"),s.style.visibility="visible",s.classList.add("show"),s.classList.remove("hide")}if(4==n.readyState&&200==n.status){$("#form-contact").reset();var s=$("#form-submit"),a=$("#form-thankyou");!function(){s.style.visibility="hidden",s.classList.add("hide"),s.classList.remove("show"),a.style.visibility="visible",a.classList.add("show"),a.classList.remove("hide"),setTimeout(e,6e3)}()}},n.send(JSON.stringify(r))}); +!function(){var e=document.querySelector.bind(document);document.querySelectorAll.bind(document);e("#form-contact").addEventListener("submit",function(s){s.preventDefault();var t=e("input[name=name]").value,a=e("input[name=email").value,i=e("input[name=_subject").value,n=e("textarea[name=message]").value,o=new XMLHttpRequest,r={name:t,_replyto:a,email:a,_subject:i,message:n};o.open("POST","{{ if .Site.Params.ajaxFormspree }}https://formspree.io/{{ .Site.Params.email }}{{ else if .Site.Params.ajaxBasin }}{{ .Site.Params.ajaxBasin }}.json{{ end }}",!0),o.setRequestHeader("{{ if .Site.Params.ajaxFormspree }}Content-Type{{ else if .Site.Params.ajaxBasin }}Accept{{ end }}","application/json; charset=UTF-8"),o.onreadystatechange=function(){function s(){a.style.visibility="hidden",a.classList.add("hide"),a.classList.remove("show"),t.style.visibility="visible",t.classList.add("show"),t.classList.remove("hide")}if(4===o.readyState&&200===o.status){e("#form-contact").reset();var t=e("#form-submit"),a=e("#form-thankyou");!function(){t.style.visibility="hidden",t.classList.add("hide"),t.classList.remove("show"),a.style.visibility="visible",a.classList.add("show"),a.classList.remove("hide"),setTimeout(s,6e3)}()}},o.send(JSON.stringify(r))})}(); \ No newline at end of file diff --git a/static/scripts/index.min.js b/static/scripts/index.min.js index c44dc94..8719338 100644 --- a/static/scripts/index.min.js +++ b/static/scripts/index.min.js @@ -1 +1 @@ -function fullMobileViewport(){function i(){e.style.height=n+"px"}var e=this,n=window.innerHeight;$(window).resize(function(){Math.abs(n-window.innerHeight)>100&&(n=window.innerHeight,i())}),i()}var $=document.querySelector.bind(document),$$=document.querySelectorAll.bind(document),toggle=function(i){if("visible"===window.getComputedStyle(i).visibility)return i.style.visibility="hidden",i.classList.add("hide"),void i.classList.remove("show");i.style.visibility="visible",i.classList.add("show"),i.classList.remove("hide")};!function(){window.onscroll=function(){(window.pageYOffset||document.documentElement.scrollTop)>(window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight)-$("nav").clientHeight?($("nav").classList.add("nav-fixed"),$$("nav > .logo, nav > .nav-toggle").forEach(function(i){i.style.visibility="visible",i.classList.add("show"),i.classList.remove("hide")})):($("nav").classList.remove("nav-fixed"),$$("nav > .logo, nav > .nav-toggle").forEach(function(i){i.style.visibility="hidden",i.classList.add("hide"),i.classList.remove("show")}))},$(".nav-icon").addEventListener("click",function(){$$(".nav-full, main").forEach(function(i){i.classList.toggle("active")}),this.querySelector("img").classList.toggle("img")}),$$(".nav-full a").forEach(function(i){i.addEventListener("click",function(){$$(".nav-full, main").forEach(function(i){i.classList.toggle("active")}),this.querySelector("nav-icon").classList.toggle("nav-icon")})}),$("body").addEventListener("click",function(){$(".nav-full").classList.contains("active")?$("html").style.overflowY="hidden":$("html").style.overflowY="scroll"})}(),$$("header").forEach(function(){}); +!function(){var n=document.querySelector.bind(document),e=document.querySelectorAll.bind(document);window.onscroll=function(){(window.pageYOffset||document.documentElement.scrollTop)>(window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight)-n("nav").clientHeight?(n("nav").classList.add("nav-fixed"),e("nav > .logo, nav > .nav-toggle").forEach(function(n){n.style.visibility="visible",n.classList.add("show"),n.classList.remove("hide")})):(n("nav").classList.remove("nav-fixed"),e("nav > .logo, nav > .nav-toggle").forEach(function(n){n.style.visibility="hidden",n.classList.add("hide"),n.classList.remove("show")}))},n(".nav-icon").addEventListener("click",function(){e(".nav-full, main").forEach(function(n){n.classList.toggle("active")}),this.querySelector("img").classList.toggle("img")}),e(".nav-full a").forEach(function(n){n.addEventListener("click",function(){e(".nav-full, main").forEach(function(n){n.classList.toggle("active")}),this.querySelector("nav-icon").classList.toggle("nav-icon")})}),n("body").addEventListener("click",function(){n(".nav-full").classList.contains("active")?n("html").style.overflowY="hidden":n("html").style.overflowY="scroll"}),e("header").forEach(function(){})}(); \ No newline at end of file diff --git a/static/scripts/main.min.js b/static/scripts/main.min.js index 4ee9d7b..8289e89 100644 --- a/static/scripts/main.min.js +++ b/static/scripts/main.min.js @@ -1 +1 @@ -var $=document.querySelector.bind(document),$$=document.querySelectorAll.bind(document),toggle=function(i){if("visible"===window.getComputedStyle(i).visibility)return i.style.visibility="hidden",i.classList.add("hide"),void i.classList.remove("show");i.style.visibility="visible",i.classList.add("show"),i.classList.remove("hide")};!function(){$("nav").classList.add("nav-fixed"),$$("nav > .logo, nav > .nav-toggle").forEach(function(i){i.style.visibility="visible",i.classList.add("show"),i.classList.remove("hide")}),$(".nav-icon").addEventListener("click",function(){$$(".nav-full, main").forEach(function(i){i.classList.toggle("active")}),this.querySelector("img").classList.toggle("img")}),$$(".nav-full a").forEach(function(i){i.addEventListener("click",function(){$$(".nav-full, main").forEach(function(i){i.classList.toggle("active")}),this.querySelector("nav-icon").classList.toggle("nav-icon")})}),$("body").addEventListener("click",function(){$(".nav-full").classList.contains("active")?$("html").style.overflowY="hidden":$("html").style.overflowY="scroll"})}(); +!function(){var n=document.querySelector.bind(document),t=document.querySelectorAll.bind(document);n("nav").classList.add("nav-fixed"),t("nav > .logo, nav > .nav-toggle").forEach(function(n){n.style.visibility="visible",n.classList.add("show"),n.classList.remove("hide")}),n(".nav-icon").addEventListener("click",function(){t(".nav-full, main").forEach(function(n){n.classList.toggle("active")}),this.querySelector("img").classList.toggle("img")}),t(".nav-full a").forEach(function(n){n.addEventListener("click",function(){t(".nav-full, main").forEach(function(n){n.classList.toggle("active")}),this.querySelector("nav-icon").classList.toggle("nav-icon")})}),n("body").addEventListener("click",function(){n(".nav-full").classList.contains("active")?n("html").style.overflowY="hidden":n("html").style.overflowY="scroll"})}(); \ No newline at end of file diff --git a/static/scripts/src/contact.js b/static/scripts/src/contact.js index 3e17366..e044da1 100644 --- a/static/scripts/src/contact.js +++ b/static/scripts/src/contact.js @@ -1,63 +1,67 @@ -$('#form-contact').addEventListener('submit', function(e) { - e.preventDefault(); - - // Store form field values - var name = $("input[name=name]").value; - var email = $("input[name=email").value; - var subject = $("input[name=_subject").value; - var message = $("textarea[name=message]").value; - - // AJAX request - var request = new XMLHttpRequest(); - var data = { - name:name, - _replyto:email, - email:email, - _subject:subject, - message:message, - }; - - // Send to Formspree or Basin - request.open('POST', '{{ if .Site.Params.ajaxFormspree }}https://formspree.io/{{ .Site.Params.email }}{{ else if .Site.Params.ajaxBasin }}{{ .Site.Params.ajaxBasin }}.json{{ end }}', true); - request.setRequestHeader('{{ if .Site.Params.ajaxFormspree }}Content-Type{{ else if .Site.Params.ajaxBasin }}Accept{{ end }}', 'application/json; charset=UTF-8'); - // Call function when the state changes - request.onreadystatechange = function() { - if (request.readyState == 4 && request.status == 200) { +(function() { + var $ = document.querySelector.bind(document), + $$ = document.querySelectorAll.bind(document) + $('#form-contact').addEventListener('submit', function(e) { + e.preventDefault() + + // Store form field values + var name = $('input[name=name]').value, + email = $('input[name=email').value, + subject = $('input[name=_subject').value, + message = $('textarea[name=message]').value, + + // AJAX request + request = new XMLHttpRequest(), + data = { + name: name, + _replyto: email, + email: email, + _subject: subject, + message: message + } + + // Send to Formspree or Basin + request.open('POST', '{{ if .Site.Params.ajaxFormspree }}https://formspree.io/{{ .Site.Params.email }}{{ else if .Site.Params.ajaxBasin }}{{ .Site.Params.ajaxBasin }}.json{{ end }}', true) + request.setRequestHeader('{{ if .Site.Params.ajaxFormspree }}Content-Type{{ else if .Site.Params.ajaxBasin }}Accept{{ end }}', 'application/json; charset=UTF-8') + // Call function when the state changes + request.onreadystatechange = function() { + if (request.readyState === 4 && request.status === 200) { // Reset form - $('#form-contact').reset(); - - var submit = $('#form-submit'); - var thanks = $('#form-thankyou'); - - function thankYouFadeIn() { - // Fade out submit button - submit.style.visibility = 'hidden'; - submit.classList.add('hide'); - submit.classList.remove('show'); - - // Fade in thank you message - thanks.style.visibility = 'visible'; - thanks.classList.add('show'); - thanks.classList.remove('hide'); - setTimeout(thankYouFadeOut, 6000); - }; - - function thankYouFadeOut() { - // Fade out thank you message - thanks.style.visibility = 'hidden'; - thanks.classList.add('hide'); - thanks.classList.remove('show'); - - // Fade in submit button - submit.style.visibility = 'visible'; - submit.classList.add('show'); - submit.classList.remove('hide'); - }; - - thankYouFadeIn(); + $('#form-contact').reset() + + var submit = $('#form-submit'), + thanks = $('#form-thankyou') + + function thankYouFadeIn() { + // Fade out submit button + submit.style.visibility = 'hidden' + submit.classList.add('hide') + submit.classList.remove('show') + + // Fade in thank you message + thanks.style.visibility = 'visible' + thanks.classList.add('show') + thanks.classList.remove('hide') + setTimeout(thankYouFadeOut, 6000) + }; + + function thankYouFadeOut() { + // Fade out thank you message + thanks.style.visibility = 'hidden' + thanks.classList.add('hide') + thanks.classList.remove('show') + + // Fade in submit button + submit.style.visibility = 'visible' + submit.classList.add('show') + submit.classList.remove('hide') + }; + + thankYouFadeIn() + } } - } - request.send(JSON.stringify(data)); -}); + request.send(JSON.stringify(data)) + }) +})() diff --git a/static/scripts/src/index.js b/static/scripts/src/index.js index e7b49ba..613fc6a 100644 --- a/static/scripts/src/index.js +++ b/static/scripts/src/index.js @@ -1,95 +1,96 @@ -var $ = document.querySelector.bind(document); -var $$ = document.querySelectorAll.bind(document); +(function() { + var $ = document.querySelector.bind(document), + $$ = document.querySelectorAll.bind(document), -var toggle = function(el) { - // If element is visible, hide it - if (window.getComputedStyle(el).visibility === 'visible') { - el.style.visibility = 'hidden'; - el.classList.add('hide') - el.classList.remove('show'); - return; - }; + toggle = function(el) { + // If element is visible, hide it + if (window.getComputedStyle(el).visibility === 'visible') { + el.style.visibility = 'hidden' + el.classList.add('hide') + el.classList.remove('show') + return + }; - // If element is hidden, show it - el.style.visibility = 'visible'; - el.classList.add('show') - el.classList.remove('hide'); -}; + // If element is hidden, show it + el.style.visibility = 'visible' + el.classList.add('show') + el.classList.remove('hide') + } -(function() { // Nav starts at bottom then is fixed to top // Logo and hamburger menus fade in and out window.onscroll = function() { - var scrollPosition = window.pageYOffset || document.documentElement.scrollTop; - var windowHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; - var navHeight = $('nav').clientHeight; + var scrollPosition = window.pageYOffset || document.documentElement.scrollTop, + windowHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight, + navHeight = $('nav').clientHeight if (scrollPosition > windowHeight - navHeight) { // Nav is fixed to top - $('nav').classList.add('nav-fixed'); + $('nav').classList.add('nav-fixed') $$('nav > .logo, nav > .nav-toggle').forEach(function(el) { - el.style.visibility = 'visible'; - el.classList.add('show'); - el.classList.remove('hide'); - }); + el.style.visibility = 'visible' + el.classList.add('show') + el.classList.remove('hide') + }) } else { // Nav is not fixed - $('nav').classList.remove('nav-fixed'); + $('nav').classList.remove('nav-fixed') $$('nav > .logo, nav > .nav-toggle').forEach(function(el) { - el.style.visibility = 'hidden'; - el.classList.add('hide'); - el.classList.remove('show'); - }); + el.style.visibility = 'hidden' + el.classList.add('hide') + el.classList.remove('show') + }) } - }; + } // Full screen nav open on click $('.nav-icon').addEventListener('click', function() { $$('.nav-full, main').forEach(function(el) { - el.classList.toggle('active'); - }); - this.querySelector('img').classList.toggle('img'); - }); + el.classList.toggle('active') + }) + this.querySelector('img').classList.toggle('img') + }) // Full screen nav close on click $$('.nav-full a').forEach(function(links) { links.addEventListener('click', function() { $$('.nav-full, main').forEach(function(el) { - el.classList.toggle('active'); + el.classList.toggle('active') }) - this.querySelector('nav-icon').classList.toggle('nav-icon'); - }); - }); + this.querySelector('nav-icon').classList.toggle('nav-icon') + }) + }) // Disable scroll when full screen nav is open $('body').addEventListener('click', function() { if ($('.nav-full').classList.contains('active')) { - $('html').style.overflowY = 'hidden'; + $('html').style.overflowY = 'hidden' } else { - $('html').style.overflowY = 'scroll'; + $('html').style.overflowY = 'scroll' } - }); -}()); + }) + + // Mobile browsers viewport height bug fix + function fullMobileViewport() { + var element = this, + viewportHeight = window.innerHeight, + heightChangeTolerance = 100 // Approximate address bar height in Chrome -// Mobile browsers viewport height bug fix -function fullMobileViewport() { - var element = this; - var viewportHeight = window.innerHeight; - var heightChangeTolerance = 100; // Approximate address bar height in Chrome + $(window).resize(function() { + if (Math.abs(viewportHeight - window.innerHeight) > heightChangeTolerance) { + viewportHeight = window.innerHeight + update() + } + }) - $(window).resize(function () { - if (Math.abs(viewportHeight - window.innerHeight) > heightChangeTolerance) { - viewportHeight = window.innerHeight; - update(); + function update() { + element.style.height = (viewportHeight + 'px') } - }); - function update() { - element.style.height = (viewportHeight + 'px'); + update() } - update(); -} -$$('header').forEach(function() { - fullMobileViewport; -}); + $$('header').forEach(function() { + fullMobileViewport + }) +})() diff --git a/static/scripts/src/main.js b/static/scripts/src/main.js index c145ea9..acf7013 100644 --- a/static/scripts/src/main.js +++ b/static/scripts/src/main.js @@ -1,54 +1,54 @@ -var $ = document.querySelector.bind(document); -var $$ = document.querySelectorAll.bind(document); +(function() { + var $ = document.querySelector.bind(document), + $$ = document.querySelectorAll.bind(document), -var toggle = function(el) { - // If element is visible, hide it - if (window.getComputedStyle(el).visibility === 'visible') { - el.style.visibility = 'hidden'; - el.classList.add('hide') - el.classList.remove('show'); - return; - }; + toggle = function(el) { + // If element is visible, hide it + if (window.getComputedStyle(el).visibility === 'visible') { + el.style.visibility = 'hidden' + el.classList.add('hide') + el.classList.remove('show') + return + }; - // If element is hidden, show it - el.style.visibility = 'visible'; - el.classList.add('show') - el.classList.remove('hide'); -}; + // If element is hidden, show it + el.style.visibility = 'visible' + el.classList.add('show') + el.classList.remove('hide') + } -(function() { // Nav is fixed to top - $('nav').classList.add('nav-fixed'); + $('nav').classList.add('nav-fixed') $$('nav > .logo, nav > .nav-toggle').forEach(function(el) { - el.style.visibility = 'visible'; - el.classList.add('show'); - el.classList.remove('hide'); - }); + el.style.visibility = 'visible' + el.classList.add('show') + el.classList.remove('hide') + }) // Full screen nav open on click $('.nav-icon').addEventListener('click', function() { $$('.nav-full, main').forEach(function(el) { - el.classList.toggle('active'); - }); - this.querySelector('img').classList.toggle('img'); - }); + el.classList.toggle('active') + }) + this.querySelector('img').classList.toggle('img') + }) // Full screen nav close on click $$('.nav-full a').forEach(function(links) { links.addEventListener('click', function() { $$('.nav-full, main').forEach(function(el) { - el.classList.toggle('active'); + el.classList.toggle('active') }) - this.querySelector('nav-icon').classList.toggle('nav-icon'); - }); - }); + this.querySelector('nav-icon').classList.toggle('nav-icon') + }) + }) // Disable scroll when full screen nav is open $('body').addEventListener('click', function() { if ($('.nav-full').classList.contains('active')) { - $('html').style.overflowY = 'hidden'; + $('html').style.overflowY = 'hidden' } else { - $('html').style.overflowY = 'scroll'; + $('html').style.overflowY = 'scroll' } - }); -}()); + }) +})() diff --git a/static/styles/main.css b/static/styles/main.css index 5453c8d..4498eb9 100644 --- a/static/styles/main.css +++ b/static/styles/main.css @@ -1 +1 @@ -@import url("https://fonts.googleapis.com/css?family=Rubik|Bitter");.col-xs,.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-offset-0,.col-xs-offset-1,.col-xs-offset-2,.col-xs-offset-3,.col-xs-offset-4,.col-xs-offset-5,.col-xs-offset-6,.col-xs-offset-7,.col-xs-offset-8,.col-xs-offset-9,.col-xs-offset-10,.col-xs-offset-11,.col-xs-offset-12{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem}.container-fluid{margin-right:auto;margin-left:auto;padding-right:2rem;padding-left:2rem}.container{margin-right:auto;margin-left:auto}.row{-webkit-box-sizing:border-box;box-sizing:border-box;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.row.reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.col-xs{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;max-width:100%}.col-xs-1{-webkit-flex-basis:8.33333333%;-ms-flex-preferred-size:8.33333333%;flex-basis:8.33333333%;max-width:8.33333333%}.col-xs-2{-webkit-flex-basis:16.66666667%;-ms-flex-preferred-size:16.66666667%;flex-basis:16.66666667%;max-width:16.66666667%}.col-xs-3{-webkit-flex-basis:25%;-ms-flex-preferred-size:25%;flex-basis:25%;max-width:25%}.col-xs-4{-webkit-flex-basis:33.33333333%;-ms-flex-preferred-size:33.33333333%;flex-basis:33.33333333%;max-width:33.33333333%}.col-xs-5{-webkit-flex-basis:41.66666667%;-ms-flex-preferred-size:41.66666667%;flex-basis:41.66666667%;max-width:41.66666667%}.col-xs-6{-webkit-flex-basis:50%;-ms-flex-preferred-size:50%;flex-basis:50%;max-width:50%}.col-xs-7{-webkit-flex-basis:58.33333333%;-ms-flex-preferred-size:58.33333333%;flex-basis:58.33333333%;max-width:58.33333333%}.col-xs-8{-webkit-flex-basis:66.66666667%;-ms-flex-preferred-size:66.66666667%;flex-basis:66.66666667%;max-width:66.66666667%}.col-xs-9{-webkit-flex-basis:75%;-ms-flex-preferred-size:75%;flex-basis:75%;max-width:75%}.col-xs-10{-webkit-flex-basis:83.33333333%;-ms-flex-preferred-size:83.33333333%;flex-basis:83.33333333%;max-width:83.33333333%}.col-xs-11{-webkit-flex-basis:91.66666667%;-ms-flex-preferred-size:91.66666667%;flex-basis:91.66666667%;max-width:91.66666667%}.col-xs-12{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;max-width:100%}.col-xs-offset-0{margin-left:0}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-11{margin-left:91.66666667%}.start-xs{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;text-align:start}.center-xs{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center}.end-xs{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;text-align:end}.top-xs{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.middle-xs{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.bottom-xs{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}.around-xs{-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.between-xs{-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.first-xs{-webkit-box-ordinal-group:0;-webkit-order:-1;-ms-flex-order:-1;order:-1}.last-xs{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}@media only screen and (min-width: 48em){.container{width:49rem}.col-sm{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;max-width:100%}.col-sm-1{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:8.33333333%;-ms-flex-preferred-size:8.33333333%;flex-basis:8.33333333%;max-width:8.33333333%}.col-sm-2{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:16.66666667%;-ms-flex-preferred-size:16.66666667%;flex-basis:16.66666667%;max-width:16.66666667%}.col-sm-3{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:25%;-ms-flex-preferred-size:25%;flex-basis:25%;max-width:25%}.col-sm-4{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:33.33333333%;-ms-flex-preferred-size:33.33333333%;flex-basis:33.33333333%;max-width:33.33333333%}.col-sm-5{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:41.66666667%;-ms-flex-preferred-size:41.66666667%;flex-basis:41.66666667%;max-width:41.66666667%}.col-sm-6{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:50%;-ms-flex-preferred-size:50%;flex-basis:50%;max-width:50%}.col-sm-7{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:58.33333333%;-ms-flex-preferred-size:58.33333333%;flex-basis:58.33333333%;max-width:58.33333333%}.col-sm-8{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:66.66666667%;-ms-flex-preferred-size:66.66666667%;flex-basis:66.66666667%;max-width:66.66666667%}.col-sm-9{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:75%;-ms-flex-preferred-size:75%;flex-basis:75%;max-width:75%}.col-sm-10{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:83.33333333%;-ms-flex-preferred-size:83.33333333%;flex-basis:83.33333333%;max-width:83.33333333%}.col-sm-11{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:91.66666667%;-ms-flex-preferred-size:91.66666667%;flex-basis:91.66666667%;max-width:91.66666667%}.col-sm-12{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;max-width:100%}.col-sm-offset-0{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:0}.col-sm-offset-1{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:8.33333333%}.col-sm-offset-2{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:16.66666667%}.col-sm-offset-3{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:25%}.col-sm-offset-4{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:33.33333333%}.col-sm-offset-5{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:41.66666667%}.col-sm-offset-6{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:50%}.col-sm-offset-7{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:58.33333333%}.col-sm-offset-8{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:66.66666667%}.col-sm-offset-9{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:75%}.col-sm-offset-10{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:83.33333333%}.col-sm-offset-11{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:91.66666667%}.col-sm-offset-12{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem}.start-sm{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;text-align:start}.center-sm{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center}.end-sm{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;text-align:end}.top-sm{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.middle-sm{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.bottom-sm{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}.around-sm{-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.between-sm{-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.first-sm{-webkit-box-ordinal-group:0;-webkit-order:-1;-ms-flex-order:-1;order:-1}.last-sm{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}}@media only screen and (min-width: 64em){.container{width:65rem}.col-md{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;max-width:100%}.col-md-1{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:8.33333333%;-ms-flex-preferred-size:8.33333333%;flex-basis:8.33333333%;max-width:8.33333333%}.col-md-2{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:16.66666667%;-ms-flex-preferred-size:16.66666667%;flex-basis:16.66666667%;max-width:16.66666667%}.col-md-3{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:25%;-ms-flex-preferred-size:25%;flex-basis:25%;max-width:25%}.col-md-4{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:33.33333333%;-ms-flex-preferred-size:33.33333333%;flex-basis:33.33333333%;max-width:33.33333333%}.col-md-5{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:41.66666667%;-ms-flex-preferred-size:41.66666667%;flex-basis:41.66666667%;max-width:41.66666667%}.col-md-6{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:50%;-ms-flex-preferred-size:50%;flex-basis:50%;max-width:50%}.col-md-7{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:58.33333333%;-ms-flex-preferred-size:58.33333333%;flex-basis:58.33333333%;max-width:58.33333333%}.col-md-8{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:66.66666667%;-ms-flex-preferred-size:66.66666667%;flex-basis:66.66666667%;max-width:66.66666667%}.col-md-9{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:75%;-ms-flex-preferred-size:75%;flex-basis:75%;max-width:75%}.col-md-10{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:83.33333333%;-ms-flex-preferred-size:83.33333333%;flex-basis:83.33333333%;max-width:83.33333333%}.col-md-11{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:91.66666667%;-ms-flex-preferred-size:91.66666667%;flex-basis:91.66666667%;max-width:91.66666667%}.col-md-12{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;max-width:100%}.col-md-offset-0{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:0}.col-md-offset-1{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:8.33333333%}.col-md-offset-2{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:16.66666667%}.col-md-offset-3{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:25%}.col-md-offset-4{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:33.33333333%}.col-md-offset-5{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:41.66666667%}.col-md-offset-6{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:50%}.col-md-offset-7{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:58.33333333%}.col-md-offset-8{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:66.66666667%}.col-md-offset-9{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:75%}.col-md-offset-10{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:83.33333333%}.col-md-offset-11{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:91.66666667%}.col-md-offset-12{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem}.start-md{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;text-align:start}.center-md{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center}.end-md{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;text-align:end}.top-md{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.middle-md{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.bottom-md{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}.around-md{-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.between-md{-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.first-md{-webkit-box-ordinal-group:0;-webkit-order:-1;-ms-flex-order:-1;order:-1}.last-md{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}}@media only screen and (min-width: 75em){.container{width:76rem}.col-lg{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;max-width:100%}.col-lg-1{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:8.33333333%;-ms-flex-preferred-size:8.33333333%;flex-basis:8.33333333%;max-width:8.33333333%}.col-lg-2{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:16.66666667%;-ms-flex-preferred-size:16.66666667%;flex-basis:16.66666667%;max-width:16.66666667%}.col-lg-3{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:25%;-ms-flex-preferred-size:25%;flex-basis:25%;max-width:25%}.col-lg-4{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:33.33333333%;-ms-flex-preferred-size:33.33333333%;flex-basis:33.33333333%;max-width:33.33333333%}.col-lg-5{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:41.66666667%;-ms-flex-preferred-size:41.66666667%;flex-basis:41.66666667%;max-width:41.66666667%}.col-lg-6{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:50%;-ms-flex-preferred-size:50%;flex-basis:50%;max-width:50%}.col-lg-7{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:58.33333333%;-ms-flex-preferred-size:58.33333333%;flex-basis:58.33333333%;max-width:58.33333333%}.col-lg-8{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:66.66666667%;-ms-flex-preferred-size:66.66666667%;flex-basis:66.66666667%;max-width:66.66666667%}.col-lg-9{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:75%;-ms-flex-preferred-size:75%;flex-basis:75%;max-width:75%}.col-lg-10{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:83.33333333%;-ms-flex-preferred-size:83.33333333%;flex-basis:83.33333333%;max-width:83.33333333%}.col-lg-11{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:91.66666667%;-ms-flex-preferred-size:91.66666667%;flex-basis:91.66666667%;max-width:91.66666667%}.col-lg-12{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;max-width:100%}.col-lg-offset-0{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:0}.col-lg-offset-1{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:8.33333333%}.col-lg-offset-2{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:16.66666667%}.col-lg-offset-3{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:25%}.col-lg-offset-4{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:33.33333333%}.col-lg-offset-5{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:41.66666667%}.col-lg-offset-6{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:50%}.col-lg-offset-7{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:58.33333333%}.col-lg-offset-8{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:66.66666667%}.col-lg-offset-9{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:75%}.col-lg-offset-10{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:83.33333333%}.col-lg-offset-11{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:91.66666667%}.col-lg-offset-12{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem}.start-lg{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;text-align:start}.center-lg{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center}.end-lg{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;text-align:end}.top-lg{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.middle-lg{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.bottom-lg{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}.around-lg{-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.between-lg{-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.first-lg{-webkit-box-ordinal-group:0;-webkit-order:-1;-ms-flex-order:-1;order:-1}.last-lg{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}}.col.reverse{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}h1{font-size:2.961rem}@media (max-width: 48em){h1{font-size:2.441rem}}@media (max-width: 25em){h1{font-size:2.148rem}}h2{font-size:2.221rem}@media (max-width: 48em){h2{font-size:1.953em}}@media (max-width: 25em){h2{font-size:1.719rem}}h3{font-size:1.666rem}@media (max-width: 48em){h3{font-size:1.563rem}}@media (max-width: 25em){h3{font-size:1.375rem}}*{margin:0;padding:0;border:0;color:#212121;font:inherit;vertical-align:baseline;-webkit-box-sizing:border-box;box-sizing:border-box}*::before,*::after{-webkit-box-sizing:border-box;box-sizing:border-box}html{-webkit-box-sizing:inherit;box-sizing:inherit;overflow-x:hidden}body{font-size:1.25rem;color:#212121;font-family:"Rubik","Poppins","Hel­vetica",Arial,sans-serif;line-height:1.6}@media (max-width: 48em){body{font-size:1.25rem}}@media (max-width: 25em){body{font-size:1.1rem}}header{height:100vh;background-color:#fff}header div{z-index:101}header img{max-height:12rem}header h1{font-family:"Rubik","Poppins","Hel­vetica",Arial,sans-serif}header .cursor{-webkit-animation:1s blink step-end infinite;animation:1s blink step-end infinite}strong{font-weight:600}del,s{text-decoration:line-through}em,q,dfn{font-style:italic}a{-webkit-transition:color .2s ease-out;transition:color .2s ease-out;text-decoration:none}a img{border:0}a:hover{color:#DA784D}pre{margin-top:0;margin-bottom:2rem;padding:16px;background-color:#F7F7F7;font:12px "Consolas", "Liberation Mono", "Menlo", "Courier", monospace;font-family:"Menlo","Monaco","Andale Mono","lucida console","Courier New",monospace;font-size:85%;line-height:1.45;overflow:auto;word-wrap:normal}pre>code{margin:0;padding:0;border:0;background:transparent;font-size:100%;white-space:pre;word-break:normal}pre code{display:inline;margin:0;padding:0;border:0;background-color:transparent;line-height:inherit;overflow:visible;word-wrap:normal}pre code::before,pre code::after{content:normal}code{padding:4px;background-color:#F7F7F7;font-family:"Menlo","Monaco","Andale Mono","lucida console","Courier New",monospace;font-size:90%}.sans{font-family:"Open Sans", "Myriad Pro", "Myriad", sans-serif}.mono,tt{font-family:"Menlo","Monaco","Andale Mono","lucida console","Courier New",monospace}q::before{content:"\201C"}q::after{content:"\201D"}blockquote::before,blockquote::after{color:#DA784D;font-family:"Bitter","Roboto Slab","Cambria",Georgia,serif;font-size:35px;content:'\201C'}blockquote{padding:25px;font-family:"Bitter","Roboto Slab","Cambria",Georgia,serif;text-align:center}blockquote p{display:inline-block;font-style:italic}blockquote::after{content:'\201D'}img{display:block;max-width:100%;margin:0 auto}ul,ol{margin-bottom:2rem}ul li,ol li{margin-left:1.25em}ul li code,ol li code{font-family:"Menlo","Monaco","Andale Mono","lucida console","Courier New",monospace}ul li{list-style-type:disc}.show{-webkit-transition:opacity 600ms;transition:opacity 600ms}.hide{opacity:0}@media (max-width: 48em){body .container{padding:4rem 2rem}nav div:not(:first-child):not(:last-child){display:none}nav div.nav-toggle a{display:inline-block}}@media (max-width: 25em){body .container{padding:4rem 2rem}nav div.logo,nav div.nav-toggle{max-width:50% !important}}@-webkit-keyframes "blink"{from,to{color:transparent}50%{color:#212121}}@keyframes "blink"{from,to{color:transparent}50%{color:#212121}}nav{height:4rem;width:100%;background-color:#FFF;position:absolute;bottom:0;z-index:100;text-align:center;-webkit-box-shadow:0 2px 2px rgba(0,0,0,0.4);box-shadow:0 2px 2px rgba(0,0,0,0.4)}nav h3{margin:0;font-family:"Rubik","Poppins","Hel­vetica",Arial,sans-serif;text-transform:uppercase;letter-spacing:2px;font-weight:600}nav img{display:inline-block;max-width:10em;max-height:2.5em;vertical-align:middle}nav div.logo,nav div.nav-toggle{visibility:hidden;max-width:none}nav .nav-toggle a{display:none}.nav-fixed{position:fixed;top:0;bottom:auto}.nav-full{position:fixed;top:0;bottom:0;width:100vw;right:-100vw;height:100%;background-color:#212121;-webkit-transform:translate(0px, 0px);-ms-transform:translate(0px, 0px);transform:translate(0px, 0px);-webkit-transition:0.25s ease-out;transition:0.25s ease-out}.nav-full a{color:#FFF}.nav-full a:hover{color:#DA784D}.nav-full.active{-webkit-transform:translate(-100vw, 0px);-ms-transform:translate(-100vw, 0px);transform:translate(-100vw, 0px)}main{background-color:#fff;-webkit-transform:translate(0px, 0px);-ms-transform:translate(0px, 0px);transform:translate(0px, 0px);-webkit-transition:0.25s ease-in;transition:0.25s ease-in}main.active{-webkit-transform:translate(-100vw, 0px);-ms-transform:translate(-100vw, 0px);transform:translate(-100vw, 0px)}.container{max-width:43.750rem;padding:4rem 0 4rem;margin:auto}p{margin-bottom:2rem}p code{font-family:"Menlo","Monaco","Andale Mono","lucida console","Courier New",monospace}h1,h2,h3{font-family:"Bitter","Roboto Slab","Cambria",Georgia,serif;margin-top:2rem;letter-spacing:2px}h1 a,h2 a,h3 a{text-decoration:none}.posts-list{margin:0 0 2rem}.sub-header,time{font-size:1.25rem;color:#4E6B6C;margin-bottom:2rem}@media (max-width: 48em){.sub-header,time{font-size:1.25rem}}@media (max-width: 25em){.sub-header,time{font-size:1.1rem}}.content{text-align:left;width:100%}.content time{margin-left:3px}.content a{text-shadow:0.03em 0 #fff, -0.03em 0 #fff, 0 0.03em #fff, 0 -0.03em #fff, 0.06em 0 #fff, -0.06em 0 #fff, 0.09em 0 #fff, -0.09em 0 #fff, 0.12em 0 #fff, -0.12em 0 #fff, 0.15em 0 #fff, -0.15em 0 #fff, 0.03em 0.075em #fff, -0.03em 0.075em #fff, 0.06em 0.075em #fff, -0.06em 0.075em #fff, 0.09em 0.075em #fff, -0.09em 0.075em #fff, 0.12em 0.075em #fff, -0.12em 0.075em #fff, 0.15em 0.075em #fff, -0.15em 0.075em #fff;background-image:-webkit-gradient(linear, left top, left bottom, from(#DA784D), to(#DA784D));background-image:-webkit-linear-gradient(#DA784D, #DA784D);background-image:linear-gradient(#DA784D, #DA784D);background-size:1px 2px;background-repeat:repeat-x;background-position:0 95%;text-decoration:none}.content a:hover{color:#DA784D}.highlight{margin:10px 0}.pagination{margin:50px 0 0}.pagination :nth-child(2){float:right}.full{height:100vh;top:0;bottom:0}.about{width:100%;background-color:#F7F7F7;padding-bottom:4rem}.about p{font-size:1.666rem;margin-top:2rem}@media (max-width: 48em){.about p{font-size:1.563rem}}@media (max-width: 25em){.about p{font-size:1.375rem}}.about a{text-shadow:0.03em 0 #fff, -0.03em 0 #fff, 0 0.03em #fff, 0 -0.03em #fff, 0.06em 0 #fff, -0.06em 0 #fff, 0.09em 0 #fff, -0.09em 0 #fff, 0.12em 0 #fff, -0.12em 0 #fff, 0.15em 0 #fff, -0.15em 0 #fff, 0.03em 0.075em #fff, -0.03em 0.075em #fff, 0.06em 0.075em #fff, -0.06em 0.075em #fff, 0.09em 0.075em #fff, -0.09em 0.075em #fff, 0.12em 0.075em #fff, -0.12em 0.075em #fff, 0.15em 0.075em #fff, -0.15em 0.075em #fff;background-image:-webkit-gradient(linear, left top, left bottom, from(#DA784D), to(#DA784D));background-image:-webkit-linear-gradient(#DA784D, #DA784D);background-image:linear-gradient(#DA784D, #DA784D);background-size:2px 3px;background-repeat:repeat-x;background-position:0 95%;text-decoration:none}.about a:hover{color:#DA784D}.gallery div[class^="col-"],.gallery div[class*=" col-"]{padding:0;position:relative}.gallery div[class^="col-"]:hover .overlay,.gallery div[class*=" col-"]:hover .overlay{opacity:1}.gallery img{padding:6rem}.overlay{cursor:pointer;position:absolute;top:0;bottom:0;left:0;right:0;height:100%;width:100%;opacity:0;-webkit-transition:.2s ease-out;transition:.2s ease-out;background-color:#212121}.overlay a{color:#FFF}.overlay a:hover{color:#DA784D}.overlay h2{color:#FFF}.overlay h3{font-family:"Rubik","Poppins","Hel­vetica",Arial,sans-serif}.blog{min-height:100vh}.blog h3{margin:0 0 2rem;font-family:"Rubik","Poppins","Hel­vetica",Arial,sans-serif}.contact{width:100%;background-color:#F7F7F7;padding-bottom:4rem}.contact form{margin-top:2rem}.contact .contact-submit{position:relative}.contact #form-submit{display:block;margin:0 auto;width:50%}.contact #form-thankyou{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}input,textarea{background-color:#FFF;border-color:#F7F7F7;border-radius:3px;border-width:1px;border-style:solid;color:#212121;padding:10px;margin:8px 0;width:100%}input[type="submit"],textarea[type="submit"]{background-color:#4E6B6C;color:#FFF;-webkit-transition:.2s ease-out;transition:.2s ease-out}input[type="submit"]:hover,textarea[type="submit"]:hover{background-color:#DA784D;color:#FFF;cursor:pointer}textarea{min-height:8rem;overflow:auto}footer{height:12rem;background-color:#212121}footer div,footer a{color:#FFF} +@import url("https://fonts.googleapis.com/css?family=Rubik|Bitter");.col-xs,.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-offset-0,.col-xs-offset-1,.col-xs-offset-2,.col-xs-offset-3,.col-xs-offset-4,.col-xs-offset-5,.col-xs-offset-6,.col-xs-offset-7,.col-xs-offset-8,.col-xs-offset-9,.col-xs-offset-10,.col-xs-offset-11,.col-xs-offset-12{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem}.container-fluid{margin-right:auto;margin-left:auto;padding-right:2rem;padding-left:2rem}.container{margin-right:auto;margin-left:auto}.row{box-sizing:border-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.row.reverse{-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.col-xs{-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;max-width:100%}.col-xs-1{-webkit-flex-basis:8.33333333%;-ms-flex-preferred-size:8.33333333%;flex-basis:8.33333333%;max-width:8.33333333%}.col-xs-2{-webkit-flex-basis:16.66666667%;-ms-flex-preferred-size:16.66666667%;flex-basis:16.66666667%;max-width:16.66666667%}.col-xs-3{-webkit-flex-basis:25%;-ms-flex-preferred-size:25%;flex-basis:25%;max-width:25%}.col-xs-4{-webkit-flex-basis:33.33333333%;-ms-flex-preferred-size:33.33333333%;flex-basis:33.33333333%;max-width:33.33333333%}.col-xs-5{-webkit-flex-basis:41.66666667%;-ms-flex-preferred-size:41.66666667%;flex-basis:41.66666667%;max-width:41.66666667%}.col-xs-6{-webkit-flex-basis:50%;-ms-flex-preferred-size:50%;flex-basis:50%;max-width:50%}.col-xs-7{-webkit-flex-basis:58.33333333%;-ms-flex-preferred-size:58.33333333%;flex-basis:58.33333333%;max-width:58.33333333%}.col-xs-8{-webkit-flex-basis:66.66666667%;-ms-flex-preferred-size:66.66666667%;flex-basis:66.66666667%;max-width:66.66666667%}.col-xs-9{-webkit-flex-basis:75%;-ms-flex-preferred-size:75%;flex-basis:75%;max-width:75%}.col-xs-10{-webkit-flex-basis:83.33333333%;-ms-flex-preferred-size:83.33333333%;flex-basis:83.33333333%;max-width:83.33333333%}.col-xs-11{-webkit-flex-basis:91.66666667%;-ms-flex-preferred-size:91.66666667%;flex-basis:91.66666667%;max-width:91.66666667%}.col-xs-12{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;max-width:100%}.col-xs-offset-0{margin-left:0}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-11{margin-left:91.66666667%}.start-xs{-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;text-align:start}.center-xs{-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center}.end-xs{-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;text-align:end}.top-xs{-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.middle-xs{-webkit-align-items:center;-ms-flex-align:center;align-items:center}.bottom-xs{-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}.around-xs{-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.between-xs{-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.first-xs{-webkit-order:-1;-ms-flex-order:-1;order:-1}.last-xs{-webkit-order:1;-ms-flex-order:1;order:1}@media only screen and (min-width: 48em){.container{width:49rem}.col-sm{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;max-width:100%}.col-sm-1{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:8.33333333%;-ms-flex-preferred-size:8.33333333%;flex-basis:8.33333333%;max-width:8.33333333%}.col-sm-2{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:16.66666667%;-ms-flex-preferred-size:16.66666667%;flex-basis:16.66666667%;max-width:16.66666667%}.col-sm-3{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:25%;-ms-flex-preferred-size:25%;flex-basis:25%;max-width:25%}.col-sm-4{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:33.33333333%;-ms-flex-preferred-size:33.33333333%;flex-basis:33.33333333%;max-width:33.33333333%}.col-sm-5{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:41.66666667%;-ms-flex-preferred-size:41.66666667%;flex-basis:41.66666667%;max-width:41.66666667%}.col-sm-6{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:50%;-ms-flex-preferred-size:50%;flex-basis:50%;max-width:50%}.col-sm-7{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:58.33333333%;-ms-flex-preferred-size:58.33333333%;flex-basis:58.33333333%;max-width:58.33333333%}.col-sm-8{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:66.66666667%;-ms-flex-preferred-size:66.66666667%;flex-basis:66.66666667%;max-width:66.66666667%}.col-sm-9{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:75%;-ms-flex-preferred-size:75%;flex-basis:75%;max-width:75%}.col-sm-10{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:83.33333333%;-ms-flex-preferred-size:83.33333333%;flex-basis:83.33333333%;max-width:83.33333333%}.col-sm-11{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:91.66666667%;-ms-flex-preferred-size:91.66666667%;flex-basis:91.66666667%;max-width:91.66666667%}.col-sm-12{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;max-width:100%}.col-sm-offset-0{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:0}.col-sm-offset-1{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:8.33333333%}.col-sm-offset-2{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:16.66666667%}.col-sm-offset-3{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:25%}.col-sm-offset-4{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:33.33333333%}.col-sm-offset-5{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:41.66666667%}.col-sm-offset-6{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:50%}.col-sm-offset-7{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:58.33333333%}.col-sm-offset-8{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:66.66666667%}.col-sm-offset-9{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:75%}.col-sm-offset-10{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:83.33333333%}.col-sm-offset-11{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:91.66666667%}.col-sm-offset-12{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem}.start-sm{-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;text-align:start}.center-sm{-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center}.end-sm{-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;text-align:end}.top-sm{-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.middle-sm{-webkit-align-items:center;-ms-flex-align:center;align-items:center}.bottom-sm{-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}.around-sm{-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.between-sm{-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.first-sm{-webkit-order:-1;-ms-flex-order:-1;order:-1}.last-sm{-webkit-order:1;-ms-flex-order:1;order:1}}@media only screen and (min-width: 64em){.container{width:65rem}.col-md{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;max-width:100%}.col-md-1{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:8.33333333%;-ms-flex-preferred-size:8.33333333%;flex-basis:8.33333333%;max-width:8.33333333%}.col-md-2{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:16.66666667%;-ms-flex-preferred-size:16.66666667%;flex-basis:16.66666667%;max-width:16.66666667%}.col-md-3{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:25%;-ms-flex-preferred-size:25%;flex-basis:25%;max-width:25%}.col-md-4{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:33.33333333%;-ms-flex-preferred-size:33.33333333%;flex-basis:33.33333333%;max-width:33.33333333%}.col-md-5{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:41.66666667%;-ms-flex-preferred-size:41.66666667%;flex-basis:41.66666667%;max-width:41.66666667%}.col-md-6{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:50%;-ms-flex-preferred-size:50%;flex-basis:50%;max-width:50%}.col-md-7{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:58.33333333%;-ms-flex-preferred-size:58.33333333%;flex-basis:58.33333333%;max-width:58.33333333%}.col-md-8{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:66.66666667%;-ms-flex-preferred-size:66.66666667%;flex-basis:66.66666667%;max-width:66.66666667%}.col-md-9{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:75%;-ms-flex-preferred-size:75%;flex-basis:75%;max-width:75%}.col-md-10{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:83.33333333%;-ms-flex-preferred-size:83.33333333%;flex-basis:83.33333333%;max-width:83.33333333%}.col-md-11{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:91.66666667%;-ms-flex-preferred-size:91.66666667%;flex-basis:91.66666667%;max-width:91.66666667%}.col-md-12{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;max-width:100%}.col-md-offset-0{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:0}.col-md-offset-1{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:8.33333333%}.col-md-offset-2{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:16.66666667%}.col-md-offset-3{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:25%}.col-md-offset-4{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:33.33333333%}.col-md-offset-5{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:41.66666667%}.col-md-offset-6{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:50%}.col-md-offset-7{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:58.33333333%}.col-md-offset-8{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:66.66666667%}.col-md-offset-9{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:75%}.col-md-offset-10{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:83.33333333%}.col-md-offset-11{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:91.66666667%}.col-md-offset-12{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem}.start-md{-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;text-align:start}.center-md{-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center}.end-md{-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;text-align:end}.top-md{-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.middle-md{-webkit-align-items:center;-ms-flex-align:center;align-items:center}.bottom-md{-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}.around-md{-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.between-md{-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.first-md{-webkit-order:-1;-ms-flex-order:-1;order:-1}.last-md{-webkit-order:1;-ms-flex-order:1;order:1}}@media only screen and (min-width: 75em){.container{width:76rem}.col-lg{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;max-width:100%}.col-lg-1{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:8.33333333%;-ms-flex-preferred-size:8.33333333%;flex-basis:8.33333333%;max-width:8.33333333%}.col-lg-2{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:16.66666667%;-ms-flex-preferred-size:16.66666667%;flex-basis:16.66666667%;max-width:16.66666667%}.col-lg-3{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:25%;-ms-flex-preferred-size:25%;flex-basis:25%;max-width:25%}.col-lg-4{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:33.33333333%;-ms-flex-preferred-size:33.33333333%;flex-basis:33.33333333%;max-width:33.33333333%}.col-lg-5{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:41.66666667%;-ms-flex-preferred-size:41.66666667%;flex-basis:41.66666667%;max-width:41.66666667%}.col-lg-6{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:50%;-ms-flex-preferred-size:50%;flex-basis:50%;max-width:50%}.col-lg-7{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:58.33333333%;-ms-flex-preferred-size:58.33333333%;flex-basis:58.33333333%;max-width:58.33333333%}.col-lg-8{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:66.66666667%;-ms-flex-preferred-size:66.66666667%;flex-basis:66.66666667%;max-width:66.66666667%}.col-lg-9{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:75%;-ms-flex-preferred-size:75%;flex-basis:75%;max-width:75%}.col-lg-10{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:83.33333333%;-ms-flex-preferred-size:83.33333333%;flex-basis:83.33333333%;max-width:83.33333333%}.col-lg-11{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:91.66666667%;-ms-flex-preferred-size:91.66666667%;flex-basis:91.66666667%;max-width:91.66666667%}.col-lg-12{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;max-width:100%}.col-lg-offset-0{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:0}.col-lg-offset-1{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:8.33333333%}.col-lg-offset-2{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:16.66666667%}.col-lg-offset-3{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:25%}.col-lg-offset-4{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:33.33333333%}.col-lg-offset-5{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:41.66666667%}.col-lg-offset-6{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:50%}.col-lg-offset-7{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:58.33333333%}.col-lg-offset-8{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:66.66666667%}.col-lg-offset-9{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:75%}.col-lg-offset-10{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:83.33333333%}.col-lg-offset-11{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem;margin-left:91.66666667%}.col-lg-offset-12{box-sizing:border-box;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:0.5rem;padding-left:0.5rem}.start-lg{-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;text-align:start}.center-lg{-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center}.end-lg{-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;text-align:end}.top-lg{-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.middle-lg{-webkit-align-items:center;-ms-flex-align:center;align-items:center}.bottom-lg{-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}.around-lg{-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.between-lg{-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.first-lg{-webkit-order:-1;-ms-flex-order:-1;order:-1}.last-lg{-webkit-order:1;-ms-flex-order:1;order:1}}.col.reverse{-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}h1{font-size:2.961rem}@media (max-width: 48em){h1{font-size:2.441rem}}@media (max-width: 25em){h1{font-size:2.148rem}}h2{font-size:2.221rem}@media (max-width: 48em){h2{font-size:1.953em}}@media (max-width: 25em){h2{font-size:1.719rem}}h3{font-size:1.666rem}@media (max-width: 48em){h3{font-size:1.563rem}}@media (max-width: 25em){h3{font-size:1.375rem}}*{margin:0;padding:0;border:0;color:#212121;font:inherit;vertical-align:baseline;box-sizing:border-box}*::before,*::after{box-sizing:border-box}html{box-sizing:inherit;overflow-x:hidden}body{font-size:1.25rem;color:#212121;font-family:"Rubik","Poppins","Hel­vetica",Arial,sans-serif;line-height:1.6}@media (max-width: 48em){body{font-size:1.25rem}}@media (max-width: 25em){body{font-size:1.1rem}}header{height:100vh;background-color:#fff}header div{z-index:101}header img{max-height:12rem}header h1{font-family:"Rubik","Poppins","Hel­vetica",Arial,sans-serif}header .cursor{-webkit-animation:1s blink step-end infinite;animation:1s blink step-end infinite}strong{font-weight:600}del,s{text-decoration:line-through}em,q,dfn{font-style:italic}a{transition:color .2s ease-out;text-decoration:none}a img{border:0}a:hover{color:#DA784D}pre{margin-top:0;margin-bottom:2rem;padding:16px;background-color:#F7F7F7;font:12px "Consolas", "Liberation Mono", "Menlo", "Courier", monospace;font-family:"Menlo","Monaco","Andale Mono","lucida console","Courier New",monospace;font-size:85%;line-height:1.45;overflow:auto;word-wrap:normal}pre>code{margin:0;padding:0;border:0;background:transparent;font-size:100%;white-space:pre;word-break:normal}pre code{display:inline;margin:0;padding:0;border:0;background-color:transparent;line-height:inherit;overflow:visible;word-wrap:normal}pre code::before,pre code::after{content:normal}code{padding:4px;background-color:#F7F7F7;font-family:"Menlo","Monaco","Andale Mono","lucida console","Courier New",monospace;font-size:90%}.sans{font-family:"Open Sans", "Myriad Pro", "Myriad", sans-serif}.mono,tt{font-family:"Menlo","Monaco","Andale Mono","lucida console","Courier New",monospace}q::before{content:"\201C"}q::after{content:"\201D"}blockquote::before,blockquote::after{color:#DA784D;font-family:"Bitter","Roboto Slab","Cambria",Georgia,serif;font-size:35px;content:'\201C'}blockquote{padding:25px;font-family:"Bitter","Roboto Slab","Cambria",Georgia,serif;text-align:center}blockquote p{display:inline-block;font-style:italic}blockquote::after{content:'\201D'}img{display:block;max-width:100%;margin:0 auto}ul,ol{margin-bottom:2rem}ul li,ol li{margin-left:1.25em}ul li code,ol li code{font-family:"Menlo","Monaco","Andale Mono","lucida console","Courier New",monospace}ul li{list-style-type:disc}.show{transition:opacity 600ms}.hide{opacity:0}@media (max-width: 48em){body .container{padding:4rem 2rem}nav div:not(:first-child):not(:last-child){display:none}nav div.nav-toggle a{display:inline-block}}@media (max-width: 25em){body .container{padding:4rem 2rem}nav div.logo,nav div.nav-toggle{max-width:50% !important}}@-webkit-keyframes "blink"{from,to{color:transparent}50%{color:#212121}}@keyframes "blink"{from,to{color:transparent}50%{color:#212121}}nav{height:4rem;width:100%;background-color:#FFF;position:absolute;bottom:0;z-index:100;text-align:center;box-shadow:0 2px 2px rgba(0,0,0,0.4)}nav h3{margin:0;font-family:"Rubik","Poppins","Hel­vetica",Arial,sans-serif;text-transform:uppercase;letter-spacing:2px;font-weight:600}nav img{display:inline-block;max-width:10em;max-height:2.5em;vertical-align:middle}nav div.logo,nav div.nav-toggle{visibility:hidden;max-width:none}nav .nav-toggle a{display:none}.nav-fixed{position:fixed;top:0;bottom:auto}.nav-full{position:fixed;top:0;bottom:0;width:100vw;right:-100vw;height:100%;background-color:#212121;-webkit-transform:translate(0px, 0px);-ms-transform:translate(0px, 0px);transform:translate(0px, 0px);transition:0.25s ease-out}.nav-full a{color:#FFF}.nav-full a:hover{color:#DA784D}.nav-full.active{-webkit-transform:translate(-100vw, 0px);-ms-transform:translate(-100vw, 0px);transform:translate(-100vw, 0px)}main{background-color:#fff;-webkit-transform:translate(0px, 0px);-ms-transform:translate(0px, 0px);transform:translate(0px, 0px);transition:0.25s ease-in}main.active{-webkit-transform:translate(-100vw, 0px);-ms-transform:translate(-100vw, 0px);transform:translate(-100vw, 0px)}.container{max-width:43.750rem;padding:4rem 0 4rem;margin:auto}p{margin-bottom:2rem}p code{font-family:"Menlo","Monaco","Andale Mono","lucida console","Courier New",monospace}h1,h2,h3{font-family:"Bitter","Roboto Slab","Cambria",Georgia,serif;margin-top:2rem;letter-spacing:2px}h1 a,h2 a,h3 a{text-decoration:none}.posts-list{margin:0 0 2rem}.sub-header,time{font-size:1.25rem;color:#4E6B6C;margin-bottom:2rem}@media (max-width: 48em){.sub-header,time{font-size:1.25rem}}@media (max-width: 25em){.sub-header,time{font-size:1.1rem}}.content{text-align:left;width:100%}.content time{margin-left:3px}.content a{text-shadow:0.03em 0 #fff, -0.03em 0 #fff, 0 0.03em #fff, 0 -0.03em #fff, 0.06em 0 #fff, -0.06em 0 #fff, 0.09em 0 #fff, -0.09em 0 #fff, 0.12em 0 #fff, -0.12em 0 #fff, 0.15em 0 #fff, -0.15em 0 #fff, 0.03em 0.075em #fff, -0.03em 0.075em #fff, 0.06em 0.075em #fff, -0.06em 0.075em #fff, 0.09em 0.075em #fff, -0.09em 0.075em #fff, 0.12em 0.075em #fff, -0.12em 0.075em #fff, 0.15em 0.075em #fff, -0.15em 0.075em #fff;background-image:linear-gradient(#DA784D, #DA784D);background-size:1px 2px;background-repeat:repeat-x;background-position:0 95%;text-decoration:none}.content a:hover{color:#DA784D}.highlight{margin:10px 0}.pagination{margin:50px 0 0}.pagination :nth-child(2){float:right}.full{height:100vh;top:0;bottom:0}.about{width:100%;background-color:#F7F7F7;padding-bottom:4rem}.about p{font-size:1.666rem;margin-top:2rem}@media (max-width: 48em){.about p{font-size:1.563rem}}@media (max-width: 25em){.about p{font-size:1.375rem}}.about a{text-shadow:0.03em 0 #fff, -0.03em 0 #fff, 0 0.03em #fff, 0 -0.03em #fff, 0.06em 0 #fff, -0.06em 0 #fff, 0.09em 0 #fff, -0.09em 0 #fff, 0.12em 0 #fff, -0.12em 0 #fff, 0.15em 0 #fff, -0.15em 0 #fff, 0.03em 0.075em #fff, -0.03em 0.075em #fff, 0.06em 0.075em #fff, -0.06em 0.075em #fff, 0.09em 0.075em #fff, -0.09em 0.075em #fff, 0.12em 0.075em #fff, -0.12em 0.075em #fff, 0.15em 0.075em #fff, -0.15em 0.075em #fff;background-image:linear-gradient(#DA784D, #DA784D);background-size:2px 3px;background-repeat:repeat-x;background-position:0 95%;text-decoration:none}.about a:hover{color:#DA784D}.gallery div[class^="col-"],.gallery div[class*=" col-"]{padding:0;position:relative}.gallery div[class^="col-"]:hover .overlay,.gallery div[class*=" col-"]:hover .overlay{opacity:1}.gallery img{padding:6rem}.overlay{cursor:pointer;position:absolute;top:0;bottom:0;left:0;right:0;height:100%;width:100%;opacity:0;transition:.2s ease-out;background-color:#212121}.overlay a{color:#FFF}.overlay a:hover{color:#DA784D}.overlay h2{color:#FFF}.overlay h3{font-family:"Rubik","Poppins","Hel­vetica",Arial,sans-serif}.blog{min-height:100vh}.blog h3{margin:0 0 2rem;font-family:"Rubik","Poppins","Hel­vetica",Arial,sans-serif}.contact{width:100%;background-color:#F7F7F7;padding-bottom:4rem}.contact form{margin-top:2rem}.contact .contact-submit{position:relative}.contact #form-submit{display:block;margin:0 auto;width:50%}.contact #form-thankyou{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}input,textarea{background-color:#FFF;border-color:#F7F7F7;border-radius:3px;border-width:1px;border-style:solid;color:#212121;padding:10px;margin:8px 0;width:100%}input[type="submit"],textarea[type="submit"]{background-color:#4E6B6C;color:#FFF;transition:.2s ease-out}input[type="submit"]:hover,textarea[type="submit"]:hover{background-color:#DA784D;color:#FFF;cursor:pointer}textarea{min-height:8rem;overflow:auto}footer{height:12rem;background-color:#212121}footer div,footer a{color:#FFF} From 71d4293b160ba7f21f9fc120f9c5069a1975ae9a Mon Sep 17 00:00:00 2001 From: Toma Nistor Date: Sun, 18 Nov 2018 01:56:19 -0800 Subject: [PATCH 7/8] Changed HTTP request headers for contact form --- layouts/partials/contact.html | 2 +- layouts/partials/scripts/contact.min.js | 2 +- static/scripts/contact.min.js | 2 +- static/scripts/src/contact.js | 8 ++++---- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/layouts/partials/contact.html b/layouts/partials/contact.html index 2ca181e..4d58803 100644 --- a/layouts/partials/contact.html +++ b/layouts/partials/contact.html @@ -11,7 +11,7 @@

Let's Chat

-
+
{{ if .Site.Params.ajaxFormspree }} diff --git a/layouts/partials/scripts/contact.min.js b/layouts/partials/scripts/contact.min.js index 32e1dd2..6026209 100644 --- a/layouts/partials/scripts/contact.min.js +++ b/layouts/partials/scripts/contact.min.js @@ -1 +1 @@ -!function(){var e=document.querySelector.bind(document);document.querySelectorAll.bind(document);e("#form-contact").addEventListener("submit",function(s){s.preventDefault();var t=e("input[name=name]").value,a=e("input[name=email").value,i=e("input[name=_subject").value,n=e("textarea[name=message]").value,o=new XMLHttpRequest,r={name:t,_replyto:a,email:a,_subject:i,message:n};o.open("POST","{{ if .Site.Params.ajaxFormspree }}https://formspree.io/{{ .Site.Params.email }}{{ else if .Site.Params.ajaxBasin }}{{ .Site.Params.ajaxBasin }}.json{{ end }}",!0),o.setRequestHeader("{{ if .Site.Params.ajaxFormspree }}Content-Type{{ else if .Site.Params.ajaxBasin }}Accept{{ end }}","application/json; charset=UTF-8"),o.onreadystatechange=function(){function s(){a.style.visibility="hidden",a.classList.add("hide"),a.classList.remove("show"),t.style.visibility="visible",t.classList.add("show"),t.classList.remove("hide")}if(4===o.readyState&&200===o.status){e("#form-contact").reset();var t=e("#form-submit"),a=e("#form-thankyou");!function(){t.style.visibility="hidden",t.classList.add("hide"),t.classList.remove("show"),a.style.visibility="visible",a.classList.add("show"),a.classList.remove("hide"),setTimeout(s,6e3)}()}},o.send(JSON.stringify(r))})}(); +!function(){var e=document.querySelector.bind(document);e("#form-contact").addEventListener("submit",function(s){s.preventDefault();var t=e("input[name=name]").value,i=e("input[name=email").value,a=e("input[name=_subject").value,n=e("textarea[name=message]").value,o=new XMLHttpRequest,l={name:t,_replyto:i,email:i,_subject:a,message:n};o.open("POST","{{ if .Site.Params.ajaxFormspree }}https://formspree.io/{{ .Site.Params.email }}{{ else if .Site.Params.ajaxBasin }}{{ .Site.Params.ajaxBasin }}.json{{ end }}",!0),o.setRequestHeader("Content-Type","application/json"),o.setRequestHeader("Accept","application/json"),o.onreadystatechange=function(){function s(){i.style.visibility="hidden",i.classList.add("hide"),i.classList.remove("show"),t.style.visibility="visible",t.classList.add("show"),t.classList.remove("hide")}if(4===o.readyState&&200===o.status){e("#form-contact").reset();var t=e("#form-submit"),i=e("#form-thankyou");!function(){t.style.visibility="hidden",t.classList.add("hide"),t.classList.remove("show"),i.style.visibility="visible",i.classList.add("show"),i.classList.remove("hide"),setTimeout(s,6e3)}()}},o.send(JSON.stringify(l))})}(); diff --git a/static/scripts/contact.min.js b/static/scripts/contact.min.js index d92b2df..c138065 100644 --- a/static/scripts/contact.min.js +++ b/static/scripts/contact.min.js @@ -1 +1 @@ -!function(){var e=document.querySelector.bind(document);document.querySelectorAll.bind(document);e("#form-contact").addEventListener("submit",function(s){s.preventDefault();var t=e("input[name=name]").value,a=e("input[name=email").value,i=e("input[name=_subject").value,n=e("textarea[name=message]").value,o=new XMLHttpRequest,r={name:t,_replyto:a,email:a,_subject:i,message:n};o.open("POST","{{ if .Site.Params.ajaxFormspree }}https://formspree.io/{{ .Site.Params.email }}{{ else if .Site.Params.ajaxBasin }}{{ .Site.Params.ajaxBasin }}.json{{ end }}",!0),o.setRequestHeader("{{ if .Site.Params.ajaxFormspree }}Content-Type{{ else if .Site.Params.ajaxBasin }}Accept{{ end }}","application/json; charset=UTF-8"),o.onreadystatechange=function(){function s(){a.style.visibility="hidden",a.classList.add("hide"),a.classList.remove("show"),t.style.visibility="visible",t.classList.add("show"),t.classList.remove("hide")}if(4===o.readyState&&200===o.status){e("#form-contact").reset();var t=e("#form-submit"),a=e("#form-thankyou");!function(){t.style.visibility="hidden",t.classList.add("hide"),t.classList.remove("show"),a.style.visibility="visible",a.classList.add("show"),a.classList.remove("hide"),setTimeout(s,6e3)}()}},o.send(JSON.stringify(r))})}(); \ No newline at end of file +!function(){var e=document.querySelector.bind(document);e("#form-contact").addEventListener("submit",function(s){s.preventDefault();var t=e("input[name=name]").value,i=e("input[name=email").value,a=e("input[name=_subject").value,n=e("textarea[name=message]").value,o=new XMLHttpRequest,l={name:t,_replyto:i,email:i,_subject:a,message:n};o.open("POST","{{ if .Site.Params.ajaxFormspree }}https://formspree.io/{{ .Site.Params.email }}{{ else if .Site.Params.ajaxBasin }}{{ .Site.Params.ajaxBasin }}.json{{ end }}",!0),o.setRequestHeader("Content-Type","application/json"),o.setRequestHeader("Accept","application/json"),o.onreadystatechange=function(){function s(){i.style.visibility="hidden",i.classList.add("hide"),i.classList.remove("show"),t.style.visibility="visible",t.classList.add("show"),t.classList.remove("hide")}if(4===o.readyState&&200===o.status){e("#form-contact").reset();var t=e("#form-submit"),i=e("#form-thankyou");!function(){t.style.visibility="hidden",t.classList.add("hide"),t.classList.remove("show"),i.style.visibility="visible",i.classList.add("show"),i.classList.remove("hide"),setTimeout(s,6e3)}()}},o.send(JSON.stringify(l))})}(); \ No newline at end of file diff --git a/static/scripts/src/contact.js b/static/scripts/src/contact.js index e044da1..c52b7c3 100644 --- a/static/scripts/src/contact.js +++ b/static/scripts/src/contact.js @@ -1,6 +1,5 @@ (function() { - var $ = document.querySelector.bind(document), - $$ = document.querySelectorAll.bind(document) + var $ = document.querySelector.bind(document) $('#form-contact').addEventListener('submit', function(e) { e.preventDefault() @@ -23,11 +22,12 @@ // Send to Formspree or Basin request.open('POST', '{{ if .Site.Params.ajaxFormspree }}https://formspree.io/{{ .Site.Params.email }}{{ else if .Site.Params.ajaxBasin }}{{ .Site.Params.ajaxBasin }}.json{{ end }}', true) - request.setRequestHeader('{{ if .Site.Params.ajaxFormspree }}Content-Type{{ else if .Site.Params.ajaxBasin }}Accept{{ end }}', 'application/json; charset=UTF-8') + request.setRequestHeader('Content-Type', 'application/json') + request.setRequestHeader('Accept', 'application/json') // Call function when the state changes request.onreadystatechange = function() { if (request.readyState === 4 && request.status === 200) { - // Reset form + // Reset form $('#form-contact').reset() var submit = $('#form-submit'), From 731b766d1c751c6580a9c7c6bd5a12c502412b2f Mon Sep 17 00:00:00 2001 From: Toma Nistor Date: Sun, 18 Nov 2018 02:23:57 -0800 Subject: [PATCH 8/8] Updated license in theme.toml, updated Basin instructions in README --- README.md | 2 +- theme.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ccd3c4a..49fdc59 100644 --- a/README.md +++ b/README.md @@ -160,7 +160,7 @@ _Update 4/15/18 - [Formspree no longer offers newly set up AJAX contact forms fo The email address specified in the config.toml file will be the one receiving messages sent through the contact form. The contact form is operated by Formspree and requires that the form must be submitted once initially to confirm the email address being used. See instruction [here](https://formspree.io/). #### Basin -Basin is an alternative, free AJAX contact form service. To use Basin, [sign up for a free account](https://usebasin.com/users/sign_up) and create a form. Copy and paste your form's URL endpoint to the `ajaxBasin` config.toml parameter. To use this as an AJAX form, remove the `Redirect URL` and select `Submit this form via AJAX` on your Basin dashboard. +Basin is an alternative, free AJAX contact form service. To use Basin, [sign up for a free account](https://usebasin.com/users/sign_up) and create a form. Copy and paste your form's URL endpoint to the `ajaxBasin` config.toml parameter. Select the `Submit this form via AJAX` option on your Basin dashboard. ![Basin AJAX setup](https://github.com/tomanistor/osprey/blob/master/images/basin-ajax-setup.png) diff --git a/theme.toml b/theme.toml index 2a06314..212ffa3 100644 --- a/theme.toml +++ b/theme.toml @@ -1,5 +1,5 @@ name = "Osprey" -license = "GNU3.0" +license = "Apache License 2.0" licenselink = "https://github.com/tomanistor/osprey/blob/master/LICENSE.md" description = "Clean, responsive one-page portfolio accompanied by a minimalist blog." homepage = "https://github.com/tomanistor/osprey"