:root {
  --font-sans: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;

  --font-size-body: 16px;
  --font-size-nav: 14px;
  --font-size-mono: 14px;
  --font-size-small: 13px;

  --line-height-body: 1.6;
  --line-height-small: 1.3;

  --color-text: rgb(0, 0, 0);
  --color-text-muted: rgb(120, 120, 120);
  --color-text-muted-small: rgb(96, 96, 96);
  --color-text-hover: rgb(96, 96, 96);

  --color-link: rgb(51, 137, 235);
  --color-link-muted-small: rgb(90, 130, 180);

  --color-border: rgb(220, 220, 220);
  --color-border-inline: rgb(230, 230, 230);

  --color-bg-th: rgb(245, 245, 245);
  --color-bg-code: rgb(239, 241, 245);
  --color-bg-code-filename: rgba(0, 128, 255, 0.1);

  --content-width: 700px;
  --content-gutter: 16px;

  --toc-width: 220px;
  --toc-gap: 48px;
  --toc-sticky-offset: 24px;

  --radius-code-inline: 4px;
  --radius-code-block: 6px;
}
*,
*::before,
*::after {
  box-sizing: border-box;
}

body {
  margin: 0;
}

img,
picture,
video,
canvas,
svg {
  display: block;
  max-width: 100%;
}

input,
button,
textarea,
select {
  font: inherit;
}

p,
h1,
h2,
h3,
h4,
h5,
h6 {
  overflow-wrap: break-word;
}

p {
  text-wrap: pretty;
}

h1,
h2,
h3,
h4,
h5,
h6 {
  text-wrap: balance;
}
.wrap {
  max-width: calc(var(--content-width) + 2 * var(--content-gutter));
  margin-inline: auto;
  padding-inline: var(--content-gutter);
}

html {
  scrollbar-gutter: stable;
}
.nav {
  font-size: var(--font-size-nav);
  margin-top: 1em;
  margin-bottom: 1em;
  font-weight: 700;
}

.nav a {
  color: var(--color-text);
  text-decoration: none;
}

.nav a:hover {
  color: var(--color-text-hover);
  text-decoration: none;
}

.nav ul {
  display: flex;
  justify-content: flex-end;
  list-style-type: none;
  padding: 0;
  margin: 0;
  gap: 0.8em;
}
body {
  color: var(--color-text);
  font-family: var(--font-sans);
  font-weight: 400;
  font-size: var(--font-size-body);
  text-size-adjust: 100%;
  -ms-text-size-adjust: 100%;
  -webkit-text-size-adjust: 100%;
  -webkit-font-smoothing: antialiased;
}

a {
  color: var(--color-link);
  text-decoration: none;
}

a:hover {
  color: var(--color-link);
  text-decoration: underline;
  text-decoration-thickness: 1px;
}

h1 {
  font-weight: 700;
}

h2,
h3,
h4,
h5,
h6 {
  font-weight: 500;
}

.article {
  line-height: var(--line-height-body);
}

.article h2 {
  border-bottom: 1px solid var(--color-border-inline);
}

.article hr {
  border: 0;
  border-top: 1px solid var(--color-text-muted);
  margin: 33px auto;
  width: 70px;
}

.article blockquote {
  margin: 0;
  padding: 0 1em;
  color: var(--color-text-muted);
  border-left: 0.25em solid var(--color-border-inline);
}

.single-date {
  color: var(--color-text-muted);
}

.list-title {
  margin-bottom: 0;
}

.list-title a {
  color: var(--color-text);
  text-decoration: none;
}

.list-title a:hover {
  color: var(--color-text-hover);
  text-decoration: none;
}

.list-date {
  margin: 0;
  color: var(--color-text-muted);
}
.article .footnotes {
  color: var(--color-text-muted-small);
  font-size: var(--font-size-small);
  line-height: var(--line-height-small);
}

.article .footnotes ol {
  padding-left: 1.4em;
}

.article .footnotes li {
  margin-bottom: 0.5em;
}

.article .footnotes p {
  margin: 0;
}

.article .footnotes a {
  color: var(--color-link-muted-small);
}
.article table {
  border-collapse: collapse;
  display: block;
  max-width: 100%;
  overflow-x: auto;
}

.article th,
.article td {
  border: 1px solid var(--color-border);
  padding: 0.25em 0.5em;
  font-size: var(--font-size-small);
}

.article th {
  font-weight: 700;
  background: var(--color-bg-th);
}
/* Inline code */
.article :not(pre)>code {
  font-family: var(--font-mono);
  font-size: var(--font-size-mono);
  padding: 0.1em 0.25em;
  background: var(--color-bg-code);
  border: 1px solid var(--color-border-inline);
  border-radius: var(--radius-code-inline);
}

/* Code blocks */
.article .code-block {
  font-family: var(--font-mono);
  font-size: var(--font-size-mono);
  line-height: var(--line-height-body);
  margin: 1rem 0;
  overflow: hidden;
  background: var(--color-bg-code);
  border-radius: var(--radius-code-block);
}

