@charset "UTF-8";
/* TYPE_ON_STRAP Main style sheet */
/* Variables */
/* TYPOGRAPHY */
/* PADDING */
/* MOBILE */
/* TRANSITIONS */
/* Z-INDEX */
/* COMPONENT SIZES */
/* MIXINS */
/* THEME COLOR SCHEMES */
html, html[data-theme=light] {
  --background: #ffffff;
  --blockquote: #eef7fa;
  --selection: #d4d4d4;
  --meta: #595959;
  --link: #0072B5;
  --header-background: #24292e;
  --header-text: #ffffff;
  --header-link: #383838;
  --code-background: #E0E0E0;
  --code-inline: #24292e;
  --text-shadow: #3f3f3f;
  --text: #262626;
  --h1: #262626;
  --h2: #262626;
  --h3: #262626;
  --h4: #262626;
  --h5: #262626;
  --h6: #262626;
  --border: rgb(229, 229, 229);
  --blockquote-border: #9fd2e3;
  --kbd-background: #eee;
  --kbd-border: #b4b4b4;
  --kbd-color: #333;
  --search-highlight: rgba(255, 221, 76, 0.5);
}

html[data-theme=dark] {
  --background: #22272e;
  --blockquote: #373e47;
  --selection: #545d68;
  --meta: #909dab;
  --link: #00a8e0;
  --header-background: #2A3444;
  --header-text: #e7f3f4;
  --header-link: #adbac7;
  --code-background: #2A3444;
  --code-inline: #d9b600;
  --text-shadow: #2d333b;
  --text: #cdd9e5;
  --h1: #d40059;
  --h2: #b37eff;
  --h3: #ff66c2;
  --h4: #00af9e;
  --h5: #6bac00;
  --h6: #ff5c00;
  --border: rgba(255, 255, 255, 0.15);
  --blockquote-border: #546e7a;
  --kbd-background: #3a3f4b;
  --kbd-border: #5a6070;
  --kbd-color: #cdd9e5;
  --search-highlight: rgba(167, 139, 250, 0.5);
  --cusdis--color-text-default: var(--text);
  --cusdis--color-comment-username-text: var(--link);
}

/* BASE16 CODE HIGHLIGHT */
html, html[data-theme=light] {
  --base00: #302f2d;
  --base01: #2e3c43;
  --base02: #314549;
  --base03: #546e7a;
  --base04: #b2ccd6;
  --base05: #eeffff;
  --base06: #eeffff;
  --base07: #ffffff;
  --base08: #f07178;
  --base09: #f78c6c;
  --base0a: #ffcb6b;
  --base0b: #98c379;
  --base0c: #89ddff;
  --base0d: #82aaff;
  --base0e: #c792ea;
  --base0f: #ff5370;
}

html[data-theme=dark] {
  --base00: #373e47;
  --base01: #444c56;
  --base02: #545d68;
  --base03: #909dab;
  --base04: #adbac7;
  --base05: #cdd9e5;
  --base06: #e7f3f4;
  --base07: #ffffff;
  --base08: #d40059;
  --base09: #ff5c00;
  --base0a: #d9b600;
  --base0b: #6bac00;
  --base0c: #00a8e0;
  --base0d: #b37eff;
  --base0e: #00af9e;
  --base0f: #ff66c2;
}

/* External */
/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
/**
 * 1. Set default font family to sans-serif.
 * 2. Prevent iOS text size adjust after orientation change, without disabling
 *    user zoom.
 */
html {
  font-family: sans-serif; /* 1 */
  -ms-text-size-adjust: 100%; /* 2 */
  -webkit-text-size-adjust: 100%; /* 2 */
}

/**
 * Remove default margin.
 */
body {
  margin: 0;
}

/* HTML5 display definitions
   ========================================================================== */
/**
 * Correct `block` display not defined for any HTML5 element in IE 8/9.
 * Correct `block` display not defined for `details` or `summary` in IE 10/11
 * and Firefox.
 * Correct `block` display not defined for `main` in IE 11.
 */
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
menu,
nav,
section,
summary {
  display: block;
}

/**
 * 1. Correct `inline-block` display not defined in IE 8/9.
 * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
 */
audio,
canvas,
progress,
video {
  display: inline-block; /* 1 */
  vertical-align: baseline; /* 2 */
}

/**
 * Prevent modern browsers from displaying `audio` without controls.
 * Remove excess height in iOS 5 devices.
 */
audio:not([controls]) {
  display: none;
  height: 0;
}

/**
 * Address `[hidden]` styling not present in IE 8/9/10.
 * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
 */
[hidden],
template {
  display: none;
}

/* Links
   ========================================================================== */
/**
 * Remove the gray background color from active links in IE 10.
 */
a {
  background-color: transparent;
}

/**
 * Improve readability when focused and also mouse hovered in all browsers.
 */
a:active,
a:hover {
  outline: 0;
}

/* Text-level semantics
   ========================================================================== */
/**
 * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
 */
abbr[title] {
  border-bottom: 1px dotted;
}

/**
 * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
 */
b,
strong {
  font-weight: bold;
}

/**
 * Address styling not present in Safari and Chrome.
 */
dfn {
  font-style: italic;
}

/**
 * Address variable `h1` font-size and margin within `section` and `article`
 * contexts in Firefox 4+, Safari, and Chrome.
 */
h1 {
  font-size: 2em;
  margin: 0.67em 0;
}

/**
 * Address styling not present in IE 8/9.
 */
mark {
  background: #ff0;
  color: #000;
}

/**
 * Address inconsistent and variable font size in all browsers.
 */
small {
  font-size: 80%;
}

/**
 * Prevent `sub` and `sup` affecting `line-height` in all browsers.
 */
sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}

sup {
  top: -0.5em;
}

sub {
  bottom: -0.25em;
}

/* Embedded content
   ========================================================================== */
/**
 * Remove border when inside `a` element in IE 8/9/10.
 */
img {
  border: 0;
}

/**
 * Correct overflow not hidden in IE 9/10/11.
 */
svg:not(:root) {
  overflow: hidden;
}

/* Grouping content
   ========================================================================== */
/**
 * Address margin not present in IE 8/9 and Safari.
 */
figure {
  margin: 1em 40px;
}

/**
 * Address differences between Firefox and other browsers.
 */
hr {
  -moz-box-sizing: content-box;
  box-sizing: content-box;
  height: 0;
}

/**
 * Contain overflow in all browsers.
 */
pre {
  overflow: auto;
}

/**
 * Address odd `em`-unit font size rendering in all browsers.
 */
code,
kbd,
pre,
samp {
  font-family: monospace, monospace;
  font-size: 1em;
}

/* Forms
   ========================================================================== */
/**
 * Known limitation: by default, Chrome and Safari on OS X allow very limited
 * styling of `select`, unless a `border` property is set.
 */
/**
 * 1. Correct color not being inherited.
 *    Known issue: affects color of disabled elements.
 * 2. Correct font properties not being inherited.
 * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
 */
button,
input,
optgroup,
select,
textarea {
  color: inherit; /* 1 */
  font: inherit; /* 2 */
  margin: 0; /* 3 */
}

/**
 * Address `overflow` set to `hidden` in IE 8/9/10/11.
 */
button {
  overflow: visible;
}

/**
 * Address inconsistent `text-transform` inheritance for `button` and `select`.
 * All other form control elements do not inherit `text-transform` values.
 * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
 * Correct `select` style inheritance in Firefox.
 */
button,
select {
  text-transform: none;
}

/**
 * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
 *    and `video` controls.
 * 2. Correct inability to style clickable `input` types in iOS.
 * 3. Improve usability and consistency of cursor style between image-type
 *    `input` and others.
 */
button,
html input[type=button],
input[type=reset],
input[type=submit] {
  -webkit-appearance: button; /* 2 */
  cursor: pointer; /* 3 */
}

/**
 * Re-set default cursor for disabled elements.
 */
button[disabled],
html input[disabled] {
  cursor: default;
}

/**
 * Remove inner padding and border in Firefox 4+.
 */
button::-moz-focus-inner,
input::-moz-focus-inner {
  border: 0;
  padding: 0;
}

/**
 * Address Firefox 4+ setting `line-height` on `input` using `!important` in
 * the UA stylesheet.
 */
input {
  line-height: normal;
}

/**
 * It's recommended that you don't attempt to style these elements.
 * Firefox's implementation doesn't respect box-sizing, padding, or width.
 *
 * 1. Address box sizing set to `content-box` in IE 8/9/10.
 * 2. Remove excess padding in IE 8/9/10.
 */
input[type=checkbox],
input[type=radio] {
  box-sizing: border-box; /* 1 */
  padding: 0; /* 2 */
}

/**
 * Fix the cursor style for Chrome's increment/decrement buttons. For certain
 * `font-size` values of the `input`, it causes the cursor style of the
 * decrement button to change from `default` to `text`.
 */
input[type=number]::-webkit-inner-spin-button,
input[type=number]::-webkit-outer-spin-button {
  height: auto;
}

/**
 * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
 * 2. Address `box-sizing` set to `border-box` in Safari and Chrome
 *    (include `-moz` to future-proof).
 */
input[type=search] {
  -webkit-appearance: textfield; /* 1 */
  -moz-box-sizing: content-box;
  -webkit-box-sizing: content-box; /* 2 */
  box-sizing: content-box;
}

/**
 * Remove inner padding and search cancel button in Safari and Chrome on OS X.
 * Safari (but not Chrome) clips the cancel button when the search input has
 * padding (and `textfield` appearance).
 */
input[type=search]::-webkit-search-cancel-button,
input[type=search]::-webkit-search-decoration {
  -webkit-appearance: none;
}

/**
 * Define consistent border, margin, and padding.
 */
fieldset {
  border: 1px solid #c0c0c0;
  margin: 0 2px;
  padding: 0.35em 0.625em 0.75em;
}

/**
 * 1. Correct `color` not being inherited in IE 8/9/10/11.
 * 2. Remove padding so people aren't caught out if they zero out fieldsets.
 */
legend {
  border: 0; /* 1 */
  padding: 0; /* 2 */
}

/**
 * Remove default vertical scrollbar in IE 8/9/10/11.
 */
textarea {
  overflow: auto;
}

/**
 * Don't inherit the `font-weight` (applied by a rule above).
 * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
 */
optgroup {
  font-weight: bold;
}

/* Tables
   ========================================================================== */
/**
 * Remove most spacing between table cells.
 */
table {
  border-collapse: collapse;
  border-spacing: 0;
}

td,
th {
  padding: 0;
}

/*!
 * KaTeX v0.18.1
 * Plus added customizations for the theme
 */
/* stylelint-disable font-family-no-missing-generic-family-keyword */
@font-face {
  font-family: "KaTeX_AMS";
  src: url("../../assets/fonts/katex/KaTeX_AMS-Regular.woff2") format("woff2"), url("../../assets/fonts/katex/KaTeX_AMS-Regular.woff") format("woff");
  font-weight: normal;
  font-style: normal;
  font-display: block;
}
@font-face {
  font-family: "KaTeX_Caligraphic";
  src: url("../../assets/fonts/katex/KaTeX_Caligraphic-Bold.woff2") format("woff2"), url("../../assets/fonts/katex/KaTeX_Caligraphic-Bold.woff") format("woff");
  font-weight: bold;
  font-style: normal;
  font-display: block;
}
@font-face {
  font-family: "KaTeX_Caligraphic";
  src: url("../../assets/fonts/katex/KaTeX_Caligraphic-Regular.woff2") format("woff2"), url("../../assets/fonts/katex/KaTeX_Caligraphic-Regular.woff") format("woff");
  font-weight: normal;
  font-style: normal;
  font-display: block;
}
@font-face {
  font-family: "KaTeX_Fraktur";
  src: url("../../assets/fonts/katex/KaTeX_Fraktur-Bold.woff2") format("woff2"), url("../../assets/fonts/katex/KaTeX_Fraktur-Bold.woff") format("woff");
  font-weight: bold;
  font-style: normal;
  font-display: block;
}
@font-face {
  font-family: "KaTeX_Fraktur";
  src: url("../../assets/fonts/katex/KaTeX_Fraktur-Regular.woff2") format("woff2"), url("../../assets/fonts/katex/KaTeX_Fraktur-Regular.woff") format("woff");
  font-weight: normal;
  font-style: normal;
  font-display: block;
}
@font-face {
  font-family: "KaTeX_Main";
  src: url("../../assets/fonts/katex/KaTeX_Main-Bold.woff2") format("woff2"), url("../../assets/fonts/katex/KaTeX_Main-Bold.woff") format("woff");
  font-weight: bold;
  font-style: normal;
  font-display: block;
}
@font-face {
  font-family: "KaTeX_Main";
  src: url("../../assets/fonts/katex/KaTeX_Main-BoldItalic.woff2") format("woff2"), url("../../assets/fonts/katex/KaTeX_Main-BoldItalic.woff") format("woff");
  font-weight: bold;
  font-style: italic;
  font-display: block;
}
@font-face {
  font-family: "KaTeX_Main";
  src: url("../../assets/fonts/katex/KaTeX_Main-Italic.woff2") format("woff2"), url("../../assets/fonts/katex/KaTeX_Main-Italic.woff") format("woff");
  font-weight: normal;
  font-style: italic;
  font-display: block;
}
@font-face {
  font-family: "KaTeX_Main";
  src: url("../../assets/fonts/katex/KaTeX_Main-Regular.woff2") format("woff2"), url("../../assets/fonts/katex/KaTeX_Main-Regular.woff") format("woff");
  font-weight: normal;
  font-style: normal;
  font-display: block;
}
@font-face {
  font-family: "KaTeX_Math";
  src: url("../../assets/fonts/katex/KaTeX_Math-BoldItalic.woff2") format("woff2"), url("../../assets/fonts/katex/KaTeX_Math-BoldItalic.woff") format("woff");
  font-weight: bold;
  font-style: italic;
  font-display: block;
}
@font-face {
  font-family: "KaTeX_Math";
  src: url("../../assets/fonts/katex/KaTeX_Math-Italic.woff2") format("woff2"), url("../../assets/fonts/katex/KaTeX_Math-Italic.woff") format("woff");
  font-weight: normal;
  font-style: italic;
  font-display: block;
}
@font-face {
  font-family: "KaTeX_SansSerif";
  src: url("../../assets/fonts/katex/KaTeX_SansSerif-Bold.woff2") format("woff2"), url("../../assets/fonts/katex/KaTeX_SansSerif-Bold.woff") format("woff");
  font-weight: bold;
  font-style: normal;
  font-display: block;
}
@font-face {
  font-family: "KaTeX_SansSerif";
  src: url("../../assets/fonts/katex/KaTeX_SansSerif-Italic.woff2") format("woff2"), url("../../assets/fonts/katex/KaTeX_SansSerif-Italic.woff") format("woff");
  font-weight: normal;
  font-style: italic;
  font-display: block;
}
@font-face {
  font-family: "KaTeX_SansSerif";
  src: url("../../assets/fonts/katex/KaTeX_SansSerif-Regular.woff2") format("woff2"), url("../../assets/fonts/katex/KaTeX_SansSerif-Regular.woff") format("woff");
  font-weight: normal;
  font-style: normal;
  font-display: block;
}
@font-face {
  font-family: "KaTeX_Script";
  src: url("../../assets/fonts/katex/KaTeX_Script-Regular.woff2") format("woff2"), url("../../assets/fonts/katex/KaTeX_Script-Regular.woff") format("woff");
  font-weight: normal;
  font-style: normal;
  font-display: block;
}
@font-face {
  font-family: "KaTeX_Size1";
  src: url("../../assets/fonts/katex/KaTeX_Size1-Regular.woff2") format("woff2"), url("../../assets/fonts/katex/KaTeX_Size1-Regular.woff") format("woff");
  font-weight: normal;
  font-style: normal;
  font-display: block;
}
@font-face {
  font-family: "KaTeX_Size2";
  src: url("../../assets/fonts/katex/KaTeX_Size2-Regular.woff2") format("woff2"), url("../../assets/fonts/katex/KaTeX_Size2-Regular.woff") format("woff");
  font-weight: normal;
  font-style: normal;
  font-display: block;
}
@font-face {
  font-family: "KaTeX_Size3";
  src: url("../../assets/fonts/katex/KaTeX_Size3-Regular.woff2") format("woff2"), url("../../assets/fonts/katex/KaTeX_Size3-Regular.woff") format("woff");
  font-weight: normal;
  font-style: normal;
  font-display: block;
}
@font-face {
  font-family: "KaTeX_Size4";
  src: url("../../assets/fonts/katex/KaTeX_Size4-Regular.woff2") format("woff2"), url("../../assets/fonts/katex/KaTeX_Size4-Regular.woff") format("woff");
  font-weight: normal;
  font-style: normal;
  font-display: block;
}
@font-face {
  font-family: "KaTeX_Typewriter";
  src: url("../../assets/fonts/katex/KaTeX_Typewriter-Regular.woff2") format("woff2"), url("../../assets/fonts/katex/KaTeX_Typewriter-Regular.woff") format("woff");
  font-weight: normal;
  font-style: normal;
  font-display: block;
}
.katex {
  font: normal 1.21em KaTeX_Main, Times New Roman, serif;
  line-height: 1.2;
  position: relative;
  text-indent: 0;
  text-rendering: auto;
}

.katex * {
  -ms-high-contrast-adjust: none !important;
}

.katex * {
  border-color: currentColor;
}

