:root{color-scheme:light;--paper:#fff;--ink:#151713;--muted:#6c7068;--faint:#a6aaa1;--line:#dedfd9;--wash:#f3f4ef;--accent:#b8d1bb;--accent-ink:#45684b;--plane:#fff;--plane-ink:#161615;--plane-muted:rgba(22,22,21,.74);--plane-line:rgba(22,22,21,.28);--font-text:Arial,"Helvetica Neue",Helvetica,sans-serif;--font-mono:Arial,Helvetica,sans-serif;--font-code:ui-monospace,"SF Mono",SFMono-Regular,Menlo,Consolas,"Liberation Mono",monospace;--size-read:17px;--size-base:15px;--size-label:12px;--door-size:64px;--gutter:20px;--page-max:1600px;--margin-w:312px;--margin-gap:88px;--team-w:220px;--header-h:60px;--sheet-radius:22px;--back-h:380px;--t-press:120ms;--t-quick:220ms;--t-move:450ms;--t-surface:780ms;--ease-out:cubic-bezier(.22,1,.36,1);--ease-in-out:cubic-bezier(.65,0,.35,1);--ease-surface:cubic-bezier(.7,0,.2,1)}@media (max-width:899px){:root{--door-size:48px;--back-h:460px}}@media (max-width:599px){:root{--gutter:16px}}*,:after,:before{box-sizing:border-box}html{-webkit-text-size-adjust:100%;background:var(--paper);scrollbar-gutter:stable}html.at-end{background:var(--plane)}html.smooth-scroll{scroll-behavior:smooth}body{min-height:100dvh;display:flex;flex-direction:column;color:var(--ink);font:var(--size-base)/1.5 var(--font-text);-webkit-font-smoothing:antialiased}body,dd,dl,figure,h1,h2,h3,p,ul{margin:0}ul{padding:0;list-style:none}img,svg,video{display:block;max-width:100%}a{text-decoration:none;-webkit-tap-highlight-color:transparent}a,button{color:inherit}button{font:inherit;background:none;border:0;padding:0;cursor:pointer}::selection{background:var(--accent);color:#161615}:focus-visible{outline:2px solid var(--accent-ink);outline-offset:3px;border-radius:2px}.page{width:100%;max-width:var(--page-max);margin-inline:auto;padding-inline:var(--gutter)}.label{font:var(--size-label)/1.5 var(--font-mono);color:var(--muted)}.door-type{display:inline-block;font-size:var(--door-size);font-weight:400;line-height:.98;letter-spacing:-.035em}.text-link{-webkit-text-decoration-line:underline;text-decoration-line:underline;-webkit-text-decoration-color:transparent;text-decoration-color:transparent;text-underline-offset:4px;transition:-webkit-text-decoration-color .16s;transition:text-decoration-color .16s;transition:text-decoration-color .16s,-webkit-text-decoration-color .16s}.text-link:hover{-webkit-text-decoration-color:currentColor;text-decoration-color:currentColor}.link-arrow{display:inline-block;flex-shrink:0;margin-left:4px;transition:transform .18s var(--ease-out)}a:hover .link-arrow{transform:translate(2px,-2px)}.skip-link{position:fixed;top:12px;left:16px;z-index:100;padding:10px 16px;background:var(--paper);transform:translateY(-160%)}.skip-link:focus{transform:none}.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.stage{--paper:#fff;--ink:#161615;--muted:#6b6a64;--faint:#aaa8a0;--line:#e3e1da;--wash:#ecebe5;--accent-ink:#c93f0f;background:var(--paper);color:var(--ink)}.empty-page{padding-block:96px}.empty-page h1{font-size:24px;font-weight:700;margin:12px 0}.empty-page p:not(.label){color:var(--muted);margin-bottom:16px}html.first-visit [data-enter]{animation:enter .52s var(--ease-out) backwards;animation-delay:calc(var(--enter-i, 0) * 55ms)}@keyframes enter{0%{opacity:0;transform:translateY(8px)}}figcaption,li,p{text-wrap:pretty}h1,h2,h3{text-wrap:balance}:root{--portfolio-text-size:14px}.ascii-field{position:fixed;inset:0;width:100%;height:100%;z-index:0;pointer-events:none;opacity:.16;contain:strict}.portfolio-footer,.portfolio-main,.room{position:relative;z-index:1}.portfolio-main{flex:1 1;padding-top:var(--header-h)}html:has(.info-panel:popover-open){overflow:hidden}.ascii-home{padding:0 var(--gutter)}.ascii-intro{min-height:calc(94svh - var(--header-h));scroll-margin-top:var(--header-h);display:grid;place-items:center;padding:80px 0 110px}.ascii-intro p{max-width:475px;font-size:var(--portfolio-text-size);line-height:1.45;text-wrap:pretty;text-align:center;background:rgba(255,255,255,.94);padding:2px 4px}.project-index{--index-media-height:clamp(220px,38svh,440px);position:relative;display:block;align-content:start;gap:28px;scroll-margin-top:105px}.index-heading{font-weight:700;color:#74766f;line-height:1.5;padding-bottom:8px;margin-bottom:10px;border-bottom:1px dotted #c5c7c0}.index-heading,.index-row{font-size:var(--portfolio-text-size)}.index-row{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1.5fr) auto;grid-gap:16px;gap:16px;padding:12px 0;line-height:1.3;align-items:baseline}.index-name{display:flex;align-items:baseline;gap:4px}.index-item.is-active .index-name,.index-row:focus-visible .index-name,.index-row:hover .index-name{text-decoration:line-through;text-decoration-thickness:1px}.index-summary{color:#666a62}.index-period{white-space:nowrap;color:#666a62;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;font-size:12px}.index-item{position:relative}.index-preview-column{display:none;position:-webkit-sticky;position:sticky;top:100px;align-self:start;min-width:0}.index-preview{animation:preview-in .18s ease-out both}.index-preview-media{display:flex;align-items:center;justify-content:center;max-height:55svh;overflow:hidden;background:#fff}.index-preview-media img,.index-preview-media video{width:100%;height:auto;max-height:55svh;object-fit:contain}.index-preview figcaption{font-size:var(--portfolio-text-size);line-height:1.4;margin-top:12px;color:#666a62;max-width:50ch}.index-stack,.index-topics{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:14px}.index-topics li{font-size:12px;line-height:1.4;padding:2px 6px;border:1px solid #d9dbd4}.index-stack{gap:14px}.index-stack svg{width:1em;height:1em;fill:currentColor}.index-preview.is-inline{margin:16px 0 20px}.index-preview.is-inline .index-preview-media,.index-preview.is-inline img,.index-preview.is-inline video{max-height:none}.index-preview.is-inline .index-preview-media{position:relative}.index-preview.is-inline .index-preview-film{position:absolute;inset:0;height:100%;opacity:0}.index-preview.is-inline .index-preview-film[data-playing]{opacity:1}.index-preview.is-inline figcaption{color:var(--ink);margin-top:18px;max-width:none}@media (min-width:1000px) and (hover:hover) and (pointer:fine){.project-index{display:grid;grid-template-columns:minmax(0,7fr) minmax(0,5fr)}.index-list>ul{display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.6fr) max-content;grid-column-gap:16px;column-gap:16px}.index-item,.index-row{grid-column:1/-1;grid-template-columns:subgrid}.index-item{display:grid}.index-heading{grid-column:1;margin-bottom:0}.index-list,.index-preview-column{grid-row:2}.index-preview-column{display:block;min-height:calc(var(--index-media-height) + 220px)}.index-preview-column .index-preview-media{height:var(--index-media-height);max-height:none;container-type:size}.index-preview-column .index-preview-media img,.index-preview-column .index-preview-media video{width:min(100%,calc(100cqh * var(--preview-aspect)));height:auto;max-height:100%}.index-preview.is-inline{display:none}}.portfolio-footer{padding:clamp(64px,10svh,128px) var(--gutter) 22px;font-size:var(--portfolio-text-size)}.portfolio-footer nav{display:flex;flex-wrap:wrap;gap:16px}.footer-bottom{display:flex;justify-content:space-between;align-items:baseline;gap:20px;font-size:var(--portfolio-text-size)}.portfolio-footer a:hover,.portfolio-footer button:hover{text-decoration:line-through}.room{padding-top:var(--header-h)}.room .room-page{padding-top:65px}.room .room-title{font-size:18px;font-weight:700}.room .reader-list{background:transparent}@keyframes preview-in{0%{opacity:0;transform:translateY(3px)}to{opacity:1;transform:none}}@view-transition{navigation:auto}::view-transition-new(root),::view-transition-old(root){animation-duration:.18s}::view-transition-group(frame){animation-duration:0s}@media (min-width:1600px){:root{--portfolio-text-size:15px}.project-index{gap:42px}}@media (hover:none),(max-width:999px),(pointer:coarse){.project-index{scroll-margin-top:68px}.index-row{grid-template-columns:minmax(0,1fr) auto;padding:7px 0 0;gap:8px}.index-name,.index-row{font-size:var(--portfolio-text-size)}.index-summary{grid-column:1/-1;grid-row:2}.index-period{grid-column:2;grid-row:1}.index-item+.index-item{padding-top:12px;border-top:1px solid rgba(150,150,150,.2)}.index-preview.is-inline{animation:none}.index-preview figcaption{font-size:var(--portfolio-text-size);line-height:1.3}}@media (max-width:999px){.ascii-intro{min-height:calc(95svh - var(--header-h));padding:50px 0 60px}.ascii-intro p{max-width:440px}}@media (max-width:599px){.ascii-intro p{font-size:var(--portfolio-text-size);line-height:1.3;max-width:100%}.footer-bottom{align-items:flex-end}}@media (prefers-reduced-motion:reduce){.index-preview{animation:none}::view-transition-new(root),::view-transition-old(root){animation:none}}html[data-project-motion]::view-transition-group(project-media){animation-duration:.66s;animation-timing-function:cubic-bezier(.22,1,.36,1);z-index:2}html[data-project-motion]::view-transition-image-pair(project-media){isolation:isolate}html[data-project-motion]::view-transition-new(project-media),html[data-project-motion]::view-transition-old(project-media){animation:none;mix-blend-mode:normal;width:100%;height:100%;object-fit:contain}html[data-project-motion]::view-transition-group(frame){z-index:3}html[data-project-media-swap]::view-transition-new(project-media){animation:project-media-handoff .2s ease-out .32s both}html[data-project-motion]::view-transition-new(frame),html[data-project-motion]::view-transition-old(frame){animation:none}html[data-project-motion]::view-transition-old(root){animation:project-leave .14s ease-out both}html[data-project-motion]::view-transition-new(root){animation:project-arrive .42s cubic-bezier(.22,1,.36,1) .12s both}html[data-project-motion]::view-transition-new(project-media):only-child{animation:project-arrive .42s cubic-bezier(.22,1,.36,1) both}html[data-project-motion]::view-transition-old(project-media):only-child{animation:project-leave .14s ease-out both}@keyframes project-arrive{0%{opacity:0;transform:translateY(10px)}}@keyframes project-leave{to{opacity:0}}@keyframes project-media-handoff{0%{opacity:0}to{opacity:1}}@media (max-width:899px){html[data-project-motion]::view-transition-group(project-media){animation-duration:.54s}html[data-project-media-swap]::view-transition-new(project-media){animation-delay:.22s}}@media (prefers-reduced-motion:reduce){html::view-transition-group(*),html::view-transition-new(*),html::view-transition-old(*){animation:none!important}}