/* Styles for Johan Brook.com

Built for IE6, made in Dreamweaver.

Just kidding.
--------------------------------------------- */

@layer setup, defaults, theme, utils;

@layer setup{

/*  From:
    https://github.com/mayank99/reset.css/blob/main/package/index.css
    https://piccalil.li/blog/a-more-modern-css-reset/
*/

*,
*::before,
*::after {
    box-sizing: border-box;
}

:where([hidden]:not([hidden='until-found'])) {
    display: none !important;
}

:where(html) {
    /* https://kilianvalkhof.com/2022/css-html/your-css-reset-needs-text-size-adjust-probably/ */
    -moz-text-size-adjust: none;
    -webkit-text-size-adjust: none;
    text-size-adjust: none;
    color-scheme: dark light;
    -moz-tab-size: 2;
      -o-tab-size: 2;
         tab-size: 2;
}

@media (prefers-reduced-motion: no-preference) {
    :where(html:focus-within) {
        scroll-behavior: smooth;
    }
}

:where(body) {
    min-height: 100dvb;
    margin: 0;
}

:where(h1, h2, h3, h4, button, input, label) {
    line-height: 1.5;
}

:where(input, button, textarea, select) {
    font: inherit;
    color: inherit;
}

:where(textarea) {
    resize: vertical;
    resize: block;
}

:where(button, label, select, summary, [role='button'], [role='option']) {
    cursor: pointer;
}

:where(:disabled) {
    cursor: not-allowed;
}

:where(label:has(> input:disabled), label:has(+ input:disabled)) {
    cursor: not-allowed;
}

:where(a) {
    color: inherit;
    text-underline-offset: 0.2ex;
}

:where(ul) {
    list-style-type: disc;
}

:where(ul[role='list'], ol[role='list']) {
    list-style: none;
}

:where(img, svg, video, canvas, audio, iframe, embed, object) {
    display: block;
    vertical-align: middle;
}

:where(img, picture, svg, video) {
    max-inline-size: 100%;
    block-size: auto;
}

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

:where(h1, h2, h3, h4) {
    text-wrap: balance;
}

:where(hr) {
    border: none;
    border-block-start: 1px solid;
    color: inherit;
    block-size: 0;
    overflow: visible;
}

:where(:focus-visible) {
    outline: 3px solid CanvasText;
    box-shadow: 0 0 0 5px Canvas;
    outline-offset: 1px;
}

:where(:focus-visible, :target) {
    scroll-margin-block: 8vh;
}

:where(.visually-hidden:not(:focus-within, :active)) {
    -webkit-clip-path: inset(50%) !important;
            clip-path: inset(50%) !important;
    height: 1px !important;
    width: 1px !important;
    overflow: hidden !important;
    position: absolute !important;
    white-space: nowrap !important;
    border: 0 !important;
}

:where(progress) {
    vertical-align: baseline;
}

:where(legend) {
    padding: 0;
}

::-moz-focus-inner {
    border-style: none;
    padding: 0;
}

:-moz-focusring {
    outline: auto;
}

/**
Remove the inheritance of text transform in Edge and Firefox.
*/

:where(button, select) {
    text-transform: none;
}

:where(table) {
    border-collapse: collapse;
}

:where(body, h1, h2, h3, h4, p, figure, blockquote, dl, dd, ul, ol) {
    margin: 0;
}

:where(textarea:not([rows])) {
    min-height: 10em;
}
}