.katex .katex-version::after {
  content: "0.18.1";
}

.katex .katex-mathml {
  /* Accessibility hack to only show to screen readers
   Found at: http://a11yproject.com/posts/how-to-hide-content/ */
  position: absolute;
  -webkit-clip-path: inset(50%);
  clip-path: inset(50%);
  padding: 0;
  border: 0;
  height: 1px;
  width: 1px;
  overflow: hidden;
}

.katex .katex-html {
  /* \newline is an empty block at top level, between .katex-base elements */
}

.katex .katex-html > .katex-newline {
  display: block;
}

.katex .katex-base {
  position: relative;
  display: inline-block;
  white-space: nowrap;
  width: -webkit-min-content;
  width: -moz-min-content;
  width: min-content;
}

.katex .katex-strut {
  display: inline-block;
}

.katex .textbf {
  font-weight: bold;
}

.katex .textit {
  font-style: italic;
}

.katex .textrm {
  font-family: KaTeX_Main;
}

.katex .textsf {
  font-family: KaTeX_SansSerif;
}

.katex .texttt {
  font-family: KaTeX_Typewriter;
}

.katex .mathnormal {
  font-family: KaTeX_Math;
  font-style: italic;
}

.katex .mathit {
  font-family: KaTeX_Main;
  font-style: italic;
}

.katex .mathrm {
  font-style: normal;
}

.katex .mathbf {
  font-family: KaTeX_Main;
  font-weight: bold;
}

.katex .boldsymbol {
  font-family: KaTeX_Math;
  font-weight: bold;
  font-style: italic;
}

.katex .amsrm {
  font-family: KaTeX_AMS;
}

.katex .mathbb,
.katex .textbb {
  font-family: KaTeX_AMS;
}

.katex .mathcal {
  font-family: KaTeX_Caligraphic;
}

.katex .mathfrak,
.katex .textfrak {
  font-family: KaTeX_Fraktur;
}

.katex .mathboldfrak,
.katex .textboldfrak {
  font-family: KaTeX_Fraktur;
  font-weight: bold;
}

.katex .mathtt {
  font-family: KaTeX_Typewriter;
}

.katex .mathscr,
.katex .textscr {
  font-family: KaTeX_Script;
}

.katex .mathsf,
.katex .textsf {
  font-family: KaTeX_SansSerif;
}

.katex .mathboldsf,
.katex .textboldsf {
  font-family: KaTeX_SansSerif;
  font-weight: bold;
}

.katex .mathsfit,
.katex .mathitsf,
.katex .textitsf {
  font-family: KaTeX_SansSerif;
  font-style: italic;
}

.katex .mainrm {
  font-family: KaTeX_Main;
  font-style: normal;
}

.katex .vlist-t {
  display: inline-table;
  table-layout: fixed;
  border-collapse: collapse;
}

.katex .vlist-r {
  display: table-row;
}

.katex .vlist {
  display: table-cell;
  vertical-align: bottom;
  position: relative;
}

.katex .vlist > span {
  display: block;
  height: 0;
  position: relative;
}

.katex .vlist > span > span {
  display: inline-block;
}

.katex .vlist > span > .pstrut {
  overflow: hidden;
  width: 0;
}

.katex .vlist-t2 {
  margin-right: -2px;
}

.katex .vlist-s {
  display: table-cell;
  vertical-align: bottom;
  font-size: 1px;
  width: 2px;
  min-width: 2px;
}

.katex .katex-vbox {
  display: inline-flex;
  flex-direction: column;
  align-items: baseline;
}

.katex .katex-thinbox {
  display: inline-flex;
  flex-direction: row;
  width: 0;
  max-width: 0;
}

.katex .msupsub {
  text-align: left;
}

.katex .mfrac > span > span {
  text-align: center;
}

.katex .mfrac .frac-line {
  display: inline-block;
  width: 100%;
  border-bottom-style: solid;
}

.katex .mfrac .frac-line,
.katex .katex-overline .overline-line,
.katex .katex-underline .underline-line,
.katex .katex-hline,
.katex .katex-hdashline,
.katex .katex-rule {
  min-height: 1px;
}

.katex .mspace {
  display: inline-block;
}

.katex .katex-smash {
  display: inline;
  line-height: 0;
}

.katex .llap,
.katex .rlap,
.katex .clap {
  width: 0;
  position: relative;
}

.katex .llap > .katex-inner,
.katex .rlap > .katex-inner,
.katex .clap > .katex-inner {
  position: absolute;
}

.katex .llap > .katex-fix,
.katex .rlap > .katex-fix,
.katex .clap > .katex-fix {
  display: inline-block;
}

.katex .llap > .katex-inner {
  right: 0;
}

.katex .rlap > .katex-inner,
.katex .clap > .katex-inner {
  left: 0;
}

.katex .clap > .katex-inner > span {
  margin-left: -50%;
  margin-right: 50%;
}

.katex .katex-rule {
  display: inline-block;
  border: solid 0;
  position: relative;
}

.katex .katex-overline .overline-line,
.katex .katex-underline .underline-line,
.katex .katex-hline {
  display: inline-block;
  width: 100%;
  border-bottom-style: solid;
}

.katex .katex-hdashline {
  display: inline-block;
  width: 100%;
  border-bottom-style: dashed;
}

.katex .sqrt > .katex-root {
  /* These values are taken from the definition of `\r@@t`,
   `\mkern 5mu` and `\mkern -10mu`. */
  margin-left: 0.2777777778em;
  margin-right: -0.5555555556em;
}

.katex .katex-sizing.reset-size1.size1,
.katex .fontsize-ensurer.reset-size1.size1 {
  font-size: 1em;
}

.katex .katex-sizing.reset-size1.size2,
.katex .fontsize-ensurer.reset-size1.size2 {
  font-size: 1.2em;
}

.katex .katex-sizing.reset-size1.size3,
.katex .fontsize-ensurer.reset-size1.size3 {
  font-size: 1.4em;
}

.katex .katex-sizing.reset-size1.size4,
.katex .fontsize-ensurer.reset-size1.size4 {
  font-size: 1.6em;
}

.katex .katex-sizing.reset-size1.size5,
.katex .fontsize-ensurer.reset-size1.size5 {
  font-size: 1.8em;
}

.katex .katex-sizing.reset-size1.size6,
.katex .fontsize-ensurer.reset-size1.size6 {
  font-size: 2em;
}

.katex .katex-sizing.reset-size1.size7,
.katex .fontsize-ensurer.reset-size1.size7 {
  font-size: 2.4em;
}

.katex .katex-sizing.reset-size1.size8,
.katex .fontsize-ensurer.reset-size1.size8 {
  font-size: 2.88em;
}

.katex .katex-sizing.reset-size1.size9,
.katex .fontsize-ensurer.reset-size1.size9 {
  font-size: 3.456em;
}

.katex .katex-sizing.reset-size1.size10,
.katex .fontsize-ensurer.reset-size1.size10 {
  font-size: 4.148em;
}

.katex .katex-sizing.reset-size1.size11,
.katex .fontsize-ensurer.reset-size1.size11 {
  font-size: 4.976em;
}

.katex .katex-sizing.reset-size2.size1,
.katex .fontsize-ensurer.reset-size2.size1 {
  font-size: 0.8333333333em;
}

.katex .katex-sizing.reset-size2.size2,
.katex .fontsize-ensurer.reset-size2.size2 {
  font-size: 1em;
}

.katex .katex-sizing.reset-size2.size3,
.katex .fontsize-ensurer.reset-size2.size3 {
  font-size: 1.1666666667em;
}

.katex .katex-sizing.reset-size2.size4,
.katex .fontsize-ensurer.reset-size2.size4 {
  font-size: 1.3333333333em;
}

.katex .katex-sizing.reset-size2.size5,
.katex .fontsize-ensurer.reset-size2.size5 {
  font-size: 1.5em;
}

.katex .katex-sizing.reset-size2.size6,
.katex .fontsize-ensurer.reset-size2.size6 {
  font-size: 1.6666666667em;
}

.katex .katex-sizing.reset-size2.size7,
.katex .fontsize-ensurer.reset-size2.size7 {
  font-size: 2em;
}

.katex .katex-sizing.reset-size2.size8,
.katex .fontsize-ensurer.reset-size2.size8 {
  font-size: 2.4em;
}

.katex .katex-sizing.reset-size2.size9,
.katex .fontsize-ensurer.reset-size2.size9 {
  font-size: 2.88em;
}

.katex .katex-sizing.reset-size2.size10,
.katex .fontsize-ensurer.reset-size2.size10 {
  font-size: 3.4566666667em;
}

.katex .katex-sizing.reset-size2.size11,
.katex .fontsize-ensurer.reset-size2.size11 {
  font-size: 4.1466666667em;
}

.katex .katex-sizing.reset-size3.size1,
.katex .fontsize-ensurer.reset-size3.size1 {
  font-size: 0.7142857143em;
}

.katex .katex-sizing.reset-size3.size2,
.katex .fontsize-ensurer.reset-size3.size2 {
  font-size: 0.8571428571em;
}

.katex .katex-sizing.reset-size3.size3,
.katex .fontsize-ensurer.reset-size3.size3 {
  font-size: 1em;
}

.katex .katex-sizing.reset-size3.size4,
.katex .fontsize-ensurer.reset-size3.size4 {
  font-size: 1.1428571429em;
}

.katex .katex-sizing.reset-size3.size5,
.katex .fontsize-ensurer.reset-size3.size5 {
  font-size: 1.2857142857em;
}

.katex .katex-sizing.reset-size3.size6,
.katex .fontsize-ensurer.reset-size3.size6 {
  font-size: 1.4285714286em;
}

.katex .katex-sizing.reset-size3.size7,
.katex .fontsize-ensurer.reset-size3.size7 {
  font-size: 1.7142857143em;
}

.katex .katex-sizing.reset-size3.size8,
.katex .fontsize-ensurer.reset-size3.size8 {
  font-size: 2.0571428571em;
}

.katex .katex-sizing.reset-size3.size9,
.katex .fontsize-ensurer.reset-size3.size9 {
  font-size: 2.4685714286em;
}

.katex .katex-sizing.reset-size3.size10,
.katex .fontsize-ensurer.reset-size3.size10 {
  font-size: 2.9628571429em;
}

.katex .katex-sizing.reset-size3.size11,
.katex .fontsize-ensurer.reset-size3.size11 {
  font-size: 3.5542857143em;
}

.katex .katex-sizing.reset-size4.size1,
.katex .fontsize-ensurer.reset-size4.size1 {
  font-size: 0.625em;
}

.katex .katex-sizing.reset-size4.size2,
.katex .fontsize-ensurer.reset-size4.size2 {
  font-size: 0.75em;
}

.katex .katex-sizing.reset-size4.size3,
.katex .fontsize-ensurer.reset-size4.size3 {
  font-size: 0.875em;
}

.katex .katex-sizing.reset-size4.size4,
.katex .fontsize-ensurer.reset-size4.size4 {
  font-size: 1em;
}

.katex .katex-sizing.reset-size4.size5,
.katex .fontsize-ensurer.reset-size4.size5 {
  font-size: 1.125em;
}

.katex .katex-sizing.reset-size4.size6,
.katex .fontsize-ensurer.reset-size4.size6 {
  font-size: 1.25em;
}

.katex .katex-sizing.reset-size4.size7,
.katex .fontsize-ensurer.reset-size4.size7 {
  font-size: 1.5em;
}

.katex .katex-sizing.reset-size4.size8,
.katex .fontsize-ensurer.reset-size4.size8 {
  font-size: 1.8em;
}

.katex .katex-sizing.reset-size4.size9,
.katex .fontsize-ensurer.reset-size4.size9 {
  font-size: 2.16em;
}

.katex .katex-sizing.reset-size4.size10,
.katex .fontsize-ensurer.reset-size4.size10 {
  font-size: 2.5925em;
}

.katex .katex-sizing.reset-size4.size11,
.katex .fontsize-ensurer.reset-size4.size11 {
  font-size: 3.11em;
}

.katex .katex-sizing.reset-size5.size1,
.katex .fontsize-ensurer.reset-size5.size1 {
  font-size: 0.5555555556em;
}

.katex .katex-sizing.reset-size5.size2,
.katex .fontsize-ensurer.reset-size5.size2 {
  font-size: 0.6666666667em;
}

.katex .katex-sizing.reset-size5.size3,
.katex .fontsize-ensurer.reset-size5.size3 {
  font-size: 0.7777777778em;
}

.katex .katex-sizing.reset-size5.size4,
.katex .fontsize-ensurer.reset-size5.size4 {
  font-size: 0.8888888889em;
}

.katex .katex-sizing.reset-size5.size5,
.katex .fontsize-ensurer.reset-size5.size5 {
  font-size: 1em;
}

.katex .katex-sizing.reset-size5.size6,
.katex .fontsize-ensurer.reset-size5.size6 {
  font-size: 1.1111111111em;
}

.katex .katex-sizing.reset-size5.size7,
.katex .fontsize-ensurer.reset-size5.size7 {
  font-size: 1.3333333333em;
}

.katex .katex-sizing.reset-size5.size8,
.katex .fontsize-ensurer.reset-size5.size8 {
  font-size: 1.6em;
}

.katex .katex-sizing.reset-size5.size9,
.katex .fontsize-ensurer.reset-size5.size9 {
  font-size: 1.92em;
}

.katex .katex-sizing.reset-size5.size10,
.katex .fontsize-ensurer.reset-size5.size10 {
  font-size: 2.3044444444em;
}

.katex .katex-sizing.reset-size5.size11,
.katex .fontsize-ensurer.reset-size5.size11 {
  font-size: 2.7644444444em;
}

.katex .katex-sizing.reset-size6.size1,
.katex .fontsize-ensurer.reset-size6.size1 {
  font-size: 0.5em;
}

.katex .katex-sizing.reset-size6.size2,
.katex .fontsize-ensurer.reset-size6.size2 {
  font-size: 0.6em;
}

.katex .katex-sizing.reset-size6.size3,
.katex .fontsize-ensurer.reset-size6.size3 {
  font-size: 0.7em;
}

.katex .katex-sizing.reset-size6.size4,
.katex .fontsize-ensurer.reset-size6.size4 {
  font-size: 0.8em;
}

.katex .katex-sizing.reset-size6.size5,
.katex .fontsize-ensurer.reset-size6.size5 {
  font-size: 0.9em;
}

.katex .katex-sizing.reset-size6.size6,
.katex .fontsize-ensurer.reset-size6.size6 {
  font-size: 1em;
}

.katex .katex-sizing.reset-size6.size7,
.katex .fontsize-ensurer.reset-size6.size7 {
  font-size: 1.2em;
}

.katex .katex-sizing.reset-size6.size8,
.katex .fontsize-ensurer.reset-size6.size8 {
  font-size: 1.44em;
}

.katex .katex-sizing.reset-size6.size9,
.katex .fontsize-ensurer.reset-size6.size9 {
  font-size: 1.728em;
}

.katex .katex-sizing.reset-size6.size10,
.katex .fontsize-ensurer.reset-size6.size10 {
  font-size: 2.074em;
}

.katex .katex-sizing.reset-size6.size11,
.katex .fontsize-ensurer.reset-size6.size11 {
  font-size: 2.488em;
}

.katex .katex-sizing.reset-size7.size1,
.katex .fontsize-ensurer.reset-size7.size1 {
  font-size: 0.4166666667em;
}

.katex .katex-sizing.reset-size7.size2,
.katex .fontsize-ensurer.reset-size7.size2 {
  font-size: 0.5em;
}

.katex .katex-sizing.reset-size7.size3,
.katex .fontsize-ensurer.reset-size7.size3 {
  font-size: 0.5833333333em;
}

.katex .katex-sizing.reset-size7.size4,
.katex .fontsize-ensurer.reset-size7.size4 {
  font-size: 0.6666666667em;
}

.katex .katex-sizing.reset-size7.size5,
.katex .fontsize-ensurer.reset-size7.size5 {
  font-size: 0.75em;
}

.katex .katex-sizing.reset-size7.size6,
.katex .fontsize-ensurer.reset-size7.size6 {
  font-size: 0.8333333333em;
}

.katex .katex-sizing.reset-size7.size7,
.katex .fontsize-ensurer.reset-size7.size7 {
  font-size: 1em;
}

.katex .katex-sizing.reset-size7.size8,
.katex .fontsize-ensurer.reset-size7.size8 {
  font-size: 1.2em;
}

.katex .katex-sizing.reset-size7.size9,
.katex .fontsize-ensurer.reset-size7.size9 {
  font-size: 1.44em;
}

.katex .katex-sizing.reset-size7.size10,
.katex .fontsize-ensurer.reset-size7.size10 {
  font-size: 1.7283333333em;
}

.katex .katex-sizing.reset-size7.size11,
.katex .fontsize-ensurer.reset-size7.size11 {
  font-size: 2.0733333333em;
}

.katex .katex-sizing.reset-size8.size1,
.katex .fontsize-ensurer.reset-size8.size1 {
  font-size: 0.3472222222em;
}

.katex .katex-sizing.reset-size8.size2,
.katex .fontsize-ensurer.reset-size8.size2 {
  font-size: 0.4166666667em;
}

.katex .katex-sizing.reset-size8.size3,
.katex .fontsize-ensurer.reset-size8.size3 {
  font-size: 0.4861111111em;
}

.katex .katex-sizing.reset-size8.size4,
.katex .fontsize-ensurer.reset-size8.size4 {
  font-size: 0.5555555556em;
}

