├── .editorconfig ├── .github └── FUNDING.yml ├── .gitignore ├── .vscode └── launch.json ├── README.md ├── blog ├── .vuepress │ ├── config.js │ ├── data │ │ └── config.json │ ├── public │ │ └── images │ │ │ ├── cover.jpg │ │ │ ├── logo.png │ │ │ └── welcome.jpg │ └── theme │ │ ├── Layout.vue │ │ ├── NotFound.vue │ │ ├── enhanceApp.js │ │ ├── index.js │ │ ├── layouts │ │ ├── Page.vue │ │ ├── Post.vue │ │ └── Posts.vue │ │ ├── partials │ │ ├── Card.vue │ │ ├── Error.vue │ │ ├── Footer.vue │ │ ├── Header.vue │ │ ├── Navigation.vue │ │ └── SocialLink.vue │ │ ├── store │ │ ├── actions.js │ │ ├── getters.js │ │ ├── index.js │ │ ├── mutations.js │ │ ├── state.js │ │ ├── types.js │ │ └── utils.js │ │ └── styles │ │ ├── global.css │ │ └── screen.css ├── about.md ├── index.md ├── media.md └── posts │ ├── dexter │ ├── i-am-the-doctor.md │ ├── nobodys-taxi-service.md │ └── really-brilliant-ideas.md │ └── futurama │ ├── and-then-we-woke-up.md │ ├── bender-cooking.md │ ├── good-news-everybody.md │ ├── leela-is-gonna-kill-me.md │ └── when-will-that-be.md ├── package-lock.json ├── package.json ├── scripts └── gh-pages.sh └── stackbit.yaml /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | ko_fi: alexanderheimbuch 2 | custom: https://www.amazon.de/hz/wishlist/ls/237T6KS5438PE 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dist/ 3 | publish/ 4 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "type": "chrome", 9 | "request": "launch", 10 | "name": "Launch Chrome against localhost", 11 | "url": "http://localhost:8080", 12 | "webRoot": "${workspaceFolder}" 13 | } 14 | ] 15 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Casper Theme 2 | 3 | Ghosts default theme [Casper](https://github.com/TryGhost/Casper) for Vuepress. 4 | 5 | ## Create with Stackbit 6 | 7 | [![Create with Stackbit](https://assets.stackbit.com/badge/create-with-stackbit.svg)](https://app.stackbit.com/create?theme=https://github.com/alexander-heimbuch/vuepress-theme-casper) 8 | 9 | ## Installation 10 | 11 | Install the npm package: 12 | 13 | ```bash 14 | $ npm i vuepress-theme-casper --save 15 | ``` 16 | 17 | Adapt your vuepress config `config.js`: 18 | 19 | ```js 20 | module.exports = { 21 | title: "Theme Title", 22 | description: "Theme description", 23 | base: "/", 24 | theme: "casper", 25 | head: [["link", { rel: "icon", href: "/favicon.png" }]], 26 | markdown: { 27 | anchor: { 28 | permalink: false, 29 | permalinkBefore: false 30 | } 31 | }, 32 | themeConfig: { 33 | cover: "/images/cover.jpg", 34 | logo: "/images/logo.png", 35 | nav: [ 36 | { 37 | text: "Home", 38 | link: "/" 39 | }, 40 | { 41 | text: "Posts", 42 | link: "/posts" 43 | }, 44 | { 45 | text: "Category", 46 | link: "/category/some-category" 47 | }, 48 | { 49 | text: "Page", 50 | link: "/a-page.html" 51 | } 52 | ], 53 | 54 | footer: [ 55 | { 56 | text: "Latest Posts", 57 | link: "/posts" 58 | }, 59 | { 60 | text: "Facebook", 61 | link: "https://facebook.com/" 62 | }, 63 | { 64 | text: "Twitter", 65 | link: "https://twitter.com" 66 | }, 67 | { 68 | text: "Github", 69 | link: "https://github.com/" 70 | } 71 | ], 72 | social: { 73 | github: "https://github.com", 74 | twitter: "https://twitter.com", 75 | facebook: "https://facebook.com", 76 | xing: "https://xing.de", 77 | instagram: "https://instagram.com", 78 | linkedin: "https://linkedin.com" 79 | }, 80 | defaultAuthor: { 81 | link: "https://alexander.heimbu.ch", 82 | name: "Default Author", 83 | gravatar: "2bfa103a13c88b5ffd26da6f982f11df" 84 | }, 85 | search: false 86 | } 87 | }; 88 | ``` 89 | 90 | ## Page/Post Parameters 91 | 92 | The following parameters are available: 93 | 94 | ``` 95 | --- 96 | title: And when we woke up, we had these bodies. 97 | image: https://picsum.photos/1920/1080/?random&date=2018-04-15 98 | publish: 2018-04-15 99 | type: post|page 100 | tags: 101 | - toe-tappingly tragic 102 | - thanks to the Internet 103 | categories: 104 | - futurama 105 | - dexter 106 | readingTime: 10 Minutes 107 | author: 108 | link: /category/dexter 109 | name: Dexter 110 | gravatar: 2bfa103a13c88b5ffd26da6f982f11df 111 | --- 112 | ``` 113 | 114 | The post intro uses the `` tag. 115 | 116 | ## Caveats 117 | -------------------------------------------------------------------------------- /blog/.vuepress/config.js: -------------------------------------------------------------------------------- 1 | const config = require('./data/config.json'); 2 | const base = process.env.BASE ? { base: process.env.BASE } : {} 3 | 4 | module.exports = Object.assign(config, base, { 5 | head: [ 6 | ['link', { rel: 'icon', href: '/favicon.png' }] 7 | ], 8 | markdown: { 9 | anchor: { 10 | permalink: false, 11 | permalinkBefore: false 12 | } 13 | } 14 | }); 15 | -------------------------------------------------------------------------------- /blog/.vuepress/data/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "Casper Theme", 3 | "description": "Ghosts default theme for Vuepress", 4 | "base": "/", 5 | "themeConfig": { 6 | "cover": "/images/cover.jpg", 7 | "logo": "/images/logo.png", 8 | "nav": [ 9 | { 10 | "text": "Home", 11 | "link": "/" 12 | }, 13 | { 14 | "text": "Posts", 15 | "link": "/posts" 16 | }, 17 | { 18 | "text": "Futurama", 19 | "link": "/category/futurama" 20 | }, 21 | { 22 | "text": "Dexter", 23 | "link": "/category/dexter" 24 | }, 25 | { 26 | "text": "Media", 27 | "link": "/media.html" 28 | }, 29 | { 30 | "text": "About", 31 | "link": "/about.html" 32 | } 33 | ], 34 | "footer": [ 35 | { 36 | "text": "Latest Posts", 37 | "link": "/posts" 38 | }, 39 | { 40 | "text": "Facebook", 41 | "link": "https://facebook.com/" 42 | }, 43 | { 44 | "text": "Twitter", 45 | "link": "https://twitter.com" 46 | }, 47 | { 48 | "text": "Github", 49 | "link": "https://github.com/vuepress-theme-casper" 50 | } 51 | ], 52 | "social": { 53 | "github": "https://github.com/alexander-heimbuch/vuepress-theme-casper", 54 | "twitter": "https://twitter.com/zusatzstoff" 55 | }, 56 | "defaultAuthor": { 57 | "link": "https://alexander.heimbu.ch", 58 | "name": "Default Author", 59 | "gravatar": "2bfa103a13c88b5ffd26da6f982f11df" 60 | }, 61 | "search": true 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /blog/.vuepress/public/images/cover.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexander-heimbuch/vuepress-theme-casper/e2f02b4b1c8c6d3573dba9a2680ad411bd5d3012/blog/.vuepress/public/images/cover.jpg -------------------------------------------------------------------------------- /blog/.vuepress/public/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexander-heimbuch/vuepress-theme-casper/e2f02b4b1c8c6d3573dba9a2680ad411bd5d3012/blog/.vuepress/public/images/logo.png -------------------------------------------------------------------------------- /blog/.vuepress/public/images/welcome.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexander-heimbuch/vuepress-theme-casper/e2f02b4b1c8c6d3573dba9a2680ad411bd5d3012/blog/.vuepress/public/images/welcome.jpg -------------------------------------------------------------------------------- /blog/.vuepress/theme/Layout.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 66 | 67 | 83 | -------------------------------------------------------------------------------- /blog/.vuepress/theme/NotFound.vue: -------------------------------------------------------------------------------- 1 | 27 | 28 | 73 | 74 | 78 | -------------------------------------------------------------------------------- /blog/.vuepress/theme/enhanceApp.js: -------------------------------------------------------------------------------- 1 | import Vuex from 'vuex' 2 | import { sync } from 'vuex-router-sync' 3 | 4 | import createStore from './store' 5 | import types from './store/types' 6 | 7 | import Layout from './Layout' 8 | 9 | export default ({ 10 | Vue, 11 | options, 12 | router 13 | }) => { 14 | Vue.use(Vuex) 15 | 16 | const store = createStore() 17 | sync(store, router) 18 | 19 | router.addRoutes([ 20 | { path: '/category/:category?', component: Layout }, 21 | { path: '/posts/', component: Layout }, 22 | { path: '/tags/:tag?', component: Layout } 23 | ]) 24 | 25 | router.beforeResolve((to, from, next) => { 26 | // If this isn't an initial page load. 27 | if (to.name) { 28 | // Start the route progress bar. 29 | store.commit(types.LOAD_START) 30 | } 31 | 32 | next() 33 | }) 34 | 35 | router.afterEach(() => { 36 | // Complete the animation of the route progress bar. 37 | store.commit(types.LOAD_END) 38 | }) 39 | 40 | options.store = store 41 | } 42 | -------------------------------------------------------------------------------- /blog/.vuepress/theme/index.js: -------------------------------------------------------------------------------- 1 | module.exports = () => { 2 | 3 | return { 4 | plugins: [ 5 | '@vuepress/search', 6 | ] 7 | } 8 | } -------------------------------------------------------------------------------- /blog/.vuepress/theme/layouts/Page.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 32 | -------------------------------------------------------------------------------- /blog/.vuepress/theme/layouts/Post.vue: -------------------------------------------------------------------------------- 1 | 56 | 57 | 101 | -------------------------------------------------------------------------------- /blog/.vuepress/theme/layouts/Posts.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 21 | -------------------------------------------------------------------------------- /blog/.vuepress/theme/partials/Card.vue: -------------------------------------------------------------------------------- 1 | 37 | 38 | 65 | -------------------------------------------------------------------------------- /blog/.vuepress/theme/partials/Error.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /blog/.vuepress/theme/partials/Footer.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 31 | -------------------------------------------------------------------------------- /blog/.vuepress/theme/partials/Header.vue: -------------------------------------------------------------------------------- 1 | 32 | 86 | -------------------------------------------------------------------------------- /blog/.vuepress/theme/partials/Navigation.vue: -------------------------------------------------------------------------------- 1 | 35 | 36 | 52 | -------------------------------------------------------------------------------- /blog/.vuepress/theme/partials/SocialLink.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 18 | -------------------------------------------------------------------------------- /blog/.vuepress/theme/store/actions.js: -------------------------------------------------------------------------------- 1 | import types from './types' 2 | 3 | export default ({ 4 | updateSite: ({ commit }, site) => commit(types.SITE_UPDATE, site), 5 | updatePage: ({ commit }, page) => commit(types.PAGE_UPDATE, page), 6 | updateParams: ({ commit }, params) => commit(types.ROUTER_PARAMS, params), 7 | searchInput: ({ commit }, { target }) => { 8 | commit(types.SEARCH, target.value) 9 | } 10 | }) 11 | -------------------------------------------------------------------------------- /blog/.vuepress/theme/store/getters.js: -------------------------------------------------------------------------------- 1 | import { getOr } from 'lodash/fp' 2 | 3 | export default { 4 | blog: getOr({}, 'blog'), 5 | current: getOr({}, 'current'), 6 | index: getOr({}, 'index'), 7 | loading: getOr(false, 'loading'), 8 | params: getOr({}, 'params'), 9 | 10 | type: getOr(null, 'type'), 11 | 12 | header: getOr(null, 'header'), 13 | 14 | posts: getOr([], 'posts'), 15 | footer: getOr([], 'footer'), 16 | nav: getOr([], 'nav'), 17 | 18 | social: getOr([], 'social'), 19 | 20 | author: getOr(null, 'author') 21 | } 22 | -------------------------------------------------------------------------------- /blog/.vuepress/theme/store/index.js: -------------------------------------------------------------------------------- 1 | import Vuex from 'vuex' 2 | 3 | import state from './state' 4 | import actions from './actions' 5 | import mutations from './mutations' 6 | import getters from './getters' 7 | 8 | export default () => new Vuex.Store({ state, actions, mutations, getters }) 9 | -------------------------------------------------------------------------------- /blog/.vuepress/theme/store/mutations.js: -------------------------------------------------------------------------------- 1 | import { pick, get } from 'lodash' 2 | 3 | import types from './types' 4 | import { formatPages, formatPage, type, header, posts, footer, social, navigation } from './utils' 5 | 6 | export default { 7 | [types.SITE_UPDATE]: (state, site) => { 8 | const themeConfig = get(site, 'themeConfig', {}) 9 | const siteConfig = pick(site, ['title', 'description', 'base', 'defaultAuthor']) 10 | 11 | state.blog = Object.assign({}, siteConfig, themeConfig) 12 | state.index = formatPages(state.blog, get(site, 'pages', [])) 13 | state.footer = footer(state) 14 | state.social = social(site) 15 | }, 16 | 17 | [types.PAGE_UPDATE]: (state, page) => { 18 | state.current = formatPage(state.blog, page) 19 | }, 20 | 21 | [types.ROUTER_PARAMS]: (state, params) => { 22 | const postDate = post => new Date(post.publish) 23 | 24 | state.params = params 25 | state.posts = posts(state).sort((a, b) => postDate(b) - postDate(a)) 26 | state.nav = navigation(state) 27 | state.type = type(state) 28 | state.header = header(state) 29 | }, 30 | 31 | [types.TOGGLE_SIDEBAR]: (state, sidebarState) => { 32 | state.sidebarOpen = sidebarState 33 | }, 34 | 35 | [types.LOAD_START]: state => { 36 | state.loading = true 37 | }, 38 | 39 | [types.LOAD_END]: state => { 40 | state.loading = false 41 | }, 42 | 43 | [types.SEARCH]: (state, query) => { 44 | state.search = query 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /blog/.vuepress/theme/store/state.js: -------------------------------------------------------------------------------- 1 | export default { 2 | blog: { 3 | title: null, 4 | description: null, 5 | base: null 6 | }, 7 | header: { 8 | showCover: false, 9 | coverImage: null, 10 | title: null, 11 | description: null 12 | }, 13 | nav: [], 14 | params: {}, 15 | current: {}, 16 | route: {}, 17 | index: [], 18 | loading: true, 19 | search: '', 20 | sidebarOpen: false, 21 | type: null, 22 | posts: [], 23 | footer: [], 24 | social: [], 25 | author: null 26 | } 27 | -------------------------------------------------------------------------------- /blog/.vuepress/theme/store/types.js: -------------------------------------------------------------------------------- 1 | const types = [ 2 | 'SITE_UPDATE', 3 | 'PAGE_UPDATE', 4 | 'TOGGLE_SIDEBAR', 5 | 'LOAD_START', 6 | 'LOAD_END', 7 | 'SEARCH', 8 | 'ROUTER_PARAMS' 9 | ] 10 | 11 | const registeredTypes = types.reduce((result, type) => ({ ...result, [type]: type }), {}) 12 | 13 | export default registeredTypes 14 | -------------------------------------------------------------------------------- /blog/.vuepress/theme/store/utils.js: -------------------------------------------------------------------------------- 1 | import { get } from 'lodash' 2 | import { toLower, getOr, curry } from 'lodash/fp' 3 | 4 | const pluckData = curry((blog, page) => ({ 5 | ...page, 6 | ...page.frontmatter, 7 | publish: page.frontmatter.publish ? new Date(page.frontmatter.publish).getTime() : null, 8 | tags: get(page.frontmatter, 'tags', []).map(toLower), 9 | categories: get(page.frontmatter, 'categories', []).map(toLower), 10 | author: { 11 | link: get(page.frontmatter, 'author.link') || get(blog, 'defaultAuthor.link'), 12 | name: get(page.frontmatter, 'author.name') || get(blog, 'defaultAuthor.name'), 13 | gravatar: get(page.frontmatter, 'author.gravatar') || get(blog, 'defaultAuthor.gravatar') 14 | } 15 | })) 16 | 17 | const isExternal = url => /^https?:\/\//i.test(url) 18 | 19 | export const formatPages = (blog, data = []) => data.map(pluckData(blog)) 20 | 21 | export const formatPage = pluckData 22 | 23 | export const relativePath = state => { 24 | const route = get(state, 'route.path', '/') 25 | const base = get(state, 'blog.path', '') 26 | 27 | return route.replace(base, '') 28 | } 29 | 30 | export const type = state => { 31 | const path = relativePath(state) 32 | const type = get(state, 'current.type') 33 | const [group] = path.split('/').filter(tag => !!tag) 34 | 35 | if (type) { 36 | return type 37 | } 38 | 39 | switch (group) { 40 | case 'tags': 41 | return 'tags' 42 | 43 | case 'category': 44 | return 'category' 45 | 46 | case 'posts': 47 | return 'posts' 48 | 49 | default: 50 | return 'home' 51 | } 52 | } 53 | 54 | export const category = getOr(null, 'route.params.category') 55 | export const tag = getOr(null, 'route.params.tag') 56 | 57 | export const footer = state => 58 | get(state, 'blog.footer', []) 59 | .map(nav => ({ 60 | ...nav, 61 | external: isExternal(nav.link) 62 | })) 63 | 64 | export const navigation = state => 65 | get(state, 'blog.nav', []) 66 | .map(nav => ({ 67 | ...nav, 68 | active: state.route.path.split('/').join('') === nav.link.split('/').join(''), 69 | external: isExternal(nav.link) 70 | })) 71 | 72 | export const social = site => { 73 | const channels = get(site, 'themeConfig.social', {}) 74 | 75 | return Object.keys(channels) 76 | .reduce((results, type) => [ 77 | ...results, 78 | { 79 | type, 80 | url: channels[type] 81 | } 82 | ], []) 83 | 84 | } 85 | 86 | export const posts = state => { 87 | const items = Object.keys(state.index) 88 | 89 | return items 90 | .map(item => state.index[item]) 91 | .filter(item => !!item) 92 | .filter(item => item.type === 'post') 93 | .filter(item => !category(state) || ~item.categories.map(toLower).indexOf(toLower(category(state)))) 94 | .filter(item => !tag(state) || ~item.tags.map(toLower).indexOf(toLower(tag(state)))) 95 | .sort((a, b) => a - b) 96 | .slice(0, state.type === 'home' ? 10 : 50) 97 | } 98 | 99 | 100 | export const header = state => { 101 | switch (state.type) { 102 | case 'category': 103 | return { 104 | showCover: true, 105 | coverImage: null, 106 | title: category(state), 107 | description: `A collection of ${state.posts.length} ${state.posts.length === 1 ? 'post' : 'posts'}` 108 | } 109 | 110 | case 'tags': 111 | return { 112 | showCover: true, 113 | coverImage: null, 114 | title: tag(state), 115 | description: `A collection of ${state.posts.length} ${state.posts.length === 1 ? 'post' : 'posts'}` 116 | } 117 | 118 | case 'posts': 119 | return { 120 | showCover: true, 121 | coverImage: null, 122 | title: `Posts`, 123 | description: `A collection of ${state.posts.length} ${state.posts.length === 1 ? 'post' : 'posts'}` 124 | } 125 | 126 | case 'home': 127 | return { 128 | logo: state.blog.logo, 129 | showCover: true, 130 | coverImage: state.blog.cover, 131 | title: state.blog.title, 132 | description: state.blog.description 133 | } 134 | 135 | default: 136 | return { 137 | showCover: false, 138 | coverImage: null, 139 | title: null, 140 | description: null 141 | } 142 | } 143 | } 144 | 145 | export const authorImage = hash => '//www.gravatar.com/avatar/' + hash + '?s=250&d=mm&r=x' 146 | -------------------------------------------------------------------------------- /blog/.vuepress/theme/styles/global.css: -------------------------------------------------------------------------------- 1 | a,abbr,acronym,address,applet,article,aside,audio,big,blockquote,body,canvas,caption,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,ul,var,video{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:"";content:none}img{max-width:100%}html{box-sizing:border-box;font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}*,:after,:before{box-sizing:inherit}a{background-color:transparent}a:active,a:hover{outline:0}b,strong{font-weight:700}dfn,em,i{font-style:italic}h1{margin:.67em 0;font-size:2em}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}mark{background-color:#fdffb6}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;color:inherit;font:inherit}button{overflow:visible;border:none}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input:focus{outline:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}legend{padding:0;border:0}textarea{overflow:auto}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}html{overflow-y:scroll;font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0)}body,html{overflow-x:hidden}body{color:#313b3f;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;font-size:1.6rem;line-height:1.6em;font-weight:400;font-style:normal;letter-spacing:0;text-rendering:optimizeLegibility;background:#fff;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-moz-font-feature-settings:"liga" on}::-moz-selection{text-shadow:none;background:#cbeafb}::selection{text-shadow:none;background:#cbeafb}hr{position:relative;display:block;width:100%;margin:2.5em 0 3.5em;padding:0;height:1px;border:0;border-top:1px solid #e3e9ed}audio,canvas,iframe,img,svg,video{vertical-align:middle}fieldset{margin:0;padding:0;border:0}textarea{resize:vertical}blockquote,dl,ol,p,ul{margin:0 0 1.5em}ol,ul{padding-left:1.3em;padding-right:1.5em}ol ol,ol ul,ul ol,ul ul{margin:.5em 0 1em}ul{list-style:disc}ol{list-style:decimal}ol,ul{max-width:100%}li{margin:.5em 0;padding-left:.3em;line-height:1.6em}dt{float:left;margin:0 20px 0 0;width:120px;color:#15171a;font-weight:500;text-align:right}dd{margin:0 0 5px;text-align:left}blockquote{margin:1.5em 0;padding:0 1.6em;border-left:.5em solid #e5eff5}blockquote p{margin:.8em 0;font-size:1.2em;font-weight:300}blockquote small{display:inline-block;margin:.8em 0 .8em 1.5em;font-size:.9em;opacity:.8}blockquote small:before{content:"\2014 \00A0"}blockquote cite{font-weight:700}blockquote cite a{font-weight:400}a{color:#26a8ed;text-decoration:none}a:hover{text-decoration:underline}h1,h2,h3,h4,h5,h6{margin-top:0;line-height:1.15;font-weight:600;text-rendering:optimizeLegibility}h1{margin:0 0 .5em;font-size:5.5rem;font-weight:600}@media (max-width:500px){h1{font-size:2.2rem}}h2{margin:1.5em 0 .5em;font-size:2.2rem}@media (max-width:500px){h2{font-size:1.8rem}}h3{margin:1.5em 0 .5em;font-size:1.8rem;font-weight:500}@media (max-width:500px){h3{font-size:1.7rem}}h4{margin:1.5em 0 .5em;font-size:1.6rem;font-weight:500}h5,h6{margin:1.5em 0 .5em;font-size:1.4rem;font-weight:500} 2 | /*# sourceMappingURL=global.css.map */ -------------------------------------------------------------------------------- /blog/.vuepress/theme/styles/screen.css: -------------------------------------------------------------------------------- 1 | a,abbr,acronym,address,applet,article,aside,audio,big,blockquote,body,canvas,caption,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,ul,var,video{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:"";content:none}img{max-width:100%}html{box-sizing:border-box;font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}*,:after,:before{box-sizing:inherit}a{background-color:transparent}a:active,a:hover{outline:0}b,strong{font-weight:700}dfn,em,i{font-style:italic}h1{margin:.67em 0;font-size:2em}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}mark{background-color:#fdffb6}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;color:inherit;font:inherit}button{overflow:visible;border:none}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input:focus{outline:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}legend{padding:0;border:0}textarea{overflow:auto}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}html{overflow-y:scroll;font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0)}body,html{overflow-x:hidden}body{color:#313b3f;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;font-size:1.6rem;line-height:1.6em;font-weight:400;font-style:normal;letter-spacing:0;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-moz-font-feature-settings:"liga" on}::-moz-selection{text-shadow:none;background:#cbeafb}::selection{text-shadow:none;background:#cbeafb}hr{position:relative;display:block;width:100%;margin:2.5em 0 3.5em;padding:0;height:1px;border:0;border-top:1px solid #e3e9ed}audio,canvas,iframe,img,svg,video{vertical-align:middle}fieldset{margin:0;padding:0;border:0}textarea{resize:vertical}blockquote,dl,ol,p,ul{margin:0 0 1.5em}ol,ul{padding-left:1.3em;padding-right:1.5em}ol ol,ol ul,ul ol,ul ul{margin:.5em 0 1em}ul{list-style:disc}ol{list-style:decimal}ol,ul{max-width:100%}li{margin:.5em 0;padding-left:.3em;line-height:1.6em}dt{float:left;margin:0 20px 0 0;width:120px;color:#15171a;font-weight:500;text-align:right}dd{margin:0 0 5px;text-align:left}blockquote{margin:1.5em 0;padding:0 1.6em;border-left:.5em solid #e5eff5}blockquote p{margin:.8em 0;font-size:1.2em;font-weight:300}blockquote small{display:inline-block;margin:.8em 0 .8em 1.5em;font-size:.9em;opacity:.8}blockquote small:before{content:"\2014 \00A0"}blockquote cite{font-weight:700}blockquote cite a{font-weight:400}a{color:#26a8ed;text-decoration:none}a:hover{text-decoration:underline}h1,h2,h3,h4,h5,h6{margin-top:0;line-height:1.15;font-weight:600;text-rendering:optimizeLegibility}h1{margin:0 0 .5em;font-size:5.5rem;font-weight:600}@media (max-width:500px){h1{font-size:2.2rem}}h2{margin:1.5em 0 .5em;font-size:2.2rem}@media (max-width:500px){h2{font-size:1.8rem}}h3{margin:1.5em 0 .5em;font-size:1.8rem;font-weight:500}@media (max-width:500px){h3{font-size:1.7rem}}h4{margin:1.5em 0 .5em;font-size:1.6rem;font-weight:500}h5,h6{margin:1.5em 0 .5em;font-size:1.4rem;font-weight:500}body{background:#fff}.img{display:block;width:100%;height:100%;background-position:50%;background-size:cover;border-radius:100%}.hidden{visibility:hidden;position:absolute;text-indent:-9999px}.site-wrapper{display:flex;flex-direction:column;min-height:100vh}.site-main{z-index:100;flex-grow:1}.outer{position:relative;padding:0 5vw}.inner{margin:0 auto;max-width:1040px;width:100%}@media (min-width:900px){.author-template .post-feed,.home-template .post-feed,.tag-template .post-feed{padding:40px 0 5vw;border-top-left-radius:3px;border-top-right-radius:3px}.home-template .site-nav{position:relative}}.site-header-background{position:relative;margin-top:64px;padding-bottom:12px;color:#fff;background:#090a0b no-repeat 50%;background-size:cover}.site-header-background:before{bottom:0;background:rgba(0,0,0,.18)}.site-header-background:after,.site-header-background:before{content:"";position:absolute;top:0;right:0;left:0;z-index:10;display:block}.site-header-background:after{bottom:auto;height:140px;background:linear-gradient(rgba(0,0,0,.15),transparent)}.site-header-background.no-image:after,.site-header-background.no-image:before{display:none}.site-header-content{z-index:100;display:flex;flex-direction:column;justify-content:center;align-items:center;padding:6vw 3vw;min-height:200px;max-height:340px}.site-title{z-index:10;margin:0 0 0 -2px;padding:0;font-size:5rem;line-height:1em;font-weight:600}.site-logo{max-height:55px}.site-description{z-index:10;margin:0;padding:5px 0;font-size:2.1rem;line-height:1.4em;font-weight:400;opacity:.8}.site-home-header{z-index:1000}.site-home-header .site-header-background{margin-top:0}.site-home-header .site-header-content{padding:5vw 3vw 6vw}.site-home-header .site-title{font-size:5.5rem;text-align:center}.site-home-header .site-description{font-size:2.2rem;font-weight:300;text-align:center}.site-archive-header .site-header-content{position:relative;align-items:stretch;padding:12vw 0 20px;min-height:200px;max-height:600px}.site-archive-header .no-image{padding-top:0;padding-bottom:0;color:#15171a;background:#fff;opacity:1}.site-archive-header .no-image .site-description{color:#738a94;opacity:1}.site-archive-header .no-image .site-header-content{padding:5vw 0 10px;border-bottom:1px solid #e9eef1}@media (max-width:900px){.site-header-content{padding-bottom:9vw}}@media (max-width:500px){.site-home-header .site-title{font-size:4.2rem}.site-home-header .site-description{font-size:1.8rem}.site-archive-header .site-header-content{flex-direction:column;align-items:center;min-height:unset}.site-archive-header .site-title{font-size:4.2rem;text-align:center}.site-archive-header .no-image .site-header-content{padding:12vw 0 20px}}.site-nav-main{position:fixed;top:0;right:0;left:0;z-index:1000;background:#090a0b}.site-nav{position:relative;z-index:100;display:flex;justify-content:space-between;align-items:flex-start;overflow:hidden;height:64px;font-size:1.3rem}.site-nav-left-wrapper{position:relative;flex:1 0 auto;display:flex}.site-header-background:not(.responsive-header-img) .site-nav-left-wrapper:after,.site-nav-main .site-nav-left-wrapper:after{content:"";position:absolute;top:0;z-index:1000;width:40px;height:100%;right:0;background:linear-gradient(90deg,rgba(9,10,11,0) 0,#090a0b)}.site-nav-left{flex:1 0 auto;display:flex;align-items:center;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;margin-right:10px;padding:10px 0 80px;font-weight:500;letter-spacing:.2px;text-transform:uppercase;white-space:nowrap;-ms-overflow-scrolling:touch}.site-nav-left .nav li:last-of-type{padding-right:20px}.site-nav-logo{position:relative;z-index:100;flex-shrink:0;display:inline-block;margin-right:32px;padding:12px 0;color:#fff;font-size:1.7rem;line-height:1.8rem;font-weight:700;letter-spacing:-.5px;text-transform:none}.site-nav-logo:hover{text-decoration:none}.site-nav-logo img{display:block;width:auto;height:21px}.site-home-header .site-nav-logo{display:none}.site-nav-content{position:relative;align-self:flex-start}.nav{position:absolute;z-index:1000;display:flex;margin:0 0 0 -12px;padding:0;list-style:none;transition:all 1s cubic-bezier(.19,1,.22,1)}.nav li{display:block;margin:0;padding:0}.nav li a{position:relative;display:block;padding:12px;color:#fff;opacity:.8;transition:opacity .35s ease-in-out}.nav li a:hover{text-decoration:none;opacity:1}.nav li a:before{content:"";position:absolute;right:100%;bottom:8px;left:12px;height:1px;background:#fff;opacity:.25;transition:all .35s ease-in-out}.nav li a:hover:before{right:12px;opacity:.5}.nav-post-title-active .nav{visibility:hidden;opacity:0;transform:translateY(-175%)}.nav-post-title{visibility:hidden;position:absolute;top:9px;color:#fff;font-size:1.7rem;font-weight:400;text-transform:none;opacity:0;transition:all 1s cubic-bezier(.19,1,.22,1);transform:translateY(175%)}.nav-post-title.dash{left:-25px}.nav-post-title.dash:before{content:"– ";opacity:.5}.nav-post-title-active .nav-post-title{visibility:visible;opacity:1;transform:translateY(0)}.site-nav-right{flex:0 1 auto;display:flex;justify-content:flex-end;align-items:center;padding:10px 0;height:64px}.site-nav-right .nav{position:relative;margin:0}.site-nav-right .nav a{white-space:nowrap}.site-nav-right .nav a:before{display:none}.site-nav-right .nav li:last-of-type a{margin-right:-12px}.social-links{flex-shrink:0;display:flex;align-items:center}.social-link{display:inline-block;margin:0;padding:10px;opacity:.8}.social-link:hover{opacity:1}.social-link svg{height:1.8rem;fill:#fff}.social-link-fb svg,.social-link-wb svg{height:1.6rem}.social-link-wb svg path{stroke:#fff}.social-link-rss svg{height:1.9rem}.subscribe-button{display:block;margin:0 0 0 10px;padding:4px 10px;border:1px solid #fff;color:#fff;line-height:1em;border-radius:10px;opacity:.8}.subscribe-button:hover{text-decoration:none;opacity:1}.site-nav-right .nav+.subscribe-button{margin-left:24px}.rss-button{padding:10px 8px;opacity:.8}.rss-button:hover{opacity:1}.rss-button svg{margin-bottom:1px;height:2.1rem;fill:#fff}.home-template .site-nav-main{z-index:100}.home-template .site-nav-main .site-nav{opacity:0;transition:all .5s cubic-bezier(.19,1,.22,1) 0s}.home-template .site-nav-main .fixed-nav-active{opacity:1;transition:all .5s cubic-bezier(.19,1,.22,1) .05s}@media (max-width:700px){.site-home-header .site-nav{margin-left:-5vw}.site-nav-main{padding-right:0;padding-left:0}.site-nav-left{margin-right:0;padding-left:5vw}.site-nav-right{display:none}}.posts{overflow-x:hidden}.post-feed{flex-wrap:wrap;margin:0 -20px;padding:50px 0 0;background:#fff}.post-card,.post-feed{position:relative;display:flex}.post-card{flex:1 1 301px;flex-direction:column;overflow:hidden;margin:0 0 40px;padding:0 20px 40px;min-height:220px;border-bottom:1px solid #e9eef1;background-size:cover}.post-card-image-link{position:relative;display:block;overflow:hidden;border-radius:3px}.post-card-image{width:100%;height:200px;background:#c5d2d9 no-repeat 50%;-o-object-fit:cover;object-fit:cover}.post-card-content-link{position:relative;display:block;color:#15171a}.post-card-content-link:hover{text-decoration:none}.post-card-header{margin:15px 0 0}.post-feed .no-image .post-card-content-link{padding:0}.no-image .post-card-header{margin-top:0}.post-card-primary-tag{margin:0 0 .2em;color:#3eb0ef;font-size:1.2rem;font-weight:500;letter-spacing:.2px;text-transform:uppercase}.post-card-title{margin:0 0 .4em;line-height:1.15em;transition:color .2s ease-in-out}.no-image .post-card-title{margin-top:0}.post-card-content{flex-grow:1;display:flex;flex-direction:column}.post-card-excerpt{max-width:56em;color:#738a94;font-family:Georgia,serif}.post-card-excerpt p{margin-bottom:1em}.post-card-meta{display:flex;align-items:flex-start;padding:0}.author-profile-image,.avatar-wrapper{display:block;width:100%;height:100%;background:#e3e9ed;border-radius:100%;-o-object-fit:cover;object-fit:cover}.post-card-meta .avatar-wrapper,.post-card-meta .profile-image-wrapper{position:relative}.author-list{display:flex;flex-wrap:wrap;margin:0 0 0 4px;padding:0;list-style:none}.author-list-item{position:relative;flex-shrink:0;margin:0;padding:0}.static-avatar{display:block;overflow:hidden;margin:0 0 0 -6px;width:34px;height:34px;border:2px solid #fff;border-radius:100%}.author-name-tooltip{position:absolute;bottom:105%;z-index:999;display:block;padding:2px 8px;color:#fff;font-size:1.2rem;letter-spacing:.2px;white-space:nowrap;background:#15171a;border-radius:3px;box-shadow:0 12px 26px rgba(39,44,49,.08),1px 3px 8px rgba(39,44,49,.03);opacity:0;transition:all .35s cubic-bezier(.4,.01,.165,.99);transform:translateY(6px);pointer-events:none}.author-list-item:hover .author-name-tooltip{opacity:1;transform:translateY(0)}@media (max-width:700px){.author-name-tooltip{display:none}}.post-card-byline-content{flex:1 1 50%;display:flex;flex-direction:column;margin:2px 0 0 6px;color:#92a3ab;font-size:1.2rem;line-height:1.4em;font-weight:400;letter-spacing:.2px;text-transform:uppercase}.post-card-byline-content span{margin:0}.post-card-byline-content a{color:#424852;font-weight:600}.post-card-byline-date{font-size:1.2rem}.post-card-byline-date .bull{display:inline-block;margin:0 4px;opacity:.6}.single-author-byline{display:flex;flex-direction:column;margin-left:5px;color:#5d7179;font-size:1.3rem;line-height:1.4em;font-weight:500}.single-author{display:flex;align-items:center}.single-author .static-avatar{margin-left:-2px}.single-author-name{display:inline-block}@media (min-width:795px){.post-card-large{flex:1 1 100%;flex-direction:row;padding-bottom:40px;min-height:280px;border-top:0}.post-card-large:hover{border-bottom-color:#e3e9ed}.post-card-large:not(.no-image) .post-card-header{margin-top:0}.post-card-large .post-card-image-link{position:relative;flex:1 1 auto;margin-bottom:0;min-height:380px}.post-card-large .post-card-image{position:absolute;width:100%;height:100%}.post-card-large .post-card-content{flex:0 1 361px;justify-content:center}.post-card-large .post-card-title{margin-top:0;font-size:3.2rem}.post-card-large .post-card-content-link,.post-card-large .post-card-meta{padding:0 0 0 40px}.post-card-large .post-card-excerpt p{margin-bottom:1.5em;font-size:1.8rem;line-height:1.5em}}@media (max-width:1170px){.post-card{margin-bottom:5vw}}@media (max-width:650px){.post-feed{padding-top:5vw}.post-card{margin-bottom:5vw}}@media (max-width:500px){.post-card-title{font-size:1.9rem}.post-card-excerpt{font-size:1.6rem}}.page-template .site-main,.post-template .site-main{margin-top:64px;padding-bottom:4vw;background:#fff}.post-full-header{position:relative;margin:0 auto;padding:70px 170px 50px;border-top-left-radius:3px;border-top-right-radius:3px}.post-full-tags{display:flex;justify-content:flex-start;align-items:center;color:#738a94;font-size:1.3rem;line-height:1.4em;font-weight:600;text-transform:uppercase}.post-full-meta-date{color:#738a94;font-size:1.2rem;font-weight:400}@media (max-width:1170px){.post-full-header{padding:60px 11vw 50px}}@media (max-width:800px){.post-full-header{padding-right:5vw;padding-left:5vw}}@media (max-width:500px){.post-full-header{padding:20px 0 35px}}.post-full-title{margin:0 0 .2em;color:#090a0b}.post-full-custom-excerpt{margin:20px 0 0;color:#738a94;font-family:Georgia,serif;font-size:2.3rem;line-height:1.4em;font-weight:300}.date-divider{display:inline-block;margin:0 6px 1px;font-weight:300}.post-full-image{display:flex;flex-direction:column;align-items:center;overflow:hidden;margin:25px 0 50px;background:#e3e9ed;border-radius:3px}.post-full-image img{max-width:1040px;width:100%;height:auto}.post-full-content{position:relative;margin:0 auto;padding:0 170px 6vw;min-height:230px;font-family:Georgia,serif;font-size:2rem;line-height:1.6em;background:#fff}@media (max-width:1170px){.post-full-content{padding:0 11vw}}@media (max-width:800px){.post-full-content{padding:0 5vw;font-size:1.8rem}}@media (max-width:500px){.post-full-custom-excerpt{font-size:1.9rem;line-height:1.5em}}.no-image .post-full-content{padding-top:0}.no-image .post-full-content:after,.no-image .post-full-content:before{display:none}.footnotes,.post-full-comments,.post-full-content blockquote,.post-full-content dl,.post-full-content h1,.post-full-content h2,.post-full-content h3,.post-full-content h4,.post-full-content h5,.post-full-content h6,.post-full-content ol,.post-full-content p,.post-full-content pre,.post-full-content ul{margin:0 0 1.5em;min-width:100%}@media (max-width:500px){.footnotes,.post-full-comments,.post-full-content dl,.post-full-content ol,.post-full-content p,.post-full-content pre,.post-full-content ul{margin-bottom:1.28em}}.post-full-content li{word-break:break-word}.post-full-content li p{margin:0}.post-full-content a{color:#15171a;word-break:break-word;box-shadow:inset 0 -1px 0 #15171a;transition:all .2s ease-in-out}.post-full-content a:hover{color:#3eb0ef;text-decoration:none;box-shadow:inset 0 -1px 0 #3eb0ef}.post-full-content em,.post-full-content strong{color:#090a0b}.post-full-content small{display:inline-block;line-height:1.6em}.post-full-content li:first-child{margin-top:0}.post-full-content img,.post-full-content video{display:block;margin:1.5em auto;max-width:1040px;height:auto}@media (max-width:1040px){.post-full-content img,.post-full-content video{width:100%}}.post-full-content img[src$="#full"]{max-width:none;width:100vw}.post-full-content img+br+small{display:block;margin-top:-3em;margin-bottom:1.5em;text-align:center}.post-full-content iframe{margin:0 auto!important}.post-full-content blockquote{margin:0 0 1.5em;padding:0 1.5em;border-left:3px solid #3eb0ef}@media (max-width:500px){.post-full-content blockquote{padding:0 1.3em}}.post-full-content blockquote p{margin:0 0 1em;color:inherit;font-size:inherit;line-height:inherit;font-style:italic}.post-full-content blockquote p:last-child{margin-bottom:0}.post-full-content code{padding:0 5px 2px;font-size:.8em;line-height:1em;font-weight:400!important;background:#e5eff5;border-radius:3px}.post-full-content p code{word-break:break-all}.post-full-content pre{overflow-x:auto;margin:1.5em 0 3em;padding:20px;max-width:100%;border:1px solid #000;color:#e5eff5;font-size:1.4rem;line-height:1.5em;background:#0e0f11;border-radius:5px}.post-full-content pre ::-moz-selection{color:#3c484e}.post-full-content pre ::selection{color:#3c484e}.post-full-content pre code{padding:0;font-size:inherit;line-height:inherit;background:transparent}.post-full-content pre code :not(span){color:inherit}.post-full-content .fluid-width-video-wrapper{margin:1.5em 0 3em}.post-full-content hr{margin:2em 0}.post-full-content hr:after{content:"";position:absolute;top:-15px;left:50%;display:block;margin-left:-10px;width:1px;height:30px;background:#e3e9ed;box-shadow:0 0 0 5px #fff;transform:rotate(45deg)}.post-full-content hr+p{margin-top:1.2em}.post-full-content h1,.post-full-content h2,.post-full-content h3,.post-full-content h4,.post-full-content h5,.post-full-content h6{color:#090a0b;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif}.post-full-content h1{margin:.5em 0 .4em;font-size:4.2rem;line-height:1.25em;font-weight:600}.post-full-content p+h1{margin-top:.8em}@media (max-width:800px){.post-full-content h1{font-size:3.2rem;line-height:1.25em}}.post-full-content h2{margin:.5em 0 .4em;font-size:3.2rem;line-height:1.25em;font-weight:600}.post-full-content p+h2{margin-top:.8em}@media (max-width:800px){.post-full-content h2{margin-bottom:.3em;font-size:2.8rem;line-height:1.25em}}.post-full-content h3{margin:.5em 0 .2em;font-size:2.5rem;line-height:1.3em;font-weight:600}.post-full-content h2+h3{margin-top:.7em}@media (max-width:800px){.post-full-content h3{margin-bottom:.3em;font-size:2.4rem;line-height:1.3em}}.post-full-content h4{margin:.5em 0 .2em;font-size:2.5rem;font-weight:600}.post-full-content h2+h4{margin-top:.7em}.post-full-content h3+h4{margin-top:0}@media (max-width:800px){.post-full-content h4{margin-bottom:.3em;font-size:2.4rem;line-height:1.3em}}.post-full-content h5{display:block;margin:.5em 0;padding:.4em 1em .9em;border:0;color:#3eb0ef;font-family:Georgia,serif;font-size:3.2rem;line-height:1.35em;text-align:center}@media (min-width:1180px){.post-full-content h5{max-width:1060px;width:100vw}}@media (max-width:800px){.post-full-content h5{margin-bottom:1em;margin-left:1.3em;padding:0 0 .5em;font-size:2.4rem;text-align:initial}}.post-full-content h6{margin:.5em 0 .2em;font-size:2rem;font-weight:700}@media (max-width:800px){.post-full-content h6{font-size:1.8rem;line-height:1.4em}}.footnotes-sep{margin-bottom:30px}.footnotes{font-size:1.5rem}.footnotes p{margin:0}.footnote-backref{color:#3eb0ef!important;font-size:1.2rem;font-weight:700;text-decoration:none!important;box-shadow:none!important}@media (max-width:1170px){.post-full-image{margin:25px -6vw 50px;border-radius:0}.post-full-image img{max-width:1170px}}@media (max-width:700px){.post-full-image{margin:25px -5vw}}@media (max-width:500px){.post-full-meta{font-size:1.2rem;line-height:1.3em}.post-full-title{margin-top:.2em;font-size:4.2rem;line-height:1.05em}.post-full-image{margin-top:5px;margin-bottom:5vw}.post-full-content{padding:0}.post-full-content:after,.post-full-content:before{display:none}}.post-full-content table{display:inline-block;overflow-x:auto;margin:.5em 0 2.5em;max-width:100%;width:auto;border-spacing:0;border-collapse:collapse;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;font-size:1.6rem;white-space:nowrap;vertical-align:top;-webkit-overflow-scrolling:touch;background:radial-gradient(ellipse at left,rgba(0,0,0,.2) 0,transparent 75%) 0,radial-gradient(ellipse at right,rgba(0,0,0,.2) 0,transparent 75%) 100%;background-attachment:scroll,scroll;background-size:10px 100%,10px 100%;background-repeat:no-repeat}.post-full-content table td:first-child{background-image:linear-gradient(90deg,#fff 50%,hsla(0,0%,100%,0));background-size:20px 100%;background-repeat:no-repeat}.post-full-content table td:last-child{background-image:linear-gradient(270deg,#fff 50%,hsla(0,0%,100%,0));background-position:100% 0;background-size:20px 100%;background-repeat:no-repeat}.post-full-content table th{color:#15171a;font-size:1.2rem;font-weight:700;letter-spacing:.2px;text-align:left;text-transform:uppercase;background-color:#f4f8fb}.post-full-content table td,.post-full-content table th{padding:6px 12px;border:1px solid #e3ecf3}.post-full-byline{display:flex;justify-content:space-between;margin:35px 0 0;padding-top:15px;border-top:1px solid #e3e9ed}.post-full-byline-content{flex-grow:1;display:flex;align-items:flex-start}.post-full-byline-content .author-list{justify-content:flex-start;padding:0 12px 0 0}.post-full-byline-meta{margin:2px 0 0;color:#92a3ab;font-size:1.2rem;line-height:1.2em;letter-spacing:.2px;text-transform:uppercase}.post-full-byline-meta h4{margin:0 0 3px;font-size:1.3rem;line-height:1.4em;font-weight:500}.post-full-byline-meta h4 a{color:#2b2f36}.post-full-byline-meta h4 a:hover{color:#15171a}.post-full-byline-meta .bull{display:inline-block;margin:0 4px;opacity:.6}.author-avatar{display:block;overflow:hidden;margin:0 -4px;width:40px;height:40px;border:2px solid #fff;border-radius:100%;transition:all .5s cubic-bezier(.4,.01,.165,.99) .7s}.author-list-item .author-card{position:absolute;bottom:130%;left:50%;z-index:600;display:flex;justify-content:space-between;margin-left:-200px;width:400px;font-size:1.4rem;line-height:1.5em;background:#fff;border-radius:3px;box-shadow:0 12px 26px rgba(39,44,49,.08),1px 3px 8px rgba(39,44,49,.06);opacity:0;transition:all .35s cubic-bezier(.4,.01,.165,.99);transform:scale(.98) translateY(15px);pointer-events:none}.author-list-item .author-card:before{content:"";position:absolute;top:100%;left:50%;display:block;margin-left:-8px;width:0;height:0;border-top:8px solid #fff;border-right:8px solid transparent;border-left:8px solid transparent}.author-list-item .author-card.hovered{opacity:1;transform:scale(1) translateY(0);pointer-events:auto}.author-card{padding:20px 20px 22px}.author-card .author-info{flex:1 1 auto;padding:0 0 0 20px}.author-card .author-info h2{margin:8px 0 0;font-size:1.6rem}.author-card .author-info p{margin:4px 0 0;color:#5d7179}.author-card .author-info .bio h2{margin-top:0}.author-card .author-info .bio p{margin-top:.8em}.author-card .author-profile-image{flex:0 0 60px;margin:0;width:60px;height:60px;border:none}.basic-info .avatar-wrapper{position:relative;margin:0;width:60px;height:60px;border:none;background:rgba(229,239,245,.1)}.basic-info .avatar-wrapper svg{margin:0;width:60px;height:60px;opacity:.15}@media (max-width:1170px){.author-list-item .author-card{margin-left:-50px;width:430px}.author-list-item .author-card:before{left:50px}}@media (max-width:650px){.author-list-item .author-card{display:none}}@media (max-width:500px){.author-avatar{width:36px;height:36px}.post-full-byline{margin-top:20px}.post-full-byline-meta{font-size:1.2rem}.post-full-byline-meta h4{margin-bottom:2px;font-size:1.2rem}}.subscribe-form{margin:1.5em 0;padding:6.5vw 7vw 8vw;border:1px solid #e3e9ed;text-align:center;background:linear-gradient(#fbfdfe,#f4f8fb);border-radius:3px}.subscribe-form-title{margin:0 0 3px;padding:0;color:#15171a;font-size:3.5rem;line-height:1;font-weight:600}.subscribe-form-description{margin-bottom:.2em 0 1em;color:#738a94;font-size:2.1rem;line-height:1.55em}.subscribe-form form{display:flex;flex-direction:column;justify-content:center;align-items:center;margin:0 auto;max-width:460px}.subscribe-form .form-group{align-self:stretch;display:flex}.subscribe-email{display:block;padding:10px;width:100%;border:1px solid #dae2e7;color:#738a94;font-size:1.8rem;line-height:1em;font-weight:400;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;border-radius:5px;transition:border-color .15s linear;-webkit-appearance:none}.subscribe-form button{position:relative;display:inline-block;margin:0 0 0 10px;padding:0 20px;height:43px;outline:none;color:#fff;font-size:1.5rem;line-height:39px;font-weight:400;text-align:center;background:linear-gradient(#4fb7f0,#29a0e0 60%,#29a0e0 90%,#36a6e2);border-radius:5px;-webkit-font-smoothing:subpixel-antialiased}.subscribe-form button:active,.subscribe-form button:focus{background:#209cdf}.subscribe-form .button-loader,.subscribe-form .message-error,.subscribe-form .message-success{display:none}.subscribe-form .loading .button-content{visibility:hidden}.subscribe-form .loading .button-loader{position:absolute;top:0;left:50%;display:inline-block;margin-left:-19px;transform:scale(.7)}.subscribe-form .button-loader svg path,.subscribe-form .button-loader svg rect{fill:#fff}.subscribe-form .error .message-error,.subscribe-form .invalid .message-error,.subscribe-form .success .message-success{margin:1em auto 0;max-width:400px;color:#f05230;font-size:1.6rem;line-height:1.5em;text-align:center}.subscribe-form .success .message-success{display:block;color:#98c22e}.subscribe-form .error .message-error,.subscribe-form .invalid .message-error{display:block}@media (max-width:650px){.subscribe-form-title{font-size:2.4rem}.subscribe-form-description{font-size:1.6rem}}@media (max-width:500px){.subscribe-form form{flex-direction:column}.subscribe-form .form-group{flex-direction:column;width:100%}.subscribe-form button{margin:10px 0 0;width:100%}}.post-full-comments{margin:0 auto;max-width:840px}.read-next{border-bottom:1px solid hsla(0,0%,100%,.1);background:#090a0b}.read-next-feed{display:flex;flex-wrap:wrap;margin:0 -25px;padding:60px 0 0}.read-next .post-card{padding-bottom:0;border-bottom:none}.read-next .post-card:after{display:none}.read-next .post-card-primary-tag{color:#fff;opacity:.6}.read-next .post-card-title{color:#fff;opacity:.8;transition:all .2s ease-in-out}.read-next .post-card:hover .post-card-image{opacity:1}.read-next .post-card-excerpt{color:hsla(0,0%,100%,.6)}.read-next .static-avatar{border-color:#000}.read-next .post-card-byline-content{color:hsla(0,0%,100%,.6)}.read-next .post-card-byline-content a{color:hsla(0,0%,100%,.8)}.read-next-card{position:relative;flex:0 1 326px;display:flex;flex-direction:column;overflow:hidden;margin:0 25px 50px;padding:25px;background:linear-gradient(#191b1f,#090a0b);border-radius:3px}.read-next-card a{transition:all .2s ease-in-out}.read-next-card a:hover{text-decoration:none}.read-next-card-header h3{margin:0;color:hsla(0,0%,100%,.6);font-size:1.2rem;line-height:1em;font-weight:300;letter-spacing:.4px;text-transform:uppercase}.read-next-card-header h3 a{color:#fff;font-weight:500;text-decoration:none;opacity:.8}.read-next-card-header h3 a:hover{opacity:1}.read-next-card-content{font-size:1.7rem}.read-next-card-content ul{display:flex;flex-direction:column;margin:0;padding:0;list-style:none}.read-next-card-content li{display:flex;flex-direction:column;align-items:flex-start;margin:0;padding:20px 0;border-bottom:hsla(0,0%,100%,.1)}.read-next-card-content li:last-of-type{padding-bottom:5px;border:none}.read-next-card-content h4{margin:0;font-size:1.6rem;line-height:1.35em;font-weight:600}.read-next-card-content li a{display:block;color:#fff;opacity:.8}.read-next-card-content li a:hover{opacity:1}.read-next-card-excerpt{overflow:hidden;max-width:100%;font-size:1.4rem;line-height:1.2em;text-overflow:ellipsis}.read-next-card-meta{margin-top:2px;font-size:1.2rem;line-height:1.4em;font-weight:400}.read-next-card-meta p{margin:0;color:hsla(0,0%,100%,.6)}.read-next-card-footer{position:relative;margin:40px 0 5px}.read-next-card-footer a{padding:7px 12px 8px 14px;border:1px solid hsla(0,0%,100%,.6);color:hsla(0,0%,100%,.6);font-size:1.3rem;border-radius:999px;transition:all .35s ease-in-out}.read-next-card-footer a:hover{border-color:#fecd35;color:#fecd35;text-decoration:none}@media (max-width:1170px){.read-next-card{flex:1 1 261px;margin-bottom:5vw}}@media (max-width:650px){.read-next-feed{flex-direction:column;padding:25px 0 0}.read-next-card{flex:1 1 auto;margin:0 25px;padding:0;background:none}.read-next .post-card{flex:1 1 auto;margin:25px;padding:25px 0 0;border-bottom:1px solid hsla(0,0%,100%,.1)}}.post-content{display:flex;flex-direction:column;align-items:center}.post-full-content .kg-image{margin:0 auto;max-width:100%}.post-full-image+.post-full-content .kg-content :first-child .kg-image{width:100%}.post-full-content .kg-width-wide .kg-image{max-width:1040px}.post-full-content .kg-width-full .kg-image{max-width:100vw}.post-full-content figure{margin:.8em 0 2.3em}.post-full-content h1+figure,.post-full-content h2+figure,.post-full-content h3+figure,.post-full-content h4+figure{margin-top:2em}.post-full-content figure img{margin:0}.post-full-content figcaption{margin:1em auto 0;color:#5d7179;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;font-size:75%;line-height:1.5em;text-align:center;max-width:1040px}.kg-width-full figcaption{padding:0 1.5em}.kg-embed-card{display:flex;flex-direction:column;align-items:center;width:100%}.kg-embed-card .fluid-width-video-wrapper{margin:0}@media (max-width:1040px){.post-full-content .kg-width-full .kg-image{width:100vw}}.kg-gallery-container{display:flex;flex-direction:column;max-width:1040px;width:100vw}.kg-gallery-row{display:flex;flex-direction:row;justify-content:center}.kg-gallery-image img{display:block;margin:0;width:100%;height:100%}.kg-gallery-row:not(:first-of-type){margin:.75em 0 0}.kg-gallery-image:not(:first-of-type){margin:0 0 0 .75em}.kg-gallery-card+.kg-gallery-card,.kg-gallery-card+.kg-image-card.kg-width-wide,.kg-image-card.kg-width-wide+.kg-gallery-card,.kg-image-card.kg-width-wide+.kg-image-card.kg-width-wide{margin:-2.25em 0 3em}.kg-code-card{width:100%}.kg-code-card pre{margin:0}.kg-bookmark-card{width:100%}.kg-card+.kg-bookmark-card{margin-top:0}.post-full-content .kg-bookmark-container{display:flex;min-height:148px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;border-radius:3px}.post-full-content .kg-bookmark-container,.post-full-content .kg-bookmark-container:hover{color:#15171a;text-decoration:none;box-shadow:0 2px 5px -1px rgba(0,0,0,.15),0 0 1px rgba(0,0,0,.09)}.kg-bookmark-content{flex-grow:1;display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;padding:20px}.kg-bookmark-title{color:#313b3f;font-size:1.6rem;line-height:1.5em;font-weight:600;transition:color .2s ease-in-out}.post-full-content .kg-bookmark-container:hover .kg-bookmark-title{color:#3eb0ef}.kg-bookmark-description{display:-webkit-box;overflow-y:hidden;margin-top:12px;max-height:48px;color:#5d7179;font-size:1.5rem;line-height:1.5em;font-weight:400;-webkit-line-clamp:2;-webkit-box-orient:vertical}.kg-bookmark-thumbnail{position:relative;min-width:33%;max-height:100%}.kg-bookmark-thumbnail img{position:absolute;top:0;left:0;width:100%;height:100%;border-radius:0 3px 3px 0;-o-object-fit:cover;object-fit:cover}.kg-bookmark-metadata{display:flex;flex-wrap:wrap;align-items:center;margin-top:14px;color:#5d7179;font-size:1.5rem;font-weight:400}.post-full-content .kg-bookmark-icon{margin-right:8px;width:22px;height:22px}.kg-bookmark-author{line-height:1.5em}.kg-bookmark-author:after{content:"•";margin:0 6px}.kg-bookmark-publisher{overflow:hidden;max-width:240px;line-height:1.5em;text-overflow:ellipsis;white-space:nowrap}@media (max-width:800px){.post-full-content figure{margin:.2em 0 1.3em}.post-full-content h1+figure,.post-full-content h2+figure,.post-full-content h3+figure,.post-full-content h4+figure{margin-top:.9em}}@media (max-width:500px){.post-full-content .kg-width-full,.post-full-content .kg-width-wide{margin-right:-5vw;margin-left:-5vw}.post-full-content figcaption{margin-bottom:.4em}.post-full-content .kg-bookmark-container{flex-direction:column}.kg-bookmark-description,.kg-bookmark-metadata,.kg-bookmark-title{font-size:1.4rem;line-height:1.5em}.post-full-content .kg-bookmark-icon{width:18px;height:18px}.kg-bookmark-thumbnail{order:1;min-height:160px;width:100%}.kg-bookmark-thumbnail img{border-radius:3px 3px 0 0}.kg-bookmark-content{order:2}}.author-header{display:flex;flex-direction:row;justify-content:flex-start;align-items:flex-start;padding:10vw 0 10px}.site-archive-header .author-header{align-items:center}.site-archive-header .no-image .author-header{padding-bottom:20px}.author-header-content{display:flex;flex-direction:column;justify-content:center;margin:5px 0 0 30px}.site-header-content .author-profile-image{z-index:10;flex-shrink:0;margin:-4px 0 0;width:110px;height:110px;box-shadow:0 0 0 6px hsla(0,0%,100%,.1)}.author-header-content .author-bio{z-index:10;flex-shrink:0;margin:6px 0 0;max-width:46em;font-size:2rem;line-height:1.3em;font-weight:400;opacity:.8}.author-header-content .author-meta{z-index:10;flex-shrink:0;display:flex;align-items:center;margin:0 0 0 1px;font-size:1.2rem;font-weight:400;letter-spacing:.2px;text-transform:uppercase;white-space:nowrap}.author-header-content .social-link:first-of-type{padding-left:4px}.no-image .author-header-content .author-bio,.no-image .author-header-content .author-meta{color:#738a94;opacity:1}.author-social-link a{color:#fff;font-weight:600}.no-image .author-social-link a{color:#15171a}.author-social-link a:hover{opacity:1}.author-social-link{display:inline-block;margin:0;padding:6px 0}.author-location+.author-stats:before,.author-social-link+.author-social-link:before,.author-stats+.author-social-link:before{content:"\2022";display:inline-block;margin:0 12px;color:#fff;opacity:.6}.no-image .author-location+.author-stats:before,.no-image .author-social-link+.author-social-link:before,.no-image .author-stats+.author-social-link:before{color:#738a94}@media (max-width:700px){.author-location,.author-stats,.author-stats+.author-social-link:first-of-type:before{display:none}}@media (max-width:500px){.author-header{padding:10px 0 0}.no-image .author-header{padding-bottom:10px}.author-header-content{align-items:center;margin:16px 0 0}.site-header-content .author-profile-image{width:96px;height:96px}.author-header-content .author-bio{font-size:1.8rem;line-height:1.3em;letter-spacing:0;text-align:center}.author-header-content .author-meta{margin-top:8px}.author-location+.author-stats:before,.author-social-link+.author-social-link:before,.author-stats+.author-social-link:before{display:inline;margin:0 6px}}.error-content{padding:14vw 4vw 6vw}.site-nav-center{display:flex;justify-content:center;align-items:center;padding:10px 0;text-align:center}.site-nav-center .site-nav-logo{margin-right:0}.error-message{padding-bottom:10vw;border-bottom:1px solid #e3e9ed;text-align:center}.error-code{margin:0;color:#c5d2d9;font-size:12vw;line-height:1em;letter-spacing:-5px;opacity:.75}.error-description{margin:0;color:#738a94;font-size:3rem;line-height:1.3em;font-weight:400}.error-link{display:inline-block;margin-top:5px}@media (min-width:940px){.error-content .post-card{margin-bottom:0;padding-bottom:0;border-bottom:none}}@media (max-width:800px){.error-content{padding-top:24vw}.error-code{font-size:11.2rem}.error-message{padding-bottom:16vw}.error-description{margin:5px 0 0;font-size:1.8rem}}@media (max-width:500px){.error-content{padding-top:28vw}.error-message{padding-bottom:14vw}}.subscribe-success-message{position:fixed;top:0;right:0;left:0;z-index:9000;padding:20px 0;color:#fff;text-align:center;background:#a4d037;transition:all .35s cubic-bezier(.19,1,.22,1) .5s;transform:translateY(-175%)}.subscribe-success .subscribe-success-message{visibility:visible;transform:translateY(0)}.subscribe-success-message.close{visibility:hidden;transition:all 1.35s cubic-bezier(.19,1,.22,1);transform:translateY(-175%)}.subscribe-close-overlay{position:absolute;top:0;right:0;bottom:0;left:0;display:block}.subscribe-close-button{position:absolute;top:16px;right:20px;z-index:2000;display:block;width:40px;height:40px}.subscribe-close-button:before{transform:rotate(45deg)}.subscribe-close-button:after,.subscribe-close-button:before{content:"";position:absolute;top:20px;right:4px;display:block;width:32px;height:1px;background:#fff;opacity:.8}.subscribe-close-button:after{transform:rotate(-45deg)}.subscribe-close-button:hover,.subscribe-close-overlay:hover{cursor:default}.subscribe-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:2000;display:flex;justify-content:center;align-items:center;background:rgba(9,10,11,.97);opacity:0;transition:opacity .2s ease-in;pointer-events:none}.subscribe-overlay:target{z-index:2001;opacity:1;pointer-events:auto}.subscribe-overlay-content{position:relative;margin:0 0 5vw;padding:4vw;color:#fff;text-align:center}.subscribe-overlay .subscribe-form{border:none;color:#fff;background:none}.subscribe-overlay-logo{position:fixed;top:23px;left:30px;height:30px}.subscribe-overlay-title{display:inline-block;margin:0 0 10px;font-size:5.2rem;line-height:1.15em}.subscribe-overlay-description{margin:0 auto 50px;max-width:650px;color:#fff;font-family:Georgia,serif;font-size:2.4rem;line-height:1.3em;font-weight:300;opacity:.8}.subscribe-overlay form{display:flex;justify-content:center;align-items:center;margin:0 auto;max-width:540px}.subscribe-overlay .form-group{flex-grow:1}.subscribe-overlay .subscribe-email{display:block;padding:14px 20px;width:100%;border:none;color:#738a94;font-size:2rem;line-height:1em;font-weight:400;letter-spacing:.5px;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;border-radius:8px;transition:border-color .15s linear;-webkit-appearance:none}.subscribe-email:focus{outline:0;border-color:#becdd5}.subscribe-overlay button{display:inline-block;margin:0 0 0 15px;padding:0 25px;height:52px;outline:none;color:#fff;font-size:1.7rem;line-height:38px;font-weight:400;text-align:center;background:linear-gradient(#4fb7f0,#29a0e0 60%,#29a0e0 90%,#36a6e2);border-radius:8px;-webkit-font-smoothing:subpixel-antialiased}.subscribe-overlay button:active,.subscribe-overlay button:focus{background:#209cdf}.subscribe-overlay .loading .button-loader{top:5px}@media (max-width:500px){.subscribe-overlay button{margin:12px 0 0}}.site-footer{position:relative;padding-top:20px;padding-bottom:60px;color:#fff;background:#090a0b}.site-footer-content{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;font-size:1.3rem}.site-footer-content,.site-footer-content a{color:hsla(0,0%,100%,.7)}.site-footer-content a:hover{color:#fff;text-decoration:none}.site-footer-nav{display:flex}.site-footer-nav a{position:relative;margin-left:20px}.site-footer-nav a:before{content:"";position:absolute;top:11px;left:-11px;display:block;width:2px;height:2px;background:#fff;border-radius:100%}.site-footer-nav a:first-of-type:before{display:none}@media (max-width:650px){.site-footer-content{flex-direction:column}.site-footer-nav a:first-child{margin-left:0}}@media (prefers-color-scheme:dark){body{color:hsla(0,0%,100%,.75);background:#191b1f}img{opacity:.9}.site-header-background:before{background:rgba(0,0,0,.6)}.post-feed{background:#191b1f}.post-card,.post-card:hover{border-bottom-color:#2b2f36}.author-profile-image{background:#191b1f}.post-card-byline-content a{color:hsla(0,0%,100%,.75)}.post-card-byline-content a:hover{color:#fff}.post-card-image{background:#191b1f}.post-card-title{color:hsla(0,0%,100%,.85)}.post-card-excerpt{color:#92a3ab}.author-avatar,.static-avatar{border-color:#191b1f}.page-template .site-main,.post-full-content,.post-template .site-main,.site-main{background:#191b1f}.post-full-title{color:hsla(0,0%,100%,.9)}.post-full-custom-excerpt{color:#92a3ab}.post-full-image{background-color:#2b2f36}.post-full-byline{border-top-color:#3b404a}.post-full-byline-meta h4 a{color:hsla(0,0%,100%,.75)}.post-full-byline-meta h4 a:hover{color:#fff}.author-list-item .author-card{background:#22252a;box-shadow:0 12px 26px rgba(0,0,0,.4)}.author-list-item .author-card:before{border-top-color:#22252a}.no-image .author-social-link a{color:hsla(0,0%,100%,.75)}.post-full-content h1,.post-full-content h2,.post-full-content h3,.post-full-content h4,.post-full-content h6{color:hsla(0,0%,100%,.9)}.post-full-content a{color:#fff;box-shadow:inset 0 -1px 0 #fff}.post-full-content em,.post-full-content strong{color:#fff}.post-full-content code{color:#fff;background:#000}hr{border-top-color:#2b2f36}.post-full-content figcaption{color:hsla(0,0%,100%,.6)}.post-full-content table td:first-child{background-image:linear-gradient(90deg,#191b1f 50%,rgba(25,27,31,0))}.post-full-content table td:last-child{background-image:linear-gradient(270deg,#191b1f 50%,rgba(25,27,31,0))}.post-full-content table th{color:hsla(0,0%,100%,.85);background-color:#2b2f36}.post-full-content table td,.post-full-content table th{border:1px solid #2b2f36}.post-full-content .kg-bookmark-container,.post-full-content .kg-bookmark-container:hover{color:hsla(0,0%,100%,.75);box-shadow:0 0 1px hsla(0,0%,100%,.9)}.kg-bookmark-title{color:#fff}.kg-bookmark-description,.kg-bookmark-metadata{color:hsla(0,0%,100%,.75)}.site-archive-header .no-image{color:hsla(0,0%,100%,.9);background:#191b1f}.site-archive-header .no-image .site-header-content{border-bottom-color:#3b404a}.site-header-content .author-profile-image{box-shadow:0 0 0 6px hsla(0,0%,100%,.04)}.subscribe-form{border:none;background:linear-gradient(#0b0c0e,#121417)}.subscribe-form-title{color:hsla(0,0%,100%,.9)}.subscribe-form p{color:hsla(0,0%,100%,.7)}.subscribe-email{border-color:#272a30;color:hsla(0,0%,100%,.9);background:#202228}.subscribe-email:focus{border-color:#525866}.subscribe-form button{opacity:.9}.subscribe-form .error .message-error,.subscribe-form .invalid .message-error{color:#ec694b}.subscribe-form .success .message-success{color:#acd053}} 2 | /*# sourceMappingURL=screen.css.map */ -------------------------------------------------------------------------------- /blog/about.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: About 3 | type: page 4 | --- 5 | 6 | This is an example implementation of [Casper](https://demo.ghost.io) (the default theme for [Ghost](https://ghost.org/de/)) in [Vuepress](https://vuepress.vuejs.org/). Content is generated with [fillerama](http://fillerama.io/), images by [picsum](https://picsum.photos). 7 | 8 | > To use this theme with [Vuepress](https://vuepress.vuejs.org/) please have a look at the [Github Repository](https://github.com/alexander-heimbuch/vuepress-theme-casper). If you find bugs or want to propose changes please create an issue. 9 | 10 | -------------------------------------------------------------------------------- /blog/index.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexander-heimbuch/vuepress-theme-casper/e2f02b4b1c8c6d3573dba9a2680ad411bd5d3012/blog/index.md -------------------------------------------------------------------------------- /blog/media.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Media 3 | type: page 4 | --- 5 | 6 | ## Video Example 7 | 8 | 9 | 10 | ```javascript 11 |