@layer setup{
:root {
    /* Colors */

    --mood: oklch(68% 0.155 47.65);
    --accent: hotpink;

    --light: color-mix(in oklab, var(--mood) 8%, oklch(84% 0 0));
    --dark: color-mix(in oklab, var(--mood) 4%, oklch(16% 0 0));

    --neon: oklch(77.6% 0.185 74.12);
    --yellow: oklch(82.94% 0.185 91.34);
    --red: oklch(72% 0.185 28.59);
    --green: oklch(77.94% 0.217 141.54);
    --blue: oklch(58.31% 0.217 253.71);

    --grey: hsl(214.51 7.24% 47.56%);
    --grey-light: hsl(173 7% 36% / 0.5);
    --grey-lightest: hsl(173 7% 93%);

    /* Background vars, ordered from high contrast -> subtle */
    --color-bg: #fff;
    --color-bg-secondary: hsl(240 59.76% 96.52%);

    /* Foreground vars, order from high contrast -> subtle */
    --color-text: hsl(0 0% 16%);
    --color-text-high-contrast: black;
    --color-text-detail: color-mix(in oklab, var(--mood) 10%, black 50%);
    --color-faint: color-mix(in oklab, var(--mood) 10%, black 20%);

    --link-color: var(--color-text-high-contrast);
    --link-color-hover: var(--color-text-high-contrast);
    --link-color-visited: hsl(266 100% 44%);
    --link-accent-color: var(--neon);

    --border-color: color-mix(in oklab, var(--mood) 3%, black 15%);

    --btn-color: var(--color-text);
    --btn-bg: var(--color-bg-secondary);
    --btn-bg-hover: hsl(240 59.76% 95.52%);

    --pre-background: var(--color-bg-secondary);
    --code-background: rgb(0 0 0 / 2%);
    --code-color: var(--color-text-high-contrast);

    /* Typography */

    --sans: system-ui, sans-serif;
    --mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace;
    --serif: Charter, 'Bitstream Charter', 'Sitka Text', Cambria, serif;

    --leading: 1.618;

    --fw-stronger: 450;

    --tracking: -0.014em;
    --tracking-f0: 0;
    --tracking-f1: -0.021em;
    --tracking-f2: -0.02em;
    --tracking-f3: -0.018em;
    --tracking-f4: 0;
    --tracking-f5: 0;
    --tracking-f6: 0;

    --f0: var(--step-title-32-48);
    --f1: var(--step-3);
    --f2: var(--step-2);
    --f3: var(--step-1);
    --f4: var(--step-0);
    --f5: var(--step--1);
    --f6: var(--step--2);
    --f7: var(--step--3);

    /* Measures */

    --inset: 0.5rlh;

    --measure: 62ch;
    --measure-narrow: 45ch;
    --measure-wide: 100ch;

    --content-width: var(--measure);

    --spacing-base: 1rlh;

    --spacing-none: 0;
    --spacing-extra-small: calc(var(--spacing-base) / 5);
    --spacing-small: calc(var(--spacing-base) / 2);
    --spacing-medium: var(--spacing-base);
    --spacing-large: calc(var(--spacing-base) * 2);
    --spacing-extra-large: calc(var(--spacing-base) * 3);
    --spacing-extra-extra-large: calc(var(--spacing-base) * 4);
    --spacing-extra-extra-extra-large: calc(var(--spacing-base) * 6);
}

    @media screen and (prefers-color-scheme: dark) {
:root {
        --yellow: oklch(90.29% 0.2146 98.81);
        --red: oklch(74.93% 0.1905 28.59);
        --green: oklch(88.24% 0.271 141.54);
        --blue: oklch(67.35% 0.18 253.71);
        --grey: hsl(214.51, 6.64%, 61.44%);

        --color-bg: var(--dark);
        --color-bg-secondary: color-mix(in oklab, var(--mood) 1%, white 4%);
        --color-text: var(--light);
        --color-text-high-contrast: color-mix(in oklab, var(--mood) 6%, oklch(95% 0 0));
        --color-text-detail: color-mix(in oklab, var(--mood) 10%, white 50%);
        --color-faint: color-mix(in oklab, var(--mood) 10%, white 20%);

        --border-color: color-mix(in oklab, var(--mood) 3%, white 8%);

        --link-color-visited: #7a8be5;
        --code-color: rgb(236 216 142);
        --code-background: rgb(255 255 255 / 2%);

        --btn-bg-hover: color-mix(in oklab, var(--mood) 5%, white 8%);
}
    }
:root {

    /* @link @link https://utopia.fyi/clamp/calculator?a=320,653,32—60 */--step-title-32-48: clamp(2rem, 1.039rem + 4.8048vi, 3rem);--step-3: clamp(1.4238rem, 0.924rem + 2.4993vi, 1.944rem);--step-2: clamp(1.2656rem, 0.9251rem + 1.7027vi, 1.62rem);--step-1: clamp(1.125rem, 0.9088rem + 1.0811vi, 1.35rem);--step-0: clamp(1rem, 0.8799rem + 0.6006vi, 1.125rem);--step--1: clamp(0.8889rem, 0.8422rem + 0.2336vi, 0.9375rem);--step--2: clamp(0.7813rem, 0.7987rem + -0.0426vi, 0.7901rem);--step--3: clamp(0.651rem, 0.7516rem + -0.2464vi, 0.7023rem);
}
}

@layer defaults{

/* Johan's sane defaults. */

/* ROOT */

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

html {
    /* 1. Sets a11y values on iOS/iPad OS. This also sets dynamic font size from the OS settings. */
    font: -apple-system-body;
    /* 2. Customise for my own line height and font. */
    line-height: var(--leading);
    font-family: var(--sans);

    /* 3. Larger on larger screens. */
}
    @media only screen and (min-width: 600px) {

html {
        font-size: 112.5%;
}
    }

body {
    font-variant-ligatures: contextual common-ligatures;
}

    @media (min-width: 750px) {

body {
        hanging-punctuation: first;
}
    }

/* FORMS */

input,
textarea {
    hanging-punctuation: none;
}

/* NAVIGATION */

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

:where(ul, ol) {
    padding-left: 0;
}
        nav [aria-current='page'] :where(a, a:hover) {
            cursor: default;
            font-weight: 600;
            text-decoration: inherit;
        }

            @supports (font-variation-settings: 'GRAD' 530) {
        nav [aria-current='page'] :where(a, a:hover) {
                font-weight: normal;
                font-variation-settings: 'GRAD' 530;
        }
            }

/* SPACING / VERTICAL RHYTHM */

article
    :not(nav > *):where(h1, h2, h3, h4, p, ul, ol, li, blockquote, hr, figure, table, pre, details):not(:last-child) {
    margin-block-end: var(--spacing-prose, 1rlh);
}

    @media (max-width: 600px) {

article
    :not(nav > *):where(h1, h2, h3, h4, p, ul, ol, li, blockquote, hr, figure, table, pre, details):not(:last-child) {
        --spacing-prose: 0.5rlh;
}
    }

/* TABLES */

table {
    text-align: left;
    width: 100%;
    border-collapse: collapse;
    border-spacing: 0;
    table-layout: fixed;
}

    table thead th {
        position: sticky;
        top: 0;
        vertical-align: bottom;
    }

/* CODE */

:where(code, kbd, pre) {
    font-family: var(--mono);
}

pre {
    white-space: pre;
    -webkit-hyphens: none;
            hyphens: none;
    overflow-x: auto;
}

/* Syntax highlighting */
code[class*='language-'] {
    display: block;
}

@media (hover: hover) {
    time[title] {
        cursor: help;
        text-decoration: underline;
        text-decoration-style: dotted;
        text-underline-offset: 0.3ex;
        text-decoration-thickness: 2px;
    }
}
}