.katex .katex-sizing.reset-size8.size5,
.katex .fontsize-ensurer.reset-size8.size5 {
  font-size: 0.625em;
}

.katex .katex-sizing.reset-size8.size6,
.katex .fontsize-ensurer.reset-size8.size6 {
  font-size: 0.6944444444em;
}

.katex .katex-sizing.reset-size8.size7,
.katex .fontsize-ensurer.reset-size8.size7 {
  font-size: 0.8333333333em;
}

.katex .katex-sizing.reset-size8.size8,
.katex .fontsize-ensurer.reset-size8.size8 {
  font-size: 1em;
}

.katex .katex-sizing.reset-size8.size9,
.katex .fontsize-ensurer.reset-size8.size9 {
  font-size: 1.2em;
}

.katex .katex-sizing.reset-size8.size10,
.katex .fontsize-ensurer.reset-size8.size10 {
  font-size: 1.4402777778em;
}

.katex .katex-sizing.reset-size8.size11,
.katex .fontsize-ensurer.reset-size8.size11 {
  font-size: 1.7277777778em;
}

.katex .katex-sizing.reset-size9.size1,
.katex .fontsize-ensurer.reset-size9.size1 {
  font-size: 0.2893518519em;
}

.katex .katex-sizing.reset-size9.size2,
.katex .fontsize-ensurer.reset-size9.size2 {
  font-size: 0.3472222222em;
}

.katex .katex-sizing.reset-size9.size3,
.katex .fontsize-ensurer.reset-size9.size3 {
  font-size: 0.4050925926em;
}

.katex .katex-sizing.reset-size9.size4,
.katex .fontsize-ensurer.reset-size9.size4 {
  font-size: 0.462962963em;
}

.katex .katex-sizing.reset-size9.size5,
.katex .fontsize-ensurer.reset-size9.size5 {
  font-size: 0.5208333333em;
}

.katex .katex-sizing.reset-size9.size6,
.katex .fontsize-ensurer.reset-size9.size6 {
  font-size: 0.5787037037em;
}

.katex .katex-sizing.reset-size9.size7,
.katex .fontsize-ensurer.reset-size9.size7 {
  font-size: 0.6944444444em;
}

.katex .katex-sizing.reset-size9.size8,
.katex .fontsize-ensurer.reset-size9.size8 {
  font-size: 0.8333333333em;
}

.katex .katex-sizing.reset-size9.size9,
.katex .fontsize-ensurer.reset-size9.size9 {
  font-size: 1em;
}

.katex .katex-sizing.reset-size9.size10,
.katex .fontsize-ensurer.reset-size9.size10 {
  font-size: 1.2002314815em;
}

.katex .katex-sizing.reset-size9.size11,
.katex .fontsize-ensurer.reset-size9.size11 {
  font-size: 1.4398148148em;
}

.katex .katex-sizing.reset-size10.size1,
.katex .fontsize-ensurer.reset-size10.size1 {
  font-size: 0.2410800386em;
}

.katex .katex-sizing.reset-size10.size2,
.katex .fontsize-ensurer.reset-size10.size2 {
  font-size: 0.2892960463em;
}

.katex .katex-sizing.reset-size10.size3,
.katex .fontsize-ensurer.reset-size10.size3 {
  font-size: 0.337512054em;
}

.katex .katex-sizing.reset-size10.size4,
.katex .fontsize-ensurer.reset-size10.size4 {
  font-size: 0.3857280617em;
}

.katex .katex-sizing.reset-size10.size5,
.katex .fontsize-ensurer.reset-size10.size5 {
  font-size: 0.4339440694em;
}

.katex .katex-sizing.reset-size10.size6,
.katex .fontsize-ensurer.reset-size10.size6 {
  font-size: 0.4821600771em;
}

.katex .katex-sizing.reset-size10.size7,
.katex .fontsize-ensurer.reset-size10.size7 {
  font-size: 0.5785920926em;
}

.katex .katex-sizing.reset-size10.size8,
.katex .fontsize-ensurer.reset-size10.size8 {
  font-size: 0.6943105111em;
}

.katex .katex-sizing.reset-size10.size9,
.katex .fontsize-ensurer.reset-size10.size9 {
  font-size: 0.8331726133em;
}

.katex .katex-sizing.reset-size10.size10,
.katex .fontsize-ensurer.reset-size10.size10 {
  font-size: 1em;
}

.katex .katex-sizing.reset-size10.size11,
.katex .fontsize-ensurer.reset-size10.size11 {
  font-size: 1.1996142719em;
}

.katex .katex-sizing.reset-size11.size1,
.katex .fontsize-ensurer.reset-size11.size1 {
  font-size: 0.2009646302em;
}

.katex .katex-sizing.reset-size11.size2,
.katex .fontsize-ensurer.reset-size11.size2 {
  font-size: 0.2411575563em;
}

.katex .katex-sizing.reset-size11.size3,
.katex .fontsize-ensurer.reset-size11.size3 {
  font-size: 0.2813504823em;
}

.katex .katex-sizing.reset-size11.size4,
.katex .fontsize-ensurer.reset-size11.size4 {
  font-size: 0.3215434084em;
}

.katex .katex-sizing.reset-size11.size5,
.katex .fontsize-ensurer.reset-size11.size5 {
  font-size: 0.3617363344em;
}

.katex .katex-sizing.reset-size11.size6,
.katex .fontsize-ensurer.reset-size11.size6 {
  font-size: 0.4019292605em;
}

.katex .katex-sizing.reset-size11.size7,
.katex .fontsize-ensurer.reset-size11.size7 {
  font-size: 0.4823151125em;
}

.katex .katex-sizing.reset-size11.size8,
.katex .fontsize-ensurer.reset-size11.size8 {
  font-size: 0.578778135em;
}

.katex .katex-sizing.reset-size11.size9,
.katex .fontsize-ensurer.reset-size11.size9 {
  font-size: 0.6945337621em;
}

.katex .katex-sizing.reset-size11.size10,
.katex .fontsize-ensurer.reset-size11.size10 {
  font-size: 0.8336012862em;
}

.katex .katex-sizing.reset-size11.size11,
.katex .fontsize-ensurer.reset-size11.size11 {
  font-size: 1em;
}

.katex .delimsizing.size1 {
  font-family: KaTeX_Size1;
}

.katex .delimsizing.size2 {
  font-family: KaTeX_Size2;
}

.katex .delimsizing.size3 {
  font-family: KaTeX_Size3;
}

.katex .delimsizing.size4 {
  font-family: KaTeX_Size4;
}

.katex .delimsizing.mult .delim-size1 > span {
  font-family: KaTeX_Size1;
}

.katex .delimsizing.mult .delim-size4 > span {
  font-family: KaTeX_Size4;
}

.katex .nulldelimiter {
  display: inline-block;
  width: 0.12em;
}

.katex .delimcenter {
  position: relative;
}

.katex .op-symbol {
  position: relative;
}

.katex .op-symbol.small-op {
  font-family: KaTeX_Size1;
}

.katex .op-symbol.large-op {
  font-family: KaTeX_Size2;
}

.katex .op-limits > .vlist-t {
  text-align: center;
}

.katex .katex-accent > .vlist-t {
  text-align: center;
}

.katex .katex-accent .accent-body {
  position: relative;
}

.katex .katex-accent .accent-body:not(.accent-full) {
  width: 0;
}

.katex .katex-overlay {
  display: block;
}

.katex .mtable .vertical-separator {
  display: inline-block;
  min-width: 1px;
}

.katex .mtable .arraycolsep {
  display: inline-block;
}

.katex .mtable .col-align-c > .vlist-t {
  text-align: center;
}

.katex .mtable .col-align-l > .vlist-t {
  text-align: left;
}

.katex .mtable .col-align-r > .vlist-t {
  text-align: right;
}

.katex .svg-align {
  text-align: left;
}

.katex svg {
  display: block;
  position: absolute;
  width: 100%;
  height: inherit;
  fill: currentColor;
  stroke: currentColor;
}

.katex svg path {
  stroke: none;
}

.katex svg {
  fill-rule: nonzero;
  fill-opacity: 1;
  stroke-width: 1;
  stroke-linecap: butt;
  stroke-linejoin: miter;
  stroke-miterlimit: 4;
  stroke-dasharray: none;
  stroke-dashoffset: 0;
  stroke-opacity: 1;
}

.katex img {
  border-style: none;
  min-width: 0;
  min-height: 0;
  max-width: none;
  max-height: none;
}

.katex .katex-stretchy {
  width: 100%;
  display: block;
  position: relative;
  overflow: hidden;
}

.katex .katex-stretchy::before, .katex .katex-stretchy::after {
  content: "";
}

.katex .hide-tail {
  width: 100%;
  position: relative;
  overflow: hidden;
}

.katex .halfarrow-left {
  position: absolute;
  left: 0;
  width: 50.2%;
  overflow: hidden;
}

.katex .halfarrow-right {
  position: absolute;
  right: 0;
  width: 50.2%;
  overflow: hidden;
}

.katex .brace-left {
  position: absolute;
  left: 0;
  width: 25.1%;
  overflow: hidden;
}

.katex .brace-center {
  position: absolute;
  left: 25%;
  width: 50%;
  overflow: hidden;
}

.katex .brace-right {
  position: absolute;
  right: 0;
  width: 25.1%;
  overflow: hidden;
}

.katex .x-arrow-pad {
  padding: 0 0.5em;
}

.katex .cd-arrow-pad {
  padding: 0 0.55556em 0 0.27778em;
}

.katex .x-arrow,
.katex .mover,
.katex .munder {
  text-align: center;
}

.katex .boxpad {
  padding: 0 0.3em;
}

.katex .fbox,
.katex .fcolorbox {
  box-sizing: border-box;
  border: 0.04em solid;
}

.katex .cancel-pad {
  padding: 0 0.2em;
}

.katex .cancel-lap {
  margin-left: -0.2em;
  margin-right: -0.2em;
}

.katex .katex-sout {
  border-bottom-style: solid;
  border-bottom-width: 0.08em;
}

.katex .angl {
  box-sizing: border-box;
  border-top: 0.049em solid;
  border-right: 0.049em solid;
  margin-right: 0.03889em;
}

.katex .anglpad {
  padding: 0 0.03889em;
}

.katex .eqn-num::before {
  counter-increment: katexEqnNo;
  content: "(" counter(katexEqnNo) ")";
}

.katex .mml-eqn-num::before {
  counter-increment: mmlEqnNo;
  content: "(" counter(mmlEqnNo) ")";
}

.katex .mtr-glue {
  width: 50%;
}

.katex .cd-vert-arrow {
  display: inline-block;
  position: relative;
}

.katex .cd-label-left {
  display: inline-block;
  position: absolute;
  right: calc(50% + 0.3em);
  text-align: left;
}

.katex .cd-label-right {
  display: inline-block;
  position: absolute;
  left: calc(50% + 0.3em);
  text-align: right;
}

.katex-display {
  display: block;
  margin: 1em 0;
  text-align: center;
}

.katex-display > .katex {
  display: block;
  text-align: center;
  white-space: nowrap;
}

.katex-display > .katex > .katex-html {
  display: block;
  position: relative;
}

.katex-display > .katex > .katex-html > .katex-tag {
  position: absolute;
  right: 0;
}

.katex-display.leqno > .katex > .katex-html > .katex-tag {
  left: 0;
  right: auto;
}

.katex-display.fleqn > .katex {
  text-align: left;
  padding-left: 2em;
}

body {
  counter-reset: katexEqnNo mmlEqnNo;
}

@media screen and (max-width: 576px) {
  .katex-display {
    overflow-x: auto;
  }
}
.katex-display {
  padding-bottom: 3px;
  padding-top: 1px;
  width: auto;
  height: auto;
}

.math-display {
  display: inline-block;
  width: 100%;
}

/* Base */
@layer reset {
  * {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
  }
}
figure {
  margin: 0;
}

html,
body {
  background: var(--background);
}

::selection {
  background: var(--selection);
}

body {
  color: var(--text);
  font-family: "Source Sans Pro", Helvetica, Arial, sans-serif;
  font-size: 1.25em;
  word-wrap: break-word;
}

h1,
h2,
h3,
h4,
h5,
h6 {
  font-family: "Source Sans Pro", Helvetica, Arial, sans-serif;
  line-height: 1.3;
  margin: 0.67em 0;
}
h1 a,
h2 a,
h3 a,
h4 a,
h5 a,
h6 a {
  color: var(--text);
}

h1 {
  font-size: 2.3em;
}

h2 {
  font-size: 1.75em;
}

h3 {
  font-size: 1.5em;
}

h4 {
  font-size: 1.15em;
}

iframe,
img,
embed,
object,
video {
  max-width: 100%;
  padding: 0 9%;
  margin-left: auto;
  margin-right: auto;
}

img[align=left] {
  margin-right: 3%;
}

img[align=right] {
  margin-left: 3%;
}

summary {
  cursor: pointer;
}

/* ---- Responsive ---- */
@media screen and (max-width: 768px) {
  h1 {
    font-size: 2em;
  }
  h2 {
    font-size: 1.5em;
  }
  h3 {
    font-size: 1em;
  }
  h4, tr, th, .meta, #post-nav p {
    font-size: 0.9em;
  }
  p, li, td {
    font-size: 0.8em;
  }
  iframe,
  img,
  embed,
  object,
  video {
    max-width: 100%;
    padding: 0 1%;
  }
}
@media screen and (max-width: 576px) {
  h1 {
    font-size: 1.5em;
  }
  h2 {
    font-size: 1em;
  }
  h3 {
    font-size: 0.9em;
  }
  h4, th, tr, .meta, #post-nav p {
    font-size: 0.85em;
  }
  p, li, td {
    font-size: 0.8em;
  }
  li li {
    font-size: 0.95em;
  }
  li li * {
    font-size: 1em;
  }
  table {
    overflow-x: scroll;
  }
}
blockquote {
  border-left: 2px solid var(--blockquote-border);
  margin: 1em 1em;
  padding: 0.75em 1em;
  background-color: var(--blockquote);
  box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1);
}

blockquote *:last-child,
footer *:last-child {
  margin-bottom: 0;
}

table {
  word-wrap: break-word;
  table-layout: fixed;
  width: 100%;
  display: inline-block;
}

td,
th {
  padding: 0.5em 1em;
  border: 1px solid var(--border);
  text-align: left;
}

table,
dl,
kbd,
samp {
  margin: 1em 0;
}

dt {
  font-weight: bold;
}

dd {
  margin-left: 2em;
}

p,
ol,
ul,
dl,
details,
.math-display {
  line-height: 1.5;
  margin-bottom: 1em;
}

li p {
  font-size: inherit;
  display: inline;
}
li > ul, li > ol {
  margin-bottom: 0;
  margin-left: 1em;
}

ol,
ul {
  list-style-position: outside;
  margin-left: 1em;
}

hr {
  border: 0;
  border-top: 1px solid var(--border);
  border-bottom: 1px solid var(--background);
  margin: 1em 0;
}

a:where(:not(.btn)) {
  color: var(--link);
  text-decoration: none;
}

kbd {
  background-color: var(--kbd-background);
  border-radius: 3px;
  border: 1px solid var(--kbd-border);
  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2), 0 2px 0 0 rgba(255, 255, 255, 0.7) inset;
  color: var(--kbd-color);
  display: inline-block;
  font-size: 0.85em;
  font-weight: 700;
  line-height: 1;
  padding: 2px 4px;
  white-space: nowrap;
}

details > summary {
  cursor: pointer;
  display: list-item;
}
details[open] > summary {
  color: var(--link);
}

#cookie-notice {
  padding: 0.5rem 1rem;
  display: none;
  text-align: center;
  position: fixed;
  bottom: 0;
  width: 100%;
  background: rgba(2, 2, 2, 0.85);
  color: lightgray;
  z-index: 1000;
}
#cookie-notice a {
  display: inline-block;
  cursor: pointer;
  margin-left: 0.6rem;
}

.mermaid, .language-mermaid {
  background-color: rgba(255, 255, 255, 0.9);
  border-radius: 2%;
}
.mermaid > svg, .language-mermaid > svg {
  margin: auto;
  display: block;
  height: auto;
  padding-bottom: 2em;
  padding-top: 2em;
  max-width: 100%;
}

div.highlighter-rouge,
figure.highlight,
.highlight code {
  position: relative;
  background: var(--base00);
  color: var(--base07);
  font-family: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, sans-serif;
  font-size: 0.85em;
  line-height: 1.3em;
  border-radius: 4px;
}
div.highlighter-rouge > pre,
div.highlighter-rouge pre.highlight,
figure.highlight > pre,
figure.highlight pre.highlight,
.highlight code > pre,
.highlight code pre.highlight {
  margin: 0;
  padding: 1em;
}

li .highlight * {
  font-size: 14px;
}

pre .rouge-table,
.highlight pre,
.code pre {
  margin: 0;
  overflow: auto;
}

.rouge-table * {
  font-size: 1em;
}

li div.highlighter-rouge {
  margin-top: 0.5em;
}

div.highlighter-rouge,
figure.highlight {
  margin-bottom: 1em;
}

code.highlighter-rouge {
  padding: 0.2em 0.4em;
  font-size: 0.85em;
  background-color: var(--code-background);
  color: var(--code-inline);
  border-radius: 2px;
  font-family: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, sans-serif;
}

