@charset "UTF-8"; /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ /* Document ========================================================================== */ /** * 1. Correct the line height in all browsers. * 2. Prevent adjustments of font size after orientation changes in iOS. */ html { line-height: 1.15; /* 1 */ -webkit-text-size-adjust: 100%; /* 2 */ } /* Sections ========================================================================== */ /** * Remove the margin in all browsers. */ body { margin: 0; } /** * Render the `main` element consistently in IE. */ main { display: block; } /** * Correct the font size and margin on `h1` elements within `section` and * `article` contexts in Chrome, Firefox, and Safari. */ h1 { font-size: 2em; margin: 0.67em 0; } /* Grouping content ========================================================================== */ /** * 1. Add the correct box sizing in Firefox. * 2. Show the overflow in Edge and IE. */ hr { box-sizing: content-box; /* 1 */ height: 0; /* 1 */ overflow: visible; /* 2 */ } /** * 1. Correct the inheritance and scaling of font size in all browsers. * 2. Correct the odd `em` font sizing in all browsers. */ pre { font-family: monospace, monospace; /* 1 */ font-size: 1em; /* 2 */ } /* Text-level semantics ========================================================================== */ /** * Remove the gray background on active links in IE 10. */ a { background-color: transparent; } /** * 1. Remove the bottom border in Chrome 57- * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. */ abbr[title] { border-bottom: none; /* 1 */ text-decoration: underline; /* 2 */ -webkit-text-decoration: underline dotted; text-decoration: underline dotted; /* 2 */ } /** * Add the correct font weight in Chrome, Edge, and Safari. */ b, strong { font-weight: bolder; } /** * 1. Correct the inheritance and scaling of font size in all browsers. * 2. Correct the odd `em` font sizing in all browsers. */ code, kbd, samp { font-family: monospace, monospace; /* 1 */ font-size: 1em; /* 2 */ } /** * Add the correct font size in all browsers. */ small { font-size: 80%; } /** * Prevent `sub` and `sup` elements from affecting the line height in * all browsers. */ sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } sub { bottom: -0.25em; } sup { top: -0.5em; } /* Embedded content ========================================================================== */ /** * Remove the border on images inside links in IE 10. */ img { border-style: none; } /* Forms ========================================================================== */ /** * 1. Change the font styles in all browsers. * 2. Remove the margin in Firefox and Safari. */ button, input, optgroup, select, textarea { font-family: inherit; /* 1 */ font-size: 100%; /* 1 */ line-height: 1.15; /* 1 */ margin: 0; /* 2 */ } /** * Show the overflow in IE. * 1. Show the overflow in Edge. */ button, input { /* 1 */ overflow: visible; } /** * Remove the inheritance of text transform in Edge, Firefox, and IE. * 1. Remove the inheritance of text transform in Firefox. */ button, select { /* 1 */ text-transform: none; } /** * Correct the inability to style clickable types in iOS and Safari. */ button, [type="button"], [type="reset"], [type="submit"] { -webkit-appearance: button; } /** * Remove the inner border and padding in Firefox. */ button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { border-style: none; padding: 0; } /** * Restore the focus styles unset by the previous rule. */ button:-moz-focusring, [type="button"]:-moz-focusring, [type="reset"]:-moz-focusring, [type="submit"]:-moz-focusring { outline: 1px dotted ButtonText; } /** * Correct the padding in Firefox. */ fieldset { padding: 0.35em 0.75em 0.625em; } /** * 1. Correct the text wrapping in Edge and IE. * 2. Correct the color inheritance from `fieldset` elements in IE. * 3. Remove the padding so developers are not caught out when they zero out * `fieldset` elements in all browsers. */ legend { box-sizing: border-box; /* 1 */ color: inherit; /* 2 */ display: table; /* 1 */ max-width: 100%; /* 1 */ padding: 0; /* 3 */ white-space: normal; /* 1 */ } /** * Add the correct vertical alignment in Chrome, Firefox, and Opera. */ progress { vertical-align: baseline; } /** * Remove the default vertical scrollbar in IE 10+. */ textarea { overflow: auto; } /** * 1. Add the correct box sizing in IE 10. * 2. Remove the padding in IE 10. */ [type="checkbox"], [type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ } /** * Correct the cursor style of increment and decrement buttons in Chrome. */ [type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { height: auto; } /** * 1. Correct the odd appearance in Chrome and Safari. * 2. Correct the outline style in Safari. */ [type="search"] { -webkit-appearance: textfield; /* 1 */ outline-offset: -2px; /* 2 */ } /** * Remove the inner padding in Chrome and Safari on macOS. */ [type="search"]::-webkit-search-decoration { -webkit-appearance: none; } /** * 1. Correct the inability to style clickable types in iOS and Safari. * 2. Change font properties to `inherit` in Safari. */ ::-webkit-file-upload-button { -webkit-appearance: button; /* 1 */ font: inherit; /* 2 */ } /* Interactive ========================================================================== */ /* * Add the correct display in Edge, IE 10+, and Firefox. */ details { display: block; } /* * Add the correct display in all browsers. */ summary { display: list-item; } /* Misc ========================================================================== */ /** * Add the correct display in IE 10+. */ template { display: none; } /** * Add the correct display in IE 10. */ [hidden] { display: none; } /* PrismJS 1.15.0 https://prismjs.com/download.html#themes=prism-tomorrow&languages=markup+css+clike+javascript+abap+actionscript+ada+apacheconf+apl+applescript+c+arff+asciidoc+asm6502+csharp+autohotkey+autoit+bash+basic+batch+bison+brainfuck+bro+cpp+aspnet+arduino+cil+coffeescript+clojure+ruby+csp+css-extras+d+dart+diff+django+docker+eiffel+elixir+elm+markup-templating+erlang+fsharp+flow+fortran+gcode+gedcom+gherkin+git+glsl+gml+go+graphql+groovy+less+handlebars+haskell+haxe+hcl+http+hpkp+hsts+ichigojam+icon+inform7+ini+io+j+java+javastacktrace+jolie+json+julia+keyman+kotlin+latex+markdown+liquid+lisp+livescript+lolcode+lua+makefile+crystal+erb+matlab+mel+mizar+monkey+n1ql+n4js+nand2tetris-hdl+nasm+nginx+nim+nix+nsis+objectivec+ocaml+opencl+oz+parigp+parser+pascal+perl+php+php-extras+sql+powershell+processing+prolog+properties+protobuf+scss+puppet+pure+python+q+qore+r+jsx+typescript+renpy+reason+rest+rip+roboconf+textile+rust+sas+sass+stylus+scala+scheme+smalltalk+smarty+plsql+soy+pug+swift+yaml+tcl+haml+toml+tt2+twig+tsx+vala+vbnet+velocity+verilog+vhdl+vim+visual-basic+wasm+wiki+xeora+xojo+xquery+tap */ /** * prism.js tomorrow night eighties for JavaScript, CoffeeScript, CSS and HTML * Based on https://github.com/chriskempson/tomorrow-theme * @author Rose Pritchard */ code[class*="language-"], pre[class*="language-"] { color: #ccc; background: none; font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; text-align: left; white-space: pre; word-spacing: normal; word-break: normal; word-wrap: normal; line-height: 1.5; -moz-tab-size: 4; -o-tab-size: 4; tab-size: 4; -webkit-hyphens: none; -ms-hyphens: none; hyphens: none; } /* Code blocks */ pre[class*="language-"] { padding: 1em; margin: .5em 0; overflow: auto; } :not(pre) > code[class*="language-"], pre[class*="language-"] { background: #2d2d2d; } /* Inline code */ :not(pre) > code[class*="language-"] { padding: .1em; border-radius: .3em; white-space: normal; } .token.comment, .token.block-comment, .token.prolog, .token.doctype, .token.cdata { color: #999; } .token.punctuation { color: #ccc; } .token.tag, .token.attr-name, .token.namespace, .token.deleted { color: #e2777a; } .token.function-name { color: #6196cc; } .token.boolean, .token.number, .token.function { color: #f08d49; } .token.property, .token.class-name, .token.constant, .token.symbol { color: #f8c555; } .token.selector, .token.important, .token.atrule, .token.keyword, .token.builtin { color: #cc99cd; } .token.string, .token.char, .token.attr-value, .token.regex, .token.variable { color: #7ec699; } .token.operator, .token.entity, .token.url { color: #67cdcc; } .token.important, .token.bold { font-weight: bold; } .token.italic { font-style: italic; } .token.entity { cursor: help; } .token.inserted { color: green; } /* light theme color */ /* dark theme colors */ /* variables for js, must be the same as these in @custom-media queries */ :root { --phoneWidth: (max-width: 684px); --tabletWidth: (max-width: 900px); } @font-face { font-family: 'Inter UI'; font-style: normal; font-weight: 400; src: url(76677d9e1ccc0e1f33fa6b044a743768.woff2) format("woff2"), url(ecf7c639683dfcb4868861e0c613c455.woff) format("woff"); } @font-face { font-family: 'Inter UI'; font-style: italic; font-weight: 400; src: url(9d05a4aa5504157c765f62d534e78889.woff2) format("woff2"), url(bcf654c7bea165e9dae257206c5521ad.woff) format("woff"); } @font-face { font-family: 'Inter UI'; font-style: normal; font-weight: 600; src: url(e0012ba74a933d326e8a466003fc3507.woff2) format("woff2"), url(48dfecfe37de0ef8f0e2c2d2e6992e9c.woff) format("woff"); } @font-face { font-family: 'Inter UI'; font-style: italic; font-weight: 600; src: url(a6f5c416c63aad400a2df45ae2154c1e.woff2) format("woff2"), url(a9eddc92c84c5f78fba1cb7d7833d31c.woff) format("woff"); } @font-face { font-family: 'Inter UI'; font-style: normal; font-weight: 800; src: url(b6f1695769d6d6b5f20d1c6492914189.woff2) format("woff2"), url(e2158f600a4b0175b73dfefb0d2fe8f8.woff) format("woff"); } @font-face { font-family: 'Inter UI'; font-style: italic; font-weight: 800; src: url(a616c9fa6fe80626bac7991f8502295a.woff2) format("woff2"), url(dbe4ec1d26d41331c91550939a7fd27f.woff) format("woff"); } .button-container { display: table; margin-left: auto; margin-right: auto; } button, .button, a.button { position: relative; display: flex; align-items: center; justify-content: center; padding: 8px 18px; margin-bottom: 5px; background: #eaeaea; text-decoration: none; text-align: center; font-weight: 500; border-radius: 8px; border: 1px solid transparent; -webkit-appearance: none; -moz-appearance: none; appearance: none; cursor: pointer; outline: none; /* variants */ } .dark-theme button, .dark-theme .button, .dark-theme a.button { background: #3b3d42; color: inherit; } button.outline, .button.outline, a.button.outline { background: transparent; border-color: #eaeaea; box-shadow: none; padding: 8px 18px; } .dark-theme button.outline, .dark-theme .button.outline, .dark-theme a.button.outline { border-color: #3b3d42; color: inherit; } button.outline :hover, .button.outline :hover, a.button.outline :hover { -webkit-transform: none; transform: none; box-shadow: none; } button.primary, .button.primary, a.button.primary { box-shadow: 0 4px 6px rgba(50, 50, 93, 0.11), 0 1px 3px rgba(0, 0, 0, 0.08); } button.primary:hover, .button.primary:hover, a.button.primary:hover { box-shadow: 0 2px 6px rgba(50, 50, 93, 0.21), 0 1px 3px rgba(0, 0, 0, 0.08); } button.link, .button.link, a.button.link { background: none; font-size: 1rem; } button.small, .button.small, a.button.small { font-size: .8rem; } button.wide, .button.wide, a.button.wide { min-width: 200px; padding: 14px 24px; } .code-toolbar { margin-bottom: 20px; } .code-toolbar .toolbar-item a { position: relative; display: inline-flex; align-items: center; justify-content: center; padding: 3px 8px; margin-bottom: 5px; background: #eaeaea; text-decoration: none; text-align: center; font-size: 13px; font-weight: 500; border-radius: 8px; border: 1px solid transparent; -webkit-appearance: none; -moz-appearance: none; appearance: none; cursor: pointer; outline: none; } .dark-theme .code-toolbar .toolbar-item a { background: #3b3d42; color: inherit; } .header { background: #fafafa; display: flex; align-items: center; justify-content: center; position: relative; padding: 20px; } .dark-theme .header { background: #252627; } .header__right { display: flex; flex-direction: row; align-items: center; } @media (max-width: 684px) { .header__right { flex-direction: row-reverse; } } .header__inner { display: flex; align-items: center; justify-content: space-between; margin: 0 auto; width: 760px; max-width: 100%; } .theme-toggle { display: flex; align-items: center; justify-content: center; line-height: 1; cursor: pointer; } .theme-toggler { fill: currentColor; } .logo { display: flex; align-items: center; text-decoration: none; font-weight: bold; } .logo img { height: 44px; } .logo__mark { margin-right: 5px; } .logo__text { font-size: 1.125rem; } .logo__cursor { display: inline-block; width: 10px; height: 1rem; background: #fe5186; margin-left: 5px; border-radius: 1px; -webkit-animation: cursor 1s infinite; animation: cursor 1s infinite; } @-webkit-keyframes cursor { 0% { opacity: 0; } 50% { opacity: 1; } 100% { opacity: 0; } } @keyframes cursor { 0% { opacity: 0; } 50% { opacity: 1; } 100% { opacity: 0; } } .menu { background: #fafafa; border-right: 1px solid; margin-right: 18px; } .dark-theme .menu { background: #252627; } @media (max-width: 684px) { .menu { position: absolute; top: 50px; right: 0; border: none; margin: 0; padding: 10px; } } .menu__inner { display: flex; align-items: center; justify-content: flex-start; max-width: 100%; margin: 0 auto; padding: 0 15px; font-size: 1rem; list-style: none; } .menu__inner li { margin: 0 12px; } @media (max-width: 684px) { .menu__inner { flex-direction: column; align-items: flex-start; padding: 0; } .menu__inner li { margin: 0; padding: 5px; } } .menu-trigger { width: 24px; height: 24px; fill: currentColor; margin-left: 10px; cursor: pointer; } .menu a { display: inline-block; margin-right: 15px; text-decoration: none; } .menu a:hover { text-decoration: underline; } .menu a:last-of-type { margin-right: 0; } html { box-sizing: border-box; line-height: 1.6; letter-spacing: .06em; scroll-behavior: smooth; } *, *:before, *:after { box-sizing: inherit; } body { margin: 0; padding: 0; font-family: 'Inter UI', -apple-system, BlinkMacSystemFont, "Roboto", "Segoe UI", Helvetica, Arial, sans-serif; font-size: 1rem; line-height: 1.54; background-color: #fff; color: #222; text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; -webkit-font-feature-settings: "liga", "tnum", "case", "calt", "zero", "ss01", "locl"; font-feature-settings: "liga", "tnum", "case", "calt", "zero", "ss01", "locl"; -webkit-overflow-scrolling: touch; -webkit-text-size-adjust: 100%; display: flex; min-height: 100vh; flex-direction: column; } @media (max-width: 684px) { body { font-size: 1rem; } } body.dark-theme { background-color: #292a2d; color: #a9a9b3; } h1, h2, h3, h4, h5, h6 { display: flex; align-items: center; line-height: 1.3; } h1 { font-size: 2.625rem; } h2 { font-size: 1.625rem; } h3 { font-size: 1.375rem; } h4 { font-size: 1.125rem; } @media (max-width: 684px) { h1 { font-size: 2rem; } h2 { font-size: 1.4rem; } h3 { font-size: 1.15rem; } h4 { font-size: 1.125rem; } } a { color: inherit; } img { display: block; max-width: 100%; } img.left { margin-right: auto; } img.center { margin-left: auto; margin-right: auto; } img.right { margin-left: auto; } figure { display: table; max-width: 100%; margin: 25px 0; } figure.left { margin-right: auto; } figure.center { margin-left: auto; margin-right: auto; } figure.right { margin-left: auto; } figure figcaption { font-size: 14px; margin-top: 5px; opacity: .8; } figure figcaption.left { text-align: left; } figure figcaption.center { text-align: center; } figure figcaption.right { text-align: right; } code { font-family: Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace; -webkit-font-feature-settings: normal; font-feature-settings: normal; background: #eaeaea; padding: 1px 6px; margin: 0 2px; border-radius: 5px; font-size: .95rem; } .dark-theme code { background: #3b3d42; } pre { background: #212020; padding: 20px; border-radius: 8px; font-size: .95rem; overflow: auto; } @media (max-width: 684px) { pre { white-space: pre-wrap; word-wrap: break-word; } } pre code { background: none !important; color: #ccc; margin: 0; padding: 0; font-size: inherit; } .dark-theme pre code { color: inherit; } blockquote { border-left: 2px solid; margin: 40px; padding: 10px 20px; } @media (max-width: 684px) { blockquote { margin: 10px; padding: 10px; } } blockquote:before { content: '\201D'; font-family: Georgia, serif; font-size: 3.875rem; position: absolute; left: -40px; top: -20px; } blockquote p:first-of-type { margin-top: 0; } blockquote p:last-of-type { margin-bottom: 0; } ul, ol { margin-left: 40px; padding: 0; } @media (max-width: 684px) { ul, ol { margin-left: 20px; } } ol ol { list-style-type: lower-alpha; } .container { flex: 1; display: flex; flex-direction: column; justify-content: center; text-align: center; } .content { display: flex; flex-direction: column; flex: 1 auto; align-items: center; justify-content: center; margin: 50px 0; } @media (max-width: 684px) { .content { margin-top: 0; } } hr { width: 100%; border: none; background: #dcdcdc; height: 1px; } .dark-theme hr { background: #4a4b50; } .hidden { display: none; } @media (max-width: 684px) { .hide-on-phone { display: none; } } @media (max-width: 900px) { .hide-on-tablet { display: none; } } .screen-reader-text { border: 0; clip: rect(1px, 1px, 1px, 1px); -webkit-clip-path: inset(50%); clip-path: inset(50%); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute !important; width: 1px; word-wrap: normal !important; } .screen-reader-text:focus { background-color: #f1f1f1; border-radius: 3px; box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6); clip: auto !important; -webkit-clip-path: none; clip-path: none; color: #21759b; display: block; font-size: 14px; font-size: 0.875rem; font-weight: bold; height: auto; left: 5px; line-height: normal; padding: 15px 23px 14px; text-decoration: none; top: 5px; width: auto; z-index: 100000; } .posts { width: 100%; max-width: 800px; text-align: left; padding: 20px; margin: 20px auto; } @media (max-width: 900px) { .posts { max-width: 660px; } } .posts:not(:last-of-type) { border-bottom: 1px solid #dcdcdc; } .dark-theme .posts:not(:last-of-type) { border-color: #4a4b50; } .posts-group { display: flex; margin-bottom: 1.9em; line-height: normal; } @media (max-width: 900px) { .posts-group { display: block; } } .posts-list { flex-grow: 1; margin: 0; padding: 0; list-style: none; } .posts .post-title { font-size: 1rem; margin: 5px 0 5px 0; } .posts .post-year { padding-top: 6px; margin-right: 1.8em; font-size: 1.6em; opacity: .6; } @media (max-width: 900px) { .posts .post-year { margin: -6px 0 4px; } } .posts .post-item { border-bottom: 1px grey dashed; } .posts .post-item a { display: flex; justify-content: space-between; align-items: baseline; padding: 12px 0; text-decoration: none; } .posts .post-day { flex-shrink: 0; margin-left: 1em; opacity: .6; } .post { width: 100%; max-width: 800px; text-align: left; padding: 20px; margin: 20px auto; } @media (max-width: 900px) { .post { max-width: 600px; } } .post-date:after { content: '\2014'; } .post-title { font-size: 2.625rem; margin: 0 0 20px; } @media (max-width: 684px) { .post-title { font-size: 2rem; } } .post-title a { text-decoration: none; } .post-tags { display: block; margin-bottom: 20px; font-size: 1rem; opacity: .5; } .post-tags a { text-decoration: none; } .post-content { margin-top: 30px; } .post-cover { border-radius: 8px; margin: 40px -50px; width: 860px; max-width: 860px; } @media (max-width: 900px) { .post-cover { margin: 20px 0; width: 100%; } } .post-info { margin-top: 30px; font-size: .8rem; line-height: normal; opacity: .6; } .post-info p { margin: .8em 0; } .post-info a:hover { border-bottom: 1px solid white; } .post-info svg { margin-right: .8em; } .post-info .tag { margin-right: .5em; } .post-info .tag::before { content: "#"; } .post-info .feather { display: inline-block; vertical-align: -.125em; width: 1em; height: 1em; } .post .flag { border-radius: 50%; margin: 0 5px; } .pagination { margin-top: 20px; } .pagination__title { display: flex; text-align: center; position: relative; margin: 30px 0 20px; } .pagination__title-h { text-align: center; margin: 0 auto; padding: 5px 10px; background: #fff; color: #999; font-size: .8rem; text-transform: uppercase; text-decoration: none; letter-spacing: .1em; z-index: 1; } .dark-theme .pagination__title-h { background: #292a2d; color: #73747b; } .pagination__title hr { position: absolute; left: 0; right: 0; width: 100%; margin-top: 15px; z-index: 0; } .pagination__buttons { display: flex; align-items: center; justify-content: center; } .pagination__buttons a { text-decoration: none; font-weight: bold; } .button { position: relative; display: inline-flex; align-items: center; justify-content: center; background: #eaeaea; font-size: 1rem; font-weight: 600; border-radius: 8px; max-width: 40%; padding: 0; cursor: pointer; -webkit-appearance: none; -moz-appearance: none; appearance: none; } .dark-theme .button { background: #3b3d42; } .button + .button { margin-left: 10px; } .button a { display: flex; padding: 8px 16px; text-decoration: none; text-overflow: ellipsis; white-space: nowrap; overflow: hidden; } .button__text { text-overflow: ellipsis; white-space: nowrap; overflow: hidden; } .button.next .button__icon { margin-left: 8px; } .button.previous .button__icon { margin-right: 8px; } .footer { padding: 40px 20px; flex-grow: 0; color: #999; } .footer__inner { display: flex; align-items: center; justify-content: center; margin: 0 auto; width: 760px; max-width: 100%; } @media (max-width: 900px) { .footer__inner { flex-direction: column; } } .footer__content { display: flex; flex-direction: row; align-items: center; font-size: 1rem; color: #999; } @media (max-width: 900px) { .footer__content { flex-direction: column; margin-top: 10px; } } .footer__content > *:not(:last-child) { border-right: 1px solid; padding: 0 15px; } @media (max-width: 900px) { .footer__content > *:not(:last-child) { border: none; } } .footer__content > *:last-child { padding: 0 15px; }