: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;--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:400;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(.ascii-home){scroll-snap-type:y proximity}html:has(.info-panel:popover-open){overflow:hidden;scroll-snap-type:none}.ascii-home{padding:0 var(--gutter)}.ascii-intro{min-height:calc(94svh - var(--header-h));scroll-snap-align:start;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{position:relative;display:block;gap:28px;scroll-margin-top:105px;scroll-snap-align:start;min-height:calc(100svh - 105px);padding-bottom:30px}.index-group+.index-group{margin-top:42px}.index-group h3{font-weight:400;color:#74766f;line-height:1.5;padding-bottom:8px;margin-bottom:10px;border-bottom:1px dotted #c5c7c0}.index-group h3,.index-row{font-size:var(--portfolio-text-size)}.index-row{display:grid;grid-template-columns:minmax(0,1.25fr) 52px minmax(0,1.05fr) minmax(0,1.5fr);grid-gap:12px;gap:12px;padding:7px 0;line-height:1.3;align-items:baseline}.index-name{display:flex;align-items:baseline;gap:4px}.index-row:focus-visible .index-name,.index-row:hover .index-name{text-decoration:line-through;text-decoration-thickness:1px}.index-area{text-transform:none}.index-period{font-feature-settings:"tnum";font-variant-numeric:tabular-nums;white-space:nowrap;padding-top:1px}.index-period,.index-role{font-size:var(--portfolio-text-size)}.index-item{position:relative}.index-preview-column{display:none;position:-webkit-sticky;position:sticky;top:100px;align-self:start;min-width:0;min-height:380px}.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-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 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,1.82fr) minmax(0,1fr)}.index-preview-column{display:block}.index-preview.is-inline{display:none}}.portfolio-footer{padding:100px 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}.ascii-case{padding-top:36px;padding-bottom:10px;font-size:var(--portfolio-text-size);line-height:1.35}.ascii-case-heading{display:flex;justify-content:space-between;align-items:baseline;gap:20px;border-bottom:1px dotted #c5c7c0;padding-bottom:8px}.ascii-case-heading h1{font:inherit;color:#74766f}.ascii-case-heading nav{display:flex;gap:20px;flex-shrink:0}.ascii-case-heading a:hover,.ascii-case-links a:hover{text-decoration:line-through}.ascii-case-intro{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.6fr);grid-gap:36px;gap:36px;padding-top:10px;scroll-margin-top:85px}.ascii-case .case-lede{font-size:var(--portfolio-text-size);line-height:1.35;column-count:auto}.ascii-case-details{max-width:60ch}.ascii-case-details dl{margin-top:18px;color:var(--muted);font-size:12px}.ascii-case-details dl>div{display:flex;gap:8px;margin-top:4px}.ascii-case-details dt{min-width:32px}.ascii-case-links{display:flex;flex-wrap:wrap;gap:8px 20px}.ascii-case-contents,.ascii-case-links{margin-top:18px;font-size:12px}.ascii-case-contents summary{cursor:pointer;width:-moz-fit-content;width:fit-content;list-style:none}.ascii-case-contents summary::-webkit-details-marker{display:none}.ascii-case-contents nav{display:flex;flex-wrap:wrap;gap:8px 18px;margin-top:8px}.ascii-case-contents a{text-decoration:underline;text-underline-offset:3px}.ascii-case .case-hero{margin-top:48px;padding-bottom:0}.portfolio-main .ascii-case .case-hero-stage{border-radius:0;height:70svh;min-height:420px;background:#fff}.ascii-case .case-flow{margin-top:48px}.ascii-case .case-flow>p{font-size:var(--portfolio-text-size);line-height:1.45;max-width:68ch}.ascii-case .case-flow>.flow-label{font:inherit;margin-top:48px;scroll-margin-top:85px}.ascii-case .case-flow>.fig{margin-top:24px}.ascii-case .case-next{margin-top:60px}.room{padding-top:var(--header-h)}.room .room-page{padding-top:65px}.room .room-title{font-size:32px;letter-spacing:-.025em}.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;font-size:var(--portfolio-text-size)}.index-area,.index-role{display:none}.index-name,.index-period{font-size:var(--portfolio-text-size)}.index-item+.index-item{padding-top:12px;border-top:1px solid rgba(150,150,150,.2)}.index-group+.index-group{margin-top:44px}.index-group h3{font-size:var(--portfolio-text-size);margin-bottom:10px}.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}.ascii-case-intro{display:block}.ascii-case-details{margin-top:18px}.portfolio-main .ascii-case .case-hero-stage{height:auto;min-height:0}.portfolio-footer{padding-top:80px}}@media (max-width:599px){.ascii-intro p{font-size:var(--portfolio-text-size);line-height:1.3;max-width:100%}.ascii-case{padding-top:12px}.ascii-case-heading{gap:12px}.ascii-case-heading nav{gap:16px}.ascii-case .case-lede{line-height:1.3}.ascii-case .case-flow>p{line-height:1.35}.ascii-case .case-flow,.ascii-case .case-hero{margin-top:40px}.footer-bottom{align-items:flex-end}.portfolio-footer{padding-top:65px}}@media (prefers-reduced-motion:reduce){html:has(.ascii-home){scroll-snap-type:none}.index-preview{animation:none}::view-transition-new(root),::view-transition-old(root){animation:none}}