table.rouge-table {
  margin-bottom: 0;
  font-size: 1em;
  width: 100%;
  border: 0;
}
table.rouge-table td {
  padding: 0;
  width: calc(100% - 1em);
  border: 0;
  /* line numbers*/
}
table.rouge-table td.gutter, table.rouge-table td.rouge-gutter {
  padding-right: 1em;
  width: 2em;
  color: var(--base04);
  border-right: 1px solid var(--base04);
  text-align: right;
}
table.rouge-table td {
  /* code */
}
table.rouge-table td.code, table.rouge-table td.rouge-code {
  padding-left: 1em;
}
table.rouge-table pre {
  margin: 0;
}

.highlight pre {
  width: 100%;
}
.highlight pre ::selection {
  background-color: var(--base02);
}

.highlight .hll {
  background-color: var(--base06);
}

.highlight .bp { /* Name.Builtin.Pseudo */
  color: var(--base0c);
}
.highlight .c { /* Comment */
  color: var(--base03);
}
.highlight .cm { /* Comment.Multiline */
  color: var(--base03);
}
.highlight .cp { /* Comment.Preproc */
  color: var(--base03);
}
.highlight .c1 { /* Comment.Single */
  color: var(--base03);
}
.highlight .cs { /* Comment.Special */
  color: var(--base03);
}
.highlight .dl { /* String.Quotes 8 */
  color: var(--base0a);
}
.highlight .err { /* Error */
  color: var(--base0c);
}
.highlight .gd { /* Generic.Deleted */
  color: var(--base0c);
}
.highlight .ge { /* Generic.Emph */
  font-style: italic;
}
.highlight .gh { /* Generic.Heading */
  color: var(--base07);
  font-weight: bold;
}
.highlight .gi { /* Generic.Inserted */
  color: var(--base0a);
}
.highlight .gp { /* Generic.Prompt */
  color: var(--base04);
  font-weight: bold;
}
.highlight .gs { /* Generic.Strong */
  font-weight: bold;
}
.highlight .gu { /* Generic.Subheading */
  color: var(--base08);
  font-weight: bold;
}
.highlight .il { /* Literal.Number.Integer.Long */
  color: var(--base0e);
}
.highlight .k { /* Keyword */
  color: var(--base0d);
}
.highlight .kc { /* Keyword.Constant */
  color: var(--base0f);
}
.highlight .kd { /* Keyword.Declaration */
  color: var(--base0d);
}
.highlight .kn { /* Keyword.Namespace */
  color: var(--base0d);
}
.highlight .kp { /* Keyword.Pseudo */
  color: var(--base0d);
}
.highlight .kr { /* Keyword.Reserved */
  color: var(--base0d);
}
.highlight .kt { /* Keyword.Type */
  color: var(--base09);
}
.highlight .l { /* Literal */
  color: var(--base0e);
}
.highlight .ld { /* Literal.Date */
  color: var(--base0a);
}
.highlight .m { /* Literal.Number */
  color: var(--base0e);
}
.highlight .mb { /* Literal.Bytes */
  color: var(--base0e);
}
.highlight .mf { /* Literal.Number.Float */
  color: var(--base0e);
}
.highlight .mh { /* Literal.Number.Hex */
  color: var(--base0e);
}
.highlight .mi { /* Literal.Number.Integer */
  color: var(--base0e);
}
.highlight .mo { /* Literal.Number.Oct */
  color: var(--base0e);
}
.highlight .n { /* Name */
  color: var(--base07);
}
.highlight .na { /* Name.Attribute */
  color: var(--base0c);
}
.highlight .nb { /* Name.Builtin */
  color: var(--base0c);
}
.highlight .nc { /* Name.Class */
  color: var(--base07);
}
.highlight .no { /* Name.Constant */
  color: var(--base07);
}
.highlight .nd { /* Name.Decorator */
  color: var(--base0f);
}
.highlight .ni { /* Name.Entity */
  color: var(--base07);
}
.highlight .ne { /* Name.Exception */
  color: var(--base0c);
}
.highlight .nf { /* Name.Function */
  color: var(--base0b);
}
.highlight .nl { /* Name.Label */
  color: var(--base0c);
}
.highlight .nn { /* Name.Namespace */
  color: var(--base07);
}
.highlight .nt { /* Name.Tag */
  color: var(--base08);
}
.highlight .nv { /* Name.Variable */
  color: var(--base0c);
}
.highlight .nx { /* Name.Other */
  color: var(--base07);
}
.highlight .o { /* Operator */
  color: var(--base08);
}
.highlight .ow { /* Operator.Word */
  color: var(--base0d);
}
.highlight .p { /* Punctuation */
  color: var(--base05);
}
.highlight .pi { /* Name.Property */
  color: var(--base07);
}
.highlight .py { /* Name.Property */
  color: var(--base0d);
}
.highlight .s { /* Literal.String */
  color: var(--base0a);
}
.highlight .sa { /* Literal.String.raw */
  color: var(--base0a);
}
.highlight .sb { /* Literal.String.Backtick */
  color: var(--base0a);
}
.highlight .sc { /* Literal.String.Char */
  color: var(--base07);
}
.highlight .sd { /* Literal.String.Doc */
  color: var(--base04);
}
.highlight .s2 { /* Literal.String.Double */
  color: var(--base0a);
}
.highlight .se { /* Literal.String.Escape */
  color: var(--base0e);
}
.highlight .sh { /* Literal.String.Heredoc */
  color: var(--base0a);
}
.highlight .si { /* Literal.String.Interpol */
  color: var(--base0e);
}
.highlight .sx { /* Literal.String.Other */
  color: var(--base0a);
}
.highlight .sr { /* Literal.String.Regex */
  color: var(--base0a);
}
.highlight .s1 { /* Literal.String.Single */
  color: var(--base0a);
}
.highlight .ss { /* Literal.String.Symbol */
  color: var(--base0a);
}
.highlight .vc { /* Name.Variable.Class */
  color: var(--base0c);
}
.highlight .vg { /* Name.Variable.Global */
  color: var(--base0c);
}
.highlight .vi { /* Name.Variable.Instance */
  color: var(--base0c);
}
.highlight .w { /* Text.Whitespace */
  color: var(--base07);
}

.gist .blob-num {
  width: 3.5% !important;
}

.gist th, .gist td {
  border-bottom: 0;
}

.gist table tbody tr td {
  box-sizing: content-box;
}

.dataframe tbody {
  font-size: 0.8em;
  border-color: white;
}
.dataframe tbody tr :nth-child(even) {
  background-color: #f8f8f8;
}
.dataframe tbody tr th {
  border-top: 0;
  border-left: 0;
  border-bottom: 0;
}
.dataframe tbody tr td {
  padding: 0;
  border: 0;
  text-align: center;
}

.dataframe thead tr :nth-child(n+2) {
  color: black;
  font-size: 0.75em;
  text-align: center !important;
  border-top: 0;
  border-left: 0;
  border-right: 0;
}
.dataframe thead tr :first-child {
  border-top: 0;
  border-left: 0;
}

table.dataframe {
  border: 0 solid var(--border);
  border-collapse: collapse;
}

.pagination, #post-nav {
  padding: 4% 23%;
}
@media (max-width: 2000px) {
  .pagination, #post-nav {
    padding: 4% 18%;
  }
}
@media (max-width: 1400px) {
  .pagination, #post-nav {
    padding: 4% 9%;
  }
}
@media (max-width: 1000px) {
  .pagination, #post-nav {
    padding: 4% 6%;
  }
}
@media (max-width: 576px) {
  .pagination, #post-nav {
    padding: 4% 3%;
  }
}

.posts .post-teaser, .feature-image footer, .feature-image .post-content, .comments, article, .site-footer {
  padding: 3% 23%;
}
@media (max-width: 2000px) {
  .posts .post-teaser, .feature-image footer, .feature-image .post-content, .comments, article, .site-footer {
    padding: 3% 18%;
  }
}
@media (max-width: 1400px) {
  .posts .post-teaser, .feature-image footer, .feature-image .post-content, .comments, article, .site-footer {
    padding: 3% 9%;
  }
}
@media (max-width: 1000px) {
  .posts .post-teaser, .feature-image footer, .feature-image .post-content, .comments, article, .site-footer {
    padding: 3% 6%;
  }
}
@media (max-width: 576px) {
  .posts .post-teaser, .feature-image footer, .feature-image .post-content, .comments, article, .site-footer {
    padding: 3% 4%;
  }
}

.call-out {
  padding: 6% 9%;
}
@media (min-width: 2000px) {
  .call-out {
    padding: 9% 9%;
  }
}
@media (max-width: 576px) {
  .call-out {
    padding: 9%;
  }
}

.txt-shadow, .feature-image h1.title, .feature-image .post-info {
  text-shadow: 0.07em 0.1em 0.15em var(--text-shadow);
}

.subtle-txt-shadow, .subtitle, h1.title, .call-out h1 {
  text-shadow: 1px 1px 2px var(--text-shadow);
}

.button {
  border-radius: 0.3em;
  border: 1px solid;
  display: inline-block;
  margin: 1em 0;
  padding: 0.5em 0.75em;
}

.button-link:hover, a.button:hover {
  background: var(--link);
  border: 1px solid var(--link);
  color: var(--background);
  text-decoration: none;
  filter: none;
}

.body-link:hover, .posts .post-teaser p a:hover, article a:hover {
  text-decoration: underline;
  filter: brightness(0.85);
}

.post-link:hover {
  text-decoration: none;
  color: var(--link);
}

.disabled {
  opacity: 0.7;
}

.text-center {
  text-align: center;
}

.right {
  float: right;
}

/* Includes */
#post-nav {
  width: 100%;
  display: inline-block;
}
#post-nav a {
  width: 100%;
  padding: 0;
  margin: 0;
}
#post-nav #previous-post {
  float: left;
  width: 50%;
}
#post-nav #next-post {
  float: right;
  text-align: right;
  width: 50%;
}
@media screen and (max-width: 576px) {
  #post-nav a, #post-nav p {
    font-size: 0.8em;
  }
}

.site-footer {
  z-index: -1;
  display: inline-block;
  text-align: center;
  width: 100%;
  color: var(--meta);
  font-size: 0.9em;
}
.site-footer .footer-icons ul {
  list-style: none;
  margin: 0;
}
.site-footer .footer-icons ul li {
  display: inline;
}
.site-footer .footer-icons ul a {
  color: var(--link);
}
.site-footer .footer-icons ul a:hover .fa-circle {
  filter: brightness(0.85);
}

.clear:after {
  clear: both;
}
.clear:before, .clear:after {
  content: " ";
  display: table;
}

.site-header {
  padding: 2% 2% 1% 2%;
  background: var(--background);
  display: inline-block;
  float: left;
  width: 100%;
}
.site-header .separator {
  user-select: none;
  opacity: 0;
}
.site-header .separator:first-child {
  display: none;
}
.site-header a {
  color: var(--header-link);
}
.site-header .avatar {
  height: 3em;
  width: 3em;
  float: left;
  margin-top: -13px;
  border-radius: 0.2em;
  margin-right: 0.5em;
  padding: 10px 10px;
}
.site-header .site-title {
  float: left;
  font-weight: bold;
  font-family: "Source Sans Pro", Helvetica, Arial, sans-serif;
  font-size: 1.3em;
}

nav {
  list-style: none;
  margin: 0;
  padding: 0;
}
nav ul {
  margin: 0;
  padding: 0;
  list-style: none;
  line-height: 1.5;
  float: right;
  text-align: right;
  display: block;
}
nav li {
  display: inline;
  float: left;
  margin-right: 0.4em;
}
nav a:hover {
  color: var(--link);
}
nav a#pull i {
  margin-top: 22px;
  margin-right: 18px;
  float: right;
}

/* ---- Responsive ---- */
@media (min-width: 769px) {
  a#pull {
    display: none;
  }
  .navbar-label-with-icon {
    display: none;
  }
}
@media screen and (max-width: 768px) {
  .site-header img.avatar {
    margin-top: -7px;
  }
  .site-header .site-title {
    margin-top: 7px;
  }
  nav {
    height: auto;
  }
  nav .separator {
    display: none !important;
  }
  nav ul {
    width: 100%;
    overflow: hidden;
    /* fade out, then shrink */
    transition: opacity 0.2s 0s, font-size 0.2s 0s;
    transition-delay: 0s;
  }
  nav ul.hide {
    font-size: 0;
    margin: 0;
    opacity: 0;
    padding: 0;
  }
  nav li {
    width: 100%;
    text-align: center;
    font-size: 1em;
    margin: 0;
    background-color: var(--background);
    backdrop-filter: brightness(0.98);
  }
  nav li a {
    width: 100%;
    display: block;
  }
}
ul.share-buttons {
  list-style: none;
  padding: 1.5% 0 0.75% 0;
  margin: 0;
  text-align: center;
}
ul.share-buttons li.meta {
  display: inline;
  margin-right: 0.5em;
  vertical-align: super;
}
ul.share-buttons li {
  display: inline;
}
ul.share-buttons li a:hover {
  text-decoration: none;
}
ul.share-buttons .sr-only {
  position: absolute;
  clip: rect(1px 1px 1px 1px);
  clip: rect(1px, 1px, 1px, 1px);
  padding: 0;
  border: 0;
  height: 1px;
  width: 1px;
  overflow: hidden;
}
ul.share-buttons .fa-stack {
  vertical-align: top;
  width: 1.75em;
}
ul.share-buttons .fa-stack .fab {
  font-size: 30px;
}

/* --- Pagination --- */
.pagination {
  display: inline-block;
  text-align: center;
  width: 100%;
  clear: both;
}
.pagination:before {
  content: "";
  display: inline-block;
  height: 100%;
  vertical-align: middle;
}
.pagination .page_number {
  display: inline-block;
  vertical-align: sub;
}
@media (max-width: 320px) {
  .pagination .page_number {
    display: none;
  }
}
.pagination .button {
  margin: 0;
  display: inline-block;
}
.pagination .button .fa.fa-chevron-right, .pagination .button .fa.fa-chevron-left {
  font-size: initial;
}
.pagination .previous {
  float: left;
}
.pagination .next {
  float: right;
}

/* ---- grid ---- */
.grid {
  padding-bottom: 6%;
  padding-top: 1%;
  /* clear fix */
}
.grid:after {
  content: "";
  display: block;
  clear: both;
}

/* ---- .grid-col ---- */
.grid-col {
  float: left;
  width: 32.6%;
  margin-right: 1%;
}
.grid-col:last-of-type {
  margin-right: 0;
}

/* ---- .grid-item ---- */
.grid-item {
  border-radius: 5px;
  display: block;
  max-width: 100%;
  min-height: 30%;
  margin-bottom: 1%;
}

.portfolio-link {
  display: block;
  position: relative;
  margin: 0 auto;
  max-width: 400px;
}
.portfolio-link .caption {
  margin: 0;
  position: absolute;
  width: 100%;
  height: 100%;
  text-align: center;
  opacity: 0;
  transition: all ease 0.5s;
}
.portfolio-link .caption::before {
  content: " ";
  display: inline-block;
  vertical-align: middle;
  height: 100%;
}
.portfolio-link .caption:hover {
  opacity: 1;
}
.portfolio-link .caption .caption-content {
  font-size: 15px;
  color: white;
  text-shadow: -1px 0 #ddd, 0 1px #ddd, 1px 0 #ddd, 0 -1px #ddd;
  display: inline-block;
  vertical-align: middle;
}
@media screen and (max-width: 576px) {
  .portfolio-link .caption .caption-content {
    font-size: 7px;
  }
}

.portfolio-grid {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-around;
}

.portfolio-cell {
  flex: 0 0 32%;
  margin-bottom: 10px;
}

/* --- Aligner --- */
.row {
  display: flex;
  flex-wrap: wrap;
  flex-direction: row;
  align-items: center;
  justify-content: center;
  padding: 0.9% 0 1.5% 0;
}

.caption-style {
  order: 1;
  flex: 1 1 100%;
  display: block;
  font-style: italic;
  font-size: 0.8em;
  text-align: center;
  color: var(--meta);
  font-weight: 200;
  padding-bottom: 5px;
  padding-top: 5px;
}

.column {
  flex: 1 0;
}
.column img {
  min-width: 250px;
}
.column .single {
  width: 100%;
  display: block;
}

/* Posts */
.comments, article {
  border-bottom: 1px solid var(--border);
  float: left;
  width: 100%;
}
.comments iframe, article iframe {
  width: 100%;
  border: none;
  min-height: 500px;
}

article header {
  margin-bottom: 6%;
  text-align: center;
}
article .footnotes {
  font-size: 0.9em;
}

footer {
  width: 100%;
  margin-top: 0;
  margin-bottom: 0;
  font-size: 0.9em;
  display: inline-block;
  text-align: center;
}
footer .meta, footer #post-nav p, #post-nav footer p {
  display: inline;
}
footer a.button {
  margin-left: 1em;
}

header h1, header h2 {
  margin: 0;
}

.meta, #post-nav p {
  color: var(--meta);
  letter-spacing: 0.1em;
  margin: 0;
  text-transform: uppercase;
}

.last-modified {
  color: var(--meta);
  font-size: 0.8em;
  font-style: italic;
  margin-top: 0.5em;
}

