/*
Theme Name: Joseph Frederick
Version: 1.0.0
Description: Joseph’s custom portfolio with editable page sections, projects, career entries, and photo galleries.
Author: Joseph Frederick
License: GPL-2.0-or-later
*/
@font-face{font-family:Inter;src:url('assets/fonts/Inter-Variable.ttf') format('truetype');font-weight:100 900;font-style:normal;font-display:swap}
:root{color-scheme:light;--paper:#f4f2ec;--ink:#333;--rule:#d3cec3;--accent:#b14949;--gutter:clamp(24px,4.026vw,55px);--serif:'georgiapro',Georgia,serif;--sans:Inter,system-ui,sans-serif}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:30px}body{margin:0;color:var(--ink);background:var(--paper);font:18px/1.45 var(--serif)}a{color:inherit;text-underline-offset:3px}button,input,textarea{font:inherit;color:inherit}button,a,summary{-webkit-tap-highlight-color:transparent}button,summary{cursor:pointer}button{border:0}h1,h2,h3,p,figure{margin:0}h1,h2,h3{font-weight:600}img{display:block;max-width:100%}a:focus-visible,button:focus-visible,summary:focus-visible,input:focus-visible,textarea:focus-visible{outline:2px solid var(--accent);outline-offset:5px}[hidden]{display:none!important}.site{max-width:1600px;margin:auto;min-height:100svh;display:flex;flex-direction:column}main{flex:1;min-width:0}.skip,.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.skip:focus{position:fixed;top:12px;left:12px;width:auto;height:auto;padding:12px;clip:auto;background:var(--paper);z-index:20}header{height:75px;padding:14px var(--gutter);display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--rule);position:relative;z-index:5}.mark{display:block;width:31px;height:45px}.mark img{width:31px;height:45px;object-fit:contain;mix-blend-mode:multiply}.eyebrow,.text-link{font-family:var(--sans);font-size:12px;line-height:1.6;font-weight:400;letter-spacing:2.5px;text-transform:uppercase}.text-link{color:var(--accent);display:inline-flex;align-items:center;gap:9px;text-decoration:none;min-height:38px}.text-link .link-arrow{font-size:12px;transition:transform 180ms ease}.text-link:hover .link-arrow{transform:translateX(3px)}.pending-link{cursor:default}.pending-link:not(.text-link){text-decoration:underline}.pending-link .link-arrow{transform:none!important}.menu{font-family:var(--sans)}.menu>summary{display:flex;align-items:center;gap:10px;font-size:12px;letter-spacing:2.5px;list-style:none;min-height:44px}.menu>summary::-webkit-details-marker{display:none}.menu-icon{height:33px;width:33px;border:1px solid var(--ink);border-radius:50%;display:grid;place-content:center;gap:5px}.menu-icon:before,.menu-icon:after{content:'';width:17px;height:1px;background:var(--ink);transition:transform 180ms ease}.menu[open] .menu-icon:before{transform:translateY(3px) rotate(45deg)}.menu[open] .menu-icon:after{transform:translateY(-3px) rotate(-45deg)}.menu nav{position:absolute;right:var(--gutter);top:calc(100% + 14px);width:340px;max-width:calc(100vw - 48px);padding:24px;background:var(--paper);border:1px solid var(--rule);box-shadow:0 12px 30px #3333330d}.menu nav a{display:flex;justify-content:space-between;text-decoration:none;font:30px/1.3 var(--serif);padding:13px 0;border-bottom:1px solid var(--rule)}.menu nav a:last-child{border:0}.menu nav a:hover,.menu nav a[aria-current=page]{color:var(--accent)}.menu nav a span{font:18px var(--sans)}
.hero{position:relative;height:693px;isolation:isolate}.hero-copy{position:absolute;top:185px;left:50%;transform:translateX(-50%);width:450px;max-width:calc(100% - 48px);text-align:center;z-index:1}.hero h1{font-size:40px;line-height:50px;font-weight:600}.hero .text-link{margin-top:24px}.hero-art{position:absolute;inset:0;z-index:-1;overflow:hidden}.station{position:absolute;width:74%;height:auto;left:8%;bottom:0;mix-blend-mode:multiply}.building{position:absolute;height:385px;width:220px;right:4.1%;bottom:0;mix-blend-mode:multiply}.statement{height:342px;background:var(--ink);color:var(--paper);text-align:center;position:relative;padding:68px 24px 85px}.statement>p:first-child{font-size:25px;line-height:33px;font-style:italic;max-width:650px;margin:auto}.statement-role{font-size:14px;font-style:italic;margin-top:72px}.statement-role strong{font-weight:700}.windmill{position:absolute;bottom:0;left:50%;transform:translateX(-50%);width:60px;height:82px;object-fit:contain;mix-blend-mode:screen}.highlights{padding:55px var(--gutter) 64px}.section-label{text-align:center}.highlight-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:85px;margin-top:24px;text-align:center}.highlight-grid h3{font-size:25px;line-height:31px;font-weight:600;max-width:330px;margin:auto}.highlight-grid .text-link{margin-top:12px}.home-work{margin:0 var(--gutter);border-block:1px solid var(--rule)}.work-section-heading{padding-top:28px;padding-bottom:12px}.work-row{display:grid;grid-template-columns:1fr 1fr;gap:40px;align-items:center;min-height:138px;padding:20px 0;text-decoration:none;position:relative}.work-row:before{content:'';position:absolute;left:calc(-1 * var(--gutter));top:50%;transform:translateY(-50%);border-top:15px solid transparent;border-bottom:15px solid transparent;border-left:34px solid var(--accent);transition:border-left-width 180ms ease}.work-row:hover:before{border-left-width:40px}.work-row h2{font-size:48px;line-height:1.2;font-weight:700}.work-summary{font-size:18px;line-height:25px}.career-intro{padding:210px var(--gutter) 190px;display:grid;grid-template-columns:1fr 1fr;gap:40px;align-items:center;min-height:850px}.portrait-placeholder{padding:90px 0 0 10vw;min-height:450px;display:flex;align-items:center}.portrait-placeholder .eyebrow{line-height:26px;letter-spacing:3px}.career-intro-copy>p{font-size:25px;line-height:32px;margin-top:24px}.career-intro-copy>.text-link{margin-top:32px}.footer-illustration{height:60px;margin:0 var(--gutter);position:relative}.footer-illustration img{position:absolute;bottom:6px;right:60px;mix-blend-mode:multiply}footer{border-top:1px solid var(--rule);margin:0 var(--gutter);padding:26px 0 24px;font-size:15px;line-height:18px}.footer-identity{display:flex;align-items:center;gap:40px}.footer-identity strong{font-weight:700}.current-role{border-left:1px solid var(--rule);padding:8px 0 8px 16px;font-style:italic}.footer-links{display:flex;align-items:center;margin-top:46px;font-style:italic;font-size:14px}.footer-links>*+*{border-left:1px solid var(--rule);margin-left:42px;padding-left:42px}.page-heading{text-align:center;padding:75px 24px 72px}.page-heading h1{font-size:40px;line-height:50px;max-width:800px;margin:auto}.work-grid{display:grid;grid-template-columns:1fr 1fr;gap:32px 54px;padding:0 calc(var(--gutter) + 20px) 100px}.work-card{border:1px solid var(--rule);border-radius:10px;padding:35px 40px;text-decoration:none;min-height:154px;transition:transform 180ms ease,border-color 180ms ease}.work-card h2{font-size:48px;font-weight:700;line-height:1.2;margin-top:8px}.work-card:hover{transform:translateY(-2px);border-color:var(--accent)}.approach-intro{max-width:900px;margin:auto;padding:120px 24px 130px;text-align:center}.approach-intro h1{font-size:40px;line-height:50px;max-width:680px;margin:auto}.approach-intro>p{font-size:25px;line-height:32px;margin-top:26px}.principles{margin:0 var(--gutter);border-top:1px solid var(--rule);padding:42px 0 165px}.principle-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:40px;margin-top:40px}.principle-grid h3{font-size:25px;font-weight:400;font-style:italic;margin-bottom:10px}.principle-grid p{font-size:25px;line-height:36px;font-weight:600}.principle-links{margin-top:17px;display:flex;flex-direction:column;align-items:flex-start}.principle-links .text-link{font-size:12px;min-height:25px;letter-spacing:2px}.contact-layout{display:grid;grid-template-columns:1fr 1fr;gap:100px;padding:125px var(--gutter) 80px}.contact-copy{padding-top:50px}.contact-copy h1{font-size:40px}.contact-placeholder{font-size:28px;line-height:34px;max-width:470px;margin-top:55px}.contact-links{display:flex;flex-direction:column;align-items:flex-start;gap:9px;font-size:22px;font-style:italic;margin-top:26px}.contact-form label{display:block;font-family:var(--sans);font-size:14px;letter-spacing:2.5px;text-transform:uppercase;margin-bottom:5px}.contact-form input,.contact-form textarea{display:block;width:100%;border:1px solid var(--rule);border-radius:12px;background:transparent;padding:15px;margin:0 0 20px;line-height:1.5}.contact-form input{height:54px}.contact-form textarea{resize:vertical;min-height:150px}.send-button{font:14px var(--sans);letter-spacing:2.5px;text-transform:uppercase;background:var(--ink);color:var(--paper);padding:28px 58px;transition:background 180ms ease}.send-button:hover{background:var(--accent)}.form-note,.form-status{font:12px/1.6 var(--sans);max-width:400px;margin-top:12px;color:#68645d}.project-layout{display:grid;grid-template-columns:41% 1fr;gap:120px;padding:0 var(--gutter) 210px}.project-gallery{padding-top:0}.project-image{height:520px;background:#ddd}.image-2{background:#b4b4b4;height:580px}.image-3{background:#cec8c8;height:580px}.image-4{background:#999;height:580px}.project-copy{padding-top:95px;align-self:start;position:sticky;top:0}.project-pagination{display:flex;justify-content:space-between;gap:12px;border-bottom:1px solid var(--rule);padding-bottom:24px;margin-bottom:52px}.project-pagination .text-link{font-size:12px;letter-spacing:2px}.project-copy h1{font-size:25px;margin-bottom:30px}.project-section{border-bottom:1px solid var(--rule);padding:0 0 20px;margin-bottom:16px}.project-section>summary{display:flex;justify-content:space-between;align-items:center;font-weight:700;font-size:20px;list-style:none}.project-section>summary::-webkit-details-marker{display:none}.project-section>summary:after{content:'⌄';font-family:var(--sans);font-weight:400}.project-section[open]>summary:after{content:'⌃'}.project-section>p{margin:12px 0 25px;font-size:18px;line-height:25px}.project-story section{margin-top:24px}.project-story h3{font-size:18px;margin-bottom:8px}.project-story p{font-size:18px;line-height:26px}.image-switch{display:flex;justify-content:space-between;align-items:center;font:13px var(--sans);margin-top:25px}.image-switch>div{display:flex;padding:4px;border-radius:30px;background:#ebe8e1;border:1px solid var(--rule)}.image-switch button{border-radius:25px;background:transparent;padding:10px 20px;font:13px var(--sans)}.image-switch button[aria-pressed=true]{background:var(--ink);color:var(--paper)}.project-layout.images-hidden{grid-template-columns:1fr;max-width:1000px;margin:auto;min-height:850px}.project-layout.images-hidden .project-copy{position:static}.resume-heading{text-align:center;padding:100px 24px 110px}.resume-heading h1{font-size:52px;line-height:1.2;margin:18px 0 22px}.resume-heading>p:not(.eyebrow){font-size:25px}.resume-chapters{display:flex;justify-content:center;gap:34px;margin-top:50px;font:12px var(--sans);letter-spacing:1.5px;text-transform:uppercase}.resume-chapters a{text-decoration:none}.resume-chapters a:hover{color:var(--accent)}.chapter-badge{display:flex;align-items:center;justify-content:center;width:142px;height:142px;border:1px solid var(--rule);outline:1px solid var(--rule);outline-offset:6px;border-radius:50%;background:var(--paper);font:12px var(--sans);letter-spacing:1.5px;text-transform:uppercase;margin:0 auto 60px;position:relative;z-index:1}.resume-experience{background:transparent;color:var(--ink);padding:0 var(--gutter) 100px}.resume-experience>.chapter-badge{transform:translateY(-50%);margin-bottom:-12px;color:var(--ink)}.timeline{max-width:1050px;margin:auto}.timeline-row{display:grid;grid-template-columns:150px 1fr 150px;gap:45px;padding:45px 0;border-bottom:1px solid var(--rule);align-items:start}.timeline-row:last-child{border:0}.timeline-date{text-align:right;padding-top:7px;white-space:nowrap}.timeline-copy h3{font-size:30px;margin-bottom:12px}.timeline-copy>p{font-size:18px;line-height:27px}.timeline-copy .text-link{color:var(--accent);margin-top:14px}.resume-role{font-size:22px!important}.draft-copy{opacity:.65;font-style:italic}.timeline-copy>.draft-copy{margin-top:15px}.timeline-note{padding-top:7px;font-size:11px;letter-spacing:1px}.resume-project-frame{height:110px;width:150px;border:1px solid var(--rule);outline:1px solid var(--rule);outline-offset:5px;border-radius:6px;display:flex;align-items:center;justify-content:center;text-decoration:none;font:24px var(--sans);transition:border-color 180ms ease}.resume-project-frame:hover{border-color:var(--accent)}.resume-knowledge{padding:0 var(--gutter) 130px}.resume-knowledge>.chapter-badge{transform:translateY(-50%);margin-bottom:-10px}.skills-grid{list-style:none;display:grid;grid-template-columns:repeat(6,1fr);gap:20px;max-width:1100px;margin:10px auto 0;padding:0}.skills-grid li{border-top:2px solid var(--ink);padding-top:30px;min-height:150px}.skill-index{color:var(--accent)}.skills-grid h3{font-size:24px;margin-top:30px}.resume-character{text-align:center;padding:0 var(--gutter) 100px}.resume-character>h3{font-size:32px}.character-list{list-style:none;max-width:750px;padding:0;margin:35px auto;font-size:24px;line-height:34px}.character-list li{padding:24px 0;border-bottom:1px solid var(--rule)}.character-list li:last-child{border:0}.resume-personal{margin-top:55px}.resume-personal .draft-copy{margin-top:16px}.resume-links{background:var(--ink);color:var(--paper);padding:65px var(--gutter) 70px;text-align:center;margin-bottom:80px}.resume-links .chapter-badge{background:var(--ink);color:var(--paper);margin-bottom:35px}.resume-links>div{display:flex;justify-content:center;gap:70px}.resume-links .text-link{color:#e2a3a3}body:not(.home) footer{margin-top:auto}
@media(max-width:1050px){.hero-copy{top:120px}.hero{height:600px}.hero h1{font-size:36px;line-height:45px}.building{height:300px;width:172px}.highlight-grid{gap:35px}.work-row h2{font-size:36px}.career-intro{padding-block:140px;min-height:700px}.career-intro-copy>p{font-size:23px}.portrait-placeholder{padding-left:4vw}.principle-grid{grid-template-columns:1fr 1fr;gap:45px}.principles{padding-bottom:100px}.approach-intro{padding-block:90px}.work-card{padding:25px}.work-card h2{font-size:38px}.work-grid{gap:25px;padding-inline:var(--gutter)}.project-layout{gap:55px;grid-template-columns:40% 1fr}.project-copy{padding-top:55px}.project-pagination{margin-bottom:35px}.contact-layout{gap:60px;padding-top:85px}.timeline-row{grid-template-columns:120px 1fr 110px;gap:30px}.resume-project-frame{width:110px}.skills-grid{grid-template-columns:repeat(3,1fr);gap:35px}.skills-grid li{min-height:100px}.skills-grid h3{margin-top:15px}}
@media(max-width:640px){body{font-size:16px}header{height:70px;padding-block:10px}.mark,.mark img{width:28px;height:41px}.menu nav{width:calc(100vw - 48px)}.menu nav a{font-size:26px}.hero{height:560px}.hero-copy{top:65px;width:330px}.hero h1{font-size:30px;line-height:39px}.hero .text-link{margin-top:20px}.building{width:105px;height:184px;right:3%}.station{width:100%;left:-14%;max-width:none}.statement{height:auto;min-height:340px;padding:48px 24px 100px}.statement>p:first-child{font-size:22px;line-height:30px}.statement-role{font-size:12px;margin-top:30px;max-width:270px;margin-inline:auto;line-height:19px}.windmill{width:44px;height:60px}.highlights{padding-block:45px}.highlight-grid{grid-template-columns:1fr;gap:34px;margin-top:28px}.highlight-grid h3{font-size:24px;line-height:31px;max-width:330px}.highlight-grid .text-link{margin-top:8px}.work-section-heading{padding-top:20px}.work-row{grid-template-columns:1fr;gap:18px;padding:30px 0 30px 12px;min-height:0}.work-row h2{font-size:34px}.work-row:before{border-left-width:16px;border-top-width:9px;border-bottom-width:9px;top:65px}.work-row:hover:before{border-left-width:18px}.work-summary{font-size:16px;line-height:24px}.career-intro{grid-template-columns:1fr;padding-block:70px 90px;gap:45px;min-height:0}.portrait-placeholder{min-height:220px;justify-content:center;padding:0}.portrait-placeholder .eyebrow{font-size:11px}.career-intro-copy>p{font-size:22px;line-height:31px;margin-top:18px}.career-intro-copy>.text-link{margin-top:35px}.footer-illustration img{right:10px;width:70px;height:auto}footer{font-size:12px;line-height:17px;padding-top:24px}.footer-identity{display:block}.current-role{border:0;padding:0;margin-top:18px}.footer-links{font-size:12px;gap:14px;flex-wrap:wrap;margin-top:26px}.footer-links>*+*{margin:0;padding-left:14px}.page-heading{padding:55px 24px}.page-heading h1{font-size:30px;line-height:39px}.page-heading br{display:none}.work-grid{grid-template-columns:1fr;gap:20px;padding-bottom:65px}.work-card{min-height:135px;padding:25px}.work-card h2{font-size:36px}.approach-intro{padding:55px 24px 65px}.approach-intro h1{font-size:30px;line-height:39px}.approach-intro>p{font-size:21px;line-height:30px}.principles{padding-top:32px;padding-bottom:70px}.principle-grid{grid-template-columns:1fr;gap:38px;margin-top:30px}.principle-grid h3{font-size:23px}.principle-grid p{font-size:25px;line-height:35px}.principle-links{margin-top:12px}.contact-layout{grid-template-columns:1fr;padding:45px 24px 65px;gap:45px}.contact-copy{padding-top:0}.contact-copy h1{font-size:36px}.contact-placeholder{font-size:24px;line-height:32px;margin-top:24px}.contact-links{font-size:20px}.contact-form label{font-size:12px}.send-button{padding:22px 45px}.project-layout{display:flex;flex-direction:column;gap:40px;padding:0 24px 70px}.project-copy{order:-1;position:static;width:100%;padding-top:30px}.project-pagination{padding-bottom:18px;margin-bottom:28px}.project-pagination .text-link{font-size:10px;letter-spacing:1.5px}.project-gallery{width:100%}.project-image,.image-2,.image-3,.image-4{height:360px}.project-layout.images-hidden{min-height:650px}.resume-heading{padding:65px 24px 105px}.resume-heading h1{font-size:38px}.resume-heading>p:not(.eyebrow){font-size:22px}.resume-chapters{gap:17px;flex-wrap:wrap;font-size:10px;letter-spacing:1px;margin-top:35px}.chapter-badge{width:120px;height:120px;font-size:10px}.resume-experience{padding-bottom:65px}.timeline-row{grid-template-columns:1fr;gap:12px;padding-block:30px}.timeline-date{text-align:left;padding:0}.timeline-copy h3{font-size:28px}.timeline-copy>p{font-size:17px;line-height:26px}.timeline-note{font-size:10px}.resume-project-frame{width:110px;height:75px;margin-top:8px}.resume-knowledge{padding-bottom:70px}.skills-grid{grid-template-columns:1fr 1fr;gap:28px 22px}.skills-grid h3{font-size:23px}.resume-character{padding-bottom:60px}.resume-character>.chapter-badge{margin-bottom:35px}.character-list{font-size:22px;line-height:31px;margin-top:20px}.resume-links{padding:50px 24px;margin-bottom:55px}.resume-links>div{flex-direction:column;gap:15px;align-items:center}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{transition:none!important;animation:none!important}}
@media print{header,.resume-chapters,.resume-links,footer,.resume-project-frame{display:none!important}.resume-heading{padding:20px}.resume-experience{background:white;color:black;padding:0}.chapter-badge{transform:none!important;width:auto;height:auto;border:0;outline:0;margin:20px auto!important}.timeline-row{break-inside:avoid;padding:20px 0;border-color:#ccc;grid-template-columns:100px 1fr}.timeline-copy .text-link{display:none}.resume-knowledge,.resume-character{padding:20px}.resume-heading h1{font-size:30px}.resume-character{break-before:page}}

header,.hero-art{background:var(--paper)}.building{mix-blend-mode:darken}.windmill,.station,.footer-illustration img,.mark img{mix-blend-mode:normal}

.resume-experience,.resume-knowledge{scroll-margin-top:100px}
.menu[open] nav{animation:menu-enter 160ms ease-out both}
@keyframes menu-enter{from{opacity:0;transform:translateY(-3px)}to{opacity:1;transform:translateY(0)}}

.resume-knowledge>.section-label{margin:0 auto 40px}.resume-knowledge .skills-grid{margin-top:0}

/* Edge-to-edge footer road; content keeps the same alignment as the pages. */
.site{max-width:none}
header,main{width:100%;max-width:1600px;margin-inline:auto}
footer{margin:0;padding:26px max(var(--gutter),calc((100% - 1490px)/2)) 24px}
.footer-illustration{height:60px;width:100%;margin:0;overflow:hidden;position:relative}
.footer-illustration img{width:90px;height:42px;max-width:none;position:absolute;left:100%;right:auto;bottom:-1px;visibility:hidden;mix-blend-mode:normal}
.footer-illustration.is-driving img{visibility:visible;animation:bus-drive 18s linear infinite}
.footer-illustration.is-paused img{animation-play-state:paused}
@keyframes bus-drive{from{transform:translateX(0)}to{transform:translateX(calc(-100vw - 100%))}}
/* Let copy determine height, reserving a clear gap above the grounded windmill. */
.statement{height:auto;min-height:366px;padding:68px 24px 112px}
.statement-role{margin-top:60px}
.windmill{bottom:-1px;object-position:center bottom}
@media(max-width:640px){.statement{min-height:355px;padding:48px 24px 112px}.statement-role{margin-top:30px}.footer-illustration img{width:70px;height:auto}footer{padding-top:24px}}
@media(prefers-reduced-motion:reduce){.footer-illustration.is-driving img{animation:none;left:auto;right:var(--gutter);transform:none}}
@media print{.footer-illustration{display:none}}

/* Original SVG building, with restrained smoke anchored to the chimney opening. */
.building-scene{--building-height:385px;--building-width:214.65px;--smoke-rise:380px;position:absolute;right:4.1%;bottom:0;width:var(--building-width);height:var(--building-height)}
.building-scene>.building{position:relative;inset:auto;width:100%;height:100%;object-fit:contain;mix-blend-mode:normal}
.chimney-smoke{position:absolute;left:77.04%;bottom:100%;width:1px;height:1px;pointer-events:none}
.smoke-puff{--puff-size:7px;--puff-drift:12px;position:absolute;bottom:0;left:0;width:var(--puff-size);height:calc(var(--puff-size)*.8);border-radius:42% 58% 45% 40%;background:var(--ink);opacity:1;animation:chimney-drift 12s linear infinite;will-change:transform}
.smoke-puff:nth-child(2){--puff-size:10px;--puff-drift:22px;animation-duration:14s;animation-delay:-3.5s}
.smoke-puff:nth-child(3){--puff-size:6px;--puff-drift:-12px;animation-duration:11s;animation-delay:-6s}
.smoke-puff:nth-child(4){--puff-size:9px;--puff-drift:16px;animation-duration:13s;animation-delay:-9s}
@keyframes chimney-drift{0%{transform:translate(-50%,0) scale(.65)}35%{transform:translate(calc(-50% - 5px),calc(var(--smoke-rise)*-.35)) scale(1.3)}70%{transform:translate(calc(-50% + var(--puff-drift)),calc(var(--smoke-rise)*-.7)) scale(2.2)}100%{transform:translate(calc(-50% + var(--puff-drift)),calc(var(--smoke-rise)*-1)) scale(3)}}
.hero-art.is-motion-paused .smoke-puff,.hero-art.is-document-paused .smoke-puff{animation-play-state:paused}
@media(max-width:1050px){.building-scene{--building-height:300px;--building-width:167.26px}}
@media(max-width:640px){.building-scene{--building-height:184px;--building-width:102.58px;--smoke-rise:430px;right:3%}}
@media(prefers-reduced-motion:reduce){.chimney-smoke{display:none}}

/* Trim the SVG’s empty baseline and overlap one pixel to avoid a rendering seam. */
.station{bottom:-1px}

/* Overlapping lobes make each solid puff an irregular cloud silhouette. */
.smoke-puff::before,.smoke-puff::after{content:"";position:absolute;background:inherit;border-radius:50%}
.smoke-puff::before{width:66%;height:100%;left:10%;top:-43%}
.smoke-puff::after{width:60%;height:86%;right:-14%;top:-12%}
.smoke-puff:nth-child(even){border-radius:55% 40% 52% 36%}
.smoke-puff:nth-child(even)::before{left:29%;top:-36%;width:61%}
/* Station figures remain still. */
.station-pacer{animation:none}

/* Career: employer/date/location columns and optional related project links. */
.timeline-row{grid-template-columns:155px minmax(0,1fr) 150px;gap:32px}
.timeline-date{white-space:normal;font-size:11px;line-height:1.6;letter-spacing:1.4px}
.timeline-copy h2{font-size:30px;line-height:1.2;margin-bottom:14px}
.timeline-copy .resume-role{font-size:22px;line-height:1.35}
.timeline-copy .resume-employment{font:11px/1.5 var(--sans);margin-top:8px;color:#68645d}
.timeline-copy .resume-description{margin-top:20px}
.timeline-note{line-height:1.6}
.resume-project-links{display:flex;flex-wrap:wrap;column-gap:28px;row-gap:4px;margin-top:6px}
.resume-project-links .text-link{margin-top:12px}
.resume-heading .resume-download{display:inline-flex;margin-top:30px;font-size:12px}
/* Door bottom shares the station platform baseline; crop surplus foundation. */
.building-scene{bottom:calc(var(--building-height)*-.063)}
@media(max-width:1050px){.timeline-row{grid-template-columns:120px minmax(0,1fr) 110px;gap:24px}}
@media(max-width:640px){.timeline-row{grid-template-columns:1fr;gap:12px}.timeline-copy h2{font-size:28px}.timeline-note{padding-top:0}.timeline-copy .resume-role{font-size:21px}.timeline-date{text-align:left}}
@media print{.resume-download{display:none!important}.timeline-row{grid-template-columns:100px 1fr 100px;gap:18px}.timeline-copy h2{font-size:20px}}

/* One train journey: 5s initial delay, 6s arrival, 5s stop, 7s departure. */
.station{z-index:1}
.building-scene{z-index:3}
.train-track{position:absolute;inset:0;z-index:2;pointer-events:none;transform:translateX(-105%)}
.train{position:absolute;left:0;bottom:-3px;width:74%;height:auto;max-width:none}
.hero-art.is-train-ready .train-track{animation:station-train-pass 18s 5s both}
@keyframes station-train-pass{0%{transform:translateX(-105%);animation-timing-function:cubic-bezier(.18,.55,.3,1)}33.333333%,61.111111%{transform:translateX(8%);animation-timing-function:cubic-bezier(.65,0,.8,.45)}100%{transform:translateX(101%)}}
.hero-art.is-motion-paused .train-track,.hero-art.is-document-paused .train-track{animation-play-state:paused}
@media(max-width:640px){.train{width:100%}}
@media(prefers-reduced-motion:reduce){.hero-art .train-track{display:none;animation:none}}

/* Original signature, written with a two-stroke reveal mask. */
.mark svg{display:block;width:31px;height:45px;overflow:visible}
.signature-stroke{stroke-dasharray:1;stroke-dashoffset:0}
.portrait-illustration{display:flex;justify-content:center;align-items:center;min-height:450px}
.portrait-illustration img{display:block;width:min(100%,355px);height:auto;object-fit:contain}
.principle-grid{text-align:center}
.principle-links{align-items:center}
.personal-bio{border-top:1px solid var(--rule);margin:0 var(--gutter) 130px;padding:65px 24px 0;text-align:center}
.personal-bio>p{max-width:740px;margin:30px auto 0;font-size:25px;line-height:1.5}
.work-filters{display:flex;flex-wrap:wrap;justify-content:center;gap:8px 12px;margin:0 var(--gutter) 28px}
.work-filters[hidden]{display:none}
.work-filters button{background:transparent;border:1px solid var(--rule);border-radius:24px;padding:9px 14px;font:11px/1.4 var(--sans);color:var(--ink)}
.work-filters button[aria-pressed=true]{background:var(--ink);color:var(--paper);border-color:var(--ink)}
.work-card{padding:0;overflow:hidden;min-height:180px}
.work-card[hidden]{display:none}
.work-card-copy{padding:28px 32px}
.work-card h2{font-size:34px;line-height:1.15;overflow-wrap:anywhere}
.work-card-image{width:100%;height:auto;aspect-ratio:16/9;object-fit:cover;display:block}
.work-card-summary{font-size:17px;line-height:1.45;margin-top:16px}
.project-figure{margin:0}
.project-figure img{display:block;width:100%;height:auto}
.project-imagery-pending{min-height:400px;display:grid;place-items:center;text-align:center;border:1px solid var(--rule);color:#68645d;padding:24px}
.project-draft-note{font:11px/1.5 var(--sans);color:#68645d;margin:-10px 0 25px}
.project-category{margin-bottom:12px}
.project-copy{position:static}
@media(max-width:640px){.mark svg{width:28px;height:41px}.portrait-illustration{min-height:0}.portrait-illustration img{width:min(80%,280px)}.personal-bio{margin-bottom:70px;padding:40px 0 0}.personal-bio>p{font-size:22px}.work-card-copy{padding:24px}.work-card h2{font-size:30px}.project-imagery-pending{min-height:220px}}

/* Subtle paper tooth, with charcoal confined to the non-text outer gutter. */
:root{--paper-grain:url('assets/illustrations/paper-grain.svg')}
body,header,.hero-art,.menu nav{background-image:var(--paper-grain);background-repeat:repeat;background-size:180px 180px}
.resume-heading .resume-headline{max-width:800px;margin-inline:auto;font-size:23px;line-height:1.45}
@media(max-width:640px){.resume-heading .resume-headline{font-size:21px}}
@media print{body,header,.hero-art{background-image:none}}

.statement-role .career-role-link{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:4px;color:inherit}

.statement-role .career-role-link{font-weight:400}.statement-role .career-role-link strong{font-weight:700}

.work-page .page-heading{padding-bottom:28px}
@media(max-width:640px){.work-page .page-heading{padding-bottom:24px}}

/* Staggered, tilted paper cards on a horizontally browsable table. */
.work-board{padding-bottom:70px;min-width:0}
.work-board-controls{display:flex;justify-content:center;gap:12px;margin:0 0 8px}
.work-board-controls[hidden]{display:none}
.work-board-controls button{width:42px;height:42px;border:1px solid var(--rule);border-radius:50%;background:var(--paper);font:22px/1 var(--sans);transition:background 160ms ease,opacity 160ms ease}
.work-board-controls button:hover:not(:disabled){background:#e7e2d8}
.work-board-controls button:disabled{opacity:.3;cursor:default}
.work-card-viewport{overflow-x:auto;overflow-y:hidden;width:100%;overscroll-behavior-x:contain;scrollbar-width:thin;scrollbar-color:#b6aea0 transparent;cursor:grab}
.work-card-viewport:focus-visible{outline-offset:-3px}
.work-card-viewport.is-dragging{cursor:grabbing;user-select:none}
.work-page .work-grid{--card-width:350px;display:grid;grid-template-rows:repeat(3,230px);grid-auto-flow:column;grid-auto-columns:var(--card-width);column-gap:64px;row-gap:58px;width:max-content;min-width:100%;padding:56px 150px 62px 56px;align-items:stretch}
.work-page .work-card{--row-offset:0px;display:block;width:var(--card-width);height:100%;min-height:0;border:1px solid #d9d2c5;border-radius:3px;background-color:var(--paper);background-image:url('assets/illustrations/card-paper-grain.svg');background-size:180px 180px;box-shadow:0 3px 4px #33333313,3px 9px 16px #33333320;transform:translateX(var(--row-offset)) rotate(-9deg);transform-origin:center;overflow:hidden;transition:box-shadow 180ms ease,border-color 180ms ease}
.work-page .work-card:nth-child(3n+2){--row-offset:88px}
.work-page .work-card:hover,.work-page .work-card:focus-visible{transform:translateX(var(--row-offset)) rotate(-9deg);box-shadow:0 5px 8px #33333318,4px 13px 22px #3333332b;border-color:#b9af9f}
.work-page .work-card-copy{padding:25px 27px}
.work-page .work-card .eyebrow{font-size:9px;line-height:1.4;letter-spacing:1.6px}
.work-page .work-card h2{font-size:26px;line-height:1.12;margin-top:10px;overflow-wrap:normal}
.work-page .work-card-summary{font-size:15px;line-height:1.4;margin-top:14px;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden}
@media(max-width:640px){.work-board{padding-bottom:45px}.work-page .work-grid{--card-width:min(76vw,310px);grid-template-rows:repeat(2,230px);column-gap:44px;row-gap:54px;padding:46px 105px 52px 32px}.work-page .work-card-copy{padding:23px}.work-page .work-card h2{font-size:24px}.work-page .work-card-summary{font-size:14px}}
@media(prefers-reduced-motion:reduce){.work-card-viewport{scroll-behavior:auto}.work-page .work-card{transition:none}}
@media print{.work-board-controls{display:none}.work-card-viewport{overflow:visible}.work-page .work-grid{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:none;grid-auto-flow:row;width:100%;padding:20px;gap:25px}.work-page .work-card{transform:none!important;width:auto;min-height:220px;break-inside:avoid;box-shadow:none}}

/* Rotate one coherent table, so cards and row gaps share the same diagonal. */
.work-card-viewport{height:clamp(580px,76vh,820px);overflow:auto;overscroll-behavior:contain}
.work-table{position:relative;width:max-content;min-width:100%;min-height:100%}
.work-page .work-grid{position:relative;display:grid;grid-template-columns:repeat(var(--work-columns,7),var(--card-width));grid-template-rows:none;grid-auto-rows:230px;grid-auto-flow:row;grid-auto-columns:auto;min-width:0;width:max-content;padding:0;transform-origin:0 0}
.work-page .work-card,.work-page .work-card:hover,.work-page .work-card:focus-visible{transform:none}
.work-page .work-card:nth-child(3n+2){--row-offset:0px}
@media(max-width:640px){.work-card-viewport{height:620px;max-height:80svh;min-height:460px}.work-page .work-grid{grid-template-rows:none;grid-auto-rows:230px;padding:0;column-gap:54px;row-gap:52px}}
@media print{.work-card-viewport{height:auto;max-height:none;overflow:visible}.work-table{width:auto!important;height:auto!important}.work-page .work-grid{position:relative!important;top:auto!important;left:auto!important;transform:none!important;grid-template-columns:1fr 1fr;width:100%;grid-auto-rows:auto;padding:20px}}

.signature.is-pending{visibility:hidden}

.portrait-illustration .portrait-photograph{filter:grayscale(1);aspect-ratio:1;object-fit:cover;border-radius:2px}

.work-board.is-filtering .work-card-viewport,.work-board.is-filtering .work-board-controls{pointer-events:none}.work-board.is-filtering .work-card-viewport{cursor:default}

/* Printed project seals sit fully inside the right edge. */
.work-page .work-card.has-badge{position:relative;overflow:visible}
.work-page .has-badge .work-card-copy{padding-right:146px}
.work-page .project-badge{position:absolute;right:20px;top:50%;width:108px;height:auto;max-width:none;transform:translateY(-50%);pointer-events:none;user-select:none;filter:none;mix-blend-mode:multiply;opacity:.68}
@media(max-width:640px){.work-page .project-badge{width:88px}.work-page .has-badge .work-card-copy{padding-right:124px}}

@media(min-width:1051px){.project-copy h1{font-size:30px}}

/* Height is animated in both directions while retaining native disclosures. */
.project-section>summary[aria-expanded="false"]:after{content:"⌄"}
.project-section>summary[aria-expanded="true"]:after{content:"⌃"}

.project-heading{display:flex;align-items:center;gap:22px;margin-bottom:30px}.project-heading-copy{min-width:0}.project-heading-badge{width:92px;height:auto;flex-shrink:0;mix-blend-mode:multiply;opacity:.68}.project-heading h1{margin-bottom:0}.project-heading .project-category{margin-bottom:10px}
@media(max-width:640px){.project-heading{gap:16px}.project-heading-badge{width:72px}}

/* Edge-to-edge personal photographs; native touch scrolling and mouse dragging. */
.personal-photos{margin:0 0 80px;min-width:0}
.personal-photo-strip{display:flex;gap:14px;width:100%;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:thin;scrollbar-color:var(--rule) transparent;cursor:grab;user-select:none;padding-bottom:14px}
.personal-photo-strip img{display:block;flex:0 0 auto;width:auto;height:clamp(240px,30vw,400px);max-width:none;object-fit:contain;pointer-events:none}
.personal-photo-strip.is-dragging{cursor:grabbing;scroll-behavior:auto}
.personal-photo-strip:focus-visible{outline:2px solid var(--accent);outline-offset:4px}
@media(max-width:640px){.personal-photos{margin-bottom:50px}.personal-photo-strip{gap:10px}.personal-photo-strip img{height:260px}}

/* A gentle flight from the left, then five quiet seconds before repeating. */
.balloon-sky{position:absolute;inset:0;z-index:0;pointer-events:none}
.hot-air-balloon{position:absolute;width:97.5px;height:auto;max-width:none;left:10%;top:calc(100% - 500px);opacity:0;animation:balloon-flight 34s 3s linear infinite both}
@keyframes balloon-flight{0%{opacity:0;transform:translate(0,0) rotate(-3deg)}4%{opacity:.8}39%{opacity:.8;transform:translate(33vw,-165px) rotate(2deg)}77%{opacity:.8}85.3%,100%{opacity:0;transform:translate(76vw,-420px) rotate(-2deg)}}
.hero.is-motion-paused .hot-air-balloon,.hero.is-document-paused .hot-air-balloon{animation-play-state:paused}
@media(max-width:1050px){.hot-air-balloon{left:8%;top:calc(100% - 440px);width:80px}}
@media(max-width:640px){.hot-air-balloon{left:8px;top:calc(100% - 300px);width:50px;animation-name:balloon-flight-mobile}@keyframes balloon-flight-mobile{0%{opacity:0;transform:translate(0,0) rotate(-3deg)}4%{opacity:.8}39%{opacity:.8;transform:translate(38vw,-180px) rotate(2deg)}77%{opacity:.8}85.3%,100%{opacity:0;transform:translate(78vw,-420px) rotate(-2deg)}}}
@media(prefers-reduced-motion:reduce){.hot-air-balloon{display:none;animation:none}}

/* Add a little weight to the signature ink without altering its reveal mask. */
.mark .signature #signature-Path_1{stroke:var(--ink);stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}

.menu>summary{transition:color 180ms ease}
.menu-icon{transition:border-color 180ms ease}
.menu>summary:hover,.menu>summary:focus-visible{color:var(--accent)}
.menu>summary:hover .menu-icon,.menu>summary:focus-visible .menu-icon{border-color:var(--accent)}
.menu>summary:hover .menu-icon:before,.menu>summary:hover .menu-icon:after,.menu>summary:focus-visible .menu-icon:before,.menu>summary:focus-visible .menu-icon:after{background:var(--accent)}
.menu-icon:before,.menu-icon:after{transition:transform 180ms ease,background-color 180ms ease}

body.admin-bar header{position:relative}.jf-content-extra{padding:30px var(--gutter)}