@layer theme{

body {
    margin-inline: auto;
    padding-inline: 5%;
    padding-block: 0.5rlh;
}

    @media (min-width: 960px) {

body {
        display: grid;
        grid-template-columns: 110px var(--content-width);
        -moz-column-gap: 3rlh;
             column-gap: 3rlh;
        justify-content: center;
}
    }

    @media only screen and (min-width: 600px) {

body {
        padding-block: 1rlh;
}
    }

.Page {
    display: grid;
    height: 100%;
    align-content: start;

    /* The thinking is to apply a margin *if needed*, so we use the fact that a bottom margin bleeds
       over when overflowing its parent. */
}
    @media (min-width: 960px) {

.Page {
        grid-template-rows: minmax(3rlh, max-content) 1fr min-content;
}

        html:not(.hidden-title) .Page > header > :last-child {
            margin-block-end: 1rlh;
        }
    }
    
    @media (max-width: 959px) {
        .Page > header > :last-child {
            margin-block-end: 1rlh;
        }
    }
    
    /* Ancient hack to prevent overflows. */
    .Page .prose {
        min-width: 0;
    }

    .Page footer {
        margin-block-start: 2rlh;
    }

        .Page footer nav {
            display: grid;
            grid-template-columns: repeat(3, 1fr);
            gap: 10px;
        }

            .Page footer nav :first-child {
                justify-self: start;
            }

            .Page footer nav :nth-child(2) {
                justify-self: center;
            }

            .Page footer nav :nth-child(3) {
                justify-self: end;
            }

html.hidden-title :is(main > header, main > article > header) h1:not(:focus-within, :active) {
    -webkit-clip-path: inset(50%) !important;
            clip-path: inset(50%) !important;
    height: 1px !important;
    width: 1px !important;
    overflow: hidden !important;
    position: absolute !important;
    white-space: nowrap !important;
    border: 0 !important;
}
}

@layer theme{

/* Site specific "theme" styling. */

body {
    color: var(--color-text);
}

:where(h1, h2, h3, h4, h5, h6) {
    margin-block-end: 0.5rlh;
    color: var(--color-text-high-contrast);
    font-weight: 540;
}

strong {
    color: var(--color-text-high-contrast);
    font-weight: 550;
}

ul ::marker {
    color: var(--color-faint);
}

ol:not([role='list']) {
    list-style-type: decimal-leading-zero;
}

ol ::marker {
    color: var(--color-text-detail);
    font-size: 0.85rem;
}

a:not(.btn) {
    color: var(--link-color);
    position: relative;
    text-underline-offset: 3px;
    text-decoration-thickness: 1px;
}

    a:not(.btn):where(:hover,a:not(.btn):hover .link) {
        color: var(--link-color-hover);
        text-decoration-style: wavy;
        text-decoration-color: var(--link-accent-color);
        text-decoration-thickness: 2px; /* Not included in shorthand for Safari… */
    }

    a:not(.btn):active {
        top: 1px;
    }

    :where(a.muted:not(.btn),a.detail:not(.btn)) {
        text-decoration: none;
    }

        :where(a.muted:not(.btn),a.detail:not(.btn)):hover {
            -webkit-text-decoration: revert-layer;
                    text-decoration: revert-layer;
        }

    a:not(.btn):is([aria-current='page'] > *):is(:focus-visible, :hover) {
        cursor: default;
        text-decoration: none;
    }

    a.no-link:not(.btn) {
        color: inherit;
    }

    a.plain:not(.btn) {
        text-decoration: none;
    }

figcaption {
    color: var(--grey);
    font-family: var(--sans);
}

pre {
    text-align: left;
    line-height: var(--leading);
    color: var(--code-color);
    padding: 0.5rlh;
    position: relative;
}

    pre::before {
        border-radius: 10em;
        position: absolute;
        width: 3px;
        display: block;
        content: '';
        inset: 0;
        right: auto;
        background-color: currentColor;
    }

    pre .line-highlight {
        --cycle: 27px;
        --color: 112 20% 50%;
        text-decoration: none;
        position: absolute;
        height: calc(var(--rows) * var(--cycle));
        top: calc(var(--top-inset) + (var(--start) - 1) * var(--cycle));
        background-color: hsl(var(--color) / 4%);
        color: hsl(var(--color) / 80%);
        left: 0;
        width: 100%;
        display: block;
        pointer-events: none;
        padding: 0 6px;
        font-size: var(--f7);
    }

:not(pre) > code {
    color: var(--code-color);
    background-color: var(--code-background);
    padding: 0.125rem 0.25rem;
    border-radius: 0.125em;
    font-weight: 500;
    font-size: 0.85em;
}

li > pre {
    margin-top: 0.5rlh;
    margin-bottom: 0.5rlh;
}

blockquote {
    border-left: 2px solid var(--border-color);
    margin-inline: 0 0;
    padding-left: 0.5rlh;
    color: var(--color-text-high-contrast);
}

    blockquote > p {
        margin-bottom: 0.5rlh;
    }

    blockquote footer {
        color: var(--grey);
        margin-top: 1rlh;
    }

hr {
    border: 0;
    background-color: var(--border-color);
    height: 2px;
}

table {
    --spacing: 0.25rlh;
}
    tr:target {
        background-color: var(--color-bg-secondary);
    }

thead th {
    border-bottom: 2px solid;
    font-weight: 600;
    background-color: var(--color-bg);
    font-size: var(--f5);
    line-height: 1.5;
}
    tbody th {
        font-weight: 500;
    }

        tbody th a:not(:hover) {
            text-decoration: none;
        }

    tbody :where(td, th) {
        vertical-align: top;
    }

:where(td, th) {
    padding-block: var(--spacing);
}

:where(th, td):first-child {
    padding-left: 0;
}

:where(details[open], details summary:hover) {
    color: var(--color-text-high-contrast);
}

u {
    text-decoration: underline;
    text-underline-offset: 0.3ex;
    text-decoration-style: wavy;
    text-decoration-color: var(--accent);
}

@media (hover: hover) {
    time[title] {
        text-decoration-color: var(--color-faint);
    }

        time[title]:hover {
            text-decoration-color: var(--color-text-detail);
        }
}
}

.NavList li:where([aria-current='page']) {
        position: relative;
    }

.NavList li:where([aria-current='page']) a {
            color: var(--color-text-high-contrast);
        }

.NavList li:where([aria-current='page'])::after {
            content: '⇠';
            display: inline;
            margin-left: 0.25em;
            white-space: nowrap;
            color: var(--neon);
        }

.NavList a {
        color: var(--color-text);
        white-space: nowrap;
        text-decoration: none;
        position: revert;
    }

.NavList a:is(:hover, :focus-visible):not(:is([aria-current='page'] > *)) {
            color: var(--link-color-hover);
            text-decoration: underline;
        }

.MainNav {
    position: relative;
    z-index: 2;
}

.MainNav .sticky {
        position: sticky;
        top: 1rlh;
    }

.MainNav h1 {
        height: 2rlh;
        display: grid;
        align-content: end;
        margin-block-end: 1rlh;
        line-height: 1rlh;
        font-weight: 480;
    }

.MainNav h1 .BackLink {
            position: absolute; /* Don't take up vertical space */
        }

.MainNav h1 > a {
            color: var(--color-text);
            white-space: nowrap;
            text-decoration: none;
        }

.BackLink {
    text-decoration: none;
    color: var(--color-text);
    background-color: var(--color-bg-secondary);
    width: 1.6em;
    text-align: center;
    line-height: 1.6em;
    aspect-ratio: 1/1;
    display: inline-block;
    border-radius: 4em;
    opacity: 0.8;
}

a:is(:hover, :focus) > .BackLink {
        opacity: 1;
    }

.MobileNav {
    display: none;
    margin-block-end: 1rlh;
}

.MobileNav .MobileNav__Home {
        font-weight: 500;
    }

.MobileNav .NavList {
        min-width: 9rem;
    }

.MobileNav .NavList li:where([aria-current='page'])::after {
            display: none;
        }

.MobileNav .NavList a {
            display: block;
        }

.MobileNav .NavList {
        box-shadow: color-mix(in oklab, var(--color-bg) 50%, black 20%) -10px 10px 30px;
        background-color: Canvas;
        padding: 5px;
        margin-right: -5px;
        margin-top: 0.25lh;
        border-radius: 8px;
        font-size: 1.1rem;
        line-height: 2;
    }

.MobileNav .NavList li {
            border-radius: 6px;
            padding: 0 10px;
        }

.MobileNav .NavList li[aria-current='page'] {
                background-color: var(--color-bg-secondary);
            }

.MobileNav .MobileNav__Trigger {
        border-radius: 4px;
        padding: 0 5px;
        margin-inline-end: -5px;
        display: inline-block;
    }

/* "Implementation specific" */

.MobileNav details {
        margin: 0;
        position: absolute;
        z-index: 10;
        top: 0;
        right: 0;
    }

.MobileNav summary {
        text-align: end;
        white-space: nowrap;
        -webkit-user-select: none;
           -moz-user-select: none;
                user-select: none;
        font-weight: 500;
    }

.MobileNav summary::-webkit-details-marker {
            display: none;
        }

.MobileNav details[open] summary .MobileNav__Trigger {
        background-color: var(--color-bg-secondary);
        color: var(--blue);
    }

@media only screen and (max-width: 959px) {
    .MainNav {
        display: none;
    }
    .MobileNav {
        display: flex;
        justify-content: space-between;
    }
}

/*
POSTS LIST
----------------------------------------------------------------*/

:where(ol, ul):has(.PostItem) {
    display: grid;
    row-gap: 0.25rlh;
}

.PostItem {
    display: grid;
    grid-template-columns: 1fr 33%;
    -moz-column-gap: 0.5rlh;
         column-gap: 0.5rlh;
}

.PostItem > * {
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
    }

.PostItem > :first-child {
        font-weight: 500;
    }

.PostItem a:not(:hover, :focus) {
        text-decoration: none;
    }

.PostItem time {
        font-size: var(--f5);
        font-variant-numeric: tabular-nums;
        letter-spacing: -0.008em;
    }

.PostItem time:not(.PostItem:hover :is(.PostItem time)) {
            color: var(--color-text-detail);
        }

@media screen and (max-width: 480px) {

.PostItem {
        grid-template-columns: 1fr;
        grid-template-rows: 1fr 1fr;
        gap: 0;
}
    }

/*
PROSE
----------------------------------------------------------------*/

.prose h1 {
        border-bottom: 1px solid var(--border-color);
        padding-bottom: 0.25lh;
    }

.prose :where(h1, h2, h3, h4, h5, h6) {
        margin-block-end: 1rlh;
    }

.prose * + :where(h1, h2, h3) {
        margin-block-start: 1.5rlh;
    }

.prose :where(img, iframe, figure, svg) {
        margin-inline: auto;
    }

.prose p:has(:is(img, iframe, figure, svg)) {
        --spacing-prose: 1rlh;
        margin-block-start: var(--spacing-prose);
    }

@media screen and (prefers-color-scheme: dark) {
        .prose img {
            opacity: 0.9;
            box-shadow: rgba(0, 0, 0, 0.3) 0 0 6px;
        }
    }

.prose :where(ul, ol) {
        padding-left: 0.5rlh;
        margin-left: 0.5rlh;
    }

.prose :where(ul, ol) li {
            --spacing-prose: 0.25rlh;
        }

.prose figcaption {
        padding: 1rem 0;
        text-align: center;
        font-family: var(--sans);
        font-size: 0.9em;
    }

/* Break links and code */

.prose :where(code:not(pre > code), a) {
        word-break: break-word;
        word-wrap: break-word;
        overflow-wrap: break-word;
    }

.prose pre {
        font-size: var(--f6);
    }

.prose figure.image--full {
        margin: 2rlh -14vw;
    }

.prose figure.image--full img {
            display: block;
            margin: 0 auto;
        }

@media screen and (max-width: 960px) {

.prose figure.image--full {
            /* Edge-to-edge pixelfucking. */
            margin-left: auto;
            margin-right: auto;
    }
        }

.prose details summary + pre {
        margin-block-start: 0.5lh;
    }

@layer theme {
        /* List of notes */
        @media only screen and (max-width: 960px) {
            .micro main > ol {
                list-style-position: inside;
            }
        }
        .Note header h1 {
            margin-block-end: 0;
            font-size: 1rem;
        }
                .Note header h1 a span {
                    color: var(--color-text-detail);
                    font-weight: 400;
                }

                .Note header h1 a:hover span {
                    color: var(--link-accent-color);
                }
            .Note .prose h1 {
                font-size: var(--f3);
            }

            .Note .prose :where(h2, h3, h4, h5, h6) {
                font-size: var(--f4);
            }
}

.TagCloud li {
        display: inline;
    }

.TagCloud a {
        font-size: 1em;
    }