/* --- Post info --- */
.post-info {
  border-radius: 1em;
  padding-right: 0.5em;
  display: inline-flex;
  flex-direction: column;
  max-width: 100%;
}
.post-info .author-info {
  display: flex;
  align-items: center;
}
.post-info .post-meta {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
}
.post-info .post-meta .meta:only-child, .post-info .post-meta #post-nav p:only-child, #post-nav .post-info .post-meta p:only-child {
  margin: 0 auto;
}
.post-info a {
  display: flex;
  align-items: center;
}
.post-info a img {
  height: auto;
}
.post-info a:hover {
  text-decoration: none;
}
.post-info img {
  border-radius: 1em;
  padding: 0;
  width: 1.5em;
  height: 100%;
  margin-right: 0.5em;
}
.post-info .meta-separator {
  color: var(--meta);
  margin: 0 0.5em;
  white-space: nowrap;
}
.post-info .meta, .post-info #post-nav p, #post-nav .post-info p {
  white-space: nowrap;
}

/* --- Feature image --- */
.feature-image {
  padding: 0;
}
.feature-image .post-link {
  color: var(--header-text);
}
.feature-image header {
  color: var(--header-text);
  margin-bottom: 0;
  padding: 3.6% 9%;
}
.feature-image header .meta, .feature-image header #post-nav p, #post-nav .feature-image header p, .feature-image header .meta-separator, .feature-image header .last-modified {
  color: var(--header-text);
  opacity: 0.7;
}
.feature-image .post-content {
  padding-bottom: 0;
}
.feature-image footer {
  padding-top: 0;
}
.feature-image .feature-image-padding {
  padding: 10%;
}

/*-- feature-image Responsive scrolling --*/
@media screen and (min-width: 768px) {
  .feature-image header {
    background-size: 120% auto;
  }
}
@media screen and (max-width: 768px) {
  .feature-image header {
    padding: 13.5% 4%;
    background-size: 200% auto;
  }
}
@media screen and (max-width: 576px) {
  .feature-image header {
    background-size: 400% auto;
  }
}

.post-content h1 {
  color: var(--h1);
}
.post-content h2 {
  color: var(--h2);
}
.post-content h3 {
  color: var(--h3);
}
.post-content h4 {
  color: var(--h4);
}
.post-content h5 {
  color: var(--h5);
}
.post-content h6 {
  color: var(--h6);
}
.post-content a:visited {
  filter: saturate(0.7);
}

#archive .category-list,
#categories .category-list {
  width: 100%;
  padding-bottom: 3%;
  text-align: center;
}
#archive .category-list .category-links,
#categories .category-list .category-links {
  margin: 30px 0;
  color: var(--meta);
  font-size: 0.9em;
}
#archive .category-list .category-link,
#categories .category-list .category-link {
  color: var(--meta);
  text-decoration: underline;
  transition: color 0.2s ease;
}
#archive .category-list .category-link:hover,
#categories .category-list .category-link:hover {
  color: var(--link);
  text-decoration: underline;
}
#archive .category-list .separator,
#categories .category-list .separator {
  color: var(--meta);
}
#archive .archive-group,
#archive .category-group,
#categories .archive-group,
#categories .category-group {
  padding: 15px 0 10px;
}
#archive .archive-group .title,
#archive .category-group .title,
#categories .archive-group .title,
#categories .category-group .title {
  margin-bottom: 10px;
}
#archive .archive-group .items,
#archive .category-group .items,
#categories .archive-group .items,
#categories .category-group .items {
  padding-left: 6%;
}
#archive .archive-group .items .item-wrapper,
#archive .category-group .items .item-wrapper,
#categories .archive-group .items .item-wrapper,
#categories .category-group .items .item-wrapper {
  position: relative;
  margin: 25px 0;
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 15px;
}
#archive .archive-group .items .category-post-link,
#archive .category-group .items .category-post-link,
#categories .archive-group .items .category-post-link,
#categories .category-group .items .category-post-link {
  flex: 1;
  min-width: 0;
  text-decoration: none;
}
#archive .archive-group .items .item .item-content,
#archive .category-group .items .item .item-content,
#categories .archive-group .items .item .item-content,
#categories .category-group .items .item .item-content {
  flex: 1;
  min-width: 0;
}
#archive .archive-group .items .item .meta, #archive .archive-group .items .item #post-nav p, #post-nav #archive .archive-group .items .item p,
#archive .category-group .items .item .meta,
#archive .category-group .items .item #post-nav p,
#post-nav #archive .category-group .items .item p,
#categories .archive-group .items .item .meta,
#categories .archive-group .items .item #post-nav p,
#post-nav #categories .archive-group .items .item p,
#categories .category-group .items .item .meta,
#categories .category-group .items .item #post-nav p,
#post-nav #categories .category-group .items .item p {
  color: var(--meta);
  font-size: 0.85rem;
}
#archive .archive-group .items .item .title,
#archive .category-group .items .item .title,
#categories .archive-group .items .item .title,
#categories .category-group .items .item .title {
  font-weight: 600;
  color: var(--text);
}
#archive .archive-group .items .item-tags,
#archive .category-group .items .item-tags,
#categories .archive-group .items .item-tags,
#categories .category-group .items .item-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 5px;
  align-items: center;
  justify-content: flex-end;
}
#archive .archive-group .items .item-tags .tag-link,
#archive .category-group .items .item-tags .tag-link,
#categories .archive-group .items .item-tags .tag-link,
#categories .category-group .items .item-tags .tag-link {
  text-decoration: none;
}
#archive .archive-group .items .item-tags .tag,
#archive .category-group .items .item-tags .tag,
#categories .archive-group .items .item-tags .tag,
#categories .category-group .items .item-tags .tag {
  background-color: var(--selection);
  color: var(--text);
  padding: 3px 10px;
  border-radius: 12px;
  font-size: 0.75rem;
  font-weight: 500;
  white-space: nowrap;
  transition: background-color 0.2s ease, color 0.2s ease, border 0.2s ease;
  cursor: pointer;
  border: 1px solid transparent;
}
#archive .archive-group .items .item-wrapper::before,
#archive .category-group .items .item-wrapper::before,
#categories .archive-group .items .item-wrapper::before,
#categories .category-group .items .item-wrapper::before {
  content: "";
  position: absolute;
  left: -5%;
  width: 8px;
  background-color: var(--selection);
  border-radius: 8px;
  height: 100%;
  transition: background-color 0.2s ease;
}
#archive .archive-group .items .item-wrapper:hover::before,
#archive .category-group .items .item-wrapper:hover::before,
#categories .archive-group .items .item-wrapper:hover::before,
#categories .category-group .items .item-wrapper:hover::before {
  background-color: var(--link);
}
#archive .archive-group .items .category-post-link:hover,
#archive .category-group .items .category-post-link:hover,
#categories .archive-group .items .category-post-link:hover,
#categories .category-group .items .category-post-link:hover {
  text-decoration: none;
}
#archive .archive-group .items .category-post-link:hover .meta, #archive .archive-group .items .category-post-link:hover #post-nav p, #post-nav #archive .archive-group .items .category-post-link:hover p, #archive .archive-group .items .category-post-link:hover .title,
#archive .category-group .items .category-post-link:hover .meta,
#archive .category-group .items .category-post-link:hover #post-nav p,
#post-nav #archive .category-group .items .category-post-link:hover p,
#archive .category-group .items .category-post-link:hover .title,
#categories .archive-group .items .category-post-link:hover .meta,
#categories .archive-group .items .category-post-link:hover #post-nav p,
#post-nav #categories .archive-group .items .category-post-link:hover p,
#categories .archive-group .items .category-post-link:hover .title,
#categories .category-group .items .category-post-link:hover .meta,
#categories .category-group .items .category-post-link:hover #post-nav p,
#post-nav #categories .category-group .items .category-post-link:hover p,
#categories .category-group .items .category-post-link:hover .title {
  color: var(--link);
}
#archive .archive-group .items .item-wrapper:hover .tag,
#archive .category-group .items .item-wrapper:hover .tag,
#categories .archive-group .items .item-wrapper:hover .tag,
#categories .category-group .items .item-wrapper:hover .tag {
  background-color: var(--link);
  color: var(--header-text);
  border-color: transparent;
}
#archive .archive-group .items .item-wrapper:hover .tag:hover,
#archive .category-group .items .item-wrapper:hover .tag:hover,
#categories .archive-group .items .item-wrapper:hover .tag:hover,
#categories .category-group .items .item-wrapper:hover .tag:hover {
  background-color: var(--background);
  color: var(--link);
  border-color: var(--link);
}

/* --- Header text feature --- */
.call-out {
  display: inline-block;
  width: 100%;
  height: 100%;
  font-size: 1.2em;
  text-align: center;
  color: var(--header-text);
  background: no-repeat var(--header-background);
  backdrop-filter: brightness(0.5);
  background-size: cover;
}
.call-out h1 {
  font-family: "Source Sans Pro", Helvetica, Arial, sans-serif;
}
.call-out {
  /* --- Responsive --- */
}
@media screen and (max-width: 1000px) {
  .call-out {
    background-size: 170% auto;
  }
}
@media screen and (max-width: 450px) {
  .call-out {
    background-size: 200% auto;
  }
}
@media screen and (max-width: 400px) {
  .call-out {
    background-size: 250% auto;
  }
}
@media screen and (max-width: 380px) {
  .call-out {
    background-size: 280% auto;
  }
}
.call-out p:last-child {
  margin-bottom: 0;
}

#main {
  background-position: 100% -50px, 0 center, center top;
}

/* --- Post listing --- */
.posts .post-teaser {
  width: 100%;
  margin-bottom: 0;
  display: inline-block;
  background-size: cover;
  border-bottom: 1px solid var(--border);
}
.posts .post-teaser .post-img {
  vertical-align: middle;
  border-radius: 10px;
  overflow: hidden;
}
@media (min-width: 768px) {
  .posts .post-teaser .post-img {
    height: 250px;
  }
}
@media screen and (max-width: 768px) {
  .posts .post-teaser .post-img {
    height: 150px;
  }
}
.posts .post-teaser .post-img img {
  width: 100%;
  padding: 0;
  vertical-align: middle;
}
.posts .post-teaser .post-img img {
  transition: all 2s ease-out;
}
.posts .post-teaser .post-img img:hover {
  transform: scale(1.1);
}
.posts .excerpt {
  margin-top: 1em;
}

.title-padder {
  padding: 1%;
}

h1.title {
  padding: 0.5em 0;
}

.subtitle {
  font-weight: normal;
  margin-top: 5px;
}

.tag-category-container {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: flex-start;
  gap: 1em;
  width: 100%;
  padding-bottom: 3%;
}

.tag-list,
.category-list {
  flex: 0 1 auto;
  padding-bottom: 0;
}
.tag-list a.button,
.category-list a.button {
  margin: 0.1em;
  padding: 0.2em 0.4em;
  font-size: 0.9em;
}
.tag-list p,
.category-list p {
  margin: 0;
  padding: 0 0.2em 0 0;
}
.tag-list ul,
.category-list ul {
  text-align: center;
  list-style: none;
}
.tag-list ul li, .tag-list ul div,
.category-list ul li,
.category-list ul div {
  display: inline;
}
.tag-list ul div.meta,
.category-list ul div.meta {
  margin-right: 0.5em;
}

.tag-anchor {
  margin-top: 3%;
}
.tag-anchor a {
  color: var(--link);
}
.tag-anchor a:hover {
  text-decoration: none;
}

.tag-posts {
  display: inline-block;
  width: 100%;
}
.tag-posts .tag-title {
  margin-top: 0;
  margin-bottom: 0;
}
.tag-posts .tag-title a {
  margin-left: 3%;
}
.tag-posts .tag-title .post-info {
  float: right;
}
.tag-posts .meta, .tag-posts #post-nav p, #post-nav .tag-posts p {
  display: inline;
  float: right;
  font-size: 0.8em;
  line-height: normal;
}
@media screen and (max-width: 576px) {
  .tag-posts .meta, .tag-posts #post-nav p, #post-nav .tag-posts p {
    display: none;
  }
}

.search-bar {
  display: block;
  width: 100%;
  height: 46px;
  padding: 6px 12px;
  font-size: 18px;
  line-height: 1.43;
  color: var(--text);
  background: var(--background) none;
  border: 1px solid var(--border);
  border-radius: 4px;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
}
.search-bar:focus, .search-bar:hover {
  border-color: var(--link);
  outline: 0;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px var(--link);
  opacity: 0.6;
}
.search-bar::placeholder, .search-bar::-webkit-input-placeholder {
  color: var(--meta);
  opacity: 0.7;
}
.search-bar input[type=text] {
  height: 46px;
  padding: 10px 16px;
  font-size: 18px;
  line-height: 1.33;
  border-radius: 6px;
}

.search-title a h3 {
  margin: 0;
  color: var(--link);
}
.search-title a:hover {
  text-decoration: none;
}

.search-highlight {
  background-color: var(--search-highlight);
  padding: 2px 4px;
  border-radius: 3px;
}

/**

CUSTOM STYLING

In the case you want to add your own style on top of the type-on-strap one.
You can add a custom scss file using:

@import 'custom';

Put it right after this comment for your changes to be applied over the default style.
(Once it processed into the assets/css/main.css by Jekyll at run time)

Then create your _custom.scss right next to type-on-strap.scss and add in it all
of the unique scss that your blog needs.

*/
/* ============================================================
   Constructive Programming — typography pass

   Overrides Type-on-Strap's Source-Sans-Pro-everywhere defaults
   with a system-sans body, a real monospace, a tighter measure, and
   sharper heading hierarchy.

   System font stacks — no webfont weight on the critical path. The
   body uses the same sans stack as the headings; hierarchy comes
   from weight, size, and tracking, not from a serif/sans contrast.
   ============================================================ */
/* Brand accent — deep indigo. Used on links, primary buttons, section
   numbers, and the favicon mark. */
/* lighter for dark-mode + hover */
/* --- Body: sans, tighter leading, slight optical letter-spacing.

   Selectors prefixed with `html` to bump specificity to 0,0,2 — Bootstrap
   loads after this stylesheet in the head, so a bare `body { ... }` rule
   loses the cascade tie. `html body` wins. ---- */
html body,
html .post-page,
html .page-content,
html p,
html li,
html blockquote {
  font-family: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", "Roboto", "Helvetica Neue", Arial, sans-serif;
  letter-spacing: -0.003em;
}

html body {
  font-size: 1.0625rem; /* ~17px from default ~16px; agent wanted ~19 — moderate bump */
  line-height: 1.65;
}

/* --- Headings: sans for contrast, tighter letter-spacing, heavier display ---- */
h1, h2, h3, h4, h5, h6,
.site-title,
.card-title,
.card-subtitle {
  font-family: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", "Roboto", "Helvetica Neue", Arial, sans-serif;
  font-weight: 700;
  letter-spacing: -0.015em;
}

h1, .display-4 {
  font-weight: 800;
  letter-spacing: -0.022em;
  line-height: 1.1;
}

h2 {
  letter-spacing: -0.018em;
  line-height: 1.2;
}

/* --- Lead paragraph: slightly larger, lighter weight ---- */
.lead {
  font-family: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", "Roboto", "Helvetica Neue", Arial, sans-serif;
  font-size: 1.22rem;
  font-weight: 400;
  line-height: 1.5;
  letter-spacing: -0.004em;
}

/* --- Monospace everywhere code shows up ---- */
code, pre, kbd, samp, tt,
.highlight,
pre code {
  font-family: "JetBrains Mono", "Cascadia Code", "Fira Code", "SF Mono", "Menlo", "Consolas", "Liberation Mono", monospace;
  font-size: 0.94em; /* drop a hair so mono lines vertically beside the body sans */
}

/* --- Measure: cap prose at ~68ch on wide viewports.
       Applies to the main reading columns on /, /about/, /libraries/.
       Doesn't constrain the card grids, the footer, or layout containers. ---- */
#consulting .col-md-10,
#consulting .col-lg-8,
#fixed .col-md-10,
#fixed .col-lg-8,
.page .post-page {
  max-width: 68ch;
}

#consulting .col-md-10 > p,
#consulting .col-lg-8 > p,
#consulting .col-md-10 > ul,
#consulting .col-lg-8 > ul,
#fixed .col-md-10 > p,
#fixed .col-lg-8 > p {
  /* When the parent already caps measure these are full-width within it. */
  max-width: none;
}

/* --- Bullet rhythm in the engagement list ---- */
#consulting ul li {
  margin-bottom: 0.35rem;
  line-height: 1.55;
}

#consulting ul li strong {
  letter-spacing: -0.008em;
}

/* --- Recent-outcomes proof line: monospace numbers, justified spacing ---- */
#consulting .text-muted small {
  letter-spacing: 0.005em;
}

/* --- Footer: smaller, tighter ---- */
.site-footer {
  font-family: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", "Roboto", "Helvetica Neue", Arial, sans-serif;
  font-size: 0.92rem;
  letter-spacing: 0;
}

/* --- Library / Medium card text: same sans as body ---- */
.card-text,
.card-subtitle small,
.card-body small {
  font-family: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", "Roboto", "Helvetica Neue", Arial, sans-serif;
}

.card-title a,
.card-title {
  font-family: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", "Roboto", "Helvetica Neue", Arial, sans-serif;
}

/* --- Buttons: keep sans, sharper letter-spacing ---- */
.btn {
  font-family: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", "Roboto", "Helvetica Neue", Arial, sans-serif;
  font-weight: 600;
  letter-spacing: -0.005em;
}

/* --- Navbar items: sans, slightly heavier ---- */
.navbar-label,
.site-title {
  font-family: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", "Roboto", "Helvetica Neue", Arial, sans-serif;
}

