diff --git a/.gitignore b/.gitignore index 86fc71f17..74f97d4eb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ .DS_Store _site .sass-cache/ -.byebug_history +.jekyll-cache diff --git a/.jekyll-metadata b/.jekyll-metadata new file mode 100644 index 000000000..31862c631 Binary files /dev/null and b/.jekyll-metadata differ diff --git a/.ruby-version b/.ruby-version new file mode 100644 index 000000000..711ee4f50 --- /dev/null +++ b/.ruby-version @@ -0,0 +1 @@ +3.1.3 \ No newline at end of file diff --git a/Gemfile b/Gemfile index 1f4cec5cd..2ff1339e2 100644 --- a/Gemfile +++ b/Gemfile @@ -1,5 +1,5 @@ source 'https://rubygems.org' -gem 'jekyll', '~> 3.8' +gem 'jekyll', '~> 4.0' gem 'jekyll-swiss' gem 'rake' gem 'html-proofer' diff --git a/Gemfile.lock b/Gemfile.lock index 1786e315d..fb1738ac5 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,108 +1,132 @@ GEM remote: https://rubygems.org/ specs: - activesupport (5.2.2) - concurrent-ruby (~> 1.0, >= 1.0.2) - i18n (>= 0.7, < 2) - minitest (~> 5.1) - tzinfo (~> 1.1) - addressable (2.6.0) - public_suffix (>= 2.0.2, < 4.0) - byebug (11.0.1) + Ascii85 (1.1.0) + addressable (2.8.1) + public_suffix (>= 2.0.2, < 6.0) + afm (0.2.2) + async (2.3.1) + console (~> 1.10) + io-event (~> 1.1) + timers (~> 4.1) + byebug (11.1.3) colorator (1.1.0) - colorize (0.8.1) - concurrent-ruby (1.1.4) - crass (1.0.4) - em-websocket (0.5.1) + concurrent-ruby (1.2.0) + console (1.16.2) + fiber-local + crass (1.0.6) + em-websocket (0.5.3) eventmachine (>= 0.12.9) - http_parser.rb (~> 0.6.0) - ethon (0.12.0) - ffi (>= 1.3.0) + http_parser.rb (~> 0) + ethon (0.16.0) + ffi (>= 1.15.0) eventmachine (1.2.7) - ffi (1.10.0) + ffi (1.15.5) + ffi (1.15.5-x64-mingw-ucrt) + fiber-local (1.0.0) forwardable-extended (2.6.0) - html-proofer (3.10.2) - activesupport (>= 4.2, < 6.0) + google-protobuf (3.21.12-x64-mingw-ucrt) + google-protobuf (3.21.12-x86_64-darwin) + hashery (2.1.2) + html-proofer (5.0.4) addressable (~> 2.3) - colorize (~> 0.8) - mercenary (~> 0.3.2) - nokogiri (~> 1.9) - parallel (~> 1.3) + async (~> 2.1) + nokogiri (~> 1.13) + pdf-reader (~> 2.11) + rainbow (~> 3.0) typhoeus (~> 1.3) yell (~> 2.0) - http_parser.rb (0.6.0) - i18n (0.9.5) + zeitwerk (~> 2.5) + http_parser.rb (0.8.0) + i18n (1.12.0) concurrent-ruby (~> 1.0) - jekyll (3.8.5) + io-event (1.1.6) + jekyll (4.3.2) addressable (~> 2.4) colorator (~> 1.0) em-websocket (~> 0.5) - i18n (~> 0.7) - jekyll-sass-converter (~> 1.0) + i18n (~> 1.0) + jekyll-sass-converter (>= 2.0, < 4.0) jekyll-watch (~> 2.0) - kramdown (~> 1.14) + kramdown (~> 2.3, >= 2.3.1) + kramdown-parser-gfm (~> 1.0) liquid (~> 4.0) - mercenary (~> 0.3.3) + mercenary (>= 0.3.6, < 0.5) pathutil (~> 0.9) - rouge (>= 1.7, < 4) + rouge (>= 3.0, < 5.0) safe_yaml (~> 1.0) - jekyll-sass-converter (1.5.2) - sass (~> 3.4) + terminal-table (>= 1.8, < 4.0) + webrick (~> 1.7) + jekyll-sass-converter (3.0.0) + sass-embedded (~> 1.54) jekyll-swiss (1.0.0) - jekyll-watch (2.1.2) + jekyll-watch (2.2.1) listen (~> 3.0) - kramdown (1.17.0) - liquid (4.0.1) - listen (3.1.5) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - ruby_dep (~> 1.2) - mercenary (0.3.6) - mini_portile2 (2.4.0) - minitest (5.11.3) - nokogiri (1.10.1) - mini_portile2 (~> 2.4.0) - nokogumbo (2.0.1) - nokogiri (~> 1.8, >= 1.8.4) - parallel (1.13.0) + kramdown (2.4.0) + rexml + kramdown-parser-gfm (1.1.0) + kramdown (~> 2.0) + liquid (4.0.4) + listen (3.8.0) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) + mercenary (0.4.0) + nokogiri (1.14.0-x64-mingw-ucrt) + racc (~> 1.4) + nokogiri (1.14.0-x86_64-darwin) + racc (~> 1.4) pathutil (0.16.2) forwardable-extended (~> 2.6) - public_suffix (3.0.3) - rake (12.3.2) - rb-fsevent (0.10.3) - rb-inotify (0.10.0) + pdf-reader (2.11.0) + Ascii85 (~> 1.0) + afm (~> 0.2.1) + hashery (~> 2.0) + ruby-rc4 + ttfunk + public_suffix (5.0.1) + racc (1.6.2) + rainbow (3.1.1) + rake (13.0.6) + rb-fsevent (0.11.2) + rb-inotify (0.10.1) ffi (~> 1.0) - rouge (3.3.0) - ruby_dep (1.5.0) - safe_yaml (1.0.4) - sanitize (5.0.0) + rexml (3.2.5) + rouge (4.0.1) + ruby-rc4 (0.1.5) + safe_yaml (1.0.5) + sanitize (6.0.0) crass (~> 1.0.2) - nokogiri (>= 1.8.0) - nokogumbo (~> 2.0) - sass (3.7.3) - sass-listen (~> 4.0.0) - sass-listen (4.0.0) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) + nokogiri (>= 1.12.0) + sass-embedded (1.57.1-x64-mingw-ucrt) + google-protobuf (~> 3.21) + sass-embedded (1.57.1-x86_64-darwin) + google-protobuf (~> 3.21) slugify (1.0.7) - thread_safe (0.3.6) - typhoeus (1.3.1) + terminal-table (3.0.2) + unicode-display_width (>= 1.1.1, < 3) + timers (4.3.5) + ttfunk (1.7.0) + typhoeus (1.4.0) ethon (>= 0.9.0) - tzinfo (1.2.5) - thread_safe (~> 0.1) - yell (2.0.7) + unicode-display_width (2.4.2) + webrick (1.7.0) + yell (2.2.2) + zeitwerk (2.6.6) PLATFORMS - ruby + x64-mingw-ucrt + x86_64-darwin-18 + x86_64-darwin-20 + x86_64-darwin-22 DEPENDENCIES byebug html-proofer - jekyll (~> 3.8) + jekyll (~> 4.0) jekyll-swiss rake sanitize slugify BUNDLED WITH - 1.17.3 + 2.4.2 diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..3879cf58c --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 marii nyrop + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/_sass/_components.scss b/_sass/_components.scss new file mode 100644 index 000000000..b76d9ec03 --- /dev/null +++ b/_sass/_components.scss @@ -0,0 +1,141 @@ +// Styling markdown output + +// Code formatting +@use "sass:math"; + +pre { + border-left: $spacer-1 solid $color-border; + margin: $spacer-3 0; + padding-left: 16px; + width: (math.div(9, 12) * 100%); // matches col-9 + overflow-x: auto; +} + +code { + color: $color-code; + font-size: $body-font-size; + padding: 1px 0px; +} + + +.prose { + + a { + text-decoration: underline dotted; + + &:hover { + text-decoration: underline; + } + } + + p, ol, ul { + font-size: $prose-font-size; + margin-bottom: 1em; + width: 100%; + + @media (min-width: $breakpoint-lg) { + width: (math.div(10, 12) * 100%); // matches col-10 + } + + } + + ul, ol { + padding-left: 40px; + } + + li { + margin-bottom: 0.5em; + + ul li, ol li { + margin-bottom: 0; + } + } + + img { + + max-width: 100%; + + @media (min-width: $breakpoint-lg) { + max-width: (12 * 0.1 * 100%); // make image fill width of container on desktop + } + + } + + blockquote { + line-height: 1.375; + padding-left: 20px; + margin: 40px 0 40px -16px; + border-left: $spacer-1 solid $color-border; + font-style: italic; + + p { + font-size: 24px; + } + + @media (min-width: $breakpoint-lg) { + padding-left: $spacer-3; + margin: $spacer-4 0 $spacer-4 -40px; + max-width: (11 * 0.1 * 100%); + + p { + font-size: 32px; + } + + } + + } + + hr { + color: $color-body-text; + border-style: solid; + border-width: thin; + margin-top: 0.5em; + margin-bottom: 0.5em; + } + + dt { + font-weight: bold; + font-style: italic; + line-height: 1.25; + } + + dd { + font-style: italic; + margin-bottom: 0.5em; + } + + // Markdown tables + table { + border-collapse: collapse; + display: block; + width: 100%; + margin-bottom: 1.5em; + overflow: auto; + // For Firefox to horizontally scroll wider tables. + word-break: normal; + word-break: keep-all; + + th { + font-weight: bold; + text-align: left; + } + + th, + td { + padding: $spacer-2 $spacer-3 $spacer-2 2px; + border-top: 1px solid $color-body-text; + border-bottom: 1px solid $color-body-text; + } + + tr { + background-color: #fff; + border-top: 1px solid $color-body-text; + } + + tr th { + border-top: 2px solid $color-body-text; + border-bottom: 2px solid $color-body-text; + } + } + +} diff --git a/_sass/_utilities.scss b/_sass/_utilities.scss new file mode 100644 index 000000000..ce455f71c --- /dev/null +++ b/_sass/_utilities.scss @@ -0,0 +1,184 @@ +/* Type utilities */ +@use "sass:math"; + +.h0 { + font-size: $h0-mobile; + line-height: 1.0125; + margin-top: 0.85em; + word-wrap: break-word; + + @media (min-width: $breakpoint-lg) { + font-size: $h0-desktop; + } +} + +.text-right { text-align: right; } + +.no-underline { + text-decoration: none !important; + + &:hover { + text-decoration: none !important; + } +} + +.bold { font-weight: bold; } +.uppercase { text-transform: uppercase; } + +.lh-condensed { line-height: 1.25; } + +.list-reset { + list-style: none; + padding-left: 0; +} + +/* Border utilities */ +.border-bottom-thick { border-bottom: 2px solid; border-color: currentColor; } +.border-bottom-thin { border-bottom: 1px solid; border-color: currentColor; } +.border-top-thick { border-top: 2px solid; border-color: currentColor; } +.border-top-thin { border-top: 1px solid; border-color: currentColor; } +.border-0 { border: 0; } + + +/* Theme color utilities */ +.header-background { background-color: $color-background; } +.header-border { border-color: $color-foreground; } +.header-title { color: $color-title; } +.header-text { color: $color-foreground; } +.header-social { fill: $color-foreground; } +.header-social-accent { fill: $color-dot-accent; } +.header-link:hover { color: $color-nav-link !important; } // used for navigation links on homepage +.text-accent { color: $color-text-accent; } // used for date in post list and home link + +/* Layout utilities */ +.container { max-width: $container-width; } + +.col-1 { width: (math.div(1, 12) * 100%); } +.col-2 { width: (math.div(2, 12) * 100%); } +.col-3 { width: (math.div(3, 12) * 100%); } +.col-4 { width: (math.div(4, 12) * 100%); } +.col-5 { width: (math.div(5, 12) * 100%); } +.col-6 { width: (math.div(6, 12) * 100%); } +.col-7 { width: (math.div(7, 12) * 100%); } +.col-8 { width: (math.div(8, 12) * 100%); } +.col-9 { width: (math.div(9, 12) * 100%); } +.col-10 { width: (math.div(10, 12) * 100%); } +.col-11 { width: (math.div(11, 12) * 100%); } +.col-12 { width: 100%; } + +@media (max-width: $breakpoint-lg) { + .sm-width-full { width: 100% !important; } +} + +.block { display: block !important; } +.inline-block { display: inline-block !important; } + +.table { display: table !important; } + +.left { float: left; } +.right { float: right; } + +.clearfix:before, +.clearfix:after { + content: " "; + display: table +} +.clearfix:after { clear: both } + +.align-middle { vertical-align: middle; } + +/* Padding */ +.px-0 { padding-left: 0; padding-right: 0 } +.py-0 { padding-top: 0; padding-bottom: 0 } + +.px-1 { padding-left: $spacer-1; padding-right: $spacer-1 } +.py-1 { padding-top: $spacer-1; padding-bottom: $spacer-1 } + +.px-2 { padding-left: $spacer-2; padding-right: $spacer-2; } +.py-2 { padding-top: $spacer-2; padding-bottom: $spacer-2; } + +.px-3 { padding-left: $spacer-3; padding-right: $spacer-3; } +.py-3 { padding-top: $spacer-3; padding-bottom: $spacer-3; } + +.px-4 { padding-left: $spacer-4; padding-right: $spacer-4; } +.py-4 { padding-top: $spacer-4; padding-bottom: $spacer-4; } + +/* Margin */ +.mx-auto { margin-left: auto; margin-right: auto; } + +.mt-0 { margin-top: 0; } +.mr-0 { margin-right: 0; } +.mb-0 { margin-bottom: 0; } +.ml-0 { margin-left: 0; } + +.mt-1 { margin-top: $spacer-1; } +.mr-1 { margin-right: $spacer-1; } +.mb-1 { margin-bottom: $spacer-1; } +.ml-1 { margin-left: $spacer-1; } + +.mt-2 { margin-top: $spacer-2; } +.mr-2 { margin-right: $spacer-2; } +.mb-2 { margin-bottom: $spacer-2; } +.ml-2 { margin-left: $spacer-2; } + +.mt-3 { margin-top: $spacer-3; } +.mr-3 { margin-right: $spacer-3; } +.mb-3 { margin-bottom: $spacer-3; } +.ml-3 { margin-left: $spacer-3; } + +.mt-4 { margin-top: $spacer-4; } +.mr-4 { margin-right: $spacer-4; } +.mb-4 { margin-bottom: $spacer-4; } +.ml-4 { margin-left: $spacer-4; } + +// Responsive margin +@media (min-width: 52em) { + .mx-lg-auto { margin-left: auto; margin-right: auto; } + + .mt-lg-0 { margin-top: 0; } + .mr-lg-0 { margin-right: 0; } + .mb-lg-0 { margin-bottom: 0; } + .ml-lg-0 { margin-left: 0; } + + .mt-lg-1 { margin-top: $spacer-1; } + .mr-lg-1 { margin-right: $spacer-1; } + .mb-lg-1 { margin-bottom: $spacer-1; } + .ml-lg-1 { margin-left: $spacer-1; } + + .mt-lg-2 { margin-top: $spacer-2; } + .mr-lg-2 { margin-right: $spacer-2; } + .mb-lg-2 { margin-bottom: $spacer-2; } + .ml-lg-2 { margin-left: $spacer-2; } + + .mt-lg-3 { margin-top: $spacer-3; } + .mr-lg-3 { margin-right: $spacer-3; } + .mb-lg-3 { margin-bottom: $spacer-3; } + .ml-lg-3 { margin-left: $spacer-3; } + + .mt-lg-4 { margin-top: $spacer-4; } + .mr-lg-4 { margin-right: $spacer-4; } + .mb-lg-4 { margin-bottom: $spacer-4; } + .ml-lg-4 { margin-left: $spacer-4; } +} + +// Link styles for social icons +.link-social { + text-decoration: none; + font-weight: bold; + line-height: 1; + + &:hover { + text-decoration: none !important; + } +} + +// Link styles for navigation +.link-primary { + font-weight: bold; + text-decoration: none !important; + + &:hover { + color: $color-primary-link; + text-decoration: none !important; + } +}