:root{color-scheme:dark;--bg: #141511;--bg-2: #1b1c17;--text: #efeee7;--muted: #aaa99f;--accent: #c0cbae;--accent-soft: #d2dac6;--line: rgba(239, 238, 231, .14);--media-matte: #2d302b;--font-main: "Manrope", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif}*{box-sizing:border-box}html{scroll-behavior:smooth}body{min-height:100vh;margin:0;padding:0;background:var(--bg);color:var(--text);font-family:var(--font-main);font-weight:400;letter-spacing:0;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}button{font:inherit}img,iframe{max-width:100%;display:block}a{color:inherit;text-decoration:none;transition:color .2s ease}a:hover{color:var(--accent-soft)}a:focus-visible,.tab:focus-visible{outline:2px solid rgba(192,203,174,.72);outline-offset:4px}hr{border:none;height:1px;background:var(--line);margin:24px 0 44px}.container{position:relative;z-index:1;width:100%;max-width:1280px;margin:0 auto;padding:clamp(56px,7vw,104px) clamp(24px,6.5vw,84px) clamp(88px,11vw,152px);background:transparent;box-shadow:none;animation:rise-in .7s ease both}body:not(.home) .container{max-width:1080px}h1,h2,h3,.projects-title{font-weight:300;letter-spacing:-.025em;color:var(--text);margin:0 0 12px}h1{font-size:3.25rem;line-height:1.05}h1.name{font-weight:300;font-size:clamp(3.5rem,6vw,5.4rem);line-height:.94;white-space:nowrap}h2{font-size:1.75rem;line-height:1.2;margin-top:28px}h3{font-size:1.25rem;line-height:1.25;margin-top:20px}p,li{color:var(--muted);line-height:1.75;font-size:1rem;max-width:68ch}.icon{width:16px;height:16px;flex:0 0 auto}.profile-section{display:grid;grid-template-columns:minmax(260px,.86fr) minmax(0,1.14fr);gap:clamp(48px,7vw,112px);align-items:center}.profile-section>*{min-width:0}body.home .profile-section{padding-block:0;margin-bottom:clamp(128px,16vw,208px)}.profile-picture{justify-self:start;width:100%;max-width:420px}.portrait{position:relative;width:100%;max-width:420px;aspect-ratio:4 / 3;border-radius:0;overflow:hidden;border:0;box-shadow:none;background:transparent;isolation:isolate}.portrait-img{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;display:block;object-fit:cover;border-radius:0;opacity:1;transition:opacity .7s cubic-bezier(.22,1,.36,1),filter .7s cubic-bezier(.22,1,.36,1),transform .7s cubic-bezier(.22,1,.36,1);z-index:1}.portrait-img-color{opacity:1;z-index:1}.portrait-img-bw{opacity:0;z-index:2}.portrait-canvas{position:absolute;top:50%;left:50%;width:150%;height:150%;display:block;opacity:0;z-index:3;pointer-events:none;transform:translate(-50%,-50%);transition:opacity .28s ease}.portrait.is-animating .portrait-img{opacity:0;filter:brightness(.88) contrast(1.04);transform:scale(1.006)}.portrait.is-animating{border-color:transparent;box-shadow:none;background:transparent;overflow:visible}.portrait.is-animating .portrait-canvas{opacity:1}.portrait-canvas.is-done{display:none}.bio-text{margin:0 0 24px;font-size:clamp(1.05rem,1.5vw,1.2rem);max-width:38ch}.profile-links{display:flex;flex-wrap:wrap;justify-content:flex-start;gap:16px 26px;margin-top:20px}.link-button,.github-link{display:inline-flex;align-items:center;gap:7px;padding:4px 0 5px;border:0;border-bottom:1px solid var(--line);border-radius:0;color:var(--text);font-weight:400;font-size:.9rem;transition:color .2s ease,border-color .2s ease}.link-button:hover,.github-link:hover{color:var(--accent-soft);border-color:var(--accent)}.projects-section{width:100%}.projects-title{margin:0 0 clamp(40px,6vw,68px);padding:0;border:0;font-size:clamp(2rem,3.8vw,3.25rem);line-height:1.05;text-transform:none;color:var(--text)}.grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:clamp(32px,5.5vw,72px);row-gap:clamp(64px,8vw,104px);margin-top:0}.grid-item{display:flex;flex-direction:column;gap:16px;align-items:flex-start;text-align:left}.grid-item-canvas{position:relative;width:100%;aspect-ratio:4 / 3;border-radius:0;overflow:hidden;background:var(--media-matte);border:0}.grid-item-image{width:100%;height:100%;display:block;object-fit:cover;object-position:center;transition:opacity .25s ease}.grid-item:hover .grid-item-image,.grid-item:focus-visible .grid-item-image{opacity:.88}.project-card--mujoco-quadruped .grid-item-canvas{background:#303431}.project-card--grahamsgallery .grid-item-canvas{background:#d8d4c9}.project-card--battlebots .grid-item-canvas{background:#332f2c}.project-card--material-analysis .grid-item-canvas{background:#d6d3ca}.project-card--grahamsgallery .grid-item-image,.project-card--mujoco-quadruped .grid-item-image{object-fit:contain}.project-card--battlebots .grid-item-image{clip-path:inset(13% 0)}.grid-item-caption{display:grid;grid-template-columns:auto 1fr auto;align-items:baseline;gap:14px;width:100%;font-size:1rem;font-weight:400;color:var(--text);transition:color .2s ease}.project-index{color:var(--muted);font-size:.72rem;letter-spacing:.1em}.project-arrow{color:var(--muted);transition:color .2s ease,transform .2s ease}.grid-item:hover .grid-item-caption,.grid-item:hover .project-arrow,.grid-item:focus-visible .grid-item-caption,.grid-item:focus-visible .project-arrow{color:var(--accent-soft)}.grid-item:hover .project-arrow,.grid-item:focus-visible .project-arrow{transform:translate(4px)}.header{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:28px}body:not(.home) h1{max-width:16ch;margin-bottom:24px;font-size:clamp(2.6rem,6vw,4.8rem)}.inline-link{color:var(--text);font-weight:400}.bio{margin-bottom:clamp(48px,7vw,72px)}.bio p{font-size:1.08rem}.readme-container{margin-bottom:clamp(44px,6vw,64px)}.readme-container ul{padding-left:20px}.readme-container ul li{margin-bottom:10px}.screenshot-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:20px;margin-top:24px}.screenshot-grid img{width:100%;height:auto}.tab-container{display:flex;flex-wrap:wrap;gap:28px;margin:8px 0 36px;padding-bottom:12px;border-bottom:1px solid var(--line)}.tab{padding:6px 0;cursor:pointer;background:transparent;border:none;border-bottom:1px solid transparent;font-weight:400;text-transform:none;letter-spacing:0;font-size:.9rem;color:var(--muted);transition:color .2s ease,border-color .2s ease}.tab.active{color:var(--text);font-weight:500;border-bottom-color:var(--accent)}.tab:hover{color:var(--accent-soft)}.bio-container{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:36px;align-items:center;margin-bottom:36px}.responsive-video,.responsive-pdf,.responsive-embed{width:100%;border:1px solid var(--line);border-radius:0;background:var(--bg-2)}.responsive-video{aspect-ratio:16 / 9}.machining-experience{display:grid;grid-template-columns:minmax(0,.7fr) minmax(0,1.3fr);gap:clamp(28px,5vw,56px);align-items:center}.machining-experience img{width:100%;height:auto}.responsive-img{width:min(900px,100%);margin:0 auto}.responsive-img--compact{width:min(460px,100%)}.side-by-side{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin:0 auto clamp(44px,6vw,64px);width:100%;align-items:start}.side-img{width:100%;height:auto;object-fit:contain}.media-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;align-items:start;margin-bottom:24px}@media(max-width:600px){.side-by-side{grid-template-columns:1fr}}.media-40,.media-50{display:block;width:100%;margin:0}.screenshot-grid img,.machining-experience img,.responsive-img,.side-img,.media-40,.media-50{border-radius:0;border:0}.media-40,.media-50{width:100%}.responsive-pdf,.responsive-embed{height:clamp(420px,70vh,900px)}@media(max-width:900px){.profile-section{grid-template-columns:1fr;gap:44px;text-align:left}.profile-picture{justify-self:start;max-width:480px}h1.name{white-space:normal}.profile-links{justify-content:flex-start}.bio-container,.machining-experience{grid-template-columns:1fr}}@media(max-width:700px){body{padding:0}.container{padding:40px 20px 88px}h1{font-size:2.35rem}h1.name{max-width:none;margin-inline:0;font-size:clamp(2.85rem,14vw,4rem);line-height:.98;white-space:normal}body.home .bio-text{max-width:34ch;margin-inline:0}body.home .profile-section{padding-block:0;margin-bottom:104px}.grid{grid-template-columns:1fr;row-gap:64px}.projects-title{margin-bottom:36px}h2{font-size:1.35rem}h3{font-size:1.1rem}.header{flex-direction:column;align-items:flex-start}.link-button,.github-link{width:auto;justify-content:flex-start}.media-row{grid-template-columns:1fr}.media-40,.media-50{width:100%;display:block;margin-right:0}}@media(max-width:600px){.tab{width:100%;text-align:left}}@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto;transition:none!important;animation:none!important}}@keyframes rise-in{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}
