:root{--bg:#f4f1e9;--ink:#24261f;--muted:#62645b;--line:#d2d0c6;--accent:#bc3e24;--panel:#e9e7dc;--inverse:#f4f1e9;color-scheme:light}html[data-theme=dark]{--bg:#20231f;--ink:#f0eee4;--muted:#b2b6a8;--line:#45483f;--accent:#ff997c;--panel:#30352d;--inverse:#20231f;color-scheme:dark}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:32px}body{margin:0;background:var(--bg);color:var(--ink);font-family:'DM Sans',sans-serif;font-size:16px;line-height:1.6}a{color:inherit;text-decoration:none}button{font:inherit;color:inherit;cursor:pointer}a,button{ -webkit-tap-highlight-color:transparent}a:hover{color:var(--accent)}:focus-visible{outline:3px solid var(--accent);outline-offset:6px}.skip{position:absolute;top:-80px;background:var(--ink);color:var(--bg);padding:12px;z-index:9}.skip:focus{top:10px}header,main,footer{max-width:1440px;margin:auto}header{height:112px;padding:0 6%;display:flex;align-items:center;justify-content:space-between}.wordmark{font-size:28px;font-weight:700;letter-spacing:-1.5px}.brand-asterisk{display:inline-block;width:32px;height:32px;color:var(--accent);vertical-align:-6px;flex-shrink:0}.wordmark .brand-asterisk{margin-left:5px}nav{display:flex;gap:34px;align-items:center;font-size:14px}#theme{border:1px solid var(--line);border-radius:50%;background:none;width:42px;height:42px;font-size:22px}.hero{padding:64px 6% 0;position:relative;overflow:hidden}.eyebrow{font-size:12px;letter-spacing:1.6px;font-weight:600}.brand-asterisk.eyebrow-mark{width:18px;height:18px;vertical-align:-4px;margin-right:9px}h1,h2,p{margin:0}h1,h2{font-family:Manrope,sans-serif;font-weight:500;letter-spacing:-.065em;line-height:1.08}h1{font-size:clamp(60px,8vw,108px);margin:32px 0 35px;position:relative;z-index:1}em{font-family:Georgia,serif;font-weight:400;letter-spacing:-.055em;color:var(--accent)}.hero-bottom{display:flex;gap:8%;max-width:760px}.hero-bottom>p{font-size:18px;max-width:350px}.current{font-size:14px;padding-top:3px}.current>span{font-size:10px;letter-spacing:1.5px;color:var(--muted)}.current strong{display:block;font-weight:500;margin:5px 0 20px}.current a{border-bottom:1px solid var(--ink);padding-bottom:7px;display:flex;justify-content:space-between}.hero-art{position:absolute;right:4%;top:145px;width:245px;transform:rotate(-12deg);text-align:center}.orb{display:block;width:100%;height:auto;aspect-ratio:245/240;border-radius:50%;color:var(--accent);transform:rotate(25deg);opacity:.7;overflow:hidden;mask-image:linear-gradient(130deg,#000,transparent)}.hero-art>span{font-size:8px;letter-spacing:3px;color:var(--muted)}.hero-foot{display:flex;justify-content:space-between;margin-top:72px;border-top:1px solid var(--line);padding:20px 0;font-size:12px;color:var(--muted)}.hero-foot span:last-child{font-size:10px;letter-spacing:1px}.section{padding:100px 6%}.section-heading{display:flex;justify-content:space-between;align-items:end;gap:50px}.section h2{font-size:54px;margin-top:22px}.section-heading>p{max-width:330px;color:var(--muted);font-size:16px}.filters{display:flex;gap:10px;margin:36px 0 28px;flex-wrap:wrap}.filters button{border:1px solid var(--line);background:transparent;border-radius:30px;padding:9px 18px;font-size:12px;min-height:42px}.filters button[aria-pressed=true]{background:var(--ink);color:var(--bg);border-color:var(--ink)}.filters span{opacity:.6;padding-left:9px}.projects{display:grid;grid-template-columns:1fr 1fr;gap:48px 28px}.project{min-width:0}.project button{display:block;width:100%;text-align:left;border:0;background:transparent;padding:0}.visual{height:320px;position:relative;overflow:hidden;display:flex;align-items:center;justify-content:center;transition:transform .4s}.project button:hover .visual{transform:translateY(-5px)}.system{background:#dfe4d4;color:#2e3f31}.data{background:#e3ddd2;color:#423d36}.eats{background:#ad3c26;color:#ffe5ba}.lab{background:#dcdff0;color:#363763}.visual small{position:absolute;bottom:16px;left:20px;font-size:10px;letter-spacing:1.2px}.system .diagram{width:75%;display:grid;grid-template-columns:repeat(3,1fr);gap:18px}.diagram span{border:1px solid #8d9b7d;border-radius:14px;text-align:center;padding:20px 5px;font-size:12px;background:#eaf0e3;box-shadow:0 6px 0 #b8c4ab}.diagram span:first-child{grid-column:2}.diagram span:last-child{grid-column:2}.data .diagram{width:76%;display:flex;align-items:center;gap:12px}.data .diagram span{background:#f2eee5;border-color:#aba494;box-shadow:0 5px 0 #c7bfaf;flex:1}.eats .food{font:italic 65px/.9 Georgia;text-align:center;transform:rotate(-9deg)}.food b{display:block;font:700 14px 'DM Sans';letter-spacing:5px;margin-bottom:12px}.food:after{content:'✳';display:block;font-size:80px;margin-top:12px}.lab .tiles{display:flex;gap:16px;transform:rotate(-10deg)}.tiles b{background:#eef0fa;width:82px;height:98px;display:grid;place-items:center;font-size:40px;border-radius:18px;box-shadow:0 12px 0 #b9bed7}.tiles b:nth-child(2){transform:translateY(-26px);background:#d3dc8b}.project-meta{display:flex;justify-content:space-between;gap:12px;margin-top:20px;font-size:10px;letter-spacing:.7px;color:var(--muted)}.project h3{font-size:26px;font-weight:500;letter-spacing:-1px;margin:8px 0}.project p{color:var(--muted);font-size:14px;max-width:460px}.project .more{display:block;font-size:12px;margin-top:17px;text-decoration:underline;text-underline-offset:5px}.approach{margin:0 6%;background:var(--ink);color:var(--bg);padding:55px}.approach>p{font:500 51px/1.25 Manrope;letter-spacing:-2px;margin:30px 0 45px}.approach em{color:#eaa485}.approach-notes{display:flex;justify-content:space-between;border-top:1px solid #77786d;padding-top:20px;font-size:12px}.about{display:grid;grid-template-columns:1fr 1fr;gap:80px}.bio{padding-top:36px}.bio p{margin-bottom:22px;font-size:16px;color:var(--muted)}.bio .lead{font-size:24px;color:var(--ink);line-height:1.45}.text-link{font-size:14px;border-bottom:1px solid var(--ink);padding-bottom:6px}.location-art{border:1px solid var(--line);padding:35px;margin-top:55px;max-width:360px;display:flex;justify-content:space-between;flex-wrap:wrap;align-items:center}.location-art>span{font:36px Manrope;letter-spacing:-2px}.location-art i{color:var(--accent);font-size:46px}.location-art small{display:block;width:100%;font-size:8px;letter-spacing:1px;margin-top:25px}.timeline{margin-top:45px}.timeline-row{display:grid;grid-template-columns:100px 1fr;border-top:1px solid var(--line);padding:16px 0;gap:10px}.timeline-row>span{font-size:10px;color:var(--muted);padding-top:4px}.timeline-row strong{font-size:14px;font-weight:500}.timeline-row p{font-size:12px;margin:3px 0 0}.contact{border-top:1px solid var(--line);padding:65px 6% 75px}.contact h2{font-size:clamp(60px,8vw,110px);margin:30px 0;position:relative}.contact h2>span{position:absolute;right:0;top:0;color:var(--accent);font-weight:400}.contact-bottom{display:flex;justify-content:space-between;align-items:end;gap:25px}.contact-bottom p{color:var(--muted);font-size:14px}.email{font-size:24px;border-bottom:1px solid var(--ink);padding-bottom:5px;letter-spacing:-.7px}footer{padding:25px 6%;border-top:0;display:flex;justify-content:space-between;gap:20px;font-size:10px;color:var(--muted)}footer div{display:flex;gap:20px;flex-wrap:wrap}dialog{max-width:650px;width:calc(100% - 32px);padding:50px;background:var(--bg);color:var(--ink);border:1px solid var(--line)}dialog::backdrop{background:#10140fd0;backdrop-filter:blur(5px)}dialog h2{font-size:44px;margin:25px 0}dialog p{margin:20px 0;color:var(--muted)}.close{display:block;margin:0 0 35px auto;background:none;border:0;padding:10px}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}@media(min-width:1450px){h1{font-size:108px}}@media(max-width:1100px){.hero-art{right:-40px;opacity:.4;width:200px}.hero-bottom{max-width:80%}.visual{height:280px}.about{gap:40px}.email{font-size:20px}}@media(max-width:700px){header{height:85px;padding:0 6%}.wordmark{font-size:24px}nav{gap:17px;font-size:12px}header nav .nav-about,header nav .nav-secondary{display:none}#theme{width:38px;height:38px}.hero{padding-top:40px}h1{font-size:60px;margin:27px 0}.hero-art{display:none}.hero-bottom{max-width:100%;display:block}.hero-bottom>p{font-size:18px;max-width:330px}.current{margin-top:28px;max-width:280px}.hero-foot{margin-top:40px;font-size:10px;gap:20px}.hero-foot span:last-child{display:none}.section{padding:65px 6%}.section-heading{display:block}.section h2{font-size:44px}.section-heading>p{margin-top:22px}.projects{grid-template-columns:1fr;gap:38px}.visual{height:300px}.project h3{font-size:26px}.approach{padding:32px 24px}.approach>p{font-size:34px;letter-spacing:-1.3px}.approach-notes{display:grid;gap:10px}.about{grid-template-columns:1fr;gap:0}.location-art{margin-top:30px;max-width:none}.bio{padding-top:32px}.contact{padding-top:45px}.contact h2{font-size:66px}.contact-bottom{display:block}.email{display:inline-block;margin-top:25px;font-size:22px}footer{flex-wrap:wrap;font-size:10px}footer>span{width:100%}dialog{padding:25px}dialog h2{font-size:36px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{transition:none!important}}
/* Introduction-only edition: give the approach section its own breathing room. */
.approach{margin-top:80px}.approach h2.eyebrow{font-family:"DM Sans",sans-serif;line-height:1.6;letter-spacing:1.6px;font-weight:600}
@media(max-width:700px){.approach{margin-top:48px}}


/* Use SVG icons, never font glyphs that mobile browsers can render as emoji. */
.arrow-ne,.arrow-icon{display:inline-block;width:1em;height:1em;vertical-align:-.12em;color:inherit;flex-shrink:0}.contact h2>span .arrow-ne{vertical-align:0}

/* Tools: an editorial list, with room for purpose as well as names. */
.tools-section{padding-top:40px}.tool-list{margin:40px 0 0}.tool-list>div{display:grid;grid-template-columns:1fr 1fr;gap:40px;border-top:1px solid var(--line);padding:25px 0}.tool-list>div:last-child{border-bottom:1px solid var(--line)}.tool-list dt{font-family:Manrope,sans-serif;font-size:26px;letter-spacing:-.8px;font-weight:500}.tool-list dt small{display:block;font-family:'DM Sans',sans-serif;font-size:12px;letter-spacing:0;color:var(--muted);margin-top:4px}.tool-list dd{margin:0;color:var(--muted);font-size:14px;line-height:1.7}.tool-list dd span{display:block;color:var(--ink);font-size:10px;text-transform:uppercase;letter-spacing:1.2px;margin-bottom:6px}@media(max-width:700px){.tools-section{padding-top:20px}.tool-list>div{grid-template-columns:1fr;gap:12px;padding:22px 0}.tool-list dt{font-size:24px}.tool-list dt small{display:inline;margin-left:8px}}

.tool-list dt{display:flex;align-items:center;gap:16px}.tool-icon{display:block;width:28px;height:28px;object-fit:contain;flex-shrink:0}.tool-icon-github{background:#fff;border-radius:50%;padding:2px}@media(max-width:700px){.tool-list dt{gap:12px}.tool-icon{width:24px;height:24px}}


/* Contrast on the inverted approach panel in dark mode. */
html[data-theme="dark"] .approach em{color:#bc3e24}
#theme{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}
#main:focus{outline:none}

/* A single, staggered drawing sequence; text follows the last ring. */
.hero-art>span{display:block}
.hero-foot a{text-decoration:underline;text-underline-offset:3px}
@media(prefers-reduced-motion:no-preference){
  .intro-running .orb{animation:orb-settle 1.65s cubic-bezier(.22,1,.36,1) both}
  .intro-running .orb circle{stroke-dasharray:1;stroke-dashoffset:0;animation:ring-draw .65s cubic-bezier(.22,1,.36,1) var(--ring-delay) both;transform:rotate(-90deg);transform-origin:159px 84px}
  .intro-running .hero-art>span{animation:orb-caption .5s ease-out 1.7s both}
}
@keyframes ring-draw{from{stroke-dashoffset:1;opacity:0}to{stroke-dashoffset:0;opacity:1}}
@keyframes orb-settle{from{transform:rotate(19deg)}to{transform:rotate(25deg)}}
@keyframes orb-caption{from{opacity:0;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}

/* Artwork leads the hero, with a stacked composition on smaller screens. */
.hero-layout{display:grid;grid-template-columns:minmax(180px, .8fr) minmax(0,2fr);align-items:center;gap:5%;margin-top:32px}
.hero-layout .hero-art{position:relative;inset:auto;display:block;width:min(100%,245px);justify-self:center;opacity:1}
.hero-copy{min-width:0}
.hero-copy h1{font-size:clamp(48px,6vw,88px);margin:0 0 35px}
.hero-copy .hero-bottom{max-width:100%;gap:6%}
.hero-copy .hero-bottom>p{flex:1;min-width:0}
.hero-copy .current{flex:1;min-width:0}
@media(max-width:900px){
 .hero-layout{grid-template-columns:160px minmax(0,1fr);gap:32px}
 .hero-copy h1{font-size:clamp(42px,6vw,64px)}
 .hero-copy .hero-bottom{display:block}
 .hero-copy .current{margin-top:24px;max-width:280px}
}
@media(max-width:700px){
 .hero-layout{grid-template-columns:1fr;gap:30px;margin-top:26px}
 .hero-layout .hero-art{width:150px;justify-self:start;margin-left:10px}
 .hero-copy h1{font-size:clamp(42px,10vw,60px);margin-bottom:26px}
 .hero-foot{flex-wrap:wrap}
}

/* Keep layout reserved throughout the first-visit introduction. */
.intro-pending body{visibility:hidden}
.intro-pending .hero{overflow:visible}
.intro-running .hero-art{visibility:visible;z-index:2}
@media(prefers-reduced-motion:reduce){
 .intro-pending body{visibility:visible}
 .hero-art,.hero-copy{animation:none!important}
}

/* Shared day/night Trivandrum illustration, adapted from Trivandrum Eats. */
footer.portfolio-footer{display:block;padding:0;border-top:0}
.portfolio-footer .city-signoff{display:block;text-align:center;padding:60px 0 0}
.city-signoff h2{font-size:clamp(36px,6vw,64px);color:var(--ink);letter-spacing:-.05em}
.city-signoff p{font-size:14px;margin:14px 0 24px;color:var(--muted)}
.portfolio-footer .city-skyline{display:grid;gap:0;overflow:hidden;isolation:isolate}
.city-skyline img{grid-area:1/1;width:100%;height:auto;display:block;transition:opacity .5s ease;mask-image:linear-gradient(to bottom,transparent,#000 25%,#000 75%,transparent)}
.skyline-day{opacity:1;mix-blend-mode:multiply}
.skyline-night{opacity:0}
html[data-theme=dark] .skyline-day{opacity:0}
html[data-theme=dark] .skyline-night{opacity:1}
.portfolio-footer .footer-meta{display:flex;justify-content:space-between;align-items:center;gap:20px;padding:25px 6%;border-top:0}
@media(max-width:700px){.portfolio-footer .city-signoff{padding-top:40px}.portfolio-footer .footer-meta{flex-wrap:wrap}.footer-meta>span{width:100%}.city-signoff p{font-size:12px}}

/* One continuous panorama connects the two cities. */
.city-signoff h2{font-size:clamp(28px,4vw,48px);padding:0 6%}
.city-signoff .city-route{display:flex;align-items:center;justify-content:center;gap:18px;letter-spacing:4px;font-size:12px;margin:20px 0 0}
.city-route svg{color:var(--accent);flex-shrink:0}
@media(max-width:700px){.city-signoff h2{max-width:360px;margin:auto;line-height:1.2}.city-signoff .city-route{margin:16px 0 18px}.city-skyline img{min-width:0;object-fit:contain}}

/* Let the city panorama stand alone. */
.portfolio-footer .city-signoff{padding-top:0}

/* Technical Field Notes — graphite, structured typography and precise markers. */
:root{--bg:#fafafa;--ink:#191b1e;--muted:#60646b;--line:#d8dade;--accent:#7050b5;--panel:#eef0f2;--inverse:#fafafa}
html[data-theme=dark]{--bg:#17191c;--ink:#f1f2f4;--muted:#afb3bb;--line:#383c43;--accent:#b99aef;--panel:#24282e;--inverse:#17191c}
body{font-family:'DM Sans',sans-serif}
h1,h2{font-family:'Manrope','DM Sans',sans-serif;font-weight:600;letter-spacing:-.055em}
em{font-family:inherit;font-style:normal;font-weight:inherit;letter-spacing:inherit;color:inherit}
.wordmark{letter-spacing:-1.2px}.wordmark .brand-asterisk{width:20px;height:20px;vertical-align:-1px;margin-left:7px}
.eyebrow,.current>span,.hero-foot,.project-meta,.case-tags,.case-facts dt,.tool-list dd span,.approach-notes,.hero-art>span{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}
.eyebrow{font-size:10px;letter-spacing:1.4px}
.hero{padding-top:52px}.hero>.eyebrow{display:flex;align-items:center;gap:10px}
.hero>.eyebrow:after{content:'';height:1px;background:var(--line);flex:1;margin-left:20px}
.hero-layout{gap:7%;grid-template-columns:minmax(190px,1fr) minmax(0,2fr);margin-top:48px}
.hero-layout .hero-art{width:min(100%,300px);transform:none}
.field-diagram{width:100%;height:auto;display:block;color:var(--muted);overflow:visible}
.diagram-index{color:var(--accent)}
.hero-art>span{font-size:8px;letter-spacing:2px;margin-top:18px;text-align:left;padding-left:20px}
.hero-copy h1{font-size:clamp(48px,6vw,82px);font-weight:650;line-height:1.05}
.hero-copy h1 em:after{content:'';display:inline-block;width:8px;height:8px;background:var(--accent);margin-left:9px}
.hero-copy .hero-bottom>p{font-size:18px}.hero-copy .current{border-left:1px solid var(--line);padding-left:24px}
.hero-foot{font-size:10px;line-height:1.7;gap:24px}
.approach{background:var(--panel);color:var(--ink);border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.approach em,html[data-theme=dark] .approach em{color:var(--ink)}
.approach-notes{border-color:var(--line)}
.section h2{font-size:48px}.contact h2{font-weight:600}
.location-art{background:var(--panel)}
.city-signoff .skyline-day{mix-blend-mode:normal}
@media(prefers-reduced-motion:no-preference){.intro-running .field-plane{animation:plane-assemble 1.15s cubic-bezier(.22,1,.36,1) var(--delay) both}}
@keyframes plane-assemble{from{opacity:0;transform:translateY(22px)}to{opacity:1;transform:translateY(0)}}
@media(max-width:900px){.hero-layout{grid-template-columns:170px minmax(0,1fr);gap:30px}.hero-copy .current{border-left:0;padding-left:0}}
@media(max-width:700px){.hero{padding-top:30px}.hero-layout{grid-template-columns:1fr;margin-top:24px;gap:28px}.hero-layout .hero-art{width:180px;margin:0}.hero-copy h1{font-size:clamp(40px,10vw,60px)}.section h2{font-size:38px}.hero>.eyebrow:after{display:none}.hero-foot{font-size:10px}.contact h2{font-size:clamp(48px,12vw,66px)}}

/* Neutral architectural panorama; original watercolours retained in assets/footer. */
.city-signoff .skyline-day{filter:grayscale(1);mix-blend-mode:multiply}
.city-signoff .skyline-night{filter:none;mix-blend-mode:normal}

.hero-art>.process-caption{text-transform:uppercase;line-height:1.9;letter-spacing:1.5px}
.approach-notes{display:flex;flex-wrap:wrap;gap:20px;justify-content:space-between}

@media(prefers-reduced-motion:no-preference){.intro-running .step-annotation{animation:step-label-reveal .3s ease-out var(--label-delay) both}}
@keyframes step-label-reveal{from{opacity:0}to{opacity:1}}

.hero-copy h1 em{color:var(--accent);font-style:italic}

@media(max-width:700px){
 .hero-layout .hero-art{justify-self:center;margin:0;width:210px;padding-right:20px;box-sizing:content-box}
 .contact h2>span{display:none}
}

/* Exact approved artwork, displayed as crops of the preserved original board. */
.wordmark[data-season]{position:relative;display:block;width:190px;height:64px;padding:0;flex-shrink:0}
.wordmark[data-season] .original-wordmark{position:absolute;opacity:0;pointer-events:none}
.seasonal-decoration{display:block;position:absolute;inset:0;overflow:hidden;pointer-events:none;background-image:url('assets/brand/seasonal-transparent-light.png');background-size:200% 400%;background-repeat:no-repeat;}
.wordmark[data-season=spring] .seasonal-decoration{background-position:0% 0%}
.wordmark[data-season=summer] .seasonal-decoration{background-position:100% 0%}
.wordmark[data-season=onam] .seasonal-decoration{background-position:0% 33.333333%}
.wordmark[data-season=autumn] .seasonal-decoration{background-position:100% 33.333333%}
.wordmark[data-season=halloween] .seasonal-decoration{background-position:0% 66.666667%}
.wordmark[data-season=diwali] .seasonal-decoration{background-position:100% 66.666667%}
.wordmark[data-season=winter] .seasonal-decoration{background-position:0% 100%}
.wordmark[data-season=christmas] .seasonal-decoration{background-position:100% 100%}
@media(max-width:700px){.wordmark[data-season]{width:145px;height:49px}header nav{gap:10px}}
@media(max-width:360px){.wordmark[data-season]{width:120px;height:41px}header nav{gap:8px}}

html[data-theme=dark] .seasonal-decoration{background-image:url('assets/brand/seasonal-transparent-dark.png')}

/* Site-matched not-found page. */
.not-found-page{min-height:100vh;display:flex;flex-direction:column}
.not-found-page header{width:100%}
.not-found-main{width:100%;flex:1;display:flex;flex-direction:column;justify-content:center;padding:5vh 6% 12vh}
.not-found-eyebrow{display:flex;align-items:center;gap:24px;font:600 11px/1.5 ui-monospace,SFMono-Regular,monospace;letter-spacing:1.6px}
.not-found-eyebrow:after{content:'';height:1px;background:var(--line);flex:1}
.not-found-marker{height:10px;width:10px;background:var(--accent);flex:none}
.not-found-content{display:flex;justify-content:space-between;align-items:center;gap:40px}
.not-found-content h1{font-size:clamp(64px,10vw,122px);margin:55px 0 24px}
.not-found-content h1 em{font:italic 500 1em/1.05 Manrope,sans-serif;color:var(--accent)}
.not-found-content p{color:var(--muted);font-size:18px;margin-bottom:28px}
.not-found-home{display:inline-flex;align-items:center;gap:22px;border-bottom:1px solid var(--ink);padding:0 0 10px;font-size:18px}
.not-found-home svg{order:-1}
.not-found-art{display:flex;align-items:center;gap:5px;color:var(--accent);font:600 12px ui-monospace,SFMono-Regular,monospace;letter-spacing:2px;opacity:.8;flex:none}
.not-found-footer{width:88%;max-width:1267px;display:flex;justify-content:space-between;gap:24px;border-top:1px solid var(--line);padding:24px 0 28px;color:var(--muted);font-size:12px}
.not-found-footer a{display:inline-flex;align-items:center;gap:6px}
@media(max-width:700px){.not-found-main{padding-top:10vh}.not-found-content{display:block}.not-found-content h1{font-size:clamp(56px,14vw,80px);margin:46px 0 24px}.not-found-art{margin-top:56px}.not-found-art svg{width:130px}.not-found-footer{flex-wrap:wrap}}

/* Compact tool identities within the approach panel. */
.hero-copy .current strong{margin-bottom:0}
.timeline-row>span{font-size:12px}
.timeline-row strong{font-size:14px}
.timeline-row p{font-size:12px}
.approach-tools{border-top:1px solid var(--line);margin-top:30px;padding-top:24px}
.approach-tools h3{font:600 10px/1.5 ui-monospace,SFMono-Regular,Consolas,monospace;letter-spacing:1.4px;text-transform:uppercase;margin:0 0 20px}
.approach-tools ul{list-style:none;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:20px 28px;margin:0;padding:0}
.approach-tools li{display:inline-flex;align-items:center;gap:10px;font:500 15px/1.3 Manrope,sans-serif;white-space:nowrap}
.approach-tools img{display:block;width:28px;height:28px;object-fit:contain;flex:none;transition:filter .3s ease}
@media(max-width:700px){.approach-tools ul{justify-content:flex-start;gap:22px 30px}.approach-tools li{font-size:14px}.approach-tools img{width:24px;height:24px}}

/* Experience summary follows the introductory bio. */
.experience-summary{margin-top:45px}
.experience-row{display:grid;grid-template-columns:100px minmax(0,1fr);gap:10px;border-top:1px solid var(--line);padding:18px 0}
.experience-row>span{font:400 12px/1.5 ui-monospace,SFMono-Regular,Consolas,monospace;color:var(--muted);padding-top:2px}
.experience-row strong{display:block;font-size:14px;font-weight:600}
.experience-row p{font-size:12px;line-height:1.6;margin:4px 0 0}
.experience-row:last-child p{font-size:14px;color:var(--ink);margin:0}
.contact h2{font-size:62px}
@media(max-width:700px){.contact h2{font-size:clamp(44px,10vw,62px)}}

.about{padding-bottom:50px}
.about + .approach{margin-top:40px}
@media(max-width:700px){.about{padding-bottom:36px}.about + .approach{margin-top:28px}}

/* Keep tool marks in the site's monochrome palette. */
.approach-tools img:not([src$="github.svg"]){filter:grayscale(1) brightness(.75)}
html[data-theme=dark] .approach-tools img:not([src$="github.svg"]){filter:grayscale(1) brightness(1.25)}
.approach-tools img[src$="github.svg"]{background:#fff;border-radius:50%;padding:2px;filter:grayscale(1)}

@media(hover:hover){.approach-tools li:hover img:not([src$="github.svg"]),html[data-theme=dark] .approach-tools li:hover img:not([src$="github.svg"]){filter:none}}
@media(prefers-reduced-motion:reduce){.approach-tools img{transition:none}}

/* The four drawings travel from the hero to their matching process steps. */
.process-steps{list-style:none;margin:28px 0 0;padding:0}
.process-step{display:grid;grid-template-columns:minmax(0,1fr) 180px;grid-template-rows:auto 1fr;column-gap:22px;align-items:center;min-height:148px;padding:12px 0;border-top:1px solid var(--line)}
.process-index{grid-column:1;font:600 11px/1.5 ui-monospace,SFMono-Regular,Consolas,monospace;letter-spacing:.5px;color:var(--accent)}
.process-step>p{grid-column:1;font:500 clamp(27px,3.3vw,48px)/1.12 Manrope,sans-serif;letter-spacing:-.055em;margin:0}
.process-landing{grid-column:2;grid-row:1/3;width:180px;justify-self:end;pointer-events:none}
.process-landing svg{display:block;width:100%;height:auto;overflow:visible;color:var(--muted)}
.approach .approach-tools{margin-top:18px}
.journey-active .hero-art .field-plane,.journey-active .process-landing svg{opacity:0}
.journey-plane{position:fixed;left:0;top:0;display:block;overflow:visible;pointer-events:none;z-index:4;color:var(--muted);will-change:transform,width,height}
@media(max-width:799px){.process-step{grid-template-columns:minmax(0,1fr) 105px;min-height:118px;column-gap:8px}.process-step>p{font-size:clamp(24px,6vw,34px)}.process-index{font-size:10px}.process-landing{width:105px}}
@media(prefers-reduced-motion:reduce){.journey-plane{display:none}}

@media(min-width:800px){.process-step{grid-template-columns:minmax(0,1fr) 250px}.process-landing{width:250px}}
@media(max-width:700px){header nav .nav-secondary{display:inline}header nav{font-size:12px;gap:8px}}
@media(max-width:360px){.wordmark[data-season]{width:105px;height:36px}header nav{font-size:10px;gap:6px}#theme{width:34px;height:34px}}

/* Compact process rows place each drawing before its label and statement. */
.process-step{grid-template-columns:100px minmax(0,1fr);grid-template-rows:auto auto;column-gap:26px;min-height:142px;padding:6px 0}
.process-landing,.process-step .process-landing{grid-column:1;grid-row:1/3;width:80px;justify-self:start}
.process-index,.process-step>p{grid-column:2}
@media(min-width:800px){.process-step{grid-template-columns:100px minmax(0,1fr)}.process-landing{width:80px}}
@media(max-width:799px){.process-step{grid-template-columns:72px minmax(0,1fr);min-height:112px;column-gap:14px}.process-landing,.process-step .process-landing{width:62px}}

/* Contact button keeps the address out of static page markup. */
.email-button{border-radius:6px;appearance:none;display:inline-flex;align-items:center;gap:12px;border:1px solid var(--ink);background:transparent;color:var(--ink);font-family:inherit;font-weight:500;line-height:1.2;padding:14px 18px;cursor:pointer;text-align:left;transition:background-color .2s ease,color .2s ease}
.email-button:hover{background:var(--ink);color:var(--bg)}
.email-button:focus-visible{outline:2px solid var(--accent);outline-offset:4px}
.contact-fallback{display:inline-block;margin-top:12px;border-bottom:1px solid var(--ink)}

.email-button[hidden]{display:none}

/* Scroll deck for the four approach steps. Reduced motion and narrow layouts keep a plain list. */
@media (min-width:800px) and (prefers-reduced-motion:no-preference){
  .process-stack{height:calc(100vh * 2.7);min-height:1750px;position:relative;margin-top:26px}
  .process-stack .process-steps{position:sticky;top:clamp(55px,8vh,96px);height:min(66vh,580px);min-height:440px;margin:0;isolation:isolate}
  .process-stack.stack-active .process-steps{opacity:0;visibility:hidden;transition:opacity .45s ease,visibility .45s ease}
  .process-stack.stack-active.stack-entered .process-steps{opacity:1;visibility:visible}
  .process-stack.stack-active .process-step{border-radius:8px;position:absolute;inset:0;display:grid;grid-template-columns:minmax(170px,27%) minmax(0,1fr);grid-template-rows:auto 1fr;align-items:center;column-gap:6%;min-height:0;padding:clamp(30px,5vw,68px);border:1px solid var(--line);background:var(--panel);box-shadow:0 18px 45px rgba(0,0,0,.12);transform-origin:50% 15%;will-change:transform,opacity}
  .process-stack.stack-active .process-step:nth-child(1){z-index:4}
  .process-stack.stack-active .process-step:nth-child(2){z-index:3}
  .process-stack.stack-active .process-step:nth-child(3){z-index:2}
  .process-stack.stack-active .process-step:nth-child(4){z-index:1}
  .process-stack.stack-active .process-landing,.process-stack.stack-active .process-step .process-landing{grid-column:1;grid-row:1/3;width:min(100%,210px);justify-self:center}
  .process-stack.stack-active .process-landing svg{width:100%;height:auto}
  .process-stack.stack-active .process-index,.process-stack.stack-active .process-step>p{grid-column:2}
  .process-stack.stack-active .process-index{font-size:14px;align-self:end}
  .process-stack.stack-active .process-step>p{font-size:clamp(42px,5.2vw,80px);align-self:start;margin-top:24px;max-width:800px}
  .approach .approach-tools{margin-top:0}
}
@media (min-width:800px) and (max-height:650px) and (prefers-reduced-motion:no-preference){
  .process-stack .process-steps{top:35px;min-height:360px;height:calc(100vh - 70px)}
  .process-stack.stack-active .process-step{padding:28px}
  .process-stack.stack-active .process-step>p{font-size:clamp(36px,4.5vw,64px)}
}

/* A compact copy of the hero diagram tracks the front card without crossing its content. */
.process-map{width:300px;max-width:100%;margin:8px auto 22px 0;color:var(--muted)}
.process-map-diagram{display:block;width:100%;height:auto;margin-top:8px;overflow:visible}
.process-map .field-plane,.process-map .step-annotation{opacity:.28;transition:opacity .35s ease,color .35s ease}
.process-map .field-plane.is-active,.process-map .step-annotation.is-active{opacity:1;color:var(--accent)}
@media (min-width:1000px) and (prefers-reduced-motion:no-preference){
  .process-stack{display:grid;grid-template-columns:300px minmax(0,1fr);gap:22px}
  .process-stack .process-steps{grid-column:2;grid-row:1;min-width:0}
  .process-map{grid-column:1;grid-row:1;position:sticky;top:clamp(55px,8vh,96px);align-self:start;margin:0}
  .process-stack.stack-active .process-step{grid-template-columns:minmax(95px,27%) minmax(0,1fr);padding:clamp(26px,3vw,44px)}
  .process-stack.stack-active .process-step>p{font-size:clamp(36px,3.8vw,58px)}
}
@media (max-width:999px){.process-map{width:min(300px,100%);margin-top:12px}}
@media (prefers-reduced-motion:reduce){.process-map .field-plane{transition:none}}

/* Keep the section quiet; the raised cards provide the contrast. */
.approach{background:transparent}

/* Keep tools in view beneath the scroll deck instead of leaving a blank tail. */
@media (min-width:800px) and (prefers-reduced-motion:no-preference){
  .approach .approach-tools{position:sticky;bottom:18px;z-index:5;background:var(--bg);padding:16px 0 10px;margin-top:40px;transition:opacity .3s ease,visibility .3s ease}
  .approach:not(.process-reached) .approach-tools{opacity:0;visibility:hidden}
}

/* Give each process card one concise explanation beneath its headline. */
.process-step{grid-template-rows:auto auto 1fr}
.process-step .process-landing{grid-row:1/4}
.process-index{grid-row:1}
.process-step>p{grid-row:2}
.process-detail{grid-column:2;grid-row:3;align-self:start;max-width:360px;margin-top:14px;color:var(--muted);font:400 16px/1.5 "DM Sans",sans-serif}
@media(max-width:799px){.process-detail{font-size:14px;margin-top:9px}.process-step{min-height:150px;padding:16px 0}}
@media(min-width:800px) and (prefers-reduced-motion:no-preference){
  .process-stack.stack-active .process-step{grid-template-rows:auto auto 1fr}
  .process-stack.stack-active .process-landing{grid-row:1/4}
  .process-stack.stack-active .process-step>p{align-self:start;margin-top:24px}
  .process-stack.stack-active .process-detail{font-size:16px;margin-top:18px}
}
.process-plane-handoff{position:fixed;left:0;top:0;z-index:1;display:none;pointer-events:none;overflow:visible;color:var(--muted);will-change:transform}
.hero-foot,.approach>h2{position:relative;z-index:2}
@media(min-width:1000px){.hero-foot span:first-child{padding-left:30px}}
@media(min-width:800px) and (max-height:750px) and (prefers-reduced-motion:no-preference){
  .process-stack .process-steps{height:calc(100vh - 160px);min-height:360px}
}
@media(min-width:800px) and (max-height:550px) and (prefers-reduced-motion:no-preference){
  .approach .approach-tools{position:relative;bottom:auto}
}

/* Keep the section label in the same viewport as the artwork, cards, and tools. */
@media (min-width:800px) and (prefers-reduced-motion:no-preference){
  .approach>h2{position:sticky;top:clamp(14px,2.5vh,28px);z-index:6;width:max-content;max-width:100%;background:var(--bg)}
}

/* Let the diagram pass behind the hero footer as it enters Approach. */
@media (min-width:1000px) and (prefers-reduced-motion:no-preference){.hero-foot{background:var(--bg)}}

/* Fill the opening viewport while leaving a narrow glimpse of Approach. */
.hero{min-height:calc(100svh - 132px);display:flex;flex-direction:column}
.hero-foot{margin-top:auto}
.approach{margin-top:0}

/* On small screens the travelling diagram passes behind the hero copy. */
@media(max-width:999px){.hero-copy{position:relative;z-index:2}}

/* Give the current-role line room before the mobile hero footer. */
@media(max-width:700px){.hero-layout{margin-bottom:40px}}

/* The mobile handoff also travels behind the hero footer divider and copy. */
.hero-foot{background:var(--bg)}
