Skip to content
Browse files

Initial commit

0 parents commit 67c8e6e7d0b000552ae46950ba01ffdd78067e5b Adam Geitgey committed
Showing with 3,678 additions and 0 deletions.
  1. +4 −0 .gitignore
  2. +3 −0 Gemfile
  3. +49 −0 Gemfile.lock
  4. +21 −0 LICENSE
  5. +159 −0 README.md
  6. +33 −0 _config.yml
  7. +7 −0 _includes/footer.html
  8. +31 −0 _includes/head.html
  9. +12 −0 _includes/header.html
  10. +1 −0 _includes/icon-github.html
  11. +1 −0 _includes/icon-github.svg
  12. +5 −0 _includes/icon-twitter.html
  13. +1 −0 _includes/icon-twitter.svg
  14. +30 −0 _includes/metadata.json
  15. +509 −0 _includes/styles.scss
  16. +9 −0 _layouts/default.html
  17. +16 −0 _layouts/page.html
  18. +60 −0 _layouts/post.html
  19. +26 −0 _posts/2016-03-08-example-post.md
  20. +18 −0 _posts/2016-03-13-my-new-post.md
  21. +70 −0 _sass/_syntax-highlighting.scss
  22. +8 −0 _sass/bourbon/_bourbon-deprecated-upcoming.scss
  23. +79 −0 _sass/bourbon/_bourbon.scss
  24. +374 −0 _sass/bourbon/addons/_button.scss
  25. +23 −0 _sass/bourbon/addons/_clearfix.scss
  26. +111 −0 _sass/bourbon/addons/_directional-values.scss
  27. +7 −0 _sass/bourbon/addons/_ellipsis.scss
  28. +5 −0 _sass/bourbon/addons/_font-family.scss
  29. +10 −0 _sass/bourbon/addons/_hide-text.scss
  30. +86 −0 _sass/bourbon/addons/_html5-input-types.scss
  31. +32 −0 _sass/bourbon/addons/_position.scss
  32. +45 −0 _sass/bourbon/addons/_prefixer.scss
  33. +31 −0 _sass/bourbon/addons/_retina-image.scss
  34. +16 −0 _sass/bourbon/addons/_size.scss
  35. +32 −0 _sass/bourbon/addons/_timing-functions.scss
  36. +83 −0 _sass/bourbon/addons/_triangle.scss
  37. +8 −0 _sass/bourbon/addons/_word-wrap.scss
  38. +52 −0 _sass/bourbon/css3/_animation.scss
  39. +3 −0 _sass/bourbon/css3/_appearance.scss
  40. +6 −0 _sass/bourbon/css3/_backface-visibility.scss
  41. +42 −0 _sass/bourbon/css3/_background-image.scss
  42. +55 −0 _sass/bourbon/css3/_background.scss
  43. +59 −0 _sass/bourbon/css3/_border-image.scss
  44. +22 −0 _sass/bourbon/css3/_border-radius.scss
  45. +4 −0 _sass/bourbon/css3/_box-sizing.scss
  46. +4 −0 _sass/bourbon/css3/_calc.scss
  47. +47 −0 _sass/bourbon/css3/_columns.scss
  48. +5 −0 _sass/bourbon/css3/_filter.scss
  49. +321 −0 _sass/bourbon/css3/_flex-box.scss
  50. +23 −0 _sass/bourbon/css3/_font-face.scss
  51. +10 −0 _sass/bourbon/css3/_font-feature-settings.scss
  52. +10 −0 _sass/bourbon/css3/_hidpi-media-query.scss
  53. +4 −0 _sass/bourbon/css3/_hyphens.scss
  54. +14 −0 _sass/bourbon/css3/_image-rendering.scss
  55. +35 −0 _sass/bourbon/css3/_keyframes.scss
  56. +38 −0 _sass/bourbon/css3/_linear-gradient.scss
  57. +8 −0 _sass/bourbon/css3/_perspective.scss
  58. +8 −0 _sass/bourbon/css3/_placeholder.scss
  59. +39 −0 _sass/bourbon/css3/_radial-gradient.scss
  60. +15 −0 _sass/bourbon/css3/_transform.scss
  61. +77 −0 _sass/bourbon/css3/_transition.scss
  62. +3 −0 _sass/bourbon/css3/_user-select.scss
  63. +11 −0 _sass/bourbon/functions/_assign.scss
  64. +13 −0 _sass/bourbon/functions/_color-lightness.scss
  65. +39 −0 _sass/bourbon/functions/_flex-grid.scss
  66. +3 −0 _sass/bourbon/functions/_golden-ratio.scss
  67. +13 −0 _sass/bourbon/functions/_grid-width.scss
  68. +66 −0 _sass/bourbon/functions/_modular-scale.scss
  69. +13 −0 _sass/bourbon/functions/_px-to-em.scss
  70. +15 −0 _sass/bourbon/functions/_px-to-rem.scss
  71. +5 −0 _sass/bourbon/functions/_strip-units.scss
  72. +9 −0 _sass/bourbon/functions/_tint-shade.scss
  73. +22 −0 _sass/bourbon/functions/_transition-property-name.scss
  74. +17 −0 _sass/bourbon/functions/_unpack.scss
  75. +15 −0 _sass/bourbon/helpers/_convert-units.scss
  76. +13 −0 _sass/bourbon/helpers/_gradient-positions-parser.scss
  77. +8 −0 _sass/bourbon/helpers/_is-num.scss
  78. +25 −0 _sass/bourbon/helpers/_linear-angle-parser.scss
  79. +41 −0 _sass/bourbon/helpers/_linear-gradient-parser.scss
  80. +61 −0 _sass/bourbon/helpers/_linear-positions-parser.scss
  81. +31 −0 _sass/bourbon/helpers/_linear-side-corner-parser.scss
  82. +69 −0 _sass/bourbon/helpers/_radial-arg-parser.scss
  83. +50 −0 _sass/bourbon/helpers/_radial-gradient-parser.scss
  84. +18 −0 _sass/bourbon/helpers/_radial-positions-parser.scss
  85. +26 −0 _sass/bourbon/helpers/_render-gradients.scss
  86. +10 −0 _sass/bourbon/helpers/_shape-size-stripper.scss
  87. +50 −0 _sass/bourbon/helpers/_str-to-num.scss
  88. +1 −0 _sass/bourbon/settings/_asset-pipeline.scss
  89. +6 −0 _sass/bourbon/settings/_prefixer.scss
  90. +1 −0 _sass/bourbon/settings/_px-to-em.scss
  91. +32 −0 about.md
  92. BIN assets/images/author.jpg
  93. BIN assets/images/logo.jpg
  94. +30 −0 feed.xml
  95. +46 −0 index.html
