*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:#fafafa;color:#17191c;font:17px/1.65 Arial,Helvetica,sans-serif}a{color:inherit;text-decoration:none}a:hover{text-decoration:underline;text-underline-offset:5px}a:focus-visible,button:focus-visible{outline:3px solid #315cf5;outline-offset:5px}header,main,footer{max-width:1240px;margin:auto;padding:0 48px}header{height:104px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #dedfe2}header a.brand{font-weight:700;letter-spacing:-.6px}nav{display:flex;gap:30px;font-size:15px}.eyebrow{font-size:13px;text-transform:uppercase;letter-spacing:1.7px;font-weight:600;color:#62676d}.hero{padding:96px 0 80px;display:grid;grid-template-columns:1.6fr 1fr;gap:70px;align-items:end}h1,h2,h3,p{margin-top:0}h1{font-size:clamp(44px,6.4vw,82px);line-height:1.04;letter-spacing:-4px;font-weight:500;margin:22px 0 0}h1 em{font-family:Georgia,serif;font-weight:400}h2{font-weight:500;font-size:38px;line-height:1.15;letter-spacing:-1.4px}h3{font-size:23px;line-height:1.3;letter-spacing:-.5px;font-weight:500}.intro{font-size:19px;color:#555c63;max-width:380px}.sectionline{display:flex;justify-content:space-between;align-items:baseline;border-top:1px solid #d6d9de;padding:24px 0;margin-top:20px;font-size:14px;color:#666}.project{margin-bottom:70px}.projecttop{display:flex;justify-content:space-between;gap:30px;align-items:end;margin:24px 0}.projecttop h2{font-size:30px;margin:8px 0}.projecttop p{color:#646970;margin:0;max-width:500px}.tag{border:1px solid #cbd0d6;border-radius:30px;padding:7px 15px;font-size:14px;white-space:nowrap}.visual{display:flex;justify-content:center;align-items:center;gap:40px;height:590px;border-radius:7px;background:#e8ebef;overflow:hidden;position:relative}.visual .phone{width:235px;height:auto;border-radius:25px;box-shadow:0 24px 45px #10192625;transition:transform .3s}.visual .phone:first-child{transform:translateY(35px) rotate(-5deg)}.visual .phone:last-child{transform:translateY(-5px) rotate(5deg)}.visual:hover .phone{transform:translateY(0) rotate(0)}.visual .corner{position:absolute;left:32px;top:28px;font-size:14px;color:#626970}.grid{display:grid;grid-template-columns:1fr 1fr;gap:36px}.secondary{padding:34px;background:#eff0f2;min-height:255px;border-radius:7px;display:flex;flex-direction:column;justify-content:space-between}.secondary.blue{background:#e8edf9}.bigmetric{font-size:62px;line-height:1;letter-spacing:-3px}.secondary p{font-size:16px;color:#555c63;margin:12px 0 0}.about{display:grid;grid-template-columns:1fr 1.3fr;gap:90px;padding:80px 0;border-top:1px solid #d6d9de}.about p{color:#555c63}.role{display:flex;justify-content:space-between;gap:15px;border-top:1px solid #d6d9de;padding:15px 0;font-size:15px}.role span{color:#6b7076}footer{padding-top:60px;padding-bottom:40px;border-top:1px solid #d6d9de}footer h2{font-size:46px}footer .footlinks{display:flex;gap:28px;margin:30px 0;font-size:16px}footer .bottom{color:#6b7076;font-size:13px;display:flex;justify-content:space-between}.casehero{padding:72px 0 50px}.casehero h1{max-width:950px;font-size:clamp(42px,5.5vw,70px);margin-bottom:30px}.lede{max-width:740px;font-size:23px;line-height:1.5;color:#555c63}.facts{display:grid;grid-template-columns:repeat(4,1fr);gap:25px;border-top:1px solid #d6d9de;margin:45px 0 0;padding:24px 0}.facts b{display:block;font-size:12px;color:#686f77;letter-spacing:1px;text-transform:uppercase;margin-bottom:6px}.facts span{font-size:15px}.casesection{display:grid;grid-template-columns:1fr 2fr;gap:80px;padding:64px 0;border-bottom:1px solid #d6d9de}.casesection h2{font-size:30px}.casesection p{color:#4d555e}.casesection p:last-child{margin-bottom:0}.decision{font:28px/1.4 Georgia,serif;border-left:2px solid #2e3747;padding-left:26px;margin:30px 0}.steps{display:grid;grid-template-columns:repeat(3,1fr);gap:24px;margin:30px 0}.step{border-top:2px solid #343b44;padding-top:18px}.step strong{display:block;font-size:16px}.step span{font-size:15px;color:#5c646d}.state{border-top:1px solid #d6d9de;padding:16px 0;display:grid;grid-template-columns:170px 1fr;gap:20px}.state span{color:#58616b;font-size:16px}.gallery{background:#e8ebef;padding:55px 30px;border-radius:7px;display:flex;justify-content:center;gap:70px}.gallery figure{margin:0;width:282px}.gallery img{width:100%;display:block;border-radius:23px;box-shadow:0 18px 32px #1019261a}.gallery figcaption{font-size:14px;color:#525c67;margin-top:20px}.widefigure{margin:40px 0}.widefigure img{width:100%;border:1px solid #dde0e4;border-radius:6px}.widefigure figcaption{font-size:14px;color:#656d75;margin-top:10px}.next{padding:60px 0}.next a{font-size:28px}.note{font-size:14px;color:#5f666e}.textlink{text-decoration:underline;text-underline-offset:4px}@media(max-width:760px){header,main,footer{padding-left:22px;padding-right:22px}header{height:80px}nav{gap:18px}nav .optional{display:none}.hero{padding:58px 0;grid-template-columns:1fr;gap:30px}h1{letter-spacing:-2px}.intro{max-width:100%}.visual{height:410px;gap:20px}.visual .phone{width:155px;border-radius:17px}.visual .corner{left:20px;top:15px;font-size:12px}.projecttop{display:block}.projecttop h2{font-size:27px}.projecttop .tag{display:inline-block;margin-top:15px}.grid,.about,.casesection{grid-template-columns:1fr;gap:25px}.about{padding:50px 0}.facts{grid-template-columns:1fr 1fr}.casesection{padding:40px 0}.steps{grid-template-columns:1fr}.gallery{gap:22px;padding:30px 15px}.gallery figure{width:45%}.gallery img{border-radius:14px}.gallery figcaption{font-size:13px}.state{grid-template-columns:1fr;gap:5px}.lede{font-size:20px}footer h2{font-size:36px}.casehero{padding-top:45px}footer .bottom{display:block}.secondary{min-height:220px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.visual .phone{transition:none}}
.docpair{display:grid;grid-template-columns:1fr 1fr;gap:24px;align-items:start}.docpair .widefigure{margin:20px 0}.docpair img{max-height:700px;object-fit:contain;background:#d9d9df}.casehero+.widefigure{margin-top:0}@media(max-width:760px){.docpair{gap:12px}}
.recipientfigure{margin:30px 0;background:#e8ebef;padding:35px;text-align:center;border-radius:7px}.recipientfigure img{width:282px;max-width:100%;border-radius:23px}.recipientfigure figcaption{font-size:14px;color:#555e68;margin-top:18px}.gallery img{cursor:zoom-in}.hero h1 em{white-space:normal}
/* Portfolio structure */
.portfoliointro{padding:64px 0 52px;max-width:850px}.portfoliointro h1{font-size:clamp(44px,6vw,76px);font-weight:600;letter-spacing:-3px;line-height:1.08;margin:0 0 16px}.portfoliointro h2{font-size:25px;letter-spacing:-.4px;margin:0 0 22px;color:#525a62}.portfoliointro>p{font-size:19px;max-width:690px;color:#4d555e;margin-bottom:24px}.contactlinks{display:flex;flex-wrap:wrap;gap:12px 28px;font-size:16px;margin:18px 0 26px}.contactlinks a{text-decoration:underline;text-underline-offset:4px;overflow-wrap:anywhere}.selectedwork{border-top:1px solid #d6d9de;padding:32px 0 65px}.selectedwork>h2{font-size:27px;letter-spacing:-.7px;margin:0 0 28px}.projectgrid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:28px}.projectcard a{display:block;height:100%;text-decoration:none}.cardimage{height:290px;background:#e7e9ed;border-radius:8px;overflow:hidden;display:flex;align-items:center;justify-content:center;padding:20px;transition:background .2s}.projectcard a:hover .cardimage{background:#dbe0e7}.previewphones{display:flex;gap:16px;align-items:center;justify-content:center;width:100%;height:100%}.previewphones img{height:235px;width:auto;max-width:46%;object-fit:contain;border-radius:12px;box-shadow:0 9px 18px #14213518}.previewwide{width:100%;height:100%;object-fit:contain}.cardcopy{padding:20px 0 0}.projectmeta{font-size:14px;color:#6b7178;margin:0 0 10px}.cardcopy h3{font-size:24px;margin:0 0 12px;line-height:1.25}.cardcopy>p:not(.projectmeta){font-size:16px;line-height:1.55;color:#5a626a;margin:0 0 20px}.readcase{font-size:15px;text-decoration:underline;text-underline-offset:5px}.projectcard a:hover h3{text-decoration:underline;text-underline-offset:5px}.casehero h1{font-size:clamp(40px,5vw,64px);letter-spacing:-2px;line-height:1.1}.flowsection{padding:50px 0;border-bottom:1px solid #d6d9de}.flowsection h2{font-size:30px}.flowsection>p{max-width:760px;color:#525b63}.flowsteps{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:24px;counter-reset:flow;padding:0;list-style:none;margin:30px 0 40px}.flowsteps li{border-top:2px solid #343b44;padding-top:14px}.flowsteps li::before{counter-increment:flow;content:counter(flow,decimal-leading-zero);display:block;color:#5f666e;font-size:14px;margin-bottom:10px}.flowsteps b{font-size:17px}.flowsteps p{font-size:16px;color:#525b63;margin:8px 0}.casesection .decision{font:inherit}.gallery img{cursor:default}footer h2{font-size:30px;letter-spacing:-.7px;margin-bottom:18px}footer>p{color:#515961}.about h2{font-size:32px}@media(max-width:1000px){.projectgrid{grid-template-columns:repeat(2,minmax(0,1fr))}.cardimage{height:310px}}@media(max-width:650px){.portfoliointro{padding:42px 0}.portfoliointro h1{letter-spacing:-1.8px}.portfoliointro h2{font-size:22px}.portfoliointro>p{font-size:17px}.projectgrid{grid-template-columns:1fr;gap:42px}.cardimage{height:300px}.previewphones img{height:255px}.flowsteps{grid-template-columns:1fr}.contactlinks{gap:10px 22px}.cardcopy h3{font-size:25px}.selectedwork{padding-bottom:48px}}
.processsection{margin:70px 0}.processsection>h2{font-size:36px;letter-spacing:-1px}.processgrid{display:grid;grid-template-columns:1fr 1fr;gap:32px}.processgrid p{font-size:18px;line-height:1.6}.processgrid .widefigure{margin:24px 0;padding:0;background:transparent}.processgrid img{width:100%}@media(max-width:700px){.processgrid{grid-template-columns:1fr}}

.screenflow{padding:56px 0;border-top:1px solid var(--line,#dedede)}.screenflow>h2{font-size:36px;letter-spacing:-1px;margin:10px 0 20px}.screenflow>p:not(.eyebrow){max-width:760px;font-size:19px;line-height:1.6}.screenrow{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin-top:32px}.screenrow figure{margin:0;padding:28px 22px;background:#efeff1;border-radius:12px}.screenrow img{width:100%;max-width:281px;height:auto;display:block;margin:0 auto;border-radius:20px}.screenrow figcaption{font-size:15px;line-height:1.55;color:#555b60;margin-top:24px}.screenrow figcaption strong{display:block;font-size:18px;color:#191b1d;margin-bottom:8px}.intro{padding-top:48px;padding-bottom:48px}.intro h1{font-size:clamp(48px,6.5vw,80px)}@media(max-width:700px){.screenrow{grid-template-columns:1fr}.screenrow figure{max-width:420px;width:100%;margin:auto;box-sizing:border-box}.screenflow>h2{font-size:30px}}

header{height:84px}.portfoliointro{padding:44px 0 28px}.portfoliointro h1{font-size:clamp(44px,5.5vw,68px)}.portfoliointro>p{max-width:750px}.cardcopy{display:flex;flex-direction:column;flex:1}.projectcard>a{display:flex;flex-direction:column}.readcase{margin-top:auto}.projectmeta,.cardcopy h3,.cardcopy>p{flex:none}@media(max-width:650px){header{height:76px}.portfoliointro{padding:36px 0 24px}}

/* Personal introduction and project covers */
.introcopy span{display:block;text-wrap:pretty}.introcopy span:last-child{white-space:nowrap}
.cardimage{height:320px;isolation:isolate;position:relative;transition:background .4s}
.cardimage.cover-returns{background:#e5e9f8}.cardimage.cover-documents{background:#f3e6df}.cardimage.cover-analytics{background:#dceee9}
.previewphones{gap:12px;perspective:800px}.previewphones img{height:257px;max-width:47%;box-shadow:0 18px 25px #26305425;transition:transform .65s cubic-bezier(.2,.7,.2,1),box-shadow .65s;will-change:transform}
.previewphones img:first-child{transform:translateY(13px) rotate(-7deg)}.previewphones img:last-child{transform:translateY(-10px) rotate(7deg)}
.projectcard a:is(:hover,:focus-visible) .previewphones img:first-child{transform:translate(-3px,-4px) rotate(-3deg)}.projectcard a:is(:hover,:focus-visible) .previewphones img:last-child{transform:translate(3px,5px) rotate(3deg)}
.document-stack{display:flex;justify-content:center;align-items:center;gap:14px;width:100%;height:100%}.docscreen{position:relative;height:270px;overflow:hidden;border-radius:11px;box-shadow:0 18px 28px #593b302b;flex-shrink:0;transition:transform .65s cubic-bezier(.2,.7,.2,1)}.doc-entry{width:92px;transform:translateY(12px) rotate(-8deg)}.doc-list{width:122px;transform:translateY(-6px) rotate(7deg)}.docscreen img{position:absolute;max-width:none}.doc-entry img{width:265%;height:177.6%;left:-18.7%;top:-20.15%}.doc-list img{width:143.3%;height:140.9%;left:-20.8%;top:-25.7%}.projectcard a:is(:hover,:focus-visible) .doc-entry{transform:translateY(0) rotate(-3deg)}.projectcard a:is(:hover,:focus-visible) .doc-list{transform:translateY(4px) rotate(3deg)}
.desktop-stack{width:100%;height:100%;position:relative}.desktop-stack img{position:absolute;width:97%;height:255px;object-fit:cover;object-position:top;border-radius:7px;box-shadow:0 18px 28px #173f3533;transition:transform .65s cubic-bezier(.2,.7,.2,1)}
.desktop-stack .analytics-back{left:0;top:8px;transform:translate(-10px,0) rotate(-8deg)}.desktop-stack .analytics-front{left:10px;top:36px;transform:translate(9px,0) rotate(5deg)}
.projectcard a:is(:hover,:focus-visible) .analytics-front{transform:translate(4px,-9px) rotate(1deg)}.projectcard a:is(:hover,:focus-visible) .analytics-back{transform:translate(-14px,-6px) rotate(-11deg)}
.teaching{padding:64px 0;display:grid;grid-template-columns:1fr 1.3fr;gap:90px;border-top:1px solid #dedfe2}.teaching h2{font-size:32px}.teaching p{font-size:20px}.teachingnames{display:flex;flex-wrap:wrap;gap:14px 32px;font-weight:600}.teachingnames span{border-bottom:1px solid #c5c8ce;padding-bottom:10px}
@media(max-width:760px){.teaching{grid-template-columns:1fr;gap:25px;padding:42px 0}}
@media(prefers-reduced-motion:reduce){.cardimage,.previewphones img,.docscreen,.desktop-stack img{transition:none!important}}

/* Typography, accessible targets and annotated case images */

nav a,.contactlinks a{display:inline-flex;align-items:center;min-height:44px;padding:8px 0}
.portfoliointro .position{max-width:720px;margin-bottom:18px}.portfoliointro .location{font-size:14px;color:#5f666e;margin:0 0 8px}
.teachingrole p{font-size:16px;line-height:1.6;margin:0 0 24px;color:#555c63}.teachingrole .role{padding-bottom:8px}.teachingrole .role span{white-space:nowrap}
.annotated-image{position:relative;width:100%}.annotated-image>a{display:block}.annotated-image img{display:block;width:100%;height:auto;max-height:none}
.screenrow .annotated-image{max-width:281px;margin:auto}
.callout-pin{position:absolute;transform:translate(-50%,-50%);width:25px;height:25px;border-radius:50%;background:#17191c;color:white;border:2px solid white;display:grid;place-items:center;font:700 13px/1 Arial,sans-serif;box-shadow:0 1px 6px #0003;pointer-events:none}
.callout-notes{list-style:none;counter-reset:callout;padding:0;margin:16px 0 0;display:grid;gap:10px;color:#4d555e;font-size:14px;line-height:1.5}
.callout-notes li{counter-increment:callout;position:relative;padding-left:29px}.callout-notes li:before{content:counter(callout);position:absolute;left:0;top:1px;width:20px;height:20px;border-radius:50%;background:#17191c;color:#fff;text-align:center;font:700 12px/20px Arial,sans-serif}
.swipe-hint{display:none}.flow-scroll{border-radius:6px}.notfound{padding:100px 0 140px}.notfound h1{margin-bottom:30px}
@media(max-width:650px){.docpair{grid-template-columns:minmax(0,1fr);gap:24px}.docpair .widefigure{width:100%;margin:0}.flow-scroll{overflow-x:auto;overscroll-behavior-x:contain;-webkit-overflow-scrolling:touch}.flow-scroll .annotated-image{width:max-content;max-width:none;height:400px}.flow-scroll .annotated-image img{height:400px;width:auto;max-width:none}.swipe-hint{display:block;font-size:14px;color:#5f666e;margin:8px 0}.teachingrole .role{flex-wrap:wrap}.callout-pin{width:23px;height:23px;font-size:12px}}

/* Fourth case and downloadable CV */
.projectgrid{grid-template-columns:repeat(2,minmax(0,1fr))}.cover-sharing{background:#e9e7f2}.cover-sharing img{width:92%;height:100%;object-fit:contain;border-radius:8px;transform:rotate(-3deg);transition:transform .5s}.projectcard a:is(:hover,:focus-visible) .cover-sharing img{transform:rotate(0)}.sharingfigure{max-width:840px;margin:36px auto}.sharingfigure .annotated-image>a>img{border:0}.sharingfigure:has(img[src$="sharing-themes.png"]){max-width:560px}.processgrid .sharingfigure{width:100%}
@media(max-width:650px){.projectgrid{grid-template-columns:1fr}header{height:auto;min-height:84px;flex-wrap:wrap;gap:0 16px;padding-top:10px;padding-bottom:10px}nav{gap:16px;font-size:14px}.sharingfigure{margin:28px 0}}
@media(prefers-reduced-motion:reduce){.cover-sharing img{transition:none}}

.sharingfigure:has(img[src$="sharing-android.png"]),.sharingfigure:has(img[src$="sharing-save.png"]){max-width:620px}.sharingfigure:has(img[src$="sharing-themes.png"]){max-width:440px}

/* Keep short words with their phrase and balance the final lines. */
h1,h2,h3{ text-wrap:balance }p,li,figcaption,.facts span,.state span{ text-wrap:pretty }