.site-title {
  font-weight: 800;
  letter-spacing: -0.018em;
}

/* --- Small responsive nudges (Design #9): keep card stacks comfortable ---- */
@media (max-width: 576px) {
  body {
    font-size: 1rem;
  }
  .lead {
    font-size: 1.1rem;
  }
  h1, .display-4 {
    font-size: 2.1rem;
    line-height: 1.15;
  }
  .container.my-5 {
    margin-top: 2rem !important;
    margin-bottom: 2rem !important;
  }
  .card.mt-3 {
    margin-top: 0.75rem !important;
  }
}
/* ============================================================
   Section rhythm — break out of the four-identical-centred-slabs
   pattern flagged by the design review (#5 from the synthesis).

   Strategy: keep the underlying Bootstrap layout, but use a
   decorative separator above each section, a descending H2 scale
   so the eye knows which section is most important, and a slightly
   narrower Fixed section so the page doesn't read as four boxes
   of the same width.
   ============================================================ */
.home > #consulting,
.home > #fixed,
.home > #libraries,
.home > #writing {
  position: relative;
  padding-top: 4rem;
  padding-bottom: 1rem;
}

/* Numbered section markers — `01 · Consulting`, `02 · Fixed`, etc.
   Replaces the old gradient separators with a typographic move:
   small caps, monospace, indigo accent. Reads like a chapter mark. */
.home .section-number {
  font-family: "JetBrains Mono", "Cascadia Code", "Fira Code", "SF Mono", "Menlo", "Consolas", "Liberation Mono", monospace;
  font-size: 0.78rem;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: #3b3b8c;
  margin: 0 0 1rem 0;
  font-weight: 600;
}

/* Descending H2 sizes: 01 Consulting is loudest, 04 Articles quietest.
   Section order: Consulting > Libraries > Fixed > Articles. */
#consulting h2 {
  font-size: 2.45rem;
}

#libraries h2 {
  font-size: 2.05rem;
}

#fixed h2 {
  font-size: 1.85rem;
}

#writing h2 {
  font-size: 1.55rem;
}

@media (max-width: 576px) {
  #consulting h2 {
    font-size: 1.85rem;
  }
  #libraries h2 {
    font-size: 1.6rem;
  }
  #fixed h2 {
    font-size: 1.45rem;
  }
  #writing h2 {
    font-size: 1.3rem;
  }
}
/* Fixed section: feels different by being narrower than Consulting/Libraries. */
@media (min-width: 768px) {
  #fixed.container {
    max-width: 720px;
  }
}
/* The hero still leads — make its top breathing-room match the section
   rhythm so the page reads as one piece, not hero + four boxes. */
.home > #main {
  padding-bottom: 1.5rem;
}

/* Hero "narrowing" graphic — typeset SVG embedded below the lead.
   Wider than the prose column so the longest bar (Bar 1 = 1309 svg-units)
   renders with text at a comfortable display size. */
.home .hero-figure {
  max-width: 1080px;
  margin-top: 1.5rem;
  margin-bottom: 0.5rem;
}

.home .hero-narrowing-img {
  display: block;
  width: 100%;
  height: auto;
}

.home .hero-figcaption {
  margin-top: 0.5rem;
  font-family: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", "Roboto", "Helvetica Neue", Arial, sans-serif;
  letter-spacing: 0;
}

/* ============================================================
   Indigo accent across links + buttons.
   $cp-accent = #3b3b8c. We override Bootstrap's default link and
   primary-button colours, keeping good contrast on both themes.
   ============================================================ */
html body a:not(.btn):not(.post-link):not(.card-title a) {
  color: #3b3b8c;
  text-decoration-color: rgba(59, 59, 140, 0.4);
}

html body a:not(.btn):not(.post-link):not(.card-title a):hover {
  color: rgb(18.393536309%, 18.393536309%, 43.6456793773%);
  text-decoration-color: #3b3b8c;
}

.btn-primary,
html body .btn-primary {
  background-color: #3b3b8c;
  border-color: #3b3b8c;
  color: #fff;
}

.btn-primary:hover,
.btn-primary:focus,
html body .btn-primary:hover {
  background-color: rgb(18.393536309%, 18.393536309%, 43.6456793773%);
  border-color: rgb(18.393536309%, 18.393536309%, 43.6456793773%);
  color: #fff;
}

.btn-outline-primary,
html body .btn-outline-primary {
  color: #3b3b8c;
  border-color: #3b3b8c;
}

.btn-outline-primary:hover,
html body .btn-outline-primary:hover {
  background-color: #3b3b8c;
  border-color: #3b3b8c;
  color: #fff;
}

/* ============================================================
   Dark mode overrides

   Type-on-Strap scopes its color tokens by html[data-theme="dark"]
   and runs a `prefers-color-scheme` check on page load (head.liquid)
   when site.color_theme: auto.

   Bootstrap 4 doesn't theme its own components, so .card surfaces
   and a few buttons need explicit overrides for dark mode.
   ============================================================ */
