:root{--blue:#0057d8;--yellow:#ffd600;--red:#e8000d;--black:#000;--white:#fff;--border:3px solid var(--black)}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;scroll-padding-top:70px}body{background:var(--white);color:var(--black);font-family:Helvetica Neue,Helvetica,Arial,sans-serif;overflow-x:hidden}.page{border:var(--border);grid-template-rows:auto 1fr auto;min-height:100vh;display:grid}@keyframes nameIn{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.main{flex-direction:column;display:flex}.main-left{border-bottom:var(--border);flex-direction:column;justify-content:center;padding:40px 24px;display:flex}.name{letter-spacing:-.03em;text-transform:uppercase;font-size:clamp(2.8rem,12vw,8rem);font-weight:900;line-height:.88;animation:3.6s cubic-bezier(.22,1,.36,1) both nameIn}.main-right{flex-direction:column;justify-content:space-between;padding:40px 24px;display:flex}.role{text-transform:uppercase;letter-spacing:.08em;font-size:clamp(1.1rem,2.5vw,1.8rem);font-weight:700;line-height:1.4}.intro{letter-spacing:.05em;border-top:var(--border);padding-top:24px;font-size:.9rem;font-weight:600;line-height:1.65}.cta-btn{letter-spacing:.15em;text-transform:uppercase;color:var(--black);border:var(--border);cursor:pointer;background:0 0;align-self:flex-start;margin-top:24px;padding:10px 20px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:.65rem;font-weight:700;text-decoration:none;transition:background .15s,color .15s;display:inline-block}.cta-btn:hover{background:var(--black);color:var(--white)}.cta-btn:focus-visible{outline:3px solid var(--black);outline-offset:3px}.cta-btns{flex-wrap:wrap;gap:12px;margin-top:24px;display:flex}.cta-btns .cta-btn{margin-top:0}.skills{border-top:var(--border);flex-direction:column;scroll-margin-top:70px;display:flex}.skills-col{padding:24px}.skills-col--tech{border-bottom:var(--border)}.skills-col-label{letter-spacing:.2em;text-transform:uppercase;border-bottom:var(--border);margin-bottom:20px;padding-bottom:10px;font-size:.6rem;font-weight:700;display:block}.skill-group{margin-bottom:18px}.skill-group:last-child{margin-bottom:0}.skill-group-label{letter-spacing:.12em;text-transform:uppercase;color:#767676;margin-bottom:8px;font-size:.55rem;font-weight:700;display:block}.skill-tags{flex-wrap:wrap;gap:6px;display:flex}.skill-tag{letter-spacing:.06em;text-transform:uppercase;padding:4px 8px;font-size:.6rem;font-weight:700}.section-break{border-top:var(--border);grid-template-columns:1fr 1fr;height:96px;display:grid}.section-break--yellow{background:var(--yellow);border-right:var(--border)}.section-break--red{background:var(--red)}.timeline{border-top:var(--border);padding:32px 20px;scroll-margin-top:70px}.timeline-label{letter-spacing:.2em;text-transform:uppercase;border-bottom:var(--border);margin-bottom:40px;padding-bottom:10px;font-size:.6rem;font-weight:700;display:block}.timeline-entry{border-bottom:var(--border);flex-direction:column;padding:20px 0;display:flex}.timeline-entry:last-child{border-bottom:none;padding-bottom:0}.timeline-entry-header{align-items:center;gap:16px;display:flex}.timeline-entry--even .timeline-entry-header{flex-direction:row-reverse}.timeline-meta{text-align:left}.timeline-entry--even .timeline-meta{text-align:right}.timeline-node{border:3px solid var(--black);background:var(--white);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:56px;height:56px;transition:opacity 3s,transform 3s cubic-bezier(.22,1,.36,1);display:flex;overflow:hidden}.timeline-node--hidden{opacity:0;transform:scale(.6)}.timeline-node--visible{opacity:1;transform:scale(1)}.timeline-node-initials{text-transform:uppercase;letter-spacing:.04em;font-size:.55rem;font-weight:900}.timeline-company{text-transform:uppercase;letter-spacing:.04em;font-size:1rem;font-weight:900;line-height:1.1}.timeline-role{text-transform:uppercase;letter-spacing:.08em;color:#767676;margin-top:4px;font-size:.65rem;font-weight:700}.timeline-dates{color:#767676;margin-top:4px;font-size:.6rem}.timeline-bullets{text-align:left;margin-top:12px;padding:0;list-style:none}.timeline-entry--even .timeline-bullets{text-align:right}.timeline-bullets li{color:#444;margin-bottom:2px;font-size:.65rem;line-height:1.6}.footer{border-top:var(--border);grid-template-columns:1fr 1fr;height:72px;display:grid}.footer-block--yellow{background:var(--yellow);border-right:var(--border)}.footer-block--red{background:var(--red)}@media (width>=480px){.main-left,.main-right{padding:48px 32px}.skills-col{padding:24px 32px}.timeline{padding:32px}.cta-btn{padding:12px 24px;font-size:.7rem}}@media (width>=768px){.main{grid-template-columns:1fr 1fr;min-height:calc(100vh - 150px);display:grid}.main-left{border-bottom:none;border-right:var(--border);padding:56px 40px;overflow:hidden}.main-right{padding:56px 40px}.skills{grid-template-columns:1fr 1fr;display:grid}.skills-col{padding:24px 40px}.skills-col--tech{border-bottom:none;border-right:var(--border)}.timeline{padding:48px 80px}.timeline-entry{border-bottom:none;flex-direction:row;align-items:flex-start;gap:24px;margin-bottom:40px;padding:0}.timeline-entry:last-child{border-bottom:none;margin-bottom:0;padding-bottom:0}.timeline-entry--even{flex-direction:row-reverse}.timeline-entry-header{flex-shrink:0;align-items:flex-start}.timeline-entry--even .timeline-entry-header{flex-direction:row-reverse}.timeline-meta{text-align:left}.timeline-entry--even .timeline-meta{text-align:right}.timeline-bullets{text-align:left;flex:1;margin-top:8px;padding-left:16px}.timeline-entry--even .timeline-bullets{text-align:right;padding-left:0}}@media (width>=768px) and (width<=1023px){.name{font-size:clamp(2.8rem,7.5vw,5.5rem)}}@media (width>=1024px){.timeline{padding:48px 280px}}.header{background:var(--blue);border-bottom:var(--border);z-index:100;justify-content:space-between;align-items:center;padding:16px 32px;display:flex;position:sticky;top:0}.header-label{letter-spacing:.2em;text-transform:uppercase;color:var(--white);font-size:.7rem;font-weight:700}.header-link{text-decoration:none}.header-link:hover,.header-link--active{text-decoration:underline}.header-home{align-items:center;gap:10px;display:flex}.header-logo{width:28px;height:28px;display:block}.header-nav{display:none}.hamburger{cursor:pointer;background:0 0;border:none;flex-direction:column;gap:5px;padding:4px;display:flex}.hamburger-line{background:var(--white);width:22px;height:2px;display:block}@keyframes overlayExpand{0%{clip-path:inset(0 0 100%)}to{clip-path:inset(0 0 0%)}}@keyframes linkFadeUp{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.nav-overlay{background:var(--blue);z-index:200;border:var(--border);flex-direction:column;animation:.55s cubic-bezier(.22,1,.36,1) both overlayExpand;display:flex;position:fixed;inset:0}.nav-overlay-header{border-bottom:var(--border);flex-shrink:0;justify-content:space-between;align-items:center;padding:16px 32px;display:flex}.nav-overlay-close{color:var(--white);cursor:pointer;background:0 0;border:none;padding:4px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:1.5rem;font-weight:900;line-height:1}.nav-overlay-links{flex-direction:column;flex:1;display:flex;overflow-y:auto}.nav-overlay-link{letter-spacing:.05em;text-transform:uppercase;color:var(--white);border-bottom:var(--border);padding:24px 32px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:2rem;font-weight:900;text-decoration:none;animation:.5s cubic-bezier(.22,1,.36,1) both linkFadeUp}.nav-overlay-link:first-child{animation-delay:.28s}.nav-overlay-link:nth-child(2){animation-delay:.4s}.nav-overlay-link:nth-child(3){animation-delay:.52s}.nav-overlay-link:nth-child(4){animation-delay:.64s}.nav-overlay-link:nth-child(5){animation-delay:.76s}.nav-overlay-link:hover{text-decoration:underline}button.header-link{cursor:pointer;background:0 0;border:none;padding:0}button.nav-overlay-link{text-align:left;cursor:pointer;background:0 0;border-top:none;border-left:none;border-right:none;width:100%}@media (width>=768px){.header-nav{align-items:center;gap:24px;display:flex}.hamburger{display:none}}.proj-tile{border-right:var(--border);border-bottom:var(--border);aspect-ratio:1;cursor:pointer;perspective:800px}.tile-inner{width:100%;height:100%;transform-style:preserve-3d;transition:transform .5s cubic-bezier(.4,0,.2,1);position:relative}.proj-tile.flipped .tile-inner{transform:rotateY(180deg)}.tile-front,.tile-back{backface-visibility:hidden;width:100%;height:100%;position:absolute}.tile-front{background:var(--white);flex-direction:column;display:flex}.tile-img{background:#e5e5e5;flex:1;justify-content:center;align-items:center;display:flex;overflow:hidden}.tile-img-src{object-fit:cover;width:100%;height:100%}.tile-img-placeholder{text-transform:uppercase;color:#bbb;font-size:2.5rem;font-weight:900}.tile-title{border-top:var(--border);text-transform:uppercase;letter-spacing:.06em;padding:10px 14px;font-size:.6rem;font-weight:900}.tile-back{background:var(--black);color:var(--white);flex-direction:column;justify-content:space-between;padding:20px;display:flex;transform:rotateY(180deg)}.tile-back-title{text-transform:uppercase;letter-spacing:.06em;color:var(--yellow);border-bottom:1px solid #333;margin-bottom:12px;padding-bottom:10px;font-size:.65rem;font-weight:900}.tile-back-blurb{color:#bbb;flex:1;font-family:Arial,sans-serif;font-size:.58rem;font-weight:400;line-height:1.7}.tile-back-link{text-transform:uppercase;letter-spacing:.1em;border:2px solid var(--yellow);color:var(--yellow);margin-top:14px;padding:7px 12px;font-size:.55rem;font-weight:900;text-decoration:none;transition:background .15s,color .15s;display:inline-block}.tile-back-link:hover{background:var(--yellow);color:var(--black)}.projects-main{flex:1}.projects-title-block{border-bottom:var(--border);padding:40px 40px 32px}.projects-title{text-transform:uppercase;letter-spacing:-.03em;font-size:clamp(2.5rem,7vw,6rem);font-weight:900;line-height:.9}.projects-grid{border-top:var(--border);grid-template-columns:1fr;display:grid}.proj-tile:nth-child(n){border-right:none}@media (width>=480px){.projects-grid{grid-template-columns:repeat(2,1fr)}.proj-tile:nth-child(n){border-right:var(--border)}.proj-tile:nth-child(2n){border-right:none}}@media (width>=768px){.projects-grid{grid-template-columns:repeat(3,1fr)}.proj-tile:nth-child(2n){border-right:var(--border)}.proj-tile:nth-child(3n){border-right:none}}*,:before,:after{box-sizing:border-box}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0}#root{flex-direction:column;min-height:100vh;display:flex}