4 .gitignore
@@ -0,0 +1,4 @@
+_site
+.sass-cache
+.jekyll-metadata
+.DS_Store
3 Gemfile
@@ -0,0 +1,3 @@
+gem 'jekyll'
+gem 'jekyll-paginate'
+gem 'jekyll-compose', group: [:jekyll_plugins]
49 Gemfile.lock
@@ -0,0 +1,49 @@
+GEM
+ specs:
+ celluloid (0.16.0)
+ timers (~> 4.0.0)
+ colorator (0.1)
+ ffi (1.9.10)
+ hitimes (1.2.2)
+ jekyll (3.1.2)
+ colorator (~> 0.1)
+ jekyll-sass-converter (~> 1.0)
+ jekyll-watch (~> 1.1)
+ kramdown (~> 1.3)
+ liquid (~> 3.0)
+ mercenary (~> 0.3.3)
+ rouge (~> 1.7)
+ safe_yaml (~> 1.0)
+ jekyll-compose (0.4.1)
+ jekyll (>= 2.5.0)
+ jekyll-paginate (1.1.0)
+ jekyll-sass-converter (1.3.0)
+ sass (~> 3.2)
+ jekyll-watch (1.2.1)
+ listen (~> 2.7)
+ kramdown (1.9.0)
+ liquid (3.0.6)
+ listen (2.10.1)
+ celluloid (~> 0.16.0)
+ rb-fsevent (>= 0.9.3)
+ rb-inotify (>= 0.9)
+ mercenary (0.3.5)
+ rb-fsevent (0.9.5)
+ rb-inotify (0.9.5)
+ ffi (>= 0.5.0)
+ rouge (1.10.1)
+ safe_yaml (1.0.4)
+ sass (3.4.15)
+ timers (4.0.1)
+ hitimes
+
+PLATFORMS
+ ruby
+
+DEPENDENCIES
+ jekyll
+ jekyll-compose
+ jekyll-paginate
+
+BUNDLED WITH
+ 1.10.5
21 LICENSE
@@ -0,0 +1,21 @@
+The Amplify for Jekyll theme is licensed under MIT License (MIT)
+
+Copyright (c) 2016 Adam Geitgey
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
159 README.md
@@ -0,0 +1,159 @@
+# Amplify for Jekyll
+
+*A Jekyll html theme in the vague style of Medium.com built using Google AMP*
+
+Google's [Accelerated Mobile Pages Project](https://www.ampproject.org/)
+(a.k.a. "Google AMP" or Google ⚡) is an open-source project that defines rules
+for creating websites that load nearly instantly even on mobile devices with
+slow connections.
+
+## Why use Google AMP?
+
+There are two reasons to use Google AMP:
+
+First, it's really fast! An often sited claim (by Amazon, Yahoo, Walmart and
+others) is that every extra 100ms improvement in page load time increases
+incremental revenue by up to 1%. Your personal blog might not be selling
+anything, but why settle for a slow page and risk losing readers?
+
+Second, Google might feature your AMP page in Search Results! Google gives
+preferential treatment to AMP pages on Mobile Search. When it displays your
+page in the AMP search results widget, it will even serve your page through
+it's own CDN to make the page load even faster. It's similar to how
+[Facebook Instant Articles](https://instantarticles.fb.com/) works on the
+Facebook platform.
+
+## Getting Started
+
+To use this theme, it's dead simple and just like using any other Jekyll
+template:
+
+*Step 1:* [Install Jekyll](https://jekyllrb.com/docs/installation/)
+
+*Step 2:* Clone this repo to your computer
+
+```bash
+git clone <blah>
+```
+
+*Step 3:* Tweak `_config.yml`.
+
+Just fill in everything in the `# Site settings` section.
+You'll want to set your site's title, your name, your twitter username, etc.
+
+*Step 4:* Run `jekyll serve` and then open
+[http://localhost:4000/](http://localhost:4000/) to see your site!
+
+*Step 5:* Publish your site
+[just like any other Jekyll site](https://jekyllrb.com/docs/deployment-methods/).
+
+## Google AMP Limitations
+
+Google AMP sets many
+[strict limits on what you can include in your web pages](https://www.ampproject.org/docs/get_started/technical_overview.html).
+A few of these are worth talking about:
+
+*Limitation: All CSS must be inline (no external css files).*
+
+Because of this, the main css file for this site is in `_includes/styles.scss`
+instead of in the normal `css/` Jekyll folder. This css file is inlined
+into the header of every page via the special `scssify` filter in `_includes/head.html`.
+
+*Limitation: Size all resources statically*
+
+Every image you include in your page *must* have a height and width. This also
+applies to other things like embedding videos or other resources. Check below
+for more details.
+
+## Writing Posts with Google AMP
+
+Writing posts works
+[just like it does normally in Jekyll](https://jekyllrb.com/docs/posts/)
+except when you want to include extra resources likes pictures, videos,
+embedded Twitter posts, etc.
+
+Google AMP has it's own set of special html tags for including content. You
+should use these instead of normal Markdown or HTML tags.
+
+The two you are are most likely to need are `<amp-img>` and `<amp-youtube>`:
+
+### Images in your posts
+
+```
+<amp-img width="600" height="300" layout="responsive" src="/assets/images/your_picture.jpg"></amp-img>
+```
+
+### Youtube Videos in your posts
+
+```
+<amp-youtube data-videoid="NpEaa2P7qZI" layout="responsive" width="480" height="270"></amp-youtube>
+```
+
+### Embedding other types of content
+
+The AMP Project provides helpers for many other types of content like audio,
+ads, Google Analytics, etc.
+
+* Built-in AMP tags:
+ * https://github.com/ampproject/amphtml/blob/master/builtins/README.md
+
+* Extended AMP tags:
+ * https://github.com/ampproject/amphtml/blob/master/extensions/README.md
+
+## Validating your page with Google AMP
+
+Google AMP adds built-in validation logic to make sure your pages follow all
+the rules so they render as fast as possible.
+
+To check your page, just add `#development=1` to any url on your site and then
+check the javascript console in your browser.
+
+http://localhost:4000/#development=1
+
+You will either see a success message:
+
+```
+Powered by AMP ⚡ HTML – Version 1457112743399
+AMP validation successful.
+```
+
+Or you will see a list of errors to fix:
+
+```
+Powered by AMP ⚡ HTML – Version 1457112743399
+AMP validation had errors:
+The attribute 'style' may not appear in tag 'span'
+The attribute 'style' may not appear in tag 'div'
+```
+
+## Making Google serve your page
+
+Google will cache valid AMP pages if you link to them with one of these urls:
+
+`https://cdn.ampproject.org/c/s/<your page url here>`
+
+Or:
+
+`https://amp.gstatic.com/c/s/<your page url here>`
+
+But keep in mind these two limitations:
+
+1. The caches don't refresh that often. So don't view these urls until your page
+ is done!
+2. Remove `/s` from both urls if your page isn't served over `https://`.
+
+## Required Schema Data
+
+To actually get your page featured in Google search results, it needs to include
+a http://schema.org NewsArticle schema. See `_includes/metadata.json` for the
+version generated by default. You might want to tweak it.
+
+## Credits
+
+This theme is inspired by
+[Mediator by Dirk Fabisch](https://github.com/dirkfabisch/mediator). I used some
+of the css and html from that theme as a starting point. Thanks!
+
+## License
+
+MIT. See LICENSE file in repo.
33 _config.yml
@@ -0,0 +1,33 @@
+# Welcome to Amplified for Jekyll!
+#
+# This config file is meant for settings that affect your whole blog, values
+# which you are expected to set up once and rarely need to edit after that.
+# For technical reasons, this file is *NOT* reloaded automatically when you use
+# 'jekyll serve'. If you change this file, please restart the server process.
+
+# Site settings
+title: Awesome Site Title
+email: your-email@domain.com
+description: >
+ Awesome site description here
+logo: "/assets/images/logo.jpg"
+baseurl: "" # the subpath of your site, e.g. /blog
+url: "http://yourdomain.com" # the base hostname & protocol for your site
+paginate: 5 # The number of posts to show per page on your homepage
+
+name: 'Your Name'
+bio: >
+ Mea suas vituperatoribus et, virtute corpora quaestio cum ut.
+ Ne solet nostrum complectitur pri, vis ut inani populo.
+author_image: "/assets/images/author.jpg"
+twitter_username: jekyllrb
+github_username: jekyll
+
+# Build settings
+markdown: kramdown
+
+kramdown:
+ parse_block_html: true
+
+gems:
+ - jekyll-paginate
7 _includes/footer.html
@@ -0,0 +1,7 @@
+<footer class="site-footer">
+ <a class="subscribe" href="{{ "/feed.xml" | prepend: site.baseurl }}"> <span class="tooltip"> <i class="fa fa-rss"></i> Subscribe!</span></a>
+ <div class="inner">
+ <section class="copyright">All content copyright <a href="mailto:{{ site.email}}">{{ site.name }}</a> &copy; {{ site.time | date: '%Y' }} &bull; All rights reserved.</section>
+ <section class="poweredby">Made with <a href="http://jekyllrb.com"> Jekyll</a> and <a href="https://github.com/ageitgey/amplify">Amplify</a></section>
+ </div>
+</footer>
31 _includes/head.html
@@ -0,0 +1,31 @@
+<head>
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,300,700' rel='stylesheet' type='text/css'>
+ <link href='https://fonts.googleapis.com/css?family=Lora:400,700' rel='stylesheet' type='text/css'>
+ <script async custom-element="amp-youtube" src="https://cdn.ampproject.org/v0/amp-youtube-0.1.js"></script>
+
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width,minimum-scale=1">
+
+ <title>{% if page.title %}{{ page.title | escape }}{% else %}{{ site.title | escape }}{% endif %}</title>
+ <meta name="description" content="{% if page.excerpt %}{{ page.excerpt | strip_html | strip_newlines | truncate: 160 }}{% else %}{{ site.description }}{% endif %}">
+
+ <link rel="canonical" href="{{ page.url | replace:'index.html','' | prepend: site.baseurl | prepend: site.url }}">
+ <link rel="alternate" type="application/rss+xml" title="{{ site.title }}" href="{{ "/feed.xml" | prepend: site.baseurl | prepend: site.url }}">
+
+ <script type="application/ld+json">
+ {% include metadata.json %}
+ </script>
+
+ <style amp-custom>
+ {% capture include_to_scssify %}
+ {% include styles.scss %}
+ {% endcapture %}
+ {{ include_to_scssify | scssify }}
+ </style>
+
+
+
+ <style amp-boilerplate>body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}</style><noscript><style amp-boilerplate>body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style></noscript>
+ <script async src="https://cdn.ampproject.org/v0.js"></script>
+</head>
12 _includes/header.html
@@ -0,0 +1,12 @@
+<header class="site-header">
+ <a href="{{ site.baseurl }}/" class="logo"><span class="logo"><amp-img src="{{ site.logo }}" width="48" height="48" /></span></a>
+
+ <div class="page-links">
+ <a class="page-link" href="{{ site.baseurl }}/">Home</a>
+ {% for my_page in site.pages %}
+ {% if my_page.title %}
+ • <a class="page-link" href="{{ my_page.url | prepend: site.baseurl }}">{{ my_page.title }}</a>
+ {% endif %}
+ {% endfor %}
+ </div>
+</header>
1 _includes/icon-github.html
@@ -0,0 +1 @@
+<a href="https://github.com/{{ include.username }}"><span class="icon icon--github">{% include icon-github.svg %}</span><span class="username">{{ include.username }}</span></a>
1 _includes/icon-github.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16"><path fill="#828282" d="M7.999,0.431c-4.285,0-7.76,3.474-7.76,7.761 c0,3.428,2.223,6.337,5.307,7.363c0.388,0.071,0.53-0.168,0.53-0.374c0-0.184-0.007-0.672-0.01-1.32 c-2.159,0.469-2.614-1.04-2.614-1.04c-0.353-0.896-0.862-1.135-0.862-1.135c-0.705-0.481,0.053-0.472,0.053-0.472 c0.779,0.055,1.189,0.8,1.189,0.8c0.692,1.186,1.816,0.843,2.258,0.645c0.071-0.502,0.271-0.843,0.493-1.037 C4.86,11.425,3.049,10.76,3.049,7.786c0-0.847,0.302-1.54,0.799-2.082C3.768,5.507,3.501,4.718,3.924,3.65 c0,0,0.652-0.209,2.134,0.796C6.677,4.273,7.34,4.187,8,4.184c0.659,0.003,1.323,0.089,1.943,0.261 c1.482-1.004,2.132-0.796,2.132-0.796c0.423,1.068,0.157,1.857,0.077,2.054c0.497,0.542,0.798,1.235,0.798,2.082 c0,2.981-1.814,3.637-3.543,3.829c0.279,0.24,0.527,0.713,0.527,1.437c0,1.037-0.01,1.874-0.01,2.129 c0,0.208,0.14,0.449,0.534,0.373c3.081-1.028,5.302-3.935,5.302-7.362C15.76,3.906,12.285,0.431,7.999,0.431z"/></svg>
5 _includes/icon-twitter.html
@@ -0,0 +1,5 @@
+{% if include.username %}
+<a href="https://twitter.com/{{ include.username }}"><span class="icon icon--twitter">{% include icon-twitter.svg %}</span><span class="username">{{ include.username }}</span></a>
+{% else %}
+<span class="icon icon--twitter">{% include icon-twitter.svg %}</span>
+{% endif %}
1 _includes/icon-twitter.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16"><path fill="#828282" d="M15.969,3.058c-0.586,0.26-1.217,0.436-1.878,0.515c0.675-0.405,1.194-1.045,1.438-1.809c-0.632,0.375-1.332,0.647-2.076,0.793c-0.596-0.636-1.446-1.033-2.387-1.033c-1.806,0-3.27,1.464-3.27,3.27 c0,0.256,0.029,0.506,0.085,0.745C5.163,5.404,2.753,4.102,1.14,2.124C0.859,2.607,0.698,3.168,0.698,3.767 c0,1.134,0.577,2.135,1.455,2.722C1.616,6.472,1.112,6.325,0.671,6.08c0,0.014,0,0.027,0,0.041c0,1.584,1.127,2.906,2.623,3.206 C3.02,9.402,2.731,9.442,2.433,9.442c-0.211,0-0.416-0.021-0.615-0.059c0.416,1.299,1.624,2.245,3.055,2.271 c-1.119,0.877-2.529,1.4-4.061,1.4c-0.264,0-0.524-0.015-0.78-0.046c1.447,0.928,3.166,1.469,5.013,1.469 c6.015,0,9.304-4.983,9.304-9.304c0-0.142-0.003-0.283-0.009-0.423C14.976,4.29,15.531,3.714,15.969,3.058z"/></svg>
30 _includes/metadata.json
@@ -0,0 +1,30 @@
+
+{
+ "@context": "http://schema.org",
+ "@type": "NewsArticle",
+ "mainEntityOfPage": "{{ page.url | replace:'index.html','' | prepend: site.baseurl | prepend: site.url }}",
+ "headline": "{% if page.title %}{{ page.title | escape }}{% else %}{{ site.title | escape }}{% endif %}",
+ "datePublished": "{% if page.date %}{{ page.date | date_to_xmlschema }}{% else %}{{ site.time | date_to_xmlschema }}{% endif %}",
+ "dateModified": "{% if page.date %}{{ page.date | date_to_xmlschema }}{% else %}{{ site.time | date_to_xmlschema }}{% endif %}",
+ "description": "{% if page.excerpt %}{{ page.excerpt | strip_html | strip_newlines | truncate: 160 }}{% else %}{{ site.description }}{% endif %}",
+ "author": {
+ "@type": "Person",
+ "name": "{{ site.name }}"
+ },
+ "publisher": {
+ "@type": "Organization",
+ "name": "{{ site.title }}",
+ "logo": {
+ "@type": "ImageObject",
+ "url": "{{ site.logo | prepend: site.baseurl | prepend: site.url }}",
+ "width": 60,
+ "height": 60
+ }
+ },
+ "image": {
+ "@type": "ImageObject",
+ "url": "{{ site.logo | prepend: site.baseurl | prepend: site.url }}",
+ "height": 60,
+ "width": 60
+ }
+}
509 _includes/styles.scss
@@ -0,0 +1,509 @@
+@import 'bourbon/bourbon';
+@import 'syntax-highlighting';
+
+$grey-color: #828282;
+
+.icon {
+
+ > svg {
+ display: inline-block;
+ width: 16px;
+ height: 16px;
+ vertical-align: middle;
+
+ path {
+ fill: $grey-color;
+ }
+ }
+}
+
+amp-img {
+ background-color: grey;
+}
+
+.cf {
+ @include clearfix;
+}
+
+$rs: 16px;
+
+$font-serif: Georgia,Cambria,"Times New Roman",Times,'Lora', serif;
+$font-sans: "Helvetica Neue", 'Open Sans', Arial, Helvetica, sans-serif;
+
+@mixin respond-to($breakpoint) {
+ @media only screen and (max-width: $breakpoint + px) {
+ @content;
+ }
+}
+
+// Only needed for syntax highlighting
+%vertical-rhythm {
+ margin-bottom: $rs;
+}
+
+main {
+ display: block;
+}
+
+body {
+ font-family: $font-sans;
+ margin: 0;
+ padding: 0;
+ text-rendering: optimizeLegibility;
+ -webkit-font-smoothing: antialiased;
+ -moz-font-feature-settings: "liga=1, dlig=1";
+ -ms-font-feature-settings: "liga", "dlig";
+ -webkit-font-feature-settings: "liga", "dlig";
+ -o-font-feature-settings: "liga", "dlig";
+ font-feature-settings: "liga", "dlig";
+}
+
+.site-header {
+ position: relative;
+ width: 100%;
+ max-width: 700px;
+ margin: 16px auto 0 auto;
+ @include box-sizing(border-box);
+ @include respond-to(800) {
+ padding: 0 $rs * 1;
+ }
+
+ .page-links {
+ display: block;
+ position: absolute;
+ top: 10px;
+ right: $rs;
+ font-weight: 200;
+ font-style: normal;
+ font-size: 18px;
+ line-height: 30px;
+
+ a {
+ text-decoration: none;
+ color: #999999;
+ &:hover {
+ color: #333333;
+ }
+ }
+ }
+
+}
+
+.blog-header {
+ width: 100%;
+ max-width: 700px;
+ margin: 0 auto;
+ position: relative;
+ padding: 0;
+ @include box-sizing(border-box);
+
+ .blog-title {
+ margin-bottom: 8px;
+ font-size: 50px;
+ font-weight: 700;
+ letter-spacing: -2px;
+ outline: 0;
+ line-height: 50px;
+ word-break: break-word;
+ color: #333333;
+ }
+ .blog-description {
+ font-size: 28px;
+ margin: 0 0 20px;
+ padding: 0;
+ line-height: 1.2;
+ color: #666666;
+ font-weight: 300;
+ }
+}
+
+.content {
+ width: 100%;
+ max-width: 700px;
+ margin: 25px auto 0 auto;
+ @include box-sizing(border-box);
+ @include respond-to(800) {
+ padding: 0 $rs * 1;
+ }
+
+ article {
+ padding: 20px 0;
+ border-bottom: 1px solid #f2f2f0;
+ &:last-child {
+ border-bottom: 0px;
+ }
+ .post-title {
+ letter-spacing: -0.02em;
+ font-weight: 700;
+ font-style: normal;
+ display: block;
+ font-size: 36px;
+ line-height: 1.15;
+ margin: 0 0;
+ a {
+ text-decoration: none;
+ color: #333332;
+ &:hover {
+ text-decoration: none;
+ }
+ }
+ }
+ .post-excerpt {
+ letter-spacing: -0.02em;
+ font-weight: 300;
+ font-style: normal;
+ font-size: 20px;
+ line-height: 1.59;
+ color: #666665;
+ }
+ .post-meta {
+ font-size: 14px;
+ color: #b3b3b1;
+ line-height: 30px;
+ a {
+ color: #b3b3b1;
+ text-decoration: none;
+ &:hover {
+ text-decoration: underline;
+ }
+ }
+ }
+ }
+}
+
+.post-template .content {
+ max-width: 700px;
+}
+
+.index-headline {
+ border-top: 1px solid #dededc;
+ margin: 0;
+ padding: 16px 0;
+ span {
+ color: #b3b3b1;
+ font-size: $rs / 8 * 5;
+ text-transform: uppercase;
+ letter-spacing: 1px;
+ }
+}
+
+.pagination {
+ text-align: center;
+ padding: $rs * 1 0 0;
+ font-size: $rs / 4 * 3;
+ a {
+ color: #999999;
+ text-decoration: none;
+ &:hover {
+ color: #333333;
+ }
+ }
+}
+
+.site-footer {
+ margin: 0 auto;
+ padding: $rs * 3 0;
+ width: 100%;
+ max-width: 700px;
+ font-size: $rs / 4 * 3;
+ text-align: center;
+ color: #999999;
+ line-height: $rs * 1.1;
+ a {
+ color: #666666;
+ text-decoration: none;
+ &:hover {
+ color: #333333;
+ }
+ }
+}
+
+.post {
+ .post-meta {
+ font-family: $font-sans;
+ }
+ .post-title {
+ font-weight: 700;
+ font-style: normal;
+ letter-spacing: -0.04em;
+ font-size: 50px;
+ line-height: 1.1;
+ color: #333332;
+ margin-bottom: 50px;
+ }
+ .author-image {
+ background-image: url({{site.author_image}});
+ display: inline-block;
+ width: 30px;
+ height: 30px;
+ line-height: 30px;
+ margin-right: 8px;
+ margin-bottom: -10px;
+ float: left;
+ background-size: cover;
+ border-radius: 100%;
+ text-indent: -9999px;
+ }
+ .post-meta-text {
+ color: #b3b3b1;
+ letter-spacing: -0.02em;
+ font-weight: 400;
+ font-style: normal;
+ font-size: 14px;
+ overflow: hidden;
+ font-family: $font-sans;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ }
+
+ .post-content {
+ width: 100%;
+ font-family: $font-serif;
+ color: #333333;
+ h1, h2, h3 {
+ font-family: $font-sans;
+ }
+ h3, h4, h5, h6 {
+ letter-spacing: -0.02em;
+ font-weight: 700;
+ font-style: normal;
+ font-size: 24px;
+ line-height: 1.3;
+ margin-top: 50px;
+ margin-bottom: 0px;
+ font-family: $font-sans;
+ }
+ h3 {
+ font-size: 36px;
+ }
+ h2, h1 {
+ letter-spacing: -0.02em;
+ font-weight: 700;
+ font-style: normal;
+ font-size: 42px;
+ line-height: 1.2;
+ margin-top: 50px;
+ margin-bottom: 0px;
+ }
+ p {
+ font-weight: 400;
+ font-style: normal;
+ font-size: 22px;
+ line-height: 1.59;
+ letter-spacing: -.002em;
+ margin-top: 30px;
+ margin-bottom: 0;
+ color: #333333;
+ -webkit-hyphens: auto;
+ -moz-hyphens: auto;
+ hyphens: auto;
+ }
+ a {
+ color: #333333;
+ text-decoration: underline;
+ }
+ amp-img, amp-youtube {
+ margin-top: 30px;
+ }
+ figure {
+ margin: 0;
+ padding: 0 0 30px;
+ }
+ figcaption {
+ font-weight: 400;
+ font-style: italic;
+ font-size: 16px;
+ line-height: 1.3;
+ color: #666665;
+ outline: 0;
+ z-index: 300;
+ text-align: center;
+ }
+ hr {
+ border: 0;
+ padding: 0;
+ display: block;
+ width: 15%;
+ margin: 30px auto;
+ border: 0px solid #dddddd;
+ border-top: 1px solid #dddddd;
+ }
+ blockquote {
+ margin: 0 0 30px;
+ margin-left: -26px;
+ border-left: 3px solid #57ad68;
+ padding-left: 20px;
+ p {
+ letter-spacing: 0.01rem;
+ font-weight: 400;
+ mborder-left: 3px solid #57ad68;
+ mpadding-left: 20px;
+ mmargin-left: -26px;
+ padding-bottom: 3px;
+ }
+ }
+ ul, ol {
+ padding: 0 0 30px;
+ margin: 0;
+ }
+ li {
+ padding: 0;
+ font-weight: 400;
+ font-style: normal;
+ font-size: 23px;
+ line-height: 30px;
+ margin-left: 30px;
+ margin-bottom: 12px;
+ padding-top: 2px;
+ p {
+ padding: 0 0 golden-ratio(1rem, 1);
+ }
+ }
+ ol li {
+ list-style-type: decimal;
+ }
+ }
+ .bottom-teaser {
+ padding: 50px 0 0 0;
+ font-family: $font-sans;
+ hr {
+ border: 0;
+ padding: 0;
+ display: block;
+ width: 15%;
+ margin: 16px 0 16px 100px;
+ border: 0px solid #dddddd;
+ border-top: 1px solid #dddddd;
+ }
+ .isLeft {
+ float: left;
+ width: 47%;
+ @include box-sizing(border-box);
+ @include respond-to(800) {
+ width: 100%;
+ padding-bottom: $rs * 2;
+ }
+ .bio {
+ margin-top: 18px;
+ margin-bottom: 18px;
+ }
+ .username {
+ margin-left: 4px;
+ margin-right: 18px;
+ margin-bottom: 18px;
+ }
+ .index-headline {
+ padding-bottom: 32px;
+ }
+ a {
+ color: black;
+ text-decoration: none;
+ &:hover {
+ color: #333333;
+ text-decoration: underline;
+ }
+ }
+ .author-image {
+ display: block;
+ width: 80px;
+ height: 80px;
+ float: left;
+ background-size: cover;
+ border-radius: 100%;
+ text-indent: -9999px;
+ }
+ h4 {
+ font-size: 18px;
+ line-height: 1.1;
+ font-weight: 700;
+ padding: 0;
+ margin: 0;
+ padding-left: 100px;
+ }
+ p {
+ font-size: 14px;
+ line-height: 1.3;
+ font-weight: 400;
+ padding: 0;
+ margin: 0;
+ padding-left: 100px;
+ &.published {
+ color: #999999;
+ }
+ }
+ }
+ .isRight {
+ float: right;
+ width: 47%;
+ @include box-sizing(border-box);
+ @include respond-to(800) {
+ width: 100%;
+ }
+
+ .index-headline {
+ padding-bottom: 32px;
+ }
+ .site-footer {
+ margin: 0;
+ padding: 0;
+ color: #333333;
+ text-align: left;
+ font-size: 14px;
+ line-height: 1.3;
+ color: #999999;
+ a {
+ color: #333333;
+ text-decoration: none;
+ &:hover {
+ text-decoration: underline;
+ }
+ }
+ .poweredby {
+ display: block;
+ padding-bottom: 18px;
+ font-weight: 700;
+ color: #333333;
+ }
+ }
+ }
+ }
+}
+
+.share {
+ text-align: right;
+ padding: 20px 0 0;
+ a {
+ text-decoration: none;
+ color: #bbbbbb;
+ padding-left: 12px;
+ .hidden {
+ display: none;
+ }
+ &:hover {
+ color: #333333;
+ }
+ }
+}
+
+
+pre,
+code {
+ font-size: 15px;
+ border: 1px solid #e8e8e8;
+ border-radius: 3px;
+ background-color: #eeeeff;
+}
+
+code {
+ padding: 1px 5px;
+}
+
+pre {
+ padding: 8px 12px;
+ overflow-x: scroll;
+ > code {
+ border: 0;
+ padding-right: 0;
+ padding-left: 0;
+ }
+}
9 _layouts/default.html
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<htmllang="en">
+ {% include head.html %}
+ <body>
+ {% include header.html %}
+
+ {{ content }}
+ </body>
+</html>
16 _layouts/page.html
@@ -0,0 +1,16 @@
+---
+layout: default
+---
+<main class="content" role="main">
+ <article class="post">
+ <div class="post-meta">
+ <h1 class="post-title">{{ page.title }}</h1>
+ </div>
+ <section class="post-content">
+ <a name="topofpage"></a>
+ {{content}}
+ </section>
+ </article>
+</main>
+
+{% include footer.html %}
60 _layouts/post.html
@@ -0,0 +1,60 @@
+---
+layout: default
+---
+<main class="content" role="main">
+ <article class="post">
+ <div class="post-meta">
+ <h1 class="post-title">{{ page.title }}</h1>
+ </div>
+
+ <section class="post-content">
+ <a name="topofpage"></a>
+ {{content}}
+ </section>
+ <footer class="post-footer">
+ <section class="share">
+ <a class="icon" href="http://twitter.com/share?text={{page.title | cgi_escape}}&amp;url={{site.url}}{{page.id}}" target="_blank">
+ Share on
+ {% include icon-twitter.html %}
+ </a>
+ </section>
+ </footer>
+ <div class="bottom-teaser cf">
+ <div class="isLeft">
+ <h5 class="index-headline featured"><span>Written by</span></h5>
+ <section class="author">
+ <div class="author-image"></div>
+ <h4>{{ site.name }}</h4>
+ <p class="bio">{{site.bio}}</p>
+
+ <p>
+ <span>
+ {% if site.github_username %}
+ {% include icon-github.html username=site.github_username %}
+ {% endif %}
+ </span>
+
+ <span>
+ {% if site.twitter_username %}
+ {% include icon-twitter.html username=site.twitter_username %}
+ {% endif %}
+ </span>
+ </p>
+ <hr>
+ <p class="published">Published <time datetime="{{ page.date | date: "%F %R" }}">{{ page.date | date_to_string }}</time></p>
+ </section>
+ </div>
+ {{/post}}
+ <div class="isRight">
+ <h5 class="index-headline featured"><span>Supported by</span></h5>
+ <footer class="site-footer">
+ <section class="poweredby">Proudly published with <a href="http://jekyllrb.com"> Jekyll</a> and <a href="https://github.com/ageitgey/amplify">Amplify</a></section>
+ <a class="subscribe" href="{{ "/feed.xml" | prepend: site.baseurl }}"> <span class="tooltip"> <i class="fa fa-rss"></i> You should subscribe to my feed.</span></a>
+ <div class="inner">
+ <section class="copyright">All content copyright <a href="mailto:{{ site.email}}">{{site.name}}</a> &copy; {{ site.time | date: '%Y' }}<br>All rights reserved.</section>
+ </div>
+ </footer>
+ </div>
+ </div>
+ </article>
+</main>
26 _posts/2016-03-08-example-post.md
@@ -0,0 +1,26 @@
+---
+layout: post
+title: Ea eam nibh persecuti, partem habemus nominavi
+---
+
+At labitur probatus eum, qui modo idque partem ne, ea has oratio sanctus cotidieque. Dicta persecuti sit ex. Discere facilis recteque sit no, in eripuit volumus adversarium vim. Ad sed meis nulla accusata. Ex posse accusam maluisset mei, id vix ignota cetero inimicus.
+
+> Nec amet pericula dissentiet...
+>
+> Nam liber tritani ei, urbanitas tincidunt usu et. Odio voluptua gubergren at cum. An porro mucius tibique nam, cu usu everti dignissim assueverit. Docendi patrioque constituto te sit. Qui lorem soluta ea, commune deserunt sed id. Accusam commune cotidieque his ea.
+
+Pro hinc copiosae an, ad ius salutandi expetendis. Quo suavitate intellegat forensibus an. Sonet meliore consetetur te sea, in eam decore utroque, dicat verear et sit. Pro aperiam pertinax splendide id, IUS STET ELEIFEND INTELLEGAM ID.
+
+<amp-img width="600" height="300" layout="responsive" src="http://lorempixel.com/600/300/people"></amp-img>
+
+Ea ullamcorper intellegebat pri!
+
+### Vix cu alienum evertitur
+
+Mea suas vituperatoribus et, virtute corpora quaestio cum ut. Ne solet nostrum complectitur pri, vis ut inani populo. Ad eligendi vituperata sadipscing pro, ad mea modo meis philosophia, an eos consul impedit qualisque. Eruditi reprimique id eum, in tincidunt percipitur vis.
+
+<amp-youtube data-videoid="NpEaa2P7qZI" layout="responsive" width="480" height="270"></amp-youtube>
+
+Ne ius nominavi verterem. Principes voluptaria pro at. Sint mediocrem cum ea, his purto dicat scaevola ad. Per quem magna gubergren id, pri in noluisse salutatus imperdiet. In postea consequat percipitur vis, nam postea commodo lobortis an, ut atqui antiopam eloquentiam eum.
+
+> Erat officiis probatus eam ea, nibh legere insolens ad sit. Nec alii dicam ad, cibo regione per no. Verear invenire ut usu, nec mazim euripidis in. Molestie placerat id quo, quo dissentias complectitur ex. Ex probatus principes efficiantur pro, possit perfecto ut eum. Vix ei summo perpetua, enim adhuc vix ei, sed in homero delicata periculis. Praesent intellegat qui ne.
18 _posts/2016-03-13-my-new-post.md
@@ -0,0 +1,18 @@
+---
+layout: post
+title: My New Post
+---
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit!
+
+<amp-img width="600" height="500" layout="responsive" src="http://lorempixel.com/600/500/transport"></amp-img>
+
+Nulla dapibus vestibulum ligula in sodales. Phasellus eu metus quam. Sed id varius diam. Morbi pellentesque lorem vitae ex commodo, sed dapibus ex dignissim. Etiam facilisis pellentesque gravida. Sed tempus diam sed odio tempor, tristique elementum erat condimentum. Ut volutpat dui ex, a auctor dolor pretium eget.
+
+Vivamus nec mauris suscipit enim viverra tristique ut eget risus. Vestibulum ullamcorper at sem eu sodales. Praesent felis tellus, condimentum vitae purus id, consectetur interdum urna. Pellentesque laoreet non arcu volutpat euismod. Suspendisse sed enim non ex interdum sodales. Quisque vitae vestibulum turpis. Aenean nec est dolor.
+
+> Pellentesque quis mi at erat iaculis cursus. Phasellus ligula neque, pulvinar sed malesuada id, feugiat ac magna. Proin sed scelerisque metus. Pellentesque mi augue, egestas nec ante a, faucibus ullamcorper enim. Sed nisi felis, rutrum imperdiet aliquam nec, placerat vel odio. Nulla quis urna ut risus aliquam tempor.
+
+<amp-img width="600" height="300" layout="responsive" src="http://lorempixel.com/600/300/transport"></amp-img>
+
+Nulla mi risus, lobortis quis lectus vel, gravida eleifend lacus. Proin mattis odio elit, nec vehicula diam varius vitae. Nunc a ipsum at justo rhoncus mattis. Proin auctor lorem quis libero viverra aliquam. Suspendisse quis tristique sapien. Integer eu felis vel orci dignissim suscipit pharetra vitae nisl. Ut viverra sed enim quis pretium. Etiam auctor a ante sed pharetra.
70 _sass/_syntax-highlighting.scss
@@ -0,0 +1,70 @@
+/**
+ * Syntax highlighting styles
+ */
+.highlight {
+ background: #fff;
+
+ .highlighter-rouge & {
+ background: #eef;
+ }
+
+ .c { color: #998; font-style: italic } // Comment
+ .err { color: #a61717; background-color: #e3d2d2 } // Error
+ .k { font-weight: bold } // Keyword
+ .o { font-weight: bold } // Operator
+ .cm { color: #998; font-style: italic } // Comment.Multiline
+ .cp { color: #999; font-weight: bold } // Comment.Preproc
+ .c1 { color: #998; font-style: italic } // Comment.Single
+ .cs { color: #999; font-weight: bold; font-style: italic } // Comment.Special
+ .gd { color: #000; background-color: #fdd } // Generic.Deleted
+ .gd .x { color: #000; background-color: #faa } // Generic.Deleted.Specific
+ .ge { font-style: italic } // Generic.Emph
+ .gr { color: #a00 } // Generic.Error
+ .gh { color: #999 } // Generic.Heading
+ .gi { color: #000; background-color: #dfd } // Generic.Inserted
+ .gi .x { color: #000; background-color: #afa } // Generic.Inserted.Specific
+ .go { color: #888 } // Generic.Output
+ .gp { color: #555 } // Generic.Prompt
+ .gs { font-weight: bold } // Generic.Strong
+ .gu { color: #aaa } // Generic.Subheading
+ .gt { color: #a00 } // Generic.Traceback
+ .kc { font-weight: bold } // Keyword.Constant
+ .kd { font-weight: bold } // Keyword.Declaration
+ .kp { font-weight: bold } // Keyword.Pseudo
+ .kr { font-weight: bold } // Keyword.Reserved
+ .kt { color: #458; font-weight: bold } // Keyword.Type
+ .m { color: #099 } // Literal.Number
+ .s { color: #d14 } // Literal.String
+ .na { color: #008080 } // Name.Attribute
+ .nb { color: #0086B3 } // Name.Builtin
+ .nc { color: #458; font-weight: bold } // Name.Class
+ .no { color: #008080 } // Name.Constant
+ .ni { color: #800080 } // Name.Entity
+ .ne { color: #900; font-weight: bold } // Name.Exception
+ .nf { color: #900; font-weight: bold } // Name.Function
+ .nn { color: #555 } // Name.Namespace
+ .nt { color: #000080 } // Name.Tag
+ .nv { color: #008080 } // Name.Variable
+ .ow { font-weight: bold } // Operator.Word
+ .w { color: #bbb } // Text.Whitespace
+ .mf { color: #099 } // Literal.Number.Float
+ .mh { color: #099 } // Literal.Number.Hex
+ .mi { color: #099 } // Literal.Number.Integer
+ .mo { color: #099 } // Literal.Number.Oct
+ .sb { color: #d14 } // Literal.String.Backtick
+ .sc { color: #d14 } // Literal.String.Char
+ .sd { color: #d14 } // Literal.String.Doc
+ .s2 { color: #d14 } // Literal.String.Double
+ .se { color: #d14 } // Literal.String.Escape
+ .sh { color: #d14 } // Literal.String.Heredoc
+ .si { color: #d14 } // Literal.String.Interpol
+ .sx { color: #d14 } // Literal.String.Other
+ .sr { color: #009926 } // Literal.String.Regex
+ .s1 { color: #d14 } // Literal.String.Single
+ .ss { color: #990073 } // Literal.String.Symbol
+ .bp { color: #999 } // Name.Builtin.Pseudo
+ .vc { color: #008080 } // Name.Variable.Class
+ .vg { color: #008080 } // Name.Variable.Global
+ .vi { color: #008080 } // Name.Variable.Instance
+ .il { color: #099 } // Literal.Number.Integer.Long
+}
8 _sass/bourbon/_bourbon-deprecated-upcoming.scss
@@ -0,0 +1,8 @@
+//************************************************************************//
+// These mixins/functions are deprecated
+// They will be removed in the next MAJOR version release
+//************************************************************************//
+@mixin inline-block {
+ display: inline-block;
+ @warn "inline-block mixin is deprecated and will be removed in the next major version release";
+}
79 _sass/bourbon/_bourbon.scss
@@ -0,0 +1,79 @@
+// Settings
+@import "settings/prefixer";
+@import "settings/px-to-em";
+@import "settings/asset-pipeline";
+
+// Custom Helpers
+@import "helpers/convert-units";
+@import "helpers/gradient-positions-parser";
+@import "helpers/is-num";
+@import "helpers/linear-angle-parser";
+@import "helpers/linear-gradient-parser";
+@import "helpers/linear-positions-parser";
+@import "helpers/linear-side-corner-parser";
+@import "helpers/radial-arg-parser";
+@import "helpers/radial-positions-parser";
+@import "helpers/radial-gradient-parser";
+@import "helpers/render-gradients";
+@import "helpers/shape-size-stripper";
+@import "helpers/str-to-num";
+
+// Custom Functions
+@import "functions/assign";
+@import "functions/color-lightness";
+@import "functions/flex-grid";
+@import "functions/golden-ratio";
+@import "functions/grid-width";
+@import "functions/modular-scale";
+@import "functions/px-to-em";
+@import "functions/px-to-rem";
+@import "functions/strip-units";
+@import "functions/tint-shade";
+@import "functions/transition-property-name";
+@import "functions/unpack";
+
+// CSS3 Mixins
+@import "css3/animation";
+@import "css3/appearance";
+@import "css3/backface-visibility";
+@import "css3/background";
+@import "css3/background-image";
+@import "css3/border-image";
+@import "css3/border-radius";
+@import "css3/box-sizing";
+@import "css3/calc";
+@import "css3/columns";
+@import "css3/filter";
+@import "css3/flex-box";
+@import "css3/font-face";
+@import "css3/font-feature-settings";
+@import "css3/hyphens";
+@import "css3/hidpi-media-query";
+@import "css3/image-rendering";
+@import "css3/keyframes";
+@import "css3/linear-gradient";
+@import "css3/perspective";
+@import "css3/radial-gradient";
+@import "css3/transform";
+@import "css3/transition";
+@import "css3/user-select";
+@import "css3/placeholder";
+
+// Addons & other mixins
+@import "addons/button";
+@import "addons/clearfix";
+@import "addons/directional-values";
+@import "addons/ellipsis";
+@import "addons/font-family";
+@import "addons/hide-text";
+@import "addons/html5-input-types";
+@import "addons/position";
+@import "addons/prefixer";
+@import "addons/retina-image";
+@import "addons/size";
+@import "addons/timing-functions";
+@import "addons/triangle";
+@import "addons/word-wrap";
+
+// Soon to be deprecated Mixins
+@import "bourbon-deprecated-upcoming";
374 _sass/bourbon/addons/_button.scss
@@ -0,0 +1,374 @@
+@mixin button ($style: simple, $base-color: #4294f0, $text-size: inherit, $padding: 7px 18px) {
+
+ @if type-of($style) == string and type-of($base-color) == color {
+ @include buttonstyle($style, $base-color, $text-size, $padding);
+ }
+
+ @if type-of($style) == string and type-of($base-color) == number {
+ $padding: $text-size;
+ $text-size: $base-color;
+ $base-color: #4294f0;
+
+ @if $padding == inherit {
+ $padding: 7px 18px;
+ }
+
+ @include buttonstyle($style, $base-color, $text-size, $padding);
+ }
+
+ @if type-of($style) == color and type-of($base-color) == color {
+ $base-color: $style;
+ $style: simple;
+ @include buttonstyle($style, $base-color, $text-size, $padding);
+ }
+
+ @if type-of($style) == color and type-of($base-color) == number {
+ $padding: $text-size;
+ $text-size: $base-color;
+ $base-color: $style;
+ $style: simple;
+
+ @if $padding == inherit {
+ $padding: 7px 18px;
+ }
+
+ @include buttonstyle($style, $base-color, $text-size, $padding);
+ }
+
+ @if type-of($style) == number {
+ $padding: $base-color;
+ $text-size: $style;
+ $base-color: #4294f0;
+ $style: simple;
+
+ @if $padding == #4294f0 {
+ $padding: 7px 18px;
+ }
+
+ @include buttonstyle($style, $base-color, $text-size, $padding);
+ }
+
+ &:disabled {
+ opacity: 0.5;
+ cursor: not-allowed;
+ }
+}
+
+
+// Selector Style Button
+//************************************************************************//
+@mixin buttonstyle($type, $b-color, $t-size, $pad) {
+ // Grayscale button
+ @if $type == simple and $b-color == grayscale($b-color) {
+ @include simple($b-color, true, $t-size, $pad);
+ }
+
+ @if $type == shiny and $b-color == grayscale($b-color) {
+ @include shiny($b-color, true, $t-size, $pad);
+ }
+
+ @if $type == pill and $b-color == grayscale($b-color) {
+ @include pill($b-color, true, $t-size, $pad);
+ }
+
+ @if $type == flat and $b-color == grayscale($b-color) {
+ @include flat($b-color, true, $t-size, $pad);
+ }
+
+ // Colored button
+ @if $type == simple {
+ @include simple($b-color, false, $t-size, $pad);
+ }
+
+ @else if $type == shiny {
+ @include shiny($b-color, false, $t-size, $pad);
+ }
+
+ @else if $type == pill {
+ @include pill($b-color, false, $t-size, $pad);
+ }
+
+ @else if $type == flat {
+ @include flat($b-color, false, $t-size, $pad);
+ }
+}
+
+
+// Simple Button
+//************************************************************************//
+@mixin simple($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) {
+ $color: hsl(0, 0, 100%);
+ $border: adjust-color($base-color, $saturation: 9%, $lightness: -14%);
+ $inset-shadow: adjust-color($base-color, $saturation: -8%, $lightness: 15%);
+ $stop-gradient: adjust-color($base-color, $saturation: 9%, $lightness: -11%);
+ $text-shadow: adjust-color($base-color, $saturation: 15%, $lightness: -18%);
+
+ @if is-light($base-color) {
+ $color: hsl(0, 0, 20%);
+ $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%);
+ }
+
+ @if $grayscale == true {
+ $border: grayscale($border);
+ $inset-shadow: grayscale($inset-shadow);
+ $stop-gradient: grayscale($stop-gradient);
+ $text-shadow: grayscale($text-shadow);
+ }
+
+ border: 1px solid $border;
+ border-radius: 3px;
+ box-shadow: inset 0 1px 0 0 $inset-shadow;
+ color: $color;
+ display: inline-block;
+ font-size: $textsize;
+ font-weight: bold;
+ @include linear-gradient ($base-color, $stop-gradient);
+ padding: $padding;
+ text-decoration: none;
+ text-shadow: 0 1px 0 $text-shadow;
+ background-clip: padding-box;
+
+ &:hover:not(:disabled) {
+ $base-color-hover: adjust-color($base-color, $saturation: -4%, $lightness: -5%);
+ $inset-shadow-hover: adjust-color($base-color, $saturation: -7%, $lightness: 5%);
+ $stop-gradient-hover: adjust-color($base-color, $saturation: 8%, $lightness: -14%);
+
+ @if $grayscale == true {
+ $base-color-hover: grayscale($base-color-hover);
+ $inset-shadow-hover: grayscale($inset-shadow-hover);
+ $stop-gradient-hover: grayscale($stop-gradient-hover);
+ }
+
+ box-shadow: inset 0 1px 0 0 $inset-shadow-hover;
+ cursor: pointer;
+ @include linear-gradient ($base-color-hover, $stop-gradient-hover);
+ }
+
+ &:active:not(:disabled),
+ &:focus:not(:disabled) {
+ $border-active: adjust-color($base-color, $saturation: 9%, $lightness: -14%);
+ $inset-shadow-active: adjust-color($base-color, $saturation: 7%, $lightness: -17%);
+
+ @if $grayscale == true {
+ $border-active: grayscale($border-active);
+ $inset-shadow-active: grayscale($inset-shadow-active);
+ }
+
+ border: 1px solid $border-active;
+ box-shadow: inset 0 0 8px 4px $inset-shadow-active, inset 0 0 8px 4px $inset-shadow-active;
+ }
+}
+
+
+// Shiny Button
+//************************************************************************//
+@mixin shiny($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) {
+ $color: hsl(0, 0, 100%);
+ $border: adjust-color($base-color, $red: -117, $green: -111, $blue: -81);
+ $border-bottom: adjust-color($base-color, $red: -126, $green: -127, $blue: -122);
+ $fourth-stop: adjust-color($base-color, $red: -79, $green: -70, $blue: -46);
+ $inset-shadow: adjust-color($base-color, $red: 37, $green: 29, $blue: 12);
+ $second-stop: adjust-color($base-color, $red: -56, $green: -50, $blue: -33);
+ $text-shadow: adjust-color($base-color, $red: -140, $green: -141, $blue: -114);
+ $third-stop: adjust-color($base-color, $red: -86, $green: -75, $blue: -48);
+
+ @if is-light($base-color) {
+ $color: hsl(0, 0, 20%);
+ $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%);
+ }
+
+ @if $grayscale == true {
+ $border: grayscale($border);
+ $border-bottom: grayscale($border-bottom);
+ $fourth-stop: grayscale($fourth-stop);
+ $inset-shadow: grayscale($inset-shadow);
+ $second-stop: grayscale($second-stop);
+ $text-shadow: grayscale($text-shadow);
+ $third-stop: grayscale($third-stop);
+ }
+
+ border: 1px solid $border;
+ border-bottom: 1px solid $border-bottom;
+ border-radius: 5px;
+ box-shadow: inset 0 1px 0 0 $inset-shadow;
+ color: $color;
+ display: inline-block;
+ font-size: $textsize;
+ font-weight: bold;
+ @include linear-gradient(top, $base-color 0%, $second-stop 50%, $third-stop 50%, $fourth-stop 100%);
+ padding: $padding;
+ text-align: center;
+ text-decoration: none;
+ text-shadow: 0 -1px 1px $text-shadow;
+
+ &:hover:not(:disabled) {
+ $first-stop-hover: adjust-color($base-color, $red: -13, $green: -15, $blue: -18);
+ $second-stop-hover: adjust-color($base-color, $red: -66, $green: -62, $blue: -51);
+ $third-stop-hover: adjust-color($base-color, $red: -93, $green: -85, $blue: -66);
+ $fourth-stop-hover: adjust-color($base-color, $red: -86, $green: -80, $blue: -63);
+
+ @if $grayscale == true {
+ $first-stop-hover: grayscale($first-stop-hover);
+ $second-stop-hover: grayscale($second-stop-hover);
+ $third-stop-hover: grayscale($third-stop-hover);
+ $fourth-stop-hover: grayscale($fourth-stop-hover);
+ }
+
+ cursor: pointer;
+ @include linear-gradient(top, $first-stop-hover 0%,
+ $second-stop-hover 50%,
+ $third-stop-hover 50%,
+ $fourth-stop-hover 100%);
+ }
+
+ &:active:not(:disabled),
+ &:focus:not(:disabled) {
+ $inset-shadow-active: adjust-color($base-color, $red: -111, $green: -116, $blue: -122);
+
+ @if $grayscale == true {
+ $inset-shadow-active: grayscale($inset-shadow-active);
+ }
+
+ box-shadow: inset 0 0 20px 0 $inset-shadow-active;
+ }
+}
+
+
+// Pill Button
+//************************************************************************//
+@mixin pill($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) {
+ $color: hsl(0, 0, 100%);
+ $border-bottom: adjust-color($base-color, $hue: 8, $saturation: -11%, $lightness: -26%);
+ $border-sides: adjust-color($base-color, $hue: 4, $saturation: -21%, $lightness: -21%);
+ $border-top: adjust-color($base-color, $hue: -1, $saturation: -30%, $lightness: -15%);
+ $inset-shadow: adjust-color($base-color, $hue: -1, $saturation: -1%, $lightness: 7%);
+ $stop-gradient: adjust-color($base-color, $hue: 8, $saturation: 14%, $lightness: -10%);
+ $text-shadow: adjust-color($base-color, $hue: 5, $saturation: -19%, $lightness: -15%);
+
+ @if is-light($base-color) {
+ $color: hsl(0, 0, 20%);
+ $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%);
+ }
+
+ @if $grayscale == true {
+ $border-bottom: grayscale($border-bottom);
+ $border-sides: grayscale($border-sides);
+ $border-top: grayscale($border-top);
+ $inset-shadow: grayscale($inset-shadow);
+ $stop-gradient: grayscale($stop-gradient);
+ $text-shadow: grayscale($text-shadow);
+ }
+
+ border: 1px solid $border-top;
+ border-color: $border-top $border-sides $border-bottom;
+ border-radius: 16px;
+ box-shadow: inset 0 1px 0 0 $inset-shadow;
+ color: $color;
+ display: inline-block;
+ font-size: $textsize;
+ font-weight: normal;
+ line-height: 1;
+ @include linear-gradient ($base-color, $stop-gradient);
+ padding: $padding;
+ text-align: center;
+ text-decoration: none;
+ text-shadow: 0 -1px 1px $text-shadow;
+ background-clip: padding-box;
+
+ &:hover:not(:disabled) {
+ $base-color-hover: adjust-color($base-color, $lightness: -4.5%);
+ $border-bottom: adjust-color($base-color, $hue: 8, $saturation: 13.5%, $lightness: -32%);
+ $border-sides: adjust-color($base-color, $hue: 4, $saturation: -2%, $lightness: -27%);
+ $border-top: adjust-color($base-color, $hue: -1, $saturation: -17%, $lightness: -21%);
+ $inset-shadow-hover: adjust-color($base-color, $saturation: -1%, $lightness: 3%);
+ $stop-gradient-hover: adjust-color($base-color, $hue: 8, $saturation: -4%, $lightness: -15.5%);
+ $text-shadow-hover: adjust-color($base-color, $hue: 5, $saturation: -5%, $lightness: -22%);
+
+ @if $grayscale == true {
+ $base-color-hover: grayscale($base-color-hover);
+ $border-bottom: grayscale($border-bottom);
+ $border-sides: grayscale($border-sides);
+ $border-top: grayscale($border-top);
+ $inset-shadow-hover: grayscale($inset-shadow-hover);
+ $stop-gradient-hover: grayscale($stop-gradient-hover);
+ $text-shadow-hover: grayscale($text-shadow-hover);
+ }
+
+ border: 1px solid $border-top;
+ border-color: $border-top $border-sides $border-bottom;
+ box-shadow: inset 0 1px 0 0 $inset-shadow-hover;
+ cursor: pointer;
+ @include linear-gradient ($base-color-hover, $stop-gradient-hover);
+ text-shadow: 0 -1px 1px $text-shadow-hover;
+ background-clip: padding-box;
+ }
+
+ &:active:not(:disabled),
+ &:focus:not(:disabled) {
+ $active-color: adjust-color($base-color, $hue: 4, $saturation: -12%, $lightness: -10%);
+ $border-active: adjust-color($base-color, $hue: 6, $saturation: -2.5%, $lightness: -30%);
+ $border-bottom-active: adjust-color($base-color, $hue: 11, $saturation: 6%, $lightness: -31%);
+ $inset-shadow-active: adjust-color($base-color, $hue: 9, $saturation: 2%, $lightness: -21.5%);
+ $text-shadow-active: adjust-color($base-color, $hue: 5, $saturation: -12%, $lightness: -21.5%);
+
+ @if $grayscale == true {
+ $active-color: grayscale($active-color);
+ $border-active: grayscale($border-active);
+ $border-bottom-active: grayscale($border-bottom-active);
+ $inset-shadow-active: grayscale($inset-shadow-active);
+ $text-shadow-active: grayscale($text-shadow-active);
+ }
+
+ background: $active-color;
+ border: 1px solid $border-active;
+ border-bottom: 1px solid $border-bottom-active;
+ box-shadow: inset 0 0 6px 3px $inset-shadow-active;
+ text-shadow: 0 -1px 1px $text-shadow-active;
+ }
+}
+
+
+
+// Flat Button
+//************************************************************************//
+@mixin flat($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) {
+ $color: hsl(0, 0, 100%);
+
+ @if is-light($base-color) {
+ $color: hsl(0, 0, 20%);
+ }
+
+ background-color: $base-color;
+ border-radius: 3px;
+ border: none;
+ color: $color;
+ display: inline-block;
+ font-size: inherit;
+ font-weight: bold;
+ padding: 7px 18px;
+ text-decoration: none;
+ background-clip: padding-box;
+
+ &:hover:not(:disabled){
+ $base-color-hover: adjust-color($base-color, $saturation: 4%, $lightness: 5%);
+
+ @if $grayscale == true {
+ $base-color-hover: grayscale($base-color-hover);
+ }
+
+ background-color: $base-color-hover;
+ cursor: pointer;
+ }
+
+ &:active:not(:disabled),
+ &:focus:not(:disabled) {
+ $base-color-active: adjust-color($base-color, $saturation: -4%, $lightness: -5%);
+
+ @if $grayscale == true {
+ $base-color-active: grayscale($base-color-active);
+ }
+
+ background-color: $base-color-active;
+ cursor: pointer;
+ }
+}
23 _sass/bourbon/addons/_clearfix.scss
@@ -0,0 +1,23 @@
+// Modern micro clearfix provides an easy way to contain floats without adding additional markup.
+//
+// Example usage:
+//
+// // Contain all floats within .wrapper
+// .wrapper {
+// @include clearfix;
+// .content,
+// .sidebar {
+// float : left;
+// }
+// }
+
+@mixin clearfix {
+ &:after {
+ content:"";
+ display:table;
+ clear:both;
+ }
+}
+
+// Acknowledgements
+// Beat *that* clearfix: [Thierry Koblentz](http://www.css-101.org/articles/clearfix/latest-new-clearfix-so-far.php)
111 _sass/bourbon/addons/_directional-values.scss
@@ -0,0 +1,111 @@
+// directional-property mixins are shorthands
+// for writing properties like the following
+//
+// @include margin(null 0 10px);
+// ------
+// margin-right: 0;
+// margin-bottom: 10px;
+// margin-left: 0;
+//
+// - or -
+//
+// @include border-style(dotted null);
+// ------
+// border-top-style: dotted;
+// border-bottom-style: dotted;
+//
+// ------
+//
+// Note: You can also use false instead of null
+
+@function collapse-directionals($vals) {
+ $output: null;
+
+ $A: nth( $vals, 1 );
+ $B: if( length($vals) < 2, $A, nth($vals, 2));
+ $C: if( length($vals) < 3, $A, nth($vals, 3));
+ $D: if( length($vals) < 2, $A, nth($vals, if( length($vals) < 4, 2, 4) ));
+
+ @if $A == 0 { $A: 0 }
+ @if $B == 0 { $B: 0 }
+ @if $C == 0 { $C: 0 }
+ @if $D == 0 { $D: 0 }
+
+ @if $A == $B and $A == $C and $A == $D { $output: $A }
+ @else if $A == $C and $B == $D { $output: $A $B }
+ @else if $B == $D { $output: $A $B $C }
+ @else { $output: $A $B $C $D }
+
+ @return $output;
+}
+
+@function contains-falsy($list) {
+ @each $item in $list {
+ @if not $item {
+ @return true;
+ }
+ }
+
+ @return false;
+}
+
+@mixin directional-property($pre, $suf, $vals) {
+ // Property Names
+ $top: $pre + "-top" + if($suf, "-#{$suf}", "");
+ $bottom: $pre + "-bottom" + if($suf, "-#{$suf}", "");
+ $left: $pre + "-left" + if($suf, "-#{$suf}", "");
+ $right: $pre + "-right" + if($suf, "-#{$suf}", "");
+ $all: $pre + if($suf, "-#{$suf}", "");
+
+ $vals: collapse-directionals($vals);
+
+ @if contains-falsy($vals) {
+ @if nth($vals, 1) { #{$top}: nth($vals, 1); }
+
+ @if length($vals) == 1 {
+ @if nth($vals, 1) { #{$right}: nth($vals, 1); }
+ } @else {
+ @if nth($vals, 2) { #{$right}: nth($vals, 2); }
+ }
+
+ // prop: top/bottom right/left
+ @if length($vals) == 2 {
+ @if nth($vals, 1) { #{$bottom}: nth($vals, 1); }
+ @if nth($vals, 2) { #{$left}: nth($vals, 2); }
+
+ // prop: top right/left bottom
+ } @else if length($vals) == 3 {
+ @if nth($vals, 3) { #{$bottom}: nth($vals, 3); }
+ @if nth($vals, 2) { #{$left}: nth($vals, 2); }
+
+ // prop: top right bottom left
+ } @else if length($vals) == 4 {
+ @if nth($vals, 3) { #{$bottom}: nth($vals, 3); }
+ @if nth($vals, 4) { #{$left}: nth($vals, 4); }
+ }
+
+ // prop: top/right/bottom/left
+ } @else {
+ #{$all}: $vals;
+ }
+}
+
+@mixin margin($vals...) {
+ @include directional-property(margin, false, $vals...);
+}
+
+@mixin padding($vals...) {
+ @include directional-property(padding, false, $vals...);
+}
+
+@mixin border-style($vals...) {
+ @include directional-property(border, style, $vals...);
+}
+
+@mixin border-color($vals...) {
+ @include directional-property(border, color, $vals...);
+}
+
+@mixin border-width($vals...) {
+ @include directional-property(border, width, $vals...);
+}
7 _sass/bourbon/addons/_ellipsis.scss
@@ -0,0 +1,7 @@
+@mixin ellipsis($width: 100%) {
+ display: inline-block;
+ max-width: $width;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
5 _sass/bourbon/addons/_font-family.scss
@@ -0,0 +1,5 @@
+$georgia: Georgia, Cambria, "Times New Roman", Times, serif;
+$helvetica: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif;
+$lucida-grande: "Lucida Grande", Tahoma, Verdana, Arial, sans-serif;
+$monospace: "Bitstream Vera Sans Mono", Consolas, Courier, monospace;
+$verdana: Verdana, Geneva, sans-serif;
10 _sass/bourbon/addons/_hide-text.scss
@@ -0,0 +1,10 @@
+@mixin hide-text {
+ overflow: hidden;
+
+ &:before {
+ content: "";
+ display: block;
+ width: 0;
+ height: 100%;
+ }
+}
86 _sass/bourbon/addons/_html5-input-types.scss
@@ -0,0 +1,86 @@
+//************************************************************************//
+// Generate a variable ($all-text-inputs) with a list of all html5
+// input types that have a text-based input, excluding textarea.
+// http://diveintohtml5.org/forms.html
+//************************************************************************//
+$inputs-list: 'input[type="email"]',
+ 'input[type="number"]',
+ 'input[type="password"]',
+ 'input[type="search"]',
+ 'input[type="tel"]',
+ 'input[type="text"]',
+ 'input[type="url"]',
+
+ // Webkit & Gecko may change the display of these in the future
+ 'input[type="color"]',
+ 'input[type="date"]',
+ 'input[type="datetime"]',
+ 'input[type="datetime-local"]',
+ 'input[type="month"]',
+ 'input[type="time"]',
+ 'input[type="week"]';
+
+// Bare inputs
+//************************************************************************//
+$all-text-inputs: assign-inputs($inputs-list);
+
+// Hover Pseudo-class
+//************************************************************************//
+$all-text-inputs-hover: assign-inputs($inputs-list, hover);
+
+// Focus Pseudo-class
+//************************************************************************//
+$all-text-inputs-focus: assign-inputs($inputs-list, focus);
+
+
+
+// You must use interpolation on the variable:
+// #{$all-text-inputs}
+// #{$all-text-inputs-hover}
+// #{$all-text-inputs-focus}
+
+// Example
+//************************************************************************//
+// #{$all-text-inputs}, textarea {
+// border: 1px solid red;
+// }
+
+
+
+//************************************************************************//
+// Generate a variable ($all-button-inputs) with a list of all html5
+// input types that have a button-based input, excluding button.
+//************************************************************************//
+$inputs-button-list: 'input[type="button"]',
+ 'input[type="reset"]',
+ 'input[type="submit"]';
+
+// Bare inputs
+//************************************************************************//
+$all-button-inputs: assign-inputs($inputs-button-list);
+
+// Hover Pseudo-class
+//************************************************************************//
+$all-button-inputs-hover: assign-inputs($inputs-button-list, hover);
+
+// Focus Pseudo-class
+//************************************************************************//
+$all-button-inputs-focus: assign-inputs($inputs-button-list, focus);
+
+// Active Pseudo-class
+//************************************************************************//
+$all-button-inputs-active: assign-inputs($inputs-button-list, active);
+
+
+
+// You must use interpolation on the variable:
+// #{$all-button-inputs}
+// #{$all-button-inputs-hover}
+// #{$all-button-inputs-focus}
+// #{$all-button-inputs-active}
+
+// Example
+//************************************************************************//
+// #{$all-button-inputs}, button {
+// border: 1px solid red;
+// }
32 _sass/bourbon/addons/_position.scss
@@ -0,0 +1,32 @@
+@mixin position ($position: relative, $coordinates: null null null null) {
+
+ @if type-of($position) == list {
+ $coordinates: $position;
+ $position: relative;
+ }
+
+ $coordinates: unpack($coordinates);
+
+ $top: nth($coordinates, 1);
+ $right: nth($coordinates, 2);
+ $bottom: nth($coordinates, 3);
+ $left: nth($coordinates, 4);
+
+ position: $position;
+
+ @if ($top and $top == auto) or (type-of($top) == number) {
+ top: $top;
+ }
+
+ @if ($right and $right == auto) or (type-of($right) == number) {
+ right: $right;
+ }
+
+ @if ($bottom and $bottom == auto) or (type-of($bottom) == number) {
+ bottom: $bottom;
+ }
+
+ @if ($left and $left == auto) or (type-of($left) == number) {
+ left: $left;
+ }
+}
45 _sass/bourbon/addons/_prefixer.scss
@@ -0,0 +1,45 @@
+//************************************************************************//
+// Example: @include prefixer(border-radius, $radii, webkit ms spec);
+//************************************************************************//
+// Variables located in /settings/_prefixer.scss
+
+@mixin prefixer ($property, $value, $prefixes) {
+ @each $prefix in $prefixes {
+ @if $prefix == webkit {
+ @if $prefix-for-webkit {
+ -webkit-#{$property}: $value;
+ }
+ }
+ @else if $prefix == moz {
+ @if $prefix-for-mozilla {
+ -moz-#{$property}: $value;
+ }
+ }
+ @else if $prefix == ms {
+ @if $prefix-for-microsoft {
+ -ms-#{$property}: $value;
+ }
+ }
+ @else if $prefix == o {
+ @if $prefix-for-opera {
+ -o-#{$property}: $value;
+ }
+ }
+ @else if $prefix == spec {
+ @if $prefix-for-spec {
+ #{$property}: $value;
+ }
+ }
+ @else {
+ @warn "Unrecognized prefix: #{$prefix}";
+ }
+ }
+}
+
+@mixin disable-prefix-for-all() {
+ $prefix-for-webkit: false !global;
+ $prefix-for-mozilla: false !global;
+ $prefix-for-microsoft: false !global;
+ $prefix-for-opera: false !global;
+ $prefix-for-spec: false !global;
+}
31 _sass/bourbon/addons/_retina-image.scss
@@ -0,0 +1,31 @@
+@mixin retina-image($filename, $background-size, $extension: png, $retina-filename: null, $retina-suffix: _2x, $asset-pipeline: $asset-pipeline) {
+ @if $asset-pipeline {
+ background-image: image-url("#{$filename}.#{$extension}");
+ }
+ @else {
+ background-image: url("#{$filename}.#{$extension}");
+ }
+
+ @include hidpi {
+ @if $asset-pipeline {
+ @if $retina-filename {
+ background-image: image-url("#{$retina-filename}.#{$extension}");
+ }
+ @else {
+ background-image: image-url("#{$filename}#{$retina-suffix}.#{$extension}");
+ }
+ }
+
+ @else {
+ @if $retina-filename {
+ background-image: url("#{$retina-filename}.#{$extension}");
+ }
+ @else {
+ background-image: url("#{$filename}#{$retina-suffix}.#{$extension}");
+ }
+ }
+
+ background-size: $background-size;
+
+ }
+}
16 _sass/bourbon/addons/_size.scss
@@ -0,0 +1,16 @@
+@mixin size($size) {
+ $height: nth($size, 1);
+ $width: $height;
+
+ @if length($size) > 1 {
+ $height: nth($size, 2);
+ }
+
+ @if $height == auto or (type-of($height) == number and not unitless($height)) {
+ height: $height;
+ }
+
+ @if $width == auto or (type-of($width) == number and not unitless($width)) {
+ width: $width;
+ }
+}
32 _sass/bourbon/addons/_timing-functions.scss
@@ -0,0 +1,32 @@
+// CSS cubic-bezier timing functions. Timing functions courtesy of jquery.easie (github.com/jaukia/easie)
+// Timing functions are the same as demo'ed here: http://jqueryui.com/resources/demos/effect/easing.html
+
+// EASE IN
+$ease-in-quad: cubic-bezier(0.550, 0.085, 0.680, 0.530);
+$ease-in-cubic: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+$ease-in-quart: cubic-bezier(0.895, 0.030, 0.685, 0.220);
+$ease-in-quint: cubic-bezier(0.755, 0.050, 0.855, 0.060);
+$ease-in-sine: cubic-bezier(0.470, 0.000, 0.745, 0.715);
+$ease-in-expo: cubic-bezier(0.950, 0.050, 0.795, 0.035);
+$ease-in-circ: cubic-bezier(0.600, 0.040, 0.980, 0.335);
+$ease-in-back: cubic-bezier(0.600, -0.280, 0.735, 0.045);
+
+// EASE OUT
+$ease-out-quad: cubic-bezier(0.250, 0.460, 0.450, 0.940);
+$ease-out-cubic: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+$ease-out-quart: cubic-bezier(0.165, 0.840, 0.440, 1.000);
+$ease-out-quint: cubic-bezier(0.230, 1.000, 0.320, 1.000);
+$ease-out-sine: cubic-bezier(0.390, 0.575, 0.565, 1.000);
+$ease-out-expo: cubic-bezier(0.190, 1.000, 0.220, 1.000);
+$ease-out-circ: cubic-bezier(0.075, 0.820, 0.165, 1.000);
+$ease-out-back: cubic-bezier(0.175, 0.885, 0.320, 1.275);
+
+// EASE IN OUT
+$ease-in-out-quad: cubic-bezier(0.455, 0.030, 0.515, 0.955);
+$ease-in-out-cubic: cubic-bezier(0.645, 0.045, 0.355, 1.000);
+$ease-in-out-quart: cubic-bezier(0.770, 0.000, 0.175, 1.000);
+$ease-in-out-quint: cubic-bezier(0.860, 0.000, 0.070, 1.000);
+$ease-in-out-sine: cubic-bezier(0.445, 0.050, 0.550, 0.950);
+$ease-in-out-expo: cubic-bezier(1.000, 0.000, 0.000, 1.000);
+$ease-in-out-circ: cubic-bezier(0.785, 0.135, 0.150, 0.860);
+$ease-in-out-back: cubic-bezier(0.680, -0.550, 0.265, 1.550);
83 _sass/bourbon/addons/_triangle.scss
@@ -0,0 +1,83 @@
+@mixin triangle ($size, $color, $direction) {
+ height: 0;
+ width: 0;
+
+ $width: nth($size, 1);
+ $height: nth($size, length($size));
+
+ $foreground-color: nth($color, 1);
+ $background-color: if(length($color) == 2, nth($color, 2), transparent);
+
+ @if ($direction == up) or ($direction == down) or ($direction == right) or ($direction == left) {
+
+ $width: $width / 2;
+ $height: if(length($size) > 1, $height, $height/2);
+
+ @if $direction == up {
+ border-left: $width solid $background-color;
+ border-right: $width solid $background-color;
+ border-bottom: $height solid $foreground-color;
+
+ } @else if $direction == right {
+ border-top: $width solid $background-color;
+ border-bottom: $width solid $background-color;
+ border-left: $height solid $foreground-color;
+
+ } @else if $direction == down {
+ border-left: $width solid $background-color;
+ border-right: $width solid $background-color;
+ border-top: $height solid $foreground-color;
+
+ } @else if $direction == left {
+ border-top: $width solid $background-color;
+ border-bottom: $width solid $background-color;
+ border-right: $height solid $foreground-color;
+ }
+ }
+
+ @else if ($direction == up-right) or ($direction == up-left) {
+ border-top: $height solid $foreground-color;
+
+ @if $direction == up-right {
+ border-left: $width solid $background-color;
+
+ } @else if $direction == up-left {
+ border-right: $width solid $background-color;
+ }
+ }
+
+ @else if ($direction == down-right) or ($direction == down-left) {
+ border-bottom: $height solid $foreground-color;
+
+ @if $direction == down-right {
+ border-left: $width solid $background-color;
+
+ } @else if $direction == down-left {
+ border-right: $width solid $background-color;
+ }
+ }
+
+ @else if ($direction == inset-up) {
+ border-width: $height $width;
+ border-style: solid;
+ border-color: $background-color $background-color $foreground-color;
+ }
+
+ @else if ($direction == inset-down) {
+ border-width: $height $width;
+ border-style: solid;
+ border-color: $foreground-color $background-color $background-color;
+ }
+
+ @else if ($direction == inset-right) {
+ border-width: $width $height;
+ border-style: solid;
+ border-color: $background-color $background-color $background-color $foreground-color;
+ }
+
+ @else if ($direction == inset-left) {
+ border-width: $width $height;
+ border-style: solid;
+ border-color: $background-color $foreground-color $background-color $background-color;
+ }
+}
8 _sass/bourbon/addons/_word-wrap.scss
@@ -0,0 +1,8 @@
+@mixin word-wrap($wrap: break-word) {
+ word-wrap: $wrap;
+
+ @if $wrap == break-word {
+ overflow-wrap: break-word;
+ word-break: break-all;
+ }
+}
52 _sass/bourbon/css3/_animation.scss
@@ -0,0 +1,52 @@
+// http://www.w3.org/TR/css3-animations/#the-animation-name-property-
+// Each of these mixins support comma separated lists of values, which allows different transitions for individual properties to be described in a single style rule. Each value in the list corresponds to the value at that same position in the other properties.
+
+// Official animation shorthand property.
+@mixin animation ($animations...) {
+ @include prefixer(animation, $animations, webkit moz spec);
+}
+
+// Individual Animation Properties
+@mixin animation-name ($names...) {
+ @include prefixer(animation-name, $names, webkit moz spec);
+}
+
+
+@mixin animation-duration ($times...) {
+ @include prefixer(animation-duration, $times, webkit moz spec);
+}
+
+
+@mixin animation-timing-function ($motions...) {
+// ease | linear | ease-in | ease-out | ease-in-out
+ @include prefixer(animation-timing-function, $motions, webkit moz spec);
+}
+
+
+@mixin animation-iteration-count ($values...) {
+// infinite | <number>
+ @include prefixer(animation-iteration-count, $values, webkit moz spec);
+}
+
+
+@mixin animation-direction ($directions...) {
+// normal | alternate
+ @include prefixer(animation-direction, $directions, webkit moz spec);
+}
+
+
+@mixin animation-play-state ($states...) {
+// running | paused
+ @include prefixer(animation-play-state, $states, webkit moz spec);
+}
+
+
+@mixin animation-delay ($times...) {
+ @include prefixer(animation-delay, $times, webkit moz spec);
+}
+
+
+@mixin animation-fill-mode ($modes...) {
+// none | forwards | backwards | both
+ @include prefixer(animation-fill-mode, $modes, webkit moz spec);
+}
3 _sass/bourbon/css3/_appearance.scss
@@ -0,0 +1,3 @@
+@mixin appearance ($value) {
+ @include prefixer(appearance, $value, webkit moz ms o spec);
+}
6 _sass/bourbon/css3/_backface-visibility.scss
@@ -0,0 +1,6 @@
+//************************************************************************//
+// Backface-visibility mixin
+//************************************************************************//
+@mixin backface-visibility($visibility) {
+ @include prefixer(backface-visibility, $visibility, webkit spec);
+}
42 _sass/bourbon/css3/_background-image.scss
@@ -0,0 +1,42 @@
+//************************************************************************//
+// Background-image property for adding multiple background images with
+// gradients, or for stringing multiple gradients together.
+//************************************************************************//
+
+@mixin background-image($images...) {
+ $webkit-images: ();
+ $spec-images: ();
+
+ @each $image in $images {
+ $webkit-image: ();
+ $spec-image: ();
+
+ @if (type-of($image) == string) {
+ $url-str: str-slice($image, 0, 3);
+ $gradient-type: str-slice($image, 0, 6);
+
+ @if $url-str == "url" {
+ $webkit-image: $image;
+ $spec-image: $image;
+ }
+
+ @else if $gradient-type == "linear" {
+ $gradients: _linear-gradient-parser($image);
+ $webkit-image: map-get($gradients, webkit-image);
+ $spec-image: map-get($gradients, spec-image);
+ }
+
+ @else if $gradient-type == "radial" {
+ $gradients: _radial-gradient-parser($image);
+ $webkit-image: map-get($gradients, webkit-image);
+ $spec-image: map-get($gradients, spec-image);
+ }
+ }
+
+ $webkit-images: append($webkit-images, $webkit-image, comma);
+ $spec-images: append($spec-images, $spec-image, comma);
+ }
+
+ background-image: $webkit-images;
+ background-image: $spec-images;
+}
55 _sass/bourbon/css3/_background.scss
@@ -0,0 +1,55 @@
+//************************************************************************//
+// Background property for adding multiple backgrounds using shorthand
+// notation.
+//************************************************************************//
+
+@mixin background($backgrounds...) {
+ $webkit-backgrounds: ();
+ $spec-backgrounds: ();
+
+ @each $background in $backgrounds {
+ $webkit-background: ();
+ $spec-background: ();
+ $background-type: type-of($background);
+
+ @if $background-type == string or list {
+ $background-str: if($background-type == list, nth($background, 1), $background);
+
+ $url-str: str-slice($background-str, 0, 3);
+ $gradient-type: str-slice($background-str, 0, 6);
+
+ @if $url-str == "url" {
+ $webkit-background: $background;
+ $spec-background: $background;
+ }
+
+ @else if $gradient-type == "linear" {
+ $gradients: _linear-gradient-parser("#{$background}");
+ $webkit-background: map-get($gradients, webkit-image);
+ $spec-background: map-get($gradients, spec-image);
+ }
+
+ @else if $gradient-type == "radial" {
+ $gradients: _radial-gradient-parser("#{$background}");
+ $webkit-background: map-get($gradients, webkit-image);
+ $spec-background: map-get($gradients, spec-image);
+ }
+
+ @else {
+ $webkit-background: $background;
+ $spec-background: $background;
+ }
+ }
+
+ @else {
+ $webkit-background: $background;
+ $spec-background: $background;
+ }
+
+ $webkit-backgrounds: append($webkit-backgrounds, $webkit-background, comma);
+ $spec-backgrounds: append($spec-backgrounds, $spec-background, comma);
+ }
+
+ background: $webkit-backgrounds;
+ background: $spec-backgrounds;
+}
59 _sass/bourbon/css3/_border-image.scss
@@ -0,0 +1,59 @@
+@mixin border-image($borders...) {
+ $webkit-borders: ();
+ $spec-borders: ();
+
+ @each $border in $borders {
+ $webkit-border: ();
+ $spec-border: ();
+ $border-type: type-of($border);
+
+ @if $border-type == string or list {
+ $border-str: if($border-type == list, nth($border, 1), $border);
+
+ $url-str: str-slice($border-str, 0, 3);
+ $gradient-type: str-slice($border-str, 0, 6);
+
+ @if $url-str == "url" {
+ $webkit-border: $border;
+ $spec-border: $border;
+ }
+
+ @else if $gradient-type == "linear" {
+ $gradients: _linear-gradient-parser("#{$border}");
+ $webkit-border: map-get($gradients, webkit-image);
+ $spec-border: map-get($gradients, spec-image);
+ }
+
+ @else if $gradient-type == "radial" {
+ $gradients: _radial-gradient-parser("#{$border}");
+ $webkit-border: map-get($gradients, webkit-image);
+ $spec-border: map-get($gradients, spec-image);
+ }
+
+ @else {
+ $webkit-border: $border;
+ $spec-border: $border;
+ }
+ }
+
+ @else {
+ $webkit-border: $border;
+ $spec-border: $border;
+ }
+
+ $webkit-borders: append($webkit-borders, $webkit-border, comma);
+ $spec-borders: append($spec-borders, $spec-border, comma);
+ }
+
+ -webkit-border-image: $webkit-borders;
+ border-image: $spec-borders;
+ border-style: solid;
+}
+
+//Examples:
+// @include border-image(url("image.png"));
+// @include border-image(url("image.png") 20 stretch);
+// @include border-image(linear-gradient(45deg, orange, yellow));
+// @include border-image(linear-gradient(45deg, orange, yellow) stretch);
+// @include border-image(linear-gradient(45deg, orange, yellow) 20 30 40 50 stretch round);
+// @include border-image(radial-gradient(top, cover, orange, yellow, orange));
22 _sass/bourbon/css3/_border-radius.scss
@@ -0,0 +1,22 @@
+//************************************************************************//
+// Shorthand Border-radius mixins
+//************************************************************************//
+@mixin border-top-radius($radii) {
+ @include prefixer(border-top-left-radius, $radii, spec);
+ @include prefixer(border-top-right-radius, $radii, spec);
+}
+
+@mixin border-bottom-radius($radii) {
+ @include prefixer(border-bottom-left-radius, $radii, spec);
+ @include prefixer(border-bottom-right-radius, $radii, spec);
+}
+
+@mixin border-left-radius($radii) {
+ @include prefixer(border-top-left-radius, $radii, spec);
+ @include prefixer(border-bottom-left-radius, $radii, spec);
+}
+
+@mixin border-right-radius($radii) {
+ @include prefixer(border-top-right-radius, $radii, spec);
+ @include prefixer(border-bottom-right-radius, $radii, spec);
+}
4 _sass/bourbon/css3/_box-sizing.scss
@@ -0,0 +1,4 @@
+@mixin box-sizing ($box) {
+// content-box | border-box | inherit
+ @include prefixer(box-sizing, $box, webkit moz spec);
+}
4 _sass/bourbon/css3/_calc.scss
@@ -0,0 +1,4 @@
+@mixin calc($property, $value) {
+ #{$property}: -webkit-calc(#{$value});
+ #{$property}: calc(#{$value});
+}
47 _sass/bourbon/css3/_columns.scss
@@ -0,0 +1,47 @@
+@mixin columns($arg: auto) {
+// <column-count> || <column-width>
+ @include prefixer(columns, $arg, webkit moz spec);
+}
+
+@mixin column-count($int: auto) {
+// auto || integer
+ @include prefixer(column-count, $int, webkit moz spec);
+}
+
+@mixin column-gap($length: normal) {
+// normal || length
+ @include prefixer(column-gap, $length, webkit moz spec);
+}
+
+@mixin column-fill($arg: auto) {
+// auto || length
+ @include prefixer(column-fill, $arg, webkit moz spec);
+}
+
+@mixin column-rule($arg) {
+// <border-width> || <border-style> || <color>
+ @include prefixer(column-rule, $arg, webkit moz spec);
+}
+
+@mixin column-rule-color($color) {
+ @include prefixer(column-rule-color, $color, webkit moz spec);
+}
+
+@mixin column-rule-style($style: none) {
+// none | hidden | dashed | dotted | double | groove | inset | inset | outset | ridge | solid
+ @include prefixer(column-rule-style, $style, webkit moz spec);
+}
+
+@mixin column-rule-width ($width: none) {
+ @include prefixer(column-rule-width, $width, webkit moz spec);
+}
+
+@mixin column-span($arg: none) {
+// none || all
+ @include prefixer(column-span, $arg, webkit moz spec);
+}
+
+@mixin column-width($length: auto) {
+// auto || length
+ @include prefixer(column-width, $length, webkit moz spec);
+}
5 _sass/bourbon/css3/_filter.scss
@@ -0,0 +1,5 @@
+@mixin filter($function: none) {
+ // <filter-function> [<filter-function]* | none
+ @include prefixer(filter, $function, webkit spec);
+}
+
321 _sass/bourbon/css3/_flex-box.scss
@@ -0,0 +1,321 @@
+// CSS3 Flexible Box Model and property defaults
+
+// Custom shorthand notation for flexbox
+@mixin box($orient: inline-axis, $pack: start, $align: stretch) {
+ @include display-box;
+ @include box-orient($orient);
+ @include box-pack($pack);
+ @include box-align($align);
+}
+
+@mixin display-box {
+ display: -webkit-box;
+ display: -moz-box;
+ display: -ms-flexbox; // IE 10
+ display: box;
+}
+
+@mixin box-orient($orient: inline-axis) {
+// horizontal|vertical|inline-axis|block-axis|inherit
+ @include prefixer(box-orient, $orient, webkit moz spec);
+}
+
+@mixin box-pack($pack: start) {
+// start|end|center|justify
+ @include prefixer(box-pack, $pack, webkit moz spec);
+ -ms-flex-pack: $pack; // IE 10
+}
+
+@mixin box-align($align: stretch) {
+// start|end|center|baseline|stretch
+ @include prefixer(box-align, $align, webkit moz spec);
+ -ms-flex-align: $align; // IE 10
+}
+
+@mixin box-direction($direction: normal) {
+// normal|reverse|inherit
+ @include prefixer(box-direction, $direction, webkit moz spec);
+ -ms-flex-direction: $direction; // IE 10
+}
+
+@mixin box-lines($lines: single) {
+// single|multiple
+ @include prefixer(box-lines, $lines, webkit moz spec);
+}
+
+@mixin box-ordinal-group($int: 1) {
+ @include prefixer(box-ordinal-group, $int, webkit moz spec);
+ -ms-flex-order: $int; // IE 10
+}
+
+@mixin box-flex($value: 0.0) {
+ @include prefixer(box-flex, $value, webkit moz spec);
+ -ms-flex: $value; // IE 10
+}
+
+@mixin box-flex-group($int: 1) {
+ @include prefixer(box-flex-group, $int, webkit moz spec);
+}
+
+// CSS3 Flexible Box Model and property defaults
+// Unified attributes for 2009, 2011, and 2012 flavours.
+
+// 2009 - display (box | inline-box)
+// 2011 - display (flexbox | inline-flexbox)
+// 2012 - display (flex | inline-flex)
+@mixin display($value) {
+// flex | inline-flex
+ @if $value == "flex" {
+ // 2009
+ display: -webkit-box;
+ display: -moz-box;
+ display: box;
+
+ // 2012
+ display: -webkit-flex;
+ display: -moz-flex;
+ display: -ms-flexbox; // 2011 (IE 10)
+ display: flex;
+ }
+
+ @elseif $value == "inline-flex" {
+ display: -webkit-inline-box;
+ display: -moz-inline-box;
+ display: inline-box;
+
+ display: -webkit-inline-flex;
+ display: -moz-inline-flex;
+ display: -ms-inline-flexbox;
+ display: inline-flex;
+ }
+
+ @else {
+ display: $value;
+ }
+}
+
+// 2009 - box-flex (integer)
+// 2011 - flex (decimal | width decimal)
+// 2012 - flex (integer integer width)
+@mixin flex($value) {
+
+ // Grab flex-grow for older browsers.
+ $flex-grow: nth($value, 1);
+
+ // 2009
+ @include prefixer(box-flex, $flex-grow, webkit moz spec);
+
+ // 2011 (IE 10), 2012
+ @include prefixer(flex, $value, webkit moz ms spec);
+}
+
+// 2009 - box-orient ( horizontal | vertical | inline-axis | block-axis)
+// - box-direction (normal | reverse)
+// 2011 - flex-direction (row | row-reverse | column | column-reverse)
+// 2012 - flex-direction (row | row-reverse | column | column-reverse)
+@mixin flex-direction($value: row) {
+
+ // Alt values.
+ $value-2009: $value;
+ $value-2011: $value;
+ $direction: "normal";
+
+ @if $value == row {
+ $value-2009: horizontal;
+ }
+
+ @elseif $value == "row-reverse" {
+ $value-2009: horizontal;
+ $direction: reverse;
+ }
+
+ @elseif $value == column {
+ $value-2009: vertical;
+ }
+
+ @elseif $value == "column-reverse" {
+ $value-2009: vertical;
+ $direction: reverse;
+ }
+
+ // 2009
+ @include prefixer(box-orient, $value-2009, webkit moz spec);
+ @if $direction == "reverse" {
+ @include prefixer(box-direction, $direction, webkit moz spec);
+ }
+
+ // 2012
+ @include prefixer(flex-direction, $value, webkit moz spec);
+
+ // 2011 (IE 10)
+ -ms-flex-direction: $value;
+}
+
+// 2009 - box-lines (single | multiple)
+// 2011 - flex-wrap (nowrap | wrap | wrap-reverse)
+// 2012 - flex-wrap (nowrap | wrap | wrap-reverse)
+@mixin flex-wrap($value: nowrap) {
+
+ // Alt values.
+ $alt-value: $value;
+ @if $value == nowrap {
+ $alt-value: single;
+ }
+
+ @elseif $value == wrap {
+ $alt-value: multiple;
+ }
+
+ @elseif $value == "wrap-reverse" {
+ $alt-value: multiple;
+ }
+
+ @include prefixer(box-lines, $alt-value, webkit moz spec);
+ @include prefixer(flex-wrap, $value, webkit moz ms spec);
+}
+
+// 2009 - TODO: parse values into flex-direction/flex-wrap
+// 2011 - TODO: parse values into flex-direction/flex-wrap
+// 2012 - flex-flow (flex-direction || flex-wrap)
+@mixin flex-flow($value) {
+ @include prefixer(flex-flow, $value, webkit moz spec);
+}
+
+// 2009 - box-ordinal-group (integer)
+// 2011 - flex-order (integer)
+// 2012 - order (integer)
+@mixin order($int: 0) {
+ // 2009
+ @include prefixer(box-ordinal-group, $int, webkit moz spec);
+
+ // 2012
+ @include prefixer(order, $int, webkit moz spec);
+
+ // 2011 (IE 10)
+ -ms-flex-order: $int;
+}
+
+// 2012 - flex-grow (number)
+@mixin flex-grow($number: 0) {
+ @include prefixer(flex-grow, $number, webkit moz spec);
+ -ms-flex-positive: $number;
+}
+
+// 2012 - flex-shrink (number)
+@mixin flex-shrink($number: 1) {
+ @include prefixer(flex-shrink, $number, webkit moz spec);
+ -ms-flex-negative: $number;
+}
+
+// 2012 - flex-basis (number)
+@mixin flex-basis($width: auto) {
+ @include prefixer(flex-basis, $width, webkit moz spec);
+ -ms-flex-preferred-size: $width;
+}
+
+// 2009 - box-pack (start | end | center | justify)
+// 2011 - flex-pack (start | end | center | justify)
+// 2012 - justify-content (flex-start | flex-end | center | space-between | space-around)
+@mixin justify-content ($value: flex-start) {
+
+ // Alt values.
+ $alt-value: $value;
+ @if $value == "flex-start" {
+ $alt-value: start;
+ }
+
+ @elseif $value == "flex-end" {
+ $alt-value: end;
+ }
+
+ @elseif $value == "space-between" {
+ $alt-value: justify;
+ }
+
+ @elseif $value == "space-around" {
+ $alt-value: center;
+ }
+
+ // 2009
+ @include prefixer(box-pack, $alt-value, webkit moz spec);
+
+ // 2012
+ @include prefixer(justify-content, $value, webkit moz ms o spec);
+
+ // 2011 (IE 10)
+ -ms-flex-pack: $alt-value;
+}
+
+// 2009 - box-align (start | end | center | baseline | stretch)
+// 2011 - flex-align (start | end | center | baseline | stretch)
+// 2012 - align-items (flex-start | flex-end | center | baseline | stretch)
+@mixin align-items($value: stretch) {
+
+ $alt-value: $value;
+
+ @if $value == "flex-start" {
+ $alt-value: start;
+ }
+
+ @elseif $value == "flex-end" {
+ $alt-value: end;
+ }
+
+ // 2009
+ @include prefixer(box-align, $alt-value, webkit moz spec);
+
+ // 2012
+ @include prefixer(align-items, $value, webkit moz ms o spec);
+
+ // 2011 (IE 10)
+ -ms-flex-align: $alt-value;
+}
+
+// 2011 - flex-item-align (auto | start | end | center | baseline | stretch)
+// 2012 - align-self (auto | flex-start | flex-end | center | baseline | stretch)
+@mixin align-self($value: auto) {
+
+ $value-2011: $value;
+ @if $value == "flex-start" {
+ $value-2011: start;
+ }
+
+ @elseif $value == "flex-end" {
+ $value-2011: end;
+ }
+
+ // 2012
+ @include prefixer(align-self, $value, webkit moz spec);
+
+ // 2011 (IE 10)
+ -ms-flex-item-align: $value-2011;
+}
+
+// 2011 - flex-line-pack (start | end | center | justify | distribute | stretch)
+// 2012 - align-content (flex-start | flex-end | center | space-between | space-around | stretch)
+@mixin align-content($value: stretch) {
+
+ $value-2011: $value;
+ @if $value == "flex-start" {
+ $value-2011: start;
+ }
+
+ @elseif $value == "flex-end" {
+ $value-2011: end;
+ }
+
+ @elseif $value == "space-between" {
+ $value-2011: justify;
+ }
+
+ @elseif $value == "space-around" {
+ $value-2011: distribute;
+ }
+
+ // 2012
+ @include prefixer(align-content, $value, webkit moz spec);
+
+ // 2011 (IE 10)
+ -ms-flex-line-pack: $value-2011;
+}
+
23 _sass/bourbon/css3/_font-face.scss
@@ -0,0 +1,23 @@
+// Order of the includes matters, and it is: normal, bold, italic, bold+italic.
+
+@mixin font-face($font-family, $file-path, $weight: normal, $style: normal, $asset-pipeline: $asset-pipeline) {
+ @font-face {
+ font-family: $font-family;
+ font-weight: $weight;
+ font-style: $style;
+
+ @if $asset-pipeline == true {
+ src: font-url('#{$file-path}.eot');
+ src: font-url('#{$file-path}.eot?#iefix') format('embedded-opentype'),
+ font-url('#{$file-path}.woff') format('woff'),
+ font-url('#{$file-path}.ttf') format('truetype'),
+ font-url('#{$file-path}.svg##{$font-family}') format('svg');
+ } @else {
+ src: url('#{$file-path}.eot');
+ src: url('#{$file-path}.eot?#iefix') format('embedded-opentype'),
+ url('#{$file-path}.woff') format('woff'),
+ url('#{$file-path}.ttf') format('truetype'),
+ url('#{$file-path}.svg##{$font-family}') format('svg');
+ }
+ }
+}
10 _sass/bourbon/css3/_font-feature-settings.scss
@@ -0,0 +1,10 @@
+// Font feature settings mixin and property default.
+// Examples: @include font-feature-settings("liga");
+// @include font-feature-settings("lnum" false);
+// @include font-feature-settings("pnum" 1, "kern" 0);
+// @include font-feature-settings("ss01", "ss02");
+
+@mixin font-feature-settings($settings...) {
+ @if length($settings) == 0 { $settings: none; }
+ @include prefixer(font-feature-settings, $settings, webkit moz ms spec);
+}
10 _sass/bourbon/css3/_hidpi-media-query.scss
@@ -0,0 +1,10 @@
+// HiDPI mixin. Default value set to 1.3 to target Google Nexus 7 (http://bjango.com/articles/min-device-pixel-ratio/)
+@mixin hidpi($ratio: 1.3) {
+ @media only screen and (-webkit-min-device-pixel-ratio: $ratio),
+ only screen and (min--moz-device-pixel-ratio: $ratio),
+ only screen and (-o-min-device-pixel-ratio: #{$ratio}/1),
+ only screen and (min-resolution: #{round($ratio*96)}dpi),
+ only screen and (min-resolution: #{$ratio}dppx) {
+ @content;
+ }
+}
4 _sass/bourbon/css3/_hyphens.scss
@@ -0,0 +1,4 @@
+@mixin hyphens($hyphenation: none) {
+// none | manual | auto
+ @include prefixer(hyphens, $hyphenation, webkit moz ms spec);
+}
14 _sass/bourbon/css3/_image-rendering.scss
@@ -0,0 +1,14 @@
+@mixin image-rendering ($mode:auto) {
+
+ @if ($mode == crisp-edges) {
+ -ms-interpolation-mode: nearest-neighbor; // IE8+
+ image-rendering: -moz-crisp-edges;
+ image-rendering: -o-crisp-edges;
+ image-rendering: -webkit-optimize-contrast;
+ image-rendering: crisp-edges;
+ }
+
+ @else {
+ image-rendering: $mode;
+ }
+}
35 _sass/bourbon/css3/_keyframes.scss
@@ -0,0 +1,35 @@
+// Adds keyframes blocks for supported prefixes, removing redundant prefixes in the block's content
+@mixin keyframes($name) {
+ $original-prefix-for-webkit: $prefix-for-webkit;
+ $original-prefix-for-mozilla: $prefix-for-mozilla;
+ $original-prefix-for-microsoft: $prefix-for-microsoft;
+ $original-prefix-for-opera: $prefix-for-opera;
+ $original-prefix-for-spec: $prefix-for-spec;
+
+ @if $original-prefix-for-webkit {
+ @include disable-prefix-for-all();
+ $prefix-for-webkit: true !global;
+ @-webkit-keyframes #{$name} {
+ @content;
+ }
+ }
+ @if $original-prefix-for-mozilla {
+ @include disable-prefix-for-all();
+ $prefix-for-mozilla: true !global;
+ @-moz-keyframes #{$name} {
+ @content;
+ }
+ }
+
+ $prefix-for-webkit: $original-prefix-for-webkit !global;
+ $prefix-for-mozilla: $original-prefix-for-mozilla !global;
+ $prefix-for-microsoft: $original-prefix-for-microsoft !global;
+ $prefix-for-opera: $original-prefix-for-opera !global;
+ $prefix-for-spec: $original-prefix-for-spec !global;
+
+ @if $original-prefix-for-spec {
+ @keyframes #{$name} {
+ @content;
+ }
+ }
+}
38 _sass/bourbon/css3/_linear-gradient.scss
@@ -0,0 +1,38 @@
+@mixin linear-gradient($pos, $G1, $G2: null,
+ $G3: null, $G4: null,
+ $G5: null, $G6: null,
+ $G7: null, $G8: null,
+ $G9: null, $G10: null,
+ $fallback: null) {
+ // Detect what type of value exists in $pos
+ $pos-type: type-of(nth($pos, 1));
+ $pos-spec: null;
+ $pos-degree: null;
+
+ // If $pos is missing from mixin, reassign vars and add default position
+ @if ($pos-type == color) or (nth($pos, 1) == "transparent") {
+ $G10: $G9; $G9: $G8; $G8: $G7; $G7: $G6; $G6: $G5;
+ $G5: $G4; $G4: $G3; $G3: $G2; $G2: $G1; $G1: $pos;
+ $pos: null;
+ }
+
+ @if $pos {
+ $positions: _linear-positions-parser($pos);
+ $pos-degree: nth($positions, 1);
+ $pos-spec: nth($positions, 2);
+ }
+
+ $full: $G1, $G2, $G3, $G4, $G5, $G6, $G7, $G8, $G9, $G10;
+
+ // Set $G1 as the default fallback color
+ $fallback-color: nth($G1, 1);
+
+ // If $fallback is a color use that color as the fallback color
+ @if (type-of($fallback) == color) or ($fallback == "transparent") {
+ $fallback-color: $fallback;
+ }
+
+ background-color: $fallback-color;
+ background-image: -webkit-linear-gradient($pos-degree $full); // Safari 5.1+, Chrome
+ background-image: unquote("linear-gradient(#{$pos-spec}#{$full})");
+}
8 _sass/bourbon/css3/_perspective.scss
@@ -0,0 +1,8 @@
+@mixin perspective($depth: none) {
+ // none | <length>
+ @include prefixer(perspective, $depth, webkit moz spec);
+}
+
+@mixin perspective-origin($value: 50% 50%) {
+ @include prefixer(perspective-origin, $value, webkit moz spec);
+}
8 _sass/bourbon/css3/_placeholder.scss
@@ -0,0 +1,8 @@
+@mixin placeholder {
+ $placeholders: ":-webkit-input" ":-moz" "-moz" "-ms-input";
+ @each $placeholder in $placeholders {
+ &:#{$placeholder}-placeholder {
+ @content;
+ }
+ }
+}
39 _sass/bourbon/css3/_radial-gradient.scss
@@ -0,0 +1,39 @@
+// Requires Sass 3.1+
+@mixin radial-gradient($G1, $G2,
+ $G3: null, $G4: null,
+ $G5: null, $G6: null,
+ $G7: null, $G8: null,
+ $G9: null, $G10: null,
+ $pos: null,
+ $shape-size: null,
+ $fallback: null) {
+
+ $data: _radial-arg-parser($G1, $G2, $pos, $shape-size);
+ $G1: nth($data, 1);
+ $G2: nth($data, 2);
+ $pos: nth($data, 3);
+ $shape-size: nth($data, 4);
+
+ $full: $G1, $G2, $G3, $G4, $G5, $G6, $G7, $G8, $G9, $G10;
+
+ // Strip deprecated cover/contain for spec
+ $shape-size-spec: _shape-size-stripper($shape-size);
+
+ // Set $G1 as the default fallback color
+ $first-color: nth($full, 1);
+ $fallback-color: nth($first-color, 1);
+
+ @if (type-of($fallback) == color) or ($fallback == "transparent") {
+ $fallback-color: $fallback;
+ }
+
+ // Add Commas and spaces
+ $shape-size: if($shape-size, '#{$shape-size}, ', null);
+ $pos: if($pos, '#{$pos}, ', null);
+ $pos-spec: if($pos, 'at #{$pos}', null);
+ $shape-size-spec: if(($shape-size-spec != ' ') and ($pos == null), '#{$shape-size-spec}, ', '#{$shape-size-spec} ');
+
+ background-color: $fallback-color;
+ background-image: -webkit-radial-gradient(unquote(#{$pos}#{$shape-size}#{$full}));
+ background-image: unquote("radial-gradient(#{$shape-size-spec}#{$pos-spec}#{$full})");
+}
15 _sass/bourbon/css3/_transform.scss
@@ -0,0 +1,15 @@
+@mixin transform($property: none) {
+// none | <transform-function>
+ @include prefixer(transform, $property, webkit moz ms o spec);
+}
+
+@mixin transform-origin($axes: 50%) {
+// x-axis - left | center | right | length | %
+// y-axis - top | center | bottom | length | %
+// z-axis - length
+ @include prefixer(transform-origin, $axes, webkit moz ms o spec);
+}
+
+@mixin transform-style ($style: flat) {
+ @include prefixer(transform-style, $style, webkit moz ms o spec);
+}
77 _sass/bourbon/css3/_transition.scss
@@ -0,0 +1,77 @@
+// Shorthand mixin. Supports multiple parentheses-deliminated values for each variable.
+// Example: @include transition (all 2s ease-in-out);
+// @include transition (opacity 1s ease-in 2s, width 2s ease-out);
+// @include transition-property (transform, opacity);
+
+@mixin transition ($properties...) {
+ // Fix for vendor-prefix transform property
+ $needs-prefixes: false;
+ $webkit: ();
+ $moz: ();
+ $spec: ();
+
+ // Create lists for vendor-prefixed transform
+ @each $list in $properties {
+ @if nth($list, 1) == "transform" {
+ $needs-prefixes: true;
+ $list1: -webkit-transform;
+ $list2: -moz-transform;
+ $list3: ();
+
+ @each $var in $list {
+ $list3: join($list3, $var);
+
+ @if $var != "transform" {
+ $list1: join($list1, $var);
+ $list2: join($list2, $var);
+ }
+ }
+
+ $webkit: append($webkit, $list1);
+ $moz: append($moz, $list2);
+ $spec: append($spec, $list3);
+ }
+
+ // Create lists for non-prefixed transition properties
+ @else {
+ $webkit: append($webkit, $list, comma);
+ $moz: append($moz, $list, comma);
+ $spec: append($spec, $list, comma);
+ }
+ }
+
+ @if $needs-prefixes {
+ -webkit-transition: $webkit;
+ -moz-transition: $moz;
+ transition: $spec;
+ }
+ @else {
+ @if length($properties) >= 1 {
+ @include prefixer(transition, $properties, webkit moz spec);
+ }
+
+ @else {
+ $properties: all 0.15s ease-out 0s;
+ @include prefixer(transition, $properties, webkit moz spec);
+ }
+ }
+}
+
+@mixin transition-property ($properties...) {
+ -webkit-transition-property: transition-property-names($properties, 'webkit');
+ -moz-transition-property: transition-property-names($properties, 'moz');
+ transition-property: transition-property-names($properties, false);
+}
+
+@mixin transition-duration ($times...) {
+ @include prefixer(transition-duration, $times, webkit moz spec);
+}
+
+@mixin transition-timing-function ($motions...) {
+// ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier()
+ @include prefixer(transition-timing-function, $motions, webkit moz spec);
+}
+
+@mixin transition-delay ($times...) {
+ @include prefixer(transition-delay, $times, webkit moz spec);
+}
3 _sass/bourbon/css3/_user-select.scss
@@ -0,0 +1,3 @@
+@mixin user-select($arg: none) {
+ @include prefixer(user-select, $arg, webkit moz ms spec);
+}
11 _sass/bourbon/functions/_assign.scss
@@ -0,0 +1,11 @@
+@function assign-inputs($inputs, $pseudo: null) {
+ $list : ();
+
+ @each $input in $inputs {
+ $input: unquote($input);
+ $input: if($pseudo, $input + ":" + $pseudo, $input);
+ $list: append($list, $input, comma);
+ }
+
+ @return $list;
+}
13 _sass/bourbon/functions/_color-lightness.scss
@@ -0,0 +1,13 @@
+// Programatically determines whether a color is light or dark
+// Returns a boolean
+// More details here http://robots.thoughtbot.com/closer-look-color-lightness
+
+@function is-light($hex-color) {
+ $-local-red: red(rgba($hex-color, 1.0));
+ $-local-green: green(rgba($hex-color, 1.0));
+ $-local-blue: blue(rgba($hex-color, 1.0));
+
+ $-local-lightness: ($-local-red * 0.2126 + $-local-green * 0.7152 + $-local-blue * 0.0722) / 255;
+
+ @return $-local-lightness > .6;
+}
39 _sass/bourbon/functions/_flex-grid.scss
@@ -0,0 +1,39 @@
+// Flexible grid
+@function flex-grid($columns, $container-columns: $fg-max-columns) {
+ $width: $columns * $fg-column + ($columns - 1) * $fg-gutter;
+ $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter;
+ @return percentage($width / $container-width);
+}
+
+// Flexible gutter
+@function flex-gutter($container-columns: $fg-max-columns, $gutter: $fg-gutter) {
+ $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter;
+ @return percentage($gutter / $container-width);
+}
+
+// The $fg-column, $fg-gutter and $fg-max-columns variables must be defined in your base stylesheet to properly use the flex-grid function.
+// This function takes the fluid grid equation (target / context = result) and uses columns to help define each.
+//
+// The calculation presumes that your column structure will be missing the last gutter:
+//
+// -- column -- gutter -- column -- gutter -- column
+//
+// $fg-column: 60px; // Column Width
+// $fg-gutter: 25px; // Gutter Width
+// $fg-max-columns: 12; // Total Columns For Main Container
+//
+// div {
+// width: flex-grid(4); // returns (315px / 995px) = 31.65829%;
+// margin-left: flex-gutter(); // returns (25px / 995px) = 2.51256%;
+//
+// p {
+// width: flex-grid(2, 4); // returns (145px / 315px) = 46.031746%;
+// float: left;
+// margin: flex-gutter(4); // returns (25px / 315px) = 7.936508%;
+// }
+//
+// blockquote {
+// float: left;
+// width: flex-grid(2, 4); // returns (145px / 315px) = 46.031746%;
+// }
+// }
3 _sass/bourbon/functions/_golden-ratio.scss
@@ -0,0 +1,3 @@
+@function golden-ratio($value, $increment) {
+ @return modular-scale($value, $increment, $golden)
+}
13 _sass/bourbon/functions/_grid-width.scss
@@ -0,0 +1,13 @@
+@function grid-width($n) {
+ @return $n * $gw-column + ($n - 1) * $gw-gutter;
+}
+
+// The $gw-column and $gw-gutter variables must be defined in your base stylesheet to properly use the grid-width function.
+//
+// $gw-column: 100px; // Column Width
+// $gw-gutter: 40px; // Gutter Width
+//
+// div {
+// width: grid-width(4); // returns 520px;
+// margin-left: $gw-gutter; // returns 40px;
+// }
66 _sass/bourbon/functions/_modular-scale.scss
@@ -0,0 +1,66 @@
+// Scaling Variables
+$golden: 1.618;
+$minor-second: 1.067;
+$major-second: 1.125;
+$minor-third: 1.2;
+$major-third: 1.25;
+$perfect-fourth: 1.333;
+$augmented-fourth: 1.414;
+$perfect-fifth: 1.5;
+$minor-sixth: 1.6;
+$major-sixth: 1.667;
+$minor-seventh: 1.778;
+$major-seventh: 1.875;
+$octave: 2;
+$major-tenth: 2.5;
+$major-eleventh: 2.667;
+$major-twelfth: 3;
+$double-octave: 4;
+
+@function modular-scale($value, $increment, $ratio) {
+ $v1: nth($value, 1);
+ $v2: nth($value, length($value));
+ $value: $v1;
+
+ // scale $v2 to just above $v1
+ @while $v2 > $v1 {
+ $v2: ($v2 / $ratio); // will be off-by-1
+ }
+ @while $v2 < $v1 {
+ $v2: ($v2 * $ratio); // will fix off-by-1
+ }
+
+ // check AFTER scaling $v2 to prevent double-counting corner-case
+ $double-stranded: $v2 > $v1;
+
+ @if $increment > 0 {
+ @for $i from 1 through $increment {
+ @if $double-stranded and ($v1 * $ratio) > $v2 {
+ $value: $v2;
+ $v2: ($v2 * $ratio);
+ } @else {
+ $v1: ($v1 * $ratio);
+ $value: $v1;
+ }
+ }
+ }
+
+ @if $increment < 0 {
+ // adjust $v2 to just below $v1
+ @if $double-stranded {
+ $v2: ($v2 / $ratio);
+ }
+
+ @for $i from $increment through -1 {
+ @if $double-stranded and ($v1 / $ratio) < $v2 {
+ $value: $v2;
+ $v2: ($v2 / $ratio);
+ } @else {
+ $v1: ($v1 / $ratio);
+ $value: $v1;
+ }
+ }
+ }
+
+ @return $value;
+}
13 _sass/bourbon/functions/_px-to-em.scss
@@ -0,0 +1,13 @@
+// Convert pixels to ems
+// eg. for a relational value of 12px write em(12) when the parent is 16px
+// if the parent is another value say 24px write em(12, 24)
+
+@function em($pxval, $base: $em-base) {
+ @if not unitless($pxval) {
+ $pxval: strip-units($pxval);
+ }
+ @if not unitless($base) {
+ $base: strip-units($base);
+ }
+ @return ($pxval / $base) * 1em;
+}
15 _sass/bourbon/functions/_px-to-rem.scss
@@ -0,0 +1,15 @@
+// Convert pixels to rems
+// eg. for a relational value of 12px write rem(12)
+// Assumes $em-base is the font-size of <html>
+
+@function rem($pxval) {
+ @if not unitless($pxval) {
+ $pxval: strip-units($pxval);
+ }
+
+ $base: $em-base;
+ @if not unitless($base) {
+ $base: strip-units($base);
+ }
+ @return ($pxval / $base) * 1rem;
+}
5 _sass/bourbon/functions/_strip-units.scss
@@ -0,0 +1,5 @@
+// Srtips the units from a value. e.g. 12px -> 12
+
+@function strip-units($val) {
+ @return ($val / ($val * 0 + 1));
+}
9 _sass/bourbon/functions/_tint-shade.scss
@@ -0,0 +1,9 @@
+// Add percentage of white to a color
+@function tint($color, $percent){
+ @return mix(white, $color, $percent);
+}
+
+// Add percentage of black to a color
+@function shade($color, $percent){
+ @return mix(black, $color, $percent);
+}
22 _sass/bourbon/functions/_transition-property-name.scss
@@ -0,0 +1,22 @@
+// Return vendor-prefixed property names if appropriate
+// Example: transition-property-names((transform, color, background), moz) -> -moz-transform, color, background
+//************************************************************************//
+@function transition-property-names($props, $vendor: false) {
+ $new-props: ();
+
+ @each $prop in $props {
+ $new-props: append($new-props, transition-property-name($prop, $vendor), comma);
+ }
+
+ @return $new-props;
+}
+
+@function transition-property-name($prop, $vendor: false) {
+ // put other properties that need to be prefixed here aswell
+ @if $vendor and $prop == transform {
+ @return unquote('-'+$vendor+'-'+$prop);
+ }
+ @else {
+ @return $prop;
+ }
+}
17 _sass/bourbon/functions/_unpack.scss
@@ -0,0 +1,17 @@
+// Convert shorthand to the 4-value syntax
+
+@function unpack($shorthand) {
+ @if length($shorthand) == 1 {
+ @return nth($shorthand, 1) nth($shorthand, 1) nth($shorthand, 1) nth($shorthand, 1);
+ }
+ @else if length($shorthand) == 2 {
+ @return nth($shorthand, 1) nth($shorthand, 2) nth($shorthand, 1) nth($shorthand, 2);
+ }
+ @else if length($shorthand) == 3 {
+ @return nth($shorthand, 1) nth($shorthand, 2) nth($shorthand, 3) nth($shorthand, 2);
+ }
+ @else {
+ @return $shorthand;
+ }
+}
+
15 _sass/bourbon/helpers/_convert-units.scss
@@ -0,0 +1,15 @@
+//************************************************************************//
+// Helper function for str-to-num fn.
+// Source: http://sassmeister.com/gist/9647408
+//************************************************************************//
+@function _convert-units($number, $unit) {
+ $strings: 'px' 'cm' 'mm' '%' 'ch' 'pica' 'in' 'em' 'rem' 'pt' 'pc' 'ex' 'vw' 'vh' 'vmin' 'vmax', 'deg', 'rad', 'grad', 'turn';
+ $units: 1px 1cm 1mm 1% 1ch 1pica 1in 1em 1rem 1pt 1pc 1ex 1vw 1vh 1vmin 1vmax, 1deg, 1rad, 1grad, 1turn;
+ $index: index($strings, $unit);
+
+ @if not $index {
+ @warn "Unknown unit `#{$unit}`.";
+ @return false;
+ }
+ @return $number * nth($units, $index);
+}
13 _sass/bourbon/helpers/_gradient-positions-parser.scss
@@ -0,0 +1,13 @@
+@function _gradient-positions-parser($gradient-type, $gradient-positions) {
+ @if $gradient-positions
+ and ($gradient-type == linear)
+ and (type-of($gradient-positions) != color) {
+ $gradient-positions: _linear-positions-parser($gradient-positions);
+ }
+ @else if $gradient-positions
+ and ($gradient-type == radial)
+ and (type-of($gradient-positions) != color) {
+ $gradient-positions: _radial-positions-parser($gradient-positions);
+ }
+ @return $gradient-positions;
+}
8 _sass/bourbon/helpers/_is-num.scss
@@ -0,0 +1,8 @@
+//************************************************************************//
+// Helper for linear-gradient-parser
+//************************************************************************//
+@function _is-num($char) {
+ $values: '0' '1' '2' '3' '4' '5' '6' '7' '8' '9' 0 1 2 3 4 5 6 7 8 9;
+ $index: index($values, $char);
+ @return if($index, true, false);
+}
25 _sass/bourbon/helpers/_linear-angle-parser.scss
@@ -0,0 +1,25 @@
+// Private function for linear-gradient-parser
+@function _linear-angle-parser($image, $first-val, $prefix, $suffix) {
+ $offset: null;
+ $unit-short: str-slice($first-val, str-length($first-val) - 2, str-length($first-val));
+ $unit-long: str-slice($first-val, str-length($first-val) - 3, str-length($first-val));
+
+ @if ($unit-long == "grad") or
+ ($unit-long == "turn") {
+ $offset: if($unit-long == "grad", -100grad * 3, -0.75turn);
+ }
+
+ @else if ($unit-short == "deg") or
+ ($unit-short == "rad") {
+ $offset: if($unit-short == "deg", -90 * 3, 1.6rad);
+ }
+
+ @if $offset {
+ $num: _str-to-num($first-val);
+
+ @return (
+ webkit-image: -webkit- + $prefix + ($offset - $num) + $suffix,
+ spec-image: $image
+ );
+ }
+}
41 _sass/bourbon/helpers/_linear-gradient-parser.scss
@@ -0,0 +1,41 @@
+@function _linear-gradient-parser($image) {
+ $image: unquote($image);
+ $gradients: ();
+ $start: str-index($image, "(");
+ $end: str-index($image, ",");
+ $first-val: str-slice($image, $start + 1, $end - 1);
+
+ $prefix: str-slice($image, 0, $start);
+ $suffix: str-slice($image, $end, str-length($image));
+
+ $has-multiple-vals: str-index($first-val, " ");
+ $has-single-position: unquote(_position-flipper($first-val) + "");
+ $has-angle: _is-num(str-slice($first-val, 0, 0));
+
+ @if $has-multiple-vals {
+ $gradients: _linear-side-corner-parser($image, $first-val, $prefix, $suffix, $has-multiple-vals);
+ }
+
+ @else if $has-single-position != "" {
+ $pos: unquote($has-single-position + "");
+
+ $gradients: (
+ webkit-image: -webkit- + $image,
+ spec-image: $prefix + "to " + $pos + $suffix
+ );
+ }
+
+ @else if $has-angle {
+ // Rotate degree for webkit
+ $gradients: _linear-angle-parser($image, $first-val, $prefix, $suffix);
+ }
+
+ @else {
+ $gradients: (
+ webkit-image: -webkit- + $image,
+ spec-image: $image
+ );
+ }
+
+ @return $gradients;
+}
61 _sass/bourbon/helpers/_linear-positions-parser.scss
@@ -0,0 +1,61 @@
+@function _linear-positions-parser($pos) {
+ $type: type-of(nth($pos, 1));
+ $spec: null;
+ $degree: null;
+ $side: null;
+ $corner: null;
+ $length: length($pos);
+ // Parse Side and corner positions
+ @if ($length > 1) {
+ @if nth($pos, 1) == "to" { // Newer syntax
+ $side: nth($pos, 2);
+
+ @if $length == 2 { // eg. to top
+ // Swap for backwards compatability
+ $degree: _position-flipper(nth($pos, 2));
+ }
+ @else if $length == 3 { // eg. to top left
+ $corner: nth($pos, 3);
+ }
+ }
+ @else if $length == 2 { // Older syntax ("top left")
+ $side: _position-flipper(nth($pos, 1));
+ $corner: _position-flipper(nth($pos, 2));
+ }
+
+ @if ("#{$side} #{$corner}" == "left top") or ("#{$side} #{$corner}" == "top left") {
+ $degree: _position-flipper(#{$side}) _position-flipper(#{$corner});
+ }
+ @else if ("#{$side} #{$corner}" == "right top") or ("#{$side} #{$corner}" == "top right") {
+ $degree: _position-flipper(#{$side}) _position-flipper(#{$corner});
+ }
+ @else if ("#{$side} #{$corner}" == "right bottom") or ("#{$side} #{$corner}" == "bottom right") {
+ $degree: _position-flipper(#{$side}) _position-flipper(#{$corner});
+ }
+ @else if ("#{$side} #{$corner}" == "left bottom") or ("#{$side} #{$corner}" == "bottom left") {
+ $degree: _position-flipper(#{$side}) _position-flipper(#{$corner});
+ }
+ $spec: to $side $corner;
+ }
+ @else if $length == 1 {
+ // Swap for backwards compatability
+ @if $type == string {
+ $degree: $pos;
+ $spec: to _position-flipper($pos);
+ }
+ @else {
+ $degree: -270 - $pos; //rotate the gradient opposite from spec
+ $spec: $pos;
+ }
+ }
+ $degree: unquote($degree + ",");
+ $spec: unquote($spec + ",");
+ @return $degree $spec;
+}
+
+@function _position-flipper($pos) {
+ @return if($pos == left, right, null)
+ if($pos == right, left, null)
+ if($pos == top, bottom, null)
+ if($pos == bottom, top, null);
+}
31 _sass/bourbon/helpers/_linear-side-corner-parser.scss
@@ -0,0 +1,31 @@
+// Private function for linear-gradient-parser
+@function _linear-side-corner-parser($image, $first-val, $prefix, $suffix, $has-multiple-vals) {
+ $val-1: str-slice($first-val, 0, $has-multiple-vals - 1 );
+ $val-2: str-slice($first-val, $has-multiple-vals + 1, str-length($first-val));
+ $val-3: null;
+ $has-val-3: str-index($val-2, " ");
+
+ @if $has-val-3 {
+ $val-3: str-slice($val-2, $has-val-3 + 1, str-length($val-2));
+ $val-2: str-slice($val-2, 0, $has-val-3 - 1);
+ }
+
+ $pos: _position-flipper($val-1) _position-flipper($val-2) _position-flipper($val-3);
+ $pos: unquote($pos + "");
+
+ // Use old spec for webkit
+ @if $val-1 == "to" {
+ @return (
+ webkit-image: -webkit- + $prefix + $pos + $suffix,
+ spec-image: $image
+ );
+ }
+
+ // Bring the code up to spec
+ @else {
+ @return (
+ webkit-image: -webkit- + $image,
+ spec-image: $prefix + "to " + $pos + $suffix
+ );
+ }
+}
69 _sass/bourbon/helpers/_radial-arg-parser.scss
@@ -0,0 +1,69 @@
+@function _radial-arg-parser($G1, $G2, $pos, $shape-size) {
+ @each $value in $G1, $G2 {
+ $first-val: nth($value, 1);
+ $pos-type: type-of($first-val);
+ $spec-at-index: null;
+
+ // Determine if spec was passed to mixin
+ @if type-of($value) == list {
+ $spec-at-index: if(index($value, at), index($value, at), false);
+ }
+ @if $spec-at-index {
+ @if $spec-at-index > 1 {
+ @for $i from 1 through ($spec-at-index - 1) {
+ $shape-size: $shape-size nth($value, $i);
+ }
+ @for $i from ($spec-at-index + 1) through length($value) {
+ $pos: $pos nth($value, $i);
+ }
+ }
+ @else if $spec-at-index == 1 {
+ @for $i from ($spec-at-index + 1) through length($value) {
+ $pos: $pos nth($value, $i);
+ }
+ }
+ $G1: null;
+ }
+
+ // If not spec calculate correct values
+ @else {
+ @if ($pos-type != color) or ($first-val != "transparent") {
+ @if ($pos-type == number)
+ or ($first-val == "center")
+ or ($first-val == "top")
+ or ($first-val == "right")
+ or ($first-val == "bottom")
+ or ($first-val == "left") {
+
+ $pos: $value;
+
+ @if $pos == $G1 {
+ $G1: null;
+ }
+ }
+
+ @else if
+ ($first-val == "ellipse")
+ or ($first-val == "circle")
+ or ($first-val == "closest-side")
+ or ($first-val == "closest-corner")
+ or ($first-val == "farthest-side")
+ or ($first-val == "farthest-corner")
+ or ($first-val == "contain")
+ or ($first-val == "cover") {
+
+ $shape-size: $value;
+
+ @if $value == $G1 {
+ $G1: null;
+ }
+
+ @else if $value == $G2 {
+ $G2: null;
+ }
+ }
+ }
+ }
+ }
+ @return $G1, $G2, $pos, $shape-size;
+}
50 _sass/bourbon/helpers/_radial-gradient-parser.scss
@@ -0,0 +1,50 @@
+@function _radial-gradient-parser($image) {
+ $image: unquote($image);
+ $gradients: ();
+ $start: str-index($image, "(");
+ $end: str-index($image, ",");
+ $first-val: str-slice($image, $start + 1, $end - 1);
+
+ $prefix: str-slice($image, 0, $start);
+ $suffix: str-slice($image, $end, str-length($image));
+
+ $is-spec-syntax: str-index($first-val, "at");
+
+ @if $is-spec-syntax and $is-spec-syntax > 1 {
+ $keyword: str-slice($first-val, 1, $is-spec-syntax - 2);
+ $pos: str-slice($first-val, $is-spec-syntax + 3, str-length($first-val));
+ $pos: append($pos, $keyword, comma);
+
+ $gradients: (
+ webkit-image: -webkit- + $prefix + $pos + $suffix,
+ spec-image: $image
+ )
+ }
+
+ @else if $is-spec-syntax == 1 {
+ $pos: str-slice($first-val, $is-spec-syntax + 3, str-length($first-val));
+
+ $gradients: (
+ webkit-image: -webkit- + $prefix + $pos + $suffix,
+ spec-image: $image
+ )
+ }
+
+ @else if str-index($image, "cover") or str-index($image, "contain") {
+ @warn "Radial-gradient needs to be updated to conform to latest spec.";
+
+ $gradients: (
+ webkit-image: null,
+ spec-image: $image
+ )
+ }
+
+ @else {
+ $gradients: (
+ webkit-image: -webkit- + $image,
+ spec-image: $image
+ )
+ }
+
+ @return $gradients;
+}
18 _sass/bourbon/helpers/_radial-positions-parser.scss
@@ -0,0 +1,18 @@
+@function _radial-positions-parser($gradient-pos) {
+ $shape-size: nth($gradient-pos, 1);
+ $pos: nth($gradient-pos, 2);
+ $shape-size-spec: _shape-size-stripper($shape-size);
+
+ $pre-spec: unquote(if($pos, "#{$pos}, ", null))
+ unquote(if($shape-size, "#{$shape-size},", null));
+ $pos-spec: if($pos, "at #{$pos}", null);
+
+ $spec: "#{$shape-size-spec} #{$pos-spec}";
+
+ // Add comma
+ @if ($spec != ' ') {
+ $spec: "#{$spec},"
+ }
+
+ @return $pre-spec $spec;
+}
26 _sass/bourbon/helpers/_render-gradients.scss
@@ -0,0 +1,26 @@
+// User for linear and radial gradients within background-image or border-image properties
+
+@function _render-gradients($gradient-positions, $gradients, $gradient-type, $vendor: false) {
+ $pre-spec: null;
+ $spec: null;
+ $vendor-gradients: null;
+ @if $gradient-type == linear {
+ @if $gradient-positions {
+ $pre-spec: nth($gradient-positions, 1);
+ $spec: nth($gradient-positions, 2);
+ }
+ }
+ @else if $gradient-type == radial {
+ $pre-spec: nth($gradient-positions, 1);
+ $spec: nth($gradient-positions, 2);
+ }
+
+ @if $vendor {
+ $vendor-gradients: -#{$vendor}-#{$gradient-type}-gradient(#{$pre-spec} $gradients);
+ }
+ @else if $vendor == false {
+ $vendor-gradients: "#{$gradient-type}-gradient(#{$spec} #{$gradients})";
+ $vendor-gradients: unquote($vendor-gradients);
+ }
+ @return $vendor-gradients;
+}
10 _sass/bourbon/helpers/_shape-size-stripper.scss
@@ -0,0 +1,10 @@
+@function _shape-size-stripper($shape-size) {
+ $shape-size-spec: null;
+ @each $value in $shape-size {
+ @if ($value == "cover") or ($value == "contain") {
+ $value: null;
+ }
+ $shape-size-spec: "#{$shape-size-spec} #{$value}";
+ }
+ @return $shape-size-spec;
+}
50 _sass/bourbon/helpers/_str-to-num.scss
@@ -0,0 +1,50 @@
+//************************************************************************//
+// Helper function for linear/radial-gradient-parsers.
+// Source: http://sassmeister.com/gist/9647408
+//************************************************************************//
+@function _str-to-num($string) {
+ // Matrices
+ $strings: '0' '1' '2' '3' '4' '5' '6' '7' '8' '9';
+ $numbers: 0 1 2 3 4 5 6 7 8 9;
+
+ // Result
+ $result: 0;
+ $divider: 0;
+ $minus: false;
+
+ // Looping through all characters
+ @for $i from 1 through str-length($string) {
+ $character: str-slice($string, $i, $i);
+ $index: index($strings, $character);
+
+ @if $character == '-' {
+ $minus: true;
+ }
+
+ @else if $character == '.' {
+ $divider: 1;
+ }
+
+ @else {
+ @if not $index {
+ $result: if($minus, $result * -1, $result);
+ @return _convert-units($result, str-slice($string, $i));
+ }
+
+ $number: nth($numbers, $index);
+
+ @if $divider == 0 {
+ $result: $result * 10;
+ }
+
+ @else {
+ // Move the decimal dot to the left
+ $divider: $divider * 10;
+ $number: $number / $divider;
+ }
+
+ $result: $result + $number;
+ }
+ }
+ @return if($minus, $result * -1, $result);
+}
1 _sass/bourbon/settings/_asset-pipeline.scss
@@ -0,0 +1 @@
+$asset-pipeline: false !default;
6 _sass/bourbon/settings/_prefixer.scss
@@ -0,0 +1,6 @@
+// Variable settings for /addons/prefixer.scss
+$prefix-for-webkit: true !default;
+$prefix-for-mozilla: true !default;
+$prefix-for-microsoft: true !default;
+$prefix-for-opera: true !default;
+$prefix-for-spec: true !default; // required for keyframe mixin
1 _sass/bourbon/settings/_px-to-em.scss
@@ -0,0 +1 @@
+$em-base: 16px !default;
32 about.md
@@ -0,0 +1,32 @@
+---
+layout: page
+title: About
+permalink: /about/
+---
+
+<amp-img width="600" height="300" layout="responsive" src="http://lorempixel.com/600/300/sports"></amp-img>
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut ac augue libero.
+Fusce ac tempor dolor. Ut est dui, gravida a consequat aliquet, fermentum
+sodales risus. Suspendisse eu arcu id mi ornare facilisis non id nisl. Maecenas
+nec congue arcu, non semper neque. Proin mollis nisl diam, eu ultrices diam
+facilisis et. Integer fringilla lorem quis semper venenatis.
+
+Aliquam vestibulum purus enim. Sed rhoncus interdum erat id consequat. Nulla
+cursus venenatis massa, quis convallis lacus condimentum vel. Etiam mollis,
+orci ac pharetra commodo, diam lectus hendrerit eros, ac elementum magna augue
+sed tellus. Maecenas molestie, nisi ut sodales scelerisque, purus neque
+imperdiet dui, mollis elementum sem augue vel ipsum. Nulla lacinia arcu at quam
+lobortis, vitae interdum tellus fermentum. Cum sociis natoque penatibus et
+magnis dis parturient montes, nascetur ridiculus mus. Fusce sodales semper erat,
+eu fringilla ligula vulputate id. Maecenas quis libero pellentesque lacus
+egestas vehicula sit amet et neque. Nulla nec facilisis sem. Pellentesque rutrum
+elementum molestie. Quisque eget dui ac quam placerat dictum. Suspendisse quis
+ante placerat, efficitur enim ut, commodo tortor. Etiam consequat, eros quis
+consequat congue, augue mauris molestie libero, sed iaculis lectus enim eu magna.
+
+Etiam sapien dolor, mattis vel feugiat nec, egestas eget risus. Lorem ipsum
+dolor sit amet, consectetur adipiscing elit. Aenean aliquam massa a est porta
+ vehicula. Cras eu gravida massa. Integer non sem ac mi ultrices posuere a
+ pretium tortor. Mauris vitae varius sem. Praesent faucibus nec felis et dictum.
+ Vestibulum lorem velit, laoreet nec vestibulum in, varius nec enim.
BIN assets/images/author.jpg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN assets/images/logo.jpg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
30 feed.xml
@@ -0,0 +1,30 @@
+---
+layout: null
+---
+<?xml version="1.0" encoding="UTF-8"?>
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
+ <channel>
+ <title>{{ site.title | xml_escape }}</title>
+ <description>{{ site.description | xml_escape }}</description>
+ <link>{{ site.url }}{{ site.baseurl }}/</link>
+ <atom:link href="{{ "/feed.xml" | prepend: site.baseurl | prepend: site.url }}" rel="self" type="application/rss+xml"/>
+ <pubDate>{{ site.time | date_to_rfc822 }}</pubDate>
+ <lastBuildDate>{{ site.time | date_to_rfc822 }}</lastBuildDate>
+ <generator>Jekyll v{{ jekyll.version }}</generator>
+ {% for post in site.posts limit:10 %}
+ <item>
+ <title>{{ post.title | xml_escape }}</title>
+ <description>{{ post.content | xml_escape }}</description>
+ <pubDate>{{ post.date | date_to_rfc822 }}</pubDate>
+ <link>{{ post.url | prepend: site.baseurl | prepend: site.url }}</link>
+ <guid isPermaLink="true">{{ post.url | prepend: site.baseurl | prepend: site.url }}</guid>
+ {% for tag in post.tags %}
+ <category>{{ tag | xml_escape }}</category>
+ {% endfor %}
+ {% for cat in post.categories %}
+ <category>{{ cat | xml_escape }}</category>
+ {% endfor %}
+ </item>
+ {% endfor %}
+ </channel>
+</rss>
46 index.html
@@ -0,0 +1,46 @@
+---
+layout: default
+---
+
+<main class="content" role="main">
+
+ <header class="blog-header">
+ <h1 class="blog-title">{{ site.title }}</h1>
+ <h2 class="blog-description">{{ site.description }}</h2>
+ </header>
+
+ <div class="cf frame">
+ {% for post in paginator.posts %}
+ <article class="post" itemscope itemtype="http://schema.org/BlogPosting" role="article">
+ <div class="article-item">
+ <header class="post-header">
+ <h2 class="post-title" itemprop="name"><a href="{{ post.url }}" itemprop="url">{{ post.title }}</a></h2>
+ </header>
+ <section class="post-excerpt" itemprop="description">
+ <p>{{ post.excerpt | strip_html | truncatewords: 50 }}</p>
+ </section>
+ <div class="post-meta">
+ <time datetime="{{ post.date | date_to_long_string }}">{{ post.date | date_to_long_string }}</time>
+ </div>
+ </div>
+ </article>
+ {% endfor %}
+ </div>
+
+ <nav class="pagination" role="navigation">
+ {% if paginator.next_page %}
+ <a class="newer-posts" href="/page{{paginator.next_page}}">&larr; Older posts</a>
+ {% endif %}
+ <span class="page-number">Page {{ paginator.page }} of {{ paginator.total_pages }}</span>
+ {% if paginator.previous_page %}
+ {% if paginator.page == 2 %}
+ <a class="older-posts" href="/">Newer posts &rarr;</a>
+ {% else %}
+ <a class="older-posts" href="/page{{paginator.previous_page}}">Newer posts &rarr;</a>
+ {% endif %}
+ {% endif %}
+ </nav>
+
+</main>
+
+{% include footer.html %}

0 comments on commit 67c8e6e

Please sign in to comment.
Something went wrong with that request. Please try again.