html[data-theme=dark] {
  /* Body surface — Bootstrap 4 ships `body { background: #fff }` and the
     theme's --background variable only applies to `<html>`. Override body
     directly so the page background actually goes dark. */
}
html[data-theme=dark] body {
  background-color: var(--background, #22272e);
  color: var(--text, #cdd9e5);
}
html[data-theme=dark] {
  /* Indigo accents — slightly lighter for contrast on the dark surface. */
}
html[data-theme=dark] .section-number {
  color: #5e5eb8;
}
html[data-theme=dark] a:not(.btn):not(.post-link):not(.card-title a) {
  color: #5e5eb8;
  text-decoration-color: rgba(138, 138, 240, 0.45);
}
html[data-theme=dark] a:not(.btn):not(.post-link):not(.card-title a):hover {
  color: rgb(53.5179175118%, 53.5179175118%, 79.5016903313%);
}
html[data-theme=dark] .btn-primary,
html[data-theme=dark] html body .btn-primary {
  background-color: #5e5eb8;
  border-color: #5e5eb8;
  color: #0d0d1c;
}
html[data-theme=dark] .btn-outline-primary,
html[data-theme=dark] html body .btn-outline-primary {
  color: #5e5eb8;
  border-color: #5e5eb8;
}
html[data-theme=dark] .btn-outline-primary:hover {
  background-color: #5e5eb8;
  color: #0d0d1c;
}
html[data-theme=dark] {
  /* Card surfaces (Bootstrap default = #fff; theme doesn't override) */
}
html[data-theme=dark] .card {
  background-color: var(--blockquote, #2d333b);
  color: var(--text, #cdd9e5);
  border-color: rgba(255, 255, 255, 0.08);
}
html[data-theme=dark] .card-title,
html[data-theme=dark] .card-title a {
  color: var(--text, #cdd9e5);
}
html[data-theme=dark] .card-subtitle.text-muted,
html[data-theme=dark] .text-muted {
  color: rgba(255, 255, 255, 0.55) !important;
}
html[data-theme=dark] {
  /* Section separators — invert the alpha base */
}
html[data-theme=dark] .home > #consulting::before,
html[data-theme=dark] .home > #fixed::before,
html[data-theme=dark] .home > #libraries::before,
html[data-theme=dark] .home > #writing::before {
  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.22), transparent);
}
html[data-theme=dark] #consulting > h2.text-center::after,
html[data-theme=dark] #fixed > h2.text-center::after {
  background: rgba(255, 255, 255, 0.4);
}
html[data-theme=dark] {
  /* Bootstrap outline buttons: re-derive border + text from theme tokens */
}
html[data-theme=dark] .btn-outline-secondary {
  color: rgba(255, 255, 255, 0.8);
  border-color: rgba(255, 255, 255, 0.3);
}
html[data-theme=dark] .btn-outline-secondary:hover,
html[data-theme=dark] .btn-outline-secondary:focus {
  background-color: rgba(255, 255, 255, 0.08);
  color: #fff;
  border-color: rgba(255, 255, 255, 0.45);
}
html[data-theme=dark] .btn-outline-primary {
  color: var(--link, #79c0ff);
  border-color: var(--link, #79c0ff);
}
html[data-theme=dark] .btn-outline-primary:hover,
html[data-theme=dark] .btn-outline-primary:focus {
  background-color: rgba(121, 192, 255, 0.12);
  color: var(--link, #79c0ff);
}
html[data-theme=dark] {
  /* Tables on /engagements/ render with Bootstrap defaults; tint borders */
}
html[data-theme=dark] table {
  color: var(--text, #cdd9e5);
}
html[data-theme=dark] table th,
html[data-theme=dark] table td {
  border-color: rgba(255, 255, 255, 0.1);
}
html[data-theme=dark] {
  /* Recent-outcomes proof line and footer */
}
html[data-theme=dark] #consulting .text-muted small {
  color: rgba(255, 255, 255, 0.65);
}

/* Defensive: even when the visitor's OS prefers dark but JS hasn't
   set data-theme yet (e.g. first paint with disabled JS), do not show
   a flash of white card on a dark background. Mirrors the rules above
   under @media when no data-theme attribute is present yet. */
@media (prefers-color-scheme: dark) {
  html:not([data-theme]) body {
    background-color: #22272e;
    color: #cdd9e5;
  }
  html:not([data-theme]) .card {
    background-color: #2d333b;
    color: #cdd9e5;
    border-color: rgba(255, 255, 255, 0.08);
  }
}
/* ============================================================
   Custom layout layer — replaces Bootstrap 4

   Bootstrap-CSS, Bootstrap-JS, jQuery and Popper are now off the
   asset stack. This layer provides every primitive the templates
   use: container, grid, spacing, text, flex, cards, buttons. Plus
   a designed type scale (.cp-display, h1–h6) that replaces the
   rented .display-4 utility.

   Type scale base: 17px (1.0625rem). Step ratio: 1.25 (major third).
   ============================================================ */
/* ---- Container -------------------------------------------------- */
.container {
  width: 100%;
  margin-left: auto;
  margin-right: auto;
  padding-left: 1rem;
  padding-right: 1rem;
}

@media (min-width: 576px) {
  .container {
    max-width: 540px;
  }
}
@media (min-width: 768px) {
  .container {
    max-width: 720px;
    padding-left: 1.25rem;
    padding-right: 1.25rem;
  }
}
@media (min-width: 992px) {
  .container {
    max-width: 960px;
  }
}
@media (min-width: 1200px) {
  .container {
    max-width: 1140px;
  }
}
/* ---- 12-column grid (Bootstrap-shaped flex grid) --------------- */
.row {
  display: flex;
  flex-wrap: wrap;
  margin-left: -0.75rem;
  margin-right: -0.75rem;
}

.row > [class*=col-] {
  padding-left: 0.75rem;
  padding-right: 0.75rem;
  flex: 0 0 100%;
  max-width: 100%;
}

.justify-content-center {
  justify-content: center;
}

.justify-content-between {
  justify-content: space-between;
}

@media (min-width: 768px) {
  .col-md-6 {
    flex: 0 0 50%;
    max-width: 50%;
  }
  .col-md-8 {
    flex: 0 0 66.6667%;
    max-width: 66.6667%;
  }
  .col-md-10 {
    flex: 0 0 83.3333%;
    max-width: 83.3333%;
  }
}
@media (min-width: 992px) {
  .col-lg-3 {
    flex: 0 0 25%;
    max-width: 25%;
  }
  .col-lg-4 {
    flex: 0 0 33.3333%;
    max-width: 33.3333%;
  }
  .col-lg-6 {
    flex: 0 0 50%;
    max-width: 50%;
  }
  .col-lg-8 {
    flex: 0 0 66.6667%;
    max-width: 66.6667%;
  }
}
/* ---- Native CSS Grid (used by the new card includes) ----------- */
.cp-grid {
  display: grid;
  gap: 1.25rem;
  grid-template-columns: 1fr;
  width: 100%;
}

@media (min-width: 640px) {
  .cp-grid {
    grid-template-columns: repeat(2, 1fr);
  }
}
@media (min-width: 992px) {
  .cp-grid {
    grid-template-columns: repeat(3, 1fr);
  }
}
.cp-grid-4 { /* card-row variant with 4 columns at large screens */ }

@media (min-width: 992px) {
  .cp-grid-4 {
    grid-template-columns: repeat(4, 1fr);
  }
}
/* ---- Display + utility -------------------------------------------- */
.d-flex {
  display: flex;
}

.d-block {
  display: block;
}

.d-inline-block {
  display: inline-block;
}

.flex-fill {
  flex: 1 1 auto;
}

.flex-wrap {
  flex-wrap: wrap;
}

.flex-column {
  flex-direction: column;
}

.text-center {
  text-align: center;
}

.text-left {
  text-align: left;
}

.text-right {
  text-align: right;
}

.list-unstyled {
  list-style: none;
  padding-left: 0;
}

.mx-auto {
  margin-left: auto;
  margin-right: auto;
}

.text-muted {
  color: rgba(0, 0, 0, 0.55);
}

html[data-theme=dark] .text-muted {
  color: rgba(255, 255, 255, 0.55);
}

/* ---- Spacing utilities (rem-based) ------------------------------ */
.m-0 {
  margin: 0;
}

.mb-0 {
  margin-bottom: 0;
}

.mb-1 {
  margin-bottom: 0.25rem;
}

.mb-2 {
  margin-bottom: 0.5rem;
}

.mb-3 {
  margin-bottom: 1rem;
}

.mb-4 {
  margin-bottom: 1.5rem;
}

.mb-5 {
  margin-bottom: 3rem;
}

.mt-0 {
  margin-top: 0;
}

.mt-1 {
  margin-top: 0.25rem;
}

.mt-2 {
  margin-top: 0.5rem;
}

.mt-3 {
  margin-top: 1rem;
}

.mt-4 {
  margin-top: 1.5rem;
}

.mt-5 {
  margin-top: 3rem;
}

.mt-auto {
  margin-top: auto;
}

.my-3 {
  margin-top: 1rem;
  margin-bottom: 1rem;
}

.my-4 {
  margin-top: 1.5rem;
  margin-bottom: 1.5rem;
}

.my-5 {
  margin-top: 3rem;
  margin-bottom: 3rem;
}

.ml-2 {
  margin-left: 0.5rem;
}

.ml-3 {
  margin-left: 1rem;
}

/* ---- Designed type scale ---------------------------------------- */
/* Base 1rem ≈ 17px. Step ratio 1.25. */
.cp-display {
  font-family: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", "Roboto", "Helvetica Neue", Arial, sans-serif;
  font-weight: 800;
  font-size: clamp(2.4rem, 4.5vw, 3.25rem);
  line-height: 1.04;
  letter-spacing: -0.025em;
}

h1 {
  font-size: 2.1rem;
  line-height: 1.15;
}

h2 {
  font-size: 1.7rem;
  line-height: 1.2;
}

h3 {
  font-size: 1.4rem;
  line-height: 1.3;
}

h4 {
  font-size: 1.2rem;
  line-height: 1.3;
}

h5 {
  font-size: 1.075rem;
  line-height: 1.4;
}

h6 {
  font-size: 1rem;
  line-height: 1.4;
}

@media (max-width: 576px) {
  .cp-display {
    font-size: clamp(2rem, 8vw, 2.6rem);
  }
  h1 {
    font-size: 1.75rem;
  }
  h2 {
    font-size: 1.45rem;
  }
  h3 {
    font-size: 1.25rem;
  }
}
/* ---- Buttons ---------------------------------------------------- */
.btn {
  display: inline-block;
  padding: 0.55rem 1.25rem;
  border: 1px solid transparent;
  border-radius: 0.4rem;
  font-family: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", "Roboto", "Helvetica Neue", Arial, sans-serif;
  font-weight: 600;
  font-size: 0.95rem;
  line-height: 1.45;
  letter-spacing: -0.005em;
  text-decoration: none;
  cursor: pointer;
  user-select: none;
  vertical-align: middle;
  transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease;
  text-align: center;
  background: transparent;
  color: inherit;
}

.btn:focus {
  outline: 2px solid #3b3b8c;
  outline-offset: 2px;
}

.btn-sm {
  padding: 0.36rem 0.85rem;
  font-size: 0.86rem;
  border-radius: 0.35rem;
}

.btn-lg {
  padding: 0.75rem 1.5rem;
  font-size: 1.05rem;
  border-radius: 0.5rem;
}

/* .btn-primary + .btn-outline-primary colour rules live earlier in
   this file (in the indigo-accent block) — those rules already use
   $cp-accent and now apply on top of the .btn base above. */
/* ---- Cards ------------------------------------------------------ */
.card {
  display: flex;
  flex-direction: column;
  background: #fff;
  border: 1px solid rgba(0, 0, 0, 0.08);
  border-radius: 0.5rem;
  padding: 1.25rem 1.4rem 1.2rem;
  height: 100%;
}

/* New card include classes (lib-card / article-card) — typographic
   ranks expressed through weight + size + colour, not nested <small>. */
.card-title {
  font-family: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", "Roboto", "Helvetica Neue", Arial, sans-serif;
  font-size: 1.08rem;
  font-weight: 700;
  letter-spacing: -0.012em;
  margin: 0 0 0.15rem 0;
  line-height: 1.3;
}

.card-title a {
  color: inherit;
  text-decoration: none;
}

.card-title a:hover {
  color: #3b3b8c;
}

.card-subtitle {
  font-family: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", "Roboto", "Helvetica Neue", Arial, sans-serif;
  font-size: 0.95rem;
  font-weight: 500;
  color: rgba(0, 0, 0, 0.62);
  margin: 0 0 0.85rem 0;
  line-height: 1.4;
}

.card-text {
  font-family: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", "Roboto", "Helvetica Neue", Arial, sans-serif;
  font-size: 0.95rem;
  line-height: 1.5;
  margin: 0 0 1rem 0;
  color: rgba(0, 0, 0, 0.78);
}

.card-meta {
  list-style: none;
  padding: 0;
  margin: 0 0 1rem 0;
  margin-top: auto;
  font-family: "JetBrains Mono", "Cascadia Code", "Fira Code", "SF Mono", "Menlo", "Consolas", "Liberation Mono", monospace;
  font-size: 0.78rem;
  color: rgba(0, 0, 0, 0.55);
  letter-spacing: 0.015em;
}

.card-meta li {
  margin: 0.1rem 0;
}

.card-meta-key {
  text-transform: uppercase;
  font-weight: 700;
  letter-spacing: 0.1em;
  font-size: 0.72rem;
  margin-right: 0.25rem;
  color: rgba(0, 0, 0, 0.45);
}

.card-meta-date {
  font-family: "JetBrains Mono", "Cascadia Code", "Fira Code", "SF Mono", "Menlo", "Consolas", "Liberation Mono", monospace;
  font-size: 0.78rem;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  color: rgba(0, 0, 0, 0.45);
  margin: 0 0 0.8rem 0;
}

.card-actions {
  margin-top: auto;
  display: flex;
  gap: 0.5rem;
  flex-wrap: wrap;
}

/* Dark-mode card surface + meta colours */
html[data-theme=dark] .card {
  background: #2d333b;
  border-color: rgba(255, 255, 255, 0.08);
}

html[data-theme=dark] .card-title a {
  color: inherit;
}

html[data-theme=dark] .card-title a:hover {
  color: #5e5eb8;
}

html[data-theme=dark] .card-subtitle {
  color: rgba(255, 255, 255, 0.7);
}

html[data-theme=dark] .card-text {
  color: rgba(255, 255, 255, 0.82);
}

html[data-theme=dark] .card-meta {
  color: rgba(255, 255, 255, 0.55);
}

html[data-theme=dark] .card-meta-key {
  color: rgba(255, 255, 255, 0.45);
}

html[data-theme=dark] .card-meta-date {
  color: rgba(255, 255, 255, 0.5);
}

/* ---- Footer compliance line ------------------------------------- */
.site-footer .footer-legal {
  font-family: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", "Roboto", "Helvetica Neue", Arial, sans-serif;
  font-size: 0.82rem;
  color: rgba(0, 0, 0, 0.55);
  margin-top: 0.25rem;
}

html[data-theme=dark] .site-footer .footer-legal {
  color: rgba(255, 255, 255, 0.55);
}

/* ---- Inline-SVG nav + footer icons ----------------------------- */
.cp-icon {
  display: inline-block;
  width: 1.1em;
  height: 1.1em;
  vertical-align: -0.18em;
  fill: currentColor;
}

.cp-social-icon {
  display: inline-block;
  width: 1.25rem;
  height: 1.25rem;
  fill: currentColor;
}

.site-footer .footer-icons ul {
  list-style: none;
  padding: 0;
  margin: 1rem 0 0;
  display: flex;
  justify-content: center;
  gap: 1.1rem;
}

.site-footer .footer-icons li {
  margin: 0;
}

.site-footer .footer-icons a {
  display: inline-flex;
  align-items: center;
  color: rgba(0, 0, 0, 0.55);
  text-decoration: none;
  transition: color 0.15s ease;
}

.site-footer .footer-icons a:hover {
  color: #3b3b8c;
}

html[data-theme=dark] .site-footer .footer-icons a {
  color: rgba(255, 255, 255, 0.55);
}

html[data-theme=dark] .site-footer .footer-icons a:hover {
  color: #5e5eb8;
}

/* ============================================================
   Unicode-glyph fallbacks for the three FA classes the theme
   still injects (search/tag/tags in navbar+pills, fa-adjust
   from main.min.js theme-toggle). No FA CSS, no extra HTTP.
   ============================================================ */
/* ============================================================
   Unicode-glyph fallbacks for the three FA classes that survive
   without Font Awesome:
   - .fa-tag / .fa-tags — emitted by tags_list.liquid and the
     search/tag page.icon entries in navbar.liquid (we keep the
     <i> wrapper for layout; the glyph comes from `::before`).
   - .fa-search — page.icon on /search/ in navbar.
   - .fa-adjust — injected at runtime by main.min.js for the
     dark/light theme toggle. Can't reach the markup, so we
     paint via the class it ships.
   No Font Awesome font, no extra HTTP, ~150 bytes of CSS.
   ============================================================ */
.fa-tag::before,
.fa-tags::before {
  content: "#";
  margin-right: 0.25em;
  font-weight: 600;
}

.fa-search::before {
  content: "⌕";
  margin-right: 0.25em;
}

/* main.min.js paints fa-adjust when theme=light (label "Dark") and
   fa-adjust.fa-rotate-180 when theme=dark (label "Light"). Half-circle
   glyphs (◐/◑) are the most reliably-rendered theme-toggle Unicode
   pair across system sans stacks — moon/sun (☾/☀) and crescents fall
   back to invisible on stripped Linux font sets. */
.fa-adjust::before {
  content: "◐";
  margin-right: 0.25em;
} /* ◐ left half black */
.fa-adjust.fa-rotate-180::before {
  content: "◑";
  margin-right: 0.25em;
} /* ◑ right half black */
/* ============================================================
   Landing page redesign — "typed-systems editorial" layer.
   Lives in _sass/home.scss; scoped to .cp-home. Imported last so
   its tokens win over the generic card/button rules above.
   ============================================================ */
/* ============================================================
   Landing page — "typed-systems editorial" layer.

   Scoped to .cp-home (plus a body background hook). Tokens are CSS
   custom properties so the existing light/dark theme toggle
   (html[data-theme]) keeps working. Fraunces (variable serif) is the
   display face for the landing page only; body copy stays on the
   system sans stack defined in main.scss.

   Motion notes: everything here is visible by default. GSAP
   (assets/js/home.js) only *adds* entrances — no content is hidden
   in CSS, so no-JS and prefers-reduced-motion users get the full
   page, static.
   ============================================================ */
.cp-home {
  /* --- Tokens: light (warm paper) ------------------------------- */
  --hp-bg: #faf8f3;
  --hp-ink: #1b1b26;
  --hp-muted: rgba(27, 27, 38, 0.62);
  --hp-faint: rgba(27, 27, 38, 0.45);
  --hp-line: rgba(27, 27, 38, 0.14);
  --hp-line-soft: rgba(27, 27, 38, 0.07);
  --hp-accent: #3b3b8c;
  --hp-accent-ink: #32327a;
  --hp-accent-soft: rgba(59, 59, 140, 0.08);
  --hp-accent-mid: rgba(59, 59, 140, 0.18);
  --hp-card-bg: #fffdf9;
  --hp-stat-bg: linear-gradient(135deg, rgba(59, 59, 140, 0.10), rgba(59, 59, 140, 0.03));
  background: var(--hp-bg);
  color: var(--hp-ink);
  overflow-x: clip;
  /* .site-header is a full-width left float the theme never clears.
     Block children overlap it harmlessly, but flex sections (BFCs)
     would be squeezed into the zero remaining space beside it. */
  clear: both;
}

html[data-theme=dark] .cp-home {
  --hp-bg: #1f242c;
  --hp-ink: #d9e0ea;
  --hp-muted: rgba(217, 224, 234, 0.66);
  --hp-faint: rgba(217, 224, 234, 0.45);
  --hp-line: rgba(217, 224, 234, 0.16);
  --hp-line-soft: rgba(217, 224, 234, 0.08);
  --hp-accent: #9b9bf2;
  --hp-accent-ink: #b3b3f7;
  --hp-accent-soft: rgba(138, 138, 240, 0.10);
  --hp-accent-mid: rgba(138, 138, 240, 0.22);
  --hp-card-bg: #262c35;
  --hp-stat-bg: linear-gradient(135deg, rgba(138, 138, 240, 0.14), rgba(138, 138, 240, 0.04));
}

/* Page background must extend behind navbar + footer, not just the
   .cp-home block, or the warm paper ends in a hard seam. */
html body:has(.cp-home) {
  background: #faf8f3;
}

html[data-theme=dark] body:has(.cp-home) {
  background: #1f242c;
}

/* The theme paints header/footer with --background (pure white /
   #22272e), which seams against the warm paper. Let them inherit. */
body:has(.cp-home) .site-header,
body:has(.cp-home) .site-footer {
  background: transparent;
}

/* --- Shared primitives ------------------------------------------ */
.cp-home .hp-wrap {
  max-width: 76rem;
  margin-inline: auto;
  padding-inline: clamp(1.25rem, 4vw, 3rem);
}

.cp-home .hp-section {
  padding-block: clamp(4.5rem, 9vw, 8rem);
  border-top: 1px solid var(--hp-line-soft);
}

.cp-home .hp-eyebrow {
  font-family: "JetBrains Mono", "Cascadia Code", "Fira Code", "SF Mono", "Menlo", "Consolas", "Liberation Mono", monospace;
  font-size: 0.78rem;
  font-weight: 600;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--hp-accent);
  margin: 0 0 1.25rem;
}

.cp-home .hp-h2 {
  font-family: "Fraunces", "Iowan Old Style", Georgia, "Times New Roman", serif;
  font-weight: 560;
  font-variation-settings: "opsz" 90;
  font-size: clamp(2.1rem, 4.5vw, 3.4rem);
  line-height: 1.06;
  letter-spacing: -0.015em;
  margin: 0;
  max-width: 22ch;
  text-wrap: balance;
}

.cp-home .hp-h2 em {
  font-style: italic;
  color: var(--hp-accent-ink);
}

.cp-home .hp-section-head {
  margin-bottom: clamp(2.5rem, 5vw, 4.5rem);
}

.cp-home .hp-section-lead {
  font-size: 1.15rem;
  color: var(--hp-muted);
  max-width: 52ch;
  margin: 1.25rem 0 0;
  line-height: 1.6;
}

.cp-home .hp-large {
  font-size: clamp(1.2rem, 1.8vw, 1.45rem);
  line-height: 1.55;
  letter-spacing: -0.008em;
  margin: 0;
}

.cp-home .hp-aside {
  font-size: 0.92rem;
  color: var(--hp-muted);
  margin: 0.85rem 0 0;
}

.cp-home h3 {
  font-family: "Fraunces", "Iowan Old Style", Georgia, "Times New Roman", serif;
  font-weight: 600;
  font-size: 1.45rem;
  letter-spacing: -0.01em;
  line-height: 1.15;
  margin: 0 0 0.6rem;
}

.cp-home a:focus-visible,
.cp-home .btn:focus-visible {
  outline: 2px solid var(--hp-accent);
  outline-offset: 3px;
}

/* Buttons inherit main.scss; re-derive colours from tokens so the
   dark hero/dark section stay legible. */
.cp-home .btn-primary {
  background-color: var(--hp-accent);
  border-color: var(--hp-accent);
  color: var(--hp-bg);
}

.cp-home .btn-primary:hover {
  background-color: var(--hp-accent-ink);
  border-color: var(--hp-accent-ink);
  color: var(--hp-bg);
}

.cp-home .btn-outline-primary {
  color: var(--hp-accent);
  border-color: var(--hp-accent-mid);
  background: transparent;
}

.cp-home .btn-outline-primary:hover {
  background: var(--hp-accent-soft);
  color: var(--hp-accent-ink);
  border-color: var(--hp-accent);
}

/* The theme's html[data-theme="dark"] button rules (teal --link) outrank
   the .cp-home overrides above; restate them at dark specificity. */
html[data-theme=dark] .cp-home .btn-primary {
  background-color: var(--hp-accent);
  border-color: var(--hp-accent);
  color: #14141d;
}

html[data-theme=dark] .cp-home .btn-primary:hover,
html[data-theme=dark] .cp-home .btn-primary:focus {
  background-color: var(--hp-accent-ink);
  border-color: var(--hp-accent-ink);
  color: #14141d;
}

html[data-theme=dark] .cp-home .btn-outline-primary {
  color: var(--hp-accent);
  border-color: var(--hp-accent-mid);
}

html[data-theme=dark] .cp-home .btn-outline-primary:hover,
html[data-theme=dark] .cp-home .btn-outline-primary:focus {
  background: var(--hp-accent-soft);
  color: var(--hp-accent-ink);
  border-color: var(--hp-accent);
}

/* ============================================================ Hero */
.cp-home .hp-hero {
  position: relative;
  padding-block: clamp(4rem, 9vh, 7rem) clamp(4rem, 8vw, 6.5rem);
  min-height: min(92vh, 60rem);
  display: flex;
  align-items: center;
}

.cp-home .hp-hero-bg {
  position: absolute;
  inset: 0;
  pointer-events: none;
  /* fine blueprint grid, faded at the edges */
  background-image: linear-gradient(var(--hp-line-soft) 1px, transparent 1px), linear-gradient(90deg, var(--hp-line-soft) 1px, transparent 1px);
  background-size: 72px 72px;
  -webkit-mask-image: radial-gradient(120% 90% at 50% 10%, black 30%, transparent 75%);
  mask-image: radial-gradient(120% 90% at 50% 10%, black 30%, transparent 75%);
}

.cp-home .hp-hero-bg canvas {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  opacity: 0.5;
}

.cp-home .hp-hero .hp-wrap {
  position: relative;
  width: 100%;
}

.cp-home .hp-hero-eyebrow {
  margin-bottom: 2rem;
  color: var(--hp-faint);
}

.cp-home .hp-hero-eyebrow span {
  color: var(--hp-accent);
}

.cp-home .hp-hero-title {
  font-family: "Fraunces", "Iowan Old Style", Georgia, "Times New Roman", serif;
  font-weight: 540;
  font-variation-settings: "opsz" 144;
  font-size: clamp(2.9rem, 8.2vw, 6.4rem);
  line-height: 1;
  letter-spacing: -0.022em;
  margin: 0 0 1.75rem;
  max-width: 14ch;
}

.cp-home .hp-hero-title em {
  font-style: italic;
  color: var(--hp-accent-ink);
}

.cp-home .hp-line {
  display: block;
  overflow: hidden;
  padding-block: 0.06em;
}

.cp-home .hp-line-inner {
  display: inline-block;
  will-change: transform;
}

.cp-home .hp-hero-lead {
  font-size: clamp(1.1rem, 1.6vw, 1.3rem);
  line-height: 1.6;
  color: var(--hp-muted);
  max-width: 46ch;
  margin: 0 0 2.25rem;
}

.cp-home .hp-hero-cta {
  display: flex;
  flex-wrap: wrap;
  gap: 0.85rem;
  align-items: center;
}

.cp-home .hp-magnetic {
  will-change: transform;
}

/* --- Narrowing diagram (HTML rebuild of hero-narrowing.svg) ------ */
.cp-home .hp-narrowing {
  margin: clamp(3rem, 6vw, 4.5rem) 0 0;
  max-width: 64rem;
}

.cp-home .hp-bar-row {
  margin-bottom: 1.1rem;
}

.cp-home .hp-bar-row-2 {
  margin-left: 7%;
}

.cp-home .hp-bar-row-3 {
  margin-left: 14%;
}

.cp-home .hp-bar {
  box-sizing: border-box;
  display: flex;
  align-items: center;
  height: clamp(2.6rem, 5vw, 3.3rem);
  padding-inline: clamp(0.9rem, 2vw, 1.4rem);
  border: 1px solid var(--hp-accent);
  border-radius: 0.55rem;
  background: var(--hp-accent-soft);
  transform-origin: left center;
  overflow: hidden;
  white-space: nowrap;
}

.cp-home .hp-bar-1 {
  width: 100%;
}

.cp-home .hp-bar-2 {
  width: 61.8%;
  background: var(--hp-accent-mid);
}

.cp-home .hp-bar-3 {
  width: 38.2%;
  background: var(--hp-accent-mid);
  border-width: 1.4px;
}

.cp-home .hp-bar code {
  font-family: "JetBrains Mono", "Cascadia Code", "Fira Code", "SF Mono", "Menlo", "Consolas", "Liberation Mono", monospace;
  font-size: clamp(0.82rem, 1.5vw, 1.05rem);
  font-weight: 500;
  background: none;
  color: var(--hp-ink);
}

.cp-home .hp-key {
  color: var(--hp-accent-ink);
  font-weight: 600;
}

.cp-home .hp-dim {
  color: var(--hp-faint);
}

.cp-home .hp-bar-sub {
  font-size: 0.88rem;
  color: var(--hp-muted);
  margin: 0.45rem 0 0 0.15rem;
}

.cp-home .hp-bar-caption {
  font-family: "JetBrains Mono", "Cascadia Code", "Fira Code", "SF Mono", "Menlo", "Consolas", "Liberation Mono", monospace;
  font-size: 0.78rem;
  letter-spacing: 0.06em;
  color: var(--hp-faint);
  margin-top: 1.75rem;
}

@media (max-width: 640px) {
  .cp-home .hp-bar-row-2 {
    margin-left: 3%;
  }
  .cp-home .hp-bar-row-3 {
    margin-left: 6%;
  }
  .cp-home .hp-bar-2 {
    width: 82%;
  }
  .cp-home .hp-bar-3 {
    width: 70%;
  }
  .cp-home .hp-bar-3 code {
    font-size: 0.7rem;
  }
}
/* ==================================================== Positioning */
.cp-home .hp-positioning-grid {
  display: grid;
  gap: clamp(2.5rem, 5vw, 5rem);
  align-items: start;
}

@media (min-width: 900px) {
  .cp-home .hp-positioning-grid {
    grid-template-columns: 5fr 6fr;
  }
}
.cp-home .hp-capabilities {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: 1fr;
  gap: 0;
}

@media (min-width: 560px) {
  .cp-home .hp-capabilities {
    grid-template-columns: 1fr 1fr;
    column-gap: 2.5rem;
  }
}
.cp-home .hp-capabilities li {
  border-top: 1px solid var(--hp-line);
  padding: 1.1rem 0 1.3rem;
  font-size: 0.97rem;
  line-height: 1.5;
  color: var(--hp-muted);
}

.cp-home .hp-capabilities strong {
  display: block;
  color: var(--hp-ink);
  font-weight: 650;
  letter-spacing: -0.01em;
  margin-bottom: 0.3rem;
  font-size: 1.05rem;
}

.cp-home .hp-cap-index {
  float: right;
  font-family: "JetBrains Mono", "Cascadia Code", "Fira Code", "SF Mono", "Menlo", "Consolas", "Liberation Mono", monospace;
  font-size: 0.72rem;
  color: var(--hp-faint);
  padding-top: 0.25rem;
}

/* ======================================================= Services */
.cp-home .hp-services-intro {
  display: grid;
  gap: clamp(1.5rem, 3vw, 3rem);
  margin-bottom: clamp(2.5rem, 5vw, 4rem);
  max-width: 100%;
}

@media (min-width: 900px) {
  .cp-home .hp-services-intro {
    grid-template-columns: 1fr 1fr;
  }
}
.cp-home .hp-services-intro p {
  margin: 0;
  font-size: 1.04rem;
  line-height: 1.65;
  color: var(--hp-muted);
}

.cp-home .hp-services-intro strong,
.cp-home .hp-services-intro em {
  color: var(--hp-ink);
}

.cp-home .hp-services-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 1.1rem;
}

@media (min-width: 760px) {
  .cp-home .hp-services-grid {
    grid-template-columns: 1fr 1fr;
  }
}
.cp-home .hp-card {
  display: flex;
  flex-direction: column;
  border: 1px solid var(--hp-line);
  border-radius: 0.9rem;
  background: var(--hp-card-bg);
  padding: clamp(1.4rem, 2.5vw, 2rem);
  transition: transform 0.35s cubic-bezier(0.22, 1, 0.36, 1), border-color 0.35s ease, box-shadow 0.35s ease;
}

.cp-home .hp-card:hover {
  transform: translateY(-5px);
  border-color: var(--hp-accent-mid);
  box-shadow: 0 18px 40px -22px rgba(27, 27, 60, 0.35);
}

.cp-home .hp-card-tag {
  font-family: "JetBrains Mono", "Cascadia Code", "Fira Code", "SF Mono", "Menlo", "Consolas", "Liberation Mono", monospace;
  font-size: 0.7rem;
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--hp-faint);
  margin: 0 0 1.4rem;
}

.cp-home .hp-card-body {
  font-size: 0.99rem;
  line-height: 1.6;
  color: var(--hp-muted);
  margin: 0 0 1.4rem;
}

.cp-home .hp-card-outcome {
  font-size: 1.02rem;
  line-height: 1.5;
  color: var(--hp-ink);
  font-weight: 550;
  letter-spacing: -0.006em;
  border-top: 1px solid var(--hp-line-soft);
  padding-top: 1.1rem;
  margin: auto 0 1.4rem;
}

.cp-home .hp-card-link {
  font-family: "JetBrains Mono", "Cascadia Code", "Fira Code", "SF Mono", "Menlo", "Consolas", "Liberation Mono", monospace;
  font-size: 0.78rem;
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--hp-accent);
  text-decoration: none;
  align-self: flex-start;
  position: relative;
}

