@font-face{font-family:Newsreader;font-style:normal;font-weight:400 500;font-display:swap;src:url(/fonts/newsreader-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Newsreader;font-style:italic;font-weight:400 500;font-display:swap;src:url(/fonts/newsreader-italic-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/ibm-plex-mono-400-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/ibm-plex-mono-500-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/ibm-plex-mono-600-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:IBM Plex Mono,ui-monospace,Menlo,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.static{position:static}.fixed{position:fixed}.top-1{top:.25rem}.block{display:block}.table{display:table}.contents{display:contents}.resize{resize:both}.sepia{--tw-sepia: sepia(100%);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:root{--paper: #f7f4ee;--well: #efeae1;--ink: #1d1a16;--ink-2: #4f4942;--ink-3: #6b645a;--rule: #ddd6ca;--frame: #b3aa9c;--accent: #9b3a24;--on-ink: #f7f4ee;--serif: "Newsreader", Georgia, serif;--mono: "IBM Plex Mono", ui-monospace, Menlo, monospace;--head: 64px;--bar: 42px;--wrap: 1180px;--side: clamp(16px, 3.4vw, 48px);--pad: clamp(26px, 5vw, 72px);--gutter: 210px;--gap: clamp(52px, 4.2vw, 60px);color-scheme:light dark}@media (prefers-color-scheme: dark){:root{--paper: #15130f;--well: #1d1a15;--ink: #ece5d7;--ink-2: #bfb5a5;--ink-3: #978d7e;--rule: #2d2822;--frame: #4a4239;--accent: #e9a13c;--on-ink: #15130f}}html{-webkit-text-size-adjust:100%}@media (prefers-reduced-motion: no-preference){html{scroll-behavior:smooth}}body{background:var(--paper);color:var(--ink);font:400 19px/1.62 var(--serif);font-optical-sizing:auto;font-variant-numeric:oldstyle-nums proportional-nums;-webkit-font-smoothing:antialiased;overflow-x:hidden}::-moz-selection{background:var(--accent);color:var(--on-ink)}::selection{background:var(--accent);color:var(--on-ink)}:focus-visible{outline:2px solid var(--accent);outline-offset:3px}[id]{scroll-margin-top:calc(var(--head) + 28px)}p,li,dd{text-wrap:pretty}.wrap{max-width:var(--wrap);margin:0 auto;padding:0 var(--side)}.site{padding-top:var(--head)}.site:has(>.keys){padding-bottom:var(--bar)}.page{--page-top: clamp(26px, 2.4vw, 34px);padding-top:var(--page-top)}.label{font:400 13px/1.5 var(--mono);color:var(--ink-3);letter-spacing:.01em;font-variant-numeric:normal}.small{font:400 13px/1.6 var(--mono);color:var(--ink-3);font-variant-numeric:normal}.nw{white-space:nowrap}.skip{position:fixed;top:12px;left:12px;z-index:30;padding:10px 16px;background:var(--ink);color:var(--on-ink);font:400 14px/1 var(--mono);transform:translateY(-200%)}.skip:focus{transform:none}.top{position:fixed;inset:0 0 auto 0;z-index:20;height:var(--head);background:var(--paper);border-bottom:1px solid var(--rule)}.top .wrap{height:100%;display:flex;align-items:center;justify-content:space-between;gap:24px}.name{font:500 19px/1 var(--serif);white-space:nowrap}.name:hover{color:var(--accent)}.top nav{display:flex;align-items:center;gap:28px;font-size:16.5px}.top nav a{color:var(--ink-2)}.top nav a:hover{color:var(--accent)}.top nav a[aria-current]{color:var(--ink)}.top nav .cv{color:var(--ink);text-decoration:underline;text-decoration-color:var(--accent);text-underline-offset:5px}.panel{position:relative;border:1px solid var(--frame);border-radius:3px;padding:var(--pad);padding-top:clamp(40px,3.6vw,52px);margin-bottom:var(--gap);transition:border-color .2s}.intro-panel{padding-top:clamp(30px,3.4vw,48px);padding-bottom:clamp(32px,3.4vw,48px)}.panel:focus{outline:none}.panel.is-focus{border-color:var(--accent)}.ptitle{position:absolute;top:0;left:22px;transform:translateY(-50%);background:var(--paper);padding:0 10px;font:400 13.5px/1 var(--mono);color:var(--ink-3);font-variant-numeric:normal}.ptitle b{font-weight:600;color:var(--accent);margin-right:8px}.panel.is-focus .ptitle{color:var(--ink)}.box{position:relative;border:1px solid var(--rule);border-radius:3px;padding:30px 28px 26px}.btitle{position:absolute;top:0;left:16px;transform:translateY(-50%);background:var(--paper);padding:0 8px;font:400 12.5px/1 var(--mono);color:var(--ink-3)}h1,h2{font-weight:400}.phead h1,.phead h2{font:400 clamp(1.8rem,2.9vw,2.45rem)/1.1 var(--serif);letter-spacing:-.01em}.phead{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:10px 24px;margin-bottom:clamp(36px,4.5vw,56px)}#projects .phead{margin-bottom:19px}#case-studies .phead{margin-bottom:24px}#demo .phead{margin-bottom:36px}.phead .intro{flex-basis:100%;color:var(--ink-2);padding-right:max(0px,calc(100% - 34em))}.plink,.go{font:400 14px/1.6 var(--mono);color:var(--ink-2);text-decoration:underline;text-decoration-color:var(--accent);text-underline-offset:4px;font-variant-numeric:normal}.plink:hover,.go:hover{color:var(--accent)}.go{color:var(--ink);background:none;border:0;padding:0;cursor:pointer}.group-label{padding-bottom:14px;border-bottom:1px solid var(--rule)}.hero{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:0 64px;align-items:end}.role{font:400 14px/1.4 var(--mono);color:var(--accent)}.hero h1,.head-title{margin-top:14px;font:400 clamp(3rem,6.4vw,5.4rem)/.98 var(--serif);letter-spacing:-.025em}.dek{text-wrap:balance;margin-top:28px;max-width:23em;font:400 clamp(1.55rem,2.4vw,2rem)/1.25 var(--serif)}.dek em{color:var(--accent)}.second{margin-top:14px;max-width:32em;color:var(--ink-2)}.actions{display:flex;flex-wrap:wrap;align-items:center;gap:14px 28px;margin-top:34px}.btn{display:inline-block;padding:12px 22px;font:400 17px/1 var(--serif);border:1px solid var(--ink);border-radius:2px}.btn.solid{background:var(--ink);color:var(--on-ink)}.btn.solid:hover{background:var(--accent);border-color:var(--accent);color:var(--on-ink)}.btn.line:hover{color:var(--accent);border-color:var(--accent)}.social{display:flex;flex-wrap:wrap;gap:8px 22px;font-size:17px}.social a{color:var(--ink-2)}.social a:hover{color:var(--accent)}.notes li{position:relative;padding-left:30px;font-size:16.5px;line-height:1.5;color:var(--ink-2)}.notes li+li{margin-top:15px;padding-top:15px;border-top:1px solid var(--rule)}.notes li:before{content:attr(data-n);position:absolute;left:0;font:500 13px/1.95 var(--mono);color:var(--accent)}.notes a{border-bottom:1px solid var(--rule)}.notes a:hover{color:var(--accent);border-color:var(--accent)}.notes h3{font:400 17px/1.4 var(--serif);color:var(--ink)}.notes h3+p{margin-top:4px}.cases>li{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:0 56px;align-items:start;padding:40px 0;border-top:1px solid var(--rule)}.cases>li:first-child{border-top:0;padding-top:0}.cases>li:last-child{padding-bottom:0}.case-title{font:400 clamp(1.6rem,2.3vw,2rem)/1.1 var(--serif);letter-spacing:-.01em}.case-title a:hover{color:var(--accent)}.case-text .problem{margin-top:14px;font-style:italic;color:var(--ink-2)}.case-text .result{margin-top:12px}.case-text .go{display:inline-block;margin-top:16px}.case-shot{display:block}.case-shot img,.fig img{width:100%;aspect-ratio:16 / 9;-o-object-fit:cover;object-fit:cover;border:1px solid var(--rule);border-radius:2px}.fig figcaption,.stage figcaption{margin-top:12px;font-size:16px;line-height:1.5;color:var(--ink-3)}.fig figcaption b,.stage figcaption b{font:500 12.5px/1 var(--mono);color:var(--accent);margin-right:8px}.more{margin-top:clamp(64px,7vw,96px)}.rows>li{display:grid;grid-template-columns:var(--gutter) minmax(0,34em);gap:10px 48px;padding:40px 0;border-bottom:1px solid var(--rule)}.rows>li:last-child{border-bottom:0;padding-bottom:0}.more .rows>li:first-child{padding-top:32px}.rows.flush>li:first-child{padding-top:0}.rows h2,.rows h3{font:400 1.4rem/1.2 var(--serif)}.rows h2 a:hover{color:var(--accent)}.rows .status{margin-top:8px}.rows .tech{margin-top:14px}.links{display:flex;flex-wrap:wrap;gap:6px 24px}.rows .links{margin-top:12px}.rows.compact>li{padding:26px 0}.rows.compact>li:last-child{padding-bottom:0}.rows.compact .links{margin-top:6px}.app-rows>li{padding:42px 0}.app-name{display:flex;align-items:center;gap:12px}.app-name svg{flex:none;width:26px;height:26px;color:var(--accent)}.posts li a{display:grid;grid-template-columns:120px minmax(0,1fr) 110px;gap:6px 40px;align-items:baseline;padding:var(--row, 26px) 0;border-top:1px solid var(--rule)}.posts.long{--row: 20px}.posts li:first-child a{border-top:0;padding-top:0}.posts li:last-child a{padding-bottom:0}.posts .t{font:400 clamp(1.15rem,1.6vw,1.32rem)/1.4 var(--serif);max-width:30em}.posts a:hover .t{color:var(--accent)}.posts .excerpt{margin-top:8px;color:var(--ink-2);font-size:17px;line-height:1.55;max-width:34em}.posts .rt{text-align:right}.jobs>li{display:grid;grid-template-columns:var(--gutter) minmax(0,34em);gap:8px 48px;padding:44px 0;border-top:1px solid var(--rule)}.jobs>li:first-child{border-top:0;padding-top:0}.jobs>li:last-child{padding-bottom:0}.when{font:400 13.5px/1.6 var(--mono);color:var(--ink-2);font-variant-numeric:normal}.jobs h3{font:400 clamp(1.35rem,2vw,1.6rem)/1.25 var(--serif)}.org{margin-top:4px;font-style:italic;color:var(--ink-2)}.duties{margin-top:20px}.duties li,.prose ul>li{position:relative;padding-left:22px}.duties li+li{margin-top:14px}.duties li:before,.prose ul>li:before{content:"";position:absolute;left:1px;top:.72em;width:5px;height:5px;background:var(--accent);border-radius:50%}.skills>div{display:grid;grid-template-columns:var(--gutter) minmax(0,36em);gap:6px 48px;padding:24px 0;border-top:1px solid var(--rule)}.skills>div:first-child{border-top:0;padding-top:0}.skills>div:last-child{padding-bottom:0}.skills dt{padding-top:4px}.mail{display:inline-block;font:400 clamp(1.55rem,4vw,3.1rem)/1.15 var(--serif);letter-spacing:-.01em;text-decoration:underline;text-decoration-thickness:1px;text-decoration-color:var(--accent);text-underline-offset:.18em;overflow-wrap:anywhere}.mail:hover{color:var(--accent)}.contact .social{margin-top:30px}.case-top{display:grid;grid-template-columns:minmax(0,.82fr) minmax(0,1.18fr);gap:64px;align-items:start}.case-top .head-title{margin-top:10px;font-size:clamp(2.5rem,4.6vw,3.9rem);line-height:1;letter-spacing:-.02em}.crumb{text-decoration:underline;text-decoration-color:var(--frame);text-underline-offset:4px}.crumb:hover{color:var(--accent);text-decoration-color:var(--accent)}.post-grid .crumb+h1{margin-top:10px}.app-hero .crumb{display:block;width:-moz-fit-content;width:fit-content;margin-bottom:22px}.award{margin-top:14px;font:400 14px/1.4 var(--mono);color:var(--accent)}.case-top .problem{margin-top:22px;font:italic 400 clamp(1.2rem,1.7vw,1.42rem)/1.42 var(--serif);color:var(--ink-2);max-width:22em}.case-top .does{margin-top:26px;max-width:26em}.leaf{display:grid;grid-template-columns:var(--gutter) minmax(0,34em);gap:10px 48px;margin-top:clamp(56px,6vw,80px)}.leaf>.label{padding-top:5px}.steps li{position:relative;padding-left:36px}.steps li+li{margin-top:16px}.steps li:before{content:attr(data-n);position:absolute;left:0;font:500 13px/2.3 var(--mono);color:var(--accent)}.pair{display:grid;grid-template-columns:var(--gutter) minmax(0,1fr) minmax(0,1fr);gap:0 48px;margin-top:clamp(56px,6vw,80px)}.pair>:first-child{grid-column:2}.pair .label{margin-bottom:12px}.outcome{display:grid;grid-template-columns:var(--gutter) minmax(0,1fr);gap:0 48px;margin-top:clamp(56px,6vw,80px)}.leaf+.outcome{margin-top:clamp(80px,7.5vw,110px)}.outcome .box{grid-column:2;max-width:40em}.outcome .lead{font-size:clamp(1.15rem,1.6vw,1.3rem);line-height:1.5}.outcome .small{margin-top:18px}.outcome .links{margin-top:14px}.gallery{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(0,1fr);gap:32px 52px;align-items:start}.stage-frame{aspect-ratio:16 / 9;border:1px solid var(--rule);border-radius:2px;background:var(--well);overflow:hidden}.stage-frame video,.stage-frame img{width:100%;height:100%;-o-object-fit:contain;object-fit:contain}.stage-frame button{display:block;width:100%;height:100%;cursor:zoom-in}.stage-frame button:focus-visible{outline-offset:-3px}img[src$=".svg"]{background:#15130f}.media-list li+li{border-top:1px solid var(--rule)}.media-list button{display:flex;align-items:baseline;gap:12px;width:100%;padding:11px 0;text-align:left;font:400 17px/1.4 var(--serif);color:var(--ink-2);cursor:pointer}.media-list button b{font:500 13px/1 var(--mono);color:var(--ink-3);min-width:1.4em}.media-list button .small{margin-left:auto}.media-list button:hover,.media-list button[aria-pressed=true]{color:var(--ink)}.media-list button[aria-pressed=true] b{color:var(--accent)}.walk{margin-top:28px}.media-list+.walk{padding-top:24px;border-top:1px solid var(--rule)}.walk-goal{font-size:17px;line-height:1.5}.walk .small{margin-top:4px}.chapters{margin-top:14px}.chapters button{display:flex;gap:12px;width:100%;padding:6px 0;text-align:left;font:400 16px/1.45 var(--serif);color:var(--ink-2);cursor:pointer}.chapters button span{font:400 12.5px/1.9 var(--mono);color:var(--ink-3);font-variant-numeric:normal}.chapters button:hover,.chapters button[aria-pressed=true]{color:var(--ink)}.chapters button[aria-pressed=true] span{color:var(--accent)}.walk details{margin-top:14px;font-size:16px;line-height:1.55;color:var(--ink-2)}.walk summary{cursor:pointer;padding:6px 0;font:400 13px/1.6 var(--mono);color:var(--ink-2);text-decoration:underline;text-decoration-color:var(--accent);text-underline-offset:4px}.walk details ol{margin-top:10px;padding-left:1.4em;list-style:decimal}.walk details li+li{margin-top:10px}.walk details b{font-weight:500;color:var(--ink)}.viewer{width:min(94vw,1400px);max-width:none;max-height:92vh;padding:0;background:var(--paper);color:var(--ink);border:1px solid var(--frame);border-radius:3px}.viewer::backdrop{background:#000000b3}.viewer-bar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 20px;border-bottom:1px solid var(--rule)}.viewer-bar p{font:400 13.5px/1.4 var(--mono);color:var(--ink-2)}.viewer-bar button{padding:6px 2px;cursor:pointer}.viewer-body>img{width:100%;max-height:calc(92vh - 110px);-o-object-fit:contain;object-fit:contain}.viewer-body>p{padding:12px 20px 16px;font-size:16px;color:var(--ink-3)}.viewer-walk{display:grid;grid-template-columns:minmax(0,1.7fr) minmax(0,1fr);gap:28px;padding:24px}.viewer-walk video{width:100%;aspect-ratio:16 / 9;background:var(--well)}.viewer-walk .walk{margin-top:0}.post-grid{display:grid;grid-template-columns:var(--gutter) minmax(0,33em);gap:0 48px}.post-meta{padding-top:12px}.post-meta p+p{margin-top:2px}.post-grid h1{font:400 clamp(2.1rem,3.6vw,3rem)/1.12 var(--serif);letter-spacing:-.015em;text-wrap:balance}.post-grid .standfirst{margin-top:18px;font:italic 400 clamp(1.2rem,1.6vw,1.34rem)/1.45 var(--serif);color:var(--ink-2)}.post-grid .prose{margin-top:52px;padding-top:54px;border-top:1px solid var(--rule)}.author{margin-top:60px}.author p+p{margin-top:6px}.author a{text-decoration:underline;text-decoration-color:var(--accent);text-underline-offset:4px}.author a:hover{color:var(--accent)}.prose{line-height:1.68}.prose>*+*{margin-top:1.1em}.prose h2{margin-top:2.2em;font:400 1.6rem/1.2 var(--serif);letter-spacing:-.01em}.prose h3{margin-top:1.8em;font:500 1.22rem/1.3 var(--serif)}.prose h2+*,.prose h3+*{margin-top:.55em}.prose a{text-decoration:underline;text-decoration-color:var(--accent);text-underline-offset:3px}.prose a:hover{color:var(--accent)}.prose strong{font-weight:500}.prose ul>li+li,.prose ol>li+li{margin-top:.4em}.prose ol{padding-left:1.6em;list-style:decimal}.prose ol>li::marker{font:500 .8em var(--mono);color:var(--accent)}.prose code{font:400 .8em/1 var(--mono);font-variant-numeric:normal;background:var(--well);padding:.14em .36em;border-radius:2px;overflow-wrap:anywhere}.prose pre{border:1px solid var(--rule);border-radius:2px;background:var(--well);padding:18px 20px;overflow-x:auto}.prose pre code{display:block;background:none;padding:0;font-size:14px;line-height:1.6;overflow-wrap:normal;white-space:pre}.prose blockquote{border-left:2px solid var(--accent);padding-left:20px;font-style:italic;color:var(--ink-2)}.prose hr{border:0;border-top:1px solid var(--rule);margin:2.4em 0}.prose img{width:100%;border:1px solid var(--rule);border-radius:2px;margin:1.8em auto}.prose img[src$=".png"]{max-width:420px}.table-scroll{overflow-x:auto;margin:1.6em 0}.prose table{width:100%;border-collapse:collapse;font-size:16.5px;line-height:1.45}.prose th{padding:0 14px 10px 0;text-align:left;vertical-align:bottom;white-space:nowrap;font:400 12.5px/1.4 var(--mono);color:var(--ink-3);border-bottom:1px solid var(--frame)}.prose td{padding:10px 14px 10px 0;vertical-align:top;border-bottom:1px solid var(--rule)}.prose tr:last-child td{border-bottom:0}.app-hero{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:0 64px;align-items:center}.facts>div{display:grid;grid-template-columns:76px minmax(0,1fr);gap:4px 16px;padding:12px 0;border-top:1px solid var(--rule)}.facts>div:first-child{border-top:0;padding-top:0}.facts>div:last-child{padding-bottom:0}.facts dt{padding-top:3px}.facts dd{font-size:17px;line-height:1.45}.features li+li{margin-top:22px}.features h3{font:400 1.2rem/1.3 var(--serif)}.features p{margin-top:4px;color:var(--ink-2)}.app-hero .icon{width:52px;height:52px;color:var(--accent)}.app-hero .head-title{margin-top:18px;font-size:clamp(2.6rem,5vw,4.2rem)}.app-hero .summary{margin-top:20px;max-width:28em;color:var(--ink-2)}.download{margin-top:30px}.download .on-phone{display:none;padding:14px 18px;border:1px solid var(--rule);color:var(--ink-2);font-size:17px}.download .note{margin-top:12px;max-width:30em;font-size:17px;color:var(--ink-2)}.download .note a{text-decoration:underline;text-decoration-color:var(--accent);text-underline-offset:4px}.faq details+details{border-top:1px solid var(--rule)}.faq summary{display:flex;justify-content:space-between;gap:16px;padding:14px 0;cursor:pointer;list-style:none}.faq summary::-webkit-details-marker{display:none}.faq summary:after{content:"+";font:400 16px/1.6 var(--mono);color:var(--ink-3)}.faq details[open] summary:after{content:"−"}.faq details p{padding-bottom:16px;color:var(--ink-2);font-size:17px}.faq details p+p{margin-top:-6px}.faq code{font:400 13px/1.5 var(--mono);overflow-wrap:anywhere}.leaf+.leaf{margin-top:clamp(44px,5vw,64px)}.panel>.ptitle+.leaf{margin-top:0}.pager{display:grid;grid-template-columns:1fr 1fr;gap:24px 48px;margin-bottom:var(--gap)}.pager a{display:block}.pager .next{text-align:right;grid-column:2}.pager .t{display:block;margin-top:6px;font-size:18px;line-height:1.4}.pager a:hover .t{color:var(--accent)}.colophon{padding:8px 0 48px}.colophon .wrap{display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px 32px}.keys{position:fixed;inset:auto 0 0 0;z-index:20;height:var(--bar);background:var(--paper);border-top:1px solid var(--rule);font:400 13px/1 var(--mono);font-variant-numeric:normal}.keys .wrap{height:100%;display:flex;align-items:stretch;justify-content:space-between;gap:20px}.tabs{display:flex;margin-left:-12px}.tabs a{color:var(--ink-3);padding:0 12px;display:inline-flex;align-items:center;gap:7px;height:100%}.tabs a b{font-weight:600;color:var(--ink-2)}.tabs a:hover{color:var(--ink)}.tabs a:focus-visible{outline-offset:-4px}.tabs a[aria-current]{color:var(--ink);box-shadow:inset 0 2px 0 var(--accent)}.tabs a[aria-current] b{color:var(--accent)}.tabs .short{display:none}.hint{display:flex;align-items:center;gap:22px;color:var(--ink-3)}.hint kbd{font:500 12px/1 var(--mono);color:var(--ink-2);border:1px solid var(--frame);border-radius:3px;padding:3px 5px;margin-right:3px}@media (min-width: 961px){.case-top+.leaf{margin-top:72px}}@media (min-width: 961px) and (max-height: 680px){.panel.fill-short{display:grid;align-content:center;min-height:calc(100vh - var(--head) - var(--bar) - var(--page-top) - 20px)}}@media (min-width: 961px) and (max-height: 960px){.panel.fill{display:grid;align-content:center;min-height:calc(100vh - var(--head) - var(--bar) - var(--page-top) - 20px)}}@media (max-width: 1240px){:root{--gutter: 170px}.hero,.app-hero{grid-template-columns:minmax(0,1fr) 300px;gap:0 52px}}@media (min-width: 961px) and (max-height: 840px){:root{--gap: 44px}.page{--page-top: 22px}.panel{padding-top:38px}.panel.intro-panel{padding-top:32px;padding-bottom:36px}#case-studies .phead,#writing .phead{margin-bottom:40px}.posts.long{--row: 14px}.posts.long .excerpt{font-size:16px;line-height:1.5}.case-top+.leaf{margin-top:84px}.cases>li{padding:30px 0}.hero h1,.head-title{margin-top:12px}.dek{margin-top:18px}.actions{margin-top:26px}}@media (min-width: 961px) and (max-height: 680px){:root{--gap: 30px}.page{--page-top: 16px}.panel{padding-top:30px}.panel.intro-panel{padding-top:22px;padding-bottom:24px}#case-studies .phead{margin-bottom:56px}.case-top+.leaf{margin-top:114px}.cases>li{padding-top:86px}.hero h1{margin-top:8px;font-size:3.6rem}.dek{margin-top:12px}.second{margin-top:10px;line-height:1.5}.actions{margin-top:20px}.btn{padding:10px 20px}}@media (max-width: 1080px){.keys .hint{display:none}}@media (max-width: 960px){:root{--gutter: 0px}.hero,.app-hero{grid-template-columns:1fr;gap:0}.hero .box,.app-hero .box{margin-top:52px}.notes{max-width:32em}.case-top{grid-template-columns:1fr;gap:40px}.leaf,.outcome,.rows>li,.jobs>li,.skills>div,.post-grid{grid-template-columns:minmax(0,1fr)}.leaf{gap:14px}.outcome .box{grid-column:auto}.pair{grid-template-columns:1fr 1fr;gap:0 40px}.pair>:first-child{grid-column:auto}.posts li a{grid-template-columns:1fr auto}.posts .d{grid-column:1;grid-row:1}.posts .rt{grid-column:2;grid-row:1}.posts .t,.posts .body{grid-column:1 / -1}.gallery{grid-template-columns:1fr}.post-meta{display:flex;flex-wrap:wrap;gap:0 18px;padding:0 0 16px}.post-meta p+p{margin-top:0}.viewer-walk{grid-template-columns:1fr}}@media (max-width: 760px){:root{--head: 56px;--bar: 58px;--pad: 26px 20px 30px;--gap: 52px}[id]{scroll-margin-top:calc(var(--head) + 36px)}body{font-size:18px}.top nav{gap:18px;font-size:16px}.ptitle{left:12px}.panel{padding-top:40px}.panel.intro-panel{padding-top:30px;padding-bottom:32px}.box{padding:26px 20px 22px}.cases>li{grid-template-columns:1fr;gap:0;padding:66px 0}#case-studies .phead{margin-bottom:36px}.case-top{gap:60px}.case-shot{order:-1;margin-bottom:20px}.pair{grid-template-columns:1fr;gap:44px}.rows>li{padding:32px 0}.app-rows>li{padding:42px 0}.jobs>li{padding:36px 0}.posts{--row: 22px}.posts.long{--row: 18px}.posts.long .excerpt{font-size:16px;line-height:1.5}#writing .phead{margin-bottom:22px}.tabs{width:100%;margin:0 calc(var(--side) * -1)}.tabs li{flex:1}.tabs a{width:100%;flex-direction:column;justify-content:center;gap:5px;padding:0 2px;font-size:11.5px}.tabs a b{font-size:14px}.tabs .long{display:none}.tabs .short{display:inline}.download .on-phone{display:inline-block}.download .btn,.download .note{display:none}.pager{grid-template-columns:1fr}.pager .next{grid-column:1}.viewer-walk{padding:16px}}@media (max-width: 760px) and (max-height: 900px){.page{--page-top: 34px}.hero h1{margin-top:12px}.dek{margin-top:18px}.actions{margin-top:28px}}@media (max-width: 420px){.top .wrap{gap:16px}.name{font-size:17px}.top nav{gap:18px;font-size:15.5px}}@media (max-width: 370px){.top nav{gap:14px;font-size:15px}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}