/* =CHANGELOG
--------------------------------------------- */

.changelog .prose > ul {
            padding-left: 0;
            margin-bottom: 1rlh;
        }

.changelog .prose > ul ul {
                margin-bottom: 0;
            }

.oblique-strategies .Page .prose {
    margin-top: var(--spacing-large);
}

.oblique-strategies .Page .prose ul {
        font-family: var(--sans);
        font-size: var(--f1);
        font-weight: 700;
        line-height: 1.4;
    }

.oblique-strategies .Page .prose li:not(ul ul li) {
        margin-bottom: var(--spacing-large);
    }

.oblique-strategies .Page .prose ul li:not(ul ul li) {
        list-style-type: none;
    }

.oblique-strategies .Page .prose ul ul {
        font-size: var(--f2);
    }

:is(.recipe-metadata) {
    font-weight: 650;
}

:is(.recipe-cookwares, .recipe-ingredients, .recipe-metadata, .recipe-instructions) h2 {
    display: none;
}

:is(.recipe-metadata, .recipe-ingredients, .recipe-cookwares) :is(ul, ol) {
        list-style: none;
        padding-left: 0;
        margin-left: 0;
    }

.recipe-cookwares h2 {
        font-size: var(--f4);
    }

:where(.recipe-ingredients, .recipe--ingredient, .recipe-cookwares) {
    font-weight: var(--fw-stronger);
    color: var(--color-text-high-contrast);
}

.recipe-instructions {
    border-top: 1px solid var(--border-color);
    margin-top: 1lh;
    padding-top: 1lh;
}

.recipe-instructions ol li {
        margin-bottom: 0.5lh;
    }

.recipe-instructions ol {
        padding-left: 0;
        margin-left: 0;
    }

.recipe--timer {
    font-weight: 650;
    text-decoration: underline;
    text-underline-offset: 0.6ex;
    text-decoration-style: wavy;
    text-decoration-color: var(--accent);
    white-space: nowrap;
}

.recipe--ingredient {
    text-decoration: underline;
    text-decoration-style: dotted;
    text-underline-offset: 0.4ex;
    text-decoration-color: var(--color-faint);
}

.recipe--cookware {
    font-style: italic;
}

.home main.stack {
            --spacing: 2rlh;
        }

.home main article h1 {
            height: 3rlh;
            margin: 0;
        }

.home main section > h1:first-of-type {
                margin-block-end: 1rlh;
            }

.home main section > h1:first-of-type a:not(:hover) {
                        text-decoration: none;
                    }

.home main section > h1:first-of-type::after {
                    content: '→' / '';
                    display: inline;
                    color: var(--color-faint);
                    margin-inline-start: 0.25em;
                    font-size: var(--f4);
                }

.home main section > h1:first-of-type:hover::after {
                    color: var(--link-accent-color);
                }

.home main section > header {
                margin-block-end: 1rlh;
            }

.home main section > header h1 {
                    font-size: var(--f2);
                    margin-bottom: 0;
                }

/* Small caps */

.small-caps {
    font-family: 'Charter SC', serif;
    font-variant: small-caps;
}

/* Double quotation marks (") */

.pull-double {
    margin-left: -0.46em;
}

.push-double {
    margin-right: 0.46em;
}

/* Single quotation marks (') */

.pull-single {
    margin-left: -0.27em;
}

.push-single {
    margin-right: 0.27em;
}

.pull-double,
.push-double,
.pull-single,
.push-single {
    display: inline-block;
}

/* Optical margin alignment for particular letters */

.pull-T,
.pull-V,
.pull-W,
.pull-Y {
    margin-left: -0.1em;
}

.push-T,
.push-V,
.push-W,
.push-Y {
    margin-right: 0.1em;
}

.pull-O,
.pull-C,
.pull-o,
.pull-c {
    margin-left: -0.04em;
}

.push-O,
.push-C,
.push-o,
.push-c {
    margin-right: 0.04em;
}

.pull-A {
    margin-left: -0.03em;
}

.push-A {
    margin-right: 0.03em;
}

.excerpt :is(h1, h2, h3, h4, h5, h6) {
        font-size: var(--f6);
        margin-bottom: 0.25rlh;
        border: 0;
    }

.excerpt h1 {
        font-size: var(--f5);
    }

.stack > * + * {
    margin-block-start: var(--spacing, 1rlh);
}

