:root{color-scheme:dark;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;background:#0e1117;color:#f5f0e8;--bg: #0e1117;--surface: rgba(245, 240, 232, .06);--surface-strong: rgba(245, 240, 232, .1);--surface-deep: rgba(8, 11, 16, .72);--text: #f5f0e8;--muted: #bbb3a7;--soft: #8e879f;--line: rgba(245, 240, 232, .15);--line-strong: rgba(245, 240, 232, .3);--gold: #d8a85b;--sage: #8fb4a2;--coral: #df7d6b;--blue: #7da9d8;--shadow: 0 28px 80px rgba(0, 0, 0, .36);--ease: cubic-bezier(.22, 1, .36, 1)}*{box-sizing:border-box}html{min-width:320px;min-height:100%;background:var(--bg);scroll-behavior:smooth}body{min-width:320px;min-height:100vh;margin:0;background:linear-gradient(rgba(245,240,232,.04) 1px,transparent 1px),linear-gradient(90deg,rgba(245,240,232,.03) 1px,transparent 1px),linear-gradient(145deg,#0e1117,#151820 48%,#101719);background-size:72px 72px,72px 72px,auto;color:var(--text);text-rendering:geometricPrecision;-webkit-font-smoothing:antialiased}body:before{position:fixed;inset:0;z-index:-1;content:"";background:linear-gradient(115deg,rgba(216,168,91,.12),transparent 38%),linear-gradient(245deg,rgba(125,169,216,.1),transparent 42%);pointer-events:none}a{color:inherit}a:focus-visible{outline:3px solid rgba(216,168,91,.52);outline-offset:4px}.site-shell{display:grid;min-height:100vh;min-height:100svh;grid-template-rows:auto 1fr;padding:1.1rem}.page-content,.project-page,.not-found{width:min(100%,68rem);margin:0 auto}.page-content{display:grid;align-content:start;gap:4.5rem;padding:3rem 0 2rem}.site-header{position:sticky;top:1.1rem;z-index:10;display:flex;width:min(100%,68rem);min-height:3.5rem;align-items:center;justify-content:space-between;gap:1rem;margin:0 auto;padding:.55rem;border:1px solid var(--line);border-radius:999px;background:#0e1117c7;box-shadow:0 16px 48px #0000003d;-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px)}.brand-link,.site-nav,.profile-link,.text-link,.next-project{text-decoration:none}.brand-link{display:inline-flex;min-width:0;align-items:center;gap:.55rem;padding:.6rem .8rem;border-radius:999px;color:var(--text);font-weight:800;line-height:1}.brand-link span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.site-nav{display:inline-flex;align-items:center;gap:.35rem}.site-nav a{display:inline-flex;min-height:2.35rem;align-items:center;padding:0 .85rem;border-radius:999px;color:var(--muted);font-size:.92rem;font-weight:800;line-height:1;text-decoration:none}.brand-link:hover,.site-nav a:hover{background:var(--surface);color:var(--text)}.intro{display:grid;justify-items:center;padding:2.25rem 0 0;text-align:center;animation:arrive .7s var(--ease) both}.portrait-wrap{width:9.75rem;aspect-ratio:1;margin-bottom:1.7rem;border:1px solid rgba(245,240,232,.24);border-radius:30%;background:var(--surface);box-shadow:var(--shadow);overflow:hidden;transform:translateZ(0);transition:border-color .22s ease,box-shadow .22s ease,transform .22s ease}.portrait-wrap:hover{border-color:#d8a85b8f;box-shadow:0 32px 90px #00000070;transform:translateY(-3px)}.portrait{display:block;width:100%;height:100%;object-fit:cover;object-position:50% 72%;transform:scale(1.06)}.eyebrow{margin:0 0 .75rem;color:var(--gold);font-size:.82rem;font-weight:800;letter-spacing:0;line-height:1.4;text-transform:uppercase}h1,h2,h3,p{overflow-wrap:anywhere}h1{max-width:100%;margin:0;font-size:5.8rem;font-weight:820;letter-spacing:0;line-height:.95}h2{margin:0;color:var(--text);font-size:2.45rem;font-weight:780;letter-spacing:0;line-height:1.08}h3{margin:0;font-size:1.35rem;line-height:1.18}.bio{width:min(100%,42rem);margin:1.35rem 0 0;color:var(--muted);font-size:1.22rem;line-height:1.65}.bio-secondary{width:min(100%,38rem);margin:.8rem 0 0;color:var(--soft);font-size:1rem;font-weight:650;line-height:1.65}.profile-links{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));width:min(100%,33rem);gap:.8rem;margin-top:2.2rem}.profile-link{position:relative;display:flex;min-height:3.35rem;align-items:center;justify-content:space-between;gap:.8rem;padding:0 1rem;border:1px solid var(--line);border-radius:999px;background:var(--surface);box-shadow:inset 0 1px #f5f0e814;color:var(--text);font-size:.98rem;font-weight:800;line-height:1;transition:background .22s ease,border-color .22s ease,transform .22s ease}.profile-link:hover{border-color:var(--line-strong);background:var(--surface-strong);transform:translateY(-2px)}.link-label{display:inline-flex;min-width:0;align-items:center;gap:.55rem}.section-heading{display:grid;width:min(100%,42rem);gap:.85rem;margin:0 auto 1.5rem;justify-items:center;text-align:center}.section-heading.compact{width:min(100%,38rem)}.section-heading p:not(.eyebrow){margin:0;color:var(--muted);font-size:1.04rem;line-height:1.65}.featured-projects,.github-projects{scroll-margin-top:6rem;animation:arrive .7s 90ms var(--ease) both}.project-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,20rem),1fr));gap:1rem}.portfolio-card{position:relative;display:grid;grid-template-rows:auto 1fr;gap:1.25rem;align-items:stretch;padding:1rem;border:1px solid var(--line);border-radius:8px;background:var(--surface-deep);box-shadow:inset 0 1px #f5f0e814;transition:border-color .22s ease,transform .22s var(--ease)}.portfolio-card:hover,.portfolio-card:focus-within{border-color:#d8a85b73;transform:translateY(-2px)}.portfolio-card-featured{grid-column:1 / -1;grid-template-columns:minmax(16rem,.9fr) minmax(0,1fr);grid-template-rows:none}.card-link{text-decoration:none}.card-link:after{position:absolute;inset:0;z-index:2;border-radius:8px;content:""}.card-link:focus-visible{outline:none}.card-link:focus-visible:after{outline:3px solid rgba(216,168,91,.52);outline-offset:4px}.portfolio-card-copy{display:grid;align-content:center;gap:.85rem;padding:.45rem .35rem}.portfolio-card-copy p{margin:0;color:var(--muted);line-height:1.6}.card-title{display:flex;align-items:center;gap:.9rem}.card-title h3{margin-top:.15rem}.app-icon{flex:none;display:block;border-radius:23%;box-shadow:0 0 0 1px #f5f0e824,0 10px 28px #0000006b}.app-icon-sm{width:2.75rem;height:2.75rem}.app-icon-md{width:3.5rem;height:3.5rem}.app-icon-lg{width:5.5rem;height:5.5rem}.project-kicker{color:var(--gold);font-size:.8rem;font-weight:850;letter-spacing:0;line-height:1.4;text-transform:uppercase}.tag-list{display:flex;flex-wrap:wrap;gap:.45rem}.tag-list span{display:inline-flex;min-height:1.8rem;align-items:center;padding:0 .7rem;border:1px solid rgba(245,240,232,.14);border-radius:999px;background:#f5f0e80e;color:var(--muted);font-size:.78rem;font-weight:800;line-height:1}.text-link{display:inline-flex;width:fit-content;align-items:center;gap:.45rem;color:var(--gold);font-weight:850;line-height:1.4;transition:color .22s ease,transform .22s ease}.text-link:hover{color:var(--text);transform:translateY(-1px)}.project-visual{position:relative;display:grid;min-height:18rem;align-content:stretch;border:1px solid var(--line);border-radius:8px;background:#121821;box-shadow:inset 0 1px #f5f0e814,0 18px 50px #00000038;overflow:hidden}.project-visual:before{position:absolute;inset:0;content:"";background:linear-gradient(135deg,rgba(216,168,91,.2),transparent 34%),linear-gradient(315deg,rgba(143,180,162,.16),transparent 38%);opacity:.9}.project-visual-systems:before{background:linear-gradient(135deg,rgba(125,169,216,.2),transparent 34%),linear-gradient(315deg,rgba(223,125,107,.16),transparent 38%)}.project-visual-portfolio:before{background:linear-gradient(135deg,rgba(143,180,162,.22),transparent 34%),linear-gradient(315deg,rgba(216,168,91,.16),transparent 38%)}.visual-toolbar,.visual-body{position:relative;z-index:1}.visual-toolbar{display:flex;height:2.5rem;align-items:center;gap:.45rem;padding:0 .9rem;border-bottom:1px solid rgba(245,240,232,.12);background:#06090e7a}.visual-toolbar span{width:.62rem;aspect-ratio:1;border-radius:999px;background:#f5f0e852}.visual-body{display:grid;grid-template-columns:6rem minmax(0,1fr);gap:1rem;align-items:center;padding:1.25rem}.visual-mark{display:grid;width:5rem;aspect-ratio:1;place-items:center;border:1px solid rgba(245,240,232,.18);border-radius:1.25rem;background:#f5f0e81a;color:var(--text)}.visual-list{display:grid;gap:.75rem}.visual-list span{display:flex;min-height:2.4rem;align-items:center;padding:0 .9rem;border:1px solid rgba(245,240,232,.12);border-radius:8px;background:#080b1080;color:var(--muted);font-size:.88rem;font-weight:800;line-height:1.2;transform:translate(calc(var(--row-index) * .35rem))}.github-projects{padding-top:.5rem}.project-status{min-height:1.4rem;margin:-.3rem 0 1rem;color:var(--soft);font-size:.86rem;font-weight:800;line-height:1.4;text-align:center}.project-status:empty{min-height:0;margin:0}.github-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.9rem}.github-card{position:relative;display:grid;min-height:13.5rem;align-content:start;gap:1rem;padding:1.1rem;border:1px solid var(--line);border-radius:8px;background:var(--surface-deep);box-shadow:inset 0 1px #f5f0e814;text-align:left;text-decoration:none;transition:background .22s ease,border-color .22s ease,transform .22s ease}.github-card:hover{border-color:var(--line-strong);background:#f5f0e814;transform:translateY(-3px)}.project-topline{display:flex;align-items:center;justify-content:space-between;gap:.75rem;color:var(--gold)}.project-language{display:inline-flex;min-width:0;align-items:center;gap:.4rem;font-size:.78rem;font-weight:850;line-height:1.3;text-transform:uppercase}.project-name{color:var(--text);font-size:1.1rem;font-weight:850;line-height:1.2}.project-description{color:var(--muted);font-size:.94rem;line-height:1.55}.project-date{align-self:end;margin-top:.25rem;color:var(--soft);font-size:.78rem;font-weight:800;line-height:1.4}.project-shell{align-content:start}.project-page{display:grid;align-content:start;gap:2rem;padding:3.25rem 0 2rem}.project-hero{display:grid;grid-template-columns:minmax(0,1fr) minmax(19rem,.85fr);gap:1.5rem;align-items:center}.project-hero-copy{display:grid;gap:1.1rem}.project-hero h1{font-size:4.8rem}.project-lead{max-width:42rem;margin:0;color:var(--muted);font-size:1.16rem;line-height:1.68}.project-actions{display:flex;flex-wrap:wrap;gap:1rem}.project-meta{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,14rem),1fr));gap:.8rem;margin:0}.project-meta div,.detail-panel{border:1px solid var(--line);border-radius:8px;background:var(--surface-deep);box-shadow:inset 0 1px #f5f0e814}.project-meta div{display:grid;align-content:start;gap:.35rem;min-height:7rem;padding:1rem}.project-meta dt{color:var(--gold);font-size:.78rem;font-weight:850;line-height:1.3;text-transform:uppercase}.project-meta dd{margin:0;color:var(--text);font-size:.98rem;font-weight:760;line-height:1.45}.project-story{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,20rem),1fr));gap:1.5rem;padding:1.25rem 0}.story-block{display:grid;align-content:start;gap:.75rem}.story-block p:not(.eyebrow){max-width:48rem;margin:0;color:var(--muted);font-size:1.03rem;line-height:1.7}.project-detail-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,17rem),1fr));gap:1rem}.detail-panel{padding:1.15rem}.detail-panel h2{font-size:1.2rem}.detail-panel ul{display:grid;gap:.7rem;margin:1rem 0 0;padding-left:1.1rem;color:var(--muted);line-height:1.58}.detail-panel li::marker{color:var(--gold)}.next-project{display:flex;align-items:center;justify-content:space-between;gap:1rem;min-height:5.4rem;padding:1rem 1.15rem;border:1px solid var(--line);border-radius:8px;background:var(--surface-deep);color:var(--text);font-size:1.2rem;font-weight:850;line-height:1.3;transition:border-color .22s ease,background .22s ease,transform .22s ease}.next-project:hover{border-color:var(--line-strong);background:var(--surface-strong);transform:translateY(-2px)}.next-project>span{flex:1}.next-project span{display:grid;gap:.25rem}.not-found{display:grid;min-height:70vh;align-content:center;justify-items:start;gap:1rem;padding:3rem 0}.not-found p:not(.eyebrow){max-width:38rem;margin:0;color:var(--muted);font-size:1.08rem;line-height:1.65}.footer-note{margin:0;padding-top:1.15rem;border-top:1px solid var(--line);color:var(--soft);font-size:.9rem;line-height:1.5;text-align:center}.device-frame{overflow:hidden;background:#05070a;box-shadow:0 24px 60px #0000006b}.device-frame img{display:block;width:100%;height:auto}.device-frame-phone{border:.42rem solid #05070a;border-radius:1.7rem;outline:1px solid rgba(245,240,232,.16)}.device-frame-phone img{border-radius:1.3rem}.device-frame-browser{border:1px solid var(--line);border-radius:8px}.device-frame-none{border-radius:8px}.project-cover{position:relative;display:flex;min-height:18rem;aspect-ratio:4 / 3;align-items:flex-start;justify-content:center;padding:2rem 1.5rem 0;border:1px solid var(--line);border-radius:8px;background:linear-gradient(135deg,rgba(125,169,216,.22),transparent 45%),linear-gradient(315deg,rgba(216,168,91,.16),transparent 45%),#121821;box-shadow:inset 0 1px #f5f0e814;overflow:hidden}.project-cover-accent{background:radial-gradient(ellipse 85% 75% at 50% 45%,color-mix(in srgb,var(--accent) 55%,transparent),color-mix(in srgb,var(--accent) 18%,transparent) 50%,transparent 78%),linear-gradient(180deg,color-mix(in srgb,var(--accent) 10%,#121821),#0f141c)}.project-cover-phone .project-cover-frame{flex:0 0 auto;width:min(44%,15rem)}.project-cover-phone[data-count="2"] .project-cover-frame-0{z-index:1;transform:translate(8%)}.project-cover-phone[data-count="2"] .project-cover-frame-1{margin-top:2.25rem;opacity:.92;transform:translate(-8%)}.project-cover-browser,.project-cover-none{align-items:center;padding:1.5rem}.project-cover-browser .project-cover-frame,.project-cover-none .project-cover-frame{width:100%}.project-gallery{display:grid;gap:1.25rem;min-width:0}.gallery-heading h2{font-size:1.9rem}.gallery-strip{display:flex;align-items:flex-start;gap:1.25rem;margin:0;padding:.5rem .25rem 1.25rem;list-style:none;overflow-x:auto;overscroll-behavior-x:contain;scroll-snap-type:x mandatory;scrollbar-color:rgba(245,240,232,.28) transparent}.gallery-item{flex:0 0 auto;width:13rem;scroll-snap-align:start}.gallery-item-foldable{width:min(78vw,34rem)}.gallery-item-browser,.gallery-item-none{width:min(78vw,32rem)}.gallery-strip figure{display:grid;gap:.85rem;margin:0}.gallery-open{position:relative;display:block;width:100%;padding:0;border:0;background:none;color:inherit;cursor:zoom-in;transition:transform .22s var(--ease)}.gallery-open:hover{transform:translateY(-3px)}.gallery-open:focus-visible{outline:3px solid rgba(216,168,91,.52);outline-offset:4px;border-radius:1.7rem}.gallery-zoom{position:absolute;right:.75rem;bottom:.75rem;display:grid;width:2rem;aspect-ratio:1;place-items:center;border-radius:999px;background:#080b10b8;color:var(--text);opacity:0;transition:opacity .18s ease}.gallery-open:hover .gallery-zoom,.gallery-open:focus-visible .gallery-zoom{opacity:1}.gallery-strip figcaption{color:var(--muted);font-size:.92rem;line-height:1.5}.device-frame-foldable{border:.42rem solid #05070a;border-radius:1.2rem;outline:1px solid rgba(245,240,232,.16)}.device-frame-foldable img{border-radius:.8rem}.lightbox{width:100vw;max-width:none;height:100vh;height:100dvh;max-height:none;margin:0;padding:0;border:0;background:transparent;color:var(--text)}.lightbox::backdrop{background:#06080ce6;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.lightbox-body{position:relative;display:grid;width:100%;height:100%;place-items:center;padding:3.5rem 4.5rem 1.5rem;pointer-events:none}.lightbox-body>*{pointer-events:auto}.lightbox-figure{display:grid;max-height:100%;gap:.9rem;margin:0;justify-items:center}.lightbox-figure .device-frame{display:grid}.lightbox-figure .device-frame img{width:auto;max-width:calc(100vw - 9rem);height:auto;max-height:calc(100dvh - 9rem)}.lightbox-figure figcaption{display:flex;gap:1rem;color:var(--muted);font-size:.95rem;line-height:1.4}.lightbox-count{color:var(--soft);font-variant-numeric:tabular-nums}.lightbox-close,.lightbox-nav{position:absolute;display:grid;width:2.75rem;aspect-ratio:1;place-items:center;border:1px solid var(--line);border-radius:999px;background:#0e1117cc;color:var(--text);cursor:pointer;transition:border-color .18s ease,background .18s ease}.lightbox-close:hover,.lightbox-nav:hover{border-color:#d8a85b8f;background:#1e222ce6}.lightbox-close:focus-visible,.lightbox-nav:focus-visible{outline:3px solid rgba(216,168,91,.52);outline-offset:3px}.lightbox-close{top:1rem;right:1rem}.lightbox-nav{top:50%;transform:translateY(-50%)}.lightbox-prev{left:1rem}.lightbox-next{right:1rem}.project-credits{display:grid;gap:.75rem;padding:1.5rem;border:1px solid rgba(216,168,91,.28);border-radius:8px;background:linear-gradient(135deg,rgba(216,168,91,.1),transparent 55%),var(--surface-deep)}.project-credits .eyebrow{margin:0}.project-credits h2{font-size:1.6rem}.project-credits p:not(.eyebrow){max-width:48rem;margin:0;color:var(--muted);line-height:1.65}.credit-links{display:flex;flex-wrap:wrap;gap:.5rem 1.4rem}@keyframes arrive{0%{opacity:0;transform:translateY(18px) scale(.985)}to{opacity:1;transform:translateY(0) scale(1)}}@media(max-width:900px){.page-content{gap:3.25rem}h1,.project-hero h1{font-size:4.1rem}h2{font-size:2rem}.portfolio-card,.project-hero,.project-story{grid-template-columns:1fr}.project-meta,.github-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.portfolio-card-featured{grid-template-columns:1fr}}@media(max-width:640px){.site-shell{padding:.8rem}.site-header{top:.8rem}.site-nav a{padding:0 .65rem;font-size:.86rem}.brand-link span{max-width:8.5rem}.intro{padding-top:1.5rem}.portrait-wrap{width:8rem}h1,.project-hero h1{font-size:3.15rem}h2{font-size:1.65rem}.bio{font-size:1.08rem}.profile-links,.project-meta,.github-grid{grid-template-columns:1fr}.profile-links{width:min(100%,20rem)}.portfolio-card{padding:.75rem}.project-visual,.project-cover{min-height:15rem}.project-cover{padding:1.5rem 1rem 0}.gallery-item{width:11rem}.lightbox-body{padding:3.75rem .75rem 5rem}.lightbox-figure .device-frame img{max-width:calc(100vw - 2.5rem);max-height:calc(100dvh - 11rem)}.lightbox-nav{top:auto;bottom:1rem;transform:none}.visual-body{grid-template-columns:1fr;align-content:center;justify-items:start}.visual-list span{transform:none}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;animation-duration:1ms!important;animation-iteration-count:1!important;transition-duration:1ms!important}}