.cp-home .hp-card-link::after {
  content: "";
  position: absolute;
  left: 0;
  bottom: -3px;
  width: 100%;
  height: 1px;
  background: var(--hp-accent);
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform 0.3s cubic-bezier(0.22, 1, 0.36, 1);
}

.cp-home .hp-card-link:hover::after {
  transform: scaleX(1);
}

.cp-home .hp-services-cta {
  margin-top: clamp(2.5rem, 5vw, 4rem);
  text-align: center;
}

/* ======================================================== Process */
.cp-home .hp-process {
  position: relative;
  max-width: 46rem;
}

.cp-home .hp-process-rail {
  position: absolute;
  top: 0.4rem;
  bottom: 0.4rem;
  left: 0.45rem;
  width: 1px;
  background: var(--hp-line);
}

.cp-home .hp-process-line {
  position: absolute;
  inset: 0;
  background: var(--hp-accent);
  transform-origin: top center;
  /* JS scrubs scaleY 0→1; without JS the line is simply full. */
}

.cp-home .hp-steps {
  list-style: none;
  margin: 0;
  padding: 0;
}

.cp-home .hp-step {
  position: relative;
  padding: 0 0 clamp(2.2rem, 4vw, 3.2rem) clamp(2.4rem, 5vw, 3.5rem);
}

.cp-home .hp-step:last-child {
  padding-bottom: 0;
}

.cp-home .hp-step::before {
  content: "";
  position: absolute;
  left: 0.18rem;
  top: 0.42rem;
  width: 0.6rem;
  height: 0.6rem;
  border-radius: 50%;
  background: var(--hp-bg);
  border: 1.5px solid var(--hp-accent);
}

.cp-home .hp-step-num {
  font-family: "JetBrains Mono", "Cascadia Code", "Fira Code", "SF Mono", "Menlo", "Consolas", "Liberation Mono", monospace;
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.16em;
  color: var(--hp-accent);
  margin: 0 0 0.35rem;
}

.cp-home .hp-step p:last-child {
  margin: 0;
  font-size: 0.99rem;
  line-height: 1.6;
  color: var(--hp-muted);
  max-width: 52ch;
}

.cp-home .hp-pullquote {
  margin: clamp(3rem, 6vw, 5rem) 0 0 auto;
  max-width: 38rem;
  border: 0;
  border-left: 2px solid var(--hp-accent);
  padding: 0.4rem 0 0.4rem 1.75rem;
}

.cp-home .hp-pullquote p {
  font-family: "Fraunces", "Iowan Old Style", Georgia, "Times New Roman", serif;
  font-style: italic;
  font-size: clamp(1.25rem, 2.2vw, 1.6rem);
  line-height: 1.4;
  margin: 0 0 0.85rem;
}

.cp-home .hp-pullquote footer {
  font-family: "JetBrains Mono", "Cascadia Code", "Fira Code", "SF Mono", "Menlo", "Consolas", "Liberation Mono", monospace;
  font-size: 0.78rem;
  letter-spacing: 0.08em;
  color: var(--hp-faint);
}

/* =================================================== Case studies */
.cp-home .hp-cases {
  display: flex;
  flex-direction: column;
  gap: clamp(2.5rem, 5vw, 4.5rem);
}

.cp-home .hp-case {
  display: grid;
  gap: clamp(1.5rem, 3vw, 3rem);
  align-items: center;
}

@media (min-width: 860px) {
  .cp-home .hp-case {
    grid-template-columns: 7fr 5fr;
  }
  .cp-home .hp-case:nth-child(even) .hp-case-visual {
    order: 2;
  }
}
.cp-home .hp-case-visual {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  aspect-ratio: 16/9;
  border: 1px solid var(--hp-line);
  border-radius: 1.1rem;
  background: linear-gradient(var(--hp-line-soft) 1px, transparent 1px) 0 0/48px 48px, linear-gradient(90deg, var(--hp-line-soft) 1px, transparent 1px) 0 0/48px 48px, var(--hp-stat-bg);
  overflow: hidden;
}

.cp-home .hp-case-stat {
  font-family: "Fraunces", "Iowan Old Style", Georgia, "Times New Roman", serif;
  font-weight: 540;
  font-variation-settings: "opsz" 144;
  font-size: clamp(3rem, 7vw, 5.5rem);
  letter-spacing: -0.03em;
  color: var(--hp-accent-ink);
  line-height: 1;
}

.cp-home .hp-case-statsub {
  font-family: "JetBrains Mono", "Cascadia Code", "Fira Code", "SF Mono", "Menlo", "Consolas", "Liberation Mono", monospace;
  font-size: 0.78rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--hp-muted);
}

.cp-home .hp-case-copy .hp-eyebrow {
  margin-bottom: 0.85rem;
}

.cp-home .hp-case-copy h3 {
  max-width: 18ch;
}

.cp-home .hp-case-copy p {
  font-size: 0.99rem;
  line-height: 1.6;
  color: var(--hp-muted);
  max-width: 44ch;
  margin: 0 0 1rem;
}

.cp-home .hp-case-result {
  font-weight: 650;
  color: var(--hp-ink) !important;
  letter-spacing: -0.008em;
}

/* =========================================== Technical excellence */
.cp-home .hp-dark {
  --hp-bg: #14141d;
  --hp-ink: #e8e8f2;
  --hp-muted: rgba(232, 232, 242, 0.64);
  --hp-faint: rgba(232, 232, 242, 0.42);
  --hp-line: rgba(232, 232, 242, 0.16);
  --hp-line-soft: rgba(232, 232, 242, 0.08);
  --hp-accent: #a3a3f5;
  --hp-accent-ink: #bcbcf8;
  --hp-accent-soft: rgba(163, 163, 245, 0.10);
  --hp-accent-mid: rgba(163, 163, 245, 0.26);
  background: #14141d;
  color: var(--hp-ink);
  border-top: 0;
}

.cp-home .hp-excellence {
  display: grid;
  gap: clamp(2.5rem, 5vw, 5rem);
  align-items: center;
}

@media (min-width: 900px) {
  .cp-home .hp-excellence {
    grid-template-columns: 6fr 5fr;
  }
}
.cp-home .hp-layers {
  display: flex;
  flex-direction: column;
  gap: 0.7rem;
}

.cp-home .hp-layer {
  display: flex;
  align-items: baseline;
  gap: 1rem;
  border: 1px solid var(--hp-accent-mid);
  border-radius: 0.6rem;
  background: var(--hp-accent-soft);
  padding: 0.85rem 1.25rem;
  margin-inline: auto;
  width: 100%;
  white-space: nowrap;
  overflow: hidden;
}

/* each layer narrows the one above it — the hero motif, restated */
.cp-home .hp-layer:nth-child(2) {
  width: 86%;
}

.cp-home .hp-layer:nth-child(3) {
  width: 72%;
}

.cp-home .hp-layer:nth-child(4) {
  width: 58%;
}

.cp-home .hp-layer:nth-child(5) {
  width: 44%;
  background: var(--hp-accent-mid);
}

.cp-home .hp-layer code {
  font-family: "JetBrains Mono", "Cascadia Code", "Fira Code", "SF Mono", "Menlo", "Consolas", "Liberation Mono", monospace;
  font-size: 0.92rem;
  font-weight: 600;
  color: var(--hp-accent-ink);
  background: none;
}

.cp-home .hp-layer span {
  font-size: 0.85rem;
  color: var(--hp-muted);
  text-overflow: ellipsis;
  overflow: hidden;
}

@media (max-width: 560px) {
  .cp-home .hp-layer span {
    display: none;
  }
  .cp-home .hp-layer:nth-child(4) {
    width: 66%;
  }
  .cp-home .hp-layer:nth-child(5) {
    width: 54%;
  }
}
.cp-home .hp-depth {
  list-style: none;
  margin: 0;
  padding: 0;
}

.cp-home .hp-depth li {
  border-top: 1px solid var(--hp-line-soft);
  padding: 0.95rem 0;
  font-size: 0.95rem;
  line-height: 1.55;
  color: var(--hp-muted);
}

.cp-home .hp-depth li:last-child {
  border-bottom: 1px solid var(--hp-line-soft);
}

.cp-home .hp-depth strong {
  color: var(--hp-ink);
  font-weight: 650;
  margin-right: 0.5rem;
}

/* ===================================== Research & open source */
.cp-home .hp-fixed {
  margin-top: clamp(3rem, 6vw, 5rem);
  border-top: 1px solid var(--hp-line);
  padding-top: clamp(2rem, 4vw, 3rem);
  max-width: 56rem;
}

.cp-home .hp-fixed .hp-large {
  color: var(--hp-muted);
}

.cp-home .hp-fixed .hp-large strong,
.cp-home .hp-fixed .hp-large code {
  color: var(--hp-ink);
}

.cp-home .hp-fixed-links {
  display: flex;
  flex-wrap: wrap;
  gap: 0.75rem;
  margin: 1.75rem 0 0;
}

/* Cards from the shared includes, re-skinned to the landing tokens. */
.cp-home .card {
  background: var(--hp-card-bg);
  border: 1px solid var(--hp-line);
  border-radius: 0.9rem;
  transition: transform 0.35s cubic-bezier(0.22, 1, 0.36, 1), border-color 0.35s ease;
}

.cp-home .card:hover {
  transform: translateY(-4px);
  border-color: var(--hp-accent-mid);
}

html[data-theme=dark] .cp-home .card {
  background: var(--hp-card-bg);
  border-color: var(--hp-line);
}

.cp-home .hp-writing-more {
  margin: 2rem 0 0;
  font-family: "JetBrains Mono", "Cascadia Code", "Fira Code", "SF Mono", "Menlo", "Consolas", "Liberation Mono", monospace;
  font-size: 0.85rem;
  letter-spacing: 0.06em;
}

/* ====================================================== Final CTA */
.cp-home .hp-final {
  text-align: center;
  padding-block: clamp(6rem, 12vw, 10rem);
}

.cp-home .hp-final .hp-eyebrow {
  margin-bottom: 1.75rem;
}

.cp-home .hp-availability {
  display: inline-flex;
  align-items: center;
  gap: 0.55rem;
  border: 1px solid var(--hp-line);
  border-radius: 99px;
  padding: 0.45rem 1rem;
  color: var(--hp-muted);
}

.cp-home .hp-availability-dot {
  width: 0.5rem;
  height: 0.5rem;
  border-radius: 50%;
  background: #3e9c5f;
  animation: hp-pulse 2.4s ease-in-out infinite;
}

@keyframes hp-pulse {
  0%, 100% {
    box-shadow: 0 0 0 0 rgba(62, 156, 95, 0.45);
  }
  50% {
    box-shadow: 0 0 0 6px rgba(62, 156, 95, 0);
  }
}
.cp-home .hp-final-title {
  margin-inline: auto;
  max-width: 18ch;
  font-size: clamp(2.4rem, 5.5vw, 4.2rem);
}

.cp-home .hp-final-lead {
  font-size: 1.08rem;
  line-height: 1.65;
  color: var(--hp-muted);
  max-width: 52ch;
  margin: 1.75rem auto 2.5rem;
}

.cp-home .hp-final .hp-hero-cta {
  justify-content: center;
}

/* ====================================== Reduced motion / no-JS */
@media (prefers-reduced-motion: reduce) {
  .cp-home .hp-availability-dot {
    animation: none;
  }
  .cp-home .hp-card,
  .cp-home .card,
  .cp-home .hp-card-link::after {
    transition: none;
  }
}
/* ============================================================
   Refactoring catalogue — /refactorings/ and its entries.
   ============================================================ */
.refactoring-list li {
  margin-bottom: 0.2rem;
}

.refactoring-pending {
  opacity: 0.55;
}

/* Entry pages: Scala and Haskell side by side on wide viewports,
   stacked below. Each pane scrolls on its own so the page never
   scrolls horizontally. */
.rf-pair {
  display: grid;
  grid-template-columns: 1fr;
  gap: 1rem;
  margin: 1rem 0 2rem;
}

@media (min-width: 1000px) {
  /* Bleed past the prose measure so two 80-column panes fit side by side. */
  .rf-pair {
    grid-template-columns: 1fr 1fr;
    width: min(100vw - 3rem, 1360px);
    margin-left: calc(50% - min(50vw - 1.5rem, 680px));
  }
}
.rf-pair > div {
  min-width: 0;
}

.rf-pair pre, .rf-pair code {
  font-size: 0.78rem;
}

.rf-pair h4 {
  font-family: "JetBrains Mono", "Cascadia Code", "Fira Code", "SF Mono", "Menlo", "Consolas", "Liberation Mono", monospace;
  font-size: 0.8rem;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  opacity: 0.7;
  margin: 0 0 0.4rem;
}

.rf-pair pre {
  overflow-x: auto;
  margin: 0;
}

.rf-pair .highlight {
  margin: 0;
}

.rf-figure {
  margin: 2rem 0;
}

.rf-figure svg {
  width: 100%;
  height: auto;
  display: block;
}

.rf-figure figcaption {
  font-size: 0.9rem;
  opacity: 0.75;
  margin-top: 0.5rem;
}

.rf-crumb {
  font-size: 0.9rem;
  opacity: 0.75;
  margin-bottom: 1.5rem;
}

.rf-spec {
  margin: 1rem 0 2rem;
}

.rf-spec summary {
  cursor: pointer;
  font-size: 0.95rem;
}

.rf-spec[open] summary {
  margin-bottom: 0.75rem;
}

/*# sourceMappingURL=main.css.map */