header{align-items:center;min-height:100svh;padding-top:5.5rem;padding-bottom:clamp(2.5rem,6vw,4rem);display:grid;position:relative;overflow:hidden}.hero{grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr);align-items:center;gap:clamp(2.5rem,6vw,5rem);display:grid}.hero__kicker{text-transform:uppercase;letter-spacing:.18em;align-items:center;gap:.9rem;margin-bottom:clamp(1.2rem,3vw,2rem);font-size:.72rem;font-weight:600;display:flex}.hero__kicker:before{content:"";background:var(--ink);width:2.4rem;height:1px}.hero__title{font-family:var(--font-display);letter-spacing:-.02em;font-size:clamp(3rem,8.5vw,5.6rem);font-weight:500;line-height:.98}.hero__lede{max-width:46ch;color:var(--ink-soft);margin-top:clamp(1.4rem,3vw,2rem);font-size:clamp(1rem,1.6vw,1.12rem)}.hero__lede a{color:var(--fjord);border-bottom:1px solid var(--fjord);transition:color var(--transition), border-color var(--transition)}.hero__lede a:hover{color:var(--ember);border-bottom-color:var(--ember)}.hero__cta{flex-wrap:wrap;gap:.9rem;margin-top:clamp(1.8rem,4vw,2.6rem);display:flex}.hero__socials{border-top:1px solid var(--line);flex-wrap:wrap;gap:1.5rem;max-width:28rem;margin-top:clamp(1.8rem,4vw,2.6rem);padding-top:1.4rem;display:flex}.hero__photo{background:var(--card);border:1px solid var(--line-strong);width:min(380px,100%);box-shadow:16px 18px 0 -1px var(--paper-soft);justify-self:end;padding:.85rem .85rem 0;transform:rotate(1.4deg)}.hero__photo img{aspect-ratio:4/5;object-fit:cover;filter:saturate(.94)contrast(1.02);width:100%;height:auto}[data-theme=dark] .hero__photo img{filter:saturate(.9)contrast(1.02)brightness(.92)}.hero__photo figcaption{font-family:var(--font-display);color:var(--ink-soft);padding:.6rem .1rem .7rem;font-size:.85rem;font-style:italic}.hero__coords{writing-mode:vertical-rl;text-transform:uppercase;letter-spacing:.22em;color:var(--ink-faint);font-size:.62rem;position:absolute;bottom:2rem;right:1.1rem}@keyframes rise{0%{opacity:0;transform:translateY(26px)}to{opacity:1;transform:translateY(0)}}.rise{animation:rise .9s var(--ease) both}.hero__photo.rise{animation-name:rise-photo}@keyframes rise-photo{0%{opacity:0;transform:rotate(1.4deg)translateY(26px)}to{opacity:1;transform:rotate(1.4deg)translateY(0)}}.rise-1{animation-delay:50ms}.rise-2{animation-delay:.15s}.rise-3{animation-delay:.3s}.rise-4{animation-delay:.45s}.rise-5{animation-delay:.6s}@media (prefers-reduced-motion:reduce){.rise{animation:none}}@media screen and (width<=900px){header{min-height:auto;padding-top:6.5rem}.hero__text{display:contents}.hero{grid-template-columns:minmax(0,1fr) clamp(6rem,25vw,10.5rem);grid-template-areas:"kicker kicker""title photo""lede lede""cta cta""socials socials";gap:0 clamp(1rem,4vw,2rem)}.hero__kicker{grid-area:kicker}.hero__title{grid-area:title;align-self:center}.hero__lede{grid-area:lede}.hero__cta{grid-area:cta}.hero__socials{grid-area:socials}.hero__photo{width:100%;box-shadow:8px 9px 0 -1px var(--paper-soft);grid-area:photo;align-self:center;padding:.45rem}.hero__photo figcaption,.hero__coords{display:none}}@media screen and (width<=600px){header{padding-top:5.5rem}.hero__title{font-size:clamp(2.5rem,11.5vw,3rem)}.hero__socials{gap:1.1rem}}.topnav{z-index:100;background:var(--paper);background:color-mix(in srgb, var(--paper) 88%, transparent);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-bottom:1px solid var(--line);transition:background-color .4s var(--ease);position:fixed;inset:0 0 auto}.topnav__inner{justify-content:space-between;align-items:center;height:3.6rem;display:flex}.topnav__name{font-family:var(--font-display);letter-spacing:-.01em;font-size:1.1rem;font-style:italic;font-weight:600}.topnav__name-short{display:none}.topnav__right{align-items:center;gap:clamp(1rem,2.5vw,2rem);display:flex}.topnav__links{gap:clamp(.9rem,2.5vw,2rem);display:flex}.theme-toggle{border:1px solid var(--ink);background:linear-gradient(90deg, var(--ink) 50%, transparent 50%);cursor:pointer;width:1.15rem;height:1.15rem;transition:transform .5s var(--ease), border-color var(--transition);border-radius:50%;flex-shrink:0;padding:0;position:relative}.theme-toggle:after{content:"";position:absolute;inset:-.8rem}.theme-toggle:hover{border-color:var(--fjord)}[data-theme=dark] .theme-toggle{transform:rotate(180deg)}.topnav__links a{text-transform:uppercase;letter-spacing:.14em;color:var(--ink-soft);transition:color var(--transition), border-color var(--transition);border-bottom:1px solid #0000;padding-block:.3rem;font-size:.68rem;font-weight:600;display:inline-block}.topnav__links a:hover{color:var(--ink)}.topnav__links a.active{color:var(--fjord);border-bottom-color:var(--fjord)}@media screen and (width<=480px){.topnav__inner{gap:.8rem}.topnav__name-full{display:none}.topnav__name-short{display:inline}.topnav__right{gap:.75rem}.topnav__links{gap:.7rem}.topnav__links a{letter-spacing:.06em;font-size:.6rem}.theme-toggle{width:1.05rem;height:1.05rem}}.about__grid{grid-template-columns:minmax(0,.75fr) minmax(0,1.25fr);grid-template-areas:"facts body";align-items:start;gap:clamp(2.5rem,6vw,5.5rem);display:grid}.about__body{grid-area:body}.about__body p{color:var(--ink-soft);font-size:1.02rem}.about__body p+p{margin-top:1.2rem}.about__body p:first-child:first-letter{font-family:var(--font-display);float:left;color:var(--fjord);padding-right:.14em;font-size:3.1em;font-weight:500;line-height:.82}.about__body strong.accent{font-weight:600}.about__facts{flex-direction:column;grid-area:facts;display:flex}.about__facts>div{border-top:1px solid var(--line);padding:1.1rem 0}.about__facts>div:first-child{border-top:1px solid var(--line-strong);padding-top:1.3rem}.about__facts dt{text-transform:uppercase;letter-spacing:.16em;color:var(--ink-faint);margin-bottom:.35rem;font-size:.66rem;font-weight:600}.about__facts dd{font-family:var(--font-display);font-size:1.12rem;font-weight:500}@media screen and (width<=900px){.about__grid{grid-template-columns:1fr;grid-template-areas:"body""facts";gap:2.5rem}}.skills__grid{grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:clamp(2.2rem,4vw,3rem) clamp(2rem,4vw,3.5rem);display:grid}.skills__group h3{text-transform:uppercase;letter-spacing:.16em;border-bottom:1px solid var(--line-strong);color:var(--fjord);padding-bottom:.8rem;font-size:.76rem;font-weight:700}.skills__group li{border-bottom:1px solid var(--line);padding:.6rem 0;font-size:.92rem;font-weight:500}.proj-featured{border:1px solid var(--line-strong);background:var(--card);grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr);align-items:center;gap:clamp(2rem,5vw,4rem);margin-bottom:clamp(2.5rem,6vw,4rem);padding:clamp(1.2rem,3vw,2.2rem);display:grid}.proj-featured__media{border:1px solid var(--line);overflow:hidden}.proj-featured__media img{aspect-ratio:16/11;object-fit:cover;width:100%;height:auto;transition:transform .6s var(--ease)}.proj-featured:hover .proj-featured__media img{transform:scale(1.025)}.proj-featured__tag{text-transform:uppercase;letter-spacing:.14em;color:var(--ember);margin-bottom:.9rem;font-size:.68rem;font-weight:700}.proj-featured__body h3{font-family:var(--font-display);letter-spacing:-.01em;font-size:clamp(1.5rem,2.8vw,2.1rem);font-weight:500;line-height:1.12}.proj-featured__desc{color:var(--ink-soft);max-width:44ch;margin-top:1rem;font-size:.95rem}.proj-featured__links{flex-wrap:wrap;gap:1.5rem;margin-top:1.6rem;display:flex}.proj-grid{grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:clamp(2.2rem,4vw,3rem) clamp(1.5rem,3vw,2.5rem);display:grid}.proj-card{flex-direction:column;display:flex}.proj-card__media{border:1px solid var(--line-strong);background:var(--card);overflow:hidden}.proj-card__media img{aspect-ratio:16/10;object-fit:cover;filter:saturate(.88);width:100%;height:auto;transition:transform .6s var(--ease), filter .6s var(--ease)}.proj-card:hover .proj-card__media img{filter:saturate();transform:scale(1.035)}.proj-card__no{font-family:var(--font-display);color:var(--fjord);margin-top:.9rem;font-size:.85rem;font-style:italic}.proj-card h3{font-family:var(--font-display);flex-grow:1;margin-top:.3rem;font-size:1.18rem;font-weight:500;line-height:1.25}.proj-card__links{border-top:1px solid var(--line);flex-wrap:wrap;gap:1.3rem;margin-top:.9rem;padding-top:.8rem;display:flex}@media screen and (width<=900px){.proj-featured{grid-template-columns:1fr;gap:1.6rem}}.contact__grid{grid-template-columns:minmax(0,1fr) minmax(0,1.1fr);align-items:start;gap:clamp(2.5rem,6vw,5.5rem);display:grid}.contact__intro p{color:var(--ink-soft);max-width:38ch}.contact__intro .section__title{margin-bottom:1.4rem}.contact__channels{border-top:1px solid var(--line);flex-direction:column;align-items:flex-start;gap:.9rem;margin-top:1.8rem;padding-top:1.4rem;display:flex}.contact__form{flex-direction:column;gap:1.7rem;display:flex}.contact__form label{flex-direction:column;gap:.3rem;display:flex}.contact__form label span{text-transform:uppercase;letter-spacing:.16em;color:var(--ink-faint);font-size:.64rem;font-weight:700}.contact__form input,.contact__form textarea{font:inherit;color:var(--ink);border:0;border-bottom:1px solid var(--line-strong);transition:border-color var(--transition);background:0 0;border-radius:0;padding:.55rem 0}.contact__form input::placeholder,.contact__form textarea::placeholder{color:var(--ink-faint)}.contact__form input:focus,.contact__form textarea:focus{border-bottom-color:var(--fjord);outline:none}.contact__form textarea{resize:vertical;min-height:8rem}.contact__form .btn{align-self:flex-start;margin-top:.4rem}.contact__form .btn:disabled{opacity:.6;cursor:default}.form-error{color:var(--ember);max-width:38ch;font-size:.85rem}.form-confirmation{border:1px solid var(--line-strong);background:var(--card);text-align:center;font-family:var(--font-display);padding:clamp(2.5rem,6vw,4rem) 2rem;font-size:1.15rem;font-style:italic}.form-confirmation__mark{color:var(--fjord);margin-bottom:.6rem;font-size:1.8rem}@media screen and (width<=900px){.contact__grid{grid-template-columns:1fr;gap:3rem}}footer{background:var(--footer-bg);color:var(--footer-fg);transition:background-color .4s var(--ease), color .4s var(--ease);padding-block:clamp(3.5rem,8vw,5.5rem) 1.8rem}.footer__top{border-bottom:1px solid color-mix(in srgb, var(--footer-fg) 18%, transparent);flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:2.5rem;padding-bottom:clamp(2.5rem,6vw,4rem);display:flex}.footer__name{font-family:var(--font-display);letter-spacing:-.01em;transition:color var(--transition);font-size:clamp(1.5rem,3.5vw,2.2rem);font-style:italic;font-weight:500}.footer__name:hover{color:color-mix(in srgb, var(--footer-fg) 70%, transparent)}.footer__nav{gap:clamp(2.5rem,6vw,5rem);display:flex}.footer__links{flex-direction:column;gap:.7rem;display:flex}.footer__links a{text-transform:uppercase;letter-spacing:.14em;color:color-mix(in srgb, var(--footer-fg) 65%, transparent);transition:color var(--transition);font-size:.68rem;font-weight:600}.footer__links a:hover{color:var(--footer-fg)}.footer__bottom{color:color-mix(in srgb, var(--footer-fg) 50%, transparent);flex-wrap:wrap;justify-content:space-between;gap:.8rem 2rem;padding-top:1.6rem;font-size:.72rem;display:flex}@media screen and (width<=600px){.footer__top{flex-direction:column}.footer__nav{gap:3.5rem}}.courses__grid{grid-template-columns:1fr 1fr;align-items:start;gap:clamp(2rem,5vw,4.5rem);display:grid}.courses__col h3{text-transform:uppercase;letter-spacing:.16em;color:var(--fjord);border-bottom:1px solid var(--line-strong);justify-content:space-between;align-items:baseline;padding-bottom:.8rem;font-size:.76rem;font-weight:700;display:flex}.courses__count{font-family:var(--font-display);letter-spacing:0;font-size:.95rem;font-style:italic;font-weight:500}.courses__col li{border-bottom:1px solid var(--line);grid-template-columns:6.4rem minmax(0,1fr);align-items:baseline;gap:.9rem;padding:.55rem 0;display:grid}.course__code{letter-spacing:.06em;color:var(--fjord);white-space:nowrap;font-size:.72rem;font-weight:700}.course__name{color:var(--ink-soft);font-size:.88rem}@media screen and (width<=900px){.courses__grid{grid-template-columns:1fr;gap:2.5rem}}@media screen and (width<=420px){.courses__col li{grid-template-columns:5.4rem minmax(0,1fr);gap:.7rem}}*,:before,:after{box-sizing:border-box;margin:0;padding:0}ul,ol{list-style:none}a{color:inherit;text-decoration:none}:root{--paper:#f5f1e8;--paper-soft:#ebe5d6;--card:#fbf8f1;--ink:#1d1c18;--ink-soft:#1d1c18a3;--ink-faint:#1d1c1866;--line:#1d1c1824;--line-strong:#1d1c1873;--fjord:#14506e;--fjord-deep:#0e3d55;--ember:#b8431a;--footer-bg:var(--ink);--footer-fg:var(--paper);--font-display:"Fraunces", Georgia, "Times New Roman", serif;--font-body:"Schibsted Grotesk", "Helvetica Neue", Arial, sans-serif;--ease:cubic-bezier(.22, .61, .36, 1);--transition:.28s var(--ease);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}[data-theme=dark]{--paper:#15171a;--paper-soft:#1e2126;--card:#1a1d21;--ink:#e8e4d8;--ink-soft:#e8e4d8a3;--ink-faint:#e8e4d86b;--line:#e8e4d824;--line-strong:#e8e4d873;--fjord:#6da9cc;--fjord-deep:#92c3e0;--ember:#d97c52;--footer-bg:#101113;--footer-fg:var(--ink);--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}html{scroll-behavior:smooth}body{font-family:var(--font-body);background:var(--paper);color:var(--ink);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;transition:background-color .4s var(--ease), color .4s var(--ease);line-height:1.65}body:after{content:"";z-index:2000;pointer-events:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.05'/%3E%3C/svg%3E");position:fixed;inset:0}::selection{background:var(--fjord);color:var(--paper)}img{max-width:100%;display:block}.container{width:min(1120px,100% - clamp(2.5rem,8vw,7rem));margin-inline:auto}section{border-top:1px solid var(--line);padding-block:clamp(4rem,9vw,7.5rem);scroll-margin-top:3.6rem}.section__head{align-items:baseline;gap:1rem;margin-bottom:clamp(2rem,5vw,3.25rem);display:flex}.section__no{font-family:var(--font-display);color:var(--fjord);font-size:1.05rem;font-style:italic}.section__label{text-transform:uppercase;letter-spacing:.18em;font-size:.72rem;font-weight:600}.section__head:after{content:"";background:var(--line);flex:1;height:1px;transform:translateY(-.25em)}.section__title{font-family:var(--font-display);letter-spacing:-.01em;max-width:22ch;margin-bottom:clamp(2rem,5vw,3.25rem);font-size:clamp(1.9rem,4.5vw,3rem);font-weight:500;line-height:1.08}.btn{border:1px solid var(--ink);color:var(--ink);font-family:var(--font-body);text-transform:uppercase;letter-spacing:.14em;cursor:pointer;transition:background var(--transition), color var(--transition), border-color var(--transition);background:0 0;align-items:center;gap:.5rem;padding:.85rem 1.5rem;font-size:.72rem;font-weight:600;display:inline-flex}.btn:hover,.btn--solid{background:var(--ink);color:var(--paper)}.btn--solid:hover{background:var(--fjord);border-color:var(--fjord);color:var(--paper)}.link-arrow{text-transform:uppercase;letter-spacing:.12em;color:var(--fjord);transition:color var(--transition), border-color var(--transition);border-bottom:1px solid #0000;align-items:baseline;gap:.4rem;font-size:.72rem;font-weight:600;display:inline-flex}.link-arrow .arr{transition:transform var(--transition);display:inline-block}.link-arrow:hover{color:var(--fjord-deep);border-bottom-color:currentColor}.link-arrow:hover .arr{transform:translate(2px,-2px)}.accent{color:var(--ember)}:focus-visible{outline:2px solid var(--fjord);outline-offset:3px}.spinner{place-items:center;margin-top:20vh;display:grid}.spinner:before{content:"✳";color:var(--fjord);animation:pulse 1.4s var(--ease) infinite;font-size:2.2rem}@keyframes pulse{0%,to{opacity:.25}50%{opacity:1}}html.reveal-enabled section{opacity:0;visibility:hidden;pointer-events:none;transition:opacity .7s var(--ease), transform .7s var(--ease), visibility 0s linear .7s;transform:translateY(28px)}html.reveal-enabled section.revealed{opacity:1;visibility:visible;pointer-events:auto;transition:opacity .7s var(--ease), transform .7s var(--ease), visibility 0s linear 0s;transform:translateY(0)}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.spinner:before{animation:none}html.reveal-enabled section{opacity:1;visibility:visible;pointer-events:auto;transition:none;transform:none}}
