├── CNAME
├── Gemfile
├── index.html
├── .github
├── FUNDING.yml
├── CODE_OF_CONDUCT.md
└── CONTRIBUTING.md
├── assets
├── styles.scss
└── logo.svg
├── screenshot.png
├── .gitignore
├── 404.md
├── _includes
├── site-logo.html
├── site-header.html
├── site-footer.html
├── post-meta.html
├── post-pagination.html
├── site-nav.html
└── post-list.html
├── _sass
├── garth.scss
├── _sassline-base.scss
├── _colors.scss
├── sassline-base
│ ├── _reset.scss
│ ├── _modular-scale.scss
│ ├── _variables.scss
│ ├── _typography.scss
│ └── _mixins.scss
├── _theme.scss
├── _syntax.scss
├── _normalize.scss
└── _flex.scss
├── _layouts
├── page.html
├── post.html
├── home.html
└── default.html
├── garth-jekyll-theme.gemspec
├── LICENSE
├── _posts
├── 2016-08-27-example-post-one.md
├── 2016-08-28-example-post-two.md
└── 2016-08-29-example-post-three.md
├── _config.yml
├── about.md
└── README.md
/CNAME:
--------------------------------------------------------------------------------
1 | garth.darn.es
2 |
--------------------------------------------------------------------------------
/Gemfile:
--------------------------------------------------------------------------------
1 | source "https://rubygems.org"
2 | gemspec
3 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 | ---
2 | layout: home
3 | collectionpage: posts
4 | ---
5 |
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | custom: https://buymeacoffee.com/daviddarnes#support
2 |
--------------------------------------------------------------------------------
/assets/styles.scss:
--------------------------------------------------------------------------------
1 | ---
2 | title: false
3 | ---
4 |
5 | @import "garth";
6 |
--------------------------------------------------------------------------------
/screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/daviddarnes/garth/HEAD/screenshot.png
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | _site/
2 | .sass-cache/
3 | .jekyll-metadata
4 | garth-jekyll-theme-*.gem
5 | Gemfile.lock
6 | **/Gemfile.lock
7 |
--------------------------------------------------------------------------------
/404.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "404"
3 | excerpt: "Page Not Found"
4 | permalink: 404.html
5 | ---
6 |
7 | Sorry, but the page could not be found.
8 |
--------------------------------------------------------------------------------
/_includes/site-logo.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/_includes/site-header.html:
--------------------------------------------------------------------------------
1 |
{{ page.title }}
12 |
13 | {{ content }}
14 |
15 | {{ page.title }}
12 | {% include post-meta.html %}
13 | {{ content }}
14 |
15 | {{ collectiondata.title }}
15 |
16 | {{ collectiondata.description | markdownify }}
17 |
18 |
](https://buymeacoffee.com/daviddarnes#support)
11 |
12 | ## Installation
13 |
14 | ### As a Jekyll theme
15 |
16 | 1. Add `gem "garth-jekyll-theme"` to your `Gemfile` to add the theme as a dependancy
17 | 2. Run the command `bundle install` in the root of project to install the theme and its dependancies
18 | 3. Add `theme: garth-jekyll-theme` to your `_config.yml` file to set the site theme
19 | 4. Run `bundle exec jekyll serve` to build and serve your site
20 | 5. Done! Use the example [`_config.yml`](https://github.com/daviddarnes/garth/blob/master/_config.yml) file to set site-wide options
21 |
22 | ### As a GitHub Pages remote theme
23 |
24 | 1. Add `gem "jekyll-remote-theme"` to your `Gemfile` to add the theme as a dependancy
25 | 2. Run the command `bundle install` in the root of project to install the jekyll remote theme gem as a dependancy
26 | 3. Add `jekyll-remote-theme` to the list of `plugins` in your `_config.yml` file
27 | 4. Add `remote_theme: daviddarnes/garth` to your `_config.yml` file to set the site theme
28 | 5. Run `bundle exec jekyll serve` to build and serve your site
29 | 6. Done! Use the example [`_config.yml`](https://github.com/daviddarnes/garth/blob/master/_config.yml) file to set site-wide options
30 |
31 | ### As a Boilerplate / Fork
32 |
33 | _(deprecated, not recommended)_
34 |
35 | 1. [Fork the repo](https://github.com/daviddarnes/garth#fork-destination-box)
36 | 2. Replace the `Gemfile` with one stating all the gems used in your project
37 | 3. Delete the following unnecessary files/folders: `CODE_OF_CONDUCT.md`, `CONTRIBUTING.md`, `LICENSE`, `screenshot.png`, `CNAME` and `garth-jekyll-theme.gemspec`
38 | 4. Run the command `bundle install` in the root of project to install the jekyll remote theme gem as a dependancy
39 | 5. Run `bundle exec jekyll serve` to build and serve your site
40 | 6. Done! Use the example [`_config.yml`](https://github.com/daviddarnes/garth/blob/master/_config.yml) file to set site-wide options
41 |
--------------------------------------------------------------------------------
/_sass/_theme.scss:
--------------------------------------------------------------------------------
1 | // Structural elements
2 | body {
3 | background: $backgroundColour;
4 | color: $bodyColour;
5 | height: 100%;
6 | display: flex;
7 | @include flex-direction(column);
8 | overflow-x: hidden;
9 | }
10 |
11 | .container {
12 | width: 90%;
13 | max-width: 900px;
14 | margin: 0 auto;
15 | }
16 |
17 |
18 | // Header, feature and footer
19 | .header,
20 | .footer {
21 | .container {
22 | padding: 1rem 0;
23 | @include flexbox;
24 | @include flex-direction(column);
25 | @include align-items(center);
26 | text-align: center;
27 | }
28 | @include breakpoint(break-1) {
29 | .container {
30 | @include flex-direction(row);
31 | @include justify-content(space-between);
32 | text-align: inherit;
33 | }
34 | }
35 | }
36 |
37 | .header {
38 | @include flex(0, 0, auto);
39 | background: darken($backgroundColour, 10%);
40 | }
41 |
42 | .logo {
43 | display: inline-block;
44 | line-height: 0;
45 | border-radius: 100%;
46 | overflow: hidden;
47 | img {
48 | width: 4rem;
49 | height: 4rem;
50 | }
51 | }
52 |
53 | .small {
54 | padding-top: .6rem;
55 | color: $captionColour;
56 | display: inline-block;
57 | }
58 |
59 | .footer {
60 | border-top: 1px solid darken($backgroundColour, 15%);
61 | }
62 |
63 |
64 | // Nav and copyright
65 | .nav {
66 | &--paginator {
67 | @include flexbox;
68 | @include justify-content(center);
69 | color: $captionColour;
70 | text-align: center;
71 | }
72 | }
73 |
74 | .pagination {
75 | margin: 0 1rem;
76 | }
77 |
78 |
79 | // Main content
80 | .main {
81 | @include flexbox;
82 | @include flex-direction(column);
83 | @include flex(1, 0, auto);
84 | margin-bottom: 1.6rem;
85 | @include breakpoint(break-1) {
86 | @include flex-direction(row);
87 | }
88 | }
89 |
90 |
91 | // Lists
92 | .list {
93 | &--posts {
94 | list-style: none;
95 | }
96 | &--nav {
97 | list-style: none;
98 | }
99 | .item--post {
100 | margin-left: 0;
101 | }
102 | }
103 |
104 | .item {
105 | &--nav {
106 | display: inline-block;
107 | margin-left: 1rem;
108 | &:first-of-type {
109 | margin-left: 0;
110 | }
111 | }
112 | &--current {
113 | a {
114 | color: desaturate($linkColour, 100%);
115 | }
116 | }
117 | }
118 |
119 |
120 | // Images and media elements
121 | img {
122 | max-width: 100%;
123 | height: auto;
124 | }
125 |
126 | audio,
127 | video {
128 | width: 100%;
129 | }
130 |
131 |
132 | // Text selection
133 | ::selection {
134 | background: $headingColour;
135 | color: $white;
136 | text-shadow: none;
137 | }
138 |
139 |
140 | // Sassline overrides
141 | .typeset {
142 | a > code {
143 | text-shadow: none;
144 | }
145 | .button,
146 | button {
147 | background-image: none;
148 | text-shadow: none;
149 | color: $backgroundColour;
150 | &:hover,
151 | &:active,
152 | &:focus {
153 | background-image: none;
154 | color: $backgroundColour;
155 | }
156 | }
157 | hr {
158 | width: 100%;
159 | }
160 | li {
161 | > p {
162 | padding: 0;
163 | margin: 0;
164 | }
165 | }
166 | .nav a {
167 | padding-left: 0;
168 | padding-right: 0;
169 | margin-left: .2rem;
170 | margin-right: .2rem;
171 | }
172 | pre {
173 | white-space: pre;
174 | overflow-x: scroll;
175 | }
176 | }
177 |
--------------------------------------------------------------------------------
/_sass/_syntax.scss:
--------------------------------------------------------------------------------
1 | .hll { background-color: #ffffcc }
2 | .c { color: #999988; font-style: italic } /* Comment */
3 | .err { color: #a61717; background-color: #e3d2d2 } /* Error */
4 | .k { color: #000000; font-weight: bold } /* Keyword */
5 | .o { color: #000000; font-weight: bold } /* Operator */
6 | .cm { color: #999988; font-style: italic } /* Comment.Multiline */
7 | .cp { color: #999999; font-weight: bold; font-style: italic } /* Comment.Preproc */
8 | .c1 { color: #999988; font-style: italic } /* Comment.Single */
9 | .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */
10 | .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
11 | .ge { color: #000000; font-style: italic } /* Generic.Emph */
12 | .gr { color: #aa0000 } /* Generic.Error */
13 | .gh { color: #999999 } /* Generic.Heading */
14 | .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
15 | .go { color: #888888 } /* Generic.Output */
16 | .gp { color: #555555 } /* Generic.Prompt */
17 | .gs { font-weight: bold } /* Generic.Strong */
18 | .gu { color: #aaaaaa } /* Generic.Subheading */
19 | .gt { color: #aa0000 } /* Generic.Traceback */
20 | .kc { color: #000000; font-weight: bold } /* Keyword.Constant */
21 | .kd { color: #000000; font-weight: bold } /* Keyword.Declaration */
22 | .kn { color: #000000; font-weight: bold } /* Keyword.Namespace */
23 | .kp { color: #000000; font-weight: bold } /* Keyword.Pseudo */
24 | .kr { color: #000000; font-weight: bold } /* Keyword.Reserved */
25 | .kt { color: #445588; font-weight: bold } /* Keyword.Type */
26 | .m { color: #009999 } /* Literal.Number */
27 | .s { color: #d01040 } /* Literal.String */
28 | .na { color: #008080 } /* Name.Attribute */
29 | .nb { color: #0086B3 } /* Name.Builtin */
30 | .nc { color: #445588; font-weight: bold } /* Name.Class */
31 | .no { color: #008080 } /* Name.Constant */
32 | .nd { color: #3c5d5d; font-weight: bold } /* Name.Decorator */
33 | .ni { color: #800080 } /* Name.Entity */
34 | .ne { color: #990000; font-weight: bold } /* Name.Exception */
35 | .nf { color: #990000; font-weight: bold } /* Name.Function */
36 | .nl { color: #990000; font-weight: bold } /* Name.Label */
37 | .nn { color: #555555 } /* Name.Namespace */
38 | .nt { color: #000080 } /* Name.Tag */
39 | .nv { color: #008080 } /* Name.Variable */
40 | .ow { color: #000000; font-weight: bold } /* Operator.Word */
41 | .w { color: #bbbbbb } /* Text.Whitespace */
42 | .mf { color: #009999 } /* Literal.Number.Float */
43 | .mh { color: #009999 } /* Literal.Number.Hex */
44 | .mi { color: #009999 } /* Literal.Number.Integer */
45 | .mo { color: #009999 } /* Literal.Number.Oct */
46 | .sb { color: #d01040 } /* Literal.String.Backtick */
47 | .sc { color: #d01040 } /* Literal.String.Char */
48 | .sd { color: #d01040 } /* Literal.String.Doc */
49 | .s2 { color: #d01040 } /* Literal.String.Double */
50 | .se { color: #d01040 } /* Literal.String.Escape */
51 | .sh { color: #d01040 } /* Literal.String.Heredoc */
52 | .si { color: #d01040 } /* Literal.String.Interpol */
53 | .sx { color: #d01040 } /* Literal.String.Other */
54 | .sr { color: #009926 } /* Literal.String.Regex */
55 | .s1 { color: #d01040 } /* Literal.String.Single */
56 | .ss { color: #990073 } /* Literal.String.Symbol */
57 | .bp { color: #999999 } /* Name.Builtin.Pseudo */
58 | .vc { color: #008080 } /* Name.Variable.Class */
59 | .vg { color: #008080 } /* Name.Variable.Global */
60 | .vi { color: #008080 } /* Name.Variable.Instance */
61 | .il { color: #009999 } /* Literal.Number.Integer.Long */
62 |
--------------------------------------------------------------------------------
/_sass/sassline-base/_variables.scss:
--------------------------------------------------------------------------------
1 | // SCSS variables
2 | // ---------------------------------------
3 |
4 | // Note: For the following Sass maps enter values as if they would be px units.
5 |
6 | // Breakpoint sizes from px to ems. Add more values here to add more breakpoints.
7 | // Change names if you prefer, it wont break the mixin as long as they are strings not just numbers.
8 | $breakpoints: (
9 | break-0: 0, // 0px Mobile first
10 | break-1: 640, // 640px ~ Small tablet up
11 | break-2: 800, // 800px ~ Large tablet up
12 | break-3: 1024, // 1024px ~ Desktop up
13 | break-4: 1600 // 1600px ~ Large desktop up
14 | ) !default;
15 |
16 | // Root font-sizes for each breakpoint. Set to half desired line-height of body text.
17 | // ! Make sure to have as many sizes as breakpoints above.
18 | $rootsizes: (
19 | rootsize-0: 12, // 24px line-height body text
20 | rootsize-1: 14, // 28px line-height body text
21 | rootsize-2: 15, // 30px line-height body text
22 | rootsize-3: 17, // 34px line-height body text
23 | rootsize-4: 19 // 38px line-height body text
24 | ) !default;
25 |
26 | // Set the optimum line-length for your text (based on typeface).
27 | // Aim for 75–100 characters a line when possible, at smaller sizes type size is more important.
28 | // ! Make sure to have as many widths as breakpoints above.
29 | // Note: this was 'maxwidths' in previous versions.
30 | $measures: (
31 | measure-0: 500, // 500px wide
32 | measure-1: 550, // 550px wide
33 | measure-2: 600, // 600px wide
34 | measure-3: 680, // 680px wide
35 | measure-4: 750 // 750px wide
36 | ) !default;
37 |
38 | // Set the max-widths for containers (based on design).
39 | // ! Make sure to have as many widths as breakpoints above.
40 | $maxwidths: (
41 | width-0: 500, // 500px wide
42 | width-1: 600, // 600px wide
43 | width-2: 800, // 800px wide
44 | width-3: 1100, // 110px wide
45 | width-4: 1300 // 1300px wide
46 | ) !default;
47 |
48 | // Gutter widths
49 | $gutterwidths: (
50 | small: 1rem,
51 | medium: 2rem,
52 | large: 4rem
53 | ) !default;
54 |
55 | // Add typefaces here.
56 | // Add weight and style details too.
57 | // ! Set cap height to set to the baseline.
58 | $bodytype: (
59 | font-family: '"Alegreya Sans", sans-serif',
60 | regular: 400,
61 | bold: 700,
62 | italic: italic,
63 | cap-height: 0.66
64 | ) !default;
65 |
66 | $headingtype: (
67 | font-family: '"Neuton", serif',
68 | regular: 400,
69 | bold: 700,
70 | cap-height: 0.66
71 | ) !default;
72 |
73 | $monospacetype: (
74 | font-family: 'Menlo, monospace',
75 | regular: 400,
76 | cap-height: 0.68
77 | ) !default;
78 |
79 | // Here are some local fonts cap-height sizes to get you started:
80 | // Georgia: 0.66, Times / Times New Roman: 0.65, Palatino: 0.52
81 | // Lucida Grande: 0.72, Helvetica: 0.66, Verdana: 0.76, Tahoma: 0.76
82 |
83 | // Selection of Typekit fonts cap-height sizes:
84 | // Proxima Nova: 0.57, Museo Slab: 0.66, JAF Facit: 0.7, Brandon Grotesque: 0.65, Clavo: 0.7, Adelle: 0.66, FF Tisa Pro: 0.82, Jubilat: 0.66, Futura PT: 0.66, Chaparral Pro: 0.5, Minion Pro: 0.66, Myriad Pro: 0.66, Adobe Caslon Pro: 0.36
85 |
86 | // Text colours. British English.
87 | $headingColour: #2E2E2E !default;
88 | $bodyColour: #494949 !default;
89 | $linkColour: #0E58F5 !default;
90 | $hoverColour: #0B348B !default;
91 | $captionColour: #BDC8CC !default;
92 | $white: #FFFFFF !default;
93 |
94 | // Background colours.
95 | $backgroundColour: #FCFCFC !default;
96 | $codeBackgroundColour: #F5F4F2 !default;
97 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # [Garth](https://garth.darn.es/)
2 | [](https://badge.fury.io/rb/garth-jekyll-theme)
3 |
4 | 🥁 A really basic theme for Jekyll, using the official Jekyll theme implementation.
5 |
6 | [
](https://buymeacoffee.com/daviddarnes#support)
7 |
8 | 
9 |
10 | ## Contents
11 | - [Installation](#installation)
12 | - [Customising](#customising)
13 | - [Site settings](#site-settings)
14 | - [Page layouts](#page-layouts)
15 | - [Credits](#credits)
16 |
17 | ## Installation
18 |
19 | ### Quick setup
20 |
21 | To give you a running start I've put together some starter kits that you can download, fork or even deploy immediately:
22 |
23 | - Vanilla Jekyll starter kit:
24 | [](https://app.netlify.com/start/deploy?repository=https://github.com/daviddarnes/garth-kit)
25 | - Stackbit starter kit:
26 | [](https://app.stackbit.com/create?theme=https://github.com/daviddarnes/garth-stackbit-kit)
27 | - GitHub Pages with remote theme kit - **[Download kit](https://github.com/daviddarnes/garth-kit/archive/remote-theme.zip)**
28 |
29 | ### As a Jekyll theme
30 |
31 | 1. Add `gem "garth-jekyll-theme"` to your `Gemfile` to add the theme as a dependancy
32 | 2. Run the command `bundle install` in the root of project to install the theme and its dependancies
33 | 3. Add `theme: garth-jekyll-theme` to your `_config.yml` file to set the site theme
34 | 4. Run `bundle exec jekyll serve` to build and serve your site
35 | 5. Done! Use the example [`_config.yml`](https://github.com/daviddarnes/garth/blob/master/_config.yml) file to set site-wide options
36 |
37 | ### As a GitHub Pages remote theme
38 |
39 | 1. Add `gem "jekyll-remote-theme"` to your `Gemfile` to add the theme as a dependancy
40 | 2. Run the command `bundle install` in the root of project to install the jekyll remote theme gem as a dependancy
41 | 3. Add `jekyll-remote-theme` to the list of `plugins` in your `_config.yml` file
42 | 4. Add `remote_theme: daviddarnes/garth` to your `_config.yml` file to set the site theme
43 | 5. Run `bundle exec jekyll serve` to build and serve your site
44 | 6. Done! Use the example [`_config.yml`](https://github.com/daviddarnes/garth/blob/master/_config.yml) file to set site-wide options
45 |
46 | ### As a Boilerplate / Fork
47 |
48 | _(deprecated, not recommended)_
49 |
50 | 1. [Fork the repo](https://github.com/daviddarnes/garth#fork-destination-box)
51 | 2. Replace the `Gemfile` with one stating all the gems used in your project
52 | 3. Delete the following unnecessary files/folders: `CODE_OF_CONDUCT.md`, `CONTRIBUTING.md`, `LICENSE`, `screenshot.png`, `CNAME` and `garth-jekyll-theme.gemspec`
53 | 4. Run the command `bundle install` in the root of project to install the jekyll remote theme gem as a dependancy
54 | 5. Run `bundle exec jekyll serve` to build and serve your site
55 | 6. Done! Use the example [`_config.yml`](https://github.com/daviddarnes/garth/blob/master/_config.yml) file to set site-wide options
56 |
57 | ## Customising
58 |
59 | When using Garth as a theme means you can take advantage of the file overriding method. This allows you to overwrite any file in this theme with your own custom file, by matching the file name and path. The most common example of this would be if you want to add your own styles or change the core style settings.
60 |
61 | To add your own styles copy the [`styles.scss`](https://github.com/daviddarnes/garth/blob/master/assets/styles.scss) into your own project with the same file path (`assets/styles.scss`). From there you can add your own styles, you can even optionally ignore the theme styles by removing the `@import "garth";` line.
62 |
63 | If you're looking to set your own colours copy the [`_colors.scss`](https://github.com/daviddarnes/garth/blob/master/_sass/_colors.scss) and main theme styles file [`garth.scss`](https://github.com/daviddarnes/garth/blob/master/_sass/garth.scss) into your project at the same file path (`_sass/`) and change variables however you wish. The settings are a mixture of custom variables and settings from [Sassline](https://medium.com/@jakegiltsoff/sassline-v2-0-e424b2881e7e) - follow the link to find out how to configure the typographic settings.
64 |
65 | ## Site settings
66 |
67 | You'll need to change the `description`, `title` and `url` to match with the project.
68 |
69 | ## Page layouts
70 |
71 | There are 3 layouts; `page`, `post` and `home` (home acts as the font page blog).
72 |
73 | > **Note:** The Post List Page options are actually in the collection data within the `_config.yml` file, this is so they can be edited with CMSs such as [Siteleaf](https://siteleaf.com)
74 |
75 | ## Credits
76 |
77 | - Thanks to [Sassline](https://sassline.com/) for the typographic basis, by [Jake Giltsoff](https://twitter.com/jakegiltsoff)
78 | - Thanks to [Flexbox mixin](https://github.com/mastastealth/sass-flex-mixin) by [Brian Franco](https://twitter.com/brianfranco)
79 | - Thanks to [Normalize](https://necolas.github.io/normalize.css/) by [Nicolas Gallagher](https://twitter.com/necolas) and [Jonathan Neal](https://twitter.com/jon_neal).
80 | - Thanks to [pygments-css](http://richleland.github.io/pygments-css/) for the autumn syntax highlighting, by [Rich Leland](https://twitter.com/richleland)
81 |
--------------------------------------------------------------------------------
/_sass/_normalize.scss:
--------------------------------------------------------------------------------
1 | /*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */
2 |
3 | /**
4 | * 1. Change the default font family in all browsers (opinionated).
5 | * 2. Prevent adjustments of font size after orientation changes in IE and iOS.
6 | */
7 |
8 | html {
9 | font-family: sans-serif; /* 1 */
10 | -ms-text-size-adjust: 100%; /* 2 */
11 | -webkit-text-size-adjust: 100%; /* 2 */
12 | }
13 |
14 | /**
15 | * Remove the margin in all browsers (opinionated).
16 | */
17 |
18 | body {
19 | margin: 0;
20 | }
21 |
22 | /* HTML5 display definitions
23 | ========================================================================== */
24 |
25 | /**
26 | * Add the correct display in IE 9-.
27 | * 1. Add the correct display in Edge, IE, and Firefox.
28 | * 2. Add the correct display in IE.
29 | */
30 |
31 | article,
32 | aside,
33 | details, /* 1 */
34 | figcaption,
35 | figure,
36 | footer,
37 | header,
38 | main, /* 2 */
39 | menu,
40 | nav,
41 | section,
42 | summary { /* 1 */
43 | display: block;
44 | }
45 |
46 | /**
47 | * Add the correct display in IE 9-.
48 | */
49 |
50 | audio,
51 | canvas,
52 | progress,
53 | video {
54 | display: inline-block;
55 | }
56 |
57 | /**
58 | * Add the correct display in iOS 4-7.
59 | */
60 |
61 | audio:not([controls]) {
62 | display: none;
63 | height: 0;
64 | }
65 |
66 | /**
67 | * Add the correct vertical alignment in Chrome, Firefox, and Opera.
68 | */
69 |
70 | progress {
71 | vertical-align: baseline;
72 | }
73 |
74 | /**
75 | * Add the correct display in IE 10-.
76 | * 1. Add the correct display in IE.
77 | */
78 |
79 | template, /* 1 */
80 | [hidden] {
81 | display: none;
82 | }
83 |
84 | /* Links
85 | ========================================================================== */
86 |
87 | /**
88 | * 1. Remove the gray background on active links in IE 10.
89 | * 2. Remove gaps in links underline in iOS 8+ and Safari 8+.
90 | */
91 |
92 | a {
93 | background-color: transparent; /* 1 */
94 | -webkit-text-decoration-skip: objects; /* 2 */
95 | }
96 |
97 | /**
98 | * Remove the outline on focused links when they are also active or hovered
99 | * in all browsers (opinionated).
100 | */
101 |
102 | a:active,
103 | a:hover {
104 | outline-width: 0;
105 | }
106 |
107 | /* Text-level semantics
108 | ========================================================================== */
109 |
110 | /**
111 | * 1. Remove the bottom border in Firefox 39-.
112 | * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
113 | */
114 |
115 | abbr[title] {
116 | border-bottom: none; /* 1 */
117 | text-decoration: underline; /* 2 */
118 | text-decoration: underline dotted; /* 2 */
119 | }
120 |
121 | /**
122 | * Prevent the duplicate application of `bolder` by the next rule in Safari 6.
123 | */
124 |
125 | b,
126 | strong {
127 | font-weight: inherit;
128 | }
129 |
130 | /**
131 | * Add the correct font weight in Chrome, Edge, and Safari.
132 | */
133 |
134 | b,
135 | strong {
136 | font-weight: bolder;
137 | }
138 |
139 | /**
140 | * Add the correct font style in Android 4.3-.
141 | */
142 |
143 | dfn {
144 | font-style: italic;
145 | }
146 |
147 | /**
148 | * Correct the font size and margin on `h1` elements within `section` and
149 | * `article` contexts in Chrome, Firefox, and Safari.
150 | */
151 |
152 | h1 {
153 | font-size: 2em;
154 | margin: 0.67em 0;
155 | }
156 |
157 | /**
158 | * Add the correct background and color in IE 9-.
159 | */
160 |
161 | mark {
162 | background-color: #ff0;
163 | color: #000;
164 | }
165 |
166 | /**
167 | * Add the correct font size in all browsers.
168 | */
169 |
170 | small {
171 | font-size: 80%;
172 | }
173 |
174 | /**
175 | * Prevent `sub` and `sup` elements from affecting the line height in
176 | * all browsers.
177 | */
178 |
179 | sub,
180 | sup {
181 | font-size: 75%;
182 | line-height: 0;
183 | position: relative;
184 | vertical-align: baseline;
185 | }
186 |
187 | sub {
188 | bottom: -0.25em;
189 | }
190 |
191 | sup {
192 | top: -0.5em;
193 | }
194 |
195 | /* Embedded content
196 | ========================================================================== */
197 |
198 | /**
199 | * Remove the border on images inside links in IE 10-.
200 | */
201 |
202 | img {
203 | border-style: none;
204 | }
205 |
206 | /**
207 | * Hide the overflow in IE.
208 | */
209 |
210 | svg:not(:root) {
211 | overflow: hidden;
212 | }
213 |
214 | /* Grouping content
215 | ========================================================================== */
216 |
217 | /**
218 | * 1. Correct the inheritance and scaling of font size in all browsers.
219 | * 2. Correct the odd `em` font sizing in all browsers.
220 | */
221 |
222 | code,
223 | kbd,
224 | pre,
225 | samp {
226 | font-family: monospace, monospace; /* 1 */
227 | font-size: 1em; /* 2 */
228 | }
229 |
230 | /**
231 | * Add the correct margin in IE 8.
232 | */
233 |
234 | figure {
235 | margin: 1em 40px;
236 | }
237 |
238 | /**
239 | * 1. Add the correct box sizing in Firefox.
240 | * 2. Show the overflow in Edge and IE.
241 | */
242 |
243 | hr {
244 | box-sizing: content-box; /* 1 */
245 | height: 0; /* 1 */
246 | overflow: visible; /* 2 */
247 | }
248 |
249 | /* Forms
250 | ========================================================================== */
251 |
252 | /**
253 | * 1. Change font properties to `inherit` in all browsers (opinionated).
254 | * 2. Remove the margin in Firefox and Safari.
255 | */
256 |
257 | button,
258 | input,
259 | select,
260 | textarea {
261 | font: inherit; /* 1 */
262 | margin: 0; /* 2 */
263 | }
264 |
265 | /**
266 | * Restore the font weight unset by the previous rule.
267 | */
268 |
269 | optgroup {
270 | font-weight: bold;
271 | }
272 |
273 | /**
274 | * Show the overflow in IE.
275 | * 1. Show the overflow in Edge.
276 | */
277 |
278 | button,
279 | input { /* 1 */
280 | overflow: visible;
281 | }
282 |
283 | /**
284 | * Remove the inheritance of text transform in Edge, Firefox, and IE.
285 | * 1. Remove the inheritance of text transform in Firefox.
286 | */
287 |
288 | button,
289 | select { /* 1 */
290 | text-transform: none;
291 | }
292 |
293 | /**
294 | * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`
295 | * controls in Android 4.
296 | * 2. Correct the inability to style clickable types in iOS and Safari.
297 | */
298 |
299 | button,
300 | html [type="button"], /* 1 */
301 | [type="reset"],
302 | [type="submit"] {
303 | -webkit-appearance: button; /* 2 */
304 | }
305 |
306 | /**
307 | * Remove the inner border and padding in Firefox.
308 | */
309 |
310 | button::-moz-focus-inner,
311 | [type="button"]::-moz-focus-inner,
312 | [type="reset"]::-moz-focus-inner,
313 | [type="submit"]::-moz-focus-inner {
314 | border-style: none;
315 | padding: 0;
316 | }
317 |
318 | /**
319 | * Restore the focus styles unset by the previous rule.
320 | */
321 |
322 | button:-moz-focusring,
323 | [type="button"]:-moz-focusring,
324 | [type="reset"]:-moz-focusring,
325 | [type="submit"]:-moz-focusring {
326 | outline: 1px dotted ButtonText;
327 | }
328 |
329 | /**
330 | * Change the border, margin, and padding in all browsers (opinionated).
331 | */
332 |
333 | fieldset {
334 | border: 1px solid #c0c0c0;
335 | margin: 0 2px;
336 | padding: 0.35em 0.625em 0.75em;
337 | }
338 |
339 | /**
340 | * 1. Correct the text wrapping in Edge and IE.
341 | * 2. Correct the color inheritance from `fieldset` elements in IE.
342 | * 3. Remove the padding so developers are not caught out when they zero out
343 | * `fieldset` elements in all browsers.
344 | */
345 |
346 | legend {
347 | box-sizing: border-box; /* 1 */
348 | color: inherit; /* 2 */
349 | display: table; /* 1 */
350 | max-width: 100%; /* 1 */
351 | padding: 0; /* 3 */
352 | white-space: normal; /* 1 */
353 | }
354 |
355 | /**
356 | * Remove the default vertical scrollbar in IE.
357 | */
358 |
359 | textarea {
360 | overflow: auto;
361 | }
362 |
363 | /**
364 | * 1. Add the correct box sizing in IE 10-.
365 | * 2. Remove the padding in IE 10-.
366 | */
367 |
368 | [type="checkbox"],
369 | [type="radio"] {
370 | box-sizing: border-box; /* 1 */
371 | padding: 0; /* 2 */
372 | }
373 |
374 | /**
375 | * Correct the cursor style of increment and decrement buttons in Chrome.
376 | */
377 |
378 | [type="number"]::-webkit-inner-spin-button,
379 | [type="number"]::-webkit-outer-spin-button {
380 | height: auto;
381 | }
382 |
383 | /**
384 | * 1. Correct the odd appearance in Chrome and Safari.
385 | * 2. Correct the outline style in Safari.
386 | */
387 |
388 | [type="search"] {
389 | -webkit-appearance: textfield; /* 1 */
390 | outline-offset: -2px; /* 2 */
391 | }
392 |
393 | /**
394 | * Remove the inner padding and cancel buttons in Chrome and Safari on OS X.
395 | */
396 |
397 | [type="search"]::-webkit-search-cancel-button,
398 | [type="search"]::-webkit-search-decoration {
399 | -webkit-appearance: none;
400 | }
401 |
402 | /**
403 | * Correct the text style of placeholders in Chrome, Edge, and Safari.
404 | */
405 |
406 | ::-webkit-input-placeholder {
407 | color: inherit;
408 | opacity: 0.54;
409 | }
410 |
411 | /**
412 | * 1. Correct the inability to style clickable types in iOS and Safari.
413 | * 2. Change font properties to `inherit` in Safari.
414 | */
415 |
416 | ::-webkit-file-upload-button {
417 | -webkit-appearance: button; /* 1 */
418 | font: inherit; /* 2 */
419 | }
420 |
--------------------------------------------------------------------------------
/_sass/sassline-base/_typography.scss:
--------------------------------------------------------------------------------
1 | // Typography
2 | // ---------------------------------------
3 |
4 | // Setting root sizes and base styles.
5 | html {
6 | @include rootsize;
7 |
8 | -webkit-text-size-adjust: 100%;
9 | -ms-text-size-adjust: 100%;
10 | }
11 |
12 | // Site-wide base styles.
13 | body {
14 | @include fontsize(zeta, all);
15 |
16 | font-family: unquote(map-get($bodytype, font-family));
17 | font-style: normal;
18 | font-weight: map-get($bodytype, regular);
19 | line-height: 2rem;
20 | }
21 |
22 | // Links.
23 | a {
24 | color: $linkColour;
25 | text-decoration: none;
26 | transition: color .1s, background-color .1s;
27 |
28 | &:hover, &:active, &:focus {
29 | color: $hoverColour;
30 | text-decoration: none;
31 | }
32 | }
33 |
34 | // Styles for typeset text.
35 | .typeset {
36 |
37 | // Nice underlines for text links.
38 | p a, li a {
39 | background-image: linear-gradient(to bottom,rgba(0, 0, 0, 0) 50%,lighten($linkColour,20%) 50%);
40 | background-position: 0 93%;
41 | background-repeat: repeat-x;
42 | background-size: 100% 0.15rem;
43 | text-shadow: 0.1rem 0 $backgroundColour,
44 | 0.15rem 0 $backgroundColour,
45 | -0.1rem 0 $backgroundColour,
46 | -0.15rem 0 $backgroundColour;
47 |
48 | &:hover, &:active, &:focus {
49 | background-image: linear-gradient(to bottom,rgba(0, 0, 0, 0) 50%,lighten($hoverColour,20%) 50%);
50 | }
51 | }
52 |
53 | // Paragraphs. OpenType ligatures and oldstyle figures enabled if available.
54 | p {
55 | @include baseline($fontsize: zeta, $font: $bodytype, $lineheight: 2, $below: 2, $breakpoint: all);
56 |
57 | font-feature-settings: 'kern', 'onum', 'liga';
58 | }
59 |
60 | // Headings. OpenType ligatures, discretionary ligatures and lining figures enabled if available.
61 | h1, h2, h3, h4, h5, h6 {
62 | color: $headingColour;
63 | font-family: unquote(map-get($headingtype, font-family));
64 | font-feature-settings: 'dlig', 'liga', 'lnum', 'kern';
65 | font-style: normal;
66 | font-weight: map-get($headingtype, bold);
67 | }
68 |
69 | // Heading level 1.
70 | h1, .alpha {
71 | @include sassline($fontsize: alpha, $font: $headingtype, $lineheight: 3, $below: 1, $breakpoint: all);
72 | }
73 |
74 | // Heading level 2.
75 | h2, .beta {
76 | @include sassline(beta, $headingtype, 3, 1, all);
77 | }
78 |
79 | // Heading level 3.
80 | h3, .gamma {
81 | @include sassline(gamma, $headingtype, 3, 1, all);
82 | }
83 |
84 | // Heading level 4.
85 | h4, .delta {
86 | @include sassline(delta, $headingtype, 2, 0, all);
87 | }
88 |
89 | // Heading level 5.
90 | h5, .epsilon {
91 | @include sassline(epsilon, $headingtype, 2, 0, all);
92 | }
93 |
94 | // Heading level 6.
95 | h6, .zeta {
96 | @include sassline(zeta, $headingtype, 2, 0, all);
97 | }
98 |
99 | // Lists.
100 | ul, ol {
101 | @include baseline(zeta, $bodytype, 2, 2, all);
102 |
103 | li {
104 | font-feature-settings: 'kern', 'onum', 'liga';
105 | margin-left: 2rem;
106 |
107 | @include breakpoint(break-1) {
108 | margin-left: 0;
109 | }
110 |
111 | ol, ul {
112 | padding-top: 1rem;
113 | margin-bottom: 1rem;
114 | margin-left: 2rem;
115 | }
116 | }
117 | }
118 |
119 | // Ordered lists.
120 | ol {
121 | list-style-type: none;
122 |
123 | li {
124 | counter-increment: top-level;
125 |
126 | &:before {
127 | content: counter(top-level) '.';
128 | font-feature-settings: 'lnum', 'tnum';
129 | margin-left: -3rem;
130 | position: absolute;
131 | text-align: right;
132 | width: 2em;
133 | }
134 |
135 | ul {
136 |
137 | li {
138 |
139 | &:before {
140 | content: '';
141 | }
142 |
143 | ol {
144 |
145 | li {
146 | counter-increment: alt-level;
147 |
148 | &:before {
149 | content: counter(alt-level) '.';
150 | }
151 | }
152 | }
153 | }
154 | }
155 |
156 | ol {
157 |
158 | li {
159 | counter-increment: sub-level;
160 |
161 | &:before {
162 | content: counter(top-level) '.' counter(sub-level);
163 | }
164 |
165 | ul {
166 |
167 | li {
168 |
169 | &:before {
170 | content: '';
171 | }
172 | }
173 | }
174 |
175 | ol {
176 |
177 | li {
178 | counter-increment: sub-sub-level;
179 |
180 | &:before {
181 | content: counter(top-level) '.' counter(sub-level) '.' counter(sub-sub-level);
182 | }
183 | }
184 | }
185 | }
186 | }
187 | }
188 | }
189 |
190 | // Definition lists.
191 | dl {
192 | @include baseline(zeta, $bodytype, 2, 2, all);
193 |
194 | dt, dd {
195 | font-feature-settings: 'kern', 'onum', 'liga';
196 | margin-left: 2rem;
197 |
198 | @include breakpoint(break-1) {
199 | margin-left: 0;
200 | }
201 | }
202 |
203 | dt {
204 | font-weight: map-get($bodytype, bold);
205 | }
206 |
207 | dd + dt {
208 | padding-top: 1rem;
209 | }
210 | }
211 |
212 | // Tables.
213 | table {
214 | @include sassline(eta, $headingtype, 2, 0, all);
215 |
216 | font-family: unquote(map-get($headingtype, font-family));
217 | font-feature-settings: 'liga', 'lnum', 'tnum', 'kern';
218 | font-style: normal;
219 | font-weight: map-get($headingtype, regular);
220 | width: 100%;
221 |
222 | thead {
223 |
224 | th {
225 | @include sassline(zeta, $headingtype, 2, 0, all);
226 | padding-bottom: 1px;
227 | }
228 | }
229 | }
230 |
231 | // Bold.
232 | b, strong, .bold {
233 | font-weight: map-get($bodytype, bold);
234 | }
235 |
236 | // Italic.
237 | em, i, .italic {
238 | font-style: map-get($bodytype, italic);
239 | }
240 |
241 | // Caption and inline small text.
242 | small, .caption {
243 | @include fontsize(theta, all);
244 |
245 | font-family: unquote(map-get($headingtype, font-family));
246 | font-style: normal;
247 | font-weight: map-get($headingtype, regular);
248 | }
249 |
250 | small {
251 | line-height: 1rem;
252 | }
253 |
254 | .caption {
255 | @include baseline(theta, $headingtype, 2, 2, all);
256 |
257 | color: $captionColour;
258 | }
259 |
260 | // Nice spacing for captions.
261 | h1 + .caption, .alpha + .caption, h2 + .caption, .beta + .caption, h3 + .caption, .gamma + .caption {
262 | margin-top: -1rem;
263 | }
264 |
265 | .delta + .caption, .epsilon + .caption, .zeta + .caption {
266 | margin-top: 0rem;
267 | }
268 |
269 | // Quotes.
270 | blockquote {
271 |
272 | p {
273 | border-left: 0.15rem solid $linkColour;
274 | font-style: map-get($bodytype, italic);
275 | padding-left: 1rem;
276 |
277 | // Add spacing below blockquote paragraphs to align to baseline grid.
278 | $get-scale: map-get($modular-scale, scale-0);
279 | $get-size: map-get($get-scale, zeta);
280 | $rootsize: nth($sizes, 1);
281 | $baseline-shift: #{($get-size / 2 * ((2 * $rootsize / $get-size) - map-get($bodytype, cap-height))) / $rootsize + 0.00001};
282 | $baseline-push: #{3 - (($get-size * ((2 * $rootsize / $get-size) - map-get($bodytype, cap-height))) / $rootsize + 0.00001)};
283 |
284 | margin-bottom: #{$baseline-push}rem;
285 | padding-bottom: #{$baseline-shift}rem;
286 |
287 | @for $i from 2 through $breakpoints-limit {
288 | $get-scale: map-get($modular-scale, scale-#{$i - 1});
289 | $get-size: map-get($get-scale, zeta);
290 | $rootsize: nth($sizes, $i);
291 | $baseline-shift: #{($get-size / 2 * ((2 * $rootsize / $get-size) - map-get($bodytype, cap-height))) / $rootsize + 0.00001};
292 | $baseline-push: #{3 - (($get-size * ((2 * $rootsize / $get-size) - map-get($bodytype, cap-height))) / $rootsize + 0.00001)};
293 |
294 | @media screen and (min-width: nth($points, $i) / 16 * 1em ) {
295 | margin-bottom: #{$baseline-push}rem;
296 | padding-bottom: #{$baseline-shift}rem;
297 | }
298 | }
299 | }
300 |
301 | @include breakpoint(break-1) {
302 | margin-left: -1rem;
303 | }
304 | }
305 |
306 | // Horizontal rule.
307 | hr {
308 | background-image: linear-gradient(to bottom,rgba(0, 0, 0, 0) 50%,$captionColour 50%);
309 | background-position: 0 50%;
310 | background-repeat: repeat-x;
311 | background-size: 100% 0.15rem;
312 | border: 0;
313 | margin: 0;
314 | padding-bottom: 3rem;
315 | padding-top: 3rem;
316 | }
317 |
318 | // Code block.
319 | code, pre {
320 | background-color: $codeBackgroundColour;
321 | font-family: unquote(map-get($monospacetype, font-family));
322 | }
323 |
324 | pre {
325 | display: block;
326 | margin-bottom: 2rem;
327 | padding: 1rem;
328 | white-space: pre;
329 | white-space: pre-wrap;
330 | word-break: break-all;
331 | word-wrap: break-word;
332 | }
333 |
334 | code {
335 | @include fontsize(theta, all);
336 |
337 | line-height: 1rem;
338 | }
339 |
340 | // Letter space those capitals people, Jan Tschichold would be proud.
341 | .upper {
342 | font-kerning: normal;
343 | letter-spacing: 0.1rem;
344 | text-transform: uppercase;
345 | }
346 |
347 | // Real small caps.
348 | .small-caps {
349 | font-feature-settings: 'smcp', 'kern';
350 | font-kerning: normal;
351 | letter-spacing: 0.1rem;
352 | }
353 |
354 | // Consistent height numbers with OpenType.
355 | .lining-numerals {
356 | font-feature-settings: 'lnum', 'kern';
357 | }
358 |
359 | // Ascending and descending numbers with OpenType.
360 | .oldstyle-numerals {
361 | font-feature-settings: 'onum', 'kern';
362 | }
363 | }
364 |
--------------------------------------------------------------------------------
/.github/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Code of Conduct
2 |
3 | ## When Something Happens
4 |
5 | If you see a Code of Conduct violation, follow these steps:
6 |
7 | 1. Let the person know that what they did is not appropriate and ask them to stop and/or edit their message(s) or commits.
8 | 2. That person should immediately stop the behaviour and correct the issue.
9 | 3. If this doesn’t happen, or if you're uncomfortable speaking up, [contact the maintainers](#contacting-maintainers).
10 | 4. As soon as available, a maintainer will look into the issue, and take [further action (see below)](#further-enforcement), starting with a warning, then temporary block, then long-term repo or organisation ban.
11 |
12 | When reporting, please include any relevant details, links, screenshots, context, or other information that may be used to better understand and resolve the situation.
13 |
14 | **The maintainer team will prioritise the well-being and comfort of the recipients of the violation over the comfort of the violator.** See [some examples below](#enforcement-examples).
15 |
16 | ## Our Pledge
17 |
18 | In the interest of fostering an open and welcoming environment, we as contributors and maintainers of this project pledge to making participation in our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, technical preferences, nationality, personal appearance, race, religion, or sexual identity and orientation.
19 |
20 | ## Our Standards
21 |
22 | Examples of behaviour that contributes to creating a positive environment include:
23 |
24 | * Using welcoming and inclusive language.
25 | * Being respectful of differing viewpoints and experiences.
26 | * Gracefully accepting constructive feedback.
27 | * Focusing on what is best for the community.
28 | * Showing empathy and kindness towards other community members.
29 | * Encouraging and raising up your peers in the project so you can all bask in hacks and glory.
30 |
31 | Examples of unacceptable behaviour by participants include:
32 |
33 | * The use of sexualised language or imagery and unwelcome sexual attention or advances, including when simulated online. The only exception to sexual topics is channels/spaces specifically for topics of sexual identity.
34 | * Trolling, insulting/derogatory comments, and personal or political attacks.
35 | * Public or private harassment, deliberate intimidation, or threats.
36 | * Publishing others' private information, such as a physical or electronic address, without explicit permission. This includes any sort of "outing" of any aspect of someone's identity without their consent.
37 | * Publishing private screenshots or quotes of interactions in the context of this project without all quoted users' *explicit* consent.
38 | * Publishing of private communication that doesn't have to do with reporting harassment.
39 | * Any of the above even when [presented as "ironic" or "joking"](https://en.wikipedia.org/wiki/Hipster_racism).
40 | * Any attempt to present "reverse-ism" versions of the above as violations. Examples of reverse-isms are "reverse racism", "reverse sexism", "heterophobia", and "cisphobia".
41 | * Unsolicited explanations under the assumption that someone doesn't already know it. Ask before you teach! Don't assume what people's knowledge gaps are.
42 | * [Feigning or exaggerating surprise](https://www.recurse.com/manual#no-feigned-surprise) when someone admits to not knowing something.
43 | * "[Well-actuallies](https://www.recurse.com/manual#no-well-actuallys)"
44 | * Other conduct which could reasonably be considered inappropriate in a professional or community setting.
45 |
46 | ## Scope
47 |
48 | This Code of Conduct applies both within spaces involving this project and in other spaces involving community members. This includes the repository, its Pull Requests and Issue tracker, its Twitter community, private email communications in the context of the project, and any events where members of the project are participating, as well as adjacent communities and venues affecting the project's members.
49 |
50 | Depending on the violation, the maintainers may decide that violations of this code of conduct that have happened outside of the scope of the community may deem an individual unwelcome, and take appropriate action to maintain the comfort and safety of its members.
51 |
52 | ### Other Community Standards
53 |
54 | As a project on GitHub, this project is additionally covered by the [GitHub Community Guidelines](https://help.github.com/articles/github-community-guidelines/).
55 |
56 | Additionally, as a project hosted on npm, is is covered by [npm, Inc's Code of Conduct](https://www.npmjs.com/policies/conduct).
57 |
58 | Enforcement of those guidelines after violations overlapping with the above are the responsibility of the entities, and enforcement may happen in any or all of the services/communities.
59 |
60 | ## Maintainer Enforcement Process
61 |
62 | Once the maintainers get involved, they will follow a documented series of steps and do their best to preserve the well-being of project members. This section covers actual concrete steps.
63 |
64 | ### Contacting Maintainers
65 |
66 | You may get in touch with the maintainer team through any of the following methods:
67 |
68 | * Through email:
69 | * [me@daviddarnes.com](mailto:me@daviddarnes.com) (David Darnes)
70 |
71 | * Through Twitter:
72 | * [@DavidDarnes](https://twitter.com/DavidDarnes) (David Darnes)
73 |
74 | ### Further Enforcement
75 |
76 | If you've already followed the [initial enforcement steps](#enforcement), these are the steps maintainers will take for further enforcement, as needed:
77 |
78 | 1. Repeat the request to stop.
79 | 2. If the person doubles down, they will have offending messages removed or edited by a maintainers given an official warning. The PR or Issue may be locked.
80 | 3. If the behaviour continues or is repeated later, the person will be blocked from participating for 24 hours.
81 | 4. If the behaviour continues or is repeated after the temporary block, a long-term (6-12mo) ban will be used.
82 |
83 | On top of this, maintainers may remove any offending messages, images, contributions, etc, as they deem necessary.
84 |
85 | Maintainers reserve full rights to skip any of these steps, at their discretion, if the violation is considered to be a serious and/or immediate threat to the health and well-being of members of the community. These include any threats, serious physical or verbal attacks, and other such behaviour that would be completely unacceptable in any social setting that puts our members at risk.
86 |
87 | Members expelled from events or venues with any sort of paid attendance will not be refunded.
88 |
89 | ### Who Watches the Watchers?
90 |
91 | Maintainers and other leaders who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. These may include anything from removal from the maintainer team to a permanent ban from the community.
92 |
93 | Additionally, as a project hosted on both GitHub and npm, [their own Codes of Conducts may be applied against maintainers of this project](#other-community-standards), externally of this project's procedures.
94 |
95 | ### Enforcement Examples
96 |
97 | #### The Best Case
98 |
99 | The vast majority of situations work out like this. This interaction is common, and generally positive.
100 |
101 | > Alex: "Yeah I used X and it was really crazy!"
102 |
103 | > Patt (not a maintainer): "Hey, could you not use that word? What about 'ridiculous' instead?"
104 |
105 | > Alex: "oh sorry, sure." -> edits old comment to say "it was really confusing!"
106 |
107 | #### The Maintainer Case
108 |
109 | Sometimes, though, you need to get maintainers involved. Maintainers will do their best to resolve conflicts, but people who were harmed by something **will take priority**.
110 |
111 | > Patt: "Honestly, sometimes I just really hate using $library and anyone who uses it probably sucks at their job."
112 |
113 | > Alex: "Whoa there, could you dial it back a bit? There's a CoC thing about attacking folks' tech use like that."
114 |
115 | > Patt: "I'm not attacking anyone, what's your problem?"
116 |
117 | > Alex: "@maintainers hey uh. Can someone look at this issue? Patt is getting a bit aggro. I tried to nudge them about it, but nope."
118 |
119 | > KeeperOfCommitBits: (on issue) "Hey Patt, maintainer here. Could you tone it down? This sort of attack is really not okay in this space."
120 |
121 | > Patt: "Leave me alone I haven't said anything bad wtf is wrong with you."
122 |
123 | > KeeperOfCommitBits: (deletes user's comment), "@patt I mean it. Please refer to the CoC over at (URL to this CoC) if you have questions, but you can consider this an actual warning. I'd appreciate it if you reworded your messages in this thread, since they made folks there uncomfortable. Let's try and be kind, yeah?"
124 |
125 | > Patt: "@keeperofbits Okay sorry. I'm just frustrated and I'm kinda burnt out and I guess I got carried away. I'll DM Alex a note apologising and edit my messages. Sorry for the trouble."
126 |
127 | > KeeperOfCommitBits: "@patt Thanks for that. I hear you on the stress. Burnout sucks :/. Have a good one!"
128 |
129 | #### The Nope Case
130 |
131 | > PepeTheFrog🐸: "Hi, I am a literal actual nazi and I think white supremacists are quite fashionable."
132 |
133 | > Patt: "NOOOOPE. OH NOPE NOPE."
134 |
135 | > Alex: "JFC NO. NOPE. @keeperofbits NOPE NOPE LOOK HERE"
136 |
137 | > KeeperOfCommitBits: "👀 Nope. NOPE NOPE NOPE. 🔥"
138 |
139 | > PepeTheFrog🐸 has been banned from all organisation or user repositories belonging to KeeperOfCommitBits.
140 |
141 | ## Attribution
142 |
143 | This Code of Conduct was generated using [WeAllJS Code of Conduct Generator](https://npm.im/weallbehave), which is based on the [WeAllJS Code of
144 | Conduct](https://wealljs.org/code-of-conduct), which is itself based on
145 | [Contributor Covenant](http://contributor-covenant.org), version 1.4, available
146 | at
147 | [http://contributor-covenant.org/version/1/4](http://contributor-covenant.org/version/1/4),
148 | and the LGBTQ in Technology Slack [Code of
149 | Conduct](http://lgbtq.technology/coc.html).
150 |
--------------------------------------------------------------------------------
/_sass/_flex.scss:
--------------------------------------------------------------------------------
1 | // Flexbox Mixins
2 | // http://philipwalton.github.io/solved-by-flexbox/
3 | // https://github.com/philipwalton/solved-by-flexbox
4 | //
5 | // Copyright (c) 2013 Brian Franco
6 | //
7 | // Permission is hereby granted, free of charge, to any person obtaining a
8 | // copy of this software and associated documentation files (the
9 | // "Software"), to deal in the Software without restriction, including
10 | // without limitation the rights to use, copy, modify, merge, publish,
11 | // distribute, sublicense, and/or sell copies of the Software, and to
12 | // permit persons to whom the Software is furnished to do so, subject to
13 | // the following conditions:
14 | // The above copyright notice and this permission notice shall be included
15 | // in all copies or substantial portions of the Software.
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17 | // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 | // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19 | // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20 | // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21 | // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22 | // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 | //
24 | // This is a set of mixins for those who want to mess around with flexbox
25 | // using the native support of current browsers. For full support table
26 | // check: http://caniuse.com/flexbox
27 | //
28 | // Basically this will use:
29 | //
30 | // * Fallback, old syntax (IE10, mobile webkit browsers - no wrapping)
31 | // * Final standards syntax (FF, Safari, Chrome, IE11, Opera)
32 | //
33 | // This was inspired by:
34 | //
35 | // * http://dev.opera.com/articles/view/advanced-cross-browser-flexbox/
36 | //
37 | // With help from:
38 | //
39 | // * http://w3.org/tr/css3-flexbox/
40 | // * http://the-echoplex.net/flexyboxes/
41 | // * http://msdn.microsoft.com/en-us/library/ie/hh772069(v=vs.85).aspx
42 | // * http://css-tricks.com/using-flexbox/
43 | // * http://dev.opera.com/articles/view/advanced-cross-browser-flexbox/
44 | // * https://developer.mozilla.org/en-us/docs/web/guide/css/flexible_boxes
45 |
46 | //----------------------------------------------------------------------
47 |
48 | // Flexbox Containers
49 | //
50 | // The 'flex' value causes an element to generate a block-level flex
51 | // container box.
52 | //
53 | // The 'inline-flex' value causes an element to generate a inline-level
54 | // flex container box.
55 | //
56 | // display: flex | inline-flex
57 | //
58 | // http://w3.org/tr/css3-flexbox/#flex-containers
59 | //
60 | // (Placeholder selectors for each type, for those who rather @extend)
61 |
62 | @mixin flexbox {
63 | display: -webkit-box;
64 | display: -webkit-flex;
65 | display: -moz-flex;
66 | display: -ms-flexbox;
67 | display: flex;
68 | }
69 |
70 | %flexbox { @include flexbox; }
71 |
72 | //----------------------------------
73 |
74 | @mixin inline-flex {
75 | display: -webkit-inline-box;
76 | display: -webkit-inline-flex;
77 | display: -moz-inline-flex;
78 | display: -ms-inline-flexbox;
79 | display: inline-flex;
80 | }
81 |
82 | %inline-flex { @include inline-flex; }
83 |
84 | //----------------------------------------------------------------------
85 |
86 | // Flexbox Direction
87 | //
88 | // The 'flex-direction' property specifies how flex items are placed in
89 | // the flex container, by setting the direction of the flex container's
90 | // main axis. This determines the direction that flex items are laid out in.
91 | //
92 | // Values: row | row-reverse | column | column-reverse
93 | // Default: row
94 | //
95 | // http://w3.org/tr/css3-flexbox/#flex-direction-property
96 |
97 | @mixin flex-direction($value: row) {
98 | @if $value == row-reverse {
99 | -webkit-box-direction: reverse;
100 | -webkit-box-orient: horizontal;
101 | } @else if $value == column {
102 | -webkit-box-direction: normal;
103 | -webkit-box-orient: vertical;
104 | } @else if $value == column-reverse {
105 | -webkit-box-direction: reverse;
106 | -webkit-box-orient: vertical;
107 | } @else {
108 | -webkit-box-direction: normal;
109 | -webkit-box-orient: horizontal;
110 | }
111 | -webkit-flex-direction: $value;
112 | -moz-flex-direction: $value;
113 | -ms-flex-direction: $value;
114 | flex-direction: $value;
115 | }
116 | // Shorter version:
117 | @mixin flex-dir($args...) { @include flex-direction($args...); }
118 |
119 | //----------------------------------------------------------------------
120 |
121 | // Flexbox Wrap
122 | //
123 | // The 'flex-wrap' property controls whether the flex container is single-line
124 | // or multi-line, and the direction of the cross-axis, which determines
125 | // the direction new lines are stacked in.
126 | //
127 | // Values: nowrap | wrap | wrap-reverse
128 | // Default: nowrap
129 | //
130 | // http://w3.org/tr/css3-flexbox/#flex-wrap-property
131 |
132 | @mixin flex-wrap($value: nowrap) {
133 | // No Webkit Box fallback.
134 | -webkit-flex-wrap: $value;
135 | -moz-flex-wrap: $value;
136 | @if $value == nowrap {
137 | -ms-flex-wrap: none;
138 | } @else {
139 | -ms-flex-wrap: $value;
140 | }
141 | flex-wrap: $value;
142 | }
143 |
144 | //----------------------------------------------------------------------
145 |
146 | // Flexbox Flow (shorthand)
147 | //
148 | // The 'flex-flow' property is a shorthand for setting the 'flex-direction'
149 | // and 'flex-wrap' properties, which together define the flex container's
150 | // main and cross axes.
151 | //
152 | // Values: