:root{--bg:#07080a;--bg-raised:#0e1015;--bg-overlay:#0e1015db;--silver:#d8dce3;--silver-dim:#8b929e;--silver-faint:#545a66;--line:#d8dce31a;--line-strong:#d8dce338;--accent:#9fb4d4;--accent-glow:#9fb4d447;--rail-w:5rem;--panel-w:16.5rem;--ease:cubic-bezier(.22, .61, .36, 1);--speed:.32s;--font:ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--mono:ui-monospace, SFMono-Regular, "Cascadia Code", Consolas, monospace;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*,:before,:after{box-sizing:border-box}html,body,#root{height:100%}body{background:var(--bg);color:var(--silver);font-family:var(--font);-webkit-font-smoothing:antialiased;margin:0;line-height:1.6}h1,h2,h3,p{margin:0}a{color:inherit;text-decoration:none}button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:none}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:4px}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.starfield{z-index:0;pointer-events:none;width:100%;height:100%;display:block;position:fixed;inset:0}.navitem{list-style:none}.navitem__btn{width:100%;color:var(--silver-faint);transition:color .18s var(--ease), background .18s var(--ease);flex-direction:column;align-items:center;gap:.28rem;padding:.62rem .15rem;display:flex;position:relative;overflow:hidden}.navitem__btn:hover{color:var(--silver);background:#d8dce30a}.navitem__btn.is-active{color:var(--accent)}.navitem__icon{flex:none;place-items:center;width:19px;height:19px;display:grid}.navitem__mini{font-family:var(--mono);letter-spacing:.06em;text-transform:uppercase;white-space:nowrap;font-size:.55rem;line-height:1}.navitem__label{letter-spacing:.01em;white-space:nowrap;font-size:.9rem;display:none}.sidebar.is-open .navitem__btn{padding:.7rem 0;padding-left:calc((var(--rail-w) - 19px) / 2);flex-direction:row;align-items:center;gap:.9rem}.sidebar.is-open .navitem__mini{display:none}.sidebar.is-open .navitem__label{display:inline}.navitem__marker{background:var(--accent);width:2px;height:0;box-shadow:0 0 10px var(--accent-glow);transition:height .22s var(--ease);position:absolute;top:50%;left:0;translate:0 -50%}.navitem__btn.is-active .navitem__marker{height:62%}.sidebar{inset-block:0;z-index:40;width:var(--rail-w);-webkit-backdrop-filter:blur(14px);border-right:1px solid var(--line);transition:width var(--speed) var(--ease), background var(--speed) var(--ease);background:#0a0c10b8;flex-direction:column;display:flex;position:fixed;left:0;overflow:hidden}.sidebar.is-open{width:var(--panel-w);background:#0a0c10f2}.sidebar__toggle{height:4.25rem;padding-left:calc((var(--rail-w) - 18px) / 2);color:var(--silver-dim);border-bottom:1px solid var(--line);transition:color .18s var(--ease);flex:none;align-items:center;gap:.9rem;display:flex}.sidebar__toggle:hover{color:var(--silver)}.sidebar__brand{font-family:var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--silver);white-space:nowrap;opacity:0;transition:opacity .2s var(--ease), transform .2s var(--ease);font-size:.82rem;transform:translate(-.4rem)}.sidebar.is-open .sidebar__brand{opacity:1;transform:none}.sidebar__list{flex-direction:column;gap:.15rem;margin:.75rem 0 0;padding:0;display:flex}.sidebar__scrim{z-index:39;-webkit-backdrop-filter:blur(2px);animation:scrim-in .2s var(--ease);background:#04050799;display:none;position:fixed;inset:0}@keyframes scrim-in{0%{opacity:0}to{opacity:1}}@media (width<=640px){:root{--rail-w:4.6rem}.sidebar.is-open{width:min(var(--panel-w), 80vw)}.sidebar__scrim{display:block}}.hero{flex-direction:column;justify-content:center;gap:1.15rem;min-height:100svh;padding-block:6rem;scroll-margin-top:0;display:flex}.hero__name{letter-spacing:-.04em;background:linear-gradient(180deg, #fff 0%, var(--silver) 45%, #6c7380 100%);color:#0000;-webkit-background-clip:text;background-clip:text;font-size:clamp(3rem,9vw,6.5rem);font-weight:200;line-height:.98}.hero__phrase{letter-spacing:.01em;max-width:40rem;color:var(--silver-dim);text-wrap:balance;font-size:clamp(1rem,1.9vw,1.2rem);font-weight:300}.hero__actions{flex-wrap:wrap;gap:.75rem;margin-top:1.25rem;display:flex}.hero__closer{font-family:var(--mono);letter-spacing:.05em;color:var(--silver-faint);border-left:1px solid var(--line-strong);margin-top:2.5rem;padding-left:.9rem;font-size:.8rem}.btn{border:1px solid var(--line-strong);color:var(--silver-dim);transition:color .18s var(--ease), border-color .18s var(--ease), background .18s var(--ease), transform .18s var(--ease);border-radius:2px;align-items:center;gap:.5rem;padding:.65rem 1.25rem;font-size:.88rem;display:inline-flex}.btn:hover{color:var(--silver);border-color:var(--accent);background:#9fb4d40f;transform:translateY(-1px)}.btn--primary{color:var(--bg);background:var(--silver);border-color:var(--silver);font-weight:500}.btn--primary:hover{color:var(--bg);background:#fff;border-color:#fff}.section{padding-block:clamp(4rem,10vh,7rem);scroll-margin-top:2rem}.section__head{margin-bottom:2.5rem}.section__title{letter-spacing:-.025em;color:var(--silver);font-size:clamp(1.75rem,4vw,2.6rem);font-weight:250}.section__rule{background:linear-gradient(90deg, var(--accent), transparent);width:3rem;height:1px;margin-top:1.1rem;display:block}.card-wrap{list-style:none;display:flex}.card{text-align:left;border:1px solid var(--line);width:100%;transition:border-color .22s var(--ease), transform .22s var(--ease), box-shadow .22s var(--ease), background .22s var(--ease);background:linear-gradient(160deg,#d8dce309,#d8dce303);border-radius:3px;flex-direction:column;align-items:flex-start;gap:.5rem;padding:1.4rem;display:flex;position:relative}.card:hover{border-color:var(--line-strong);background:linear-gradient(160deg,#d8dce30f,#d8dce304);transform:translateY(-3px);box-shadow:0 12px 34px -18px #000000e6}.card.is-featured{border-color:#9fb4d43d}.card.is-featured:hover{border-color:var(--accent)}.card__top{justify-content:space-between;align-items:center;width:100%;margin-bottom:.2rem;display:flex}.card__demo{font-family:var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--accent);border:1px solid #9fb4d459;border-radius:2px;align-items:center;gap:.35rem;padding:.15rem .5rem .15rem .4rem;font-size:.62rem;display:inline-flex}.card__arrow{color:var(--silver-faint);opacity:0;transition:opacity .22s var(--ease), transform .22s var(--ease);transform:translate(-4px)}.card:hover .card__arrow,.card:focus-visible .card__arrow{opacity:1;transform:none}.card__title{color:var(--silver);letter-spacing:-.01em;font-size:1.08rem;font-weight:450}.card__subtitle{color:var(--accent);opacity:.85;font-size:.79rem}.card__blurb{color:var(--silver-dim);font-size:.86rem;line-height:1.55}.card__tech{flex-wrap:wrap;gap:.35rem;margin-top:auto;padding-top:.9rem;display:flex}.card__chip{font-family:var(--mono);border:1px solid var(--line);color:var(--silver-faint);border-radius:2px;padding:.16rem .42rem;font-size:.66rem}.card__chip--more{border-style:dashed}.skilltag{border:1px solid var(--line);font-family:var(--mono);letter-spacing:.02em;color:var(--silver-dim);transition:color .16s var(--ease), border-color .16s var(--ease);background:#d8dce308;border-radius:2px;padding:.3rem .7rem;font-size:.74rem;list-style:none}.skilltag:hover{color:var(--silver);border-color:var(--line-strong)}.modal{z-index:100;-webkit-backdrop-filter:blur(6px);animation:modal-fade .2s var(--ease);background:#040507b8;place-items:center;padding:1.25rem;display:grid;position:fixed;inset:0}.modal__panel{background:var(--bg-raised);border:1px solid var(--line-strong);width:min(38rem,100%);max-height:min(85vh,46rem);animation:modal-rise .26s var(--ease);border-radius:4px;padding:clamp(1.5rem,4vw,2.4rem);position:relative;overflow-y:auto;box-shadow:0 30px 80px -30px #000}.modal__close{width:2rem;height:2rem;color:var(--silver-faint);transition:color .16s var(--ease), background .16s var(--ease);border-radius:2px;place-items:center;display:grid;position:absolute;top:.9rem;right:.9rem}.modal__close:hover{color:var(--silver);background:#d8dce312}.modal__video{aspect-ratio:16/9;border:1px solid var(--line);background:#000;border-radius:3px;width:100%;margin-top:1.5rem;overflow:hidden}.modal__video iframe{border:0;width:100%;height:100%;display:block}.modal__title{letter-spacing:-.025em;color:var(--silver);padding-right:2.5rem;font-size:clamp(1.5rem,3.6vw,2rem);font-weight:300}.modal__subtitle{color:var(--accent);opacity:.85;margin-top:.35rem;font-size:.9rem}.modal__detail{color:var(--silver-dim);margin-top:1.4rem;font-size:.95rem;line-height:1.7}.modal__label{font-family:var(--mono);letter-spacing:.2em;text-transform:uppercase;color:var(--silver-faint);margin-top:1.9rem;margin-bottom:.7rem;font-size:.66rem;font-weight:400}.modal__tech{flex-wrap:wrap;gap:.4rem;margin:0;padding:0;display:flex}.modal__link{margin-top:1.9rem}@keyframes modal-fade{0%{opacity:0}to{opacity:1}}@keyframes modal-rise{0%{opacity:0;transform:translateY(12px)scale(.985)}to{opacity:1;transform:none}}.shell{z-index:1;margin-left:var(--rail-w);max-width:78rem;padding-inline:clamp(1.5rem,6vw,5.5rem);position:relative}.skiplink{z-index:200;border:1px solid var(--accent);background:var(--bg-raised);color:var(--silver);transition:transform .16s var(--ease);border-radius:2px;padding:.6rem 1rem;font-size:.85rem;position:fixed;top:.75rem;left:.75rem;transform:translateY(-200%)}.skiplink:focus-visible{transform:none}.vignette{z-index:0;pointer-events:none;background:radial-gradient(120% 80% at 20% 0,#9fb4d412,#0000 60%),radial-gradient(100% 100% at 50% 100%,#07080ad9,#0000 55%);position:fixed;inset:0}.grid{gap:1rem;margin:0;padding:0;display:grid}.grid--projects{grid-template-columns:repeat(auto-fill,minmax(17.5rem,1fr))}.grid--skills{grid-template-columns:repeat(auto-fill,minmax(16rem,1fr));gap:1.25rem}.skillgroup{border:1px solid var(--line);background:#d8dce305;border-radius:3px;padding:1.25rem}.skillgroup__label{font-family:var(--mono);letter-spacing:.2em;text-transform:uppercase;color:var(--accent);margin-bottom:.9rem;font-size:.68rem;font-weight:400}.skillgroup__items{flex-wrap:wrap;gap:.35rem;margin:0;padding:0;display:flex}.timeline{margin:0;padding:0 0 0 1.6rem;list-style:none;position:relative}.timeline:before{content:"";background:linear-gradient(180deg, var(--line-strong), var(--line), transparent);width:1px;position:absolute;top:.4rem;bottom:.4rem;left:0}.tl{padding-bottom:2.1rem;position:relative}.tl:last-child{padding-bottom:0}.tl__node{background:var(--bg);border:1px solid var(--line-strong);border-radius:50%;width:7px;height:7px;position:absolute;top:.55rem;left:calc(-1.6rem - 3px)}.tl--award .tl__node{background:var(--accent);border-color:var(--accent);box-shadow:0 0 9px var(--accent-glow)}.tl__period{font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--silver-faint);font-size:.68rem}.tl__role{color:var(--silver);margin-top:.3rem;font-size:1rem;font-weight:450}.tl--award .tl__role{color:var(--accent)}.tl__org{color:var(--silver-faint);font-size:.84rem}.tl__detail{max-width:44rem;color:var(--silver-dim);margin-top:.5rem;font-size:.88rem;line-height:1.65}.contact__note{color:var(--silver-dim);margin-bottom:1.5rem;font-size:1.05rem}.contact__links{grid-template-columns:repeat(auto-fit,minmax(15rem,1fr));gap:.6rem;max-width:22rem;margin:0;padding:0;list-style:none;display:grid}.contact__link{border:1px solid var(--line);transition:border-color .18s var(--ease), background .18s var(--ease), transform .18s var(--ease);border-radius:3px;align-items:center;gap:.7rem;padding:.95rem 1.15rem;display:flex}.contact__link:hover{border-color:var(--accent);background:#9fb4d40d;transform:translateY(-1px)}.contact__label{color:var(--silver);font-size:.9rem}.contact__handle{font-family:var(--mono);color:var(--silver-faint);font-size:.76rem}.contact__ext{color:var(--silver-faint);margin-left:auto}.about{gap:1rem;max-width:44rem;display:grid}.about__p{color:var(--silver-dim);font-size:.92rem;line-height:1.75}.foot{border-top:1px solid var(--line);font-family:var(--mono);color:var(--silver-faint);flex-wrap:wrap;justify-content:space-between;gap:.75rem 1.5rem;padding-block:1.5rem 2.5rem;font-size:.72rem;display:flex}@media (width<=640px){.shell{padding-inline:1.25rem}}
