/* Quiet colour washes, generous map space, and a softer editorial hierarchy. */
:root{--paper:#f5ecde;--ink:#342b23;--muted:#655545;--line:#baa58a;--red:#8f5132}
body{background:radial-gradient(ellipse at 4% 0%,#efb581bb,transparent 40%),radial-gradient(ellipse at 100% 7%,#edb49c99,transparent 42%),var(--paper);background-size:100% 2300px;background-repeat:no-repeat}
.site-header{border-color:#c8967366}
.intro{padding-bottom:62px}
.intro h1{letter-spacing:-.055em}
.intro-description{font-size:15px;line-height:1.8;max-width:350px}
.current-role h2{font-weight:400;letter-spacing:-.035em}
.role-description p{font-size:14px;line-height:1.85}
.role-meta,.education-period,.hero-academic>p:first-child{font-family:var(--sans)}
.role-meta{font-size:11px}
.hero-academic>p:first-child{font-size:12px;line-height:1.6}
.hero-school{font-size:12px}
.education-front{padding-top:42px;padding-bottom:46px}
.education-entry h2{font-size:25px;font-weight:400;letter-spacing:-.025em}
.education-description{font-size:13px}
.work-section>.section-heading{grid-template-columns:.7fr 1.6fr 1fr;padding-top:54px;padding-bottom:48px;gap:28px}
.work-section>.section-heading h2{font-size:clamp(34px,3.1vw,46px);line-height:1.1;letter-spacing:-.035em}
.work-section>.section-heading h2 em{font-size:1.12em;line-height:1.1;color:#994b2d;letter-spacing:-.015em}
.work-section>.section-heading .section-note{font-size:12px;line-height:1.9}
.portfolio-row{display:grid;grid-template-columns:minmax(230px,.85fr) minmax(0,2fr);gap:5%;padding:48px 0 46px;border-top:1px solid var(--line);align-items:center}
.project-summary{min-width:0;padding-right:5px}
.project-kicker{display:flex;align-items:center;gap:15px;margin-bottom:20px;font-size:11px;line-height:1.5;color:var(--muted)}
.study-number{font-family:var(--serif);font-size:29px;line-height:1;color:var(--red);flex:none}
.project-summary h3{font-family:var(--serif);font-size:clamp(34px,3.1vw,45px);font-weight:400;letter-spacing:-.025em;line-height:1.08;margin-bottom:22px;text-wrap:balance}
.project-summary h3 a{transition:color .2s}
.project-summary h3 a:hover{color:var(--red)}
.project-summary-text{font-size:15.5px;line-height:1.8;max-width:390px;color:#634a38}
.project-details{margin:22px 0 25px;padding-top:15px;border-top:1px solid #b6886255}
.project-details p{font-size:11.5px;line-height:1.75}
.project-details p:first-child{color:var(--ink);margin-bottom:3px}
.project-summary .text-link{font-size:13px;gap:30px}
.project-figure{min-width:0}
.map-plate{padding:22px;border:1px solid #c18f6866;box-shadow:0 10px 28px #7542240a;background:linear-gradient(135deg,#f3cfaa 0%,#fff0d4 48%,#edbc93 100%)}
.map-plate[data-tone=sand]{background:linear-gradient(125deg,#efc99f,#fae9ce 48%,#e9b995);border-color:#c3987166}
.map-plate[data-tone=sea]{background:linear-gradient(130deg,#efbea0,#fbe5c9 45%,#e9c1a1)}
.map-plate[data-tone=moss]{background:linear-gradient(140deg,#f0ce99,#fbe9c8 48%,#e9bd94)}
.map-plate[data-tone=clay]{background:linear-gradient(135deg,#edbda0,#fae2c8 50%,#e8b893);border-color:#c18b6866}
.map-plate[data-tone=slate]{background:linear-gradient(135deg,#f1ceb0,#fae7ca 45%,#e9bc98)}
.map-expand{display:block;width:100%;padding:0;border:0;background:transparent;color:var(--ink);text-align:left;cursor:zoom-in;position:relative}
.map-expand>img{display:block;width:100%;height:auto;mix-blend-mode:normal;border:1px solid #b98d6677;box-shadow:0 2px 8px #75422410}
.map-expand-label{display:flex;align-items:center;justify-content:flex-end;gap:7px;font-size:11px;line-height:1.4;padding-top:13px;color:#8c4329}
.map-expand-label svg{width:15px;height:15px;flex:none}
.map-expand:hover .map-expand-label{color:var(--red)}
.project-figure figcaption{font-family:var(--sans);font-size:11px;line-height:1.6;padding:11px 2px 0;color:var(--muted)}
.map-switches{display:flex;gap:4px 14px;flex-wrap:wrap;margin-bottom:13px}
.map-switches button,.map-dialog-tabs button{border:0;border-bottom:1px solid transparent;background:transparent;color:var(--muted);font-size:12px;line-height:1.5;padding:7px 0;min-height:36px}
.map-switches button[aria-pressed=true],.map-dialog-tabs button[aria-pressed=true]{color:var(--ink);border-color:#994b2d}
.map-switches button:hover,.map-dialog-tabs button:hover{color:var(--red)}
.archive-heading h2{font-family:var(--serif);font-size:40px;letter-spacing:-.02em}
.archive-title{font-size:18px;font-weight:400}
.archive-section{border-top:1px solid var(--line)}
.text-link{border-color:#9b6648}
.study-hero{background:linear-gradient(130deg,#f0c89f,#fae5c7 45%,#edc0a0)}
.study-hero img,.study-gallery img{mix-blend-mode:normal}

/* The same full-resolution asset can be inspected without leaving the home page. */
body.map-viewer-open{overflow:hidden}
.map-dialog{padding:0;border:1px solid #c69d7c;border-radius:3px;width:min(1500px,96vw);max-width:none;height:94dvh;max-height:none;background:#fff5e5;color:var(--ink);overflow:hidden;box-shadow:0 20px 90px #4b211b40}
.map-dialog::backdrop{background:#4b271fc4;backdrop-filter:blur(3px)}
.map-dialog-shell{height:100%;display:flex;flex-direction:column;min-height:0}
.map-dialog-header{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:20px 25px 17px;border-bottom:1px solid var(--line)}
.map-dialog-header .eyebrow{font-size:9px;color:var(--muted);margin-bottom:5px}
.map-dialog-header h2{font-family:var(--serif);font-size:30px;line-height:1.15;letter-spacing:-.015em}
.map-dialog-close{display:flex;align-items:center;gap:9px;flex:none;border:0;background:transparent;padding:10px 0 10px 14px;font-size:12px;color:var(--ink);min-height:42px}
.map-dialog-close svg{width:19px;height:19px}
.map-dialog-tabs{display:flex;gap:20px;padding:8px 25px 0;flex-wrap:wrap}
.map-dialog-tabs[hidden]{display:none}
.map-dialog-tools{display:flex;align-items:center;gap:9px;padding:9px 20px;border-bottom:1px solid var(--line);font-size:12px;flex-wrap:wrap}
.map-dialog-tools button{border:1px solid #d2b293;border-radius:2px;background:#fff7e9;color:var(--ink);padding:7px 11px;min-height:38px;min-width:38px;font-size:12px}
.map-dialog-tools button:hover{background:#f0cfaa}
.map-dialog-tools button:disabled{opacity:.35;cursor:default}
.map-dialog-tools output{width:39px;text-align:center;font-size:11px;font-variant-numeric:tabular-nums}
.map-dialog-tools a{display:inline-flex;align-items:center;gap:7px;margin-left:auto;padding:7px 0}
.map-dialog-stage{flex:1;min-height:0;overflow:auto;display:flex;padding:24px;background:linear-gradient(130deg,#f0d0ac,#fae7ca);overscroll-behavior:contain}
.map-dialog-canvas{flex:none;margin:auto;line-height:0}
.map-dialog-canvas img{display:block;width:100%;max-width:none;height:auto;box-shadow:0 2px 14px #6b3e2319}
.map-dialog-caption{font-size:11px;line-height:1.6;padding:11px 25px;border-top:1px solid var(--line)}
@media(max-width:1000px){.portfolio-row{grid-template-columns:minmax(210px,.9fr) minmax(0,1.5fr);gap:4%}.project-summary h3{font-size:36px}.project-summary-text{font-size:15px}.map-plate{padding:17px}.education-entry h2{font-size:23px}}
@media(max-width:760px){.portfolio-row{grid-template-columns:1fr;gap:27px;padding:34px 0 37px}.project-summary{padding:0}.project-summary h3{font-size:37px;max-width:540px;margin-bottom:18px}.project-summary-text{font-size:15px;line-height:1.8;max-width:590px}.project-kicker{margin-bottom:16px}.project-details{margin:18px 0 19px;padding-top:12px;display:flex;gap:10px 22px;flex-wrap:wrap}.project-details p{font-size:11px}.project-details p:first-child{margin:0}.project-figure{width:100%}.map-plate{padding:14px}.map-expand-label{font-size:11px;padding-top:11px}.project-figure figcaption{font-size:10px}.map-switches{gap:4px 16px}.map-switches button{font-size:11px;padding:8px 0}.work-section>.section-heading{grid-template-columns:1fr;gap:20px;padding:36px 0}.work-section>.section-heading h2{font-size:36px}.work-section>.section-heading .section-note{display:none}.intro-description{font-size:14px}.role-description p{font-size:14px}.education-description{font-size:13px}.education-entry h2{font-size:26px}.hero-academic>p:first-child{font-size:12px}.archive-heading h2{font-size:35px}.archive-title{font-size:16px}}
@media(max-width:540px){.map-dialog{width:100vw;height:100dvh;border:0;border-radius:0;margin:0}.map-dialog-header{padding:16px;gap:12px}.map-dialog-header h2{font-size:25px}.map-dialog-close{font-size:11px;gap:4px;padding-left:4px}.map-dialog-tabs{gap:4px 17px;padding:7px 16px 0}.map-dialog-tabs button{font-size:11px}.map-dialog-tools{gap:6px;padding:8px 12px;font-size:11px}.map-dialog-tools button{font-size:11px;padding:7px 9px}.map-dialog-tools a{font-size:10px}.map-dialog-stage{padding:12px}.map-dialog-caption{padding:10px 16px;font-size:10px}.project-summary h3{font-size:35px;max-width:360px}.study-number{font-size:27px}.project-kicker{font-size:11px}}

/* A continuous, full-page colour progression rather than isolated tinted frames. */
.portfolio-home{background:#f3e9d8;overflow-x:clip}
.portfolio-home main{isolation:isolate}
.portfolio-home :is(.intro,.education-front,.work-section>.section-heading,.portfolio-row,.archive-section,main>footer){position:relative;isolation:isolate}
.portfolio-home :is(.intro,.education-front,.work-section>.section-heading,.portfolio-row,.archive-section,main>footer)::before{content:"";position:absolute;top:0;bottom:0;left:calc(50% - 50vw);right:calc(50% - 50vw);z-index:-1;pointer-events:none;background:linear-gradient(135deg,var(--section-start),var(--section-end))}
.portfolio-home .intro{--section-start:#f3e9d8;--section-end:#edddc4}
.portfolio-home .education-front{--section-start:#d9c4a8;--section-end:#dfccb1}
.portfolio-home .work-section>.section-heading{--section-start:#f4ecdf;--section-end:#f2e8d8}
.portfolio-home #project-topobathy{--section-start:#f4ecdf;--section-end:#eee1cc}
.portfolio-home #project-accessibility{--section-start:#d8c2a2;--section-end:#e0cdb2}
.portfolio-home #project-transit{--section-start:#f2e8d9;--section-end:#eadeca}
.portfolio-home #project-urban-heat{--section-start:#d4bea0;--section-end:#ddc9ae}
.portfolio-home #project-haze{--section-start:#f6eddf;--section-end:#eee0c9}
.portfolio-home #project-geodesy{--section-start:#dcc6a8;--section-end:#e4d3ba}
.portfolio-home .archive-section{--section-start:#eee5d7;--section-end:#e6d9c3}
.portfolio-home main>footer{--section-start:#cdb797;--section-end:#d8c3a5}
.portfolio-home .portfolio-row{border-top-color:#b4815a66}
.portfolio-home .portfolio-row:nth-of-type(even){grid-template-columns:minmax(0,2fr) minmax(230px,.85fr)}
.portfolio-home .portfolio-row:nth-of-type(even) .project-summary{grid-column:2;grid-row:1;padding-left:8px;padding-right:0}
.portfolio-home .portfolio-row:nth-of-type(even) .project-figure{grid-column:1;grid-row:1}
.intro-links{gap:28px}
.intro-links .text-link{font-size:14px;min-height:46px;padding:10px 2px;gap:28px}
.intro-links .text-link:first-child{min-width:150px}
.intro-links .text-link:last-child{min-width:124px}
.intro-links .link-arrow{width:16px;height:16px}
.intro-links .text-link>span{font-size:20px}
@media(max-width:1000px) and (min-width:761px){.portfolio-home .portfolio-row:nth-of-type(even){grid-template-columns:minmax(0,1.5fr) minmax(210px,.9fr)}}
@media(max-width:760px){.portfolio-home .portfolio-row:nth-of-type(even){grid-template-columns:1fr}.portfolio-home .portfolio-row:nth-of-type(even) .project-summary,.portfolio-home .portfolio-row:nth-of-type(even) .project-figure{grid-column:auto;grid-row:auto;padding:0}.intro-links{gap:22px}.intro-links .text-link:first-child{min-width:142px}.intro-links .text-link:last-child{min-width:120px}}
@media(max-width:360px){.intro-links{gap:16px}.intro-links .text-link{gap:22px}.intro-links .text-link:first-child{min-width:138px}.intro-links .text-link:last-child{min-width:110px}}

/* Contours are a decorative reference to terrain, never an extra data layer. */
::selection{background:#b55e38;color:#fff8e9}
.portfolio-home .intro::after,.portfolio-home .work-section>.section-heading::after{content:"";position:absolute;right:calc(50% - 50vw);top:20px;width:min(48vw,680px);height:560px;background:url("assets/contour-lines.svg") center/contain no-repeat;z-index:-1;pointer-events:none;opacity:.48;mask-image:linear-gradient(to left,#000 30%,transparent 98%)}
.portfolio-home .work-section>.section-heading::after{top:0;width:430px;height:100%;opacity:.32}
.map-switches button[aria-pressed=true],.map-dialog-tabs button[aria-pressed=true]{border-color:#a34e2b}
.archive-row:hover{background:#f2c99f77}
@media(max-width:760px){.portfolio-home .intro::after{top:45px;width:90vw;height:390px;opacity:.3}.portfolio-home .work-section>.section-heading::after{width:62vw;opacity:.23}}

/* Each section is a distinct beige field, with only a slight change in light. */
body:not(.portfolio-home){background:linear-gradient(145deg,#f5ecde,#e5d4ba);background-size:100% 100%;background-repeat:no-repeat}
.portfolio-home .intro::after,.portfolio-home .work-section>.section-heading::after{content:none}
.portfolio-home .map-plate,.study-hero{background:linear-gradient(135deg,#faf5ec,#e9ddc9);border-color:#bda98e88;box-shadow:0 6px 22px #59442d0a}
.portfolio-home .portfolio-row{border-top-color:#70533430}
.map-expand-label{color:#765137}
.map-dialog-stage{background:linear-gradient(145deg,#eee3d2,#dfccb1)}
.map-dialog{background:#f8f0e3}
.map-dialog-tools button{background:#faf5ec;border-color:#c5b297}
.map-dialog-tools button:hover{background:#e6d5bb}
.archive-row:hover{background:#d5bea05c}

/* Supporting figures have a quieter scale than the opening project image. */
.study-hero{max-width:1080px;margin-left:auto;margin-right:auto;padding:24px}
.study-hero>img{display:block;width:auto;max-width:100%;height:auto;max-height:min(660px,78vh);object-fit:contain;margin:auto}
.study-caption{max-width:1080px;margin-left:auto;margin-right:auto}
.study-gallery{grid-template-columns:minmax(0,1fr);gap:28px;max-width:1120px;margin:20px auto 48px;align-items:start}
.study-gallery figure{width:100%;min-width:0}
.study-gallery.gallery-single figure{max-width:860px;margin-left:auto;margin-right:auto}
.study-gallery a{display:flex;align-items:center;justify-content:center;flex:initial;width:100%;padding:18px;background:linear-gradient(135deg,#faf5ec,#e9ddc9)}
.study-gallery img{display:block;width:auto;max-width:100%;height:auto;max-height:min(440px,58vh);object-fit:contain;margin:auto}
.study-gallery figcaption{font-family:var(--sans);font-size:11px;line-height:1.7;padding-top:11px}
.study-gallery.gallery-pair{grid-template-columns:repeat(2,minmax(0,1fr))}
.study-gallery.gallery-pair a{height:320px;padding:16px}
.study-gallery.gallery-pair img{max-height:100%}
.dashboard-hero .dashboard-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:24px}
.dashboard-hero .dashboard-panel img{max-height:290px;width:100%;height:auto;object-fit:contain}
.dashboard-hero .dashboard-label{font-size:11px;line-height:1.6;margin-bottom:7px}
@media(max-width:760px){.study-hero{padding:15px}.study-hero>img{max-height:65vh}.study-gallery{gap:24px;margin-bottom:36px}.study-gallery.gallery-pair{grid-template-columns:minmax(0,1fr)}.study-gallery a,.study-gallery.gallery-pair a{height:auto;padding:12px}.study-gallery img,.study-gallery.gallery-pair img{max-height:360px}.study-gallery figcaption{font-size:10px}.dashboard-hero .dashboard-grid{gap:14px}.dashboard-hero .dashboard-label{font-size:10px}}
@media(max-width:540px){.dashboard-hero .dashboard-grid{grid-template-columns:minmax(0,1fr);gap:22px}.dashboard-hero .dashboard-panel img{max-height:260px}}
