
@font-face{font-family:Satoshi;src:url(fonts/Satoshi-Light.woff2) format("woff2");font-weight:300;font-display:swap}
@font-face{font-family:Satoshi;src:url(fonts/Satoshi-Regular.woff2) format("woff2");font-weight:400;font-display:swap}
@font-face{font-family:Satoshi;src:url(fonts/Satoshi-Italic.woff2) format("woff2");font-weight:400;font-style:italic;font-display:swap}
@font-face{font-family:Satoshi;src:url(fonts/Satoshi-Medium.woff2) format("woff2");font-weight:500;font-display:swap}
@font-face{font-family:Satoshi;src:url(fonts/Satoshi-Bold.woff2) format("woff2");font-weight:700;font-display:swap}
@font-face{font-family:Satoshi;src:url(fonts/Satoshi-Black.woff2) format("woff2");font-weight:900;font-display:swap}

:root{--ink:#231f20;--pu:#6500ff;--bg:#6500ff;--paper:#fff;--max:1600px;--gap:clamp(16px,1.5vw,28px)}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--ink);font-family:Satoshi,system-ui,sans-serif;font-size:16px;line-height:1.4}
a{color:inherit;text-decoration:none;transition:color .2s ease}
html{scroll-behavior:smooth}
/* page transitions: cross-fade between pages where the browser supports it, a plain fade-in elsewhere */
@view-transition{navigation:auto}
::view-transition-old(root){animation:260ms ease-out both vt-out}
::view-transition-new(root){animation:360ms ease-in both vt-in}
@keyframes vt-out{to{opacity:0}}
@keyframes vt-in{from{opacity:0}}
@supports not (view-transition-name:none){main,.foot{animation:vt-in .5s ease-out both}}
@media (prefers-reduced-motion:reduce){::view-transition-old(root),::view-transition-new(root),main,.foot{animation:none}.tile img{transition:none}html{scroll-behavior:auto}}
img{display:block;max-width:100%;height:auto}
.page{max-width:var(--max);margin:0 auto;background:var(--paper);min-height:100vh;min-height:100dvh}
body.dark .page{background:#000}
main{max-width:var(--max);margin:0 auto;padding-block:0 var(--gap);padding-left:max(var(--gap),env(safe-area-inset-left,0px));padding-right:max(var(--gap),env(safe-area-inset-right,0px))}

/* nav */
.nav{position:sticky;top:0;z-index:10;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px var(--gap);background:rgba(255,255,255,.9);backdrop-filter:blur(8px);max-width:var(--max);margin:0 auto}
.nav .brand{font-weight:900;font-size:17px;letter-spacing:.01em}
.nav nav{display:flex;gap:4px 20px;flex-wrap:wrap;justify-content:flex-end;font-size:14px;font-weight:500}
.nav nav a.on{color:var(--pu)}
.nav nav a:hover{color:var(--pu)}
.foot{max-width:var(--max);margin:0 auto;padding:24px calc(var(--gap) + 2.401%) 40px;display:flex;justify-content:space-between;font-size:13px;color:#6b6770}

/* pages */
.pg{margin:0}
.phead{padding:clamp(20px,2.4%,34px) 2.401% 0;display:flex;align-items:baseline;gap:14px;flex-wrap:wrap}
.phead h1{margin:0;font-weight:900;color:var(--pu);font-size:clamp(20px,1.95cqw,28px)}
.phead p{margin:0;font-weight:900;font-size:clamp(14px,1.26cqw,17px)}
main{container-type:inline-size}

/* desktop sheet: exact portfolio layout */
.sheet{position:relative;width:100%;aspect-ratio:1190.5511811/841.889763778;container-type:inline-size;background:var(--paper) var(--bg) center/100% 100% no-repeat;overflow:hidden}
.sheet .nk{display:none;position:absolute;transform:translate(-50%,calc(-50% + .55em));font-weight:700;color:var(--pu);font-size:calc(var(--tfmin,16px)*.8333);line-height:1}
.tf{position:absolute;font-size:max(1.0079cqw,var(--tfmin,0px));line-height:1.2;color:var(--ink);hyphens:none;overflow-wrap:normal;white-space:normal;font-kerning:normal}
.tf.vb{display:flex;flex-direction:column;justify-content:flex-end}
.tf .in.nw{flex-shrink:0}
.tf.vc{display:flex;flex-direction:column;justify-content:center}
.tf p,.tf h1,.tf h2,.tf h3{margin:0;font-weight:400;break-inside:avoid-column}
.tf p.b{margin-top:.7083em;break-inside:auto}
.tf .in.nw p{orphans:1;widows:1}
.tf .e{min-height:1.2em}
.tf .sub{font-size:1.0833em;font-weight:700;color:var(--pu);break-after:avoid-column}
.tf p.kn{break-after:avoid-column;break-inside:avoid-column}
.tf .ttl{font-size:1.25em;font-weight:900;line-height:1.2}
.tf .sup{font-size:1.9167em;font-weight:900;color:var(--pu);text-align:center}
.tf > :first-child,.tf .in > :first-child{margin-top:0}
.it{font-style:italic}.w3{font-weight:300}.w4{font-weight:400}.w5{font-weight:500}.w7{font-weight:700}.w9{font-weight:900}
.pu{color:var(--pu)}.wh{color:#fff}.bk{color:var(--ink)}
.tabc{display:inline-block;width:2em}
.tf .num{display:inline-block;min-width:1.75em}
.tf .bul{display:inline-block;text-indent:0}

/* home sheet */
.sheet.home{aspect-ratio:auto;display:grid;grid-template-columns:auto minmax(0,1fr);gap:0 2.401cqw;padding:clamp(20px,2.4%,34px) 2.401cqw 3.366cqw;align-items:start}  /* top offset = the project header's (Ilia, 31 Oct 20:03) */
.sheet.home .portrait{height:65.9cqw;width:auto;max-width:60cqw;object-fit:contain}
.sheet.home .tf.htf{position:static;max-width:30cqw;padding-top:3cqw}
.tf p.b.t{margin-top:.25em}
.btn{display:inline-block;border:1px solid var(--pu);color:var(--pu);padding:.35em .9em;border-radius:2px;font-weight:700;font-size:.95em}
.btn:hover{background:var(--pu);color:#fff}
.dl{display:flex;flex-wrap:wrap;gap:.5em}
.muted{color:#8a8692;font-size:.9em}
.lnk{color:var(--pu);text-decoration:underline;text-underline-offset:.15em}
.lnk:hover{color:var(--ink)}
.tiles{padding:var(--gap) 2.401% 0}
.tiles .idx{font-weight:900;font-size:15px;margin:0 0 12px}
.grid{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--gap)}
.tile .im{display:block;overflow:hidden;background:#ddd}
.tile img{width:100%;aspect-ratio:1;object-fit:cover;transition:transform .6s cubic-bezier(.2,.7,.2,1)}
.tile:hover img{transform:scale(1.035)}
.tile .tt{transition:color .25s}
.tile:hover .tt{color:var(--ink)}
body.dark .tile:hover .tt{color:#fff}
.tile .tt{display:block;margin-top:10px;font-weight:900;color:var(--pu);font-size:17px}
.tile .ts{display:block;font-weight:700;font-size:13px}
.tile:hover img{filter:brightness(1.04)}

/* prev / next */
.pn{display:flex;justify-content:space-between;gap:var(--gap);padding:24px 2.401% 0}
.pn a{display:flex;flex-direction:column;font-weight:900;color:var(--pu);font-size:18px;transition:color .2s,transform .3s}
.pn a:hover{transform:translateX(4px)}
.pn a.r:hover{transform:translateX(-4px)}
.pn a.r{text-align:right}
/* dark project page (Grotesque Dimensions) */
body.dark{background:#000;color:#fff}
body.dark .nav{background:rgba(0,0,0,.9)}
body.dark .phead p{color:#fff}
body.dark .sheet{background-color:#000}
body.dark .flow{background:#000;color:#fff}
body.dark .foot{color:#9a969f}
body.dark .pn small{color:#9a969f}
.pn small{font-weight:500;font-size:12px;color:#6b6770}

/* flow: tablet and phone */
:root{--tg:clamp(24px,6vw,64px);--ig:clamp(28px,4.5vw,56px)}
/* --ig: the inner offset between an image and its text, between images, and between text columns */
/* tablet and phone: one gutter everywhere - the gap between sections equals the side margin */
.flow{display:none;background:var(--paper);padding:var(--tg) var(--tg) 0}
.flow .fg:last-child,.flow .ftx:last-child,.flow .split:last-child{margin-bottom:0}
.flow.dark{background:#000;color:#fff}
.flow .ft{margin:0 0 .8em;font-size:clamp(18px,2.4vw,22px);font-weight:900;line-height:1.15}
.flow.dark .ft{color:#fff}
.fg{margin:0 0 var(--ig,1.2em)}
.imw{position:relative}
.pinlist{display:none}.pin{position:absolute;transform:translateY(-50%);font-size:10pt;line-height:1;white-space:nowrap;color:var(--ink)}
.pin .pnum{display:inline-block;width:2.6em;color:var(--pu);font-weight:700}
.pin.cn{transform:translate(-50%,-50%);color:var(--pu);font-weight:700}
.fcap{font-size:10pt;color:var(--pu);font-weight:700;margin:.9em 0 0}
.legend.c1{columns:1}
.legend.c1 li{padding:.35em 0}
.flow.tab .split .ftx.one .legend.c1{padding-left:1.5em}
.flow.ph .pin{display:none}
.fg figcaption,.step figcaption{font-size:10pt;color:var(--pu);font-weight:700;margin-top:.5em}
.fh{font-size:13pt;font-weight:700;color:var(--pu);margin:1.1em 0 .2em}
.ftx > .fh:first-child{margin-top:0}
.fp{margin:0 0 .6em;font-size:10pt;line-height:1.45}
.fp.tight{margin:0}
.fq{font-style:italic;margin:0 0 .4em;font-size:10pt}
.fc{color:var(--pu);font-weight:500;font-size:10pt;margin:0 0 1.2em}
.fqs{color:var(--pu);margin:.5em 0 0;font-size:10pt}
.kv{margin:.5em 0 1em;padding:0;font-size:10pt;border-top:1px solid #e5e2ee}
.kvr{display:flex;justify-content:space-between;gap:16px;padding:.35em 0;border-bottom:1px solid #e5e2ee}
.kvr dt{font-weight:700;color:var(--pu);margin:0}
.kvr dd{margin:0;text-align:right}
.kvr.st{flex-direction:column;gap:.15em}.kvr.st dd{text-align:left}
.legend{columns:2;column-gap:24px;list-style:none;margin:.4em 0 1.2em;padding:0;font-size:10pt}
.legend li{padding:.15em 0;break-inside:avoid}
.legend .num{display:inline-block;min-width:1.8em;color:var(--pu);font-weight:700}
.steps{display:grid;grid-template-columns:1fr 1fr;gap:20px 24px;margin:.4em 0 1.4em}
.step{margin:0}
.step figcaption{color:var(--ink);font-weight:400;font-size:10pt;line-height:1.4}
.step figcaption b{color:var(--pu);display:block}
.temps{list-style:none;margin:.5em 0 0;padding:0;font-size:10pt}
.temps li{display:grid;grid-template-columns:14px auto 1fr;gap:.15em 10px;align-items:start;padding:.3em 0}
.temps i{width:14px;height:14px;margin-top:3px;border-radius:2px}
.temps b{color:var(--ink);white-space:nowrap}
.hero{text-align:center;padding:12vw 20px}
.hsup{font-weight:900;color:var(--pu);font-size:clamp(26px,5vw,40px);margin:0 0 .2em}
.hsub{font-weight:900;margin:0;font-size:clamp(15px,2.4vw,20px)}
.home-flow .portrait{width:100%;height:auto;margin-bottom:20px}
.home-flow .hsup{font-size:clamp(26px,5vw,34px)}

/* landscape tablets (iPad Air/Pro held sideways) keep the desktop sheets at true 10 pt with the shortened copy (Ilia, 31 Oct) */
.tlrow{display:none}.tf.land{display:none}
.tf.land .seg{break-inside:avoid-column}
.tf.land .seg + .seg{margin-top:.5903em}.tf.land .in.g > .seg{margin-top:0}  /* the desktop gap between blocks: one paragraph space (Ilia, 31 Oct) */
.tf.land .seg > .sub:first-child{margin-top:0}
.tf.land .sub.k{font-size:.8333em}
.sheet .kb{display:none;position:absolute}
@media (min-width:1180px) and (max-width:1586px) and (orientation:landscape) and (pointer:coarse){
  .sheet{--tfmin:16px;background-image:var(--bgk,var(--bg))}
  .sheet .nk{display:block}
  .sheet .kb{display:block}
  .tf.full{display:none!important}
  .tf.land{display:block}
  .tf.land.vb{display:flex}
  .tf.land.vc{display:flex}
  .tf.lbl{white-space:nowrap}
  .tf .ttl{font-size:calc(var(--tfmin,16px)*1.3)}
  .tlrow{display:block;position:relative;z-index:2;background:var(--paper)}
  .tlrow p{margin:0;padding:0 2.352%;font-weight:900;font-size:20.8px;line-height:1.2;color:var(--ink)}
}
@media (max-width:1179px), (max-width:1199px) and (orientation:portrait), (max-width:1199px) and (pointer:fine), (max-width:1199px) and (pointer:none){
  .sheet,.sheet.home{display:none}
  .flow.tab,.flow.home-flow{display:block}
  .phead{padding:var(--tg) var(--tg) 0}
  .tiles{padding:var(--tg) var(--tg) 0}
  .pn{padding:var(--tg) var(--tg) 0}
  .foot{padding:var(--tg)}
  .flow .ft{margin-bottom:calc(var(--tg) * .5)}
  .flow.tab .srow{margin-bottom:var(--tg)}
  .flow.tab .figrow,.flow.tab .figgrid,.flow.tab .trow{margin-bottom:var(--ig)}
  .flow.tab .ftx{columns:2;column-gap:var(--ig)}
  .flow.tab .ftx .fh{break-after:avoid}
  .flow.tab .ftx .sec{break-inside:avoid}
  .flow.tab .ftx .sec .fh:first-child{margin-top:0}
  .flow.tab .ftx .sec{margin-top:1.1em}
  .flow.tab .ftx > .sec:first-child{margin-top:0}
  .flow.tab .ftx .fp,.flow.tab .ftx .fq,.flow.tab .ftx .fqs{break-inside:avoid}
  .flow.tab .ftx .legend,.flow.tab .ftx .fg{break-inside:avoid;column-span:all}
  .flow.tab .ftx .kv{break-inside:avoid}
  .flow.tab .ftx .legend{columns:2}
  .flow.tab .trow{display:grid;grid-template-columns:7fr 5fr;gap:var(--ig);align-items:start;margin:0 0 var(--ig)}
  .flow.tab .trow .fg{margin:0}
  .flow.tab .trow .tcol .fg{margin:var(--ig) 0 0;max-width:min(100%,360px)}
  .flow.tab .ftx.one{columns:1}
  .flow.tab .figrow{display:flex;gap:var(--ig);align-items:flex-start;margin:0 0 var(--ig)}
  .flow.tab .figrow .fcell{min-width:0}
  .flow.tab .figrow .fg{margin:0}
  .flow.tab .figrow .fg img{width:100%}
  .flow.tab .tcol .temps,.flow.tab .tcol .legend{margin-top:var(--ig)}
  .flow.tab .split{display:grid;gap:var(--ig);align-items:start}
  .flow.tab .ovl{position:relative}
  .flow.tab .ovl .ovl-txt{position:absolute;right:0;bottom:0;width:44%;margin:0}
  .flow.tab .ovl .legend{columns:1;margin:0}
  /* two spacings on the tablet (Ilia, 31 Oct): sections sit 1.5 gutters apart, every image/text block --ig apart */
  .flow.tab{padding-top:calc(var(--tg) * 1.5)}
  .pg:first-child .flow.tab,.pg:first-of-type .flow.tab{padding-top:var(--tg)}
  .flow.tab > :last-child{margin-bottom:0}
  .flow.tab .srow{margin:0 0 var(--ig)}
  .flow.tab .srow:last-child{margin-bottom:0}
  .flow.tab .split .half > :last-child{margin-bottom:0}
  .flow.tab .steps{margin:0 0 var(--ig)}
  .flow.tab .split .half{min-width:0}
  .flow.tab .split .fg{margin:0 0 var(--ig)}
  .flow.tab .split .ftx{margin:0 0 var(--ig)}
  .flow.tab .split .ftx.one{columns:1}
  .flow.tab .ftx .legend.c1{columns:1}
  /* a one-column key takes the row pitch (31 pt) and number gap (32 pt) of the build-up detail's printed key at 84% width */
  .flow.tab .legend li{padding:0;height:calc(.0469*(100vw - 2*var(--tg)));display:flex;align-items:center}
  .flow.tab .legend .num{min-width:2.6em}
  .flow.tab .split .ftx.one .legend{padding-left:1.5em}
  /* a temperature key alone beside a figure spreads over the figure's height, as on the printed page */
  .flow.tab .split .half:has(> .ftx.one > .temps:only-child){align-self:stretch;display:flex}
  .flow.tab .split .ftx.one:has(> .temps:only-child){flex:1;display:flex;flex-direction:column;justify-content:space-around;margin:0 0 var(--ig)}
  .flow.tab .split .ftx.one > .temps:only-child{margin:0;flex:1;display:flex;flex-direction:column;justify-content:space-around}
  .flow.tab .srow > .ftx.one > .temps{columns:2;column-gap:var(--ig)}
  .flow.tab .srow > .ftx.one > .temps li{break-inside:avoid;grid-template-columns:14px 1fr;padding:.3em 0 .6em}
  .flow.tab .srow > .ftx.one > .temps li span{grid-column:2}
  .flow.tab .split .ftx.one > .temps li{grid-template-columns:14px 1fr}
  .flow.tab .split .ftx.one > .temps li span{grid-column:2}
  .flow.tab .figgrid{display:grid;grid-template-columns:1fr 1fr;gap:var(--ig);align-items:end;margin:0 0 var(--ig)}
  .flow.tab .figgrid .fg{margin:0}
  .flow.home-flow{display:grid;grid-template-columns:1fr 1fr;gap:0 32px;align-items:start}
  .home-flow .portrait{grid-row:1/span 40;margin:0}
  .grid{grid-template-columns:repeat(2,1fr)}
  .nav .brand{font-size:16px}
}
@media (min-width:1200px), (min-width:1180px) and (orientation:landscape) and (pointer:coarse){
  .flow{display:none!important}
}
/* tablet held portrait: the main figure runs full width and the text follows in two columns */
@media (min-width:640px) and (max-width:899px){
  .flow.tab .trow{display:block}
  .flow.tab .trow .fg.main{margin:0 0 var(--ig)}
  .flow.tab .trow .tcol .ftx.one{columns:2;column-gap:var(--ig)}
  .flow.tab .trow .tcol .fg{max-width:min(100%,440px);margin:var(--ig) 0 0}
  .flow.tab .trow .tcol .fg img{width:100%}
  .flow.tab .tcol.has-under{display:grid;grid-template-columns:2fr 3fr;gap:var(--ig);align-items:center}
  .flow.tab .tcol.has-under .fg{grid-column:1;grid-row:1;margin:0;max-width:none}
  .flow.tab .tcol.has-under .ftx.one{grid-column:2;grid-row:1;columns:1}
  .flow.tab .tcol.has-under .temps,.flow.tab .tcol.has-under .legend{grid-column:1/-1}
  .flow.tab .figrow{display:block}
  .flow.tab .figrow .fcell{margin:0 0 var(--ig)}
  .flow.tab .figrow .fcell:last-child{margin-bottom:0}
  /* three figures: the two drawings share a row, the detail runs large beneath */
  .flow.tab .figrow.n3{display:flex;flex-wrap:wrap;gap:var(--ig)}
  .flow.tab .figrow.n3 .fcell{margin:0}
  .flow.tab .figrow.n3 .fcell:last-child{flex:0 0 100%!important}
  .flow.tab .figrow.n3 .fcell:last-child .fg{max-width:76%}
}
/* portrait tablets only (Ilia, 31 Oct 19:50: 'just vertical orientation') */
@media (min-width:640px) and (max-width:1199px) and (orientation:portrait){
  /* opening pages: the quote and its source stay in the left column and both text columns start under them (Ilia, 31 Oct 20:19) */
  .flow.tab .ftx > .fq,.flow.tab .ftx > .fc{column-span:all;max-width:calc((100% - var(--ig)) / 2)}
  .flow.tab .ftx > .fc + .sec{margin-top:0}
  /* Woodland composition (Ilia, 31 Oct 20:25): both texts sit one --ig from the room key: the
     Stepped ground text at the foot of the axo row, the Gradual encounter text right under the key */
  #p20 .flow.tab .srow:has(+ .srow .legend) > .split{align-items:stretch}
  #p20 .flow.tab .srow:has(+ .srow .legend) > .split > .half:last-child{display:flex;flex-direction:column;justify-content:flex-end}
  #p20 .flow.tab .srow:has(+ .srow .legend) > .split > .half:last-child > :last-child,
  #p20 .flow.tab .srow:has(+ .srow .legend) > .split > .half:last-child .ftx > :last-child{margin-bottom:0}
  #p20 .flow.tab .split .half .ftx > .legend:first-child{margin-top:calc((16px - .0469*(100vw - 2*var(--tg))) / 2);margin-bottom:0}
  #p20 .flow.tab .split .half .ftx > .legend + .sec{margin-top:calc(var(--ig) - (.0469*(100vw - 2*var(--tg)) - 16px) / 2)}
  /* 'Detail' headings and the Nest detail at the end of Modular Logic, as on phones (Ilia, 31 Oct 19:51) */
  .flow.tab .ft.ph-dt{display:block;margin-top:47px}
  .flow.tab .fg.pe-x{display:none!important}
  .flow.tab .fg.ph-end{display:block!important;width:84%}
  .flow.tab .fg:has(img[src*="p19-u66e1"]){padding-top:24px}  /* more headspace above the vault-street render (Ilia, 31 Oct 19:53) */
  .flow.tab .fg.tbleed{width:100vw!important;max-width:none!important;margin-left:calc(50% - 50vw)!important;margin-right:0!important}
  .flow.tab .fg.tbleed-t{width:calc(100vw - 8px)!important;max-width:none!important;margin-left:calc(50% - 50vw + 4px)!important;margin-right:0!important}
  .flow.tab .fg.tbleed figcaption{padding:0 calc(var(--tg) + max(var(--gap),env(safe-area-inset-left,0px)))}
}
@media (min-width:640px) and (max-width:1199px){
  /* tablet portrait spacing matched to the landscape sheets as the iPad shows them (Ilia, 31 Oct 17:39): side offset 45px
     (18px gap + 28 pt page margin), 47px between a page's content and the next title (48 pt), 29px title to content (30 pt), 20.8px titles */
  :root{--tg:45px}
  .flow.tab{padding-top:47px}
  .pg:first-child .flow.tab,.pg:first-of-type .flow.tab{padding-top:45px}
  .flow .ft{margin-bottom:29px;font-size:20.8px}
}
.fg.ph-copy{display:none!important}
.phbr{display:none}
.flow .ft.ph-dt{display:none}
@media (max-width:639px){
  /* phones show the tablet flow (same copy, blocks and keys) stacked in one column (Ilia, 31 Oct 17:44: "make the phone version same as vertical tablet") */
  .flow.tab{display:block;padding-top:72px}
  /* one gap above every page title: nothing trailing at the end of a page adds to it (Ilia, 31 Oct 19:24) */
  .pg .flow.tab > :last-child,.pg .flow.tab > :last-child > :last-child,.pg .flow.tab > :last-child > :last-child > :last-child,.pg .flow.tab > :last-child > :last-child > :last-child > :last-child,.pg .flow.tab > :last-child > :last-child > :last-child > :last-child > :last-child,.pg .flow.tab > :last-child > :last-child > :last-child > :last-child > :last-child > :last-child,.pg .flow.tab > :last-child > :last-child > :last-child > :last-child > :last-child > :last-child > :last-child{margin-bottom:0!important;padding-bottom:0!important}
  .pg:first-child .flow.tab,.pg:first-of-type .flow.tab{padding-top:24px}
  .flow.ph{display:none}
  .flow .ft{font-size:19px;margin-bottom:20px}
  .flow.tab .ftx,.flow.tab .trow .tcol .ftx.one,.flow.tab .srow > .ftx.one > .temps{columns:1}
  .flow.tab .split,.flow.tab .figgrid,.flow.tab .tcol.has-under,.flow.tab .trow{display:block}
  .flow.tab .figrow,.flow.tab .figrow.n3{display:block}
  .flow.tab .fcell{flex:none;width:100%}
  .flow.tab .fg,.flow.tab .fg.main,.flow.tab .trow .tcol .fg,.flow.tab .figrow.n3 .fcell:last-child .fg{width:100%!important;max-width:100%!important;margin-left:0!important;margin-right:0!important}
  .flow.tab .split > *,.flow.tab .figgrid > *,.flow.tab .tcol.has-under > *,.flow.tab .fcell{margin:0 0 var(--ig)}
  .flow.tab .split .fg,.flow.tab .split .ftx,.flow.tab .trow .fg.main,.flow.tab .trow .tcol .fg{margin:0 0 var(--ig)}
  .flow.tab .pin:not(.cn){display:none}
  .flow.tab .ph-x{display:none!important}
  .flow.tab .fg.bleed{width:100vw!important;max-width:none!important;margin-left:calc(50% - 50vw)!important;margin-right:0!important}
  .flow.tab .fg.bleed-l{width:99.06vw!important;max-width:none!important;margin-left:calc(50% - 50vw)!important;margin-right:0!important}
  .flow.tab .fg.bleed-t{width:calc(100vw - 8px)!important;max-width:none!important;margin-left:calc(50% - 50vw + 4px)!important;margin-right:0!important}
  .flow.tab .fg.bleed figcaption,.flow.tab .fg.bleed-l figcaption,.flow.tab .fg.bleed-t figcaption{padding:0 calc(var(--tg) + max(var(--gap),env(safe-area-inset-left,0px)));margin-top:.6em!important}
  .flow.tab .fg[style*="margin-bottom:-"]{margin-bottom:var(--ig)!important}
  .flow.tab .phbr{display:inline}
  .flow.tab .phdot{display:none}
  .flow.tab .ft.ph-dt{display:block;margin-top:64px}
  /* Nest Planar Logic: its three texts sit in separate blocks; on phones they keep the normal subtitle gap (Ilia, 31 Oct 19:39) */
  #p4 .flow.tab .srow:not(:last-child) .half:has(> .ftx:only-child),#p4 .flow.tab .srow:last-child .half:not(:last-child):has(> .ftx:only-child){margin-bottom:10px!important}
  #p4 .flow.tab .srow:not(:last-child):has(.half > .ftx:only-child){margin-bottom:10px!important}
  /* a little more air above the Woodland vault-street render (Ilia, 31 Oct 19:40) */
  .flow.tab .fg.bleed:has(img[src*="p19-u66e1"]){padding-top:16px}
  .flow.tab .fg.ph-copy{display:block!important}
  .flow.tab .pinlist{display:grid;grid-template-columns:auto 1fr;gap:.35em 1.2em;list-style:none;margin:var(--ig) 0 0;padding:0;font-size:10pt;line-height:1.3;color:var(--ink)}
  .flow.tab .pinlist li{display:contents}
  .flow.tab .pinlist b{color:var(--pu);font-weight:700}
  .flow.tab .legend li{height:auto;padding:.3em 0}
  .flow.tab .srow > .ftx.one > .temps li{padding:.3em 0}
  .grid{grid-template-columns:1fr}
  .legend{columns:1}
  .steps{grid-template-columns:1fr}
  .nav{padding:10px 12px}
  .nav nav{gap:2px 12px;font-size:13px}
  .pn a{font-size:16px}
  .hero{padding:20vw 16px}
  .flow.home-flow{display:block}
  .home-flow .portrait{margin-bottom:20px}
}/* dissertation page: one reading column at 10 pt, offsets as the project headers */
.diss{padding:clamp(20px,2.4%,34px) 2.401% 0;max-width:calc(40em + 4.802%);font-size:10pt;line-height:1.5}
.diss .dmeta{margin:0 0 56px;color:#6b6770}
.diss h2{margin:56px 0 18px;font-size:clamp(18px,2.4vw,22px);font-weight:900;line-height:1.15;scroll-margin-top:72px}
.diss h3{margin:28px 0 6px;font-size:13pt;font-weight:700;color:var(--pu);line-height:1.25}
.diss h2 + h3,.diss .dmeta + h2{margin-top:0}
.diss p{margin:0 0 .75em}
.diss p.stm{font-weight:900;color:var(--pu);font-size:13pt;line-height:1.3;margin:0 0 .6em}
.diss .fref{color:var(--pu);font-weight:500;white-space:nowrap}
.diss .fref:hover{color:var(--ink)}
.diss p.bib{padding-left:2em;text-indent:-2em;overflow-wrap:anywhere}
.diss .dfig{margin:0 0 40px;scroll-margin-top:72px}
.diss .dfig img{width:100%}
.diss .dfig.tall img{width:auto;max-height:80vh;max-width:100%}
.diss .dfig figcaption{margin-top:8px;font-size:10pt}
.diss .dfig figcaption b{color:var(--pu);margin-right:.4em}
@media (max-width:1179px), (max-width:1199px) and (orientation:portrait), (max-width:1199px) and (pointer:fine), (max-width:1199px) and (pointer:none){
  .diss{padding:var(--tg) var(--tg) 0;max-width:calc(40em + 2 * var(--tg))}
}