.article .code-block-filename {
  padding: 0.5em 1.3em;
  background: var(--color-bg-code-filename);
}

.article pre {
  margin: 0;
  overflow-x: auto;
  padding: 1em 1.3em;
}
/* Generated using: hugo gen chromastyles --style=catppuccin-latte */

/* Background */
.bg {
    color: #4c4f69;
    background-color: #eff1f5;
}

/* PreWrapper */
.chroma {
    color: #4c4f69;
    background-color: #eff1f5;
}

/* Error */
.chroma .err {
    color: #d20f39
}

/* LineLink */
.chroma .lnlinks {
    outline: none;
    text-decoration: none;
    color: inherit
}

/* LineTableTD */
.chroma .lntd {
    vertical-align: top;
    padding: 0;
    margin: 0;
    border: 0;
}

/* LineTable */
.chroma .lntable {
    border-spacing: 0;
    padding: 0;
    margin: 0;
    border: 0;
}

/* LineHighlight */
.chroma .hl {
    background-color: #bcc0cc
}

/* LineNumbersTable */
.chroma .lnt {
    white-space: pre;
    -webkit-user-select: none;
    user-select: none;
    margin-right: 0.4em;
    padding: 0 0.4em 0 0.4em;
    color: #8c8fa1
}

/* LineNumbers */
.chroma .ln {
    white-space: pre;
    -webkit-user-select: none;
    user-select: none;
    margin-right: 0.4em;
    padding: 0 0.4em 0 0.4em;
    color: #8c8fa1
}

/* Line */
.chroma .line {
    display: flex;
}

/* Keyword */
.chroma .k {
    color: #8839ef
}

/* KeywordConstant */
.chroma .kc {
    color: #fe640b
}

/* KeywordDeclaration */
.chroma .kd {
    color: #d20f39
}

/* KeywordNamespace */
.chroma .kn {
    color: #179299
}

/* KeywordPseudo */
.chroma .kp {
    color: #8839ef
}

/* KeywordReserved */
.chroma .kr {
    color: #8839ef
}

/* KeywordType */
.chroma .kt {
    color: #d20f39
}

/* NameAttribute */
.chroma .na {
    color: #1e66f5
}

/* NameClass */
.chroma .nc {
    color: #df8e1d
}

/* NameConstant */
.chroma .no {
    color: #df8e1d
}

/* NameDecorator */
.chroma .nd {
    color: #1e66f5;
    font-weight: bold
}

/* NameEntity */
.chroma .ni {
    color: #179299
}

/* NameException */
.chroma .ne {
    color: #fe640b
}

/* NameLabel */
.chroma .nl {
    color: #04a5e5
}

/* NameNamespace */
.chroma .nn {
    color: #fe640b
}

/* NameProperty */
.chroma .py {
    color: #fe640b
}

/* NameTag */
.chroma .nt {
    color: #8839ef
}

/* NameBuiltin */
.chroma .nb {
    color: #04a5e5
}

/* NameBuiltinPseudo */
.chroma .bp {
    color: #04a5e5
}

/* NameVariable */
.chroma .nv {
    color: #dc8a78
}

/* NameVariableClass */
.chroma .vc {
    color: #dc8a78
}

/* NameVariableGlobal */
.chroma .vg {
    color: #dc8a78
}

/* NameVariableInstance */
.chroma .vi {
    color: #dc8a78
}

/* NameVariableMagic */
.chroma .vm {
    color: #dc8a78
}

/* NameFunction */
.chroma .nf {
    color: #1e66f5
}

/* NameFunctionMagic */
.chroma .fm {
    color: #1e66f5
}

/* LiteralString */
.chroma .s {
    color: #40a02b
}

/* LiteralStringAffix */
.chroma .sa {
    color: #d20f39
}

/* LiteralStringBacktick */
.chroma .sb {
    color: #40a02b
}

/* LiteralStringChar */
.chroma .sc {
    color: #40a02b
}

/* LiteralStringDelimiter */
.chroma .dl {
    color: #1e66f5
}

/* LiteralStringDoc */
.chroma .sd {
    color: #9ca0b0
}

/* LiteralStringDouble */
.chroma .s2 {
    color: #40a02b
}

/* LiteralStringEscape */
.chroma .se {
    color: #1e66f5
}

/* LiteralStringHeredoc */
.chroma .sh {
    color: #9ca0b0
}

/* LiteralStringInterpol */
.chroma .si {
    color: #40a02b
}

/* LiteralStringOther */
.chroma .sx {
    color: #40a02b
}

/* LiteralStringRegex */
.chroma .sr {
    color: #179299
}

/* LiteralStringSingle */
.chroma .s1 {
    color: #40a02b
}

/* LiteralStringSymbol */
.chroma .ss {
    color: #40a02b
}

/* LiteralNumber */
.chroma .m {
    color: #fe640b
}

/* LiteralNumberBin */
.chroma .mb {
    color: #fe640b
}

/* LiteralNumberFloat */
.chroma .mf {
    color: #fe640b
}

/* LiteralNumberHex */
.chroma .mh {
    color: #fe640b
}

