@font-face{font-family:Tiny Fallback;src:local(Menlo),local(Consolas),local(Liberation Mono),local(DejaVu Sans Mono),local(Courier New);size-adjust:99.66%;ascent-override:102%;descent-override:30%;line-gap-override:0%}@font-face{font-family:Tiny;font-weight:300;font-style:normal;font-display:swap;src:url(/_astro/Tiny-Light.D0OKvk8Z.woff2)format("woff2")}@font-face{font-family:Tiny;font-weight:400;font-style:normal;font-display:swap;src:url(/_astro/Tiny-Regular.CFzULJE9.woff2)format("woff2")}@font-face{font-family:Tiny;font-weight:600;font-style:normal;font-display:swap;src:url(/_astro/Tiny-SemiBold.Fc395DTv.woff2)format("woff2")}:root,[data-theme=light]{color-scheme:light;--bg:#fff;--text:#000;--grey-1:#2e2e2e;--grey-2:#5e5e5e;--grey-3:#6e6e6e;--grey-4:#757575;--grey-5:#e8e8e8;--rule-colour:color-mix(in srgb, var(--text) 12%, transparent);--sheet-border:color-mix(in srgb, var(--text) 14%, transparent);--rule-weight:1px;--accent:#f8d201;--star:var(--text);--hl:var(--accent);--plate-y:#f8d201;--underline:var(--accent);--sheet-bg:#fff;--sheet-shadow:0 1px 1px #00000005, 0 4px 8px -2px #00000008, 0 16px 32px -8px #0000000f, 0 40px 80px -24px #00000014;--scrim:#ffffffa8;--w-light:300;--w-regular:400;--w-bold:600;--fs-body:14px;--fs-small:12px;--fs-title:20px;--lh:1.8;--lh-small:1.8;--caps-tracking:.06em;--unit:8px;--page-max:1216px;--page-pad:64px;--page-top:128px;--col-1:.8fr;--col-2:1fr;--col-3:1.45fr;--col-gap:64px;--portrait-size:220px;--portrait-gap:36px;--portrait-bleed:128px;--sheet-w:592px;--sheet-inset:24px;--sheet-pad:48px;--spine:40px;--tilt:.6deg;--dur-hover:.14s;--dim:.3;--dim-hold:70ms;--dur-sheet:.34s;--dur-rise:.64s;--stagger:70ms;--dur-burst:.56s;--dur-retract:.26s;--rise-y:8px;--rise-blur:6px;--ease-expo:cubic-bezier(.19, 1, .22, 1);--ease-rise:cubic-bezier(.2, .65, .3, .9);--ease-spring:linear(0, .045, .159, .314, .485, .654, .806, .934, 1.032, 1.101, 1.143, 1.161, 1.161, 1.147, 1.124, 1.097, 1.069, 1.042, 1.02, 1.001, .988, .979, .975, .973, .975, .978, .982, .987, .991, .995, .999, 1.001, 1)}[data-theme=dark]{color-scheme:dark;--bg:#000;--text:#fff;--grey-1:#dcdcdc;--grey-2:#a6a6a6;--grey-3:#a0a0a0;--grey-4:#9a9a9a;--grey-5:#242424;--sheet-bg:#0b0b0b;--sheet-shadow:0 1px 1px #0006, 0 16px 32px -8px #0009, 0 40px 80px -24px #000c;--scrim:#0000009e;--star:#f8d201}[data-theme=yellow]{color-scheme:light;--bg:#f8d201;--ink:#000a73;--text:var(--ink);--grey-1:color-mix(in srgb, var(--ink) 92%, white);--grey-2:color-mix(in srgb, var(--ink) 88%, white);--grey-3:color-mix(in srgb, var(--ink) 84%, white);--grey-4:color-mix(in srgb, var(--ink) 82%, white);--grey-5:color-mix(in srgb, var(--ink) 14%, var(--bg));--sheet-bg:var(--bg);--sheet-shadow:0 1px 1px color-mix(in srgb, var(--ink) 4%, transparent), 0 16px 32px -8px color-mix(in srgb, var(--ink) 8%, transparent), 0 40px 80px -24px color-mix(in srgb, var(--ink) 12%, transparent);--scrim:#f8d201b8;--accent:#fff;--hl:#fff;--plate-y:#fff}html.is-theme-swap,html.is-theme-swap *{transition-property:none!important}@media (prefers-color-scheme:dark){:root:not([data-theme]){color-scheme:dark;--bg:#000;--text:#fff;--grey-1:#dcdcdc;--grey-2:#a6a6a6;--grey-3:#a0a0a0;--grey-4:#9a9a9a;--grey-5:#242424;--sheet-bg:#0b0b0b;--sheet-shadow:0 1px 1px #0006, 0 16px 32px -8px #0009, 0 40px 80px -24px #000c;--scrim:#0000009e;--star:#f8d201}}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;text-size-adjust:100%;background:var(--bg)}html.is-locked{overflow:hidden}body{background:var(--bg);min-height:100vh;color:var(--text);font-family:Tiny,Tiny Fallback,ui-monospace,monospace;font-weight:var(--w-regular);font-size:var(--fs-body);line-height:var(--lh);font-variant-ligatures:none;font-synthesis:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;margin:0}::selection{background:var(--text);color:var(--bg)}h1,h2,h3,p,ol,ul{font:inherit;margin:0;padding:0}ol,ul{list-style:none}button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:0;padding:0}:focus{outline:none}:focus-visible{outline:var(--rule-weight) solid var(--text);outline-offset:3px;border-radius:1px}a{color:inherit;text-decoration:none}a.ext{text-decoration:none;transition:color .12s;position:relative}.menu a,.words-foot a,.sitemap a,.dek a,.prose a,.sheet-note a{color:var(--grey-2)}.cv a,.close,.tags-line a{color:var(--grey-3)}a:is(:hover,:focus-visible):not(.link):not(.hl):not(.ext):not(:has(.hl)){color:var(--text)}.caps{font-size:var(--fs-body);line-height:var(--lh);text-transform:uppercase;letter-spacing:var(--caps-tracking)}.page{max-width:var(--page-max);padding:var(--page-top) var(--page-pad) calc(var(--unit) * 16);grid-template-columns:var(--col-1) var(--col-2) var(--col-3);column-gap:var(--col-gap);grid-template-areas:"p. .""h1 h2 side""b1 b2 side";align-items:start;margin:0 auto;display:grid}.col-side{grid-area:side;align-self:start;min-width:0}.head{line-height:var(--lh);padding-bottom:calc(var(--unit) - var(--rule-weight));border-bottom:var(--rule-weight) solid var(--rule-colour);justify-content:space-between;align-self:end;align-items:baseline;min-width:0;display:flex}.head--intro{grid-area:h1}.body--intro{grid-area:b1}.head--cv{grid-area:h2}.body--cv{grid-area:b2}.head--words{margin-top:calc(var(--unit) * 5)}.head.caps{line-height:var(--lh)}.label{color:var(--grey-3);gap:1.5ch;display:inline-flex}.label .n{color:var(--grey-4);font-weight:var(--w-light)}.n-phone{display:none}.head .aside{color:var(--grey-4);font-weight:var(--w-light)}.name{font-weight:var(--w-bold);line-height:var(--lh);letter-spacing:-.01em;position:relative}.caret{vertical-align:-.17em;background:var(--text);border-radius:1px;width:.6em;height:1.05em;margin-left:.3em;animation:1.1s step-end infinite blink;display:inline-block}@keyframes blink{50%{opacity:0}}.intro{padding-top:calc(var(--unit) * 2);color:var(--grey-2);text-wrap:pretty;max-width:36ch}.intro+.intro{padding-top:0}.intro strong{font-weight:var(--w-regular);color:var(--text)}.menu{margin-top:calc(var(--unit) * 5);flex-direction:column;align-items:flex-start;display:flex}.menu a{align-items:baseline;gap:1.5ch;display:inline-flex}.menu .k{color:var(--grey-4);font-size:var(--fs-body);transition:color var(--dur-hover) ease}.menu a:hover .k{color:var(--grey-3)}.menu .more{padding-top:var(--unit)}.menu .arrow{color:var(--grey-4);transition:transform var(--dur-sheet) var(--ease-expo), color var(--dur-hover) ease;display:inline-block}.menu .more:hover .arrow{transform:translate(3px)}.where{margin-top:calc(var(--unit) * 5);color:var(--grey-3);font-variant-numeric:tabular-nums}.where .sep{color:var(--grey-4);margin:0 .75ch}.portrait{width:var(--portrait-size);height:var(--portrait-size);margin-bottom:var(--portrait-gap);cursor:pointer;-webkit-tap-highlight-color:transparent;touch-action:manipulation;user-select:none;grid-area:p;position:relative}.portrait:focus-visible{outline:var(--rule-weight) solid var(--text);outline-offset:3px}.portrait.is-frozen{cursor:grab;touch-action:none}.portrait.is-dragging{cursor:grabbing}.portrait.is-inking{cursor:crosshair;touch-action:none}.portrait canvas{left:calc(var(--portrait-bleed) * -1);top:calc(var(--portrait-bleed) * -1);pointer-events:none;position:absolute}.portrait-hint{color:var(--grey-3);pointer-events:none;align-items:center;gap:8px;display:flex;position:absolute;top:calc(100% + 4px);left:0;right:0}.portrait-hint[hidden]{display:none}.portrait-hint .bar{background:var(--rule-colour);flex:1;height:1px}.portrait-hint .bar i{background:var(--accent);width:0;height:1px;display:block}.head--cv,.cv{font-size:var(--fs-small);line-height:var(--lh-small)}.cv>li{column-gap:calc(var(--unit) * 2);padding:calc(var(--unit) * 1.5) 0 calc(var(--unit) * 1.5 - var(--rule-weight));border-bottom:var(--rule-weight) solid var(--rule-colour);grid-template-columns:1fr auto;display:grid}.cv .role{color:var(--text)}.cv .org{color:var(--grey-3);grid-column:1}.cv .date{color:var(--grey-3);text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap;grid-area:1/2}.cv .trusted{margin-top:var(--unit);color:var(--grey-4);grid-column:1/-1;line-height:1}.cv .clients{margin-top:var(--unit);border-left:var(--rule-weight) solid var(--rule-colour);color:var(--grey-3);grid-column:1/-1;padding:0 4px}.cv .clients li{padding-left:13.5px;position:relative}.cv .clients li:before{content:"•";letter-spacing:0;position:absolute;top:0;left:3.4px}.cv-foot{margin-top:calc(var(--unit) * 2);color:var(--grey-3);justify-content:space-between;display:flex}.posts a{column-gap:calc(var(--unit) * 3);padding:calc(var(--unit) * 1.5) 0 calc(var(--unit) * 1.5 - var(--rule-weight));border-bottom:var(--rule-weight) solid var(--rule-colour);color:var(--grey-1);transition:opacity var(--dur-hover) ease, color var(--dur-hover) ease;grid-template-columns:1fr auto;align-items:baseline;text-decoration:none;display:grid}.posts .t,.sheet .rows a>span:first-child{text-wrap:balance;justify-self:start;position:relative}.posts .y,.sheet .rows .y{font-weight:var(--w-light)}.posts .y{color:var(--grey-3);letter-spacing:var(--caps-tracking);font-variant-numeric:tabular-nums}@media (hover:hover){.posts:has(a:hover) a:not(:hover)>span{opacity:var(--dim)}}.posts a>span,.sheet .rows a>span{transition:opacity var(--dur-hover) ease}.posts a:focus-visible{outline-offset:2px}.words-foot{margin-top:calc(var(--unit) * 2);color:var(--grey-3);justify-content:space-between;display:flex}@media (hover:hover) and (pointer:fine){.page :is(.intro,.where,.sitemap,.head--cv>*,.head--words>*,.head--projects>*,.cv>li>*,.menu a,.posts a>span,.words-foot>*){transition:opacity var(--dur-hover) ease var(--dim-hold), color var(--dur-hover) ease, background-size var(--dur-sheet) var(--ease-expo)}.page:has(:is(a[href^=\/]:not(.egg):not(.close)):is(:hover,:focus-visible)) :is(.intro,.where,.sitemap:not(:hover,:focus-visible):not(:has(:hover,:focus-visible)),.head--cv>*,.head--words>*,.head--projects>*,.cv>li>*,.menu a:not(:hover,:focus-visible),.posts a:not(:hover,:focus-visible)>span,.words-foot>:not(:hover,:focus-visible)){opacity:var(--dim);transition-delay:0s}.page :is(.menu a,.words-foot a,.sitemap a):is(:hover,:focus-visible),.page .posts a:is(:hover,:focus-visible)>span{transition-delay:0s}.sheet-inner :is(.sheet-head,h2,.dek,.flag,.sub,.prose>*,.rows>a,.tags-line,.sheet-note,.egg-foot,img){transition:opacity .12s,color .12s}.sheet-inner:has(a:not(.close):is(:hover,:focus-visible)) :is(.sheet-head,h2,.dek,.flag,.sub,.prose>*,.tags-line,.sheet-note,.egg-foot,img):not(:has(a:not(.close):is(:hover,:focus-visible))){opacity:var(--dim)}.sheet-inner:has(a:not(.close):is(:hover,:focus-visible)) :is(.dek,.prose>:not(.uses):not(.reading)):has(a:not(.close):is(:hover,:focus-visible)){color:color-mix(in srgb, var(--grey-2) 40%, transparent)}.sheet-inner:has(a:not(.close):is(:hover,:focus-visible)) :is(.dek,.prose>:not(.uses):not(.reading)):has(a:not(.close):is(:hover,:focus-visible)) a:not(.close):not(:hover):not(:focus-visible),.sheet-inner:has(a:not(.close):is(:hover,:focus-visible)) .rows:has(a:is(:hover,:focus-visible))>a:not(:hover):not(:focus-visible){opacity:var(--dim)}:is(.uses,.reading)>dl>dt,:is(.uses,.reading)>dl>dd{transition:opacity .12s}:is(.uses,.reading):has(a:not(.close):is(:hover,:focus-visible))>dl>dt,:is(.uses,.reading):has(a:not(.close):is(:hover,:focus-visible))>dl>dd{opacity:var(--dim)}:is(.uses,.reading):has(a:not(.close):is(:hover,:focus-visible))>dl>dt:has(a:is(:hover,:focus-visible)),:is(.uses,.reading):has(a:not(.close):is(:hover,:focus-visible))>dl>dt:has(+dd a:is(:hover,:focus-visible)),:is(.uses,.reading):has(a:not(.close):is(:hover,:focus-visible))>dl>dd:has(a:is(:hover,:focus-visible)),:is(.uses,.reading):has(a:not(.close):is(:hover,:focus-visible))>dl>dt:has(a:is(:hover,:focus-visible))+dd{opacity:1}.uses dd:has(a:is(:hover,:focus-visible)){color:color-mix(in srgb, var(--grey-2) 40%, transparent)}.uses dd:has(a:is(:hover,:focus-visible)) a:not(:hover):not(:focus-visible){opacity:var(--dim)}.name,.caret,.portrait{opacity:1}}.rise{animation:rise var(--dur-rise) var(--ease-rise) both;animation-delay:calc(var(--i,0) * var(--stagger) + 80ms)}@keyframes rise{0%{opacity:0;translate:0 var(--rise-y);filter:blur(var(--rise-blur))}}.egg{color:var(--text);cursor:pointer;background:linear-gradient(var(--grey-4), var(--grey-4)) no-repeat 0 100% / 100% var(--rule-weight);padding-bottom:1px;text-decoration:none;position:relative}.egg:hover{background-image:linear-gradient(var(--text), var(--text))}.egg.egg--hl,.egg.egg--hl:hover{background:0 0;padding-bottom:0}.burst{pointer-events:none;z-index:20;width:0;height:0;position:absolute;top:50%;left:50%}.chip{background:var(--sheet-bg);width:32px;height:32px;color:var(--text);border:var(--rule-weight) solid var(--sheet-border);opacity:0;transform:translate(0, 0) scale(.6) rotate(var(--r0,0deg));transition:transform var(--dur-retract) var(--ease-expo), opacity calc(var(--dur-retract) * .6) linear;border-radius:8px;place-items:center;display:grid;position:absolute;top:-16px;left:-16px;box-shadow:0 1px 1px #00000008,0 6px 12px -4px #0000001a}.chip svg{fill:none;stroke:currentColor;stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round;width:17px;height:17px}.egg.is-out .chip{opacity:1;transform:translate(var(--x,0), var(--y,0)) scale(1) rotate(var(--r1,0deg));transition:transform calc(var(--dur-burst) + var(--i) * 45ms) var(--ease-spring) calc(var(--i) * 16ms), opacity .12s linear calc(var(--i) * 16ms)}.stack{z-index:50;pointer-events:none;position:fixed;inset:0}.scrim{opacity:0;pointer-events:none;background:0 0;position:absolute;inset:0}.stack.is-open{pointer-events:none}.stack.is-open .scrim{opacity:0;pointer-events:none}.sheet{pointer-events:none;--depth:0;--rot:var(--tilt);top:var(--sheet-inset);bottom:var(--sheet-inset);right:var(--sheet-inset);width:var(--w,var(--sheet-w));background:var(--sheet-bg);border:var(--rule-weight) solid var(--sheet-border);box-shadow:var(--sheet-shadow);translate:calc(var(--depth) * var(--spine) * -1) 0;rotate:var(--rot);transform-origin:50% 40%;transition:translate var(--dur-sheet) var(--ease-expo), rotate var(--dur-sheet) var(--ease-expo), opacity calc(var(--dur-sheet) * .6) linear;border-radius:3px;position:absolute;overflow:hidden}.sheet.is-odd{--rot:calc(var(--tilt) * -1)}.sheet:not(.is-folded){pointer-events:auto}.sheet:is(:hover,:has(:focus-visible)){rotate:0deg}.sheet.is-pre,.sheet.is-leaving{translate:calc(100% + var(--sheet-inset) * 2) 0}.sheet.is-leaving{opacity:0;pointer-events:none}.sheet-inner{pointer-events:auto;top:0;bottom:0;right:0;left:var(--spine);overscroll-behavior:contain;padding:calc(var(--unit) * 4) var(--sheet-pad) calc(var(--unit) * 8);transition:opacity calc(var(--dur-sheet) * .5) linear;scrollbar-width:thin;scrollbar-color:var(--grey-5) transparent;position:absolute;overflow-y:auto}.sheet-head{padding-bottom:calc(var(--unit) - var(--rule-weight));border-bottom:var(--rule-weight) solid var(--rule-colour);color:var(--grey-3);justify-content:space-between;align-items:baseline;display:flex}.close{color:var(--grey-3);transition:color var(--dur-hover) ease;align-items:baseline;gap:1ch;display:inline-flex}.close:hover{color:var(--text)}.close kbd{font:inherit;color:var(--grey-4);border:var(--rule-weight) solid var(--rule-colour);transition:color var(--dur-hover) ease;border-radius:2px;padding:0 4px}.close:hover kbd{color:var(--grey-3)}.mobile-bar,.sheet-meta{display:none}.grab{pointer-events:auto;display:none}.sheet-inner>h2{margin-top:calc(var(--unit) * 5);font-size:var(--fs-title);line-height:var(--lh);font-weight:var(--w-bold);letter-spacing:-.015em;text-wrap:balance;max-width:34ch}.article-end{margin-top:calc(var(--unit) * 8);border-top:1px solid var(--text);padding-top:calc(var(--unit) * 4)}.site-feed{margin:calc(var(--unit) * 3) 0 0;font-size:var(--fs-body);line-height:var(--lh)}.site-feed a{color:var(--grey-2)}.sheet .dek{margin-top:var(--unit);color:var(--grey-2);font-weight:var(--w-light);text-wrap:pretty;max-width:52ch}.flag{margin-top:calc(var(--unit) * 3);color:var(--grey-3);border:var(--rule-weight) solid var(--rule-colour);border-radius:2px;padding:3px 7px 1px;display:inline-block}.prose{margin-top:calc(var(--unit) * 3);max-width:75ch;color:var(--grey-2)}.prose p+p{margin-top:calc(var(--unit) * 2)}.prose p{text-wrap:pretty}.prose>p+.rows{margin-top:calc(var(--unit) * 5);border-top:var(--rule-weight) solid var(--rule-colour)}.sheet .sub{margin-top:calc(var(--unit) * 5);color:var(--grey-3);padding-bottom:calc(var(--unit) - var(--rule-weight));border-bottom:var(--rule-weight) solid var(--rule-colour)}.sheet .rows a,.sheet .rows .row{column-gap:calc(var(--unit) * 3);padding:calc(var(--unit) * 1.5) 0 calc(var(--unit) * 1.5 - var(--rule-weight));border-bottom:var(--rule-weight) solid var(--rule-colour);color:var(--grey-1);transition:opacity var(--dur-hover) ease, color var(--dur-hover) ease;grid-template-columns:1fr auto;align-items:baseline;text-decoration:none;display:grid}.sheet .rows a:not(.brand):hover{color:var(--text)}.sheet .rows .y{color:var(--grey-3);letter-spacing:var(--caps-tracking)}.sheet .prose:has(.uses,.reading){max-width:none}.uses,.reading{container:spec/inline-size}:is(.uses,.reading) dl{column-gap:calc(var(--unit) * 3);grid-template-columns:24ch minmax(0,1fr);margin:0;display:grid}:is(.uses,.reading) dt,:is(.uses,.reading) dd{min-width:0;padding:calc(var(--unit) * 1.5) 0 calc(var(--unit) * 1.5 - var(--rule-weight));border-bottom:var(--rule-weight) solid var(--rule-colour);margin:0}:is(.uses,.reading) dt{color:var(--grey-1);overflow-wrap:break-word}:is(.uses,.reading) dt a{color:var(--grey-1)}.uses dd :is(p,ul)+:is(p,ul){margin-top:calc(var(--unit) * 2)}.reading-count{color:var(--grey-3);margin:0}.reading-list+.reading-count{margin-top:calc(var(--unit) * 5)}.reading-key{min-width:44px;min-height:44px;margin:0 0 calc(var(--unit) * 1);color:var(--grey-3);font-size:var(--fs-body);text-align:left;align-items:center;gap:0;padding:0 .6em 0 0;display:inline-flex}.reading-key[aria-pressed=true]{color:var(--text)}.reading-key .star{width:44px;height:44px;color:var(--star);flex:none;justify-content:center;align-items:center;font-size:20px;line-height:1;display:inline-flex;position:relative}.reading-list{flex-direction:column;display:flex}.reading-row{align-items:flex-start;gap:calc(var(--unit) * 2);padding:calc(var(--unit) * 1.5) 0 calc(var(--unit) * 1.5 - var(--rule-weight));border-bottom:var(--rule-weight) solid var(--rule-colour);display:flex}.reading-copy{flex-direction:column;gap:.15em;min-width:0;display:flex}.reading-name{color:var(--grey-1);overflow-wrap:anywhere}.reading-name a{color:var(--grey-1)}.reading-name .star{color:var(--star);margin-right:.35em;font-size:20px;line-height:1}.reading-author{color:var(--text);overflow-wrap:anywhere}.reading.is-favourites .finished-list .reading-row:not(.is-favourite){display:none}.reading:has(a:not(.close):is(:hover,:focus-visible)) .reading-row{opacity:var(--dim);transition:opacity .12s}.reading:has(a:not(.close):is(:hover,:focus-visible)) .reading-row:has(a:is(:hover,:focus-visible)){opacity:1}.thumb{flex:none;width:128px;height:128px}.thumb img,.thumb-fallback{width:128px;height:128px;display:block}.thumb img{object-fit:cover}.thumb-fallback{background-color:var(--text);-webkit-mask-image:url(/reading/placeholder.png);mask-image:url(/reading/placeholder.png);-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.uses dt{align-items:flex-start;gap:.65em;display:flex}.uses dt .ext{min-width:0}.uses-mark{width:1em;height:1em;color:var(--text);flex:none;margin-top:.15em}.uses-mark svg{width:1em;height:1em;display:block}@container spec (width<=26rem){:is(.uses,.reading) dl{grid-template-columns:minmax(0,1fr)}:is(.uses,.reading) dt{border-bottom:0;padding-bottom:0}:is(.uses,.reading) dd{padding-top:0}}.spine{width:var(--spine);z-index:2;padding-top:calc(var(--unit) * 4);color:var(--grey-3);pointer-events:none;transition:color var(--dur-hover) ease;justify-content:center;align-items:flex-start;display:flex;position:absolute;top:0;bottom:0;left:0}.spine span{font-size:var(--fs-small);writing-mode:vertical-rl;white-space:nowrap;text-overflow:ellipsis;max-height:calc(100% - 64px);line-height:var(--spine);overflow:hidden}.sheet.is-folded{pointer-events:none}.sheet.is-folded .sheet-inner{opacity:0;pointer-events:none;visibility:hidden;transition:opacity calc(var(--dur-sheet) * .4) linear, visibility 0s linear var(--dur-sheet)}.sheet.is-folded .spine{pointer-events:auto}.sheet.is-folded .spine:hover{color:var(--text)}.col-spine-wrap{z-index:55;width:var(--spine);justify-content:flex-end;display:flex;position:fixed}.col-spine{width:var(--spine);height:100%;padding-top:calc(var(--unit) * 4);color:var(--grey-3);background:var(--bg);border-left:var(--rule-weight) solid var(--rule-colour);cursor:pointer;justify-content:center;align-items:flex-start;display:flex}.col-spine span{writing-mode:vertical-rl;white-space:nowrap;text-transform:uppercase;letter-spacing:var(--caps-tracking);font-size:var(--fs-body);line-height:var(--spine)}.col-spine:hover,.col-spine-wrap.is-pinned .col-spine,.col-spine-wrap:focus-within .col-spine{color:var(--text)}.col-peek{background:var(--bg);border:var(--rule-weight) solid var(--rule-colour);padding:calc(var(--unit) * 4) 24px calc(var(--unit) * 6);opacity:0;visibility:hidden;pointer-events:none;border-right:0;transition:opacity .12s linear,visibility 0s linear .12s;position:absolute;top:0;bottom:0;right:100%;overflow:auto}.col-spine-wrap:hover .col-peek,.col-spine-wrap:focus-within .col-peek,.col-spine-wrap.is-pinned .col-peek{opacity:1;visibility:visible;pointer-events:auto;transition:opacity .12s linear,visibility}.col-peek .head{border-bottom:var(--rule-weight) solid var(--rule-colour);margin-bottom:calc(var(--unit) * 2)}.is-folded-col{visibility:hidden}.col-peek .rise{animation:none}.sheet:after{content:"";top:0;bottom:0;left:var(--spine);width:var(--rule-weight);background:var(--rule-colour);z-index:2;pointer-events:none;position:absolute}@media (width<=1100px){:root{--page-pad:48px;--col-gap:48px;--page-top:96px}.page{grid-template-columns:1fr 1fr;grid-template-areas:"p p""h1 h1""b1 b1""h2 side""b2 side"}.body--intro{margin-bottom:calc(var(--unit) * 9)}.body--intro .menu{flex-direction:row;gap:3ch}.body--intro .menu .more{padding-top:0}}@media (width<=799px){:root{--page-pad:20px;--page-top:56px;--sheet-pad:20px;--tilt:0deg;--portrait-size:min(220px, calc(100vw - 40px));--fs-body:15px;--fs-title:15px}.page{grid-template-columns:1fr;grid-template-areas:"p""h1""b1""side""h2""b2"}.head--cv,.head--words,.head--projects{margin-top:calc(var(--unit) * 7)}.n-desk{display:none}.n-phone{display:inline}.body--intro{margin-bottom:0}.body--intro .menu{margin-top:calc(var(--unit) * 3);flex-wrap:wrap;gap:2.5ch}.where{margin-top:calc(var(--unit) * 3)}.where,.sitemap{font-size:var(--fs-small)}.intro{max-width:none}body:has(.sheet) .page{display:none}.stack{z-index:auto;pointer-events:none;position:static;inset:auto}.scrim,.grab,.spine,.sheet:after{display:none}.sheet{width:auto;height:auto;min-height:0;box-shadow:none;pointer-events:auto;border:0;border-radius:0;position:relative;inset:auto;overflow:visible;translate:none;rotate:none;scale:1}.sheet-inner{padding:calc(env(safe-area-inset-top,0px) + var(--page-top)) var(--page-pad) calc(env(safe-area-inset-bottom,0px) + 64px);position:static;inset:auto;overflow:visible}:is(.uses,.reading) dl{grid-template-columns:minmax(0,1fr)}:is(.uses,.reading) dt{border-bottom:0;padding-bottom:0}:is(.uses,.reading) dd{padding-top:0}.thumb,.thumb img,.thumb-fallback{width:72px;height:72px}.sheet-head{display:none}.mobile-bar{z-index:5;margin:calc((env(safe-area-inset-top,0px) + var(--page-top)) * -1) calc(var(--page-pad) * -1) 0;padding:calc(env(safe-area-inset-top,0px) + 14px) var(--page-pad) 12px;background:var(--bg);font-size:var(--fs-body);line-height:var(--lh);justify-content:space-between;align-items:center;gap:16px;display:flex;position:sticky;top:0}.mobile-brand{font-size:18px;line-height:1.8;font-weight:var(--w-bold);color:var(--text);align-items:center;gap:8px;min-width:0;display:inline-flex}.mobile-brand img{width:16px;height:16px;image-rendering:pixelated;image-rendering:crisp-edges;flex:none}.mobile-menu-btn{appearance:none;font:inherit;color:var(--grey-2);cursor:pointer;background:0 0;border:0;flex:none;margin:0;padding:0}.mobile-menu-btn[aria-expanded=true]{color:var(--text)}.mobile-menu{z-index:2;background:var(--bg);border-top:var(--rule-weight) solid var(--rule-colour);border-bottom:var(--rule-weight) solid var(--rule-colour);padding:0 var(--page-pad);position:absolute;top:100%;left:0;right:0}.mobile-menu[hidden]{display:none}.mobile-menu .site-feed{margin-bottom:calc(var(--unit) * 1)}.sheet-meta{margin-top:var(--unit);color:var(--grey-3);font-size:var(--fs-body);line-height:var(--lh);font-weight:var(--w-light);font-variant-numeric:tabular-nums;display:block}.sheet-inner>h2{margin-top:calc(var(--unit) * 4);font-weight:var(--w-bold)}}@media (prefers-reduced-motion:reduce){:root{--dur-sheet:1ms;--dur-burst:1ms;--dur-retract:1ms;--stagger:0s}.rise{animation:none}.page *,.sheet-inner *{transition-delay:0s!important}.page :is(.intro,.where,.head>*,.cv>li>*,.menu a,.posts a>span,.words-foot>*),.sheet-inner *{transition-duration:1ms!important}.caret{animation:none}.sheet,.sheet-inner,.spine,.scrim,.chip,.posts-extra,.col-peek{transition-duration:1ms!important;transition-delay:0s!important}.posts-extra{transition:none}}.sheet-head time{color:var(--grey-3);font-size:var(--fs-body);letter-spacing:0;text-transform:none;font-variant-numeric:tabular-nums}.sheet-head{color:var(--grey-3)}.posts-extra{transition:grid-template-rows var(--dur-rise) var(--ease-expo);grid-template-rows:0fr;display:grid}.posts-extra>.posts{min-height:0;overflow:hidden}.posts-extra.is-expanded{grid-template-rows:1fr}.sitemap{margin-top:calc(var(--unit) * 2);color:var(--grey-4)}.sitemap a{color:var(--grey-4)}.tags-line{margin-top:var(--unit);color:var(--grey-3);flex-wrap:wrap;gap:.4em 1.5ch;display:flex}.sheet-note{margin-top:calc(var(--unit) * 2);color:var(--grey-3);max-width:58ch}.prose h2:not(.sub),.prose h3:not(.sub){color:var(--text);font-weight:var(--w-bold);font-size:var(--fs-body);line-height:var(--lh);margin-top:calc(var(--unit) * 4)}.prose ul,.prose ol{padding-left:1.5em}.prose ul{list-style:outside}.prose ol{list-style:decimal}.prose li+li{margin-top:0}.prose blockquote{margin:calc(var(--unit) * 2) 0 0;padding-left:calc(var(--unit) * 2);border-left:var(--rule-weight) solid var(--rule-colour);color:var(--grey-3)}.prose pre,.prose .astro-code{margin-top:calc(var(--unit) * 2);padding:calc(var(--unit) * 2);background:var(--grey-5);font-size:var(--fs-body);line-height:var(--lh);overflow-x:auto}.prose code{font-family:inherit}.prose img,.sheet-inner img,.prose video,.sheet-inner video{max-width:100%;height:auto;display:block}.prose iframe,.player{width:100%;height:180px;margin-top:calc(var(--unit) * 3);background:var(--grey-5);border:0}.empty{color:var(--grey-3);margin-top:calc(var(--unit) * 2)}.link,.hl{--hl-lift:.15em;isolation:isolate;position:relative}.link{color:var(--grey-2);transition:color var(--dur-hover) ease;padding-bottom:1px;text-decoration:none}a.hl{color:inherit;text-decoration:none}:is(.link,.hl):before{content:"";z-index:-1;pointer-events:none;left:calc(var(--hl-pad-l,3px) * -1);right:calc(var(--hl-pad-r,3px) * -1);background:var(--hl);border-radius:var(--hl-r,2px 3px 3px 2px / 3px 2px 2px 3px);height:1.15em;transform:rotate(var(--hl-rot,-1deg));clip-path:inset(0 100% 0 0);opacity:0;transition:opacity .12s linear,clip-path 0s linear .12s;position:absolute}.link:before{top:calc(50% - .575em - var(--hl-lift) + var(--hl-y,0px))}@supports (height:1lh){.link:before{top:auto;bottom:calc(1px + (1lh - 1.15em) / 2 + var(--hl-lift) - var(--hl-y,0px))}}.hl:before{top:calc(.19em - var(--hl-lift) + var(--hl-y,0px))}.caps .link{--hl-lift:0em}.caps .hl{--hl-lift:.02em}:is(.link,a.hl):is(:hover,:focus-visible,.is-seen):before,a:is(:hover,:focus-visible,.is-seen) .hl:before,.hl.hl-on:before{clip-path:inset(0);opacity:1;transition:clip-path .18s cubic-bezier(.3,.7,.4,1),opacity}html.fonts-pending :is(.link,.hl):before,html.fonts-pending :is(.link,a.hl):is(:hover,:focus-visible,.is-seen):before,html.fonts-pending a:is(:hover,:focus-visible,.is-seen) .hl:before,html.fonts-pending .hl.hl-on:before{opacity:0;clip-path:inset(0 100% 0 0)}html.fonts-pending .link.hl-wrap .hl-line,html.fonts-pending .hl.hl-wrap{background-size:0 1.05em}:is(.link,a.hl):is(:hover,:focus-visible,.is-seen),a:is(:hover,:focus-visible,.is-seen) .hl,.hl.hl-on,.menu .more:is(:hover,:focus-visible,.is-seen) .arrow{color:#000}a.close:before,a.close .hl:before,a.close:is(:hover,:focus-visible,.is-seen):before,a.close:is(:hover,:focus-visible,.is-seen) .hl:before{content:none;opacity:0;clip-path:inset(0 100% 0 0)}a.close:is(:hover,:focus-visible,.is-seen),a.close:is(:hover,:focus-visible,.is-seen) .hl{color:var(--text)}a.ext:not(.brand):is(:hover,:focus-visible){color:var(--grey-3)}a.brand:is(:hover,:focus-visible),a.brand:is(:hover,:focus-visible):visited,.sheet[data-path=\/about] a.brand,.sheet[data-path=\/about] a.brand:visited,.sheet[data-path=\/about] a.brand:is(:hover,:focus-visible){color:var(--brand-color)}.sheet[data-path=\/about] a.brand:is(:hover,:focus-visible) .ext-arrow{translate:none}:is(.link,.hl).hl-wrap:before{display:none}.link.hl-wrap .hl-line,.hl.hl-wrap{background:linear-gradient(var(--hl), var(--hl)) no-repeat 0 .1em / 0 1.05em;-webkit-box-decoration-break:clone;box-decoration-break:clone;transition:background-size .18s cubic-bezier(.3,.7,.4,1)}.link.hl-wrap .hl-line{background-position:0 55%}.link.hl-wrap:is(:hover,:focus-visible,.is-seen) .hl-line,a.hl.hl-wrap:is(:hover,:focus-visible,.is-seen),a:is(:hover,:focus-visible,.is-seen) .hl.hl-wrap,.hl.hl-wrap.hl-on{background-size:100% 1.05em}@media (prefers-reduced-motion:reduce){:is(.link,.hl):before,:is(.link,.hl):is(:hover,:focus-visible):before,a:is(:hover,:focus-visible) .hl:before,.link.hl-wrap .hl-line,.hl.hl-wrap{transition:none!important}}.ext-icon,.ext-arrow{user-select:none;pointer-events:none;flex:none;display:inline-block;overflow:visible}.ext-icon{vertical-align:-.16em;width:1em;height:1em}.prose .ext-icon,.dek .ext-icon{margin-right:1em}.rows .ext-icon{margin-right:1.5em}.ext-arrow{vertical-align:baseline;width:1ex;height:1ex;transition:translate .16s var(--ease-expo);margin-left:.22em}.caps .ext-arrow{vertical-align:.16em}a.ext:is(:hover,:focus-visible) .ext-arrow{translate:1.5px -1.5px}@media (prefers-reduced-motion:reduce){.ext-arrow{transition:none}}.sheet .rows.eggs .row{color:var(--grey-1);justify-content:flex-start;align-items:baseline;display:flex}.eggs [data-egg-state]{color:var(--grey-3);flex:none;margin-right:1.5em}.eggs .row.is-found{opacity:.45}.eggs .row.is-found [data-egg-name]{text-decoration:line-through 1px}.egg-foot{margin-top:calc(var(--unit) * 2);color:var(--grey-3);justify-content:space-between;align-items:baseline;display:flex}.egg-reset{color:inherit;cursor:pointer}.name-clear{font:inherit;letter-spacing:inherit;color:inherit;position:relative}.cleared-toast{color:var(--grey-3);font-size:var(--fs-body);letter-spacing:var(--caps-tracking);white-space:nowrap;opacity:0;pointer-events:none;position:absolute;top:.35em;left:calc(100% + .6em)}.cleared-toast.is-on{animation:.9s cleared-flash}@keyframes cleared-flash{0%{opacity:0}18%{opacity:1}65%{opacity:1}to{opacity:0}}@media (prefers-reduced-motion:reduce){.cleared-toast.is-on{opacity:1;animation:none}}.todo{color:var(--grey-3);font-size:var(--fs-body);letter-spacing:var(--caps-tracking);text-transform:uppercase;vertical-align:baseline;align-items:baseline;gap:.6ch;margin-left:.8ch;display:inline-flex}.todo-pill{border:var(--rule-weight) solid var(--rule-colour);border-radius:2px;padding:0 4px}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}
