@font-face{font-family:OffBit;src:url(/fonts/offbit/OffBit-Regular.ttf) format("truetype");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:OffBit;src:url(/fonts/offbit/OffBit-Bold.ttf) format("truetype");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:"OffBit 101";src:url(/fonts/offbit/OffBit-101.ttf) format("truetype");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:"OffBit 101";src:url(/fonts/offbit/OffBit-101Bold.ttf) format("truetype");font-weight:700;font-style:normal;font-display:swap}:root{--bg: #0b0b0c;--bg-elev: #121214;--surface: #161618;--fg: #ededec;--fg-dim: #a6a6a8;--fg-faint: #6b6b6e;--line: rgba(255, 255, 255, .09);--line-strong: rgba(255, 255, 255, .18);--accent: #a784ff;--accent-ink: #0b0b0c;--accent-soft: rgba(167, 132, 255, .14);--accent-line: rgba(167, 132, 255, .4);--font-body: "Manrope", sans-serif;--font-pixel: "OffBit", "OffBit 101", ui-monospace, monospace;--maxw: 72rem;--pad-x: clamp(1.25rem, 5vw, 4rem);--section-gap: clamp(5rem, 13vh, 10rem);--ease: cubic-bezier(.2, .7, .2, 1)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}body{background:var(--bg);color:var(--fg);font-family:var(--font-body);font-weight:400;font-size:clamp(1rem,.97rem + .2vw,1.0625rem);line-height:1.65;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;overflow-x:hidden}body:before{content:"";position:fixed;top:0;right:0;bottom:0;left:0;background:radial-gradient(58% 42% at 72% -6%,rgba(167,132,255,.1),transparent 70%);pointer-events:none;z-index:0}body:after{content:"";position:fixed;top:0;right:0;bottom:0;left:0;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.4'/%3E%3C/svg%3E");opacity:.025;mix-blend-mode:screen;pointer-events:none;z-index:0}#top,.footer,.site-header{position:relative;z-index:1}::selection{background:var(--accent);color:var(--accent-ink)}img{max-width:100%;display:block}a{color:inherit;text-decoration:none}:focus-visible{outline:2px solid var(--accent);outline-offset:3px}@media (prefers-reduced-motion: no-preference){.hero__kicker,.hero__name,.hero__statement,.hero__location{animation:heroIn .7s var(--ease) both}.hero__name{animation-delay:.08s}.hero__statement{animation-delay:.16s}.hero__location{animation-delay:.24s}}@keyframes heroIn{0%{opacity:0;transform:translateY(24px)}to{opacity:1;transform:none}}.site-header{position:fixed;top:0;left:0;right:0;display:flex;align-items:center;justify-content:space-between;padding:1.1rem var(--pad-x);z-index:50;background:linear-gradient(to bottom,rgba(11,11,12,.82),transparent);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}.wordmark{font-family:var(--font-pixel);font-weight:700;font-size:.95rem;letter-spacing:.04em;color:var(--fg);display:inline-flex;transition:color .25s var(--ease)}.wordmark:hover{color:var(--accent)}.wordmark__text{display:inline-block;width:7ch;white-space:pre}.site-nav{display:flex;gap:clamp(1rem,3vw,2rem)}.site-nav a{font-family:var(--font-pixel);font-size:.78rem;letter-spacing:.05em;color:var(--fg-dim);transition:color .25s var(--ease)}.site-nav a:hover{color:var(--accent)}.site-nav a.is-active{color:var(--fg)}.site-nav a.is-active:after{content:"";display:block;height:2px;margin-top:3px;background:var(--accent)}.section{max-width:var(--maxw);margin-inline:auto;padding-inline:var(--pad-x);padding-block:var(--section-gap)}.section-head{display:flex;align-items:baseline;gap:1rem;padding-top:1.4rem;margin-bottom:clamp(2.5rem,6vw,4.5rem);border-top:1px solid var(--line-strong)}.section-index{font-family:var(--font-pixel);font-size:.85rem;color:var(--accent)}.section-label{font-family:var(--font-pixel);font-weight:700;text-transform:uppercase;letter-spacing:.16em;font-size:.82rem;color:var(--fg-dim)}.section-count{margin-left:auto;font-family:var(--font-pixel);font-size:.85rem;color:var(--fg-faint)}.accent{color:var(--accent)}.hero{max-width:var(--maxw);margin-inline:auto;padding-inline:var(--pad-x);min-height:100svh;display:flex;flex-direction:column;justify-content:center;padding-top:6rem;padding-bottom:4rem}.hero__kicker{display:inline-flex;align-items:center;gap:.6rem;font-family:var(--font-pixel);font-size:.85rem;letter-spacing:.14em;text-transform:uppercase;color:var(--fg-dim);margin-bottom:clamp(1.5rem,4vw,2.5rem)}.hero__kicker .dot{color:var(--accent);font-size:.7em}.hero__name{font-family:var(--font-body);font-weight:800;font-size:clamp(2rem,11vw,9rem);line-height:.92;letter-spacing:-.03em;overflow-wrap:break-word;margin-bottom:clamp(1.75rem,4vw,2.75rem)}.hero__statement{font-weight:500;font-size:clamp(1.3rem,3.4vw,2.25rem);line-height:1.28;letter-spacing:-.01em;color:var(--fg-dim);max-width:30ch;overflow-wrap:break-word}.hero__statement .accent{color:var(--fg);border-bottom:2px solid var(--accent);padding-bottom:.05em}.hero__location{margin-top:clamp(2.5rem,7vw,4.5rem);font-family:var(--font-pixel);font-size:.95rem;letter-spacing:.04em;color:var(--fg)}.hero__location-label{color:var(--fg-faint)}.about__body{max-width:54ch;margin-left:auto}.about__placeholder-tag{font-family:var(--font-pixel);font-size:.78rem;letter-spacing:.1em;color:var(--accent);background:var(--accent-soft);border:1px solid var(--accent-line);padding:.3rem .6rem;display:inline-block;margin-bottom:1.5rem}.about__lede{font-size:clamp(1.25rem,2.6vw,1.7rem);font-weight:400;line-height:1.45;color:var(--fg);letter-spacing:-.01em}.about__lede+.about__lede{margin-top:1.5rem;color:var(--fg-dim)}.work__list{display:flex;flex-direction:column;gap:var(--section-gap)}.case__title{font-family:var(--font-body);font-weight:800;font-size:clamp(2rem,6.5vw,4rem);line-height:1.02;letter-spacing:-.025em;margin-bottom:clamp(1.25rem,3vw,2rem)}.case__summary{font-size:clamp(1.2rem,2.6vw,1.65rem);font-weight:400;line-height:1.4;color:var(--fg-dim);max-width:46ch;margin-bottom:clamp(2.5rem,5vw,3.5rem)}.case__meta{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1.5rem 2rem;padding-block:1.5rem;border-top:1px solid var(--line);border-bottom:1px solid var(--line);margin-bottom:clamp(3rem,6vw,5rem)}.case__meta-item dt{font-family:var(--font-pixel);font-size:.72rem;text-transform:uppercase;letter-spacing:.14em;color:var(--accent);margin-bottom:.5rem}.case__meta-item dd{font-size:.98rem;line-height:1.4;color:var(--fg)}.case__hero{aspect-ratio:16 / 9;overflow:hidden;border-radius:6px;border:1px solid var(--line);background:#fff;margin-bottom:clamp(2.5rem,6vw,4rem)}.case__hero img,.case__hero video{width:100%;height:100%;object-fit:cover;object-position:center;display:block}.case__media{display:grid;gap:1rem;margin-bottom:clamp(3rem,6vw,5rem)}.case__figure{border:1px solid var(--line);background:var(--surface)}.case__figure img,.case__figure video{width:100%;display:block}.case__figure figcaption{font-family:var(--font-body);font-size:.92rem;line-height:1.45;color:var(--fg-dim);padding:.9rem 1.1rem;border-top:1px solid var(--line)}.case__block{display:grid;grid-template-columns:13rem 1fr;gap:clamp(1.5rem,4vw,3rem);padding-block:clamp(2rem,4vw,3rem);border-top:1px solid var(--line)}.case__block-label{font-family:var(--font-pixel);font-weight:700;font-size:.82rem;text-transform:uppercase;letter-spacing:.12em;color:var(--fg-dim);position:sticky;top:5rem;align-self:start;height:fit-content}.case__block-body{font-size:clamp(1.02rem,1.6vw,1.18rem);line-height:1.6;color:var(--fg-dim);max-width:64ch}.case__block-body p{color:var(--fg-dim)}.case__outcome{color:var(--fg)!important;font-weight:500}.case__contribution{list-style:none;display:flex;flex-direction:column;gap:1rem}.case__contribution li{position:relative;padding-left:1.8rem;color:var(--fg)}.case__contribution li:before{content:"→";position:absolute;left:0;top:0;color:var(--accent);font-family:var(--font-pixel)}.case__challenges{list-style:none;display:flex;flex-direction:column}.challenge{display:grid;grid-template-columns:1fr 1fr;gap:clamp(1rem,3vw,2.5rem);padding-block:1.75rem;border-top:1px solid var(--line)}.challenge:first-child{border-top:none;padding-top:0}.challenge__tag{display:inline-block;font-family:var(--font-pixel);font-size:.7rem;text-transform:uppercase;letter-spacing:.12em;margin-bottom:.7rem}.challenge__col--problem .challenge__tag{color:var(--fg-faint)}.challenge__col--solution .challenge__tag{color:var(--accent)}.challenge__col--problem p{color:var(--fg-dim)}.challenge__col--solution p{color:var(--fg)}.case__stacks{display:flex;flex-direction:column;gap:2rem;max-width:none}.stack-legend{list-style:none;display:flex;flex-wrap:wrap;gap:.6rem 1.4rem;padding-bottom:1.5rem;margin-bottom:.5rem;border-bottom:1px solid var(--line)}.stack-legend__item{display:inline-flex;align-items:center;gap:.5rem;font-family:var(--font-pixel);font-size:.72rem;letter-spacing:.06em;text-transform:uppercase;color:var(--fg-dim)}.stackgroup__label{display:block;font-family:var(--font-pixel);font-weight:700;font-size:.78rem;text-transform:uppercase;letter-spacing:.12em;margin-bottom:1rem}.stackgroup--mine .stackgroup__label{color:var(--accent)}.stackgroup--platform .stackgroup__label{color:var(--fg-faint)}.taglist{list-style:none;display:flex;flex-wrap:wrap;gap:.6rem}.tag{display:inline-flex;align-items:center;gap:.55rem;font-size:.85rem;line-height:1;padding:.55rem .85rem;border-radius:2px;white-space:nowrap;transition:border-color .2s var(--ease),background .2s var(--ease),transform .2s var(--ease)}a.tag:hover{border-color:var(--accent);transform:translateY(-1px)}.tag__dot{width:.55rem;height:.55rem;border-radius:50%;flex-shrink:0;box-shadow:0 0 0 1px #00000040 inset}.tag--mine{color:var(--fg);background:var(--bg-elev);border:1px solid var(--line-strong)}.tag--platform{color:var(--fg-dim);background:transparent;border:1px dashed var(--line-strong)}.footer{max-width:var(--maxw);margin-inline:auto;padding-inline:var(--pad-x);padding-block:var(--section-gap) clamp(2.5rem,5vw,4rem)}.section-head--footer{margin-bottom:clamp(2rem,5vw,3.5rem)}.footer__headline{font-family:var(--font-body);font-weight:800;font-size:clamp(2.5rem,9vw,6rem);line-height:.98;letter-spacing:-.03em;margin-bottom:clamp(2rem,5vw,3rem)}.footer__email{display:inline-block;font-size:clamp(1.4rem,4vw,2.4rem);font-weight:600;letter-spacing:-.01em;color:var(--accent);border-bottom:2px solid transparent;transition:border-color .25s var(--ease);margin-bottom:clamp(2.5rem,5vw,3.5rem)}.footer__email:hover{border-color:var(--accent)}.footer__links{list-style:none;display:flex;flex-wrap:wrap;gap:1.25rem 2.5rem;margin-bottom:clamp(4rem,10vw,7rem)}.footer__links li{display:flex;align-items:center;gap:.75rem}.footer__links a{font-size:1.1rem;font-weight:600;color:var(--fg);border-bottom:1px solid var(--line-strong);padding-bottom:.1rem;transition:color .25s var(--ease),border-color .25s var(--ease)}.footer__links a:hover{color:var(--accent);border-color:var(--accent)}.footer__placeholder{font-family:var(--font-pixel);font-size:.68rem;letter-spacing:.08em;color:var(--fg-faint)}.footer__base{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:1rem;padding-top:1.5rem;border-top:1px solid var(--line)}.footer__mark{font-family:var(--font-pixel);font-weight:700;font-size:.9rem;letter-spacing:.04em}.footer__meta{font-family:var(--font-pixel);font-size:.74rem;letter-spacing:.06em;color:var(--fg-faint)}.page{max-width:var(--maxw);margin-inline:auto;padding-inline:var(--pad-x);padding-block:clamp(8rem,16vh,12rem) var(--section-gap);min-height:72vh}.page-head{margin-bottom:clamp(2.5rem,6vw,4.5rem);max-width:36ch}.page-kicker{font-family:var(--font-pixel);font-size:.82rem;letter-spacing:.16em;text-transform:uppercase;color:var(--accent);margin-bottom:1.25rem}.page-title{font-family:var(--font-body);font-weight:800;font-size:clamp(2.5rem,8vw,5rem);line-height:.98;letter-spacing:-.03em}.page-intro{margin-top:1.5rem;font-size:clamp(1.05rem,2.2vw,1.3rem);line-height:1.5;color:var(--fg-dim)}.card-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:clamp(1rem,2.5vw,1.75rem)}.project-card{--card-pad: clamp(1.5rem, 3vw, 2.25rem);display:flex;flex-direction:column;padding:var(--card-pad);border:1px solid var(--line);background:var(--bg-elev);border-radius:4px;min-height:15rem;overflow:hidden;transition:border-color .3s var(--ease),transform .3s var(--ease),background .3s var(--ease)}.project-card:hover{border-color:var(--accent-line);background:var(--surface);transform:translateY(-3px)}.project-card__cover{margin:calc(-1 * var(--card-pad)) calc(-1 * var(--card-pad)) clamp(1.25rem,2.5vw,1.75rem);aspect-ratio:16 / 10;overflow:hidden;background:#fff;border-bottom:1px solid var(--line)}.project-card__cover img,.project-card__cover video{width:100%;height:100%;object-fit:cover;object-position:center;display:block;transition:transform .4s var(--ease)}.project-card:hover .project-card__cover img,.project-card:hover .project-card__cover video{transform:scale(1.03)}.project-card__top{display:flex;justify-content:space-between;align-items:center;margin-bottom:1.5rem}.project-card__index,.project-card__arrow{font-family:var(--font-pixel);font-size:.85rem;color:var(--fg-faint)}.project-card__arrow{transition:color .3s var(--ease),transform .3s var(--ease)}.project-card:hover .project-card__arrow{color:var(--accent);transform:translate(2px,-2px)}.project-card__title{font-family:var(--font-body);font-weight:700;font-size:clamp(1.4rem,3vw,2rem);line-height:1.05;letter-spacing:-.02em;margin-bottom:.85rem}.project-card__summary{color:var(--fg-dim);font-size:.98rem;line-height:1.5;margin-bottom:auto}.project-card__foot{display:flex;flex-wrap:nowrap;align-items:baseline;gap:.4rem 1.25rem;margin-top:1.75rem;padding-top:1.1rem;border-top:1px solid var(--line)}.project-card__role{font-size:.85rem;color:var(--fg);min-width:0}.project-card__meta{font-family:var(--font-pixel);font-size:.72rem;letter-spacing:.04em;color:var(--fg-faint);margin-left:auto;text-align:right;overflow-wrap:anywhere;min-width:0}.section-link{margin-left:auto;font-family:var(--font-pixel);font-size:.8rem;letter-spacing:.04em;color:var(--accent);transition:opacity .25s var(--ease)}.section-link:hover{opacity:.7}.text-link{display:inline-block;font-weight:600;color:var(--accent);border-bottom:1px solid transparent;transition:border-color .25s var(--ease)}.text-link:hover{border-color:var(--accent)}.home-about__lede{font-size:clamp(1.4rem,3.2vw,2.1rem);font-weight:400;line-height:1.4;letter-spacing:-.01em;max-width:24ch;margin-bottom:1.75rem}.home-cta{text-align:center}.home-cta__headline{font-family:var(--font-body);font-weight:800;font-size:clamp(2.5rem,9vw,6rem);line-height:.98;letter-spacing:-.03em;margin-bottom:clamp(1.5rem,4vw,2.5rem)}.button{display:inline-block;font-family:var(--font-pixel);font-size:.85rem;letter-spacing:.06em;color:var(--accent-ink);background:var(--accent);padding:.95rem 1.6rem;border-radius:3px;transition:transform .25s var(--ease),opacity .25s var(--ease)}.button:hover{transform:translateY(-2px);opacity:.92}.prose{max-width:56ch}.experience{margin-top:clamp(3.5rem,8vw,6rem);scroll-margin-top:6rem}.exp-list{list-style:none;display:flex;flex-direction:column}.exp{max-width:60ch;padding-block:clamp(1.25rem,3vw,1.75rem);border-top:1px solid var(--line)}.exp:first-child{border-top:none;padding-top:0}.exp__head{display:flex;justify-content:space-between;align-items:baseline;gap:.5rem 1.5rem;flex-wrap:wrap}.exp__role{font-family:var(--font-body);font-weight:700;font-size:1.15rem;letter-spacing:-.01em}.exp__company{color:var(--accent);font-weight:600}.exp__company a{color:inherit;border-bottom:1px solid transparent;transition:border-color .2s var(--ease)}.exp__company a:hover{border-color:currentColor}.exp__period{font-family:var(--font-pixel);font-size:.74rem;letter-spacing:.04em;color:var(--fg-faint);white-space:nowrap}.exp__loc{display:block;font-size:.85rem;color:var(--fg-faint);margin-top:.25rem}.exp__desc{margin-top:.7rem;color:var(--fg-dim);line-height:1.55}.exp__points{list-style:none;margin-top:.85rem;display:flex;flex-direction:column;gap:.45rem}.exp__points li{position:relative;padding-left:1.4rem;color:var(--fg-dim);line-height:1.5}.exp__points li:before{content:"→";position:absolute;left:0;top:0;color:var(--accent);font-family:var(--font-pixel)}.skills{margin-top:clamp(3.5rem,8vw,6rem);scroll-margin-top:6rem}.skills__title{font-family:var(--font-body);font-weight:800;font-size:clamp(1.6rem,4vw,2.4rem);letter-spacing:-.02em;padding-top:1.4rem;border-top:1px solid var(--line-strong);margin-bottom:clamp(1.75rem,4vw,2.5rem)}.skills__groups{display:grid;grid-template-columns:repeat(auto-fit,minmax(15rem,1fr));gap:clamp(1.75rem,4vw,2.5rem)}.skillgroup__label{display:flex;align-items:center;gap:.5rem;font-family:var(--font-pixel);font-weight:700;font-size:.74rem;text-transform:uppercase;letter-spacing:.1em;color:var(--fg-dim);margin-bottom:1.1rem}.skillbars{list-style:none;display:flex;flex-direction:column;gap:.85rem}.skillbar__name{display:block;font-size:.92rem;color:var(--fg);margin-bottom:.4rem}.skillbar__track{display:block;height:6px;border-radius:999px;background:var(--line);overflow:hidden}.skillbar__fill{display:block;height:100%;border-radius:999px}.back-link{display:inline-block;font-family:var(--font-pixel);font-size:.8rem;letter-spacing:.04em;color:var(--fg-dim);margin-bottom:clamp(2rem,5vw,3.5rem);transition:color .25s var(--ease)}.back-link:hover{color:var(--accent)}.case__live{display:inline-block;margin-top:1.75rem;font-family:var(--font-pixel);font-size:.82rem;letter-spacing:.04em;color:var(--accent);border-bottom:1px solid var(--accent-line);padding-bottom:.15rem}.next-project{display:flex;flex-direction:column;gap:.5rem;margin-top:clamp(3rem,7vw,5rem);padding-top:2rem;border-top:1px solid var(--line-strong)}.next-project__label{font-family:var(--font-pixel);font-size:.74rem;letter-spacing:.12em;text-transform:uppercase;color:var(--fg-faint)}.next-project__title{font-family:var(--font-body);font-weight:700;font-size:clamp(1.6rem,4vw,2.5rem);letter-spacing:-.02em;transition:color .25s var(--ease)}.next-project:hover .next-project__title{color:var(--accent)}.notfound .page-title{margin-top:.5rem}.notfound .text-link{margin-top:2rem}.site-footer{max-width:var(--maxw);margin-inline:auto;padding-inline:var(--pad-x);padding-block:2rem;margin-top:clamp(3rem,8vw,6rem);border-top:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:.75rem 1.5rem}.site-footer__mark{font-family:var(--font-pixel);font-weight:700;font-size:.9rem;letter-spacing:.04em;color:var(--fg);transition:color .25s var(--ease)}.site-footer__mark:hover{color:var(--accent)}.site-footer__email{font-size:.95rem;color:var(--fg-dim);transition:color .25s var(--ease)}.site-footer__email:hover{color:var(--accent)}.site-footer__meta{font-family:var(--font-pixel);font-size:.74rem;letter-spacing:.06em;color:var(--fg-faint)}@media (max-width: 720px){.site-nav{gap:1.1rem}.hero__statement{font-size:clamp(1.15rem,5vw,1.5rem);max-width:26ch}.case__block{grid-template-columns:1fr;gap:1rem}.case__block-label{position:static}.challenge,.case__meta{grid-template-columns:1fr;gap:1.25rem}.card-grid{grid-template-columns:1fr}.project-card__foot{flex-direction:column;align-items:flex-start}.project-card__meta{margin-left:0;text-align:left}}@media (max-width: 420px){.site-header{padding:.9rem 1.25rem}.wordmark{font-size:.8rem}.site-nav{gap:.7rem}.site-nav a{font-size:.66rem;letter-spacing:.03em}.footer__links{flex-direction:column;gap:1rem}}@media (prefers-reduced-motion: reduce){html{scroll-behavior:auto}[data-reveal]{opacity:1!important;transform:none!important}*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}