/* LiteralNumberInteger */
.chroma .mi {
    color: #fe640b
}

/* LiteralNumberIntegerLong */
.chroma .il {
    color: #fe640b
}

/* LiteralNumberOct */
.chroma .mo {
    color: #fe640b
}

/* Operator */
.chroma .o {
    color: #04a5e5;
    font-weight: bold
}

/* OperatorWord */
.chroma .ow {
    color: #04a5e5;
    font-weight: bold
}

/* Comment */
.chroma .c {
    color: #9ca0b0;
    font-style: italic
}

/* CommentHashbang */
.chroma .ch {
    color: #acb0be;
    font-style: italic
}

/* CommentMultiline */
.chroma .cm {
    color: #9ca0b0;
    font-style: italic
}

/* CommentSingle */
.chroma .c1 {
    color: #9ca0b0;
    font-style: italic
}

/* CommentSpecial */
.chroma .cs {
    color: #9ca0b0;
    font-style: italic
}

/* CommentPreproc */
.chroma .cp {
    color: #9ca0b0;
    font-style: italic
}

/* CommentPreprocFile */
.chroma .cpf {
    color: #9ca0b0;
    font-weight: bold;
    font-style: italic
}

/* GenericDeleted */
.chroma .gd {
    color: #d20f39;
    background-color: #ccd0da
}

/* GenericEmph */
.chroma .ge {
    font-style: italic
}

/* GenericError */
.chroma .gr {
    color: #d20f39
}

/* GenericHeading */
.chroma .gh {
    color: #fe640b;
    font-weight: bold
}

/* GenericInserted */
.chroma .gi {
    color: #40a02b;
    background-color: #ccd0da
}

/* GenericStrong */
.chroma .gs {
    font-weight: bold
}

/* GenericSubheading */
.chroma .gu {
    color: #fe640b;
    font-weight: bold
}

/* GenericTraceback */
.chroma .gt {
    color: #d20f39
}

/* GenericUnderline */
.chroma .gl {
    text-decoration: underline
}
.article figure {
  max-width: var(--figure-width, 100%);
  margin: 2em 0;
  margin-inline: auto;
}

.article img {
  max-width: 100%;
  height: auto;
  margin-inline: auto;
  margin-block: 0;
}

.article figure .zoomable-image {
  cursor: zoom-in;
}

.article figcaption {
  margin: 0.5em auto 0;
  color: var(--color-text-muted-small);
  font-size: var(--font-size-small);
  line-height: var(--line-height-small);
  text-align: center;
}
.lightbox[hidden] {
  display: none;
}

.lightbox {
  position: fixed;
  inset: 0;
  z-index: 1000;
  display: grid;
  place-items: center;
  padding: var(--content-gutter);
  background: rgba(0, 0, 0, 0.8);
}

.lightbox-image {
  display: block;
  max-width: calc(100vw - (var(--content-gutter) * 2));
  max-height: calc(100vh - (var(--content-gutter) * 2));
  object-fit: contain;
}

.lightbox-close {
  position: fixed;
  top: var(--content-gutter);
  right: var(--content-gutter);
  display: grid;
  place-items: center;
  width: 40px;
  height: 40px;
  border: 1px solid rgba(255, 255, 255, 0.35);
  border-radius: 50%;
  color: white;
  background: rgba(18, 18, 18, 0.55);
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.28);
  cursor: pointer;
}

.lightbox-close svg {
  width: 20px;
  height: 20px;
  stroke: currentColor;
  stroke-width: 2;
  stroke-linecap: round;
}

.lightbox-close:hover,
.lightbox-close:focus-visible {
  border-color: rgba(255, 255, 255, 0.75);
  background: rgba(255, 255, 255, 0.18);
  transform: scale(1.04);
}
.content-with-toc {
  position: relative;
}

.toc {
  display: none;
}

.toc-inner {
  max-height: calc(100vh - var(--toc-gap));
  overflow-y: auto;
  color: var(--color-text-muted);
  font-size: var(--font-size-small);
}

.toc-title {
  margin-bottom: 0.6rem;
  color: var(--color-text);
  font-weight: 600;
}

.toc nav ul {
  list-style: none;
  margin: 0;
  padding: 0;
}

.toc nav ul ul {
  margin-top: 0.15rem;
  padding-left: 0.85rem;
}

.toc nav li {
  margin: 0.15rem 0;
}

.toc nav a {
  display: block;
  padding: 0.18rem 0 0.18rem 0.65rem;
  border-left: 2px solid transparent;
  color: inherit;
  text-decoration: none;
}

.toc nav a:hover {
  color: var(--color-text);
  text-decoration: none;
}

.toc nav a.is-active {
  border-left-color: var(--color-link);
  color: var(--color-text);
  font-weight: 600;
}

@media (min-width: 1250px) {
  .toc {
    position: absolute;
    top: 0;
    left: calc(100% + var(--toc-gap));
    display: block;
    width: var(--toc-width);
    height: 100%;
  }

  .toc-inner {
    position: sticky;
    top: var(--toc-sticky-offset);
  }
}
