├── src ├── saber-browser.js ├── utils │ ├── getSvg.js │ └── formatDate.js ├── layouts │ ├── page.vue │ ├── post.vue │ └── default.vue ├── components │ ├── Disqus.vue │ ├── Footer.vue │ ├── Header.vue │ ├── Wrap.vue │ └── Social.vue ├── styles │ ├── minima.scss │ ├── _base.scss │ └── _layout.scss └── svg │ └── minima-social-icons.svg ├── .gitignore ├── .prettierrc ├── example ├── pages │ ├── index.md │ ├── about.md │ └── _posts │ │ ├── super-short-article.md │ │ ├── my-example-post.md │ │ └── super-long-article.md └── saber-config.yml ├── .circleci └── config.yml ├── package.json └── README.md /src/saber-browser.js: -------------------------------------------------------------------------------- 1 | import './styles/minima.scss' 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .saber 3 | dist 4 | *.log 5 | .DS_Store -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": false, 3 | "singleQuote": true 4 | } -------------------------------------------------------------------------------- /src/utils/getSvg.js: -------------------------------------------------------------------------------- 1 | import svg from '../svg/minima-social-icons.svg' 2 | 3 | export default id => `${svg}#${id}` -------------------------------------------------------------------------------- /example/pages/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | # Inject post list as `page.posts` (by saber-plugin-query-posts) 4 | injectAllPosts: true 5 | --- 6 | -------------------------------------------------------------------------------- /src/utils/formatDate.js: -------------------------------------------------------------------------------- 1 | import tinydate from 'tinydate' 2 | 3 | const format = tinydate('{YYYY}-{MM}-{DD}') 4 | 5 | export default date => { 6 | return (date instanceof Date) ? format(date) : format(new Date(date)) 7 | } -------------------------------------------------------------------------------- /example/pages/about.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: About 3 | layout: page 4 | --- 5 | 6 | This is the Saber port of the base Jekyll theme. Check out the [GitHub project](https://github.com/egoist/saber-theme-minima) for detailed usages. 7 | 8 | You can find out more info about customizing your theme, as well as basic Saber usage documentation at https://saberjs.org -------------------------------------------------------------------------------- /src/layouts/page.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 26 | -------------------------------------------------------------------------------- /example/pages/_posts/super-short-article.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Some articles are just so short that we have to make the footer stick' 3 | date: 2016-05-19 4 | layout: post 5 | --- 6 | 7 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 8 | -------------------------------------------------------------------------------- /example/pages/_posts/my-example-post.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: My Example Post 3 | date: 2016-05-20 4 | layout: post 5 | --- 6 | 7 | Eos eu docendi tractatos sapientem, brute option menandri in vix, quando vivendo accommodare te ius. Nec melius fastidii constituam id, viderer theophrastus ad sit, hinc semper periculis cum id. Noluisse postulant assentior est in, no choro sadipscing repudiandae vix. Vis in euismod delenit dignissim. Ex quod nostrum sit, suas decore animal id ius, nobis solet detracto quo te. 8 | 9 | No laudem altera adolescens has, volumus lucilius eum no. Eam ei nulla audiam efficiantur. Suas affert per no, ei tale nibh sea. Sea ne magna harum, in denique scriptorem sea, cetero alienum tibique ei eos. Labores persequeris referrentur eos ei. -------------------------------------------------------------------------------- /example/saber-config.yml: -------------------------------------------------------------------------------- 1 | theme: ../src 2 | 3 | siteConfig: 4 | url: https://minima.saberjs.org 5 | author: Author of This Site 6 | email: author@your-domain.com 7 | description: Write an awesome description for your new site here. You can edit this line in saber-config.yml. It will appear in your document head meta (for Google search results) site description. 8 | 9 | themeConfig: 10 | nav: 11 | - text: Home 12 | link: / 13 | - text: About 14 | link: /about.html 15 | social: 16 | twitter: _saberjs 17 | github: egoist 18 | rss: true 19 | disqus: saber-minima 20 | 21 | plugins: 22 | - resolve: saber-plugin-query-posts 23 | - resolve: saber-plugin-feed 24 | options: 25 | atomFeed: true -------------------------------------------------------------------------------- /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | jobs: 3 | build: 4 | docker: 5 | - image: circleci/node:latest 6 | branches: 7 | ignore: 8 | - gh-pages # list of branches to ignore 9 | - /release\/.*/ # or ignore regexes 10 | steps: 11 | - checkout 12 | - restore_cache: 13 | key: dependency-cache-{{ checksum "yarn.lock" }} 14 | - run: 15 | name: install dependences 16 | command: yarn 17 | - save_cache: 18 | key: dependency-cache-{{ checksum "yarn.lock" }} 19 | paths: 20 | - ./node_modules 21 | - run: 22 | name: test 23 | command: echo lol 24 | - run: 25 | name: release 26 | command: npx semantic-release -------------------------------------------------------------------------------- /src/components/Disqus.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 38 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "saber-theme-minima", 3 | "version": "1.0.1", 4 | "license": "MIT", 5 | "files": [ 6 | "dist" 7 | ], 8 | "scripts": { 9 | "build": "vue-compile src -o dist", 10 | "prepublishOnly": "yarn build", 11 | "dev:example": "saber example", 12 | "build:example": "saber build example" 13 | }, 14 | "repository": { 15 | "type": "git", 16 | "url": "https://github.com/saberland/saber-theme-minima.git" 17 | }, 18 | "devDependencies": { 19 | "saber": "^0.10.4", 20 | "saber-plugin-feed": "^0.4.2", 21 | "saber-plugin-query-posts": "^0.4.4", 22 | "sass": "^1.22.12", 23 | "sass-loader": "^8.0.0", 24 | "vue-compile": "^0.6.0" 25 | }, 26 | "dependencies": { 27 | "tinydate": "^1.2.0" 28 | }, 29 | "peerDependencies": { 30 | "saber": "^0.10.4", 31 | "saber-plugin-feed": "^0.4.2", 32 | "saber-plugin-query-posts": "^0.4.4" 33 | }, 34 | "keywords": [ 35 | "saber", 36 | "saber-theme", 37 | "minima", 38 | "theme", 39 | "egoist", 40 | "clean", 41 | "simple", 42 | "jekyll" 43 | ] 44 | } 45 | -------------------------------------------------------------------------------- /src/components/Footer.vue: -------------------------------------------------------------------------------- 1 | 26 | 27 | 43 | -------------------------------------------------------------------------------- /src/layouts/post.vue: -------------------------------------------------------------------------------- 1 | 30 | 31 | 49 | -------------------------------------------------------------------------------- /src/components/Header.vue: -------------------------------------------------------------------------------- 1 | 30 | 31 | 41 | -------------------------------------------------------------------------------- /src/styles/minima.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | // Define defaults for each variable. 4 | 5 | $base-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol" !default; 6 | $base-font-size: 16px !default; 7 | $base-font-weight: 400 !default; 8 | $small-font-size: $base-font-size * 0.875 !default; 9 | $base-line-height: 1.5 !default; 10 | 11 | $spacing-unit: 30px !default; 12 | 13 | $text-color: #111 !default; 14 | $background-color: #fdfdfd !default; 15 | $brand-color: #2a7ae2 !default; 16 | 17 | $grey-color: #828282 !default; 18 | $grey-color-light: lighten($grey-color, 40%) !default; 19 | $grey-color-dark: darken($grey-color, 25%) !default; 20 | $orange-color: #f66a0a !default; 21 | $table-text-align: left !default; 22 | 23 | // Width of the content area 24 | $content-width: 800px !default; 25 | 26 | $on-palm: 600px !default; 27 | $on-laptop: 800px !default; 28 | 29 | $on-medium: $on-palm !default; 30 | $on-large: $on-laptop !default; 31 | 32 | // Use media queries like this: 33 | // @include media-query($on-palm) { 34 | // .wrapper { 35 | // padding-right: $spacing-unit / 2; 36 | // padding-left: $spacing-unit / 2; 37 | // } 38 | // } 39 | // Notice the following mixin uses max-width, in a deprecated, desktop-first 40 | // approach, whereas media queries used elsewhere now use min-width. 41 | @mixin media-query($device) { 42 | @media screen and (max-width: $device) { 43 | @content; 44 | } 45 | } 46 | 47 | @mixin relative-font-size($ratio) { 48 | font-size: $base-font-size * $ratio; 49 | } 50 | 51 | // Import partials. 52 | @import 53 | "base", 54 | "layout" 55 | ; -------------------------------------------------------------------------------- /src/components/Wrap.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 69 | -------------------------------------------------------------------------------- /src/layouts/default.vue: -------------------------------------------------------------------------------- 1 | 50 | 51 | 75 | -------------------------------------------------------------------------------- /example/pages/_posts/super-long-article.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Some articles are just so long they deserve a really long title to see if things will break well 3 | layout: post 4 | date: 2016-05-18 5 | --- 6 | 7 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce bibendum neque eget nunc mattis eu sollicitudin enim tincidunt. Vestibulum lacus tortor, ultricies id dignissim ac, bibendum in velit. Proin convallis mi ac felis pharetra aliquam. Curabitur dignissim accumsan rutrum. In arcu magna, aliquet vel pretium et, molestie et arcu. Mauris lobortis nulla et felis ullamcorper bibendum. Phasellus et hendrerit mauris. Proin eget nibh a massa vestibulum pretium. Suspendisse eu nisl a ante aliquet bibendum quis a nunc. Praesent varius interdum vehicula. Aenean risus libero, placerat at vestibulum eget, ultricies eu enim. Praesent nulla tortor, malesuada adipiscing adipiscing sollicitudin, adipiscing eget est. 8 | 9 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce bibendum neque eget nunc mattis eu sollicitudin enim tincidunt. Vestibulum lacus tortor, ultricies id dignissim ac, bibendum in velit. Proin convallis mi ac felis pharetra aliquam. Curabitur dignissim accumsan rutrum. In arcu magna, aliquet vel pretium et, molestie et arcu. Mauris lobortis nulla et felis ullamcorper bibendum. Phasellus et hendrerit mauris. Proin eget nibh a massa vestibulum pretium. Suspendisse eu nisl a ante aliquet bibendum quis a nunc. Praesent varius interdum vehicula. Aenean risus libero, placerat at vestibulum eget, ultricies eu enim. Praesent nulla tortor, malesuada adipiscing adipiscing sollicitudin, adipiscing eget est. 10 | 11 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce bibendum neque eget nunc mattis eu sollicitudin enim tincidunt. Vestibulum lacus tortor, ultricies id dignissim ac, bibendum in velit. Proin convallis mi ac felis pharetra aliquam. Curabitur dignissim accumsan rutrum. In arcu magna, aliquet vel pretium et, molestie et arcu. Mauris lobortis nulla et felis ullamcorper bibendum. Phasellus et hendrerit mauris. Proin eget nibh a massa vestibulum pretium. Suspendisse eu nisl a ante aliquet bibendum quis a nunc. Praesent varius interdum vehicula. Aenean risus libero, placerat at vestibulum eget, ultricies eu enim. Praesent nulla tortor, malesuada adipiscing adipiscing sollicitudin, adipiscing eget est. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # saber-theme-minima 2 | 3 | [![npm](https://badgen.net/npm/v/saber-theme-minima)](https://npm.im/saber-theme-minima) [![circleci](https://badgen.net/circleci/github/saberland/saber-theme-minima/master)](https://circleci.com/gh/saberland/saber-theme-minima) 4 | 5 | > A Saber Port of the Default Jekyll Theme: Minima 6 | 7 | ## Install 8 | 9 | ```bash 10 | yarn add saber-theme-minima 11 | ``` 12 | 13 | In your `saber-config.yml`: 14 | 15 | ```yml 16 | theme: minima 17 | ``` 18 | 19 | This theme uses the following [Saber plugins](https://github.com/saberland/awesome-saber#plugins): 20 | 21 | - `saber-plugin-query-posts`: Inject `posts` to homepage's `page` prop, generate tag pages. 22 | - `saber-plugin-feed`: Generate RSS feed. 23 | 24 | ```bash 25 | yarn add saber-plugin-query-posts saber-plugin-feed 26 | ``` 27 | 28 | ```yml 29 | plugins: 30 | - resolve: saber-plugin-query-posts 31 | - resolve: saber-plugin-feed 32 | options: 33 | atomFeed: true 34 | ``` 35 | 36 | ## Layouts 37 | 38 | - `post`: For blog post pages. 39 | - `page`: For normal pages. 40 | - `default`: For any other pages like homepage and tag pages. 41 | 42 | ## Site Config 43 | 44 | Configure site title, description etc. in your `saber-config.yml`: 45 | 46 | ```yml 47 | siteConfig: 48 | title: My Site 49 | description: About this website.. 50 | author: My Name 51 | email: my@email.com 52 | ``` 53 | 54 | ## Theme Config 55 | 56 | ### Navbar 57 | 58 | Configure `nav` to show a set of links in header: 59 | 60 | ```yml 61 | themeConfig: 62 | nav: 63 | - text: Home 64 | link: / 65 | - text: About 66 | link: /about.html 67 | ``` 68 | 69 | ### Social 70 | 71 | Configure the accounts of your social network to show at the bottom of homepage: 72 | 73 | ```yml 74 | themeConfig: 75 | social: 76 | dribbble: username 77 | facebook: username 78 | flickr: username 79 | github: username 80 | instagram: username 81 | linkedin: username 82 | pinterest: username 83 | twitter: username 84 | youtube: username 85 | telegram: username 86 | microdotblog: username 87 | googleplus: username 88 | rss: true 89 | ``` 90 | 91 | ### Comments 92 | 93 | You can use Disqus for comments: 94 | 95 | ```yml 96 | themeConfig: 97 | disqus: disqus-short-name 98 | 99 | # Note that `siteConfig.url` is required for Disqus 100 | siteConfig: 101 | url: https://example.com 102 | ``` 103 | 104 | Comments are only enabled for `post` layout, to disable comments in specific page, you can use the page attribute `comments`: 105 | 106 | ```markdown 107 | --- 108 | title: Hello 109 | layout: post 110 | date: 2018-08-12 111 | comments: false 112 | --- 113 | 114 | Hello World! 115 | ``` 116 | 117 | ## License 118 | 119 | MIT. 120 | -------------------------------------------------------------------------------- /src/components/Social.vue: -------------------------------------------------------------------------------- 1 | 96 | 97 | 116 | 117 | -------------------------------------------------------------------------------- /src/styles/_base.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Reset some basic elements 3 | */ 4 | body, h1, h2, h3, h4, h5, h6, 5 | p, blockquote, pre, hr, 6 | dl, dd, ol, ul, figure { 7 | margin: 0; 8 | padding: 0; 9 | 10 | } 11 | 12 | 13 | 14 | /** 15 | * Basic styling 16 | */ 17 | body { 18 | font: $base-font-weight #{$base-font-size}/#{$base-line-height} $base-font-family; 19 | color: $text-color; 20 | background-color: $background-color; 21 | -webkit-text-size-adjust: 100%; 22 | -webkit-font-feature-settings: "kern" 1; 23 | -moz-font-feature-settings: "kern" 1; 24 | -o-font-feature-settings: "kern" 1; 25 | font-feature-settings: "kern" 1; 26 | font-kerning: normal; 27 | display: flex; 28 | min-height: 100vh; 29 | flex-direction: column; 30 | } 31 | 32 | 33 | 34 | /** 35 | * Set `margin-bottom` to maintain vertical rhythm 36 | */ 37 | h1, h2, h3, h4, h5, h6, 38 | p, blockquote, pre, 39 | ul, ol, dl, figure, 40 | %vertical-rhythm { 41 | margin-bottom: $spacing-unit / 2; 42 | } 43 | 44 | 45 | 46 | /** 47 | * `main` element 48 | */ 49 | main { 50 | display: block; /* Default value of `display` of `main` element is 'inline' in IE 11. */ 51 | } 52 | 53 | 54 | 55 | /** 56 | * Images 57 | */ 58 | img { 59 | max-width: 100%; 60 | vertical-align: middle; 61 | } 62 | 63 | 64 | 65 | /** 66 | * Figures 67 | */ 68 | figure > img { 69 | display: block; 70 | } 71 | 72 | figcaption { 73 | font-size: $small-font-size; 74 | } 75 | 76 | 77 | 78 | /** 79 | * Lists 80 | */ 81 | ul, ol { 82 | margin-left: $spacing-unit; 83 | } 84 | 85 | li { 86 | > ul, 87 | > ol { 88 | margin-bottom: 0; 89 | } 90 | } 91 | 92 | 93 | 94 | /** 95 | * Headings 96 | */ 97 | h1, h2, h3, h4, h5, h6 { 98 | font-weight: $base-font-weight; 99 | } 100 | 101 | 102 | 103 | /** 104 | * Links 105 | */ 106 | a { 107 | color: $brand-color; 108 | text-decoration: none; 109 | 110 | &:visited { 111 | color: darken($brand-color, 15%); 112 | } 113 | 114 | &:hover { 115 | color: $text-color; 116 | text-decoration: underline; 117 | } 118 | 119 | .social-media-list &:hover { 120 | text-decoration: none; 121 | 122 | .username { 123 | text-decoration: underline; 124 | } 125 | } 126 | } 127 | 128 | 129 | /** 130 | * Blockquotes 131 | */ 132 | blockquote { 133 | color: $grey-color; 134 | border-left: 4px solid $grey-color-light; 135 | padding-left: $spacing-unit / 2; 136 | @include relative-font-size(1.125); 137 | letter-spacing: -1px; 138 | font-style: italic; 139 | 140 | > :last-child { 141 | margin-bottom: 0; 142 | } 143 | } 144 | 145 | 146 | 147 | /** 148 | * Code formatting 149 | */ 150 | pre, 151 | code { 152 | @include relative-font-size(0.9375); 153 | border: 1px solid $grey-color-light; 154 | border-radius: 3px; 155 | background-color: #eef; 156 | } 157 | 158 | code { 159 | padding: 1px 5px; 160 | } 161 | 162 | pre { 163 | padding: 8px 12px; 164 | overflow-x: auto; 165 | 166 | > code { 167 | border: 0; 168 | padding-right: 0; 169 | padding-left: 0; 170 | } 171 | } 172 | 173 | 174 | 175 | /** 176 | * Wrapper 177 | */ 178 | .wrapper { 179 | max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit})); 180 | max-width: calc(#{$content-width} - (#{$spacing-unit})); 181 | margin-right: auto; 182 | margin-left: auto; 183 | padding-right: $spacing-unit / 2; 184 | padding-left: $spacing-unit / 2; 185 | @extend %clearfix; 186 | 187 | @media screen and (min-width: $on-large) { 188 | max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit} * 2)); 189 | max-width: calc(#{$content-width} - (#{$spacing-unit} * 2)); 190 | padding-right: $spacing-unit; 191 | padding-left: $spacing-unit; 192 | } 193 | } 194 | 195 | 196 | 197 | /** 198 | * Clearfix 199 | */ 200 | %clearfix:after { 201 | content: ""; 202 | display: table; 203 | clear: both; 204 | } 205 | 206 | 207 | 208 | /** 209 | * Icons 210 | */ 211 | 212 | .orange { 213 | color: $orange-color; 214 | } 215 | 216 | .grey { 217 | color: $grey-color; 218 | } 219 | 220 | .svg-icon { 221 | width: 16px; 222 | height: 16px; 223 | display: inline-block; 224 | fill: currentColor; 225 | padding: 5px 3px 2px 5px; 226 | vertical-align: text-bottom; 227 | } 228 | 229 | 230 | /** 231 | * Tables 232 | */ 233 | table { 234 | margin-bottom: $spacing-unit; 235 | width: 100%; 236 | text-align: $table-text-align; 237 | color: lighten($text-color, 18%); 238 | border-collapse: collapse; 239 | border: 1px solid $grey-color-light; 240 | tr { 241 | &:nth-child(even) { 242 | background-color: lighten($grey-color-light, 6%); 243 | } 244 | } 245 | th, td { 246 | padding: ($spacing-unit / 3) ($spacing-unit / 2); 247 | } 248 | th { 249 | background-color: lighten($grey-color-light, 3%); 250 | border: 1px solid darken($grey-color-light, 4%); 251 | border-bottom-color: darken($grey-color-light, 12%); 252 | } 253 | td { 254 | border: 1px solid $grey-color-light; 255 | } 256 | } -------------------------------------------------------------------------------- /src/styles/_layout.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Site header 3 | */ 4 | .site-header { 5 | border-top: 5px solid $grey-color-dark; 6 | border-bottom: 1px solid $grey-color-light; 7 | min-height: $spacing-unit * 1.865; 8 | line-height: $base-line-height * $base-font-size * 2.25; 9 | 10 | // Positioning context for the mobile navigation icon 11 | position: relative; 12 | } 13 | 14 | .site-title { 15 | @include relative-font-size(1.625); 16 | font-weight: 300; 17 | letter-spacing: -1px; 18 | margin-bottom: 0; 19 | float: left; 20 | 21 | @include media-query($on-palm) { 22 | padding-right: 45px; 23 | } 24 | 25 | &, 26 | &:visited { 27 | color: $grey-color-dark; 28 | } 29 | } 30 | 31 | .site-nav { 32 | position: absolute; 33 | top: 9px; 34 | right: $spacing-unit / 2; 35 | background-color: $background-color; 36 | border: 1px solid $grey-color-light; 37 | border-radius: 5px; 38 | text-align: right; 39 | 40 | .nav-trigger { 41 | display: none; 42 | } 43 | 44 | .menu-icon { 45 | float: right; 46 | width: 36px; 47 | height: 26px; 48 | line-height: 0; 49 | padding-top: 10px; 50 | text-align: center; 51 | 52 | > svg path { 53 | fill: $grey-color-dark; 54 | } 55 | } 56 | 57 | label[for="nav-trigger"] { 58 | display: block; 59 | float: right; 60 | width: 36px; 61 | height: 36px; 62 | z-index: 2; 63 | cursor: pointer; 64 | } 65 | 66 | input ~ .trigger { 67 | clear: both; 68 | display: none; 69 | } 70 | 71 | input:checked ~ .trigger { 72 | display: block; 73 | padding-bottom: 5px; 74 | } 75 | 76 | .page-link { 77 | color: $text-color; 78 | line-height: $base-line-height; 79 | display: block; 80 | padding: 5px 10px; 81 | 82 | // Gaps between nav items, but not on the last one 83 | &:not(:last-child) { 84 | margin-right: 0; 85 | } 86 | margin-left: 20px; 87 | } 88 | 89 | @media screen and (min-width: $on-medium) { 90 | position: static; 91 | float: right; 92 | border: none; 93 | background-color: inherit; 94 | 95 | label[for="nav-trigger"] { 96 | display: none; 97 | } 98 | 99 | .menu-icon { 100 | display: none; 101 | } 102 | 103 | input ~ .trigger { 104 | display: block; 105 | } 106 | 107 | .page-link { 108 | display: inline; 109 | padding: 0; 110 | 111 | &:not(:last-child) { 112 | margin-right: 20px; 113 | } 114 | margin-left: auto; 115 | } 116 | } 117 | } 118 | 119 | /** 120 | * pagination 121 | */ 122 | .pagination { 123 | margin-bottom: 25px; 124 | font-size: .875rem; 125 | 126 | .next-link, .prev-link { 127 | border: 1px solid $grey-color-light; 128 | padding: 5px 10px; 129 | color: $text-color; 130 | } 131 | } 132 | 133 | 134 | /** 135 | * Site footer 136 | */ 137 | .site-footer { 138 | border-top: 1px solid $grey-color-light; 139 | padding: $spacing-unit 0; 140 | } 141 | 142 | .footer-heading { 143 | @include relative-font-size(1.125); 144 | margin-bottom: $spacing-unit / 2; 145 | } 146 | 147 | .contact-list, 148 | .social-media-list { 149 | list-style: none; 150 | margin-left: 0; 151 | } 152 | 153 | .footer-col-wrapper { 154 | @include relative-font-size(0.9375); 155 | color: $grey-color; 156 | margin-left: -$spacing-unit / 2; 157 | @extend %clearfix; 158 | } 159 | 160 | .footer-col { 161 | width: -webkit-calc(100% - (#{$spacing-unit} / 2)); 162 | width: calc(100% - (#{$spacing-unit} / 2)); 163 | margin-bottom: $spacing-unit / 2; 164 | padding-left: $spacing-unit / 2; 165 | } 166 | 167 | .footer-col-1, 168 | .footer-col-2 { 169 | width: -webkit-calc(50% - (#{$spacing-unit} / 2)); 170 | width: calc(50% - (#{$spacing-unit} / 2)); 171 | } 172 | 173 | .footer-col-3 { 174 | width: -webkit-calc(100% - (#{$spacing-unit} / 2)); 175 | width: calc(100% - (#{$spacing-unit} / 2)); 176 | } 177 | 178 | @media screen and (min-width: $on-large) { 179 | .footer-col-1 { 180 | width: -webkit-calc(35% - (#{$spacing-unit} / 2)); 181 | width: calc(35% - (#{$spacing-unit} / 2)); 182 | } 183 | 184 | .footer-col-2 { 185 | width: -webkit-calc(20% - (#{$spacing-unit} / 2)); 186 | width: calc(20% - (#{$spacing-unit} / 2)); 187 | } 188 | 189 | .footer-col-3 { 190 | width: -webkit-calc(45% - (#{$spacing-unit} / 2)); 191 | width: calc(45% - (#{$spacing-unit} / 2)); 192 | } 193 | } 194 | 195 | @media screen and (min-width: $on-medium) { 196 | .footer-col { 197 | float: left; 198 | } 199 | } 200 | 201 | 202 | 203 | /** 204 | * Page content 205 | */ 206 | .page-content { 207 | padding: $spacing-unit 0; 208 | flex: 1 0 auto; 209 | } 210 | 211 | .page-heading { 212 | @include relative-font-size(2); 213 | } 214 | 215 | .post-list-heading { 216 | @include relative-font-size(1.75); 217 | } 218 | 219 | .post-list { 220 | margin-left: 0; 221 | list-style: none; 222 | 223 | > li { 224 | margin-bottom: $spacing-unit; 225 | } 226 | } 227 | 228 | .post-meta { 229 | font-size: $small-font-size; 230 | color: $grey-color; 231 | } 232 | 233 | .post-link { 234 | display: block; 235 | @include relative-font-size(1.5); 236 | } 237 | 238 | 239 | 240 | /** 241 | * Posts 242 | */ 243 | .post-header { 244 | margin-bottom: $spacing-unit; 245 | } 246 | 247 | .post-title, 248 | .post-content h1 { 249 | @include relative-font-size(2.625); 250 | letter-spacing: -1px; 251 | line-height: 1; 252 | 253 | @media screen and (min-width: $on-large) { 254 | @include relative-font-size(2.625); 255 | } 256 | } 257 | 258 | .post-content { 259 | margin-bottom: $spacing-unit; 260 | 261 | h2 { 262 | @include relative-font-size(1.75); 263 | 264 | @media screen and (min-width: $on-large) { 265 | @include relative-font-size(2); 266 | } 267 | } 268 | 269 | h3 { 270 | @include relative-font-size(1.375); 271 | 272 | @media screen and (min-width: $on-large) { 273 | @include relative-font-size(1.625); 274 | } 275 | } 276 | 277 | h4 { 278 | @include relative-font-size(1.125); 279 | 280 | @media screen and (min-width: $on-large) { 281 | @include relative-font-size(1.25); 282 | } 283 | } 284 | } 285 | 286 | 287 | .social-media-list { 288 | display: table; 289 | margin: 0 auto; 290 | li { 291 | float: left; 292 | margin: 0 5px; 293 | &:first-of-type { margin-left: 0 } 294 | &:last-of-type { margin-right: 0 } 295 | a { 296 | display: block; 297 | padding: $spacing-unit / 4; 298 | border: 1px solid $grey-color-light 299 | } 300 | &:hover .svg-icon { fill: currentColor; } 301 | } 302 | } 303 | 304 | 305 | /** 306 | * Grid helpers 307 | */ 308 | .one-half { 309 | width: -webkit-calc(50% - (#{$spacing-unit} / 2)); 310 | width: calc(50% - (#{$spacing-unit} / 2)); 311 | } -------------------------------------------------------------------------------- /src/svg/minima-social-icons.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | --------------------------------------------------------------------------------