Hello World

12 | ``` 13 | -------------------------------------------------------------------------------- /blog/posts/dexter/i-am-the-doctor.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Did I mention we have comfy chairs? 3 | image: https://picsum.photos/1920/1080/?random&date=2018-10-09 4 | publish: 2018-10-09 5 | type: post 6 | tags: 7 | - father christmas 8 | - simple 9 | categories: 10 | - dexter 11 | readingTime: 9 Minutes 12 | --- 13 | 14 | Stop talking, brain thinking. Hush. It's art! A statement on modern society, 'Oh Ain't Modern Society Awful?'! You've swallowed a planet! I am the Doctor, and you are the Daleks! Sorry, checking all the water in this area; there's an escaped fish. 15 | 16 | 17 | 18 | They're not aliens, they're Earth…liens! It's a fez. I wear a fez now. Fezes are cool. All I've got to do is pass as an ordinary human being. Simple. What could possibly go wrong? No, I'll fix it. I'm good at fixing rot. __Call me the Rotmeister.__ *No, I'm the Doctor.* Don't call me the Rotmeister. 19 | 20 | ## I'm the Doctor. Well, they call me the Doctor. I don't know why. I call me the Doctor too. I still don't know why. 21 | 22 | I am the Doctor, and you are the Daleks! You know how I sometimes have really brilliant ideas? All I've got to do is pass as an ordinary human being. Simple. What could possibly go wrong? All I've got to do is pass as an ordinary human being. Simple. What could possibly go wrong? 23 | 24 | 1. Aw, you're all Mr. Grumpy Face today. 25 | 2. I am the last of my species, and I know how that weighs on the heart so don't lie to me! 26 | 3. All I've got to do is pass as an ordinary human being. Simple. What could possibly go wrong? 27 | 28 | ### Father Christmas. Santa Claus. Or as I've always known him: Jeff. 29 | 30 | I'm nobody's taxi service; I'm not gonna be there to catch you every time you feel like jumping out of a spaceship. I'm the Doctor. Well, they call me the Doctor. I don't know why. I call me the Doctor too. I still don't know why. 31 | 32 | * Did I mention we have comfy chairs? 33 | * No… It's a thing; it's like a plan, but with more greatness. 34 | * I'm the Doctor, I'm worse than everyone's aunt. *catches himself* And that is not how I'm introducing myself. 35 | 36 | Heh-haa! Super squeaky bum time! They're not aliens, they're Earth…liens! The way I see it, every life is a pile of good things and bad things.…hey.…the good things don't always soften the bad things; but vice-versa the bad things don't necessarily spoil the good things and make them unimportant. 37 | 38 | You know when grown-ups tell you 'everything's going to be fine' and you think they're probably lying to make you feel better? All I've got to do is pass as an ordinary human being. Simple. What could possibly go wrong? 39 | 40 | I'm nobody's taxi service; I'm not gonna be there to catch you every time you feel like jumping out of a spaceship. No… It's a thing; it's like a plan, but with more greatness. Heh-haa! Super squeaky bum time! 41 | 42 | All I've got to do is pass as an ordinary human being. Simple. What could possibly go wrong? Did I mention we have comfy chairs? I am the last of my species, and I know how that weighs on the heart so don't lie to me! 43 | 44 | Heh-haa! Super squeaky bum time! You hit me with a cricket bat. You hit me with a cricket bat. You've swallowed a planet! 45 | 46 | It's art! A statement on modern society, 'Oh Ain't Modern Society Awful?'! No… It's a thing; it's like a plan, but with more greatness. Sorry, checking all the water in this area; there's an escaped fish. 47 | 48 | All I've got to do is pass as an ordinary human being. Simple. What could possibly go wrong? I'm the Doctor, I'm worse than everyone's aunt. *catches himself* And that is not how I'm introducing myself. 49 | 50 | I hate yogurt. It's just stuff with bits in. You know when grown-ups tell you 'everything's going to be fine' and you think they're probably lying to make you feel better? Sorry, checking all the water in this area; there's an escaped fish. 51 | 52 | No… It's a thing; it's like a plan, but with more greatness. Stop talking, brain thinking. Hush. You've swallowed a planet! You hit me with a cricket bat. Did I mention we have comfy chairs? 53 | 54 | Father Christmas. Santa Claus. Or as I've always known him: Jeff. You hate me; you want to kill me! Well, go on! Kill me! KILL ME! It's a fez. I wear a fez now. Fezes are cool. *Insistently* Bow ties are cool! Come on Amy, I'm a normal bloke, tell me what normal blokes do! 55 | 56 | The way I see it, every life is a pile of good things and bad things.…hey.…the good things don't always soften the bad things; but vice-versa the bad things don't necessarily spoil the good things and make them unimportant. The way I see it, every life is a pile of good things and bad things.…hey.…the good things don't always soften the bad things; but vice-versa the bad things don't necessarily spoil the good things and make them unimportant. 57 | -------------------------------------------------------------------------------- /blog/posts/dexter/nobodys-taxi-service.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: I'm nobody's taxi service 3 | image: https://picsum.photos/1920/1080/?random&date=2018-11-15 4 | publish: 2018-11-15 5 | type: post 6 | tags: 7 | - escaped fish 8 | - earthliens 9 | categories: 10 | - dexter 11 | readingTime: 9 Minutes 12 | author: 13 | link: /category/dexter 14 | name: Dexter 15 | gravatar: 205e460b479e2e5b48aec07710c08d50 16 | --- 17 | 18 | The way I see it, every life is a pile of good things and bad things.…hey.…the good things don't always soften the bad things; but vice-versa the bad things don't necessarily spoil the good things and make them unimportant. Sorry, checking all the water in this area; there's an escaped fish. 19 | 20 | 21 | 22 | You hate me; you want to kill me! Well, go on! Kill me! KILL ME! I hate yogurt. __It's just stuff with bits in.__ *You know how I sometimes have really brilliant ideas?* Saving the world with meals on wheels. 23 | 24 | ## They're not aliens, they're Earth…liens! 25 | 26 | Sorry, checking all the water in this area; there's an escaped fish. All I've got to do is pass as an ordinary human being. Simple. What could possibly go wrong? It's a fez. I wear a fez now. Fezes are cool. 27 | 28 | 1. It's a fez. I wear a fez now. Fezes are cool. 29 | 2. You know when grown-ups tell you 'everything's going to be fine' and you think they're probably lying to make you feel better? 30 | 3. No, I'll fix it. I'm good at fixing rot. Call me the Rotmeister. No, I'm the Doctor. Don't call me the Rotmeister. 31 | 32 | ### *Insistently* Bow ties are cool! Come on Amy, I'm a normal bloke, tell me what normal blokes do! 33 | 34 | Saving the world with meals on wheels. You've swallowed a planet! Aw, you're all Mr. Grumpy Face today. I am the Doctor, and you are the Daleks! Did I mention we have comfy chairs? 35 | 36 | * Stop talking, brain thinking. Hush. 37 | * I am the Doctor, and you are the Daleks! 38 | * You know when grown-ups tell you 'everything's going to be fine' and you think they're probably lying to make you feel better? 39 | 40 | You've swallowed a planet! You know when grown-ups tell you 'everything's going to be fine' and you think they're probably lying to make you feel better? I'm the Doctor, I'm worse than everyone's aunt. *catches himself* And that is not how I'm introducing myself. 41 | 42 | I hate yogurt. It's just stuff with bits in. Saving the world with meals on wheels. They're not aliens, they're Earth…liens! I am the Doctor, and you are the Daleks! 43 | 44 | You know how I sometimes have really brilliant ideas? I'm the Doctor, I'm worse than everyone's aunt. *catches himself* And that is not how I'm introducing myself. No, I'll fix it. I'm good at fixing rot. Call me the Rotmeister. No, I'm the Doctor. Don't call me the Rotmeister. 45 | 46 | You hit me with a cricket bat. You hit me with a cricket bat. You've swallowed a planet! Saving the world with meals on wheels. Saving the world with meals on wheels. 47 | 48 | Sorry, checking all the water in this area; there's an escaped fish. It's a fez. I wear a fez now. Fezes are cool. Father Christmas. Santa Claus. Or as I've always known him: Jeff. It's a fez. I wear a fez now. Fezes are cool. 49 | 50 | Heh-haa! Super squeaky bum time! Stop talking, brain thinking. Hush. It's a fez. I wear a fez now. Fezes are cool. Annihilate? No. No violence. I won't stand for it. Not now, not ever, do you understand me?! I'm the Doctor, the Oncoming Storm - and you basically meant beat them in a football match, didn't you? 51 | 52 | Father Christmas. Santa Claus. Or as I've always known him: Jeff. You know how I sometimes have really brilliant ideas? You've swallowed a planet! Heh-haa! Super squeaky bum time! 53 | 54 | I'm nobody's taxi service; I'm not gonna be there to catch you every time you feel like jumping out of a spaceship. Father Christmas. Santa Claus. Or as I've always known him: Jeff. It's art! A statement on modern society, 'Oh Ain't Modern Society Awful?'! 55 | 56 | All I've got to do is pass as an ordinary human being. Simple. What could possibly go wrong? It's a fez. I wear a fez now. Fezes are cool. You know when grown-ups tell you 'everything's going to be fine' and you think they're probably lying to make you feel better? 57 | 58 | I am the Doctor, and you are the Daleks! You know when grown-ups tell you 'everything's going to be fine' and you think they're probably lying to make you feel better? I'm nobody's taxi service; I'm not gonna be there to catch you every time you feel like jumping out of a spaceship. 59 | 60 | You hit me with a cricket bat. You hit me with a cricket bat. It's art! A statement on modern society, 'Oh Ain't Modern Society Awful?'! They're not aliens, they're Earth…liens! Sorry, checking all the water in this area; there's an escaped fish. 61 | -------------------------------------------------------------------------------- /blog/posts/dexter/really-brilliant-ideas.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: I hate yogurt. It's just stuff with bits in. 3 | image: https://picsum.photos/1920/1080/?random&date=2018-06-06 4 | publish: 2018-06-06 5 | type: post 6 | tags: 7 | - kill me 8 | - no violence 9 | categories: 10 | - dexter 11 | readingTime: 12 Minutes 12 | --- 13 | 14 | No, I'll fix it. I'm good at fixing rot. Call me the Rotmeister. No, I'm the Doctor. Don't call me the Rotmeister. I'm nobody's taxi service;I'm not gonna be there to catch you every time you feel like jumping out of a spaceship. 15 | 16 | 17 | 18 | They're not aliens, they're Earth…liens! you! No… It's a thing; it's like a plan, but with more greatness. I hate yogurt. It's just stuff with bits in. __It's a fez.__ *I wear a fez now.* Fezes are cool. 19 | 20 | ## You hate me; you want to kill me! Well, go on! Kill me! KILL ME! 21 | 22 | Father Christmas. Santa Claus. Or as I've always known him: Jeff. Stop talking, brain thinking. Hush. You hate me; you want to kill me! Well, go on! Kill me! KILL ME! No… It's a thing; it's like a plan, but with more greatness. 23 | 24 | 1. I am the last of my species, and I know how that weighs on the heart so don't lie to me! 25 | 2. Annihilate? No. No violence. I won't stand for it. Not now, not ever, do you understand me?! I'm the Doctor, the Oncoming Storm - and you basically meant beat them in a football match, didn't you? 26 | 3. Aw, you're all Mr. Grumpy Face today. 27 | 28 | ### You know how I sometimes have really brilliant ideas? 29 | 30 | You know how I sometimes have really brilliant ideas? Aw, you're all Mr. Grumpy Face today. Sorry, checking all the water in this area; there's an escaped fish. Heh-haa! Super squeaky bum time! No, I'll fix it. I'm good at fixing rot. Call me the Rotmeister. No, I'm the Doctor. Don't call me the Rotmeister. 31 | 32 | * It's art! A statement on modern society, 'Oh Ain't Modern Society Awful?'! 33 | * It's a fez. I wear a fez now. Fezes are cool. 34 | * I am the Doctor, and you are the Daleks! 35 | 36 | I am the Doctor, and you are the Daleks! The way I see it, every life is a pile of good things and bad things.…hey.…the good things don't always soften the bad things; but vice-versa the bad things don't necessarily spoil the good things and make them unimportant. 37 | 38 | No… It's a thing; it's like a plan, but with more greatness. You hate me; you want to kill me! Well, go on! Kill me! KILL ME! Heh-haa! Super squeaky bum time! It's art! A statement on modern society, 'Oh Ain't Modern Society Awful?'! 39 | 40 | Sorry, checking all the water in this area; there's an escaped fish. I am the last of my species, and I know how that weighs on the heart so don't lie to me! Sorry, checking all the water in this area; there's an escaped fish. 41 | 42 | You know when grown-ups tell you 'everything's going to be fine' and you think they're probably lying to make you feel better? I'm the Doctor. Well, they call me the Doctor. I don't know why. I call me the Doctor too. I still don't know why. 43 | 44 | Stop talking, brain thinking. Hush. No… It's a thing; it's like a plan, but with more greatness. You've swallowed a planet! Sorry, checking all the water in this area; there's an escaped fish. 45 | 46 | Heh-haa! Super squeaky bum time! Stop talking, brain thinking. Hush. I'm the Doctor. Well, they call me the Doctor. I don't know why. I call me the Doctor too. I still don't know why. Father Christmas. Santa Claus. Or as I've always known him: Jeff. 47 | 48 | You hit me with a cricket bat. It's a fez. I wear a fez now. Fezes are cool. No, I'll fix it. I'm good at fixing rot. Call me the Rotmeister. No, I'm the Doctor. Don't call me the Rotmeister. I'm the Doctor, I'm worse than everyone's aunt. *catches himself* And that is not how I'm introducing myself. 49 | 50 | It's a fez. I wear a fez now. Fezes are cool. Heh-haa! Super squeaky bum time! *Insistently* Bow ties are cool! Come on Amy, I'm a normal bloke, tell me what normal blokes do! It's a fez. I wear a fez now. Fezes are cool. 51 | 52 | Sorry, checking all the water in this area; there's an escaped fish. Heh-haa! Super squeaky bum time! Saving the world with meals on wheels. Sorry, checking all the water in this area; there's an escaped fish. 53 | 54 | Father Christmas. Santa Claus. Or as I've always known him: Jeff. Heh-haa! Super squeaky bum time! They're not aliens, they're Earth…liens! You know how I sometimes have really brilliant ideas? Stop talking, brain thinking. Hush. 55 | 56 | Father Christmas. Santa Claus. Or as I've always known him: Jeff. Father Christmas. Santa Claus. Or as I've always known him: Jeff. Aw, you're all Mr. Grumpy Face today. The way I see it, every life is a pile of good things and bad things.…hey.…the good things don't always soften the bad things; but vice-versa the bad things don't necessarily spoil the good things and make them unimportant. 57 | -------------------------------------------------------------------------------- /blog/posts/futurama/and-then-we-woke-up.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: And when we woke up, we had these bodies. 3 | image: https://picsum.photos/1920/1080/?random&date=2018-04-15 4 | publish: 2018-04-15 5 | type: post 6 | tags: 7 | - toe-tappingly tragic 8 | - thanks to the Internet 9 | categories: 10 | - futurama 11 | readingTime: 10 Minutes 12 | --- 13 | 14 | Does anybody else feel jealous and aroused and worried? Oh dear! She's stuck in an infinite loop, and he's an idiot! Well, that's love for you. Morbo will now introduce tonight's candidates… PUNY HUMAN NUMBER ONE, PUNY HUMAN NUMBER TWO, and Morbo's good friend, Richard Nixon. 15 | 16 | 17 | 18 | Goodbye, cruel world. __Goodbye, cruel lamp.__ *Goodbye, cruel velvet drapes, lined with what would appear to be some sort of cruel muslin and the cute little pom-pom curtain pull cords.* Cruel though they may be… Now what? 19 | 20 | ## Quite possible. We live long and are celebrated poopers. 21 | 22 | Incidentally, you have a dime up your nose. OK, this has gotta stop. I'm going to remind Fry of his humanity the way only a woman can. You mean while I'm sleeping in it? Ok, we'll go deliver this crate like professionals, and then we'll go ride the bumper cars. 23 | 24 | 1. Oh, I always feared he might run off like this. Why, why, why didn't I break his legs? 25 | 2. I'll get my kit! 26 | 3. Fry, we have a crate to deliver. 27 | 28 | ### Goodbye, cruel world. Goodbye, cruel lamp. Goodbye, cruel velvet drapes, lined with what would appear to be some sort of cruel muslin and the cute little pom-pom curtain pull cords. Cruel though they may be… 29 | 30 | There's no part of that sentence I didn't like! When the lights go out, it's nobody's business what goes on between two consenting adults. Good news, everyone! I've taught the toaster to feel love! You'll have all the Slurm you can drink when you're partying with Slurms McKenzie! 31 | 32 | * There's one way and only one way to determine if an animal is intelligent. Dissect its brain! 33 | * I love you, buddy! 34 | * Why am I sticky and naked? Did I miss something fun? 35 | 36 | Do a flip! But I've never been to the moon! There's no part of that sentence I didn't like! And until then, I can never die? 37 | 38 | Are you crazy? I can't swallow that. I didn't ask for a completely reasonable excuse! I asked you to get busy! Anyhoo, your net-suits will allow you to experience Fry's worm infested bowels as if you were actually wriggling through them. 39 | 40 | I didn't ask for a completely reasonable excuse! I asked you to get busy! Ugh, it's filthy! Why not create a National Endowment for Strip Clubs while we're at it? Fry, we have a crate to deliver. Oh, all right, I am. But if anything happens to me, tell them I died robbing some old man. 41 | 42 | I'm a thing. Hey, what kinda party is this? There's no booze and only one hooker. Oh Leela! You're the only person I could turn to; you're the only person who ever loved me. Bender?! You stole the atom. 43 | 44 | No! The kind with looting and maybe starting a few fires! Oh, you're a dollar naughtier than most. This is the worst part. The calm before the battle. You'll have all the Slurm you can drink when you're partying with Slurms McKenzie! 45 | 46 | Now Fry, it's been a few years since medical school, so remind me. Disemboweling in your species: fatal or non-fatal? Good news, everyone! There's a report on TV with some very bad news! OK, this has gotta stop. I'm going to remind Fry of his humanity the way only a woman can. 47 | 48 | OK, this has gotta stop. I'm going to remind Fry of his humanity the way only a woman can. Ok, we'll go deliver this crate like professionals, and then we'll go ride the bumper cars. When the lights go out, it's nobody's business what goes on between two consenting adults. 49 | 50 | Oh Leela! You're the only person I could turn to; you're the only person who ever loved me. I love this planet! I've got wealth, fame, and access to the depths of sleaze that those things bring. That's not soon enough! 51 | 52 | Who are you, my warranty?! Ummm…to eBay? OK, this has gotta stop. I'm going to remind Fry of his humanity the way only a woman can. We need rest. The spirit is willing, but the flesh is spongy and bruised. 53 | 54 | Five hours? Aw, man! Couldn't you just get me the death penalty? Also Zoidberg. Bender, this is Fry's decision… and he made it wrong. So it's time for us to interfere in his life. Who are those horrible orange men? 55 | 56 | I'll get my kit! Incidentally, you have a dime up your nose. Too much work. Let's burn it and say we dumped it in the sewer. Can I use the gun? You'll have all the Slurm you can drink when you're partying with Slurms McKenzie! 57 | -------------------------------------------------------------------------------- /blog/posts/futurama/bender-cooking.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Bender, I didn't know you liked cooking. That's so cute. 3 | image: https://picsum.photos/1920/1080/?random&date=2018-06-01 4 | publish: 2018-06-01 5 | type: post 6 | tags: 7 | - Shut up and take my money 8 | - Bender 9 | categories: 10 | - futurama 11 | readingTime: 4 Minutes 12 | --- 13 | 14 | I daresay that Fry has discovered the smelliest object in the known universe! In your time, yes, but nowadays shut up! Besides, these are adult stemcells, harvested from perfectly healthy adults whom I killed for their stemcells. 15 | 16 | 17 | 18 | You'll have all the Slurm you can drink when you're partying with Slurms McKenzie! __You are the last hope of the universe.__ *I feel like I was mauled by Jesus.* Whoa a real live robot; or is that some kind of cheesy New Year's costume? 19 | 20 | ## Well, thanks to the Internet, I'm now bored with sex. Is there a place on the web that panders to my lust for violence? 21 | 22 | It's a T. It goes "tuh". The alien mothership is in orbit here. If we can hit that bullseye, the rest of the dominoes will fall like a house of cards. Checkmate. Say what? You can crush me but you can't crush my spirit! 23 | 24 | 1. I'm just glad my fat, ugly mama isn't alive to see this day. 25 | 2. Oh yeah, good luck with that. 26 | 3. Leela's gonna kill me. 27 | 28 | ### It's toe-tappingly tragic! 29 | 30 | Oh yeah, good luck with that. You're going to do his laundry? You wouldn't. Ask anyway! Can I use the gun? And so we say goodbye to our beloved pet, Nibbler, who's gone to a place where I, too, hope one day to go. The toilet. 31 | 32 | * Yes, I saw. You were doing well, until everyone died. 33 | * Tell her you just want to talk. It has nothing to do with mating. 34 | * Oh, all right, I am. But if anything happens to me, tell them I died robbing some old man. 35 | 36 | Five hours? Aw, man! Couldn't you just get me the death penalty? You wouldn't. Ask anyway! Is that a cooking show? Good news, everyone! I've taught the toaster to feel love! So I really am important? How I feel when I'm drunk is correct? 37 | 38 | Ah, the 'Breakfast Club' soundtrack! I can't wait til I'm old enough to feel ways about stuff! Bender, hurry! This fuel's expensive! Also, we're dying! We don't have a brig. I never loved you. Is today's hectic lifestyle making you tense and impatient? 39 | 40 | We don't have a brig. And I'd do it again! And perhaps a third time! But that would be it. What are their names? But I know you in the future. I cleaned your poop. Bender, we're trying our best. Dr. Zoidberg, that doesn't make sense. But, okay! 41 | 42 | Why did you bring us here? I just told you! You've killed me! Ask her how her day was. It's toe-tappingly tragic! 43 | 44 | How much did you make me? No! The cat shelter's on to me. Oh, I always feared he might run off like this. Why, why, why didn't I break his legs? Fetal stemcells, aren't those controversial? 45 | 46 | You know, I was God once. Yes, except the Dave Matthews Band doesn't rock. Now, now. Perfectly symmetrical violence never solved anything. I was all of history's great robot actors - Acting Unit 0.8; Thespomat; David Duchovny! 47 | 48 | Fetal stemcells, aren't those controversial? And from now on you're all named Bender Jr. Well, thanks to the Internet, I'm now bored with sex. Is there a place on the web that panders to my lust for violence? 49 | 50 | I've got to find a way to escape the horrible ravages of youth. Suddenly, I'm going to the bathroom like clockwork, every three hours. And those jerks at Social Security stopped sending me checks. Now 'I'' have to pay ''them'! That's right, baby. I ain't your loverboy Flexo, the guy you love so much. You even love anyone pretending to be him! 51 | 52 | And from now on you're all named Bender Jr. No! The cat shelter's on to me. The key to victory is discipline, and that means a well made bed. You will practice until you can make your bed in your sleep. 53 | 54 | Oh yeah, good luck with that. No! Don't jump! And why did 'I' have to take a cab? Bender, we're trying our best. Tell her you just want to talk. It has nothing to do with mating. 55 | 56 | You guys realize you live in a sewer, right? Hello Morbo, how's the family? I'm sorry, guys. I never meant to hurt you. Just to destroy everything you ever believed in. Isn't it true that you have been paid for your testimony? 57 | -------------------------------------------------------------------------------- /blog/posts/futurama/good-news-everybody.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Good news, everyone! There's a report on TV with some very bad news! 3 | image: https://picsum.photos/1920/1080/?random&date=2018-07-19 4 | publish: 2018-07-19 5 | type: post 6 | tags: 7 | - Shut up and take my money 8 | - Nixon 9 | categories: 10 | - futurama 11 | readingTime: 5 Minutes 12 | --- 13 | 14 | In our darkest hour, we can stand erect, with proud upthrust bosoms. And until then, I can never die? Ok, we'll go deliver this crate like professionals, and then we'll go ride the bumper cars. It must be wonderful. 15 | 16 | 17 | 18 | No, she'll probably make me do it. Bender, we're trying our best. I've been there. My folks were always on me to groom myself and wear underpants. __What am I, the pope?__ *Robot 1-X, save my friends!* And Zoidberg! 19 | 20 | ## Bender, quit destroying the universe! 21 | 22 | Of all the friends I've had… you're the first. This is the worst kind of discrimination: the kind against me! Leela's gonna kill me. Yep, I remember. They came in last at the Olympics, then retired to promote alcoholic beverages! 23 | 24 | 1. I didn't ask for a completely reasonable excuse! I asked you to get busy! 25 | 2. You, minion. Lift my arm. AFTER HIM! 26 | 3. What are you hacking off? Is it my torso?! 'It is!' My precious torso! 27 | 28 | ### Shut up and take my money! 29 | 30 | But, like most politicians, he promised more than he could deliver. There's no part of that sentence I didn't like! No! The kind with looting and maybe starting a few fires! There, now he's trapped in a book I wrote: a crummy world of plot holes and spelling errors! 31 | 32 | * Our love isn't any different from yours, except it's hotter, because I'm involved. 33 | * Who am I making this out to? 34 | * Good man. Nixon's pro-war and pro-family. 35 | 36 | We can't compete with Mom! Her company is big and evil! Ours is small and neutral! I'm sorry, guys. I never meant to hurt you. Just to destroy everything you ever believed in. I've got to find a way to escape the horrible ravages of youth. Suddenly, I'm going to the bathroom like clockwork, every three hours. And those jerks at Social Security stopped sending me checks. Now 'I'' have to pay ''them'! 37 | 38 | So, how 'bout them Knicks? Daylight and everything. Pansy. And when we woke up, we had these bodies. Do a flip! 39 | 40 | We'll need to have a look inside you with this camera. And when we woke up, we had these bodies. Bender! Ship! Stop bickering or I'm going to come back there and change your opinions manually! No. We're on the top. 41 | 42 | This is the worst kind of discrimination: the kind against me! Ah, the 'Breakfast Club' soundtrack! I can't wait til I'm old enough to feel ways about stuff! Yes, if you make it look like an electrical fire. When you do things right, people won't be sure you've done anything at all. 43 | 44 | What kind of a father would I be if I said no? Now, now. Perfectly symmetrical violence never solved anything. And then the battle's not so bad? I guess because my parents keep telling me to be more ladylike. As though! 45 | 46 | I decline the title of Iron Cook and accept the lesser title of Zinc Saucier, which I just made up. Uhh… also, comes with double prize money. Fatal. And from now on you're all named Bender Jr. Eeeee! Now say "nuclear wessels"! 47 | 48 | Oh dear! She's stuck in an infinite loop, and he's an idiot! Well, that's love for you. Bender, quit destroying the universe! Actually, that's still true. They're like sex, except I'm having them! It's okay, Bender. I like cooking too. 49 | 50 | But I know you in the future. I cleaned your poop. Okay, I like a challenge. Why am I sticky and naked? Did I miss something fun? Fry! Stay back! He's too powerful! 51 | 52 | Yeah. Give a little credit to our public schools. Oh, you're a dollar naughtier than most. Check it out, y'all. Everyone who was invited is here. Tell her she looks thin. Bite my shiny metal ass. 53 | 54 | Of all the friends I've had… you're the first. Then throw her in the laundry room, which will hereafter be referred to as "the brig". I just told you! You've killed me! You, a bobsleder!? That I'd like to see! 55 | 56 | Hi, I'm a naughty nurse, and I really need someone to talk to. $9.95 a minute. Morbo can't understand his teleprompter because he forgot how you say that letter that's shaped like a man wearing a hat. Have you ever tried just turning off the TV, sitting down with your children, and hitting them? 57 | -------------------------------------------------------------------------------- /blog/posts/futurama/leela-is-gonna-kill-me.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Leela's gonna kill me. 3 | image: https://picsum.photos/1920/1080/?random&date=2018-05-13 4 | publish: 2018-05-13 5 | type: post 6 | tags: 7 | - Leela 8 | - Breakfast Club 9 | categories: 10 | - futurama 11 | readingTime: 4 Minutes 12 | --- 13 | 14 | When will that be? Kif might! Whoa a real live robot; or is that some kind of cheesy New Year's costume? Okay, I like a challenge. I was having the most wonderful dream. Except you were there, and you were there, and you were there! 15 | 16 | 17 | 18 | That's right, baby. I ain't your loverboy Flexo, the guy you love so much. __You even love anyone pretending to be him!__ *Ah, the 'Breakfast Club' soundtrack!* I can't wait til I'm old enough to feel ways about stuff! 19 | 20 | ## Actually, that's still true. 21 | 22 | Ok, we'll go deliver this crate like professionals, and then we'll go ride the bumper cars. Can I use the gun? Yeah, and if you were the pope they'd be all, "Straighten your pope hat." And "Put on your good vestments." 23 | 24 | 1. I don't want to be rescued. 25 | 2. A true inspiration for the children. 26 | 3. Then throw her in the laundry room, which will hereafter be referred to as "the brig". 27 | 28 | ### You're going back for the Countess, aren't you? 29 | 30 | Why would I want to know that? Oh no! The professor will hit me! But if Zoidberg 'fixes' it… then perhaps gifts! Calculon is gonna kill us and it's all everybody else's fault! Oh no! The professor will hit me! But if Zoidberg 'fixes' it… then perhaps gifts! 31 | 32 | * That's right, baby. I ain't your loverboy Flexo, the guy you love so much. You even love anyone pretending to be him! 33 | * My fellow Earthicans, as I have explained in my book 'Earth in the Balance'', and the much more popular ''Harry Potter and the Balance of Earth', we need to defend our planet against pollution. Also dark wizards. 34 | * Oh, how I wish I could believe or understand that! There's only one reasonable course of action now: kill Flexo! 35 | 36 | You, a bobsleder!? That I'd like to see! I feel like I was mauled by Jesus. Why would a robot need to drink? With a warning label this big, you know they gotta be fun! 37 | 38 | Hello Morbo, how's the family? Bender! Ship! Stop bickering or I'm going to come back there and change your opinions manually! Noooooo! You won't have time for sleeping, soldier, not with all the bed making you'll be doing. 39 | 40 | Of all the friends I've had… you're the first. Would you censor the Venus de Venus just because you can see her spewers? When will that be? But, like most politicians, he promised more than he could deliver. 41 | 42 | Morbo will now introduce tonight's candidates… PUNY HUMAN NUMBER ONE, PUNY HUMAN NUMBER TWO, and Morbo's good friend, Richard Nixon. I suppose I could part with 'one' and still be feared… 43 | 44 | Who are you, my warranty?! Does anybody else feel jealous and aroused and worried? They're like sex, except I'm having them! I'll get my kit! For example, if you killed your grandfather, you'd cease to exist! 45 | 46 | Take me to your leader! Ven ve voke up, ve had zese wodies. No! I want to live! There are still too many things I don't own! Of all the friends I've had… you're the first. Why did you bring us here? 47 | 48 | Nay, I respect and admire Harold Zoid too much to beat him to death with his own Oscar. Then we'll go with that data file! You lived before you met me?! We're rescuing ya. 49 | 50 | Yes, if you make it look like an electrical fire. When you do things right, people won't be sure you've done anything at all. My fellow Earthicans, as I have explained in my book 'Earth in the Balance'', and the much more popular ''Harry Potter and the Balance of Earth', we need to defend our planet against pollution. Also dark wizards. 51 | 52 | No argument here. Yeah, lots of people did. Shinier than yours, meatbag. Shut up and take my money! Hey, whatcha watching? 53 | 54 | You're going back for the Countess, aren't you? So, how 'bout them Knicks? Oh, but you can. But you may have to metaphorically make a deal with the devil. And by "devil", I mean Robot Devil. And by "metaphorically", I mean get your coat. 55 | 56 | You wouldn't. Ask anyway! And I'd do it again! And perhaps a third time! But that would be it. That could be 'my' beautiful soul sitting naked on a couch. If I could just learn to play this stupid thing. 57 | -------------------------------------------------------------------------------- /blog/posts/futurama/when-will-that-be.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: When will that be? 3 | image: https://picsum.photos/1920/1080/?random&date=2018-08-20 4 | publish: 2018-08-20 5 | type: post 6 | tags: 7 | - Metal Ass 8 | - Bender 9 | categories: 10 | - futurama 11 | readingTime: 3 Minutes 12 | --- 13 | 14 | This is the worst kind of discrimination: the kind against me! A sexy mistake. Look, last night was a mistake. And when we woke up, we had these bodies. No, I'm Santa Claus! Anyone who laughs is a communist! 15 | 16 | 17 | 18 | We'll need to have a look inside you with this camera. __Also Zoidberg.__ *Is that a cooking show?* Fry, you can't just sit here in the dark listening to classical music. 19 | 20 | ## Bender, I didn't know you liked cooking. That's so cute. 21 | 22 | Alright, let's mafia things up a bit. Joey, burn down the ship. Clamps, burn down the crew. Oh, but you can. But you may have to metaphorically make a deal with the devil. And by "devil", I mean Robot Devil. And by "metaphorically", I mean get your coat. 23 | 24 | 1. What kind of a father would I be if I said no? 25 | 2. Now, now. Perfectly symmetrical violence never solved anything. 26 | 3. Well, then good news! It's a suppository. 27 | 28 | ### Bite my shiny metal ass. 29 | 30 | I can explain. It's very valuable. OK, if everyone's finished being stupid. Fetal stemcells, aren't those controversial? That could be 'my' beautiful soul sitting naked on a couch. If I could just learn to play this stupid thing. 31 | 32 | * Shut up and get to the point! 33 | * You, a bobsleder!? That I'd like to see! 34 | * What are their names? 35 | 36 | You are the last hope of the universe. Who's brave enough to fly into something we all keep calling a death sphere? In your time, yes, but nowadays shut up! Besides, these are adult stemcells, harvested from perfectly healthy adults whom I killed for their stemcells. 37 | 38 | Now Fry, it's been a few years since medical school, so remind me. Disemboweling in your species: fatal or non-fatal? Look, last night was a mistake. Bender, this is Fry's decision… and he made it wrong. So it's time for us to interfere in his life. 39 | 40 | Fetal stemcells, aren't those controversial? It doesn't look so shiny to me. We'll need to have a look inside you with this camera. Good news, everyone! There's a report on TV with some very bad news! Pansy. 41 | 42 | No! Don't jump! So I really am important? How I feel when I'm drunk is correct? No, of course not. It was… uh… porno. Yeah, that's it. Or a guy who burns down a bar for the insurance money! 43 | 44 | You'll have all the Slurm you can drink when you're partying with Slurms McKenzie! Anyone who laughs is a communist! Why yes! Thanks for noticing. Ugh, it's filthy! Why not create a National Endowment for Strip Clubs while we're at it? 45 | 46 | I usually try to keep my sadness pent up inside where it can fester quietly as a mental illness. With gusto. Soothe us with sweet lies. Bender, hurry! This fuel's expensive! Also, we're dying! 47 | 48 | Then we'll go with that data file! We'll go deliver this crate like professionals, and then we'll go home. Tell her you just want to talk. It has nothing to do with mating. When I was first asked to make a film about my nephew, Hubert Farnsworth, I thought "Why should I?" Then later, Leela made the film. But if I did make it, you can bet there would have been more topless women on motorcycles. Roll film! 49 | 50 | Ven ve voke up, ve had zese wodies. Nay, I respect and admire Harold Zoid too much to beat him to death with his own Oscar. I saw you with those two "ladies of the evening" at Elzars. Explain that. Son, as your lawyer, I declare y'all are in a 12-piece bucket o' trouble. But I done struck you a deal: Five hours of community service cleanin' up that ol' mess you caused. 51 | 52 | And yet you haven't said what I told you to say! How can any of us trust you? Dear God, they'll be killed on our doorstep! And there's no trash pickup until January 3rd. Is that a cooking show? Yes! In your face, Gandhi! 53 | 54 | Hey, you add a one and two zeros to that or we walk! Or a guy who burns down a bar for the insurance money! Also Zoidberg. Large bet on myself in round one. Bender, hurry! This fuel's expensive! Also, we're dying! 55 | 56 | They're like sex, except I'm having them! You are the last hope of the universe. This opera's as lousy as it is brilliant! Your lyrics lack subtlety. You can't just have your characters announce how they feel. That makes me feel angry! 57 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vuepress-theme-casper", 3 | "version": "3.0.1", 4 | "description": "Ghosts Casper Theme for VuePress", 5 | "main": "blog/.vuepress/theme/index.js", 6 | "repository": "git@github.com:alexander-heimbuch/vuepress-theme-casper.git", 7 | "author": "Alexander Heimbuch ", 8 | "license": "MIT", 9 | "scripts": { 10 | "copy:casper:styles": "rm -rf blog/.vuepress/theme/styles && mkdir -p blog/.vuepress/theme/styles && cp node_modules/casper/assets/built/*.css blog/.vuepress/theme/styles/", 11 | "copy:casper": "npm run copy:casper:styles", 12 | "dev": "vuepress dev blog", 13 | "build": "npm run copy:casper && rm -rf dist/ && vuepress build blog --dest dist/", 14 | "bundle:clean": "rm -rf publish && mkdir -p publish", 15 | "bundle:copy": "cp -R blog/.vuepress/theme/* publish/ && cp package.json publish/", 16 | "bundle": "npm run build && npm run bundle:clean && npm run bundle:copy", 17 | "deploy:gh-pages": "env BASE='/vuepress-theme-casper/' npm run build && GH_EMAIL=github@heimbu.ch GH_NAME='Alexander Heimbuch' ./scripts/gh-pages.sh dist" 18 | }, 19 | "dependencies": { 20 | "lodash": "^4.17.15", 21 | "striptags": "^3.1.1", 22 | "vuex": "^3.0.1", 23 | "vuex-router-sync": "^5.0.0" 24 | }, 25 | "devDependencies": { 26 | "casper": "git@github.com:TryGhost/Casper.git", 27 | "vue": "2.6.11", 28 | "vuepress": "1.4.0" 29 | }, 30 | "peerDependencies": { 31 | "vue": "2.6.x", 32 | "vuepress": "1.4.0" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /scripts/gh-pages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # ideas used from https://gist.github.com/motemen/8595451 3 | 4 | # abort the script if there is a non-zero error 5 | set -e 6 | 7 | # show where we are on the machine 8 | pwd 9 | 10 | remote=$(git config remote.origin.url) 11 | 12 | siteSource="$1" 13 | 14 | if [ ! -d "$siteSource" ] 15 | then 16 | echo "Usage: $0 " 17 | exit 1 18 | fi 19 | 20 | # make a directory to put the gp-pages branch 21 | mkdir gh-pages-branch 22 | cd gh-pages-branch 23 | # now lets setup a new repo so we can update the gh-pages branch 24 | git config --global user.email "$GH_EMAIL" > /dev/null 2>&1 25 | git config --global user.name "$GH_NAME" > /dev/null 2>&1 26 | git init 27 | git remote add --fetch origin "$remote" 28 | 29 | # switch into the the gh-pages branch 30 | if git rev-parse --verify origin/gh-pages > /dev/null 2>&1 31 | then 32 | git checkout gh-pages 33 | # delete any old site as we are going to replace it 34 | # Note: this explodes if there aren't any, so moving it here for now 35 | git rm -rf . 36 | else 37 | git checkout --orphan gh-pages 38 | fi 39 | 40 | # copy over or recompile the new site 41 | cp -a "../${siteSource}/." . 42 | 43 | # stage any changes and new files 44 | git add -A 45 | # now commit, ignoring branch gh-pages doesn't seem to work, so trying skip 46 | git commit --allow-empty -m "Deploy to GitHub pages [ci skip]" 47 | # and push, but send any output to /dev/null to hide anything sensitive 48 | git push --force --quiet origin gh-pages > /dev/null 2>&1 49 | 50 | # go back to where we started and remove the gh-pages git repo we made and used 51 | # for deployment 52 | cd .. 53 | rm -rf gh-pages-branch 54 | 55 | echo "Finished Deployment!" 56 | -------------------------------------------------------------------------------- /stackbit.yaml: -------------------------------------------------------------------------------- 1 | stackbitVersion: ~0.2.0 2 | ssgName: custom 3 | buildCommand: "npm run build" 4 | pageLayoutKey: type 5 | publishDir: dist 6 | pagesDir: blog 7 | staticDir: blog/.vuepress/public 8 | uploadDir: images 9 | dataDir: blog/.vuepress/data 10 | models: 11 | config: 12 | type: data 13 | label: Config 14 | file: config.json 15 | fields: 16 | - name: title 17 | type: string 18 | label: Title 19 | required: true 20 | - name: description 21 | type: text 22 | label: Description 23 | description: Text shown under the main logo 24 | - name: base 25 | type: string 26 | label: Base 27 | description: Base path under which the site will be served 28 | default: "/vuepress-theme-casper/" 29 | - name: themeConfig 30 | type: object 31 | label: Theme Config 32 | fields: 33 | - name: cover 34 | type: image 35 | label: Cover 36 | description: Cover image shown on the home page 37 | - name: logo 38 | type: image 39 | label: Logo 40 | description: Logo image shown on the home page 41 | - name: nav 42 | type: list 43 | label: Top Navigation Menu 44 | items: 45 | type: nav_item 46 | - name: footer 47 | type: list 48 | label: Bottom Navigation Menu 49 | items: 50 | type: nav_item 51 | - name: social 52 | type: object 53 | label: Social 54 | fields: 55 | - name: github 56 | type: string 57 | label: Github Link 58 | - name: twitter 59 | type: string 60 | label: Twitter Link 61 | nav_item: 62 | type: object 63 | label: Navigation Item 64 | labelField: text 65 | fields: 66 | - name: text 67 | type: string 68 | label: Label 69 | required: true 70 | - name: link 71 | type: string 72 | label: Link 73 | required: true 74 | description: "Link of the navigation item, e.g.: /posts or https://facebook.com" 75 | home: 76 | type: page 77 | label: Home 78 | layout: home 79 | singleInstance: true 80 | hideContent: true 81 | file: index.md 82 | fields: [] 83 | page: 84 | type: page 85 | label: Page 86 | layout: page 87 | match: "**/*.md" 88 | exclude: "{index.md,posts/**/*,.vuewpress/**/*}" 89 | fields: 90 | - name: title 91 | type: string 92 | label: Title 93 | required: true 94 | post: 95 | type: page 96 | label: Post 97 | folder: posts 98 | match: "**/*.md" 99 | layout: post 100 | fields: 101 | - name: title 102 | type: string 103 | label: Title 104 | required: true 105 | - name: image 106 | type: image 107 | label: Image 108 | - name: publish 109 | type: date 110 | label: Date 111 | required: true 112 | - name: tags 113 | type: list 114 | label: Tags 115 | items: 116 | type: string 117 | - name: categories 118 | type: list 119 | label: categories 120 | items: 121 | type: enum 122 | options: 123 | - dexter 124 | - futurama 125 | - name: readingTime 126 | type: string 127 | label: Reading Time 128 | --------------------------------------------------------------------------------