.title-row {
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.skip-link {
    position: fixed;
    top: var(--inset);
    left: var(--inset);
}

.relative {
    position: relative;
}

.avatar {
    border-radius: 100%;
    aspect-ratio: 1 / 1;
}

.title {
    font-size: var(--f0);
}

.title a {
        text-decoration: none;
    }

.f1 {
    font-size: var(--f1);
}

.f2 {
    font-size: var(--f2);
}

.f3 {
    font-size: var(--f3);
}

.f4 {
    font-size: var(--f4);
}

.f5 {
    font-size: var(--f5);
}

.f6 {
    font-size: var(--f6);
}

.f7 {
    font-size: var(--f7);
}

/*
BUTTONS
----------------------------------------------------------------*/

.btn {
    -webkit-appearance: none;
       -moz-appearance: none;
            appearance: none;
    border: 0;
    font-family: var(--sans);
    background-color: var(--btn-bg);
    color: var(--btn-color);
    text-decoration: none;
    text-align: center;
    border-radius: 6px;
    padding: 0.2em 0.6em;
    white-space: nowrap;
    text-overflow: ellipsis;
    display: inline-block;
    overflow: hidden;
    max-width: 100%;
}

.btn:not([disabled]) {
        cursor: pointer;
    }

.btn:where(:hover, [open] *) {
        text-decoration: none;
        color: var(--color-text-high-contrast);
        background-color: var(--btn-bg-hover);
    }

.btn[disabled] {
        color: var(--color-text-detail);
    }

/*
OPEN TYPE
----------------------------------------------------------------*/

.plain-font-features {
    font-feature-settings:
		/* Contextual alternates */
        'calt' 1,
        'kern' 1,
        'liga' 1,
        /* Open digis */ 'ss01' 1,
        /* Curved 'r' */ 'ss03' 1,
        /* Disambiguation */ 'ss04' 0,
        'frac' 1;
}

/*
FONT STYLES
----------------------------------------------------------------*/

.i {
    font-style: italic;
}

/*
FONT WEIGHTS
----------------------------------------------------------------*/

.normal {
    font-weight: normal;
}

.b {
    font-weight: bold;
}

.stronger {
    font-weight: var(--fw-stronger);
}

.fw1 {
    font-weight: 100;
}

.fw2 {
    font-weight: 200;
}

.fw3 {
    font-weight: 300;
}

.fw4 {
    font-weight: 400;
}

.fw5 {
    font-weight: 500;
}

.fw6 {
    font-weight: 600;
}

.fw7 {
    font-weight: 700;
}

.fw8 {
    font-weight: 800;
}

.fw9 {
    font-weight: 900;
}

/*
TEXT ALIGNMENT
----------------------------------------------------------------*/

.tl {
    text-align: left;
}

.tr {
    text-align: right;
}

.tc {
    text-align: center;
}

.tj {
    text-align: justify;
}

.w-full {
    width: 100%;
}

.h-full {
    height: 100%;
}

.block {
    display: block;
}

.inline {
    display: inline;
}

/*
FLEXBOX
----------------------------------------------------------------*/

.flex {
    display: flex;
}

.inline-flex {
    display: inline-flex;
}

.gap-1 {
    gap: 0.5em;
}

.gap {
    gap: 1.5em;
}

/* 1. Fix for Chrome 44 bug.
 * https://code.google.com/p/chromium/issues/detail?id=506893 */

.flex-auto {
    flex: 1 1 auto;
    min-width: 0;
    /* 1 */
    min-height: 0;
    /* 1 */
}

.flex-1 {
    flex: 1;
}

.flex-none {
    flex: none;
}

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

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

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

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

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

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

.flex-row-reverse {
    flex-direction: row-reverse;
}

.items-start {
    align-items: flex-start;
}

.items-end {
    align-items: flex-end;
}

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

.items-baseline {
    align-items: baseline;
}

.items-stretch {
    align-items: stretch;
}

.self-start {
    align-self: flex-start;
}

.self-end {
    align-self: flex-end;
}

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

.self-baseline {
    align-self: baseline;
}

.self-stretch {
    align-self: stretch;
}

.justify-start {
    justify-content: flex-start;
}

.justify-end {
    justify-content: flex-end;
}

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

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

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

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

.content-start {
    align-content: flex-start;
}

.content-end {
    align-content: flex-end;
}

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

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

.content-around {
    align-content: space-around;
}

.content-stretch {
    align-content: stretch;
}

/*
SPACING
----------------------------------------------------------------*/

.pa0 {
    padding: var(--spacing-none);
}

.pa1 {
    padding: var(--spacing-extra-small);
}

.pa2 {
    padding: var(--spacing-small);
}

.pa3 {
    padding: var(--spacing-medium);
}

.pa4 {
    padding: var(--spacing-large);
}

.pa5 {
    padding: var(--spacing-extra-large);
}

.pa6 {
    padding: var(--spacing-extra-extra-large);
}

.pa7 {
    padding: var(--spacing-extra-extra-extra-large);
}

.pl0 {
    padding-left: var(--spacing-none);
}

.pl1 {
    padding-left: var(--spacing-extra-small);
}

.pl2 {
    padding-left: var(--spacing-small);
}

.pl3 {
    padding-left: var(--spacing-medium);
}

.pl4 {
    padding-left: var(--spacing-large);
}

.pl5 {
    padding-left: var(--spacing-extra-large);
}

.pl6 {
    padding-left: var(--spacing-extra-extra-large);
}

.pl7 {
    padding-left: var(--spacing-extra-extra-extra-large);
}

.pr0 {
    padding-right: var(--spacing-none);
}

.pr1 {
    padding-right: var(--spacing-extra-small);
}

.pr2 {
    padding-right: var(--spacing-small);
}

.pr3 {
    padding-right: var(--spacing-medium);
}

.pr4 {
    padding-right: var(--spacing-large);
}

.pr5 {
    padding-right: var(--spacing-extra-large);
}

.pr6 {
    padding-right: var(--spacing-extra-extra-large);
}

.pr7 {
    padding-right: var(--spacing-extra-extra-extra-large);
}

.pb0 {
    padding-bottom: var(--spacing-none);
}

.pb1 {
    padding-bottom: var(--spacing-extra-small);
}

.pb2 {
    padding-bottom: var(--spacing-small);
}

.pb3 {
    padding-bottom: var(--spacing-medium);
}

.pb4 {
    padding-bottom: var(--spacing-large);
}

.pb5 {
    padding-bottom: var(--spacing-extra-large);
}

.pb6 {
    padding-bottom: var(--spacing-extra-extra-large);
}

.pb7 {
    padding-bottom: var(--spacing-extra-extra-extra-large);
}

.pt0 {
    padding-top: var(--spacing-none);
}

.pt1 {
    padding-top: var(--spacing-extra-small);
}

.pt2 {
    padding-top: var(--spacing-small);
}

.pt3 {
    padding-top: var(--spacing-medium);
}

.pt4 {
    padding-top: var(--spacing-large);
}

.pt5 {
    padding-top: var(--spacing-extra-large);
}

.pt6 {
    padding-top: var(--spacing-extra-extra-large);
}

.pt7 {
    padding-top: var(--spacing-extra-extra-extra-large);
}

.pv0 {
    padding-top: var(--spacing-none);
    padding-bottom: var(--spacing-none);
}

.pv1 {
    padding-top: var(--spacing-extra-small);
    padding-bottom: var(--spacing-extra-small);
}

.pv2 {
    padding-top: var(--spacing-small);
    padding-bottom: var(--spacing-small);
}

.pv3 {
    padding-top: var(--spacing-medium);
    padding-bottom: var(--spacing-medium);
}

.pv4 {
    padding-top: var(--spacing-large);
    padding-bottom: var(--spacing-large);
}

.pv5 {
    padding-top: var(--spacing-extra-large);
    padding-bottom: var(--spacing-extra-large);
}

.pv6 {
    padding-top: var(--spacing-extra-extra-large);
    padding-bottom: var(--spacing-extra-extra-large);
}

.pv7 {
    padding-top: var(--spacing-extra-extra-extra-large);
    padding-bottom: var(--spacing-extra-extra-extra-large);
}

.ph0 {
    padding-left: var(--spacing-none);
    padding-right: var(--spacing-none);
}

.ph1 {
    padding-left: var(--spacing-extra-small);
    padding-right: var(--spacing-extra-small);
}

.ph2 {
    padding-left: var(--spacing-small);
    padding-right: var(--spacing-small);
}

.ph3 {
    padding-left: var(--spacing-medium);
    padding-right: var(--spacing-medium);
}

.ph4 {
    padding-left: var(--spacing-large);
    padding-right: var(--spacing-large);
}

.ph5 {
    padding-left: var(--spacing-extra-large);
    padding-right: var(--spacing-extra-large);
}

.ph6 {
    padding-left: var(--spacing-extra-extra-large);
    padding-right: var(--spacing-extra-extra-large);
}

.ph7 {
    padding-left: var(--spacing-extra-extra-extra-large);
    padding-right: var(--spacing-extra-extra-extra-large);
}

.ma0 {
    margin: var(--spacing-none);
}

.ma1 {
    margin: var(--spacing-extra-small);
}

.ma2 {
    margin: var(--spacing-small);
}

.ma3 {
    margin: var(--spacing-medium);
}

.ma4 {
    margin: var(--spacing-large);
}

.ma5 {
    margin: var(--spacing-extra-large);
}

.ma6 {
    margin: var(--spacing-extra-extra-large);
}

.ma7 {
    margin: var(--spacing-extra-extra-extra-large);
}

.ml0 {
    margin-left: var(--spacing-none);
}

.ml1 {
    margin-left: var(--spacing-extra-small);
}

.ml2 {
    margin-left: var(--spacing-small);
}

.ml3 {
    margin-left: var(--spacing-medium);
}

.ml4 {
    margin-left: var(--spacing-large);
}

.ml5 {
    margin-left: var(--spacing-extra-large);
}

.ml6 {
    margin-left: var(--spacing-extra-extra-large);
}

.ml7 {
    margin-left: var(--spacing-extra-extra-extra-large);
}

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

.mx1 {
    margin-right: var(--spacing-extra-small);
    margin-left: var(--spacing-extra-small);
}

.mr0 {
    margin-right: var(--spacing-none);
}

.mr1 {
    margin-right: var(--spacing-extra-small);
}

.mr2 {
    margin-right: var(--spacing-small);
}

.mr3 {
    margin-right: var(--spacing-medium);
}

.mr4 {
    margin-right: var(--spacing-large);
}

.mr5 {
    margin-right: var(--spacing-extra-large);
}

.mr6 {
    margin-right: var(--spacing-extra-extra-large);
}

.mr7 {
    margin-right: var(--spacing-extra-extra-extra-large);
}

.mb0 {
    margin-bottom: var(--spacing-none);
}

.mb1 {
    margin-bottom: var(--spacing-extra-small);
}

.mb2 {
    margin-bottom: var(--spacing-small);
}

.mb3 {
    margin-bottom: var(--spacing-medium);
}

.mb4 {
    margin-bottom: var(--spacing-large);
}

.mb5 {
    margin-bottom: var(--spacing-extra-large);
}

.mb6 {
    margin-bottom: var(--spacing-extra-extra-large);
}

.mb7 {
    margin-bottom: var(--spacing-extra-extra-extra-large);
}

.mt0 {
    margin-top: var(--spacing-none);
}

.mt1 {
    margin-top: var(--spacing-extra-small);
}

.mt2 {
    margin-top: var(--spacing-small);
}

.mt3 {
    margin-top: var(--spacing-medium);
}

.mt4 {
    margin-top: var(--spacing-large);
}

.mt5 {
    margin-top: var(--spacing-extra-large);
}

.mt6 {
    margin-top: var(--spacing-extra-extra-large);
}

.mt7 {
    margin-top: var(--spacing-extra-extra-extra-large);
}

.mv0 {
    margin-top: var(--spacing-none);
    margin-bottom: var(--spacing-none);
}

.mv1 {
    margin-top: var(--spacing-extra-small);
    margin-bottom: var(--spacing-extra-small);
}

.mv2 {
    margin-top: var(--spacing-small);
    margin-bottom: var(--spacing-small);
}

.mv3 {
    margin-top: var(--spacing-medium);
    margin-bottom: var(--spacing-medium);
}

.mv4 {
    margin-top: var(--spacing-large);
    margin-bottom: var(--spacing-large);
}

.mv5 {
    margin-top: var(--spacing-extra-large);
    margin-bottom: var(--spacing-extra-large);
}

.mv6 {
    margin-top: var(--spacing-extra-extra-large);
    margin-bottom: var(--spacing-extra-extra-large);
}

.mv7 {
    margin-top: var(--spacing-extra-extra-extra-large);
    margin-bottom: var(--spacing-extra-extra-extra-large);
}

.mh0 {
    margin-left: var(--spacing-none);
    margin-right: var(--spacing-none);
}

.mh1 {
    margin-left: var(--spacing-extra-small);
    margin-right: var(--spacing-extra-small);
}

.mh2 {
    margin-left: var(--spacing-small);
    margin-right: var(--spacing-small);
}

.mh3 {
    margin-left: var(--spacing-medium);
    margin-right: var(--spacing-medium);
}

.mh4 {
    margin-left: var(--spacing-large);
    margin-right: var(--spacing-large);
}

.mh5 {
    margin-left: var(--spacing-extra-large);
    margin-right: var(--spacing-extra-large);
}

.mh6 {
    margin-left: var(--spacing-extra-extra-large);
    margin-right: var(--spacing-extra-extra-large);
}

.mh7 {
    margin-left: var(--spacing-extra-extra-extra-large);
    margin-right: var(--spacing-extra-extra-extra-large);
}

/*
DISPLAY
----------------------------------------------------------------*/

.d-i {
    display: inline;
}

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

.d-b {
    display: block;
}

/*
BORDERS
----------------------------------------------------------------*/

.border {
    border: 1px solid var(--border-color);
}

.border-b {
    border-width: 0 0 1px;
}

.border-t {
    border-width: 1px 0 0;
}

.border-2 {
    border-width: 2px;
}

.hover\:border-neon:where(:hover, :focus-within) {
        border-color: var(--neon);
    }

/*
COLOURS
----------------------------------------------------------------*/

.text-bg {
    color: var(--color-bg);
}

.text-color {
    color: var(--color-text);
}

.text-color-contrast {
    color: var(--color-text-high-contrast);
}

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

.muted.link:hover {
        color: var(--color-text-high-contrast);
    }

.faint {
    color: var(--color-faint);
}

.subhead {
    color: var(--color-text-high-contrast);
}

.detail {
    color: var(--color-text-detail);
    font-size: var(--f6);
    font-variation-settings: 'opsz' 19;
}

/*
OPACITY
----------------------------------------------------------------*/

.dimmed {
    opacity: 0.7;
}

/*
TYPOGRAPHY
----------------------------------------------------------------*/

.leading-none {
    line-height: 1;
}

.leading-tight {
    line-height: 1.2;
}

.font-mono {
    font-family: var(--mono);
}

.font-sans {
    font-family: var(--sans);
}

.font-serif {
    font-family: var(--serif);
}

.text-balance {
    text-wrap: balance;
}

/* Measure is limited to ~78 characters */

.measure {
    max-width: var(--measure);
}

/* Measure is limited to ~80 characters */

.measure-wide {
    max-width: var(--measure-wide);
}

/* Measure is limited to ~45 characters */

.measure-narrow {
    max-width: var(--measure-narrow);
}

.uppercase {
    text-transform: uppercase;
}

.tracking {
    letter-spacing: 1px;
}

.rounded-small {
    border-radius: 0.25em;
}

.no-underline {
    text-decoration: none;
}

.no-underline:hover {
        text-decoration: underline;
    }

.Badge {
    font-family: var(--sans);
    border-radius: 5px;
    font-weight: 550;
    background-color: var(--neon);
    color: var(--color-bg);
    padding: 0.3em 0.4em;
    white-space: nowrap;
    text-align: center;
}

.Badge:hover {
        text-decoration: none;
    }

.Badge.Badge--muted {
        background-color: var(--grey);
    }

.Badge.Badge--warn {
        background-color: var(--yellow);
    }

.Badge.Badge--outline {
        background-color: transparent;
        border: 2px solid var(--border-color);
        color: var(--grey);
    }

@media (max-width: 800px) {
    .hide-mobile {
        display: none;
    }
    
    .visually-hide-mobile {
        -webkit-clip-path: inset(50%) !important;
                clip-path: inset(50%) !important;
        height: 1px !important;
        width: 1px !important;
        overflow: hidden !important;
        position: absolute !important;
        white-space: nowrap !important;
        border: 0 !important;
    }
}

@media (min-width: 801px) {
    .hide-large {
        display: none;
    }
}

.sep {
    color: var(--color-text-detail);
    display: inline-block;
    margin: 0 0.5em;
}

.no-wrap {
    white-space: nowrap;
}

.checkbox-fix {
    position: relative;
    top: -1px;
}

.truncate {
    white-space: nowrap;
    text-overflow: ellipsis;
    display: inline-block;
    overflow: hidden;
    max-width: 100%;
}

.icon {
    fill: currentColor;
    width: 1em;
    height: auto;
    aspect-ratio: 1 / 1;
    vertical-align: middle;
    display: inline-block;
    font-size: 0.9em;
}

a:hover .icon-feed {
    color: var(--yellow);
}

.drop-cap::first-letter {
    font-size: 3.2rem;
    font-weight: bold;
    float: left;
    margin-right: 0.1em;
    line-height: 1;
}

.align-middle {
    vertical-align: middle;
    margin-block-start: calc(1ex - 1cap);
}

.Notice {
    border-radius: 0.8em;
    padding: 0.5em 0.75em;
    transition: background-color 300ms ease;
    background-color: var(--color-bg-secondary);
}

.Notice summary {
        font-weight: bold;
    }

.Notice > :last-child {
        margin-block-end: 0;
    }

.tabular-nums {
    font-variant-numeric: tabular-nums;
    letter-spacing: -0.008em;
}

@layer theme {
            .Book header h1 {
                margin-block-end: 0;
            }

            .Book header .subhead {
                margin-block-end: 1rlh;
            }

            .Book header :where(h1, .subhead) {
                font-family: var(--serif);
            }
        .reading main section:not(:first-of-type) {
            margin-top: 3rlh;
        }
            .reading main table th:nth-of-type(1) {
                width: 50%;
                text-wrap: balance;
            }

            .reading main table th:nth-of-type(2) {
                width: 35%;
            }

            .reading main table td:last-child {
                text-align: end;
            }
}

@layer utils {
    [class^='BookStatus'] {
        font-variation-settings: 'opsz' 20;
        color: var(--color-text-detail);
        font-weight: 470;
    }

        [class^='BookStatus'] time {
            color: var(--color-text);
        }

    :where(.BookStatus-Paused, .BookStatus-Dropped)::before {
        content: '☒ ';
    }

    .BookStatus-CurrentlyReading {
        color: color-mix(in oklab, var(--green), black 25%);
    }

    .BookStatus-Dropped {
        color: color-mix(in oklab, var(--red), black 20%);
    }

    .BookStatus-Paused {
        color: color-mix(in oklab, var(--yellow), black 15%);
    }

    .BookStatus-CurrentlyReading::before {
        content: '☐ ';
        font-size-adjust: ex-height from-font;
    }

    .BookStatus-Finished::before {
        content: '☑ ';
    }
}

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