From 0b620f609a25613d25162ef97b30ab76abe86ea7 Mon Sep 17 00:00:00 2001 From: Michael Rose Date: Tue, 7 Mar 2017 16:11:32 -0500 Subject: [PATCH 001/245] =?UTF-8?q?=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 265 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 265 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..e3a361c --- /dev/null +++ b/README.md @@ -0,0 +1,265 @@ +# WIP Basically Basic Jekyll Theme + +Basically Basic is a [Jekyll theme](https://jekyllrb.com/docs/themes/) meant as a substitute for the default `jekyll new` theme --- [Minima](https://github.com/jekyll/minima). Conventions and features found in Minima are fully supported by **Basically Basic**, with a few enhancements here and there. + +## Table of Contents + +## Installation + +1. Install the theme as a Ruby Gem by adding it to your `Gemfile` like so: + + ```ruby + gem "jekyll-theme-basically-basic", :git => "https://github.com/mmistakes/jekyll-theme-basically-basic.git" + ``` + +2. Fetch and update your bundled gems by running the following [Bundler](http://bundler.io/) command: + + ```bash + bundle + ``` + +3. Set the `theme` in your project's Jekyll configuration, `_config.yml`: + + ```yaml + theme: jekyll-theme-basically-basic + ``` + +## Configuration + +Configuration of site-wide elements (`title`, `description`, `author`, etc.) happens in your project's `_config.yml`. See the [example configuration](/example/_config.yml) for reference. + +### Skin + +This theme comes in six different skins (color variations). To change skins edit your project's `_config.yml` to one of the following: + +| `theme_skin: default` | `theme_skin: night` | `theme_skin: plum` | +| `theme_skin: sea` | `theme_skin: soft` | `theme_skin: steel` | + +### Navigation + +By default all internal pages with a `title` will be added to the "off-canvas" menu. For more granular control and sorting of these menu links: + +1. Create a custom list to override the default setting by adding a `navigation_pages` array to your `_config.yml` file. + +2. Add raw page paths in the order you'd like: + + ```yaml + navigation_pages: + - about.md + - cv.md + ``` + +Each menu link's title and URL will be populated based on their `title` and `permalink` respectively. + +### Pagination + +Break up the main listing of posts into smaller lists and display them over multiple pages by [enabling pagination](http://jekyllrb.com/docs/pagination/). + +1. Include the `jekyll-paginate` plugin in your `Gemfile`. + + ```ruby + group :jekyll_plugins do + gem "jekyll-paginate" + end + ``` + +2. Add `jekyll-paginate` to `gems` array in your `_config.yml` file and the following pagination settings: + + ```yaml + paginate: 5 # amount of posts to show per page + paginate_path: /page:num/ + ``` + +3. Create `index.html` (or rename `index.md`) in the root of your project and add `layout: home` `paginate: true` to its YAML Front Matter. + +### Comments (via Disqus) + +Optionally, if you have a [Disqus](https://disqus.com/) account, you can show a comments section below each post. + +To enable Disqus comments, add your [Disqus shortname](https://help.disqus.com/customer/portal/articles/466208) to your project's `_config.yml` file: + +```yaml + disqus: + shortname: my_disqus_shortname +``` + +Comments are enabled by default and will only appear in production when built with the following [environment value](http://jekyllrb.com/docs/configuration/#specifying-a-jekyll-environment-at-build-time): `JEKYLL_ENV=production` + +If you don't want to display comments for a particular post you can disable them by adding `comments: false` to that post's YAML Front Matter. + +### Google Analytics + +To enable Google Analytics, add your [tracking ID](https://support.google.com/analytics/answer/1032385) to `_config.yml` like so: + +```yaml + google_analytics: UA-NNNNNNNN-N +``` + +Similar to comments, the Google Analytics tracking script will only appear in production when using the following environment value: `JEKYLL_ENV=production`. + +## Layouts + +This theme provides the following layouts, which you can use by setting the `layout` [Front Matter](https://jekyllrb.com/docs/frontmatter/) on each page, like so: + +```yaml +--- +layout: name +--- +``` + +### `layout: default` + +### `layout: post` + +### `layout: page` + +### `layout: home` + +### `layout: about` + +### `layout: cv` + +## Customization + +The default structure, style, and scripts of this theme can be overridden and customized in the following two ways. + +### Overriding Includes and Layouts + +Theme defaults can be [overridden](http://jekyllrb.com/docs/themes/#overriding-theme-defaults) by placing a file with the same name into your project's `_includes` or `_layouts` directory. For instance: + +- To specify a custom style path or meta data to the [`_includes/head.html `](_includes/head.html) file, create an `_includes` directory in your project, copy `_includes/head.html` from Basically +Basic's gem folder to `/_includes` and start editing that file. + +**ProTip:** to locate the theme's files on your computer run `bundle show jekyll-theme-basically-basic`. This returns the location of the gem-based theme files. + +### Customizing Sass (SCSS) + +To override the default [Sass](http://sass-lang.com/guide) (located in theme's `_sass` directory), do one of the following: + +1. Copy directly from the Basically Basic gem + + - Go to your local Basically Basic gem installation directory (run `bundle show jekyll-theme-basically-basic` to get the path to it). + - Copy the contents of `/assets/stylesheets/main.scss` from there to ``. + - Customize want you want inside `/assets/stylesheets/main.scss`. + +2. Copy from this repo. + + - Copy the contents of [assets/stylesheets/main.scss](assets/stylesheets/main.scss) to ``. + - Customize want you want inside `` due to the way Jekyll currently reads those files. + +To make basic tweaks to theme's style Sass variables can be overridden by adding to `/assets/stylesheets/main.scss`. For instance, to change the accent color used throughout the theme add: + +```scss +$accent-color: red; +``` + +Before any `@import` lines. + +### Customizing JavaScript + +To override the default JavaScript bundled in the theme, do one of the following: + +1. Copy directly from the Basically Basic gem + + - Go to your local Basically Basic gem installation directory (run `bundle show jekyll-theme-basically-basic` to get the path to it). + - Copy the contents of `/assets/javascripts/main.js` from there to ``. + - Customize want you want inside `/assets/javascripts/main.js`. + +2. Copy from this repo. + + - Copy the contents of [assets/javascripts/main.js](assets/javascripts/main.js) to ``. + - Customize want you want inside `/assets/javascripts/main.js`. + +### Customizing Sidebar Content + +--- + +## Development + +To set up your environment to develop this theme: + +1. Clone this repo +2. `cd` into `/example` and run `bundle install`. + +To test the theme the locally as you make changes to it: + +1. `cd` into the root folder of the repo (e.g. `jekyll-theme-basically-basic`). +2. Run `bundle exec rake preview` and open your browser to `http://localhost:4000/example/`. + +This starts a Jekyll server using the theme's files and contents of the `example/` directory. As modifications are made, refresh your browser to see any changes. + +## Contributing + +Found a typo in the documentation? Interested in adding a feature or +[fixing a bug][issues]? Then by all means [submit an issue][new-issue] or take a +stab at submitting a [pull request][using-pull-requests]. If this is your first +pull request, it may be helpful to read up on the [GitHub Flow][github-flow]. + +[issues]: https://github.com/mmistakes/jekyll-theme-basically-basic/issues +[new-issue]: https://github.com/mmistakes/jekyll-theme-basically-basic/issues/new +[using-pull-requests]: https://help.github.com/articles/using-pull-requests/ +[github-flow]: https://guides.github.com/introduction/flow/ + +### Pull Requests + +When submitting a pull request: + +1. Clone the repo. +2. Create a branch off of `develop` and give it a meaningful name (e.g. + `my-awesome-new-feature`) and describe the feature or fix. +3. Open a pull request on GitHub. + +Theme documentation and sample pages can be found in the [`/docs`](docs) folder +if you'd like to tackle any "low-hanging fruit" like fixing typos, bad grammar, etc. + +--- + +## Credits + +### Creator + +**Michael Rose** + +- +- +- + +### Icons + Demo Images: + +- [Simple Icons](https://simpleicons.org/) +- [Noun Project](https://thenounproject.com) +- [Unsplash](https://unsplash.com/) + +### Other: + +- [Jekyll](http://jekyllrb.com/) +- [Susy](http://susy.oddbird.net/) +- [Breakpoint](http://breakpoint-sass.com/) + +--- + +## License + +The MIT License (MIT) + +Copyright (c) 2017 Michael Rose + +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. From 4923774857108f5c76575ce9994c80c658048d0e Mon Sep 17 00:00:00 2001 From: Michael Rose Date: Tue, 7 Mar 2017 16:12:17 -0500 Subject: [PATCH 002/245] =?UTF-8?q?=F0=9F=9A=80=20init?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .editorconfig | 13 + .gitattributes | 5 + .gitignore | 14 + CHANGELOG.md | 19 + Gemfile | 2 + LICENSE.md | 21 + Rakefile | 75 +++ _includes/author | 31 ++ _includes/contact-list.html | 27 + _includes/cv/awards.html | 24 + _includes/cv/basics.html | 69 +++ _includes/cv/education.html | 36 ++ _includes/cv/interests.html | 20 + _includes/cv/intro.html | 18 + _includes/cv/languages.html | 20 + _includes/cv/publications.html | 30 + _includes/cv/references.html | 24 + _includes/cv/skills.html | 20 + _includes/cv/volunteer.html | 46 ++ _includes/cv/work.html | 46 ++ _includes/disqus_comments.html | 17 + _includes/entry.html | 24 + _includes/footer.html | 8 + _includes/google-analytics.html | 9 + _includes/head-feed.html | 1 + _includes/head-seo.html | 1 + _includes/head.html | 33 ++ _includes/icon-arrow-left.svg | 1 + _includes/icon-arrow-right.svg | 1 + _includes/icon-bitbucket.html | 4 + _includes/icon-bitbucket.svg | 1 + _includes/icon-codepen.html | 4 + _includes/icon-codepen.svg | 1 + _includes/icon-download.svg | 1 + _includes/icon-dribbble.html | 4 + _includes/icon-dribbble.svg | 1 + _includes/icon-email.svg | 1 + _includes/icon-facebook.html | 4 + _includes/icon-facebook.svg | 1 + _includes/icon-flickr.html | 4 + _includes/icon-flickr.svg | 1 + _includes/icon-github.html | 4 + _includes/icon-github.svg | 1 + _includes/icon-gitlab.html | 4 + _includes/icon-gitlab.svg | 1 + _includes/icon-googleplus.html | 4 + _includes/icon-googleplus.svg | 1 + _includes/icon-instagram.html | 4 + _includes/icon-instagram.svg | 1 + _includes/icon-lastfm.html | 4 + _includes/icon-lastfm.svg | 1 + _includes/icon-linkedin.html | 4 + _includes/icon-linkedin.svg | 1 + _includes/icon-pdf.svg | 1 + _includes/icon-pinterest.html | 4 + _includes/icon-pinterest.svg | 1 + _includes/icon-rss.svg | 1 + _includes/icon-soundcloud.html | 4 + _includes/icon-soundcloud.svg | 1 + _includes/icon-stackoverflow.html | 4 + _includes/icon-stackoverflow.svg | 1 + _includes/icon-stopwatch.svg | 1 + _includes/icon-tumblr.html | 4 + _includes/icon-tumblr.svg | 1 + _includes/icon-twitter.html | 4 + _includes/icon-twitter.svg | 1 + _includes/icon-xing.html | 4 + _includes/icon-xing.svg | 1 + _includes/icon-youtube.html | 4 + _includes/icon-youtube.svg | 1 + _includes/masthead.html | 21 + _includes/navigation.html | 25 + _includes/page-intro.html | 31 ++ _includes/posts-all.html | 3 + _includes/posts-paginated.html | 16 + _includes/scripts.html | 5 + _includes/skip-links.html | 8 + _layouts/about.html | 21 + _layouts/cv.html | 28 + _layouts/default.html | 36 ++ _layouts/home.html | 30 + _layouts/page.html | 17 + _layouts/post.html | 20 + _sass/basically-basic.scss | 39 ++ _sass/basically-basic/_base.scss | 92 ++++ _sass/basically-basic/_buttons.scss | 39 ++ _sass/basically-basic/_contact-lists.scss | 11 + _sass/basically-basic/_entries.scss | 138 +++++ _sass/basically-basic/_footer.scss | 13 + _sass/basically-basic/_global.scss | 26 + _sass/basically-basic/_header.scss | 32 ++ _sass/basically-basic/_icons.scss | 42 ++ _sass/basically-basic/_intro.scss | 85 +++ _sass/basically-basic/_layout.scss | 150 +++++ _sass/basically-basic/_mixins.scss | 7 + _sass/basically-basic/_navicons.scss | 136 +++++ _sass/basically-basic/_navigation.scss | 50 ++ _sass/basically-basic/_reset.scss | 513 ++++++++++++++++++ _sass/basically-basic/_sidebar.scss | 168 ++++++ .../basically-basic/_syntax-highlighting.scss | 127 +++++ _sass/basically-basic/_tables.scss | 37 ++ _sass/basically-basic/_utilities.scss | 5 + _sass/basically-basic/_variables.scss | 81 +++ _sass/basically-basic/mixins/_clearfix.scss | 11 + _sass/basically-basic/mixins/_color.scss | 21 + _sass/basically-basic/mixins/_float.scss | 15 + _sass/basically-basic/mixins/_fluid-type.scss | 31 ++ _sass/basically-basic/mixins/_image.scss | 36 ++ _sass/basically-basic/mixins/_lists.scss | 9 + .../mixins/_text-truncate.scss | 8 + _sass/basically-basic/themes/_default.scss | 5 + _sass/basically-basic/themes/_night.scss | 12 + _sass/basically-basic/themes/_plum.scss | 12 + _sass/basically-basic/themes/_sea.scss | 12 + _sass/basically-basic/themes/_soft.scss | 12 + _sass/basically-basic/themes/_steel.scss | 12 + .../utilities/_accessibility.scss | 67 +++ _sass/basically-basic/utilities/_align.scss | 20 + .../basically-basic/utilities/_clearfix.scss | 7 + _sass/basically-basic/utilities/_float.scss | 7 + _sass/basically-basic/utilities/_text.scss | 22 + _sass/basically-basic/vendor/_breakpoint.scss | 114 ++++ _sass/basically-basic/vendor/_su.scss | 4 + _sass/basically-basic/vendor/_susy.scss | 4 + _sass/basically-basic/vendor/_susyone.scss | 4 + .../vendor/breakpoint/_context.scss | 95 ++++ .../vendor/breakpoint/_helpers.scss | 151 ++++++ .../vendor/breakpoint/_legacy-settings.scss | 50 ++ .../vendor/breakpoint/_no-query.scss | 15 + .../vendor/breakpoint/_parsers.scss | 215 ++++++++ .../vendor/breakpoint/_respond-to.scss | 82 +++ .../vendor/breakpoint/_settings.scss | 71 +++ .../vendor/breakpoint/parsers/_double.scss | 33 ++ .../vendor/breakpoint/parsers/_query.scss | 82 +++ .../breakpoint/parsers/_resolution.scss | 31 ++ .../vendor/breakpoint/parsers/_single.scss | 26 + .../vendor/breakpoint/parsers/_triple.scss | 36 ++ .../parsers/double/_default-pair.scss | 21 + .../breakpoint/parsers/double/_default.scss | 22 + .../parsers/double/_double-string.scss | 22 + .../parsers/resolution/_resolution.scss | 60 ++ .../breakpoint/parsers/single/_default.scss | 13 + .../breakpoint/parsers/triple/_default.scss | 18 + _sass/basically-basic/vendor/susy/_su.scss | 7 + .../vendor/susy/language/_susy.scss | 24 + .../vendor/susy/language/_susyone.scss | 13 + .../susy/language/susy/_background.scss | 385 +++++++++++++ .../vendor/susy/language/susy/_bleed.scss | 200 +++++++ .../susy/language/susy/_box-sizing.scss | 47 ++ .../language/susy/_breakpoint-plugin.scss | 185 +++++++ .../vendor/susy/language/susy/_container.scss | 81 +++ .../vendor/susy/language/susy/_context.scss | 36 ++ .../vendor/susy/language/susy/_gallery.scss | 94 ++++ .../vendor/susy/language/susy/_grids.scss | 64 +++ .../vendor/susy/language/susy/_gutters.scss | 154 ++++++ .../vendor/susy/language/susy/_isolate.scss | 77 +++ .../vendor/susy/language/susy/_margins.scss | 94 ++++ .../vendor/susy/language/susy/_padding.scss | 74 +++ .../vendor/susy/language/susy/_rows.scss | 138 +++++ .../vendor/susy/language/susy/_settings.scss | 216 ++++++++ .../vendor/susy/language/susy/_span.scss | 163 ++++++ .../susy/language/susy/_validation.scss | 16 + .../susy/language/susyone/_background.scss | 18 + .../susy/language/susyone/_functions.scss | 377 +++++++++++++ .../vendor/susy/language/susyone/_grid.scss | 312 +++++++++++ .../susy/language/susyone/_isolation.scss | 51 ++ .../vendor/susy/language/susyone/_margin.scss | 93 ++++ .../vendor/susy/language/susyone/_media.scss | 105 ++++ .../susy/language/susyone/_padding.scss | 92 ++++ .../susy/language/susyone/_settings.scss | 60 ++ .../vendor/susy/output/_float.scss | 9 + .../vendor/susy/output/_shared.scss | 15 + .../vendor/susy/output/_support.scss | 9 + .../vendor/susy/output/float/_container.scss | 16 + .../vendor/susy/output/float/_end.scss | 40 ++ .../vendor/susy/output/float/_isolate.scss | 22 + .../vendor/susy/output/float/_span.scss | 35 ++ .../susy/output/shared/_background.scss | 26 + .../vendor/susy/output/shared/_container.scss | 21 + .../vendor/susy/output/shared/_direction.scss | 42 ++ .../vendor/susy/output/shared/_inspect.scss | 25 + .../vendor/susy/output/shared/_margins.scss | 23 + .../vendor/susy/output/shared/_output.scss | 14 + .../vendor/susy/output/shared/_padding.scss | 23 + .../susy/output/support/_background.scss | 58 ++ .../susy/output/support/_box-sizing.scss | 19 + .../vendor/susy/output/support/_clearfix.scss | 18 + .../vendor/susy/output/support/_prefix.scss | 19 + .../vendor/susy/output/support/_rem.scss | 22 + .../vendor/susy/output/support/_support.scss | 85 +++ .../basically-basic/vendor/susy/su/_grid.scss | 103 ++++ .../vendor/susy/su/_settings.scss | 73 +++ .../vendor/susy/su/_utilities.scss | 111 ++++ .../vendor/susy/su/_validation.scss | 57 ++ assets/images/image-alignment-1200x4002.jpg | Bin 0 -> 35514 bytes assets/images/image-alignment-150x150.jpg | Bin 0 -> 2844 bytes assets/images/image-alignment-300x200.jpg | Bin 0 -> 6446 bytes assets/images/image-alignment-580x300.jpg | Bin 0 -> 9082 bytes assets/images/markus-spiske-207946.jpg | Bin 0 -> 279954 bytes assets/javascripts/main.js | 57 ++ assets/stylesheets/main.scss | 10 + example/Gemfile | 14 + example/_config.yml | 74 +++ example/_data/cv.json | 130 +++++ example/_pages/404.md | 16 + example/_pages/archive-layout-with-content.md | 219 ++++++++ example/_pages/category-archive.html | 17 + example/_pages/collection-archive.html | 24 + example/_pages/lorem-ipsum.md | 52 ++ example/_pages/page-a.md | 7 + example/_pages/page-archive.html | 11 + example/_pages/page-b.md | 7 + example/_pages/portfolio-archive.html | 14 + example/_pages/recipes-archive.html | 12 + example/_pages/sample-page.md | 15 + example/_pages/sitemap.md | 37 ++ example/_pages/splash-page.md | 65 +++ example/_pages/tag-archive.html | 17 + example/_pages/terms.md | 58 ++ example/_pages/year-archive.html | 17 + example/_pets/lhasa-apso.md | 8 + example/_pets/tabby.md | 8 + ...-05-15-edge-case-nested-and-mixed-lists.md | 60 ++ .../_posts/2009-06-01-edge-case-many-tags.md | 49 ++ .../2009-07-02-edge-case-many-categories.md | 19 + .../2009-08-06-edge-case-no-body-content.md | 9 + .../2009-09-05-edge-case-no-yaml-title.md | 10 + ...le-should-not-overflow-the-content-area.md | 27 + .../2009-10-05-edge-case-very-long-title.md | 14 + example/_posts/2010-01-07-post-modified.md | 14 + example/_posts/2010-01-07-post-standard.md | 32 ++ example/_posts/2010-01-08-post-chat.md | 134 +++++ example/_posts/2010-02-05-post-notice.md | 68 +++ example/_posts/2010-02-05-post-quote.md | 12 + example/_posts/2010-03-07-post-link.md | 15 + .../_posts/2010-06-02-post-video-youtube.md | 11 + .../_posts/2010-09-10-post-twitter-embeds.md | 15 + example/_posts/2010-10-25-post-future-date.md | 8 + ...012-03-14-layout-code-excerpt-generated.md | 14 + .../2012-03-14-layout-excerpt-defined.md | 15 + .../2012-03-14-layout-excerpt-generated.md | 23 + .../2012-05-22-markup-text-readability.md | 45 ++ .../2013-01-05-markup-title-with-markup.md | 14 + ...05-markup-title-with-special-characters.md | 432 +++++++++++++++ .../2013-01-09-markup-text-alignment.md | 34 ++ .../2013-01-10-markup-image-alignment.md | 72 +++ ...3-01-11-markup-html-tags-and-formatting.md | 221 ++++++++ .../_posts/2013-05-22-markup-more-images.md | 63 +++ .../2013-08-16-markup-syntax-highlighting.md | 99 ++++ example/about.md | 15 + example/cv.md | 8 + example/index.html | 16 + jekyll-theme-basically-basic.gemspec | 26 + 253 files changed, 10834 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 CHANGELOG.md create mode 100644 Gemfile create mode 100644 LICENSE.md create mode 100644 Rakefile create mode 100644 _includes/author create mode 100644 _includes/contact-list.html create mode 100644 _includes/cv/awards.html create mode 100644 _includes/cv/basics.html create mode 100644 _includes/cv/education.html create mode 100644 _includes/cv/interests.html create mode 100644 _includes/cv/intro.html create mode 100644 _includes/cv/languages.html create mode 100644 _includes/cv/publications.html create mode 100644 _includes/cv/references.html create mode 100644 _includes/cv/skills.html create mode 100644 _includes/cv/volunteer.html create mode 100644 _includes/cv/work.html create mode 100644 _includes/disqus_comments.html create mode 100644 _includes/entry.html create mode 100644 _includes/footer.html create mode 100644 _includes/google-analytics.html create mode 100644 _includes/head-feed.html create mode 100644 _includes/head-seo.html create mode 100644 _includes/head.html create mode 100644 _includes/icon-arrow-left.svg create mode 100644 _includes/icon-arrow-right.svg create mode 100644 _includes/icon-bitbucket.html create mode 100644 _includes/icon-bitbucket.svg create mode 100644 _includes/icon-codepen.html create mode 100644 _includes/icon-codepen.svg create mode 100644 _includes/icon-download.svg create mode 100644 _includes/icon-dribbble.html create mode 100644 _includes/icon-dribbble.svg create mode 100644 _includes/icon-email.svg create mode 100644 _includes/icon-facebook.html create mode 100644 _includes/icon-facebook.svg create mode 100644 _includes/icon-flickr.html create mode 100644 _includes/icon-flickr.svg create mode 100644 _includes/icon-github.html create mode 100644 _includes/icon-github.svg create mode 100644 _includes/icon-gitlab.html create mode 100644 _includes/icon-gitlab.svg create mode 100644 _includes/icon-googleplus.html create mode 100644 _includes/icon-googleplus.svg create mode 100644 _includes/icon-instagram.html create mode 100644 _includes/icon-instagram.svg create mode 100644 _includes/icon-lastfm.html create mode 100644 _includes/icon-lastfm.svg create mode 100644 _includes/icon-linkedin.html create mode 100644 _includes/icon-linkedin.svg create mode 100644 _includes/icon-pdf.svg create mode 100644 _includes/icon-pinterest.html create mode 100644 _includes/icon-pinterest.svg create mode 100644 _includes/icon-rss.svg create mode 100644 _includes/icon-soundcloud.html create mode 100644 _includes/icon-soundcloud.svg create mode 100644 _includes/icon-stackoverflow.html create mode 100644 _includes/icon-stackoverflow.svg create mode 100644 _includes/icon-stopwatch.svg create mode 100644 _includes/icon-tumblr.html create mode 100644 _includes/icon-tumblr.svg create mode 100644 _includes/icon-twitter.html create mode 100644 _includes/icon-twitter.svg create mode 100644 _includes/icon-xing.html create mode 100644 _includes/icon-xing.svg create mode 100644 _includes/icon-youtube.html create mode 100644 _includes/icon-youtube.svg create mode 100644 _includes/masthead.html create mode 100644 _includes/navigation.html create mode 100644 _includes/page-intro.html create mode 100644 _includes/posts-all.html create mode 100644 _includes/posts-paginated.html create mode 100644 _includes/scripts.html create mode 100644 _includes/skip-links.html create mode 100644 _layouts/about.html create mode 100644 _layouts/cv.html create mode 100644 _layouts/default.html create mode 100644 _layouts/home.html create mode 100644 _layouts/page.html create mode 100644 _layouts/post.html create mode 100644 _sass/basically-basic.scss create mode 100644 _sass/basically-basic/_base.scss create mode 100644 _sass/basically-basic/_buttons.scss create mode 100644 _sass/basically-basic/_contact-lists.scss create mode 100644 _sass/basically-basic/_entries.scss create mode 100644 _sass/basically-basic/_footer.scss create mode 100644 _sass/basically-basic/_global.scss create mode 100644 _sass/basically-basic/_header.scss create mode 100644 _sass/basically-basic/_icons.scss create mode 100644 _sass/basically-basic/_intro.scss create mode 100644 _sass/basically-basic/_layout.scss create mode 100644 _sass/basically-basic/_mixins.scss create mode 100644 _sass/basically-basic/_navicons.scss create mode 100644 _sass/basically-basic/_navigation.scss create mode 100644 _sass/basically-basic/_reset.scss create mode 100644 _sass/basically-basic/_sidebar.scss create mode 100644 _sass/basically-basic/_syntax-highlighting.scss create mode 100644 _sass/basically-basic/_tables.scss create mode 100644 _sass/basically-basic/_utilities.scss create mode 100644 _sass/basically-basic/_variables.scss create mode 100644 _sass/basically-basic/mixins/_clearfix.scss create mode 100644 _sass/basically-basic/mixins/_color.scss create mode 100644 _sass/basically-basic/mixins/_float.scss create mode 100644 _sass/basically-basic/mixins/_fluid-type.scss create mode 100644 _sass/basically-basic/mixins/_image.scss create mode 100644 _sass/basically-basic/mixins/_lists.scss create mode 100644 _sass/basically-basic/mixins/_text-truncate.scss create mode 100644 _sass/basically-basic/themes/_default.scss create mode 100644 _sass/basically-basic/themes/_night.scss create mode 100644 _sass/basically-basic/themes/_plum.scss create mode 100644 _sass/basically-basic/themes/_sea.scss create mode 100644 _sass/basically-basic/themes/_soft.scss create mode 100644 _sass/basically-basic/themes/_steel.scss create mode 100644 _sass/basically-basic/utilities/_accessibility.scss create mode 100644 _sass/basically-basic/utilities/_align.scss create mode 100644 _sass/basically-basic/utilities/_clearfix.scss create mode 100644 _sass/basically-basic/utilities/_float.scss create mode 100644 _sass/basically-basic/utilities/_text.scss create mode 100644 _sass/basically-basic/vendor/_breakpoint.scss create mode 100644 _sass/basically-basic/vendor/_su.scss create mode 100644 _sass/basically-basic/vendor/_susy.scss create mode 100644 _sass/basically-basic/vendor/_susyone.scss create mode 100644 _sass/basically-basic/vendor/breakpoint/_context.scss create mode 100644 _sass/basically-basic/vendor/breakpoint/_helpers.scss create mode 100644 _sass/basically-basic/vendor/breakpoint/_legacy-settings.scss create mode 100644 _sass/basically-basic/vendor/breakpoint/_no-query.scss create mode 100644 _sass/basically-basic/vendor/breakpoint/_parsers.scss create mode 100644 _sass/basically-basic/vendor/breakpoint/_respond-to.scss create mode 100644 _sass/basically-basic/vendor/breakpoint/_settings.scss create mode 100644 _sass/basically-basic/vendor/breakpoint/parsers/_double.scss create mode 100644 _sass/basically-basic/vendor/breakpoint/parsers/_query.scss create mode 100644 _sass/basically-basic/vendor/breakpoint/parsers/_resolution.scss create mode 100644 _sass/basically-basic/vendor/breakpoint/parsers/_single.scss create mode 100644 _sass/basically-basic/vendor/breakpoint/parsers/_triple.scss create mode 100644 _sass/basically-basic/vendor/breakpoint/parsers/double/_default-pair.scss create mode 100644 _sass/basically-basic/vendor/breakpoint/parsers/double/_default.scss create mode 100644 _sass/basically-basic/vendor/breakpoint/parsers/double/_double-string.scss create mode 100644 _sass/basically-basic/vendor/breakpoint/parsers/resolution/_resolution.scss create mode 100644 _sass/basically-basic/vendor/breakpoint/parsers/single/_default.scss create mode 100644 _sass/basically-basic/vendor/breakpoint/parsers/triple/_default.scss create mode 100644 _sass/basically-basic/vendor/susy/_su.scss create mode 100644 _sass/basically-basic/vendor/susy/language/_susy.scss create mode 100644 _sass/basically-basic/vendor/susy/language/_susyone.scss create mode 100644 _sass/basically-basic/vendor/susy/language/susy/_background.scss create mode 100644 _sass/basically-basic/vendor/susy/language/susy/_bleed.scss create mode 100644 _sass/basically-basic/vendor/susy/language/susy/_box-sizing.scss create mode 100644 _sass/basically-basic/vendor/susy/language/susy/_breakpoint-plugin.scss create mode 100644 _sass/basically-basic/vendor/susy/language/susy/_container.scss create mode 100644 _sass/basically-basic/vendor/susy/language/susy/_context.scss create mode 100644 _sass/basically-basic/vendor/susy/language/susy/_gallery.scss create mode 100644 _sass/basically-basic/vendor/susy/language/susy/_grids.scss create mode 100644 _sass/basically-basic/vendor/susy/language/susy/_gutters.scss create mode 100644 _sass/basically-basic/vendor/susy/language/susy/_isolate.scss create mode 100644 _sass/basically-basic/vendor/susy/language/susy/_margins.scss create mode 100644 _sass/basically-basic/vendor/susy/language/susy/_padding.scss create mode 100644 _sass/basically-basic/vendor/susy/language/susy/_rows.scss create mode 100644 _sass/basically-basic/vendor/susy/language/susy/_settings.scss create mode 100644 _sass/basically-basic/vendor/susy/language/susy/_span.scss create mode 100644 _sass/basically-basic/vendor/susy/language/susy/_validation.scss create mode 100644 _sass/basically-basic/vendor/susy/language/susyone/_background.scss create mode 100644 _sass/basically-basic/vendor/susy/language/susyone/_functions.scss create mode 100644 _sass/basically-basic/vendor/susy/language/susyone/_grid.scss create mode 100644 _sass/basically-basic/vendor/susy/language/susyone/_isolation.scss create mode 100644 _sass/basically-basic/vendor/susy/language/susyone/_margin.scss create mode 100644 _sass/basically-basic/vendor/susy/language/susyone/_media.scss create mode 100644 _sass/basically-basic/vendor/susy/language/susyone/_padding.scss create mode 100644 _sass/basically-basic/vendor/susy/language/susyone/_settings.scss create mode 100644 _sass/basically-basic/vendor/susy/output/_float.scss create mode 100644 _sass/basically-basic/vendor/susy/output/_shared.scss create mode 100644 _sass/basically-basic/vendor/susy/output/_support.scss create mode 100644 _sass/basically-basic/vendor/susy/output/float/_container.scss create mode 100644 _sass/basically-basic/vendor/susy/output/float/_end.scss create mode 100644 _sass/basically-basic/vendor/susy/output/float/_isolate.scss create mode 100644 _sass/basically-basic/vendor/susy/output/float/_span.scss create mode 100644 _sass/basically-basic/vendor/susy/output/shared/_background.scss create mode 100644 _sass/basically-basic/vendor/susy/output/shared/_container.scss create mode 100644 _sass/basically-basic/vendor/susy/output/shared/_direction.scss create mode 100644 _sass/basically-basic/vendor/susy/output/shared/_inspect.scss create mode 100644 _sass/basically-basic/vendor/susy/output/shared/_margins.scss create mode 100644 _sass/basically-basic/vendor/susy/output/shared/_output.scss create mode 100644 _sass/basically-basic/vendor/susy/output/shared/_padding.scss create mode 100644 _sass/basically-basic/vendor/susy/output/support/_background.scss create mode 100644 _sass/basically-basic/vendor/susy/output/support/_box-sizing.scss create mode 100644 _sass/basically-basic/vendor/susy/output/support/_clearfix.scss create mode 100644 _sass/basically-basic/vendor/susy/output/support/_prefix.scss create mode 100644 _sass/basically-basic/vendor/susy/output/support/_rem.scss create mode 100644 _sass/basically-basic/vendor/susy/output/support/_support.scss create mode 100644 _sass/basically-basic/vendor/susy/su/_grid.scss create mode 100644 _sass/basically-basic/vendor/susy/su/_settings.scss create mode 100644 _sass/basically-basic/vendor/susy/su/_utilities.scss create mode 100644 _sass/basically-basic/vendor/susy/su/_validation.scss create mode 100644 assets/images/image-alignment-1200x4002.jpg create mode 100644 assets/images/image-alignment-150x150.jpg create mode 100644 assets/images/image-alignment-300x200.jpg create mode 100644 assets/images/image-alignment-580x300.jpg create mode 100644 assets/images/markus-spiske-207946.jpg create mode 100644 assets/javascripts/main.js create mode 100644 assets/stylesheets/main.scss create mode 100644 example/Gemfile create mode 100644 example/_config.yml create mode 100644 example/_data/cv.json create mode 100644 example/_pages/404.md create mode 100644 example/_pages/archive-layout-with-content.md create mode 100644 example/_pages/category-archive.html create mode 100644 example/_pages/collection-archive.html create mode 100644 example/_pages/lorem-ipsum.md create mode 100644 example/_pages/page-a.md create mode 100644 example/_pages/page-archive.html create mode 100644 example/_pages/page-b.md create mode 100644 example/_pages/portfolio-archive.html create mode 100644 example/_pages/recipes-archive.html create mode 100644 example/_pages/sample-page.md create mode 100644 example/_pages/sitemap.md create mode 100644 example/_pages/splash-page.md create mode 100644 example/_pages/tag-archive.html create mode 100644 example/_pages/terms.md create mode 100644 example/_pages/year-archive.html create mode 100644 example/_pets/lhasa-apso.md create mode 100644 example/_pets/tabby.md create mode 100644 example/_posts/2009-05-15-edge-case-nested-and-mixed-lists.md create mode 100644 example/_posts/2009-06-01-edge-case-many-tags.md create mode 100644 example/_posts/2009-07-02-edge-case-many-categories.md create mode 100644 example/_posts/2009-08-06-edge-case-no-body-content.md create mode 100644 example/_posts/2009-09-05-edge-case-no-yaml-title.md create mode 100644 example/_posts/2009-10-05-edge-case-title-should-not-overflow-the-content-area.md create mode 100644 example/_posts/2009-10-05-edge-case-very-long-title.md create mode 100644 example/_posts/2010-01-07-post-modified.md create mode 100644 example/_posts/2010-01-07-post-standard.md create mode 100644 example/_posts/2010-01-08-post-chat.md create mode 100644 example/_posts/2010-02-05-post-notice.md create mode 100644 example/_posts/2010-02-05-post-quote.md create mode 100644 example/_posts/2010-03-07-post-link.md create mode 100644 example/_posts/2010-06-02-post-video-youtube.md create mode 100644 example/_posts/2010-09-10-post-twitter-embeds.md create mode 100644 example/_posts/2010-10-25-post-future-date.md create mode 100644 example/_posts/2012-03-14-layout-code-excerpt-generated.md create mode 100644 example/_posts/2012-03-14-layout-excerpt-defined.md create mode 100644 example/_posts/2012-03-14-layout-excerpt-generated.md create mode 100644 example/_posts/2012-05-22-markup-text-readability.md create mode 100644 example/_posts/2013-01-05-markup-title-with-markup.md create mode 100644 example/_posts/2013-01-05-markup-title-with-special-characters.md create mode 100644 example/_posts/2013-01-09-markup-text-alignment.md create mode 100644 example/_posts/2013-01-10-markup-image-alignment.md create mode 100644 example/_posts/2013-01-11-markup-html-tags-and-formatting.md create mode 100644 example/_posts/2013-05-22-markup-more-images.md create mode 100644 example/_posts/2013-08-16-markup-syntax-highlighting.md create mode 100644 example/about.md create mode 100644 example/cv.md create mode 100644 example/index.html create mode 100644 jekyll-theme-basically-basic.gemspec diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..3a287c4 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,13 @@ +# editorconfig.org +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = false + +[*.md] +trim_trailing_whitespace = false diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..ebe0199 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,5 @@ +_assets/css/vendor/* linguist-vendored +_assets/js/plugins/* linguist-vendored +_assets/js/vendor/* linguist-vendored +assets/fonts/* linguist-vendored +assets/js/vendor/* linguist-vendored \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5c4866d --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +*.gem +*.sublime-project +*.sublime-workspace +.bundle +.DS_Store +.jekyll-metadata +.sass-cache +_asset_bundler_cache +_site +codekit-config.json +example/_site +Gemfile.lock +node_modules +npm-debug.log* \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..87270bc --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,19 @@ +# Change Log + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/) +and this project adheres to [Semantic Versioning](http://semver.org/). + +## [Unreleased] - YYYY-MM-DD +### Added +- for new features + +### Changed +- for changes in existing functionality + +### Deprecated +- for once-stable features removed in upcoming releases + +### Fixed +- for any bug fixes \ No newline at end of file diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..1291498 --- /dev/null +++ b/Gemfile @@ -0,0 +1,2 @@ +source "https://rubygems.org" +gemspec \ No newline at end of file diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..b7cc9a0 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2017 Michael Rose + +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. \ No newline at end of file diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000..5a36774 --- /dev/null +++ b/Rakefile @@ -0,0 +1,75 @@ +require "bundler/gem_tasks" +require "jekyll" +require "listen" + +def listen_ignore_paths(base, options) + [ + /_config\.ya?ml/, + /_site/, + /\.jekyll-metadata/ + ] +end + +def listen_handler(base, options) + site = Jekyll::Site.new(options) + Jekyll::Command.process_site(site) + proc do |modified, added, removed| + t = Time.now + c = modified + added + removed + n = c.length + relative_paths = c.map{ |p| Pathname.new(p).relative_path_from(base).to_s } + print Jekyll.logger.message("Regenerating:", "#{relative_paths.join(", ")} changed... ") + begin + Jekyll::Command.process_site(site) + puts "regenerated in #{Time.now - t} seconds." + rescue => e + puts "error:" + Jekyll.logger.warn "Error:", e.message + Jekyll.logger.warn "Error:", "Run jekyll build --trace for more information." + end + end +end + +task :preview do + base = Pathname.new('.').expand_path + options = { + "source" => base.join('example').to_s, + "destination" => base.join('example/_site').to_s, + "force_polling" => false, + "serving" => true, + "theme" => "jekyll-theme-basically-basic" + } + + options = Jekyll.configuration(options) + + ENV["LISTEN_GEM_DEBUGGING"] = "1" + listener = Listen.to( + base.join("_includes"), + base.join("_layouts"), + base.join("_sass"), + base.join("assets"), + options["source"], + :ignore => listen_ignore_paths(base, options), + :force_polling => options['force_polling'], + &(listen_handler(base, options)) + ) + + begin + listener.start + Jekyll.logger.info "Auto-regeneration:", "enabled for '#{options["source"]}'" + + unless options['serving'] + trap("INT") do + listener.stop + puts " Halting auto-regeneration." + exit 0 + end + + loop { sleep 1000 } + end + rescue ThreadError + # You pressed Ctrl-C, oh my! + end + + Jekyll::Commands::Serve.process(options) +end \ No newline at end of file diff --git a/_includes/author b/_includes/author new file mode 100644 index 0000000..19bcf68 --- /dev/null +++ b/_includes/author @@ -0,0 +1,31 @@ +{% assign author = page.author | default: page.authors[0] | default: site.author %} +{% if author %} + {% if author.name %} + {% assign author_name = author.name %} + {% else %} + {% if site.data.authors and site.data.authors[author] %} + {% assign author_name = site.data.authors[author].name %} + {% else %} + {% assign author_name = author %} + {% endif %} + {% endif %} + + {% if author.picture %} + {% assign author_picture = author.picture %} + {% else %} + {% if site.data.authors and site.data.authors[author] %} + {% assign author_picture = site.data.authors[author].picture %} + {% endif %} + {% unless author_picture contains '://' %}{% assign author_picture = author_picture | relative_url %}{% endunless %} + {% endif %} + + {% if author.twitter %} + {% assign author_twitter = author.twitter %} + {% else %} + {% if site.data.authors and site.data.authors[author] %} + {% assign author_twitter = site.data.authors[author].twitter %} + {% else %} + {% assign author_twitter = site.twitter_username %} + {% endif %} + {% endif %} +{% endif %} \ No newline at end of file diff --git a/_includes/contact-list.html b/_includes/contact-list.html new file mode 100644 index 0000000..9d7ca2e --- /dev/null +++ b/_includes/contact-list.html @@ -0,0 +1,27 @@ +
    + {% if site.email %} +
  • + + + Email + +
  • + {% endif %} + + {% if site.github_username %} +
  • {% include icon-github.html username=site.github_username label='GitHub' %}
  • + {% endif %} + + {% if site.twitter_username %} +
  • {% include icon-twitter.html username=site.twitter_username label='Twitter' %}
  • + {% endif %} + +
  • + {% if site.gems contains 'jekyll-feed' %} + + {% include icon-rss.svg %} + Subscribe + + {% endif %} +
  • +
\ No newline at end of file diff --git a/_includes/cv/awards.html b/_includes/cv/awards.html new file mode 100644 index 0000000..81cc13a --- /dev/null +++ b/_includes/cv/awards.html @@ -0,0 +1,24 @@ +{% if cv.awards %} +
+
+

Awards

+
+ +
+ {% for a in cv.awards %} + {% if a.title %} +

{{ a.title }}

+ {% endif %} + {% if a.date %} +
{{ a.date }}
+ {% endif %} + {% if a.awarder %} +
{{ a.awarder }}
+ {% endif %} + {% if a.summary %} +
{{ a.summary | markdownify }}
+ {% endif %} + {% endfor %} +
+
+{% endif %} \ No newline at end of file diff --git a/_includes/cv/basics.html b/_includes/cv/basics.html new file mode 100644 index 0000000..f5f0b20 --- /dev/null +++ b/_includes/cv/basics.html @@ -0,0 +1,69 @@ +{% if cv.basics.summary %} +
+ {{ cv.basics.summary | markdownify }} +
+{% endif %} + +
+
+

Contact

+
+ +
+ {% if cv.basics.email %} + + {% endif %} + {% if cv.basics.phone %} +
Phone {{ cv.basics.phone }}
+ {% endif %} + {% if cv.basics.website %} + + {% endif %} + {% if cv.basics.profiles %} + {% for p in cv.basics.profiles %} +
+ {% if p.network %} + {{ p.network | append: ' ' }} + {% endif %} + {% if p.username %} + + {% if p.url %} + {{ p.username }} + {% else %} + {{ p.username }} + {% endif %} + + {% endif %} +
+ {% endfor %} + {% endif %} +
+
+ +{% if cv.basics.location %} +
+
+

Location

+
+ +
+
+ {% if cv.basics.location.address %} + {{ cv.basics.location.address }}
+ {% endif %} + {% if cv.basics.location.city %} + {{ cv.basics.location.city | append: ', ' }} + {% endif %} + {% if cv.basics.location.region %} + {{ cv.basics.location.region | append: ' ' }} + {% endif %} + {% if cv.basics.location.postalCode %} + {{ cv.basics.location.postalCode | append: ' ' }} + {% endif %} + {% if cv.basics.location.countryCode %} + {{ cv.basics.location.countryCode }} + {% endif %} +
+
+
+{% endif %} \ No newline at end of file diff --git a/_includes/cv/education.html b/_includes/cv/education.html new file mode 100644 index 0000000..e598cca --- /dev/null +++ b/_includes/cv/education.html @@ -0,0 +1,36 @@ +{% if cv.education %} +
+
+

Education

+
+ +
+ {% for e in cv.education %} + {% if e.institution %} +

{{ e.institution }}

+ {% endif %} +
+ {% if e.startDate %} + {{ e.startDate }} + {% endif %} + {% if e.endDate %} + {{ e.endDate | prepend: ' — ' }} + {% else %} + {{ Present | prepend: ' — ' }} + {% endif %} +
+ {% if e.area %} +
{{ e.area }}{% if e.studyType %}{{ e.studyType | prepend: ', ' }}{% endif %}{% if e.gpa %}{{ e.gpa | prepend: ' (' | append: ' GPA)' }}{% endif %}
+ {% endif %} + {% if e.courses %} +
Courses
+
    + {% for course in e.courses %} +
  • {{ course }}
  • + {% endfor %} +
+ {% endif %} + {% endfor %} +
+
+{% endif %} \ No newline at end of file diff --git a/_includes/cv/interests.html b/_includes/cv/interests.html new file mode 100644 index 0000000..692ecf2 --- /dev/null +++ b/_includes/cv/interests.html @@ -0,0 +1,20 @@ +{% if cv.interests %} +
+
+

Interests

+
+ +
+ {% for i in cv.interests %} +
+ {% if i.name %} +

{{ i.name }}

+ {% endif %} + {% if i.keywords %} + {{ i.keywords | array_to_sentence_string }} + {% endif %} +
+ {% endfor %} +
+
+{% endif %} \ No newline at end of file diff --git a/_includes/cv/intro.html b/_includes/cv/intro.html new file mode 100644 index 0000000..197dd96 --- /dev/null +++ b/_includes/cv/intro.html @@ -0,0 +1,18 @@ + \ No newline at end of file diff --git a/_includes/cv/languages.html b/_includes/cv/languages.html new file mode 100644 index 0000000..19dc3d4 --- /dev/null +++ b/_includes/cv/languages.html @@ -0,0 +1,20 @@ +{% if cv.languages %} +
+
+

Languages

+
+ +
+ {% for l in cv.languages %} + {% if l.language %} +

{{ l.language }}

+ {% endif %} + {% if l.fluency %} +
+ {{ l.fluency }} +
+ {% endif %} + {% endfor %} +
+
+{% endif %} \ No newline at end of file diff --git a/_includes/cv/publications.html b/_includes/cv/publications.html new file mode 100644 index 0000000..e1813bb --- /dev/null +++ b/_includes/cv/publications.html @@ -0,0 +1,30 @@ +{% if cv.publications %} +
+
+

Publications

+
+ +
+ {% for p in cv.publications %} + {% if p.name %} +

+ {% if p.website %} + {{ p.name }} + {% else %} + {{ p.name }} + {% endif %} +

+ {% endif %} + {% if p.releaseDate %} +
{{ p.releaseDate }}
+ {% endif %} + {% if p.publisher %} +
{{ p.publisher | prepend: 'Published by ' }}
+ {% endif %} + {% if p.summary %} +
{{ p.summary | markdownify }}
+ {% endif %} + {% endfor %} +
+
+{% endif %} \ No newline at end of file diff --git a/_includes/cv/references.html b/_includes/cv/references.html new file mode 100644 index 0000000..df3dc4c --- /dev/null +++ b/_includes/cv/references.html @@ -0,0 +1,24 @@ +{% if cv.references %} +
+
+

References

+
+ +
+ {% for r in cv.references %} +
+ {% if r.reference %} +
+ {{ r.reference |markdownify }} + {% if r.name %} +

+ {{ r.name }} +

+ {% endif %} +
+ {% endif %} +
+ {% endfor %} +
+
+{% endif %} \ No newline at end of file diff --git a/_includes/cv/skills.html b/_includes/cv/skills.html new file mode 100644 index 0000000..9f1c833 --- /dev/null +++ b/_includes/cv/skills.html @@ -0,0 +1,20 @@ +{% if cv.skills. %} +
+
+

Skills

+
+ +
+ {% for s in cv.skills %} +
+ {% if s.name %} +

{{ s.name }}

+ {% endif %} + {% if s.keywords %} + {{ s.keywords | array_to_sentence_string }} + {% endif %} +
+ {% endfor %} +
+
+{% endif %} \ No newline at end of file diff --git a/_includes/cv/volunteer.html b/_includes/cv/volunteer.html new file mode 100644 index 0000000..f73973c --- /dev/null +++ b/_includes/cv/volunteer.html @@ -0,0 +1,46 @@ +{% if cv.volunteer %} +
+
+

Volunteer

+
+ +
+ {% for v in cv.volunteer %} + {% if v.organization %} +

+ {% if v.website %} + {{ v.organization }} + {% else %} + {{ v.organization }} + {% endif %} +

+ {% endif %} + {% if v.position %} +

{{ v.position }}

+ {% endif %} +
+ {% if v.startDate %} + {{ v.startDate }} + {% endif %} + {% if v.endDate %} + {{ v.endDate | prepend: ' — ' }} + {% else %} + {{ Present | prepend: ' — ' }} + {% endif %} +
+ {% if v.summary %} +
+

{{ v.summary }}

+
+ {% endif %} + {% if v.highlights %} +
    + {% for highlight in v.highlights %} +
  • {{ highlight }}
  • + {% endfor %} +
+ {% endif %} + {% endfor %} +
+
+{% endif %} \ No newline at end of file diff --git a/_includes/cv/work.html b/_includes/cv/work.html new file mode 100644 index 0000000..e4cfbc7 --- /dev/null +++ b/_includes/cv/work.html @@ -0,0 +1,46 @@ +{% if cv.work %} +
+
+

Work

+
+ +
+ {% for w in cv.work %} + {% if w.company %} +

+ {% if w.website %} + {{ w.company }} + {% else %} + {{ w.company }} + {% endif %} +

+ {% endif %} + {% if w.position %} +

{{ w.position }}

+ {% endif %} +
+ {% if w.startDate %} + {{ w.startDate }} + {% endif %} + {% if w.endDate %} + {{ w.endDate | prepend: ' — ' }} + {% else %} + {{ Present | ' — ' }} + {% endif %} +
+ {% if w.summary %} +
+

{{ w.summary }}

+
+ {% endif %} + {% if w.highlights %} +
    + {% for highlight in w.highlights %} +
  • {{ highlight }}
  • + {% endfor %} +
+ {% endif %} + {% endfor %} +
+
+{% endif %} \ No newline at end of file diff --git a/_includes/disqus_comments.html b/_includes/disqus_comments.html new file mode 100644 index 0000000..0407cd2 --- /dev/null +++ b/_includes/disqus_comments.html @@ -0,0 +1,17 @@ +{% if page.comments != false and jekyll.environment == "production" %} +
+ + +{% endif %} \ No newline at end of file diff --git a/_includes/entry.html b/_includes/entry.html new file mode 100644 index 0000000..1a23e7d --- /dev/null +++ b/_includes/entry.html @@ -0,0 +1,24 @@ +{% if post.id %} + {% assign title = post.title | markdownify | remove: "

" | remove: "

" %} +{% else %} + {% assign title = post.title %} +{% endif %} + + \ No newline at end of file diff --git a/_includes/footer.html b/_includes/footer.html new file mode 100644 index 0000000..68a13e2 --- /dev/null +++ b/_includes/footer.html @@ -0,0 +1,8 @@ +
+
\ No newline at end of file diff --git a/_includes/google-analytics.html b/_includes/google-analytics.html new file mode 100644 index 0000000..6ac0616 --- /dev/null +++ b/_includes/google-analytics.html @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/_includes/head-feed.html b/_includes/head-feed.html new file mode 100644 index 0000000..fc31ba7 --- /dev/null +++ b/_includes/head-feed.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_includes/head-seo.html b/_includes/head-seo.html new file mode 100644 index 0000000..8694692 --- /dev/null +++ b/_includes/head-seo.html @@ -0,0 +1 @@ +{% seo %} \ No newline at end of file diff --git a/_includes/head.html b/_includes/head.html new file mode 100644 index 0000000..dd2cd2a --- /dev/null +++ b/_includes/head.html @@ -0,0 +1,33 @@ + + + + + + {% if site.gems contains 'jekyll-seo-tag' %} + {% comment %} + Add metadata for search engines and social networks if jekyll-seo-tag plugin is enabled + {% endcomment %} + {% include head-seo.html %} + {% else %} + {% if page.title %}{{ page.title | escape }}{% else %}{{ site.title | escape }}{% endif %} + + + {% endif %} + + + + + + + {% if site.gems contains 'jekyll-feed' %} + {% comment %} + Add Atom feed link if jekyll-feed plugin is enabled + {% endcomment %} + {% include head-feed.html %} + {% endif %} + \ No newline at end of file diff --git a/_includes/icon-arrow-left.svg b/_includes/icon-arrow-left.svg new file mode 100644 index 0000000..d7d28f0 --- /dev/null +++ b/_includes/icon-arrow-left.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_includes/icon-arrow-right.svg b/_includes/icon-arrow-right.svg new file mode 100644 index 0000000..e9ab917 --- /dev/null +++ b/_includes/icon-arrow-right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_includes/icon-bitbucket.html b/_includes/icon-bitbucket.html new file mode 100644 index 0000000..f49af30 --- /dev/null +++ b/_includes/icon-bitbucket.html @@ -0,0 +1,4 @@ + + {% include icon-bitbucket.svg %} + {{ include.label | default: include.username }} + diff --git a/_includes/icon-bitbucket.svg b/_includes/icon-bitbucket.svg new file mode 100644 index 0000000..4a17be0 --- /dev/null +++ b/_includes/icon-bitbucket.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_includes/icon-codepen.html b/_includes/icon-codepen.html new file mode 100644 index 0000000..50412e4 --- /dev/null +++ b/_includes/icon-codepen.html @@ -0,0 +1,4 @@ + + {% include icon-codepen.svg %} + {{ include.label | default: include.username }} + diff --git a/_includes/icon-codepen.svg b/_includes/icon-codepen.svg new file mode 100644 index 0000000..88bd3cf --- /dev/null +++ b/_includes/icon-codepen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_includes/icon-download.svg b/_includes/icon-download.svg new file mode 100644 index 0000000..f3cd4a9 --- /dev/null +++ b/_includes/icon-download.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_includes/icon-dribbble.html b/_includes/icon-dribbble.html new file mode 100644 index 0000000..dc48071 --- /dev/null +++ b/_includes/icon-dribbble.html @@ -0,0 +1,4 @@ + + {% include icon-dribbble.svg %} + {{ include.label | default: include.username }} + diff --git a/_includes/icon-dribbble.svg b/_includes/icon-dribbble.svg new file mode 100644 index 0000000..44c7af5 --- /dev/null +++ b/_includes/icon-dribbble.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_includes/icon-email.svg b/_includes/icon-email.svg new file mode 100644 index 0000000..40d8357 --- /dev/null +++ b/_includes/icon-email.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_includes/icon-facebook.html b/_includes/icon-facebook.html new file mode 100644 index 0000000..c54ce9e --- /dev/null +++ b/_includes/icon-facebook.html @@ -0,0 +1,4 @@ + + + {{ include.label | default: include.username }} + diff --git a/_includes/icon-facebook.svg b/_includes/icon-facebook.svg new file mode 100644 index 0000000..b1d1895 --- /dev/null +++ b/_includes/icon-facebook.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_includes/icon-flickr.html b/_includes/icon-flickr.html new file mode 100644 index 0000000..efb7ae1 --- /dev/null +++ b/_includes/icon-flickr.html @@ -0,0 +1,4 @@ + + {% include icon-flickr.svg %} + {{ include.label | default: include.username }} + diff --git a/_includes/icon-flickr.svg b/_includes/icon-flickr.svg new file mode 100644 index 0000000..68c4910 --- /dev/null +++ b/_includes/icon-flickr.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_includes/icon-github.html b/_includes/icon-github.html new file mode 100644 index 0000000..873ffa9 --- /dev/null +++ b/_includes/icon-github.html @@ -0,0 +1,4 @@ + + {% include icon-github.svg %} + {{ include.label | default: include.username }} + diff --git a/_includes/icon-github.svg b/_includes/icon-github.svg new file mode 100644 index 0000000..59d57b9 --- /dev/null +++ b/_includes/icon-github.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_includes/icon-gitlab.html b/_includes/icon-gitlab.html new file mode 100644 index 0000000..bdebcb6 --- /dev/null +++ b/_includes/icon-gitlab.html @@ -0,0 +1,4 @@ + + {% include icon-gitlab.svg %} + {{ include.label | default: include.username }} + diff --git a/_includes/icon-gitlab.svg b/_includes/icon-gitlab.svg new file mode 100644 index 0000000..29c2012 --- /dev/null +++ b/_includes/icon-gitlab.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_includes/icon-googleplus.html b/_includes/icon-googleplus.html new file mode 100644 index 0000000..59248fe --- /dev/null +++ b/_includes/icon-googleplus.html @@ -0,0 +1,4 @@ + + {% include icon-googleplus.svg %} + {{ include.label | default: include.username }} + diff --git a/_includes/icon-googleplus.svg b/_includes/icon-googleplus.svg new file mode 100644 index 0000000..87b3af6 --- /dev/null +++ b/_includes/icon-googleplus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_includes/icon-instagram.html b/_includes/icon-instagram.html new file mode 100644 index 0000000..936771d --- /dev/null +++ b/_includes/icon-instagram.html @@ -0,0 +1,4 @@ + + {% include icon-instagram.svg %} + {{ include.label | default: include.username }} + diff --git a/_includes/icon-instagram.svg b/_includes/icon-instagram.svg new file mode 100644 index 0000000..5c45f1f --- /dev/null +++ b/_includes/icon-instagram.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_includes/icon-lastfm.html b/_includes/icon-lastfm.html new file mode 100644 index 0000000..8fb6625 --- /dev/null +++ b/_includes/icon-lastfm.html @@ -0,0 +1,4 @@ + + {% include icon-lastfm.svg %} + {{ include.label | default: include.username }} + diff --git a/_includes/icon-lastfm.svg b/_includes/icon-lastfm.svg new file mode 100644 index 0000000..146f4b9 --- /dev/null +++ b/_includes/icon-lastfm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_includes/icon-linkedin.html b/_includes/icon-linkedin.html new file mode 100644 index 0000000..103892b --- /dev/null +++ b/_includes/icon-linkedin.html @@ -0,0 +1,4 @@ + + {% include icon-linkedin.svg %} + {{ include.label | default: include.username }} + diff --git a/_includes/icon-linkedin.svg b/_includes/icon-linkedin.svg new file mode 100644 index 0000000..91d7ee8 --- /dev/null +++ b/_includes/icon-linkedin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_includes/icon-pdf.svg b/_includes/icon-pdf.svg new file mode 100644 index 0000000..bf174e0 --- /dev/null +++ b/_includes/icon-pdf.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_includes/icon-pinterest.html b/_includes/icon-pinterest.html new file mode 100644 index 0000000..c1c461a --- /dev/null +++ b/_includes/icon-pinterest.html @@ -0,0 +1,4 @@ + + {% include icon-pinterest.svg %} + {{ include.label | default: include.username }} + diff --git a/_includes/icon-pinterest.svg b/_includes/icon-pinterest.svg new file mode 100644 index 0000000..e4a3e4c --- /dev/null +++ b/_includes/icon-pinterest.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_includes/icon-rss.svg b/_includes/icon-rss.svg new file mode 100644 index 0000000..3b73970 --- /dev/null +++ b/_includes/icon-rss.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_includes/icon-soundcloud.html b/_includes/icon-soundcloud.html new file mode 100644 index 0000000..317f381 --- /dev/null +++ b/_includes/icon-soundcloud.html @@ -0,0 +1,4 @@ + + {% include icon-soundcloud.svg %} + {{ include.label | default: include.username }} + diff --git a/_includes/icon-soundcloud.svg b/_includes/icon-soundcloud.svg new file mode 100644 index 0000000..642c815 --- /dev/null +++ b/_includes/icon-soundcloud.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_includes/icon-stackoverflow.html b/_includes/icon-stackoverflow.html new file mode 100644 index 0000000..29851ee --- /dev/null +++ b/_includes/icon-stackoverflow.html @@ -0,0 +1,4 @@ + + {% include icon-stackoverflow.svg %} + {{ include.label | default: include.username }} + diff --git a/_includes/icon-stackoverflow.svg b/_includes/icon-stackoverflow.svg new file mode 100644 index 0000000..13e1dbb --- /dev/null +++ b/_includes/icon-stackoverflow.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_includes/icon-stopwatch.svg b/_includes/icon-stopwatch.svg new file mode 100644 index 0000000..d448bdd --- /dev/null +++ b/_includes/icon-stopwatch.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_includes/icon-tumblr.html b/_includes/icon-tumblr.html new file mode 100644 index 0000000..7ba5501 --- /dev/null +++ b/_includes/icon-tumblr.html @@ -0,0 +1,4 @@ + + {% include icon-tumblr.svg %} + {{ include.label | default: include.username }} + diff --git a/_includes/icon-tumblr.svg b/_includes/icon-tumblr.svg new file mode 100644 index 0000000..d42a48c --- /dev/null +++ b/_includes/icon-tumblr.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_includes/icon-twitter.html b/_includes/icon-twitter.html new file mode 100644 index 0000000..0682e12 --- /dev/null +++ b/_includes/icon-twitter.html @@ -0,0 +1,4 @@ + + + {{ include.label | default: include.username }} + diff --git a/_includes/icon-twitter.svg b/_includes/icon-twitter.svg new file mode 100644 index 0000000..4d3fbe4 --- /dev/null +++ b/_includes/icon-twitter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_includes/icon-xing.html b/_includes/icon-xing.html new file mode 100644 index 0000000..c72bc39 --- /dev/null +++ b/_includes/icon-xing.html @@ -0,0 +1,4 @@ + + {% include icon-xing.svg %} + {{ include.label | default: include.username }} + diff --git a/_includes/icon-xing.svg b/_includes/icon-xing.svg new file mode 100644 index 0000000..ed9ea48 --- /dev/null +++ b/_includes/icon-xing.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_includes/icon-youtube.html b/_includes/icon-youtube.html new file mode 100644 index 0000000..3a1532a --- /dev/null +++ b/_includes/icon-youtube.html @@ -0,0 +1,4 @@ + + {% include icon-youtube.svg %} + {{ include.label | default: include.username }} + diff --git a/_includes/icon-youtube.svg b/_includes/icon-youtube.svg new file mode 100644 index 0000000..8c1cdf2 --- /dev/null +++ b/_includes/icon-youtube.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_includes/masthead.html b/_includes/masthead.html new file mode 100644 index 0000000..3ec039a --- /dev/null +++ b/_includes/masthead.html @@ -0,0 +1,21 @@ +
+ +
\ No newline at end of file diff --git a/_includes/navigation.html b/_includes/navigation.html new file mode 100644 index 0000000..87e7ba6 --- /dev/null +++ b/_includes/navigation.html @@ -0,0 +1,25 @@ + \ No newline at end of file diff --git a/_includes/page-intro.html b/_includes/page-intro.html new file mode 100644 index 0000000..4143757 --- /dev/null +++ b/_includes/page-intro.html @@ -0,0 +1,31 @@ + \ No newline at end of file diff --git a/_includes/posts-all.html b/_includes/posts-all.html new file mode 100644 index 0000000..a3646c9 --- /dev/null +++ b/_includes/posts-all.html @@ -0,0 +1,3 @@ +{% for post in site.posts %} + {% include entry.html %} +{% endfor %} \ No newline at end of file diff --git a/_includes/posts-paginated.html b/_includes/posts-paginated.html new file mode 100644 index 0000000..ca018b6 --- /dev/null +++ b/_includes/posts-paginated.html @@ -0,0 +1,16 @@ +{% for post in paginator.posts %} + {% include entry.html %} +{% endfor %} + + + \ No newline at end of file diff --git a/_includes/scripts.html b/_includes/scripts.html new file mode 100644 index 0000000..85a2a21 --- /dev/null +++ b/_includes/scripts.html @@ -0,0 +1,5 @@ +{% if jekyll.environment == 'production' and site.google_analytics %} + {% include google-analytics.html %} +{% endif %} + + \ No newline at end of file diff --git a/_includes/skip-links.html b/_includes/skip-links.html new file mode 100644 index 0000000..833d25d --- /dev/null +++ b/_includes/skip-links.html @@ -0,0 +1,8 @@ +
+

Skip links

+ +
\ No newline at end of file diff --git a/_layouts/about.html b/_layouts/about.html new file mode 100644 index 0000000..6886fa6 --- /dev/null +++ b/_layouts/about.html @@ -0,0 +1,21 @@ +--- +layout: default +--- + +{% include page-intro.html %} + +
+
+
+
+ {{ content }} +
+ +
+ + {% include footer.html %} +
+
\ No newline at end of file diff --git a/_layouts/cv.html b/_layouts/cv.html new file mode 100644 index 0000000..09c0915 --- /dev/null +++ b/_layouts/cv.html @@ -0,0 +1,28 @@ +--- +layout: default +--- + +{% assign cv = site.data.cv %} +{% include cv/intro.html %} + +
+
+
{{ content }}
+
+
+ {% include cv/basics.html %} + {% include cv/work.html %} + {% include cv/volunteer.html %} + {% include cv/education.html %} + {% include cv/awards.html %} + {% include cv/publications.html %} + {% include cv/skills.html %} + {% include cv/languages.html %} + {% include cv/interests.html %} + {% include cv/references.html %} +
+
+ + {% include footer.html %} +
+
\ No newline at end of file diff --git a/_layouts/default.html b/_layouts/default.html new file mode 100644 index 0000000..fab6164 --- /dev/null +++ b/_layouts/default.html @@ -0,0 +1,36 @@ + + + + {% include head.html %} + + + + {% include skip-links.html %} + + + Menu + + + +
+ {% include masthead.html %} + {{ content }} +
+ + + + {% include scripts.html %} + + + + \ No newline at end of file diff --git a/_layouts/home.html b/_layouts/home.html new file mode 100644 index 0000000..2d52a91 --- /dev/null +++ b/_layouts/home.html @@ -0,0 +1,30 @@ +--- +layout: default +--- + +{% include page-intro.html %} + +
+
+
{{ content }}
+ +
+
+

Posts

+
+
+ {% if site.gems contains 'jekyll-paginate' and page.paginate %} + {% comment %} + Add paginator.posts loop if jekyll-paginate plugin is enabled + and page.paginate == true + {% endcomment %} + {% include posts-paginated.html %} + {% else %} + {% include posts-all.html %} + {% endif %} +
+
+ + {% include footer.html %} +
+
\ No newline at end of file diff --git a/_layouts/page.html b/_layouts/page.html new file mode 100644 index 0000000..ca4aa99 --- /dev/null +++ b/_layouts/page.html @@ -0,0 +1,17 @@ +--- +layout: default +--- + +{% include page-intro.html %} + +
+
+
+
+ {{ content }} +
+
+ + {% include footer.html %} +
+
\ No newline at end of file diff --git a/_layouts/post.html b/_layouts/post.html new file mode 100644 index 0000000..53d7404 --- /dev/null +++ b/_layouts/post.html @@ -0,0 +1,20 @@ +--- +layout: default +--- + +{% include page-intro.html %} + +
+
+
+
+ {{ content }} +
+ {% if site.disqus.shortname %} + {% include disqus_comments.html %} + {% endif %} +
+ + {% include footer.html %} +
+
\ No newline at end of file diff --git a/_sass/basically-basic.scss b/_sass/basically-basic.scss new file mode 100644 index 0000000..6c15390 --- /dev/null +++ b/_sass/basically-basic.scss @@ -0,0 +1,39 @@ +/*! + * Basically Basic Jekyll Theme 0.0.1 + * Copyright 2017 Michael Rose - mademistakes | @mmistakes + * Free for personal and commercial use under the MIT license + * https://github.com/mmistakes/jekyll-theme-basically-basic/blob/master/LICENSE.md +*/ + +// Mixins and Functions +@import "basically-basic/vendor/susy"; +@import "basically-basic/vendor/breakpoint"; +@include breakpoint-set("to ems", true); +@import "basically-basic/mixins"; + +// Variables +@import "basically-basic/variables"; + +// Core CSS +@import "basically-basic/reset"; +@import "basically-basic/base"; +@import "basically-basic/layout"; +@import "basically-basic/tables"; +// @import "basically-basic/forms"; +@import "basically-basic/syntax-highlighting"; + +// Components +@import "basically-basic/global"; +@import "basically-basic/sidebar"; +@import "basically-basic/navigation"; +@import "basically-basic/header"; +@import "basically-basic/footer"; +@import "basically-basic/entries"; +@import "basically-basic/buttons"; +@import "basically-basic/icons"; +@import "basically-basic/intro"; +@import "basically-basic/navicons"; +@import "basically-basic/contact-lists"; + +// Utility classes +@import "basically-basic/utilities"; \ No newline at end of file diff --git a/_sass/basically-basic/_base.scss b/_sass/basically-basic/_base.scss new file mode 100644 index 0000000..57943e9 --- /dev/null +++ b/_sass/basically-basic/_base.scss @@ -0,0 +1,92 @@ +// +// Base elements +// + +html { + @include fluid-type($min-vw, $max-vw, $min-font-size, $max-font-size); +} + +body { + color: $text-color; + background: $background-color; +} + +blockquote { + color: tint($text-color, 40%); + font-style: italic; + + cite { + font-size: 80%; + font-style: normal; + font-weight: bold; + + &:before { + content: '\2014'; + padding-right: 0.25rem; + } + } +} + +code, +kbd, +samp, +pre { + font-family: $monospace-font-family; +} + +h1, h2, h3, h4, h5, h6 { + font-family: $headline-font-family; +} + +h1 { + @include fluid-type($min-vw, $max-vw, $h1-min, $h1-max); +} + +h2 { + @include fluid-type($min-vw, $max-vw, $h2-min, $h2-max); +} + +h3 { + @include fluid-type($min-vw, $max-vw, $h3-min, $h3-max); +} + +h4 { + @include fluid-type($min-vw, $max-vw, $h4-min, $h4-max); +} + +h5 { + @include fluid-type($min-vw, $max-vw, $h5-min, $h5-max); +} + +h6 { + @include fluid-type($min-vw, $max-vw, $h6-min, $h6-max); +} + +dt { + font-weight: bold; + + &:not(:first-child) { + margin-top: 1rem; + } +} + +dd { + margin: 0; +} + +pre { + @include fluid-type($min-vw, $max-vw, 12px, 14px); +} + +figcaption { + margin: 0.5rem 0; + font-size: 80%; +} + +a { + color: $accent-color; + + &:hover { + color: shade($accent-color, 25%); + } +} \ No newline at end of file diff --git a/_sass/basically-basic/_buttons.scss b/_sass/basically-basic/_buttons.scss new file mode 100644 index 0000000..e9ed3a0 --- /dev/null +++ b/_sass/basically-basic/_buttons.scss @@ -0,0 +1,39 @@ +// +// Buttons +// + +.btn { + display: inline-block; + padding: 0.5em 1em; + color: #fff; + font-weight: bold; + text-align: center; + text-decoration: none; + background-color: $accent-color; + border: 0; + border-radius: $border-radius; + cursor: pointer; + + &:hover { + color: #fff; + background-color: tint($accent-color, 20%); + } + + &:focus { + background-color: shade($accent-color, 20%); + } + + .icon { + margin-right: 0.5em; + } + + // block button fills width of parent container + &--block { + display: block; + width: 100%; + + + .btn--block { + margin-top: 1rem; + } + } +} \ No newline at end of file diff --git a/_sass/basically-basic/_contact-lists.scss b/_sass/basically-basic/_contact-lists.scss new file mode 100644 index 0000000..7284414 --- /dev/null +++ b/_sass/basically-basic/_contact-lists.scss @@ -0,0 +1,11 @@ +// +// Contact lists +// + +.contact-list { + @include list-unstyled; + + .icon { + margin-right: 0.25em; + } +} \ No newline at end of file diff --git a/_sass/basically-basic/_entries.scss b/_sass/basically-basic/_entries.scss new file mode 100644 index 0000000..983e4d6 --- /dev/null +++ b/_sass/basically-basic/_entries.scss @@ -0,0 +1,138 @@ +// +// Entries (Posts, collection documents, etc.) +// + +.entry { + @include clearfix(); + margin-bottom: 2rem; + padding-bottom: 2rem; + + &:not(:last-child) { + border-bottom: 1px solid $border-color; + } + + a { + color: inherit; + } +} + +.entry-title { + margin-bottom: 0.5rem; + color: tint($text-color, 25%); + @include fluid-type($min-vw, $max-vw, 18px, 24px); + line-height: inherit; + + a { + text-decoration: none; + } +} + +.entry-meta { + margin-bottom: 1rem; + @include fluid-type($min-vw, $max-vw, 12px, 16px); + + a { + color: inherit; + } + + .byline-item { + + &:not(:first-child):before { + content: '\00b7'; + margin: 0 0.5em; + } + } +} + +// +// Entry list +// + +.entries { + + .entry-header { + + @include breakpoint($medium) { + @include span(5 of 16); + @include suffix(1 of 16); + + // remove space after last child element + > *:last-child { + margin-bottom: 0; + } + } + } + + // hide overflowing text + // @include breakpoint($medium) { + // .entry-title { + // position: relative; + // overflow: hidden; + + // &:after { + // content: ''; + // position: absolute; + // top: 0; + // right: 0; + // bottom: 0; + // display: block; + // width: 1rem; + // height: 100%; + // background-image: linear-gradient(90deg, transparent, $background-color); + // } + // } + // } + + .entry-excerpt { + @include breakpoint($medium) { + @include span(11 of 16 last); + } + + // normalize font sizes + > * { + font-size: 1em; + } + + // remove space after last child element + > *:last-child { + margin-bottom: 0; + } + } + + .entry-content { + @include breakpoint($medium) { + @include span(11 of 16 last); + } + + // remove space after last child element + > *:last-child { + margin-bottom: 0; + } + } +} + +.entry-content { + + > p:first-child { + font-size: 1.125em; + } + + h1, h2, h3, h4, h5, h6 { + color: tint($text-color, 25%); + } +} + +// Footnotes +.footnotes { + margin: 2rem 0; + padding-top: 1rem; + font-size: 80%; + border-top: 1px solid $border-color; +} + +// Read more link +.more-link { + font-size: 75%; + font-weight: bold; + text-decoration: none; +} \ No newline at end of file diff --git a/_sass/basically-basic/_footer.scss b/_sass/basically-basic/_footer.scss new file mode 100644 index 0000000..3b7873e --- /dev/null +++ b/_sass/basically-basic/_footer.scss @@ -0,0 +1,13 @@ +// +// Footer +// + +#footer { + margin-top: 4rem; + font-size: 80%; + color: tint($text-color, 40%); +} + +.copyright { + font-family: $monospace-font-family; +} \ No newline at end of file diff --git a/_sass/basically-basic/_global.scss b/_sass/basically-basic/_global.scss new file mode 100644 index 0000000..16ab20c --- /dev/null +++ b/_sass/basically-basic/_global.scss @@ -0,0 +1,26 @@ +// +// Site wide +// + +.site-title { + margin: 0; + padding: 1.35rem 1rem; + padding-right: calc(10vw + #{$navicon-width}); // make room for sidebar toggle + font-family: $base-font-family; + @include fluid-type($min-vw, $max-vw, 20px, 24px); + font-weight: bold; + line-height: 1; + + @include breakpoint($medium) { + padding-left: 2rem; + } + + @include breakpoint($large) { + padding-left: 5vw; + } + + a { + color: $text-color; + text-decoration: none; + } +} \ No newline at end of file diff --git a/_sass/basically-basic/_header.scss b/_sass/basically-basic/_header.scss new file mode 100644 index 0000000..15b20b7 --- /dev/null +++ b/_sass/basically-basic/_header.scss @@ -0,0 +1,32 @@ +// +// Page header +// + +#page-header { + position: relative; + margin: 1rem 0 2rem; + padding: 4rem 0; + color: #fff; + background-image: linear-gradient(-90deg, transparent 0%, rgba(0, 0, 0, 0.25) 30%, rgba(0, 0, 0, 0.55) 60%); + + &:after { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + opacity: 1; + background-image: linear-gradient(60deg, rgba(171, 236, 214, 0.25) 0%, rgba(251, 237, 150, 0.25) 100%); + pointer-events: none; + } + + .inner { + position: relative; + z-index: 1; + } + + .entry-title { + font-size: 3em; + } +} \ No newline at end of file diff --git a/_sass/basically-basic/_icons.scss b/_sass/basically-basic/_icons.scss new file mode 100644 index 0000000..45a564c --- /dev/null +++ b/_sass/basically-basic/_icons.scss @@ -0,0 +1,42 @@ +// +// Icons +// + +.icon { + position: relative; + top: -0.05em; // fine-tune alignment + display: inline-block; + fill: currentColor; + width: 1em; + height: 1em; + line-height: 1; + vertical-align: middle; + + $icons: + (bitbucket, #205081), + (codepen, #000000), + (dribbble, #ea4c89), + (email, #000000), + (facebook, #3b5998), + (flickr, #0063dc), + (github, #181717), + (gitlab, #e24329), + (googleplus, #dc4e41), + (instagram, #e4405f), + (lastfm, #d51007), + (linkedin, #0077b5), + (pinterest, #bd081c), + (rss, #ffa500), + (soundcloud, #ff3300), + (stackoverflow, #fe7a16), + (tumblr, #36465d), + (twitter, #1da1f2), + (xing, #005a5f), + (youtube, #cd201f); + + @each $icon, $color in $icons { + &--#{$icon} { + fill: $color; + } + } +} \ No newline at end of file diff --git a/_sass/basically-basic/_intro.scss b/_sass/basically-basic/_intro.scss new file mode 100644 index 0000000..cbcf83b --- /dev/null +++ b/_sass/basically-basic/_intro.scss @@ -0,0 +1,85 @@ +// +// Page intro +// + +#intro { + // position: relative; + margin: 1rem 0 1rem; + padding-top: 2rem; + padding-bottom: 2rem; + // darken image + // background-color: rgba(0, 0, 0, 0.6); + + // @include breakpoint($large) { + // // darken image + // background-color: initial; + // background-image: linear-gradient(180deg, rgba(0, 0, 0, 0.8), rgba(0, 0, 0, 0.8) 30%, rgba(0, 0, 0, 0.6) 80%, rgba(0, 0, 0, 0.3)); + // } + + // &:after { + // content: ''; + // position: absolute; + // top: 0; + // left: 0; + // width: 100%; + // height: 100%; + // background-image: linear-gradient(60deg, rgba(171, 236, 214, 0.25) 0%, rgba(251, 237, 150, 0.25) 100%); + // pointer-events: none; + // } +} + +.intro-text { + // position: relative; + // color: #fff; + // text-shadow: 1px 1px 4px rgba(0, 0, 0, 0.25); + // z-index: 1; + + // a { + // color: #fff; + // } + + // remove space after last child element + > *:last-child { + margin-bottom: 0; + } +} + +.intro-title { + margin-bottom: 0.5rem; + color: tint($text-color, 25%); + @include fluid-type($min-vw, $max-vw, 26px, 80px); + line-height: 1; +} + +.intro-subtitle { + @include fluid-type($min-vw, $max-vw, 18px, 28px); + font-style: italic; +} + +// .intro-more { + +// @include breakpoint($medium) { +// width: 70%; +// } +// } + +// .intro-image { +// position: absolute; +// top: 0; +// left: 0; +// width: 100%; +// height: 100%; +// z-index: -1; +// // parallax effect via fixed background image +// background-attachment: fixed; +// background-position: center center; +// background-size: cover; +// } + +.intro-actions { + @include list-unstyled; + + li { + display: inline-block; + } +} \ No newline at end of file diff --git a/_sass/basically-basic/_layout.scss b/_sass/basically-basic/_layout.scss new file mode 100644 index 0000000..fb39787 --- /dev/null +++ b/_sass/basically-basic/_layout.scss @@ -0,0 +1,150 @@ +// +// Layout +// + +#wrapper { + min-height: 100vh; + transition: $global-transition; +} + +#intro, #page-header, #main { + + > .inner { + padding: 0 0.5rem; + + @include breakpoint($small) { + padding-left: 1rem; + padding-right: 1rem; + } + + @include breakpoint($medium) { + padding-left: 2rem; + padding-right: 2rem; + } + + @include breakpoint($large) { + padding-left: 3rem; + padding-right: 3rem; + } + + @include breakpoint($xlarge) { + padding-left: 4rem; + padding-right: 4rem; + } + } +} + +#main { + + section { + @include container; + } +} + +.inner { + max-width: $large; +} + +// +// Layout specific adjustments +// + +.layout--post, +.layout--page { + + .entry-content { + @include breakpoint($large) { + width: span(14 of 16); + } + } +} + +.layout--about { + + .entry-wrap { + display: flex; + flex-wrap: wrap; + + @include breakpoint($medium) { + flex-wrap: nowrap; + } + } + + .entry-content { + @include breakpoint($medium) { + flex: 1; + } + } + + .entry-sidebar { + order: -1; + @include breakpoint($medium) { + order: initial; + } + + .author-picture { + margin: 0 0 2rem; + border-radius: 2 * $border-radius; + + @include breakpoint($medium) { + margin: 0 0 0 2rem; + } + } + } +} + +.layout--cv { + + .entry { + + a { + color: $accent-color; + } + + address { + font-style: normal; + } + + .title, + .position, + .institution, + .language { + margin-bottom: 0; + } + + .date { + margin-bottom: 1rem; + color: tint($text-color, 40%); + font-family: $monospace-font-family; + font-size: 80%; + } + + .courses-title, + .awarder, + .publisher, + .level { + margin: 1rem 0 0; + } + + .courses, + .keywords { + @include list-unstyled; + } + } + + .taxonomy { + + & + .taxonomy { + margin-top: 0.5rem; + } + + .title { + display: inline-block; + margin-right: 1rem; + } + + .keywords { + display: inline-block; + } + } +} diff --git a/_sass/basically-basic/_mixins.scss b/_sass/basically-basic/_mixins.scss new file mode 100644 index 0000000..7956e65 --- /dev/null +++ b/_sass/basically-basic/_mixins.scss @@ -0,0 +1,7 @@ +@import "mixins/color"; +@import "mixins/clearfix"; +@import "mixins/fluid-type"; +@import "mixins/float"; +@import "mixins/image"; +@import "mixins/lists"; +@import "mixins/text-truncate"; \ No newline at end of file diff --git a/_sass/basically-basic/_navicons.scss b/_sass/basically-basic/_navicons.scss new file mode 100644 index 0000000..f128959 --- /dev/null +++ b/_sass/basically-basic/_navicons.scss @@ -0,0 +1,136 @@ +// +// Navicons +// + +.navicon-button { + display: inline-block; + position: relative; + padding: 1.8125rem 1rem; + background-color: $navicon-nav-bg-close; + transition: $navicon-duration/2; + cursor: pointer; + user-select: none; + + @include breakpoint($medium) { + padding-right: 2rem; + } + + @include breakpoint($large) { + padding-right: 5vw; + } + + &.open { + background-color: $navicon-nav-bg-open; + } + + .navicon:before, .navicon:after { + transition: $navicon-duration/2; + } + + &:hover { + transition: $navicon-duration; + + .navicon:before, .navicon:after { + transition: $navicon-duration/2; + } + + .navicon:before { top: (2.5 * $navicon-height); } + .navicon:after { top: (-2.5 * $navicon-height); } + } +} + +.navicon { + position: relative; + width: $navicon-width; + height: $navicon-height; + background: $navicon-content-bg; + transition: $navicon-duration; + border-radius: $navicon-width; + + &:before, &:after { + display: block; + content: ""; + height: $navicon-height; + width: $navicon-width; + background: $navicon-content-bg; + position: absolute; + z-index: -1; + transition: $navicon-duration $navicon-duration/2; + border-radius: $navicon-width; + } + + &:before { top: (2 * $navicon-height); } + &:after { top: (-2 * $navicon-height); } +} + +.open:not(.steps) .navicon:before, +.open:not(.steps) .navicon:after { + top: 0 !important; +} + +.open .navicon:before, +.open .navicon:after { + transition: $navicon-duration; +} + +/* Minus */ +.open { + transform: scale($navicon-toggled-size); +} + +/* Arrows */ +.open.larr .navicon, +.open.rarr .navicon, +.open.uarr .navicon { + + &:before, &:after { + width: (0.6 * $navicon-width); + } + + &:before { + transform: rotate(35deg); + transform-origin: left top; + } + + &:after { + transform: rotate(-35deg); + transform-origin: left bottom; + } +} +.open.uarr { + transform: scale($navicon-toggled-size) rotate(90deg); +} + +/* Arrows */ +.open.rarr .navicon { + + &:before { + transform: translate3d(1em, 0, 0) rotate(-35deg); + transform-origin: right top; + } + + &:after { + transform: translate3d(1em, 0, 0) rotate(35deg); + transform-origin: right bottom; + } +} + +/* × and + */ +.open.plus, +.open.x { + .navicon { + background: transparent; + + &:before { + transform: rotate(-45deg); + } + + &:after { + transform: rotate(45deg); + } + } +} + +.open.plus { + transform: scale($navicon-toggled-size) rotate(45deg) +} \ No newline at end of file diff --git a/_sass/basically-basic/_navigation.scss b/_sass/basically-basic/_navigation.scss new file mode 100644 index 0000000..18ef91c --- /dev/null +++ b/_sass/basically-basic/_navigation.scss @@ -0,0 +1,50 @@ +// +// Navigation +// + +.menu { + @include list-unstyled; + + a { + color: inherit; + text-decoration: none; + } +} + +// +// Paginator +// + +.pager { + @include clearfix(); + margin-bottom: 2rem; + + ul { + @include list-unstyled; + display: flex; + + > li { + flex: 1; + justify-content: space-between; + } + + li + li { + margin-left: 0.125em; + } + } + + a { + display: block; + padding: 1em; + color: #fff; + font-weight: bold; + text-align: center; + text-decoration: none; + background-color: $accent-color; + border-radius: $border-radius; + + &:hover { + background-color: tint($accent-color, 20%); + } + } +} \ No newline at end of file diff --git a/_sass/basically-basic/_reset.scss b/_sass/basically-basic/_reset.scss new file mode 100644 index 0000000..3303512 --- /dev/null +++ b/_sass/basically-basic/_reset.scss @@ -0,0 +1,513 @@ +/*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */ + +/** + * 1. Change the default font family in all browsers (opinionated). + * 2. Prevent adjustments of font size after orientation changes in + * IE on Windows Phone and in iOS. + */ + +/* Document + ========================================================================== */ + +html { + box-sizing: border-box; + font-family: $base-font-family; /* 1 */ + -ms-text-size-adjust: 100%; /* 2 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +*, *:before, *:after { + box-sizing: inherit; +} + +/* Sections + ========================================================================== */ + +/** + * Remove the margin in all browsers (opinionated). + */ + +body { + margin: 0; + line-height: 1.5; +} + +/** + * Add the correct display in IE 9-. + */ + +article, +aside, +footer, +header, +nav, +section { + display: block; +} + +/** + * Remove margin padding. + * + */ + +h1, h2, h3, h4, h5, h6, p, pre, blockquote, dl, table, address { + margin-top: 0; + margin-bottom: 1.5rem; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ + +h1 { + font-size: 2em; +} + +/** + * Adjust heading line-height + * + */ + +h1, h2, h3, h4 { + line-height: 1.2; +} + +/* Grouping content + ========================================================================== */ + +/** + * Add the correct display in IE 9-. + * 1. Add the correct display in IE. + */ + +figcaption, +figure, +main { /* 1 */ + display: block; +} + +/** + * Reset the margins. + */ + +figure { + margin: 1rem 0 1.5rem; +} + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + +hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + * 3. Add scrollbars to wide code blocks. + */ + +pre { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ + overflow-x: auto; /* 3 */ +} + +/* Text-level semantics + ========================================================================== */ + +/** + * 1. Remove the gray background on active links in IE 10. + * 2. Remove gaps in links underline in iOS 8+ and Safari 8+. + */ + +a { + background-color: transparent; /* 1 */ + -webkit-text-decoration-skip: objects; /* 2 */ +} + +/** + * Remove the outline on focused links when they are also active or hovered + * in all browsers (opinionated). + */ + +a:active, +a:hover { + outline-width: 0; +} + +/** + * 1. Remove the bottom border in Firefox 39-. + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + +abbr[title] { + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ + text-decoration: underline dotted; /* 2 */ +} + +/** + * Prevent the duplicate application of `bolder` by the next rule in Safari 6. + */ + +b, +strong { + font-weight: inherit; +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +code, +kbd, +samp { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/** + * Add the correct font style in Android 4.3-. + */ + +dfn { + font-style: italic; +} + +/** + * Add the correct background and color in IE 9-. + */ + +mark { + background-color: #ff0; + color: #000; +} + +/** + * Add the correct font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Change the margin and padding and add a line rule on the left-side in all + * browsers (opinionated). + */ + +blockquote { + margin-left: 0; + margin-right: 0; + padding: 0 1rem; + border-left: solid 0.25rem; + + *:last-child { + margin-bottom: 0; + } +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/** + * Remove margin + */ + +ul, ol { + margin-top: 0; +} + +/* Embedded content + ========================================================================== */ + +/** + * Add the correct display in IE 9-. + */ + +audio, +video { + display: inline-block; +} + +/** + * Add the correct display in iOS 4-7. + */ + +audio:not([controls]) { + display: none; + height: 0; +} + +img { + /* Responsive images (ensure images don't scale beyond their parents) */ + max-width: 100%; /* part 1: Set a maximum relative to the parent*/ + width: auto\9; /* IE7-8 need help adjusting responsive images*/ + height: auto; /* part 2: Scale the height according to the width, otherwise you get stretching*/ + + border-style: none; /* Remove the border on images inside links in IE 10-.*/ + + vertical-align: middle; + -ms-interpolation-mode: bicubic; +} + +/** + * Hide the overflow in IE. + */ + +svg:not(:root) { + overflow: hidden; +} + +/* Forms + ========================================================================== */ + +/** + * 1. Change the font styles in all browsers (opinionated). + * 2. Remove the margin in Firefox and Safari. + */ + +button, +input, +optgroup, +select, +textarea { + font-family: $base-font-family; /* 1 */ + font-size: 100%; /* 1 */ + line-height: 1.15; /* 1 */ + margin: 0; /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ + +button, +input { /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ + +button, +select { /* 1 */ + text-transform: none; +} + +/** + * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` + * controls in Android 4. + * 2. Correct the inability to style clickable types in iOS and Safari. + */ + +button, +html [type="button"], /* 1 */ +[type="reset"], +[type="submit"] { + -webkit-appearance: button; /* 2 */ +} + +/** + * Remove the inner border and padding in Firefox. + */ + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ + +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Change the border, margin, and padding in all browsers (opinionated). + */ + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ + +legend { + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ +} + +/** + * 1. Add the correct display in IE 9-. + * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress { + display: inline-block; /* 1 */ + vertical-align: baseline; /* 2 */ +} + +/** + * Remove the default vertical scrollbar in IE. + */ + +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10-. + * 2. Remove the padding in IE 10-. + */ + +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ + +[type="search"] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/** + * Remove the inner padding and cancel buttons in Chrome and Safari on macOS. + */ + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ + +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/* Interactive + ========================================================================== */ + +/* + * Add the correct display in IE 9-. + * 1. Add the correct display in Edge, IE, and Firefox. + */ + +details, /* 1 */ +menu { + display: block; +} + +/* + * Add the correct display in all browsers. + */ + +summary { + display: list-item; +} + +/* Scripting + ========================================================================== */ + +/** + * Add the correct display in IE 9-. + */ + +canvas { + display: inline-block; +} + +/** + * Add the correct display in IE. + */ + +template { + display: none; +} + +/* Hidden + ========================================================================== */ + +/** + * Add the correct display in IE 10-. + */ + +[hidden] { + display: none; +} \ No newline at end of file diff --git a/_sass/basically-basic/_sidebar.scss b/_sass/basically-basic/_sidebar.scss new file mode 100644 index 0000000..b8b55d5 --- /dev/null +++ b/_sass/basically-basic/_sidebar.scss @@ -0,0 +1,168 @@ +// +// Sidebar +// + +#sidebar { + position: fixed; + left: 0; + top: 0; + width: 100%; + height: 100%; + overflow: hidden; + pointer-events: none; + z-index: 150; + + // page overlay dimmer + &:after { + content: ''; + display: block; + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + background: rgba($base-color, 0.5); + opacity: 0; + will-change: opacity; + pointer-events: none; + transition: opacity 0.3s cubic-bezier(0, 0, 0.3, 1); + } + + // line hover effect + li { + + a { + position: relative; + color: $base-color; + + &:before { + content: ''; + display: block; + position: absolute; + top: 50%; + left: -3rem; + height: 1px; + width: 0; + background-color: $base-color; + transition: width 0.3s cubic-bezier(0, 0, 0.3, 1); + } + + &:hover { + color: $accent-color; + } + + &:hover:before { + width: 2.5rem; + } + } + } + + &.is--visible { + transform: translateX(0); + + &:after { + opacity: 1; + pointer-events: auto; + } + + > .inner { + box-shadow: 0 1em 5em 0 rgba(0, 0, 0, 0.125); + transform: none; + } + } + + &.is--animatable > .inner { + transition: all 130ms ease-in; + } + + &.is--visible.is--animatable > .inner { + transition: all 330ms ease-out; + } + + > .inner { + position: relative; + padding: 1.5em; + width: 100%; + max-width: $sidebar-width; + height: 100%; + overflow-x: hidden; + background-color: $sidebar-background-color; + box-shadow: none; + transform: translateX(-1 * $sidebar-width); + will-change: transform; + z-index: 160; + pointer-events: auto; + + @include breakpoint($medium) { + padding: 3rem; + } + + @include breakpoint($large) { + transform: translateX(-1.5 * $sidebar-width); + max-width: (1.5 * $sidebar-width); + } + } + + .menu { + position: relative; + margin-bottom: 1.5rem; + padding-bottom: 0.5rem; + @include fluid-type($min-vw, $max-vw, 24px, 48px); + font-weight: bold; + line-height: 1; + + a { + display: block; + } + + // divider line + &:after { + content: ''; + position: absolute; + bottom: 0; + width: 1.5em; + height: 1px; + background-color: $base-color; + } + + li { + margin-bottom: 1.5rem; + } + } + + + li { + transform: translateX(-1rem); + opacity: 0; + transition: all 0.5s; + + &.is--moved { + opacity: 1; + transform: translateX(0); + } + } + + .contact-list { + margin-top: 0.5rem; + padding-top: 0.5rem; + @include fluid-type($min-vw, $max-vw, 18px, 24px); + + li:not(:last-child) { + margin-bottom: 0.5rem; + } + + a { + display: block; + color: $base-color; + text-decoration: none; + } + } +} + +#sidebar-toggle { + position: fixed; + top: 0; + right: 0; + cursor: pointer; + z-index: 10000; +} \ No newline at end of file diff --git a/_sass/basically-basic/_syntax-highlighting.scss b/_sass/basically-basic/_syntax-highlighting.scss new file mode 100644 index 0000000..18abd37 --- /dev/null +++ b/_sass/basically-basic/_syntax-highlighting.scss @@ -0,0 +1,127 @@ +// +// Syntax highlighitng +// + +.highlight { + padding: 1em; + background-color: $code-background-color; + + pre { + margin: 0; + } + + .lineno { + color: tint($base-color, 50%); + } +} + +.highlight table { + margin: 0; + font-size: 1em; + border: none; + + tr { + border: none; + } + + td { + padding: 5px; + border: none; + + // line numbers + &.gutter { + padding-right: 1rem; + } + } + + pre { + margin: 0; + } +} + +.highlight pre { width: 100%; } + +/* + Solarized Light + http://ethanschoonover.com/solarized + + SOLARIZED HEX ROLE + --------- -------- ------------------------------------------ + base01 #586e75 body text / default code / primary content + base1 #93a1a1 comments / secondary content + base3 #fdf6e3 background + orange #cb4b16 constants + red #dc322f regex, special keywords + blue #22b3eb reserved keywords + cyan #2aa198 strings, numbers + green #859900 operators, other keywords + ========================================================================== */ + +.highlight .c { color: #93a1a1 } /* Comment */ +.highlight .err { color: #586e75 } /* Error */ +.highlight .g { color: #586e75 } /* Generic */ +.highlight .k { color: #859900 } /* Keyword */ +.highlight .l { color: #586e75 } /* Literal */ +.highlight .n { color: #586e75 } /* Name */ +.highlight .o { color: #859900 } /* Operator */ +.highlight .x { color: #cb4b16 } /* Other */ +.highlight .p { color: #586e75 } /* Punctuation */ +.highlight .cm { color: #93a1a1 } /* Comment.Multiline */ +.highlight .cp { color: #859900 } /* Comment.Preproc */ +.highlight .c1 { color: #93a1a1 } /* Comment.Single */ +.highlight .cs { color: #859900 } /* Comment.Special */ +.highlight .gd { color: #2aa198 } /* Generic.Deleted */ +.highlight .ge { color: #586e75; font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #dc322f } /* Generic.Error */ +.highlight .gh { color: #cb4b16 } /* Generic.Heading */ +.highlight .gi { color: #859900 } /* Generic.Inserted */ +.highlight .go { color: #586e75 } /* Generic.Output */ +.highlight .gp { color: #586e75 } /* Generic.Prompt */ +.highlight .gs { color: #586e75; font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #cb4b16 } /* Generic.Subheading */ +.highlight .gt { color: #586e75 } /* Generic.Traceback */ +.highlight .kc { color: #cb4b16 } /* Keyword.Constant */ +.highlight .kd { color: #22b3eb } /* Keyword.Declaration */ +.highlight .kn { color: #859900 } /* Keyword.Namespace */ +.highlight .kp { color: #859900 } /* Keyword.Pseudo */ +.highlight .kr { color: #22b3eb } /* Keyword.Reserved */ +.highlight .kt { color: #dc322f } /* Keyword.Type */ +.highlight .ld { color: #586e75 } /* Literal.Date */ +.highlight .m { color: #2aa198 } /* Literal.Number */ +.highlight .s { color: #2aa198 } /* Literal.String */ +.highlight .na { color: #586e75 } /* Name.Attribute */ +.highlight .nb { color: #B58900 } /* Name.Builtin */ +.highlight .nc { color: #22b3eb } /* Name.Class */ +.highlight .no { color: #cb4b16 } /* Name.Constant */ +.highlight .nd { color: #22b3eb } /* Name.Decorator */ +.highlight .ni { color: #cb4b16 } /* Name.Entity */ +.highlight .ne { color: #cb4b16 } /* Name.Exception */ +.highlight .nf { color: #22b3eb } /* Name.Function */ +.highlight .nl { color: #586e75 } /* Name.Label */ +.highlight .nn { color: #586e75 } /* Name.Namespace */ +.highlight .nx { color: #586e75 } /* Name.Other */ +.highlight .py { color: #586e75 } /* Name.Property */ +.highlight .nt { color: #22b3eb } /* Name.Tag */ +.highlight .nv { color: #22b3eb } /* Name.Variable */ +.highlight .ow { color: #859900 } /* Operator.Word */ +.highlight .w { color: #586e75 } /* Text.Whitespace */ +.highlight .mf { color: #2aa198 } /* Literal.Number.Float */ +.highlight .mh { color: #2aa198 } /* Literal.Number.Hex */ +.highlight .mi { color: #2aa198 } /* Literal.Number.Integer */ +.highlight .mo { color: #2aa198 } /* Literal.Number.Oct */ +.highlight .sb { color: #93a1a1 } /* Literal.String.Backtick */ +.highlight .sc { color: #2aa198 } /* Literal.String.Char */ +.highlight .sd { color: #586e75 } /* Literal.String.Doc */ +.highlight .s2 { color: #2aa198 } /* Literal.String.Double */ +.highlight .se { color: #cb4b16 } /* Literal.String.Escape */ +.highlight .sh { color: #586e75 } /* Literal.String.Heredoc */ +.highlight .si { color: #2aa198 } /* Literal.String.Interpol */ +.highlight .sx { color: #2aa198 } /* Literal.String.Other */ +.highlight .sr { color: #dc322f } /* Literal.String.Regex */ +.highlight .s1 { color: #2aa198 } /* Literal.String.Single */ +.highlight .ss { color: #2aa198 } /* Literal.String.Symbol */ +.highlight .bp { color: #22b3eb } /* Name.Builtin.Pseudo */ +.highlight .vc { color: #22b3eb } /* Name.Variable.Class */ +.highlight .vg { color: #22b3eb } /* Name.Variable.Global */ +.highlight .vi { color: #22b3eb } /* Name.Variable.Instance */ +.highlight .il { color: #2aa198 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/_sass/basically-basic/_tables.scss b/_sass/basically-basic/_tables.scss new file mode 100644 index 0000000..b2c556f --- /dev/null +++ b/_sass/basically-basic/_tables.scss @@ -0,0 +1,37 @@ +// +// Tables +// + +table { + width: 100%; + @include fluid-type($min-vw, $max-vw, 12px, 18px); + border-collapse: collapse; + // For Firefox to horizontally scroll wider tables. + word-break: normal; + word-break: keep-all; +} + +thead { + + th, td { + background-color: tint($base-color, 80%); + } +} + +th, td { + border-bottom: 1px solid $border-color; +} + +th { + padding: 0.5em; + font-weight: bold; + text-align: left; +} + +td { + padding: 0.5em; +} + +tr, td, th { + vertical-align: middle; +} \ No newline at end of file diff --git a/_sass/basically-basic/_utilities.scss b/_sass/basically-basic/_utilities.scss new file mode 100644 index 0000000..7ab71e5 --- /dev/null +++ b/_sass/basically-basic/_utilities.scss @@ -0,0 +1,5 @@ +@import "utilities/accessibility"; +@import "utilities/align"; +@import "utilities/clearfix"; +@import "utilities/float"; +@import "utilities/text"; \ No newline at end of file diff --git a/_sass/basically-basic/_variables.scss b/_sass/basically-basic/_variables.scss new file mode 100644 index 0000000..2341c27 --- /dev/null +++ b/_sass/basically-basic/_variables.scss @@ -0,0 +1,81 @@ +// +// Variables +// + +// Breakpoint widths +$small: 320px !default; +$medium: 768px !default; +$large: 1024px !default; +$xlarge: 1280px !default; + +// Fluid type +$base-font-size: 16px !default; +$min-vw: $small !default; +$max-vw: $xlarge !default; +$min-font-size: 14px !default; +$max-font-size: 18px !default; + +// Calculate Modular Scale +$modular-scale-1: 1.067 !default; // small +$modular-scale-2: 1.296 !default; // large +// Heading 1 +$h1-min: $modular-scale-1*$modular-scale-1*$modular-scale-1*$modular-scale-1 * $base-font-size !default; +$h1-max: $modular-scale-2*$modular-scale-2*$modular-scale-2*$modular-scale-2 * $base-font-size !default; +// Heading 2 +$h2-min: $modular-scale-1*$modular-scale-1*$modular-scale-1 * $base-font-size !default; +$h2-max: $modular-scale-2*$modular-scale-2*$modular-scale-2 * $base-font-size !default; +// Heading 3 +$h3-min: $modular-scale-1*$modular-scale-1 * $base-font-size !default; +$h3-max: $modular-scale-2*$modular-scale-2 * $base-font-size !default; +// Heading 4 +$h4-min: $modular-scale-1 * $base-font-size !default; +$h4-max: $modular-scale-2 * $base-font-size !default; +// Heading 5 +$h5-min: $base-font-size !default; +$h5-max: $base-font-size !default; +// Heading 6 +$h6-min: ($base-font-size / $modular-scale-1) !default; +$h6-max: ($base-font-size / $modular-scale-2) !default; + +// Base font family +$base-font-family: -apple-system, ".SFNSText-Regular", "San Francisco", "Roboto", "Segoe UI", "Helvetica Neue", "Lucida Grande", sans-serif !default; +$base-font-family: 'Fira Sans', sans-serif; +// Other font families +$headline-font-family: $base-font-family; +$monospace-font-family: Menlo, Consolas, Monaco, "Courier New", Courier, monospace !default; + +// Colors +$base-color: #393e46 !default; +$text-color: #222831 !default; +$accent-color: #00848a !default; +$background-color: #ffffff !default; +$code-background-color: tint($base-color, 95%) !default; +$border-color: tint($base-color, 80%) !default; +$overlay-color: $base-color !default; + +// Max-width of the main content +$main-max-width: $xlarge !default; + +// Width of the sidebar +$sidebar-width: $small !default; + +// Background color of the sidebar +$sidebar-background-color: #fff !default; + +// Border radius +$border-radius: 0.25em !default; + +// Global transition +$global-transition: all 0.4s ease !default; + +// Navicon +$navicon-width: 1.75em !default; +$navicon-height: 0.25em !default; +$navicon-duration: 0.5s !default; +$navicon-toggled-size: 0.75 !default; +$navicon-nav-bg-close: transparent !default; +$navicon-nav-bg-open: transparent !default; +$navicon-content-bg: $text-color !default; + +// Susy grid settings +$susy: (columns: 16, gutters: 0, math: fluid, output: float) !default; \ No newline at end of file diff --git a/_sass/basically-basic/mixins/_clearfix.scss b/_sass/basically-basic/mixins/_clearfix.scss new file mode 100644 index 0000000..015be8c --- /dev/null +++ b/_sass/basically-basic/mixins/_clearfix.scss @@ -0,0 +1,11 @@ +// +// Clearfix Mixin +// + +@mixin clearfix() { + &::after { + display: block; + content: ""; + clear: both; + } +} diff --git a/_sass/basically-basic/mixins/_color.scss b/_sass/basically-basic/mixins/_color.scss new file mode 100644 index 0000000..f796a89 --- /dev/null +++ b/_sass/basically-basic/mixins/_color.scss @@ -0,0 +1,21 @@ +// +// Color Functions +// + +/// Slightly lighten a color +/// @access public +/// @param {Color} $color - color to tint +/// @param {Number} $percentage - percentage of `$color` in returned color +/// @return {Color} +@function tint($color, $percentage) { + @return mix(white, $color, $percentage); +} + +/// Slightly darken a color +/// @access public +/// @param {Color} $color - color to shade +/// @param {Number} $percentage - percentage of `$color` in returned color +/// @return {Color} +@function shade($color, $percentage) { + @return mix(black, $color, $percentage); +} \ No newline at end of file diff --git a/_sass/basically-basic/mixins/_float.scss b/_sass/basically-basic/mixins/_float.scss new file mode 100644 index 0000000..1abddbe --- /dev/null +++ b/_sass/basically-basic/mixins/_float.scss @@ -0,0 +1,15 @@ +// +// Float Mixins +// + +@mixin float-left { + float: left !important; +} + +@mixin float-right { + float: right !important; +} + +@mixin float-none { + float: none !important; +} diff --git a/_sass/basically-basic/mixins/_fluid-type.scss b/_sass/basically-basic/mixins/_fluid-type.scss new file mode 100644 index 0000000..65effe5 --- /dev/null +++ b/_sass/basically-basic/mixins/_fluid-type.scss @@ -0,0 +1,31 @@ +// +// Fluid Type +// as seen on https://madebymike.com.au/writing/fluid-type-calc-examples/ +// + +@function strip-unit($value) { + @return $value / ($value * 0 + 1); +} + +@mixin fluid-type($min-vw, $max-vw, $min-font-size, $max-font-size) { + $u1: unit($min-vw); + $u2: unit($max-vw); + $u3: unit($min-font-size); + $u4: unit($max-font-size); + + @if $u1 == $u2 and $u1 == $u3 and $u1 == $u4 { + & { + + font-size: $min-font-size; + @media screen and (min-width: $min-vw) { + font-size: calc(#{$min-font-size} + #{strip-unit($max-font-size - $min-font-size)} * ((100vw - #{$min-vw}) / #{strip-unit($max-vw - $min-vw)})); + } + + @media screen and (min-width: $max-vw) { + font-size: $max-font-size; + } + } + } @else { + @error "Detected mixed units. Please use the same units for all parameters. " + $u1 +", " + $u2 + ", " + $u3 +", "+ $u4; + } +} \ No newline at end of file diff --git a/_sass/basically-basic/mixins/_image.scss b/_sass/basically-basic/mixins/_image.scss new file mode 100644 index 0000000..c2b45f2 --- /dev/null +++ b/_sass/basically-basic/mixins/_image.scss @@ -0,0 +1,36 @@ +// Image Mixins +// - Responsive image +// - Retina image + + +// Responsive image +// +// Keep images from scaling beyond the width of their parents. + +@mixin img-fluid { + // Part 1: Set a maximum relative to the parent + max-width: 100%; + // Part 2: Override the height to auto, otherwise images will be stretched + // when setting a width and height attribute on the img element. + height: auto; +} + + +// Retina image +// +// Short retina mixin for setting background-image and -size. + +@mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) { + background-image: url($file-1x); + + // Autoprefixer takes care of adding -webkit-min-device-pixel-ratio and -o-min-device-pixel-ratio, + // but doesn't convert dppx=>dpi. + // There's no such thing as unprefixed min-device-pixel-ratio since it's nonstandard. + // Compatibility info: http://caniuse.com/#feat=css-media-resolution + @media + only screen and (min-resolution: 192dpi), // IE9-11 don't support dppx + only screen and (min-resolution: 2dppx) { // Standardized + background-image: url($file-2x); + background-size: $width-1x $height-1x; + } +} diff --git a/_sass/basically-basic/mixins/_lists.scss b/_sass/basically-basic/mixins/_lists.scss new file mode 100644 index 0000000..7814532 --- /dev/null +++ b/_sass/basically-basic/mixins/_lists.scss @@ -0,0 +1,9 @@ +// +// List Mixins +// + +// Unstyled keeps list items block level, just removes default browser padding and list-style +@mixin list-unstyled { + padding-left: 0; + list-style: none; +} diff --git a/_sass/basically-basic/mixins/_text-truncate.scss b/_sass/basically-basic/mixins/_text-truncate.scss new file mode 100644 index 0000000..5a40bf5 --- /dev/null +++ b/_sass/basically-basic/mixins/_text-truncate.scss @@ -0,0 +1,8 @@ +// Text truncate +// Requires inline-block or block for proper styling + +@mixin text-truncate() { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} \ No newline at end of file diff --git a/_sass/basically-basic/themes/_default.scss b/_sass/basically-basic/themes/_default.scss new file mode 100644 index 0000000..e801ae0 --- /dev/null +++ b/_sass/basically-basic/themes/_default.scss @@ -0,0 +1,5 @@ +// +// Default theme skin +// + +// Intentionally left blank \ No newline at end of file diff --git a/_sass/basically-basic/themes/_night.scss b/_sass/basically-basic/themes/_night.scss new file mode 100644 index 0000000..771b2ab --- /dev/null +++ b/_sass/basically-basic/themes/_night.scss @@ -0,0 +1,12 @@ +// +// Night theme skin +// + +// Colors +$base-color: #252a34 !default; +$text-color: #eaeaea !default; +$accent-color: #00adb5 !default; +$background-color: #252a34 !default; +$code-background-color: #ffffff !default; +$border-color: rgba($text-color, 0.5) !default; +$overlay-color: #ffffff !default; \ No newline at end of file diff --git a/_sass/basically-basic/themes/_plum.scss b/_sass/basically-basic/themes/_plum.scss new file mode 100644 index 0000000..1d8d2dc --- /dev/null +++ b/_sass/basically-basic/themes/_plum.scss @@ -0,0 +1,12 @@ +// +// Plum theme skin +// + +// Colors +$base-color: #561050 !default; +$text-color: #35013f !default; +$accent-color: #951556 !default; +$background-color: #e9b5d2 !default; +$code-background-color: #ffffff !default; +$border-color: rgba($text-color, 0.5) !default; +$overlay-color: #ffffff !default; \ No newline at end of file diff --git a/_sass/basically-basic/themes/_sea.scss b/_sass/basically-basic/themes/_sea.scss new file mode 100644 index 0000000..ec2b745 --- /dev/null +++ b/_sass/basically-basic/themes/_sea.scss @@ -0,0 +1,12 @@ +// +// Sea theme skin +// + +// Colors +$base-color: #41506b !default; +$text-color: #90f6d7 !default; +$accent-color: #35bcbf !default; +$background-color: #263849 !default; +$code-background-color: #ffffff !default; +$border-color: rgba($text-color, 0.5) !default; +$overlay-color: #ffffff !default; \ No newline at end of file diff --git a/_sass/basically-basic/themes/_soft.scss b/_sass/basically-basic/themes/_soft.scss new file mode 100644 index 0000000..0f25dcc --- /dev/null +++ b/_sass/basically-basic/themes/_soft.scss @@ -0,0 +1,12 @@ +// +// Soft theme skin +// + +// Colors +$base-color: mix(#625772, #a9eee6, 75%) !default; +$text-color: #625772 !default; +$accent-color: #e85482 !default; +$background-color: #fefaec !default; +$code-background-color: #ffffff !default; +$border-color: rgba($text-color, 0.5) !default; +$overlay-color: #ffffff !default; \ No newline at end of file diff --git a/_sass/basically-basic/themes/_steel.scss b/_sass/basically-basic/themes/_steel.scss new file mode 100644 index 0000000..40f6478 --- /dev/null +++ b/_sass/basically-basic/themes/_steel.scss @@ -0,0 +1,12 @@ +// +// Steel theme skin +// + +// Colors +$base-color: #3a4750 !default; +$text-color: #303841 !default; +$accent-color: #d72323 !default; +$background-color: #eeeeee !default; +$code-background-color: #ffffff !default; +$border-color: rgba($text-color, 0.25) !default; +$overlay-color: #ffffff !default; \ No newline at end of file diff --git a/_sass/basically-basic/utilities/_accessibility.scss b/_sass/basically-basic/utilities/_accessibility.scss new file mode 100644 index 0000000..dd3a230 --- /dev/null +++ b/_sass/basically-basic/utilities/_accessibility.scss @@ -0,0 +1,67 @@ +// +// Accessibility Modules +// + +// Skip links. +.skip-links { + margin: 0; + + li { + height: 0; + width: 0; + list-style: none; + } +} + +// Text meant only for screen readers. +.screen-reader-text, +.screen-reader-text span, +.screen-reader-shortcut { + position: absolute !important; + clip: rect(0, 0, 0, 0); + height: 1px; + width: 1px; + border: 0; + overflow: hidden; +} + +.screen-reader-text:focus, +.screen-reader-shortcut:focus, +.genesis-nav-menu .search input[type="submit"]:focus, +.widget_search input[type="submit"]:focus { + clip: auto !important; + height: auto; + width: auto; + z-index: 100000; + text-decoration: none; + box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6); +} + +.screen-reader-text, +.screen-reader-text span, +.screen-reader-shortcut { + position: absolute !important; + clip: rect(0, 0, 0, 0); + height: 1px; + width: 1px; + border: 0; + overflow: hidden; + + &:focus { + display: block; + top: 5px; + left: 5px; + padding: 0.75em 1em; + width: auto; + height: auto; + color: #fff; + font-weight: bold; + line-height: normal; + text-decoration: none; + background-color: $base-color; + border-radius: 0.125em; + box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6); + clip: auto !important; + z-index: 100000; + } +} \ No newline at end of file diff --git a/_sass/basically-basic/utilities/_align.scss b/_sass/basically-basic/utilities/_align.scss new file mode 100644 index 0000000..fd11f69 --- /dev/null +++ b/_sass/basically-basic/utilities/_align.scss @@ -0,0 +1,20 @@ +// +// Alignment +// + +.align-baseline { vertical-align: baseline !important; } // Browser default +.align-top { vertical-align: top !important; } +.align-middle { vertical-align: middle !important; } +.align-bottom { vertical-align: bottom !important; } +.align-text-bottom { vertical-align: text-bottom !important; } +.align-text-top { vertical-align: text-top !important; } + +.is--pushed { + @include breakpoint($medium) { + padding-left: $sidebar-width; + } + + @include breakpoint($large) { + padding-left: (1.5 * $sidebar-width); + } +} \ No newline at end of file diff --git a/_sass/basically-basic/utilities/_clearfix.scss b/_sass/basically-basic/utilities/_clearfix.scss new file mode 100644 index 0000000..031b70c --- /dev/null +++ b/_sass/basically-basic/utilities/_clearfix.scss @@ -0,0 +1,7 @@ +// +// Clearfix +// + +.clearfix { + @include clearfix(); +} diff --git a/_sass/basically-basic/utilities/_float.scss b/_sass/basically-basic/utilities/_float.scss new file mode 100644 index 0000000..68ed0f3 --- /dev/null +++ b/_sass/basically-basic/utilities/_float.scss @@ -0,0 +1,7 @@ +// +// FLoats +// + +.float-left { @include float-left; } +.float-right { @include float-right; } +.float-none { @include float-none; } \ No newline at end of file diff --git a/_sass/basically-basic/utilities/_text.scss b/_sass/basically-basic/utilities/_text.scss new file mode 100644 index 0000000..2ec2f1d --- /dev/null +++ b/_sass/basically-basic/utilities/_text.scss @@ -0,0 +1,22 @@ +// +// Text +// + +// Alignment + +.text-justify { text-align: justify !important; } +.text-nowrap { white-space: nowrap !important; } +.text-truncate { @include text-truncate; } +.text-left { text-align: left !important; } +.text-right { text-align: right !important; } +.text-center { text-align: center !important; } + +// Transformation + +.text-lowercase { text-transform: lowercase !important; } +.text-uppercase { text-transform: uppercase !important; } +.text-capitalize { text-transform: capitalize !important; } + +// Sizing + +.small { font-size: 80%; } \ No newline at end of file diff --git a/_sass/basically-basic/vendor/_breakpoint.scss b/_sass/basically-basic/vendor/_breakpoint.scss new file mode 100644 index 0000000..2ede6b7 --- /dev/null +++ b/_sass/basically-basic/vendor/_breakpoint.scss @@ -0,0 +1,114 @@ +////////////////////////////// +// Default Variables +////////////////////////////// +$Breakpoint-Settings: ( + 'default media': all, + 'default feature': min-width, + 'default pair': width, + + 'force all media type': false, + 'to ems': false, + 'transform resolutions': true, + + 'no queries': false, + 'no query fallbacks': false, + + 'base font size': 16px, + + 'legacy syntax': false +); + +$breakpoint: () !default; + +////////////////////////////// +// Imports +////////////////////////////// +@import "breakpoint/settings"; +@import 'breakpoint/context'; +@import 'breakpoint/helpers'; +@import 'breakpoint/parsers'; +@import 'breakpoint/no-query'; + +@import 'breakpoint/respond-to'; + +@import "breakpoint/legacy-settings"; + +////////////////////////////// +// Breakpoint Mixin +////////////////////////////// + +@mixin breakpoint($query, $no-query: false) { + @include legacy-settings-warning; + + // Reset contexts + @include private-breakpoint-reset-contexts(); + + $breakpoint: breakpoint($query, false); + + $query-string: map-get($breakpoint, 'query'); + $query-fallback: map-get($breakpoint, 'fallback'); + + $private-breakpoint-context-holder: map-get($breakpoint, 'context holder') !global; + $private-breakpoint-query-count: map-get($breakpoint, 'query count') !global; + + // Allow for an as-needed override or usage of no query fallback. + @if $no-query != false { + $query-fallback: $no-query; + } + + @if $query-fallback != false { + $context-setter: private-breakpoint-set-context('no-query', $query-fallback); + } + + // Print Out Query String + @if not breakpoint-get('no queries') { + @media #{$query-string} { + @content; + } + } + + @if breakpoint-get('no query fallbacks') != false or breakpoint-get('no queries') == true { + + $type: type-of(breakpoint-get('no query fallbacks')); + $print: false; + + @if ($type == 'bool') { + $print: true; + } + @else if ($type == 'string') { + @if $query-fallback == breakpoint-get('no query fallbacks') { + $print: true; + } + } + @else if ($type == 'list') { + @each $wrapper in breakpoint-get('no query fallbacks') { + @if $query-fallback == $wrapper { + $print: true; + } + } + } + + // Write Fallback + @if ($query-fallback != false) and ($print == true) { + $type-fallback: type-of($query-fallback); + + @if ($type-fallback != 'bool') { + #{$query-fallback} & { + @content; + } + } + @else { + @content; + } + } + } + + @include private-breakpoint-reset-contexts(); +} + + +@mixin mq($query, $no-query: false) { + @include breakpoint($query, $no-query) { + @content; + } +} diff --git a/_sass/basically-basic/vendor/_su.scss b/_sass/basically-basic/vendor/_su.scss new file mode 100644 index 0000000..83386ad --- /dev/null +++ b/_sass/basically-basic/vendor/_su.scss @@ -0,0 +1,4 @@ +// Su +// == + +@import 'susy/su'; diff --git a/_sass/basically-basic/vendor/_susy.scss b/_sass/basically-basic/vendor/_susy.scss new file mode 100644 index 0000000..224e98a --- /dev/null +++ b/_sass/basically-basic/vendor/_susy.scss @@ -0,0 +1,4 @@ +// Susy +// ==== + +@import 'susy/language/susy'; diff --git a/_sass/basically-basic/vendor/_susyone.scss b/_sass/basically-basic/vendor/_susyone.scss new file mode 100644 index 0000000..5b934c6 --- /dev/null +++ b/_sass/basically-basic/vendor/_susyone.scss @@ -0,0 +1,4 @@ +// Susy +// ==== + +@import 'susy/language/susyone'; diff --git a/_sass/basically-basic/vendor/breakpoint/_context.scss b/_sass/basically-basic/vendor/breakpoint/_context.scss new file mode 100644 index 0000000..57947f5 --- /dev/null +++ b/_sass/basically-basic/vendor/breakpoint/_context.scss @@ -0,0 +1,95 @@ +////////////////////////////// +// Private Breakpoint Variables +////////////////////////////// +$private-breakpoint-context-holder: (); +$private-breakpoint-query-count: 0 !default; + +////////////////////////////// +// Breakpoint Has Context +// Returns whether or not you are inside a Breakpoint query +////////////////////////////// +@function breakpoint-has-context() { + @if length($private-breakpoint-query-count) { + @return true; + } + @else { + @return false; + } +} + +////////////////////////////// +// Breakpoint Get Context +// $feature: Input feature to get it's current MQ context. Returns false if no context +////////////////////////////// +@function breakpoint-get-context($feature) { + @if map-has-key($private-breakpoint-context-holder, $feature) { + $get: map-get($private-breakpoint-context-holder, $feature); + // Special handling of no-query from get side so /false/ prepends aren't returned + @if $feature == 'no-query' { + @if type-of($get) == 'list' and length($get) > 1 and nth($get, 1) == false { + $get: nth($get, length($get)); + } + } + @return $get; + } + @else { + @if breakpoint-has-context() and $feature == 'media' { + @return breakpoint-get('default media'); + } + @else { + @return false; + } + } +} + +////////////////////////////// +// Private function to set context +////////////////////////////// +@function private-breakpoint-set-context($feature, $value) { + @if $value == 'monochrome' { + $feature: 'monochrome'; + } + + $current: map-get($private-breakpoint-context-holder, $feature); + @if $current and length($current) == $private-breakpoint-query-count { + @warn "You have already queried against `#{$feature}`. Unexpected things may happen if you query against the same feature more than once in the same `and` query. Breakpoint is overwriting the current context with `#{$value}`"; + } + + @if not map-has-key($private-breakpoint-context-holder, $feature) { + $v-holder: (); + @for $i from 1 to $private-breakpoint-query-count { + @if $feature == 'media' { + $v-holder: append($v-holder, breakpoint-get('default media')); + } + @else { + $v-holder: append($v-holder, false); + } + } + $v-holder: append($v-holder, $value); + $private-breakpoint-context-holder: map-merge($private-breakpoint-context-holder, ($feature: $v-holder)) !global; + } + @else { + $v-holder: map-get($private-breakpoint-context-holder, $feature); + $length: length($v-holder); + @for $i from $length to $private-breakpoint-query-count - 1 { + @if $feature == 'media' { + $v-holder: append($v-holder, breakpoint-get('default media')); + } + @else { + $v-holder: append($v-holder, false); + } + } + $v-holder: append($v-holder, $value); + $private-breakpoint-context-holder: map-merge($private-breakpoint-context-holder, ($feature: $v-holder)) !global; + } + + @return true; +} + +////////////////////////////// +// Private function to reset context +////////////////////////////// +@mixin private-breakpoint-reset-contexts { + $private-breakpoint-context-holder: () !global; + $private-breakpoint-query-count: 0 !global; +} \ No newline at end of file diff --git a/_sass/basically-basic/vendor/breakpoint/_helpers.scss b/_sass/basically-basic/vendor/breakpoint/_helpers.scss new file mode 100644 index 0000000..97e522d --- /dev/null +++ b/_sass/basically-basic/vendor/breakpoint/_helpers.scss @@ -0,0 +1,151 @@ +////////////////////////////// +// Converts the input value to Base EMs +////////////////////////////// +@function breakpoint-to-base-em($value) { + $value-unit: unit($value); + + // Will convert relative EMs into root EMs. + @if breakpoint-get('base font size') and type-of(breakpoint-get('base font size')) == 'number' and $value-unit == 'em' { + $base-unit: unit(breakpoint-get('base font size')); + + @if $base-unit == 'px' or $base-unit == '%' or $base-unit == 'em' or $base-unit == 'pt' { + @return base-conversion($value) / base-conversion(breakpoint-get('base font size')) * 1em; + } + @else { + @warn '#{breakpoint-get(\'base font size\')} is not set in valid units for font size!'; + @return false; + } + } + @else { + @return base-conversion($value); + } +} + +@function base-conversion($value) { + $unit: unit($value); + + @if $unit == 'px' { + @return $value / 16px * 1em; + } + @else if $unit == '%' { + @return $value / 100% * 1em; + } + @else if $unit == 'em' { + @return $value; + } + @else if $unit == 'pt' { + @return $value / 12pt * 1em; + } + @else { + @return $value; +// @warn 'Everything is terrible! What have you done?!'; + } +} + +////////////////////////////// +// Returns whether the feature can have a min/max pair +////////////////////////////// +$breakpoint-min-max-features: 'color', + 'color-index', + 'aspect-ratio', + 'device-aspect-ratio', + 'device-height', + 'device-width', + 'height', + 'monochrome', + 'resolution', + 'width'; + +@function breakpoint-min-max($feature) { + @each $item in $breakpoint-min-max-features { + @if $feature == $item { + @return true; + } + } + @return false; +} + +////////////////////////////// +// Returns whether the feature can have a string value +////////////////////////////// +$breakpoint-string-features: 'orientation', + 'scan', + 'color', + 'aspect-ratio', + 'device-aspect-ratio', + 'pointer', + 'luminosity'; + +@function breakpoint-string-value($feature) { + @each $item in $breakpoint-string-features { + @if breakpoint-min-max($item) { + @if $feature == 'min-#{$item}' or $feature == 'max-#{$item}' { + @return true; + } + } + @else if $feature == $item { + @return true; + } + } + @return false; +} + +////////////////////////////// +// Returns whether the feature is a media type +////////////////////////////// +$breakpoint-media-types: 'all', + 'braille', + 'embossed', + 'handheld', + 'print', + 'projection', + 'screen', + 'speech', + 'tty', + 'tv'; + +@function breakpoint-is-media($feature) { + @each $media in $breakpoint-media-types { + @if ($feature == $media) or ($feature == 'not #{$media}') or ($feature == 'only #{$media}') { + @return true; + } + } + + @return false; +} + +////////////////////////////// +// Returns whether the feature can stand alone +////////////////////////////// +$breakpoint-single-string-features: 'color', + 'color-index', + 'grid', + 'monochrome'; + +@function breakpoint-single-string($feature) { + @each $item in $breakpoint-single-string-features { + @if $feature == $item { + @return true; + } + } + @return false; +} + +////////////////////////////// +// Returns whether the feature +////////////////////////////// +@function breakpoint-is-resolution($feature) { + $resolutions: 'device-pixel-ratio', 'dpr'; + + @if breakpoint-get('transform resolutions') { + $resolutions: append($resolutions, 'resolution'); + } + + @each $reso in $resolutions { + @if index($feature, $reso) or index($feature, 'min-#{$reso}') or index($feature, 'max-#{$reso}') { + @return true; + } + } + + @return false; +} diff --git a/_sass/basically-basic/vendor/breakpoint/_legacy-settings.scss b/_sass/basically-basic/vendor/breakpoint/_legacy-settings.scss new file mode 100644 index 0000000..e060ebe --- /dev/null +++ b/_sass/basically-basic/vendor/breakpoint/_legacy-settings.scss @@ -0,0 +1,50 @@ +@mixin legacy-settings-warning { + $legacyVars: ( + 'default-media': 'default media', + 'default-feature': 'default feature', + 'force-media-all': 'force all media type', + 'to-ems': 'to ems', + 'resolutions': 'transform resolutions', + 'no-queries': 'no queries', + 'no-query-fallbacks': 'no query fallbacks', + 'base-font-size': 'base font size', + 'legacy-syntax': 'legacy syntax' + ); + + @each $legacy, $new in $legacyVars { + @if global-variable-exists('breakpoint-' + $legacy) { + @warn "In order to avoid variable namspace collisions, we have updated the way to change settings for Breakpoint. Please change all instances of `$breakpoint-#{$legacy}: {{setting}}` to `@include breakpoint-set('#{$new}', {{setting}})`. Variable settings, as well as this warning will be deprecated in a future release." + } + }; + + ////////////////////////////// + // Hand correct each setting + ////////////////////////////// + @if global-variable-exists('breakpoint-default-media') and $breakpoint-default-media != breakpoint-get('default media') { + @include breakpoint-set('default media', $breakpoint-default-media); + } + @if global-variable-exists('breakpoint-default-feature') and $breakpoint-default-feature != breakpoint-get('default feature') { + @include breakpoint-set('default feature', $breakpoint-default-feature); + } + @if global-variable-exists('breakpoint-force-media-all') and $breakpoint-force-media-all != breakpoint-get('force all media type') { + @include breakpoint-set('force all media type', $breakpoint-force-media-all); + } + @if global-variable-exists('breakpoint-to-ems') and $breakpoint-to-ems != breakpoint-get('to ems') { + @include breakpoint-set('to ems', $breakpoint-to-ems); + } + @if global-variable-exists('breakpoint-resolutions') and $breakpoint-resolutions != breakpoint-get('transform resolutions') { + @include breakpoint-set('transform resolutions', $breakpoint-resolutions); + } + @if global-variable-exists('breakpoint-no-queries') and $breakpoint-no-queries != breakpoint-get('no queries') { + @include breakpoint-set('no queries', $breakpoint-no-queries); + } + @if global-variable-exists('breakpoint-no-query-fallbacks') and $breakpoint-no-query-fallbacks != breakpoint-get('no query fallbacks') { + @include breakpoint-set('no query fallbacks', $breakpoint-no-query-fallbacks); + } + @if global-variable-exists('breakpoint-base-font-size') and $breakpoint-base-font-size != breakpoint-get('base font size') { + @include breakpoint-set('base font size', $breakpoint-base-font-size); + } + @if global-variable-exists('breakpoint-legacy-syntax') and $breakpoint-legacy-syntax != breakpoint-get('legacy syntax') { + @include breakpoint-set('legacy syntax', $breakpoint-legacy-syntax); + } +} \ No newline at end of file diff --git a/_sass/basically-basic/vendor/breakpoint/_no-query.scss b/_sass/basically-basic/vendor/breakpoint/_no-query.scss new file mode 100644 index 0000000..0b5a81f --- /dev/null +++ b/_sass/basically-basic/vendor/breakpoint/_no-query.scss @@ -0,0 +1,15 @@ +@function breakpoint-no-query($query) { + @if type-of($query) == 'list' { + $keyword: nth($query, 1); + + @if type-of($keyword) == 'string' and ($keyword == 'no-query' or $keyword == 'no query' or $keyword == 'fallback') { + @return nth($query, 2); + } + @else { + @return false; + } + } + @else { + @return false; + } +} diff --git a/_sass/basically-basic/vendor/breakpoint/_parsers.scss b/_sass/basically-basic/vendor/breakpoint/_parsers.scss new file mode 100644 index 0000000..f0b053f --- /dev/null +++ b/_sass/basically-basic/vendor/breakpoint/_parsers.scss @@ -0,0 +1,215 @@ +////////////////////////////// +// Import Parser Pieces +////////////////////////////// +@import "parsers/query"; +@import "parsers/single"; +@import "parsers/double"; +@import "parsers/triple"; +@import "parsers/resolution"; + +$Memo-Exists: function-exists(memo-get) and function-exists(memo-set); + +////////////////////////////// +// Breakpoint Function +////////////////////////////// +@function breakpoint($query, $contexts...) { + $run: true; + $return: (); + + // Grab the Memo Output if Memoization can be a thing + @if $Memo-Exists { + $return: memo-get(breakpoint, breakpoint $query $contexts); + + @if $return != null { + $run: false; + } + } + + @if not $Memo-Exists or $run { + // Internal Variables + $query-string: ''; + $query-fallback: false; + $return: (); + + // Reserve Global Private Breakpoint Context + $holder-context: $private-breakpoint-context-holder; + $holder-query-count: $private-breakpoint-query-count; + + // Reset Global Private Breakpoint Context + $private-breakpoint-context-holder: () !global; + $private-breakpoint-query-count: 0 !global; + + + // Test to see if it's a comma-separated list + $or-list: if(list-separator($query) == 'comma', true, false); + + + @if ($or-list == false and breakpoint-get('legacy syntax') == false) { + $query-string: breakpoint-parse($query); + } + @else { + $length: length($query); + + $last: nth($query, $length); + $query-fallback: breakpoint-no-query($last); + + @if ($query-fallback != false) { + $length: $length - 1; + } + + @if (breakpoint-get('legacy syntax') == true) { + $mq: (); + + @for $i from 1 through $length { + $mq: append($mq, nth($query, $i), comma); + } + + $query-string: breakpoint-parse($mq); + } + @else { + $query-string: ''; + @for $i from 1 through $length { + $query-string: $query-string + if($i == 1, '', ', ') + breakpoint-parse(nth($query, $i)); + } + } + } + + $return: ('query': $query-string, + 'fallback': $query-fallback, + 'context holder': $private-breakpoint-context-holder, + 'query count': $private-breakpoint-query-count + ); + @if length($contexts) > 0 and nth($contexts, 1) != false { + @if $query-fallback != false { + $context-setter: private-breakpoint-set-context('no-query', $query-fallback); + } + $context-map: (); + @each $context in $contexts { + $context-map: map-merge($context-map, ($context: breakpoint-get-context($context))); + } + $return: map-merge($return, (context: $context-map)); + } + + // Reset Global Private Breakpoint Context + $private-breakpoint-context-holder: () !global; + $private-breakpoint-query-count: 0 !global; + + @if $Memo-Exists { + $holder: memo-set(breakpoint, breakpoint $query $contexts, $return); + } + } + + @return $return; +} + +////////////////////////////// +// General Breakpoint Parser +////////////////////////////// +@function breakpoint-parse($query) { + // Increase number of 'and' queries + $private-breakpoint-query-count: $private-breakpoint-query-count + 1 !global; + + // Set up Media Type + $query-print: ''; + + $force-all: ((breakpoint-get('force all media type') == true) and (breakpoint-get('default media') == 'all')); + $empty-media: true; + @if ($force-all == true) or (breakpoint-get('default media') != 'all') { + // Force the print of the default media type if (force all is true and default media type is all) or (default media type is not all) + $query-print: breakpoint-get('default media'); + $empty-media: false; + } + + + $query-resolution: false; + + $query-holder: breakpoint-parse-query($query); + + + + // Loop over each parsed out query and write it to $query-print + $first: true; + + @each $feature in $query-holder { + $length: length($feature); + + // Parse a single feature + @if ($length == 1) { + // Feature is currently a list, grab the actual value + $feature: nth($feature, 1); + + // Media Type must by convention be the first item, so it's safe to flat override $query-print, which right now should only be the default media type + @if (breakpoint-is-media($feature)) { + @if ($force-all == true) or ($feature != 'all') { + // Force the print of the default media type if (force all is true and default media type is all) or (default media type is not all) + $query-print: $feature; + $empty-media: false; + + // Set Context + $context-setter: private-breakpoint-set-context(media, $query-print); + } + } + @else { + $parsed: breakpoint-parse-single($feature, $empty-media, $first); + $query-print: '#{$query-print} #{$parsed}'; + $first: false; + } + } + // Parse a double feature + @else if ($length == 2) { + @if (breakpoint-is-resolution($feature) != false) { + $query-resolution: $feature; + } + @else { + $parsed: null; + // If it's a string/number pair, + // we check to see if one is a single-string value, + // then we parse it as a normal double + $alpha: nth($feature, 1); + $beta: nth($feature, 2); + @if breakpoint-single-string($alpha) or breakpoint-single-string($beta) { + $parsed: breakpoint-parse-single($alpha, $empty-media, $first); + $query-print: '#{$query-print} #{$parsed}'; + $first: false; + $parsed: breakpoint-parse-single($beta, $empty-media, $first); + $query-print: '#{$query-print} #{$parsed}'; + } + @else { + $parsed: breakpoint-parse-double($feature, $empty-media, $first); + $query-print: '#{$query-print} #{$parsed}'; + $first: false; + } + } + } + // Parse a triple feature + @else if ($length == 3) { + $parsed: breakpoint-parse-triple($feature, $empty-media, $first); + $query-print: '#{$query-print} #{$parsed}'; + $first: false; + } + + } + + @if ($query-resolution != false) { + $query-print: breakpoint-build-resolution($query-print, $query-resolution, $empty-media, $first); + } + + // Loop through each feature that's been detected so far and append 'false' to the the value list to increment their counters + @each $f, $v in $private-breakpoint-context-holder { + $v-holder: $v; + $length: length($v-holder); + @if length($v-holder) < $private-breakpoint-query-count { + @for $i from $length to $private-breakpoint-query-count { + @if $f == 'media' { + $v-holder: append($v-holder, breakpoint-get('default media')); + } + @else { + $v-holder: append($v-holder, false); + } + } + } + $private-breakpoint-context-holder: map-merge($private-breakpoint-context-holder, ($f: $v-holder)) !global; + } + + @return $query-print; +} diff --git a/_sass/basically-basic/vendor/breakpoint/_respond-to.scss b/_sass/basically-basic/vendor/breakpoint/_respond-to.scss new file mode 100644 index 0000000..e2462c5 --- /dev/null +++ b/_sass/basically-basic/vendor/breakpoint/_respond-to.scss @@ -0,0 +1,82 @@ +//////////////////////// +// Default the Breakpoints variable +//////////////////////// +$breakpoints: () !default; +$BREAKPOINTS: () !default; + +//////////////////////// +// Respond-to API Mixin +//////////////////////// +@mixin respond-to($context, $no-query: false) { + @if length($breakpoints) > 0 and length($BREAKPOINTS) == 0 { + @warn "In order to avoid variable namespace collisions, we have updated the way to add breakpoints for respond-to. Please change all instances of `$breakpoints: add-breakpoint()` to `@include add-breakpoint()`. The `add-breakpoint()` function will be deprecated in a future release."; + $BREAKPOINTS: $breakpoints !global; + $breakpoints: () !global; + } + + @if type-of($BREAKPOINTS) != 'map' { + // Just in case someone writes gibberish to the $breakpoints variable. + @warn "Your breakpoints aren't a map! `respond-to` expects a map. Please check the value of $BREAKPOINTS variable."; + @content; + } + @else if map-has-key($BREAKPOINTS, $context) { + @include breakpoint(map-get($BREAKPOINTS, $context), $no-query) { + @content; + } + } + @else if not map-has-key($BREAKPOINTS, $context) { + @warn "`#{$context}` isn't a defined breakpoint! Please add it using `$breakpoints: add-breakpoint(`#{$context}`, $value);`"; + @content; + } + @else { + @warn "You haven't created any breakpoints yet! Make some already! `@include add-breakpoint($name, $bkpt)`"; + @content; + } +} + +////////////////////////////// +// Add Breakpoint to Breakpoints +// TODO: Remove function in next release +////////////////////////////// +@function add-breakpoint($name, $bkpt, $overwrite: false) { + $output: ($name: $bkpt); + + @if length($breakpoints) == 0 { + @return $output; + } + @else { + @if map-has-key($breakpoints, $name) and $overwrite != true { + @warn "You already have a breakpoint named `#{$name}`, please choose another breakpoint name, or pass in `$overwrite: true` to overwrite the previous breakpoint."; + @return $breakpoints; + } + @else if not map-has-key($breakpoints, $name) or $overwrite == true { + @return map-merge($breakpoints, $output); + } + } +} + +@mixin add-breakpoint($name, $bkpt, $overwrite: false) { + $output: ($name: $bkpt); + + @if length($BREAKPOINTS) == 0 { + $BREAKPOINTS: $output !global; + } + @else { + @if map-has-key($BREAKPOINTS, $name) and $overwrite != true { + @warn "You already have a breakpoint named `#{$name}`, please choose another breakpoint name, or pass in `$overwrite: true` to overwrite the previous breakpoint."; + $BREAKPOINTS: $BREAKPOINTS !global; + } + @else if not map-has-key($BREAKPOINTS, $name) or $overwrite == true { + $BREAKPOINTS: map-merge($BREAKPOINTS, $output) !global; + } + } +} + +@function get-breakpoint($name: false) { + @if $name == false { + @return $BREAKPOINTS; + } + @else { + @return map-get($BREAKPOINTS, $name); + } +} diff --git a/_sass/basically-basic/vendor/breakpoint/_settings.scss b/_sass/basically-basic/vendor/breakpoint/_settings.scss new file mode 100644 index 0000000..05ee689 --- /dev/null +++ b/_sass/basically-basic/vendor/breakpoint/_settings.scss @@ -0,0 +1,71 @@ +////////////////////////////// +// Has Setting +////////////////////////////// +@function breakpoint-has($setting) { + @if map-has-key($breakpoint, $setting) { + @return true; + } + @else { + @return false; + } +} + +////////////////////////////// +// Get Settings +////////////////////////////// +@function breakpoint-get($setting) { + @if breakpoint-has($setting) { + @return map-get($breakpoint, $setting); + } + @else { + @return map-get($Breakpoint-Settings, $setting); + } +} + +////////////////////////////// +// Set Settings +////////////////////////////// +@function breakpoint-set($setting, $value) { + @if (str-index($setting, '-') or str-index($setting, '_')) and str-index($setting, ' ') == null { + @warn "Words in Breakpoint settings should be separated by spaces, not dashes or underscores. Please replace dashes and underscores between words with spaces. Settings will not work as expected until changed."; + } + $breakpoint: map-merge($breakpoint, ($setting: $value)) !global; + @return true; +} + +@mixin breakpoint-change($setting, $value) { + $breakpoint-change: breakpoint-set($setting, $value); +} + +@mixin breakpoint-set($setting, $value) { + @include breakpoint-change($setting, $value); +} + +@mixin bkpt-change($setting, $value) { + @include breakpoint-change($setting, $value); +} +@mixin bkpt-set($setting, $value) { + @include breakpoint-change($setting, $value); +} + +////////////////////////////// +// Remove Setting +////////////////////////////// +@function breakpoint-reset($settings...) { + @if length($settings) == 1 { + $settings: nth($settings, 1); + } + + @each $setting in $settings { + $breakpoint: map-remove($breakpoint, $setting) !global; + } + @return true; +} + +@mixin breakpoint-reset($settings...) { + $breakpoint-reset: breakpoint-reset($settings); +} + +@mixin bkpt-reset($settings...) { + $breakpoint-reset: breakpoint-reset($settings); +} \ No newline at end of file diff --git a/_sass/basically-basic/vendor/breakpoint/parsers/_double.scss b/_sass/basically-basic/vendor/breakpoint/parsers/_double.scss new file mode 100644 index 0000000..24580c1 --- /dev/null +++ b/_sass/basically-basic/vendor/breakpoint/parsers/_double.scss @@ -0,0 +1,33 @@ +////////////////////////////// +// Import Pieces +////////////////////////////// +@import "double/default-pair"; +@import "double/double-string"; +@import "double/default"; + +@function breakpoint-parse-double($feature, $empty-media, $first) { + $parsed: ''; + $leader: ''; + // If we're forcing + @if not ($empty-media) or not ($first) { + $leader: 'and '; + } + + $first: nth($feature, 1); + $second: nth($feature, 2); + + // If we've got two numbers, we know we need to use the default pair because there are no media queries that has a media feature that is a number + @if type-of($first) == 'number' and type-of($second) == 'number' { + $parsed: breakpoint-parse-default-pair($first, $second); + } + // If they are both strings, we send it through the string parser + @else if type-of($first) == 'string' and type-of($second) == 'string' { + $parsed: breakpoint-parse-double-string($first, $second); + } + // If it's a string/number pair, we parse it as a normal double + @else { + $parsed: breakpoint-parse-double-default($first, $second); + } + + @return $leader + $parsed; +} diff --git a/_sass/basically-basic/vendor/breakpoint/parsers/_query.scss b/_sass/basically-basic/vendor/breakpoint/parsers/_query.scss new file mode 100644 index 0000000..b138b39 --- /dev/null +++ b/_sass/basically-basic/vendor/breakpoint/parsers/_query.scss @@ -0,0 +1,82 @@ +@function breakpoint-parse-query($query) { + // Parse features out of an individual query + $feature-holder: (); + $query-holder: (); + $length: length($query); + + @if $length == 2 { + // If we've got a string/number, number/string, check to see if it's a valid string/number pair or two singles + @if (type-of(nth($query, 1)) == 'string' and type-of(nth($query, 2)) == 'number') or (type-of(nth($query, 1)) == 'number' and type-of(nth($query, 2)) == 'string') { + + $number: ''; + $value: ''; + + @if type-of(nth($query, 1)) == 'string' { + $number: nth($query, 2); + $value: nth($query, 1); + } + @else { + $number: nth($query, 1); + $value: nth($query, 2); + } + + // If the string value can be a single value, check to see if the number passed in is a valid input for said single value. Fortunately, all current single-value options only accept unitless numbers, so this check is easy. + @if breakpoint-single-string($value) { + @if unitless($number) { + $feature-holder: append($value, $number, space); + $query-holder: append($query-holder, $feature-holder, comma); + @return $query-holder; + } + } + // If the string is a media type, split the query + @if breakpoint-is-media($value) { + $query-holder: append($query-holder, nth($query, 1)); + $query-holder: append($query-holder, nth($query, 2)); + @return $query-holder; + } + // If it's not a single feature, we're just going to assume it's a proper string/value pair, and roll with it. + @else { + $feature-holder: append($value, $number, space); + $query-holder: append($query-holder, $feature-holder, comma); + @return $query-holder; + } + + } + // If they're both numbers, we assume it's a double and roll with that + @else if (type-of(nth($query, 1)) == 'number' and type-of(nth($query, 2)) == 'number') { + $feature-holder: append(nth($query, 1), nth($query, 2), space); + $query-holder: append($query-holder, $feature-holder, comma); + @return $query-holder; + } + // If they're both strings and neither are singles, we roll with that. + @else if (type-of(nth($query, 1)) == 'string' and type-of(nth($query, 2)) == 'string') { + @if not breakpoint-single-string(nth($query, 1)) and not breakpoint-single-string(nth($query, 2)) { + $feature-holder: append(nth($query, 1), nth($query, 2), space); + $query-holder: append($query-holder, $feature-holder, comma); + @return $query-holder; + } + } + } + @else if $length == 3 { + // If we've got three items and none is a list, we check to see + @if type-of(nth($query, 1)) != 'list' and type-of(nth($query, 2)) != 'list' and type-of(nth($query, 3)) != 'list' { + // If none of the items are single string values and none of the values are media values, we're good. + @if (not breakpoint-single-string(nth($query, 1)) and not breakpoint-single-string(nth($query, 2)) and not breakpoint-single-string(nth($query, 3))) and ((not breakpoint-is-media(nth($query, 1)) and not breakpoint-is-media(nth($query, 2)) and not breakpoint-is-media(nth($query, 3)))) { + $feature-holder: append(nth($query, 1), nth($query, 2), space); + $feature-holder: append($feature-holder, nth($query, 3), space); + $query-holder: append($query-holder, $feature-holder, comma); + @return $query-holder; + } + // let's check to see if the first item is a media type + @else if breakpoint-is-media(nth($query, 1)) { + $query-holder: append($query-holder, nth($query, 1)); + $feature-holder: append(nth($query, 2), nth($query, 3), space); + $query-holder: append($query-holder, $feature-holder); + @return $query-holder; + } + } + } + + // If it's a single item, or if it's not a special case double or triple, we can simply return the query. + @return $query; +} diff --git a/_sass/basically-basic/vendor/breakpoint/parsers/_resolution.scss b/_sass/basically-basic/vendor/breakpoint/parsers/_resolution.scss new file mode 100644 index 0000000..19769ad --- /dev/null +++ b/_sass/basically-basic/vendor/breakpoint/parsers/_resolution.scss @@ -0,0 +1,31 @@ +@import "resolution/resolution"; + +@function breakpoint-build-resolution($query-print, $query-resolution, $empty-media, $first) { + $leader: ''; + // If we're forcing + @if not ($empty-media) or not ($first) { + $leader: 'and '; + } + + @if breakpoint-get('transform resolutions') and $query-resolution { + $resolutions: breakpoint-make-resolutions($query-resolution); + $length: length($resolutions); + $query-holder: ''; + + @for $i from 1 through $length { + $query: '#{$query-print} #{$leader}#{nth($resolutions, $i)}'; + @if $i == 1 { + $query-holder: $query; + } + @else { + $query-holder: '#{$query-holder}, #{$query}'; + } + } + + @return $query-holder; + } + @else { + // Return with attached resolution + @return $query-print; + } +} diff --git a/_sass/basically-basic/vendor/breakpoint/parsers/_single.scss b/_sass/basically-basic/vendor/breakpoint/parsers/_single.scss new file mode 100644 index 0000000..d9fd764 --- /dev/null +++ b/_sass/basically-basic/vendor/breakpoint/parsers/_single.scss @@ -0,0 +1,26 @@ +////////////////////////////// +// Import Pieces +////////////////////////////// +@import "single/default"; + +@function breakpoint-parse-single($feature, $empty-media, $first) { + $parsed: ''; + $leader: ''; + // If we're forcing + @if not ($empty-media) or not ($first) { + $leader: 'and '; + } + + // If it's a single feature that can stand alone, we let it + @if (breakpoint-single-string($feature)) { + $parsed: $feature; + // Set Context + $context-setter: private-breakpoint-set-context($feature, $feature); + } + // If it's not a stand alone feature, we pass it off to the default handler. + @else { + $parsed: breakpoint-parse-default($feature); + } + + @return $leader + '(' + $parsed + ')'; +} diff --git a/_sass/basically-basic/vendor/breakpoint/parsers/_triple.scss b/_sass/basically-basic/vendor/breakpoint/parsers/_triple.scss new file mode 100644 index 0000000..e273206 --- /dev/null +++ b/_sass/basically-basic/vendor/breakpoint/parsers/_triple.scss @@ -0,0 +1,36 @@ +////////////////////////////// +// Import Pieces +////////////////////////////// +@import "triple/default"; + +@function breakpoint-parse-triple($feature, $empty-media, $first) { + $parsed: ''; + $leader: ''; + + // If we're forcing + @if not ($empty-media) or not ($first) { + $leader: 'and '; + } + + // separate the string features from the value numbers + $string: null; + $numbers: null; + @each $val in $feature { + @if type-of($val) == string { + $string: $val; + } + @else { + @if type-of($numbers) == 'null' { + $numbers: $val; + } + @else { + $numbers: append($numbers, $val); + } + } + } + + $parsed: breakpoint-parse-triple-default($string, nth($numbers, 1), nth($numbers, 2)); + + @return $leader + $parsed; + +} diff --git a/_sass/basically-basic/vendor/breakpoint/parsers/double/_default-pair.scss b/_sass/basically-basic/vendor/breakpoint/parsers/double/_default-pair.scss new file mode 100644 index 0000000..f88432c --- /dev/null +++ b/_sass/basically-basic/vendor/breakpoint/parsers/double/_default-pair.scss @@ -0,0 +1,21 @@ +@function breakpoint-parse-default-pair($first, $second) { + $default: breakpoint-get('default pair'); + $min: ''; + $max: ''; + + // Sort into min and max + $min: min($first, $second); + $max: max($first, $second); + + // Set Context + $context-setter: private-breakpoint-set-context(min-#{$default}, $min); + $context-setter: private-breakpoint-set-context(max-#{$default}, $max); + + // Make them EMs if need be + @if (breakpoint-get('to ems') == true) { + $min: breakpoint-to-base-em($min); + $max: breakpoint-to-base-em($max); + } + + @return '(min-#{$default}: #{$min}) and (max-#{$default}: #{$max})'; +} diff --git a/_sass/basically-basic/vendor/breakpoint/parsers/double/_default.scss b/_sass/basically-basic/vendor/breakpoint/parsers/double/_default.scss new file mode 100644 index 0000000..73190ed --- /dev/null +++ b/_sass/basically-basic/vendor/breakpoint/parsers/double/_default.scss @@ -0,0 +1,22 @@ +@function breakpoint-parse-double-default($first, $second) { + $feature: ''; + $value: ''; + + @if type-of($first) == 'string' { + $feature: $first; + $value: $second; + } + @else { + $feature: $second; + $value: $first; + } + + // Set Context + $context-setter: private-breakpoint-set-context($feature, $value); + + @if (breakpoint-get('to ems') == true) { + $value: breakpoint-to-base-em($value); + } + + @return '(#{$feature}: #{$value})' +} diff --git a/_sass/basically-basic/vendor/breakpoint/parsers/double/_double-string.scss b/_sass/basically-basic/vendor/breakpoint/parsers/double/_double-string.scss new file mode 100644 index 0000000..c6fd0cb --- /dev/null +++ b/_sass/basically-basic/vendor/breakpoint/parsers/double/_double-string.scss @@ -0,0 +1,22 @@ +@function breakpoint-parse-double-string($first, $second) { + $feature: ''; + $value: ''; + + // Test to see which is the feature and which is the value + @if (breakpoint-string-value($first) == true) { + $feature: $first; + $value: $second; + } + @else if (breakpoint-string-value($second) == true) { + $feature: $second; + $value: $first; + } + @else { + @warn "Neither #{$first} nor #{$second} is a valid media query name."; + } + + // Set Context + $context-setter: private-breakpoint-set-context($feature, $value); + + @return '(#{$feature}: #{$value})'; +} \ No newline at end of file diff --git a/_sass/basically-basic/vendor/breakpoint/parsers/resolution/_resolution.scss b/_sass/basically-basic/vendor/breakpoint/parsers/resolution/_resolution.scss new file mode 100644 index 0000000..3680421 --- /dev/null +++ b/_sass/basically-basic/vendor/breakpoint/parsers/resolution/_resolution.scss @@ -0,0 +1,60 @@ +@function breakpoint-make-resolutions($resolution) { + $length: length($resolution); + + $output: (); + + @if $length == 2 { + $feature: ''; + $value: ''; + + // Find which is number + @if type-of(nth($resolution, 1)) == 'number' { + $value: nth($resolution, 1); + } + @else { + $value: nth($resolution, 2); + } + + // Determine min/max/standard + @if index($resolution, 'min-resolution') { + $feature: 'min-'; + } + @else if index($resolution, 'max-resolution') { + $feature: 'max-'; + } + + $standard: '(#{$feature}resolution: #{$value})'; + + // If we're not dealing with dppx, + @if unit($value) != 'dppx' { + $base: 96dpi; + @if unit($value) == 'dpcm' { + $base: 243.84dpcm; + } + // Write out feature tests + $webkit: ''; + $moz: ''; + $webkit: '(-webkit-#{$feature}device-pixel-ratio: #{$value / $base})'; + $moz: '(#{$feature}-moz-device-pixel-ratio: #{$value / $base})'; + // Append to output + $output: append($output, $standard, space); + $output: append($output, $webkit, space); + $output: append($output, $moz, space); + } + @else { + $webkit: ''; + $moz: ''; + $webkit: '(-webkit-#{$feature}device-pixel-ratio: #{$value / 1dppx})'; + $moz: '(#{$feature}-moz-device-pixel-ratio: #{$value / 1dppx})'; + $fallback: '(#{$feature}resolution: #{$value / 1dppx * 96dpi})'; + // Append to output + $output: append($output, $standard, space); + $output: append($output, $webkit, space); + $output: append($output, $moz, space); + $output: append($output, $fallback, space); + } + + } + + @return $output; +} diff --git a/_sass/basically-basic/vendor/breakpoint/parsers/single/_default.scss b/_sass/basically-basic/vendor/breakpoint/parsers/single/_default.scss new file mode 100644 index 0000000..503ef42 --- /dev/null +++ b/_sass/basically-basic/vendor/breakpoint/parsers/single/_default.scss @@ -0,0 +1,13 @@ +@function breakpoint-parse-default($feature) { + $default: breakpoint-get('default feature'); + + // Set Context + $context-setter: private-breakpoint-set-context($default, $feature); + + @if (breakpoint-get('to ems') == true) and (type-of($feature) == 'number') { + @return '#{$default}: #{breakpoint-to-base-em($feature)}'; + } + @else { + @return '#{$default}: #{$feature}'; + } +} diff --git a/_sass/basically-basic/vendor/breakpoint/parsers/triple/_default.scss b/_sass/basically-basic/vendor/breakpoint/parsers/triple/_default.scss new file mode 100644 index 0000000..7fa418d --- /dev/null +++ b/_sass/basically-basic/vendor/breakpoint/parsers/triple/_default.scss @@ -0,0 +1,18 @@ +@function breakpoint-parse-triple-default($feature, $first, $second) { + + // Sort into min and max + $min: min($first, $second); + $max: max($first, $second); + + // Set Context + $context-setter: private-breakpoint-set-context(min-#{$feature}, $min); + $context-setter: private-breakpoint-set-context(max-#{$feature}, $max); + + // Make them EMs if need be + @if (breakpoint-get('to ems') == true) { + $min: breakpoint-to-base-em($min); + $max: breakpoint-to-base-em($max); + } + + @return '(min-#{$feature}: #{$min}) and (max-#{$feature}: #{$max})'; +} diff --git a/_sass/basically-basic/vendor/susy/_su.scss b/_sass/basically-basic/vendor/susy/_su.scss new file mode 100644 index 0000000..a145415 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/_su.scss @@ -0,0 +1,7 @@ +// Su +// == + +@import "su/utilities"; +@import "su/settings"; +@import "su/validation"; +@import "su/grid"; diff --git a/_sass/basically-basic/vendor/susy/language/_susy.scss b/_sass/basically-basic/vendor/susy/language/_susy.scss new file mode 100644 index 0000000..0ee9cae --- /dev/null +++ b/_sass/basically-basic/vendor/susy/language/_susy.scss @@ -0,0 +1,24 @@ +// Susy Next Syntax +// ================ + +$susy-version: 2.1; + +@import "../su"; +@import "../output/float"; + +@import "susy/settings"; +@import "susy/validation"; +@import "susy/grids"; +@import "susy/box-sizing"; +@import "susy/context"; +@import "susy/background"; +@import "susy/container"; +@import "susy/span"; +@import "susy/gutters"; +@import "susy/isolate"; +@import "susy/gallery"; +@import "susy/rows"; +@import "susy/margins"; +@import "susy/padding"; +@import "susy/bleed"; +@import "susy/breakpoint-plugin"; diff --git a/_sass/basically-basic/vendor/susy/language/_susyone.scss b/_sass/basically-basic/vendor/susy/language/_susyone.scss new file mode 100644 index 0000000..a783d3a --- /dev/null +++ b/_sass/basically-basic/vendor/susy/language/_susyone.scss @@ -0,0 +1,13 @@ +// --------------------------------------------------------------------------- +// Partials + +$susy-version: 1.5; + +@import "susyone/settings"; +@import "susyone/functions"; +@import "susyone/grid"; +@import "susyone/isolation"; +@import "susyone/padding"; +@import "susyone/margin"; +@import "susyone/media"; +@import "susyone/background"; diff --git a/_sass/basically-basic/vendor/susy/language/susy/_background.scss b/_sass/basically-basic/vendor/susy/language/susy/_background.scss new file mode 100644 index 0000000..d39dc72 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/language/susy/_background.scss @@ -0,0 +1,385 @@ +// Background Grid Syntax +// ====================== + +$susy-overlay-grid-head-exists: false; + + +// Show Grid/s +// ----------- +// Show grid on any element using either background or overlay. +// - [$grid] : +@mixin show-grid( + $grid: $susy +) { + $inspect: $grid; + $_output: debug-get(output, $grid); + + @include susy-inspect(show-grid, $inspect); + @if $_output == overlay and susy-get(debug image, $grid) != hide { + @include overlay-grid($grid); + } @else { + @include background-grid($grid); + } +} + +@mixin show-grids( + $grid: $susy +) { + @include show-grid($grid); +} + +// Background Grid +// --------------- +// Show a grid background on any element. +// - [$grid] : +@mixin background-grid( + $grid: $susy +) { + $inspect : $grid; + $_output : get-background($grid); + + @if length($_output) > 0 { + $_flow: susy-get(flow, $grid); + + $_image: (); + @each $name, $layer in map-get($_output, image) { + $_direction: if($name == baseline, to bottom, to to($_flow)); + $_image: append($_image, linear-gradient($_direction, $layer), comma); + } + $_output: map-merge($_output, (image: $_image)); + + @include background-grid-output($_output...); + @include susy-inspect(background-grid, $inspect); + } +} + + +// Overlay Grid +// ------------ +// Generate an icon to trigger grid-overlays on any given elements. +// $grids... : [] [, ]* +@mixin overlay-grid ( + $grid: $susy +) { + @if not($susy-overlay-grid-head-exists) { + @at-root head { @include overlay-head($grid); } + @at-root head:before { @include overlay-trigger; } + @at-root head:hover { @include overlay-trigger-hover; } + $susy-overlay-grid-head-exists: true !global; + } + + head:hover ~ &, + head:hover ~ body & { + position: relative; + &:before { + @include grid-overlay-base; + @include background-grid($grid); + } + } +} + + +// [Private] Overlay Trigger +// ------------------------- +@mixin overlay-trigger { + content: "|||"; + display: block; + padding: 5px 10px; + font: { + family: sans-serif; + size: 16px; + weight: bold; + } +} + + +// [Private] Overlay Trigger Hover +// ------------------------------- +@mixin overlay-trigger-hover { + background: rgba(white, .5); + color: red; +} + + +// [Private] Overlay Head +// ---------------------- +// styles to create grid overlay toggle +@mixin overlay-head ( + $grid: $susy +) { + $_toggle: debug-get(toggle, $grid); + $_horz: null; + $_vert: null; + + @each $side in $_toggle { + $_horz: if($side == left or $side == right, $side, $_horz); + $_vert: if($side == top or $side == bottom, $side, $_vert); + } + + display: block; + position: fixed; + #{$_horz}: 10px; + #{$_vert}: 10px; + z-index: 999; + color: #333; + background: rgba(white, .25); +} + + +// [Private] Grid Overlay Base +// --------------------------- +// Base styles for generating a grid overlay +@mixin grid-overlay-base() { + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + content: " "; + z-index: 998; +} + + +// Get Symmetrical Background +// -------------------------- +// - $grid: +@function get-background-sym( + $grid +) { + $grid : parse-grid($grid); + $_gutters : susy-get(gutters, $grid); + $_column-width : susy-get(column-width, $grid); + $_math : susy-get(math, $grid); + + $_color : debug-get(color); + $_trans : transparent; + $_light : lighten($_color, 15%); + + $_end : 1 + $_gutters; + $_after : percentage(1/$_end); + $_stops : (); + $_size : span(1 $grid wide); + + @if is-inside($grid) { + $_stops: $_color, $_light; + } @else if is-split($grid) { + $_split: $_gutters/2; + $_before: percentage($_split/$_end); + $_after: percentage((1 + $_split)/$_end); + $_stops: $_trans $_before, $_color $_before, $_light $_after, $_trans $_after; + } @else { + $_stops: $_color, $_light $_after, $_trans $_after; + } + + @if $_math == static { + $_size: valid-column-math($_math, $_column-width) * $_end; + } + + $_output: ( + image: (columns: $_stops), + size: $_size, + ); + + @return $_output; +} + + +// Get Asymmetrical Inside +// ----------------------- +// - $grid: +@function get-asym-inside( + $grid +) { + $grid : parse-grid($grid); + $_columns : susy-get(columns, $grid); + + $_color : debug-get(color); + $_light : lighten($_color, 15%); + $_stops : (); + + @for $location from 1 through susy-count($_columns) { + $this-stop: (); + + @if $location == 1 { + $this-stop: append($this-stop, $_color, comma); + } @else { + $start: parse-span(1 at $location $grid); + $start: get-isolation($start); + $this-stop: append($this-stop, $_color $start, comma); + } + + @if $location == susy-count($_columns) { + $this-stop: append($this-stop, $_light, comma); + } @else { + $_end: parse-span(1 at ($location + 1) $grid); + $_end: get-isolation($_end); + $this-stop: append($this-stop, $_light $_end, comma); + } + + $_stops: join($_stops, $this-stop, comma); + } + + @return $_stops; +} + + +// Get Asymmetrical Split +// ---------------------- +// - $grid: +@function get-asym-split( + $grid +) { + $grid : parse-grid($grid); + $_columns : susy-get(columns, $grid); + + $_color : debug-get(color); + $_light : lighten($_color, 15%); + $_stops : (); + + @for $location from 1 through susy-count($_columns) { + $this-stop: (); + + $start: parse-span(1 at $location $grid); + $start: get-isolation($start); + $this-stop: append($this-stop, transparent $start, comma); + $this-stop: append($this-stop, $_color $start, comma); + + $_end: $start + span(1 at $location $grid); + $this-stop: append($this-stop, $_light $_end, comma); + $this-stop: append($this-stop, transparent $_end, comma); + + $_stops: join($_stops, $this-stop, comma); + } + + @return $_stops; +} + + +// Get Asymmetrical Outside +// ------------------------ +// - $grid: +@function get-asym-outside( + $grid +) { + $grid : parse-grid($grid); + $_columns : susy-get(columns, $grid); + + $_color : debug-get(color); + $_light : lighten($_color, 15%); + $_trans : transparent; + $_stops : (); + + @for $location from 1 through susy-count($_columns) { + $this-stop: (); + + @if $location == 1 { + $this-stop: append($this-stop, $_color, comma); + } @else { + $start: parse-span(1 at $location $grid); + $start: get-isolation($start); + $this-stop: append($this-stop, $_color $start, comma); + } + + @if $location == susy-count($_columns) { + $this-stop: append($this-stop, $_light, comma); + } @else { + $gutter: get-span-width(first $location $grid); + + $_end: parse-span(1 at ($location + 1) $grid); + $_end: get-isolation($_end); + + $gutter: $_light $gutter, $_trans $gutter, $_trans $_end; + $this-stop: join($this-stop, $gutter, comma); + } + + $_stops: join($_stops, $this-stop, comma); + } + + @return $_stops; +} + + +// Get Asymmetrical Background +// --------------------------- +// - $grid: +@function get-background-asym( + $grid +) { + $_stops: (); + + @if is-inside($grid) { + $_stops: get-asym-inside($grid); + } @else if is-split($grid) { + $_stops: get-asym-split($grid); + } @else { + $_stops: get-asym-outside($grid); + } + + @return (image: (columns: $_stops)); +} + + +// Get Background +// -------------- +// - $grid: +@function get-background( + $grid +) { + $grid : parse-grid($grid); + $_show : susy-get(debug image, $grid); + $_return : (); + + @if $_show and $_show != 'hide' { + $_columns: susy-get(columns, $grid); + + @if $_show != 'show-baseline' { + $_sym: is-symmetrical($_columns); + $_return: if($_sym, get-background-sym($grid), get-background-asym($grid)); + $_return: map-merge($_return, (clip: content-box)); + } + + @if $_show != 'show-columns' + and global-variable-exists(base-line-height) + and type-of($base-line-height) == 'number' + and not unitless($base-line-height) { + $_color: variable-exists('grid-background-baseline-color'); + $_color: if($_color, $grid-background-baseline-color, #000); + + $_image: map-get($_return, image); + $_size: map-get($_return, size); + $_baseline: (baseline: ($_color 1px, transparent 1px)); + $_baseline-size: 100% $base-line-height; + + $_return: map-merge($_return, ( + image: if($_image, map-merge($_image, $_baseline), $_baseline), + size: if($_size, ($_size, $_baseline-size), $_baseline-size), + )); + + @if $_show == 'show' { + $_clip: map-get($_return, clip); + $_return: map-merge($_return, (clip: join($_clip, border-box, comma))); + } + } @else if $_show == 'show-baseline' { + @warn 'Please provide a $base-line-height with the desired height and units'; + } + } + + @if map-get($_return, image) { + $_return: map-merge($_return, (flow: susy-get(flow, $grid))); + } + + @return $_return; +} + + +// Get Debug +// --------- +// Return the value of a debug setting +// - $key: +@function debug-get( + $key, + $grid: $susy +) { + $key: join(debug, $key, space); + @return susy-get($key, $grid); +} diff --git a/_sass/basically-basic/vendor/susy/language/susy/_bleed.scss b/_sass/basically-basic/vendor/susy/language/susy/_bleed.scss new file mode 100644 index 0000000..8ef5974 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/language/susy/_bleed.scss @@ -0,0 +1,200 @@ +// Bleed Syntax +// ============ + +// Bleed +// ----- +// Add negative margins, and equal positive padding to create bleed. +// - $bleed : +@mixin bleed( + $bleed: 0 gutter() +) { + $inspect : $bleed; + $output : get-bleed($bleed); + + @if susy-get(global-box-sizing) != content-box { + $output: map-merge((box-sizing: content-box), $output); + } + + @include susy-inspect(bleed, $inspect); + @include output($output); +} + + +// Bleed-x +// ------- +// Shortcut for horizontal bleed. +// - $bleed : +@mixin bleed-x( + $bleed: gutter() +) { + $bleed : parse-span($bleed); + $trbl : susy-get(span, $bleed); + + @if length($trbl) == 1 { + $bleed: map-merge($bleed, (span: 0 nth($trbl, 1))); + } @else if length($trbl) == 2 { + $bleed: map-merge($bleed, (span: 0 nth($trbl, 2) 0 nth($trbl, 1))); + } @else { + @warn 'bleed-x only takes 2 lengths, but #{length($trbl)} were passed.'; + } + + @include bleed($bleed); +} + + +// Bleed-y +// ------- +// Shortcut for vertical bleed. +// - $bleed : +@mixin bleed-y( + $bleed: if(function-exists(rhythm), rhythm(1), 1em) +) { + $bleed : parse-span($bleed); + $trbl : susy-get(span, $bleed); + + @if length($trbl) == 1 { + $bleed: map-merge($bleed, (span: nth($trbl, 1) 0)); + } @else if length($trbl) == 2 { + $bleed: map-merge($bleed, (span: nth($trbl, 1) 0 nth($trbl, 2) 0)); + } @else { + @warn 'bleed-y only takes 2 lengths, but #{length($trbl)} were passed.'; + } + + @include bleed($bleed); +} + + +// Get Bleed +// --------- +// Return bleed output values +// - $bleed: +@function get-bleed( + $bleed +) { + $bleed : map-merge((spread: wide), parse-span($bleed)); + $trbl : susy-get(span, $bleed); + $short : null; + $output : (); + + @for $i from 1 through length($trbl) { + $this: nth($trbl, $i); + $new: (); + $margin: null; + $padding: null; + $padding-x: null; + + @if $this > 0 { + $this: map-merge($bleed, (span: $this)); + $margin: span($this); + $padding: $margin; + $padding-x: $padding; + } + + @if $margin and $margin > 0 { + $margin: - $margin; + + @if is-inside($this) { + $gutter: gutter($this); + $join: if($gutter and comparable($padding, $gutter), true, false); + $padding-x: if($join and $padding > 0, $padding + $gutter, $padding); + } + } + + @if $i == 1 { + $new: ( + margin-top: $margin, + padding-top: $padding, + margin-right: $margin, + padding-right: $padding-x, + margin-bottom: $margin, + padding-bottom: $padding, + margin-left: $margin, + padding-left: $padding-x, + ); + } @else if $i == 2 { + $new: ( + margin-right: $margin, + padding-right: $padding-x, + margin-left: $margin, + padding-left: $padding-x, + ); + } @else if $i == 3 { + $new: ( + margin-bottom: $margin, + padding-bottom: $padding, + ); + } @else if $i == 4 { + $new: ( + margin-left: $margin, + padding-left: $padding-x, + ); + } + + $output: map-merge($output, $new); + } + + @each $prop, $value in $output { + $output: if($value == 0, map-merge($output, ($prop: null)), $output); + } + + @return bleed-shorthand($output); +} + +// Bleed Shorthand +// --------------- +// Convert bleed output into shorthand when possible. +// - $bleed: +@function bleed-shorthand( + $bleed +) { + $margin: (); + $padding: (); + $return: (); + + @each $key, $value in $bleed { + @if str-index($key, margin) { + $margin: map-merge($margin, ($key: $value)); + } @else if str-index($key, padding) > 0 { + $padding: map-merge($padding, ($key: $value)); + } + } + + $props: ( + margin: $margin, + padding: $padding, + ); + + @each $name, $map in $props { + $four: if(length(map-keys($map)) == 4, true, false); + $null: if(index(map-values($map), null), true, false); + + @if $four and not($null) { + $top: map-get($map, '#{$name}-top'); + $right: map-get($map, '#{$name}-right'); + $bottom: map-get($map, '#{$name}-bottom'); + $left: map-get($map, '#{$name}-left'); + + $tb: if($top == $bottom, $top, null); + $rl: if($right == $left, $right, null); + $all: if($tb == $rl, $tb, null); + + $new: if($all, $all, null); + + @if not($new) { + @if $tb and $rl { + $new: $tb $rl; + } @else if $rl { + $new: $top $rl $bottom; + } @else { + $new: $top $right $bottom $left; + } + } + + $return: map-merge($return, ($name: $new)); + } @else { + $return: map-merge($return, $map); + } + } + + @return $return; +} diff --git a/_sass/basically-basic/vendor/susy/language/susy/_box-sizing.scss b/_sass/basically-basic/vendor/susy/language/susy/_box-sizing.scss new file mode 100644 index 0000000..f551241 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/language/susy/_box-sizing.scss @@ -0,0 +1,47 @@ +// Susy Box Sizing +// ================= + +// Global Box Sizing +// ----------------- +// Set a box model globally on all elements. +// - [$box]: border-box | content-box +// - [$inherit]: true | false +@mixin global-box-sizing( + $box: susy-get(global-box-sizing), + $inherit: false +) { + $inspect: $box; + + @if $inherit { + @at-root { + html { @include output((box-sizing: $box)); } + *, *:before, *:after { box-sizing: inherit; } + } + } @else { + *, *:before, *:after { @include output((box-sizing: $box)); } + } + + @include susy-inspect(global-box-sizing, $inspect); + @include update-box-model($box); +} + +// Border Box Sizing +// ----------------- +// A legacy shortcut... +// - [$inherit]: true | false +@mixin border-box-sizing( + $inherit: false +) { + @include global-box-sizing(border-box, $inherit); +} + +// Update Box Model +// ---------------- +// PRIVATE: Updates global box model setting +@mixin update-box-model( + $box +) { + @if $box != susy-get(global-box-sizing) { + @include susy-set(global-box-sizing, $box); + } +} diff --git a/_sass/basically-basic/vendor/susy/language/susy/_breakpoint-plugin.scss b/_sass/basically-basic/vendor/susy/language/susy/_breakpoint-plugin.scss new file mode 100644 index 0000000..30de288 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/language/susy/_breakpoint-plugin.scss @@ -0,0 +1,185 @@ +// Breakpoint Integration +// ====================== + +$susy-media: () !default; +$susy-media-fallback: false !default; + +$_susy-media-context: (); + + +// Susy Breakpoint +// --------------- +// Change grids at different media query breakpoints. +// - $query : [] | | +// - $layout : +// - $no-query : | +@mixin susy-breakpoint( + $query, + $layout: false, + $no-query: $susy-media-fallback +) { + @include susy-media-router($query, $no-query) { + @if $layout { + @include with-layout($layout) { + @content; + } + } @else { + @content; + } + } +} + + +// Susy Media +// ---------- +// - $query: [] | +// - $no-query: | +@mixin susy-media( + $query, + $no-query: $susy-media-fallback +) { + $old-context: $_susy-media-context; + $name: if(map-has-key($susy-media, $query), $query, null); + $query: susy-get-media($query); + $query: susy-parse-media($query); + + @include susy-media-context($query, $name); + + @if $no-query and type-of($no-query) != string { + @content; + } @else { + @media #{susy-render-media($query)} { + @content; + } + + @if type-of($no-query) == string { + #{$no-query} & { + @content; + } + } + } + + @include susy-media-context($old-context, $clean: true); +} + + +// Media Router +// ------------ +// Rout media arguments to the correct mixin. +@mixin susy-media-router( + $query, + $no-query: $susy-media-fallback +) { + @if susy-support(breakpoint, (mixin: breakpoint), $warn: false) { + @include breakpoint($query, $no-query) { + @content; + } + } @else { + @include susy-media($query, $no-query) { + @content; + } + } +} + + +// Update Context +// ------------- +// Set the new media context +@mixin susy-media-context( + $query, + $name: null, + $clean: false +) { + $query: map-merge((name: $name), $query); + + @if $clean { + $_susy-media-context: $query !global; + } @else { + $_susy-media-context: map-merge($_susy-media-context, $query) !global; + } +} + + +// Media Context +// ------------- +// Return the full media context, or a single media property (e.g. min-width) +@function susy-media-context( + $property: false +) { + @if $property { + @return map-get($_susy-media-context, $property); + } @else { + @return $_susy-media-context; + } +} + + +// Get Media +// --------- +// Return a named media-query from $susy-media. +// - $name: +@function susy-get-media( + $name +) { + @if map-has-key($susy-media, $name) { + $map-value: map-get($susy-media, $name); + @if ($name == $map-value) { + $name: $map-value; + } @else { + $name: susy-get-media($map-value); + } + } + + @return $name; +} + + +// Render Media +// ------------ +// Build a media-query string from various media settings +@function susy-render-media( + $query +) { + $output: null; + @each $property, $value in $query { + $string: null; + + @if $property == media { + $string: $value; + } @else { + $string: '(#{$property}: #{$value})'; + } + + $output: if($output, '#{$output} and #{$string}', $string); + } + + @return $output; +} + + +// Parse Media +// ----------- +// Return parsed media-query settings based on shorthand +@function susy-parse-media( + $query +) { + $mq: null; + @if type-of($query) == map { + $mq: $query; + } @else if type-of($query) == number { + $mq: (min-width: $query); + } @else if type-of($query) == list and length($query) == 2 { + @if type-of(nth($query, 1)) == number { + $mq: ( + min-width: min($query...), + max-width: max($query...), + ); + } @else { + $mq: (nth($query, 1): nth($query, 2)); + } + } @else { + $mq: (media: '#{$query}'); + } + + @return $mq; +} diff --git a/_sass/basically-basic/vendor/susy/language/susy/_container.scss b/_sass/basically-basic/vendor/susy/language/susy/_container.scss new file mode 100644 index 0000000..e5f4a85 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/language/susy/_container.scss @@ -0,0 +1,81 @@ +// Container Syntax +// ================ + +// Container [mixin] +// ----------------- +// Set a container element +// - [$layout] : +@mixin container( + $layout: $susy +) { + $inspect : $layout; + $layout : parse-grid($layout); + + $_width : get-container-width($layout); + $_justify : parse-container-position(susy-get(container-position, $layout)); + $_property : if(susy-get(math, $layout) == static, width, max-width); + + $_box : susy-get(box-sizing, $layout); + + @if $_box { + @include output((box-sizing: $_box)); + } + + @include susy-inspect(container, $inspect); + @include float-container($_width, $_justify, $_property); + @include show-grid($layout); +} + +// Container [function] +// -------------------- +// Return container width +// - [$layout] : +@function container( + $layout: $susy +) { + $layout: parse-grid($layout); + @return get-container-width($layout); +} + +// Get Container Width +// ------------------- +// Calculate the container width +// - [$layout]: +@function get-container-width( + $layout: $susy +) { + $layout : parse-grid($layout); + $_width : susy-get(container, $layout); + $_column-width : susy-get(column-width, $layout); + $_math : susy-get(math, $layout); + + @if not($_width) or $_width == auto { + @if valid-column-math($_math, $_column-width) { + $_columns : susy-get(columns, $layout); + $_gutters : susy-get(gutters, $layout); + $_spread : if(is-split($layout), wide, narrow); + $_width : susy-sum($_columns, $_gutters, $_spread) * $_column-width; + } @else { + $_width: 100%; + } + } + + @return $_width; +} + +// Parse Container Position +// ------------------------ +// Parse the $container-position into margin values. +// - [$justify] : left | center | right | [] +@function parse-container-position( + $justify: map-get($susy-defaults, container-position) +) { + $_return: if($justify == left, 0, auto) if($justify == right, 0, auto); + + @if not(index(left right center, $justify)) { + $_return: nth($justify, 1); + $_return: $_return if(length($justify) > 1, nth($justify, 2), $_return); + } + + @return $_return; +} diff --git a/_sass/basically-basic/vendor/susy/language/susy/_context.scss b/_sass/basically-basic/vendor/susy/language/susy/_context.scss new file mode 100644 index 0000000..52e12a6 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/language/susy/_context.scss @@ -0,0 +1,36 @@ +// Context Syntax +// ============== + +// Nested [function] +// ----------------- +// Return a subset grid for nested context. +// - $context : +@function nested( + $context +) { + $context : parse-span($context); + $span : susy-get(span, $context); + $location : get-location($context); + $columns : susy-get(columns, $context); + + @return susy-slice($span, $location, $columns); +} + +// Nested [mixin] +// -------------- +// Use a subset grid for a nested context +// - $context : +// - @content : +@mixin nested( + $context +) { + $inspect : $context; + $context : parse-span($context); + $old : susy-get(columns); + $susy : map-merge($susy, (columns: nested($context))) !global; + + @include susy-inspect(nested, $inspect); + @content; + + $susy : map-merge($susy, (columns: $old)) !global; +} diff --git a/_sass/basically-basic/vendor/susy/language/susy/_gallery.scss b/_sass/basically-basic/vendor/susy/language/susy/_gallery.scss new file mode 100644 index 0000000..e59b9a0 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/language/susy/_gallery.scss @@ -0,0 +1,94 @@ +// Gallery Syntax +// ============== + +// Gallery +// ------- +// Create an isolated gallery +// - $span : +// - [$selector] : child | of-type +@mixin gallery( + $span, + $selector: child +) { + $inspect : $span; + $span : parse-span($span); + $span : map-merge($span, (location: 1)); + + $n : susy-get(span, $span); + $columns : susy-get(columns, $span); + $context : susy-count($columns); + $flow : susy-get(flow, $span); + + $inside : is-inside($span); + $from : from($flow); + $line : floor($context / $n); + $symmetrical : is-symmetrical($columns); + + $output: ( + width : null, + float : from, + margin-before : null, + margin-after : null, + padding-before : null, + padding-after : null, + flow : $flow, + ); + + @if $inside { + $gutters: get-gutters($span); + $output: map-merge($output, ( + padding-before: map-get($gutters, before), + padding-after: map-get($gutters, after), + )); + } + + @if $symmetrical { + $output: map-merge($output, (width: get-span-width($span))); + } + + $box : susy-get(box-sizing, $span); + $global-box : if(susy-get(global-box-sizing) == 'border-box', true, false); + + @include susy-inspect(gallery, $inspect); + + // Collective Output + @if $box == border-box or ($inside and not($box) and not($global-box)) { + @include output((box-sizing: border-box)); + } @else if $box == content-box { + @include output((box-sizing: content-box)); + } + + @include float-span-output($output...); + + // Individual Loop + @for $item from 1 through $line { + $nth: '#{$line}n + #{$item}'; + &:nth-#{$selector}(#{$nth}) { + // Individual Prep + $output: ( + width : if($symmetrical, null, get-span-width($span)), + float : null, + margin-before : get-isolation($span), + margin-after : -100%, + padding-before : null, + padding-after : null, + flow : $flow, + ); + + // Individual Output + @include float-span-output($output...); + + @if get-edge($span) == first { + @include break; + @include first($span); + } @else { + @include nobreak; + } + + // Individual Location Increment + $location: get-location($span) + $n; + $location: if($location > $context, 1, $location); + $span: map-merge($span, (location: $location)); + } + } +} diff --git a/_sass/basically-basic/vendor/susy/language/susy/_grids.scss b/_sass/basically-basic/vendor/susy/language/susy/_grids.scss new file mode 100644 index 0000000..4fa72ed --- /dev/null +++ b/_sass/basically-basic/vendor/susy/language/susy/_grids.scss @@ -0,0 +1,64 @@ +// Grid Syntax +// =========== + + +// Layout +// ------ +// Set a new layout using a shorthand +// - $layout: +// - $clean: boolean +@mixin layout( + $layout, + $clean: false +) { + $inspect : $layout; + $susy : _get-layout($layout, $clean) !global; + + @include susy-inspect(layout, $inspect); +} + + +// Use Grid +// -------- +// Use an arbitrary layout for a section of code +// - $layout: +// - $clean: boolean +@mixin with-layout( + $layout, + $clean: false +) { + $inspect : $layout; + $old : $susy; + $susy : _get-layout($layout, $clean) !global; + + @include susy-inspect(with-layout, $inspect); + + @content; + + $susy: $old !global; +} + + +// Layout +// ------ +// Return a parsed layout map based on shorthand syntax +// - $layout: +@function layout( + $layout: $susy +) { + @return parse-grid($layout); +} + + +// Get Layout +// ---------- +// Return a new layout based on current and given settings +// - $layout: +// - $clean: boolean +@function _get-layout( + $layout, + $clean: false +) { + $layout: layout($layout); + @return if($clean, $layout, _susy-deep-merge($susy, $layout)); +} diff --git a/_sass/basically-basic/vendor/susy/language/susy/_gutters.scss b/_sass/basically-basic/vendor/susy/language/susy/_gutters.scss new file mode 100644 index 0000000..efe7ac2 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/language/susy/_gutters.scss @@ -0,0 +1,154 @@ +// Gutter Syntax +// ============= + + +// Gutters +// ------- +// Set gutters on an element. +// - [$span] : +@mixin gutters( + $span: $susy +) { + $inspect : $span; + $span : parse-gutters($span); + $_gutters : get-gutters($span); + + $_output: ( + before: map-get($_gutters, before), + after: map-get($_gutters, after), + flow: susy-get(flow, $span), + ); + + @include susy-inspect(gutters, $inspect); + + @if is-inside($span) { + @include padding-output($_output...); + } @else { + @include margin-output($_output...); + } +} + +@mixin gutter( + $span: $susy +) { + @include gutters($span); +} + + +// Gutter +// ------ +// Return the width of a gutter. +// - [$span] : +@function gutter( + $span: $susy +) { + $span: parse-gutters($span); + + $_gutters: get-gutters($span); + $_gutters: map-get($_gutters, before) or map-get($_gutters, after); + + @return $_gutters; +} + +@function gutters( + $span: $susy +) { + @return gutter($span); +} + + +// Get Gutter Width +// ---------------- +// Return gutter width. +// - [$context]: +@function get-gutter-width( + $context: $susy +) { + $context : parse-gutters($context); + + $_gutters : susy-get(gutters, $context); + $_gutter : susy-get(gutter-override, $context); + + @if $_gutters and ($_gutters > 0) and not($_gutter) { + $_column-width: susy-get(column-width, $context); + $_math: gutter-math($context); + @if $_math == static { + $_gutter: $_gutters * valid-column-math($_math, $_column-width); + } @else { + $_columns : susy-get(columns, $context); + $_spread : if(is-split($context), wide, susy-get(spread, $context)); + $_gutter : percentage($_gutters / susy-sum($_columns, $_gutters, $_spread)); + } + } + + $_gutter: if($_gutter == 'no-gutters' or $_gutter == 'no-gutter', null, $_gutter); + + @return $_gutter; +} + + +// Get Gutters +// ----------- +// Return before and after gutter values. +// - [$context]: +@function get-gutters( + $context: $susy +) { + $context : parse-gutters($context); + + $_gutter-position : susy-get(gutter-position, $context); + $_gutter : get-gutter-width($context); + + $_return : (before: null, after: null); + + @if is-split($context) and $_gutter { + $_gutter: $_gutter / 2; + $_return: map-merge($_return, (before: $_gutter, after: $_gutter)); + } @else { + $_return: map-merge($_return, ($_gutter-position: $_gutter)); + } + + @return $_return; +} + + +// Is Inside +// --------- +// Returns true if gutters are inside. +// $context: +@function is-inside( + $context +) { + $_inside: inside inside-static; + $_gutter-position: susy-get(gutter-position, $context); + + @return if(index($_inside, $_gutter-position), true, false); +} + + +// Is Split +// -------- +// Returns true if gutters are split. +// $context: +@function is-split( + $context +) { + $_split: split inside inside-static; + $_gutter-position: susy-get(gutter-position, $context); + + @return if(index($_split, $_gutter-position), true, false); +} + + +// Gutter Math +// ----------- +// Return the math to use for gutter calculations +// $context: +@function gutter-math( + $context: $susy +) { + $_return : susy-get(math, $context); + $_return : if(susy-get(gutter-position, $context) == inside-static, static, $_return); + + @return $_return; +} diff --git a/_sass/basically-basic/vendor/susy/language/susy/_isolate.scss b/_sass/basically-basic/vendor/susy/language/susy/_isolate.scss new file mode 100644 index 0000000..7ddfd7f --- /dev/null +++ b/_sass/basically-basic/vendor/susy/language/susy/_isolate.scss @@ -0,0 +1,77 @@ +// Isolation Syntax +// ================ + + +// Isolate [Mixin] +// --------------- +// Set isolation as an override. +// - $location: +@mixin isolate( + $isolate: 1 +) { + $inspect: $isolate; + + $output: ( + push: isolate($isolate), + flow: susy-get(flow, $isolate), + ); + + @include susy-inspect(isolate, $inspect); + @include isolate-output($output...); +} + + +// Isolate [function] +// ------------------ +// Return an isolation offset width. +// - $location: +@function isolate( + $isolate: 1 +) { + $isolate: parse-span($isolate); + $isolation: susy-get(span, $isolate); + + @if $isolation and not(get-location($isolate)) { + $new: ( + span: null, + location: $isolation, + ); + $isolate: map-merge($isolate, $new); + } + + @return get-isolation($isolate); +} + + +// Get Isolation +// ------------- +// Return the isolation offset width +// - $input: +@function get-isolation( + $input +) { + $location : get-location($input); + $columns : susy-get(columns, $input); + $width : null; + + @if type-of($location) == number and not(unitless($location)) { + $width: $location; + } @else if $location { + $push: $location - 1; + @if $push > 0 { + $push: map-merge($input, ( + span: $push, + location: 1, + spread: wide, + )); + $width: get-span-width($push); + } + } + + @if susy-get(gutter-position, $input) == split + and susy-get(gutters, $input) > 0 { + $width: if($width == null, gutters($input), $width + gutters($input)); + } + + @return $width or 0; +} diff --git a/_sass/basically-basic/vendor/susy/language/susy/_margins.scss b/_sass/basically-basic/vendor/susy/language/susy/_margins.scss new file mode 100644 index 0000000..cb36839 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/language/susy/_margins.scss @@ -0,0 +1,94 @@ +// Margin Syntax +// ============= + +// Pre +// --- +// Add spanning-margins before an element. +// - $span : +@mixin pre( + $span +) { + $inspect: $span; + $span : map-merge((spread: wide), parse-span($span)); + $flow : susy-get(flow, $span); + $split : if(susy-get(gutter-position, $span) == split, true, false); + $gutter : gutter($span); + $span : span($span); + $width : if($split and $gutter, $span + $gutter, $span); + + @include susy-inspect(pre, $inspect); + @include margin-output($width, null, $flow); +} + +// Post +// ---- +// Add spanning-margins after an element. +// - $span : +@mixin post( + $span +) { + $inspect : $span; + $span : map-merge((spread: wide), parse-span($span)); + $flow : susy-get(flow, $span); + $split : if(susy-get(gutter-position, $span) == split, true, false); + $width : if($split, span($span) + gutter($span), span($span)); + + @include susy-inspect(post, $inspect); + @include margin-output(null, $width, $flow); +} + +// Push +// ---- +// Simple synonymn for pre. +// - $span : +@mixin push( + $span +) { + @include pre($span); +} + +// Pull +// ---- +// Add negative spanning-margins before an element. +// - $span : +@mixin pull( + $span +) { + $inspect : $span; + $span : map-merge((spread: wide), parse-span($span)); + $flow : susy-get(flow, $span); + $split : if(susy-get(gutter-position, $span) == split, true, false); + $width : if($split, 0 - span($span) + gutter($span), 0 - span($span)); + + @include susy-inspect(pull, $inspect); + @include margin-output($width, null, $flow); +} + +// Squish +// ------ +// Add spanning-margins before and after an element. +// - $pre : +// - [$post] : +@mixin squish( + $pre, + $post: false +) { + $inspect : ($pre, $post); + $pre : map-merge((spread: wide), parse-span($pre)); + + @if $post { + $post: map-merge((spread: wide), parse-span($post)); + } @else { + $span: susy-get(span, $pre); + @if length($span) > 1 { + $pre: map-merge($pre, (span: nth($span, 1))); + $post: map-merge($pre, (span: nth($span, 2))); + } @else { + $post: $pre; + } + } + + @include susy-inspect(squish, $inspect); + @include pre($pre); + @include post($post); +} diff --git a/_sass/basically-basic/vendor/susy/language/susy/_padding.scss b/_sass/basically-basic/vendor/susy/language/susy/_padding.scss new file mode 100644 index 0000000..cdf75c8 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/language/susy/_padding.scss @@ -0,0 +1,74 @@ +// Padding Syntax +// ============== + +// Prefix +// ------ +// Add spanning-padding before an element. +// - $span : +@mixin prefix( + $span +) { + $inspect : $span; + $span : map-merge((spread: wide), parse-span($span)); + $flow : susy-get(flow, $span); + $width : span($span); + + @if is-inside($span) { + $gutter: gutter($span); + $width: if($gutter and comparable($width, $gutter), $width + $gutter, $width); + } + + @include susy-inspect(prefix, $inspect); + @include padding-output($width, null, $flow); +} + +// Suffix +// ------ +// Add spanning-padding after an element. +// - $span : +@mixin suffix( + $span +) { + $inspect : $span; + $span : map-merge((spread: wide), parse-span($span)); + $flow : susy-get(flow, $span); + $width : span($span); + + @if is-inside($span) { + $gutter: gutter($span); + $width: if($gutter and comparable($width, $gutter), $width + $gutter, $width); + } + + @include susy-inspect(suffix, $inspect); + @include padding-output(null, $width, $flow); +} + +// Pad +// --- +// Add spanning-padding before and after an element. +// - $pre : +// - [$post] : +@mixin pad( + $pre, + $post: false +) { + $inspect : ($pre, $post); + $pre : map-merge((spread: wide), parse-span($pre)); + + @if $post { + $post: map-merge((spread: wide), parse-span($post)); + } @else { + $span: susy-get(span, $pre); + @if length($span) > 1 { + $pre: map-merge($pre, (span: nth($span, 1))); + $post: map-merge($pre, (span: nth($span, 2))); + } @else { + $post: $pre; + } + } + + @include susy-inspect(pad, $inspect); + @include prefix($pre); + @include suffix($post); + +} diff --git a/_sass/basically-basic/vendor/susy/language/susy/_rows.scss b/_sass/basically-basic/vendor/susy/language/susy/_rows.scss new file mode 100644 index 0000000..d726431 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/language/susy/_rows.scss @@ -0,0 +1,138 @@ +// Row Start & End +// =============== + +// Break +// ----- +// Apply to any element that should force a line break. +@mixin break { + @include output((clear: both)); +} + + +// NoBreak +// ------- +// Cancel the break() effect, e.g. when using media queries. +@mixin nobreak { + @include output((clear: none)); +} + + +// Full +// ---- +// - [$context]: +@mixin full( + $context: $susy +) { + $inspect : $context; + @include susy-inspect(full, $inspect); + @include span(full of parse-grid($context) break); +} + + +// First +// ----- +// - [$context]: +@mixin first( + $context: $susy +) { + $inspect : $context; + $context : parse-grid($context); + $flow : susy-get(flow, $context); + + @include susy-inspect(first, $inspect); + @if not(is-split($context)) { + @include float-first($flow); + } +} + +@mixin alpha( + $context: $susy +) { + @include first($context); +} + + +// Last +// ---- +// - [$context]: +@mixin last( + $context: $susy +) { + $inspect : $context; + $context : parse-grid($context); + + @include susy-inspect(last, $inspect); + + $output: ( + flow: susy-get(flow, $context), + last-flow: susy-get(last-flow, $context), + margin: if(is-split($context), null, 0), + ); + + @include float-last($output...); +} + +@mixin omega( + $context: $susy +) { + @include last($context); +} + + +// Get Edge +// -------- +// Calculate edge value based on location, if possible +@function get-edge( + $span +) { + $span : parse-span($span); + $edge : susy-get(edge, $span); + + @if not($edge) { + $count: susy-count(susy-get(columns, $span)); + $location: susy-get(location, $span); + $n: susy-get(span, $span); + + $number: if(type-of($location) == number, true, false); + $index: if($number and unitless($location), true, false); + + @if $n == $count { + $edge: full; + } @else if $location and $n and $index { + @if $location == 1 { + $edge: if($n == $count, full, first); + } @else if $location + $n - 1 == $count { + $edge: last; + } + } + } + + @if $edge == alpha or $edge == omega { + $edge: if($edge == alpha, first, last); + } + + @return $edge; +} + + +// Get Location +// ------------ +// Calculate location value based on edge, if possible +@function get-location( + $span +) { + $span : parse-span($span); + $location : susy-get(location, $span); + $edge : get-edge($span); + $n : susy-get(span, $span); + + @if $edge and not($location) and type-of($n) == number and unitless($n) { + @if $edge == first { + $location: 1; + } @else if $edge == last { + $location: susy-count(susy-get(columns, $span)) - $n + 1; + } + } + + @return $location +} diff --git a/_sass/basically-basic/vendor/susy/language/susy/_settings.scss b/_sass/basically-basic/vendor/susy/language/susy/_settings.scss new file mode 100644 index 0000000..9b5d897 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/language/susy/_settings.scss @@ -0,0 +1,216 @@ +// Susy Settings +// ============= + +// Susy Language Defaults +// ---------------------- +// - PRIVATE +@include susy-defaults(( + container: auto, + math: fluid, + output: float, + container-position: center, + gutter-position: after, + global-box-sizing: content-box, + debug: ( + image: hide, + color: rgba(#66f, .25), + output: background, + toggle: top right, + ), +)); + + +// Valid Keyword Values +// -------------------- +// - PRIVATE: DONT'T TOUCH +$susy-keywords: ( + container: auto, + math: static fluid, + output: isolate float, + container-position: left center right, + flow: ltr rtl, + gutter-position: before after split inside inside-static, + box-sizing: border-box content-box, + span: full, + edge: first alpha last omega full, + spread: narrow wide wider, + gutter-override: no-gutters no-gutter, + role: nest, + clear: break nobreak, + debug image: show hide show-columns show-baseline, + debug output: background overlay, +); + + +// Parse Susy Keywords and Maps +// ---------------------------- +@function parse-settings( + $short: $susy +) { + $_return: (); + + @if type-of($short) == map { + $_return: $short; + } @else { + @each $item in $short { + // strings + @if type-of($item) == string { + @each $key, $value in $susy-keywords { + @if index($value, $item) { + $_key-value: append($key, $item); + $_return: _susy-deep-set($_return, $_key-value...); + } + } + // maps + } @else if type-of($item) == map { + $_return: map-merge($_return, $item); + } + } + } + + @return $_return; +} + + +// Parse Columns & Gutters +// ----------------------- +@function parse-layout( + $short +) { + $_return: (); + $_columns: (); + $_gutters: null; + + @if not(unitless(nth(nth($short, 1), 1))) { + $_gutters: nth($short, 1); + } @else { + $_columns: (columns: nth($short, 1)); + $_gutters: if(length($short) > 1, nth($short, 2), $_gutters); + } + + @if type-of($_gutters) == list and length($_gutters) > 0 { + $_gutters: ( + gutters: nth($_gutters, 2) / nth($_gutters, 1), + column-width: nth($_gutters, 1), + ); + } @else { + $_gutters: if($_gutters, (gutters: $_gutters), ()); + } + + $_return: map-merge($_return, $_columns); + $_return: map-merge($_return, $_gutters); + + @return $_return; +} + + +// Parse Grid/Context +// ------------------ +@function parse-grid( + $short: $susy +) { + $_return: parse-settings($short); + $_layout: (); + + @if type-of($short) == map { + $_return: $short; + } @else { + @each $item in $short { + // number or list + @if type-of($item) == number or type-of($item) == list { + @if type-of($item) == list or unitless($item) { + $_layout: append($_layout, $item); + } @else { + $_return: map-merge($_return, (container: $item)); + } + } + } + + $_layout: if(length($_layout) > 0, parse-layout($_layout), $_layout); + } + + @return map-merge($_return, $_layout); +} + + +// Parse Span +// ---------- +@function parse-span( + $short, + $key: span +) { + $_return: (); + + @if type-of($short) == map { + $_return: $short; + } @else { + $_at: index($short, at); + + @if $_at { + $_loci: $_at + 1; + $_location: nth($short, $_loci); + $_return: map-merge($_return, (location: $_location)); + $short: set-nth($short, $_at, null); + $short: set-nth($short, $_loci, null); + } + + $_i: 1; + $_span: (); + + @while $_i <= length($short) { + $_this: nth($short, $_i); + + @if type-of($_this) == number { + $_span: append($_span, $_this); + $short: set-nth($short, $_i, null); + } @else if $_this == of { + $short: set-nth($short, $_i, null); + $_i: length($short) + 1; + } + + $_i: $_i + 1; + } + + @if length($_span) > 0 { + $_span: if(length($_span) == 1, nth($_span, 1), $_span); + $_return: map-merge($_return, ($key: $_span)); + } + + $_return: map-merge($_return, parse-grid($short)); + } + + @return $_return; +} + + +// Parse Gutters +// ------------- +@function parse-gutters( + $short: $susy +) { + $_gutters: parse-span($short, gutter-override); + $_span: susy-get(gutter-override, $_gutters); + + @if $_span and not(map-get($_gutters, columns)) { + $_context: (); + $_new: (); + + @each $item in $_span { + @if type-of($item) == number and unitless($item) { + $_context: append($_context, $item); + } @else { + $_new: append($_new, $item); + } + } + + $_context: parse-grid($_context); + $_new: if(length($_new) == 0, null, $_new); + $_new: if(length($_new) == 1, nth($_new, 1), $_new); + $_new: (gutter-override: if($_new != $_span, $_new, $_span)); + + $_gutters: map-merge($_gutters, $_new); + $_gutters: map-merge($_gutters, $_context); + } + + @return $_gutters; +} diff --git a/_sass/basically-basic/vendor/susy/language/susy/_span.scss b/_sass/basically-basic/vendor/susy/language/susy/_span.scss new file mode 100644 index 0000000..86ccda9 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/language/susy/_span.scss @@ -0,0 +1,163 @@ +// Span Syntax +// =========== + +// Span [mixin] +// ------------ +// Set a spanning element using shorthand syntax. +// - $span : +@mixin span( + $span +) { + $inspect: $span; + $span: parse-span($span); + $output: span-math($span); + $nesting: susy-get(span, $span); + $clear: susy-get(clear, $span); + + $box: susy-get(box-sizing, $span); + $content-box: if(susy-get(global-box-sizing) != 'border-box', true, false); + $box: $box or if(is-inside($span) and $content-box, border-box, null); + + @if $clear == break { + @include break; + } @else if $clear == nobreak { + @include nobreak; + } + + @include susy-inspect(span, $inspect); + @include output((box-sizing: $box)); + @include float-span-output($output...); + + @if valid-columns($nesting, silent) { + @include nested($span) { @content; } + } @else { + @content; + } +} + +// Span [function] +// --------------- +// Return the width of a span. +// - $span : +@function span( + $span +) { + @return get-span-width($span); +} + +// Span Math +// --------- +// Get all the span results. +// - $span: +@function span-math( + $span +) { + $nest : if(susy-get(role, $span) == nest, true, false); + $split-nest : if(is-split($span) and $nest, true, false); + $edge : get-edge($span); + $location : get-location($span); + + $float : from; + $padding-before : null; + $padding-after : null; + $margin-before : null; + $margin-after : null; + + // calculate widths + $spread: index(map-values($span), spread); + $span: if($split-nest and not($spread), map-merge($span, (spread: wide)), $span); + $width: get-span-width($span); + $gutters: get-gutters($span); + + // apply gutters + @if is-inside($span) { + @if not(susy-get(role, $span)) { + $padding-before: map-get($gutters, before); + $padding-after: map-get($gutters, after); + } + } @else { + @if not($split-nest) { + $margin-before: map-get($gutters, before); + $margin-after: map-get($gutters, after); + } + } + + // special margin handling + @if susy-get(output, $span) == isolate and $location { + $margin-before: get-isolation($span); + $margin-after: -100%; + } @else if $edge { + $is-split: is-split($span); + $pos: susy-get(gutter-position, $span); + + @if $edge == last { + $float: susy-get(last-flow, $span); + } + + @if not($is-split) { + @if $edge == full or ($edge == first and $pos == before) { + $margin-before: 0; + } + @if $edge == full or ($edge == last and $pos == after) { + $margin-after: 0; + } + } + + } + + @return ( + width : $width, + float : $float, + margin-before : $margin-before, + margin-after : $margin-after, + padding-before : $padding-before, + padding-after : $padding-after, + flow : susy-get(flow, $span), + ); +} + +// Get Span Width +// -------------- +// Return span width. +// - $span: +@function get-span-width( + $span +) { + $span : parse-span($span); + + $n : susy-get(span, $span); + $location : get-location($span); + $columns : susy-get(columns, $span); + $gutters : susy-get(gutters, $span); + $spread : susy-get(spread, $span); + + $context : null; + $span-sum : null; + $width : null; + + @if $n == 'full' { + $pos: susy-get(gutter-position, $span); + $role: susy-get(role, $span); + $n: if($pos == split and $role != nest, susy-count($columns), 100%); + } + + @if type-of($n) != number { + @warn "(#{type-of($n)}) #{$n} is not a valid span."; + } @else if unitless($n) { + $context: susy-sum($columns, $gutters, if(is-split($span), wide, narrow)); + $spread: if(is-inside($span), $spread or wide, $spread); + $span-sum: susy($n, $location, $columns, $gutters, $spread); + + $_math: susy-get(math, $span); + $_column-width: susy-get(column-width, $span); + @if $_math == static { + $width: $span-sum * valid-column-math($_math, $_column-width); + } @else { + $width: percentage($span-sum / $context); + } + } @else { + $width: $n; + } + + @return $width; +} diff --git a/_sass/basically-basic/vendor/susy/language/susy/_validation.scss b/_sass/basically-basic/vendor/susy/language/susy/_validation.scss new file mode 100644 index 0000000..a235b17 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/language/susy/_validation.scss @@ -0,0 +1,16 @@ +// Validation +// ========== + + +// Validate Column Math +// -------------------- +@function valid-column-math( + $math, + $column-width +) { + @if $math == static and not($column-width) { + @error 'Static math requires a valid column-width setting.'; + } + + @return $column-width; +} diff --git a/_sass/basically-basic/vendor/susy/language/susyone/_background.scss b/_sass/basically-basic/vendor/susy/language/susyone/_background.scss new file mode 100644 index 0000000..38c6726 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/language/susyone/_background.scss @@ -0,0 +1,18 @@ +// --------------------------------------------------------------------------- +// Imports + +@import "compass/layout/grid-background"; +@import "compass/css3/background-origin"; +@import "compass/css3/background-clip"; + +// --------------------------------------------------------------------------- +// Susy Grid Background +// +// A wrapper for the compass "column-grid-background" mixin +// Uses all your settings to create a grid background for a container element. +// Note: Sub-pixel rounding can lead to several pixels of variation between browsers. +@mixin susy-grid-background(){ + @include column-grid-background($total-columns, column(), gutter(), 0); + @include background-origin(content-box); + @include background-clip(content-box); +} diff --git a/_sass/basically-basic/vendor/susy/language/susyone/_functions.scss b/_sass/basically-basic/vendor/susy/language/susyone/_functions.scss new file mode 100644 index 0000000..6818458 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/language/susyone/_functions.scss @@ -0,0 +1,377 @@ +// --------------------------------------------------------------------------- +// Imports + +// We need access to some basic font settings for handling media-queries. +@import "compass/typography/vertical_rhythm"; + +// For now, we also need this... +$browser-default-font-size-px : 16px; +$browser-default-font-size-percent : 100%; +$browser-default-font-size-pt : 12pt; + +$rem-with-px-fallback : true !default; + +// --------------------------------------------------------------------------- +// Sass list Functions + +// Return a list with specific items removed +// +// filter($list, $target) +// - $list : The list to filter. +// - $target : An item to be removed from the list. +@function filter($list, $target) { + $clean: compact(); + @if index($list, $target) { + @each $item in $list { + $clean: if($item == $target, $clean, append($clean, $item)); + } + } @else { $clean: $list; } + @return $clean; +} + +// --------------------------------------------------------------------------- +// Don't use static output when it will break things + +// Switch element-level output to fluid, when container-width is wrong for static +// +// fix-static-misalignment([$style, $width]) +// - $style: $container-style. +// - $width: $container-width. +@function fix-static-misalignment( + $style: $container-style, + $width: $container-width +) { + @if $container-width and $container-width != container-outer-width($width: false) { + $style: fluid; + } + @return $style; +} + +// --------------------------------------------------------------------------- +// Grid Functions + +// Returns the full width of a grid based on your grid settings. +// +// $columns : The number of columns to get width for. +@function columns-width( + $columns : $total-columns +) { + @if round($columns) != $columns { + @warn "Susy works best with integer column-spans." + + "For partial-columns, you may need to finesse the math by hand using functions directly."; + } + @return ($columns * $column-width) + (if($columns >= 1, ceil($columns - 1), 0) * $gutter-width); +} + +// Return the grid width after adding or subtracting grid padding +// +// $width : the width of the grid without padding; +// $operation : ( add | subtract ) if padding should be added or subtracted; +@function handle-grid-padding( + $width, + $operation : subtract +) { + $pad: $grid-padding*2; + + @if comparable($width, $grid-padding) { + $width: if($operation == subtract, $width - $pad, $width + $pad); + } @else { + @warn "$grid-padding must be set in units comparable to the container width."; + } + + @return $width; +} + +// Return the full outer width of a Container element. +// +// $columns : The number of columns in the Grid Layout. +@function container-outer-width( + $columns : $total-columns, + $width : $container-width +) { + $outerwidth: if($width, $width, columns-width($columns)); + + @if $width { + @if not($border-box-sizing) { $outerwidth: handle-grid-padding($outerwidth, subtract); } + } @else { + @if $border-box-sizing { $outerwidth: handle-grid-padding($outerwidth, add); } + } + + @return $outerwidth; +} + +// Return the percentage width of a single column in a given 'context'. +// +// $context : The grid context in columns, if nested. +// $style : The container style to use. +@function column( + $context : $total-columns, + $style : fix-static-misalignment() +) { + @return if($style == static, $column-width, relative-width($column-width, $context)); +} + +// Return the percentage width of multiple 'columns' in a given 'context'. +// +// $columns : The number of columns to get relative width for. +// $context : The grid context in columns, if nested. +// $style : The container style to use. +@function columns( + $columns, + $context : $total-columns, + $style : fix-static-misalignment() +) { + @return if($style == static, columns-width($columns), relative-width(columns-width($columns), $context)); +} + +// Return the percentage width of a single gutter in a given 'context'. +// +// $context : The grid context in columns, if nested. +// $style : The container style to use. +@function gutter( + $context : $total-columns, + $style : fix-static-misalignment() +) { + @return if($style == static, $gutter-width, relative-width($gutter-width, $context)); +} + +// Return the percentage width of a given value in a given 'context'. +// +// $width : Any given width value. +// $context : The grid context in columns, if nested. +@function relative-width( + $width, + $context : $total-columns +) { + @return percentage($width / columns-width($context)); +} + +// Return the total space occupied by multiple columns and associated gutters. +// Useful for adding padding or margins (prefix, suffix, push, pull, etc.) +// +// $columns : The number of columns to get relative space for. +// $context : The grid context in columns, if nested. +// $style : The container style to use. +@function space( + $columns, + $context : $total-columns, + $style : fix-static-misalignment() +) { + @return columns($columns, $context, $style) + if($columns >= 1, gutter($context, $style), 0); +} + +// Accept a list including column-count and (optional) position. +// Return either the column count or the position alone. +// +// $columns : the list to split and interprate. +// $request : The value to return, either 'columns' or 'position'. +@function split-columns-value( + $columns, + $request : columns +) { + $pos : false; + $cols : false; + + @each $var in $columns { + @if (type-of($var) == 'string') { + $pos: $var; + } @else { + @if (type-of($var) == 'number') and (unitless($var)) { + $cols: $var; + } @else { + @warn '"#{$var}" is not a valid part of "$columns: #{$columns}" in the columns() mixin.'; + } + } + } + + @if $request == 'columns' { + @return $cols; + } @else { + @if $request == 'position' { + @return $pos; + } @else { + @warn '"#{$request}" is not a valid value for $request'; + } + } +} + +// Accept nth-selector variables, and format them as a valid CSS3 selector. +// +// $n : [first | only | last | ] +// $selector : [child | last-child | of-type | last-of-type ] +@function format-nth( + $n : last, + $selector : child +) { + @if ($n == 'last') or ($n =='first') or ($n =='only') { + $selector: '#{$n}-#{$selector}'; + } @else { + $selector: 'nth-#{$selector}(#{$n})'; + } + @return $selector; +} + +// --------------------------------------------------------------------------- +// Media Functions + +// Return an em value adjusted to match the browser default font size. +// Note: This only works if actual sizes are set relative to browser defaults. +// +// $ems : The initial value to be converted. +// $font-size : The current font-size in. +@function base-ems( + $ems, + $font-size: $base-font-size +){ + $font-size : if(unit($ems) == 'rem', $base-font-size, $font-size); + $unit : unit($font-size); + $mult : $ems / ($ems * 0 + 1); + + @if $unit == 'px' { + @return $font-size / $browser-default-font-size-px * $mult * 1em; + } + @else if $unit == '%' { + @return $font-size / $browser-default-font-size-percent * $mult * 1em; + } + @else if $unit == 'em' { + @return $font-size / 1em * $mult * 1em; + } + @else if $unit == 'pt' { + @return $font-size / $browser-default-font-size-pt * $mult * 1em; + } + @else { + @warn 'Variable $base-font-size does not have a valid font unit. Valid units for fonts in CSS are px, pt, em, and %.'; + } +} + +// This name will be deprecated... +@function absolute-ems( + $ems, + $font-size: $base-font-size +){ + @return base-ems( $ems, $font-size); + } + +// Return a length, after any em-values have been sent through absolute-ems(). +// +// $length : The length value to be checked and adjusted if necessary. +// $font-size : The current font-size in px. +@function fix-ems( + $length, + $font-size: $base-font-size +){ + @if $length { + @if (unit($length) == 'em') or (unit($length) == 'rem') { + $length: absolute-ems($length,$font-size); + } + } + @return $length; +} + +// Sort a list of arguments into "$min $layout $max $ie" order, and return the list. +// +// $media-layout : a list of values [$min $layout $max $ie] including... +// : - one unitless number (columns in a layout) +// : - two optional lengths (min and max-width media-query breakpoints). +// : - one optional boolean or string to trigger fallback support for IE. +// $font-size : [optional] The base font-size of your layout, if you are using ems. +// : - defaults to $base-font-size +@function medialayout( + $media-layout, + $font-size: $base-font-size +) { + $media : false; + $min : false; + $layout : false; + $max : false; + $ie : false; + $has-layout : false; + + @each $val in $media-layout { + @if (type-of($val) == "number") { + @if unitless($val) { + $layout : $val; + $has-layout : true; + } @else { + @if ($has-layout) and not($media) { + $max: $val; + } @else { + @if $media { + $media: join($media,$val); + } @else { + $media: $val; + } + } + } + } @else { + $ie: $val; + } + } + @if (length($media) > 0) { + @if (length($media) == 1) { + $min: nth($media,1); + } @else { + $min: nth($media,1); + $max: nth($media,2); + @if comparable($min, $max) { + @if ($min > $max) { + $max: nth($media,1); + $min: nth($media,2); + } + } @else { + @warn "Can't compare incompatible units." + + "Using #{$min} for min-width, and #{$max} for max-width"; + } + @if (length($media) > 2) { + @warn "You can only send two lengths: a min-width and an (optional) max-width." + + "You sent #{length($media)}: #{$media}"; + } + } + } + + // media-queries must be set in ems relative to the browser default + // rather than the font-size set in CSS. + $min: fix-ems($min,$font-size); + $max: fix-ems($max,$font-size); + + @return $min $layout $max $ie; +} + +// Return the nearest layout (column-count) above a given breakpoint. +// +// $min : The min-width media-query breakpoint above which to establish a new layout. +@function get-layout( + $min +) { + $min : fix-ems($min); + $return : false; + + @if comparable($min, $column-width) { + $return : ceil(($min + $gutter-width) / ($column-width + $gutter-width)); + } @else { + @warn "Can't determine a layout, becuse #{$min} and #{$column-width} are not comparable."; + } + + @return $return; +} + +// Check to see if a given $media-layout list is simply the default. +// +// $media-layout : a list of values including - +// : One unitless number (columns in a layout) +// : Two optional lengths (min and max-width media-query breakpoints). +// : One optional boolean or string to trigger fallback support for IE. +@function is-default-layout( + $media-layout +) { + $media-layout : medialayout($media-layout); + $min : nth($media-layout,1); + $layout-cols : nth($media-layout,2); + $max : nth($media-layout,3); + + @if $min or $max { + @return false; + } @else { + @return if($layout-cols == $total-columns,true,false); + } +} diff --git a/_sass/basically-basic/vendor/susy/language/susyone/_grid.scss b/_sass/basically-basic/vendor/susy/language/susyone/_grid.scss new file mode 100644 index 0000000..491c622 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/language/susyone/_grid.scss @@ -0,0 +1,312 @@ +// --------------------------------------------------------------------------- +// Imports + +@import "compass/utilities/general/clearfix"; +@import "compass/css3/box-sizing"; + +// --------------------------------------------------------------------------- +// Border-Box Sizing + +// Apply the border-box sizing model to all elements +// and adjust the grid math appropriately. +@mixin border-box-sizing { + $border-box-sizing: true !global; + * { @include box-sizing(border-box); } +} + +// --------------------------------------------------------------------------- +// Container + +// Set the width of a container +// +// $columns : The number of columns in the Grid Layout. +@mixin set-container-width( + $columns : $total-columns, + $style : $container-style, + $px-vals : $pixel-values-only +){ + $width: container-outer-width($columns); + + @if $style == 'static' { + @if $px-vals == true { + width: round(convert-length($width, px)); + } @else { + @include rem(width, $width); + } + } @else { + @if $style == 'fluid' { + @if unit($width) == '%' { + @if $px-vals == true { + width: round(convert-length($width, px)); + } @else { + @include rem(width, $width); + } + } + } @else { + @if $px-vals == true { + max-width: round(convert-length($width, px)); + } @else { + @include rem(max-width, $width); + } + + @include for-legacy-browser(ie,"6") { + @if unit($width) == 'rem' { + _width: round(convert-length($width, px)); + } @else { + _width: $width; + } + } + } + } +} + +// Set the outer grid-containing element(s). +// +// $columns : The number of columns in the container. +@mixin apply-container( + $columns : $total-columns, + $px-vals : $pixel-values-only +){ + @include pie-clearfix; + @include set-container-width($columns); + @if $px-vals == true { + padding-left: round(convert-length($grid-padding, px)); + padding-right: round(convert-length($grid-padding, px)); + } @else { + @include rem(padding-left, $grid-padding); + @include rem(padding-right, $grid-padding); + } + margin: { left: auto; right: auto; } +} + +// Set one or more layouts on a grid-containing element at any number of media-query breakpoints. +// +// $media-layout-1 : [default:$total-columns] A list of values including - +// : One unitless number (representing columns in a layout) +// : Two optional lengths (representing min and max-width media-query breakpoints). +// $media-layout-2 ...-10 : [optional] Same as $media-layout-1 +@mixin container( + $media-layouts... +){ + $media-layouts: if(length($media-layouts) > 0, $media-layouts, $total-columns); + + @each $ml in $media-layouts { + @if is-default-layout($ml) { + @include apply-container; + } @else { + @include at-breakpoint($ml) { + @include apply-container; + } + } + } +} + +// --------------------------------------------------------------------------- +// Columns + +// Create a grid element spanning any number of 'columns' in a grid 'context'. +// $columns : The number of columns to span. +// $context : [optional] The context (columns spanned by parent). +// : Context is required on any nested elements. +// : Context MUST NOT be declared on a root element. +// $padding : [optional] Padding applied to the inside of individual grid columns. +// : Padding is only output if one or two values are specified (e.g. 1em or 10px 20px) +// : Padding values are applied only on the horizontal axis in from-to order +// $from : The start direction of your layout (e.g. 'left' for ltr languages) +// $style : The container style to use. +@mixin span-columns( + $columns, + $context : $total-columns, + $padding : false, + $from : $from-direction, + $style : fix-static-misalignment() +) { + $from : unquote($from); + $to : opposite-position($from); + $pos : split-columns-value($columns,position); + $cols : split-columns-value($columns,columns); + $pad-from : if($style == static, 0 * $gutter-width, relative-width(0 * $gutter-width, $context)); + $pad-to : if($style == static, 0 * $gutter-width, relative-width(0 * $gutter-width, $context)); + + @if $padding != false { + $pad-from : nth($padding, 1); + + @if length($padding) > 1 { + $pad-to: nth($padding, 2); + } @else { + $pad-to: $pad-from; + } + + $pad-from : if($style == static, $pad-from, relative-width($pad-from, $context)); + $pad-to : if($style == static, $pad-to, relative-width($pad-to, $context)); + + padding-#{$from}: $pad-from; + padding-#{$to}: $pad-to; + } + + width: columns($cols, $context, $style) - if($border-box-sizing, 0, $pad-to + $pad-from); + + @if ($pos == 'omega') { + @include omega($from); + } @else { + float: $from; + margin-#{$to}: gutter($context, $style); + @include for-legacy-browser(ie, "6") { + display: inline; + } + } +} + +// Apply to elements spanning the last column, to account for the page edge. +// Only needed as an override. Normally 'omega' can just be called by `columns`. +// +// $from : The start-direction for your document. +@mixin omega( + $from : $from-direction +) { + $from : unquote($from); + $to : opposite-position($from); + $hack : opposite-position($omega-float); + + float: $omega-float; + margin-#{$to}: 0; + + @include for-legacy-browser(ie, "6", "7") { + *margin-#{$hack}: - $gutter-width; + @include for-legacy-browser(ie, "6") { + display: inline; + } + } +} + +// Shortcut to apply omega to a specific subset of elements. +// +// $n : [first | only | last | ] +// $selector : [child | last-child | of-type | last-of-type ] +// $from : The start-direction for your document. +@mixin nth-omega( + $n : last, + $selector : child, + $from : $from-direction +) { + $from : unquote($from); + + &:#{format-nth($n,$selector)} { + @if $n == "first" { + @include omega($from); + } @else { + @include with-browser-ranges(css-sel3) { + @include omega($from); + } + } + } +} + + + +// --------------------------------------------------------------------------- +// Resets + +// Reset a '+columns' grid element to default block behavior +// +// $from : The start direction of your layout (e.g. 'left' for ltr languages) +@mixin reset-columns( + $from: $from-direction +) { + $from : unquote($from); + $to : opposite-position($from); + $hack : opposite-position($omega-float); + + float: none; + width: auto; + margin-#{$to}: auto; + + @include for-legacy-browser(ie, "6", "7") { + *margin-#{$hack}: auto; + @include for-legacy-browser(ie, "6") { + display: block; + } + } +} + +// Apply to elements previously set as omega. +// This will return floats and margins back to non-omega settigns. +// +// $context : [optional] The context (columns spanned by parent). +// $from : The start-direction for your document. +// $style : The container style to use. +@mixin remove-omega( + $context : $total-columns, + $from : $from-direction, + $style : fix-static-misalignment() +) { + $from : unquote($from); + $to : opposite-position($from); + $hack : opposite-position($omega-float); + + float: $from; + margin-#{$to}: gutter($context, $style); + + @include for-legacy-browser(ie, "6", "7") { + *margin-#{$hack}: auto; + } +} + +// Shortcut to apply remove-omega to a specific subset of elements. +// +// $n : [first | only | last | ] +// $selector : [child | last-child | of-type | last-of-type ] +// $context : [optional] The context (columns spanned by parent). +// $from : The start-direction for your document. +// $style : The container style to use. +@mixin remove-nth-omega( + $n : last, + $selector : child, + $context : $total-columns, + $from : $from-direction, + $style : fix-static-misalignment() +) { + $from : unquote($from); + + &:#{format-nth($n,$selector)} { + @if $n == "first" { + @include remove-omega($context, $from, $style); + } @else { + @include with-browser-ranges(css-sel3) { + @include remove-omega($context, $from, $style); + } + } + } +} + + +// --------------------------------------------------------------------------- +// Change Settings + +@mixin with-grid-settings( + $columns: $total-columns, + $width: $column-width, + $gutter: $gutter-width, + $padding: $grid-padding +) { + // keep the defaults around + $default-columns: $total-columns; + $default-width: $column-width; + $default-gutter: $gutter-width; + $default-padding: $grid-padding; + + // use the new settings + $total-columns: $columns !global; + $column-width: $width !global; + $gutter-width: $gutter !global; + $grid-padding: $padding !global; + + // apply to contents + @content; + + // re-instate the defaults + $total-columns: $default-columns !global; + $column-width: $default-width !global; + $gutter-width: $default-gutter !global; + $grid-padding: $default-padding !global; +} diff --git a/_sass/basically-basic/vendor/susy/language/susyone/_isolation.scss b/_sass/basically-basic/vendor/susy/language/susyone/_isolation.scss new file mode 100644 index 0000000..2b70038 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/language/susyone/_isolation.scss @@ -0,0 +1,51 @@ +// --------------------------------------------------------------------------- +// Isolation + +// Isolate the position of a grid element (use in addition to span-columns) +// +// $location : The grid column to isolate in, relative to the container; +// $context : [optional] The context (columns spanned by parent). +// $from : The start direction of your layout (e.g. 'left' for ltr languages) +@mixin isolate( + $location, + $context: $total-columns, + $from: $from-direction, + $style: fix-static-misalignment() +) { + $to: opposite-position($from); + margin-#{$to}: -100%; + margin-#{$from}: space($location - 1, $context, $style); +} + +// Isolate a group of elements in a grid, using nth-child selectors +// +// $columns : The column-width of each item on the grid; +// $context : [optional] The context (columns spanned by parent). +// $selector : [child | of-type | last-of-type ] (default is 'child') +// $from : The start direction of your layout (e.g. 'left' for ltr languages) +@mixin isolate-grid( + $columns, + $context: $total-columns, + $selector: 'child', + $from: $from-direction, + $style: fix-static-misalignment() +) { + $to: opposite-position($from); + $location: 1; + $line: floor($context / $columns); + + @include span-columns($columns, $context, $from: $from, $style: $style); + margin-#{$to}: -100%; + + @for $item from 1 through $line { + $nth: '#{$line}n + #{$item}'; + &:#{format-nth($nth,$selector)} { + margin-#{$from}: space($location - 1, $context, $style); + @if $location == 1 { clear: $from; } + @else { clear: none; } + + $location: $location + $columns; + @if $location > $context { $location: 1; } + } + } +} diff --git a/_sass/basically-basic/vendor/susy/language/susyone/_margin.scss b/_sass/basically-basic/vendor/susy/language/susyone/_margin.scss new file mode 100644 index 0000000..accbbe6 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/language/susyone/_margin.scss @@ -0,0 +1,93 @@ +// --------------------------------------------------------------------------- +// Margin Mixins + +// Apply 'columns' margin before an element to push it along the grid. +// +// $columns : The number of columns to span. +// $context : [optional] The context (columns spanned by parent). +// : Context is required on any nested elements. +// : Context MUST NOT be declared on a root element. +// $from : The start direction of your layout (e.g. 'left' for ltr languages) +// $style : The container style to use. +@mixin pre( + $columns, + $context : $total-columns, + $from : $from-direction, + $style : fix-static-misalignment() +) { + $from : unquote($from); + margin-#{$from}: space($columns, $context, $style); +} + +// 'push' is a synonymn for 'pre' +@mixin push( + $columns, + $context : $total-columns, + $from : $from-direction, + $style : fix-static-misalignment() +) { + $from : unquote($from); + @include pre($columns, $context, $from, $style); +} + +// Apply negative 'columns' margin before an element to pull it along the grid. +// +// $columns : The number of columns to span. +// $context : [optional] The context (columns spanned by parent). +// : Context is required on any nested elements. +// : Context MUST NOT be declared on a root element. +// $from : The start direction of your layout (e.g. 'left' for ltr languages) +// $style : The container style to use. +@mixin pull( + $columns, + $context : $total-columns, + $from : $from-direction, + $style : fix-static-misalignment() +) { + $from : unquote($from); + margin-#{$from}: 0 - space($columns, $context, $style); +} + +// Apply 'columns' margin after an element to contain it in a grid. +// +// $columns : The number of columns to span. +// $context : [optional] The context (columns spanned by parent). +// : Context is required on any nested elements. +// : Context MUST NOT be declared on a root element. +// $from : The start direction of your layout (e.g. 'left' for ltr languages) +// $style : The container style to use. +@mixin post( + $columns, + $context : $total-columns, + $from : $from-direction, + $style : fix-static-misalignment() +) { + $from : unquote($from); + $to : opposite-position($from); + margin-#{$to}: space($columns, $context, $style); +} + +// Apply 'columns' before and/or after an element to contain it on a grid. +// +// $pre : The number of columns to add as margin before. +// $post : The number of columns to add as margin after. +// $context : [optional] The context (columns spanned by parent). +// : Context is required on any nested elements. +// : Context MUST NOT be declared on a root element. +// $from : The start direction of your layout (e.g. 'left' for ltr languages) +// $style : The container style to use. +@mixin squish( + $pre : false, + $post : false, + $context : $total-columns, + $from : $from-direction, + $style : fix-static-misalignment() +) { + $from : unquote($from); + @if $pre { + @include pre($pre, $context, $from, $style) + } + @if $post { + @include post($post, $context, $from, $style) + } +} diff --git a/_sass/basically-basic/vendor/susy/language/susyone/_media.scss b/_sass/basically-basic/vendor/susy/language/susyone/_media.scss new file mode 100644 index 0000000..ca860fc --- /dev/null +++ b/_sass/basically-basic/vendor/susy/language/susyone/_media.scss @@ -0,0 +1,105 @@ +// --------------------------------------------------------------------------- +// Media Mixins + +// Create a new layout context for (@content) descendants. +// +// $layout-cols : a (unitless) number of columns to use for this layout. +@mixin layout( + $layout-cols +) { + // store default $total-columns setting for later, then change it. + $default-layout : $total-columns; + $total-columns : $layout-cols !global; + + // apply children in this new layout context. + @content; + + // return to default $total-columns setting. + $total-columns : $default-layout !global; +} + +// Nest a block of code inside a new media-query and layout context. +// +// $media-layout : a list of values [$min $layout $max $ie] including... +// : - one unitless number (columns in a layout) +// : - two optional lengths (min and max-width media-query breakpoints). +// : - one optional boolean or string to trigger fallback support for IE. +// $font-size : [optional] The base font-size of your layout, if you are using ems. +// : - defaults to $base-font-size +@mixin at-breakpoint( + $media-layout, + $font-size: $base-font-size +) { + $media-layout : medialayout($media-layout,$font-size); + $min : nth($media-layout,1); + $layout : nth($media-layout,2); + $max : nth($media-layout,3); + $ie : nth($media-layout,4); + + @if not($breakpoint-media-output) and not($breakpoint-ie-output) and not($breakpoint-raw-output) { + @warn "Either $breakpoint-media-output, $breakpoint-ie-output, or $breakpoint-raw-output must be true for at-breakpoint to work."; + } + + // We need to have either a min-width breakpoint or a layout in order to proceed. + @if $min or $layout or $max { + + // If we don't have a layout, we create one based on the min-width. + @if not($layout) { + $layout: get-layout($min); + } + + // If we still don't have a layout, we have a problem. + @if $layout { + // Set our new layout context. + @include layout($layout) { + @if $breakpoint-media-output { + @include with-browser-ranges(css-mediaqueries) { + @if $min and $max { + // Both $min and $max + @media (min-width: $min) and (max-width: $max) { + @content; + } + } @else { + @if not($min) and not($max) { + // Neither $min nor $max: + // We can create a breakpoint based on the number of columns in the layout. + $min: fix-ems(container-outer-width($width: false)); + } + @if $min { + // Min only: + @media (min-width: $min) { + @content; + } + } @else { + // Max only: + @media (max-width: $max) { + @content; + } + } + } + } + } + // Set an IE fallback + @if $ie and $breakpoint-ie-output { + @if (type-of($ie) == 'bool') { + $ie: 'lt-ie9'; + } + .#{$ie} & { + @content; + } + } + + @if $breakpoint-raw-output { + @content; + } + } + } @else { + @warn "We were unable to determine a layout for your breakpoint."; + } + + } @else { + @warn "You need to provide either a valid layout (number of columns)" + + "or a valid media-query min-width breakpoint (length)."; + } + +} diff --git a/_sass/basically-basic/vendor/susy/language/susyone/_padding.scss b/_sass/basically-basic/vendor/susy/language/susyone/_padding.scss new file mode 100644 index 0000000..8e6394a --- /dev/null +++ b/_sass/basically-basic/vendor/susy/language/susyone/_padding.scss @@ -0,0 +1,92 @@ +// --------------------------------------------------------------------------- +// Padding Mixins + +// add empty colums as padding before an element. +// $columns : The number of columns to prefix. +// $context : [optional] The context (columns spanned by parent). +// : Context is required on any nested elements. +// : Context MUST NOT be declared on a root element. +// $from : The start direction of your layout (e.g. 'left' for ltr languages) +// $style : The container style to use. +@mixin prefix( + $columns, + $context : $total-columns, + $from : $from-direction, + $style : fix-static-misalignment() +) { + $from : unquote($from); + padding-#{$from}: space($columns, $context, $style); +} + +// add empty colums as padding after an element. +// $columns : The number of columns to suffix. +// $context : [optional] The context (columns spanned by parent). +// : Context is required on any nested elements. +// : Context MUST NOT be declared on a root element. +// $from : The start direction of your layout (e.g. 'left' for ltr languages) +// $style : The container style to use. +@mixin suffix( + $columns, + $context : $total-columns, + $from : $from-direction, + $style : fix-static-misalignment() +) { + $from : unquote($from); + $to : opposite-position($from); + padding-#{$to}: space($columns, $context, $style); +} + +// add empty colums as padding before and after an element. +// $columns : The number of columns to pad. +// $context : [optional] The context (columns spanned by parent). +// : Context is required on any nested elements. +// : Context MUST NOT be declared on a root element. +// $from : The start direction of your layout (e.g. 'left' for ltr languages) +// $style : The container style to use. +@mixin pad( + $prefix : false, + $suffix : false, + $context : $total-columns, + $from : $from-direction, + $style : fix-static-misalignment() +) { + $from : unquote($from); + @if $prefix { + @include prefix($prefix, $context, $from, $style); + } + @if $suffix { + @include suffix($suffix, $context, $from, $style); + } +} + +// Bleed into colums with margin/padding on any side of an element. +// $width : The side of the bleed. +// : Any unit-length will be used directly. +// : Any unitless number will be used as a column-count. +// : Use "2 of 6" format to represent 2 cals in a 6-col nested context. +// $sides : One or more sides to bleed [ top | right | bottom | left | all ]. +// $style : The container style to use. +@mixin bleed( + $width: $grid-padding, + $sides: left right, + $style: fix-static-misalignment() +) { + @if $border-box-sizing { @include box-sizing(content-box) } + + @if type-of($width) == 'list' { + $width: filter($width, of); + $width: space(nth($width,1), nth($width,2), $style); + } @else if unitless($width) { + $width: space($width, $style: $style); + } + + @if $sides == 'all' { + margin: - $width; + padding: $width; + } @else { + @each $side in $sides { + margin-#{$side}: - $width; + padding-#{$side}: $width; + } + } +} diff --git a/_sass/basically-basic/vendor/susy/language/susyone/_settings.scss b/_sass/basically-basic/vendor/susy/language/susyone/_settings.scss new file mode 100644 index 0000000..e8ff9c8 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/language/susyone/_settings.scss @@ -0,0 +1,60 @@ +// --------------------------------------------------------------------------- +// Susy Settings + +// The total number of columns in the grid +$total-columns : 12 !default; + +// The width of columns and gutters. +// These must all be set with the comparable units. +$column-width : 4em !default; +$gutter-width : 1em !default; + +// Padding on the left and right of a Grid Container. +$grid-padding : $gutter-width !default; + +// --------------------------------------------------------------------------- +// Advanced Settings + +// From Direction: +// Controls for right-to-left or bi-directional sites. +$from-direction : left !default; + +// Omega Float Direction: +// The direction that +omega elements are floated by deafult. +$omega-float : opposite-position($from-direction) !default; + +// Container Width: +// Override the total width of your grid, using any length (50em, 75%, etc.) +$container-width : false !default; + +// Container Style: +// 'magic' - Static (fixed or elastic) when there's enough space, +// fluid when there isn't. This is the SUSY MAGIC SAUCE(TM). +// 'static' - Forces the grid container to remain static at all times. +// 'fluid' - Forces the grid to remain fluid at all times. +// (this will overrule any static $container-width settings) +$container-style : magic !default; + +// Border-Box Sizing +// Adjust the grid math appropriately for box-sizing: border-box; +// Warning: This does not actually apply the new box model! +// In most cases you can ignore this setting, +// and simply apply the border-box-sizing mixin. +$border-box-sizing : false !default; + +// Pixel Values only: +// Make sure only pixel values are set for the container width. +$pixel-values-only : false !default; + +// --------------------------------------------------------------------------- +// IE Settings + +// When you are using a seperate IE stylesheet, +// you can use these settings to control the output of at-breakpoint. +// By default, at-breakpoint will output media-queries as well as +// any defined ie-fallback classes. +$breakpoint-media-output : true !default; +$breakpoint-ie-output : true !default; + +// Danger Zone! Only set as 'true' in IE-specific style sheets. +$breakpoint-raw-output : false !default; diff --git a/_sass/basically-basic/vendor/susy/output/_float.scss b/_sass/basically-basic/vendor/susy/output/_float.scss new file mode 100644 index 0000000..9c24051 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/output/_float.scss @@ -0,0 +1,9 @@ +// Float API +// ========= + +@import "shared"; + +@import "float/container"; +@import "float/span"; +@import "float/end"; +@import "float/isolate"; diff --git a/_sass/basically-basic/vendor/susy/output/_shared.scss b/_sass/basically-basic/vendor/susy/output/_shared.scss new file mode 100644 index 0000000..dd9df4e --- /dev/null +++ b/_sass/basically-basic/vendor/susy/output/_shared.scss @@ -0,0 +1,15 @@ +// Shared API +// ========== + +@import "support"; + +@import "shared/inspect"; +@import "shared/output"; +@import "shared/direction"; +@import "shared/background"; +@import "shared/container"; +@import "shared/margins"; +@import "shared/padding"; + + + diff --git a/_sass/basically-basic/vendor/susy/output/_support.scss b/_sass/basically-basic/vendor/susy/output/_support.scss new file mode 100644 index 0000000..53dbc9c --- /dev/null +++ b/_sass/basically-basic/vendor/susy/output/_support.scss @@ -0,0 +1,9 @@ +// Susy Browser Support +// ==================== + +@import "support/support"; +@import "support/prefix"; +@import "support/background"; +@import "support/box-sizing"; +@import "support/rem"; +@import "support/clearfix"; diff --git a/_sass/basically-basic/vendor/susy/output/float/_container.scss b/_sass/basically-basic/vendor/susy/output/float/_container.scss new file mode 100644 index 0000000..121eb11 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/output/float/_container.scss @@ -0,0 +1,16 @@ +// Float Container API +// =================== + +// Float Container +// --------------- +// - [$width] : +// - [$justify] : left | center | right +// - [$math] : fluid | static +@mixin float-container( + $width, + $justify: auto auto, + $property: max-width +) { + @include susy-clearfix; + @include container-output($width, $justify, $property); +} diff --git a/_sass/basically-basic/vendor/susy/output/float/_end.scss b/_sass/basically-basic/vendor/susy/output/float/_end.scss new file mode 100644 index 0000000..3369997 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/output/float/_end.scss @@ -0,0 +1,40 @@ +// Float Ends API +// ============== + +// Susy End Defaults +// ----------------- +// - PRIVATE +@include susy-defaults(( + last-flow: to, +)); + +// Float Last +// ---------- +// - [$flow] : ltr | rtl +@mixin float-last( + $flow: map-get($susy-defaults, flow), + $last-flow: map-get($susy-defaults, last-flow), + $margin: 0 +) { + $to: to($flow); + + $output: ( + float: if($last-flow == to, $to, null), + margin-#{$to}: $margin, + ); + + @include output($output); +} + +// Float First +// ----------- +// - [$flow] : ltr | rtl +@mixin float-first( + $flow: map-get($susy-defaults, flow) +) { + $output: ( + margin-#{from($flow)}: 0, + ); + + @include output($output); +} diff --git a/_sass/basically-basic/vendor/susy/output/float/_isolate.scss b/_sass/basically-basic/vendor/susy/output/float/_isolate.scss new file mode 100644 index 0000000..4dd3c23 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/output/float/_isolate.scss @@ -0,0 +1,22 @@ +// Float Isolation API +// =================== + +// Isolate Output +// -------------- +// - $push : +// - [$flow] : ltr | rtl +@mixin isolate-output( + $push, + $flow: map-get($susy-defaults, flow) +) { + $to: to($flow); + $from: from($flow); + + $output: ( + float: $from, + margin-#{$from}: $push, + margin-#{$to}: -100%, + ); + + @include output($output); +} diff --git a/_sass/basically-basic/vendor/susy/output/float/_span.scss b/_sass/basically-basic/vendor/susy/output/float/_span.scss new file mode 100644 index 0000000..5b732cc --- /dev/null +++ b/_sass/basically-basic/vendor/susy/output/float/_span.scss @@ -0,0 +1,35 @@ +// Float Span API +// ============== + +// Float Span Output +// ----------------- +// - $width : +// - [$float] : from | to +// - [$margin-before] : +// - [$margin-after] : +// - [$padding-before] : +// - [$padding-after] : +// - [$flow] : ltr | rtl +@mixin float-span-output( + $width, + $float : from, + $margin-before : null, + $margin-after : null, + $padding-before : null, + $padding-after : null, + $flow : map-get($susy-defaults, flow) +) { + $to : to($flow); + $from : from($flow); + + $output: ( + width: $width, + float: if($float == to, $to, null) or if($float == from, $from, null), + margin-#{$from}: $margin-before, + margin-#{$to}: $margin-after, + padding-#{$from}: $padding-before, + padding-#{$to}: $padding-after, + ); + + @include output($output); +} diff --git a/_sass/basically-basic/vendor/susy/output/shared/_background.scss b/_sass/basically-basic/vendor/susy/output/shared/_background.scss new file mode 100644 index 0000000..c230f61 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/output/shared/_background.scss @@ -0,0 +1,26 @@ +// Grid Background API +// =================== +// - Sub-pixel rounding can lead to several pixels variation between browsers. + +// Grid Background Output +// ---------------------- +// - $image: background-image +// - $size: background-size +// - $clip: background-clip +// - [$flow]: ltr | rtl +@mixin background-grid-output ( + $image, + $size: null, + $clip: null, + $flow: map-get($susy-defaults, flow) +) { + $output: ( + background-image: $image, + background-size: $size, + background-origin: $clip, + background-clip: $clip, + background-position: from($flow) top, + ); + + @include output($output); +} diff --git a/_sass/basically-basic/vendor/susy/output/shared/_container.scss b/_sass/basically-basic/vendor/susy/output/shared/_container.scss new file mode 100644 index 0000000..7c7d4f1 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/output/shared/_container.scss @@ -0,0 +1,21 @@ +// Shared Container API +// ==================== + +// Container Output +// ---------------- +// - [$width] : +// - [$justify] : left | center | right +// - [$math] : fluid | static +@mixin container-output( + $width, + $justify: auto auto, + $property: max-width +) { + $output: ( + #{$property}: $width or 100%, + margin-left: nth($justify, 1), + margin-right: nth($justify, 2), + ); + + @include output($output); +} diff --git a/_sass/basically-basic/vendor/susy/output/shared/_direction.scss b/_sass/basically-basic/vendor/susy/output/shared/_direction.scss new file mode 100644 index 0000000..abb9c36 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/output/shared/_direction.scss @@ -0,0 +1,42 @@ +// Direction Helpers +// ================= + +// Susy Flow Defaults +// ------------------ +// - PRIVATE +@include susy-defaults(( + flow: ltr, +)); + +// Get Direction +// ------------- +// Return the 'from' or 'to' direction of a ltr or rtl flow. +// - [$flow] : ltr | rtl +// - [$key] : from | to +@function get-direction( + $flow: map-get($susy-defaults, flow), + $key: from +) { + $return: if($flow == rtl, (from: right, to: left), (from: left, to: right)); + @return map-get($return, $key); +} + +// To +// -- +// Return the 'to' direction of a flow +// - [$flow] : ltr | rtl +@function to( + $flow: map-get($susy-defaults, flow) +) { + @return get-direction($flow, to); +} + +// From +// ---- +// Return the 'from' direction of a flow +// - [$flow] : ltr | rtl +@function from( + $flow: map-get($susy-defaults, flow) +) { + @return get-direction($flow, from); +} diff --git a/_sass/basically-basic/vendor/susy/output/shared/_inspect.scss b/_sass/basically-basic/vendor/susy/output/shared/_inspect.scss new file mode 100644 index 0000000..b0af9b6 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/output/shared/_inspect.scss @@ -0,0 +1,25 @@ +// Debugging +// ========= + +// Susy Inspect +// ------------ +// Output arguments passed to a inspect. +// - $mixin : +// - $inspec : + +@mixin susy-inspect( + $mixin, + $inspect +) { + $show: false; + + @each $item in $inspect { + @if index($item, inspect) { + $show: true; + } + } + + @if $show or susy-get(debug inspect) { + -susy-#{$mixin}: inspect($inspect); + } +} diff --git a/_sass/basically-basic/vendor/susy/output/shared/_margins.scss b/_sass/basically-basic/vendor/susy/output/shared/_margins.scss new file mode 100644 index 0000000..cd73e8c --- /dev/null +++ b/_sass/basically-basic/vendor/susy/output/shared/_margins.scss @@ -0,0 +1,23 @@ +// Margins API +// =========== + +// Margin Output +// ------------- +// - $before : +// - $after : +// - [$flow] : ltr | rtl +@mixin margin-output( + $before, + $after, + $flow: map-get($susy-defaults, flow) +) { + $to: to($flow); + $from: from($flow); + + $output: ( + margin-#{$from}: $before, + margin-#{$to}: $after, + ); + + @include output($output); +} diff --git a/_sass/basically-basic/vendor/susy/output/shared/_output.scss b/_sass/basically-basic/vendor/susy/output/shared/_output.scss new file mode 100644 index 0000000..20fc2d6 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/output/shared/_output.scss @@ -0,0 +1,14 @@ +// Output +// ====== + +// Output +// ------ +// Output CSS with proper browser support. +// - $styles : +@mixin output( + $styles +) { + @each $prop, $val in $styles { + @include susy-support($prop, $val); + } +} diff --git a/_sass/basically-basic/vendor/susy/output/shared/_padding.scss b/_sass/basically-basic/vendor/susy/output/shared/_padding.scss new file mode 100644 index 0000000..5069d0c --- /dev/null +++ b/_sass/basically-basic/vendor/susy/output/shared/_padding.scss @@ -0,0 +1,23 @@ +// Padding API +// =========== + +// Padding Output +// -------------- +// - $before : +// - $after : +// - [$flow] : ltr | rtl +@mixin padding-output( + $before, + $after, + $flow: map-get($susy-defaults, flow) +) { + $to: to($flow); + $from: from($flow); + + $output: ( + padding-#{$from}: $before, + padding-#{$to}: $after, + ); + + @include output($output); +} diff --git a/_sass/basically-basic/vendor/susy/output/support/_background.scss b/_sass/basically-basic/vendor/susy/output/support/_background.scss new file mode 100644 index 0000000..b141502 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/output/support/_background.scss @@ -0,0 +1,58 @@ +// Background Properties +// ===================== + +// Susy Background Image +// --------------------- +// Check for an existing support mixin, or provide a simple fallback. +// - $image: +@mixin susy-background-image( + $image +) { + @if susy-support(background-image, (mixin: background-image), $warn: false) { + @include background-image($image...); + } @else { + background-image: $image; + } +} + +// Susy Background Size +// --------------------- +// Check for an existing support mixin, or provide a simple fallback. +// - $image: +@mixin susy-background-size( + $size +) { + @if susy-support(background-options, (mixin: background-size)) { + @include background-size($size); + } @else { + background-size: $size; + } +} + +// Susy Background Origin +// ---------------------- +// Check for an existing support mixin, or provide a simple fallback. +// - $image: +@mixin susy-background-origin( + $origin +) { + @if susy-support(background-options, (mixin: background-origin)) { + @include background-origin($origin); + } @else { + background-origin: $origin; + } +} + +// Susy Background Clip +// -------------------- +// Check for an existing support mixin, or provide a simple fallback. +// - $image: +@mixin susy-background-clip( + $clip +) { + @if susy-support(background-options, (mixin: background-clip)) { + @include background-clip($clip); + } @else { + background-clip: $clip; + } +} diff --git a/_sass/basically-basic/vendor/susy/output/support/_box-sizing.scss b/_sass/basically-basic/vendor/susy/output/support/_box-sizing.scss new file mode 100644 index 0000000..bf50bbc --- /dev/null +++ b/_sass/basically-basic/vendor/susy/output/support/_box-sizing.scss @@ -0,0 +1,19 @@ +// Box Sizing +// ========== + +// Box Sizing +// ---------- +// Check for an existing support mixin, or provide a simple fallback. +// - $model: +@mixin susy-box-sizing( + $model: content-box +) { + @if $model { + @if susy-support(box-sizing, (mixin: box-sizing), $warn: false) { + @include box-sizing($model); + } @else { + $prefix: (moz, webkit, official); + @include susy-prefix(box-sizing, $model, $prefix); + } + } +} diff --git a/_sass/basically-basic/vendor/susy/output/support/_clearfix.scss b/_sass/basically-basic/vendor/susy/output/support/_clearfix.scss new file mode 100644 index 0000000..48c6e7b --- /dev/null +++ b/_sass/basically-basic/vendor/susy/output/support/_clearfix.scss @@ -0,0 +1,18 @@ +// Susy Fallback Clearfix +// ====================== + + +// Clearfix +// -------- +// Check for an existing support mixin, or provide a simple fallback. +@mixin susy-clearfix { + @if susy-support(clearfix, (mixin: clearfix)) { + @include clearfix; + } @else { + &:after { + content: " "; + display: block; + clear: both; + } + } +} diff --git a/_sass/basically-basic/vendor/susy/output/support/_prefix.scss b/_sass/basically-basic/vendor/susy/output/support/_prefix.scss new file mode 100644 index 0000000..f4e26ec --- /dev/null +++ b/_sass/basically-basic/vendor/susy/output/support/_prefix.scss @@ -0,0 +1,19 @@ +// Susy Prefix +// =========== + +// Prefix +// ------ +// Output simple prefixed properties. +// - $prop : +// - $val : +// - [$prefix] : +@mixin susy-prefix( + $prop, + $val, + $prefix: official +) { + @each $fix in $prefix { + $fix: if($fix == official or not($fix), $prop, '-#{$fix}-#{$prop}'); + @include susy-rem($fix, $val); + } +} diff --git a/_sass/basically-basic/vendor/susy/output/support/_rem.scss b/_sass/basically-basic/vendor/susy/output/support/_rem.scss new file mode 100644 index 0000000..0a807f7 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/output/support/_rem.scss @@ -0,0 +1,22 @@ +// rem Support +// =========== + +// rem +// --- +// Check for an existing support mixin, or output directly. +// - $prop : +// - $val : +@mixin susy-rem( + $prop, + $val +) { + $_reqs: ( + variable: rhythm-unit rem-with-px-fallback, + mixin: rem, + ); + @if susy-support(rem, $_reqs, $warn: false) and $rhythm-unit == rem { + @include rem($prop, $val); + } @else { + #{$prop}: $val; + } +} diff --git a/_sass/basically-basic/vendor/susy/output/support/_support.scss b/_sass/basically-basic/vendor/susy/output/support/_support.scss new file mode 100644 index 0000000..9699113 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/output/support/_support.scss @@ -0,0 +1,85 @@ +// Browser Support +// =============== + +// Susy Support Defaults +// --------------------- +@include susy-defaults(( + use-custom: ( + clearfix: false, + background-image: true, + background-options: false, + breakpoint: true, + box-sizing: true, + rem: true, + ), +)); + + +// Susy Support [mixin] +// -------------------- +// Send property-value pairs to the proper support modules. +// - $prop : +// - $val : +@mixin susy-support( + $prop, + $val +) { + // Background Support + @if $prop == background-image { + @include susy-background-image($val); + } @else if $prop == background-size { + @include susy-background-size($val); + } @else if $prop == background-origin { + @include susy-background-origin($val); + } @else if $prop == background-clip { + @include susy-background-clip($val); + } + + // Box-Sizing Support + @else if $prop == box-sizing { + @include susy-box-sizing($val); + } + + // Rem Support + @else { + @include susy-rem($prop, $val); + } +} + + +// Susy Support [function] +// ----------------------- +// Check for support of a feature. +// - $feature : +// - e.g "rem" or "box-sizing" +// - $requirements : +// - e.g (variable: rem-with-px-fallback, mixin: rem) +// - $warn : +@function susy-support( + $feature, + $requirements: (), + $warn: true +) { + $_support: susy-get(use-custom $feature); + + @if $_support { + $_fail: false; + + @each $_type, $_req in $requirements { + @each $_i in $_req { + $_pass: call(unquote("#{$_type}-exists"), $_i); + + @if not($_pass) { + $_fail: true; + @if $warn { + @warn "You requested custom support of #{$feature}, but the #{$_i} #{$_type} is not available."; + } + } + } + } + + $_support: if($_fail, false, $_support); + } + + @return $_support; +} diff --git a/_sass/basically-basic/vendor/susy/su/_grid.scss b/_sass/basically-basic/vendor/susy/su/_grid.scss new file mode 100644 index 0000000..7fe2a02 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/su/_grid.scss @@ -0,0 +1,103 @@ +// Column math +// =========== + + +// Is Symmetrical +// -------------- +// Returns true if a grid is symmetrical. +// - [$columns] : | +@function is-symmetrical( + $columns: susy-get(columns) +) { + $columns: valid-columns($columns); + @return if(type-of($columns) == number, $columns, null); +} + + +// Susy Count +// ---------- +// Find the number of columns in a given layout +// - [$columns] : | +@function susy-count( + $columns: susy-get(columns) +) { + $columns: valid-columns($columns); + @return is-symmetrical($columns) or length($columns); +} + + +// Susy Sum +// -------- +// Find the total sum of column-units in a layout +// - [$columns] : | +// - [$gutters] : +// - [$spread] : false/narrow | wide | wider +@function susy-sum( + $columns : susy-get(columns), + $gutters : susy-get(gutters), + $spread : false +) { + $columns: valid-columns($columns); + $gutters: valid-gutters($gutters); + + $spread: if($spread == wide, 0, if($spread == wider, 1, -1)); + $gutter-sum: (susy-count($columns) + $spread) * $gutters; + $column-sum: is-symmetrical($columns); + + @if not($column-sum) { + @each $column in $columns { + $column-sum: ($column-sum or 0) + $column; + } + } + + @return $column-sum + $gutter-sum; +} + + +// Susy Slice +// ---------- +// Return a subset of columns at a given location. +// - $span : +// - $location : +// - [$columns] : | +@function susy-slice( + $span, + $location, + $columns: susy-get(columns) +) { + $columns: valid-columns($columns); + $sub-columns: $span; + + @if not(is-symmetrical($columns)) { + $location: $location or 1; + $sub-columns: (); + @for $i from $location to ($location + $span) { + $sub-columns: append($sub-columns, nth($columns, $i)); + } + } + + @return $sub-columns; +} + + +// Susy +// ---- +// Find the sum of a column-span. +// - $span : +// - $location : +// - [$columns] : | +// - [$gutters] : +// - [$spread] : false/narrow | wide | wider +@function susy( + $span, + $location : false, + $columns : susy-get(columns), + $gutters : susy-get(gutters), + $spread : false +) { + $columns: valid-columns($columns); + $gutters: valid-gutters($gutters); + $span: susy-slice($span, $location, $columns); + + @return susy-sum($span, $gutters, $spread); +} diff --git a/_sass/basically-basic/vendor/susy/su/_settings.scss b/_sass/basically-basic/vendor/susy/su/_settings.scss new file mode 100644 index 0000000..8b439aa --- /dev/null +++ b/_sass/basically-basic/vendor/susy/su/_settings.scss @@ -0,0 +1,73 @@ +// Settings +// ======== + +// Version +// ------- +$su-version: 1.1; + + +// Default Settings +// ---------------- +// PRIVATE: The basic settings +$susy-defaults: ( + columns: 4, + gutters: .25, +); + + +// User Settings +// ------------- +// - Define the $susy variable with a map of your own settings. +// - Set EITHER $column-width OR $container +// - Use $column-width for static layouts +$susy: () !default; + + +// Susy Defaults +// ------------- +// PRIVATE: Add defaults to Susy +@mixin susy-defaults( + $defaults +) { + $susy-defaults: map-merge($susy-defaults, $defaults) !global; +} + + +// Susy Set +// -------- +// Change one setting +// - $key : setting name +// - $value : setting value +@mixin susy-set( + $key-value... +) { + $susy: _susy-deep-set($susy, $key-value...) !global; +} + + +// Susy Get +// -------- +// Return one setting from a grid +// - $key : +// - $layout : +@function susy-get( + $key, + $layout: map-merge($susy-defaults, $susy) +) { + $layout: parse-grid($layout); + $_options: $layout $susy $susy-defaults; + $_break: false; + $_return: null; + + @each $opt in $_options { + @if type-of($opt) == map and not($_break) { + $_keyset: _susy-deep-has-key($opt, $key...); + @if $_keyset { + $_return: _susy-deep-get($opt, $key...); + $_break: true; + } + } + } + + @return $_return; +} diff --git a/_sass/basically-basic/vendor/susy/su/_utilities.scss b/_sass/basically-basic/vendor/susy/su/_utilities.scss new file mode 100644 index 0000000..b737f21 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/su/_utilities.scss @@ -0,0 +1,111 @@ +// Map Functions +// ============= + + +// Truncate List +// ------------- +// - Return a list, truncated to a given length +@function _susy-truncate-list( + $list, + $length +) { + $_return: (); + + @for $i from 1 through length($list) { + $_return: if($i <= $length, append($_return, nth($list, $i)), $_return); + } + + @return $_return; +} + + +// Deep Get +// -------- +// - Return a value deep in nested maps +@function _susy-deep-get( + $map, + $keys... +) { + $_return: $map; + + @each $key in $keys { + @if type-of($_return) == map { + $_return: map-get($_return, $key); + } + } + + @return $_return; +} + + +// Deep Set +// -------- +// - Set a value deep in nested maps +@function _susy-deep-set( + $map, + $keys-value... +) { + $_value: nth($keys-value, -1); + $_keys: _susy-truncate-list($keys-value, length($keys-value) - 1); + $_length: length($_keys); + $_return: (); + + @for $i from 1 through $_length { + $_n: 0 - $i; + $_level: _susy-truncate-list($_keys, $_length + $_n); + $_level: _susy-deep-get($map, $_level...); + $_merge: nth($_keys, $_n); + $_merge: ($_merge: $_value); + $_return: if($_level, map-merge($_level, $_merge), $_merge); + $_value: $_return; + } + + @return $_return; +} + + +// Deep Merge +// ---------- +// Return 2 objects of any depth, merged +@function _susy-deep-merge( + $map1, + $map2 +) { + + @if type-of($map1) != map or type-of($map2) != map { + $map1: $map2; + } @else { + @each $key, $value in $map2 { + $_new: ($key: _susy_deep-merge(map-get($map1, $key), $value)); + $map1: map-merge($map1, $_new); + } + } + + @return $map1; +} + + +// Deep Has-Key +// ------------ +// - Return true if a deep key exists +@function _susy-deep-has-key( + $map, + $keys... +) { + $_return: null; + $_stop: false; + + @each $key in $keys { + @if not($_stop) { + $_return: map-has-key($map, $key); + } + + @if $_return { + $map: map-get($map, $key); + } @else { + $_stop: true; + } + } + + @return $_return; +} diff --git a/_sass/basically-basic/vendor/susy/su/_validation.scss b/_sass/basically-basic/vendor/susy/su/_validation.scss new file mode 100644 index 0000000..4c6ab8d --- /dev/null +++ b/_sass/basically-basic/vendor/susy/su/_validation.scss @@ -0,0 +1,57 @@ +// Math Validation +// =============== + + +// Valid Columns +// ------------- +// Check that a column setting is valid. +@function valid-columns( + $columns, + $silent: false +) { + $type: type-of($columns); + $return: null; + + @if $type == number and unitless($columns) { + $return: $columns; + } @else if $type == list { + $fail: null; + @each $col in $columns { + @if type-of($col) == number { + $fail: $fail or if(unitless($col), null, true); + } @else { + $fail: true; + } + } + $return: if($fail, $return, $columns); + } + + @if $return != $columns and not($silent) { + $return: null; + $warn: '$columns must be a unitless number or list of unitless numbers.'; + @warn $warn + ' Current value [#{$type}]: #{$columns}'; + } + + @return $return; +} + + +// Valid Gutters +// ------------- +// Check that a gutter setting is valid. +@function valid-gutters( + $gutters, + $silent: false +) { + $type: type-of($gutters); + $return: null; + + @if $type == number and unitless($gutters) { + $return: $gutters; + } @else if not($silent) { + $warn: '$gutters must be a unitless number.'; + @warn $warn + ' Current value [#{$type}]: #{$gutters}'; + } + + @return $return; +} diff --git a/assets/images/image-alignment-1200x4002.jpg b/assets/images/image-alignment-1200x4002.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8e3137cbeb1dd814d2aef411a30b5434a69b83bd GIT binary patch literal 35514 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 IK&d+a11~%bH2?qr literal 0 HcmV?d00001 diff --git a/assets/images/image-alignment-300x200.jpg b/assets/images/image-alignment-300x200.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3921878b2e096cd8b2f37cc26fcca3e6ca43666c GIT binary patch literal 6446 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 E13w_|qW}N^ literal 0 HcmV?d00001 diff --git a/assets/images/image-alignment-580x300.jpg b/assets/images/image-alignment-580x300.jpg new file mode 100644 index 0000000000000000000000000000000000000000..75bf08e90a97103d3ea497b3c9d8e17f061336c7 GIT binary patch literal 9082 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 literal 0 HcmV?d00001 diff --git a/assets/images/markus-spiske-207946.jpg b/assets/images/markus-spiske-207946.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2f6de5968cc5a9b4d35654e8d83b2dd1ea6329fb GIT binary patch literal 279954 zcma&N2{>EZ_dk51X-lVzR9h{*k(%e3n5r73rWPe7hN6au(29Aw+G=YkRbyi6MMVwa znu)0cRfIHRD2iK3grbNl)qCHQ-tYZ=f6x2;pa1)==ZTygd!M~OYpuQ3+H0@#_xry; z0;i0_uwDRg`LZm)3;dV<{tO79f<18I00e-7xAg$v?~nULeS(5+=_o1r6BONU2Dp1F zdIaE=!rX2tsVFKd0ea`dZn=5jJcHowp59o0eZ*R8CjySWsgFQwSSnlIy6EYHHH`@L zw2iR3<`IGOK;A^0H-PJf>4f2L;XQ-g;9+<_e}Yb!KH}%Yb--)xZ6yT!XOkeDKH>s* zRQPqvtMH2ffu3*;MNI_{WfgU}7E)0~LsJW>B@b5xe=8|#E2%0gC?j<=)O3_p;r}57 zI9lLMFC81yrT>ft{?bSM2UKWisA8y^VnCp`k_r-uR8m$|QdLy|TPP61{e#@X6#NP2 z{(S<IMBlrY<}+F&LHpp?*nlgg0s;<1$YGGJ^h0&qx2Er9mSj2n>rWO zw2hQ6UNpLdR990`G1f$Cs2Lk+D6453Ur1lAUA&x&wu-3|J(P%|Fy5q z#XwKDpn$+@0RevhO7E&qKu`d|C*T(R;>DlRf}^qiHv>WmT;~2~uAYI|5YL;J0t4{y zpWM;G{;wIR8KE>ZRW4{~T~tSDYbtAByr`_KsiAu5f`*2QimH(Y;y-=sNaF0BLBS#Nd8n$;N}Z(!9ex_LePB&4jly` zC+z@8PBg$%@(_R;r~W+&!~qAOQ0RW>f&Kdr@Erg@hj|Yi;5~fg(4oVJ4jth?@{{mLxFebD^}_yHas9>~6Z zJO}puYybhk`vOowe%OAv*l}eQ!>czgAcR!U9Z(ZLVWcjhApkOFALIbY87TAs4}|9+ z1Q6g66WphA!P*T0gYw_Lqx!_?9Q;OMjm`0w40koCFbFtBaL|2F5C9h# zIHH)!1%7Kc`0YE&PYMmc)V#dP__%)K?+M_@KCrRCJ^`>1NBM2*8MBRB1Z6=Bi+oX` zLI=fauM!1H{!|e=)OVn4puF-;G-;C@byAM_DZQ?)*7gGuDQg@UFUSM^Jr$lNAQQ*O z4?rZcN>%iXE3L93bPF0rIa1~9uAValUE#?BpMi)*YC*uYpiA}>wk5JTwoyxsQ8ds7 zr(dc-1XbY8uE@lP|0qKcL>ya%8p(mlb0%FYBOhlDzk9Jrr+@u261Mtvi9^uWi1Pmt zBkHx8`FY*_idSZEvA^@7f}EQxDKVm-J%fV#FCNQX_9&%~RpEyEHv)`5zZ5-%iQ*s- z!z>GOVp?oT-&vg=Zl#LS*f6#G*~`CR1_PjOHxoEWdW%ESGuZX?4ZiqC)TR zSZ^=^zZqQ7-~J}RUIBY)*`WB$bz8v?R`$)`6q<0kHJCpav@$VFDJ;_-GlsD)u~cR@ zX?z{*OB+oaFem4_PYs?9-d|sWu0D|>i5OvPSw=RXje}cw451eG?+y+lIsNssIFWNC z0+7L%UStL`;#_+DS}-V>KrEcWK6w15oMWCk3C{r^m)A~4~P4`AVO|BBG~7BG4u1m0rbM=Hn}>MLXvhZ)Q)~>Arfq zfV*zoOhkCOzwNYZ>l#1Nk?Wu_oVZ!78PhTcPXZt?p?b*H*=RNSE{0PN6iyNoPYb$s z-|K{&;pK79Y)e1G0>p>W8;3s9x{R!);|s3B1f+>*9I8-FU_zU;;3av3p9cj1PyS~` z+R9{ccX0$m(h!-IVGg=L!9T~-DKBLhm>>H(EruMyMay=fIHyyS1I;ui8hRG%- zX8F2ZMu$Qj9jd5XiIt2EY9))QRjt=)o?97_)vkL{i?#gt=vkM@He zCImGBKB6Jwm^DOT7zG(dr3;81^8=ND6nh&BGQmwSl@~<@KvqDr9P>&OC;BEml5m@? z!qe@t!Cu{EuXHbtWU7uO%LP|lP$yf~*#vK8wCkV)Xq+6=S5V+xBBj zL&*@55ExHVLp{t7rNQH?G_z@#=LbEEre4f^9Y+S0HwqGjW^{Kul(UJbpnA53t zXeBXP#Bx$(CD2G501^@>fZc2Z(rBI~f|Ozk=Mzse>z1q#Lh$M6=tzni8XgevCUxX*R4@avTM=w z^Y7lV7y%a(j_l0`kG9SvZK3Nm2M5nu6?(c=dUs5Bg}!?;{sYNSaXQHdgO$&d;l+v+We1uy(tS;I3B;h%y%z+>}=ko(h{3**cv->~w zSn^!)^MrW5_*8LT#8o0`!HFz+1K=?<=vs95&+l3l z>BcX?;r!w}5_}04_!9VH`S`^FuvaX%|G&T{sZ$?zbtpyS+g7-`qrOi2lznrI@Dw85K_%i_b*DPZGfB1)YhtVw$k=&g;H>{kHsk(O<`dcF z>+D{ID6dDGMcjJ^y3 z?u__(jC4{_l4T~hVFGq5v|cy>@K!$Y*|*d-an4J>Z``TH@Pc@ng-lxdVL59c<>N5w z1u^c086P~ZD;D|!FolA#7uVl#37R!yfC!_kCi#x8+GB|YmWm}L_Ml|BO?w{Uutp=-H~Fv^4Qu+GDn@j%+)B+ZsHiY8bzYdFz0$!d#E$S(2VL5%$waP zs%z#1yRTr{FKH}5bQ2fzt+8tTDKlS-avGgv0^{N1=P?8fxub(DHsrC5mjC>^mKaaI zO@D|Sdmf(|N{yU6UmOUw5O6?%ir7+r$@`qC)u1F24x~TduWIAw>C3gFP@@|_Y-%bf zC_o&_2i!qGV`Cw3IQU#1^MI!U{&HReiMoXm-N#!k8v<4nj(=jD zZL8HP-iv5To?*4V_o=EcHe+qO2j8R=T4OF%A6xyXmw`R@(Z3L;K3x`ICGT1)+c02m zBH#n?K|tPdbpr|x1m%#>RB%4HDfcD2N6WO;uhFer4ei1fuj~eN0_%f_P0{J-1slc5Mjp?E$xj_5EVfH_12L4*myy3H3EQm z9QcF#yXdFMm?HXadI~e+Y{^ZSQsa`_b~PnBV`c%x`NZ}BI~>dPS1+&7VzWXH7LctNykM5y+o@ODq&Vmci@0t?x?SQE;4=IIH~<6znDRnEA%TN~KS6?K zW0QkBh1#Fv`;nMr8P`j&?B7R49k+`1_DGRaW$dxRKAd^DMpdcTPA)zK(^L?@@(9st zUvZO6Y89%sP#mPc=UrdFjdR;Q13ujB^RjbE8^J^V{h(&k@_X|8s2FpRac1}xT=<%8 zL$p8aSdlIzSaP8BqW<%q21hJDAh*+?TFWjZ;i0u`z<|y=&aL;2cA4g^&UY+cGG8lU zY8QJ2trS66w0|^oE3`CsW`D6Mzz0Bo7gKSF|Ks4uPQ8^wXoixA5bc5(Oqx#`TyKbH zhT!&#i_i29JPm+DUx3Q_4?(0`Eh;GADBl}H@ZB@#uUxI&^3N9;v#;rl%Kk0aW$WSh z@SQY0QH@bT>urGn-kC$HdkT(w%e@;J$5v>K274Wx!foc=RnL|u?q z(=TVUpJs(xWlp%`^r!DPHtzotr*Wd_YtCFT>*I)f-{{^_w-ly=Nr?-_<{H@av4xuWTCGZp`7vf^CR>EQB~nGSsLx9#4Qx1T>f^4mV}b!gDTSLx_{ zux5D!wqJdt+Lu_v0cb4Ll%H7Hb$#Em-h`A|u2=AE z%dL2XEksO0jgKZzK|#cy#itq?3WzCl!Gi7+v}}f8RzMsA2Y{fY`ZrXzvp>5frE)#M zF38m!T_o|!u^&?wtb?p?m@O3*o*Ppu)~!AskpC|HNY=~UfiFEw-Q_Cd3RIC>SchcG zZIuY8Pp!?473wYZLknY4-oWRy>a}pb` zI3Qn;u~t36QSTp|yt}3a4H6q!Tx3=KX7X!r)l|@$r9=Li%HBR~efa95no?9o)eXZ~ z03>m^IIo4hDY%cR!o#wHOI6pqD#QSYi~uTw=pcjuGJ2IW1RQuI`rN$$&@U1N0Uody z_mc_$Iz;NXF=si-q}9yX)xf1}TPivLg?m-DGSQmbK4@(Z+Ar3 z)@Slhb*vqTiOFvncP23IekZ75m}H&XNwR-p3mVaz_Ve#Hkr9>{pKWx^d~ipZuBGj9 zkz!iN?eKQ5#6@Fn!U0^B0MyhB;a(?j;}^=N4=Eo@8!xdRxX1CA*3L z9-nbgO)stx4voE|EN=LO2L<*t1PvG*IB1Kh@1wd<7a5)Oik1&;TD&NW3sLe3{X^}q zn={sUZG!5Us#7A}x%8{^zj!u;RQd0%cn7cLU~Wvw7kr?3m)Htfs9DN)L{BC^))n=) zSgH@Fqbn9w80n2lA4eWGhUtq?PX*i38#Ivl4G}dAN}IR+Y0}KZCeDv?-)4~LRZA&; zo@bBL-q|!>$3^H&<@*ec^p(X`3q2#!#-Oubo`6#Y3ECCQPoxxy?_18B5EsMtx7qpp z85a*h@Q@_$lNm9_UL!UeL*KT@94G`Q-MC1w<_an5WB1f*G6dJR>V`<&B3N zrTb5NXa+Eg3#g9vZ(Th5wQ^m&^k#0>Scb>P7oRM9dI@c!NETJ_uD)8ekoo(^-e2(y7L_%$M^x&CFv#t2t-^=?g zIC=eN`~4-RBPvRSnRG8@lcbcu#0I8rQ!%XC%H8ND>J>CL7Mvugf1t7^#Mh%@qY1g! z-rX-%Tq0{{O9O&}*2>RbJqM+j4wFvf=SRi809%7H=gOW74@4_E;Lki%K?!1Bk{X(e zTvo8VmffJX&LWe1u@f}E_CLzME;Y>(y;*(JQ@`LE^RI>HXRqU2iyvk!Pg18BAFcec z;G4BKQ7;$qRSP4gKJ?mh<*aP@cGPqTq1vF-yP?0BK7Go_>+Cqvd?C=E+)|@bOB$`8 zf8Zb08??5FFAw6VxBU$mRa|tKwl*$q&d}9c*_Iu9efSt|hfJwJ+cOvu6c^8tAX_jXLl=b$&vVR^1%vKxT9}OwysHo-ctQ+ zvRa3+NNAMGpJS?dhZZk6A1YWcN+DWAWD z0%8VMXD({G9kYTe&u_+b7A_V4c5aMb`1-T1L&!6Y!IpvE>eHL&vq)RZw35n7`jrEf ze}0XazAHr!u;^!=^#ieTRS*i83cv(>5`f)p&4l=VC1b&lBD6S!A;PC#M!8%Tw7Ok= zfQc%M+gcDJNW7yAUi>e>1vz+Ub#EQ)#-~+%tB>QN!ZOwSPYhD=#Sbl4$|&l(vcpAk z>HP}}!T1JpMfe8+0n3$}ljyqPDhKqVa`*N!d+O5WmK0+E_RE(QPp`h5zCjPa^XR9G z1SCxKWzM83XCviO82eIs(C23i|K$3)A{wge_CCB!Bl?neJzyT4W?C!OlZZKJdFNpru)e5 zDNNPLq5_xaA7@CxzKbCrUFs>qcC2c=c0=AX46N{k3tdB0C$F8(ib(I?+;r}U4(T89 z=AEu%tvwmftP#m{JibVe>T3_e>RTNfEBsBZ0+Wup|HDjy&i3&vz4d11sC=X2@SBxC zx9k>XIZIOXwREJPC8{{85SfF{+bvJ1+Sx>Q4cU&vL{J;xjGmTVtF9>p_3jrfWL+~4ba;+2q zIH-5JM96d=XId$=_q^La`xtwD@oj^O)J>U&7QcXjR_%b1cc~3!!&Vs%my_IYR|{{R zHIHgPc;0uhckI{8-E0rex+|ubY&GA|FjPfXvZs1E>W753^I7_Up_;ESITYmRr^QVmftYN6FM~jeo$tM>bgUnJaFzbrVGTc*KdR2`+BtMqE=x zb{7|bnhAn=0T|Sx4{iaD0Fogfcn8h{@bugNKt3n$*`mvup7l)}ugcJs&d$hxUiBrb zeqpS{A->$%}*O9CrlJ7~pa(=gp?|16z%)=0o<==hZOv$fx3Kb164D{rU5h_ATZ${|t zSt8;`Wh%i8Il|E3b$>a53%$M~XH%M&L=?ObX%uho4o1or7QdtTVcgX#$hC7^;^zfd z1~k5Qq|?P$Z6*<0ZK>~d(iee1*9Sh@)2g=grIRNnQ&J@HIeXI&yiH_t3Al}Ig{b#4 ziOu95-E;aadEqmnCz>XDKQ0zlDX@N5F*mMr99b@YIMiLcB7G~cCBGrv;0k4S`lgqW~ zS1jc?JN5XZd8F;~x+@y~$C}xAv1okb18|AhmAzSJpd|tM4YL4^yvDHX?|9 z;Z{wGCD(ii??26M)tWlCpWRuP{+EbF=n{7t`~M>{$@n2 zZEODf#$<8g+tGLz(%U+1Vv52IA}YzzPhjBcZAEf~ef?Yhe{k0Xg1FU`WXG@dfB^4$ z89MXP=io#)HTsm0Vj(QtO~Y^gzJ-=at87mdse7OU7?g)!D(zO7Pde)UoEZCk}A zrMu&yaCQ9(HN*=@8Kr0gxQh2!0pdnO{8|?$)vHyf1kF!yqNV(xweGA%%8=zA0 zpovy)4xn2OBE_1C@uLdi;AT(^dRdu=8%Kh~-G1{~W`X#!L3}>b_8%6i$PtU^2r~`^ zGoPRJIFKFcV&_uXf9~vIWO!+H(+v4LD#g}WaToV{>nGxj`I)kfJy`hz-R#lQ8gq2pzVR10+J|%B!VFb`D)+{ zOM8GXk?RipGmbCK(9sQfpKF7Myu=N`2n#eu&^T~E_aBWEjO9MEac8Dfb%(QV8MMB{ zX)zbEXFavTpA7OA4P!j0@Q9=ac5Ib<92#lj)oi_8Z5^o4i}z2?zxZt1`OFO6RZ%nw z7mD^ee|FNzaZ|b4F7U_MOMBA+YHZg4ywJiz=wqF&My(QNzO?vZEKU~fICE5wN(eA7 zE4B6^j`Tz)Yg2Q=2U9Gjq#K=M0q_V>5DrGXVAfJV{3Qf#dV$9f0w)L>gMshoJZh?17l!7 z5EHe^%#7L%BTpiOA}oq>0>>OXmI9SD^IBcC^f3dlYwGPGP1w28fxPOvg^-!5%N*Zl zKHUM7PLj)>(%g9Z%Z}0$13~k%t(-~LQu(m&ll#oU;9E-=`IsYJc4MV=0qMRi7<+MR zIwdd1&NIu-!L?X#wJ-Fs-4@d=%Zh}4q#;n8ncg5x`pv;!XQ?Xxl^Z@_kmN^~d^B6t z{K+-FK$g&(uQTOB`O?-bfq(U$mebCFNDChBl_~!h zIPuO^-fWo!qss!&w?Hg+tpWf_kO;<=;0asP;16ULy*LNA6xdn%+Why*I^gJa<~Lgc#ZPCV9N&)4-&KJL_tJ{v0Sp+AVn=SyEY>8*Qw ztl7?Ql|bsz%nE7UU;GEP?v8iqmsT8+aP-7z_UP0uNoIh(Vd41gz6Slb05vT$%%>2$ z{D$x~yjj3CeSar>ME=4uHH$5-wyT{x`7p4iyYBT^vP)FuoGZD4<9fJuyhd4Y36VQP zN(IDGUzvn~Krsngx<>aA+)mBL7rz2xxUc z&#Ksg#?d;QootmStRtnfxeC3;T|V@Q71tX*XLVVQ&`QNahD2dy&ALflNOoD@n@$_6M2lv4upKAS^3 zwcC^i|X3VS2O|;;DDI2}e-$5FR)1uOK(qEyr2F7*xqr-Phm{C#Lc8 zeLK#FFs|l($5Ql<>B}#SRv4eYl<#rw-9lf!q$e>)b7A6H(0$5Nhk#sfhyF=cuG)mI z(ddH;uM@B9Zz57jI7W3=0c z?q?#VXr35(i?*+NdqvD^MP5thx?38|vA%xRKz@Js@KL4i#yES7xvH{jefx^86jB<6fZM7>*3&mbrsIhYDP?D>@$m9^p z`<1hvI4O}Fg}+kRE=PqgXjrW~Va_>Ds43ITPLMl7thNH{G-|(Ac1;QnXl(q@o77`T zp(w(eCUQC|G2~Mv_iwRuVKrw6hY(>*WYT#D6N^R4uP=ETF=&zP*6fP*>Ve`%zrU&p zOUY4Sl-I9d%+bEV)#n{I<~ciWX(N`i@_^t40e49-YGn4-svWv4>@{_*89d8^9lk7l zpA0&tVGFYLh`U{;n;valniQALV+a_Uam5Spz`=zse%BD_*uhlG?gVdI>KlY|-n+cd zxnI-Xwp${sfSdsrmHCOhZKn@p}5w}2;(@wL>@6A4u=?|t1ET_Z>TAm~d< zDHZ49va51GwX@%KE2(&6Bc2U9i&{oh)mGnDIk}lX?Z2HrJChYMDogZATWt^6J$paZ z!~i^H)S|up%w%%DpB$YE#JdLQjABRq;WbXxd#9QI}&XTBQ>{lXyT7F~?3cK*oE&?^TX2-w!V|FapQ_;Q?{kZ=k{_ku{CQtvT1;2QNN=*J3iuj zu0*RPqBTi|9G36YKKj?abc(a=h$5Nzu08kGWHxdj8|EUp>Tv=$QqoY-;_H3o8sLz8+>Wtg~9=P)K*sf<0=A!IFx4zZr4;+1mxpg||eL&drtq`e@^sJ3x$LxKl1LQA zuKhQw6R4lauC0@EI0(!jw_50GD{U`zp|HxROs|2dkWKTj~qp7sENOd~@kIcTR|RW>vOF z`{X8jP;GzPUx}e)x|M-%=(~mGC4~fLe?yF*3O9 z#Yiu4GA8hOWIfijoA652SS7EN|130``XEK9Xk=w1T6gyo!&%P6N^b2{GV;`$ z46MJ`)P*({W!u9)&7FGVfnLQlL1!C{H$rrK2|~7}Ew9x}XZo4-dA@@4@fhQIX-X#tXsl_h3i$*Z|v>+?5YVz;Tc z&Jm$j&s=lno2IZT^Sg4_7ujz=8;P_wv4ZyH3y-q{cLt=VyhrV~gw>9XMrqdPt^N%> zZHTaWYNDi8q8U!DuN@Ipo0p$~xf;;b3MM8b%W!9VDuxHf9{+ZBO{&pxd`7rE&!xn^ zn$N4wt^ys9FdC)5(>7)^bU!5j>{Ii1Go_?QxweUuxfiXyaPmfFab&fi{=StQ1v%2f zunbH9CgyoV^6M&d0$CDPf~#ki^!~?IQu@p54$&$k{HmM~;Q1t1C1^JB;!Bb?5Eu`b zJ2B*kfvynb0RY580X_jZ0Q{E;E!eu33>V}`YyKALiUA`zgH1U-mNVyc3LmU8!2UFu zi^Pa!8fXBVMo+8)}?L6W_<)o2Za@R{uO3 zCc+O*OSKuXa>FJvdc~g^Lc#38f71zEr(hZjc09!_m{LV6mX-Wabj0ucP{|x(*Pa;a zrk1QENmZTMy=6;(QF>luGV%nP?rPwCcE)-cw}7wPbIIjUN2|1cds65sxh6--nLHo4 z7-7&jpz!HdV~URLREp-eRqraR41ZjAS-x7uk#9{U&l&`4qId`JDn_AoU2BW(CxRAw zT+S*gwJro&~jR>c^ zlF!UG&84(d*qyzf$tUehyevXyQ%*03O<{57WCsqiWs%-YB!_))u{lXtjEJm3I^3RQ zZM>4J?;;IOh>Grtit0^R*CdwF_41Lgj5*60O!wRijcQ|2Sm21lf6jx zs1|J$G~V>k`@E6xpGV5Eyry^H0F>MECmHf^nRGyd)%d<5+re4?lJ4#i^%_2@oPq6L zD;tbcL6h2OeIfa#{QW19%Ml8u?9KL=V3W6>TaiuGB6542`J|4A)$IDkV^_|rJbt-g z7rD+HdTNz?E3mYvy?QBl`s1#Z#&W~u>*V47g->-4NtTjNO&DLFH1U(yX)n#)Skb@y zN{Pmn1Ws*jI%0zrMio8nYk%Mida)lb#$1=L#F$NzCq_rT!c2G=Ipa5Mnoy<8TIWNE zKe=iRO*Qs2{vG&wYT2nJ^+N9}#04=PGn$k}ksSg^a~Fp|zg~BA>;(P!({#U5Tx+)__p07FK^TH;b+)9%4^Ay}sH-&$Nn( z>gafk7B#~eozq-ae)Vi2$km1FiP3oHI8o!*H-A%dvji9T&`30EXn3MU<7J0cs7kUG z-P~o&`Iqjhq;nb=-J4(58oC?4+tMTT-U}_y%zy5v>%D35QWVRI)K=383(El@DpKNI zy)F2I~gjn@`WnjWU@t z)ua@KD+(fYy*e~Hzz-S@eB~2YIoU<+`WsjjSKIs{V<(BJR?{7(EDix_0{O$E?vjL`I`bgze5Du zk+jSxt~T$pj@sN}LDx{^V6_I#=V?AEc^^E&Ut!xuA{iyKhTORW0w?5r0DY^7m%tsp zJPSjpc!HdAWj9Qy2rOesDU>EwN|6e@+^?pB=UHHDP<>+oo~zuBZ`!`P3f=y^+W0k$ z-J1MaFu_(7-I0kV%iY$XDMVmk!>6k9y9nacW-X6`PNj0&8E=D-7|oD6*MQI>y3>GM zGP0$2uwazgiO!kGwh3ZaDZa-z4&>U6U>4@VBGwtXZ{e%Y&c`IjB$I0=wo&1^beG?n zDbN3ELsD6Fuh|&PZJ!s*bFHOs7_W8p25mB1W7<a|Xg63rG!y995h zP;>asGiydifLDvC<0cqrfFytct7P;IA`JPVQVA)BX>Nk{U^>i84h50Ax`c3-fY4e< z3pY)TplP5EgFza1+5XHddALL>r8RGDV>Sj*Cti-uM$mk2un5u zje(KiP4anzELKP`S+T%Yn6gEM6!bMQ(A96Z#D+a_0O^+k1C~o|Ma7VzA$SN9T=%l=ON^~ zF<_l|XjgVi3xA?zAwPi@h_%OOOQ>C2N#j(7YH5i~pc~e|E98!q_lKS+`bHZvK}=cP zN*v^I${1x}3?Xc_As`mM0LoIq$Kg25KAy)AJjLlUE96_anE?TwKx0A7AQ=KAD41RY z ztkq;0y~CFx^hSc3o|d^h@TwiephhV>a+BG%y4ZQILZ=?YSe!Z?W@O%l< zFAYeAyMRvFOB>w2S%~u`#+gYP0kM312(B9k=?+{l7J>jE$>G!vxw%OprtQ;~J!AxZ zz`x+Z!}9^o#OzPDx%cX`8BXivV$`t`NwZ|LFI?a@}Dmn6zkWc;FaDAQZ*W_K-^ye-qO|wgTyDbwh-`c0x!g!}UaK-ZdOr4w;kakP( zEsh%rh6o$PA<2`*svp6VX+BB8ctcdtO*k)bS@|DUfEL~2cQ8OZps}ztPI>Hb8t2I@ zruVTNu55a%_~dE4wol6}UJWGHZFYVK%8d zKiuRut(*xGdw6p@L5c#K$ed{Tft=7iGJ@$bkRNVrGTLdRC^()Nn&Q;rKd3$Qz941ihtAf4 zBL9SrilPA3h91EPN7m=s##N;$uig?-5e!Med}rX3NLpOAlj!DarbgWaaFqH14iV#x ziw6!#N)w-hJScKwjM$`jLIn_p{6ydh&rQRh3V{IaK6vHf;?Q9}H(~!>Z?o`$Xm?Q1 zA~TyS`W^p4y0y!EHE+?kJW{pD-j*wNf<9f@HDYc( zP%=V{$LXdEcQk3v2Rx11b|+2;oZD+#Vh7dxe41I?N){fUdpPjgxX@X#qluFfvXjzr zbkN{ldP*6iEplU*Gx26`%YC@V>AlBT@*{$mMpJQ(MRVmsFa9iHc#*ce1ZKqn-ZV*D z8OTYR(;WqScV7uAroJR5lG*#++9O zcUCrqo8C2q02ZfBw7PS!gBo?RNc+F?sV29zjHwA5Kb+3G7U%1=#&YLyN7ayr`wi01 zLbd}GfAGja5Sq51hw130&Eu|PVh!ULQ0sFyLS0rCfI}rEXf$Xnw>=o4nR4T;e$9cX zNPNOqBCa8`oM_Yd_idvQti!&S`*Iblar8a=Z3B z*MRbg&qLHii<;|csO#KG#KZpy6~JoxMWH!Dw-bx!T53&F3q*qG6x#_ui`&%ehaS z4w^?FmUSPSX8KLC*vt4MD{~?JlLS2N)o7wS{=U#tAx3Y-{B2f{!;i?@t>@x%R7R}| zFJ;cU=Z;G9#S7_|HGoSz;$RvOlHB6u+o2z7+&-q66VxPW;h9fQ zc{6o7n{ij*p?OdKyM>VrgGbJfEuYBZ>A`N^nr+x>GP1FP=R*_{b>kgZh_~aVfY*JZ4hpuQQ9~vn1U9zFQT5_P)>aB@Y&RzNKLdrDNYA=S( zYPz*xKCNRWibOAM;4a>+FD4UCl<~R9=6u5D3>O+}wV9fz`D7DRREDoemx+Vb#76(c zn&JqJg@9FNh?9?Y?n}y|U;^VR;JZSxPhir-JF2n71SILMq#?q|kpTwB;DQ9tJ>cLj zNG!R9k8;2%%rx@FwrZa;f6QLO6ihQyK0gJDA!n8aaQ?YzK*YInkZIcqY z^8i}vsf$SbN_n)iE@sPf{YxoBdW~6@nbxMOH7iBZRdJ$O7*{O+<=u{{zfBzrdKB}) zg>&oD4x07F1OH6+6{aI=vN-f{^%>JTIlJT!Z+4rVW7-;`kDP9|k(78|K$g}?kRTy< zdY&4@9CvWevz&Eb_8a{1h+Q;f`5-20nKlv$zVw5)BQM!YI8&TUbH(Gjy$~-TD;r?s z#H|v(ch7+F)W_aE$nhorMnB4V?IEgO4ys3H^RLHhHJVIg^?nQ@e7UB_cUR^& zPX+JH-kx@ro71Z?9AUhwYNcv*_(|?SPj>(7^zo6FrkLR7M(vOK9$JwrS1{IAgvycx zW`)D`M~;D$FP}J}hw{5;rAPC1L`5Irs$qv%1rmD9g3RgRX}d`m2~W>Tf~!MuG=aL> zUS$tv!e2mERfc$Z#6eqYFBS;1^O6B;gHmI~;Jj&W(!><-ZK4b_RIuZuV^{W=S$!u= zyek%55zrSpIXbPix+k>y5V5d%0A)`SC8e;*n!!COh@R^Bq?#EjI$?zeeH) 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

{W4mI8ijf@L3SY#!p1qTKut{%$Z z2Rss~Yv7C_3r4$zAXYNm4F%%NL}^lRV!NL0n}#cm!Z0llWLyD`XdljIjsgI92h3XD zq#M^?>K5dd9RZ>87jP2`*-L3wuu`>aYUDtUy&1Ke2Avjs_Ig7|OmSb4G;H03PMn z;yl>OOGC5oGF{u<+*Z96oJ2M`kAlvrMuTiHbMG(?TB$zK;}|IYhk2P>qm=`HGRJ{c zVP)|T4z-pH1k_?^HwwYC+-!$<)kn)N33E?w9^%9(EYb*bTHn08{x%o_{<*uD1UG<51gap;4%KVgEEQa1#)$Q7s_*y2sstaFyGyeE>&X{# z)}2I;7gV?^EteC2@QR5=fFJyc3|1Dss^xII)e`5u#;8h#RtfikzyijqzuX}!wzaS6 z0dAAkcc&4LWI~EI3~k~oJh1W}T@Nf^riTIzfD4KxjGSA`oozQWUpNVK8}>DDF;Ig< z3$Sllyq__%6u5IKk@AJY;>Rk zT8e`$aVvclYsJ8o?m$h~2VqU%Ks9BSSgL}hJ>ZRQbP05bp;E;35}fcA2PsU;31G0; zTq`inHj9J}Jb7YMAfZ44tAIBvFybhbeX%TcQ>g9$(uEmzg#y%t`HVfbYBy;q!>i3?>%4Wv(DpDu zTDT#K1|gO}H*E@)92&1>{fL3wAgqI^0d2r0f$%1WOrc(Z8n0slu>(U)(vH z@h~c_ydEQ0=d>|}&lLj?j#v#_itYWvm-vRW_JEH5*lJiE>O8reyZS)EAmTRmgaRHA zF$MmolutQ|37q@EHQS?fTzZ9N{TrP0{okhg@6hMa-Yd+kYgTr_uE7H6&uAnXyRIv= zX@!Ni#X$uNYHA*8{7r=|Zym1Zc7>tl6(~@vdoXAdV^n_e8;2#u)FGi@D(dAeLd4jb zP+s!Tz-)$SL@3}#ChfgPE33NEj^5CV&}xN!gE9LTY#^=qid$V!34X{c;28liZL;pu zsa69&cs63$Q*|8hWv1JP5CBmIwG5aPlJ+ygca&tXV7B#hloU;?1=NR&V;f^qVKO&o zxE#wfJ5-`@Y$?kzP%Z3Wt$o47!vlj{+zngNi+PzwW7~(4;`y6&D1e9qtIQJ$$7=bv zU7fL_R;gID#Jxo;_LgoLjboi|0T2wfW#=-$Wp4@N+!T4y`d{h`%3b#ttuU!^0WbTtc844LxTPm5cU?j>m5itFif%RXBwldqDpH zu-W5}cy2n+KhzgxVr?m&qo6t!j}RdNZ|sV3F%c3%6!lgY^c;O1{RbM~cy@}_7oUk~ zY+s3jvJkygacj2;<``+SKfYytK8z#rE$gPAZql59fan}??G1JzO$^oZ5#k~m)Uc3r z9{s8|)aiRdf=b;Oh%Q?MsJf9{t^WWqB1;#8_?6DcXvYR&Bj*4=as+i!S9q+<9H$}M z`i+Gs6=3l!(w@?OTpnfLs^XIIg6;{GSfv746x3x#zcAesg|xr0oW?0l!j28F+oXtC z3q09o{ow)X>^`}Lt(k*3aw=8jF2Xd$x~m7s9iX)iayTn3lV*18WYmneQkjMzr6B!K zjNfX@d%cXX+;+$0faQi{G%Q+5 zXXHvp0csy)B2F~090hZT3Q7u^4E|9lp(LYfS>~lAq(hwSg98jNH$(cDzOGfG0tk`d z&P-2w%y_B;N=kfOTGFY#xMRJroZQu&c#H2C#xSXI`j;=!$5Yk6 zLtdDc2mxLA`#^%$oftgo2&1d{xy!{AUSe$vx;MeZF#w03lf)7Qm8%W?;l)U%ME$NvBbn}oB_oW<7hgI?lh6paH`h@fy*=Blgh0R0YNn4;?)=P8+z zt1wO{i{=4u+Mw5zH;BehqQ|a`G$Y~=i^HN5?~HbZy=41TM!R_@8HOm|k21W!_88yW z{ld95zT^t{npD~J1W`*qA|or8=vKv-E?=qo2i4vYuS6oRu^p5EXUZ13-ut8|wFuW} z#byZi9pWUkpQ(bAv?Ou3m>6!DjjF+w}0M{j=Yc}iiUzD!J29#0bD&B?~K z2w9xDZ-^6e;)RWOh!IytYK&?OMy*Xz0)~d$+-L?n3tzNOnE+cB-r`$FaiHf`jP{Pu z?+{h&ykZjYOO&?HVxVNqFmN0enV^J_8F+x;II1$bSOCWZUQ$$-Rf$xfM+3D&x{wn9 ztx=T;fZ18JJ1;vSm`E3n)3Pe j72$Y*#w|MbAuK1GsY;o@0$9~Zl(xamJK){N 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

+ 1 Infinite Loop
Cupertino, CA 95014
United States +
+ +### Anchor Tag (aka. Link) + +This is an example of a [link](http://apple.com "Apple"). + +### Abbreviation Tag + +The abbreviation CSS stands for "Cascading Style Sheets". + +*[CSS]: Cascading Style Sheets + +### Cite Tag + +"Code is poetry." ---Automattic + +### Code Tag + +You will learn later on in these tests that `word-wrap: break-word;` will be your best friend. + +### Strike Tag + +This tag will let you strikeout text. + +### Emphasize Tag + +The emphasize tag should _italicize_ text. + +### Insert Tag + +This tag should denote inserted text. + +### Keyboard Tag + +This scarcely known tag emulates keyboard text, which is usually styled like the `` tag. + +### Preformatted Tag + +This tag styles large blocks of code. + +
+.post-title {
+  margin: 0 0 5px;
+  font-weight: bold;
+  font-size: 38px;
+  line-height: 1.2;
+  and here's a line of some really, really, really, really long text, just to see how the PRE tag handles it and to find out how it overflows;
+}
+
+ +### Quote Tag + +Developers, developers, developers… –Steve Ballmer + +### Strong Tag + +This tag shows **bold text**. + +### Subscript Tag + +Getting our science styling on with H2O, which should push the "2" down. + +### Superscript Tag + +Still sticking with science and Isaac Newton's E = MC2, which should lift the 2 up. + +### Variable Tag + +This allows you to denote variables. + +{% include base_path %} +{% for post in site.pages %} +{% include archive-single.html %} +{% endfor %} \ No newline at end of file diff --git a/example/_pages/category-archive.html b/example/_pages/category-archive.html new file mode 100644 index 0000000..3ed3378 --- /dev/null +++ b/example/_pages/category-archive.html @@ -0,0 +1,17 @@ +--- +layout: archive +permalink: /categories/ +title: "Posts by Category" +author_profile: true +--- + +{% include base_path %} +{% include group-by-array collection=site.posts field="categories" %} + +{% for category in group_names %} + {% assign posts = group_items[forloop.index0] %} +

{{ category }}

+ {% for post in posts %} + {% include archive-single.html %} + {% endfor %} +{% endfor %} \ No newline at end of file diff --git a/example/_pages/collection-archive.html b/example/_pages/collection-archive.html new file mode 100644 index 0000000..344c51e --- /dev/null +++ b/example/_pages/collection-archive.html @@ -0,0 +1,24 @@ +--- +layout: archive +title: "Posts by Collection" +permalink: /collection-archive/ +author_profile: true +--- + +{% include base_path %} +{% capture written_label %}'None'{% endcapture %} + +{% for collection in site.collections %} + {% unless collection.output == false or collection.label == "posts" %} + {% capture label %}{{ collection.label }}{% endcapture %} + {% if label != written_label %} +

{{ label }}

+ {% capture written_label %}{{ label }}{% endcapture %} + {% endif %} + {% endunless %} + {% for post in collection.docs %} + {% unless collection.output == false or collection.label == "posts" %} + {% include archive-single.html %} + {% endunless %} + {% endfor %} +{% endfor %} \ No newline at end of file diff --git a/example/_pages/lorem-ipsum.md b/example/_pages/lorem-ipsum.md new file mode 100644 index 0000000..13be88a --- /dev/null +++ b/example/_pages/lorem-ipsum.md @@ -0,0 +1,52 @@ +--- +title: "Lorem Ipsum" +permalink: /lorem-ipsum/ +--- + +Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec mollis. Quisque convallis libero in sapien pharetra tincidunt. Aliquam elit ante, malesuada id, tempor eu, gravida id, odio. Maecenas suscipit, risus et eleifend imperdiet, nisi orci ullamcorper massa, et adipiscing orci velit quis magna. Praesent sit amet ligula id orci venenatis auctor. Phasellus porttitor, metus non tincidunt dapibus, orci pede pretium neque, sit amet adipiscing ipsum lectus et libero. Aenean bibendum. Curabitur mattis quam id urna. Vivamus dui. Donec nonummy lacinia lorem. Cras risus arcu, sodales ac, ultrices ac, mollis quis, justo. Sed a libero. Quisque risus erat, posuere at, tristique non, lacinia quis, eros. + +Cras volutpat, lacus quis semper pharetra, nisi enim dignissim est, et sollicitudin quam ipsum vel mi. Sed commodo urna ac urna. Nullam eu tortor. Curabitur sodales scelerisque magna. Donec ultricies tristique pede. Nullam libero. Nam sollicitudin felis vel metus. Nullam posuere molestie metus. Nullam molestie, nunc id suscipit rhoncus, felis mi vulputate lacus, a ultrices tortor dolor eget augue. Aenean ultricies felis ut turpis. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Suspendisse placerat tellus ac nulla. Proin adipiscing sem ac risus. Maecenas nisi. Cras semper. + +Praesent interdum mollis neque. In egestas nulla eget pede. Integer eu purus sed diam dictum scelerisque. Morbi cursus velit et felis. Maecenas faucibus aliquet erat. In aliquet rhoncus tellus. Integer auctor nibh a nunc fringilla tempus. Cras turpis urna, dignissim vel, suscipit pulvinar, rutrum quis, sem. Ut lobortis convallis dui. Sed nonummy orci a justo. Morbi nec diam eget eros eleifend tincidunt. + +Curabitur non elit. Pellentesque iaculis, nisl non aliquet adipiscing, purus urna aliquet orci, sed sodales pede neque at massa. Pellentesque laoreet, enim eget varius mollis, sapien erat suscipit metus, sit amet iaculis nulla sapien id felis. Aliquam erat volutpat. Nam congue nulla a ligula. Morbi tempor hendrerit erat. Curabitur augue. Vestibulum nulla est, commodo et, fringilla quis, bibendum eget, ipsum. Suspendisse pulvinar iaculis ante. Mauris dignissim ante quis nisi. Aliquam ante mi, aliquam et, pellentesque ac, dapibus et, enim. In vulputate justo vel magna. Phasellus imperdiet justo. Proin odio orci, dapibus id, porta a, pellentesque id, erat. Aliquam erat volutpat. Mauris nonummy varius libero. Sed dolor ipsum, tempor non, aliquet et, pulvinar quis, dui. Pellentesque mauris diam, lobortis id, varius varius, facilisis at, nulla. + +Cras pede. Nullam id velit sit amet turpis tincidunt sagittis. Nunc malesuada. Nunc consequat scelerisque odio. Donec eu leo. Nunc pellentesque felis sed odio. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vivamus lobortis metus in lectus. Cras mollis quam eget sapien. Pellentesque non lorem sit amet sem lacinia euismod. + +Nulla eget diam eget leo imperdiet consequat. Morbi nunc magna, pellentesque eu, porta at, ultricies ut, neque. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In tincidunt. Praesent ut orci id eros congue ultrices. Mauris non neque. Donec nulla ante, molestie sit amet, fermentum nec, blandit sit amet, purus. Fusce eget diam eu odio iaculis mollis. Phasellus consectetuer pede quis nisi. Proin non sem ut elit pulvinar faucibus. In a turpis nec augue fringilla elementum. + +Nullam felis. Donec in nulla. Suspendisse sodales, turpis in suscipit ullamcorper, enim nunc sagittis risus, eu auctor velit tortor ut turpis. Mauris id augue at neque aliquam eleifend. Sed eget augue. Nunc faucibus ligula sed massa. Etiam non nulla. Etiam accumsan ullamcorper nisl. In pharetra massa at nunc. Nunc elementum. Duis sodales enim nec libero. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Praesent dapibus eros sodales urna. Duis magna nisi, lobortis quis, tincidunt rutrum, posuere non, ipsum. + +Aliquam convallis neque vitae diam. In diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis fermentum arcu in tortor. Sed nibh leo, rhoncus eu, fermentum et, scelerisque ac, massa. Cras id turpis. Etiam commodo sem luctus lorem. Morbi at mi. In rutrum. Aenean luctus pede euismod tortor. Phasellus dictum. Cras neque justo, venenatis sit amet, tristique et, vulputate in, dui. Etiam sed mi gravida sapien imperdiet dictum. Aliquam gravida orci a tortor. Donec tempor. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus risus ante, pellentesque vitae, luctus eget, scelerisque sed, libero. Donec massa. + +Donec libero mauris, volutpat at, convallis vel, laoreet euismod, augue. In accumsan malesuada risus. Mauris metus magna, condimentum in, nonummy non, ornare eu, velit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin posuere. Proin rhoncus rutrum lorem. Phasellus dignissim massa non libero volutpat tincidunt. In hac habitasse platea dictumst. Phasellus eget eros. Nulla in nulla. Vivamus quis mauris. Maecenas pharetra rhoncus tellus. Sed sit amet lacus. + +Quisque interdum felis a tellus. Aliquam sed diam ac velit aliquam rutrum. Morbi commodo, risus a pulvinar adipiscing, tortor pede posuere risus, ac ornare tellus massa nec lectus. Vivamus mollis metus ac sapien. Nam sed est a libero ullamcorper dapibus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aenean a erat ac nibh accumsan volutpat. Phasellus pulvinar consequat turpis. Curabitur ante metus, tempus ut, consequat eu, sollicitudin sit amet, justo. Duis ut libero. + +Հայերեն + +Lorem Ipsum-ը տպագրության և տպագրական արդյունաբերության համար նախատեսված մոդելային տեքստ է: Սկսած 1500-ականներից\` Lorem Ipsum-ը հանդիսացել է տպագրական արդյունաբերության ստանդարտ մոդելային տեքստ, ինչը մի անհայտ տպագրիչի կողմից տարբեր տառատեսակների օրինակների գիրք ստեղծելու ջանքերի արդյունք է: Այս տեքստը ոչ միայն կարողացել է գոյատևել հինգ դարաշրջան, այլև ներառվել է էլեկտրոնային տպագրության մեջ\` մնալով էապես անփոփոխ: Այն հայտնի է դարձել 1960-ականներին Lorem Ipsum բովանդակող Letraset էջերի թողարկման արդյունքում, իսկ ավելի ուշ համակարգչային տպագրության այնպիսի ծրագրերի թողարկման հետևանքով, ինչպիսին է Aldus PageMaker-ը, որը ներառում է Lorem Ipsum-ի տարատեսակներ: + +Български + +Lorem Ipsum е елементарен примерен текст, използван в печатарската и типографската индустрия. Lorem Ipsum е индустриален стандарт от около 1500 година, когато неизвестен печатар взема няколко печатарски букви и ги разбърква, за да напечата с тях книга с примерни шрифтове. Този начин не само е оцелял повече от 5 века, но е навлязъл и в публикуването на електронни издания като е запазен почти без промяна. Популяризиран е през 60те години на 20ти век със издаването на Letraset листи, съдържащи Lorem Ipsum пасажи, популярен е и в наши дни във софтуер за печатни издания като Aldus PageMaker, който включва различни версии на Lorem Ipsum. + +Català + +Lorem Ipsum és un text de farciment usat per la indústria de la tipografia i la impremta. Lorem Ipsum ha estat el text estàndard de la indústria des de l’any 1500, quan un impressor desconegut va fer servir una galerada de text i la va mesclar per crear un llibre de mostres tipogràfiques. No només ha sobreviscut cinc segles, sinó que ha fet el salt cap a la creació de tipus de lletra electrònics, romanent essencialment sense canvis. Es va popularitzar l’any 1960 amb el llançament de fulls Letraset que contenien passatges de Lorem Ipsum, i més recentment amb programari d’autoedició com Aldus Pagemaker que inclou versions de Lorem Ipsum. + +Hrvatski + +Lorem Ipsum je jednostavno probni tekst koji se koristi u tiskarskoj i slovoslagarskoj industriji. Lorem Ipsum postoji kao industrijski standard još od 16-og stoljeća, kada je nepoznati tiskar uzeo tiskarsku galiju slova i posložio ih da bi napravio knjigu s uzorkom tiska. Taj je tekst ne samo preživio pet stoljeća, već se i vinuo u svijet elektronskog slovoslagarstva, ostajući u suštini nepromijenjen. Postao je popularan tijekom 1960-ih s pojavom Letraset listova s odlomcima Lorem Ipsum-a, a u skorije vrijeme sa software-om za stolno izdavaštvo kao što je Aldus PageMaker koji također sadrži varijante Lorem Ipsum-a. + +Česky + +Lorem Ipsum je demonstrativní výplňový text používaný v tiskařském a knihařském průmyslu. Lorem Ipsum je považováno za standard v této oblasti už od začátku 16. století, kdy dnes neznámý tiskař vzal kusy textu a na jejich základě vytvořil speciální vzorovou knihu. Jeho odkaz nevydržel pouze pět století, on přežil i nástup elektronické sazby v podstatě beze změny. Nejvíce popularizováno bylo Lorem Ipsum v šedesátých letech 20. století, kdy byly vydávány speciální vzorníky s jeho pasážemi a později pak díky počítačovým DTP programům jako Aldus PageMaker. + +Româna + +Lorem Ipsum este pur şi simplu o machetă pentru text a industriei tipografice. Lorem Ipsum a fost macheta standard a industriei încă din secolul al XVI-lea, când un tipograf anonim a luat o planşetă de litere şi le-a amestecat pentru a crea o carte demonstrativă pentru literele respective. Nu doar că a supravieţuit timp de cinci secole, dar şi a facut saltul în tipografia electronică practic neschimbată. A fost popularizată în anii ’60 odată cu ieşirea colilor Letraset care conţineau pasaje Lorem Ipsum, iar mai recent, prin programele de publicare pentru calculator, ca Aldus PageMaker care includeau versiuni de Lorem Ipsum. + +Српски + +Lorem Ipsum је једноставно модел текста који се користи у штампарској и словослагачкој индустрији. Lorem ipsum је био стандард за модел текста још од 1500. године, када је непознати штампар узео кутију са словима и сложио их како би направио узорак књиге. Не само што је овај модел опстао пет векова, него је чак почео да се користи и у електронским медијима, непроменивши се. Популаризован је шездесетих година двадесетог века заједно са листовима летерсета који су садржали Lorem Ipsum пасусе, а данас са софтверским пакетом за прелом као што је Aldus PageMaker који је садржао Lorem Ipsum верзије. \ No newline at end of file diff --git a/example/_pages/page-a.md b/example/_pages/page-a.md new file mode 100644 index 0000000..3083db2 --- /dev/null +++ b/example/_pages/page-a.md @@ -0,0 +1,7 @@ +--- +title: "Page A" +permalink: /page-a/ +date: 2011-06-23T18:38:52+00:00 +--- + +Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. \ No newline at end of file diff --git a/example/_pages/page-archive.html b/example/_pages/page-archive.html new file mode 100644 index 0000000..c1c5d7c --- /dev/null +++ b/example/_pages/page-archive.html @@ -0,0 +1,11 @@ +--- +layout: archive +title: "Page Archive" +permalink: /page-archive/ +author_profile: false +--- + +{% include base_path %} +{% for post in site.pages %} + {% include archive-single.html %} +{% endfor %} \ No newline at end of file diff --git a/example/_pages/page-b.md b/example/_pages/page-b.md new file mode 100644 index 0000000..d15ce12 --- /dev/null +++ b/example/_pages/page-b.md @@ -0,0 +1,7 @@ +--- +title: "Page B" +permalink: /page-b/ +date: 2011-06-23T18:39:14+00:00 +--- + +(lorem ipsum) \ No newline at end of file diff --git a/example/_pages/portfolio-archive.html b/example/_pages/portfolio-archive.html new file mode 100644 index 0000000..4aafb84 --- /dev/null +++ b/example/_pages/portfolio-archive.html @@ -0,0 +1,14 @@ +--- +layout: archive +title: "Portfolio" +permalink: /portfolio/ +author_profile: false +--- + +{% include base_path %} + +
+ {% for post in site.portfolio %} + {% include archive-single.html type="grid" %} + {% endfor %} +
\ No newline at end of file diff --git a/example/_pages/recipes-archive.html b/example/_pages/recipes-archive.html new file mode 100644 index 0000000..27c6a58 --- /dev/null +++ b/example/_pages/recipes-archive.html @@ -0,0 +1,12 @@ +--- +layout: archive +title: "Recipes" +permalink: /recipes/ +author_profile: false +--- + +{% include base_path %} + +{% for post in site.recipes %} + {% include archive-single.html %} +{% endfor %} \ No newline at end of file diff --git a/example/_pages/sample-page.md b/example/_pages/sample-page.md new file mode 100644 index 0000000..060e53b --- /dev/null +++ b/example/_pages/sample-page.md @@ -0,0 +1,15 @@ +--- +title: "Sample Page" +permalink: /sample-page/ +date: 2016-02-24T03:02:20+00:00 +--- + +This is an example page. It's different from a blog post because it will stay in one place and will show up in your site navigation (in most themes). Most people start with an About page that introduces them to potential site visitors. It might say something like this: + +> Hi there! I'm a bike messenger by day, aspiring actor by night, and this is my website. I live in Los Angeles, have a great dog named Jack, and I like pi'a coladas. (And gettin' caught in the rain.) + +...or something like this: + +> The XYZ Doohickey Company was founded in 1971, and has been providing quality doohickeys to the public ever since. Located in Gotham City, XYZ employs over 2,000 people and does all kinds of awesome things for the Gotham community. + +You should probably delete this page and create new pages for your content. Have fun! \ No newline at end of file diff --git a/example/_pages/sitemap.md b/example/_pages/sitemap.md new file mode 100644 index 0000000..9fd359d --- /dev/null +++ b/example/_pages/sitemap.md @@ -0,0 +1,37 @@ +--- +layout: archive +title: "Sitemap" +permalink: /sitemap/ +author_profile: false +--- + +{% include base_path %} + +A list of all the posts and pages found on the site. For you robots out there is an [XML version]({{ base_path }}/sitemap.xml) available for digesting as well. + +

Pages

+{% for post in site.pages %} + {% include archive-single.html %} +{% endfor %} + +

Posts

+{% for post in site.posts %} + {% include archive-single.html %} +{% endfor %} + +{% capture written_label %}'None'{% endcapture %} + +{% for collection in site.collections %} +{% unless collection.output == false or collection.label == "posts" %} + {% capture label %}{{ collection.label }}{% endcapture %} + {% if label != written_label %} +

{{ label }}

+ {% capture written_label %}{{ label }}{% endcapture %} + {% endif %} +{% endunless %} +{% for post in collection.docs %} + {% unless collection.output == false or collection.label == "posts" %} + {% include archive-single.html %} + {% endunless %} +{% endfor %} +{% endfor %} \ No newline at end of file diff --git a/example/_pages/splash-page.md b/example/_pages/splash-page.md new file mode 100644 index 0000000..5993367 --- /dev/null +++ b/example/_pages/splash-page.md @@ -0,0 +1,65 @@ +--- +title: "Splash Page" +layout: splash +permalink: /splash-page/ +date: 2016-03-23T11:48:41-04:00 +header: + overlay_color: "#000" + overlay_filter: "0.5" + overlay_image: /assets/images/unsplash-image-1.jpg + cta_label: "Download" + cta_url: "https://github.com/mmistakes/minimal-mistakes/" + caption: "Photo credit: [**Unsplash**](https://unsplash.com)" +excerpt: "Bacon ipsum dolor sit amet salami ham hock ham, hamburger corned beef short ribs kielbasa biltong t-bone drumstick tri-tip tail sirloin pork chop." +intro: + - excerpt: 'Nullam suscipit et nam, tellus velit pellentesque at malesuada, enim eaque. Quis nulla, netus tempor in diam gravida tincidunt, *proin faucibus* voluptate felis id sollicitudin. Centered with `type="center"`' +feature_row: + - image_path: assets/images/unsplash-gallery-image-1-th.jpg + alt: "placeholder image 1" + title: "Placeholder 1" + excerpt: "This is some sample content that goes here with **Markdown** formatting." + - image_path: /assets/images/unsplash-gallery-image-2-th.jpg + alt: "placeholder image 2" + title: "Placeholder 2" + excerpt: "This is some sample content that goes here with **Markdown** formatting." + url: "#test-link" + btn_label: "Read More" + btn_class: "btn--inverse" + - image_path: /assets/images/unsplash-gallery-image-3-th.jpg + title: "Placeholder 3" + excerpt: "This is some sample content that goes here with **Markdown** formatting." +feature_row2: + - image_path: /assets/images/unsplash-gallery-image-2-th.jpg + alt: "placeholder image 2" + title: "Placeholder Image Left Aligned" + excerpt: 'This is some sample content that goes here with **Markdown** formatting. Left aligned with `type="left"`' + url: "#test-link" + btn_label: "Read More" + btn_class: "btn--inverse" +feature_row3: + - image_path: /assets/images/unsplash-gallery-image-2-th.jpg + alt: "placeholder image 2" + title: "Placeholder Image Right Aligned" + excerpt: 'This is some sample content that goes here with **Markdown** formatting. Right aligned with `type="right"`' + url: "#test-link" + btn_label: "Read More" + btn_class: "btn--inverse" +feature_row4: + - image_path: /assets/images/unsplash-gallery-image-2-th.jpg + alt: "placeholder image 2" + title: "Placeholder Image Center Aligned" + excerpt: 'This is some sample content that goes here with **Markdown** formatting. Centered with `type="center"`' + url: "#test-link" + btn_label: "Read More" + btn_class: "btn--inverse" +--- + +{% include feature_row id="intro" type="center" %} + +{% include feature_row %} + +{% include feature_row id="feature_row2" type="left" %} + +{% include feature_row id="feature_row3" type="right" %} + +{% include feature_row id="feature_row4" type="center" %} \ No newline at end of file diff --git a/example/_pages/tag-archive.html b/example/_pages/tag-archive.html new file mode 100644 index 0000000..4006381 --- /dev/null +++ b/example/_pages/tag-archive.html @@ -0,0 +1,17 @@ +--- +layout: archive +permalink: /tags/ +title: "Posts by Tags" +author_profile: true +--- + +{% include base_path %} +{% include group-by-array collection=site.posts field="tags" %} + +{% for tag in group_names %} + {% assign posts = group_items[forloop.index0] %} +

{{ tag }}

+ {% for post in posts %} + {% include archive-single.html %} + {% endfor %} +{% endfor %} \ No newline at end of file diff --git a/example/_pages/terms.md b/example/_pages/terms.md new file mode 100644 index 0000000..410a742 --- /dev/null +++ b/example/_pages/terms.md @@ -0,0 +1,58 @@ +--- +permalink: /terms/ +title: "Terms and Privacy Policy" +modified: 2016-06-06 +--- + +{% include base_path %} +{% include toc %} + +## Privacy Policy + +The privacy of my visitors is extremely important. This Privacy Policy outlines the types of personal information that is received and collected and how it is used. + +First and foremost, I will never share your email address or any other personal information to anyone without your direct consent. + +### Log Files + +Like many other websites, this site uses log files to help learn about when, from where, and how often traffic flows to this site. The information in these log files include: + +* Internet Protocol addresses (IP) +* Types of browser +* Internet Service Provider (ISP) +* Date and time stamp +* Referring and exit pages +* Number of clicks + +All of this information is not linked to anything that is personally identifiable. + +### Cookies and Web Beacons + +When you visit this site "convenience" cookies are stored on your computer when you submit a comment to help you log in faster to [Disqus](http://disqus.com) the next time you leave a comment. + +Third-party advertisers may also place and read cookies on your browser and/or use web beacons to collect information. This site has no access or control over these cookies. You should review the respective privacy policies on any and all third-party ad servers for more information regarding their practices and how to opt-out. + +If you wish to disable cookies, you may do so through your web browser options. Instructions for doing so can be found on the specific web browsers' websites. + +#### Google Analytics + +Google Analytics is a web analytics tool I use to help understand how visitors engage with this website. It reports website trends using cookies and web beacons without identifying individual visitors. You can read [Google Analytics Privacy Policy](http://www.google.com/analytics/learn/privacy.html). + +#### Google Adsense + +Google Adsense, a third party affiliate marketing network, uses cookies to help make sure I get a commission when you buy a product after clicking on a link or ad banner that takes you to the site of one of their merchants. You can read [Google Adsense Privacy Policy](http://support.google.com/adsense/bin/answer.py?hl=en&answer=48182). + +## Disclosure Policy + +I make money on this website through affiliate programs. If you click an affiliate link or ad banner and buy the product, you help support this website because I'll get a percentage of that sale. + +Currently I'm an affiliate for Amazon and Google Adsense. + +What this means for you: + +* I became an affiliate to earn revenue towards the costs of running and maintaining this website. Where I have direct control over which ads are served on this website I offer only products that are directly related to the topic of this website and products that a reader/subscriber would have a genuine interest in or need of. +* I do not and will not recommend a product just for the sake of making money. +* I do not let the compensation I receive influence the content, topics, posts, or opinions expressed on this website. +* I respect and value my readers too much to write anything other than my own genuine and objective opinions and advice. + +Just like this website, my Disclosure Policy is a work in progress. As the revenue streams evolve, so will this page. \ No newline at end of file diff --git a/example/_pages/year-archive.html b/example/_pages/year-archive.html new file mode 100644 index 0000000..7198ab6 --- /dev/null +++ b/example/_pages/year-archive.html @@ -0,0 +1,17 @@ +--- +layout: archive +permalink: /year-archive/ +title: "Posts by Year" +author_profile: true +--- + +{% include base_path %} +{% capture written_year %}'None'{% endcapture %} +{% for post in site.posts %} + {% capture year %}{{ post.date | date: '%Y' }}{% endcapture %} + {% if year != written_year %} +

{{ year }}

+ {% capture written_year %}{{ year }}{% endcapture %} + {% endif %} + {% include archive-single.html %} +{% endfor %} \ No newline at end of file diff --git a/example/_pets/lhasa-apso.md b/example/_pets/lhasa-apso.md new file mode 100644 index 0000000..2673b6b --- /dev/null +++ b/example/_pets/lhasa-apso.md @@ -0,0 +1,8 @@ +--- +title: "Lhasa Apso" +excerpt: "The Lhasa Apso is a non-sporting dog breed originating in Tibet." +--- + +> The Lhasa Apso (/ˈlɑːsə ˈæpsoʊ/ lah-sə ap-soh) is a non-sporting dog breed originating in Tibet. It was bred as an interior sentinel in the Buddhist monasteries, to alert the monks to any intruders who entered. Lhasa is the capital city of Tibet, and apso is a word in the Tibetan language meaning "bearded", so, Lhasa Apso simply means "long-haired Lhasa dog". There are, however, some who claim that the word "apso" is a form of the Tibetan word "rapso", meaning "goat-like", which would make the equivalent translation "wooly Lhasa dog". + +> From Wikipedia, the free encyclopedia \ No newline at end of file diff --git a/example/_pets/tabby.md b/example/_pets/tabby.md new file mode 100644 index 0000000..b62b674 --- /dev/null +++ b/example/_pets/tabby.md @@ -0,0 +1,8 @@ +--- +title: "Tabby" +excerpt: "A tabby is any domestic cat that has a coat featuring distinctive stripes, dots, lines or swirling patterns, usually with a mark resembling an 'M' on its forehead." +--- + +> A tabby is any domestic cat that has a coat featuring distinctive stripes, dots, lines or swirling patterns, usually together with a mark resembling an 'M' on its forehead. Tabbies are sometimes erroneously assumed to be a cat breed. In fact, the tabby pattern is found in many breeds, as well as among the general mixed-breed population. The tabby pattern is a naturally occurring feature that may be related to the coloration of the domestic cat's direct ancestor, the African wildcat, which (along with the European wildcat and Asiatic wildcat) has a similar coloration. + +> From Wikipedia, the free encyclopedia \ No newline at end of file diff --git a/example/_posts/2009-05-15-edge-case-nested-and-mixed-lists.md b/example/_posts/2009-05-15-edge-case-nested-and-mixed-lists.md new file mode 100644 index 0000000..cc4fd5e --- /dev/null +++ b/example/_posts/2009-05-15-edge-case-nested-and-mixed-lists.md @@ -0,0 +1,60 @@ +--- +title: "Edge Case: Nested and Mixed Lists" +categories: + - Edge Case +tags: + - content + - css + - edge case + - lists + - markup +--- + +Nested and mixed lists are an interesting beast. It's a corner case to make sure that + +* Lists within lists do not break the ordered list numbering order +* Your list styles go deep enough. + +### Ordered -- Unordered -- Ordered + +1. ordered item +2. ordered item + * **unordered** + * **unordered** + 1. ordered item + 2. ordered item +3. ordered item +4. ordered item + +### Ordered -- Unordered -- Unordered + +1. ordered item +2. ordered item + * **unordered** + * **unordered** + * unordered item + * unordered item +3. ordered item +4. ordered item + +### Unordered -- Ordered -- Unordered + +* unordered item +* unordered item + 1. ordered + 2. ordered + * unordered item + * unordered item +* unordered item +* unordered item + +### Unordered -- Unordered -- Ordered + +* unordered item +* unordered item + * unordered + * unordered + 1. **ordered item** + 2. **ordered item** +* unordered item +* unordered item \ No newline at end of file diff --git a/example/_posts/2009-06-01-edge-case-many-tags.md b/example/_posts/2009-06-01-edge-case-many-tags.md new file mode 100644 index 0000000..f43509f --- /dev/null +++ b/example/_posts/2009-06-01-edge-case-many-tags.md @@ -0,0 +1,49 @@ +--- +title: "Edge Case: Many Tags" +categories: + - Edge Case +tags: + - 8BIT + - alignment + - Articles + - captions + - categories + - chat + - comments + - content + - css + - dowork + - edge case + - embeds + - excerpt + - Fail + - featured image + - FTW + - Fun + - gallery + - html + - image + - Jekyll + - layout + - link + - Love + - markup + - Mothership + - Must Read + - Nailed It + - Pictures + - Post Formats + - quote + - standard + - Success + - Swagger + - Tags + - template + - title + - twitter + - Unseen + - video + - YouTube +--- + +This post has many tags. \ No newline at end of file diff --git a/example/_posts/2009-07-02-edge-case-many-categories.md b/example/_posts/2009-07-02-edge-case-many-categories.md new file mode 100644 index 0000000..4d67986 --- /dev/null +++ b/example/_posts/2009-07-02-edge-case-many-categories.md @@ -0,0 +1,19 @@ +--- +title: "Edge Case: Many Categories" +categories: + - aciform + - antiquarianism + - arrangement + - asmodeus + - broder + - buying + - championship + - chastening + - disinclination + - disinfection +tags: + - categories + - edge case +--- + +This post has many categories. \ No newline at end of file diff --git a/example/_posts/2009-08-06-edge-case-no-body-content.md b/example/_posts/2009-08-06-edge-case-no-body-content.md new file mode 100644 index 0000000..7b2fa7d --- /dev/null +++ b/example/_posts/2009-08-06-edge-case-no-body-content.md @@ -0,0 +1,9 @@ +--- +title: "Edge Case: No Body Content" +categories: + - Edge Case +tags: + - content + - edge case + - layout +--- diff --git a/example/_posts/2009-09-05-edge-case-no-yaml-title.md b/example/_posts/2009-09-05-edge-case-no-yaml-title.md new file mode 100644 index 0000000..4e5323f --- /dev/null +++ b/example/_posts/2009-09-05-edge-case-no-yaml-title.md @@ -0,0 +1,10 @@ +--- +categories: + - Edge Case +tags: + - edge case + - layout + - title +--- + +This post has no title specified in the YAML Front Matter. Jekyll should auto-generate a title from the filename. \ No newline at end of file diff --git a/example/_posts/2009-10-05-edge-case-title-should-not-overflow-the-content-area.md b/example/_posts/2009-10-05-edge-case-title-should-not-overflow-the-content-area.md new file mode 100644 index 0000000..6fdc1b8 --- /dev/null +++ b/example/_posts/2009-10-05-edge-case-title-should-not-overflow-the-content-area.md @@ -0,0 +1,27 @@ +--- +title: "Antidisestablishmentarianism" +categories: + - Edge Case +tags: + - content + - css + - edge case + - html + - layout + - title +--- + +## Title should not overflow the content area + +A few things to check for: + + * Non-breaking text in the title, content, and comments should have no adverse effects on layout or functionality. + * Check the browser window / tab title. + * If you are a theme developer, check that this text does not break anything. + +The following CSS properties will help you support non-breaking text. + +```css +-ms-word-wrap: break-word; +word-wrap: break-word; +``` \ No newline at end of file diff --git a/example/_posts/2009-10-05-edge-case-very-long-title.md b/example/_posts/2009-10-05-edge-case-very-long-title.md new file mode 100644 index 0000000..29fcb77 --- /dev/null +++ b/example/_posts/2009-10-05-edge-case-very-long-title.md @@ -0,0 +1,14 @@ +--- +title: "Suspicio? Bene ... tunc ibimus? Quis uh ... CONEXUS locus his diebus? Quisque semper aliquid videtur, in volutpat mauris. Nolo enim dicere. Vobis neque ab aliis. Ego feci memetipsum explicans. Gus mortuus est. Lorem opus habeo. Jackson Isai? Tu quoque ... A te quidem a ante. Vos scitis quod blinking res Ive 'been vocans super vos? Et conteram illud, et conteram hoc. Maledicant druggie excors. Iam hoc tu facere conatus sum ad te in omni tempore? Ludum mutavit. Verbum est ex. Et ... sunt occid" +categories: + - Edge Case +tags: + - content + - css + - edge case + - html + - layout + - title +--- + +Check for long titles and how they might break a template. \ No newline at end of file diff --git a/example/_posts/2010-01-07-post-modified.md b/example/_posts/2010-01-07-post-modified.md new file mode 100644 index 0000000..b7457e2 --- /dev/null +++ b/example/_posts/2010-01-07-post-modified.md @@ -0,0 +1,14 @@ +--- +title: "Post: Modified Date" +modified: 2016-03-09T16:20:02-05:00 +categories: + - Post Formats +tags: + - Post Formats + - readability + - standard +--- + +This post has been updated and should show a modified date if used in a layout. + +All children, except one, grow up. They soon know that they will grow up, and the way Wendy knew was this. One day when she was two years old she was playing in a garden, and she plucked another flower and ran with it to her mother. I suppose she must have looked rather delightful, for Mrs. Darling put her hand to her heart and cried, "Oh, why can't you remain like this for ever!" This was all that passed between them on the subject, but henceforth Wendy knew that she must grow up. You always know after you are two. Two is the beginning of the end. \ No newline at end of file diff --git a/example/_posts/2010-01-07-post-standard.md b/example/_posts/2010-01-07-post-standard.md new file mode 100644 index 0000000..cd83ea0 --- /dev/null +++ b/example/_posts/2010-01-07-post-standard.md @@ -0,0 +1,32 @@ +--- +title: "Post: Standard" +excerpt_separator: "" +categories: + - Post Formats +tags: + - Post Formats + - readability + - standard +--- + +All children, except one, grow up. They soon know that they will grow up, and the way Wendy knew was this. One day when she was two years old she was playing in a garden, and she plucked another flower and ran with it to her mother. I suppose she must have looked rather delightful, for Mrs. Darling put her hand to her heart and cried, "Oh, why can't you remain like this for ever!" This was all that passed between them on the subject, but henceforth Wendy knew that she must grow up. You always know after you are two. Two is the beginning of the end. + +Mrs. Darling first heard of Peter when she was tidying up her children's minds. It is the nightly custom of every good mother after her children are asleep to rummage in their minds and put things straight for next morning, repacking into their proper places the many articles that have wandered during the day. + + + +This post has a manual excerpt `` set after the second paragraph. The following YAML Front Matter has also be applied: + +```yaml +excerpt_separator: "" +``` + +If you could keep awake (but of course you can't) you would see your own mother doing this, and you would find it very interesting to watch her. It is quite like tidying up drawers. You would see her on her knees, I expect, lingering humorously over some of your contents, wondering where on earth you had picked this thing up, making discoveries sweet and not so sweet, pressing this to her cheek as if it were as nice as a kitten, and hurriedly stowing that out of sight. When you wake in the morning, the naughtiness and evil passions with which you went to bed have been folded up small and placed at the bottom of your mind and on the top, beautifully aired, are spread out your prettier thoughts, ready for you to put on. + +I don't know whether you have ever seen a map of a person's mind. Doctors sometimes draw maps of other parts of you, and your own map can become intensely interesting, but catch them trying to draw a map of a child's mind, which is not only confused, but keeps going round all the time. There are zigzag lines on it, just like your temperature on a card, and these are probably roads in the island, for the Neverland is always more or less an island, with astonishing splashes of colour here and there, and coral reefs and rakish-looking craft in the offing, and savages and lonely lairs, and gnomes who are mostly tailors, and caves through which a river runs, and princes with six elder brothers, and a hut fast going to decay, and one very small old lady with a hooked nose. It would be an easy map if that were all, but there is also first day at school, religion, fathers, the round pond, needle-work, murders, hangings, verbs that take the dative, chocolate pudding day, getting into braces, say ninety-nine, three-pence for pulling out your tooth yourself, and so on, and either these are part of the island or they are another map showing through, and it is all rather confusing, especially as nothing will stand still. + +Of course the Neverlands vary a good deal. John's, for instance, had a lagoon with flamingoes flying over it at which John was shooting, while Michael, who was very small, had a flamingo with lagoons flying over it. John lived in a boat turned upside down on the sands, Michael in a wigwam, Wendy in a house of leaves deftly sewn together. John had no friends, Michael had friends at night, Wendy had a pet wolf forsaken by its parents, but on the whole the Neverlands have a family resemblance, and if they stood still in a row you could say of them that they have each other's nose, and so forth. On these magic shores children at play are for ever beaching their coracles [simple boat]. We too have been there; we can still hear the sound of the surf, though we shall land no more. + +Of all delectable islands the Neverland is the snuggest and most compact, not large and sprawly, you know, with tedious distances between one adventure and another, but nicely crammed. When you play at it by day with the chairs and table-cloth, it is not in the least alarming, but in the two minutes before you go to sleep it becomes very real. That is why there are night-lights. + +Occasionally in her travels through her children's minds Mrs. Darling found things she could not understand, and of these quite the most perplexing was the word Peter. She knew of no Peter, and yet he was here and there in John and Michael's minds, while Wendy's began to be scrawled all over with him. The name stood out in bolder letters than any of the other words, and as Mrs. Darling gazed she felt that it had an oddly cocky appearance. \ No newline at end of file diff --git a/example/_posts/2010-01-08-post-chat.md b/example/_posts/2010-01-08-post-chat.md new file mode 100644 index 0000000..e61b3f2 --- /dev/null +++ b/example/_posts/2010-01-08-post-chat.md @@ -0,0 +1,134 @@ +--- +title: "Post: Chat" +categories: + - Post Formats +tags: + - chat + - Post Formats +--- + +Abbott: Strange as it may seem, they give ball players nowadays very peculiar names. + +Costello: Funny names? + +Abbott: Nicknames, nicknames. Now, on the St. Louis team we have Who's on first, What's on second, I Don't Know is on third-- + +Costello: That's what I want to find out. I want you to tell me the names of the fellows on the St. Louis team. + +Abbott: I'm telling you. Who's on first, What's on second, I Don't Know is on third-- + +Costello: You know the fellows' names? + +Abbott: Yes. + +Costello: Well, then who's playing first? + +Abbott: Yes. + +Costello: I mean the fellow's name on first base. + +Abbott: Who. + +Costello: The fellow playin' first base. + +Abbott: Who. + +Costello: The guy on first base. + +Abbott: Who is on first. + +Costello: Well, what are you askin' me for? + +Abbott: I'm not asking you--I'm telling you. Who is on first. + +Costello: I'm asking you--who's on first? + +Abbott: That's the man's name. + +Costello: That's who's name? + +Abbott: Yes. + +Costello: When you pay off the first baseman every month, who gets the money? + +Abbott: Every dollar of it. And why not, the man's entitled to it. + +Costello: Who is? + +Abbott: Yes. + +Costello: So who gets it? + +Abbott: Why shouldn't he? Sometimes his wife comes down and collects it. + +Costello: Who's wife? + +Abbott: Yes. After all, the man earns it. + +Costello: Who does? + +Abbott: Absolutely. + +Costello: Well, all I'm trying to find out is what's the guy's name on first base? + +Abbott: Oh, no, no. What is on second base. + +Costello: I'm not asking you who's on second. + +Abbott: Who's on first! + +Costello: St. Louis has a good outfield? + +Abbott: Oh, absolutely. + +Costello: The left fielder's name? + +Abbott: Why. + +Costello: I don't know, I just thought I'd ask. + +Abbott: Well, I just thought I'd tell you. + +Costello: Then tell me who's playing left field? + +Abbott: Who's playing first. + +Costello: Stay out of the infield! The left fielder's name? + +Abbott: Why. + +Costello: Because. + +Abbott: Oh, he's center field. + +Costello: Wait a minute. You got a pitcher on this team? + +Abbott: Wouldn't this be a fine team without a pitcher? + +Costello: Tell me the pitcher's name. + +Abbott: Tomorrow. + +Costello: Now, when the guy at bat bunts the ball--me being a good catcher--I want to throw the guy out at first base, so I pick up the ball and throw it to who? + +Abbott: Now, that's he first thing you've said right. + +Costello: I DON'T EVEN KNOW WHAT I'M TALKING ABOUT! + +Abbott: Don't get excited. Take it easy. + +Costello: I throw the ball to first base, whoever it is grabs the ball, so the guy runs to second. Who picks up the ball and throws it to what. What throws it to I don't know. I don't know throws it back to tomorrow--a triple play. + +Abbott: Yeah, it could be. + +Costello: Another guy gets up and it's a long ball to center. + +Abbott: Because. + +Costello: Why? I don't know. And I don't care. + +Abbott: What was that? + +Costello: I said, I DON'T CARE! + +Abbott: Oh, that's our shortstop! \ No newline at end of file diff --git a/example/_posts/2010-02-05-post-notice.md b/example/_posts/2010-02-05-post-notice.md new file mode 100644 index 0000000..071c789 --- /dev/null +++ b/example/_posts/2010-02-05-post-notice.md @@ -0,0 +1,68 @@ +--- +title: "Post: Notice" +categories: + - Post Formats +tags: + - Post Formats + - notice +--- + +A notice displays information that explains nearby content. Often used to call attention to a particular detail. + +When using Kramdown `{: .notice}` can be added after a sentence to assign the `.notice` to the `

` element. + +**Changes in Service:** We just updated our [privacy policy](#) here to better service our customers. We recommend reviewing the changes. +{: .notice} + +**Primary Notice:** Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. [Praesent libero](#). Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. +{: .notice--primary} + +**Info Notice:** Lorem ipsum dolor sit amet, [consectetur adipiscing elit](#). Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. +{: .notice--info} + +**Warning Notice:** Lorem ipsum dolor sit amet, consectetur adipiscing elit. [Integer nec odio](#). Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. +{: .notice--warning} + +**Danger Notice:** Lorem ipsum dolor sit amet, [consectetur adipiscing](#) elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. +{: .notice--danger} + +**Success Notice:** Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at [nibh elementum](#) imperdiet. +{: .notice--success} + +Want to wrap several paragraphs or other elements in a notice? Using Liquid to capture the content and then filter it with `markdownify` is a good way to go. + +```html +{% raw %}{% capture notice-2 %} +#### New Site Features + +* You can now have cover images on blog pages +* Drafts will now auto-save while writing +{% endcapture %}{% endraw %} + +
{% raw %}{{ notice-2 | markdownify }}{% endraw %}
+``` + +{% capture notice-2 %} +#### New Site Features + +* You can now have cover images on blog pages +* Drafts will now auto-save while writing +{% endcapture %} + +
+ {{ notice-2 | markdownify }} +
+ +Or you could skip the capture and stick with straight HTML. + +```html +
+

Message

+

A basic message.

+
+``` + +
+

Message

+

A basic message.

+
\ No newline at end of file diff --git a/example/_posts/2010-02-05-post-quote.md b/example/_posts/2010-02-05-post-quote.md new file mode 100644 index 0000000..60859a0 --- /dev/null +++ b/example/_posts/2010-02-05-post-quote.md @@ -0,0 +1,12 @@ +--- +title: "Post: Quote" +categories: + - Post Formats +tags: + - Post Formats + - quote +--- + +> Only one thing is impossible for God: To find any sense in any copyright law on the planet. +> +> Mark Twain \ No newline at end of file diff --git a/example/_posts/2010-03-07-post-link.md b/example/_posts/2010-03-07-post-link.md new file mode 100644 index 0000000..6a8005e --- /dev/null +++ b/example/_posts/2010-03-07-post-link.md @@ -0,0 +1,15 @@ +--- +title: "Post: Link" +categories: + - Post Formats +tags: + - link + - Post Formats +link: https://github.com +--- + +This theme supports **link posts**, made famous by John Gruber. To use, just add `link: http://url-you-want-linked` to the post's YAML front matter and you're done. + +> And this is how a quote looks. + +Some [link](#) can also be shown. \ No newline at end of file diff --git a/example/_posts/2010-06-02-post-video-youtube.md b/example/_posts/2010-06-02-post-video-youtube.md new file mode 100644 index 0000000..16bc910 --- /dev/null +++ b/example/_posts/2010-06-02-post-video-youtube.md @@ -0,0 +1,11 @@ +--- +title: "Post: Video (YouTube)" +categories: + - Post Formats +tags: + - Post Formats +--- + +YouTube video embed below. + + \ No newline at end of file diff --git a/example/_posts/2010-09-10-post-twitter-embeds.md b/example/_posts/2010-09-10-post-twitter-embeds.md new file mode 100644 index 0000000..7c5c418 --- /dev/null +++ b/example/_posts/2010-09-10-post-twitter-embeds.md @@ -0,0 +1,15 @@ +--- +title: "Post: Twitter Embed" +categories: + - Media +tags: + - content + - embeds + - media + - twitter +--- + + + + +This post tests Twitter Embeds. \ No newline at end of file diff --git a/example/_posts/2010-10-25-post-future-date.md b/example/_posts/2010-10-25-post-future-date.md new file mode 100644 index 0000000..7d1b203 --- /dev/null +++ b/example/_posts/2010-10-25-post-future-date.md @@ -0,0 +1,8 @@ +--- +title: "Post: Future Date" +date: 9999-12-31 +categories: + - Post +--- + +This post lives in the future and is dated {{ page.date | date: "%c" }}. When building Jekyll with the `--future` flag it should appear. \ No newline at end of file diff --git a/example/_posts/2012-03-14-layout-code-excerpt-generated.md b/example/_posts/2012-03-14-layout-code-excerpt-generated.md new file mode 100644 index 0000000..0bdc595 --- /dev/null +++ b/example/_posts/2012-03-14-layout-code-excerpt-generated.md @@ -0,0 +1,14 @@ +--- +title: "Layout: Code Excerpt (Generated)" +categories: + - Layout + - Uncategorized +tags: + - content + - excerpt + - layout +--- + +This is the post content with inline code, (e.g. `red`. It should be displayed in place of the auto-generated excerpt in single-page views. Archive-index pages should display an auto-generated excerpt of this content. + +Be sure to test the formatting of the auto-generated excerpt, to ensure that it doesn't create any layout problems. \ No newline at end of file diff --git a/example/_posts/2012-03-14-layout-excerpt-defined.md b/example/_posts/2012-03-14-layout-excerpt-defined.md new file mode 100644 index 0000000..7091cf8 --- /dev/null +++ b/example/_posts/2012-03-14-layout-excerpt-defined.md @@ -0,0 +1,15 @@ +--- +title: "Layout: Excerpt (Defined)" +excerpt: "This is a user-defined post excerpt. It should be displayed in place of the post content in archive-index pages." +categories: + - Layout + - Uncategorized +tags: + - content + - excerpt + - layout +--- + +This is the post content. It should be displayed in place of the user-defined excerpt in archive-index pages. + +This paragraph should be absent from an archive-index page where `post.excerpt` is shown. \ No newline at end of file diff --git a/example/_posts/2012-03-14-layout-excerpt-generated.md b/example/_posts/2012-03-14-layout-excerpt-generated.md new file mode 100644 index 0000000..1af0e35 --- /dev/null +++ b/example/_posts/2012-03-14-layout-excerpt-generated.md @@ -0,0 +1,23 @@ +--- +title: "Layout: Excerpt (Generated)" +excerpt_separator: "" +categories: + - Layout + - Uncategorized +tags: + - content + - excerpt + - layout +--- + +This is the post content. Archive-index pages should display an auto-generated excerpt of this content. + +## Headline Goes Here + +Be sure to test the formatting of the auto-generated excerpt, to ensure that it doesn't create any layout problems. + + + +Lorem ipsum dolor sit amet, dicant nusquam corpora in usu, laudem putent fuisset ut eam. Justo accusam definitionem id cum, choro prodesset ex his. Noluisse constituto intellegebat ea mei. Timeam admodum omnesque pri ex, eos habemus suavitate aliquando cu. Dico nihil delectus quo cu. Ludus cetero cu eos, vidit invidunt dissentiet mea ne. + +Usu delenit vocibus elaboraret ex. Scripta sapientem adversarium ei pri, pri ex solet democritum. Nam te porro impedit, ei doctus albucius cotidieque pri, ea mutat causae lucilius has. Pri omnis errem labore ut. An aperiam tibique est, mei te dolore veritus, nam nulla feugait ut. In vis labitur eripuit contentiones. \ No newline at end of file diff --git a/example/_posts/2012-05-22-markup-text-readability.md b/example/_posts/2012-05-22-markup-text-readability.md new file mode 100644 index 0000000..e0dde8e --- /dev/null +++ b/example/_posts/2012-05-22-markup-text-readability.md @@ -0,0 +1,45 @@ +--- +title: "Markup: Text Readability Test" +excerpt: "A bunch of text to test readability." +tags: + - sample post + - readability + - test +--- + +Portland in shoreditch Vice, labore typewriter pariatur hoodie fap sartorial Austin. Pinterest literally occupy Schlitz forage. Odio ad blue bottle vinyl, 90's narwhal commodo bitters pour-over nostrud. Ugh est hashtag in, fingerstache adipisicing laboris esse Pinterest shabby chic Portland. Shoreditch bicycle rights anim, flexitarian laboris put a bird on it vinyl cupidatat narwhal. Hashtag artisan skateboard, flannel Bushwick nesciunt salvia aute fixie do plaid post-ironic dolor McSweeney's. Cliche pour-over chambray nulla four loko skateboard sapiente hashtag. + +Vero laborum commodo occupy. Semiotics voluptate mumblecore pug. Cosby sweater ullamco quinoa ennui assumenda, sapiente occupy delectus lo-fi. Ea fashion axe Marfa cillum aliquip. Retro Bushwick keytar cliche. Before they sold out sustainable gastropub Marfa readymade, ethical Williamsburg skateboard brunch qui consectetur gentrify semiotics. Mustache cillum irony, fingerstache magna pour-over keffiyeh tousled selfies. + +## Cupidatat 90's lo-fi authentic try-hard + +In pug Portland incididunt mlkshk put a bird on it vinyl quinoa. Terry Richardson shabby chic +1, scenester Tonx excepteur tempor fugiat voluptate fingerstache aliquip nisi next level. Farm-to-table hashtag Truffaut, Odd Future ex meggings gentrify single-origin coffee try-hard 90's. + + * Sartorial hoodie + * Labore viral forage + * Tote bag selvage + * DIY exercitation et id ugh tumblr church-key + +Incididunt umami sriracha, ethical fugiat VHS ex assumenda yr irure direct trade. Marfa Truffaut bicycle rights, kitsch placeat Etsy kogi asymmetrical. Beard locavore flexitarian, kitsch photo booth hoodie plaid ethical readymade leggings yr. + +Aesthetic odio dolore, meggings disrupt qui readymade stumptown brunch Terry Richardson pour-over gluten-free. Banksy american apparel in selfies, biodiesel flexitarian organic meh wolf quinoa gentrify banjo kogi. Readymade tofu ex, scenester dolor umami fingerstache occaecat fashion axe Carles jean shorts minim. Keffiyeh fashion axe nisi Godard mlkshk dolore. Lomo you probably haven't heard of them eu non, Odd Future Truffaut pug keytar meggings McSweeney's Pinterest cred. Etsy literally aute esse, eu bicycle rights qui meggings fanny pack. Gentrify leggings pug flannel duis. + +## Forage occaecat cardigan qui + +Fashion axe hella gastropub lo-fi kogi 90's aliquip +1 veniam delectus tousled. Cred sriracha locavore gastropub kale chips, iPhone mollit sartorial. Anim dolore 8-bit, pork belly dolor photo booth aute flannel small batch. Dolor disrupt ennui, tattooed whatever salvia Banksy sartorial roof party selfies raw denim sint meh pour-over. Ennui eu cardigan sint, gentrify iPhone cornhole. + +> Whatever velit occaecat quis deserunt gastropub, leggings elit tousled roof party 3 wolf moon kogi pug blue bottle ea. Fashion axe shabby chic Austin quinoa pickled laborum bitters next level, disrupt deep v accusamus non fingerstache. + +Tote bag asymmetrical elit sunt. Occaecat authentic Marfa, hella McSweeney's next level irure veniam master cleanse. Sed hoodie letterpress artisan wolf leggings, 3 wolf moon commodo ullamco. Anim occupy ea labore Terry Richardson. Tofu ex master cleanse in whatever pitchfork banh mi, occupy fugiat fanny pack Austin authentic. Magna fugiat 3 wolf moon, labore McSweeney's sustainable vero consectetur. Gluten-free disrupt enim, aesthetic fugiat jean shorts trust fund keffiyeh magna try-hard. + +## Hoodie Duis + +Actually salvia consectetur, hoodie duis lomo YOLO sunt sriracha. Aute pop-up brunch farm-to-table odio, salvia irure occaecat. Sriracha small batch literally skateboard. Echo Park nihil hoodie, aliquip forage artisan laboris. Trust fund reprehenderit nulla locavore. Stumptown raw denim kitsch, keffiyeh nulla twee dreamcatcher fanny pack ullamco 90's pop-up est culpa farm-to-table. Selfies 8-bit do pug odio. + +### Thundercats Ho! + +Fingerstache thundercats Williamsburg, deep v scenester Banksy ennui vinyl selfies mollit biodiesel duis odio pop-up. Banksy 3 wolf moon try-hard, sapiente enim stumptown deep v ad letterpress. Squid beard brunch, exercitation raw denim yr sint direct trade. Raw denim narwhal id, flannel DIY McSweeney's seitan. Letterpress artisan bespoke accusamus, meggings laboris consequat Truffaut qui in seitan. Sustainable cornhole Schlitz, twee Cosby sweater banh mi deep v forage letterpress flannel whatever keffiyeh. Sartorial cred irure, semiotics ethical sed blue bottle nihil letterpress. + +Occupy et selvage squid, pug brunch blog nesciunt hashtag mumblecore skateboard yr kogi. Ugh small batch swag four loko. Fap post-ironic qui tote bag farm-to-table american apparel scenester keffiyeh vero, swag non pour-over gentrify authentic pitchfork. Schlitz scenester lo-fi voluptate, tote bag irony bicycle rights pariatur vero Vice freegan wayfarers exercitation nisi shoreditch. Chambray tofu vero sed. Street art swag literally leggings, Cosby sweater mixtape PBR lomo Banksy non in pitchfork ennui McSweeney's selfies. Odd Future Banksy non authentic. + +Aliquip enim artisan dolor post-ironic. Pug tote bag Marfa, deserunt pour-over Portland wolf eu odio intelligentsia american apparel ugh ea. Sunt viral et, 3 wolf moon gastropub pug id. Id fashion axe est typewriter, mlkshk Portland art party aute brunch. Sint pork belly Cosby sweater, deep v mumblecore kitsch american apparel. Try-hard direct trade tumblr sint skateboard. Adipisicing bitters excepteur biodiesel, pickled gastropub aute veniam. diff --git a/example/_posts/2013-01-05-markup-title-with-markup.md b/example/_posts/2013-01-05-markup-title-with-markup.md new file mode 100644 index 0000000..2ead3fc --- /dev/null +++ b/example/_posts/2013-01-05-markup-title-with-markup.md @@ -0,0 +1,14 @@ +--- +title: "Markup: Title *with* **Markdown**" +categories: + - Markdown +tags: + - css + - html + - title +--- + +Verify that: + +* The post title renders the word "with" in *italics* and the word "Markdown" in **bold**. +* The post title markup should be removed from the browser window / tab. \ No newline at end of file diff --git a/example/_posts/2013-01-05-markup-title-with-special-characters.md b/example/_posts/2013-01-05-markup-title-with-special-characters.md new file mode 100644 index 0000000..075828a --- /dev/null +++ b/example/_posts/2013-01-05-markup-title-with-special-characters.md @@ -0,0 +1,432 @@ +--- +title: "Markup: Title with Special --- Characters" +categories: + - Markup +tags: + - html + - markup + - post + - title +--- + +Putting special characters in the title should have no adverse effect on the layout or functionality. + +Special characters in the post title have been known to cause issues with JavaScript and XML when not properly encoded and escaped. + +## Latin Character Tests + +This is a test to see if the fonts used in this theme support basic Latin characters. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ ! + + “ + + # + + $ + + % + + & + + ‘ + + ( + + ) + + * +
+ + + + , + + – + + . + + / + + + 1 + + 2 + + 3 + + 4 +
+ 5 + + 6 + + 7 + + 8 + + 9 + + : + + ; + + > + + = + + < +
+ ? + + @ + + A + + B + + C + + D + + E + + F + + G + + H +
+ I + + J + + K + + L + + M + + N + + O + + P + + Q + + R +
+ S + + T + + U + + V + + W + + X + + Y + + Z + + [ + +
+ ] + + ^ + + _ + + ` + + a + + b + + c + + d + + e + + f +
+ g + + h + + i + + j + + k + + l + + m + + n + + o + + p +
+ q + + r + + s + + t + + u + + v + + w + + x + + y + + z +
+ { + + | + + } + + ~ + + + + + + +
\ No newline at end of file diff --git a/example/_posts/2013-01-09-markup-text-alignment.md b/example/_posts/2013-01-09-markup-text-alignment.md new file mode 100644 index 0000000..e6fd09b --- /dev/null +++ b/example/_posts/2013-01-09-markup-text-alignment.md @@ -0,0 +1,34 @@ +--- +title: "Markup: Text Alignment" +categories: + - Markup +tags: + - alignment + - content + - css + - markup +--- + +### Default + +This is a paragraph. It should not have any alignment of any kind. It should just flow like you would normally expect. Nothing fancy. Just straight up text, free flowing, with love. Completely neutral and not picking a side or sitting on the fence. It just is. It just freaking is. It likes where it is. It does not feel compelled to pick a side. Leave him be. It will just be better that way. Trust me. + +### Left Align + +This is a paragraph. It is left aligned. Because of this, it is a bit more liberal in it's views. It's favorite color is green. Left align tends to be more eco-friendly, but it provides no concrete evidence that it really is. Even though it likes share the wealth evenly, it leaves the equal distribution up to justified alignment. +{: style="text-align: left;"} + +### Center Align + +This is a paragraph. It is center aligned. Center is, but nature, a fence sitter. A flip flopper. It has a difficult time making up its mind. It wants to pick a side. Really, it does. It has the best intentions, but it tends to complicate matters more than help. The best you can do is try to win it over and hope for the best. I hear center align does take bribes. +{: style="text-align: center;"} + +### Right Align + +This is a paragraph. It is right aligned. It is a bit more conservative in it's views. It's prefers to not be told what to do or how to do it. Right align totally owns a slew of guns and loves to head to the range for some practice. Which is cool and all. I mean, it's a pretty good shot from at least four or five football fields away. Dead on. So boss. +{: style="text-align: right;"} + +### Justify Align + +This is a paragraph. It is justify aligned. It gets really mad when people associate it with Justin Timberlake. Typically, justified is pretty straight laced. It likes everything to be in it's place and not all cattywampus like the rest of the aligns. I am not saying that makes it better than the rest of the aligns, but it does tend to put off more of an elitist attitude. +{: style="text-align: justify;"} \ No newline at end of file diff --git a/example/_posts/2013-01-10-markup-image-alignment.md b/example/_posts/2013-01-10-markup-image-alignment.md new file mode 100644 index 0000000..b92dab6 --- /dev/null +++ b/example/_posts/2013-01-10-markup-image-alignment.md @@ -0,0 +1,72 @@ +--- +title: "Markup: Image Alignment" +categories: + - Markup +tags: + - alignment + - captions + - content + - css + - image + - markup +--- + +Welcome to image alignment! The best way to demonstrate the ebb and flow of the various image positioning options is to nestle them snuggly among an ocean of words. Grab a paddle and let's get started. + +![image-center]({{ site.url }}{{ site.baseurl }}/assets/images/image-alignment-580x300.jpg){: .align-center} + +The image above happens to be **centered**. + +![image-left]({{ site.url }}{{ site.baseurl }}/assets/images/image-alignment-150x150.jpg){: .align-left} The rest of this paragraph is filler for the sake of seeing the text wrap around the 150×150 image, which is **left aligned**. + +As you can see the should be some space above, below, and to the right of the image. The text should not be creeping on the image. Creeping is just not right. Images need breathing room too. Let them speak like you words. Let them do their jobs without any hassle from the text. In about one more sentence here, we'll see that the text moves from the right of the image down below the image in seamless transition. Again, letting the do it's thing. Mission accomplished! + +And now for a **massively large image**. It also has **no alignment**. + +![no-alignment]({{ site.url }}{{ site.baseurl }}/assets/images/image-alignment-1200x4002.jpg) + +The image above, though 1200px wide, should not overflow the content area. It should remain contained with no visible disruption to the flow of content. + +![image-right]({{ site.url }}{{ site.baseurl }}/assets/images/image-alignment-300x200.jpg){: .align-right} + +And now we're going to shift things to the **right align**. Again, there should be plenty of room above, below, and to the left of the image. Just look at him there --- Hey guy! Way to rock that right side. I don't care what the left aligned image says, you look great. Don't let anyone else tell you differently. + +In just a bit here, you should see the text start to wrap below the right aligned image and settle in nicely. There should still be plenty of room and everything should be sitting pretty. Yeah --- Just like that. It never felt so good to be right. + +And just when you thought we were done, we're going to do them all over again with captions! + +
+ +
Look at 580 x 300 getting some love.
+
+ +The figure above happens to be **centered**. The caption also has a link in it, just to see if it does anything funky. + +
+ +
Itty-bitty caption.
+
+ +The rest of this paragraph is filler for the sake of seeing the text wrap around the 150×150 image, which is **left aligned**. + +As you can see the should be some space above, below, and to the right of the image. The text should not be creeping on the image. Creeping is just not right. Images need breathing room too. Let them speak like you words. Let them do their jobs without any hassle from the text. In about one more sentence here, we'll see that the text moves from the right of the image down below the image in seamless transition. Again, letting the do it's thing. Mission accomplished! + +And now for a **massively large image**. It also has **no alignment**. + +
+ +
Massive image comment for your eyeballs.
+
+ +The figure element above has an inline style of `width: 1200px` set which should break it outside of the normal content flow. + +
+ +
Feels good to be right all the time.
+
+ +And now we're going to shift things to the **right align**. Again, there should be plenty of room above, below, and to the left of the image. Just look at him there --- Hey guy! Way to rock that right side. I don't care what the left aligned image says, you look great. Don't let anyone else tell you differently. + +In just a bit here, you should see the text start to wrap below the right aligned image and settle in nicely. There should still be plenty of room and everything should be sitting pretty. Yeah --- Just like that. It never felt so good to be right. + +And that's a wrap, yo! You survived the tumultuous waters of alignment. Image alignment achievement unlocked! diff --git a/example/_posts/2013-01-11-markup-html-tags-and-formatting.md b/example/_posts/2013-01-11-markup-html-tags-and-formatting.md new file mode 100644 index 0000000..5a32de9 --- /dev/null +++ b/example/_posts/2013-01-11-markup-html-tags-and-formatting.md @@ -0,0 +1,221 @@ +--- +title: "Markup: HTML Tags and Formatting" +subtitle: "The common elements" +categories: + - Markup +tags: + - content + - css + - formatting + - html + - markup +--- + +A variety of common markup showing how the theme styles them. + +# Header one + +## Header two + +### Header three + +#### Header four + +##### Header five + +###### Header six + +## Blockquotes + +Single line blockquote: + +> Stay hungry. Stay foolish. + +Multi line blockquote with a cite reference: + +> People think focus means saying yes to the thing you've got to focus on. But that's not what it means at all. It means saying no to the hundred other good ideas that there are. You have to pick carefully. I'm actually as proud of the things we haven't done as the things I have done. Innovation is saying no to 1,000 things. + +Steve Jobs --- Apple Worldwide Developers' Conference, 1997 +{: .small} + +## Tables + +| Employee | Salary | | +| -------- | ------ | ------------------------------------------------------------ | +| [John Doe](#) | $1 | Because that's all Steve Jobs needed for a salary. | +| [Jane Doe](#) | $100K | For all the blogging she does. | +| [Fred Bloggs](#) | $100M | Pictures are worth a thousand words, right? So Jane × 1,000. | +| [Jane Bloggs](#) | $100B | With hair like that?! Enough said. | + +| Header1 | Header2 | Header3 | +|:--------|:-------:|--------:| +| cell1 | cell2 | cell3 | +| cell4 | cell5 | cell6 | +|-----------------------------| +| cell1 | cell2 | cell3 | +| cell4 | cell5 | cell6 | +|=============================| +| Foot1 | Foot2 | Foot3 | + +## Definition Lists + +Definition List Title +: Definition list division. + +Startup +: A startup company or startup is a company or temporary organization designed to search for a repeatable and scalable business model. + +#dowork +: Coined by Rob Dyrdek and his personal body guard Christopher "Big Black" Boykins, "Do Work" works as a self motivator, to motivating your friends. + +Do It Live +: I'll let Bill O'Reilly [explain](https://www.youtube.com/watch?v=O_HyZ5aW76c "We'll Do It Live") this one. + +## Unordered Lists (Nested) + + * List item one + * List item one + * List item one + * List item two + * List item three + * List item four + * List item two + * List item three + * List item four + * List item two + * List item three + * List item four + +## Ordered List (Nested) + + 1. List item one + 1. List item one + 1. List item one + 2. List item two + 3. List item three + 4. List item four + 2. List item two + 3. List item three + 4. List item four + 2. List item two + 3. List item three + 4. List item four + +## Buttons + +Make any link standout more when applying the `.btn` class. + +```html +Success Button +``` + +[Primary Button](#){: .btn} +[Success Button](#){: .btn .btn--success} +[Warning Button](#){: .btn .btn--warning} +[Danger Button](#){: .btn .btn--danger} +[Info Button](#){: .btn .btn--info} +[Inverse Button](#){: .btn .btn--inverse} +[Light Outline Button](#){: .btn .btn--light-outline} + +```markdown +[Primary Button Text](#link){: .btn} +[Success Button Text](#link){: .btn .btn--success} +[Warning Button Text](#link){: .btn .btn--warning} +[Danger Button Text](#link){: .btn .btn--danger} +[Info Button Text](#link){: .btn .btn--info} +[Inverse Button](#link){: .btn .btn--inverse} +[Light Outline Button](#link){: .btn .btn--light-outline} +``` + +[X-Large Button](#){: .btn .btn--x-large} +[Large Button](#){: .btn .btn--large} +[Default Button](#){: .btn} +[Small Button](#){: .btn .btn--small} + +```markdown +[X-Large Button](#link){: .btn .btn--x-large} +[Large Button](#link){: .btn .btn--large} +[Default Button](#link){: .btn} +[Small Button](#link){: .btn .btn--small} +``` + +## Notices + +**Watch out!** You can also add notices by appending `{: .notice}` to a paragraph. +{: .notice} + +## HTML Tags + +### Address Tag + +
+ 1 Infinite Loop
Cupertino, CA 95014
United States +
+ +### Anchor Tag (aka. Link) + +This is an example of a [link](http://apple.com "Apple"). + +### Abbreviation Tag + +The abbreviation CSS stands for "Cascading Style Sheets". + +*[CSS]: Cascading Style Sheets + +### Cite Tag + +"Code is poetry." ---Automattic + +### Code Tag + +You will learn later on in these tests that `word-wrap: break-word;` will be your best friend. + +### Strike Tag + +This tag will let you strikeout text. + +### Emphasize Tag + +The emphasize tag should _italicize_ text. + +### Insert Tag + +This tag should denote inserted text. + +### Keyboard Tag + +This scarcely known tag emulates keyboard text, which is usually styled like the `` tag. + +### Preformatted Tag + +This tag styles large blocks of code. + +
+.post-title {
+	margin: 0 0 5px;
+	font-weight: bold;
+	font-size: 38px;
+	line-height: 1.2;
+	and here's a line of some really, really, really, really long text, just to see how the PRE tag handles it and to find out how it overflows;
+}
+
+ +### Quote Tag + +Developers, developers, developers… –Steve Ballmer + +### Strong Tag + +This tag shows **bold text**. + +### Subscript Tag + +Getting our science styling on with H2O, which should push the "2" down. + +### Superscript Tag + +Still sticking with science and Isaac Newton's E = MC2, which should lift the 2 up. + +### Variable Tag + +This allows you to denote variables. \ No newline at end of file diff --git a/example/_posts/2013-05-22-markup-more-images.md b/example/_posts/2013-05-22-markup-more-images.md new file mode 100644 index 0000000..6fede00 --- /dev/null +++ b/example/_posts/2013-05-22-markup-more-images.md @@ -0,0 +1,63 @@ +--- +title: "Markup: Another Post with Images" +excerpt: "Examples and code for displaying images in posts." +tags: + - sample post + - images + - test +--- + +Here are some examples of what a post with images might look like. If you want to display two or three images next to each other responsively use `figure` with the appropriate `class`. Each instance of `figure` is auto-numbered and displayed in the caption. + +### Figures (for images or video) + +#### One Up + +
+ +
Morning Fog Emerging From Trees by A Guy Taking Pictures, on Flickr.
+
+ +Vero laborum commodo occupy. Semiotics voluptate mumblecore pug. Cosby sweater ullamco quinoa ennui assumenda, sapiente occupy delectus lo-fi. Ea fashion axe Marfa cillum aliquip. Retro Bushwick keytar cliche. Before they sold out sustainable gastropub Marfa readymade, ethical Williamsburg skateboard brunch qui consectetur gentrify semiotics. Mustache cillum irony, fingerstache magna pour-over keffiyeh tousled selfies. + +#### Two Up + +Apply the `half` class like so to display two images side by side that share the same caption. + +```html +
+ + +
Caption describing these two images.
+
+``` + +And you'll get something that looks like this: + +
+ + +
Two images.
+
+ +#### Three Up + +Apply the `third` class like so to display three images side by side that share the same caption. + +```html +
+ + + +
Caption describing these three images.
+
+``` + +And you'll get something that looks like this: + +
+ + + +
Three images.
+
diff --git a/example/_posts/2013-08-16-markup-syntax-highlighting.md b/example/_posts/2013-08-16-markup-syntax-highlighting.md new file mode 100644 index 0000000..e9af95a --- /dev/null +++ b/example/_posts/2013-08-16-markup-syntax-highlighting.md @@ -0,0 +1,99 @@ +--- +title: "Markup: Syntax Highlighting" +excerpt: "Post displaying the various ways of highlighting code in Markdown." +modified: 2016-09-09T09:55:10-04:00 +tags: + - code + - syntax highlighting +--- + +Syntax highlighting is a feature that displays source code, in different colors and fonts according to the category of terms. This feature facilitates writing in a structured language such as a programming language or a markup language as both structures and syntax errors are visually distinct. Highlighting does not affect the meaning of the text itself; it is intended only for human readers.[^1] + +[^1]: + +### GFM Code Blocks + +GitHub Flavored Markdown [fenced code blocks](https://help.github.com/articles/creating-and-highlighting-code-blocks/) are supported. To modify styling and highlight colors edit `/_sass/syntax.scss`. + +```css +#container { + float: left; + margin: 0 -240px 0 0; + width: 100%; +} +``` + +{% highlight scss %} +.highlight { + margin: 0; + padding: 1em; + font-family: $monospace; + font-size: $type-size-7; + line-height: 1.8; +} +{% endhighlight %} + +```html +{% raw %}{% endraw %} +``` + +{% highlight html linenos %} +{% raw %}{% endraw %} +{% endhighlight %} + +```ruby +module Jekyll + class TagIndex < Page + def initialize(site, base, dir, tag) + @site = site + @base = base + @dir = dir + @name = 'index.html' + self.process(@name) + self.read_yaml(File.join(base, '_layouts'), 'tag_index.html') + self.data['tag'] = tag + tag_title_prefix = site.config['tag_title_prefix'] || 'Tagged: ' + tag_title_suffix = site.config['tag_title_suffix'] || '–' + self.data['title'] = "#{tag_title_prefix}#{tag}" + self.data['description'] = "An archive of posts tagged #{tag}." + end + end +end +``` + +### Code Blocks in Lists + +Indentation matters. Be sure the indent of the code block aligns with the first non-space character after the list item marker (e.g., `1.`). Usually this will mean indenting 3 spaces instead of 4. + +1. Do step 1. +2. Now do this: + + ```ruby + def print_hi(name) + puts "Hi, #{name}" + end + print_hi('Tom') + #=> prints 'Hi, Tom' to STDOUT. + ``` + +3. Now you can do this. + +### GitHub Gist Embed + +An example of a Gist embed below. + + diff --git a/example/about.md b/example/about.md new file mode 100644 index 0000000..feafecb --- /dev/null +++ b/example/about.md @@ -0,0 +1,15 @@ +--- +title: "About" +layout: about +permalink: /about/ +--- + +This is the base Jekyll theme. You can find out more info about customizing your Jekyll theme, as well as basic Jekyll usage documentation at [jekyllrb.com](https://jekyllrb.com/) + +You can find the source code for the Jekyll new theme at: +{% include icon-github.html username="jekyll" %} / +[minima](https://github.com/jekyll/minima) + +You can find the source code for Jekyll at +{% include icon-github.html username="jekyll" %} / +[jekyll](https://github.com/jekyll/jekyll) \ No newline at end of file diff --git a/example/cv.md b/example/cv.md new file mode 100644 index 0000000..2d42f4e --- /dev/null +++ b/example/cv.md @@ -0,0 +1,8 @@ +--- +title: Curriculum Vitæ +layout: cv +actions: + - label: "Download as PDF" + icon: pdf + url: "#pdf-asset" +--- \ No newline at end of file diff --git a/example/index.html b/example/index.html new file mode 100644 index 0000000..4ee05e9 --- /dev/null +++ b/example/index.html @@ -0,0 +1,16 @@ +--- +layout: home +paginate: true +alt_title: "Basically Basic" +sub_title: "The name says it all" +image: assets/images/markus-spiske-207946.jpg +introduction: | + Basically Basic is a Jekyll theme meant to be a substitute for the default `jekyll new` theme --- [Minima](https://github.com/jekyll/minima). Conventions and features found in Minima are fully supported by **Basically Basic**. +actions: + - label: "Learn More" + icon: github + url: "#learn-more-link" + - label: "Download" + icon: download + url: "#download-link" +--- \ No newline at end of file diff --git a/jekyll-theme-basically-basic.gemspec b/jekyll-theme-basically-basic.gemspec new file mode 100644 index 0000000..56d8e5e --- /dev/null +++ b/jekyll-theme-basically-basic.gemspec @@ -0,0 +1,26 @@ +# coding: utf-8 + +Gem::Specification.new do |spec| + spec.name = "jekyll-theme-basically-basic" + spec.version = "1.0.0" + spec.authors = ["Michael Rose"] + + spec.summary = %q{A basic Jekyll theme with an opinionated design.} + spec.homepage = "https://github.com/mmistakes/jekyll-theme-basically-basic" + spec.license = "MIT" + + spec.metadata["plugin_type"] = "theme" + + spec.files = `git ls-files -z`.split("\x0").select do |f| + f.match(%r{^(assets|_(includes|layouts|sass)/|(LICENSE|README|CHANGELOG)((\.(txt|md|markdown)|$)))}i) + end + + spec.add_runtime_dependency "jekyll", "~> 3.3" + spec.add_runtime_dependency "jekyll-feed", "~> 0.8" + spec.add_runtime_dependency "jekyll-paginate", "~> 1.1" + spec.add_runtime_dependency "jekyll-seo-tag", "~> 2.1" + spec.add_runtime_dependency "jekyll-sitemap", "~> 1.0" + + spec.add_development_dependency "bundler", "~> 1.12" + spec.add_development_dependency "rake", "~> 10.0" +end From a12a907943815b33b0261b2201b07bb4f625077c Mon Sep 17 00:00:00 2001 From: Michael Rose Date: Wed, 8 Mar 2017 16:07:06 -0500 Subject: [PATCH 003/245] Strip HTML from title's --- _includes/entry.html | 2 +- _includes/page-intro.html | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/_includes/entry.html b/_includes/entry.html index 1a23e7d..0543c84 100644 --- a/_includes/entry.html +++ b/_includes/entry.html @@ -1,5 +1,5 @@ {% if post.id %} - {% assign title = post.title | markdownify | remove: "

" | remove: "

" %} + {% assign title = post.title | markdownify | strip_html %} {% else %} {% assign title = post.title %} {% endif %} diff --git a/_includes/page-intro.html b/_includes/page-intro.html index 4143757..2d664da 100644 --- a/_includes/page-intro.html +++ b/_includes/page-intro.html @@ -1,9 +1,9 @@
- {% if site.plugins contains 'jekyll-paginate' and page.paginate %} + {% if site.plugins contains 'jekyll-paginate' and page.paginate or site.gems contains 'jekyll-paginate' and page.paginate %} {% comment %} Add paginator.posts loop if jekyll-paginate plugin is enabled and page.paginate == true From 299da5c985349fac8124705345a4d7121d214e23 Mon Sep 17 00:00:00 2001 From: Michael Rose Date: Thu, 14 Dec 2017 11:21:35 -0500 Subject: [PATCH 137/245] Add note about `plugins` name change --- _config.yml | 2 +- docs/_config.yml | 2 +- example/_config.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/_config.yml b/_config.yml index 019b2ea..18da4f1 100644 --- a/_config.yml +++ b/_config.yml @@ -30,7 +30,7 @@ logo: # path of site logo, e.g. "/assets/images/logo.png" # Build settings markdown: kramdown theme: jekyll-theme-basically-basic -plugins: +plugins: # previsously gems - jekyll-feed - jekyll-seo-tag - jekyll-sitemap diff --git a/docs/_config.yml b/docs/_config.yml index 7d66734..c0240f6 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -53,7 +53,7 @@ permalink: /:categories/:title/ timezone: America/New_York # http://en.wikipedia.org/wiki/List_of_tz_database_time_zones # Plugins -plugins: +plugins: # previously gems - jekyll-feed - jekyll-seo-tag - jekyll-sitemap diff --git a/example/_config.yml b/example/_config.yml index 74f2e79..e622733 100644 --- a/example/_config.yml +++ b/example/_config.yml @@ -34,7 +34,7 @@ liquid: # Build settings markdown: kramdown theme: jekyll-theme-basically-basic -plugins: +plugins: # previously gems - jekyll-feed - jekyll-seo-tag - jekyll-sitemap From 0b37fc76a2c514b8c08bd1af6d11edb5f6428e0d Mon Sep 17 00:00:00 2001 From: Michael Rose Date: Thu, 14 Dec 2017 11:21:42 -0500 Subject: [PATCH 138/245] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index be3c654..ba877eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Changed - Use [jekyll-remote-theme](https://github.com/benbalter/jekyll-remote-theme) for demo site. - Update GitHub Pages compatible installation instructions to include jekyll-remote-theme method. +- Update `site.gems` references to `site.plugins`. [#39](https://github.com/mmistakes/jekyll-theme-basically-basic/pull/39) ## [1.1.3] - 2017-10-19 From 7e7e8bd844c58b1add013b4698c74ccc14e8f667 Mon Sep 17 00:00:00 2001 From: "Mark A. Matienzo" Date: Tue, 2 Jan 2018 13:22:17 -0800 Subject: [PATCH 139/245] Change id for primary nav to #primary-nav (#41) The skip to primary navigation links were not working as they referenced an incorrect anchor ID. --- _includes/navigation.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_includes/navigation.html b/_includes/navigation.html index 5351313..bb10707 100644 --- a/_includes/navigation.html +++ b/_includes/navigation.html @@ -1,4 +1,4 @@ - From 15214e1c1dd82b3851f667472a77b855380c7bab Mon Sep 17 00:00:00 2001 From: Michael Rose Date: Tue, 2 Jan 2018 16:22:34 -0500 Subject: [PATCH 140/245] Update CHANGELOG --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ba877eb..055d1ce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Update GitHub Pages compatible installation instructions to include jekyll-remote-theme method. - Update `site.gems` references to `site.plugins`. [#39](https://github.com/mmistakes/jekyll-theme-basically-basic/pull/39) +### Fixed +- Fixed primary navigation skip link to use correct anchor ID. [#41](https://github.com/mmistakes/jekyll-theme-basically-basic/pull/41) + ## [1.1.3] - 2017-10-19 ### Fixed From 2133d7d1e0f19d4ed89e029245c6cee805342096 Mon Sep 17 00:00:00 2001 From: Michael Rose Date: Tue, 2 Jan 2018 16:24:55 -0500 Subject: [PATCH 141/245] Update GitHub Pages installation instructions --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 17a2910..9a897b3 100644 --- a/README.md +++ b/README.md @@ -107,6 +107,8 @@ plugins: - jekyll-remote-theme ``` +Remove any other `theme:` or `remote_theme:` entry. + **Note:** Your Jekyll site should be viewable immediately at . If it's not, you can force a rebuild by **Customizing Your Site** (see below for more details). If you're hosting several Jekyll based sites under the same GitHub username you will have to use Project Pages instead of User Pages. Essentially you rename the repo to something other than **USERNAME.github.io** and create a `gh-pages` branch off of `master`. For more details on how to set things up check [GitHub's documentation](https://help.github.com/articles/user-organization-and-project-pages/). From 5db228b5ecf174e7382165f9aec715fa9eef9f49 Mon Sep 17 00:00:00 2001 From: Michael Rose Date: Tue, 2 Jan 2018 16:29:40 -0500 Subject: [PATCH 142/245] Update GitHub Pages installation method instructions --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 9a897b3..78e1020 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ with a few enhancements thrown in for good measure: 1. [Installation](#installation) 1. [Ruby Gem Method](#ruby-gem-method) - 2. [GitHub Pages Compatible Method](#github-pages-compatible-method) + 2. [GitHub Pages Method](#github-pages-method) 1. [Remove the Unnecessary](#remove-the-unnecessary) 2. [Structure](#structure) 1. [Starting Fresh](#starting-fresh) @@ -85,7 +85,7 @@ theme as Ruby gem. If you're hosting with GitHub Pages you'll have to use the theme: jekyll-theme-basically-basic ``` -### GitHub Pages Compatible Method +### GitHub Pages Method If you're hosting with GitHub Pages follow these steps instead: @@ -93,7 +93,6 @@ Replace `gem "jekyll"` with: ```ruby gem "github-pages", group: :jekyll_plugins -gem "jekyll-remote-theme" ``` Run `bundle update` and verify that all gems install properly. From 6e929f2bb3ef1bc42f9687dd3a36e3e89392f561 Mon Sep 17 00:00:00 2001 From: Michael Rose Date: Wed, 3 Jan 2018 08:31:39 -0500 Subject: [PATCH 143/245] Update license and copyright --- LICENSE.md | 16 ++++++++++++++-- README.md | 14 +++++++++++++- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/LICENSE.md b/LICENSE.md index b7cc9a0..afa0e1f 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2017 Michael Rose +Copyright (c) 2017-2018 Michael Rose and contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -18,4 +18,16 @@ 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. \ No newline at end of file +SOFTWARE. + +Basically Basic incorporates icons from [The Noun Project](https://thenounproject.com/). +Icons are distributed under Creative Commons Attribution 3.0 United States (CC BY 3.0 US). + +Basically Basic incorporates photographs from [Unsplash](https://unsplash.com). + +Basically Basic incorporates [Susy](http://susy.oddbird.net/), +Copyright (c) 2017, Miriam Eric Suzanne. +Susy is distributed under the terms of the [BSD 3-clause "New" or "Revised" License](https://opensource.org/licenses/BSD-3-Clause). + +Basically Basic incorporates [Breakpoint](http://breakpoint-sass.com/). +Breakpoint is distributed under the terms of the [MIT/GPL Licenses](http://opensource.org/licenses/MIT). diff --git a/README.md b/README.md index 78e1020..83dbb92 100644 --- a/README.md +++ b/README.md @@ -697,7 +697,7 @@ grammar, etc. The MIT License (MIT) -Copyright (c) 2017 Michael Rose +Copyright (c) 2017-2018 Michael Rose and contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -716,3 +716,15 @@ 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. + +Basically Basic incorporates icons from [The Noun Project](https://thenounproject.com/). +Icons are distributed under Creative Commons Attribution 3.0 United States (CC BY 3.0 US). + +Basically Basic incorporates photographs from [Unsplash](https://unsplash.com). + +Basically Basic incorporates [Susy](http://susy.oddbird.net/), +Copyright (c) 2017, Miriam Eric Suzanne. +Susy is distributed under the terms of the [BSD 3-clause "New" or "Revised" License](https://opensource.org/licenses/BSD-3-Clause). + +Basically Basic incorporates [Breakpoint](http://breakpoint-sass.com/). +Breakpoint is distributed under the terms of the [MIT/GPL Licenses](http://opensource.org/licenses/MIT). From eeebb7e4ffb019c3ffe88a40a2256a365506c97b Mon Sep 17 00:00:00 2001 From: Michael Rose Date: Wed, 3 Jan 2018 08:32:27 -0500 Subject: [PATCH 144/245] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 055d1ce..a37fdab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Use [jekyll-remote-theme](https://github.com/benbalter/jekyll-remote-theme) for demo site. - Update GitHub Pages compatible installation instructions to include jekyll-remote-theme method. - Update `site.gems` references to `site.plugins`. [#39](https://github.com/mmistakes/jekyll-theme-basically-basic/pull/39) +- Update license and copyright. ### Fixed - Fixed primary navigation skip link to use correct anchor ID. [#41](https://github.com/mmistakes/jekyll-theme-basically-basic/pull/41) From 628629d268a196c7c2907d934eb4487849cf672a Mon Sep 17 00:00:00 2001 From: Michael Rose Date: Fri, 5 Jan 2018 14:25:42 -0500 Subject: [PATCH 145/245] Upgrade to Susy 3 (#42) Most of Susy's mixins have been deprecated, `@include container()`, `@include full()`, `@include span()`, `@include prefix()`, `@include suffix()`, `@include gallery()`, etc replace with new functions. Fixes #21 --- .codeclimate.yml | 16 - README.md | 1 - _sass/basically-basic.scss | 12 +- _sass/basically-basic/_entries.scss | 13 +- _sass/basically-basic/_functions.scss | 2 + _sass/basically-basic/_layout.scss | 22 +- _sass/basically-basic/_mixins.scss | 12 +- _sass/basically-basic/_variables.scss | 18 +- .../{mixins => functions}/_color.scss | 0 .../{mixins => functions}/_fluid-type.scss | 0 _sass/basically-basic/vendor/_su.scss | 4 - _sass/basically-basic/vendor/_susy.scss | 4 - _sass/basically-basic/vendor/_susyone.scss | 4 - .../vendor/{ => breakpoint}/_breakpoint.scss | 14 +- _sass/basically-basic/vendor/susy/_su.scss | 5 +- .../vendor/susy/_susy-prefix.scss | 13 + _sass/basically-basic/vendor/susy/_susy.scss | 5 + .../vendor/susy/language/_susy.scss | 24 - .../vendor/susy/language/_susyone.scss | 13 - .../susy/language/susy/_background.scss | 385 --------------- .../vendor/susy/language/susy/_bleed.scss | 200 -------- .../susy/language/susy/_box-sizing.scss | 47 -- .../language/susy/_breakpoint-plugin.scss | 185 -------- .../vendor/susy/language/susy/_container.scss | 81 ---- .../vendor/susy/language/susy/_context.scss | 36 -- .../vendor/susy/language/susy/_gallery.scss | 94 ---- .../vendor/susy/language/susy/_grids.scss | 64 --- .../vendor/susy/language/susy/_gutters.scss | 154 ------ .../vendor/susy/language/susy/_isolate.scss | 77 --- .../vendor/susy/language/susy/_margins.scss | 94 ---- .../vendor/susy/language/susy/_padding.scss | 74 --- .../vendor/susy/language/susy/_rows.scss | 138 ------ .../vendor/susy/language/susy/_settings.scss | 216 --------- .../vendor/susy/language/susy/_span.scss | 163 ------- .../susy/language/susy/_validation.scss | 16 - .../susy/language/susyone/_background.scss | 18 - .../susy/language/susyone/_functions.scss | 377 --------------- .../vendor/susy/language/susyone/_grid.scss | 312 ------------- .../susy/language/susyone/_isolation.scss | 51 -- .../vendor/susy/language/susyone/_margin.scss | 93 ---- .../vendor/susy/language/susyone/_media.scss | 105 ----- .../susy/language/susyone/_padding.scss | 92 ---- .../susy/language/susyone/_settings.scss | 60 --- .../vendor/susy/output/_float.scss | 9 - .../vendor/susy/output/_shared.scss | 15 - .../vendor/susy/output/_support.scss | 9 - .../vendor/susy/output/float/_container.scss | 16 - .../vendor/susy/output/float/_end.scss | 40 -- .../vendor/susy/output/float/_isolate.scss | 22 - .../vendor/susy/output/float/_span.scss | 35 -- .../susy/output/shared/_background.scss | 26 -- .../vendor/susy/output/shared/_container.scss | 21 - .../vendor/susy/output/shared/_direction.scss | 42 -- .../vendor/susy/output/shared/_inspect.scss | 25 - .../vendor/susy/output/shared/_margins.scss | 23 - .../vendor/susy/output/shared/_output.scss | 14 - .../vendor/susy/output/shared/_padding.scss | 23 - .../susy/output/support/_background.scss | 58 --- .../susy/output/support/_box-sizing.scss | 19 - .../vendor/susy/output/support/_clearfix.scss | 18 - .../vendor/susy/output/support/_prefix.scss | 19 - .../vendor/susy/output/support/_rem.scss | 22 - .../vendor/susy/output/support/_support.scss | 85 ---- .../vendor/susy/plugins/_svg-grid.scss | 5 + .../vendor/susy/plugins/svg-grid/_prefix.scss | 7 + .../susy/plugins/svg-grid/_svg-api.scss | 114 +++++ .../susy/plugins/svg-grid/_svg-grid-math.scss | 67 +++ .../susy/plugins/svg-grid/_svg-settings.scss | 14 + .../susy/plugins/svg-grid/_svg-unprefix.scss | 18 + .../susy/plugins/svg-grid/_svg-utilities.scss | 133 ++++++ .../basically-basic/vendor/susy/su/_grid.scss | 103 ---- .../vendor/susy/su/_settings.scss | 73 --- .../vendor/susy/su/_utilities.scss | 111 ----- .../vendor/susy/su/_validation.scss | 57 --- .../vendor/susy/susy/_api.scss | 318 +++++++++++++ .../vendor/susy/susy/_normalize.scss | 261 +++++++++++ .../vendor/susy/susy/_parse.scss | 163 +++++++ .../vendor/susy/susy/_settings.scss | 329 +++++++++++++ .../vendor/susy/susy/_su-math.scss | 441 ++++++++++++++++++ .../vendor/susy/susy/_su-validate.scss | 213 +++++++++ .../vendor/susy/susy/_syntax-helpers.scss | 191 ++++++++ .../vendor/susy/susy/_unprefix.scss | 56 +++ .../vendor/susy/susy/_utilities.scss | 167 +++++++ 83 files changed, 2557 insertions(+), 4139 deletions(-) delete mode 100644 .codeclimate.yml create mode 100644 _sass/basically-basic/_functions.scss rename _sass/basically-basic/{mixins => functions}/_color.scss (100%) rename _sass/basically-basic/{mixins => functions}/_fluid-type.scss (100%) delete mode 100644 _sass/basically-basic/vendor/_su.scss delete mode 100644 _sass/basically-basic/vendor/_susy.scss delete mode 100644 _sass/basically-basic/vendor/_susyone.scss rename _sass/basically-basic/vendor/{ => breakpoint}/_breakpoint.scss (91%) create mode 100644 _sass/basically-basic/vendor/susy/_susy-prefix.scss create mode 100644 _sass/basically-basic/vendor/susy/_susy.scss delete mode 100644 _sass/basically-basic/vendor/susy/language/_susy.scss delete mode 100644 _sass/basically-basic/vendor/susy/language/_susyone.scss delete mode 100644 _sass/basically-basic/vendor/susy/language/susy/_background.scss delete mode 100644 _sass/basically-basic/vendor/susy/language/susy/_bleed.scss delete mode 100644 _sass/basically-basic/vendor/susy/language/susy/_box-sizing.scss delete mode 100644 _sass/basically-basic/vendor/susy/language/susy/_breakpoint-plugin.scss delete mode 100644 _sass/basically-basic/vendor/susy/language/susy/_container.scss delete mode 100644 _sass/basically-basic/vendor/susy/language/susy/_context.scss delete mode 100644 _sass/basically-basic/vendor/susy/language/susy/_gallery.scss delete mode 100644 _sass/basically-basic/vendor/susy/language/susy/_grids.scss delete mode 100644 _sass/basically-basic/vendor/susy/language/susy/_gutters.scss delete mode 100644 _sass/basically-basic/vendor/susy/language/susy/_isolate.scss delete mode 100644 _sass/basically-basic/vendor/susy/language/susy/_margins.scss delete mode 100644 _sass/basically-basic/vendor/susy/language/susy/_padding.scss delete mode 100644 _sass/basically-basic/vendor/susy/language/susy/_rows.scss delete mode 100644 _sass/basically-basic/vendor/susy/language/susy/_settings.scss delete mode 100644 _sass/basically-basic/vendor/susy/language/susy/_span.scss delete mode 100644 _sass/basically-basic/vendor/susy/language/susy/_validation.scss delete mode 100644 _sass/basically-basic/vendor/susy/language/susyone/_background.scss delete mode 100644 _sass/basically-basic/vendor/susy/language/susyone/_functions.scss delete mode 100644 _sass/basically-basic/vendor/susy/language/susyone/_grid.scss delete mode 100644 _sass/basically-basic/vendor/susy/language/susyone/_isolation.scss delete mode 100644 _sass/basically-basic/vendor/susy/language/susyone/_margin.scss delete mode 100644 _sass/basically-basic/vendor/susy/language/susyone/_media.scss delete mode 100644 _sass/basically-basic/vendor/susy/language/susyone/_padding.scss delete mode 100644 _sass/basically-basic/vendor/susy/language/susyone/_settings.scss delete mode 100644 _sass/basically-basic/vendor/susy/output/_float.scss delete mode 100644 _sass/basically-basic/vendor/susy/output/_shared.scss delete mode 100644 _sass/basically-basic/vendor/susy/output/_support.scss delete mode 100644 _sass/basically-basic/vendor/susy/output/float/_container.scss delete mode 100644 _sass/basically-basic/vendor/susy/output/float/_end.scss delete mode 100644 _sass/basically-basic/vendor/susy/output/float/_isolate.scss delete mode 100644 _sass/basically-basic/vendor/susy/output/float/_span.scss delete mode 100644 _sass/basically-basic/vendor/susy/output/shared/_background.scss delete mode 100644 _sass/basically-basic/vendor/susy/output/shared/_container.scss delete mode 100644 _sass/basically-basic/vendor/susy/output/shared/_direction.scss delete mode 100644 _sass/basically-basic/vendor/susy/output/shared/_inspect.scss delete mode 100644 _sass/basically-basic/vendor/susy/output/shared/_margins.scss delete mode 100644 _sass/basically-basic/vendor/susy/output/shared/_output.scss delete mode 100644 _sass/basically-basic/vendor/susy/output/shared/_padding.scss delete mode 100644 _sass/basically-basic/vendor/susy/output/support/_background.scss delete mode 100644 _sass/basically-basic/vendor/susy/output/support/_box-sizing.scss delete mode 100644 _sass/basically-basic/vendor/susy/output/support/_clearfix.scss delete mode 100644 _sass/basically-basic/vendor/susy/output/support/_prefix.scss delete mode 100644 _sass/basically-basic/vendor/susy/output/support/_rem.scss delete mode 100644 _sass/basically-basic/vendor/susy/output/support/_support.scss create mode 100644 _sass/basically-basic/vendor/susy/plugins/_svg-grid.scss create mode 100644 _sass/basically-basic/vendor/susy/plugins/svg-grid/_prefix.scss create mode 100644 _sass/basically-basic/vendor/susy/plugins/svg-grid/_svg-api.scss create mode 100644 _sass/basically-basic/vendor/susy/plugins/svg-grid/_svg-grid-math.scss create mode 100644 _sass/basically-basic/vendor/susy/plugins/svg-grid/_svg-settings.scss create mode 100644 _sass/basically-basic/vendor/susy/plugins/svg-grid/_svg-unprefix.scss create mode 100644 _sass/basically-basic/vendor/susy/plugins/svg-grid/_svg-utilities.scss delete mode 100644 _sass/basically-basic/vendor/susy/su/_grid.scss delete mode 100644 _sass/basically-basic/vendor/susy/su/_settings.scss delete mode 100644 _sass/basically-basic/vendor/susy/su/_utilities.scss delete mode 100644 _sass/basically-basic/vendor/susy/su/_validation.scss create mode 100644 _sass/basically-basic/vendor/susy/susy/_api.scss create mode 100644 _sass/basically-basic/vendor/susy/susy/_normalize.scss create mode 100644 _sass/basically-basic/vendor/susy/susy/_parse.scss create mode 100644 _sass/basically-basic/vendor/susy/susy/_settings.scss create mode 100644 _sass/basically-basic/vendor/susy/susy/_su-math.scss create mode 100644 _sass/basically-basic/vendor/susy/susy/_su-validate.scss create mode 100644 _sass/basically-basic/vendor/susy/susy/_syntax-helpers.scss create mode 100644 _sass/basically-basic/vendor/susy/susy/_unprefix.scss create mode 100644 _sass/basically-basic/vendor/susy/susy/_utilities.scss diff --git a/.codeclimate.yml b/.codeclimate.yml deleted file mode 100644 index 66d943c..0000000 --- a/.codeclimate.yml +++ /dev/null @@ -1,16 +0,0 @@ ---- -engines: - duplication: - enabled: false - eslint: - enabled: false - fixme: - enabled: false - scss-lint: - enabled: true -ratings: - paths: - - "**.js" - - "**.rb" - - "_sass/**/*.scss" -exclude_paths: [] diff --git a/README.md b/README.md index 83dbb92..b060fb1 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,6 @@ [![Gem](https://img.shields.io/gem/v/jekyll-theme-basically-basic.svg?style=flat-square)](https://rubygems.org/gems/jekyll-theme-basically-basic) [![license](https://img.shields.io/github/license/mmistakes/jekyll-theme-basically-basic.svg?style=flat-square)](LICENSE.md) -[![Code Climate](https://img.shields.io/codeclimate/github/mmistakes/jekyll-theme-basically-basic.svg?style=flat-square)](https://codeclimate.com/github/mmistakes/jekyll-theme-basically-basic) Basically Basic is a [Jekyll theme](https://jekyllrb.com/docs/themes/) meant as a substitute for the default --- [Minima](https://github.com/jekyll/minima). diff --git a/_sass/basically-basic.scss b/_sass/basically-basic.scss index 987ad0d..f192919 100644 --- a/_sass/basically-basic.scss +++ b/_sass/basically-basic.scss @@ -5,14 +5,12 @@ * https://github.com/mmistakes/jekyll-theme-basically-basic/blob/master/LICENSE.md */ -/* Mixins and functions */ -@import "basically-basic/vendor/susy"; -@import "basically-basic/vendor/breakpoint"; -@include breakpoint-set("to ems", true); -@import "basically-basic/mixins"; - -/* Variables */ +@import "basically-basic/functions"; @import "basically-basic/variables"; +@import "basically-basic/mixins"; +@import "basically-basic/vendor/breakpoint/breakpoint"; +@include breakpoint-set("to ems", true); +@import "basically-basic/vendor/susy/susy"; /* Core CSS */ @import "basically-basic/reset"; diff --git a/_sass/basically-basic/_entries.scss b/_sass/basically-basic/_entries.scss index 83947cc..65f467e 100644 --- a/_sass/basically-basic/_entries.scss +++ b/_sass/basically-basic/_entries.scss @@ -36,7 +36,6 @@ } .byline-item { - &:not(:first-child) { margin-left: 1.5rem; } @@ -53,7 +52,6 @@ ========================================================================== */ .entries { - .entry-title { word-wrap: break-word; /* break long words that could overflow */ @@ -64,7 +62,7 @@ .entry-excerpt { @include breakpoint($medium) { - @include span(11 of 16); + width: span(11 of 16); } /* normalize font sizes */ @@ -80,7 +78,7 @@ .entry-content { @include breakpoint($medium) { - @include span(11 of 16); + width: span(11 of 16); } /* remove space after last child element */ @@ -91,8 +89,9 @@ .entry-meta { @include breakpoint($medium) { - @include span(5 of 16 last); - @include prefix(1 of 16); + float: right; + width: span(5 of 16 last); + padding-left: gutter(1 of 16); } ul { @@ -114,7 +113,6 @@ } > .summary { - > p:first-child { font-size: 1.125em; line-height: 1.625; @@ -123,7 +121,6 @@ } .entry-content { - > p:first-child { font-size: 1.125em; line-height: 1.625; diff --git a/_sass/basically-basic/_functions.scss b/_sass/basically-basic/_functions.scss new file mode 100644 index 0000000..0b846fd --- /dev/null +++ b/_sass/basically-basic/_functions.scss @@ -0,0 +1,2 @@ +@import "functions/color"; +@import "functions/fluid-type"; diff --git a/_sass/basically-basic/_layout.scss b/_sass/basically-basic/_layout.scss index c7b482a..777445d 100644 --- a/_sass/basically-basic/_layout.scss +++ b/_sass/basically-basic/_layout.scss @@ -23,7 +23,6 @@ .intro, main { - > .inner { padding: 0 0.5rem; @@ -50,9 +49,10 @@ main { } main { - section { - @include container; + margin-left: auto; + margin-right: auto; + max-width: 100%; } } @@ -66,9 +66,7 @@ main { .layout--post, .layout--page { - .entry-content { - @include breakpoint($large) { width: span(14 of 16); } @@ -76,7 +74,6 @@ main { } .layout--about { - .entry-wrap { display: -ms-flexbox; display: flex; @@ -90,7 +87,6 @@ main { } .entry-content { - @include breakpoint($medium) { -ms-flex: 1; flex: 1; @@ -118,14 +114,11 @@ main { } .layout--cv { - .entries { - .entry-header { - @include breakpoint($medium) { - @include span(5 of 16); - @include suffix(1 of 16); + width: span(5 of 16); + padding-right: gutter(1 of 16); /* remove space after last child element */ > *:last-child { @@ -136,13 +129,13 @@ main { .entry-content { @include breakpoint($medium) { - @include span(11 of 16 last); + float: right; + width: span(11 of 16); } } } .entry { - a { color: $accent-color; } @@ -179,7 +172,6 @@ main { } .taxonomy { - + .taxonomy { margin-top: 0.5rem; } diff --git a/_sass/basically-basic/_mixins.scss b/_sass/basically-basic/_mixins.scss index 71f0610..6cb5f83 100644 --- a/_sass/basically-basic/_mixins.scss +++ b/_sass/basically-basic/_mixins.scss @@ -1,7 +1,5 @@ -@import 'mixins/color'; -@import 'mixins/clearfix'; -@import 'mixins/fluid-type'; -@import 'mixins/float'; -@import 'mixins/image'; -@import 'mixins/lists'; -@import 'mixins/text-truncate'; +@import "mixins/clearfix"; +@import "mixins/float"; +@import "mixins/image"; +@import "mixins/lists"; +@import "mixins/text-truncate"; diff --git a/_sass/basically-basic/_variables.scss b/_sass/basically-basic/_variables.scss index 5ac2a06..6a7a232 100644 --- a/_sass/basically-basic/_variables.scss +++ b/_sass/basically-basic/_variables.scss @@ -19,11 +19,15 @@ $max-font-size: 18px !default; $modular-scale-1: 1.067 !default; /* small */ $modular-scale-2: 1.296 !default; /* large */ /* Heading 1 */ -$h1-min: $modular-scale-1 * $modular-scale-1 * $modular-scale-1 * $modular-scale-1 * $base-font-size !default; -$h1-max: $modular-scale-2 * $modular-scale-2 * $modular-scale-2 * $modular-scale-2 * $base-font-size !default; +$h1-min: $modular-scale-1 * $modular-scale-1 * $modular-scale-1 * + $modular-scale-1 * $base-font-size !default; +$h1-max: $modular-scale-2 * $modular-scale-2 * $modular-scale-2 * + $modular-scale-2 * $base-font-size !default; /* Heading 2 */ -$h2-min: $modular-scale-1 * $modular-scale-1 * $modular-scale-1 * $base-font-size !default; -$h2-max: $modular-scale-2 * $modular-scale-2 * $modular-scale-2 * $base-font-size !default; +$h2-min: $modular-scale-1 * $modular-scale-1 * $modular-scale-1 * + $base-font-size !default; +$h2-max: $modular-scale-2 * $modular-scale-2 * $modular-scale-2 * + $base-font-size !default; /* Heading 3 */ $h3-min: $modular-scale-1 * $modular-scale-1 * $base-font-size !default; $h3-max: $modular-scale-2 * $modular-scale-2 * $base-font-size !default; @@ -41,7 +45,8 @@ $h6-max: ($base-font-size / $modular-scale-2) !default; $base-font-family: "Fira Sans", sans-serif !default; /* Other font families */ $headline-font-family: $base-font-family !default; -$monospace-font-family: Menlo, Consolas, Monaco, "Courier New", Courier, monospace !default; +$monospace-font-family: Menlo, Consolas, Monaco, "Courier New", Courier, + monospace !default; /* Colors */ $base-color: #393e46 !default; @@ -79,6 +84,3 @@ $navicon-content-bg: $text-color !default; /* Site image */ $site-image-width: 50px !default; $site-image-height: 50px !default; - -/* Susy grid settings */ -$susy: (columns: 16, gutters: 0, math: fluid, output: float) !default; diff --git a/_sass/basically-basic/mixins/_color.scss b/_sass/basically-basic/functions/_color.scss similarity index 100% rename from _sass/basically-basic/mixins/_color.scss rename to _sass/basically-basic/functions/_color.scss diff --git a/_sass/basically-basic/mixins/_fluid-type.scss b/_sass/basically-basic/functions/_fluid-type.scss similarity index 100% rename from _sass/basically-basic/mixins/_fluid-type.scss rename to _sass/basically-basic/functions/_fluid-type.scss diff --git a/_sass/basically-basic/vendor/_su.scss b/_sass/basically-basic/vendor/_su.scss deleted file mode 100644 index 83386ad..0000000 --- a/_sass/basically-basic/vendor/_su.scss +++ /dev/null @@ -1,4 +0,0 @@ -// Su -// == - -@import 'susy/su'; diff --git a/_sass/basically-basic/vendor/_susy.scss b/_sass/basically-basic/vendor/_susy.scss deleted file mode 100644 index 224e98a..0000000 --- a/_sass/basically-basic/vendor/_susy.scss +++ /dev/null @@ -1,4 +0,0 @@ -// Susy -// ==== - -@import 'susy/language/susy'; diff --git a/_sass/basically-basic/vendor/_susyone.scss b/_sass/basically-basic/vendor/_susyone.scss deleted file mode 100644 index 5b934c6..0000000 --- a/_sass/basically-basic/vendor/_susyone.scss +++ /dev/null @@ -1,4 +0,0 @@ -// Susy -// ==== - -@import 'susy/language/susyone'; diff --git a/_sass/basically-basic/vendor/_breakpoint.scss b/_sass/basically-basic/vendor/breakpoint/_breakpoint.scss similarity index 91% rename from _sass/basically-basic/vendor/_breakpoint.scss rename to _sass/basically-basic/vendor/breakpoint/_breakpoint.scss index 2ede6b7..a0528eb 100644 --- a/_sass/basically-basic/vendor/_breakpoint.scss +++ b/_sass/basically-basic/vendor/breakpoint/_breakpoint.scss @@ -23,15 +23,15 @@ $breakpoint: () !default; ////////////////////////////// // Imports ////////////////////////////// -@import "breakpoint/settings"; -@import 'breakpoint/context'; -@import 'breakpoint/helpers'; -@import 'breakpoint/parsers'; -@import 'breakpoint/no-query'; +@import "settings"; +@import "context"; +@import "helpers"; +@import "parsers"; +@import "no-query"; -@import 'breakpoint/respond-to'; +@import "respond-to"; -@import "breakpoint/legacy-settings"; +@import "legacy-settings"; ////////////////////////////// // Breakpoint Mixin diff --git a/_sass/basically-basic/vendor/susy/_su.scss b/_sass/basically-basic/vendor/susy/_su.scss index a145415..83386ad 100644 --- a/_sass/basically-basic/vendor/susy/_su.scss +++ b/_sass/basically-basic/vendor/susy/_su.scss @@ -1,7 +1,4 @@ // Su // == -@import "su/utilities"; -@import "su/settings"; -@import "su/validation"; -@import "su/grid"; +@import 'susy/su'; diff --git a/_sass/basically-basic/vendor/susy/_susy-prefix.scss b/_sass/basically-basic/vendor/susy/_susy-prefix.scss new file mode 100644 index 0000000..185b356 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/_susy-prefix.scss @@ -0,0 +1,13 @@ +// Susy (Prefixed) +// =============== + +$susy-version: 3; + +@import 'susy/utilities'; +@import 'susy/su-validate'; +@import 'susy/su-math'; +@import 'susy/settings'; +@import 'susy/normalize'; +@import 'susy/parse'; +@import 'susy/syntax-helpers'; +@import 'susy/api'; diff --git a/_sass/basically-basic/vendor/susy/_susy.scss b/_sass/basically-basic/vendor/susy/_susy.scss new file mode 100644 index 0000000..bfda3d0 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/_susy.scss @@ -0,0 +1,5 @@ +// Susy (Un-Prefixed) +// ================== + +@import 'susy-prefix'; +@import 'susy/unprefix'; diff --git a/_sass/basically-basic/vendor/susy/language/_susy.scss b/_sass/basically-basic/vendor/susy/language/_susy.scss deleted file mode 100644 index 0ee9cae..0000000 --- a/_sass/basically-basic/vendor/susy/language/_susy.scss +++ /dev/null @@ -1,24 +0,0 @@ -// Susy Next Syntax -// ================ - -$susy-version: 2.1; - -@import "../su"; -@import "../output/float"; - -@import "susy/settings"; -@import "susy/validation"; -@import "susy/grids"; -@import "susy/box-sizing"; -@import "susy/context"; -@import "susy/background"; -@import "susy/container"; -@import "susy/span"; -@import "susy/gutters"; -@import "susy/isolate"; -@import "susy/gallery"; -@import "susy/rows"; -@import "susy/margins"; -@import "susy/padding"; -@import "susy/bleed"; -@import "susy/breakpoint-plugin"; diff --git a/_sass/basically-basic/vendor/susy/language/_susyone.scss b/_sass/basically-basic/vendor/susy/language/_susyone.scss deleted file mode 100644 index a783d3a..0000000 --- a/_sass/basically-basic/vendor/susy/language/_susyone.scss +++ /dev/null @@ -1,13 +0,0 @@ -// --------------------------------------------------------------------------- -// Partials - -$susy-version: 1.5; - -@import "susyone/settings"; -@import "susyone/functions"; -@import "susyone/grid"; -@import "susyone/isolation"; -@import "susyone/padding"; -@import "susyone/margin"; -@import "susyone/media"; -@import "susyone/background"; diff --git a/_sass/basically-basic/vendor/susy/language/susy/_background.scss b/_sass/basically-basic/vendor/susy/language/susy/_background.scss deleted file mode 100644 index d39dc72..0000000 --- a/_sass/basically-basic/vendor/susy/language/susy/_background.scss +++ /dev/null @@ -1,385 +0,0 @@ -// Background Grid Syntax -// ====================== - -$susy-overlay-grid-head-exists: false; - - -// Show Grid/s -// ----------- -// Show grid on any element using either background or overlay. -// - [$grid] : -@mixin show-grid( - $grid: $susy -) { - $inspect: $grid; - $_output: debug-get(output, $grid); - - @include susy-inspect(show-grid, $inspect); - @if $_output == overlay and susy-get(debug image, $grid) != hide { - @include overlay-grid($grid); - } @else { - @include background-grid($grid); - } -} - -@mixin show-grids( - $grid: $susy -) { - @include show-grid($grid); -} - -// Background Grid -// --------------- -// Show a grid background on any element. -// - [$grid] : -@mixin background-grid( - $grid: $susy -) { - $inspect : $grid; - $_output : get-background($grid); - - @if length($_output) > 0 { - $_flow: susy-get(flow, $grid); - - $_image: (); - @each $name, $layer in map-get($_output, image) { - $_direction: if($name == baseline, to bottom, to to($_flow)); - $_image: append($_image, linear-gradient($_direction, $layer), comma); - } - $_output: map-merge($_output, (image: $_image)); - - @include background-grid-output($_output...); - @include susy-inspect(background-grid, $inspect); - } -} - - -// Overlay Grid -// ------------ -// Generate an icon to trigger grid-overlays on any given elements. -// $grids... : [] [, ]* -@mixin overlay-grid ( - $grid: $susy -) { - @if not($susy-overlay-grid-head-exists) { - @at-root head { @include overlay-head($grid); } - @at-root head:before { @include overlay-trigger; } - @at-root head:hover { @include overlay-trigger-hover; } - $susy-overlay-grid-head-exists: true !global; - } - - head:hover ~ &, - head:hover ~ body & { - position: relative; - &:before { - @include grid-overlay-base; - @include background-grid($grid); - } - } -} - - -// [Private] Overlay Trigger -// ------------------------- -@mixin overlay-trigger { - content: "|||"; - display: block; - padding: 5px 10px; - font: { - family: sans-serif; - size: 16px; - weight: bold; - } -} - - -// [Private] Overlay Trigger Hover -// ------------------------------- -@mixin overlay-trigger-hover { - background: rgba(white, .5); - color: red; -} - - -// [Private] Overlay Head -// ---------------------- -// styles to create grid overlay toggle -@mixin overlay-head ( - $grid: $susy -) { - $_toggle: debug-get(toggle, $grid); - $_horz: null; - $_vert: null; - - @each $side in $_toggle { - $_horz: if($side == left or $side == right, $side, $_horz); - $_vert: if($side == top or $side == bottom, $side, $_vert); - } - - display: block; - position: fixed; - #{$_horz}: 10px; - #{$_vert}: 10px; - z-index: 999; - color: #333; - background: rgba(white, .25); -} - - -// [Private] Grid Overlay Base -// --------------------------- -// Base styles for generating a grid overlay -@mixin grid-overlay-base() { - position: absolute; - top: 0; - left: 0; - bottom: 0; - right: 0; - content: " "; - z-index: 998; -} - - -// Get Symmetrical Background -// -------------------------- -// - $grid: -@function get-background-sym( - $grid -) { - $grid : parse-grid($grid); - $_gutters : susy-get(gutters, $grid); - $_column-width : susy-get(column-width, $grid); - $_math : susy-get(math, $grid); - - $_color : debug-get(color); - $_trans : transparent; - $_light : lighten($_color, 15%); - - $_end : 1 + $_gutters; - $_after : percentage(1/$_end); - $_stops : (); - $_size : span(1 $grid wide); - - @if is-inside($grid) { - $_stops: $_color, $_light; - } @else if is-split($grid) { - $_split: $_gutters/2; - $_before: percentage($_split/$_end); - $_after: percentage((1 + $_split)/$_end); - $_stops: $_trans $_before, $_color $_before, $_light $_after, $_trans $_after; - } @else { - $_stops: $_color, $_light $_after, $_trans $_after; - } - - @if $_math == static { - $_size: valid-column-math($_math, $_column-width) * $_end; - } - - $_output: ( - image: (columns: $_stops), - size: $_size, - ); - - @return $_output; -} - - -// Get Asymmetrical Inside -// ----------------------- -// - $grid: -@function get-asym-inside( - $grid -) { - $grid : parse-grid($grid); - $_columns : susy-get(columns, $grid); - - $_color : debug-get(color); - $_light : lighten($_color, 15%); - $_stops : (); - - @for $location from 1 through susy-count($_columns) { - $this-stop: (); - - @if $location == 1 { - $this-stop: append($this-stop, $_color, comma); - } @else { - $start: parse-span(1 at $location $grid); - $start: get-isolation($start); - $this-stop: append($this-stop, $_color $start, comma); - } - - @if $location == susy-count($_columns) { - $this-stop: append($this-stop, $_light, comma); - } @else { - $_end: parse-span(1 at ($location + 1) $grid); - $_end: get-isolation($_end); - $this-stop: append($this-stop, $_light $_end, comma); - } - - $_stops: join($_stops, $this-stop, comma); - } - - @return $_stops; -} - - -// Get Asymmetrical Split -// ---------------------- -// - $grid: -@function get-asym-split( - $grid -) { - $grid : parse-grid($grid); - $_columns : susy-get(columns, $grid); - - $_color : debug-get(color); - $_light : lighten($_color, 15%); - $_stops : (); - - @for $location from 1 through susy-count($_columns) { - $this-stop: (); - - $start: parse-span(1 at $location $grid); - $start: get-isolation($start); - $this-stop: append($this-stop, transparent $start, comma); - $this-stop: append($this-stop, $_color $start, comma); - - $_end: $start + span(1 at $location $grid); - $this-stop: append($this-stop, $_light $_end, comma); - $this-stop: append($this-stop, transparent $_end, comma); - - $_stops: join($_stops, $this-stop, comma); - } - - @return $_stops; -} - - -// Get Asymmetrical Outside -// ------------------------ -// - $grid: -@function get-asym-outside( - $grid -) { - $grid : parse-grid($grid); - $_columns : susy-get(columns, $grid); - - $_color : debug-get(color); - $_light : lighten($_color, 15%); - $_trans : transparent; - $_stops : (); - - @for $location from 1 through susy-count($_columns) { - $this-stop: (); - - @if $location == 1 { - $this-stop: append($this-stop, $_color, comma); - } @else { - $start: parse-span(1 at $location $grid); - $start: get-isolation($start); - $this-stop: append($this-stop, $_color $start, comma); - } - - @if $location == susy-count($_columns) { - $this-stop: append($this-stop, $_light, comma); - } @else { - $gutter: get-span-width(first $location $grid); - - $_end: parse-span(1 at ($location + 1) $grid); - $_end: get-isolation($_end); - - $gutter: $_light $gutter, $_trans $gutter, $_trans $_end; - $this-stop: join($this-stop, $gutter, comma); - } - - $_stops: join($_stops, $this-stop, comma); - } - - @return $_stops; -} - - -// Get Asymmetrical Background -// --------------------------- -// - $grid: -@function get-background-asym( - $grid -) { - $_stops: (); - - @if is-inside($grid) { - $_stops: get-asym-inside($grid); - } @else if is-split($grid) { - $_stops: get-asym-split($grid); - } @else { - $_stops: get-asym-outside($grid); - } - - @return (image: (columns: $_stops)); -} - - -// Get Background -// -------------- -// - $grid: -@function get-background( - $grid -) { - $grid : parse-grid($grid); - $_show : susy-get(debug image, $grid); - $_return : (); - - @if $_show and $_show != 'hide' { - $_columns: susy-get(columns, $grid); - - @if $_show != 'show-baseline' { - $_sym: is-symmetrical($_columns); - $_return: if($_sym, get-background-sym($grid), get-background-asym($grid)); - $_return: map-merge($_return, (clip: content-box)); - } - - @if $_show != 'show-columns' - and global-variable-exists(base-line-height) - and type-of($base-line-height) == 'number' - and not unitless($base-line-height) { - $_color: variable-exists('grid-background-baseline-color'); - $_color: if($_color, $grid-background-baseline-color, #000); - - $_image: map-get($_return, image); - $_size: map-get($_return, size); - $_baseline: (baseline: ($_color 1px, transparent 1px)); - $_baseline-size: 100% $base-line-height; - - $_return: map-merge($_return, ( - image: if($_image, map-merge($_image, $_baseline), $_baseline), - size: if($_size, ($_size, $_baseline-size), $_baseline-size), - )); - - @if $_show == 'show' { - $_clip: map-get($_return, clip); - $_return: map-merge($_return, (clip: join($_clip, border-box, comma))); - } - } @else if $_show == 'show-baseline' { - @warn 'Please provide a $base-line-height with the desired height and units'; - } - } - - @if map-get($_return, image) { - $_return: map-merge($_return, (flow: susy-get(flow, $grid))); - } - - @return $_return; -} - - -// Get Debug -// --------- -// Return the value of a debug setting -// - $key: -@function debug-get( - $key, - $grid: $susy -) { - $key: join(debug, $key, space); - @return susy-get($key, $grid); -} diff --git a/_sass/basically-basic/vendor/susy/language/susy/_bleed.scss b/_sass/basically-basic/vendor/susy/language/susy/_bleed.scss deleted file mode 100644 index 8ef5974..0000000 --- a/_sass/basically-basic/vendor/susy/language/susy/_bleed.scss +++ /dev/null @@ -1,200 +0,0 @@ -// Bleed Syntax -// ============ - -// Bleed -// ----- -// Add negative margins, and equal positive padding to create bleed. -// - $bleed : -@mixin bleed( - $bleed: 0 gutter() -) { - $inspect : $bleed; - $output : get-bleed($bleed); - - @if susy-get(global-box-sizing) != content-box { - $output: map-merge((box-sizing: content-box), $output); - } - - @include susy-inspect(bleed, $inspect); - @include output($output); -} - - -// Bleed-x -// ------- -// Shortcut for horizontal bleed. -// - $bleed : -@mixin bleed-x( - $bleed: gutter() -) { - $bleed : parse-span($bleed); - $trbl : susy-get(span, $bleed); - - @if length($trbl) == 1 { - $bleed: map-merge($bleed, (span: 0 nth($trbl, 1))); - } @else if length($trbl) == 2 { - $bleed: map-merge($bleed, (span: 0 nth($trbl, 2) 0 nth($trbl, 1))); - } @else { - @warn 'bleed-x only takes 2 lengths, but #{length($trbl)} were passed.'; - } - - @include bleed($bleed); -} - - -// Bleed-y -// ------- -// Shortcut for vertical bleed. -// - $bleed : -@mixin bleed-y( - $bleed: if(function-exists(rhythm), rhythm(1), 1em) -) { - $bleed : parse-span($bleed); - $trbl : susy-get(span, $bleed); - - @if length($trbl) == 1 { - $bleed: map-merge($bleed, (span: nth($trbl, 1) 0)); - } @else if length($trbl) == 2 { - $bleed: map-merge($bleed, (span: nth($trbl, 1) 0 nth($trbl, 2) 0)); - } @else { - @warn 'bleed-y only takes 2 lengths, but #{length($trbl)} were passed.'; - } - - @include bleed($bleed); -} - - -// Get Bleed -// --------- -// Return bleed output values -// - $bleed: -@function get-bleed( - $bleed -) { - $bleed : map-merge((spread: wide), parse-span($bleed)); - $trbl : susy-get(span, $bleed); - $short : null; - $output : (); - - @for $i from 1 through length($trbl) { - $this: nth($trbl, $i); - $new: (); - $margin: null; - $padding: null; - $padding-x: null; - - @if $this > 0 { - $this: map-merge($bleed, (span: $this)); - $margin: span($this); - $padding: $margin; - $padding-x: $padding; - } - - @if $margin and $margin > 0 { - $margin: - $margin; - - @if is-inside($this) { - $gutter: gutter($this); - $join: if($gutter and comparable($padding, $gutter), true, false); - $padding-x: if($join and $padding > 0, $padding + $gutter, $padding); - } - } - - @if $i == 1 { - $new: ( - margin-top: $margin, - padding-top: $padding, - margin-right: $margin, - padding-right: $padding-x, - margin-bottom: $margin, - padding-bottom: $padding, - margin-left: $margin, - padding-left: $padding-x, - ); - } @else if $i == 2 { - $new: ( - margin-right: $margin, - padding-right: $padding-x, - margin-left: $margin, - padding-left: $padding-x, - ); - } @else if $i == 3 { - $new: ( - margin-bottom: $margin, - padding-bottom: $padding, - ); - } @else if $i == 4 { - $new: ( - margin-left: $margin, - padding-left: $padding-x, - ); - } - - $output: map-merge($output, $new); - } - - @each $prop, $value in $output { - $output: if($value == 0, map-merge($output, ($prop: null)), $output); - } - - @return bleed-shorthand($output); -} - -// Bleed Shorthand -// --------------- -// Convert bleed output into shorthand when possible. -// - $bleed: -@function bleed-shorthand( - $bleed -) { - $margin: (); - $padding: (); - $return: (); - - @each $key, $value in $bleed { - @if str-index($key, margin) { - $margin: map-merge($margin, ($key: $value)); - } @else if str-index($key, padding) > 0 { - $padding: map-merge($padding, ($key: $value)); - } - } - - $props: ( - margin: $margin, - padding: $padding, - ); - - @each $name, $map in $props { - $four: if(length(map-keys($map)) == 4, true, false); - $null: if(index(map-values($map), null), true, false); - - @if $four and not($null) { - $top: map-get($map, '#{$name}-top'); - $right: map-get($map, '#{$name}-right'); - $bottom: map-get($map, '#{$name}-bottom'); - $left: map-get($map, '#{$name}-left'); - - $tb: if($top == $bottom, $top, null); - $rl: if($right == $left, $right, null); - $all: if($tb == $rl, $tb, null); - - $new: if($all, $all, null); - - @if not($new) { - @if $tb and $rl { - $new: $tb $rl; - } @else if $rl { - $new: $top $rl $bottom; - } @else { - $new: $top $right $bottom $left; - } - } - - $return: map-merge($return, ($name: $new)); - } @else { - $return: map-merge($return, $map); - } - } - - @return $return; -} diff --git a/_sass/basically-basic/vendor/susy/language/susy/_box-sizing.scss b/_sass/basically-basic/vendor/susy/language/susy/_box-sizing.scss deleted file mode 100644 index f551241..0000000 --- a/_sass/basically-basic/vendor/susy/language/susy/_box-sizing.scss +++ /dev/null @@ -1,47 +0,0 @@ -// Susy Box Sizing -// ================= - -// Global Box Sizing -// ----------------- -// Set a box model globally on all elements. -// - [$box]: border-box | content-box -// - [$inherit]: true | false -@mixin global-box-sizing( - $box: susy-get(global-box-sizing), - $inherit: false -) { - $inspect: $box; - - @if $inherit { - @at-root { - html { @include output((box-sizing: $box)); } - *, *:before, *:after { box-sizing: inherit; } - } - } @else { - *, *:before, *:after { @include output((box-sizing: $box)); } - } - - @include susy-inspect(global-box-sizing, $inspect); - @include update-box-model($box); -} - -// Border Box Sizing -// ----------------- -// A legacy shortcut... -// - [$inherit]: true | false -@mixin border-box-sizing( - $inherit: false -) { - @include global-box-sizing(border-box, $inherit); -} - -// Update Box Model -// ---------------- -// PRIVATE: Updates global box model setting -@mixin update-box-model( - $box -) { - @if $box != susy-get(global-box-sizing) { - @include susy-set(global-box-sizing, $box); - } -} diff --git a/_sass/basically-basic/vendor/susy/language/susy/_breakpoint-plugin.scss b/_sass/basically-basic/vendor/susy/language/susy/_breakpoint-plugin.scss deleted file mode 100644 index 30de288..0000000 --- a/_sass/basically-basic/vendor/susy/language/susy/_breakpoint-plugin.scss +++ /dev/null @@ -1,185 +0,0 @@ -// Breakpoint Integration -// ====================== - -$susy-media: () !default; -$susy-media-fallback: false !default; - -$_susy-media-context: (); - - -// Susy Breakpoint -// --------------- -// Change grids at different media query breakpoints. -// - $query : [] | | -// - $layout : -// - $no-query : | -@mixin susy-breakpoint( - $query, - $layout: false, - $no-query: $susy-media-fallback -) { - @include susy-media-router($query, $no-query) { - @if $layout { - @include with-layout($layout) { - @content; - } - } @else { - @content; - } - } -} - - -// Susy Media -// ---------- -// - $query: [] | -// - $no-query: | -@mixin susy-media( - $query, - $no-query: $susy-media-fallback -) { - $old-context: $_susy-media-context; - $name: if(map-has-key($susy-media, $query), $query, null); - $query: susy-get-media($query); - $query: susy-parse-media($query); - - @include susy-media-context($query, $name); - - @if $no-query and type-of($no-query) != string { - @content; - } @else { - @media #{susy-render-media($query)} { - @content; - } - - @if type-of($no-query) == string { - #{$no-query} & { - @content; - } - } - } - - @include susy-media-context($old-context, $clean: true); -} - - -// Media Router -// ------------ -// Rout media arguments to the correct mixin. -@mixin susy-media-router( - $query, - $no-query: $susy-media-fallback -) { - @if susy-support(breakpoint, (mixin: breakpoint), $warn: false) { - @include breakpoint($query, $no-query) { - @content; - } - } @else { - @include susy-media($query, $no-query) { - @content; - } - } -} - - -// Update Context -// ------------- -// Set the new media context -@mixin susy-media-context( - $query, - $name: null, - $clean: false -) { - $query: map-merge((name: $name), $query); - - @if $clean { - $_susy-media-context: $query !global; - } @else { - $_susy-media-context: map-merge($_susy-media-context, $query) !global; - } -} - - -// Media Context -// ------------- -// Return the full media context, or a single media property (e.g. min-width) -@function susy-media-context( - $property: false -) { - @if $property { - @return map-get($_susy-media-context, $property); - } @else { - @return $_susy-media-context; - } -} - - -// Get Media -// --------- -// Return a named media-query from $susy-media. -// - $name: -@function susy-get-media( - $name -) { - @if map-has-key($susy-media, $name) { - $map-value: map-get($susy-media, $name); - @if ($name == $map-value) { - $name: $map-value; - } @else { - $name: susy-get-media($map-value); - } - } - - @return $name; -} - - -// Render Media -// ------------ -// Build a media-query string from various media settings -@function susy-render-media( - $query -) { - $output: null; - @each $property, $value in $query { - $string: null; - - @if $property == media { - $string: $value; - } @else { - $string: '(#{$property}: #{$value})'; - } - - $output: if($output, '#{$output} and #{$string}', $string); - } - - @return $output; -} - - -// Parse Media -// ----------- -// Return parsed media-query settings based on shorthand -@function susy-parse-media( - $query -) { - $mq: null; - @if type-of($query) == map { - $mq: $query; - } @else if type-of($query) == number { - $mq: (min-width: $query); - } @else if type-of($query) == list and length($query) == 2 { - @if type-of(nth($query, 1)) == number { - $mq: ( - min-width: min($query...), - max-width: max($query...), - ); - } @else { - $mq: (nth($query, 1): nth($query, 2)); - } - } @else { - $mq: (media: '#{$query}'); - } - - @return $mq; -} diff --git a/_sass/basically-basic/vendor/susy/language/susy/_container.scss b/_sass/basically-basic/vendor/susy/language/susy/_container.scss deleted file mode 100644 index e5f4a85..0000000 --- a/_sass/basically-basic/vendor/susy/language/susy/_container.scss +++ /dev/null @@ -1,81 +0,0 @@ -// Container Syntax -// ================ - -// Container [mixin] -// ----------------- -// Set a container element -// - [$layout] : -@mixin container( - $layout: $susy -) { - $inspect : $layout; - $layout : parse-grid($layout); - - $_width : get-container-width($layout); - $_justify : parse-container-position(susy-get(container-position, $layout)); - $_property : if(susy-get(math, $layout) == static, width, max-width); - - $_box : susy-get(box-sizing, $layout); - - @if $_box { - @include output((box-sizing: $_box)); - } - - @include susy-inspect(container, $inspect); - @include float-container($_width, $_justify, $_property); - @include show-grid($layout); -} - -// Container [function] -// -------------------- -// Return container width -// - [$layout] : -@function container( - $layout: $susy -) { - $layout: parse-grid($layout); - @return get-container-width($layout); -} - -// Get Container Width -// ------------------- -// Calculate the container width -// - [$layout]: -@function get-container-width( - $layout: $susy -) { - $layout : parse-grid($layout); - $_width : susy-get(container, $layout); - $_column-width : susy-get(column-width, $layout); - $_math : susy-get(math, $layout); - - @if not($_width) or $_width == auto { - @if valid-column-math($_math, $_column-width) { - $_columns : susy-get(columns, $layout); - $_gutters : susy-get(gutters, $layout); - $_spread : if(is-split($layout), wide, narrow); - $_width : susy-sum($_columns, $_gutters, $_spread) * $_column-width; - } @else { - $_width: 100%; - } - } - - @return $_width; -} - -// Parse Container Position -// ------------------------ -// Parse the $container-position into margin values. -// - [$justify] : left | center | right | [] -@function parse-container-position( - $justify: map-get($susy-defaults, container-position) -) { - $_return: if($justify == left, 0, auto) if($justify == right, 0, auto); - - @if not(index(left right center, $justify)) { - $_return: nth($justify, 1); - $_return: $_return if(length($justify) > 1, nth($justify, 2), $_return); - } - - @return $_return; -} diff --git a/_sass/basically-basic/vendor/susy/language/susy/_context.scss b/_sass/basically-basic/vendor/susy/language/susy/_context.scss deleted file mode 100644 index 52e12a6..0000000 --- a/_sass/basically-basic/vendor/susy/language/susy/_context.scss +++ /dev/null @@ -1,36 +0,0 @@ -// Context Syntax -// ============== - -// Nested [function] -// ----------------- -// Return a subset grid for nested context. -// - $context : -@function nested( - $context -) { - $context : parse-span($context); - $span : susy-get(span, $context); - $location : get-location($context); - $columns : susy-get(columns, $context); - - @return susy-slice($span, $location, $columns); -} - -// Nested [mixin] -// -------------- -// Use a subset grid for a nested context -// - $context : -// - @content : -@mixin nested( - $context -) { - $inspect : $context; - $context : parse-span($context); - $old : susy-get(columns); - $susy : map-merge($susy, (columns: nested($context))) !global; - - @include susy-inspect(nested, $inspect); - @content; - - $susy : map-merge($susy, (columns: $old)) !global; -} diff --git a/_sass/basically-basic/vendor/susy/language/susy/_gallery.scss b/_sass/basically-basic/vendor/susy/language/susy/_gallery.scss deleted file mode 100644 index e59b9a0..0000000 --- a/_sass/basically-basic/vendor/susy/language/susy/_gallery.scss +++ /dev/null @@ -1,94 +0,0 @@ -// Gallery Syntax -// ============== - -// Gallery -// ------- -// Create an isolated gallery -// - $span : -// - [$selector] : child | of-type -@mixin gallery( - $span, - $selector: child -) { - $inspect : $span; - $span : parse-span($span); - $span : map-merge($span, (location: 1)); - - $n : susy-get(span, $span); - $columns : susy-get(columns, $span); - $context : susy-count($columns); - $flow : susy-get(flow, $span); - - $inside : is-inside($span); - $from : from($flow); - $line : floor($context / $n); - $symmetrical : is-symmetrical($columns); - - $output: ( - width : null, - float : from, - margin-before : null, - margin-after : null, - padding-before : null, - padding-after : null, - flow : $flow, - ); - - @if $inside { - $gutters: get-gutters($span); - $output: map-merge($output, ( - padding-before: map-get($gutters, before), - padding-after: map-get($gutters, after), - )); - } - - @if $symmetrical { - $output: map-merge($output, (width: get-span-width($span))); - } - - $box : susy-get(box-sizing, $span); - $global-box : if(susy-get(global-box-sizing) == 'border-box', true, false); - - @include susy-inspect(gallery, $inspect); - - // Collective Output - @if $box == border-box or ($inside and not($box) and not($global-box)) { - @include output((box-sizing: border-box)); - } @else if $box == content-box { - @include output((box-sizing: content-box)); - } - - @include float-span-output($output...); - - // Individual Loop - @for $item from 1 through $line { - $nth: '#{$line}n + #{$item}'; - &:nth-#{$selector}(#{$nth}) { - // Individual Prep - $output: ( - width : if($symmetrical, null, get-span-width($span)), - float : null, - margin-before : get-isolation($span), - margin-after : -100%, - padding-before : null, - padding-after : null, - flow : $flow, - ); - - // Individual Output - @include float-span-output($output...); - - @if get-edge($span) == first { - @include break; - @include first($span); - } @else { - @include nobreak; - } - - // Individual Location Increment - $location: get-location($span) + $n; - $location: if($location > $context, 1, $location); - $span: map-merge($span, (location: $location)); - } - } -} diff --git a/_sass/basically-basic/vendor/susy/language/susy/_grids.scss b/_sass/basically-basic/vendor/susy/language/susy/_grids.scss deleted file mode 100644 index 4fa72ed..0000000 --- a/_sass/basically-basic/vendor/susy/language/susy/_grids.scss +++ /dev/null @@ -1,64 +0,0 @@ -// Grid Syntax -// =========== - - -// Layout -// ------ -// Set a new layout using a shorthand -// - $layout: -// - $clean: boolean -@mixin layout( - $layout, - $clean: false -) { - $inspect : $layout; - $susy : _get-layout($layout, $clean) !global; - - @include susy-inspect(layout, $inspect); -} - - -// Use Grid -// -------- -// Use an arbitrary layout for a section of code -// - $layout: -// - $clean: boolean -@mixin with-layout( - $layout, - $clean: false -) { - $inspect : $layout; - $old : $susy; - $susy : _get-layout($layout, $clean) !global; - - @include susy-inspect(with-layout, $inspect); - - @content; - - $susy: $old !global; -} - - -// Layout -// ------ -// Return a parsed layout map based on shorthand syntax -// - $layout: -@function layout( - $layout: $susy -) { - @return parse-grid($layout); -} - - -// Get Layout -// ---------- -// Return a new layout based on current and given settings -// - $layout: -// - $clean: boolean -@function _get-layout( - $layout, - $clean: false -) { - $layout: layout($layout); - @return if($clean, $layout, _susy-deep-merge($susy, $layout)); -} diff --git a/_sass/basically-basic/vendor/susy/language/susy/_gutters.scss b/_sass/basically-basic/vendor/susy/language/susy/_gutters.scss deleted file mode 100644 index efe7ac2..0000000 --- a/_sass/basically-basic/vendor/susy/language/susy/_gutters.scss +++ /dev/null @@ -1,154 +0,0 @@ -// Gutter Syntax -// ============= - - -// Gutters -// ------- -// Set gutters on an element. -// - [$span] : -@mixin gutters( - $span: $susy -) { - $inspect : $span; - $span : parse-gutters($span); - $_gutters : get-gutters($span); - - $_output: ( - before: map-get($_gutters, before), - after: map-get($_gutters, after), - flow: susy-get(flow, $span), - ); - - @include susy-inspect(gutters, $inspect); - - @if is-inside($span) { - @include padding-output($_output...); - } @else { - @include margin-output($_output...); - } -} - -@mixin gutter( - $span: $susy -) { - @include gutters($span); -} - - -// Gutter -// ------ -// Return the width of a gutter. -// - [$span] : -@function gutter( - $span: $susy -) { - $span: parse-gutters($span); - - $_gutters: get-gutters($span); - $_gutters: map-get($_gutters, before) or map-get($_gutters, after); - - @return $_gutters; -} - -@function gutters( - $span: $susy -) { - @return gutter($span); -} - - -// Get Gutter Width -// ---------------- -// Return gutter width. -// - [$context]: -@function get-gutter-width( - $context: $susy -) { - $context : parse-gutters($context); - - $_gutters : susy-get(gutters, $context); - $_gutter : susy-get(gutter-override, $context); - - @if $_gutters and ($_gutters > 0) and not($_gutter) { - $_column-width: susy-get(column-width, $context); - $_math: gutter-math($context); - @if $_math == static { - $_gutter: $_gutters * valid-column-math($_math, $_column-width); - } @else { - $_columns : susy-get(columns, $context); - $_spread : if(is-split($context), wide, susy-get(spread, $context)); - $_gutter : percentage($_gutters / susy-sum($_columns, $_gutters, $_spread)); - } - } - - $_gutter: if($_gutter == 'no-gutters' or $_gutter == 'no-gutter', null, $_gutter); - - @return $_gutter; -} - - -// Get Gutters -// ----------- -// Return before and after gutter values. -// - [$context]: -@function get-gutters( - $context: $susy -) { - $context : parse-gutters($context); - - $_gutter-position : susy-get(gutter-position, $context); - $_gutter : get-gutter-width($context); - - $_return : (before: null, after: null); - - @if is-split($context) and $_gutter { - $_gutter: $_gutter / 2; - $_return: map-merge($_return, (before: $_gutter, after: $_gutter)); - } @else { - $_return: map-merge($_return, ($_gutter-position: $_gutter)); - } - - @return $_return; -} - - -// Is Inside -// --------- -// Returns true if gutters are inside. -// $context: -@function is-inside( - $context -) { - $_inside: inside inside-static; - $_gutter-position: susy-get(gutter-position, $context); - - @return if(index($_inside, $_gutter-position), true, false); -} - - -// Is Split -// -------- -// Returns true if gutters are split. -// $context: -@function is-split( - $context -) { - $_split: split inside inside-static; - $_gutter-position: susy-get(gutter-position, $context); - - @return if(index($_split, $_gutter-position), true, false); -} - - -// Gutter Math -// ----------- -// Return the math to use for gutter calculations -// $context: -@function gutter-math( - $context: $susy -) { - $_return : susy-get(math, $context); - $_return : if(susy-get(gutter-position, $context) == inside-static, static, $_return); - - @return $_return; -} diff --git a/_sass/basically-basic/vendor/susy/language/susy/_isolate.scss b/_sass/basically-basic/vendor/susy/language/susy/_isolate.scss deleted file mode 100644 index 7ddfd7f..0000000 --- a/_sass/basically-basic/vendor/susy/language/susy/_isolate.scss +++ /dev/null @@ -1,77 +0,0 @@ -// Isolation Syntax -// ================ - - -// Isolate [Mixin] -// --------------- -// Set isolation as an override. -// - $location: -@mixin isolate( - $isolate: 1 -) { - $inspect: $isolate; - - $output: ( - push: isolate($isolate), - flow: susy-get(flow, $isolate), - ); - - @include susy-inspect(isolate, $inspect); - @include isolate-output($output...); -} - - -// Isolate [function] -// ------------------ -// Return an isolation offset width. -// - $location: -@function isolate( - $isolate: 1 -) { - $isolate: parse-span($isolate); - $isolation: susy-get(span, $isolate); - - @if $isolation and not(get-location($isolate)) { - $new: ( - span: null, - location: $isolation, - ); - $isolate: map-merge($isolate, $new); - } - - @return get-isolation($isolate); -} - - -// Get Isolation -// ------------- -// Return the isolation offset width -// - $input: -@function get-isolation( - $input -) { - $location : get-location($input); - $columns : susy-get(columns, $input); - $width : null; - - @if type-of($location) == number and not(unitless($location)) { - $width: $location; - } @else if $location { - $push: $location - 1; - @if $push > 0 { - $push: map-merge($input, ( - span: $push, - location: 1, - spread: wide, - )); - $width: get-span-width($push); - } - } - - @if susy-get(gutter-position, $input) == split - and susy-get(gutters, $input) > 0 { - $width: if($width == null, gutters($input), $width + gutters($input)); - } - - @return $width or 0; -} diff --git a/_sass/basically-basic/vendor/susy/language/susy/_margins.scss b/_sass/basically-basic/vendor/susy/language/susy/_margins.scss deleted file mode 100644 index cb36839..0000000 --- a/_sass/basically-basic/vendor/susy/language/susy/_margins.scss +++ /dev/null @@ -1,94 +0,0 @@ -// Margin Syntax -// ============= - -// Pre -// --- -// Add spanning-margins before an element. -// - $span : -@mixin pre( - $span -) { - $inspect: $span; - $span : map-merge((spread: wide), parse-span($span)); - $flow : susy-get(flow, $span); - $split : if(susy-get(gutter-position, $span) == split, true, false); - $gutter : gutter($span); - $span : span($span); - $width : if($split and $gutter, $span + $gutter, $span); - - @include susy-inspect(pre, $inspect); - @include margin-output($width, null, $flow); -} - -// Post -// ---- -// Add spanning-margins after an element. -// - $span : -@mixin post( - $span -) { - $inspect : $span; - $span : map-merge((spread: wide), parse-span($span)); - $flow : susy-get(flow, $span); - $split : if(susy-get(gutter-position, $span) == split, true, false); - $width : if($split, span($span) + gutter($span), span($span)); - - @include susy-inspect(post, $inspect); - @include margin-output(null, $width, $flow); -} - -// Push -// ---- -// Simple synonymn for pre. -// - $span : -@mixin push( - $span -) { - @include pre($span); -} - -// Pull -// ---- -// Add negative spanning-margins before an element. -// - $span : -@mixin pull( - $span -) { - $inspect : $span; - $span : map-merge((spread: wide), parse-span($span)); - $flow : susy-get(flow, $span); - $split : if(susy-get(gutter-position, $span) == split, true, false); - $width : if($split, 0 - span($span) + gutter($span), 0 - span($span)); - - @include susy-inspect(pull, $inspect); - @include margin-output($width, null, $flow); -} - -// Squish -// ------ -// Add spanning-margins before and after an element. -// - $pre : -// - [$post] : -@mixin squish( - $pre, - $post: false -) { - $inspect : ($pre, $post); - $pre : map-merge((spread: wide), parse-span($pre)); - - @if $post { - $post: map-merge((spread: wide), parse-span($post)); - } @else { - $span: susy-get(span, $pre); - @if length($span) > 1 { - $pre: map-merge($pre, (span: nth($span, 1))); - $post: map-merge($pre, (span: nth($span, 2))); - } @else { - $post: $pre; - } - } - - @include susy-inspect(squish, $inspect); - @include pre($pre); - @include post($post); -} diff --git a/_sass/basically-basic/vendor/susy/language/susy/_padding.scss b/_sass/basically-basic/vendor/susy/language/susy/_padding.scss deleted file mode 100644 index cdf75c8..0000000 --- a/_sass/basically-basic/vendor/susy/language/susy/_padding.scss +++ /dev/null @@ -1,74 +0,0 @@ -// Padding Syntax -// ============== - -// Prefix -// ------ -// Add spanning-padding before an element. -// - $span : -@mixin prefix( - $span -) { - $inspect : $span; - $span : map-merge((spread: wide), parse-span($span)); - $flow : susy-get(flow, $span); - $width : span($span); - - @if is-inside($span) { - $gutter: gutter($span); - $width: if($gutter and comparable($width, $gutter), $width + $gutter, $width); - } - - @include susy-inspect(prefix, $inspect); - @include padding-output($width, null, $flow); -} - -// Suffix -// ------ -// Add spanning-padding after an element. -// - $span : -@mixin suffix( - $span -) { - $inspect : $span; - $span : map-merge((spread: wide), parse-span($span)); - $flow : susy-get(flow, $span); - $width : span($span); - - @if is-inside($span) { - $gutter: gutter($span); - $width: if($gutter and comparable($width, $gutter), $width + $gutter, $width); - } - - @include susy-inspect(suffix, $inspect); - @include padding-output(null, $width, $flow); -} - -// Pad -// --- -// Add spanning-padding before and after an element. -// - $pre : -// - [$post] : -@mixin pad( - $pre, - $post: false -) { - $inspect : ($pre, $post); - $pre : map-merge((spread: wide), parse-span($pre)); - - @if $post { - $post: map-merge((spread: wide), parse-span($post)); - } @else { - $span: susy-get(span, $pre); - @if length($span) > 1 { - $pre: map-merge($pre, (span: nth($span, 1))); - $post: map-merge($pre, (span: nth($span, 2))); - } @else { - $post: $pre; - } - } - - @include susy-inspect(pad, $inspect); - @include prefix($pre); - @include suffix($post); - -} diff --git a/_sass/basically-basic/vendor/susy/language/susy/_rows.scss b/_sass/basically-basic/vendor/susy/language/susy/_rows.scss deleted file mode 100644 index d726431..0000000 --- a/_sass/basically-basic/vendor/susy/language/susy/_rows.scss +++ /dev/null @@ -1,138 +0,0 @@ -// Row Start & End -// =============== - -// Break -// ----- -// Apply to any element that should force a line break. -@mixin break { - @include output((clear: both)); -} - - -// NoBreak -// ------- -// Cancel the break() effect, e.g. when using media queries. -@mixin nobreak { - @include output((clear: none)); -} - - -// Full -// ---- -// - [$context]: -@mixin full( - $context: $susy -) { - $inspect : $context; - @include susy-inspect(full, $inspect); - @include span(full of parse-grid($context) break); -} - - -// First -// ----- -// - [$context]: -@mixin first( - $context: $susy -) { - $inspect : $context; - $context : parse-grid($context); - $flow : susy-get(flow, $context); - - @include susy-inspect(first, $inspect); - @if not(is-split($context)) { - @include float-first($flow); - } -} - -@mixin alpha( - $context: $susy -) { - @include first($context); -} - - -// Last -// ---- -// - [$context]: -@mixin last( - $context: $susy -) { - $inspect : $context; - $context : parse-grid($context); - - @include susy-inspect(last, $inspect); - - $output: ( - flow: susy-get(flow, $context), - last-flow: susy-get(last-flow, $context), - margin: if(is-split($context), null, 0), - ); - - @include float-last($output...); -} - -@mixin omega( - $context: $susy -) { - @include last($context); -} - - -// Get Edge -// -------- -// Calculate edge value based on location, if possible -@function get-edge( - $span -) { - $span : parse-span($span); - $edge : susy-get(edge, $span); - - @if not($edge) { - $count: susy-count(susy-get(columns, $span)); - $location: susy-get(location, $span); - $n: susy-get(span, $span); - - $number: if(type-of($location) == number, true, false); - $index: if($number and unitless($location), true, false); - - @if $n == $count { - $edge: full; - } @else if $location and $n and $index { - @if $location == 1 { - $edge: if($n == $count, full, first); - } @else if $location + $n - 1 == $count { - $edge: last; - } - } - } - - @if $edge == alpha or $edge == omega { - $edge: if($edge == alpha, first, last); - } - - @return $edge; -} - - -// Get Location -// ------------ -// Calculate location value based on edge, if possible -@function get-location( - $span -) { - $span : parse-span($span); - $location : susy-get(location, $span); - $edge : get-edge($span); - $n : susy-get(span, $span); - - @if $edge and not($location) and type-of($n) == number and unitless($n) { - @if $edge == first { - $location: 1; - } @else if $edge == last { - $location: susy-count(susy-get(columns, $span)) - $n + 1; - } - } - - @return $location -} diff --git a/_sass/basically-basic/vendor/susy/language/susy/_settings.scss b/_sass/basically-basic/vendor/susy/language/susy/_settings.scss deleted file mode 100644 index 9b5d897..0000000 --- a/_sass/basically-basic/vendor/susy/language/susy/_settings.scss +++ /dev/null @@ -1,216 +0,0 @@ -// Susy Settings -// ============= - -// Susy Language Defaults -// ---------------------- -// - PRIVATE -@include susy-defaults(( - container: auto, - math: fluid, - output: float, - container-position: center, - gutter-position: after, - global-box-sizing: content-box, - debug: ( - image: hide, - color: rgba(#66f, .25), - output: background, - toggle: top right, - ), -)); - - -// Valid Keyword Values -// -------------------- -// - PRIVATE: DONT'T TOUCH -$susy-keywords: ( - container: auto, - math: static fluid, - output: isolate float, - container-position: left center right, - flow: ltr rtl, - gutter-position: before after split inside inside-static, - box-sizing: border-box content-box, - span: full, - edge: first alpha last omega full, - spread: narrow wide wider, - gutter-override: no-gutters no-gutter, - role: nest, - clear: break nobreak, - debug image: show hide show-columns show-baseline, - debug output: background overlay, -); - - -// Parse Susy Keywords and Maps -// ---------------------------- -@function parse-settings( - $short: $susy -) { - $_return: (); - - @if type-of($short) == map { - $_return: $short; - } @else { - @each $item in $short { - // strings - @if type-of($item) == string { - @each $key, $value in $susy-keywords { - @if index($value, $item) { - $_key-value: append($key, $item); - $_return: _susy-deep-set($_return, $_key-value...); - } - } - // maps - } @else if type-of($item) == map { - $_return: map-merge($_return, $item); - } - } - } - - @return $_return; -} - - -// Parse Columns & Gutters -// ----------------------- -@function parse-layout( - $short -) { - $_return: (); - $_columns: (); - $_gutters: null; - - @if not(unitless(nth(nth($short, 1), 1))) { - $_gutters: nth($short, 1); - } @else { - $_columns: (columns: nth($short, 1)); - $_gutters: if(length($short) > 1, nth($short, 2), $_gutters); - } - - @if type-of($_gutters) == list and length($_gutters) > 0 { - $_gutters: ( - gutters: nth($_gutters, 2) / nth($_gutters, 1), - column-width: nth($_gutters, 1), - ); - } @else { - $_gutters: if($_gutters, (gutters: $_gutters), ()); - } - - $_return: map-merge($_return, $_columns); - $_return: map-merge($_return, $_gutters); - - @return $_return; -} - - -// Parse Grid/Context -// ------------------ -@function parse-grid( - $short: $susy -) { - $_return: parse-settings($short); - $_layout: (); - - @if type-of($short) == map { - $_return: $short; - } @else { - @each $item in $short { - // number or list - @if type-of($item) == number or type-of($item) == list { - @if type-of($item) == list or unitless($item) { - $_layout: append($_layout, $item); - } @else { - $_return: map-merge($_return, (container: $item)); - } - } - } - - $_layout: if(length($_layout) > 0, parse-layout($_layout), $_layout); - } - - @return map-merge($_return, $_layout); -} - - -// Parse Span -// ---------- -@function parse-span( - $short, - $key: span -) { - $_return: (); - - @if type-of($short) == map { - $_return: $short; - } @else { - $_at: index($short, at); - - @if $_at { - $_loci: $_at + 1; - $_location: nth($short, $_loci); - $_return: map-merge($_return, (location: $_location)); - $short: set-nth($short, $_at, null); - $short: set-nth($short, $_loci, null); - } - - $_i: 1; - $_span: (); - - @while $_i <= length($short) { - $_this: nth($short, $_i); - - @if type-of($_this) == number { - $_span: append($_span, $_this); - $short: set-nth($short, $_i, null); - } @else if $_this == of { - $short: set-nth($short, $_i, null); - $_i: length($short) + 1; - } - - $_i: $_i + 1; - } - - @if length($_span) > 0 { - $_span: if(length($_span) == 1, nth($_span, 1), $_span); - $_return: map-merge($_return, ($key: $_span)); - } - - $_return: map-merge($_return, parse-grid($short)); - } - - @return $_return; -} - - -// Parse Gutters -// ------------- -@function parse-gutters( - $short: $susy -) { - $_gutters: parse-span($short, gutter-override); - $_span: susy-get(gutter-override, $_gutters); - - @if $_span and not(map-get($_gutters, columns)) { - $_context: (); - $_new: (); - - @each $item in $_span { - @if type-of($item) == number and unitless($item) { - $_context: append($_context, $item); - } @else { - $_new: append($_new, $item); - } - } - - $_context: parse-grid($_context); - $_new: if(length($_new) == 0, null, $_new); - $_new: if(length($_new) == 1, nth($_new, 1), $_new); - $_new: (gutter-override: if($_new != $_span, $_new, $_span)); - - $_gutters: map-merge($_gutters, $_new); - $_gutters: map-merge($_gutters, $_context); - } - - @return $_gutters; -} diff --git a/_sass/basically-basic/vendor/susy/language/susy/_span.scss b/_sass/basically-basic/vendor/susy/language/susy/_span.scss deleted file mode 100644 index 86ccda9..0000000 --- a/_sass/basically-basic/vendor/susy/language/susy/_span.scss +++ /dev/null @@ -1,163 +0,0 @@ -// Span Syntax -// =========== - -// Span [mixin] -// ------------ -// Set a spanning element using shorthand syntax. -// - $span : -@mixin span( - $span -) { - $inspect: $span; - $span: parse-span($span); - $output: span-math($span); - $nesting: susy-get(span, $span); - $clear: susy-get(clear, $span); - - $box: susy-get(box-sizing, $span); - $content-box: if(susy-get(global-box-sizing) != 'border-box', true, false); - $box: $box or if(is-inside($span) and $content-box, border-box, null); - - @if $clear == break { - @include break; - } @else if $clear == nobreak { - @include nobreak; - } - - @include susy-inspect(span, $inspect); - @include output((box-sizing: $box)); - @include float-span-output($output...); - - @if valid-columns($nesting, silent) { - @include nested($span) { @content; } - } @else { - @content; - } -} - -// Span [function] -// --------------- -// Return the width of a span. -// - $span : -@function span( - $span -) { - @return get-span-width($span); -} - -// Span Math -// --------- -// Get all the span results. -// - $span: -@function span-math( - $span -) { - $nest : if(susy-get(role, $span) == nest, true, false); - $split-nest : if(is-split($span) and $nest, true, false); - $edge : get-edge($span); - $location : get-location($span); - - $float : from; - $padding-before : null; - $padding-after : null; - $margin-before : null; - $margin-after : null; - - // calculate widths - $spread: index(map-values($span), spread); - $span: if($split-nest and not($spread), map-merge($span, (spread: wide)), $span); - $width: get-span-width($span); - $gutters: get-gutters($span); - - // apply gutters - @if is-inside($span) { - @if not(susy-get(role, $span)) { - $padding-before: map-get($gutters, before); - $padding-after: map-get($gutters, after); - } - } @else { - @if not($split-nest) { - $margin-before: map-get($gutters, before); - $margin-after: map-get($gutters, after); - } - } - - // special margin handling - @if susy-get(output, $span) == isolate and $location { - $margin-before: get-isolation($span); - $margin-after: -100%; - } @else if $edge { - $is-split: is-split($span); - $pos: susy-get(gutter-position, $span); - - @if $edge == last { - $float: susy-get(last-flow, $span); - } - - @if not($is-split) { - @if $edge == full or ($edge == first and $pos == before) { - $margin-before: 0; - } - @if $edge == full or ($edge == last and $pos == after) { - $margin-after: 0; - } - } - - } - - @return ( - width : $width, - float : $float, - margin-before : $margin-before, - margin-after : $margin-after, - padding-before : $padding-before, - padding-after : $padding-after, - flow : susy-get(flow, $span), - ); -} - -// Get Span Width -// -------------- -// Return span width. -// - $span: -@function get-span-width( - $span -) { - $span : parse-span($span); - - $n : susy-get(span, $span); - $location : get-location($span); - $columns : susy-get(columns, $span); - $gutters : susy-get(gutters, $span); - $spread : susy-get(spread, $span); - - $context : null; - $span-sum : null; - $width : null; - - @if $n == 'full' { - $pos: susy-get(gutter-position, $span); - $role: susy-get(role, $span); - $n: if($pos == split and $role != nest, susy-count($columns), 100%); - } - - @if type-of($n) != number { - @warn "(#{type-of($n)}) #{$n} is not a valid span."; - } @else if unitless($n) { - $context: susy-sum($columns, $gutters, if(is-split($span), wide, narrow)); - $spread: if(is-inside($span), $spread or wide, $spread); - $span-sum: susy($n, $location, $columns, $gutters, $spread); - - $_math: susy-get(math, $span); - $_column-width: susy-get(column-width, $span); - @if $_math == static { - $width: $span-sum * valid-column-math($_math, $_column-width); - } @else { - $width: percentage($span-sum / $context); - } - } @else { - $width: $n; - } - - @return $width; -} diff --git a/_sass/basically-basic/vendor/susy/language/susy/_validation.scss b/_sass/basically-basic/vendor/susy/language/susy/_validation.scss deleted file mode 100644 index a235b17..0000000 --- a/_sass/basically-basic/vendor/susy/language/susy/_validation.scss +++ /dev/null @@ -1,16 +0,0 @@ -// Validation -// ========== - - -// Validate Column Math -// -------------------- -@function valid-column-math( - $math, - $column-width -) { - @if $math == static and not($column-width) { - @error 'Static math requires a valid column-width setting.'; - } - - @return $column-width; -} diff --git a/_sass/basically-basic/vendor/susy/language/susyone/_background.scss b/_sass/basically-basic/vendor/susy/language/susyone/_background.scss deleted file mode 100644 index 38c6726..0000000 --- a/_sass/basically-basic/vendor/susy/language/susyone/_background.scss +++ /dev/null @@ -1,18 +0,0 @@ -// --------------------------------------------------------------------------- -// Imports - -@import "compass/layout/grid-background"; -@import "compass/css3/background-origin"; -@import "compass/css3/background-clip"; - -// --------------------------------------------------------------------------- -// Susy Grid Background -// -// A wrapper for the compass "column-grid-background" mixin -// Uses all your settings to create a grid background for a container element. -// Note: Sub-pixel rounding can lead to several pixels of variation between browsers. -@mixin susy-grid-background(){ - @include column-grid-background($total-columns, column(), gutter(), 0); - @include background-origin(content-box); - @include background-clip(content-box); -} diff --git a/_sass/basically-basic/vendor/susy/language/susyone/_functions.scss b/_sass/basically-basic/vendor/susy/language/susyone/_functions.scss deleted file mode 100644 index 6818458..0000000 --- a/_sass/basically-basic/vendor/susy/language/susyone/_functions.scss +++ /dev/null @@ -1,377 +0,0 @@ -// --------------------------------------------------------------------------- -// Imports - -// We need access to some basic font settings for handling media-queries. -@import "compass/typography/vertical_rhythm"; - -// For now, we also need this... -$browser-default-font-size-px : 16px; -$browser-default-font-size-percent : 100%; -$browser-default-font-size-pt : 12pt; - -$rem-with-px-fallback : true !default; - -// --------------------------------------------------------------------------- -// Sass list Functions - -// Return a list with specific items removed -// -// filter($list, $target) -// - $list : The list to filter. -// - $target : An item to be removed from the list. -@function filter($list, $target) { - $clean: compact(); - @if index($list, $target) { - @each $item in $list { - $clean: if($item == $target, $clean, append($clean, $item)); - } - } @else { $clean: $list; } - @return $clean; -} - -// --------------------------------------------------------------------------- -// Don't use static output when it will break things - -// Switch element-level output to fluid, when container-width is wrong for static -// -// fix-static-misalignment([$style, $width]) -// - $style: $container-style. -// - $width: $container-width. -@function fix-static-misalignment( - $style: $container-style, - $width: $container-width -) { - @if $container-width and $container-width != container-outer-width($width: false) { - $style: fluid; - } - @return $style; -} - -// --------------------------------------------------------------------------- -// Grid Functions - -// Returns the full width of a grid based on your grid settings. -// -// $columns : The number of columns to get width for. -@function columns-width( - $columns : $total-columns -) { - @if round($columns) != $columns { - @warn "Susy works best with integer column-spans." + - "For partial-columns, you may need to finesse the math by hand using functions directly."; - } - @return ($columns * $column-width) + (if($columns >= 1, ceil($columns - 1), 0) * $gutter-width); -} - -// Return the grid width after adding or subtracting grid padding -// -// $width : the width of the grid without padding; -// $operation : ( add | subtract ) if padding should be added or subtracted; -@function handle-grid-padding( - $width, - $operation : subtract -) { - $pad: $grid-padding*2; - - @if comparable($width, $grid-padding) { - $width: if($operation == subtract, $width - $pad, $width + $pad); - } @else { - @warn "$grid-padding must be set in units comparable to the container width."; - } - - @return $width; -} - -// Return the full outer width of a Container element. -// -// $columns : The number of columns in the Grid Layout. -@function container-outer-width( - $columns : $total-columns, - $width : $container-width -) { - $outerwidth: if($width, $width, columns-width($columns)); - - @if $width { - @if not($border-box-sizing) { $outerwidth: handle-grid-padding($outerwidth, subtract); } - } @else { - @if $border-box-sizing { $outerwidth: handle-grid-padding($outerwidth, add); } - } - - @return $outerwidth; -} - -// Return the percentage width of a single column in a given 'context'. -// -// $context : The grid context in columns, if nested. -// $style : The container style to use. -@function column( - $context : $total-columns, - $style : fix-static-misalignment() -) { - @return if($style == static, $column-width, relative-width($column-width, $context)); -} - -// Return the percentage width of multiple 'columns' in a given 'context'. -// -// $columns : The number of columns to get relative width for. -// $context : The grid context in columns, if nested. -// $style : The container style to use. -@function columns( - $columns, - $context : $total-columns, - $style : fix-static-misalignment() -) { - @return if($style == static, columns-width($columns), relative-width(columns-width($columns), $context)); -} - -// Return the percentage width of a single gutter in a given 'context'. -// -// $context : The grid context in columns, if nested. -// $style : The container style to use. -@function gutter( - $context : $total-columns, - $style : fix-static-misalignment() -) { - @return if($style == static, $gutter-width, relative-width($gutter-width, $context)); -} - -// Return the percentage width of a given value in a given 'context'. -// -// $width : Any given width value. -// $context : The grid context in columns, if nested. -@function relative-width( - $width, - $context : $total-columns -) { - @return percentage($width / columns-width($context)); -} - -// Return the total space occupied by multiple columns and associated gutters. -// Useful for adding padding or margins (prefix, suffix, push, pull, etc.) -// -// $columns : The number of columns to get relative space for. -// $context : The grid context in columns, if nested. -// $style : The container style to use. -@function space( - $columns, - $context : $total-columns, - $style : fix-static-misalignment() -) { - @return columns($columns, $context, $style) + if($columns >= 1, gutter($context, $style), 0); -} - -// Accept a list including column-count and (optional) position. -// Return either the column count or the position alone. -// -// $columns : the list to split and interprate. -// $request : The value to return, either 'columns' or 'position'. -@function split-columns-value( - $columns, - $request : columns -) { - $pos : false; - $cols : false; - - @each $var in $columns { - @if (type-of($var) == 'string') { - $pos: $var; - } @else { - @if (type-of($var) == 'number') and (unitless($var)) { - $cols: $var; - } @else { - @warn '"#{$var}" is not a valid part of "$columns: #{$columns}" in the columns() mixin.'; - } - } - } - - @if $request == 'columns' { - @return $cols; - } @else { - @if $request == 'position' { - @return $pos; - } @else { - @warn '"#{$request}" is not a valid value for $request'; - } - } -} - -// Accept nth-selector variables, and format them as a valid CSS3 selector. -// -// $n : [first | only | last | ] -// $selector : [child | last-child | of-type | last-of-type ] -@function format-nth( - $n : last, - $selector : child -) { - @if ($n == 'last') or ($n =='first') or ($n =='only') { - $selector: '#{$n}-#{$selector}'; - } @else { - $selector: 'nth-#{$selector}(#{$n})'; - } - @return $selector; -} - -// --------------------------------------------------------------------------- -// Media Functions - -// Return an em value adjusted to match the browser default font size. -// Note: This only works if actual sizes are set relative to browser defaults. -// -// $ems : The initial value to be converted. -// $font-size : The current font-size in. -@function base-ems( - $ems, - $font-size: $base-font-size -){ - $font-size : if(unit($ems) == 'rem', $base-font-size, $font-size); - $unit : unit($font-size); - $mult : $ems / ($ems * 0 + 1); - - @if $unit == 'px' { - @return $font-size / $browser-default-font-size-px * $mult * 1em; - } - @else if $unit == '%' { - @return $font-size / $browser-default-font-size-percent * $mult * 1em; - } - @else if $unit == 'em' { - @return $font-size / 1em * $mult * 1em; - } - @else if $unit == 'pt' { - @return $font-size / $browser-default-font-size-pt * $mult * 1em; - } - @else { - @warn 'Variable $base-font-size does not have a valid font unit. Valid units for fonts in CSS are px, pt, em, and %.'; - } -} - -// This name will be deprecated... -@function absolute-ems( - $ems, - $font-size: $base-font-size -){ - @return base-ems( $ems, $font-size); - } - -// Return a length, after any em-values have been sent through absolute-ems(). -// -// $length : The length value to be checked and adjusted if necessary. -// $font-size : The current font-size in px. -@function fix-ems( - $length, - $font-size: $base-font-size -){ - @if $length { - @if (unit($length) == 'em') or (unit($length) == 'rem') { - $length: absolute-ems($length,$font-size); - } - } - @return $length; -} - -// Sort a list of arguments into "$min $layout $max $ie" order, and return the list. -// -// $media-layout : a list of values [$min $layout $max $ie] including... -// : - one unitless number (columns in a layout) -// : - two optional lengths (min and max-width media-query breakpoints). -// : - one optional boolean or string to trigger fallback support for IE. -// $font-size : [optional] The base font-size of your layout, if you are using ems. -// : - defaults to $base-font-size -@function medialayout( - $media-layout, - $font-size: $base-font-size -) { - $media : false; - $min : false; - $layout : false; - $max : false; - $ie : false; - $has-layout : false; - - @each $val in $media-layout { - @if (type-of($val) == "number") { - @if unitless($val) { - $layout : $val; - $has-layout : true; - } @else { - @if ($has-layout) and not($media) { - $max: $val; - } @else { - @if $media { - $media: join($media,$val); - } @else { - $media: $val; - } - } - } - } @else { - $ie: $val; - } - } - @if (length($media) > 0) { - @if (length($media) == 1) { - $min: nth($media,1); - } @else { - $min: nth($media,1); - $max: nth($media,2); - @if comparable($min, $max) { - @if ($min > $max) { - $max: nth($media,1); - $min: nth($media,2); - } - } @else { - @warn "Can't compare incompatible units." + - "Using #{$min} for min-width, and #{$max} for max-width"; - } - @if (length($media) > 2) { - @warn "You can only send two lengths: a min-width and an (optional) max-width." + - "You sent #{length($media)}: #{$media}"; - } - } - } - - // media-queries must be set in ems relative to the browser default - // rather than the font-size set in CSS. - $min: fix-ems($min,$font-size); - $max: fix-ems($max,$font-size); - - @return $min $layout $max $ie; -} - -// Return the nearest layout (column-count) above a given breakpoint. -// -// $min : The min-width media-query breakpoint above which to establish a new layout. -@function get-layout( - $min -) { - $min : fix-ems($min); - $return : false; - - @if comparable($min, $column-width) { - $return : ceil(($min + $gutter-width) / ($column-width + $gutter-width)); - } @else { - @warn "Can't determine a layout, becuse #{$min} and #{$column-width} are not comparable."; - } - - @return $return; -} - -// Check to see if a given $media-layout list is simply the default. -// -// $media-layout : a list of values including - -// : One unitless number (columns in a layout) -// : Two optional lengths (min and max-width media-query breakpoints). -// : One optional boolean or string to trigger fallback support for IE. -@function is-default-layout( - $media-layout -) { - $media-layout : medialayout($media-layout); - $min : nth($media-layout,1); - $layout-cols : nth($media-layout,2); - $max : nth($media-layout,3); - - @if $min or $max { - @return false; - } @else { - @return if($layout-cols == $total-columns,true,false); - } -} diff --git a/_sass/basically-basic/vendor/susy/language/susyone/_grid.scss b/_sass/basically-basic/vendor/susy/language/susyone/_grid.scss deleted file mode 100644 index 491c622..0000000 --- a/_sass/basically-basic/vendor/susy/language/susyone/_grid.scss +++ /dev/null @@ -1,312 +0,0 @@ -// --------------------------------------------------------------------------- -// Imports - -@import "compass/utilities/general/clearfix"; -@import "compass/css3/box-sizing"; - -// --------------------------------------------------------------------------- -// Border-Box Sizing - -// Apply the border-box sizing model to all elements -// and adjust the grid math appropriately. -@mixin border-box-sizing { - $border-box-sizing: true !global; - * { @include box-sizing(border-box); } -} - -// --------------------------------------------------------------------------- -// Container - -// Set the width of a container -// -// $columns : The number of columns in the Grid Layout. -@mixin set-container-width( - $columns : $total-columns, - $style : $container-style, - $px-vals : $pixel-values-only -){ - $width: container-outer-width($columns); - - @if $style == 'static' { - @if $px-vals == true { - width: round(convert-length($width, px)); - } @else { - @include rem(width, $width); - } - } @else { - @if $style == 'fluid' { - @if unit($width) == '%' { - @if $px-vals == true { - width: round(convert-length($width, px)); - } @else { - @include rem(width, $width); - } - } - } @else { - @if $px-vals == true { - max-width: round(convert-length($width, px)); - } @else { - @include rem(max-width, $width); - } - - @include for-legacy-browser(ie,"6") { - @if unit($width) == 'rem' { - _width: round(convert-length($width, px)); - } @else { - _width: $width; - } - } - } - } -} - -// Set the outer grid-containing element(s). -// -// $columns : The number of columns in the container. -@mixin apply-container( - $columns : $total-columns, - $px-vals : $pixel-values-only -){ - @include pie-clearfix; - @include set-container-width($columns); - @if $px-vals == true { - padding-left: round(convert-length($grid-padding, px)); - padding-right: round(convert-length($grid-padding, px)); - } @else { - @include rem(padding-left, $grid-padding); - @include rem(padding-right, $grid-padding); - } - margin: { left: auto; right: auto; } -} - -// Set one or more layouts on a grid-containing element at any number of media-query breakpoints. -// -// $media-layout-1 : [default:$total-columns] A list of values including - -// : One unitless number (representing columns in a layout) -// : Two optional lengths (representing min and max-width media-query breakpoints). -// $media-layout-2 ...-10 : [optional] Same as $media-layout-1 -@mixin container( - $media-layouts... -){ - $media-layouts: if(length($media-layouts) > 0, $media-layouts, $total-columns); - - @each $ml in $media-layouts { - @if is-default-layout($ml) { - @include apply-container; - } @else { - @include at-breakpoint($ml) { - @include apply-container; - } - } - } -} - -// --------------------------------------------------------------------------- -// Columns - -// Create a grid element spanning any number of 'columns' in a grid 'context'. -// $columns : The number of columns to span. -// $context : [optional] The context (columns spanned by parent). -// : Context is required on any nested elements. -// : Context MUST NOT be declared on a root element. -// $padding : [optional] Padding applied to the inside of individual grid columns. -// : Padding is only output if one or two values are specified (e.g. 1em or 10px 20px) -// : Padding values are applied only on the horizontal axis in from-to order -// $from : The start direction of your layout (e.g. 'left' for ltr languages) -// $style : The container style to use. -@mixin span-columns( - $columns, - $context : $total-columns, - $padding : false, - $from : $from-direction, - $style : fix-static-misalignment() -) { - $from : unquote($from); - $to : opposite-position($from); - $pos : split-columns-value($columns,position); - $cols : split-columns-value($columns,columns); - $pad-from : if($style == static, 0 * $gutter-width, relative-width(0 * $gutter-width, $context)); - $pad-to : if($style == static, 0 * $gutter-width, relative-width(0 * $gutter-width, $context)); - - @if $padding != false { - $pad-from : nth($padding, 1); - - @if length($padding) > 1 { - $pad-to: nth($padding, 2); - } @else { - $pad-to: $pad-from; - } - - $pad-from : if($style == static, $pad-from, relative-width($pad-from, $context)); - $pad-to : if($style == static, $pad-to, relative-width($pad-to, $context)); - - padding-#{$from}: $pad-from; - padding-#{$to}: $pad-to; - } - - width: columns($cols, $context, $style) - if($border-box-sizing, 0, $pad-to + $pad-from); - - @if ($pos == 'omega') { - @include omega($from); - } @else { - float: $from; - margin-#{$to}: gutter($context, $style); - @include for-legacy-browser(ie, "6") { - display: inline; - } - } -} - -// Apply to elements spanning the last column, to account for the page edge. -// Only needed as an override. Normally 'omega' can just be called by `columns`. -// -// $from : The start-direction for your document. -@mixin omega( - $from : $from-direction -) { - $from : unquote($from); - $to : opposite-position($from); - $hack : opposite-position($omega-float); - - float: $omega-float; - margin-#{$to}: 0; - - @include for-legacy-browser(ie, "6", "7") { - *margin-#{$hack}: - $gutter-width; - @include for-legacy-browser(ie, "6") { - display: inline; - } - } -} - -// Shortcut to apply omega to a specific subset of elements. -// -// $n : [first | only | last | ] -// $selector : [child | last-child | of-type | last-of-type ] -// $from : The start-direction for your document. -@mixin nth-omega( - $n : last, - $selector : child, - $from : $from-direction -) { - $from : unquote($from); - - &:#{format-nth($n,$selector)} { - @if $n == "first" { - @include omega($from); - } @else { - @include with-browser-ranges(css-sel3) { - @include omega($from); - } - } - } -} - - - -// --------------------------------------------------------------------------- -// Resets - -// Reset a '+columns' grid element to default block behavior -// -// $from : The start direction of your layout (e.g. 'left' for ltr languages) -@mixin reset-columns( - $from: $from-direction -) { - $from : unquote($from); - $to : opposite-position($from); - $hack : opposite-position($omega-float); - - float: none; - width: auto; - margin-#{$to}: auto; - - @include for-legacy-browser(ie, "6", "7") { - *margin-#{$hack}: auto; - @include for-legacy-browser(ie, "6") { - display: block; - } - } -} - -// Apply to elements previously set as omega. -// This will return floats and margins back to non-omega settigns. -// -// $context : [optional] The context (columns spanned by parent). -// $from : The start-direction for your document. -// $style : The container style to use. -@mixin remove-omega( - $context : $total-columns, - $from : $from-direction, - $style : fix-static-misalignment() -) { - $from : unquote($from); - $to : opposite-position($from); - $hack : opposite-position($omega-float); - - float: $from; - margin-#{$to}: gutter($context, $style); - - @include for-legacy-browser(ie, "6", "7") { - *margin-#{$hack}: auto; - } -} - -// Shortcut to apply remove-omega to a specific subset of elements. -// -// $n : [first | only | last | ] -// $selector : [child | last-child | of-type | last-of-type ] -// $context : [optional] The context (columns spanned by parent). -// $from : The start-direction for your document. -// $style : The container style to use. -@mixin remove-nth-omega( - $n : last, - $selector : child, - $context : $total-columns, - $from : $from-direction, - $style : fix-static-misalignment() -) { - $from : unquote($from); - - &:#{format-nth($n,$selector)} { - @if $n == "first" { - @include remove-omega($context, $from, $style); - } @else { - @include with-browser-ranges(css-sel3) { - @include remove-omega($context, $from, $style); - } - } - } -} - - -// --------------------------------------------------------------------------- -// Change Settings - -@mixin with-grid-settings( - $columns: $total-columns, - $width: $column-width, - $gutter: $gutter-width, - $padding: $grid-padding -) { - // keep the defaults around - $default-columns: $total-columns; - $default-width: $column-width; - $default-gutter: $gutter-width; - $default-padding: $grid-padding; - - // use the new settings - $total-columns: $columns !global; - $column-width: $width !global; - $gutter-width: $gutter !global; - $grid-padding: $padding !global; - - // apply to contents - @content; - - // re-instate the defaults - $total-columns: $default-columns !global; - $column-width: $default-width !global; - $gutter-width: $default-gutter !global; - $grid-padding: $default-padding !global; -} diff --git a/_sass/basically-basic/vendor/susy/language/susyone/_isolation.scss b/_sass/basically-basic/vendor/susy/language/susyone/_isolation.scss deleted file mode 100644 index 2b70038..0000000 --- a/_sass/basically-basic/vendor/susy/language/susyone/_isolation.scss +++ /dev/null @@ -1,51 +0,0 @@ -// --------------------------------------------------------------------------- -// Isolation - -// Isolate the position of a grid element (use in addition to span-columns) -// -// $location : The grid column to isolate in, relative to the container; -// $context : [optional] The context (columns spanned by parent). -// $from : The start direction of your layout (e.g. 'left' for ltr languages) -@mixin isolate( - $location, - $context: $total-columns, - $from: $from-direction, - $style: fix-static-misalignment() -) { - $to: opposite-position($from); - margin-#{$to}: -100%; - margin-#{$from}: space($location - 1, $context, $style); -} - -// Isolate a group of elements in a grid, using nth-child selectors -// -// $columns : The column-width of each item on the grid; -// $context : [optional] The context (columns spanned by parent). -// $selector : [child | of-type | last-of-type ] (default is 'child') -// $from : The start direction of your layout (e.g. 'left' for ltr languages) -@mixin isolate-grid( - $columns, - $context: $total-columns, - $selector: 'child', - $from: $from-direction, - $style: fix-static-misalignment() -) { - $to: opposite-position($from); - $location: 1; - $line: floor($context / $columns); - - @include span-columns($columns, $context, $from: $from, $style: $style); - margin-#{$to}: -100%; - - @for $item from 1 through $line { - $nth: '#{$line}n + #{$item}'; - &:#{format-nth($nth,$selector)} { - margin-#{$from}: space($location - 1, $context, $style); - @if $location == 1 { clear: $from; } - @else { clear: none; } - - $location: $location + $columns; - @if $location > $context { $location: 1; } - } - } -} diff --git a/_sass/basically-basic/vendor/susy/language/susyone/_margin.scss b/_sass/basically-basic/vendor/susy/language/susyone/_margin.scss deleted file mode 100644 index accbbe6..0000000 --- a/_sass/basically-basic/vendor/susy/language/susyone/_margin.scss +++ /dev/null @@ -1,93 +0,0 @@ -// --------------------------------------------------------------------------- -// Margin Mixins - -// Apply 'columns' margin before an element to push it along the grid. -// -// $columns : The number of columns to span. -// $context : [optional] The context (columns spanned by parent). -// : Context is required on any nested elements. -// : Context MUST NOT be declared on a root element. -// $from : The start direction of your layout (e.g. 'left' for ltr languages) -// $style : The container style to use. -@mixin pre( - $columns, - $context : $total-columns, - $from : $from-direction, - $style : fix-static-misalignment() -) { - $from : unquote($from); - margin-#{$from}: space($columns, $context, $style); -} - -// 'push' is a synonymn for 'pre' -@mixin push( - $columns, - $context : $total-columns, - $from : $from-direction, - $style : fix-static-misalignment() -) { - $from : unquote($from); - @include pre($columns, $context, $from, $style); -} - -// Apply negative 'columns' margin before an element to pull it along the grid. -// -// $columns : The number of columns to span. -// $context : [optional] The context (columns spanned by parent). -// : Context is required on any nested elements. -// : Context MUST NOT be declared on a root element. -// $from : The start direction of your layout (e.g. 'left' for ltr languages) -// $style : The container style to use. -@mixin pull( - $columns, - $context : $total-columns, - $from : $from-direction, - $style : fix-static-misalignment() -) { - $from : unquote($from); - margin-#{$from}: 0 - space($columns, $context, $style); -} - -// Apply 'columns' margin after an element to contain it in a grid. -// -// $columns : The number of columns to span. -// $context : [optional] The context (columns spanned by parent). -// : Context is required on any nested elements. -// : Context MUST NOT be declared on a root element. -// $from : The start direction of your layout (e.g. 'left' for ltr languages) -// $style : The container style to use. -@mixin post( - $columns, - $context : $total-columns, - $from : $from-direction, - $style : fix-static-misalignment() -) { - $from : unquote($from); - $to : opposite-position($from); - margin-#{$to}: space($columns, $context, $style); -} - -// Apply 'columns' before and/or after an element to contain it on a grid. -// -// $pre : The number of columns to add as margin before. -// $post : The number of columns to add as margin after. -// $context : [optional] The context (columns spanned by parent). -// : Context is required on any nested elements. -// : Context MUST NOT be declared on a root element. -// $from : The start direction of your layout (e.g. 'left' for ltr languages) -// $style : The container style to use. -@mixin squish( - $pre : false, - $post : false, - $context : $total-columns, - $from : $from-direction, - $style : fix-static-misalignment() -) { - $from : unquote($from); - @if $pre { - @include pre($pre, $context, $from, $style) - } - @if $post { - @include post($post, $context, $from, $style) - } -} diff --git a/_sass/basically-basic/vendor/susy/language/susyone/_media.scss b/_sass/basically-basic/vendor/susy/language/susyone/_media.scss deleted file mode 100644 index ca860fc..0000000 --- a/_sass/basically-basic/vendor/susy/language/susyone/_media.scss +++ /dev/null @@ -1,105 +0,0 @@ -// --------------------------------------------------------------------------- -// Media Mixins - -// Create a new layout context for (@content) descendants. -// -// $layout-cols : a (unitless) number of columns to use for this layout. -@mixin layout( - $layout-cols -) { - // store default $total-columns setting for later, then change it. - $default-layout : $total-columns; - $total-columns : $layout-cols !global; - - // apply children in this new layout context. - @content; - - // return to default $total-columns setting. - $total-columns : $default-layout !global; -} - -// Nest a block of code inside a new media-query and layout context. -// -// $media-layout : a list of values [$min $layout $max $ie] including... -// : - one unitless number (columns in a layout) -// : - two optional lengths (min and max-width media-query breakpoints). -// : - one optional boolean or string to trigger fallback support for IE. -// $font-size : [optional] The base font-size of your layout, if you are using ems. -// : - defaults to $base-font-size -@mixin at-breakpoint( - $media-layout, - $font-size: $base-font-size -) { - $media-layout : medialayout($media-layout,$font-size); - $min : nth($media-layout,1); - $layout : nth($media-layout,2); - $max : nth($media-layout,3); - $ie : nth($media-layout,4); - - @if not($breakpoint-media-output) and not($breakpoint-ie-output) and not($breakpoint-raw-output) { - @warn "Either $breakpoint-media-output, $breakpoint-ie-output, or $breakpoint-raw-output must be true for at-breakpoint to work."; - } - - // We need to have either a min-width breakpoint or a layout in order to proceed. - @if $min or $layout or $max { - - // If we don't have a layout, we create one based on the min-width. - @if not($layout) { - $layout: get-layout($min); - } - - // If we still don't have a layout, we have a problem. - @if $layout { - // Set our new layout context. - @include layout($layout) { - @if $breakpoint-media-output { - @include with-browser-ranges(css-mediaqueries) { - @if $min and $max { - // Both $min and $max - @media (min-width: $min) and (max-width: $max) { - @content; - } - } @else { - @if not($min) and not($max) { - // Neither $min nor $max: - // We can create a breakpoint based on the number of columns in the layout. - $min: fix-ems(container-outer-width($width: false)); - } - @if $min { - // Min only: - @media (min-width: $min) { - @content; - } - } @else { - // Max only: - @media (max-width: $max) { - @content; - } - } - } - } - } - // Set an IE fallback - @if $ie and $breakpoint-ie-output { - @if (type-of($ie) == 'bool') { - $ie: 'lt-ie9'; - } - .#{$ie} & { - @content; - } - } - - @if $breakpoint-raw-output { - @content; - } - } - } @else { - @warn "We were unable to determine a layout for your breakpoint."; - } - - } @else { - @warn "You need to provide either a valid layout (number of columns)" - + "or a valid media-query min-width breakpoint (length)."; - } - -} diff --git a/_sass/basically-basic/vendor/susy/language/susyone/_padding.scss b/_sass/basically-basic/vendor/susy/language/susyone/_padding.scss deleted file mode 100644 index 8e6394a..0000000 --- a/_sass/basically-basic/vendor/susy/language/susyone/_padding.scss +++ /dev/null @@ -1,92 +0,0 @@ -// --------------------------------------------------------------------------- -// Padding Mixins - -// add empty colums as padding before an element. -// $columns : The number of columns to prefix. -// $context : [optional] The context (columns spanned by parent). -// : Context is required on any nested elements. -// : Context MUST NOT be declared on a root element. -// $from : The start direction of your layout (e.g. 'left' for ltr languages) -// $style : The container style to use. -@mixin prefix( - $columns, - $context : $total-columns, - $from : $from-direction, - $style : fix-static-misalignment() -) { - $from : unquote($from); - padding-#{$from}: space($columns, $context, $style); -} - -// add empty colums as padding after an element. -// $columns : The number of columns to suffix. -// $context : [optional] The context (columns spanned by parent). -// : Context is required on any nested elements. -// : Context MUST NOT be declared on a root element. -// $from : The start direction of your layout (e.g. 'left' for ltr languages) -// $style : The container style to use. -@mixin suffix( - $columns, - $context : $total-columns, - $from : $from-direction, - $style : fix-static-misalignment() -) { - $from : unquote($from); - $to : opposite-position($from); - padding-#{$to}: space($columns, $context, $style); -} - -// add empty colums as padding before and after an element. -// $columns : The number of columns to pad. -// $context : [optional] The context (columns spanned by parent). -// : Context is required on any nested elements. -// : Context MUST NOT be declared on a root element. -// $from : The start direction of your layout (e.g. 'left' for ltr languages) -// $style : The container style to use. -@mixin pad( - $prefix : false, - $suffix : false, - $context : $total-columns, - $from : $from-direction, - $style : fix-static-misalignment() -) { - $from : unquote($from); - @if $prefix { - @include prefix($prefix, $context, $from, $style); - } - @if $suffix { - @include suffix($suffix, $context, $from, $style); - } -} - -// Bleed into colums with margin/padding on any side of an element. -// $width : The side of the bleed. -// : Any unit-length will be used directly. -// : Any unitless number will be used as a column-count. -// : Use "2 of 6" format to represent 2 cals in a 6-col nested context. -// $sides : One or more sides to bleed [ top | right | bottom | left | all ]. -// $style : The container style to use. -@mixin bleed( - $width: $grid-padding, - $sides: left right, - $style: fix-static-misalignment() -) { - @if $border-box-sizing { @include box-sizing(content-box) } - - @if type-of($width) == 'list' { - $width: filter($width, of); - $width: space(nth($width,1), nth($width,2), $style); - } @else if unitless($width) { - $width: space($width, $style: $style); - } - - @if $sides == 'all' { - margin: - $width; - padding: $width; - } @else { - @each $side in $sides { - margin-#{$side}: - $width; - padding-#{$side}: $width; - } - } -} diff --git a/_sass/basically-basic/vendor/susy/language/susyone/_settings.scss b/_sass/basically-basic/vendor/susy/language/susyone/_settings.scss deleted file mode 100644 index e8ff9c8..0000000 --- a/_sass/basically-basic/vendor/susy/language/susyone/_settings.scss +++ /dev/null @@ -1,60 +0,0 @@ -// --------------------------------------------------------------------------- -// Susy Settings - -// The total number of columns in the grid -$total-columns : 12 !default; - -// The width of columns and gutters. -// These must all be set with the comparable units. -$column-width : 4em !default; -$gutter-width : 1em !default; - -// Padding on the left and right of a Grid Container. -$grid-padding : $gutter-width !default; - -// --------------------------------------------------------------------------- -// Advanced Settings - -// From Direction: -// Controls for right-to-left or bi-directional sites. -$from-direction : left !default; - -// Omega Float Direction: -// The direction that +omega elements are floated by deafult. -$omega-float : opposite-position($from-direction) !default; - -// Container Width: -// Override the total width of your grid, using any length (50em, 75%, etc.) -$container-width : false !default; - -// Container Style: -// 'magic' - Static (fixed or elastic) when there's enough space, -// fluid when there isn't. This is the SUSY MAGIC SAUCE(TM). -// 'static' - Forces the grid container to remain static at all times. -// 'fluid' - Forces the grid to remain fluid at all times. -// (this will overrule any static $container-width settings) -$container-style : magic !default; - -// Border-Box Sizing -// Adjust the grid math appropriately for box-sizing: border-box; -// Warning: This does not actually apply the new box model! -// In most cases you can ignore this setting, -// and simply apply the border-box-sizing mixin. -$border-box-sizing : false !default; - -// Pixel Values only: -// Make sure only pixel values are set for the container width. -$pixel-values-only : false !default; - -// --------------------------------------------------------------------------- -// IE Settings - -// When you are using a seperate IE stylesheet, -// you can use these settings to control the output of at-breakpoint. -// By default, at-breakpoint will output media-queries as well as -// any defined ie-fallback classes. -$breakpoint-media-output : true !default; -$breakpoint-ie-output : true !default; - -// Danger Zone! Only set as 'true' in IE-specific style sheets. -$breakpoint-raw-output : false !default; diff --git a/_sass/basically-basic/vendor/susy/output/_float.scss b/_sass/basically-basic/vendor/susy/output/_float.scss deleted file mode 100644 index 9c24051..0000000 --- a/_sass/basically-basic/vendor/susy/output/_float.scss +++ /dev/null @@ -1,9 +0,0 @@ -// Float API -// ========= - -@import "shared"; - -@import "float/container"; -@import "float/span"; -@import "float/end"; -@import "float/isolate"; diff --git a/_sass/basically-basic/vendor/susy/output/_shared.scss b/_sass/basically-basic/vendor/susy/output/_shared.scss deleted file mode 100644 index dd9df4e..0000000 --- a/_sass/basically-basic/vendor/susy/output/_shared.scss +++ /dev/null @@ -1,15 +0,0 @@ -// Shared API -// ========== - -@import "support"; - -@import "shared/inspect"; -@import "shared/output"; -@import "shared/direction"; -@import "shared/background"; -@import "shared/container"; -@import "shared/margins"; -@import "shared/padding"; - - - diff --git a/_sass/basically-basic/vendor/susy/output/_support.scss b/_sass/basically-basic/vendor/susy/output/_support.scss deleted file mode 100644 index 53dbc9c..0000000 --- a/_sass/basically-basic/vendor/susy/output/_support.scss +++ /dev/null @@ -1,9 +0,0 @@ -// Susy Browser Support -// ==================== - -@import "support/support"; -@import "support/prefix"; -@import "support/background"; -@import "support/box-sizing"; -@import "support/rem"; -@import "support/clearfix"; diff --git a/_sass/basically-basic/vendor/susy/output/float/_container.scss b/_sass/basically-basic/vendor/susy/output/float/_container.scss deleted file mode 100644 index 121eb11..0000000 --- a/_sass/basically-basic/vendor/susy/output/float/_container.scss +++ /dev/null @@ -1,16 +0,0 @@ -// Float Container API -// =================== - -// Float Container -// --------------- -// - [$width] : -// - [$justify] : left | center | right -// - [$math] : fluid | static -@mixin float-container( - $width, - $justify: auto auto, - $property: max-width -) { - @include susy-clearfix; - @include container-output($width, $justify, $property); -} diff --git a/_sass/basically-basic/vendor/susy/output/float/_end.scss b/_sass/basically-basic/vendor/susy/output/float/_end.scss deleted file mode 100644 index 3369997..0000000 --- a/_sass/basically-basic/vendor/susy/output/float/_end.scss +++ /dev/null @@ -1,40 +0,0 @@ -// Float Ends API -// ============== - -// Susy End Defaults -// ----------------- -// - PRIVATE -@include susy-defaults(( - last-flow: to, -)); - -// Float Last -// ---------- -// - [$flow] : ltr | rtl -@mixin float-last( - $flow: map-get($susy-defaults, flow), - $last-flow: map-get($susy-defaults, last-flow), - $margin: 0 -) { - $to: to($flow); - - $output: ( - float: if($last-flow == to, $to, null), - margin-#{$to}: $margin, - ); - - @include output($output); -} - -// Float First -// ----------- -// - [$flow] : ltr | rtl -@mixin float-first( - $flow: map-get($susy-defaults, flow) -) { - $output: ( - margin-#{from($flow)}: 0, - ); - - @include output($output); -} diff --git a/_sass/basically-basic/vendor/susy/output/float/_isolate.scss b/_sass/basically-basic/vendor/susy/output/float/_isolate.scss deleted file mode 100644 index 4dd3c23..0000000 --- a/_sass/basically-basic/vendor/susy/output/float/_isolate.scss +++ /dev/null @@ -1,22 +0,0 @@ -// Float Isolation API -// =================== - -// Isolate Output -// -------------- -// - $push : -// - [$flow] : ltr | rtl -@mixin isolate-output( - $push, - $flow: map-get($susy-defaults, flow) -) { - $to: to($flow); - $from: from($flow); - - $output: ( - float: $from, - margin-#{$from}: $push, - margin-#{$to}: -100%, - ); - - @include output($output); -} diff --git a/_sass/basically-basic/vendor/susy/output/float/_span.scss b/_sass/basically-basic/vendor/susy/output/float/_span.scss deleted file mode 100644 index 5b732cc..0000000 --- a/_sass/basically-basic/vendor/susy/output/float/_span.scss +++ /dev/null @@ -1,35 +0,0 @@ -// Float Span API -// ============== - -// Float Span Output -// ----------------- -// - $width : -// - [$float] : from | to -// - [$margin-before] : -// - [$margin-after] : -// - [$padding-before] : -// - [$padding-after] : -// - [$flow] : ltr | rtl -@mixin float-span-output( - $width, - $float : from, - $margin-before : null, - $margin-after : null, - $padding-before : null, - $padding-after : null, - $flow : map-get($susy-defaults, flow) -) { - $to : to($flow); - $from : from($flow); - - $output: ( - width: $width, - float: if($float == to, $to, null) or if($float == from, $from, null), - margin-#{$from}: $margin-before, - margin-#{$to}: $margin-after, - padding-#{$from}: $padding-before, - padding-#{$to}: $padding-after, - ); - - @include output($output); -} diff --git a/_sass/basically-basic/vendor/susy/output/shared/_background.scss b/_sass/basically-basic/vendor/susy/output/shared/_background.scss deleted file mode 100644 index c230f61..0000000 --- a/_sass/basically-basic/vendor/susy/output/shared/_background.scss +++ /dev/null @@ -1,26 +0,0 @@ -// Grid Background API -// =================== -// - Sub-pixel rounding can lead to several pixels variation between browsers. - -// Grid Background Output -// ---------------------- -// - $image: background-image -// - $size: background-size -// - $clip: background-clip -// - [$flow]: ltr | rtl -@mixin background-grid-output ( - $image, - $size: null, - $clip: null, - $flow: map-get($susy-defaults, flow) -) { - $output: ( - background-image: $image, - background-size: $size, - background-origin: $clip, - background-clip: $clip, - background-position: from($flow) top, - ); - - @include output($output); -} diff --git a/_sass/basically-basic/vendor/susy/output/shared/_container.scss b/_sass/basically-basic/vendor/susy/output/shared/_container.scss deleted file mode 100644 index 7c7d4f1..0000000 --- a/_sass/basically-basic/vendor/susy/output/shared/_container.scss +++ /dev/null @@ -1,21 +0,0 @@ -// Shared Container API -// ==================== - -// Container Output -// ---------------- -// - [$width] : -// - [$justify] : left | center | right -// - [$math] : fluid | static -@mixin container-output( - $width, - $justify: auto auto, - $property: max-width -) { - $output: ( - #{$property}: $width or 100%, - margin-left: nth($justify, 1), - margin-right: nth($justify, 2), - ); - - @include output($output); -} diff --git a/_sass/basically-basic/vendor/susy/output/shared/_direction.scss b/_sass/basically-basic/vendor/susy/output/shared/_direction.scss deleted file mode 100644 index abb9c36..0000000 --- a/_sass/basically-basic/vendor/susy/output/shared/_direction.scss +++ /dev/null @@ -1,42 +0,0 @@ -// Direction Helpers -// ================= - -// Susy Flow Defaults -// ------------------ -// - PRIVATE -@include susy-defaults(( - flow: ltr, -)); - -// Get Direction -// ------------- -// Return the 'from' or 'to' direction of a ltr or rtl flow. -// - [$flow] : ltr | rtl -// - [$key] : from | to -@function get-direction( - $flow: map-get($susy-defaults, flow), - $key: from -) { - $return: if($flow == rtl, (from: right, to: left), (from: left, to: right)); - @return map-get($return, $key); -} - -// To -// -- -// Return the 'to' direction of a flow -// - [$flow] : ltr | rtl -@function to( - $flow: map-get($susy-defaults, flow) -) { - @return get-direction($flow, to); -} - -// From -// ---- -// Return the 'from' direction of a flow -// - [$flow] : ltr | rtl -@function from( - $flow: map-get($susy-defaults, flow) -) { - @return get-direction($flow, from); -} diff --git a/_sass/basically-basic/vendor/susy/output/shared/_inspect.scss b/_sass/basically-basic/vendor/susy/output/shared/_inspect.scss deleted file mode 100644 index b0af9b6..0000000 --- a/_sass/basically-basic/vendor/susy/output/shared/_inspect.scss +++ /dev/null @@ -1,25 +0,0 @@ -// Debugging -// ========= - -// Susy Inspect -// ------------ -// Output arguments passed to a inspect. -// - $mixin : -// - $inspec : - -@mixin susy-inspect( - $mixin, - $inspect -) { - $show: false; - - @each $item in $inspect { - @if index($item, inspect) { - $show: true; - } - } - - @if $show or susy-get(debug inspect) { - -susy-#{$mixin}: inspect($inspect); - } -} diff --git a/_sass/basically-basic/vendor/susy/output/shared/_margins.scss b/_sass/basically-basic/vendor/susy/output/shared/_margins.scss deleted file mode 100644 index cd73e8c..0000000 --- a/_sass/basically-basic/vendor/susy/output/shared/_margins.scss +++ /dev/null @@ -1,23 +0,0 @@ -// Margins API -// =========== - -// Margin Output -// ------------- -// - $before : -// - $after : -// - [$flow] : ltr | rtl -@mixin margin-output( - $before, - $after, - $flow: map-get($susy-defaults, flow) -) { - $to: to($flow); - $from: from($flow); - - $output: ( - margin-#{$from}: $before, - margin-#{$to}: $after, - ); - - @include output($output); -} diff --git a/_sass/basically-basic/vendor/susy/output/shared/_output.scss b/_sass/basically-basic/vendor/susy/output/shared/_output.scss deleted file mode 100644 index 20fc2d6..0000000 --- a/_sass/basically-basic/vendor/susy/output/shared/_output.scss +++ /dev/null @@ -1,14 +0,0 @@ -// Output -// ====== - -// Output -// ------ -// Output CSS with proper browser support. -// - $styles : -@mixin output( - $styles -) { - @each $prop, $val in $styles { - @include susy-support($prop, $val); - } -} diff --git a/_sass/basically-basic/vendor/susy/output/shared/_padding.scss b/_sass/basically-basic/vendor/susy/output/shared/_padding.scss deleted file mode 100644 index 5069d0c..0000000 --- a/_sass/basically-basic/vendor/susy/output/shared/_padding.scss +++ /dev/null @@ -1,23 +0,0 @@ -// Padding API -// =========== - -// Padding Output -// -------------- -// - $before : -// - $after : -// - [$flow] : ltr | rtl -@mixin padding-output( - $before, - $after, - $flow: map-get($susy-defaults, flow) -) { - $to: to($flow); - $from: from($flow); - - $output: ( - padding-#{$from}: $before, - padding-#{$to}: $after, - ); - - @include output($output); -} diff --git a/_sass/basically-basic/vendor/susy/output/support/_background.scss b/_sass/basically-basic/vendor/susy/output/support/_background.scss deleted file mode 100644 index b141502..0000000 --- a/_sass/basically-basic/vendor/susy/output/support/_background.scss +++ /dev/null @@ -1,58 +0,0 @@ -// Background Properties -// ===================== - -// Susy Background Image -// --------------------- -// Check for an existing support mixin, or provide a simple fallback. -// - $image: -@mixin susy-background-image( - $image -) { - @if susy-support(background-image, (mixin: background-image), $warn: false) { - @include background-image($image...); - } @else { - background-image: $image; - } -} - -// Susy Background Size -// --------------------- -// Check for an existing support mixin, or provide a simple fallback. -// - $image: -@mixin susy-background-size( - $size -) { - @if susy-support(background-options, (mixin: background-size)) { - @include background-size($size); - } @else { - background-size: $size; - } -} - -// Susy Background Origin -// ---------------------- -// Check for an existing support mixin, or provide a simple fallback. -// - $image: -@mixin susy-background-origin( - $origin -) { - @if susy-support(background-options, (mixin: background-origin)) { - @include background-origin($origin); - } @else { - background-origin: $origin; - } -} - -// Susy Background Clip -// -------------------- -// Check for an existing support mixin, or provide a simple fallback. -// - $image: -@mixin susy-background-clip( - $clip -) { - @if susy-support(background-options, (mixin: background-clip)) { - @include background-clip($clip); - } @else { - background-clip: $clip; - } -} diff --git a/_sass/basically-basic/vendor/susy/output/support/_box-sizing.scss b/_sass/basically-basic/vendor/susy/output/support/_box-sizing.scss deleted file mode 100644 index bf50bbc..0000000 --- a/_sass/basically-basic/vendor/susy/output/support/_box-sizing.scss +++ /dev/null @@ -1,19 +0,0 @@ -// Box Sizing -// ========== - -// Box Sizing -// ---------- -// Check for an existing support mixin, or provide a simple fallback. -// - $model: -@mixin susy-box-sizing( - $model: content-box -) { - @if $model { - @if susy-support(box-sizing, (mixin: box-sizing), $warn: false) { - @include box-sizing($model); - } @else { - $prefix: (moz, webkit, official); - @include susy-prefix(box-sizing, $model, $prefix); - } - } -} diff --git a/_sass/basically-basic/vendor/susy/output/support/_clearfix.scss b/_sass/basically-basic/vendor/susy/output/support/_clearfix.scss deleted file mode 100644 index 48c6e7b..0000000 --- a/_sass/basically-basic/vendor/susy/output/support/_clearfix.scss +++ /dev/null @@ -1,18 +0,0 @@ -// Susy Fallback Clearfix -// ====================== - - -// Clearfix -// -------- -// Check for an existing support mixin, or provide a simple fallback. -@mixin susy-clearfix { - @if susy-support(clearfix, (mixin: clearfix)) { - @include clearfix; - } @else { - &:after { - content: " "; - display: block; - clear: both; - } - } -} diff --git a/_sass/basically-basic/vendor/susy/output/support/_prefix.scss b/_sass/basically-basic/vendor/susy/output/support/_prefix.scss deleted file mode 100644 index f4e26ec..0000000 --- a/_sass/basically-basic/vendor/susy/output/support/_prefix.scss +++ /dev/null @@ -1,19 +0,0 @@ -// Susy Prefix -// =========== - -// Prefix -// ------ -// Output simple prefixed properties. -// - $prop : -// - $val : -// - [$prefix] : -@mixin susy-prefix( - $prop, - $val, - $prefix: official -) { - @each $fix in $prefix { - $fix: if($fix == official or not($fix), $prop, '-#{$fix}-#{$prop}'); - @include susy-rem($fix, $val); - } -} diff --git a/_sass/basically-basic/vendor/susy/output/support/_rem.scss b/_sass/basically-basic/vendor/susy/output/support/_rem.scss deleted file mode 100644 index 0a807f7..0000000 --- a/_sass/basically-basic/vendor/susy/output/support/_rem.scss +++ /dev/null @@ -1,22 +0,0 @@ -// rem Support -// =========== - -// rem -// --- -// Check for an existing support mixin, or output directly. -// - $prop : -// - $val : -@mixin susy-rem( - $prop, - $val -) { - $_reqs: ( - variable: rhythm-unit rem-with-px-fallback, - mixin: rem, - ); - @if susy-support(rem, $_reqs, $warn: false) and $rhythm-unit == rem { - @include rem($prop, $val); - } @else { - #{$prop}: $val; - } -} diff --git a/_sass/basically-basic/vendor/susy/output/support/_support.scss b/_sass/basically-basic/vendor/susy/output/support/_support.scss deleted file mode 100644 index 9699113..0000000 --- a/_sass/basically-basic/vendor/susy/output/support/_support.scss +++ /dev/null @@ -1,85 +0,0 @@ -// Browser Support -// =============== - -// Susy Support Defaults -// --------------------- -@include susy-defaults(( - use-custom: ( - clearfix: false, - background-image: true, - background-options: false, - breakpoint: true, - box-sizing: true, - rem: true, - ), -)); - - -// Susy Support [mixin] -// -------------------- -// Send property-value pairs to the proper support modules. -// - $prop : -// - $val : -@mixin susy-support( - $prop, - $val -) { - // Background Support - @if $prop == background-image { - @include susy-background-image($val); - } @else if $prop == background-size { - @include susy-background-size($val); - } @else if $prop == background-origin { - @include susy-background-origin($val); - } @else if $prop == background-clip { - @include susy-background-clip($val); - } - - // Box-Sizing Support - @else if $prop == box-sizing { - @include susy-box-sizing($val); - } - - // Rem Support - @else { - @include susy-rem($prop, $val); - } -} - - -// Susy Support [function] -// ----------------------- -// Check for support of a feature. -// - $feature : -// - e.g "rem" or "box-sizing" -// - $requirements : -// - e.g (variable: rem-with-px-fallback, mixin: rem) -// - $warn : -@function susy-support( - $feature, - $requirements: (), - $warn: true -) { - $_support: susy-get(use-custom $feature); - - @if $_support { - $_fail: false; - - @each $_type, $_req in $requirements { - @each $_i in $_req { - $_pass: call(unquote("#{$_type}-exists"), $_i); - - @if not($_pass) { - $_fail: true; - @if $warn { - @warn "You requested custom support of #{$feature}, but the #{$_i} #{$_type} is not available."; - } - } - } - } - - $_support: if($_fail, false, $_support); - } - - @return $_support; -} diff --git a/_sass/basically-basic/vendor/susy/plugins/_svg-grid.scss b/_sass/basically-basic/vendor/susy/plugins/_svg-grid.scss new file mode 100644 index 0000000..99db8d1 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/plugins/_svg-grid.scss @@ -0,0 +1,5 @@ +// SVG Grid Background +// =================== + +@import 'svg-grid/prefix'; +@import 'svg-grid/svg-unprefix'; diff --git a/_sass/basically-basic/vendor/susy/plugins/svg-grid/_prefix.scss b/_sass/basically-basic/vendor/susy/plugins/svg-grid/_prefix.scss new file mode 100644 index 0000000..21fb45f --- /dev/null +++ b/_sass/basically-basic/vendor/susy/plugins/svg-grid/_prefix.scss @@ -0,0 +1,7 @@ +// Prefixed SVG Plugin +// =================== + +@import 'svg-settings'; +@import 'svg-utilities'; +@import 'svg-grid-math'; +@import 'svg-api'; diff --git a/_sass/basically-basic/vendor/susy/plugins/svg-grid/_svg-api.scss b/_sass/basically-basic/vendor/susy/plugins/svg-grid/_svg-api.scss new file mode 100644 index 0000000..7d880e3 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/plugins/svg-grid/_svg-api.scss @@ -0,0 +1,114 @@ +/// Plugin: SVG Grid Image +/// ====================== +/// @group plugin_svg-grid +/// @see susy-svg-grid + + + +/// ## Overview +/// If you want to generate svg-backgrounds +/// for help visualizing and debugging your grids, +/// import the SVG Grid Plugin. +/// +/// The plugin adds `svg-grid-colors` setting +/// to your global defaults, +/// which you can override in `$susy`. +/// It also provides you with a new function, +/// `susy-svg-grid()`, +/// which will return inline svg for use in +/// backgrounds or generated content. +/// +/// This function come with an unprefixed alias by default, +/// using the `svg-grid` import. +/// If you only only want prefixed versions of the API, +/// import the `svg-grid/prefix` partial instead. +/// +/// @group plugin_svg-grid +/// +/// @example scss - importing the plugin +/// // The full path to import Susy will depend on your setup… +/// +/// // unprefixed +/// @import 'plugins/svg-grid'; +/// +/// // prefixed +/// @import 'plugins/svg-grid/prefix'; +/// +/// @example scss - generating background grids +/// .grid { +/// background: susy-svg-grid() no-repeat scroll; +/// } + + + +// SVG Grid +// -------- +/// Return inline svg-data in to display the grid. +/// +/// @group plugin_svg-grid +/// +/// @param {Map | List} $grid [$susy] - +/// Map or shorthand defining the current grid +/// @param {Color | List | null} $colors [null] - +/// Column color, or list of colors for column-gradient, +/// used to override the global `svg-grid-colors` setting +/// @param {Length | null} $offset [null] - +/// Manually override the default grid-image offset, +/// to account for grid edges +/// +/// @return {String} - +/// CSS inline-data SVG string, in `url()` format, +/// for use in image or content properties +/// @example scss +/// .grid { +/// background: susy-svg-grid() no-repeat scroll; +/// } +@function susy-svg-grid( + $grid: $susy, + $colors: null, + $offset: null +) { + // Grid parsing & normalizing + $grid: susy-compile($grid, $context-only: true); + + // Color and gradient handling + $gradient: ''; + + @if (not $colors) { + $colors: susy-get('svg-grid-colors'); + } + + @if length($colors) > 1 { + $gradient: _susy-svg-gradient($colors); + $colors: 'url(%23susy-svg-gradient)'; + } @else { + $colors: _susy-svg-color($colors); + } + + // Get a default image-width + $span: ( + 'span': map-get($grid, 'columns'), + 'spread': map-get($grid, 'container-spread'), + ); + $span: map-merge($grid, $span); + $image-width: su-call('su-span', $span); + $image-width: if((type-of($image-width) == 'number'), $image-width, 100%); + + // SVG construction + $columns: map-get($grid, 'columns'); + $offset: $offset or _susy-svg-offset($grid); + + $attrs: 'fill="#{$colors}" width="#{$image-width}"'; + $svg: 'data:image/svg+xml,'; + $svg: $svg + '%3Csvg xmlns="http://www.w3.org/2000/svg" #{$attrs} %3E'; + $svg: $svg + $gradient; + + @for $column from 1 through length($columns) { + $width: susy-span(1 narrow at $column, $grid); + $x: _susy-svg-column-position($column, $grid); + + $svg: $svg + _susy-svg-rect($x, $width, $offset); + } + + @return url('#{$svg}%3C/svg%3E'); +} diff --git a/_sass/basically-basic/vendor/susy/plugins/svg-grid/_svg-grid-math.scss b/_sass/basically-basic/vendor/susy/plugins/svg-grid/_svg-grid-math.scss new file mode 100644 index 0000000..044801a --- /dev/null +++ b/_sass/basically-basic/vendor/susy/plugins/svg-grid/_svg-grid-math.scss @@ -0,0 +1,67 @@ +// SVG Grid Math +// ============= + + + +// SVG Column Position +// ------------------- +/// Determine the proper horizontal position +/// for a column rectangle +/// +/// @access private +/// +/// @param {Integer} $column - +/// 1-indexed column location on the grid +/// @param {Map} $grid - +/// Normalized settings map representing the current grid +/// +/// @return {Length} - +/// Horizontal position of svg column rectangle, +/// as distance from the grid edge +@function _susy-svg-column-position( + $column, + $grid +) { + $x: $column - 1; + + @if ($x > 0) { + $x: susy-span(first $x wide, $grid); + } + + @return $x; +} + + + +// SVG Offset +// ---------- +/// Determine if a grid image needs to be offset, +/// to account for edge gutters. +/// +/// @access private +/// +/// @param {Map} $grid - +/// Normalized settings map representing the current grid +/// +/// @return {Length | null} - +/// Expected distance from container edge to first column, +/// based on spread values and gutter-widths +@function _susy-svg-offset( + $grid +) { + $columns: su-valid-columns(map-get($grid, 'columns')); + $gutters: su-valid-gutters(map-get($grid, 'gutters')); + $container: su-valid-spread(map-get($grid, 'container-spread')) + 1; + + @if ($container == 0) { + @return null; + } + + $gutter: su-call('su-gutter', $grid); + + @if (type-of($gutter) == 'string') { + @return 'calc(#{$container} * #{$gutter} / 2)'; + } + + @return $container * $gutter / 2; +} diff --git a/_sass/basically-basic/vendor/susy/plugins/svg-grid/_svg-settings.scss b/_sass/basically-basic/vendor/susy/plugins/svg-grid/_svg-settings.scss new file mode 100644 index 0000000..3fcc91f --- /dev/null +++ b/_sass/basically-basic/vendor/susy/plugins/svg-grid/_svg-settings.scss @@ -0,0 +1,14 @@ +// SVG Settings +// ============ + + +// Susy SVG Defaults +// ================= +/// This plugin adds the `svg-grid-colors` property +/// and default value to `$_susy-defaults` — +/// you can override that value in `$susy` +/// or any other grid settings map. +/// @group plugin_svg-grid +$_susy-defaults: map-merge(( + 'svg-grid-colors': hsla(120, 50%, 50%, 0.5) hsla(120, 50%, 75%, 0.5), + ), $_susy-defaults); diff --git a/_sass/basically-basic/vendor/susy/plugins/svg-grid/_svg-unprefix.scss b/_sass/basically-basic/vendor/susy/plugins/svg-grid/_svg-unprefix.scss new file mode 100644 index 0000000..187157c --- /dev/null +++ b/_sass/basically-basic/vendor/susy/plugins/svg-grid/_svg-unprefix.scss @@ -0,0 +1,18 @@ +// Unprefix Susy SVG Grid +// ====================== + + + +// SVG Grid +// -------- +/// Un-prefixed alias for `susy-svg-grid` +/// +/// @group plugin_svg-grid +/// @alias susy-svg-grid +@function svg-grid( + $grid: $susy, + $colors: susy-get('svg-grid-colors'), + $offset: null +) { + @return susy-svg-grid($grid, $colors, $offset); +} diff --git a/_sass/basically-basic/vendor/susy/plugins/svg-grid/_svg-utilities.scss b/_sass/basically-basic/vendor/susy/plugins/svg-grid/_svg-utilities.scss new file mode 100644 index 0000000..e4bf18f --- /dev/null +++ b/_sass/basically-basic/vendor/susy/plugins/svg-grid/_svg-utilities.scss @@ -0,0 +1,133 @@ +// SVG Utilities +// ============= + + + +// SVG Validate Units +// ------------------ +/// Make sure a length is supported in svg +/// +/// @access private +/// +/// @param {Length} $length - +/// The length to validate +/// @param {String} $name [null] - +/// Optional name of length origin, +/// for error reporting +/// +/// @return {Length} - +/// An svg-validated length, or comparable valid length +@function _susy-svg-validate-units( + $length, + $name: null +) { + $_svg-units: ('em', 'ex', 'px', 'pt', 'pc', 'cm', 'mm', 'in', '%'); + $string: type-of($length) == 'string'; + + @if ($length == 0) or ($string) or index($_svg-units, unit($length)) { + @return $length; + } + + @return _susy-error( + '`#{unit($length)}` #{$name} units are not supported in SVG', + '_susy-svg-validate-units'); +} + + + +// SVG Rect +// -------- +/// Build a single svg rectangle +/// +/// @access private +/// +/// @param {Length} $x - +/// Horizontal position for the rectangle +/// @param {Length} $width - +/// Width of the rectangle +/// @param {Length} $offset [null] - +/// Offset the rectangle, to account for edge gutters +/// +/// @return {String} - +/// Escaped string representing one svg rectangle +@function _susy-svg-rect( + $x, + $width, + $offset: null +) { + $x: _susy-svg-validate-units($x); + $width: _susy-svg-validate-units($width); + $offset: if($offset == 0, null, $offset); + + @if (type-of($offset) == 'number') and (type-of($x) == 'number') { + @if comparable($x, $offset) { + $x: $x + $offset; + } @else { + $x: 'calc(#{$x} + #{$offset})'; + } + } @else if $offset and ($x != 0) { + $x: 'calc(#{$x} + #{$offset})'; + } @else if $offset { + $x: $offset; + } + + @return '%3Crect x="#{$x}" width="#{$width}" height="100%"/%3E'; +} + + + +// SVG Color +// --------- +/// Stringify colors, and escape hex symbol +/// +/// @access private +/// +/// @param {Color} $color - +/// Color to stringify and escape +/// +/// @return {String} - +/// Escaped string value of color +@function _susy-svg-color( + $color +) { + $color: inspect($color); // convert to string + + @if (str-index($color, '#') == 1) { + $color: '%23' + str-slice($color, 2); + } + + @return $color; +} + + + +// SVG Gradient +// ------------ +/// Create a multi-color svg gradient +/// +/// @access private +/// +/// @param {List} $colors - +/// List of colors to be equally spaced from `0%` to `100%` +/// in each column rectangle +/// +/// @return {String} - +/// Escaped string representing one svg gradient +/// (`id="susy-svg-gradient"`) +@function _susy-svg-gradient( + $colors +) { + $gradient: '%3Cdefs%3E%3ClinearGradient spreadMethod="pad"'; + $gradient: '#{$gradient} id="susy-svg-gradient"'; + $gradient: '#{$gradient} x1="0%" y1="0%" x2="100%" y2="0%"%3E'; + + @for $i from 1 through length($colors) { + $color: _susy-svg-color(nth($colors, $i)); + $offset: percentage(($i - 1) / (length($colors) - 1)); + $stop: '%3Cstop offset="#{$offset}" style="stop-color:#{$color};" /%3E'; + + $gradient: $gradient + $stop; + } + + @return $gradient + '%3C/linearGradient%3E%3C/defs%3E'; +} diff --git a/_sass/basically-basic/vendor/susy/su/_grid.scss b/_sass/basically-basic/vendor/susy/su/_grid.scss deleted file mode 100644 index 7fe2a02..0000000 --- a/_sass/basically-basic/vendor/susy/su/_grid.scss +++ /dev/null @@ -1,103 +0,0 @@ -// Column math -// =========== - - -// Is Symmetrical -// -------------- -// Returns true if a grid is symmetrical. -// - [$columns] : | -@function is-symmetrical( - $columns: susy-get(columns) -) { - $columns: valid-columns($columns); - @return if(type-of($columns) == number, $columns, null); -} - - -// Susy Count -// ---------- -// Find the number of columns in a given layout -// - [$columns] : | -@function susy-count( - $columns: susy-get(columns) -) { - $columns: valid-columns($columns); - @return is-symmetrical($columns) or length($columns); -} - - -// Susy Sum -// -------- -// Find the total sum of column-units in a layout -// - [$columns] : | -// - [$gutters] : -// - [$spread] : false/narrow | wide | wider -@function susy-sum( - $columns : susy-get(columns), - $gutters : susy-get(gutters), - $spread : false -) { - $columns: valid-columns($columns); - $gutters: valid-gutters($gutters); - - $spread: if($spread == wide, 0, if($spread == wider, 1, -1)); - $gutter-sum: (susy-count($columns) + $spread) * $gutters; - $column-sum: is-symmetrical($columns); - - @if not($column-sum) { - @each $column in $columns { - $column-sum: ($column-sum or 0) + $column; - } - } - - @return $column-sum + $gutter-sum; -} - - -// Susy Slice -// ---------- -// Return a subset of columns at a given location. -// - $span : -// - $location : -// - [$columns] : | -@function susy-slice( - $span, - $location, - $columns: susy-get(columns) -) { - $columns: valid-columns($columns); - $sub-columns: $span; - - @if not(is-symmetrical($columns)) { - $location: $location or 1; - $sub-columns: (); - @for $i from $location to ($location + $span) { - $sub-columns: append($sub-columns, nth($columns, $i)); - } - } - - @return $sub-columns; -} - - -// Susy -// ---- -// Find the sum of a column-span. -// - $span : -// - $location : -// - [$columns] : | -// - [$gutters] : -// - [$spread] : false/narrow | wide | wider -@function susy( - $span, - $location : false, - $columns : susy-get(columns), - $gutters : susy-get(gutters), - $spread : false -) { - $columns: valid-columns($columns); - $gutters: valid-gutters($gutters); - $span: susy-slice($span, $location, $columns); - - @return susy-sum($span, $gutters, $spread); -} diff --git a/_sass/basically-basic/vendor/susy/su/_settings.scss b/_sass/basically-basic/vendor/susy/su/_settings.scss deleted file mode 100644 index 8b439aa..0000000 --- a/_sass/basically-basic/vendor/susy/su/_settings.scss +++ /dev/null @@ -1,73 +0,0 @@ -// Settings -// ======== - -// Version -// ------- -$su-version: 1.1; - - -// Default Settings -// ---------------- -// PRIVATE: The basic settings -$susy-defaults: ( - columns: 4, - gutters: .25, -); - - -// User Settings -// ------------- -// - Define the $susy variable with a map of your own settings. -// - Set EITHER $column-width OR $container -// - Use $column-width for static layouts -$susy: () !default; - - -// Susy Defaults -// ------------- -// PRIVATE: Add defaults to Susy -@mixin susy-defaults( - $defaults -) { - $susy-defaults: map-merge($susy-defaults, $defaults) !global; -} - - -// Susy Set -// -------- -// Change one setting -// - $key : setting name -// - $value : setting value -@mixin susy-set( - $key-value... -) { - $susy: _susy-deep-set($susy, $key-value...) !global; -} - - -// Susy Get -// -------- -// Return one setting from a grid -// - $key : -// - $layout : -@function susy-get( - $key, - $layout: map-merge($susy-defaults, $susy) -) { - $layout: parse-grid($layout); - $_options: $layout $susy $susy-defaults; - $_break: false; - $_return: null; - - @each $opt in $_options { - @if type-of($opt) == map and not($_break) { - $_keyset: _susy-deep-has-key($opt, $key...); - @if $_keyset { - $_return: _susy-deep-get($opt, $key...); - $_break: true; - } - } - } - - @return $_return; -} diff --git a/_sass/basically-basic/vendor/susy/su/_utilities.scss b/_sass/basically-basic/vendor/susy/su/_utilities.scss deleted file mode 100644 index b737f21..0000000 --- a/_sass/basically-basic/vendor/susy/su/_utilities.scss +++ /dev/null @@ -1,111 +0,0 @@ -// Map Functions -// ============= - - -// Truncate List -// ------------- -// - Return a list, truncated to a given length -@function _susy-truncate-list( - $list, - $length -) { - $_return: (); - - @for $i from 1 through length($list) { - $_return: if($i <= $length, append($_return, nth($list, $i)), $_return); - } - - @return $_return; -} - - -// Deep Get -// -------- -// - Return a value deep in nested maps -@function _susy-deep-get( - $map, - $keys... -) { - $_return: $map; - - @each $key in $keys { - @if type-of($_return) == map { - $_return: map-get($_return, $key); - } - } - - @return $_return; -} - - -// Deep Set -// -------- -// - Set a value deep in nested maps -@function _susy-deep-set( - $map, - $keys-value... -) { - $_value: nth($keys-value, -1); - $_keys: _susy-truncate-list($keys-value, length($keys-value) - 1); - $_length: length($_keys); - $_return: (); - - @for $i from 1 through $_length { - $_n: 0 - $i; - $_level: _susy-truncate-list($_keys, $_length + $_n); - $_level: _susy-deep-get($map, $_level...); - $_merge: nth($_keys, $_n); - $_merge: ($_merge: $_value); - $_return: if($_level, map-merge($_level, $_merge), $_merge); - $_value: $_return; - } - - @return $_return; -} - - -// Deep Merge -// ---------- -// Return 2 objects of any depth, merged -@function _susy-deep-merge( - $map1, - $map2 -) { - - @if type-of($map1) != map or type-of($map2) != map { - $map1: $map2; - } @else { - @each $key, $value in $map2 { - $_new: ($key: _susy_deep-merge(map-get($map1, $key), $value)); - $map1: map-merge($map1, $_new); - } - } - - @return $map1; -} - - -// Deep Has-Key -// ------------ -// - Return true if a deep key exists -@function _susy-deep-has-key( - $map, - $keys... -) { - $_return: null; - $_stop: false; - - @each $key in $keys { - @if not($_stop) { - $_return: map-has-key($map, $key); - } - - @if $_return { - $map: map-get($map, $key); - } @else { - $_stop: true; - } - } - - @return $_return; -} diff --git a/_sass/basically-basic/vendor/susy/su/_validation.scss b/_sass/basically-basic/vendor/susy/su/_validation.scss deleted file mode 100644 index 4c6ab8d..0000000 --- a/_sass/basically-basic/vendor/susy/su/_validation.scss +++ /dev/null @@ -1,57 +0,0 @@ -// Math Validation -// =============== - - -// Valid Columns -// ------------- -// Check that a column setting is valid. -@function valid-columns( - $columns, - $silent: false -) { - $type: type-of($columns); - $return: null; - - @if $type == number and unitless($columns) { - $return: $columns; - } @else if $type == list { - $fail: null; - @each $col in $columns { - @if type-of($col) == number { - $fail: $fail or if(unitless($col), null, true); - } @else { - $fail: true; - } - } - $return: if($fail, $return, $columns); - } - - @if $return != $columns and not($silent) { - $return: null; - $warn: '$columns must be a unitless number or list of unitless numbers.'; - @warn $warn + ' Current value [#{$type}]: #{$columns}'; - } - - @return $return; -} - - -// Valid Gutters -// ------------- -// Check that a gutter setting is valid. -@function valid-gutters( - $gutters, - $silent: false -) { - $type: type-of($gutters); - $return: null; - - @if $type == number and unitless($gutters) { - $return: $gutters; - } @else if not($silent) { - $warn: '$gutters must be a unitless number.'; - @warn $warn + ' Current value [#{$type}]: #{$gutters}'; - } - - @return $return; -} diff --git a/_sass/basically-basic/vendor/susy/susy/_api.scss b/_sass/basically-basic/vendor/susy/susy/_api.scss new file mode 100644 index 0000000..de8c9bd --- /dev/null +++ b/_sass/basically-basic/vendor/susy/susy/_api.scss @@ -0,0 +1,318 @@ +/// Susy3 API Functions +/// =================== +/// These three functions form the core of Susy's +/// layout-building grid API. +/// +/// - Use `span()` and `gutter()` to return any grid-width, +/// and apply the results wherever you need them: +/// CSS `width`, `margin`, `padding`, `flex-basis`, `transform`, etc. +/// - For asymmetrical-fluid grids, +/// `slice()` can help manage your nesting context. +/// +/// All three functions come with an unprefixed alias by default, +/// using the `susy` import. +/// Import the `susy-prefix` partial instead, +/// if you only only want prefixed versions of the API. +/// +/// This is a thin syntax-sugar shell around +/// the "Su" core-math functions: `su-span`, `su-gutter`, and `su-slice`. +/// If you prefer the more constrained syntax of the math engine, +/// you are welcome to use those functions instead. +/// +/// @group b-api +/// @see susy-span +/// @see susy-gutter +/// @see susy-slice +/// @see su-span +/// @see su-gutter +/// @see su-slice + + + +/// ## Shorthand +/// +/// All functions draw on the same shorthand syntax in two parts, +/// seperated by the word `of`. +/// +/// ### Span Syntax: `` [`` ``] +/// The first part describes the +/// **span** width, location, and spread in any order. +/// Only the width is required: +/// +/// - `span(2)` will return the width of 2 columns. +/// - `span(3 wide)` will return 3-columns, with an additional gutter. +/// - location is only needed with asymmetrical grids, +/// where `span(3 at 2)` will return the width of +/// specific columns on the grid. +/// Since these are functions, they will not handle placement for you. +/// +/// ### Context Syntax: `[of ]` +/// The second half of Susy's shorthand +/// describes the grid-**context** – +/// available columns, container-spread, and optional gutter override – +/// in any order. +/// All of these settings have globally-defined defaults: +/// +/// - `span(2 of 6)` will set the context to +/// a slice of 6 columns from the global grid. +/// More details below. +/// - `span(2 of 12 wide)` changes the container-spread +/// as well as the column-context. +/// - `span(2 of 12 set-gutters 0.5em)` +/// will override the global gutters setting +/// for this one calculation. +/// +/// A single unitless number for `columns` +/// will be treated as a slice of the parent grid. +/// On a grid with `columns: susy-repeat(12, 120px)`, +/// the shorthand `of 4` will use the parent `120px` column-width. +/// You can also be more explicit, +/// and say `of susy-repeat(4, 100px)`. +/// If you are using asymmetrical grids, +/// like `columns: (1 1 2 3 5 8)`, +/// Susy can't slice it for you without knowing which columns you want. +/// The `slice` function accepts exactly the same syntax as `span`, +/// but returns a list of columns rather than a width. +/// Use it in your context like `of slice(first 3)`. +/// +/// @group b-api + + + +// Susy Span +// --------- +/// This is the primary function in Susy — +/// used to return the width of a span across one or more columns, +/// and any relevant gutters along the way. +/// With the default settings, +/// `span(3)` will return the width of 3 columns, +/// and the 2 intermediate gutters. +/// This can be used to set the `width` property of grid elements, +/// or `margin` and `padding` +/// to push, pull, and pad your elements. +/// +/// - This is a thin syntax-sugar shell around +/// the core-math `su-span()` function. +/// - The un-prefixed alias `span()` is available by default. +/// +/// @group b-api +/// @see su-span +/// @see $susy +/// +/// @param {list} $span - +/// Shorthand expression to define the width of the span, +/// optionally containing: +/// - a count, length, or column-list span. +/// - `at $n`, `first`, or `last` location on asymmetrical grids, +/// where `at 1 == first`, +/// and `last` will calculate the proper location +/// based on columns and span. +/// - `narrow`, `wide`, or `wider` for optionally spreading +/// across adjacent gutters. +/// - `of $n ` for available grid columns +/// and spread of the container. +/// Span counts like `of 6` are valid +/// in the context of symmetrical grids, +/// where Susy can safely infer a slice of the parent columns. +/// - and `set-gutters $n` to override global gutter settings. +/// +/// @param {map} $config [()] - +/// Optional map of Susy grid configuration settings. +/// See `$susy` documentation for details. +/// +/// @return {length} - +/// Calculated length value, using the units given, +/// or converting to `%` for fraction-based grids, +/// or a full `calc` function when units/fractions +/// are not comparable outside the browser. +/// +/// @example scss - span half the grid +/// .foo { +/// // the result is a bit under 50% to account for gutters +/// width: susy-span(6 of 12); +/// } +/// +/// @example scss - span a specific segment of asymmetrical grid +/// .foo { +/// width: susy-span(3 at 3 of (1 2 3 5 8)); +/// } +@function susy-span( + $span, + $config: () +) { + $output: susy-compile($span, $config); + + @if map-get($output, 'span') { + @return su-call('su-span', $output); + } + + $actual: '[#{type-of($span)}] `#{inspect($span)}`'; + @return _susy-error( + 'Unable to determine span value from #{$actual}.', + 'susy-span'); +} + + + +// Susy Gutter +// ----------- +/// The gutter function returns +/// the width of a single gutter on your grid, +/// to be applied where you see fit – +/// on `margins`, `padding`, `transform`, or element `width`. +/// +/// - This is a thin syntax-sugar shell around +/// the core-math `su-gutter()` function. +/// - The un-prefixed alias `gutter()` is available by default. +/// +/// @group b-api +/// @see su-gutter +/// @see $susy +/// +/// @param {list | number} $context [null] - +/// Optional context for nested gutters, +/// including shorthand for +/// `columns`, `gutters`, and `container-spread` +/// (additional shorthand will be ignored) +/// +/// @param {map} $config [()] - +/// Optional map of Susy grid configuration settings. +/// See `$susy` documentation for details. +/// +/// @return {length} - +/// Width of a gutter as `%` of current context, +/// or in the units defined by `column-width` when available +/// +/// @example scss - add gutters before or after an element +/// .floats { +/// float: left; +/// width: span(3 of 6); +/// margin-left: gutter(of 6); +/// } +/// +/// @example scss - add gutters to padding +/// .flexbox { +/// flex: 1 1 span(3 wide of 6 wide); +/// padding: gutter(of 6) / 2; +/// } +/// +@function susy-gutter( + $context: susy-get('columns'), + $config: () +) { + $context: susy-compile($context, $config, 'context-only'); + + @return su-call('su-gutter', $context); +} + + + +// Susy Slice +// ---------- +/// Working with asymmetrical grids (un-equal column widths) +/// can be challenging –  +/// expecially when they involve fluid/fractional elements. +/// Describing a context `of (15em 6em 6em 6em 15em)` is a lot +/// to put inside the span or gutter function shorthand. +/// This slice function returns a sub-slice of asymmetrical columns to use +/// for a nested context. +/// `slice(3 at 2)` will give you a subset of the global grid, +/// spanning 3 columns, starting with the second. +/// +/// - This is a thin syntax-sugar shell around +/// the core-math `su-slice()` function. +/// - The un-prefixed alias `slice()` is available by default. +/// +/// @group b-api +/// @see su-slice +/// @see $susy +/// +/// @param {list} $span - +/// Shorthand expression to define the subset span, optionally containing: +/// - `at $n`, `first`, or `last` location on asymmetrical grids; +/// - `of $n ` for available grid columns +/// and spread of the container +/// - Span-counts like `of 6` are only valid +/// in the context of symmetrical grids +/// - Valid spreads include `narrow`, `wide`, or `wider` +/// +/// @param {map} $config [()] - +/// Optional map of Susy grid configuration settings. +/// See `$susy` documentation for details. +/// +/// @return {list} - +/// Subset list of columns for use for a nested context +/// +/// @example scss - Return a nested segment of asymmetrical grid +/// $context: susy-slice(3 at 3 of (1 2 3 5 8)); +/// /* $context: #{$context}; */ +@function susy-slice( + $span, + $config: () +) { + $span: susy-compile($span, $config); + + @return su-call('su-slice', $span); +} + + + +/// ## Building Grids +/// The web has come a long way +/// since the days of double-margin-hacks +/// and inconsistent subpixel rounding. +/// In addition to floats and tables, +/// we can now use much more powerful tools, +/// like flexbox and CSS grid, +/// to build more interesting and responsive layouts. +/// +/// With Susy3, we hope you'll start moving in that direction. +/// You can still build classic 12-column Grid Systems, +/// and we'll help you get there, +/// but Susy3 is primarily designed for a grid-math-on-demand +/// approach to layout: +/// applying our functions only where you really need grid math. +/// Read the [intro article by OddBird][welcome] for more details. +/// +/// [welcome]: http://oddbird.net/2017/06/28/susy3/ +/// +/// @group b-api +/// @link http://oddbird.net/2017/06/28/susy3/ Article: Welcome to Susy3 +/// +/// @example scss - floats +/// .float { +/// width: span(3); +/// margin-right: gutter(); +/// } +/// +/// @example scss - flexbox +/// .flexbox { +/// flex: 1 1 span(3); +/// // half a gutter on either side… +/// padding: 0 gutter() / 2; +/// } +/// +/// @example scss - pushing and pulling +/// .push-3 { +/// margin-left: span(3 wide); +/// } +/// +/// .pull-3 { +/// margin-left: 0 - span(3 wide); +/// } +/// +/// @example scss - building an attribute system +/// // markup example:
+/// [data-span] { +/// float: left; +/// +/// &:not([data-span*='last']) { +/// margin-right: gutter(); +/// } +/// } +/// +/// @for $span from 1 through length(susy-get('columns')) { +/// [data-span*='#{$span}'] { +/// width: span($span); +/// } +/// } diff --git a/_sass/basically-basic/vendor/susy/susy/_normalize.scss b/_sass/basically-basic/vendor/susy/susy/_normalize.scss new file mode 100644 index 0000000..a988504 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/susy/_normalize.scss @@ -0,0 +1,261 @@ +/// Syntax Normalization +/// ==================== +/// Susy is divided into two layers: +/// "Su" provides the core math functions with a stripped-down syntax, +/// while "Susy" adds global settings, shorthand syntax, +/// and other helpers. +/// Each setting (e.g. span, location, columns, spread, etc.) +/// has a single canonical syntax in Su. +/// +/// This normalization module helps translate between those layers, +/// transforming parsed Susy input into +/// values that Su will understand. +/// +/// @group x-normal +/// +/// @see susy-normalize +/// @see susy-normalize-span +/// @see susy-normalize-columns +/// @see susy-normalize-spread +/// @see susy-normalize-location + + + +// Susy Normalize +// -------------- +/// Normalize the values in a configuration map. +/// In addition to the global `$susy` properties, +/// this map can include local span-related imformation, +/// like `span` and `location`. +/// +/// Normalization does not check that values are valid, +/// which will happen in the Su math layer. +/// These functions merely look for known Susy syntax – +/// returning a map with those shorthand values +/// converted into low-level data for Su. +/// For example `span: all` and `location: first` +/// will be converted into specific numbers. +/// +/// @group x-normal +/// @see $susy +/// @see susy-parse +/// +/// @param {map} $config - +/// Map of Susy configuration settings to normalize. +/// See `$susy` and `susy-parse()` documentation for details. +/// @param {map | null} $context [null] - +/// Map of Susy configuration settings to use as global reference, +/// or `null` to use global settings. +/// +/// @return {map} - +/// Map of Susy configuration settings, +/// with all values normalized for Su math functions. +@function susy-normalize( + $config, + $context: null +) { + // Spread + @each $setting in ('spread', 'container-spread') { + $value: map-get($config, $setting); + + @if $value { + $value: susy-normalize-spread($value); + $config: map-merge($config, ($setting: $value)); + } + } + + // Columns + $columns: map-get($config, 'columns'); + + @if $columns { + $columns: susy-normalize-columns($columns, $context); + $config: map-merge($config, ('columns': $columns)); + } + + @if not $columns { + $map: type-of($context) == 'map'; + $columns: if($map, map-get($context, 'columns'), null); + $columns: $columns or susy-get('columns'); + } + + // Span + $span: map-get($config, 'span'); + + @if $span { + $span: susy-normalize-span($span, $columns); + $config: map-merge($config, ('span': $span)); + } + + // Location + $location: map-get($config, 'location'); + + @if $location { + $location: susy-normalize-location($span, $location, $columns); + $config: map-merge($config, ('location': $location)); + } + + @return $config; +} + + + +// Normalize Span +// -------------- +/// Normalize `span` shorthand for Su. +/// Su span syntax allows an explicit length (e.g. `3em`), +/// unitless column-span number (e.g. `3` columns), +/// or an explicit list of columns (e.g. `(3 5 8)`). +/// +/// Susy span syntax also allows the `all` keyword, +/// which will be converted to a slice of the context +/// in normalization. +/// +/// @group x-normal +/// +/// @param {number | list | 'all'} $span - +/// Span value to normalize. +/// @param {list} $columns - +/// Normalized list of columns in the grid +/// +/// @return {number | list} - +/// Number or list value for `$span` +@function susy-normalize-span( + $span, + $columns: susy-get('columns') +) { + @if ($span == 'all') { + @return length($columns); + } + + @return $span; +} + + + +// Normalize Columns +// ----------------- +/// Normalize `column` shorthand for Su. +/// Su column syntax only allows column lists (e.g. `120px 1 1 1 120px`). +/// +/// Susy span syntax also allows a unitless `slice` number (e.g `of 5`), +/// which will be converted to a slice of the context +/// in normalization. +/// +/// @group x-normal +/// +/// @param {list | integer} $columns - +/// List of available columns, +/// or unitless integer representing a slice of +/// the available context. +/// @param {map | null} $context [null] - +/// Map of Susy configuration settings to use as global reference, +/// or `null` to access global settings. +/// +/// @return {list} - +/// Columns list value, normalized for Su input. +/// +/// @throws +/// when attempting to access a slice of asymmetrical context +@function susy-normalize-columns( + $columns, + $context: null +) { + $context: $context or susy-settings(); + + @if type-of($columns) == 'list' { + @return _susy-flatten($columns); + } + + @if (type-of($columns) == 'number') and (unitless($columns)) { + $span: $columns; + $context: map-get($context, 'columns'); + $symmetrical: susy-repeat(length($context), nth($context, 1)); + + @if ($context == $symmetrical) { + @return susy-repeat($span, nth($context, 1)); + } @else { + $actual: 'of `#{$span}`'; + $columns: 'grid-columns `#{$context}`'; + @return _susy-error( + 'context-slice #{$actual} can not be determined based on #{$columns}.', + 'susy-normalize-columns'); + } + } + + @return $columns; +} + + + +// Normalize Spread +// ---------------- +/// Normalize `spread` shorthand for Su. +/// Su spread syntax only allows the numbers `-1`, `0`, or `1` – +/// representing the number of gutters covered +/// in relation to columns spanned. +/// +/// Susy spread syntax also allows keywords for each value – +/// `narrow` for `-1`, `wide` for `0`, or `wider` for `1` – +/// which will be converted to their respective integers +/// in normalization. +/// +/// @group x-normal +/// +/// @param {0 | 1 | -1 | 'narrow' | 'wide' | 'wider'} $spread - +/// Spread across adjacent gutters, relative to a column-count — +/// either `narrow` (-1), `wide` (0), or `wider` (1) +/// +/// @return {number} - +/// Numeric value for `$spread` +@function susy-normalize-spread( + $spread +) { + $normal-spread: ( + 'narrow': -1, + 'wide': 0, + 'wider': 1, + ); + + @return map-get($normal-spread, $spread) or $spread; +} + + + +// Normalize Location +// ------------------ +/// Normalize `location` shorthand for Su. +/// Su location syntax requires the (1-indexed) number for a column. +/// +/// Susy also allows the `first` and `last` keywords, +/// where `first` is always `1`, +/// and `last` is calculated based on span and column values. +/// Both keywords are normalized into an integer index +/// in normalization. +/// +/// @group x-normal +/// +/// @param {number} $span - +/// Number of grid-columns to be spanned +/// @param {integer | 'first' | 'last'} $location - +/// Starting (1-indexed) column position of a span, +/// or a named location keyword. +/// @param {list} $columns - +/// Already-normalized list of columns in the grid. +/// +/// @return {integer} - +/// Numeric value for `$location` +@function susy-normalize-location( + $span, + $location, + $columns +) { + $count: length($columns); + $normal-locations: ( + 'first': 1, + 'alpha': 1, + 'last': $count - $span + 1, + 'omega': $count - $span + 1, + ); + + @return map-get($normal-locations, $location) or $location; +} diff --git a/_sass/basically-basic/vendor/susy/susy/_parse.scss b/_sass/basically-basic/vendor/susy/susy/_parse.scss new file mode 100644 index 0000000..98aa40a --- /dev/null +++ b/_sass/basically-basic/vendor/susy/susy/_parse.scss @@ -0,0 +1,163 @@ +/// Shorthand Syntax Parser +/// ======================= +/// The syntax parser converts [shorthand syntax][short] +/// into a map of settings that can be compared/merged with +/// other config maps and global setting. +/// +/// [short]: b-api.html +/// +/// @group x-parser + + + +// Parse +// ----- +/// The `parse` function provides all the syntax-sugar in Susy, +/// converting user shorthand +/// into a usable map of keys and values +/// that can be normalized and passed to Su. +/// +/// @group x-parser +/// @see $susy +/// +/// @param {list} $shorthand - +/// Shorthand expression to define the width of the span, +/// optionally containing: +/// - a count, length, or column-list span; +/// - `at $n`, `first`, or `last` location on asymmetrical grids; +/// - `narrow`, `wide`, or `wider` for optionally spreading +/// across adjacent gutters; +/// - `of $n ` for available grid columns +/// and spread of the container +/// (span counts like `of 6` are only valid +/// in the context of symmetrical grids); +/// - and `set-gutters $n` to override global gutter settings +/// @param {bool} $context-only [false] - +/// Allow the parser to ignore span and span-spread values, +/// only parsing context and container-spread. +/// This makes it possible to accept spanless values, +/// like the `gutters()` syntax. +/// When parsing context-only, +/// the `of` indicator is optional. +/// +/// @return {map} - +/// Map of span and grid settings +/// parsed from shorthand input – +/// including all the properties available globally – +/// `columns`, `gutters`, `spread`, `container-spread` – +/// along with the span-specific properties +/// `span`, and `location`. +/// +/// @throw +/// when a shorthand value is not recognized +@function susy-parse( + $shorthand, + $context-only: false +) { + $parse-error: 'Unknown shorthand property:'; + $options: ( + 'first': 'location', + 'last': 'location', + 'alpha': 'location', + 'omega': 'location', + 'narrow': 'spread', + 'wide': 'spread', + 'wider': 'spread', + ); + + $return: (); + $span: null; + $columns: null; + + $of: null; + $next: false; + + // Allow context-only shorthand, without span + @if ($context-only) and (not index($shorthand, 'of')) { + @if su-valid-columns($shorthand, 'fail-silent') { + $shorthand: 'of' $shorthand; + } @else { + $shorthand: join('of', $shorthand); + } + } + + // loop through the shorthand list + @for $i from 1 through length($shorthand) { + $item: nth($shorthand, $i); + $type: type-of($item); + $error: false; + $details: '[#{$type}] `#{$item}`'; + + // if we know what's supposed to be coming next… + @if $next { + + // Add to the return map + $return: map-merge($return, ($next: $item)); + + // Reset next to `false` + $next: false; + + } @else { // If we don't know what's supposed to be coming… + + // Keywords… + @if ($type == 'string') { + // Check the map for keywords… + @if map-has-key($options, $item) { + $setting: map-get($options, $item); + + // Spread could be on the span or the container… + @if ($setting == 'spread') and ($of) { + $return: map-merge($return, ('container-spread': $item)); + } @else { + $return: map-merge($return, ($setting: $item)); + } + + } @else if ($item == 'all') { + // `All` is a span shortcut + $span: 'all'; + } @else if ($item == 'at') { + // Some keywords setup what's next… + $next: 'location'; + } @else if ($item == 'set-gutters') { + $next: 'gutters'; + } @else if ($item == 'of') { + $of: true; + } @else { + $error: true; + } + + } @else if ($type == 'number') or ($type == 'list') { // Numbers & lists… + + @if not ($span or $of) { + // We don't have a span, and we're not expecting context… + $span: $item; + } @else if ($of) and (not $columns) { + // We are expecting context… + $columns: $item; + } @else { + $error: true; + } + + } @else { + $error: true; + } + } + + @if $error { + @return _susy-error('#{$parse-error} #{$details}', 'susy-parse'); + } + } + + // If we have span, merge it in + @if $span { + $return: map-merge($return, ('span': $span)); + } + + // If we have columns, merge them in + @if $columns { + $return: map-merge($return, ('columns': $columns)); + } + + // Return the map of settings… + @return $return; +} diff --git a/_sass/basically-basic/vendor/susy/susy/_settings.scss b/_sass/basically-basic/vendor/susy/susy/_settings.scss new file mode 100644 index 0000000..b824477 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/susy/_settings.scss @@ -0,0 +1,329 @@ +/// Susy3 Configuration +/// =================== +/// Susy3 has 4 core settings, in a single settings map. +/// You'll notice a few differences from Susy2: +/// +/// **Columns** no longer accept a single number, like `12`, +/// but use a syntax more similar to the new +/// CSS [grid-template-columns][columns] – +/// a list of relative sizes for each column on the grid. +/// Unitless numbers in Susy act very similar to `fr` units in CSS, +/// and the `susy-repeat()` function (similar to the css `repeat()`) +/// helps quickly establish equal-width columns. +/// +/// [columns]: https://developer.mozilla.org/en-US/docs/Web/CSS/grid-template-columns +/// +/// - `susy-repeat(12)` will create 12 fluid, equal-width columns +/// - `susy-repeat(6, 120px)` will create 6 equal `120px`-wide columns +/// - `120px susy-repeat(4) 120px` will create 6 columns, +/// the first and last are `120px`, +/// while the middle 4 are equal fractions of the remainder. +/// Susy will output `calc()` values in order to achieve this. +/// +/// **Gutters** haven't changed – +/// a single fraction or explicit width – +/// but the `calc()` output feature +/// means you can now use any combination of units and fractions +/// to create static-gutters on a fluid grid, etc. +/// +/// **Spread** existed in the Susy2 API as a span option, +/// and was otherwise handled behind the scenes. +/// Now we're giving you full control over all spread issues. +/// You can find a more [detailed explanation of spread on the blog][spread]. +/// +/// [spread]: http://oddbird.net/2017/06/13/susy-spread/ +/// +/// You can access your global settings at any time +/// with the `susy-settings()` function, +/// or grab a single setting from the global scope +/// with `susy-get('columns')`, `susy-get('gutters')` etc. +/// +/// @group a-config +/// @link http://oddbird.net/2017/06/13/susy-spread/ +/// Article: Understanding Spread in Susy3 +/// +/// @see $susy +/// @see susy-settings +/// @see susy-get + + + +// Susy +// ---- +/// The grid is defined in a single map variable, +/// with four initial properties: +/// `columns`, `gutters`, `spread` and `container-spread`. +/// Anything you put in the root `$susy` variable map +/// will be treated as a global project default. +/// You can create similar configuration maps +/// under different variable names, +/// to override the defaults as-needed. +/// +/// @group a-config +/// @type Map +/// +/// @see $_susy-defaults +/// @see {function} susy-repeat +/// @link +/// https://codepen.io/mirisuzanne/pen/EgmJJp?editors=1100 +/// Spread examples on CodePen +/// +/// @prop {list} columns - +/// Columns are described by a list of numbers, +/// representing the relative width of each column. +/// The syntax is a simplified version of CSS native +/// `grid-template-columns`, +/// expecting a list of grid-column widths. +/// Unitless numbers create fractional fluid columns +/// (similar to the CSS-native `fr` unit), +/// while length values (united numbers) +/// are used to define static columns. +/// You can mix-and match units and fractions, +/// to create a mixed grid. +/// Susy will generate `calc()` values when necessary, +/// to make all your units work together. +/// +/// Use the `susy-repeat($count, $value)` function +/// to more easily repetative columns, +/// similar to the CSS-native `repeat()`. +/// +/// - `susy-repeat(8)`: +/// an 8-column, symmetrical, fluid grid. +///
Identical to `(1 1 1 1 1 1 1 1)`. +/// - `susy-repeat(6, 8em)`: +/// a 6-column, symmetrical, em-based grid. +///
Identical to `(8em 8em 8em 8em 8em 8em)`. +/// - `(300px susy-repeat(4) 300px)`: +/// a 6-column, asymmetrical, mixed fluid/static grid +/// using `calc()` output. +///
Identical to `(300px 1 1 1 1 300px)`. +/// +/// **NOTE** that `12` is no longer a valid 12-column grid definition, +/// and you must list all the columns individually +/// (or by using the `susy-repeat()` function). +/// +/// @prop {number} gutters - +/// Gutters are defined as a single width, +/// or fluid ratio, similar to the native-CSS +/// `grid-column-gap` syntax. +/// Similar to columns, +/// gutters can use any valid CSS length unit, +/// or unitless numbers to define a relative fraction. +/// +/// - `0.5`: +/// a fluid gutter, half the size of a single-fraction column. +/// - `1em`: +/// a static gutter, `1em` wide. +/// +/// Mix static gutters with fluid columns, or vice versa, +/// and Susy will generate the required `calc()` to make it work. +/// +/// @prop {string} spread [narrow] - +/// Spread of an element across adjacent gutters: +/// either `narrow` (none), `wide` (one), or `wider` (two) +/// +/// - Both spread settings default to `narrow`, +/// the most common use-case. +/// A `narrow` spread only has gutters *between* columns +/// (one less gutter than columns). +/// This is how all css-native grids work, +/// and most margin-based grid systems. +/// - A `wide` spread includes the same number of gutters as columns, +/// spanning across a single side-gutter. +/// This is how most padding-based grid systems often work, +/// and is also useful for pushing and pulling elements into place. +/// - The rare `wider` spread includes gutters +/// on both sides of the column-span +/// (one more gutters than columns). +/// +/// @prop {string} container-spread [narrow] - +/// Spread of a container around adjacent gutters: +/// either `narrow` (none), `wide` (one), or `wider` (two). +/// See `spread` property for details. +/// +/// @since 3.0.0-beta.1 - +/// `columns` setting no longer accepts numbers +/// (e.g. `12`) for symmetrical fluid grids, +/// or the initial `12 x 120px` syntax for +/// symmetrical fixed-unit grids. +/// Use `susy-repeat(12)` or `susy-repeat(12, 120px)` instead. +/// +/// @example scss - default values +/// // 4 symmetrical, fluid columns +/// // gutters are 1/4 the size of a column +/// // elements span 1 less gutter than columns +/// // containers span 1 less gutter as well +/// $susy: ( +/// 'columns': susy-repeat(4), +/// 'gutters': 0.25, +/// 'spread': 'narrow', +/// 'container-spread': 'narrow', +/// ); +/// +/// @example scss - inside-static gutters +/// // 6 symmetrical, fluid columns… +/// // gutters are static, triggering calc()… +/// // elements span equal columns & gutters… +/// // containers span equal columns & gutters… +/// $susy: ( +/// 'columns': susy-repeat(6), +/// 'gutters': 0.5em, +/// 'spread': 'wide', +/// 'container-spread': 'wide', +/// ); +$susy: () !default; + + + +// Susy Repeat +// ----------- +/// Similar to the `repeat(, )` function +/// that is available in native CSS Grid templates, +/// the `susy-repeat()` function helps generate repetative layouts +/// by repeating any value a given number of times. +/// Where Susy previously allowed `8` as a column definition +/// for 8 equal columns, you should now use `susy-repeat(8)`. +/// +/// @group a-config +/// +/// @param {integer} $count - +/// The number of repetitions, e.g. `12` for a 12-column grid. +/// @param {*} $value [1] - +/// The value to be repeated. +/// Technically any value can be repeated here, +/// but the function exists to repeat column-width descriptions: +/// e.g. the default `1` for single-fraction fluid columns, +/// `5em` for a static column, +/// or even `5em 120px` if you are alternating column widths. +/// +/// @return {list} - +/// List of repeated values +/// +/// @example scss +/// // 12 column grid, with 5em columns +/// $susy: ( +/// columns: susy-repeat(12, 5em), +/// ); +/// +/// @example scss +/// // asymmetrical 5-column grid +/// $susy: ( +/// columns: 20px susy-repeat(3, 100px) 20px, +/// ); +/// +/// /* result: #{susy-get('columns')} */ +@function susy-repeat( + $count, + $value: 1 +) { + $return: (); + + @for $i from 1 through $count { + $return: join($return, $value); + } + + @return $return; +} + + + +// Susy Defaults +// ------------- +/// Configuration map of Susy factory defaults. +/// Do not override this map directly – +/// use `$susy` for user and project setting overrides. +/// +/// @access private +/// @type Map +/// +/// @see $susy +/// +/// @prop {number | list} columns [susy-repeat(4)] +/// @prop {number} gutters [0.25] +/// @prop {string} spread ['narrow'] +/// @prop {string} container-spread ['narrow'] +$_susy-defaults: ( + 'columns': susy-repeat(4), + 'gutters': 0.25, + 'spread': 'narrow', + 'container-spread': 'narrow', +); + + + +// Susy Settings +// ------------- +/// Return a combined map of Susy settings, +/// based on the factory defaults (`$_susy-defaults`), +/// user-defined project configuration (`$susy`), +/// and any local overrides required – +/// such as a configuration map passed into a function. +/// +/// @group a-config +/// +/// @param {maps} $overrides… - +/// Optional map override of global configuration settings. +/// See `$susy` above for properties. +/// +/// @return {map} - +/// Combined map of Susy configuration settings, +/// in order of specificity: +/// any `$overrides...`, +/// then `$susy` project settings, +/// and finally the `$_susy-defaults` +/// +/// @example scss - global settings +/// @each $key, $value in susy-settings() { +/// /* #{$key}: #{$value} */ +/// } +/// +/// @example scss - local settings +/// $local: ('columns': 1 2 3 5 8); +/// +/// @each $key, $value in susy-settings($local) { +/// /* #{$key}: #{$value} */ +/// } +@function susy-settings( + $overrides... +) { + $settings: map-merge($_susy-defaults, $susy); + + @each $config in $overrides { + $settings: map-merge($settings, $config); + } + + @return $settings; +} + + + +// Susy Get +// -------- +/// Return the current global value of any Susy setting +/// +/// @group a-config +/// +/// @param {string} $key - +/// Setting to retrieve from the configuration. +/// +/// @return {*} - +/// Value mapped to `$key` in the configuration maps, +/// in order of specificity: +/// `$susy`, then `$_susy-defaults` +/// +/// @example scss - +/// /* columns: #{susy-get('columns')} */ +/// /* gutters: #{susy-get('gutters')} */ +@function susy-get( + $key +) { + $settings: susy-settings(); + + @if not map-has-key($settings, $key) { + @return _susy-error( + 'There is no Susy setting called `#{$key}`', + 'susy-get'); + } + + @return map-get($settings, $key); +} diff --git a/_sass/basically-basic/vendor/susy/susy/_su-math.scss b/_sass/basically-basic/vendor/susy/susy/_su-math.scss new file mode 100644 index 0000000..1e88528 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/susy/_su-math.scss @@ -0,0 +1,441 @@ +/// Grid Math Engine +/// ================ +/// The `su` functions give you direct access to the math layer, +/// without any syntax-sugar like shorthand parsing, and normalization. +/// If you prefer named arguments, and stripped-down syntax, +/// you can use these functions directly in your code – +/// replacing `span`, `gutter`, and `slice`. +/// +/// These functions are also useful +/// for building mixins or other extensions to Susy. +/// Apply the Susy syntax to new mixins and functions, +/// using our "Plugin Helpers", +/// or write your own syntax and pass the normalized results along +/// to `su` for compilation. +/// +/// @group su-math +/// +/// @see su-span +/// @see su-gutter +/// @see su-slice +/// @ignore _su-sum +/// @ignore _su-calc-span +/// @ignore _su-calc-sum +/// @ignore _su-needs-calc-output + + + +// Su Span +// ------- +/// Calculates and returns a CSS-ready span width, +/// based on normalized span and context data – +/// a low-level version of `susy-span`, +/// with all of the logic and none of the syntax sugar. +/// +/// - Grids defined with unitless numbers will return `%` values. +/// - Grids defined with comparable units +/// will return a value in the units provided. +/// - Grids defined with a mix of units, +/// or a combination of untiless numbers and unit-lengths, +/// will return a `calc()` string. +/// +/// @group su-math +/// @see susy-span +/// +/// @param {number | list} $span - +/// Number or list of grid columns to span +/// @param {list} $columns - +/// List of columns available +/// @param {number} $gutters - +/// Width of a gutter in column-comparable units +/// @param {0 | 1 | -1} $spread - +/// Number of gutters spanned, +/// relative to `span` count +/// @param {0 | 1 | -1} $container-spread [$spread] - +/// Number of gutters spanned, +/// relative to `columns` count +/// @param {integer} $location [1] - +/// Optional position of sub-span among full set of columns +/// +/// @return {length} - +/// Relative or static length of a span on the grid +@function su-span( + $span, + $columns, + $gutters, + $spread, + $container-spread: $spread, + $location: 1 +) { + $span: su-valid-span($span); + $columns: su-valid-columns($columns); + $gutters: su-valid-gutters($gutters); + $spread: su-valid-spread($spread); + + @if (type-of($span) == 'number') { + @if (not unitless($span)) { + @return $span; + } + + $location: su-valid-location($span, $location, $columns); + $span: su-slice($span, $columns, $location, $validate: false); + } + + @if _su-needs-calc-output($span, $columns, $gutters, $spread, not 'validate') { + @return _su-calc-span($span, $columns, $gutters, $spread, $container-spread, not 'validate'); + } + + $span-width: _su-sum($span, $gutters, $spread, $validate: false); + + @if unitless($span-width) { + $container-spread: su-valid-spread($container-spread); + $container: _su-sum($columns, $gutters, $container-spread, $validate: false); + @return percentage($span-width / $container); + } + + @return $span-width; +} + + + +// Su Gutter +// --------- +/// Calculates and returns a CSS-ready gutter width, +/// based on normalized grid data – +/// a low-level version of `susy-gutter`, +/// with all of the logic and none of the syntax sugar. +/// +/// - Grids defined with unitless numbers will return `%` values. +/// - Grids defined with comparable units +/// will return a value in the units provided. +/// - Grids defined with a mix of units, +/// or a combination of untiless numbers and unit-lengths, +/// will return a `calc()` string. +/// +/// @group su-math +/// @see susy-gutter +/// +/// @param {list} $columns - +/// List of columns in the grid +/// @param {number} $gutters - +/// Width of a gutter in column-comparable units +/// @param {0 | 1 | -1} $container-spread - +/// Number of gutters spanned, +/// relative to `columns` count +/// +/// @return {length} - +/// Relative or static length of one gutter in a grid +@function su-gutter( + $columns, + $gutters, + $container-spread +) { + @if (type-of($gutters) == 'number') { + @if ($gutters == 0) or (not unitless($gutters)) { + @return $gutters; + } + } + + @if _su-needs-calc-output($gutters, $columns, $gutters, -1, not 'validate') { + @return _su-calc-span($gutters, $columns, $gutters, -1, $container-spread, not 'validate'); + } + + $container: _su-sum($columns, $gutters, $container-spread); + @return percentage($gutters / $container); +} + + + +// Su Slice +// -------- +/// Returns a list of columns +/// based on a given span/location slice of the grid – +/// a low-level version of `susy-slice`, +/// with all of the logic and none of the syntax sugar. +/// +/// @group su-math +/// @see susy-slice +/// +/// @param {number} $span - +/// Number of grid columns to span +/// @param {list} $columns - +/// List of columns in the grid +/// @param {number} $location [1] - +/// Starting index of a span in the list of columns +/// @param {bool} $validate [true] - +/// Check that arguments are valid before proceeding +/// +/// @return {list} - +/// Subset list of grid columns, based on span and location +@function su-slice( + $span, + $columns, + $location: 1, + $validate: true +) { + @if $validate { + $columns: su-valid-columns($columns); + $location: su-valid-location($span, $location, $columns); + } + + $floor: floor($span); + $sub-columns: (); + + @for $i from $location to ($location + $floor) { + $sub-columns: append($sub-columns, nth($columns, $i)); + } + + @if $floor != $span { + $remainder: $span - $floor; + $column: $location + $floor; + $sub-columns: append($sub-columns, nth($columns, $column) * $remainder); + } + + @return $sub-columns; +} + + + +// Su Sum +// ------ +/// Get the total sum of column-units in a layout. +/// +/// @group su-math +/// @access private +/// +/// @param {list} $columns - +/// List of columns in the grid +/// @param {number} $gutters - +/// Width of a gutter in column-comparable units +/// @param {0 | 1 | -1} $spread - +/// Number of gutters spanned, +/// relative to `columns` count +/// @param {bool} $validate [true] - +/// Check that arguments are valid before proceeding +/// +/// @return {number} - +/// Total sum of column-units in a grid +@function _su-sum( + $columns, + $gutters, + $spread, + $validate: true +) { + @if $validate { + $columns: su-valid-span($columns); + $gutters: su-valid-gutters($gutters); + $spread: su-valid-spread($spread); + } + + // Calculate column-sum + $column-sum: 0; + @each $column in $columns { + $column-sum: $column-sum + $column; + } + + $gutter-sum: (ceil(length($columns)) + $spread) * $gutters; + $total: if(($gutter-sum > 0), $column-sum + $gutter-sum, $column-sum); + + @return $total; +} + + + +// Su Calc +// ------- +/// Return a usable span width as a `calc()` function, +/// in order to create mixed-unit grids. +/// +/// @group su-math +/// @access private +/// +/// @param {number | list} $span - +/// Pre-sliced list of grid columns to span +/// @param {list} $columns - +/// List of columns available +/// @param {number} $gutters - +/// Width of a gutter in column-comparable units +/// @param {0 | 1 | -1} $spread - +/// Number of gutters spanned, +/// relative to `span` count +/// @param {0 | 1 | -1} $container-spread [$spread] - +/// Number of gutters spanned, +/// relative to `columns` count +/// @param {bool} $validate [true] - +/// Check that arguments are valid before proceeding +/// +/// @return {length} - +/// Relative or static length of a span on the grid +@function _su-calc-span( + $span, + $columns, + $gutters, + $spread, + $container-spread: $spread, + $validate: true +) { + @if $validate { + $span: su-valid-span($span); + $columns: su-valid-columns($columns); + $gutters: su-valid-gutters($gutters); + $spread: su-valid-spread($spread); + $container-spread: su-valid-spread($container-spread); + } + + // Span and context + $span: _su-calc-sum($span, $gutters, $spread, not 'validate'); + $context: _su-calc-sum($columns, $gutters, $container-spread, not 'validate'); + + // Fixed and fluid + $fixed-span: map-get($span, 'fixed'); + $fluid-span: map-get($span, 'fluid'); + $fixed-context: map-get($context, 'fixed'); + $fluid-context: map-get($context, 'fluid'); + + $calc: '#{$fixed-span}'; + $fluid-calc: '(100% - #{$fixed-context})'; + + // Fluid-values + @if (not $fluid-span) { + $fluid-calc: null; + } @else if ($fluid-span != $fluid-context) { + $fluid-span: '* #{$fluid-span}'; + $fluid-context: if($fluid-context, '/ #{$fluid-context}', ''); + $fluid-calc: '(#{$fluid-calc $fluid-context $fluid-span})'; + } + + @if $fluid-calc { + $calc: if(($calc != ''), '#{$calc} + ', ''); + $calc: '#{$calc + $fluid-calc}'; + } + + @return calc(#{unquote($calc)}); +} + + + +// Su Calc-Sum +// ----------- +/// Get the total sum of fixed and fluid column-units +/// for creating a mixed-unit layout with `calc()` values. +/// +/// @group su-math +/// @access private +/// +/// @param {list} $columns - +/// List of columns available +/// @param {number} $gutters - +/// Width of a gutter in column-comparable units +/// @param {0 | 1 | -1} $spread - +/// Number of gutters spanned, +/// relative to `span` count +/// @param {bool} $validate [true] - +/// Check that arguments are valid before proceeding +/// +/// @return {map} - +/// Map with `fixed` and `fluid` keys +/// containing the proper math as strings +@function _su-calc-sum( + $columns, + $gutters, + $spread, + $validate: true +) { + @if $validate { + $columns: su-valid-span($columns); + $gutters: su-valid-gutters($gutters); + $spread: su-valid-spread($spread); + } + + $fluid: 0; + $fixed: (); + $calc: null; + + // Gutters + $gutters: $gutters * (length($columns) + $spread); + + // Columns + @each $col in append($columns, $gutters) { + @if unitless($col) { + $fluid: $fluid + $col; + } @else { + $fixed: _su-map-add-units($fixed, $col); + } + } + + // Compile Fixed Units + @each $unit, $total in $fixed { + @if ($total != (0 * $total)) { + $calc: if($calc, '#{$calc} + #{$total}', '#{$total}'); + } + } + + // Calc null or string + @if $calc { + $calc: if(str-index($calc, '+'), '(#{$calc})', '#{$calc}'); + } + + // Fluid 0 => null + $fluid: if(($fluid == 0), null, $fluid); + + + // Return map + $return: ( + 'fixed': $calc, + 'fluid': $fluid, + ); + + @return $return; +} + + + +// Needs Calc +// ---------- +/// Check if `calc()` will be needed in defining a span, +/// if the necessary units in a grid are not comparable. +/// +/// @group su-math +/// @access private +/// +/// @param {list} $span - +/// Slice of columns to span +/// @param {list} $columns - +/// List of available columns in the grid +/// @param {number} $gutters - +/// Width of a gutter +/// @param {0 | 1 | -1} $spread - +/// Number of gutters spanned, +/// relative to `span` count +/// @param {bool} $validate [true] - +/// Check that arguments are valid before proceeding +/// +/// @return {bool} - +/// `True` when units do not match, and `calc()` will be required +@function _su-needs-calc-output( + $span, + $columns, + $gutters, + $spread, + $validate: true +) { + @if $validate { + $span: su-valid-span($span); + $columns: su-valid-columns($columns); + $gutters: su-valid-gutters($gutters); + } + + $has-gutter: if((length($span) > 1) or ($spread >= 0), true, false); + $check: if($has-gutter, append($span, $gutters), $span); + $safe-span: _su-is-comparable($check...); + + @if ($safe-span == 'static') { + @return false; + } @else if (not $safe-span) { + @return true; + } + + $safe-fluid: _su-is-comparable($gutters, $columns...); + + @return not $safe-fluid; +} diff --git a/_sass/basically-basic/vendor/susy/susy/_su-validate.scss b/_sass/basically-basic/vendor/susy/susy/_su-validate.scss new file mode 100644 index 0000000..5befad3 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/susy/_su-validate.scss @@ -0,0 +1,213 @@ +/// Validation +/// ========== +/// Each argument to Su has a single canonical syntax. +/// These validation functions check to ensure +/// that each argument is valid, +/// in order to provide useful errors +/// before attempting to calculate the results/ +/// +/// @group x-validation +/// +/// @see su-valid-columns +/// @see su-valid-gutters +/// @see su-valid-spread +/// @see su-valid-location + + + +// Valid Span +// ---------- +/// Check that the `span` argument +/// is a number, length, or column-list +/// +/// @group x-validation +/// +/// @param {number | list} $span - +/// Number of columns, or length of span +/// +/// @return {number | list} - +/// Validated `$span` number, length, or columns list +/// +/// @throw +/// when span value is not a number, or valid column list +@function su-valid-span( + $span +) { + $type: type-of($span); + @if ($type == 'number') { + @return $span; + } @else if ($type == 'list') and su-valid-columns($span, 'silent-failure') { + @return $span; + } + + $actual: '[#{type-of($span)}] `#{inspect($span)}`'; + @return _susy-error( + '#{$actual} is not a valid number, length, or column-list for $span.', + 'su-valid-span'); +} + + + +// Valid Columns +// ------------- +/// Check that the `columns` argument is a valid +/// list of column-lengths +/// +/// @group x-validation +/// +/// @param {list} $columns - +/// List of column-lengths +/// @param {bool} $silent-failure [true] - +/// Set false to return null on failure +/// +/// @return {list} - +/// Validated `$columns` list +/// +/// @throw +/// when column value is not a valid list of numbers +@function su-valid-columns( + $columns, + $silent-failure: false +) { + @if (type-of($columns) == 'list') { + $fail: false; + + @each $col in $columns { + @if (type-of($col) != 'number') { + $fail: true; + } + } + + @if not $fail { + @return $columns; + } + } + + // Silent Failure + @if $silent-failure { + @return null; + } + + // Error Message + $actual: '[#{type-of($columns)}] `#{inspect($columns)}`'; + + @return _susy-error( + '#{$actual} is not a valid list of numbers for $columns.', + 'su-valid-columns'); +} + + + +// Valid Gutters +// ------------- +/// Check that the `gutters` argument is a valid number +/// +/// @group x-validation +/// +/// @param {number} $gutters - +/// Width of a gutter +/// +/// @return {number} - +/// Validated `$gutters` number +/// +/// @throw +/// when gutter value is not a number +@function su-valid-gutters( + $gutters +) { + $type: type-of($gutters); + + @if ($type == 'number') { + @return $gutters; + } + + $actual: '[#{$type}] `#{inspect($gutters)}`'; + @return _susy-error( + '#{$actual} is not a number or length for $gutters.', + 'su-valid-gutters'); +} + + + +// Valid Spread +// ------------ +/// Check that the `spread` argument is a valid +/// intiger between `-1` and `1` +/// +/// @group x-validation +/// +/// @param {0 | 1 | -1} $spread - +/// Number of gutters to include in a span, +/// relative to the number columns +/// +/// @return {0 | 1 | -1} - +/// Validated `$spread` number +/// +/// @throw +/// when spread value is not a valid spread +@function su-valid-spread( + $spread +) { + @if index(0 1 -1, $spread) { + @return $spread; + } + + $actual: '[#{type-of($spread)}] `#{inspect($spread)}`'; + @return _susy-error( + '#{$actual} is not a normalized [0 | 1 | -1] value for `$spread`.', + 'su-valid-spread'); +} + + + +// Valid Location +// -------------- +/// Check that the `location` argument is a valid number, +/// within the scope of available columns +/// +/// @group x-validation +/// +/// @param {number} $span - +/// Number of grid-columns to be spanned +/// @param {integer | string} $location - +/// Starting (1-indexed) column-position of that span +/// @param {list} $columns - +/// List of available columns in the grid +/// +/// @return {integer} - +/// Validated `$location` intiger +/// +/// @throw +/// when location value is not a valid index, +/// given the context and span. +@function su-valid-location( + $span, + $location, + $columns +) { + $count: length($columns); + + @if $location { + @if (type-of($location) != 'number') or (not unitless($location)) { + $actual: '[#{type-of($location)}] `#{$location}`'; + @return _susy-error( + '#{$actual} is not a unitless number for $location.', + 'su-valid-location'); + } @else if (round($location) != $location) { + @return _susy-error( + 'Location (`#{$location}`) must be a 1-indexed intiger position.', + 'su-valid-location'); + } @else if ($location > $count) or ($location < 1) { + @return _susy-error( + 'Position `#{$location}` does not exist in grid `#{$columns}`.', + 'su-valid-location'); + } @else if ($location + $span - 1 > $count) { + $details: 'grid `#{$columns}` for span `#{$span}` at `#{$location}`'; + @return _susy-error( + 'There are not enough columns in #{$details}.', + 'su-valid-location'); + } + } + + @return $location; +} diff --git a/_sass/basically-basic/vendor/susy/susy/_syntax-helpers.scss b/_sass/basically-basic/vendor/susy/susy/_syntax-helpers.scss new file mode 100644 index 0000000..f6043ea --- /dev/null +++ b/_sass/basically-basic/vendor/susy/susy/_syntax-helpers.scss @@ -0,0 +1,191 @@ +/// Syntax Utilities for Extending Susy +/// =================================== +/// There are many steps involved +/// when translating between the Susy syntax layer, +/// and the Su core math. +/// That entire process can be condensed with these two functions. +/// For anyone that wants to access the full power of Susy, +/// and build their own plugins, functions, or mixins – +/// this is the primary API for compiling user input, +/// and accessing the core math. +/// +/// This is the same technique we use internally, +/// to keep our API layer simple and light-weight. +/// Every function accepts two arguments, +/// a "shorthand" description of the span or context, +/// and an optional settings-map to override global defaults. +/// +/// - Use `susy-compile()` to parse, merge, and normalize +/// all the user settings into a single map. +/// - Then use `su-call()` to call one of the core math functions, +/// with whatever data is needed for that function. +/// +/// @group plugin-utils +/// @see susy-compile +/// @see su-call +/// +/// @example scss - Susy API `gutter` function +/// @function susy-gutter( +/// $context: susy-get('columns'), +/// $config: () +/// ) { +/// // compile and normalize all user arguments and global settings +/// $context: susy-compile($context, $config, 'context-only'); +/// // call `su-gutter` with the appropriate data +/// @return su-call('su-gutter', $context); +/// } +/// +/// @example scss - Sample `span` mixin for floated grids +/// @mixin span( +/// $span, +/// $config: () +/// ) { +/// $context: susy-compile($span, $config); +/// width: su-call('su-span', $context); +/// +/// @if index($span, 'last') { +/// float: right; +/// } @else { +/// float: left; +/// margin-right: su-call('su-gutter', $context); +/// } +/// } + + + +// Compile +// ------- +/// Susy's syntax layer has various moving parts, +/// with syntax-parsing for the grid/span shorthand, +/// and normalization for each of the resulting values. +/// The compile function rolls this all together +/// in a single call – +/// for quick access from our internal API functions, +/// or any additional functions and mixins you add to your project. +/// Pass user input and configuration maps to the compiler, +/// and it will hand back a map of values ready for Su. +/// Combine this with the `su-call` function +/// to quickly parse, normalize, and process grid calculations. +/// +/// @group plugin-utils +/// @see su-call +/// +/// @param {list | map} $shorthand - +/// Shorthand expression to define the width of the span, +/// optionally containing: +/// - a count, length, or column-list span; +/// - `at $n`, `first`, or `last` location on asymmetrical grids; +/// - `narrow`, `wide`, or `wider` for optionally spreading +/// across adjacent gutters; +/// - `of $n ` for available grid columns +/// and spread of the container +/// (span counts like `of 6` are only valid +/// in the context of symmetrical grids); +/// - and `set-gutters $n` to override global gutter settings +/// @param {map} $config [null] - +/// Optional map of Susy grid configuration settings +/// @param {bool} $context-only [false] - +/// Allow the parser to ignore span and span-spread values, +/// only parsing context and container-spread +/// +/// @return {map} - +/// Parsed and normalized map of settings, +/// based on global and local configuration, +/// alongwith shorthad adjustments. +/// +/// @example scss - +/// $user-input: 3 wide of susy-repeat(6, 120px) set-gutters 10px; +/// $grid-data: susy-compile($user-input, $susy); +/// +/// @each $key, $value in $grid-data { +/// /* #{$key}: #{$value}, */ +/// } +@function susy-compile( + $short, + $config: null, + $context-only: false +) { + // Get and normalize config + $config: if($config, susy-settings($config), susy-settings()); + $normal-config: susy-normalize($config); + + // Parse and normalize shorthand + @if (type-of($short) != 'map') and (length($short) > 0) { + $short: susy-parse($short, $context-only); + } + + $normal-short: susy-normalize($short, $normal-config); + + // Merge and return + @return map-merge($normal-config, $normal-short); +} + + + +// Call +// ---- +/// The Susy parsing and normalization process +/// results in a map of configuration settings, +/// much like the global `$susy` settings map. +/// In order to pass that information along to Su math functions, +/// the proper values have to be picked out, +/// and converted to arguments. +/// +/// The `su-call` function streamlines that process, +/// weeding out the unnecessary data, +/// and passing the rest along to Su in the proper format. +/// Combine this with `susy-compile` to quickly parse, +/// normalize, and process grid calculations. +/// +/// @group plugin-utils +/// +/// @require su-span +/// @require su-gutter +/// @require su-slice +/// @see susy-compile +/// +/// @param {'su-span' | 'su-gutter' | 'su-slice'} $name - +/// Name of the Su math function to call. +/// @param {map} $config - +/// Parsed and normalized map of Susy configuration settings +/// to use for math-function arguments. +/// +/// @return {*} - +/// Results of the function being called. +/// +/// @example scss - +/// $user-input: 3 wide of susy-repeat(6, 120px) set-gutters 10px; +/// $grid-data: susy-compile($user-input, $susy); +/// +/// .su-span { +/// width: su-call('su-span', $grid-data); +/// } +@function su-call( + $name, + $config +) { + $grid-function-args: ( + 'su-span': ('span', 'columns', 'gutters', 'spread', 'container-spread', 'location'), + 'su-gutter': ('columns', 'gutters', 'container-spread'), + 'su-slice': ('span', 'columns', 'location'), + ); + + $args: map-get($grid-function-args, $name); + + @if not $args { + $options: 'Try one of these: #{map-keys($grid-function-args)}'; + @return _susy-error( + '#{$name} is not a public Su function. #{$options}', + 'su-call'); + } + + $call: if(function-exists('get-function'), get-function($name), $name); + $output: (); + + @each $arg in $args { + $value: map-get($config, $arg); + $output: if($value, map-merge($output, ($arg: $value)), $output); + } + + @return call($call, $output...); +} diff --git a/_sass/basically-basic/vendor/susy/susy/_unprefix.scss b/_sass/basically-basic/vendor/susy/susy/_unprefix.scss new file mode 100644 index 0000000..2cfd1b8 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/susy/_unprefix.scss @@ -0,0 +1,56 @@ +// Unprefix Susy +// ============= + + +// Span +// ---- +/// Un-prefixed alias for `susy-span` +/// (available by default) +/// +/// @group api +/// @alias susy-span +/// +/// @param {list} $span +/// @param {map} $config [()] +@function span( + $span, + $config: () +) { + @return susy-span($span, $config); +} + + +// Gutter +// ------ +/// Un-prefixed alias for `susy-gutter` +/// (available by default) +/// +/// @group api +/// @alias susy-gutter +/// +/// @param {integer | list} $context [null] - +/// @param {map} $config [()] +@function gutter( + $context: susy-get('columns'), + $config: () +) { + @return susy-gutter($context, $config); +} + + +// Slice +// ----- +/// Un-prefixed alias for `susy-slice` +/// (available by default) +/// +/// @group api +/// @alias susy-slice +/// +/// @param {list} $span +/// @param {map} $config [()] +@function slice( + $span, + $config: () +) { + @return susy-slice($span, $config); +} diff --git a/_sass/basically-basic/vendor/susy/susy/_utilities.scss b/_sass/basically-basic/vendor/susy/susy/_utilities.scss new file mode 100644 index 0000000..3c62de2 --- /dev/null +++ b/_sass/basically-basic/vendor/susy/susy/_utilities.scss @@ -0,0 +1,167 @@ +// Sass Utilities +// ============== +// - Susy Error Output Override [variable] +// - Susy Error [function] + + + +// Susy Error Output Override +// -------------------------- +/// Turn off error output for testing +/// @group x-utility +/// @access private +$_susy-error-output-override: false !default; + + + +// Susy Error +// ---------- +/// Optionally return error messages without failing, +/// as a way to test error cases +/// +/// @group x-utility +/// @access private +/// +/// @param {string} $message - +/// A useful error message, explaining the problem +/// @param {string} $source - +/// The original source of the error for debugging +/// @param {bool} $override [$_susy-error-output-override] - +/// Optionally return the error rather than failing +/// @return {string} - +/// Combined error with source and message +/// @throws When `$override == true` +@function _susy-error( + $message, + $source, + $override: $_susy-error-output-override +) { + @if $override { + @return 'ERROR [#{$source}] #{$message}'; + } + + @error '[#{$source}] #{$message}'; +} + + +// Su Is Comparable +// ---------------- +/// Check that the units in a grid are comparable +/// +/// @group x-validation +/// @access private +/// +/// @param {numbers} $lengths… - +/// Arglist of all the number values to compare +/// (columns, gutters, span, etc) +/// +/// @return {'fluid' | 'static' | false} - +/// The type of span (fluid or static) when units match, +/// or `false` for mismatched units +@function _su-is-comparable( + $lengths... +) { + $first: nth($lengths, 1); + + @if (length($lengths) == 1) { + @return if(unitless($first), 'fluid', 'static'); + } + + @for $i from 2 through length($lengths) { + $comp: nth($lengths, $i); + + $fail: not comparable($first, $comp); + $fail: $fail or (unitless($first) and not unitless($comp)); + $fail: $fail or (unitless($comp) and not unitless($first)); + + @if $fail { + @return false; + } + } + + @return if(unitless($first), 'fluid', 'static'); +} + + +// Su Map Add Units +// ---------------- +/// The calc features use a map of units and values +/// to compile the proper algorythm. +/// This function adds a new value to any comparable existing unit/value, +/// or adds a new unit/value pair to the map +/// +/// @group x-utility +/// @access private +/// +/// @param {map} $map - +/// A map of unit/value pairs, e.g. ('px': 120px) +/// @param {length} $value - +/// A new length to be added to the map +/// @return {map} - +/// The updated map, with new value added +/// +/// @example scss - +/// $map: (0px: 120px); +/// $map: _su-map-add-units($map, 1in); // add a comparable unit +/// $map: _su-map-add-units($map, 3vw); // add a new unit +/// +/// @each $units, $value in $map { +/// /* #{$units}: #{$value} */ +/// } +@function _su-map-add-units( + $map, + $value +) { + $unit: $value * 0; + $has: map-get($map, $unit) or 0; + + @if ($has == 0) { + @each $try, $could in $map { + $match: comparable($try, $value); + $unit: if($match, $try, $unit); + $has: if($match, $could, $has); + } + } + + @return map-merge($map, ($unit: $has + $value)); +} + + +// Susy Flatten +// ------------ +/// Flatten a multidimensional list +/// +/// @group x-utility +/// @access private +/// +/// @param {list} $list - +/// The list to be flattened +/// @return {list} - +/// The flattened list +/// +/// @example scss - +/// $list: 120px (30em 30em) 120px; +/// /* #{_susy-flatten($list)} */ +@function _susy-flatten( + $list +) { + $flat: (); + + // Don't iterate over maps + @if (type-of($list) == 'map') { + @return $list; + } + + // Iterate over lists (or single items) + @each $item in $list { + @if (type-of($item) == 'list') { + $item: _susy-flatten($item); + $flat: join($flat, $item); + } @else { + $flat: append($flat, $item); + } + } + + // Return flattened list + @return $flat; +} From 0112ff5c1d41d684ca252d56264fdee5df2f2703 Mon Sep 17 00:00:00 2001 From: Michael Rose Date: Fri, 5 Jan 2018 14:27:34 -0500 Subject: [PATCH 146/245] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a37fdab..3d0eb36 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Fixed - Fixed primary navigation skip link to use correct anchor ID. [#41](https://github.com/mmistakes/jekyll-theme-basically-basic/pull/41) +- Fixed Susy deprecation warnings by updating to version 3. [#21](https://github.com/mmistakes/jekyll-theme-basically-basic/issues/21) ## [1.1.3] - 2017-10-19 From a3692ec213ded4de6e2ab57d98b810a45e474daa Mon Sep 17 00:00:00 2001 From: Michael Rose Date: Fri, 5 Jan 2018 14:54:51 -0500 Subject: [PATCH 147/245] Improve syntax highlighting styles Replace hardcoded hex values with Sass variables in [Base16](http://chriskempson.com/projects/base16/) --- .../basically-basic/_syntax-highlighting.scss | 423 +++++++++++++----- _sass/basically-basic/_variables.scss | 18 + 2 files changed, 323 insertions(+), 118 deletions(-) diff --git a/_sass/basically-basic/_syntax-highlighting.scss b/_sass/basically-basic/_syntax-highlighting.scss index eb5d512..47b641a 100644 --- a/_sass/basically-basic/_syntax-highlighting.scss +++ b/_sass/basically-basic/_syntax-highlighting.scss @@ -2,126 +2,313 @@ Syntax highlighting ========================================================================== */ -.highlight { - padding: 1em; - background-color: $code-background-color; +div.highlighter-rouge, +figure.highlight { + position: relative; + margin-bottom: 1em; + background: $base00; + color: $base05; + font-family: $monospace-font-family; + line-height: 1.8; + + > pre, + pre.highlight { + margin: 0; + padding: 1em; + } +} + +.highlight table { + margin-bottom: 0; + font-size: 1em; + border: 0; + + td { + padding: 0; + width: calc(100% - 1em); + border: 0; + + /* line numbers*/ + &.gutter { + padding-right: 1em; + width: 1em; + color: $base04; + border-right: 1px solid $base04; + text-align: right; + } + + /* code */ + &.code { + padding-left: 1em; + } + } pre { - width: 100%; margin: 0; } - - table { - margin: 0; - border: 0; - font-size: 1em; - - tr { - border: 0; - } - - td { - padding: 5px; - border: 0; - - /* line numbers gutter */ - &.gutter { - padding-right: 1rem; - } - } - - pre { - margin: 0; - } - } - - /* line numbers */ - .lineno { - color: tint($base-color, 50%); - } - - /* - Solarized Light - http://ethanschoonover.com/solarized - - SOLARIZED HEX ROLE - --------- -------- ------------------------------------------ - base01 #586e75 body text / default code / primary content - base1 #93a1a1 comments / secondary content - base3 #fdf6e3 background - orange #cb4b16 constants - red #dc322f regex, special keywords - blue #22b3eb reserved keywords - cyan #2aa198 strings, numbers - green #859900 operators, other keywords - ========================================================================== */ - - .c { color: #93a1a1; } /* Comment */ - .err { color: #586e75; } /* Error */ - .g { color: #586e75; } /* Generic */ - .k { color: #859900; } /* Keyword */ - .l { color: #586e75; } /* Literal */ - .n { color: #586e75; } /* Name */ - .o { color: #859900; } /* Operator */ - .x { color: #cb4b16; } /* Other */ - .p { color: #586e75; } /* Punctuation */ - .cm { color: #93a1a1; } /* Comment.Multiline */ - .cp { color: #859900; } /* Comment.Preproc */ - .c1 { color: #93a1a1; } /* Comment.Single */ - .cs { color: #859900; } /* Comment.Special */ - .gd { color: #2aa198; } /* Generic.Deleted */ - .ge { color: #586e75; font-style: italic; } /* Generic.Emph */ - .gr { color: #dc322f; } /* Generic.Error */ - .gh { color: #cb4b16; } /* Generic.Heading */ - .gi { color: #859900; } /* Generic.Inserted */ - .go { color: #586e75; } /* Generic.Output */ - .gp { color: #586e75; } /* Generic.Prompt */ - .gs { color: #586e75; font-weight: bold; } /* Generic.Strong */ - .gu { color: #cb4b16; } /* Generic.Subheading */ - .gt { color: #586e75; } /* Generic.Traceback */ - .kc { color: #cb4b16; } /* Keyword.Constant */ - .kd { color: #22b3eb; } /* Keyword.Declaration */ - .kn { color: #859900; } /* Keyword.Namespace */ - .kp { color: #859900; } /* Keyword.Pseudo */ - .kr { color: #22b3eb; } /* Keyword.Reserved */ - .kt { color: #dc322f; } /* Keyword.Type */ - .ld { color: #586e75; } /* Literal.Date */ - .m { color: #2aa198; } /* Literal.Number */ - .s { color: #2aa198; } /* Literal.String */ - .na { color: #586e75; } /* Name.Attribute */ - .nb { color: #b58900; } /* Name.Builtin */ - .nc { color: #22b3eb; } /* Name.Class */ - .no { color: #cb4b16; } /* Name.Constant */ - .nd { color: #22b3eb; } /* Name.Decorator */ - .ni { color: #cb4b16; } /* Name.Entity */ - .ne { color: #cb4b16; } /* Name.Exception */ - .nf { color: #22b3eb; } /* Name.Function */ - .nl { color: #586e75; } /* Name.Label */ - .nn { color: #586e75; } /* Name.Namespace */ - .nx { color: #586e75; } /* Name.Other */ - .py { color: #586e75; } /* Name.Property */ - .nt { color: #22b3eb; } /* Name.Tag */ - .nv { color: #22b3eb; } /* Name.Variable */ - .ow { color: #859900; } /* Operator.Word */ - .w { color: #586e75; } /* Text.Whitespace */ - .mf { color: #2aa198; } /* Literal.Number.Float */ - .mh { color: #2aa198; } /* Literal.Number.Hex */ - .mi { color: #2aa198; } /* Literal.Number.Integer */ - .mo { color: #2aa198; } /* Literal.Number.Oct */ - .sb { color: #93a1a1; } /* Literal.String.Backtick */ - .sc { color: #2aa198; } /* Literal.String.Char */ - .sd { color: #586e75; } /* Literal.String.Doc */ - .s2 { color: #2aa198; } /* Literal.String.Double */ - .se { color: #cb4b16; } /* Literal.String.Escape */ - .sh { color: #586e75; } /* Literal.String.Heredoc */ - .si { color: #2aa198; } /* Literal.String.Interpol */ - .sx { color: #2aa198; } /* Literal.String.Other */ - .sr { color: #dc322f; } /* Literal.String.Regex */ - .s1 { color: #2aa198; } /* Literal.String.Single */ - .ss { color: #2aa198; } /* Literal.String.Symbol */ - .bp { color: #22b3eb; } /* Name.Builtin.Pseudo */ - .vc { color: #22b3eb; } /* Name.Variable.Class */ - .vg { color: #22b3eb; } /* Name.Variable.Global */ - .vi { color: #22b3eb; } /* Name.Variable.Instance */ - .il { color: #2aa198; } /* Literal.Number.Integer.Long */ +} + +.highlight pre { + width: 100%; +} + +.highlight .hll { + background-color: $base06; +} +.highlight { + .c { + /* Comment */ + color: $base04; + } + .err { + /* Error */ + color: $base08; + } + .k { + /* Keyword */ + color: $base0e; + } + .l { + /* Literal */ + color: $base09; + } + .n { + /* Name */ + color: $base05; + } + .o { + /* Operator */ + color: $base0c; + } + .p { + /* Punctuation */ + color: $base05; + } + .cm { + /* Comment.Multiline */ + color: $base04; + } + .cp { + /* Comment.Preproc */ + color: $base04; + } + .c1 { + /* Comment.Single */ + color: $base04; + } + .cs { + /* Comment.Special */ + color: $base04; + } + .gd { + /* Generic.Deleted */ + color: $base08; + } + .ge { + /* Generic.Emph */ + font-style: italic; + } + .gh { + /* Generic.Heading */ + color: $base05; + font-weight: bold; + } + .gi { + /* Generic.Inserted */ + color: $base0b; + } + .gp { + /* Generic.Prompt */ + color: $base04; + font-weight: bold; + } + .gs { + /* Generic.Strong */ + font-weight: bold; + } + .gu { + /* Generic.Subheading */ + color: $base0c; + font-weight: bold; + } + .kc { + /* Keyword.Constant */ + color: $base0e; + } + .kd { + /* Keyword.Declaration */ + color: $base0e; + } + .kn { + /* Keyword.Namespace */ + color: $base0c; + } + .kp { + /* Keyword.Pseudo */ + color: $base0e; + } + .kr { + /* Keyword.Reserved */ + color: $base0e; + } + .kt { + /* Keyword.Type */ + color: $base0a; + } + .ld { + /* Literal.Date */ + color: $base0b; + } + .m { + /* Literal.Number */ + color: $base09; + } + .s { + /* Literal.String */ + color: $base0b; + } + .na { + /* Name.Attribute */ + color: $base0d; + } + .nb { + /* Name.Builtin */ + color: $base05; + } + .nc { + /* Name.Class */ + color: $base0a; + } + .no { + /* Name.Constant */ + color: $base08; + } + .nd { + /* Name.Decorator */ + color: $base0c; + } + .ni { + /* Name.Entity */ + color: $base05; + } + .ne { + /* Name.Exception */ + color: $base08; + } + .nf { + /* Name.Function */ + color: $base0d; + } + .nl { + /* Name.Label */ + color: $base05; + } + .nn { + /* Name.Namespace */ + color: $base0a; + } + .nx { + /* Name.Other */ + color: $base0d; + } + .py { + /* Name.Property */ + color: $base05; + } + .nt { + /* Name.Tag */ + color: $base0c; + } + .nv { + /* Name.Variable */ + color: $base08; + } + .ow { + /* Operator.Word */ + color: $base0c; + } + .w { + /* Text.Whitespace */ + color: $base05; + } + .mf { + /* Literal.Number.Float */ + color: $base09; + } + .mh { + /* Literal.Number.Hex */ + color: $base09; + } + .mi { + /* Literal.Number.Integer */ + color: $base09; + } + .mo { + /* Literal.Number.Oct */ + color: $base09; + } + .sb { + /* Literal.String.Backtick */ + color: $base0b; + } + .sc { + /* Literal.String.Char */ + color: $base05; + } + .sd { + /* Literal.String.Doc */ + color: $base04; + } + .s2 { + /* Literal.String.Double */ + color: $base0b; + } + .se { + /* Literal.String.Escape */ + color: $base09; + } + .sh { + /* Literal.String.Heredoc */ + color: $base0b; + } + .si { + /* Literal.String.Interpol */ + color: $base09; + } + .sx { + /* Literal.String.Other */ + color: $base0b; + } + .sr { + /* Literal.String.Regex */ + color: $base0b; + } + .s1 { + /* Literal.String.Single */ + color: $base0b; + } + .ss { + /* Literal.String.Symbol */ + color: $base0b; + } + .bp { + /* Name.Builtin.Pseudo */ + color: $base05; + } + .vc { + /* Name.Variable.Class */ + color: $base08; + } + .vg { + /* Name.Variable.Global */ + color: $base08; + } + .vi { + /* Name.Variable.Instance */ + color: $base08; + } + .il { + /* Literal.Number.Integer.Long */ + color: $base09; + } } diff --git a/_sass/basically-basic/_variables.scss b/_sass/basically-basic/_variables.scss index 6a7a232..40dfded 100644 --- a/_sass/basically-basic/_variables.scss +++ b/_sass/basically-basic/_variables.scss @@ -57,6 +57,24 @@ $code-background-color: tint($base-color, 95%) !default; $border-color: tint($base-color, 80%) !default; $overlay-color: $base-color !default; +/* Syntax highlighting (base16) colors */ +$base00: #1c2023 !default; +$base01: #393f45 !default; +$base02: #565e65 !default; +$base03: #747c84 !default; +$base04: #adb3ba !default; +$base05: #c7ccd1 !default; +$base06: #dfe2e5 !default; +$base07: #f3f4f5 !default; +$base08: #c7ae95 !default; +$base09: #c7c795 !default; +$base0a: #aec795 !default; +$base0b: #95c7ae !default; +$base0c: #95aec7 !default; +$base0d: #ae95c7 !default; +$base0e: #c795ae !default; +$base0f: #c79595 !default; + /* Max-width of the main content */ $main-max-width: $xlarge !default; From 5cee58f6478d1bccda26fb26052cb6d688c80a16 Mon Sep 17 00:00:00 2001 From: Michael Rose Date: Fri, 5 Jan 2018 15:00:45 -0500 Subject: [PATCH 148/245] Fix color of menu toggle text --- _sass/basically-basic/_sidebar.scss | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/_sass/basically-basic/_sidebar.scss b/_sass/basically-basic/_sidebar.scss index 5128e35..065c27e 100644 --- a/_sass/basically-basic/_sidebar.scss +++ b/_sass/basically-basic/_sidebar.scss @@ -48,7 +48,7 @@ height: 1px; transition: width 0.3s cubic-bezier(0, 0, 0.3, 1); background-color: $base-color; - content: ''; + content: ""; } &:hover { @@ -93,7 +93,7 @@ width: 1.5em; height: 1px; background-color: $base-color; - content: ''; + content: ""; } li { @@ -138,4 +138,5 @@ order: 2; margin-left: 0.5rem; font-weight: bold; + color: $text-color; } From 7792636b680f15632ea8e407f22022d8c06d8f9c Mon Sep 17 00:00:00 2001 From: Michael Rose Date: Fri, 5 Jan 2018 15:08:05 -0500 Subject: [PATCH 149/245] Add skin appopriate colors for code blocks --- _sass/basically-basic/themes/_soft.scss | 18 ++++++++++++++++++ _sass/basically-basic/themes/_steel.scss | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/_sass/basically-basic/themes/_soft.scss b/_sass/basically-basic/themes/_soft.scss index cb3efa6..e733ecc 100644 --- a/_sass/basically-basic/themes/_soft.scss +++ b/_sass/basically-basic/themes/_soft.scss @@ -10,3 +10,21 @@ $background-color: #fefaec !default; $code-background-color: #fff !default; $border-color: rgba($text-color, 0.5) !default; $overlay-color: #fff !default; + +/* Syntax highlighting (base16) colors */ +$base00: #efecf4 !default; +$base01: #e2dfe7 !default; +$base02: #8b8792 !default; +$base03: #7e7887 !default; +$base04: #655f6d !default; +$base05: #585260 !default; +$base06: #26232a !default; +$base07: #19171c !default; +$base08: #be4678 !default; +$base09: #aa573c !default; +$base0a: #a06e3b !default; +$base0b: #2a9292 !default; +$base0c: #398bc6 !default; +$base0d: #576ddb !default; +$base0e: #955ae7 !default; +$base0f: #bf40bf !default; diff --git a/_sass/basically-basic/themes/_steel.scss b/_sass/basically-basic/themes/_steel.scss index b497a27..14612cd 100644 --- a/_sass/basically-basic/themes/_steel.scss +++ b/_sass/basically-basic/themes/_steel.scss @@ -10,3 +10,21 @@ $background-color: #eee !default; $code-background-color: #fff !default; $border-color: rgba($text-color, 0.25) !default; $overlay-color: #fff !default; + +/* Syntax highlighting (base16) colors */ +$base00: #1d1f21 !default; +$base01: #282a2e !default; +$base02: #373b41 !default; +$base03: #969896 !default; +$base04: #b4b7b4 !default; +$base05: #c5c8c6 !default; +$base06: #e0e0e0 !default; +$base07: #ffffff !default; +$base08: #cc6666 !default; +$base09: #de935f !default; +$base0a: #f0c674 !default; +$base0b: #b5bd68 !default; +$base0c: #8abeb7 !default; +$base0d: #81a2be !default; +$base0e: #b294bb !default; +$base0f: #a3685a !default; From 50bd0aea59cfb869a83d622a15896a58713f433c Mon Sep 17 00:00:00 2001 From: Michael Rose Date: Fri, 5 Jan 2018 15:08:57 -0500 Subject: [PATCH 150/245] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d0eb36..272324a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Update GitHub Pages compatible installation instructions to include jekyll-remote-theme method. - Update `site.gems` references to `site.plugins`. [#39](https://github.com/mmistakes/jekyll-theme-basically-basic/pull/39) - Update license and copyright. +- Improve syntax highlighting styles and colors. ### Fixed - Fixed primary navigation skip link to use correct anchor ID. [#41](https://github.com/mmistakes/jekyll-theme-basically-basic/pull/41) From c2e66e4bdecc3e0473d4056d11f9b28a723475a4 Mon Sep 17 00:00:00 2001 From: Michael Rose Date: Fri, 5 Jan 2018 15:13:34 -0500 Subject: [PATCH 151/245] Update CHANGELOG --- CHANGELOG.md | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 272324a..8c4ec6d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). -## [Unreleased] - +## [1.2.0] - 2018-01-05 ### Changed - Use [jekyll-remote-theme](https://github.com/benbalter/jekyll-remote-theme) for demo site. @@ -15,47 +15,49 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Improve syntax highlighting styles and colors. ### Fixed -- Fixed primary navigation skip link to use correct anchor ID. [#41](https://github.com/mmistakes/jekyll-theme-basically-basic/pull/41) -- Fixed Susy deprecation warnings by updating to version 3. [#21](https://github.com/mmistakes/jekyll-theme-basically-basic/issues/21) +- Fix primary navigation skip link to use correct anchor ID. [#41](https://github.com/mmistakes/jekyll-theme-basically-basic/pull/41) +- Fix Susy deprecation warnings by updating to version 3. [#21](https://github.com/mmistakes/jekyll-theme-basically-basic/issues/21) ## [1.1.3] - 2017-10-19 ### Fixed -- Fixed `{nil, "picture"=>nil"}` in `_layouts/about.html` when author image isn't set. [#34](https://github.com/mmistakes/jekyll-theme-basically-basic/issues/34) +- Fix `{nil, "picture"=>nil"}` in `_layouts/about.html` when author image isn't set. [#34](https://github.com/mmistakes/jekyll-theme-basically-basic/issues/34) ## [1.1.2] - 2017-09-14 ### Fixed -- Adjusted `/_sass/_print.scss` to reduce blank pages when printing in Chrome. [#29](https://github.com/mmistakes/jekyll-theme-basically-basic/issues/29) -- Fixed sidebar visibility bug in Firefox and Safari by adding toggling `visibility: hidden`. [#31](https://github.com/mmistakes/jekyll-theme-basically-basic/issues/31) +- Adjust `/_sass/_print.scss` to reduce blank pages when printing in Chrome. [#29](https://github.com/mmistakes/jekyll-theme-basically-basic/issues/29) +- Fix sidebar visibility bug in Firefox and Safari by adding toggling `visibility: hidden`. [#31](https://github.com/mmistakes/jekyll-theme-basically-basic/issues/31) ## [1.1.1] - 2017-09-06 ### Changed - Change `gems` key in `_config.yml` to `plugins`. [#23](https://github.com/mmistakes/jekyll-theme-basically-basic/pull/23) -- Fixed Liquid syntax error: "Expected id but found end_of_string_in `cv.skills.`" in `/cv/skills.html` include. + +### Fixed +- Fix Liquid syntax error: "Expected id but found end_of_string_in `cv.skills.`" in `/cv/skills.html` include. ## [1.1.0] - 2017-03-30 ### Added -- Improved installation documentation. [#8](https://github.com/mmistakes/jekyll-theme-basically-basic/issues/8) -- Google Analytics tracking ID, Disqus comments, to `/docs` demo site. +- Improve installation documentation. [#8](https://github.com/mmistakes/jekyll-theme-basically-basic/issues/8) +- Add Google Analytics tracking ID, Disqus comments, to `/docs` demo site. ### Changed - Change source order of `.sidebar` and `.canvas` so menu items can easily be "tabbed" to. [#10](https://github.com/mmistakes/jekyll-theme-basically-basic/issues/10) - Refactor sidebar off-canvas menu and improve animation. [#9](https://github.com/mmistakes/jekyll-theme-basically-basic/issues/9) [#15](https://github.com/mmistakes/jekyll-theme-basically-basic/issues/15) -- Removed tinted background from `` elements. -- Permalink structure of `/docs` demo site. +- Remove tinted background from `` elements. +- Update permalink structure of `/docs` demo site. ### Fixed -- `body` height and `.wrapper` box shadow. [#13](https://github.com/mmistakes/jekyll-theme-basically-basic/issues/13) -- Unclickable main content links in Internet Explorer 10. [#9](https://github.com/mmistakes/jekyll-theme-basically-basic/issues/9) +- Fix `body` height and `.wrapper` box shadow. [#13](https://github.com/mmistakes/jekyll-theme-basically-basic/issues/13) +- Fix unclickable main content links in Internet Explorer 10. [#9](https://github.com/mmistakes/jekyll-theme-basically-basic/issues/9) ## [1.0.1] - 2017-03-23 ### Added -- Responsive embed helper classes for videos. [#2](https://github.com/mmistakes/jekyll-theme-basically-basic/issues/2) -- Print styles for improved readability of printed pages. [#4](https://github.com/mmistakes/jekyll-theme-basically-basic/pull/4) +- New responsive embed helper classes for videos. [#2](https://github.com/mmistakes/jekyll-theme-basically-basic/issues/2) +- New print styles for improved readability of printed pages. [#4](https://github.com/mmistakes/jekyll-theme-basically-basic/pull/4) - Icon list to README. ## [1.0.0] - 2017-03-20 From 6d2ee6d7ba834c1070c1f7b39ea0668b770a61e7 Mon Sep 17 00:00:00 2001 From: Michael Rose Date: Fri, 5 Jan 2018 15:16:55 -0500 Subject: [PATCH 152/245] Release 1.2.0 :gem: --- _layouts/default.html | 4 ++-- _sass/basically-basic.scss | 4 ++-- assets/javascripts/main.js | 4 ++-- jekyll-theme-basically-basic.gemspec | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/_layouts/default.html b/_layouts/default.html index 4511be9..4f7c575 100644 --- a/_layouts/default.html +++ b/_layouts/default.html @@ -1,7 +1,7 @@ diff --git a/_sass/basically-basic.scss b/_sass/basically-basic.scss index f192919..cf7ea0c 100644 --- a/_sass/basically-basic.scss +++ b/_sass/basically-basic.scss @@ -1,6 +1,6 @@ /*! - * Basically Basic Jekyll Theme 1.1.3 - * Copyright 2017 Michael Rose - mademistakes | @mmistakes + * Basically Basic Jekyll Theme 1.2.0 + * Copyright 2017-2018 Michael Rose - mademistakes | @mmistakes * Free for personal and commercial use under the MIT license * https://github.com/mmistakes/jekyll-theme-basically-basic/blob/master/LICENSE.md */ diff --git a/assets/javascripts/main.js b/assets/javascripts/main.js index a85d5f1..8303e81 100644 --- a/assets/javascripts/main.js +++ b/assets/javascripts/main.js @@ -2,8 +2,8 @@ --- /*! - * Basically Basic Jekyll Theme 1.1.3 - * Copyright 2017 Michael Rose - mademistakes | @mmistakes + * Basically Basic Jekyll Theme 1.2.0 + * Copyright 2017-2018 Michael Rose - mademistakes | @mmistakes * Free for personal and commercial use under the MIT license * https://github.com/mmistakes/jekyll-basically-theme/blob/master/LICENSE.md */ diff --git a/jekyll-theme-basically-basic.gemspec b/jekyll-theme-basically-basic.gemspec index 2f459b1..f489508 100644 --- a/jekyll-theme-basically-basic.gemspec +++ b/jekyll-theme-basically-basic.gemspec @@ -2,7 +2,7 @@ Gem::Specification.new do |spec| spec.name = "jekyll-theme-basically-basic" - spec.version = "1.1.3" + spec.version = "1.2.0" spec.authors = ["Michael Rose"] spec.summary = %q{Your new Jekyll default theme.} From 8f5065f47a295afc5e4070dfcfd55e590259bf89 Mon Sep 17 00:00:00 2001 From: Michael Rose Date: Fri, 5 Jan 2018 15:19:02 -0500 Subject: [PATCH 153/245] Revise CHANGELOG --- CHANGELOG.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c4ec6d..39ac144 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,8 +7,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [1.2.0] - 2018-01-05 -### Changed +### Added - Use [jekyll-remote-theme](https://github.com/benbalter/jekyll-remote-theme) for demo site. + +### Changed - Update GitHub Pages compatible installation instructions to include jekyll-remote-theme method. - Update `site.gems` references to `site.plugins`. [#39](https://github.com/mmistakes/jekyll-theme-basically-basic/pull/39) - Update license and copyright. From 3ae9bce57f87c4e0fba3f585550da04d494dd92e Mon Sep 17 00:00:00 2001 From: Michael Rose Date: Sat, 6 Jan 2018 21:23:29 -0500 Subject: [PATCH 154/245] Update installation and upgrade instructions --- CHANGELOG.md | 5 ++ README.md | 195 +++++++++++++++++++++++++++++++++++---------------- 2 files changed, 138 insertions(+), 62 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c4ec6d..f3f4867 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). +## Unreleased + +### Changed +- New installation and upgrade instructions. + ## [1.2.0] - 2018-01-05 ### Changed diff --git a/README.md b/README.md index b060fb1..f8eb22a 100644 --- a/README.md +++ b/README.md @@ -22,90 +22,89 @@ with a few enhancements thrown in for good measure: ## Table of Contents 1. [Installation](#installation) - 1. [Ruby Gem Method](#ruby-gem-method) - 2. [GitHub Pages Method](#github-pages-method) - 1. [Remove the Unnecessary](#remove-the-unnecessary) -2. [Structure](#structure) - 1. [Starting Fresh](#starting-fresh) - 2. [Starting from jekyll new](#starting-from-jekyll-new) -3. [Configuration](#configuration) - 1. [Skin](#skin) - 2. [Google Fonts](#google-fonts) - 3. [Text](#text) - 4. [Navigation](#navigation) - 5. [Pagination](#pagination) - 6. [Author](#author) - 7. [Reading Time](#reading-time) - 8. [Comments (via Disqus)](#comments-via-disqus) - 9. [Google Analytics](#google-analytics) -4. [Layouts](#layouts) - 1. [Default](#layout-default) - 2. [Post](#layout-post) - 3. [Page](#layout-page) - 4. [Home](#layout-home) - 5. [About](#layout-about) - 6. [Curriculum Vitæ/Resume](#layout-cv) -5. [Customization](#customization) - 1. [Overriding Includes and Layouts](#overriding-includes-and-layouts) - 2. [Customizing Sass (SCSS)](#customizing-sass-scss) - 3. [Customizing JavaScript](#customizing-javascript) - 4. [SVG Icons](#svg-icons) - 5. [Customizing Sidebar Content](#customizing-sidebar-content) -6. [Development](#development) -7. [Contributing](#contributing) - 1. [Pull Requests](#pull-requests) -8. [Credits](#credits) + 1. [Ruby Gem Method](#ruby-gem-method) + 2. [GitHub Pages Method](#github-pages-method) + 1. [Remove the Unnecessary](#remove-the-unnecessary) +2. [Upgrading](#upgrading) +3. [Ruby Gem](#ruby-gem) +4. [Remote Theme](#remote-theme) +5. [Use Git](#use-git) + 1. [Pull Down Updates](#pull-down-updates) +6. [Update Files Manually](#update-files-manually) +7. [Structure](#structure) + 1. [Starting Fresh](#starting-fresh) + 2. [Starting from `jekyll new`](#starting-from-jekyll-new) +8. [Configuration](#configuration) + 1. [Skin](#skin) + 2. [Google Fonts](#google-fonts) + 3. [Text](#text) + 4. [Navigation](#navigation) + 5. [Pagination](#pagination) + 6. [Author](#author) + 7. [Reading Time](#reading-time) + 8. [Comments (via Disqus)](#comments-via-disqus) + 9. [Google Analytics](#google-analytics) +9. [Layouts](#layouts) + 1. [`layout: default`](#layout-default) + 2. [`layout: post`](#layout-post) + 3. [`layout: page`](#layout-page) + 4. [`layout: home`](#layout-home) + 5. [`layout: about`](#layout-about) + 6. [`layout: cv`](#layout-cv) +10. [Customization](#customization) + 1. [Overriding Includes and Layouts](#overriding-includes-and-layouts) + 2. [Customizing Sass (SCSS)](#customizing-sass-scss) + 3. [Customizing JavaScript](#customizing-javascript) + 4. [SVG Icons](#svg-icons) + 5. [Customizing Sidebar Content](#customizing-sidebar-content) +11. [Development](#development) +12. [Contributing](#contributing) + 1. [Pull Requests](#pull-requests) +13. [Credits](#credits) + 1. [Creator](#creator) + 2. [Icons + Demo Images:](#icons--demo-images) + 3. [Other:](#other) +14. [License](#license) ## Installation -If you're running Jekyll v3.3+ and self-hosting you can quickly install the -theme as Ruby gem. If you're hosting with GitHub Pages you'll have to use the -"repo fork" method or directly copy all of the theme files (see +If you're running Jekyll v3.5+ and self-hosting you can quickly install the theme as a Ruby gem. If you're hosting with GitHub Pages you can install as a remote theme or directly copy all of the theme files (see [structure](#structure) below) into your project. ### Ruby Gem Method -1. Install the theme as a Ruby Gem by adding it to your `Gemfile` like so: +1. Add this line to your Jekyll site's `Gemfile`: ```ruby gem "jekyll-theme-basically-basic" ``` - -2. Fetch and update your bundled gems by running the following - [Bundler](http://bundler.io/) command: - - ```bash - bundle - ``` - -3. Set the `theme` in your project's Jekyll configuration, `_config.yml`: +2. Add this line to your Jekyll site's `_config.yml` file: ```yaml theme: jekyll-theme-basically-basic ``` +2. Then run [Bundler](http://bundler.io/) to install the theme gem and dependencies: + + ```terminal + bundle install + ``` + ### GitHub Pages Method -If you're hosting with GitHub Pages follow these steps instead: +GitHub Pages has added [full support](https://github.com/blog/2464-use-any-theme-with-github-pages) for any GitHub-hosted theme. -Replace `gem "jekyll"` with: +1. Replace `gem "jekyll"` with: -```ruby -gem "github-pages", group: :jekyll_plugins -``` + ```ruby + gem "github-pages", group: :jekyll_plugins + ``` -Run `bundle update` and verify that all gems install properly. +2. Run `bundle update` and verify that all gems install properly. -Add `remote_theme: "mmistakes/jekyll-theme-basically-basic"` to your `_config.yml` file. +3. Add `remote_theme: "mmistakes/jekyll-theme-basically-basic"` to your `_config.yml` file. Remove any other `theme:` or `remote_theme:` entries. -Then add [`jekyll-remote-theme`](https://github.com/benbalter/jekyll-remote-theme) to the `plugins` (previously gems) array in your `_config.yml` file like so: - -```yaml -plugins: - - jekyll-remote-theme -``` - -Remove any other `theme:` or `remote_theme:` entry. +--- **Note:** Your Jekyll site should be viewable immediately at . If it's not, you can force a rebuild by **Customizing Your Site** (see below for more details). @@ -130,6 +129,78 @@ safely remove the following files and folders: - `/docs` - `/example` +## Upgrading + +If you're using the Ruby Gem or remote theme versions of Basically Basic, upgrading is fairly painless. + +To check which version you are currently using, view the source of your built site and you should something similar to: + +``` + +``` + +At the top of every `.html` file, `/assets/css/main.css`, and `/assets/js/main.js`. + +## Ruby Gem + +Simply run `bundle update` if you're using Bundler (have a `Gemfile`) or `gem update jekyll-theme-basically-basic` if you're not. + +## Remote Theme + +When hosting with GitHub Pages you'll need to push up a commit to force a rebuild with the latest [theme release](https://github.com/mmistakes/jekyll-theme-basically-basic/releases). + +An empty commit will get the job done too if you don't have anything to push at the moment: + +```terminal +git commit --allow-empty -m "Force rebuild of site" +``` + +## Use Git + +If you want to get the most out of the Jekyll + GitHub Pages workflow, then you'll need to utilize Git. To pull down theme updates you must first ensure there's an upstream remote. If you forked the theme's repo then you're likely good to go. + +To double check, run `git remote -v` and verify that you can fetch from `origin https://github.com/mmistakes/jekyll-theme-basically-basic.git`. + +To add it you can do the following: + +```terminal +git remote add upstream https://github.com/mmistakes/jekyll-theme-basically-basic.git +``` + +### Pull Down Updates + +Now you can pull any commits made to theme's `master` branch with: + +```terminal +git pull upstream master +``` + +Depending on the amount of customizations you've made after forking, there's likely to be merge conflicts. Work through any conflicting files Git flags, staging the changes you wish to keep, and then commit them. + +## Update Files Manually + +Another way of dealing with updates is [downloading the theme](https://github.com/mmistakes/jekyll-theme-basically-basic/archive/master.zip) --- replacing your layouts, includes, and assets with the newer ones manually. To be sure that you don't miss any changes it's probably a good idea to review the theme's [commit history](https://github.com/mmistakes/jekyll-theme-basically-basic/commits/master) to see what's changed since. + +Here's a quick checklist of the important folders/files you'll want to be mindful of: + +| Name | | +| ---- | --- | +| `_layouts` | Replace all. Apply edits if you customized any layouts. | +| `_includes` | Replace all. Apply edits if you customized any includes. | +| `assets` | Replace all. Apply edits if you customized stylesheets or scripts. | +| `_sass` | Replace all. Apply edits if you customized Sass partials. | +| `_data/theme.yml` | Safe to keep. Verify that there were no major structural changes or additions. | +| `_config.yml` | Safe to keep. Verify that there were no major structural changes or additions. | + +--- + +**Note:** If you're not seeing the latest version, be sure to flush browser and CDN caches. Depending on your hosting environment older versions of `/assets/css/main.css`, `/assets/js/main.min.js`, or `*.html` may be cached. + ## Structure Layouts, includes, Sass partials, and data files are all placed in their default @@ -140,7 +211,7 @@ files in the project's root directory. files found in `/_layouts`, `/_includes`, `/_sass`, and `/assets` will be missing. This is normal as they are bundled with the [`jekyll-theme-basically-basic`](https://rubygems.org/gems/jekyll-theme-basically-basic) gem. -```bash +```terminal jekyll-theme-basically-basic ├── _data # data files | └── theme.yml # theme settings and custom text From d91d0023f6ca4cf104009d9e67bcbc3868387fc1 Mon Sep 17 00:00:00 2001 From: Michael Rose Date: Sat, 6 Jan 2018 21:25:07 -0500 Subject: [PATCH 155/245] Remove .min --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f8eb22a..43dd3a9 100644 --- a/README.md +++ b/README.md @@ -199,7 +199,7 @@ Here's a quick checklist of the important folders/files you'll want to be mindfu --- -**Note:** If you're not seeing the latest version, be sure to flush browser and CDN caches. Depending on your hosting environment older versions of `/assets/css/main.css`, `/assets/js/main.min.js`, or `*.html` may be cached. +**Note:** If you're not seeing the latest version, be sure to flush browser and CDN caches. Depending on your hosting environment older versions of `/assets/css/main.css`, `/assets/js/main.js`, or `*.html` may be cached. ## Structure From f7bd7fd6360151976f70182c35495dcdd1ff8f2f Mon Sep 17 00:00:00 2001 From: Michael Rose Date: Sat, 6 Jan 2018 21:31:51 -0500 Subject: [PATCH 156/245] Adjust formatting --- README.md | 70 ++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 48 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 43dd3a9..f27312a 100644 --- a/README.md +++ b/README.md @@ -68,8 +68,10 @@ with a few enhancements thrown in for good measure: ## Installation -If you're running Jekyll v3.5+ and self-hosting you can quickly install the theme as a Ruby gem. If you're hosting with GitHub Pages you can install as a remote theme or directly copy all of the theme files (see -[structure](#structure) below) into your project. +If you're running Jekyll v3.5+ and self-hosting you can quickly install the +theme as a Ruby gem. If you're hosting with GitHub Pages you can install as a +remote theme or directly copy all of the theme files (see [structure](#structure) +below) into your project. ### Ruby Gem Method @@ -92,7 +94,8 @@ If you're running Jekyll v3.5+ and self-hosting you can quickly install the them ### GitHub Pages Method -GitHub Pages has added [full support](https://github.com/blog/2464-use-any-theme-with-github-pages) for any GitHub-hosted theme. +GitHub Pages has added [full support](https://github.com/blog/2464-use-any-theme-with-github-pages) +for any GitHub-hosted theme. 1. Replace `gem "jekyll"` with: @@ -102,13 +105,20 @@ GitHub Pages has added [full support](https://github.com/blog/2464-use-any-theme 2. Run `bundle update` and verify that all gems install properly. -3. Add `remote_theme: "mmistakes/jekyll-theme-basically-basic"` to your `_config.yml` file. Remove any other `theme:` or `remote_theme:` entries. +3. Add `remote_theme: "mmistakes/jekyll-theme-basically-basic"` to your + `_config.yml` file. Remove any other `theme:` or `remote_theme:` entries. --- -**Note:** Your Jekyll site should be viewable immediately at . If it's not, you can force a rebuild by **Customizing Your Site** (see below for more details). +**Note:** Your Jekyll site should be viewable immediately at +. If it's not, you can force a rebuild by +**Customizing Your Site** (see below for more details). -If you're hosting several Jekyll based sites under the same GitHub username you will have to use Project Pages instead of User Pages. Essentially you rename the repo to something other than **USERNAME.github.io** and create a `gh-pages` branch off of `master`. For more details on how to set things up check [GitHub's documentation](https://help.github.com/articles/user-organization-and-project-pages/). +If you're hosting several Jekyll based sites under the same GitHub username you +will have to use Project Pages instead of User Pages. Essentially you rename the +repo to something other than **USERNAME.github.io** and create a `gh-pages` +branch off of `master`. For more details on how to set things up check +[GitHub's documentation](https://help.github.com/articles/user-organization-and-project-pages/). #### Remove the Unnecessary @@ -131,9 +141,11 @@ safely remove the following files and folders: ## Upgrading -If you're using the Ruby Gem or remote theme versions of Basically Basic, upgrading is fairly painless. +If you're using the Ruby Gem or remote theme versions of Basically Basic, +upgrading is fairly painless. -To check which version you are currently using, view the source of your built site and you should something similar to: +To check which version you are currently using, view the source of your built +site and you should something similar to: ``` + + + + + diff --git a/_includes/search/lunr-search-scripts.html b/_includes/search/lunr-search-scripts.html new file mode 100644 index 0000000..30e9d42 --- /dev/null +++ b/_includes/search/lunr-search-scripts.html @@ -0,0 +1,106 @@ +{%- assign lang = site.lang | slice: 0, 2 | default: "en" -%} + {%- case lang -%} + {%- when "da" -%} + {%- assign lang = "da" -%} + {%- when "de" -%} + {%- assign lang = "de" -%} + {%- when "du" -%} + {%- assign lang = "du" -%} + {-% when "es" -%} + {%- assign lang = "es" -%} + {%- when "fi" -%} + {%- assign lang = "fi" -%} + {%- when "fr" -%} + {%- assign lang = "fr" -%} + {%- when "hu" -%} + {%- assign lang = "hu" -%} + {%- when "it" -%} + {%- assign lang = "it" -%} + {%- when "ja" -%} + {%- assign lang = "ja" -%} + {%- when "jp" -%} + {%- assign lang = "jp" -%} + {%- when "no" -%} + {%- assign lang = "no" -%} + {%- when "pt" -%} + {%- assign lang = "pt" -%} + {%- when "ro" -%} + {%- assign lang = "ro" -%} + {%- when "ru" -%} + {%- assign lang = "ru" -%} + {%- when "sv" -%} + {%- assign lang = "sv" -%} + {%- when "tr" -%} + {%- assign lang = "tr" -%} + {%- else -%} + {%- assign lang = "en" -%} + {%- endcase -%} + + + {%- unless lang == "en" -%} + + + {%- endunless %} + diff --git a/_layouts/default.html b/_layouts/default.html index 4f7c575..f0026b6 100644 --- a/_layouts/default.html +++ b/_layouts/default.html @@ -13,9 +13,18 @@ {% include skip-links.html %}
diff --git a/docs/_layouts/page.html b/docs/_layouts/page.html new file mode 100644 index 0000000..65636da --- /dev/null +++ b/docs/_layouts/page.html @@ -0,0 +1,22 @@ +--- +layout: default +--- + +{% include page-intro.html %} + +
+
+
+
+ {{ content }} +
+
+ +
+
+
+
diff --git a/docs/_layouts/post.html b/docs/_layouts/post.html new file mode 100644 index 0000000..e1fa2be --- /dev/null +++ b/docs/_layouts/post.html @@ -0,0 +1,25 @@ +--- +layout: default +--- + +{% include page-intro.html %} + +
+
+
+
+ {{ content }} +
+
+ +
+ {% if site.disqus.shortname %} + {% include disqus_comments.html %} + {% endif %} +
+
+
From af997d95126bdf19b7cd51065eb6b3b97cf8e445 Mon Sep 17 00:00:00 2001 From: Michael Rose Date: Mon, 7 Jun 2021 16:53:45 -0400 Subject: [PATCH 229/245] Center ad --- docs/_layouts/default.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_layouts/default.html b/docs/_layouts/default.html index 220c8d8..3cd4f3c 100644 --- a/docs/_layouts/default.html +++ b/docs/_layouts/default.html @@ -49,7 +49,7 @@ -
+
Date: Sat, 19 Jun 2021 12:28:39 -0400 Subject: [PATCH 230/245] Update FUNDING.yml --- .github/FUNDING.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 702c8c6..72c3cf2 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,3 +1,2 @@ github: mmistakes -ko_fi: mmistakes -custom: ['https://www.buymeacoffee.com/mmistakes', 'https://www.paypal.me/mmistakes', 'https://cash.app/$mmistakes'] +custom: ['https://www.paypal.me/mmistakes'] From 11a1163b23850478b849303e8cfbb50efe049299 Mon Sep 17 00:00:00 2001 From: Carsten Wiesbaum Date: Mon, 5 Jul 2021 23:05:49 +0200 Subject: [PATCH 231/245] _data/theme.yml: - Added configuration CV substitutions _includes/cv/*.html: - Added theme substitutions --- _data/theme.yml | 15 +++++++++++++++ _includes/cv/awards.html | 2 +- _includes/cv/basics.html | 10 +++++----- _includes/cv/education.html | 4 ++-- _includes/cv/interests.html | 2 +- _includes/cv/languages.html | 2 +- _includes/cv/publications.html | 2 +- _includes/cv/references.html | 2 +- _includes/cv/skills.html | 2 +- _includes/cv/volunteer.html | 2 +- _includes/cv/work.html | 2 +- 11 files changed, 30 insertions(+), 15 deletions(-) diff --git a/_data/theme.yml b/_data/theme.yml index e23250b..484bd34 100644 --- a/_data/theme.yml +++ b/_data/theme.yml @@ -23,6 +23,21 @@ t: of: "of" min_read: "min read" present: "Present" + cv_awards: "Awards" + cv_summary_contact: "Contact" + cv_summary_contact_email: "Email" + cv_summary_contact_phone: "Phone" + cv_summary_contact_website: "Website" + cv_location: "Location" + cv_education: "Education" + cv_education_courses: "Courses" + cv_interests: "Interests" + cv_languages: "Languages" + cv_publications: "Publications" + cv_references: "References" + cv_skills: "Skills" + cv_volunteer: "Volunteer" + cv_work: "Work" # Google Fonts google_fonts: diff --git a/_includes/cv/awards.html b/_includes/cv/awards.html index 81cc13a..3b34e6b 100644 --- a/_includes/cv/awards.html +++ b/_includes/cv/awards.html @@ -1,7 +1,7 @@ {% if cv.awards %}
-

Awards

+

{{ site.data.theme.t.cv_awards | default: 'Awards' }}

diff --git a/_includes/cv/basics.html b/_includes/cv/basics.html index b40f698..d704e25 100644 --- a/_includes/cv/basics.html +++ b/_includes/cv/basics.html @@ -6,18 +6,18 @@
-

Contact

+

{{ site.data.theme.t.cv_summary_contact | default: 'Contact' }}

{% if cv.basics.email %} - + {% endif %} {% if cv.basics.phone %} -
Phone {{ cv.basics.phone }}
+
{{ site.data.theme.t.cv_summary_contact_phone | default: 'Phone' }} {{ cv.basics.phone }}
{% endif %} {% if cv.basics.website %} - +
{{ site.data.theme.t.cv_summary_contact_website | default: 'Website' }} {{ cv.basics.website }}
{% endif %} {% if cv.basics.profiles %} {% for p in cv.basics.profiles %} @@ -43,7 +43,7 @@ {% if cv.basics.location %}
-

Location

+

{{ site.data.theme.t.cv_location | default: 'Location' }}

diff --git a/_includes/cv/education.html b/_includes/cv/education.html index df56572..428e3ca 100644 --- a/_includes/cv/education.html +++ b/_includes/cv/education.html @@ -1,7 +1,7 @@ {% if cv.education %}
-

Education

+

{{ site.data.theme.t.cv_education | default: 'Education' }}

@@ -23,7 +23,7 @@
{{ e.area }}{% if e.studyType %}{{ e.studyType | prepend: ', ' }}{% endif %}{% if e.gpa %}{{ e.gpa | prepend: ' (' | append: ' GPA)' }}{% endif %}
{% endif %} {% if e.courses %} -
Courses
+
{{ site.data.theme.t.cv_education_courses | default: 'Courses' }}
    {% for course in e.courses %}
  • {{ course }}
  • diff --git a/_includes/cv/interests.html b/_includes/cv/interests.html index 692ecf2..c2d7e80 100644 --- a/_includes/cv/interests.html +++ b/_includes/cv/interests.html @@ -1,7 +1,7 @@ {% if cv.interests %}
    -

    Interests

    +

    {{ site.data.theme.t.cv_interests | default: 'Interests' }}

    diff --git a/_includes/cv/languages.html b/_includes/cv/languages.html index 19dc3d4..94207c0 100644 --- a/_includes/cv/languages.html +++ b/_includes/cv/languages.html @@ -1,7 +1,7 @@ {% if cv.languages %}
    -

    Languages

    +

    {{ site.data.theme.t.cv_languages | default: 'Languages' }}

    diff --git a/_includes/cv/publications.html b/_includes/cv/publications.html index e1813bb..d81d07e 100644 --- a/_includes/cv/publications.html +++ b/_includes/cv/publications.html @@ -1,7 +1,7 @@ {% if cv.publications %}
    -

    Publications

    +

    {{ site.data.theme.t.cv_publications | default: 'Publications' }}

    diff --git a/_includes/cv/references.html b/_includes/cv/references.html index df3dc4c..29ad9a2 100644 --- a/_includes/cv/references.html +++ b/_includes/cv/references.html @@ -1,7 +1,7 @@ {% if cv.references %}
    -

    References

    +

    {{ site.data.theme.t.cv_references | default: 'References' }}

    diff --git a/_includes/cv/skills.html b/_includes/cv/skills.html index 38ec84d..1504ae4 100644 --- a/_includes/cv/skills.html +++ b/_includes/cv/skills.html @@ -1,7 +1,7 @@ {% if cv.skills %}
    -

    Skills

    +

    {{ site.data.theme.t.cv_skills | default: 'Skills' }}

    diff --git a/_includes/cv/volunteer.html b/_includes/cv/volunteer.html index 5a2d030..5e9b4c3 100644 --- a/_includes/cv/volunteer.html +++ b/_includes/cv/volunteer.html @@ -1,7 +1,7 @@ {% if cv.volunteer %}
    -

    Volunteer

    +

    {{ site.data.theme.t.cv_volunteer | default: 'Volunteer' }}

    diff --git a/_includes/cv/work.html b/_includes/cv/work.html index cffb968..bb1f79c 100644 --- a/_includes/cv/work.html +++ b/_includes/cv/work.html @@ -1,7 +1,7 @@ {% if cv.work %}
    -

    Work

    +

    {{ site.data.theme.t.cv_work | default: 'Work' }}

    From 9bf8bee149d0b72ae4418dfcd785c658a9a5ada2 Mon Sep 17 00:00:00 2001 From: Jimit Dholakia Date: Tue, 6 Jul 2021 05:57:57 +0530 Subject: [PATCH 232/245] Display 'Posts' header only if the site has posts (#144) --- _layouts/home.html | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/_layouts/home.html b/_layouts/home.html index e40c4bf..e6e2577 100644 --- a/_layouts/home.html +++ b/_layouts/home.html @@ -7,22 +7,25 @@ layout: default
    {{ content }}
    - -
    -
    -

    {{ site.data.theme.t.posts | default: 'Posts' }}{% if paginator.page > 1 %}{{ site.data.theme.t.page | default: 'Page' | prepend: ' - ' | append: ' ' }}{{ paginator.page }} {{ site.data.theme.t.of | default: 'of' }} {{ paginator.total_pages }}{% endif %}

    -
    -
    - {% if site.plugins contains 'jekyll-paginate' and page.paginate or site.gems contains 'jekyll-paginate' and page.paginate %} - {% comment %} - Add paginator.posts loop if jekyll-paginate plugin is enabled - and page.paginate == true - {% endcomment %} - {% include posts-paginated.html %} - {% else %} - {% include posts-all.html %} - {% endif %} -
    -
    + + {% if site.posts.size > 0 %} +
    +
    +

    {{ site.data.theme.t.posts | default: 'Posts' }}{% if paginator.page > 1 %}{{ site.data.theme.t.page | default: 'Page' | prepend: ' - ' | append: ' ' }}{{ paginator.page }} {{ site.data.theme.t.of | default: 'of' }} {{ paginator.total_pages }}{% endif %}

    +
    +
    + {% if site.plugins contains 'jekyll-paginate' and page.paginate or site.gems contains 'jekyll-paginate' and page.paginate %} + {% comment %} + Add paginator.posts loop if jekyll-paginate plugin is enabled + and page.paginate == true + {% endcomment %} + {% include posts-paginated.html %} + {% else %} + {% include posts-all.html %} + {% endif %} +
    +
    + {% endif %} +
    From 3f44ee73b40e8cdd59b5efb673f262608be43303 Mon Sep 17 00:00:00 2001 From: Michael Rose Date: Mon, 5 Jul 2021 20:29:47 -0400 Subject: [PATCH 233/245] Update CHANGELOG --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ca8e04..830db06 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] - +## Added +- Display 'Posts' header only if the site has posts. [#144](https://github.com/mmistakes/jekyll-theme-basically-basic/pull/144) + ### Fixed - Fix to use current `bundle info` syntax. [#127](https://github.com/mmistakes/jekyll-theme-basically-basic/pull/127) - Add `relative_url` filter to author profile image. [#125](https://github.com/mmistakes/jekyll-theme-basically-basic/issues/125) From 63937e66a209da1633f43535401e487e0271867f Mon Sep 17 00:00:00 2001 From: Michael Rose Date: Mon, 5 Jul 2021 20:35:42 -0400 Subject: [PATCH 234/245] Add new CV translation keys --- README.md | 15 +++++++++++++++ docs/_data/theme.yml | 15 +++++++++++++++ example/_data/theme.yml | 15 +++++++++++++++ 3 files changed, 45 insertions(+) diff --git a/README.md b/README.md index ada507b..32a5416 100644 --- a/README.md +++ b/README.md @@ -314,6 +314,21 @@ t: of: "of" min_read: "min read" present: "Present" + cv_awards: "Awards" + cv_summary_contact: "Contact" + cv_summary_contact_email: "Email" + cv_summary_contact_phone: "Phone" + cv_summary_contact_website: "Website" + cv_location: "Location" + cv_education: "Education" + cv_education_courses: "Courses" + cv_interests: "Interests" + cv_languages: "Languages" + cv_publications: "Publications" + cv_references: "References" + cv_skills: "Skills" + cv_volunteer: "Volunteer" + cv_work: "Work" ``` ### Navigation diff --git a/docs/_data/theme.yml b/docs/_data/theme.yml index 00f878c..00e734b 100644 --- a/docs/_data/theme.yml +++ b/docs/_data/theme.yml @@ -22,6 +22,21 @@ t: of: "of" min_read: "min read" present: "Present" + cv_awards: "Awards" + cv_summary_contact: "Contact" + cv_summary_contact_email: "Email" + cv_summary_contact_phone: "Phone" + cv_summary_contact_website: "Website" + cv_location: "Location" + cv_education: "Education" + cv_education_courses: "Courses" + cv_interests: "Interests" + cv_languages: "Languages" + cv_publications: "Publications" + cv_references: "References" + cv_skills: "Skills" + cv_volunteer: "Volunteer" + cv_work: "Work" # Google Fonts google_fonts: diff --git a/example/_data/theme.yml b/example/_data/theme.yml index 5beaa2d..97cd662 100644 --- a/example/_data/theme.yml +++ b/example/_data/theme.yml @@ -19,6 +19,21 @@ t: of: "of" min_read: "min read" present: "Present" + cv_awards: "Awards" + cv_summary_contact: "Contact" + cv_summary_contact_email: "Email" + cv_summary_contact_phone: "Phone" + cv_summary_contact_website: "Website" + cv_location: "Location" + cv_education: "Education" + cv_education_courses: "Courses" + cv_interests: "Interests" + cv_languages: "Languages" + cv_publications: "Publications" + cv_references: "References" + cv_skills: "Skills" + cv_volunteer: "Volunteer" + cv_work: "Work" # Google Fonts google_fonts: From fc426fd280e895be2ea4125ff30201c9293c86cf Mon Sep 17 00:00:00 2001 From: Michael Rose Date: Mon, 5 Jul 2021 20:35:48 -0400 Subject: [PATCH 235/245] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 830db06..49de5f9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] - ## Added +- Add translation keys for CV layout. [#145](https://github.com/mmistakes/jekyll-theme-basically-basic/pull/145) - Display 'Posts' header only if the site has posts. [#144](https://github.com/mmistakes/jekyll-theme-basically-basic/pull/144) ### Fixed From 2d64c6f69f3428ca0ae3c4975b4d07c6414d91a7 Mon Sep 17 00:00:00 2001 From: Michael Rose Date: Mon, 5 Jul 2021 20:55:10 -0400 Subject: [PATCH 236/245] Add external image test post --- .../2012-03-12-layout-external-hero-image.md | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 example/_posts/2012-03-12-layout-external-hero-image.md diff --git a/example/_posts/2012-03-12-layout-external-hero-image.md b/example/_posts/2012-03-12-layout-external-hero-image.md new file mode 100644 index 0000000..b0f24df --- /dev/null +++ b/example/_posts/2012-03-12-layout-external-hero-image.md @@ -0,0 +1,28 @@ +--- +title: "Layout: External Hero Image" +image: + path: https://source.unsplash.com/random/1024x600 + thumbnail: https://source.unsplash.com/random/400x300 +categories: + - Layout +tags: + - content + - image + - layout +last_modified_at: 2017-03-17T10:46:49-04:00 +--- + +This post should display a large hero image at the top of a page. + +This post tests a horizontal image using the following YAML Front Matter: + +```yaml +image: https://source.unsplash.com/random/1024x600 +``` + +Hero images can also be assigned like this: + +```yaml +image: + path: https://source.unsplash.com/random/1024x600 +``` From ffd9d1b070238fb273a1e347b30ff7e415e393f2 Mon Sep 17 00:00:00 2001 From: Michael Rose Date: Mon, 5 Jul 2021 20:59:07 -0400 Subject: [PATCH 237/245] Simplify image assigns --- _includes/entry.html | 6 +----- _includes/masthead.html | 6 +----- _includes/page-intro.html | 6 +----- 3 files changed, 3 insertions(+), 15 deletions(-) diff --git a/_includes/entry.html b/_includes/entry.html index 1d5a4ca..77465ab 100644 --- a/_includes/entry.html +++ b/_includes/entry.html @@ -10,11 +10,7 @@ {{ title }} {% if post.image.thumbnail %} - {% assign entry_image = post.image.thumbnail %} - {% unless entry_image contains '://' %} - {% assign entry_image = entry_image | relative_url %} - {% endunless %} - {% assign entry_image = entry_image | escape %} + {% assign entry_image = post.image.thumbnail | relative_url | escape %} {% endif %} diff --git a/_includes/masthead.html b/_includes/masthead.html index 13954b9..ee4dcc0 100644 --- a/_includes/masthead.html +++ b/_includes/masthead.html @@ -1,8 +1,4 @@ -{% if site.logo contains '://' %} - {% assign site_logo = site.logo %} -{% else %} - {% assign site_logo = site.logo | relative_url %} -{% endif %} +{% assign site_logo = site.logo | relative_url %}
    diff --git a/_includes/page-intro.html b/_includes/page-intro.html index 4ed2333..e28b0db 100644 --- a/_includes/page-intro.html +++ b/_includes/page-intro.html @@ -1,10 +1,6 @@
    {% if page.image %} - {% assign intro_image = page.image.path | default: page.image %} - {% unless intro_image contains '://' %} - {% assign intro_image = intro_image | relative_url %} - {% endunless %} - {% assign intro_image = intro_image | escape %} + {% assign intro_image = page.image.path | default: page.image | relative_url | escape %}
    {{ page.title }}
    From 3eeba5f250f18592fe941ecd5b2aae4e66a379e3 Mon Sep 17 00:00:00 2001 From: Michael Rose Date: Mon, 5 Jul 2021 20:59:40 -0400 Subject: [PATCH 238/245] Update CHANGELOG --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 49de5f9..1a2d30f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Add translation keys for CV layout. [#145](https://github.com/mmistakes/jekyll-theme-basically-basic/pull/145) - Display 'Posts' header only if the site has posts. [#144](https://github.com/mmistakes/jekyll-theme-basically-basic/pull/144) +## Changed +- Simplified image assigns. ### Fixed - Fix to use current `bundle info` syntax. [#127](https://github.com/mmistakes/jekyll-theme-basically-basic/pull/127) - Add `relative_url` filter to author profile image. [#125](https://github.com/mmistakes/jekyll-theme-basically-basic/issues/125) From bea6859399411c9abd6fc8dd302360e5136a3bff Mon Sep 17 00:00:00 2001 From: Michael Rose Date: Mon, 5 Jul 2021 21:08:32 -0400 Subject: [PATCH 239/245] Improve remote theme upgrading documentation --- CHANGELOG.md | 3 ++- README.md | 16 +++++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a2d30f..16645ac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Display 'Posts' header only if the site has posts. [#144](https://github.com/mmistakes/jekyll-theme-basically-basic/pull/144) ## Changed -- Simplified image assigns. +- Improve remote theme upgrading documentation. +- Simplify image assigns. ### Fixed - Fix to use current `bundle info` syntax. [#127](https://github.com/mmistakes/jekyll-theme-basically-basic/pull/127) - Add `relative_url` filter to author profile image. [#125](https://github.com/mmistakes/jekyll-theme-basically-basic/issues/125) diff --git a/README.md b/README.md index 32a5416..59b8515 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ for any GitHub-hosted theme. 2. Run `bundle update` and verify that all gems install properly. -3. Add `remote_theme: "mmistakes/jekyll-theme-basically-basic"` to your +3. Add `remote_theme: "mmistakes/jekyll-theme-basically-basic@1.4.4"` to your `_config.yml` file. Remove any other `theme:` or `remote_theme:` entries. --- @@ -125,11 +125,17 @@ update jekyll-theme-basically-basic` if you're not. ### Remote Theme -When hosting with GitHub Pages you'll need to push up a commit to force a -rebuild with the latest [theme release](https://github.com/mmistakes/jekyll-theme-basically-basic/releases). +Verify you have the [latest version](https://github.com/mmistakes/jekyll-theme-basically-basic/releases) assigned in `_config.yml` -An empty commit will get the job done too if you don't have anything to push at -the moment: +``` +remote_theme: "mmistakes/jekyll-theme-basically-basic@1.4.4" +``` + +Note: If `@x.x.x` is omitted the theme's current `master` branch will be used. It is advised to ["lock" `remote_theme`](https://github.com/benbalter/jekyll-remote-theme#declaring-your-theme) at a specific version to avoid introducing breaking changes to your site. + +The next step requires rebuilding your [GitHub Pages](https://pages.github.com/) site so it can pull down the latest theme updates. This can be achieved by pushing up a commit to your GitHub repo. + +An empty commit will get the job done too if you don't have anything to push at the moment: ```terminal git commit --allow-empty -m "Force rebuild of site" From 8d2eeddc4b09935d0897f33a372347206446ab27 Mon Sep 17 00:00:00 2001 From: Michael Rose Date: Mon, 5 Jul 2021 21:10:48 -0400 Subject: [PATCH 240/245] Add test post to demo site --- .../2012-03-12-layout-external-hero-image.md | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 docs/_posts/2012-03-12-layout-external-hero-image.md diff --git a/docs/_posts/2012-03-12-layout-external-hero-image.md b/docs/_posts/2012-03-12-layout-external-hero-image.md new file mode 100644 index 0000000..b0f24df --- /dev/null +++ b/docs/_posts/2012-03-12-layout-external-hero-image.md @@ -0,0 +1,28 @@ +--- +title: "Layout: External Hero Image" +image: + path: https://source.unsplash.com/random/1024x600 + thumbnail: https://source.unsplash.com/random/400x300 +categories: + - Layout +tags: + - content + - image + - layout +last_modified_at: 2017-03-17T10:46:49-04:00 +--- + +This post should display a large hero image at the top of a page. + +This post tests a horizontal image using the following YAML Front Matter: + +```yaml +image: https://source.unsplash.com/random/1024x600 +``` + +Hero images can also be assigned like this: + +```yaml +image: + path: https://source.unsplash.com/random/1024x600 +``` From a26f3d2b36d6839b446235985d3dc5b2ceaa2cfe Mon Sep 17 00:00:00 2001 From: Michael Rose Date: Mon, 5 Jul 2021 21:11:46 -0400 Subject: [PATCH 241/245] Update copyright year --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index f320c45..6043324 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2017-2018 Michael Rose and contributors +Copyright (c) 2017-2021 Michael Rose and contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From 91bb96f6ced801f452caa90b97dcc2fbd236548c Mon Sep 17 00:00:00 2001 From: Michael Rose Date: Mon, 5 Jul 2021 21:11:53 -0400 Subject: [PATCH 242/245] Update copyright year --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 59b8515..a637dff 100644 --- a/README.md +++ b/README.md @@ -954,7 +954,7 @@ grammar, etc. The MIT License (MIT) -Copyright (c) 2017-2018 Michael Rose and contributors +Copyright (c) 2017-2021 Michael Rose and contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From 8a65981de1279d838dd0605fedbd2a7350842559 Mon Sep 17 00:00:00 2001 From: Michael Rose Date: Mon, 5 Jul 2021 21:13:37 -0400 Subject: [PATCH 243/245] =?UTF-8?q?Release=201.4.5=20=F0=9F=92=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 2 +- README.md | 6 +++--- _layouts/default.html | 2 +- _sass/basically-basic.scss | 2 +- assets/javascripts/main.js | 2 +- docs/_layouts/default.html | 2 +- jekyll-theme-basically-basic.gemspec | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 16645ac..3dc13c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). -## [Unreleased] - +## [1.4.5] - 2021-07-05 ## Added - Add translation keys for CV layout. [#145](https://github.com/mmistakes/jekyll-theme-basically-basic/pull/145) diff --git a/README.md b/README.md index a637dff..f0d12ba 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ for any GitHub-hosted theme. 2. Run `bundle update` and verify that all gems install properly. -3. Add `remote_theme: "mmistakes/jekyll-theme-basically-basic@1.4.4"` to your +3. Add `remote_theme: "mmistakes/jekyll-theme-basically-basic@1.4.5"` to your `_config.yml` file. Remove any other `theme:` or `remote_theme:` entries. --- @@ -109,7 +109,7 @@ site and you should something similar to: ```

z-5ScZY61N_Ssky^2^C_C=}=KwNMxayELByD}- zQ#g!c)Nk_!;mQ}W{CmrxTit5o?zqfq>;C{IZ#-x7HNUYje*XZ>67fYb@Wd6adF?Rx z^dveGu^9bB*LnR8iEbX<2FJ{H&orK69ca4SbpaVos(vBn*ollxl^nTiXS_ATOTQ88 zH(l%-#l=u4P;l#Kh_I2ddyS=N|A-@?`6POj>Qc#6qZ~0o=}B$eP9k zltztJ$&5YaP*6|{zU#bkjkc1a_%8$6s@nTYG>dtXjgN_-;b&oV zcrP)o90znwW1jhiGgI$fu|x$ZApwG~w-I9Hs`705mX-q{I|Oi8 zi{c3Dz5GSChLRg$dk=2pClFa{hOsG1s}DagFcer_{otFvtnA9L1YlPyWYbVJY-skD z>R%7-iLiGdR47z9vvo0t$Nox(XzDTa4a0_HL7BI_Y~T8T?eXF(`^541nd1*>i`fG| z)E&pZ_cFXqpFlzt3L?fa{c-90&>VHwhHMx%%LH2rw|v}W;k&K37EwemI=R4BFJn-N zXa)8IHyKslJ*PEG&b0(GGu>WYE0x0ryY z8C!>AQKp;?Q(cJe{wQaEcuj-_tXS}0#CZ#aF8s@>6%AnM7ZO2{z_r_=5`r)}Pxm1j zDZ;2OgPPhFzCsAuWs@{>9BNT3Lq~NQG9kiWbygsar0Rl#``SRu8BYyt$X3S_6X^Px zbBRCPb!7~7ox8=%h%DQ;G-bqJ^y%R-GV_QUg*2Qqz+PR#>+&UCic%Zc#K|2m5Zbb@ zHgOe}P+0?<(`~AT9w-GJa51 zu!k^=S;R>9E|P#mYi{8FKv_$R@GBC6r3v|yh(0(hQcxm1-_QkU-w*-7D^8d3b@2ikHoFO;5p`0N>Q%-RKS*0UuRITrVdfn zumhMXB2fF9VFV6C;#}foe|XoUQ}>sLK%V)EPBZNDGAi4oJ}B$jq0sg(D~JjyLI=OJ z3JsK=){)dQ-MEy055IBbbkezRW5L3?0Qo>M+fK zjW^|j4m+`~FUqr5;w9bCu@^XKQ|lV@m0DSbUxI0(KG}!@M>wGClOaeuRO~J^w_xj( zYd-qsCd*t%fItTLhVke8CTdkT0s+n90KYE;8a-x)bkd2>JvsW--&La?8%eDQ5lho zM61Mb02&TrhJX!nlf(_#hL$$Onl5RYuRh#L=qQ8mrai)uQv@Q2Fj}2H*Z?GZ9fs;4;YuY^BJ1^&ELW3NOTBvbsSJu{e) z;bj$4fCvKCGsLH00&1_Y$KEY97VeK7rA!L}KuXNvQ%+@MTj81;o3E7$&R8rp=oN4) zv;;I7X-sd-ZH!gL)JL#^Aqa8{d<38URan+9xdbN_Rig}>avPZRveF1^q{9269wU(j zvAPeuO0-0f_nNPCFN@4uCt&y(hGgF!Luku87`b@5iyJKu^(qybf>sE+wRl8ah+cId zQZeAnV?LO3j64NyZlHEOhd?uSxmft4t^}NgLWE&}+!!jK!m=Zvja-g1Mh4-M!(axT z%d3|au!0jwgO`m?3=u`9RRJqyORr|6UfSa!hqTXFzgEZ$+IN6{p=eW(@AiaXvLG6) z0Da#8U?~?TgHQ|CBm>jMNaZ0zf zH}hoQ?o$fvJeZ8>kXt5}`|fEwWaR!;OA=7r&<63{WycDHD4EBag&-jfDQ+v41=FkR zgXU@l3RMOKIPuMQab4IWA~x6>{{XVFsLG%_yLXLHteRJl{vZV_C80JuGc1N%=HS7D zUOvRLphL(Fed6^djzVwk4@>ULzlEUC58f>4}ve{$~a4HIdzUL_RUx4cf8y}SFt z?cT{sX2#bsT00KG!4<-RqHoT7#XFit{7-Q~gtjZEs~exzjaF{d+VOQ79eJTUWp!BsI7 z$7L{lK-fQIGJv6_GZF$=VD=!#Wy#;fC|sO|sFXKFTgD2GCW=;K;H2;jx5U39GSft; z2?fU|XaGB}fh*P63~v7bq@_q)uB|<{D#tG3E1*2U3foZdcqf^J?YD1dv)PMlKw7QJ zuM|OQYgE2h#Cs}kqy^dL04Ns1wUUZ}VB1ByDE=4>>agypanXg%Y3~>>l5m9`g+Zld z+ku9W>j4`E&2b0yygOkG9RllDC`lx)<6wv7R|jdBvFkgA(hjS?5_ZM~q`SC7&@m2s zjX}-CS6SFF-Irw$TYcPn3wEpA_G!f3=vjcdZi~q{4(&N&10ZqXs-e7IcPNGLr4ln( zr(ue}fddwS7J`>iqu?7sfrSz`-VYE#byU$XQMf=RVySAX?OC#7W0WYlNvzr<=v)H8 zAhO!vOOPg;S3#T46P4lOEDqZ{us^W}s@A*WWQf(rg=&a{xkQ$PX!cSosl}$|rhs5W zcq@8$or2gBu1gau{{UprwN(ZcSongfqTSP)Ue7Vw&>wAl(NX<`+Q>@7#xXH0Ym9h3 z)x^5Qq2)Ar=3ji;$+)=-YN>tT8dCR6E~@bxYd2c)7Bn=o8a~|R=~BB+P4F_tb6PdtzgsIE90(!^XRLh1pu>{{X08=`_FH#lJ#A zR3&sjTVJ5#)wIZ)bT*c%2nN=*=L+6O9ip!bw)f9zeMJqr^DeW&LaREBOS~^}_lS^W z4Fx}$oSDjed_%^z$J?>uS`7dUtNlpzfM6RhcLpz*MznpQTmTK*3YMl8qmnCT*>dbL z1O@1`Yzl8Bm$oI1C>h8h8Z6ba;kmsNU4w#B8Nz{(90DL97`Q6O@h>0op@Qf$L}In- zTeqRz*ARHFjXdGWcZe+#P;s;d@!C?dilT+2wG?aGF*+bL9!zq^A#)ev9uH#|>zB_` zC)GI~QA)u=~p~R(58r$os%Pgxhbl3PcK8;vl%i4A|aI*|%yzV?5 zwsQ)-TmziEK(Bs%;h#4=k^BDub7s8>2voj>iy!cMpscpd;j#|3Y3u+0+KOQE9YADA51JV5A}1a9p7$}qvGm0BuL)d9FP zs?<7n0`4>#_bwa?0@PE$uU_#&yvl}NO5%C+vTU1W&jyM7=PU;cLR(|9W3lCEEVYfy zrzk0QaxZB>jcOP&ym1GINI)sNe8U*ZGF2Zkx(om@EM`h0x z+K;@ph`w+NIZ(YseiIs1VB8(bxKQ(H;R#x4a~9>hkz)0q4vLoOLJDsS345OGR0S!5 z%-fW4PVmJ?F(Re{smdHW&$HJkG9fW!$p_ow-zH!hfvM$2TRJxw@|>}R2Q6G0$lo+Z0TquYkt%mZ#gy3KpkFAVSqTEduXB9uxtpJ?As z%xIQ2L`%CtaWW4;h&5x3+q@OEo664RM3NT4bT+SPW1R+W*1v`x6<5y`Z66jl`2v&lD@6}lYj0~iqzZ8Hc#4`hV_kE97~8SyiMS81!2Sid2G1NN>w$E zGdOSKR}xX2RzH|$MXk8FIj%PIC=6X2W}GP*NmekBKB?)QdnEmdqvFvKCg z@OxCyG+aK=bCca#fCkGuS-*Iqi+Q^q(wqfUJ^+2;{Dmo7Ij@*Rwcd;>zI(*mnh@1CP$L@%28>yrmBlmoAsUH$np9RAvr?Tq3pCVb z-})jSw(e4Z(Qw^dcZtVhIHQSEh{7t$%jM!-p?gA)2CR>>==7E=S1(}!gp>~Ez^>iMO;}brAb+^K!jWF``$H~aMcI`eL7-BB(Wt&K)dN;WZJZ7T#!8_e zv7jQ9=tdR^bc0z>1VdtbkQa%41W>juUl%Z(BRer^#PQxzhTmi#wIq3eEL^KcLZ8S?6RlTyjvBmT68VD-GSK=*JmT{5*I1DRD5NU`3cLYo-gwm+%lE|cVkLa zVYu&Ashqfh1)Snok2F2GV%oz+gx+F7^`hu-N1zE&Yfiq=b6j&8qsgCnbBC-Fj8oz- zV#MJn3^QCnQ8C}0d;!{2p0t=rz=d4P4=GjOS8a2|b}HFE{^ z!MxN7Hmx;UWWb|3iVKe`>ewva*Aqn4n0{r35Jnam&OV~z(<&uA^Tmfi!kAwzP7+&z zazN=|$DuWWX~T@fPy?G_TTld*d}avMm?H4Im4DTgx@`uDL_}r0u(r_Atkg-}kpTd_ znHt2U*>)O+k&-L&6s0 z5GzJGL%c-X4lD`_0K#s_BNPSM=2j$mw{-H4p>X@h3n4vhL<<2q7hYmS_%ycis%6RO zGSlD5m1TjjK5efFD&Tr|iQ56TVvs20VRA$TH(l-uP#EHnUDvz`GeLT3=27BhqhZ9N z5t#CK%%di(6u}&GrB#S!)|{6>dc z-OX9PKHh|cAqiIp6V)F>)6eR*)L(Sk8xJH{23zhz42lWe2V840c5|H6Tk?FJ<=mVH z?Hu=*RqYk!T6_gnMr;TzM5WCFXE*&omf4^iE&&RP0AbGjMlXhrLSR%Ol=Edv`wB;Y z0V|cnp6`pyqflE%ecZu-!Qh2eszIPpv+)7|3fTkjL!tl)Rf-J^UBdtxP!D=>D<-vI zw5z5IKp+B&0yIE+ISTe(8Oi|;;>I2_5u?Gy3X+ny-?m&uQ3#Qup5-IN21q!hI zCEKK4fwins%y>bmRx#keX_O^M2*pRm%YHpgD@b>wGGJ>O7Upo7x~nxw;tfO_it=G~ zzTk>-_l~qtTsTWBLMt2WmX@KmqXvhLWpVh5g#j07f24Vrb6~_vwkof@3sBPxrQxZ* zDAWdGM{|6hAzfK>ec4L^QQ%RSJ+wNkH}Md(T=?C_0B9=Ta#Go92gO4*cUw*4G19In z-7_fl(w~NE259jqV{d5Ykr|XR&xyX*)qO{E3x_Zi)_V|VI-Jg(GXZzQD?Vp?!r}$p zZ;7$P6SgLu{hvo64uJ#-O1Pc(2i_UCs~tF;{-0@dI`KB|9S4z!E?Mqf@=VB4kNXlP zoC|R@Ah*0Gt2sb%?KfdnJG{(y$=G<0nY@trjp$P!9iqaj1krp{&;n@=@MQ;L@(_(f zOk&5(L2zjbuw8@`nP}fw^V|Dk1 zSumE-xX5_0CGh+g6~k;pF<@0tm5`%osuXxCu4nOg(M(G7;Vk>3h^jhhOc42j@9;vZm>O?2Rq^b0mXW2A$TA% zpsQ_H!y@3Y&=>>F>f^Ro4es2O%7h?JXe#uNf#PBs(5K6a&u9w77Y?a#N{6<9vtJ2e z<_@;npBaNf5@ek070pA$MU|L^J)$(-+6N~-C5NDco7#?iO9LwV$UD13PZs6(gs*o4 zU7{B4qndMZVcei_T!Nb@=6ttHG9m-k=xz^P}f5@cEYig12vto-$SPA{1H}*rVdWt@G=x|bM4w$ z0xDij_?94%PinC}=NJtZ>fYo4$==IB?JI#`XmVqgJBrr)FSE3^6uAL*;I}hRkYF!8 z+^#o8WlT9hKQf*`Cr3(lR$}K~x}o!eyM;BU7J8`Iz`#(vue0A$@4;$<0;{?63RMqT ziZ;GcZ@@waZ9%p6GX(vXjnI~XZgcDQC6S@z3nQB`V73DYzyOMYB&=YZj$!7II?6#( z1v#^n5E36cP!BNNSi~!l2Sz8cs5f)L1z5>iH>_eKrgNB{Fb*kK#7V}_m4Ik`T(LCR zu~QY?C1Y$V=7Zay2TsYJFNxV#ky;qC27T;%rI$;z#iF4&UEo6)g`&nR(6n^&W-B-} zQqfIO&xoQhiilk(p20P>ICD*^ns|<+VPS}ZokikYCB5riQ`xvaE2?uVlFK8aAzAoH zh1~`$ss5w!pAg8eXdz?}F~Q8QWbXw^f$S;>z1_a^WTAdYvyVbT z5V=q>0^(=P9S_ho`Xkl3?KGAj#PTz!GQx}gf^d?!fY1|F0ARXo#-gp=iub+B%2ma2 z6KRW$*(-(P7Xg4W&&9kV2Wxv z<-yn$y$NB7Vme1!&@PM^z9oy$8n`I9RQH$=kQTP&!eOVp*DksMEml@7?WkEgaoIz7 zDzLs|Y`vlZ=Bqfb3CRXq?ogV2iJZV+qzLY5`BGi&3xk@RlWDBn77(%8^vLcViI>fh zpthnr3eOP=nOuUkQq9=n58eSPfUBj@%whhWfE8Q0l%jobHF>=3ca3LV6+;3AQe(t~ z2PtebfH|0pukek6;CYDxQ&psH_S9vVb||CIlv-PvP7rNR#A7271<1Un<3%#j($p^) zCDp2IoS555wuIP40Oz|gIG$bXrtc8s$_X-OEap%FV1%Mr2WsVvR6q{|Bj+ptu_(q^ zJ}!5DL~=Mkxa~Gci}5W`R)nUg@JFSnZmj3M!phJGd=cZev$jXxKdQ>t4nGqoA3NG& zRaQS3ji?cx$NhU zi_De=y~F1i3UFqP@q0ZnNt0;1v9hidOnuy)@=LDm&e*+=bG;@bDDxx&2w`StaV7{{TG(17nEgS+X%t zo0X``qrB8z;};#Oj{3w~d&kU3}! zVVzhjG}etgb|!e@gts6ZxT!`pfPf`%81FJX7)ZV6WzOP60odTvmlU+&J{;y8?}#1L z+tGOP$ZiD+t7EELvDr%x2&t%!V0$HUzP@Q>bu3llrf8XGG%FT(Ox`C_0;sW?i2B-J zti=>Q%}i6m)e?-?y3av;ScjhflO)$#kc~h#C@M?k@0vwi_n?L}7ruaRP=Ohyv zJ32(InK~eB>nRolVg|3FzSYz_K_78K(^pM ztA$}?KJuVjsKPEZ!T3Th!E{#?N}#gi<{;x3c2O#TUn2(DM1@m+Tf_zh?(8KL3w@2w z!76+(XNt`CvREcf%Bp3QDi%3;jwHz*IgSM=F5hXuyxrDSZUNquoq|6p0`#ru%owzN zwJd>zH39=`_drJIU&}I>S*08m0N0QhY77u<7aSz`h@D?c!`?bru?Bs%O};fX@yw^+ z9`l^%<_q)vOXawJB}+P2>V`^yORV{uKqBhn09b40 zW1J`el%s;5#4_#9p{?F8@2FV~;P;o>E@|SkFXHGY888r#7|2ds{KX?i?Q;q#1FJV% zgVv_8-dJhx#LjnK*y16jaBCICM%0;AahM{s8?b4zRjOJ-Hg73~X2Q0p5W4fh}wI)E-%Y3brp}y#1ckS3Y!mQ z?mME?2v7mxh^fTMPYu?M&Jwf)VX)O&nkF0#Ek>(|V$P9#Neyr%W)54rfGcbia~TB# z0ItrZu#&N*h3=gAf`&rMtC4FtafxCQ)k5+!>uq`k%tL5Ft1!*a^f^!bhB#AYrxc^_jDr%EHY;c?}$m#A!wi>a`x#pa2V zRe@P}wiX%DvYWe&;-ixTOY%Az_$ zgX7&f_}_h^9n$U1t5F3-XR$T}9!#l>c!Juq;CT0hKWV0@qr3}r7d$bV!C>%2 z@>6O*5F7z*ZYrd7dkJVT(*j~60EjMiL#L z`xvrEagV1PH$X-!dH&<4d*XP#z2n2bENX*@@)+~q#4LUGkfE)2iO-+vFTAIJZ$@qq zAyDX4PZ1-RLzGCLt=cSSj(Q)F8j7_q^$Au&-eyIYm_iyX`Abr@#aEbSNyYHXHL?@C zZvG`AXiv2A3zi&V>(`_U2_O+<>ZW_wgB! zj`0iF^R^~MgO&kY>%q*i%@CAw?_K$o(3FcOat>KiZ!lm{vfL|Jlwlu6)Xg_*`9z>) zP*&-?KH(Z^wE<)^I5GK$=@w;YZ!I>|5z_j#1-?Mts|i&7NK}o{G6&f#}1z+H*QvlkeM4_Ccj1v>H+cqJ*4h6C4-l%2jHU`(kP`KDyRx)@y!VXr$ zo8?p9&Zg2QLg+Fs0i=2ZA>Pw{gr*@Fz*N^XdqGf=ixf4P%J9S}zB@>@nKlHYTo?gr zk7UyXw51pYP3rlV)W(hMuFiE171>OHh9LlIfTO_e4im6~VGBj1QsplGAk`R9;BHU= zBpkT9_qc{q0h-TJt5+K>rLW9R#}v~S+7AI}entx7+WZZZ3<0Y1Rd5vyo4expfM^>V zaxNACyAS>)?iH2T1yrLf3@fYmnOCCc_qfQAET+j3xkA3^%MDd?w^HF&mYxr3xg8$N zO3n~Roa$QBvV7DQZGBwG*UL#@CB-0qSz)$aN<7`{_k>cyebDyUQx@|<`5}2054Ph7 zP*wJZtt*1JN{7jFF_5|KaHFbe_lIwX?#+?)Zkc`NH~5#(`$XHA!OM>kOY{9qUw-q7 z{A*i+y|-}QbYYkA@=OMq&mSF98-zM7Mox>_F6G7QKdj#q51x7nJC}%7+@o)6h*;>& z_M3sBee1k2hatZg6fxrP=B4c}98)XUHDzkGaWf9uIIP7MiyuiALEtm5pZv0ayiabDDy6*4Mz#%KVhLIFMW^+lw&QgpyH#qs|b0 zzR!eNj`EI*KpO{;=NgYFd1R}Ac5BQAPBxemk!sz_hpS0@2F-Gs+LQ$Wrs9$9A5x<@ z#VEXL62#ZgE(YC~3|E84xBUlb4gi*Ju6LKhIw&nDKrrwkSWN&K7YcJ4^O~X*QRU_) z>q>AOSC$`g0jfh0?o>puxpy`AN(_t;ye|Y!BNioc$WwZ8fy2NmJd zx|Z5u-04CWtyX4^U?F91L8`xLc1vr`f`joHt8`J>Mm)_U-o8(0e1k&l$ytdqD=m&+ zF=VXP0mg}d0#SAjmEFx%s2)rq7ocZ%9gv6~Fjz%xE_UuLRZ2O68HA=nb zz0KLEd%y$dh`JXKxsFzoiN9%fD*%0^1Y}ie9s#9WSc;^fZx-%>KwTnre2bz2Tot9(Et2T)|NuV@G@C6-kuxu~uG4hx8dYg0=VMxD_!7+fK!&DTuotYs_)+l|$H8~fM!m_cwpv9c| zVXkq;8ukLUA{tKHF(}MqDnV00V*r%+W2Fkjz0`9@Vk*#~Mq5y_l^li)aJc@S{nAv1Usu`G9R05EiEg5a43Ob4#UwRnZ!ajYt503=w5Hlr~znN$! zJALEA@v568eYkR3ZoKz{IpbBtOv~+iKm}>H1ixxmEw^l;8oQ5b;5qRrw%4=#$0!B0 zxO;52_m*^hTeCd#?e~XE;$;2QN<3c?p~fG~&3LU$7`%U|HCOvsTmIwte(o$MB({AC z2qkqd)O@20E+0pq(P`#VHZs`z%7+iil8y2)UTc_Pvw3r<-&+sj9_Yc~cqI|zzU|^v zfcFj$_XgVXAL^nJR&)ErP130ob?q)xCjFk$hLN?qIrfx!m0MLen5uV@^!V=`Le<*& zk5K9?wKIgan@wODCwr+*66j)_U3jX1^c~0KD~r_2Ns%iT%l${`Wsc%z3MDPGv1`Vn z)mHAXS~aGnPOgQOWm8pYij^#}kQ=hX@;Hd-jKDDYEB!-!+P8IFhbjqc_s9`avr8S} z1{#nNv!bnlHY@YSx5)CsziWYO)Jb1Gp!+PO)Z7Oy6(5igSyU4$nZFT)0fAddwG@g2T)UL z3(QqjG!VjVu_Go-K48ORT~IM@y@(sGKE}3~dJ#vCP#OeE7*z0zT8S-N)k0gLwq6)!@ny_a8R<=cUIw2q z8O+#450>EIL~WzE=+=j2oG%-Obf8&*LB`XHixVpXsDk7RM{>XAuIjR$av+_Y6G`mK zDPiut5lx#uak3D~2^NE~i!}yXqMTtu@;BxW6sTzym)*iJOPWi9cH%m$N@pPUrs)m4 z-DPcRUB^}-rI_=kXWBTxoKqfBqhrC9gs6rV;Co8uu;nX1hF9T6*V!f2mksTf$*L_Q zT#7xVPP`fH;G@0F#kDb}%rH<8a2K;a@`<=M(}3(l5Ud@B@NoknMYp~8gRZ|7VrhVv zlSxNr?{N%Csd~(M9Tu}kFa>G_Q-}nSV`H^N9nxB4u)>2}aNHcDka0;dfv$WNFp!5n z*8{-LDkVxR#-aeBg#8hBnEY`*{JYP8p3yk+8se+*EYKQEZH{wyiCyaj^O;oAEKJSZwd_YF ztrcOIj_xOZ!6K$w%FQZMI7lgNr94*m1DKML@>t&DFH*b~Rm)f_aYGKO7zXt<>mti( z8p(nzpR#t?ve#YXogqq&EmN00`@?VQDiK()v9bWhS+m;^{(@Y)u`sh@ni|s0ZOL59 z%YZeZ4S&i*LN3N#r3KCbVig6PRki`*@l|%3f)VcG_7w$W)KOBDd?X~u@AU9064 zm4tgWa;}Ok;HVzmYrwmK#wCLDQDA6mb*^EGe$Y!vk)hwrJ2`nf-w*+LD^15 z{+S&|)3}+R%MJGa;h;w_wU<{=*49iD;c zsZynSZ_#+@biTLx9%hqIFN+@jY7FC{8#5&1#-l+2sEDT#11=WVccBzPCr$(~_16I?;_PG48 zm6x#3FxLka3VU{e(7nX8)9o@Tnyn*ENlRdv_m5QNXe&fL zrq(`SFyD6WC4x~Y-aYMHC&a+ozT$>ELdinJHwHb{E8enTmi4S^RmNLGY)a^;>@)`7 zTWi3#gvM0r#G6jjMZrt$5Nj@T(eFcuov5@DMiy#wiifJP3qf45@-I+NP!z9tShzQA zCwanV?dVXuWopEt80DVCq-qeCz=)9!gf7<0jFl4hRev(8#`-(}O$C@C4rN0d3w1r{ zuuzwvW@nJ*=`)O*F(B3gT9i;EXNA_RySM~hbhUK(6BC0Glu+R3dyJ4=Rdx-yr%y83 zpG_qSirI`@BKf5#jabb92RW)LmTXwnmkBC<$3b461acI;HQRUb%6v?1j zSAYwNxeDv;rtn+@C;{x0O~g4|nglR!n0pCTFf)YJnmoaj8WjcIK2H0>`Wm%xJa>)_ zLU91_aRAIUJIfdDMXaVXiO+?`=qPP7q=^At)O#b;acvm1)GEPaKC`+dVpEoxzQnn~ zqeBgv_KZ7p9;tvLs)@5zC`U~u=yrRsLKas+UEdK!vhSx5K4=Ti7c;jw{{To{7;gOE z6#~uJcLD`=4x5<+@-vs}KBZQcI=S|X%VVGQFFM}4OE2G;+`oDFOT@hz9O7O708qR0 z*qE~8er`M`?xxS9Ap#vj;|~75e@CbF7B7m$P4iS0&p6`hG7Ap|KQI`&cwDfz3KY~( zy_IAGF|8$)M(@nK*`ZWwpzMR?2?dy12-fRulO-9tM$=Wbg?Jb|9G)ABf`!s99ORGg z#YZ0z_Ss?LVW>W*P z9n{o-00)XMa@kfwc8ZkuH;I@>$b+MrbuP(}SW_@+-E$S)>xF>>hEDLs`jB1$#K#*A zi$!g!(J#a#HXF+p94=~hme4Ai6e;aEU$)jA2Mt9CI@ruywkua`IaVu8nMd7umr!&7 zm8Oa`c8GbkHk1@fxgtPL7t46aZZ~<2CYFPjTo;v!Ob`X9b^&IfVs@@$b(i}w3I2$h zRoEwr5@8vUVO}mrZdIv}n%kTK#9O?er$vJug_KVacyKFg&=}ro4~s;%BSICxnmEU7 zG!Bkf_Whg{D64G{Na(O;>|l<`4jx#ybq)!T27wUehSmxLM#q=o6{Zn^vy+vHTB-#V zaYLW9Djq)Bl^tX5VEv|As*F*m+8c~gtAudER~#Cmo+8^)Ca$InO6SNy%lu! zyd&1Hml(n%R~fEtmZ6wvZvZN7DwBSiAYup|)**T&4%h{ic*IrS0i-~3F^d$ceEnC{ ze+>7R@!QPoGcTUnsighlE&lNne#CiQe=_&^?FW2&!mf;V?-Bm-;kdKth(n-whlCvu zTm5%3^{KnY=QLqA1`bx1{{S-^K4L>$cL`*La8@DUK%-|B-fq^~jsE}<$TT;jc)=cv z;`LYY#Y)e~?Ee7RRG@9Fc!(-CgArtQrwK!d$0a zR@s6nR*0>C>_G4oGvGHJ_V{YmtX|T?V>T4oTVcRC7;md~2t=Tp1jT!Z2a?L-Dx8_~ zGkE1&9woC=Flo6$;F*fri?Kig^NQ!kiU5;4rVh9$T9tRSm7>5gX zAWci*tkc*9n_m-X)R?2Y_<}+dmu-;Pe3~j_BA%Apu!}a%V2eV)k~LzW(RoX>JfJm4 z2xu%WH`h8Iv{8EsBVr#F@!Clm8r9OToI%WVh1G`wA+{ycchdH7btTUb8e$<9G)MA8h5ZzRamz2rKSVh%>7?Lha%JFb2e6 z55x_B%3{vLv{u!_7S1XlvDX>wKOD<*(Os_Vv;Z^1c|K;AybeL~a~=xWYRDmgTAO@B zm_~*Y`Mflb=4MUmnE56&Zg@`j02Yo;BV^rdLJBUYx4f}g?vdRm)nn;f@_zeEc`t~r z#Ip}B<$+j^8EEenV_o8=d+PI;CQ8H>zlb-Ov43dy{7s)gZV-Y5F8W`lKTb^`tM>Tm zs&`z?3c2G-Sc;sK-z>)zj#@R|G!(@gW8NH03g`i^X~dTra=2Na@f(%$+`R<> zoSj+XFA0UA&72ao2qS>d=d=Rfg^Dm)PU7rR5Y<}CPAVwr7*Xyk+?OkDA~IK-#7;{T;G9>=VayOibd=D$!MN}- zy2n&8$*0Z_?J{5raVQ31)qR_a$ug>jPZ1UsjpiHJaQjA8Gw)+<*tQPuct9fTuu|0* zYu+tkS$s%}q7FTvi$` zBw7}CQDg?B?+2rSePwCTHrEojzmT5W$l#~|K!8qj?&e}_vKDsH54A>52!>GE3zUpo zfk#KX1XLWGWp*4Y<4=o0VQFW%F~P;bQ}EQPaxP;5yuq3S_QNB=4kKcqx4KjvSu0=^ ze52877>K;YIDx=sY(RK4rIsMXM&0fMjOcG5zqEB^30>e&Z1!RfNE?D6u!F<7kyq^q z;*BY-mdlNdO&AbEORdEyH(Nd+5(~C*QKAKgJF&!Dha929kp7I$AJs3wB48m!EI9@n zOj9=J^q0}~Qr{7#YY~NhUwK33B9EEg&vqlrUCc|vSnuLrdzAc`ntAPU@HqY4Y@ftu zr6BYXa>g|f+yqXQIqS#ik4mGp;^M^H?*Nhg)C)r(@$DKGotuwEQ%dGrX}n*{Fi$uu z86tw_6?@YtQMM91*dq9rD_r8A>QuKG!LqZ9jX5iuyUeRnoO^ObiUw)Q@c`CqYFGS+ z7$IWPcZQOMoR2F>W&ql5nyGt@J1wqPle9eqR2yC_F6aH}d$OR8NZr$}S>{F^Gk zdq)!(me@OGp4&ua=2td^J5MfPEmJ;9XyiL72rY;O8LLhWp>hQAr6}Ft)0vOfaERd= zqIo4y3c}5~MHCZBx;_HO6~Pn~hS?#v&k@pK1y!N4v4*1c+TiLm)z3E`{RmjYlYGE* ztdAnco=~Wlb#^Lb3|BB+xgCXonQAOa+nNu@nT!D~3eZ;DxKQK@TT|hTc8Yky2A~7q zm=!`A9k+*UTt})Q#7n#RiA$y@7tgnOTPL7_?DGO-aipE^%xR$D;6e&$D?+R|Aa5vi zO7C|70)kn-A^}Q=G&PVQTI^f3lGZ8j1&?m^3yiiHS!Uq!TUMEpfh{in!U{nH3I$l& zc8+DFq3;nTw`+__`ZJch+&pe@H8827`*R&G>gHUl77bAtNunRLpvK1~%$U71oQ`AK zxwR?*E)=xA9pZ{(jBYhq8f$T+UyMvL?o+aaq_W70nEEN9`%C5Lo@Sf)Kh#lN>Lvao zhi@@pt~~vvqWz`(*LiOn{7bXn%v(J3HDkVg{UHWh1q`LK@f1l>{c*XjBXIkC#NHwd zLPDk0Rd2ZiQ#D!4GeCnG=ZJV-(Zp7xd>e*A3c+MYdG2H*yQsnMC=)r$j7uOr)t6Mb zfKbR=tuJ;B8f)(~d5Vpu$iFHe;b!SLRbI6(Dic`2iH;F?vWO1$$ik z!GVI{0N33rmR5;&AR(+T#w%|#2aE+U(0*e0tA&o;20%nWAP`q%Y^@gxX{9^7)Z|?eJI5m%2MdDXO6lWMAyA!4uCzA_G>V3y z9>Hk=eFb>HSwjqb#sZVnrAY&3n3PR%t0)u}Q%5Yi^VHbKEUl`OQJjJ>I4Q?944fK( z5ZeODSS_^WPEO1jgIF7(#f;#8F)A*1GO({F+B2f(=-n-N1S}N869g4@jSeJbMTdsF z%XX18xpo`i${$5Mt7=~ZEEH2h^4dM(U=BzYnfqBCfWW5(R>~m?Q?O6w3&KlnsbOX> zu#1wjSdAVsV&oD=jav=8z~OmnH7G~KHGXPZjIJEjOb*-ut(uGmn+CD6Ske)11}-qt zkDs0;%$*daFBd6y_9K>97g6riDxA}B0!^6h1l2}}@pALCPY~<*LyY2>+C@}CFX;mn zgjZ*XM>hEjym_s8?D04rWcHS{`*9x2XN7R;YoPxC5G(}JC14lMHvrI6I?YTqDcUfw zD^nTk2)3Y$Cb2KF&ocbkliSnIZ;YJI6}CJ70C5g;*pG9L7`goW-0t|!pn>4jrOW-X zRuhx7S$#ncmp1m77CjjLwA^$l%s)7rBclD~RvcoBs8e9*ukH(zVOwJN8d?lxdod$} zgnCjy-x;_;UYwXcvjz$r_uCdKaALWZAUOY)1J)CDDvzpOeJ4HQ+)PBaWuPD`wt@2L581lkqeOAOEyt; zipL?hdyK9km-P8T_gO5CvZi23ua(Q@SL)_9VXOsc*D<&i-ho^;8bAS^0o5(LbUo!V zb|sze1Hnb9e&B%|D)aD2VYCDynXA25v2bGh2b8{T3(pbqQf|XSc85;bz*@k`LWzxC z#sT=x+Esx_D01MN)U#r}oLX9=F*%Z@jVRvuiT?ns)eEEUgY5HdA7jDhTPRgfy8>>6 zwEB>34xZ_?-yj9MPHIztAX>9nbqL=zE6!S|6k^k=zz4*kQA=FdFmr+h3_^sflVW)BZ7QKI7fN>$3d9?-+f1Ws1t(=G2u1Mx z!ZWXeb6~%i`W`VN_m)%d=62nAf~U^d`D2mHrJr$yH;2CGh9&s;?F@3^?dBj?@fmhH zoV_6e5Oi8fVt?d%Jsz*>GY!p7{6x*YBHt*%*~F-_u8=TenBdwkI=H(n6vlV%z!_sv zPl~D)2E`rV*r;i{=W^bcMVM~=rho%aht-l^v1zYqS^u;3&^4y+9m@uE)A5 zCA4*a(q>)2b_#Lr1w_>ZGHO0(;xs7TN;Dy3G8_kp+#scaWFSF??ua3#AejbEVL%y? zi)*!3=JXs|yb8w4%vsxU1jj!sl@yVfMBH3I+CM62p^Tm|T8BcWrPYEN{$;X+GK`0{ zxPXfDHet&J;utEfc@T{fU$1C9v&l(H88sd5Ih)n#DAc!@!wREtt0;lXsYeC5%*4bg zf(%x$77PYQiMn$Iy~?Cwz-+@4enAzP4X&(zQs$FKAvD2V<+V>5@(D)!7@4qHCF}sV zw4xN>;0?oIS>|0p$4_IbZ8rurmf;dtQ5cp!r*7E_k7&xD(L;Bcy+PyrQZAmubii#I zrIjG3I^tJJbgaM+fmARoJLWO&ahPU3tK-AF)dhu6E?+0VNW^y+)k>{Sk}3qUgH2-8F+!YG+^**t2|U?5P$cc$kky6sDqdEN%>NgF9wr%#Cx)%*n!4@HSw+wfH(d=IS&_al{S9D4hLryu& zDk>DGh@cdr?z#AtN`jlgK3F-W8(!O#Z7R(;m|$V@m_i5pCC^3Pe-gnQEfc#6Q^Z0r zv^>4ZKug1cR!-4Y>kh>`Jj}JxH-TX~hS3TIhA%g!6FycBtnYskgK#Vfps6ce zq8tYafkL#H-!jCDOLglRZ#Q^iCAn$EoC|fU)JR2T>YE$b=5U1bR;HNB-!pE-tPt&7 z?gde(22`8zGW~;Pa8-MRsa@5qg1d9Gv`Ekwl_+-tSrD4dK$^Dl`;19fF?INKE)yS%dHW@x`2swz>? zQ&^l9uGax5RoX69<|;v1&M2F3qzx zHj_ar;0bE?;&2kh^UDSA239MtPJaF8^~C-esO0z6&3yLZm*tDk?T?qV{3qQ7F<~ci zZy%sQgb8TIGN3_vhQllL!~!3NavXnibh1wDcx7COO2bCIxPr4-&%7SS^E<#GCX-6M zndVn}7UlQ+%abin^p9SP3-;|Z+gVtusG7-H%J05qmjj~MN{Wmr9I7oD3RYL+w4wzP zR&N@E0${Tk;Vu_0k*o4o5CL@J*B#SW6cDAUrpEOv=dm6a?-HCAw$p@miU~rV1i)p$ zo3&vt+E_bkO3fTlVI@{LO9vHupAk7|q%D}=Da68JZv~=;D-?4n(XZ8brAPFT5;K=I z?|i^aFcifRrRXsr;tQ#i2-CUZXdP06OWdennOhAyaaMUW#|kYFSRk+u09`|DHUS{v z?J&WjC@%cu2)gi!fFYs**eg#2vlv!**W@DQqLx)M&xi^w7eyOC8!+TOkvk~Z_<@B> zK=&7TYqT^!lygiEG$FHBO{6nW@_31lX0=0M+bLeAWCbi7s=_?S-6AMwXJ=3XTxG&f zdx{B$;@mgB(PFT>@R0n(iv_EySMo3bS82#lzY_431!M}mS`cEhUPUl?V)EcqZa{WO zaalRXFL_XK7@>q^RUI656$-+K2w}!-ioj-m`#xnQg4E+*WIU!Qs{*le%D&qa092c# zQ%PE;ms)$vTL%Ln_m7CC)F1aXqp)lAbIb=93i?3vL9%}IA7&6y$V~#h}g3uD15_x zc{$9vJ~oXBb#rPL+6^r&MOaa=q=ONcG!34}i?A=K>IL0rSJKUbySPz7UehT`r)60E z4>T$5VxJKZK@7Foc~#~COqCij4~vSCNmvvBG{8V;r~)+0?l&w#W?|ddO9G*4c3|6k z2>>rfUExIK7&G1%5?$EQc*twK6-EV_q03r_*L4l8F(0`FEAVvV>u2jR^zCkO{KwBT z7V+k0{-%6OSLR>u#P<94j}Ci7J9Pz?v&?$dqZjs@x`yEgLeaYK8|QJ1s0<*%u8V^f zF^}nulT;c0rpZvfJC2~UMQLSybFXq_Su@^Pq&Jt_v^Wk0ScO`}ycvy|tJ2JI3>f^u zb{z0NB6$IJIT_A78r94(?=K7DDXf8QoU9lTN`qtf<_4hx%>~L(Ls)KE(2S*`n7NTh z1t<}^FLMzLt>jWhwT9w?SxSor3`5d1LkqBK!9{C;;ffMw=BL7pMD%!NUB|hB(1j9z) zRj4d(`zu5lAlZngL^7av_1xcW+NBdc()-l2R5?NWjB~CF)xd~^T~Y_GfnL29F}rvCsDhh}Q??;LC?dpUrP6Kxu16xwO-`%AM! zX@jU+?%y)hFE@3!;w~o!w!ye^qKCbGru>HM`i&bHJ29AI^a8Qgcm^MMLy(hg^O#Cv z7Ue*%m?qhv=Bfzq1Q)GS63|y-sY3=01Qw|8ip{~X*;;d)_caLE($eF83`1dDLz*t) z(HBjsAO@Z1?JbcxjI~C%wSFPonudqCD>L!N2MV|f3e;c(rOFeP?;is)g+C=Ga&bH# zG=Kp>82gyYTedS$5Dz+l-SFgy2J~EFU!G&WZbK&frf7swLSQe-xa}NWC%kV~Zq6>b zmb%SEy1aIExKs;?)gflUJ4ZP_D}jrYgM)LHZ(JC1X#g{|88bi&R3db6pdbU0f{erX z5=5GYf#csW%LJl|%*8CdOZyP6EV(M+&%@nYfkoMtPLTrXDd8eDcMDT>NZC>0g6iOf zK0@bmI!GnD7lXiIcS~h=A<@lBAvLfIxS2&V&RlOMAcet7Fz!^P=+*Xlf?`&jS;fjP z_vJ(ZM7>$Qf-W;03&2Z^nx;PU9pjX%v6*-sp-iTG^|=0(^&F_D_=R2w4OTAMR~5Wl ziC2t3>laf)9@iBJY8!&?AuGJ>m51XIF2&14 zqJ|_$^;IkC9=(Y0b;T;Ig7Nbj72vUQoynP@O~1rijxxk(_Hv%s%w)6%mnXao3qZ&B z1mtS%?Jopjj3*J(pLH2{igbCFJMlBz~FJoX@BTsq|@7^9kq*{o; zzR*((0+#Ut32YQcwy~*31=D6MFGa&>7l9osUziDdBFQ|AH!Vt_3P2PAOOyz(D@wMx z*9Zj$!j2jdS?(?e*cup2Uc;mmyOPj35eKahqrK-m;Lt9sXkx3BeTI+T1v5#c$Ki&4 z?K5C9)r}Q@3$ogv8e8)!s>MuA6-=F_#nGD<1nDCG05k?FLp(PYRK_-awhd#Pyl8={=Sw{#jounaH557kF^cXmGB4Mdc&MIwthjK0ZM z>Sl@rQkx!N*on5uSysK5iFyPjOvSV|O=<(#Mkyor3aN{*8iR_A>aR0+Fg{owTChP6 zU{;Kt{!wsV<$^&0iq$rX2eRe9iANf(@c=>5G>EMG%E1Wmt5rw5!i%OjMyT@%a2lo2 zN;5HQ2+~#;`9O>qrxs%Au;hyZ1)wcoF>WXWSG$5%Kmh~E$jo68Mr*?idQ_o(ouEMm zTB_9IH1>~Zs95s3AufRhb4QjM@GwEE)9nP57){gDhV>CdT;rrR-${{Xqc+ff&Pmw8@r^D@!NHo*j1{$RM}s+Wg-e-f6F1NXQSVGSp1gvGL? zTHL+^1^FZ3xy8D9s)>bC*C2P_hzO|cI~oXOS`>xL%o{i_%(GVlYTof{l7U=nwC9i@ zHh7ioOl{qB0ySAvMk~a$q9=Ekv?o*w_W_TXunJ1X7xMEO9+9&(MvrN07?_1DUGPDX zz$+D2R~HaGK>9T{#W&_3>=3pfISS6JmM{C-$#!hFVX3impc`NsgNQ1Ss5WrBM~T8j z^1}s&vae=0&4a`!j$j#=8;1x?mKJR;pvoOVLj-TU7MqAG+9C9PK;Z8z+;!odqe7F?C!BTsqG$W!n{H?yDw%Gc&2b91Pe$F`?!^miU#;eZQ$rcx{NQJZfHR z{{Um>59TH?V}aBfE59+Daj8b$D*piTZRS4RL>`0C?I!tx~0W1xl4FSFc1nLzB-)lJXDCHWh38<}(3b#JM(@FL><$ZGsR3 zMH%kG+a-s5CZh{2Y2WyS7>+-FB2{p@JM#j^9lI`g=(X`P1~AhQv+=IUn|L$2Q0*%H z$zVuAi>j1GKu$c>#V8)l<|uT>2Q>2$jjv(L$i*T6)nf=bYYZyU-7-O5OT@SYV+fO7 zjzUx9P6S+4)vgM`AArKsbB#qLVR)v-#tQe8eholXInD}T&?T_1y|x`@QqlAdExQbN zk1f-1xrda2;s+K0D%(Qoh?qe}wiK8Vl3+|%Jq>K&8B|-qPzE@~wBF%O#^Tc8q?%ql z#R4D_l-vc1sO`ZmAxb#QP^ywEp_{a3CFR@&5Kt6*%`bhBN92J=nD{;+a_pyYH<*kP ziMBfdLNs#|*@1lADXTmCB_YNW8)p6v5um&Qa)m|D5ENA_O6;{?5~O$@09&lqAgDxO z3RQ1r?g?9ki((hJgGUDVp$Jm4psj}ov^!M;op?vt1i@^!(>BMe0=lkIvh^6?v}79D0j*1M^9C!l+xGzYE@Q-?)*)@3-E%9%iIu$= z?J7o$g3He^djJ$nR*9&wDVed%Eq06p`;BD)Gkz}-s){O1(x#6FIK;jN=LT3nzJO-z zsMX}-WW+%-Wbi@`u)e}jv==AM!8Xbdp7BOoNdSl<$9mLc)dL-aPTVg;7Wp!3)r9%%B{qFag|(17^oYKASl=y73gU@V%my{-QbUbB}pX zwz!n{so})YuX~gZWve_)P4k+ajQdBO;G6Xjmo8kna8mG+oWa~6KkP02GQ2y8?~k+$ zwiQrWyX1y}_JHkOiCmRflpck8F)CE4NlB+t(xpm+B)9vq@1>yR5ygjVh%{y0aoQJS z-ne2TfScdEpt*Pt3oYwvIpR767o)r4Y-sYRjD>mpObMD(g~6(fC>SnM?WdFN6=n^p z&%53rqE-4v_kU;=bSkccF1yNjB-qgRL=Y$xRTaYnP}yk&xBHd2OfG|#o-1r-nJHs~C0IRjd7YGyMSuL4! zQ>P|37hDWjqvE9;IXyE`dSEOZhQjsQAef_BfoRc%GeVgXQr_YiC!4b+6l1<$jzC0O zfT=h#xI~jE3`u2oxi3cFYXJbzK_8af9BZ<#a0ZV31XqnhXbctttQ@M&Zlf0v@Ts@W za@x!xvrURE%QSUykYWyq;WMR33`WH&kK4a8jNq<<`yXMMD3b-H1G*M4P{;rl6s?Nf zr0}(SqJ#z;$;3vO34_2l@wsgltqPrv85FE}lx`cL(saaDg<|$Abjx|~86SteyLMNE zjL!Fl(Y%V8q;{Y{D)ZwKi40ZG9zznb&r1P7U3P|TG3G;#^6so9%o?KRbSs5w;wz+0 z422YtZ(5~m%2aqFW0{BwFE^7AS`r5ftB%s|6U+ci;!lWdVQ6oQPV(Z^YTF=)1R6ht zy_JO?ND<6+{KRVZ;vuTWlMpud&$Q9%ogJOVT%^ShXd{Yp1N(tm*g!J1-xU^oruEAj zLA#~$_mt4@L)eQ0RJ>edtIQl+MPD!G8&aEzMo`E^I0K{N19$`2Lav29se)#(Mn09N zzT;Q%?3;+izG`+2@$W2sxQ-cdTbHMaTlR~tB|qe_cy||G+MAE#@iITeUWH1D*5%9S zzMyBmd!_zhsxbkNymZT`Is8i*aAnIS%bS-ktxA-73pi4bDwtos`b9V`ArMo}{{S%f z5A!oV$z=n*?jr(`Z{C}Zty}_{{jkE~@Lni8LuLV$e-OrnHZ+LKbdawqp<{y#w}R@{ z^bs!xRN(V1!Ft_?$MXtWF`CC<2hwsY|6@0BWY@fFWS2VTGHtGTzA% zY~aWO=i|IM2Lg~3zVXThl>_s5xSADOiW08Dln^o4t3nNLLrmLlSWQ^21v1Jiq|Ml* zX>y6i)Ik%qQ&P53s+a8(ZqZ>TS~*r8*XA+wkQ6zTs{`6pn21= zvH=Y%r-I7UIWAB@pBHuV)cBT}C!#367%MX?Q9 zi78Gi%u-ZpDt2i~rPbWC=M19?dzdMgrw&et4OG4!@!$Bw6s3g=)TiHxRf`qCw3z67cPfL-C~=6i zvNN?~P~9)}Wmj_IA#^UfUzL={uu*$td(76s4h9t_?2mJOeWh%8=3 z#wTS_J)<8^*!lkeaUJhEx%+%h&&=*$-?XOu&$jzdEcYdDzcX~z^Dp9EP5$u{-mB&% zShF|ibg5FhSFYJ?x1!K+geO6IT)A@P%a_r86zI8f<~kf@fzR_WM&{AjG~WEn9a$=? zB&bM{9h9x zk+R|z6Iu;ZU(C5`g6qe7xqtfCF-nqHiWBwGTF`DLX)v*+h@^inbKKMM%J1IH>4kDV|D&Ij&$xqBo01>@>?K zl`M(?7_e$ON@yS(aoO4tf}((Jmv`bZ%hL*4lwqrw&;btj{*eY38%@7^a+iPzR^Q=0ePc}h8QSTT)m)=++Dh^Vw(cj!4d|jEg=w*7v)H11q%pZ79~DZ zsMMNvzC26Wg-?;p%oKrXs2Z}v5zEEN18$4A`js}__j)n(`EgkB0{54548cqOre^d0 z<+@|3b~u&68=KFZ!QOL!p3~p&b6IgtCAXY+{yI-Fgf{|IPoVlAu+S;9kA?sS@D{WJ+#ii=83OwYa>$G|FDh-uZZwFM z87bNKc$8Toos+)80-XT&m4c&>%2<7Xy8*QTfu!qD$OA#Tn!`(A?9~;Dd&4w1T^SU^ ze`^HLmq0TX06WKUyC(JTahIO(p#?!$YnHtXUSRpna|dg9rT2wmrXB^bhal*cHKG{Q zhZHtmF#xc@R&e3aGXT~NQ4+>Uk)O0P2xcAm6uT=>>S?D8a*H#lQj1h7$PQ-&wG4n- zl2Yp`T*CUW!83s#kb_G2 zrk4xyW*=FtNhz;rGRoDigl{IHEVgqgcJ_s^X<$Ia_ll)eWNZ}eh|^B-INDUV%au1{ zx0s~KQhe%=qai)eCHW!Ztw2OLv|)`&VcKG)VRYC#ca{pR7W)wuNnWZaJ*E_2EI(A{ z;na0{NOjCgQ|$!RDMOmo#{1tNvMN+XzVKB|ovydc3R*YsC|36uUFK5qy~ojG>E~Z| zqj9w<-QK93_+mh(J~tJ6e(^tT)N!GPxuAvl-~P?6F0ntnj^-~wl`14jQoVe~^*0+y z+xCZjA%a{uIe@lYJNWj9jK+_*nP8SI$B33C(G~+5_lU5oEM{2S9>ieQ?4njea9_SL zAGkst^SN|W06C-m!FD@Jwm((vZNG>b!kbiA_W?9u6e;sFGcXFI$sBc0acz&4&QgTl zEIIz7b?;`@`%|`KtpHv@&F{=ki9#(SU?qr$oD~_)E8@Zv&K6P8E3~#4y9$7cXx;W2 znHn+v0f5^GPYgVb9x53+`O4rco}{;}f|?W*S+sNa~>L%q#%{G60=4`HmWbTq>kDkml~wPC9Tn6h*#!Lyk!i;GoICRZtMH3{n@ z{`?R8P9hoe?|GO27eGT!A2M;KC?tD0IR(w6%Y%2~U$ z6;kdnn?OcLUKCO16@^u3#OC}#Ep$nYl-dLpA*EI8UhreCVv%J-59VZ@?SRX6j$%QI zbQ9lF<$-W^IAifC*t;Ufmg`cAZ7zYNpuEstBAudT%Xq6aJU}SB0}pTb$}cDpSAPY< z?iHbw1=l>8L|{A=9E5qPyjuW5Bi|ZR1XQyylfyQw)NX3c*(}1y>JPDe18gf?YTC$* zlG%VO0a-F=`#$pp-PM)``}Gi=?m_SkjBK!afKmFqAmG z)J7c*tp*;~P9@L82Hat87#A1dUm1J97&%hz`~j z3S`)-K)YU8J=p5_cDY#YsEk}C3+fATn0qm~n*}l`UTuHOx1^@4qanDFU%iNMrm#!s z9h6Ps1E^luuXz=}c%Y~Tt45Ouz`j{3C1OJbDvdK9oKJ<7P&U@}pL6d3W0p2rm9!Y1 zP^0p%)UowGbKf5+@AsCL{{WKTJvNr_1}sN8^&JBS5tWF;FF1@(sgFVR^-N8C%1xp! z7T_Zl)02*Pffb-qx1P|p#=j2=^H9T@}Ob;<2m8S7hs)eHJ9Qc|-*a%|Jh=WZZm&9a#M5mJ{#C+W;OAB*- z-NprhMwl~$yi*~y^m7OG1E?FQ5I4sN;Rg~Fv1hv^pwif=g@ujr+9KL)ZFEcp7}0Dt^pA*fW?Ym+hcG-r3B01#YNsM@BM{$gfW#CA3sUg*&2F<1p?se>Spz{w@v zsu;x03Q`|DyT>sq(uA}oc7-L>gAVNJwmZ#K8tO)s{>aZOr~`Gp3*ecGCXZULL=IGq zz$(={;f^1YLkHS8_CT0B12YN3&sQ7|-$9U0va>`hV^;r6c zQF8hQ3>Yzm6nE5v&?n_HDkh~7BP-~0>ps4zuQK%cn@h>Ef9=8FF)qT_XoaU{;Udv= zrXMg(1gsu=N@vCJPGxZCd4b9+eVlokBXoN}x@_zTa#J6ggi?#kXNX>t5A3GmRA2u9 z2&&C1nR}*X%FtHR!VGbht(W5`5cVY(bvt7>;#8F|3JcW{G!hqTo;MZ%k}!`b3i8^< zTgfEONJEDSozUV`+!2EzXM@c^#c3|KmR;%gl$IKWK*3duYk-a@tCXA7xRlv&lJxhi zpsD&wSeoDBCq`Zy>Xz-{1Re>p`%Xzkc*@bRuAxX5#H#W;A!Kt{aMW6i$UVLW`X<>uB*~X%li|zSD=VLe6DS&}2ns6@R@M2OA zrI3|GxSO&9T6W8#rIgEtAVsRoiPDK#Y?xhFZC$#)1t|i%FsxH&R-uBEjY6@OW5mMX zC;l{0e~!D4m?4kiXym_ z@;QqE%G4YHJvCu$0-6>pa>yA}{uWyS3&M7ZLaV1Y6jZba;srP%`9WY(nGH3fvy!f3 zq8RzU(6y*!;yp!a4A}`lEkRx3+5)tko1LRCCM%M8OI5CFTFudxk?m7<_f8)$LEjuP z0NC{x!M46*<1S!}RZhVxzCA2`H!s!!2St_?UZf)EJj%>Um5JR1W9YcfKT})#`I+Zz z+7P|c^>;>iZ%`$v{KmUuzj;FhIA8xAoW zu!SXCOq=f=6Neej61e<>Mj&29fF1t;q=8$bwaPp~v=!JQi+d56 z994m$0k?tH`7&rgcyP?rBDnu7nl_#K@{1t7v4%GMuLU7Ie`iKrxjLq zcZ66+e-Q3UE|OqSlp!6wKq+Yni9NbhJGM~xt+7#d_>Zqr(xn6sLNS# zDbm}YiI65c_Q$ol1>?Fcl?o2niO_lqM2Au?#`Lo0m{)8s{5_m1+dRRKkvB9Wetnftu?70OZp8;n>t* z6kAKfaXgTv@&}n*(Rduz>I)?{O26|A-C0)LFhpc5?l~I1SYt3wfp?xch~tzhoe0#jDz_j~_Peuz zfn(%1#4J`VnCp&XjifdAv2wuEh2`0@LO#_R$(wd#2CoBQcv{OIsz9le8ZpOtcpS;e z@4>_sShf_0b}L~B>j2S5c&{D-Udw^Dwf_Jb;u1xkF{F4=vpA$Ms4@1lGQt;mb>bS_ zqilAM`h{@r$C}5Otf_3lO;AN2)+Z4XjF%^yA@PBJVE~wOSo=n6 zYy)m$;%L&{vce3Ay{;<^vX3@Yua-QBkh(+j01OmLD`p=txS>8x#Tv9P%ukrN1R@`0 zX~ZM-S>MN@kEXpD>2l@z1;zCagELRzl`#|d<~;(UM3pPnevtk-%`-Nb2bkg*HI5?D ziWa%U=3^+m>+v;!?A~DAU;PI1sXK0 z@eD3khmUBgQw$E9FU-pvD|EUN@YKsQ5wTk4jYD)RWry=Gw@5#8Dz5=d3ljubKv$R` zqM$9ia{?HiKsd?XUmrl&1!50opw~k`WE6BP*Z?;7DpYvUSfZZoj2OH|feOP8i!_@G zwrM*XRkOB>S&TdGQ@BStG| zmAfl3pf7V?VXz%8{{UMB#TGf2mJhQ>Efx9RWjed_>vj~5?g2s-HR|P5DdJv23M4Kz zWK<>{`G?9f{h(b)8#$vKw`HZpV1Ptq;3t@NuNi0?6+qCLCWmqXVkpL37zXu%@-~Sx zEZtCs%Ns%?AQ1p|u8KSFE7bz$v3w(E0y4(ttBlOT+tnaZcmqs8($)I+3#DF4)!x*^ z^7BN8A>40*bz#jFe=y1kSG9FlUOPu2J3Oxy!7+q16nGE@*ja!+@h8~N9%IB|#^v{a z_GHi}AaUjk69Tds)T$=nHujaYT~+Sl6p3J8$7tY*3iEi1m8Oa~xRk)n=RXqlY^kF} zv1u~HEDqvR64cfukRVH2(%$Ig?$&z~l}k$ihE5&hT2slEjiJB7Fy3pPSh>Zt4yNG} z>#-F&vGk~n+t4ahsa}Vn(CAafZ~a8XN_rSk6B>*#sd&Q`E2kct{Rw)_8MJk@jgM(u z$#m71alydltjd9c`qSQL4r}|A+PK87A>GT;7k8b@K^qnxVMV%7you+`8DebnDH#pA z{$<_G{j2@J+9khX4^<%LW2_diZZH(dc43N?@ym-r`y++2je+~lY7~$Qbel$WMVqTP zv&^McV$;|cX?U?(;^4z^4jKWs_EmE!&@oy-HS@eB9Kk7QS7Ja)$ir~4`vaoK&d!;3?SFv#PT_ernIK^}AEZSJgV(MJ! z&ty#KSa3W;&rkOf$=WfGrOqdUD*CU4ahI3$W-2i1L6pEHZIpwJ{L23Tv9I?k_>Jy~ zrsaB^b{Hao7!b%6Qja4Z`qdEu@CrC00Q}YYK8) zXDYq@>j+rF>84iSH9=4X+ik*#qLor8DVvQNAd9X}D{k>o1u0@becJi=n5^ifRMHo+~wx@24d;#?LYPy)r4#1D)JrhkA(p;eK)!T6Ml-O_Ec zYze435xh&?zTReD^g~D0qqN%v_G(*sTJp{F6Z7M7MUORM6j}JGQoXl#0+_p2*>go< z%MHQ50zMt)eYX)cV3juV_=?7X<@SrPNIlqh z)s@G*&F#eS%6Q)~>_zPrB8oRH9QBy9JC0G|A4r5H!T0IW-V;|W2l|3VsMVjuL!%G( z93W2&X%U)#NLLHT_c_OMq&Uk`m`&=X;&@mbMY%BThN>yam~I&^#!B538! zn2JhW?^%>FwyeHyap<%w9;;I8B{pf@P5#Htjld%2#f zn^ju-LjyS*&l~M1U5UzI2;$>a%r*sb49wCX09eaumL9ceAlMax{L8UG8(5ee-Qp+= zx0bn1Aw-Z|6>nF(gbKw*d%*XEQl*m-T1)~Q2%d#Y4({eVEN1JIXPU0qsE_7*J!7N*;jRwZ9NHH_ZV=a?pUe8wo&LreLQCd4-MuLBKLfywKq&@C+F)#9{Ff zxSVjnQ<~qHHJ>od>nPuUrhNfTH2~6tRpJ0{_Cf`Nf$ij(oLg@)_RD(Cp|(SfvG?|M zh~)^lAL1O19z*@WMxnI!)MZ<982YkZW@gr7N-AnL?>)PVclN|g(F0wjF^`v?(J7-o zVoiwe-;s)^;e1}@;!2w~}peAGaua98s-Qr#|fDn8JG z0?|~bl)qSr2%%Sz@edeFJ3>t0H{u@12nj4ud2=1RfuJfjYn7v)bPiBKw{{B7BkRhd zV7S<5wXQ6|5qn@P!jV80T_AQ_W!_>9??pqB|8RwXk z@nmP3h?T8t*@{v&@$ny!T@@EmV~-FEM?;UBn5e3+++$aJPn~LE3e6niZq%mNR1(_V zC3d6Y6pAT*pWL)(DMb$$-e#nRw0|<}8o=iaIF169^9LC03sZ*4rXd$+4a#4`l^r%p ze6OKH5l;*XcvcIB6}(5S`&30%aBd$O)pRYBDg+zO;gwwINLrGKn`jPV-CV8>1qiq9 zgoN-$T(!0&_@w|1Bcm4)uqQ$TQ+31^&iWE+?B)(A)Kn^%jhKi4SDKfw@>rUU>2)MK z5^@@{rmU8CC1GrdkHjNFYPHfDlu(8T<|OD4IHbhwDOCf*9w6Cx>@Kgw&oV#jV?GWS|BDWM%sS4`>xt+HSIT z8_Xf7PY1~~WjC)(5qCkSF41}fsQ@iA?lmu?i!BRE(g%&CO~F%rkdnSYcbL;m#bbeJ zwaxZgh_=d}4qN+FSV@~eq_*(mU86AsKq`?&Xcn!Vg5kdLn6kkYJP|}i=b>sUz$NTy z9k3wd38+d;fvR%9h>Jh~gucOE;S(Yq!qT<#9wRI%u`ZZil;kj2{!Gh{O!;9=LhRxE z)yfJ{V!%pqoX1NB7A01T*~P_(9!6ri#70-wV;%ZM*Ae#3tMNDPN5USDxgDMD_LaSA zC9lM#@1h@U!KFWS2yv79f|sTA0SNZQa7SvC?j&W)moKHk^pbt^@5PQk(P)}KB(8hM za-sQH!YYKPv8QQem90MWgk`gm4U>0tK~S|E-Ddnm-C4q@*CavMu0M%xx4n6U0c2C1 z=qd;-2KuY_gun^6wA8+pvK^^xA|X0rgD}b@KBZ7%>od0Puk{6orTeyp+s(u3W$`HYK~_ zpkwSN4PC?7&Ctq4a=6bhg(X=6?2M&$j!n!Q;6POHj=L!33ZUU2?`zPrk-C!1;erKIC1?^Hf}^*@DVG5N(_d*;Op_^YD8f81CF5~Jj8~JvHtQhN zPHgG;sv6KZmw;99K#&%!KZvGMSVk(ea$Q5C3trYSTa;ZcWzKI(Ps zd4;7gZyJXeviri(6bc&^dNG+`OHct%-xD>L3=Tt35Qh*&Zo+YezlaibRnaUMh<74I zTQx&f+93Q2w|6v0n53wmWfGKYijku5aprdmR?XYqWdYXno!7e+%De;F-dh%`!^Ind zv3Ze;Z}=b|r_Mq=N`zWHw!?mj;!=>PL-AU-LOiOgj2hq zs2_<*_PT5*(HJrk%jt91j)&1TPI25oRhUqAGwws+YydC4!>Z*!X<(+B$vcsIzCGiW zsGF;flXaS#V$O3G9^DkiA%arhYI&HEP0;UnDT^03VZHfB7NM+{-*WQIR@cY0aKN*< zW8%j^#k^ccb7^29uL=s{yG%6{b?tkP_Oxu@SA>9CBALfh>Z5i=;;oN z3)_{$DOAIICbP6*!?mTO#K9E}RMyWw#I-O2DijSFec-fduF~z%xa>T+SYc&Cl*Fxc>n%xJvLRW{z@Nk(P&fe&mVo-r9N zc`J~saP5oSy!?}lrqEAfs#pymd(qRf;dQxt@?0F@T@L3Mmj{9ydSz6eQRbKs5E&HF zS1XvMg|Y#W&lWP*eEIF^TG=l7j@jfj2;U>%FoDiX3lhT$ZUN$lp26q5H?i=df z2&iFi8H!zFRqih}To|d2e#^4B@`}2E8iE6JQr4iz&;qMg(*||&;*MKiWTtD{Hsovp zPpyWBY-{Fc56*hN4Mrr8r6}G!5}?h_2MA(Z1(3j~#3)6e7#p`FTmZ1!14b(0+#(G7 zkispFi=#6jBP!Iow|v6sI00%n**7zkx*WLi9*t>X`;a2#O&4qIfehbp4|w{3Z^aS$ z7jI(Og$inL;uLA7?~UpV5Vh{!T9x1hmj3|kwSlz<6h;K4Zl7tC@l^1z2V&0;)qQ+G z)UIH`sZWTD_K)Qg?-Tz3CM|q%4IVpAcf7y$BwMGy6Mq~{`ke*AgPuIWZ=ej#^8`qq zyZQ_#FJ3;SYaPH7inwB(<}&~=SIk|blJy+Z1zL8N3$b)@0JA;1^E*w_#R>`Dw{Stx zE4V%&OEq|Vca}jwfQ#x-PX4fFMN@c+94D9-*dPW|}+8V?hmx1&Z$wWX?VG2r4Yfi6l> zl(#}&jnTL7UvG5CD9$+65ma1b_3~^)hv9&;W0*7M_9)cD|eVTDK)O;7jT_2oF z3Mp>RE*wO8?48gUSCk2Hc6HZ$jbwvBi-I7i6<_TSFsboaHnfF!VHmW@PRF5kEb%kV zSV1z-Ucs7DPmv09;v*G4yIPcB0Y;;Xad4&5TaBA7xWEeMcR`3IH9*)nd}07euH3xT zPU%W5MBC;rt4hmHf#Txej?aUzaNH4C6-Wnv%yumc2PZ4@6j5;w_^x4*AYsTCoWQ&^ zMryMTsX^NZ@fCyKYzgeZC{@}F92`LRCnZ;qoB=0K^bkPTVD=8uiBn74%&@8fO+EXw zD*zUNZr0ee+y<-w@;3cf*S#|p_<(L)#ZJ#LtLT(_>!nh7X1{R7l-zl!x{!s$PvQv- z`%NNh2qXGVKAdqgj^lRBtQb~PS?)u^lh1hCh1UM^$)UUhc$ttQ1?~bEYTogopv7tc zlwnx$%+z5E_r=VKFT0BGGT}qCkd!xUY;75%zGn>b> zHL*&2uHbkO%BXwH0i|G132?Y0Oh&Oz9Fg8C;UDrKJ8igkpaG+nsyr?wD6R*#d6e(x zS_(kpScM37+jH0^$jQtL1=dZ`P~CjA1ObDa)YyMofY6JwOk6%Rp8@{~yx z>|RogGB~J=a6CjPGEj3L8MlDcBx2Mp%cMLqz^mY|yzaeqZJnW~iGY2!+H|cJcJUh} zjSJ+77fjqq#2}T{O$GZ`c--U&bCtJQCv@;@jlP2pUrXW;yao3>X(>YLMDOYNeSK z@gR1LyrP9Vx61^}rD;&s3cqOLm5E;O@F- zM`@$MrhjXT9JM^#tG@Bl1b}vKSfMkKOZLPS2}6>Pj}fb*YD=J5Fy1IyXPHBwIxU^< zT+83VPqh(gp$Uim2{&|mh;0N^{{5$b1Q12H}2oQuN**J7AAj7!EKcIU1eI4Z| zMmvOHI9-g5Mf+GCwe1Jx3%uFlW^)*;;!t5X{{Uh_L)nwwCcsWFa}+4kUh^vB2A?w% zix%$A)fMWeCM&Q@f&#FbK1sC`0vAb5hPB-Hs0$8KxV;S90+<6HV_gHaOL=_U3WXz7 zZ6Za0$ZEXHlL!{ta5XoI?2B9ry-J8c33*k-a|59g!nS5B2Y|8AzDy^>t^$r-${_h) zd=W{(xs_0iNni&NP4rh!fINfRBJk6HZk3AT-c_NoIu>9wrC5N$WXVzFFC`I1GF81= zc!w7RcN!-fPX7Re!EcsJ<3Cj4%3@q^l8w^;0IY1T!GcJ0AInhe5FIkxrr>#l6fmj@ zbYLSRH-josXzuHTj1y>WmunRo?k%LXBULTc)w8i5SkqCabP_RcE-CB`-BFZ^)~PI$ z)uTdHbOq6DfD)zWP^s>eGi5gJUQSA^#>#TW1Riobkbn&`>}Nc8mz3s*Rg|T}Pzlno zQU^-nRKcwilEkcb0-Uh7#3L|NT&HJ?kM1NJ1S-PiGJ%7R+m8J#4q$apd6?3fD_x@L zY*B#W6MKSuTa^pFuTO{)q!(EZEZymyXJA%1RE zF>W<&zlb-xFQP|Ji?3G4vn~KU6AeO zFAQ|AsQT_*{6XRnb397#G4uJ2cj!uZ@iRA_*SyYo)K}^SLR1pwOiqP;57a(|{T5=Rim+34{-voc2C1tUwbV!y(T@?xiW!wa&$}>GN_M5o<#}P-T@4D^ zsxua|1Qak<{u+*LmXsdjE2Uno1rmp=g-MgdgwuS8uGaF=6Y#nQgJA49f#m3dL^HKj zH>jyja%>{SnmI?pVw-hkNT$^&VEId6xVDb*w#v8w6(<9TMkHB^Z5| zWB`GbK%>~>JWIn33zEuErX9yYfvv`yAnP&XW2!{MRey0UB9mRp<6cG}yc#jTs}+f@ zzcRNk=v{5NS~CpTtI+QwPQR#=JmM7=SuFk_*dQvo54*BdKF}o5%LUq&-k4+Hp?p5i z`;0S%ZwR06Q8L&Y*|?fQ7NKCljB13TXkf$M8fc$zqmFSe#%uGC{o^SFZ)`YNT_8QB zrNLDNlWlA92u-=|o4JmsQM*=y?E&RP_C=?>02s6bIF3CD@7RM^gU2%)f>DSbagrjM z;;D^8TIl|&ZhE7$p7DJXmqkGoR^K-mGaFoe;>fl{jUdUgS-F_u=hny6eY-)jSSGyoEzq(0tmCg8PPgf(GtkkT#tSZyU;+wS zIAHH1{c{yd?Oov20b~Sbf*1zOsv3KR7-fm1SG)VcRRLtroDR%hV==PRh7eK#RPWB> zi+~$docM_Ft|_&QU2dh&#|(05%)Q=5B|Mmcg(_+v7=`OaJ3n_Vpd$6EJWLd~%!I&{ z)G-#Pl-_q8w2ZcJ>m+4)SOPm8p3vBtY~gF8#3xSWEU!4A;_2Xs!gIAw%03IlD6H~{ zZ3+x1Vch$w5zs6IE80XOO)#JaHwz;a)VCUq23W+ooywyus`??F15kn#u8JTDNdTL+ zW0rY=H&gP66f+#sC2} zs8DGzlW{&vh1?l&hypu%AQM4_R~1+dYZu17;b|nbj^m9G*%eq^CSL5@hh-Bs0WK!Z zt{^H~sWw6CK=R*>6*o5Bj#V{P) z{-ps{5}Ehy6>oc$)`PiNJ{Y)yO)ZOE&~XO=xiHWvzcD$?vEDR`=e%fcaIha7@ql0qj77fHe|xgzeq3^U?XE#nqig(&fEcP*znIdZ(blEJ$?|SIsNnbi07z5Gq}CY(sF6X* zP90>NP?--cti9K5g-;G;JQ5J2d0T-&?VB{qdYKba!x3WZ2BqFfjUANLLwj|;1{q4v zh@oW;mWfSyV2LSHFA*icTNPTc2XUHa^-}|U2J{D=n+-kmxxI@ zI38Eeaq}3EDZnLFyqv&0hOSPETapTHDNif8q_7pY6edtnNCN)=CGD6EtBbLso56kD z< z0e5(#AQ70wy{v$2C0tjzt#c}%-V}@b+9kvbHdr~9d8h#jKxC}DUS*fZ;7tJcs)&;) za#;mVMTp28x>0Va$O}#wtEhMn0l(UzSb(^PfwFg;S1m~H1>>}}7F387I}e5sfMpQ2 z^?aj&st=cxvI+n;d`jT3YrR2iszl%j@?b9LV2;L#b5&TbLFZl|;n1PhF z20TZWIPa+rf)GI&a^v;5{SNSrW4UV@XpFMuCR>&{Qt0881<;%K^9vzep4A6Xl-y-) zL?}2pE*asHsb_r>-{212?kqT5Sh@Lu0Me%v#@B$3buz)JigEdX8cRdUJVvMju-Fbt zf_sjDPciU8#nrdmg9Ux<3--CmYEhpRH9d(i6}BO@3N{X!?c!9HO5NBKv=Sw|yKvhM zMN-A4N@a5MKov+)ENaZe1LL?TwWb&=SqcqKcp-0ySZ(EgPNAD|B&dgdN?&LpnZ=)W z_aX{q)!-Fu6m5w_C6SNZhbxrtpg-Fr+>7#0)5 z%lShGPs?-~&6bw?j0TvZ09)E91lPDzb&uUD?`kD1wd`O^2`KJf4c0FtsS3-?X%t<$ zV#RP8un0p}41NR%q_oKH7TbbU8v%?PA^bVU_m8cU6dWi>rukAs$6m(^7^^k%gtG>h28eVAp!#vzDX~-G%s@ zse?))G&N~sE**rfCpcaAnONYm7PD|E>93)5^7n?ZdaUmO;-cJ|(~%gCngeup5k81q zR~aC|3<}wW?@{3H;F!a`cGT>Y^_Va(#4S#0VmZY}4Y{;4S5f6}Lp+ z&Hn(XekHop?EFWGnK*wPrgU9os1P7Py}*@;WK>B~ze;pH9C|l|Y0y>B8Qy{Cxg4;p z$FUN+>pOvHOBOeCNrE|dl*afQHGQA}uWrXI7Y7ay9a(M8D1aTsSDi=Lh0_PMI)(OI zMof4$4MOlZab$R1V>rz}#9@Rt-+PGYB(I%f5c<_bE#mGN8YrsvUSLw1ELu<=2z}1g zkt!1yT_sSAF)M^CzCVdq2+_RC3n+oJrX}Tt zBUxaeIb6io^0~2|fY&S$CJcZ?nM^Sm{UoakuvOZ@&Sg`9L7ctlIow|a*$G^2Gi>KE z+$cZ-<)p$ym%z2z0JPYO5_d{sS!0UFClC^i1@()q4*7}qLoC%2)=DTZ%!3k*=!>x| zTuqd$@ee4h7;pAkB7`C<2we%jYt*2mmyxc5q6Zi+0JDdDsDuC{As0A69+X1HAm>6@ zL|b?T7+Ht3Du^H)e#Pcdutrfo;wFp~b1pT51|uwN7p!E%v@#Vice8`$Ia10^a?)l2 z4x&AZHZw1wVSHMCGR&AvG6e^XLUSZEBPwNBHINQFLP1-a3LAXOq9D%b@teaMI2SEe zr(tyh6@isdQC?7l=EH-IG0aP_psXXR?-GrLOp9F1vQ`_}7=uE&%Hm)zUdFAN9|y3F zn|@(xyYt#8LlsLh-lF@kE`#Dx1J1{^5Nr=_-d0&sihYGaO@)Umue29aTVs=$*+6cP zNyQ1~pb#-v1MmDmRDwY-;#nH^>L6$=ja;|}TX(6Nnk@K=SlyrbFF>Oe1+6iiORQ)W z+5t`*++!H}M_u6m09k`t+%f#ibk8hHE+y0Uh7Ixj%Z6Ea_wVmAoyFBspn?*A%rO2= zh8G{YFp{N8`md$+ap-x539RNISLaYV9&R#&z!S+HDbB5|_>U;NVe=R%Vapre+Af}Z zx7sjAWtQ?(c(mXS7Gj25FEE~ilJC1Q03bc?`H01pcZ>VOiG)#$hq6^Id+@~4`*hQsUSmtU7CCb)91>pw^#9S&2Lr(4;e`s>Umb=Wb0!vn*r6s*)<5#)8R|?E-XRdXye2nQ2g>) z4*{fHus(SU_6Qo0jUrhsW)AVkgdagyUQz3QMT zq|I(;9|>g{1@&B3DSKM2r{m8n_3GXgwL=4nx!uHyOm$7o@|)CKEx^%LELJu+ z6?whfA1Z)46!s!>F)qLX0~tetpf@m_Dw2Vs24>al9D7@J9ugEPFo!n>F`%f*ge)^- z5X^l2rp^}9V3M^CJ2t>wGs^`MpiMpK-F>2zy;-W|oPgCA;xZ7><;IneAff}p+PElC zPT=ATkAv1KFsiwZ^vgm^rg_2bh|kNpCYWL_p3q~46g%Mn@ms`r7ZrAu$(THliJe*m zzf@BP_0|A}g~_M1w4?dVT*y4%jLT<53@^3=#9XOhpcyG_Xe_`kvL^cwQR8qj;x|o+ zRoxAVfvCN)e|du)5-SfnMkE;K%T_UGcu~#Vp~N({lCTvhTowsQc0_k>rbpTkbsj5LkcMy(iDdyiK@o|t zU0R=KXw6s!k#wQVxRGln-4S!rLj`~=CW+B7-vqWv0M=}qYD!K=aYRbr0alSz%FbnraTSbvepBVhKv{j{u%7%P_P}Ect)bz9=?b1B)emrZVKOGPK|aIrlDCRD2jFF=3Y* zeWfuIW`ne{P_VH|X=*<-1=wEz_JWD3bGjYw1S28Bk2#1q8;(a_&{_r9YWN0G2(d17 zHK@S=8nT85ZAzdZQEhD#%n|{$(*uF1hJiL=658gX_L6J?QSFt@%O_Ce#)JxPUlifI z*463kmS>y2E>Nq>3MDgaw=NIe0x@h-Zbr#uOo5-|QO?Ynm31P;Xf=-_;=MM&NEaV# zhjR4v$QhbgH-6E^KR};&$0nj6Tz38v8Qe2@P{9uprIaY>v%1(YtV z034Ci4ZzZ#@`yRuC9Ywk1_)4Xg9JbZDG0Hpnun#4P_|pJ#~IAaHw1xgK`(|>CgWU= zL7ZDbSg34_KxnXVisvom7SWilMb+;HSbis!;}us8kI! zFn!~$T^d1r;f-lzxNJFM@G+DDvama9@0d}vZ=TGu%>u<*uQe;9QJBT&ED0*j@Ztb2 zlv3Wq4R`aA!R--1q}^HGEEF0{Vi?LwDQK;GO)3L}4}TEZ4N;pZALbpEa6ElcO+%{j z;%lFgED;MUEfq(>aocCHGUub~w#~r6@0ZLSR4dIVGj08&vw4HZ@0sMx#^-y7obfGL zzn-<|Fk*`^U?9^C;(8c#urb_Y`f?q1I-5f&u07x&;pW&wUkk;?-Z#aNpbE8}Vk#vL zXM4D*VH`eYXCXW|$B5xd8%}+tV&rx%$mR=g1Gvi_3o9l*b1cJRt2pl5Q($n?A2Ntg z;Lx5U16CU@?cM;y1OXE7Qz;xqyRqfi;CRfpSwnhqsCM$y0*ktNhk}4PZwpe2?gH9} zyO0G$hR^T+3d!wMnX}w$Z@W+37PFgvPwjp{gN8#l;t7DzG?9 z7W^eTk;Y=9bR~zpY+`_y0&vMqA~HT!fgSKGMsam7=zGS0@vSg`u$4edCT< z5LUw~nbH(;q0)#YS62*zhV?5io2V1Kh;4ZNw%QV~geux4>f6Wo011-xc0bpYG%a{O7BMuRgtnX`H#7Mwq(V;@Z*4P!SlUHh}& zos(Vpp6_79alCezcbVUA372aeb2fhd@z(Eg#pt+F5J1IGIatNTi!NVF{TbJehh7to zlXBKO;Dj6lx%|eoyW_{+5#c%Ueq!+9$Jzx*c=PWJ0po-H%HpE%^1TeaY`$lE~nSkwB9^lqV-^UXi ztpa&r%(#ZDOI5}r1WOoMLl1a6CL0t(o2Oz3r4uvYUmU!=WGRIwDF39 zzzw3xy!;*Xu%n7Wb-Vzr9GZ5D5HbKOGjtQic$lmD4~t1_3euHdRMvoj1I3RW?W zOgB`o^UN3BFa?O?mnlR>sSZ(5+E$wCB|@P(d5obA#fOS%ODU)^Q8Oqg_CXA(WNkPG zVnzsr~s9gTXufpIX=&7&pvi-OdPQ7neRG(D;UOK}If*eMl?V2=-&S2z~D2A~LN z(_PrG^)>^_`9nvt4+^BG^n_#T)t&zUKNBVD_3s87%L})8;v($d`k(NeD~X0<-QTwn z9AAr_T))zvK zEWg17H3o4<7jVoC3t;BBm0$v08+jRI12&qwyWB#hWvk^#x3M1)s}S#O*(pOu<~opC z_OkNxm=rY>+dUpj%+~>+qXj+!4cNGg4?}C&5!p#VDdih{kxzn~a$SHxsKUrXs|-sH zR_4|mgp_9NNZJD}L+8>`sHk5Bae0bM_n{eqU1JSIu)6CiiZe~9CC5PUH6Z}8ClXu@ zKZP0{d4O@)(1=l0blFnXe!FcjeLfjRp>Tu1o4D|rcY*i|ARo3VWP29GW2|ziF6;V@ z0eHJvW#K!^B(@k*td;D{M{BNJz%{t>Dzfkta+J_QK%Xk=gJq3LZxhiW0-m% zxkogy12PpZEKIOPJOaf?CX!Qx5kc&-?awZ7Xf;<2urq5$Y1tf~Fe!XJpz5JTQ0=*5 z(hA7?3{ZDtz-WVd4L!@m9RVq9V7AldcU`hvt?eOnfT6$ihc>I?mU?9Vp;0C<)*`}oXS-_MC&w(%Od zLlZqm7|Qw<%a`e?QomC5-f=d$qB}CYZqM}r3bu=~q6n>W;v3m(S(JP$r~S*P-1qG( zEmsY1h~;({+r(p2%*^7kc;*m52i!mQTrPCh<4eUI>F-c=4L;v7skRE)0UJ7n5o2mC zZxFejiHvq$B9pb#TrSO$u#~eZ&MlP|a}h+gQ2L2VX>g$ zxaVaA5mlvVArV@DLvw`}#G`j)U{{o-6$)i>tdca8Tn4CD$t^Occ31}=bDHw6bg|t| zAVAnz%;y1P@2c*sh+Ty~&|^xR)pQ1OE)c$Gkp%@dCwa!XsQPSy83|T~P`ddAu;SRT zLJ%vCp*AtVG+L0-F<3QMY1+ZYkz%dsv$()qWRyQ|EUgR`Wj)y`)Ti7TG9rWfi^Z9W z0ng<(H?3}D0_qP-6=!h!we1&}t68B;?y2TB^OiD1pe(B5CYV)uTjVjit;m563+AmQ zN05|PoD+A%JZ!|W!z>lx5};M~g4*0@)es@@_JU3m@M3dxuHNHpux-Q&HVQj|G4cT= zZS3aYsxt>I-M(f0lB(U-(k_4@FaeTT;RBkxNLcQWuoj(|Dno@?;dhAjG;dJVR0jt# z=*5gFYuf(+sEM$E6A5~? zjJcXvH=ZB$3y7$?qY|t;2~TRC37@3L)MpI~uMnyD?n`p^sC#RPe1rSuS)IJhFK=iU z{8R<^=+ZF4eNqr6DkzouBh$xSiN`^>>8~=fA?4y&pdG|RH!W9vMFR}qxN#UXN;kWV zhQ*eh$Or`*{oxA`*!HP)z?wC=ewr`H! zi=q9IiYR0SwZo0THBKxW;*6~u%}~pe+7z~`ibZ&`VN4Xlj>s@7?9Kok)J;~9xY_rO zp^6qSekF*AqSBuQ0VG&~bk=}IRgr-TTCf(RQgW7u zlw@Aif~gh2B&B)m zgr|6!Fu&-HbO^NBC|_47D$#D2t@=O!plA(Q*@14R%mEU>=P*U8SyO-v#eyolKZ$mW zFrl^u-DX^NDFR4Y?-W{{z|~52%|KEWEeivByTq*knTffh5qCKD^hQmums}E?f zA`?@2h5TjIG%o~N8`w4+9?)b67U-@p*P+PT8pPIH!G**A;2BV5SaNr!CM4Dc8-gqW zQlumtMYgf*mmuHcojrDKtT17%~2+``zT{{WK|R5iMc zu+;V=NiSr3cBrHtQ@F0uhRiyA#Q=%KMD;O`q-`_hdHce)xxbh#Iq@*h99s{&^DWOG zy+xcay}|DDXEWIEi1M>wmrY_I>!V2r)G^XuUE_|iD&wGxuheZg=vjcM*EofbW16xA zt_~lKL6%l3;w?uTcZ!M{m@0@&8(k+X-Xdge_LU@E3zZ7j70UOC-GvKX0Rh$X1>?iy4O8=SwJ5GIA>p&nMmpmP$ZT z2V}!o$A3tbZ+D8WptS@P1_Ql2u}b=#vbEuw%w!9NalwBO$97qvg9ez-t+ZxR-^x?? z3O1|Rl%g_MfUfk!cLjwny>4mLL8=`R=|j9q7xnAC=&eTa3^IXNm~7Ofq(A}YW|1p` zj8H|0U6tpw=U^Q>*_+gn%A5=41Cn+%=tCmw7Uqm0JAh3Dx+4b zka3%cyJB6+MVP3n(t%V8-+GKt4W^*%*0H?zi79FY=HS-E7uq3V@|d{LK{x7sLi^tk9rv!# zXnDu&i+SUdyu$0idq++!!3=7vx(0LY6)}F%S>z^Da!l;LAV$CHYt?+qht$@`Bd2z#xC!c8aq-!2-%1$NKyYowLwqp<%STlQIhj=dy`Hu9}KkRDr66wY} zMUt^+9KlPZt{dg32m(^ua2G8pU>DvzZcN(wL>CwVtZf%iMKIg$E}=1ndXVf!plt>+ zif_R&ZAmB#R`2fyN}03^78e5LhPdTaQG&y~xFzG4X-3A_%|#Vd9T~4sfYT z;~`(c#2HXz)@#hH(}%NbBct9 zzxe>I;QU67wswn~;w>5bJ*9{4>Rj*b8SMfBF_*l+@SDtg5KRX+En{_fh@1Luk&FWi z&-YLcL=`!H_b*kAvpEbz2Z)CeM^SyHkJ4{163`|@%do5BWGhvd<8|cDdy>^#8aKyj za~AL77YBgsN_J-Qd&4*k-P87%^w(}f#C@CLZuK1`p63$y?DmUG)(Y2rO7Z|Ge}uUZ zG~O|+RNb77=&P*97-XH}yisOci@pf6YL1m(6BmM}#dqRgnW~X6)9((Bt#{zr22n~A zZsWwQf@Uduy_t{FId>RB1$)7ONVKs-T7!v8+Z-d*tD1a4o#!gRM%ZiS3_^Qg+gk#v z9Co;+q{GZVetT^8Ulf6QN8>?k0L?c#||OPWXx=CO2hHolwg5H6*i>-Y(Ri_#1ifi zViT!C+61>ZRXa(K1#BGnMG(44a6apgz?TNHf%_1kEz1fTVBt4%&wovcYQCSu z7AlxDcwWd%O#wi79aI;H&;g?RSDAPoAnB?-f_FqiB|H1Y)VT&5JW6smcy!Ei)xp_C z-7@Z}D+<=Y#lsLwq?A5cSR$gjvw-a|XA_s7>JnYRc@6?KB|zfMWRwiKMhx5$GO23O zhNYs43&3k|lcCAW?uUXX2&(Mg6EtXcD)|{-E|lnrETsZ)WXcsL!-Hb z%1%*NG_*lOHHIo%apCQ9qAvmO6&0Xlc9v5e&cxqMhZgS!7PuX?0#rcmx`SB&UmWyf zA4$vY6RI(&DmzCe+@2+ldrTiXm!?C4EP3x1Q=`P`Y&ENiXkrIZ{{SHvg?rR}6+M{H zYKuC_fo>;<`Z?_^DpwmwGpFHfyBE(IEbTizeBv^r}zpHEQby;D_3FBkG#DKg&EfBrBepjUozPPR`!TRXHSoa&cj%FJ|UKf=Q^0fHFIj5kzyjAJyu93^ z8^%vpaoh<&9)pvKc}4WUZAsM)eUNG|iZue^6(WX2;0I+kR(r#=9Mz1eYb3(+Mv-W` z9wJsfn?$F)s1YA{hw1Me3Xsr}9EX7XqD7cMD~Rrn^Lp z3eFg5px}Y3I}~k}+QTX}Ocuc{^<2_s&i$e?3wv*f<_D)m%t8dJgLzx*5jDgMfY{z3 z0cH!A9M{Y{g|q=T^D1psovS!lIF;WdT3w(KH;qk}y9t7cEBv^aPUV1N;b+^PC_eDTW zTnoew(8mzQ;OrvvFWQ`j;)Ipl`UI_tw-BuRLdDQL@iLpQd`nM!FNh3^Wz4ex_GQ>x zct257see;)Q&8+?-ukFBaDtql$|>Mt ziq%JeMqvD5MU|q0$#iT#3Sx`hU!Fp2#sTt28|q^tPl(uyfWScgfYEp$040D52ZhC=sD=aCK!;_Ly;lxQ=BA1L7gx9UfS~@N)a+7$J*awMt?{j)Rs|VzBU< zLJtL>ykqJ)elA;im$ilVIjp99S7-6o^scpQ$jpq@c9i@Xfzln-CZcqV_F;q`)Xt8GzWKXNS zb<%E8L6@A9zS9bKylxzh3)9aNutt1B!iI#_pnXKM!4$y#%7t))8vdh5lxMu}GY9o? zL6mg+Z|yq*4JrwWs zw6OAS=)#f^6G0}q;%dEA!2uwR z=BT*_or2MD?(%BXw{{ZnYn=aNQ9AMs*vsf$?!bM45O^_w`B(b8- za7Et8iJjm-+feHHZ$BrAeuHQj7-@ zm1|56p~?6;SeR797<}|;mvJ;{N_mLkfnDox&eK=MBOg&;9pGw-;DX*c=3Qc@{4d@n zzlrBKhC$|1Q!7{fl9(JFA_0cLc${Rgflpc1j@(aQ|}b<2hfW?`sGZvOzNH6o05B``j*jPzI>o8kaiaF)pCO#g=N9F!6stGC8j@f_#CYwz2ITS614`J*7?R zt{~nM1ORANrDBH`#XAA)h+>|WptF<826Gl!HJPJWkG8he;t(+vY^ourilQ7%4ulME z20Q02R`8jf;Q-Dx%+78ut{PnStBSRt3qHslFk&(A1zCTq0OX z7;K%77jcaN&>L@R=H(DvFfZLT4gMqh*WRaq~mlq6H+V2NAJ#5;{rf)fj z*j!vyZQnmwb}QO)hvr^X8bcARF9pgKwvBW130;jT!Og&;qaRRW!VMSO7ZdLr_Z`k} z_C~wrKR+?!r4P)vR_f(K3_}e{j4(_WiN-^=A?=^EO$Try^t>@bk>AyF;R-OtTuaU% zpz_lw`F0`T%q)mYZT!^0kd&-y;Mw?UEiHR{%S?#r#z^lpq0Xp^qg1C@5YW zYCWo6Wi?NT--9ZG&6at9%4&d@Sc7RVEv;HH?(hbk+5hV9Izypg)U$7r$qGgRg{ z&2JV;Phge6>nw zTrqzrYj4bHk1-~>XV_Y8-22;6&tVgSHHG8;vi^184M0m`xbz-f;+^T@eGCkL3b=oN)&1CXjN^w-= zO!v5GMY1a2e~E!5+d){(;0-yyn1D*rjMce<$pVW10I?e>b+y`mmqWa0=s8`L!AQIxSMF}>6x!zchm&Xj2#E}K-8j3CsdeF|i@lT3Rg zzz#q+X`E#{g8ArSa;?E;9^@Orr-lQw;O_|dF1`z*^#+Ey0qp^yyrL62SnM*s5?{eg z%^Q?Bs1gV!s6|k$X+#Rf2BNc)&BYwB!CO`MFLA^aSU{*eTN3N){J=G5#GuGf+TUYH zz?YeBDW~#o9<+)b#`J2_ag$SZ4ww8#trI8|xECsrH-_=IDfoekXjs^~J)UJp-O%dC zKe{Y<)DMs~h|7|b;8CA5S_;*!ay{VCTf<TjfJ5&g<(`d~Q zVwN#y&SI4nyWzN!)p%Tcl@3yxIDE<=(*<+y4Xw$Xn7GANObwH|HI2Z3e8XjW2Gizb zsf!E0XNc%zW$f{oWj!Brf`*tR$EAK0*)JvMoOh-m4%iRi;Q$V)G&$Jwd zIINdk$5;a(4KH?im@vKC(YJM3vNX)5Sg$j5GX{xb=QI?)#AUtV#v^TZWe6e%0`mwT z3~>-Oss(#N3FQ<++S)=HRw~p}MK;VUv3Y^)?AtH_RX4N{+h=P^#BJD#dvO(P+O^n~ zl@Qrr3$q#X85ZDG^1_<uwaRqQoK5? z$~#~{aVu#+0ulg#40eRh^F&tHE*IujVKa*EIacCHmuLwAQ+va5%0*4eIs@V(Zh3!6 zscB6ub8yCX-$O6wFnRc()EwV1fJFkJaaeecP_aUttisnQ0>|(oZWu#VWnYNss5sUf zJ@Q4-ip6TxUMz+b?3C4EP*e$5BfLTFM$icqKO+c=|_1KC5rf-waC65&PHk4&29dXE=$wKjd7^x-{FadqX?2fP)@| z%a<-(xYN-Wh+)J884P4B@!nm^uMAZw^xs>8AmHNMQdv?f^A0mt%r-9gltiNIx5Tgn z$B0?3*GzrY)CMcGB&DYj)W^(K@pu_k@dU_9GhXq`fq@7#^K%XbAx?7!Y1-?UX77^O zZ*Wa`T4|3nk&pE=yWvjNEX1~7^(@6(M(7}Iu6SPYV6)GE{DoD3#j>S9Qf>ReHvp<} z?*tVKsvJs!F}NwJmZF$0LJm8*Iw zkmeljlvmx{J+m&81f&*twFjBI23p=Yu_|5-7$JJ3`f^!lujLp zbdK5pDUlEXk*?98!~mtifk?*)$pOlSgeVF~3_(Bvk(Bb?{XEaRKVYBhT<2WpSKsjb zdTE#kKajLEwB z3He82d3^m!E;>WNj^JIJTDRr(e?MDzfLj2(?MxW=*L+};_smFePvBloO!t@WERij_ zM)$z(5;o3T`u))#gx^etE?5;0lojW~Yt8x*A(lUyBKa*> ziZT84%Y$9Ur(!m*OTNW;c+lBzbyhh3G4U=2Y}$>w(hL!+f1$VOvZBhPyYy+(uR_oA z$?RcP4~2?n>k7u44CDL_(cGQ#=?`w(_#kq7KjJ@^PBY3{6gpM)b@1lIsj$>ikUzV> z_AM#e-G8>6)|=fn_*0>~62;ra&9&n{p7v=NDnmza(o=`jFT;DYNu$dpbKe(bk{KS) zhtqrLy7eWD;Ah05Y|0oWL(DnYHl@lsgnMpt{Se0aB`wZ;keGNO)hEdQa--J|hX)_F zHBNdZzh*d1@Cf1>O>q&ub*)K7*Eki!M*nr=di%2W`ezcdiQ_5cwAiGf%kG2JE?1)C zcEo+;s*S6v+)t}gMvcH=+#9yX4&Qskq<^{DO7Dj780$+q^eZ}Ir<1vjm4B@VFK%|P zo^_|zGgdwXq1jX~M?!vRZ)?W7hY^0JR{Uy;ELig~?fI4|@UiFbqx_e_M zWyXT=+@fkGCJ~pTd7Q#0g$MV4XKuJt&XT_!O`5~hJZn~%@*Q7ilTa0xxg9U^$gB1% zrJ9fxFZSseuuz(=r%;Mrz%9l^@YmU={)YX5gk_e zTWETDd+jb1@FqMtOl~H+K=WSR%@$4ZoX~Vxn5OFN2JT9IOE$&Ipwh*@KX%bR*EFD$ zDH-gTrMTezL|i9?E)Rp+UUFomKxYMTL8>Si?dyF5A7K(KZMB%?i;bVh_!#N?ct&g@ zNO*hC&^HGsT1Ku$^+BECBxtSb>v`%{D-NOKzH!nA%eMkVdJ&X!DPB-J7ySX&)a9wZ zX6(jOvtgD`ELAoN0jjv5Yk)&wbM+pQO|zVRBdJCiVyz2_^M_4-!ZO0-x#aKbeuVTn z5?fC>iqsNjZh906mN|Dk{2g`>b6Z*+(0mH=8eE24?Yb2FgD^Pzt zCA-l(|B!|Bi~4?KD$Cjr4K5}I$9`JOK!hPV|guCy?)r8EIiLd#5 zH!thdt6X;9BV>VvK8%4+c8#3%OW z##=OxVD2SH|G5<%bqBc(?LY!k=7r}by2y+uZf4{XeM% zK(2TRpX3^gpa$&%O5O1NF|f|t*P(T}v6?)EKKV|oQ|)jLooIoTC5s2OuW$NZRVAOu zbKH$UE7hX=0|@ef1`XFa7Fflz0+)Wip^BE?yAmoSh%1xI#!ZJs3JVMCmEZAqJ>R{b zO2P8iC4-a)ydOu}5+9NJjOp2QlUV%<+q%7}b6ZR(KckdnIWzw-!jJTf0lIPQ*4C+hj) z3OV_iGMG}fm}(4Yk)X{x7UDW%52f9!T@^aI?OvCjnCAw}HDg}0^t?QJ)J_CEe3fZkimDE_6yuCwh*^wRi_i zJMc`GDXy_<5{jE>W3Sfa7&YaNb3YNN)hZ}^)!)S_4L`T0wJaxkyjY{7V|P?PQbXux z8y=;;lCG=LBzvW=%vLGoPgj%+5rA+kHN*H<`GB#Fd^?mMFVJ+)UK-mf=9W{5Q-6sK z;|RI&M&5HAy!A_PigoX9B`p0hW*+a#qj-{mjvD2;780WY)JgH1NZB^)#m9pj7u0W` z7C0E6N_+7I>czMRI*nqNn|1t$0+(o#yYND{bn=-k4??+b-(&t^H#vW{K)&WArNvN+c zBlZ{Mb!*IIuB#|4t=blBX**wh#$euL-NHIh7`MVtnV1}FwSN20)1PWDHJreyzIjm) zD5L1yDjBQw{p+W7G6LwmPw91SMXY%SC)QjgOSHspkUnJHnkQJD#&S?529)Qd2G>NX zXeAt_7ZMS^gDIAtB!>_U7inw{81q>xxDDC{ zDG0_KLzSQYnqUV0O4%^%6Yg91Gs#&*D1DkpTeya5`=-#nG?8k){u0Y&H-#-9ZyUcr zEcE!bc3IDJ3FeTfHfsc#SLslxN4tG2aQeO}(b9cgo-bJjNNPA>i~UNHO=Q|EiJZFR zAXO#?|HKzMCT%QG*I!$t^&odMQhn{mz27Yp=LB!NvqRW4tB?k;i3T#jk#(ir)|X@9 zqw%^e+;((YoFwry4p{5gxf|do%D;^@uvWJOMWn*{jOg&;AX{KQd=mPn8@a)X8T$)j zf=$AgqC!&dy2G63gzpEJZ4Mw`zToSo{yp)6_kPX^^7U=IHOlBEJ)`M>m519%IkL#H z-$`6;)G^+O=@xI9zp!#1aysqsR5w|<0>xD$fD>8U?oy&&=e1A?%yPmP*PTpnK*RB~ ztz3HonPy(!%^g857G9y_DtIC-Cy0Nt=Zp!CM!>B~u{QTmIUc78(RUEbB=f%U47C`L zX>@ls5&EPv{^q|Osn47z>0hx!)b4n=))ZYq*f9{fD4*nR1;+EpT zwCX2rBYmq#{SqyLfHL{XF3Cqgc06sJvHp>bR3)-QN&-kvdd`5@(yBhbL45kqI@eX2 z&>MFGlZD!4pf67=wuI;tgFoEjo@mKeGy`7_@&?JpLAbt1p?39fiuWK~kUE)8-_m31 z+1ZcbK|v!D_a0oWE6{6838rS`&Gvw*jhpue-kO$&w79BZ-*`cyjxPt_J6YLFai0d7 zv^g;r33gWArTqFW)UU~#=kvV}S{!RV7cs#|pz3dI`U_)H0xC?1bW-(@?3)++Cpcx* zF_)~g+N}OCSeCXOnwHjzf2^dHAgFuvW46xO*Y1pr-wtU26_T}>*ITCoV?6F|Lls!p zt^8z4@^zC)-2X~y&P|e2*N;elpV}kD@7eClrFw9ZRgMRf;GD-TRtu&C^rWi^B>dN*xW{nZi-K!c4bfoX-4XFZ4^dar?Nt@HVzTSF?7<%p!Y#77PC4-6YP0t!G z&a~H#$GhTRlFoRqSBD+w&#FPiflDe$CG(nBYe)4$j^oP_%BnPml@8@@oGJ4bwd=El zIX1E*PE>02pL)YcPw%=%%-$1V+rq0{GR?8*1eJVUmn2QVoR<{MFiMp|*DqZjJTXRa+mZ>P=b$F2<2WazsKu7q#hAZ}JH^Je zuYirRQ8me)hYvz{CxZXteZw7<>J?9piRN?99+FB^JO=Hde_!e{jr6&Q+Mj@bhsNLs z=@ZUgd`(X^SEw&y?ga1c+t4HgF~QT7W%TOpt91krwuDy1+B7`{>qlf>7^au#uJTxO z9hr8qDGM9obm+E_w==M%F+dZ-)Zl&+M__?LvD67!u#ovW}i-xGy^`+1j#yb_M#6Bnb0H8Iy-5ym{AA^hsdsBpJX;4aCiWl0Ld)!iCzmD z7Gn$(-{789Vl2haGHT*0<;IN;D5yc83FDxO3*v@3X$LAHyX_d@O&LIiP&`DRBD-xVY`LXjjHl- zSt$yAI)EH%{9Q+c-#`pc2mW%*Br|2X$M?hsSWw^_S9WLqR?Nf{8xWX0PxC+iq@ej{EZg-MeZw-GX&Rc@xj z96^(&f0Nik>EPwZq(kfn8oBmT?0`EKE;E)_n>#N|ZR}IX%5RZg8LBRkb{-2##1}jl zarym-+t$t%%Z$H^?*3HL+SF_LzLW2hr{r0`7d^Z-MuQ;inelS7A|ZwM0#9k`?x%f# z{3Cp+y(A#NBu-yj*;vKNGq2_8q#S|0KSA=rUEv^Tv{sq2K(4*(n--aM{O?f{zPe>| zer#Q$4^OF^8nKHXq@Eh&e8_tN1zLEb+>*~?H(Aa_fW(tGd-OyQN;uXY++}LV8fhMx zJ~6VCC)&&GS8T9I6s4u54feHoYh0~89~R9LwgrOIl5=>geq&kNn()eihWqktl|Ac@p*Ybg}v`I{w@|VU1G}RI5Xh2*%sMN`+@vyuZAr zsBv_0-J^F@i^yK$;(6mCCKSpl5_ldW&=8>aUTZ`8aS&bOAz6NaR7JuYs9KORmsL6$ z`&_fe{DBg9XDuG0M3VuAxFIBO4bJ?U%=WJ8I=W{(r1KFBw zKg~WJzU+s1*t4%~UEbOqk3P5kO)nU=aeSrLFXUrp)fUgMm-lc5!o$Z+(D)3Os_$;& zzAG4UM=k%;!2SVi`_m3u)9l4fShCy!r*o?>l|CkEdQUd0vh~Be-CZ^QFKVCxkAV;H zc=i-Al!*YG02>3xJA0m+H7F)f%HAnG83A2TR}dC&C=XMcd`?#V@8i}xl2nd2@ELd`A){YjVLZ|1N7sY{5hHFpC~ytV5I3SLf1;pHZAaSi@# z6S^tkx{UlwDlDeEsbrRJ`$`zY~9SBooo8-1RZzD>Ebqrux|S3`*V`ycaYkV zf*~cRy&d|ud}q*p`ANwM909#E5?c3?g zBJxd5s3VyrRY?apG8>_P)HKb1uQH1KQvVJajp?7Q9MkY3--LB`V@n|;y8)eo^+>~_ z02*=hBNg2@c(p>$7sbXklbKwK7$aO!V_Ewv^j77^9Yc*b65hSYpOjEel06a)dvah_5^c8ByvB%>}bC=MJ!l7i6bxY zynUAcpaEP>F*ln?$(Q&>M#rkxfqG)Z9 zfukqkaZPMS7tz)iCS2wvpR}v{l5)cYmo^HxNYp2_zP&JHooMRpJP57fN5zS@(7e2oTovUo=tRh58T7r@M_5`9y0VgZVK zd7k@Zar@f?buP(TRnwZrXIED&hS=hQN{Lh{NZcJ?S4tYN5U7yKvC?+O(Z&#rZ@OKa zT&wArZXn9qS>?+=vMlWOE>8kqr)!Z^lcD+Z&>m^os`VYW%kC;X=^?mA+MwRMsJyqy zLNfA)Ur^$Fkq(GIY7yws7kTecDmJ1;_i{s~El`Fk~9aS`ye-XGQh zl2okrorjFHzrKYz-pg2T9{MuYgdK{=((iCRW%0#UcLf@Og!A&_EI07FbuoGyIB+gU z5bH~!w2?V6Bdw}!nwYGWnOPS@`=E@Q25>pRVtxjBIs6_{6-l28-Pm*1CAs&^?9l{8 zdoc8=(C3ozA6HP^Gdg12J6RIXgs=dM>BA&suHEZ`ny^N)i>I|7K2iN)!N-PW-OKy~ zcxGs0Kp-&y=TL95i@&~r(x~Yl05-|K4RK&;F--tjAsXI(_e_&Qx$S~&M>l*Pfwb0+ zz8>V|z%!(t>W)>p ze_WQ$hHv)9ywfD`?hkZ9499)UGP7d<8iU=PZyXQBNh0*77hNy*dH1tEaoB2o;vL<~ zuB=C@N-PpRWof)-<|9%zDKMG9e4g9MH8Be9Kyo|IHMbpmFIfq^M;i({bVHbDfxq@j z{ZcsL@uit~2<3tw6tYpnNTganibP?AgDV-< zDZ)KhL&3=QR!1FR6hfkqNEw3esT9|+?vteFNt*8S+K?KAe2uFoS{CN3X!U9~SzZgtuZ7bjysukcR&I_vT_sIrFMzRWv8q&<^OA~R(nvLSf2OkO8~2=@!+ zl(lcK-*Pf<&1<5`GyDPk1Z96*P@iT=v1Aq8$@JMCQNdg@50WHw6{6p;7DrB(UVR~=7z@0aJK9EB9S5;g8?eB~JpE9Y4|1ZB~Ui+H2= zOHRPmFL8Sx4+O}SU0G3yjt6`~r>vjQD&C`I7XqJ-wET8yq*UKLTVjE1{R02^(y9`ySj4 zK8VDeoF=)DtZ@K{+nQ-7FsN{aAZC z0p)>H0aD&ucXtlCG*|d*QV$W_o_sP22ca?LwQAe0tElm9v#z<6zbxCDl!-aTNBLcW zy`FsIdR-dk%4jL79GHg^EuCN@D8o{`o-|yeD+x&|l@@w?3WM0-r7j>>VvOhuEuR&4E0ABQ{sO?-R&r z+F~I`cB40QA?Qhg)4QnM|x1-_24 z>+@U-94WU?m zLtvWWPZ7qa_maU#zmUbx=62Nk$AK@$Sf%2LlIwR*FC#}{(V$=bD<{$tZNUe`+XgUO z6YcV6TB%X^K8vHG6h>}SVM!3VE@Dyn!#;JH+rTXuEz~|dy{Gx5va)Yfy}&)OhQ)+s z9&(dR=$Cx|N)=*Dlf3*K86{OH%Y0^TTmvxL;<-7BRwHwq98JO^F!EDeWk6)RZp)IY zLf*Y3T@zzY-Lg1!le;HGVa?k229{~$hh$*QdOBt6qqC5x@nUCel7%xH$woe-e+m6O z+e*@1#S1*PeerB*obdbWS%NvK)YJ(7J+a-Zk^14@7#4|8=BcZ+mwztCzIp|R;lPoNJs}N%3QkRXy59yVwJh8>XL4o!q_p@f)R}n>9>_--W~oH-S)Ti z?0Z0d`=rkCs;w_7myJX`ex(s$WhW$5|49CTC>#9V$}2_n1(RG1$%dHZx0hkX#{z`J zQWVx5w5H!|s5<&w4v}*BgK6l~$@|_?#~=J70r3q!T|CpqpkDzavAIn*Q(x*$zYW3O z!kncXJ=m9dGmt3c`iL|InkTeWW46gYYHA2;Af;E|l6R#7 zu8(kdrpruQs(a*+A}{Mnz7Y|1_Z2C+`Wxwxz%r}CEI+?cE@{ik;5)trJg3nEq%@?= z^cT|TUo!550$)m1w{$he81~!;(?1FqL5tZ( z3*FLayijam#tTH!N<`2vyP`;@PiOffW98E1Hj3MHbJXqSz@#)JytwI9#**M(k+jri z#F;eS0PsP3?g}P$r5bS4he-3JZ36qCPmfH&&t-n8QwC=}0f_4XV?2v3gQPB=@` zi$654lwA$sRC`f+s2CwXdm^eFqDWtDx2Cqf@0$=?{bxdh)=w&!gdoMKVM^P#nZ1v68bM;vzBi=Lr0y&je$$~-8os(K zkF5^bl<`ASJOcj=o@gn2H{wzB>Ut=>>P2|{Nzo^sx6m2KRqqdLhDx5hjR!ZYvibCv zSYO3@Y08SPC&xrp#n#|5<>W^7$ZaDnNbLZ5V_cU*&gS6B`xacie=^e>{uYlb{0U2D zJS_8$1M1p!GBJkzE&9DQC2J3;kY>A~2V%0gnczfFip2RW`zTMhUl{$C$!Z(Yhw0eg zro@GclMqyCj#5Kpw4M{|R6wGphvvibpHcVb?3%g^xlNmDMC_MFX{(ccLHX88A4pkH zde#9q`ru-uNHLJZAWHY_9_~j-vsBrRnm^Cxn%V1Jg6MX-@q##i`557+RgN+pb6%pX zI5&nXG3a4Q9>Dy^0yn*P#1g53lfV*jX#QJrc?LcG`VerH5w>{MjE%^S$hOV(wPjZr zUUg>SuS_C%Jq74}DeR(Fkj!0IduovMoZko?hP0^E&6?R1&jv8SYDCa)b}7APQFZzJ zUqWx;{kOiDbY^AcRz8%m>YLkv=XxA65rfiAz&V9hCNzIr_?+$M<0F{DcXms8&vG<=%)0kP&>v1oXxku=R#Ct_` z%y_G&2o7*Jszx=Cqo9ArBz=1k<=$GyoP%W_rWbKrq<)^Vwv+Y8!j6=M|lTXmjMOT`TisEVw!J`s`(_uz}mkR&}qP|(7i`i&&u(l z-wVzIzN_byde@hxq|d;w-CX3p^eY_-`98sVF zTB*zxu4}&*D_bQEQq_>yd>+f;4;1e(u~@DK+yfT8<=c8#0j@avdumu<4ZZoAg=|+* z@#%%(O1w&_r7NmpRBLoea=i`M-s)71^h1(SHAfK!_it8tYeS~5{-({|;^O)v=xxr^ z)U6K5_mxSKbgKx~0;y<8|08jQcv@jG3dMH6(z&{0Fqc@pKW<-IxH+fy=H$)yWXk}( z!20P7*3H?>n+bU~Yy{aosuqSgG(*1wzce%p;=`E}I7s7*$|w5ElTm-ve&^72ccYoj zsx*<$p!I{IU7+WfGC3Q$q(EZpxE*hSQZ}I2^HU?t<3s^QckJS z!2I=U@|k9h_$jk@TJ6AV;vu7FyYO{m?Tr}{f8`EonA!b%T`u!_YBR7Vn@<-L_Rz=g z*GZNf6`i@P-#(QcpQq2?;Yzd{+e+TQEsoGOal z=eD}HDgR=W!_#C_;?Fkf4YUAMpdV;?cljW|F+hIdWmfF!$m5~`<~f9*4)px~Y z4A<5O=s$F~cK*@XXIjT@2tmd7W{Gi(z69Nzy6OzYsRv}fb!n+DIfC+ zUr_B=;R&sUyicb7b$VO7a;I1}qYi9y+V?srm;AdW@ukR>)FgWoe&ve;rcG64S8wNL zdkrT==4CJU0KnTuAC}kcS{7vGOvmJPXU6WL9PGZNxqR|?DOmF(y&wq{wR|sICfEA$ z8FNkQhI1|=4Co&Tt=GX31uqIegY>cnCF;|(AXanxeVN-GeQ7l43*aIY6wKbYazohb zGkoH1%`9STLiKLhCj_VOv!{Dhl-mJjy*(3g;?a*3au|O`{{m%tUArSLnyyNj@!kqo z>xJ6KeB42-EQ_xFzaO|A;3Z9sbBl$eK5MR4g(?&z)Xv`$k>LsB#3QZ^sy9-rs#)g{ zL3j-eu%-eIBR!O%L{4)U_o*Gj+NT`BLPW2q<9AP%yQnW^N}%2CPuNYlt@ALnn+YKh zvXWn>;y$c9l5@Vuh{)hybZ(EgY*n!RbW6Yn7%@SO+GzQ8MX)61;Lnay2lE%5_^ zr;C@}S*XhZqktxB69(2Xn)@E42M~ZGURirq{^2GQxcr-m*9xkIjnMQ#{5`QAVoLjOiDGyoR8dv0iWp?R3h8LZpn-m!1I{Yd`s3X85%c9v)=5o`6V zPI-mQoZNdSM*;P6_C+$1!0^p4&8qF ztmU&07{PC{Hi>HCV#$ofQo5|}C4jO~sLOkVSB5eboS z*KZaAv|NtVZ@MQmu0HT2E6@C5#bIwme5tG_>#M8sk87DvgEU;5_03yBMW<5NSjM=! z9MzPU*n1JOj-!UiuG*18&kzPc6>+B0?iOJb78>JozuNI4JRa{S>JSt!tT2AKV-L2iEETTVJ5^9OeUBf%l;uiB|ka@r?=r5{?^-#VBVOf#LMJB8I z#$z-Ul1fb-SP-6vWBkRM%?6=zgUh2{tmtTaK;7`~N{H6720=*o+b79ARKjYbaIZ__ zZPp&^rrOpG;y`bkyYESkJP5=N9x=%al`_;|7(q;iAcf2!&7 zv5n#Ba?%->0xqk}w0H<|m-~hM-IU zITa0tK6-gZcIb7fmlyP>Iov*JQ%j(0AGHKk5F-L%zZ`oVSmFG-dvaUZL72jPK$GUw0ZkuCGjZ$>&kucw2(RL(_NNn`&=Sdo0zk=A-I%P)Lo zqLlYWp7l?s!z+1&i6M~*5(o?;|9vS_v z*o#iyOOvYwFea?{WWP#0FF!v?#HV`GQUu9Uj?6rzt)f6zo!_q+-}(>nh`Ta-ey8ur z8|8!HaqSDdiD~^DS#~h z+_!HN8XDLCNS5?SF}RQr-Ufa8bP@yJrE$v`$Ul;ol`Pj*IrhSaG#Z(Oew^fTUnyec z+SiL4a0)l0%BkAn5B7oNo05^0;WT>k`|@Jp!hw+KWRc`c!;FA%vB31j{?Y>T=z@)! z%A=@zGg=A9@1m<*GB->=0u9m6{q}iSRdc zt#o#YL@_?pN-=-nC9?s9+F*8#AeD8 zcWQNHc1)8Q&CfjN$A7oy!F2H$o+lny#PT60eF?||sIf_0dwq*kV*EtVgV(Cx%@G3xA z0?V3fKd`C9v~m_t;xj%uUfErMitS#&UZ$KU8%?btzjwP?-ZVA2Wg9JG?M&=}o|)z| zd#B&fam``^~Ske#q<;4c!gZe|1RT-OV)L}V{5VYinakK zpvi!yGr-=VQAn|@mV{Z~ucB=7K2g9{{K|0aE};`@v5!+o{u6Dnr<8t{uICihDA5ot z3O``wijRbM6cmMHK<|T`e;`@0ttWnENdMWfdP>s41hhSGa&m46>AR-}D}`tONScGz zu1wek+nY58BNT?1fF=6Q2Rz8iq3L-4Oeeg2fLcpBx0h}=63#w)T9@im5H5U6G>x<_ zy0DR90*VuYjXNE!)MZ2wGrKWYlOrOd46Jhu!!#e0$tM!)CH;ok2OqtUW+_u-9k~Z< zpK#KdCseoKT_dc2!Ha^V?b;ZviHMM6j#`R8!ktSzd{ik}W`PJdu~{%D?=5&fGm5m%CCR~np`q=ypv@HsaQr{uJtBs$ zG202>9h95~*d~Jc{=@XS8k=SIJOHw(7jR>+1{4g2Ee66CxY!p+;b&H7Nk88+wN|L> z-imAAC=!9z_a?Lq*ACH?ym9zPg6PCe5hQ(iP7>~ieL00mQl4?7UAtS(KIeNuyhUnx zTZcisHWKz~5y69b>pvFw_%@k0E5sAV)8eW%f=}Yc$66yNtQl+(oCB0zH1F?XC5wKu zZrw6XXjhS?s>nM*U>0)M5fi^)lu}5JobDc%SC9KW`8x>K?Mq!$>(V%LNQM723@SZ2 z>@w+{4&ce?*rtox3(liU)Oid}uC&ygYd1m1aSGHS3n?BUj(*PS3H1E@Z_RU2B*O+f zfaAG3%bt8myK+QTK(;28_*>wP&>)y4V?slZjAb?5*9{wxp#{!vw^Kvw6zh6|^SD#d zUUUAj7O#G^E1^4@6mzU^0~a)CZPZr=+R1EOH8Bzwu;8lE#z&ig`W%sJ*WJR{p6hCc z+Onr72Qq#sNBF+jwwnuI(pi6Hz7`=>N*;noN8;WoZ&Fl3Mzyq zmh(uM6Q%;fidS3m&MVIuzdfkqLWJ;&t3gMJmKp~ zd;Kfo1d_`9RRnyz4R7Yu9q=TH_fi|JYZVW9XnFD%yShuYLgRPHK*kM+sg|GzH4N&5 zEZ6kOUs%$oV_&1_tpXVzH5btIy8Inhz4tcXEe-< zqd|jIR*X)97Ll2D9C8H4dX(QY>LUNNHe ze@i!dW5YsC)b1C7@4B8`ZN}Eemx6v4r7~xqN}2$E4`xpQlF22QXmj>H%dlANI~Jz) z+4X&!L(J9=mU6dqryWG(F&G{c-LVl|rc+)wf3^v-F`nV(nw}?H=6@+E3KEXvVmv}@ z)BfKlZds#$X^2bMrpz{Ecu(_|R`hmj<%X<$JoeAfTU|)-tG+s9fTHOT$x|E)eyKOr z4nP;4#oASr$q1OS)8@4Quzz|1PSXEKoC>(>L#sTlkFjxydBLjAeG|7{ z4_sd0Xfo&9ESw$+j)c%!E-o&>nq>qoag8(4WOSb(X=~Jv1Cz~f>=xznUS3XE6Il=f z++#>beOXZlwJc{-7YN0yj2ZJDcieFGiBKKI=Mc&svH7N2#CZuZ2N?Km@Y#pkP6qp` zDu@s9k~2XLa7iG%GM(0YF-X@XKES$q8f)Fc=g6T?YD=)NYV-_5D)?1c$> z*Pe)+ag51}{IGY+7kBsrsh%^HoBv%ZkW!)SRFX(QV-dm#tJyZCB226#0yl~nNCfcU z59NTZJ@$tzV59~PVzLS5l)eB)@m$dh*0`jdcM(6Om{r;){TYP!8dnW^(>mK@+yDd7oHdEbMGkIiDmDp#$*=rGvNfXx@>~&*FD$d0HM*Pjmseg z3hQb`Npfk$uP-rv?-i%z*ehyPgS0KQk`9kuhbKHsT8&C<0C4+OJn}q=q7`g)v zFYC3`0&Am(I<1KdG*x><@;{f}{gNzFpR(4a4kqnR`T@be^nu+;VZcz#YthjkSDNe8 zjH10Z6h6T*+^YzKgqahSG@Ae-6`6k}U9HJ?KJy}W< z2P=IKS|cx)wcPs^N=FU+Jgo3Pkiggl4N|r);seWSW5%WZOAykWW^~#t(iZG4+c75) zy~{Z}qx*px+P}i>vtDnAXZvBwQ91(>_Xz{39%{aJU(#J^b}(*%lAsQM_!`1{5E4-U zoU1}-`Z8jW+o%+{CTsmKDe2E@S~nRzY;){(`Az0VR4OdjYL>)i$B*Tz69?v>yQEZQ zTe`8P6)F_4gX^gz*zr}N)ZK8Kx_tDzlrh8`!$nlI+mik%_!k%Roe}g2C>k93Fy$=n zqte^^{b0pqlKeV2dSr8eb@buGO*f(31D}o;!FDK>xQ}=NM!AHv@em$B*O z`yB1+r^pHSgyItUG`>++=E^_CR0<#c-^glrJ`Q2&&{gbommg|`U(JqC2^%>|4rXZR zz0#q4pEd1l5;`{F=eHc=qpMa+vH1lvmLR}@kp*koU)O9$rzg+`|0A&v z1@3s196jOZHAyJUzb!>>r<}nzr=k@o;iB>ifG-{F~kg;!c5{00Oagqa&?m=Ku z!ei}Dt_TiE9>MeE!`nTas_4kBh}O=0vbx9*GQ9(TX?q?tMK58Mp=+m}%pexh^((y* z3Xn!EK>VPrFD%s{*aSR6u|^cC+CPxmVzOVOsy7Ipi>XZOjsEDKDCOWe7+XiOWGGU& z8EpGwu?{xj)l6Hc81cN;OS9^Bo7579N%Tf{DB>qE%}o0*=Wyw&5+L3Y+{C0~C%U}& zE&_wvQhUNRm-gp~{I-hKj4(%-jIWX|QW;xHBMT%=9Te$cQD&2YH{Ot~5iRn2S3s}y z94wzj6dJv^K{>|e-wbF}lawW-b2a(+r=!-i1k_V(9nuy5k(3k}g=+3zSB|`6&U9Hj zjwfgsmwD6F@pRS#bwHw;9Wr_y3fkdm9ZaWo1r|?@D(e^1gDI_u;*>XVFJV(#C5o>L zB6oNT=+VDf-xQ^Mg*1eRNDB~0M`i84Amp0iS9z9Pt)u@ApZhcu^+P|2%|Ky~6iKKsJH znnuTiFa~i)6;Au|Zd2hENWghL40D5dPgdMD zsDT3`^3h-K3%!=Z<8YR|@P`CXJncz1vhB~6?Mr7M7&e-Hv#u zn_ctMvT7P#8V>`?d*ZGnl(wF@OO-s5Ho${RVp(WzRPiFGGyHQK|9rZ`?ScJnQV>GF zjih4mrzjrt@o`Hx6H$%2HIcRyfiH-`1fT8QZ7Eh>koHmKO2{Z7G9MQ=HzqhWaZ4E6 z`ikxqcRZZg+pGNjU47w`wRAVR^?ha$-K_5u8`%JdTgLaW5_a8!owpB2@m#mSr`P%9)`7%`2SNd9<6`>JB`$VSrEu3C5|yV?`C zC6s^`N+=gT(vTsn`ab@{-iC#s-yCVxz7_xH8`hOgqXFQwl+s5r0L1OPs5hJln5n@$T#oi-It*X&d)LyZx zMM72WO|7ccS}{tfkyfc1Q7KwgwQByJ{GWGunfto$&vl*Gc^=32ILCi4!c+tp@!2m1 zgj8-A--?}W8^}L8FoAB|`plzOq$v^M*&$J#sBVSeM0Nv5o zV3)Myib>ee^pIQtmg@sAK`Psx*_)M7dCzrWL0hwCfvjZ~1s6tDEoPxyB<8yUw?{E9 zL{u2oH!qO6`ChIOtSE`6_)%BadGat??!BG>Pt*O+{UAAYTKD5l1^j;${Ux3+s0t#k zE=HuNCcYo=&G5L206LFVNs@-#WcX*7@d0mLqYi#a@M&8hhR(&C1g#vl9#~#29MJxn zE;`_JLS#kNT2DRMFr7KhbV!5qezZ7)3&3v_1d+(HbIX~gP$mUCRs0+>@K?(|&#Ar? zr!I&-gLk+N31tFzKUnZQG$HFF06bMA+pRfHiPyFXw=CZm9vb!FEb7Ia%MvYk@XzV> z<0GVY*c_}>W&%x`fTizI<=N*01A3tr44w)IcGd2ve_8H*IK%2`-C7u^+arGeB#kn^ zFPHYgqV$ZbF18M5m?^LOs{y!>mRyU85kqGQ3{iX_ImhvEM7$#)8$e|dz zQaru{X~re&m$R3k0Jv(vM`g8YvtxANO^D-wj>QnKPP=fe(%O-n{UOhxd73Pcd}=@4 z^3K%@`hs&$>X6`|?luKKqoT}yE?bC54pk0-fgF<|-qJcA4E!N>d@Xfu$9XxzH+rXK;UY^Y86C%a<*}&1AmoNK!t|i-J09ap-*|q7dV?W9q-p=5 zqmVgy51wi5i%(jTWiQs>2{_(NwhLo#pB>Wkj9Qu6=OaKo9{y(cU~ zeVa~Ebl7&0B}>LA;AKT-4ne8F^$rHJKoQSu6Q8*61^Y_n`f?h1bTaqF^JkRNiAukc zIB0@TpZgE1GNsIX#l0)TttLS8Q3p`APPdNQ>Mu!p4cW|olppd0bNo-b{9g)Z&vN~W z)%|OKAIY83kk0?|XP;2o6r!^27&BFo9sRDHPOuoVbhF}sb@i&$bVQiItH|p)P{H#m z(=^QeB%bb}&L6e6%9Q!3==6!r6%q6ALC&}h@1S6120zCZ=Hc&%kqJG_=UkB7>q2+r zk^R`bWzRzGj`Uf{8(BMj;n#wZhAxbvxHjJ6yYws`MyPf@YQFNhwTywk55sN)#Ibp& z1}iZYgI6wcd54$f!UozW~-C46`4S6bPk^ersbpH->LKH)_lJ}cKA z(-jek2dU%6l#+xz@@Vxk^747)e|id+xxvJaTyvWHUExgxrRL&RXTeQpcQf%E^!NAZ z*9Nsx>#`4!u+})Z8UU^#`9WQdDabIGSv7AOG9Cq$3)*qErJ-5aXS7^TnCI1zwEa85 z%SqCe9&~BtHr`aFa6C5K+-0jvwhntTAV*roc~cbY;=g@rm$#Xivei|F?8*6ApPr9e zAI#7%BToucJowB+#rqH+(kv^Kk`Ze6gcIz=62glVEwheOb8(7Z7p9Jnln^``c>C}B zR9Exw{YJB0k=&x}4ivs|L?+s}0wZWn-5CuqUDt~69|fc4;ZHeI_U2kEon(Fd42ECK zfj!7R+?ZjDhStxTG2OTl*BV%^itI6|K;e}kkuOp@N~2dF7vvGw2&jpu^FV2#-qU5h zWq4taJI~0g$Dg>A$I@`-{58X0aRFbJc8ly~7Uk=nOlt^zukb6gtN)K8xFv8*^QK-v zKYBtge2qj8o9u%JO!uSnTv@q+T_JS|dz{T5|K){mCQvCB^y1W9l^OS+;O-8u5UaF6 zroH!;Zm@NH(5$7|=cp)3XN}qKOqCq1XK)gAktD#P%W=DWwvK01aWl3|l*!ne>{Q^y zXWe`2A_3XGq#$GLBCZ=DP@Y3oLUar2AE1hzgCWQ za+s`*mdQ$3$+E$rpA7pnu6}AP2>dwiXTe!#js4i^ zEaU}X49xkt;+X8^rc#7P+22@Z1i5)z=8xiW_?EF1`xkr7rvyC@#HoYxs2MqABsOG@ z_C6&RtVO@J*Hid_w>GZbIzOq$1->0{z|Sr}YNIbgqZp)G6$-Mi-3N11oK&19P4W#x zL?4-D8vGz*$nGlE_{>`A@uz3p<>C`<{=31K4Wg^cma3td=4$cq_Whvo-uwM@X7rtz zTJPM*J9bU~QJ^`^Ko})GDln3^eAJ81y=_Fy3TTSyl!=G?uYXtCwOFA6DVPNMjV=m?14jJcRN&%5~8H z%skX`l?qUH7LF(6mUKfCEJ0&q%aeRXV*Q^y@@L{FGImAORFcpIXyO<~W@Gc5vXz;D zo#e=wsCXp=99#YDF33fdhHXOPkC!(m+(V#(?GuS5wc!0d8c;-hV5|H~oRatn2IwEq z@c43>@ql@fs?61yj`rDc@M-2+`EmF!SkYc_%n^j&EEo@wP2E#M(;AenC|)9TcrsyJ zs-a9IH2XS|PGI#suIv#-UncNYR95-DK8uO~{g@At8ak2_DPmT*@zxh_t>}-%oqw0b z2@XIzQHddMSk%I;rloC0-+0d4TukGs%f<+}9K;sn zKMHz)S?ZOs6hab5<)7&ibFT8$HNjWoP7qdVe#5tSaI?^ zG!y^)Nr4SwtNjr@+s~_Z87|#>S4Q1wMC#tO@3ea|n&h3KbuD;(qtAE%OmeNytYo}E z7`qDZ=un@Ei@bg`M5`exzejQBaZd3ylJf^});vjZ!b>;i0Alkvh3n}7BnQ-JR3#mj z!e=<3;%rkuHMd;a{Dt(jE{MTX##;1m#vPQ_qt$IODVnWCprX=NujjY6Y7wW8M$kiY zwbnx>KJ@UV>y|z%C-SE<=Uo!Ce7DC3XAnH?N(YA+Y<5< z-o4=haQl;k^z7RFL*gu%uruuFN4b7qQU{7|vMk(Q{)O#FBdornqbk>C!ItSRkK--Y zvn*W}bU#!5V4J)Lte^jtH|20DWgA%9W47XXy}aRD`gLg-^g001xmffF$3KWyu%Go5 zmt$ee>4Wv#y9*94S@N z7`EtVR~W30{G@E2LmziP;F>SK3XUF?nlIy`)bf*U83?uy3h{Kq+lG5995}`T6)isB z0CP{TJHL98I2iLdFBGpRwu>oDb#ft6gi0?qu6&ZdrEy7~{<%e_d6PA2Ge*DkvgdWJ zEUM-n2U;ghm%m>)#RMpawS3saL5d;j(=nd8r;;`tb;yv#edVSDN~%Gw?C}Mn6Zf;t zmM^LdCc)*oiQk~cyOYT7W^ zn2L++*rJ(Jm8-u?mbp_lk#vT_FE{INmKODA4oeNeW*63F>X&iF-crAhGlb@rUoSQe z+uzK@eQIFu^W$TTLFMe?fJmZ-3XV$pT48@>U*J62|G|f-fEH?c4yTB>Pax}C zAb!OYyKYNE?+}+@o-@nqmSr^7Vm;=%-?O~`qUrNzEg?!TnR}>0XDRcDqC7 z43EX#<7eZxdU3Pf)((A>=fEbqtnvL{Y!hy`C+*>H{jEKYc2>2hXG0wB2*%jj4$i9E zsCJr9y+d*lz4 zDw;W+)Qj9k?iuMu2XtJE7m|bQmG^e2y?Y-)Pj{HUG=-p$UsgL7*C9kI$9cVeEE$h& z{;74-*)+QPq-1uxM&KuK9`m+{@M!QN=bS@@zuEEyD`Fs;HSlaOnPqx=LzB96(rzoF1J>!zKTU--dM7 zJ8$G=h567jRl0teofaxfBuAmYYdYS3TluWqEPtm6)Q@Dp8GeWIOs3Gk#nOGN9+d%= zB@D3<_;}A6J-1Dsk!MfTJ77Mzx<2^-UfA=? zgSPJB<=XdJ*C~>L(>I4{YeP9OZXehYq1+u}8Hw1=UP$<^LN7+%o9=7Y0)G5}ZIZ}% zYm(oS>mzp13?C|BX8)Oq2|-T1s_*&VSjI@>VCI&a{r_(b%_`Xdo*de*)fE(lh9HSi z`)Xg3^r!B)rZH^xA3f(he+@Jk=i9+#M!ZAfu0tphk^3^nRMzx%kEzxzQ~c01HvUU4 zCXGH7I$}lm4ZMR_`&kam_2VOtg=DvOa-sct5x}e)egI~yuq3wLc_j1>zwdBWig$cs z`ie#TNu5dSjkpvGrqq8KL%`#-WRm9A;GapYD-lHr*=8}+^#~uWUVWRPn!doVN{M(S zyNI_!np6ZA@u(X)A$)`$`$+q-ZR=Yuj9S^{FWG;Bn;u%n+RG-a5uu)DJVVyz&uAvQ zil5qh3XD7`L~Tl@LvY7C4EJGN#%~g^fy^LDZ`_2HicaVrDCuA59%H)x=;7W08x#Gi zTHvNi-eQzDjr6Xt@Hy2?+{hE<=&A;Y5i^K0oZbLUBn3auNR79cUZnI{4kMJ>VN1kZ`d}DjeS!ed%~8uX4kFkiJ?ngLDJ?5Ygm9r9lLUdP7PZR{&6xB(-AmO%1$P)eOZKSf zRcwBRR9Y^Fbh$94Y`jQ$`?eKlBkSxYkcB=ncDQg?fDIsfutRC?t@7H}Z*+R~*hTy%fBLDs+Y~JzdiC^u^N|h-bI_5N8$B zP&v@L5I*7o|xYVVF^1=qqPRo5OTw&FfdLq|(drplq` z5zoGW&CV#2YVu41&~+%Q(Ie?GlPNrxHj8b^te{Uf;Poatr8VmLQD!gO1@(f^ZFVH~ zu4D*U?lc8Am_Ye3`QZpg5x#pO|Ht4LjY5hh=w*U%mCM&>c{1O%U9`peH1h zv(UkYj+2UQU(hHKdMtVl%8aR-DsN8Q=@N5N+@B9=;p{f2@?VlM z+#y=~M3x5>1 zYOkv##?%WA!}Wtft~B@srG#F$YBcu4SiKm3aqU-cQCd3>p0ORdP@nR#iXFZ*dCVbQ z*__Mm^mx9rr_TM&GI@~{yw==xJIgwxG@@w*SK5u2dsx;8Lfia(lY>JqD(*hg7@eVqba2w%;-G=RkAj{{NAF zWhxD3+^L`eqR0VuG}U+GqeZgCMxC&rU`{lTJN^y?+ml@;Rk5Q52iOpXY;sR><(tJF zr40YYo3UMD&FcHY6SC5;@T^mg!t9(oWFSqWiWqOsbzU1aaXg`OkLe%y5 zI=xb=1b(|rlNglIsGJCWKF7Fv>Br*I7<6%%__y^N312%5YKQTmLG3}Jk^}vv+B97a zvzaj!*$>n+V@eNGw->4mtwo**)E?3a>qR3fQz$j8?rY(AfPLt1)U*T|Mf9+gr#4P= z16$@F+!VC@ipn7#%x%L$DNBd%?*Zox{~c)g>$uAK>WJMeuP3-Yx>Y5<^VwYQJq;}7 zCm7eaYf6*R(`7*A^@Wd0bzJa6Zlp1CoSp~$`Z3ev7c?YOY{2ASh!d32H&JAwalrHMa=9Po zQa`96(;Y8Zlh>@$EPEqwz4(Ar&NVC&NGh3wvVqp0Ld^b z^2Tz-%u6ODE<4s_LJ&YhHSqq|4sGg@q^M_O%MV7^=DOTi0iGVy?rJ#?&hwJ1)c08W z)W@#i8t_;j?tBxYl+yH!+I$zmvXo`kxI-E{!LDN9>1$jc+d}%q=$p0QJC@F+MjMik zlZQ@%O#`)_K~J|jUI7{)b-;T|938EkSrgCl0me-RW+OGk8@>p+j(f_;0##bfp~KfWNfA^}p&E z$tLyxnp|=Hn1TOyl)cK>kX3)=$VydA!Y0S~|UI00W>13Mun25?3+2+=%%Fwf4!dsMYb*d!rYsPV_p- z5Ft^Gy*&{0#ZpXbd_;pFCExoNWD5R)|Hbhn0MvK6wuhptEp8?8qBn;tJJnk+an83| z#8x(8dfaF(mVE^Yucz2hKv}JGS3P>HB;_p^UlPQ0-OnRyg6*?v)LWS_v$rzTWFO>V zzh0&%AxS5$5$K*j_byz)jSwklAL&{_vt?d1D~YC&#qmeRz=e1S!Txk^h7c=2uw!%d zdJX0y%qz*&LX}g2D+u=4i)n?0Jyf)0rmjZ$I!kP? z!BUDLYJ&Dfay+l`<4;x;E?lb44O1U!%JKyzh#I4tBWb+{9}<4$R~fGCHM!?t#pXE<;IubOzA2wA9fa#PaF<0OYq%ZM9}# z{fHt^N+Y7nhuZBo4jnGp>OTpJC>zx$h=Ox`i$|wt1u4dE+|OII_-% zN2N9t!-GCYO@wF}h$e^CnY}E(J)jkj5anC}8x{u(mF4NrmG%uzeaY<7+e1G-khy7o z%P3fu5y5NlzH>z1v>45pG2y~2#IF3|nXUFEjkZLzo={`-tu5@?vuLDZ z*;ezLLt&Fn346Orb2%f|cy{2jyw+11apo3n#zNFj+*G07EtFmCsWj(@f9U*?p=U`g z>`LEWT_h#%U6$1fN8{(Z-GtNhPd>gefTx7UNS43-dLURyDAhf~b`E8{$YmQlPUCw0 z8)-Q7aWCy|$f`1n3ohuln3xkj3TR#*P0aXFC7)dcYfnneWE0-$0jk!pZGm}G2iI}28hiI<0nKtJKU@92RHJBJrmm48zRkh=$vbyYrQLY zHe^$LIk`yrW;=%jp8hseRlps9x3o@0%bGPd^QcoTB1Xp=ry?= z%_Zj$9QpqgVzSCO(mZV|nzhvBTAQov$X2EMO&FB$nhs+4pz2MU(U*mAUPw}q-e*f% z{Y(mH(@h$8jN`lYagE|K1r8X*oV^dV%DU+G+ZHoY-`KKB$I{x?{h5T$)sTyD(mL_9j~Lv1-lvG5UZ`M z2Vd|^T_`mVWaor(iK@=z-QZkM*V&}f&*&PuXaCoY7IdVD1=c; zNE=ccmdDcLx!UWNuctG;f#L0U-L%g2ceY*r)kf^{vV_t5*-UrTK<4y6)>y=C=HC@+2m|D85AI9nLltYR%W}gz&_h`_Uz>cmQ!m z07mlh+qK6ZyJ= z1v9rfdC0adjMxgxe@NA%XC&>(@YIk#l$p+_0D9wb#Y=M{rD>N~J8+yW;Fod5Gj`%GD>MFmVz zRVkm*)5Yc?W748u85W0GM#um*XOmVf@r&otp8h`$fLJ8gWI;x3d3OkLP*Tzh_*5r# z22L2OnAv$0`OY<;%C5f3^z2$={vj*;wSGO#wo_8p?H(0v978Az2Mr_EG9heSZSC!f zZihv0Hb7SK8cq*fzVlltF;Kkf7a}N>Zpgw-=@-EcsMgO7W;~zBaMeX0kHo0|%chRN zG#ji0>Oj>=ib^gcH!x?o6vvG8W&SSvw4i{ar$;)ev&hVt|1I3-M;-*t zwzWgAOD?USkuqTUWb}}iH&6uNl)_tVf`5w@m_kxABlwnmE!q+wJB&D+NqSZqrU`4I zg?|{C_A8?-GolB}4?I0s{ydoFxa8~cWv;Vj-m5T@e8R@J+Y3Z*H;9;azmDY~VplLAV$L;lbBP!*H^Gvw;I;87#8 z7mfGI%{@dYvy~R*L&Ov)oPUXmEpTH*H+>&lCXG&Loyj^EQqg|$s;Y-N1Wh7iNIC%4B zv7vto5#ddT8A=7iqIO$C4LPPqisb2uo$1;2+2&LuVX|HHvtGz2J+m2DyXp+Gz}7&6 zY`XB4aW>e$N%m%Iph4)Br&7#jdKOUOL19Qu;k~X*Yr4%h^3~)K?e|uN#JyKG!wmTQ zl){MjU#xrEFJJ8h35V~6oE2K~l5Y$I1Wy5#V~(=qIN{;Vch>4`#=VpkR1?d<$Cw2D zZ>HRq@e43y1WZ};2&wPgXvZ?Erx;q-65nM$ew}NKNK4D#4YkVr)j6iY<2E(zowgo&$0toelaXxWW_t2g1s@@5Z)Y>E+BsU$2U``V@W3t!(c8CvQ!7 z0$NWdy~38o@`XW2%N~TL#hZRN4Km*fg;Zyv3LdyH{l#g;sR~QEK@i^RuzEyJrY$!P z9%N|9))Zg-DF;to%@0dl@mq7E=k#S&TE)@-8dgL}3$LOv!FMY{zRa^VRd6Lzs$P-K zs=cvUBzhL}WN&XyEyS!YM^$ZI?eQq5F`cr~SIQ4ELHC=CeG)2s%xOMOvR1>lAUltu zJu7B^hFlsqSHYVuqouy-VHH&9$F<^N&Jsv=e#rRo!*u}{y^sq*HS-lJEBia3Y0A}y^Z33S>EMG zxB2%uJ<3h;%{ig5&7r&+@?zitwoxO?O36Ph`m>}%)S!qGqUt#HZewCN)u;S4J1`PX zOWjr01!nQ8BAcTtUR6GdNu1q!q;1C#gK0QA%sxBL*Yw>Qittpsk&a98m}3V;HWna0 zvZ6J!N-KZg`=mGsrg|Hd4ta2ZUQz#-*)4qc!vm$1FB}nVw(wWy3iMHz^%@qhkHFp- z^v{i7S6+pV`0_Unjd<1{S9&_Xf|W%!&_iLDJ5Eh97kUGYFrEpb1w{kno{i%UQDn3zZu>aKI=4=nuDIgF;F%S)|A%4qAC^@?G30Rvcf%y{s{U>l*x zo3a+DdO(%C3l62>x|l>PTwrgNkSmcS6In_xRapdMUP`#~YAg8go^b;U`3#%gIWvD< z8PAgc=}azGuQ8k;D84|Cdy@^$M9wDhZgJPxmkYAVIfzT1&{i2FVopz9Jc@k>e};2e zz9mbXYU9bL>Qmha=%2O{JUHK_wQ$?KyjrwlAuv-L`JdnzxC0q&6RZ}~5?_O8i8T>8 z=Dl`d?8EODW<^kHIQo+{zPsq6MZ~mUsb890sQXvR{VI1%vloebs-CQ!OT!FT!J>R> zcfJH-6k5N`&(btH9lc|%)z|5~ZdGNvb#}+z^eiCK4sprSy6S+nvz0?s-7zkpF7^3* z$lOt*gyxi4fqak_Phasv#wB|31@p%_uhJ>xD!iQw`~-RL+tjtd63Df(+NPkl_VH+U z5BNHM*Xj6xD#zAymy>G}gsP_tw2}jLuNeb)rPv}828B?d@87RTGT+l4Ii{f^JXfgb zm!z<4BBBE+%kF>8ZDNl0?hypY;7{C`mh)Dj29(ph*Z^d@4m*jIwy0bw{I%^ve|cUc6OFVd(Obb<4!K zVQzzvQ*|hmYWGu+6>%o$^`p_y8722nv+ZJ<5}Yt$u<^NyiATy-vI!-Rb6}D(Guj1F z(ybve^mPV?$7R!Ez!9v}XA&Z|%|RglICILzn{z9%p#3y`&N@J32J*1ojH?3sLr&N$ z7OD{}1b!Iv+mWkl;`y$MAFDd?x(A8k>$%<*sw}sKz}7c53zZ?$8KZ`&81Fph=@Nb- z>V}p%Nq)k~fa!}QR4aKSH?5xxKOa>3?Z1Dpxyo<`OIn!yU{Es>_o0g{0!yQ>HEU&5q%j&$itkB(BkJ&EN2|r2<#C~cr#h74 zZaSJjh4D|t6&`E@%53qEEznVCzwK`&u6c#R{L;Js1Ib)&%>H#til4!l-Sv;2U|rr@ zDAOLNLfUa5H_aWnhqv7#9Ceh{PCQUjMOUb#TmD&<-JJNlwe$tnb#GeEq%0>9@gz&< ziM!owyVHNcie;?unanO|s&RvG>5)$1?9Kq@)vUl7U!A3!Abwq<#`1+})$1~$+^qyR zxRH^CmXXA^`_XOvSWynz|0q75&{#1W^8F#Q^Q%2UOzugC^j21I3OovKee3gSk!m&n z!t`p~vcIFgtA?#cdLe<1OO|Y9UeAApE^jzs`^L>ugVjN);g)3b@wII4$$_nTS;xtW z(sm3;wzo)NcQ_yW8#%EO`lw{449jJuXLBAbq3jZU(PzLTQ2x&@5_IdRIj8Bczd=Fa zO^*KNM4ImmxRz*NTPqH29E~~lewYz3{s`*FC}(PK*uynwUj|kfw{Yv<;o}B9vY~Uz zJx!{6J}8)JG^{ZI_HL$-y3fW;_F5FYegu+i*=78jd?o4R>=P!X^Wfbie~bs{jHX zAiaOc)l|@fFx|gmje}&Yw)T!}P~ZlQ%h>&o;kzuNX#8Y>R~8JW@|5;U_X%!^nC7=} zAPx4v2urtM`)sDo7QHfVh_-R>xK6|4L8K80M0VdY_<&zh5Wj)J?oieA1z-U0J>IPi z*;iVmanpIG8L)m?j_EH;u+~P zq#r6Ju<9$UV^g7y@K##hV16f0o6nNVh7I(BBrlZsMV$^Evsbp}>F@F)YDjsr zvkDuDZnMl0R_k5bXTH$e%#xl)uz@9g?7F-ffV?uM6baVPR7x~sIeQudzT26%i>8f2NPx%nUsph zUB}qWS;m(1T?mICqw5h+d$Skr_xGa!ptM;;KGX8EqwH?FaXg}65cHs&i0U_k&kPBr z?-*Ho?lfmc3Z(!KbBivOabG{fRf4ur3D6iXcNUQ>Lp|TrN6EaA)Xlu^TzV5#*B_bQ zQJFGOs`JL~K|c49?AL)*^UPVG$bLLiwGB5;ZRb?GHwwr3YJT-U3Xh8C=jSmAPXl$= z=_7g0Tr-<7Jcp65Tn?@K=eE_0;6cP2`jRNGB=_7tBL{Bwbi=S>0j9G1p#qcaY{^O) z8kX1nT1*q_#Vl*iY($q`fU7um(brpN zLmiwgJQDjPx8d=l=AyZQU2s(~@c0?j_Jw{8D>Rd6`*OHhq3r(qDPv@%h!8O*cJOJA zUEQZ6=wS)jpeg9^(XJ`xl|x6+^5gCBrwAm^A+uTLAo_OMfed4yQ$rjo!aG4%#v8q> zU;7pCT&^i0HSIS;c%e~263y~3b@bD!`tvcCAj4;Q;QuJJrgbIC?%K?j{2gcc`LE>q zk{g)}GB}JKj7ZkZi?o5Un9oZwj6qqZcaSIP9I(k19!ZMdu5!q@>mB|!*~wKs6QSp9^3m5v_!Xr@CWy-Nx3pwXJA!B(sX;n-goyP7z&K%;tD%Dm+o5=G zYdli85=Pb{6v#P{)7swW7*}k^A}YU@W$sly6fmV|i@=Rbr@uYbu($JCvqd_kVVDR`Yt-Ea=y6|qS!i@@mlU8;;hYQx=ERIJ>!es{dJ z3vi`h+O9i478BdN&~GHj$fach9(JYr#r~pnEQ}IicoJNU$RLW|VG&neQ4ZV}<)yM) z63hflIGY&&tQ@>ic|{}#xqfZB)Q*vUR?}8(ikPlL9SnhdcLim7&aKa2W)GFqf-f~5 zlokkb!%O?N8Z_26XVy&ZS=RIi##*(c4MB=~G>IbM;BsGCqXH|OxH7Fw66l}MyjM@W zvGCgiK+)c5e7kV}&+|;x+AtXSarUTJxLMmZb&e2aE;^zHUpS46(yv5np}=*}2Re;q zdk>sN$khiQ`Rsk^KpKF*71VY7xLCn?v^$5VHG6roC;`Wg&BnfC=QAasHOK470W}QWR%=}75b z^7TqsHkv^Op;I-?gg??kX+V>%(N{_!_GEINnBNmogcBJiJHL5La zB~+(;4R6#uj)evWDL5@bW+LM&muZ*;iH%PW#0HS@VpA5Cx5}B2j zEml{YC3-)LZbfSI9BP|IUo(P|wNbT*9C(FB{#mNQitqf8AcJ!ylKL`wuNS7>F zd?I$c1#hk@n4jK88Gg6ch^;-Z?K9Bkw>*GVo%`}7`P4TvK8YLXE$*~fDRcR#g7B|vNsDoB5gpYn zv-k6o=Rk*=W@MZL?E_tyXbXn7$Hc@SiruuR*^tY@Fx zRG*dDf1Yh$byqY6Xg+HNF!}C~`Zu%cb&&PH?7kgOWoxskjS0%Sz()8*wSuF7$fs%&zGO8eW zhVBSGwzo>$^ux&V5HaPhAl@M!&e2j46sH(nO((6nk?FX0vFG?aRQkt8>f%*7 z4E{s?*W-*Z%!WmtykvU17X)&X3%%2i>t?JM2fX_v*C)vnNJBdpc!RIg(^(j+&7ast z#F=0x!5%IeZ=n-Y(D*(UHws!pTX2nN{N3tvwG}5{+{U62Dd2O(N zU~E^Zqwo*|Yd(SMBa!Fp=*h{Ssql4@l`5IhOVqHtF#SrMk&t9vVv^8sIZ*kgLpaS& zRK9^;ZHTjmtwa@%l!bjCn3`wTzzB$BO&Y!^*~ciPJJ0g6h+j73xD&-?iJB8ee_JX= zwVzum-78IgE{64V0eC^P)ARnhf~#xdW@>@}CpA-nQT9U(r6f z264I9K_+KC;5~GuPXyp6RC7M+Y)rR~xhDcsnfT1BrxYsZBjb$hTRZDU=_qzDKnfzDJt_sFM;+ zths)o;Zq`h8%;nlne$6l0h>kKIidK{-hA&LYeo+2X)0QyRRC>6fRvMx2ui`_3s6fkV!S8oHT`f}Z3j&7_p_%gB9&_2 zxX$sKB8N$wpb^BvLr7x|r2n~;7+W)K1CDojuZz6BF}X@gvzRbh4nzDl)AhH=_=(8` zS)50m)r!L{^C1~~?lB)(zCCbWSwv9<_DbdhN4K6?07)vXP6)uK^~xei=lM=d78&*P zDfsZE;$bsOE~m&Df!c7vU=hRdP2I z!~7_c6_C0Ni^}x&H3;e?xmH{=$zQ8Lfh_OiC4&Ev8(@~gx5yIXD)NUfl%6mA`R2op z7q`VEji}rUYLgxns7RK#_A~=pAdbFfm4>3z9-uOdQIv2~T3zikDO{@8TLLw$_Wc%?|f&MtRt8ayox{u!N9uPh1vz{Yw^8i^0tnNKY4xO4neBVZ1t9hFsflb64vahL`@ltxz7{wL z=-2fr9NWBgTh3X)Ov3@urx(%^>F!gQfFbeCcOm4?Dn*Z2;oIbbWw=iG7U9y&iuR%J zwel^RDr$C+k}+=zVc*;_DQ?KYND+4ph}JCl3%AxV3gtHFNptQCivzFFp;dWN@RYLK zkoMT5KetWKt>3>6o%~l2QImah$o2}#*;%r9T6|5KVR2Db_C;aDxj}xITUtS$Wcix2 z9%R{)#pzB;uwXCa)u!Qqd-r#OuCd(e+VzO+KVp~zdio%;g9s#ck3@AQYULuTFY9SJ zyw7EFzb;IW{JHDGE*aCRBA0g772&{q>*+6Pdt^o2ML1rwT--8f4I#ax z%4B6gARDX(Z(4K?qU)2N^1ANpSx^cNX&uKqhkZo9Bi^!OrgOPMO*kxTz)FJqAr)4w zF1;|MFZ&+!Z_uRiV#J>GgCUZOAhCQPz>V#5b3>n0|4GO|<4AzFTraG_W$g#aww=}u z>h}REDbZ+6(WdHvO)GG%AUT^X`Fb#e)DolFY`yN)w^eP9`a5)&e92c3Er4t0Ez@rj zLblyKQp$F^L#`4oC2|O_3EE~0sxNTxvaLFr<`h-xYAx(bu|z0sYr0sd+$;@J!ToF2 z)|NfNUsg(F@_-jMYL*_6!qy!&HR-h8e{{YKHt{3R4*H?&e5c7?M96D7slcBn=Qr_` zr5k4#7l^lgH-2wC=>LWGG8d9}j5GXRNmVCS^Z4m{$e}7fxI-mK^re24->pQ7ZoD0B zD7%F&(A)`CpYjdoJ|ArUNJj9`c~jIq0FpadJJRMB($ggng(GqgTe*jFX>ymurkUZlY;Ng~{3tCRi{`x|>3om)7tOu}J!~OU3i?Y0dEM$(?yJ6-KsTC=h-^OF zV&ZEoFc=wP=pt=EJ*-7iLu_rfQ3lx}wo;o14>_SU_iYL$Vv8FcI?8ULhyY` z`sx1I|Lf>1!%a;3l@>soDi<+Hs=&$i{EBw*H>nia=W0MDZsh4TZnMD0R6A_FU(83K(qUZO<&NNf*mWSf>BZ8U3$m=ry~e~X5p3Mp z$V*J%BjuF=VD_>Z8 zH~H-n)er{v*NCrk`s+V#ocdG>&ZIu7RGadx)7zYB$XAjQkcCBPaPaZ<28dX^k>YKr zLa{K(15$AH_LV#t+tW=Blo(Vrx_z`NVu8WQJO)Y2v#29J%@~&&zdav-Wnfl7I{EDE zw+^eM{ZhRSm=#P@e*n~A^x@iJfo5d}4*xUy!co=a}v6W~a;x%SkpCHYA^6^#fzQqoAOZH6FuO3P`Z zw&?8B!F11?Sl5~3o-1c^#zE=_y(T-=E4WNBbCN*43mH+6lj5z*Z>b3Jmp1ZM(FoH6 zKr~;}MD~1G%&D##sy<+{(x<&2dG!iHfsW5e>vToD6CWq+fQL8*Y^E^(2`QAcNmid# zoW%kV%J?t!HcBJP6QSdZW5~tL zY^Bj%3P3w8>MOz2J1F7h>zq}OLW*?fiX8?`-R4E07Uck%W*OUB_cVGd1?$*WfNGrb zrf>flDWfBwMdgNuj~(NX*e=e!_jIc+)ev`@RqUpr1$5d>9Xs9Q)kQ5v4*P7WhtQoO zNIi+~R_EFW3bj2CkU<_V01N?EZaCoWq}DQN)pttx(F3=4 zQUZKg9 z{YoI41{Cw5(6rP({MD!47D0wlo)vGi!`Da@$897;0+)O}uUu)$0dI~ue4m+RTZn;v zidj13s#WzhQ$GC30&GIfvPh29P|3~=Qu;}c>qBzbmLC?I0wzqz^}{?Hg(%a^;MMcv zO8WTNe7a}td;Tg7Vw6z4B0TruuMdS#{%@&*07BqErr5vn@!#CTe|0Zz++J3Zj~mZ< zBIJU67rBxT|2HVja?TZ_f8vvdma{_KxkutB9CltZ`z+xvU}QuNRYSF7ylS|YPW;#_ z36)td>mh75_JY9pX^XcsQ>YAJzWS@H(S%ncEbF_B&sVPAtTN$MCdfDH1SZ-}<~IIJ zQF{@eYzX=P-9ajr(>}*dmMV&KH8r6=cg*tURlT6VX#?5~Nr<=6nw1?{auzluvyw!1~SzcT#V$hTGzkmFn^04&QoUpI3F-cxhM>}2thqpJ>@#fUSOm1)@915k#Iz4*^Sm+52(M&(C zRR7bEu%zg;fE%wA?nlCKx>*x$S#GlI%%tHAy&|Cdk5dFUj=}uGbZ|w;q!%n1t6o9O zcpBI~=dn|RczGeY6;fCmn!EJ)$@`K#tn7lu zMgJOD@tZi{&i`j!(&$x1hxw|JG30yfjzJhRUAQ+lcRg}-ZVZmuq}4{IooWMtg8NMnLI6sa+GZq z6O!9PlQoIh>F3jRGRj5%Q&L%->c~rnMjzMHSrP8=li9mtg@=v#49&j|=$EK)4VjaD zu({d+NU-zdto#0Fv|v8v(pnGFD<_1ne}*UggaiS5_nPR1pg@vtUe31=(jD_IKXKS+ z8OkxX>Nxh}3|Sw4nst7aC@&Cyo#w26#9;;SMJhe7~d({fvaTBOc1XVlTKv~ zbpCgRtKr8hRj=n|$;EX?9rdYRZ#n0&S$-HtD<`I1Rczgf9A;FcEhL-N1{dUGbjW)M zIXZUPHe`fU=!&Sgw1{88F8KPv&_FS$WVHf74A!g2$nieLbWabbEml}25uS?h0v z(!*14<)$KEK$f+-XtayIDthMAw}-P;cRhS|`X>{ZdetN>E+ouHQ4oqg;(H}Pg~7rV z%VyoWqSvdM=!N)@Ui?XweM=HWolA$f zQ+a?6_*X>HNCV{7SpN4j)jc}D0OeN`zMVS4mX`;w;@}%QjRhBpIo=%9LoqXku!;vMOIVDE1tXNAO~?GyU9&1|a&cmY+V@5bvBjf4Je4p_4*S`bS}12EIcuB)2SV=KcObWvnX4>hSnV|wMYYsCX`Q29k65fKH_TK8 z@;F>;9n!g2vJC=6H;XMvB`DQuK8qP~jbf?4d7g`nC*;3V9<0-9rS`g6ZSE5DAf5as z{srGSq^=q3W&zQuFiGxthKuQ6e1e(5$Dt1NDXYIqU}Jvk{N>x+K4Vo~RTeOa7lnn_ zn8~>__PYW3w<$!Gb#`ppD*c?5Yer1G*s*>y;NwET)K)yeD|mbNa`zfr!{qf0MAS4|t*d%r~V)9#AO>dC*+h*jTX zeTEy`USr~^-_bwXJ+V)}6GzU!XOcay8YUnuR0WhB7OY>r5t3`k?9qJ|oWp!+{LTn_ zq3sMZ6XeX#2qZSNE>CFtwkdnk+0W20^E1w{xYL03{ znK9U_gye0ZtYHG-s%2NjQWyqc*Ol(*kq(>^n3h!i^rzlVv=5N0YzEV!mFs?;DsBH( zZu!F2Fka(Wr1wW>Nbqg)NGZ(~bV>IboH6&9@G3%}uXGQ(6QmQU^j)L-CQ`|JnbM>- zO!J&9-84BuQKGfETwd~V0R7w6$$oa!@j)HY9vFuHxUp1Isv6Lx{oW2PBy0GV1HUiM z1j-&}qHaa#oN7@G$qd5#QIi|V5{)CbZ6DKdS(TXyI0W%HbrcA-q5LWWFfTKHA<_@m zYf$biRMU&Q)}mDowQ?-p4J2xM0lD75 z+pc_}dXO8YtS$*2SH8f|D`oGhoS!d4d=p>zOl^?5s$af< zh&*GN4wZC+^`0UbieVgbJS7=qP=&0k`ap17zw+Yb%q8>K>cW!S1}xAS-`W(Y8fGGM zu0L}lwMM{?tR+-yRe6*w#>+bF&F^1e4pySWhAFVyF(za-xI0#hZLGN(%6txxo# zf85TD()^OLO2U#!9LI&me-jJiz-KE=x|ZL`;b%#R(Y}cg@uGXZdv~FqNTZ3_T!#l* zbVI(}5iSiBkDH%EneQMy8^U@Wt#*a>h*A{l?D+x}5L)2f+}jlp(^?g{BdNe3M5|Ka zYa`U}%G=AzlLZK+xmD`}zid58isrZ0Vn~?x=$r>-87Tkn5~3ObOjQ0%25+XQVTP#R zsaMhuz{crf@l?F_qY(%Eexx2f-lWosR9bb@+Fwb87DYCmR9Pc>_$kqjMDt*VEPtl` z+P9JAhbi%LeihE80ox2J*#+M0OWQt!38xB4eE8nR${^ib9j(3p{oGU`t@CE70;lhf z_V8^nOZ#6#$C(bq)M1Hmc80eHT{;4Nc*l7IpO}ZN8q$PNcm7_ROu}-G>|<1VU)aWs z3UBvUK>ed!8I`wc6ER054Lb!9#F#Qmn|9`^qoURQd1f%AWnSw}TqISN;2@jqHQ@MG zG9`q^)f_*O3t1n^RP}YN*$^*=Zt6cWMu%!h`)7P?<24b{;pF+M?D?OUL<{t7NjkQ;W*pIeE z>H_hpli|;=hB@j#pKeLo4~G2!u>8#l;(W3eOZ4A68|-_(&$Pq+9Gp;Vwts@yI*D2R zrVd_l5pumcZ|H)nHflEkxjS4JI-)|*<*@7q{A3y?z1fzTGtwHlb$!0zt0Fn!z7%L+*%bMbd_-4$?X zaU82DNRuFXP#?xvcY~rKf;J~U-z$6Ew4&AbKEtakR2(HIAb`tlzLyz z>IR~Nr_5xQzZ=SsN;LqC$S{Y_dh@HyaHjucv+SIsvJeTSeRTLZNosY z_;$%0+{Q3L+LPbz-4Lc8A-SUXu4hpFja`|dy{b&)YJdy}Tb+9wMu{JupO%({*@S1+ z3gPS?0Yo%=3iC_Dzw-ad4ru-c(LKBPIS-HKSDMqMj#rVET~1#-p8ZX)bVe_N@096f zEf1g;4c7)3;Y-$B+Ga7*)0YZH)gw?Q^Nek!_{)C!PgrVD_Q3W*2~tXkF}C2!a5GKV%XPm-ze9rt}< zw$RPBDqHnJfAy>5&*bf6#cGTT27T(>yGnu_B{PpSI8C8JGMLQ%oF<1Ix$z>0Gu<0e zm1bfL`pBc^NkA?>xliZ~FLsmH*9bn5#f77m;Y|(YJWl$6P5a{6c%58O#hd%Cc1C{s zKvPA(LG>}VsuuLIDOjb-7{OEYK$|=NPP)xzmkc^nmhcSb8u0MK@5OtEAFS*pu^5%Mq&2HQmB&;U#c=M#)#TQDUrWn>uhA0eSLsX5?{$3l;p=K`je zhBi_zqo%xd%Oz}5=xaEWSzT}3s+T5MKnWkK4CIkRMSeyWwlJh1lZ=IE_=Xh31w&=g zlf~U`LTk((lay-pw#CPQW0l@LgxA4TiWx=PwJJS* zmJP%w08Y3KGJ6B#2JdoY55o>r7#g!6mMU?~9n3-UBw|aof7%u=kB$KL(S`u8A}FTN z%ui_TPHH_%a->&(fiHAwLxUNQ5-*TC+EBy?U9GH>$vC|~`YC7EA z4UBpyh`e7gTHOMc&k(WY6AP}l#pfZS55P} zl-{zj=b;}A-@YBlM_79zVm`O&wxFZOaII$Xs!bmy`%^Ek3{!)ubb-L_c8o~lgvE@+ zw?4`sqRXaMXzTbf;|J#{_|bxJm{7@4a5`kXUwki-RPs(V?gOwkgXl9U0&6ZmT`)MOhi2kl+TC%O~f(7Rn>z-=N-Sv`?%dIm{(u9H+Ca#P4Rf z6LiW)iyNS`{~x2&a1)u#ph%WvH!7&PTnWpPVtLr-Q$RS<58+IHfVa2km}y5$XFyUK}>1%j4LES068;ymTb- ztNjGz*8Q)uL4EhCUcICznbU_U{EA{+g!q&z^;_?H#=hgGnJ`1924cqID_#ub7nboN z!lorYLKUm8jB@sjrA&;irCq?GRj`kwP&Z)4D+eur-S8TPUSVMUqQ-oi;I7t3ZL0TK zGWOhs|07;e76<+t{lrKORHZY&u8lM7$-R!b_8(2xPUty){mVXoZPtu^3}ETHpOX$R zPY@2Tn_(JCKPBP?MY(h2KF?v)tL#qyTP~=QfmsO}%uY86d1U-B11+=>87l9vtTcjW zu{nzy+`cL~ znHwcl;|1E{BMshoSyhUTFZ$_bvsOc6i>qR@62#uS375nACx;D`IIv8B+$QR|%$&adz91*Ooav`7-#M6_*qU^Jw^dcl7Ws?7P+#N zh66^fP+JT~ds(ieLiB`ghGDYNtEK-mKZWhj>W}S9GI^39jR)8Fq%OXe2N>P?HYni8 zi=l!KFu)Z({6QkZ!zA2k@?uMw^Op!$5|sYIzvB##w&RtwTH+LxZ+} zoq*#U%yuE01FMCFNNyA>0C1!c8YAO2W(lj{f5jN& zy{>m0CYRz2rqcz{Kh{M7_zsfz4 zu*5ufX3=R=+wjx`#i9D!YiHjNSm^FY>E_UEdB`w+lZS1wERj8we{A#F5tQUiEYo5p z-267(h4kg#{WIqZ9_ASZIpDNQzDidcvqe1qVok42&i_&tC2)*b=V+%Q2OV?|IWP-9 zcm;A7y%DaeTkJJFH5}e8HoRtr?TJ;sr`JCb=X#HR&uLpOBvc6cnHx@$Og=QlR=1ox+^z!z0Fb<<;M?OQ0(v23dT zEEd5@$UHbZVOO{E*=_YnJ&9t|p=y#VxNzvjgh;Q|=a86!Mm~>n?t-iDP1N&%P`)@R z>KK{JGEYeAXMlJOm+`4cv0btGbn@1zt}(@4C55gv$3cp7sYBF9e_>p=+r7R}y3q1K zNps>4^mwqk3;kX?ywlD?kmBxXA{wZU*cejDR-=v;J|9b+KSc^y5hFDKPQd4=4$`RL zuzlq343>EO_BAA%uCJ-FcOySwg;(9O|JSU>pJX9$o zj}mjf&V1Cjf6OuRP3++ zCIHP~ri=wJMP8&UvZD$j41aW>*fnD4F0J73upALq!;-us#*8QB^BK?{I>=J3&Tjac zWN|(;ug%q9c%^3*T-bA(Vjxdkc?>7aC%Hf02ya z6a}D#D?ktsFw%=@ed0&OD7l)3MI7f#)hg{fYGc#V&cuoIeVL1I<1#C^%k^k_=HmaL zNJalliU#rmb6-{uF^1nQu`2+B>Hd{w&%3+{3b6cxvTO3!lkViUQ{ChH!olN~b;FN< z_2%ym{JJ7H3Q{{9h0bwwN5LoZrx&>zn@v+Q4xf~I1>N6}*>s>8EH=57WK!9cslmun z1aM%%idf*B)ZelUFk>uIs{dha7q^`veK20sRImE2qryp) zWZ$PvBy`&7e}TMfIA_Zb!Td*Nj+#9Ez~pgssq+ZP4z}V{W)+8mA`R`#D60Ck5NTbh zz)DS%7_)t~l}Jt*R?>U>bIY28+{(H@<6KrnN)3^xJSYO?_aY_h4d|O~LEu zyv!Whj+TRb?J3g8-9lRJ+$_-8ycF4S3qW^tw+<)P){arm(VEw!Z|_|Q?xJf6MaTs& z6KY2|pLa(FJo1TzJE9*M2eQkR(5mH^Ps*i8i(|>cCS5Jbsv@}w3{t1;=irS2H&Z(U zCb+i%sfo$edRkFKeE;%h9yq5>Q_9SbgIjK@Ley;YI?s6B&TRz*&nbBA@$bLU(Uc`2 zbfpz*-HOb8F^$Vj5>_j!*z&~J_r`DBDD`3gfz9JG96*YGrnR66-{x4_n>Ee(PBwnk zYlgi(!xTZ{d`NaES|Zi3HJs2#dtBeMB*rVL%gTeg{yHpP=Or8sClSRnG~==eDM=f701vK>r!_pQ9GH4Lw=1S` zO&N9&fHbXWV7YN+dWO1ran98yAGcv+9d$`UHe&cnj@^S3!}@1zg>xOi&~H7YprBZz z=*$zMSZ2n})ZbHizB=k{jGXhS|BNan&tTDxR@EQ}B@2*k%?7mFn3uo)f#m9aw(`GJ>l`a`cbxS; zhq!x!up#(Doq}!O-jLerQa|-_dl>{e%%Wqsyl|5cElhNid~~S30UNM$f=zEe#Sv6X z{Ylinwwq&8wji+o8JLg|HQOa?YHEhQ|rfKS%T0Fhwdzq-*K1DSIzA ze#-55v)A2^%x-ai1Nt!Um@loN*9cDbotwpNtm)kQ3P*(y!&aNlAaLV~kF?}t#YWC!gcOvGU z8P0Il#JT3ljiE4!H+B51Zhw&BBhPm2grdb{82$o#+Pn`G_t&Y_llTKg6Hqi`!5R6| zMjjVvFAwD%hFyEEyMbt9ljdBdxs&BsWkVi=hI$dncMq)=62aTL0Eghk0J)Dn<>KUy zDreF{Ths4S0XMmv6&$uToV7aZdd8OMkl3MkzQ2&=sWNAghJii=rd@0|fM>?>jOh|P zhA5Kx#CoAv;jYGJHK>bmZeZ&jKRREutph;_$@!~}(6B9r@sjZhs7Z*)pKY}S4J`Tv zD+TNrNi$2thhiex9S5EkNin6L={+j6R0Qsm&g1eK|pQNCTa=lB2Q&%g>d?HPR*uubu>S!{1+AK+-4mIbL8gsr(1W7*2# z^{xzN>s}KHT9%QhwYtl=8T6$q>Ac2Vaxur&V{Q+-P@xa=mO&)&HjRQZ(v|sLhs7WMhC-}YH=C5Bbis$#6^LO+nAV=l}Q;1!$ z;N0-}F6jfhs#=5*%`61wA565RiU0y{20FgDYVuN^O7b!}R3Gi@ESjV>k=p9^hGH3b zk^Wp*Z#8hir^$M6<4W;5{VTZp`mP_D0Di=wq4JIFMNq|3+|XqhP6_=SXgYIgHa~z#8<%{t@|1;vL$l4ATEm~m0&rYl5pbaRJi zBG)hyzsK}hLinj zJP4RBNx^ITe=C#n%d46b3qK)YjW26_kzuW_XBDu#AIIAwgYNqF*ag3rzbdtY%k5Xe zIZ%k`VB!w7pPkoRXYz!;^vhY$|(>27y z#W#559S@;8Ku1kStYpy}8I6}#qPvAK5&s{A> zU93P0m%HRoNrj_V#UGcl=E>nx9K@f^fk>)i%%9>VCPDco%qp6Z9vq0|A-B{T&@W!gf-}KMERi$#r8Z?aI0{7!QvZ2Vc)_rAMd$JNT$i zOzk1|yikjE8<{jPSCv_uw)kEZ;5VR&1eduOv$4W4uXZ*W-+ jsojY=WF>yGx$_8AtO4=${=TB~%%~fEI+i@}- 0.1.0" if Gem.win_platform? \ No newline at end of file diff --git a/example/_config.yml b/example/_config.yml new file mode 100644 index 0000000..4415ac2 --- /dev/null +++ b/example/_config.yml @@ -0,0 +1,74 @@ +# Welcome to Jekyll! +# +# This config file is meant for settings that affect your whole blog, values +# which you are expected to set up once and rarely edit after that. If you find +# yourself editing this file very often, consider using Jekyll's data files +# feature for the data you need to update frequently. +# +# For technical reasons, this file is *NOT* reloaded automatically when you use +# 'bundle exec jekyll serve'. If you change this file, please restart the server process. + +# Site settings +# These are used to personalize your new site. If you look in the HTML files, +# you will see them accessed via {{ site.title }}, {{ site.email }}, and so on. +# You can create any custom variable you would like, and they will be accessible +# in the templates via {{ site.myvariable }}. +title: Your awesome title that could be long +email: your-email@domain.com +description: > # this means to ignore newlines until "baseurl:" + Write an awesome description for your new site here. You can edit this + line in _config.yml. It will appear in your document head meta (for + Google search results) and in your feed.xml site description. +baseurl: "/example" # the subpath of your site, e.g. /blog +url: "" # the base hostname & protocol for your site, e.g. http://example.com +author: + name: John Doe + twitter: notareal_twitter + picture: https://api.adorable.io/avatars/285/johndoe.png +twitter_username: notareal_twitter +github_username: notareal_github + +# Build settings +markdown: kramdown +theme: jekyll-theme-basically-basic +theme_skin: default # default, night, plum, sea, soft, steel +gems: + - jekyll-feed + - jekyll-seo-tag + - jekyll-sitemap + - jekyll-paginate +feed: + path: atom.xml + +# Pagination - https://jekyllrb.com/docs/pagination/ +paginate: 5 +paginate_path: /page:num/ + +# Link to specific internal pages in the navigation. +# Create a custom list to override the default setting of including links to all +# pages that have a `title`. Add raw page paths in the order you'd like. + +# navigation_pages: +# - about.md +# - cv.md + +# Exclude from processing. +# The following items will not be processed, by default. Create a custom list +# to override the default setting. +# exclude: +# - Gemfile +# - Gemfile.lock +# - node_modules +# - vendor/bundle/ +# - vendor/cache/ +# - vendor/gems/ +# - vendor/ruby/ + +# Front Matter Defaults +defaults: + # _posts + - scope: + path: "_posts" + type: posts + values: + layout: post \ No newline at end of file diff --git a/example/_data/cv.json b/example/_data/cv.json new file mode 100644 index 0000000..88ea8ec --- /dev/null +++ b/example/_data/cv.json @@ -0,0 +1,130 @@ +{ + "basics": { + "name": "Richard Hendriks", + "label": "Programmer", + "picture": "", + "email": "richard.hendriks@gmail.com", + "phone": "(912) 555-4321", + "website": "https://richardhendricks.com", + "summary": "Richard hails from Tulsa. He has earned degrees from the University of Oklahoma and Stanford. (Go Sooners and Cardinals!) Before starting Pied Piper, he worked for Hooli as a part time software developer. While his work focuses on applied information theory, mostly optimizing lossless compression schema of both the length-limited and adaptive variants, his non-work interests range widely, everything from quantum computing to chaos theory. He could tell you about it, but THAT would NOT be a “length-limited” conversation!", + "location": { + "address": "2712 Broadway St", + "postalCode": "94115", + "city": "San Francisco", + "countryCode": "US", + "region": "California" + }, + "profiles": [ + { + "network": "Twitter", + "username": "neutralthoughts", + "url": "" + }, + { + "network": "SoundCloud", + "username": "dandymusicnl", + "url": "https://soundcloud.com/dandymusicnl" + } + ] + }, + "work": [ + { + "company": "Pied Piper", + "position": "CEO/President", + "website": "https://piedpiper.com", + "startDate": "2013-12-01", + "endDate": "2014-12-01", + "summary": "Pied Piper is a multi-platform technology based on a proprietary universal compression algorithm that has consistently fielded high Weisman Scores™ that are not merely competitive, but approach the theoretical limit of lossless compression.", + "highlights": [ + "Build an algorithm for artist to detect if their music was violating copy right infringement laws", + "Successfully won Techcrunch Disrupt", + "Optimized an algorithm that holds the current world record for Weisman Scores" + ] + } + ], + "volunteer": [ + { + "organization": "CoderDojo", + "position": "Teacher", + "website": "https://coderdojo.com/", + "startDate": "2012-01-01", + "endDate": "2013-01-01", + "summary": "Global movement of free coding clubs for young people.", + "highlights": [ + "Awarded 'Teacher of the Month'" + ] + } + ], + "education": [ + { + "institution": "University of Oklahoma", + "area": "Information Technology", + "studyType": "Bachelor", + "startDate": "2011-06-01", + "endDate": "2014-01-01", + "gpa": "4.0", + "courses": [ + "DB1101 - Basic SQL", + "CS2011 - Java Introduction" + ] + } + ], + "awards": [ + { + "title": "Digital Compression Pioneer Award", + "date": "2014-11-01", + "awarder": "Techcrunch", + "summary": "There is no spoon." + } + ], + "publications": [ + { + "name": "Video compression for 3d media", + "publisher": "Hooli", + "releaseDate": "2014-10-01", + "website": "https://en.wikipedia.org/wiki/Silicon_Valley_(TV_series)", + "summary": "Innovative middle-out compression algorithm that changes the way we store data." + } + ], + "skills": [ + { + "name": "Web Development", + "level": "Master", + "keywords": [ + "HTML", + "CSS", + "Javascript" + ] + }, + { + "name": "Compression", + "level": "Master", + "keywords": [ + "Mpeg", + "MP4", + "GIF" + ] + } + ], + "languages": [ + { + "language": "English", + "fluency": "Native speaker" + } + ], + "interests": [ + { + "name": "Wildlife", + "keywords": [ + "Ferrets", + "Unicorns" + ] + } + ], + "references": [ + { + "name": "Erlich Bachman", + "reference": "It is my pleasure to recommend Richard, his performance working as a consultant for Main St. Company proved that he will be a valuable addition to any company." + } + ] +} \ No newline at end of file diff --git a/example/_pages/404.md b/example/_pages/404.md new file mode 100644 index 0000000..9d0f860 --- /dev/null +++ b/example/_pages/404.md @@ -0,0 +1,16 @@ +--- +title: "Page Not Found" +excerpt: "Page not found. Your pixels are in another canvas." +sitemap: false +permalink: /404.html +--- + +Sorry, but the page you were trying to view does not exist --- perhaps you can try searching for it below. + + + diff --git a/example/_pages/archive-layout-with-content.md b/example/_pages/archive-layout-with-content.md new file mode 100644 index 0000000..c99ca8e --- /dev/null +++ b/example/_pages/archive-layout-with-content.md @@ -0,0 +1,219 @@ +--- +title: "Archive Layout with Content" +layout: archive +permalink: /archive-layout-with-content/ +--- + +A variety of common markup showing how the theme styles them. + +# Header one + +## Header two + +### Header three + +#### Header four + +##### Header five + +###### Header six + +## Blockquotes + +Single line blockquote: + +> Stay hungry. Stay foolish. + +Multi line blockquote with a cite reference: + +> People think focus means saying yes to the thing you've got to focus on. But that's not what it means at all. It means saying no to the hundred other good ideas that there are. You have to pick carefully. I'm actually as proud of the things we haven't done as the things I have done. Innovation is saying no to 1,000 things. + +Steve Jobs --- Apple Worldwide Developers' Conference, 1997 +{: .small} + +## Tables + +| Employee | Salary | | +| -------- | ------ | ------------------------------------------------------------ | +| [John Doe](#) | $1 | Because that's all Steve Jobs needed for a salary. | +| [Jane Doe](#) | $100K | For all the blogging she does. | +| [Fred Bloggs](#) | $100M | Pictures are worth a thousand words, right? So Jane × 1,000. | +| [Jane Bloggs](#) | $100B | With hair like that?! Enough said. | + +| Header1 | Header2 | Header3 | +|:--------|:-------:|--------:| +| cell1 | cell2 | cell3 | +| cell4 | cell5 | cell6 | +|-----------------------------| +| cell1 | cell2 | cell3 | +| cell4 | cell5 | cell6 | +|=============================| +| Foot1 | Foot2 | Foot3 | + +## Definition Lists + +Definition List Title +: Definition list division. + +Startup +: A startup company or startup is a company or temporary organization designed to search for a repeatable and scalable business model. + +#dowork +: Coined by Rob Dyrdek and his personal body guard Christopher "Big Black" Boykins, "Do Work" works as a self motivator, to motivating your friends. + +Do It Live +: I'll let Bill O'Reilly [explain](https://www.youtube.com/watch?v=O_HyZ5aW76c "We'll Do It Live") this one. + +## Unordered Lists (Nested) + + * List item one + * List item one + * List item one + * List item two + * List item three + * List item four + * List item two + * List item three + * List item four + * List item two + * List item three + * List item four + +## Ordered List (Nested) + + 1. List item one + 1. List item one + 1. List item one + 2. List item two + 3. List item three + 4. List item four + 2. List item two + 3. List item three + 4. List item four + 2. List item two + 3. List item three + 4. List item four + +## Buttons + +Make any link standout more when applying the `.btn` class. + +```html +Success Button +``` + +[Primary Button](#){: .btn} +[Success Button](#){: .btn .btn--success} +[Warning Button](#){: .btn .btn--warning} +[Danger Button](#){: .btn .btn--danger} +[Info Button](#){: .btn .btn--info} +[Inverse Button](#){: .btn .btn--inverse} +[Light Outline Button](#){: .btn .btn--light-outline} + +```markdown +[Primary Button Text](#link){: .btn} +[Success Button Text](#link){: .btn .btn--success} +[Warning Button Text](#link){: .btn .btn--warning} +[Danger Button Text](#link){: .btn .btn--danger} +[Info Button Text](#link){: .btn .btn--info} +[Inverse Button](#link){: .btn .btn--inverse} +[Light Outline Button](#link){: .btn .btn--light-outline} +``` + +[X-Large Button](#){: .btn .btn--x-large} +[Large Button](#){: .btn .btn--large} +[Default Button](#){: .btn} +[Small Button](#){: .btn .btn--small} + +```markdown +[X-Large Button](#link){: .btn .btn--x-large} +[Large Button](#link){: .btn .btn--large} +[Default Button](#link){: .btn} +[Small Button](#link){: .btn .btn--small} +``` + +## Notices + +**Watch out!** You can also add notices by appending `{: .notice}` to a paragraph. +{: .notice} + +## HTML Tags + +### Address Tag + +