/*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){:root,:host{--spot-x:50%;--spot-y:50%}*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.absolute{position:absolute}.static{position:static}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.resize{resize:both}.rounded{border-radius:.25rem}.italic{font-style:italic}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}}:root{--paper:#f1ebdd;--paper-2:#ebe3d1;--paper-3:#f7f2e6;--ink:#1d1a14;--ink-2:#3a342a;--muted:#6e6655;--line:#cfc4ad;--line-strong:#3a342a;--accent:#b5a8ff;--accent-deep:#6c5cd6;--tape:#f7e69a;--hot:#ff6b3d;--shadow:0 1px 0 #3c321e0a, 0 10px 30px -18px #3c321e59;--serif:"Instrument Serif", "Iowan Old Style", Georgia, serif;--sans:"Plus Jakarta Sans", system-ui, -apple-system, sans-serif;--mono:"JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--hand:"Caveat", "Comic Sans MS", cursive;--safe-top:env(safe-area-inset-top,0px);--safe-right:env(safe-area-inset-right,0px);--safe-bottom:env(safe-area-inset-bottom,0px);--safe-left:env(safe-area-inset-left,0px)}.app-loader{z-index:120;background:var(--paper);color:var(--ink);text-align:center;place-content:center;gap:10px;transition:opacity .26s,visibility .26s;display:grid;position:fixed;inset:0}.app-loader.is-hidden{opacity:0;visibility:hidden;pointer-events:none}.app-loader-mark{width:58px;height:58px;font-family:var(--sans);letter-spacing:.02em;border:1px solid var(--line);box-shadow:inset 0 0 0 1px var(--ink);border-radius:50%;place-content:center;margin:0 auto;font-size:24px;display:grid}@supports (color:color-mix(in lab, red, red)){.app-loader-mark{box-shadow:inset 0 0 0 1px color-mix(in oklab, var(--ink) 10%, transparent)}}.app-loader p{font-family:var(--mono);color:var(--ink-2);margin:0;font-size:13px}.app-shell{opacity:0;transition:opacity .26s}.app-shell.is-ready{opacity:1}.section-fallback{border:1px dashed var(--ink);min-height:240px}@supports (color:color-mix(in lab, red, red)){.section-fallback{border:1px dashed color-mix(in oklab, var(--ink) 24%, transparent)}}.section-fallback{background:linear-gradient(110deg, transparent 30%, var(--paper-2) 45%, transparent 60%);border-radius:18px;margin:14px 0 18px}@supports (color:color-mix(in lab, red, red)){.section-fallback{background:linear-gradient(110deg, transparent 30%, color-mix(in oklab, var(--paper-2) 60%, transparent) 45%, transparent 60%)}}.section-fallback{background-size:200% 100%;animation:1.2s linear infinite section-shimmer}@keyframes section-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}[data-theme=night]{--paper:#161310;--paper-2:#1d1915;--paper-3:#211c17;--ink:#f1ebdd;--ink-2:#d4cab1;--muted:#8a8170;--line:#3a342a;--line-strong:#cfc4ad;--accent:#cbbcff;--accent-deep:#a394ff;--tape:#9d8a3e}@property --spot-x{syntax:"<percentage>";inherits:true;initial-value:50%}@property --spot-y{syntax:"<percentage>";inherits:true;initial-value:50%}*{box-sizing:border-box}html,body,#root{min-height:100%;margin:0;padding:0}html{scroll-behavior:smooth}body{font-family:var(--sans);color:var(--ink);background:var(--paper);-webkit-font-smoothing:antialiased;cursor:none;line-height:1.55;overflow-x:hidden}::selection{background:var(--accent);color:#1d1a14}body:before{content:"";pointer-events:none;z-index:0;opacity:.4;mix-blend-mode:multiply;background-image:radial-gradient(#3c321e12 1px,#0000 1.4px),radial-gradient(#3c321e0d 1px,#0000 1.4px);background-position:0 0,1px 2px;background-size:3px 3px,7px 7px;position:fixed;inset:0}[data-theme=night] body:before{mix-blend-mode:screen;opacity:.18}body:after{content:"";pointer-events:none;z-index:1;background:radial-gradient(360px circle at var(--spot-x) var(--spot-y), var(--accent), transparent 60%);position:fixed;inset:0}@supports (color:color-mix(in lab, red, red)){body:after{background:radial-gradient(360px circle at var(--spot-x) var(--spot-y), color-mix(in oklab, var(--accent) 22%, transparent), transparent 60%)}}body:after{transition:background .12s linear}.cursor,.cursor-dot{pointer-events:none;z-index:9999;mix-blend-mode:difference;position:fixed;top:0;left:0;transform:translate(-50%,-50%)}.cursor{border:1.5px solid #fff;border-radius:50%;width:28px;height:28px;transition:width .2s,height .2s,opacity .2s,border-color .2s}.cursor.hover{border-color:#fff;width:54px;height:54px}.cursor.click{width:20px;height:20px}.cursor-dot{background:#fff;border-radius:50%;width:5px;height:5px}.progress{z-index:80;pointer-events:none;height:5px;position:fixed;top:0;left:0;right:0}.progress:before{content:"";height:100%;width:calc(var(--p,0) * 100%);background:repeating-linear-gradient(45deg, var(--accent) 0 8px, var(--accent) 8px 16px);display:block}@supports (color:color-mix(in lab, red, red)){.progress:before{background:repeating-linear-gradient(45deg, var(--accent) 0 8px, color-mix(in oklab, var(--accent) 60%, var(--paper)) 8px 16px)}}.progress:before{transition:width 80ms linear;box-shadow:0 1px #0000000d}.page{z-index:2;width:100%;padding-top:calc(28px + var(--safe-top));padding-right:max(clamp(20px, 4vw, 56px), calc(14px + var(--safe-right)));padding-bottom:calc(64px + var(--safe-bottom));padding-left:max(clamp(20px, 4vw, 56px), calc(14px + var(--safe-left)));margin:0 auto;position:relative}.nav{background:var(--paper-3);align-items:center;gap:20px;padding:14px 18px;display:flex}@supports (color:color-mix(in lab, red, red)){.nav{background:color-mix(in oklab, var(--paper-3) 70%, transparent)}}.nav{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid var(--line);box-shadow:var(--shadow);top:calc(14px + var(--safe-top));z-index:50;border-radius:18px;position:sticky}.menu-toggle{display:none}.logo{font-family:var(--serif);letter-spacing:-.01em;align-items:baseline;gap:2px;font-size:30px;font-style:italic;line-height:1;display:flex}.logo .dot{background:var(--accent-deep);border-radius:50%;width:6px;height:6px;display:inline-block;transform:translateY(-2px)}.nav ul{gap:2px;margin:0;padding:0;list-style:none;display:flex}.nav a.link{font-family:var(--sans);color:var(--ink-2);border-radius:10px;align-items:center;min-height:40px;padding:8px 14px;font-size:14px;font-weight:500;text-decoration:none;transition:color .15s;display:inline-flex;position:relative}.nav a.link:hover{color:var(--ink)}.nav a.link.active:after{content:"";background:var(--ink);border-radius:2px;height:2px;position:absolute;bottom:4px;left:14px;right:14px}.status{font-family:var(--mono);color:var(--ink-2);background:var(--paper);align-items:center;gap:8px;margin-left:auto;font-size:11px;display:inline-flex}@supports (color:color-mix(in lab, red, red)){.status{background:color-mix(in oklab, var(--paper) 60%, transparent)}}.status{border:1px solid var(--line);border-radius:999px;padding:6px 12px}.status .pulse{background:#2bb673;border-radius:50%;width:8px;height:8px;position:relative}.status .pulse:after{content:"";border:2px solid #2bb673;border-radius:50%;animation:1.6s ease-out infinite pulse;position:absolute;inset:-4px}.theme-btn{border:1px solid var(--line);cursor:none;width:36px;height:36px;color:var(--ink);background:0 0;border-radius:50%;place-items:center;transition:background .15s,transform .3s;display:grid}.theme-btn:hover{background:var(--paper-2)}.theme-btn svg{transition:transform .5s cubic-bezier(.2,.7,.2,1)}[data-theme=night] .theme-btn svg{transform:rotate(180deg)}.menu-theme-btn{border-radius:10px}.menu-theme-btn .theme-copy,.menu-theme-btn .theme-sep{display:none}.cta-dark{background:var(--ink);color:var(--paper);cursor:none;font-family:var(--sans);box-shadow:0 6px 0 -2px var(--ink), 0 14px 24px -18px #0009;border:none;border-radius:12px;align-items:center;gap:8px;padding:10px 18px;font-size:14px;font-weight:600;display:inline-flex}@supports (color:color-mix(in lab, red, red)){.cta-dark{box-shadow:0 6px 0 -2px color-mix(in oklab, var(--ink) 70%, transparent), 0 14px 24px -18px #0009}}.cta-dark{text-decoration:none;transition:transform .15s}.hero{grid-template-columns:1.05fr 1fr;align-items:center;gap:48px;padding:64px 6px 36px;display:grid;position:relative}.hi{font-family:var(--hand);color:var(--ink-2);gap:8px;font-size:32px;display:inline-flex}.wave-emoji{transform-origin:70% 70%;animation:2.6s ease-in-out infinite wave;display:inline-block}@keyframes wave{0%,70%,to{transform:rotate(0)}10%{transform:rotate(14deg)}20%{transform:rotate(-8deg)}30%{transform:rotate(14deg)}40%{transform:rotate(-4deg)}50%{transform:rotate(10deg)}60%{transform:rotate(0)}}h1.name{font-family:var(--serif);letter-spacing:-.025em;margin:6px 0 4px;font-size:clamp(64px,8.4vw,124px);font-weight:400;line-height:.92}h1.name .hl{padding:0 .12em;display:inline-block;position:relative}h1.name .hl:before{content:"";background:var(--accent);z-index:-1;transform-origin:0;border-radius:6px;animation:1.1s cubic-bezier(.6,.1,.2,1) both hl-in;position:absolute;inset:14% -2px 18%;transform:rotate(-1deg)}h1.name .hl:nth-of-type(2):before{transform-origin:100%;animation-delay:.18s}@keyframes hl-in{0%{clip-path:inset(0 100% 0 0)}to{clip-path:inset(0)}}.scribble{pointer-events:none;width:160px;height:60px;position:absolute;top:42%;right:-40px}.scribble path{stroke:var(--ink);stroke-width:1.5px;fill:none;stroke-dasharray:400;stroke-dashoffset:400px;animation:1.2s cubic-bezier(.6,.1,.2,1) .6s forwards draw}@keyframes draw{to{stroke-dashoffset:0}}.role-line{flex-wrap:wrap;align-items:center;gap:14px;margin:12px 0 18px;display:flex}.role-line .div{background:var(--line-strong);width:14px;height:1px;display:inline-block}.role{font-family:var(--mono);color:var(--accent-deep);font-size:14px}.role-rotator{font-family:var(--mono);color:var(--ink-2);align-items:baseline;gap:6px;font-size:13px;display:inline-flex}.role-rotator .swap{color:var(--ink);border-bottom:1.5px dashed var(--accent-deep);padding-bottom:1px;font-weight:600;transition:opacity .25s,transform .25s}.role-rotator .swap.is-hidden{opacity:0;transform:translateY(-4px)}.blurb{font-family:var(--mono);color:var(--ink-2);width:100%;font-size:14px;line-height:1.7}.hero-cta{align-items:center;gap:22px;margin-top:28px;display:flex}.resume-cta{flex-direction:column;align-items:flex-start;gap:8px;display:flex}.btn-primary{--mx:0px;--my:0px;background:var(--ink);color:var(--paper);cursor:none;font-family:var(--sans);box-shadow:0 6px 0 -2px var(--ink), 0 14px 30px -18px #0009;border:none;border-radius:12px;align-items:center;gap:10px;padding:14px 24px;font-size:15px;font-weight:600;display:inline-flex}@supports (color:color-mix(in lab, red, red)){.btn-primary{box-shadow:0 6px 0 -2px color-mix(in oklab, var(--ink) 70%, transparent), 0 14px 30px -18px #0009}}.btn-primary{transform:translate(var(--mx), var(--my));transition:transform .25s cubic-bezier(.2,.7,.2,1)}.btn-primary .arr{transition:transform .25s;display:inline-block}.btn-primary:hover .arr{transform:translate(4px)}.btn-link{cursor:none;font-family:var(--sans);color:var(--ink);background:0 0;border:none;align-items:center;gap:8px;min-height:40px;padding:6px 2px;font-size:15px;font-weight:500;display:inline-flex;position:relative}.btn-link:after{content:"";background:var(--ink);height:1px;position:absolute;bottom:-2px;left:0;right:0}.collage{height:520px;position:relative}.photo-card{border:1px solid var(--line);background:#fff;width:380px;height:460px;padding:14px 14px 60px;position:absolute;top:18px;right:0;transform:rotate(2deg);box-shadow:0 1px #3c321e0d,0 30px 50px -30px #281e0a73,0 80px 100px -60px #281e0a4d}.photo-card .img{object-fit:cover;object-position:center;width:100%;height:100%;display:block}.tape{background:var(--tape);width:88px;height:22px;position:absolute}@supports (color:color-mix(in lab, red, red)){.tape{background:color-mix(in oklab, var(--tape) 80%, transparent)}}.tape{transform:rotate(-6deg);box-shadow:0 2px #0000000a}.tape.t1{top:-10px;left:30px}.tape.t2{background:#e8c7d4d9;top:-8px;right:50px;transform:rotate(8deg)}.badge-circ{background:var(--accent-deep);color:#fff;width:78px;height:78px;font-family:var(--mono);box-shadow:0 14px 24px -10px var(--accent-deep);border-radius:50%;justify-content:center;align-items:center;font-size:18px;font-weight:700;display:flex;position:absolute;top:-32px;left:-18px}@supports (color:color-mix(in lab, red, red)){.badge-circ{box-shadow:0 14px 24px -10px color-mix(in oklab, var(--accent-deep) 70%, transparent)}}.badge-circ{animation:14s linear infinite spin-slow;transform:rotate(-8deg)}@keyframes spin-slow{to{transform:rotate(352deg)}}.badge-circ span{display:inline-block;transform:rotate(8deg)}.spark{font-family:var(--serif);color:var(--ink);font-size:30px;animation:2.2s ease-in-out infinite twinkle;position:absolute;top:-26px;right:-6px}@keyframes twinkle{0%,to{opacity:.4;transform:scale(.9)}50%{opacity:1;transform:scale(1.15)}}.code-card{color:#e8e1cb;width:360px;font-family:var(--mono);background:#1c1a16;border-radius:10px;padding:30px 18px 18px;font-size:12.5px;line-height:1.75;position:absolute;bottom:90px;left:-12px;transform:rotate(-3deg);box-shadow:0 18px 28px -14px #0009}.code-card:before{content:"● ● ●";letter-spacing:4px;color:#888;font-size:9px;line-height:1;position:absolute;top:8px;left:12px}.code-card .k{color:#c39bff}.code-card .s{color:#a4d18f}.code-card .p{color:#f0c674}.code-card .f{color:#8ab4ff}.code-card .c{color:#6f6857}.code-card #typed{white-space:pre-wrap}.code-card .caret{vertical-align:-2px;background:#e8e1cb;width:7px;height:14px;animation:1s steps(2,end) infinite blink;display:inline-block}@keyframes blink{50%{opacity:0}}.me-arrow{font-family:var(--hand);color:var(--ink-2);font-size:26px;position:absolute;bottom:0;right:30px;transform:rotate(-4deg)}.me-arrow .a{font-family:var(--serif);display:inline-block;transform:translateY(-4px)rotate(-30deg)}.band{background:var(--ink);color:var(--paper);border-top:1px solid var(--ink);border-bottom:1px solid var(--ink);margin:36px -100px 10px;position:relative;overflow:hidden;transform:rotate(-1.6deg)}.band .mq{font-family:var(--serif);letter-spacing:-.01em;align-items:center;gap:48px;width:max-content;padding:14px 0;font-size:34px;font-style:italic;animation:28s linear infinite scroll-x;display:flex}.band .mq span{align-items:center;gap:48px;display:inline-flex}.band .mq .star{color:var(--accent);font-size:22px}@keyframes scroll-x{0%{transform:translate(0)}to{transform:translate(-50%)}}.section-card{background:var(--paper-3);margin-top:40px}@supports (color:color-mix(in lab, red, red)){.section-card{background:color-mix(in oklab, var(--paper-3) 80%, transparent)}}.section-card{border:1px solid var(--line);box-shadow:var(--shadow);border-radius:22px;padding:28px 28px 32px;position:relative}.section-card .braces{font-family:var(--mono);color:var(--muted);background:var(--paper-3);padding:0 8px;font-size:14px;position:absolute;top:-14px;right:18px}.label{font-family:var(--serif);color:var(--ink);align-items:center;gap:14px;margin-bottom:18px;font-size:30px;display:flex}.label small{font-family:var(--mono);letter-spacing:.18em;color:var(--muted);text-transform:uppercase;margin-left:auto;font-size:11px}.marquee{padding:14px 0;position:relative;overflow:hidden visible;transform:skewY(-1.5deg);-webkit-mask-image:linear-gradient(90deg,#0000 0,#000 6% 94%,#0000 100%);mask-image:linear-gradient(90deg,#0000 0,#000 6% 94%,#0000 100%)}.marquee-track{gap:18px;width:max-content;animation:36s linear infinite scroll-x;display:flex}.tech-pill{background:var(--paper-3);border:1px solid var(--line);border-radius:16px;flex-direction:column;flex:none;justify-content:center;align-items:center;gap:10px;width:156px;height:116px;transition:transform .25s,box-shadow .25s;display:flex;box-shadow:0 1px #3c321e0d,0 16px 24px -22px #281e0a66}.tech-pill:hover{transform:translateY(-6px)rotate(-2deg);box-shadow:0 1px #3c321e0d,0 26px 36px -22px #281e0a80}.tech-pill .glyph{width:48px;height:48px;font-family:var(--mono);color:#fff;border-radius:12px;justify-content:center;align-items:center;font-size:15px;font-weight:700;display:flex}.tech-pill .name{font-family:var(--mono);color:var(--ink-2);font-size:12px}.projects-head{justify-content:space-between;align-items:center;margin:56px 6px 18px;display:flex}.projects-head-right{align-items:center;gap:18px;display:flex}.view-all{color:var(--accent-deep);font-family:var(--hand);align-items:center;gap:6px;font-size:24px;text-decoration:none;display:inline-flex}.pager{gap:8px;display:flex}.pager button{border:1px solid var(--line-strong);cursor:none;width:42px;height:42px;color:var(--ink);background:0 0;border-radius:50%;justify-content:center;align-items:center;transition:background .15s,transform .15s;display:flex}.pager button:hover{background:var(--ink);color:var(--paper)}.pager button:active{transform:scale(.96)}.carousel{touch-action:pan-y;padding:12px 6px 24px;position:relative;overflow:hidden}.carousel-track{will-change:transform;gap:22px;transition:transform .55s cubic-bezier(.22,.7,.18,1);display:flex}.project{background:var(--paper-3);border:1px solid var(--line);transform-style:preserve-3d;transform:perspective(900px) rotateX(var(--rx,0deg)) rotateY(var(--ry,0deg));border-radius:18px;flex:0 0 calc(33.3333% - 14.6667px);padding:14px;transition:transform .25s,box-shadow .25s;position:relative;box-shadow:0 1px #3c321e0a,0 20px 30px -28px #281e0a66}.project:hover{box-shadow:0 1px #3c321e0a,0 30px 44px -28px #281e0a99}.project .shot{color:#e7e1cf;height:200px;font-family:var(--serif);background:#14110d;border-radius:12px;flex-direction:column;justify-content:flex-end;padding:14px;display:flex;position:relative;overflow:hidden;transform:translateZ(20px)}.project .shot .bar{gap:6px;display:flex;position:absolute;top:10px;left:12px}.project .shot .bar i{border-radius:50%;width:10px;height:10px;display:inline-block}.project .shot .bar i:first-child{background:#ff5f57}.project .shot .bar i:nth-child(2){background:#febc2e}.project .shot .bar i:nth-child(3){background:#28c840}.project .shot h4{letter-spacing:-.02em;width:78%;margin:0 0 6px;font-size:28px;line-height:1.05}.project .shot p{font-family:var(--mono);opacity:.8;width:75%;margin:0 0 12px;font-size:11.5px}.project .shot .pseudo-cta{font-family:var(--mono);color:#fff;background:#ffffff1f;border:1px solid #ffffff38;border-radius:6px;align-self:flex-start;padding:6px 10px;font-size:11px}.project .shot.warm{color:#1d1a14;background:#efe6d5}.project .shot.warm .pseudo-cta{color:#1d1a14;background:#0000000f;border-color:#00000026}.project .shot.green{background:#1f2a22}.project .shot.mid{background:#2a253b}.project .shot .wave{opacity:.85;width:140px;height:60px;position:absolute;bottom:18px;right:14px}.project .meta{padding:16px 6px 4px}.project .meta .row{justify-content:space-between;align-items:center;gap:12px;display:flex}.project .meta h3{font-family:var(--serif);letter-spacing:-.01em;margin:0;font-size:24px}.project .meta .tag{background:var(--paper-2);color:var(--ink-2);border:1px solid var(--line);font-family:var(--mono);border-radius:999px;padding:3px 10px;font-size:11px}.project .meta p{font-family:var(--mono);color:var(--ink-2);margin:10px 0 14px;font-size:12.5px;line-height:1.65}.project .meta .stack{font-family:var(--mono);color:var(--muted);border-top:1px dashed var(--line);flex-wrap:wrap;align-items:center;gap:6px;padding-top:10px;font-size:11.5px;display:flex}.project .meta .stack .dot{background:var(--muted);border-radius:50%;width:3px;height:3px;margin-right:6px;display:inline-block}.project .meta .open{border:1px solid var(--line);width:30px;height:30px;color:var(--ink);background:var(--paper-3);border-radius:50%;justify-content:center;align-items:center;margin-left:auto;text-decoration:none;transition:background .15s,color .15s,transform .25s;display:flex}.project:hover .meta .open{transform:rotate(45deg)scale(1.1)}.project .meta .open:hover{background:var(--ink);color:var(--paper)}.carousel-hint{font-family:var(--hand);color:var(--muted);align-items:center;gap:8px;margin-top:-6px;padding-left:6px;font-size:18px;display:flex}.about-row{grid-template-columns:1fr 1.15fr;gap:28px;margin-top:54px;display:grid}.panel{background:var(--paper-3);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:18px;padding:24px 26px 26px;position:relative}.panel .corner-tape{background:var(--ink);width:74px;height:20px;position:absolute;top:-10px;right:18px}@supports (color:color-mix(in lab, red, red)){.panel .corner-tape{background:color-mix(in oklab, var(--ink) 60%, transparent)}}.panel .corner-tape{transform:rotate(6deg)}.panel.about{grid-template-columns:110px 1fr;align-items:start;gap:18px;display:grid}.about-avatar-wrap{position:relative}.avatar{border:1px solid var(--line);background:radial-gradient(circle at 40% 35%,#cdc4ad 0 30%,#6f6856 31% 60%,#2a2620 61% 100%);border-radius:50%;width:96px;height:96px;position:relative;overflow:hidden}.avatar img{object-fit:cover;object-position:center;width:100%;height:100%;display:block}.crown{font-family:var(--serif);color:var(--ink);font-size:26px;position:absolute;top:-14px;left:-8px;transform:rotate(-12deg)}.about h3,.process h3{font-family:var(--serif);letter-spacing:-.01em;margin:0 0 8px;font-size:28px}.connect h3{font-family:var(--serif);margin:0 0 8px;font-size:32px}.about p{font-family:var(--mono);color:var(--ink-2);margin:6px 0;font-size:12.5px;line-height:1.75}.about .quote{font-family:var(--hand);color:var(--accent-deep);margin-top:10px;font-size:24px}.process-tape{left:18px;right:auto;background:var(--accent)!important}@supports (color:color-mix(in lab, red, red)){.process-tape{background:color-mix(in oklab, var(--accent) 70%, transparent)!important}}.process .steps{grid-template-columns:repeat(4,1fr);align-items:start;gap:6px;display:grid;position:relative}.step{text-align:center;flex-direction:column;align-items:center;gap:6px;display:flex;position:relative}.step .icon{background:var(--paper);border:1px solid var(--line);width:60px;height:60px;color:var(--ink);border-radius:14px;justify-content:center;align-items:center;margin-bottom:4px;transition:transform .3s cubic-bezier(.2,.7,.2,1);display:flex}.step:hover .icon{transform:translateY(-4px)rotate(-6deg)}.step .n{font-family:var(--mono);color:var(--muted);letter-spacing:.18em;font-size:11px}.step h5{font-family:var(--serif);margin:0;font-size:20px}.step p{font-family:var(--mono);color:var(--ink-2);margin:4px 8px 0;font-size:11.5px;line-height:1.6}.arrow-svg{pointer-events:none;width:60px;height:24px;position:absolute;top:18px}.arrow-svg path{fill:none;stroke:var(--ink-2);stroke-width:1.4px;stroke-linecap:round;stroke-dasharray:80;stroke-dashoffset:80px}.arrow-svg.show path{animation:1s forwards draw}.connect{background:var(--paper-3);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:18px;grid-template-columns:1.1fr 1fr .8fr;align-items:center;gap:36px;margin-top:48px;padding:28px 28px 30px;display:grid;position:relative}.connect .blurb-s{font-family:var(--mono);color:var(--ink-2);width:100%;font-size:12.5px;line-height:1.65}.info-line{font-family:var(--mono);color:var(--ink-2);overflow-wrap:anywhere;align-items:center;gap:10px;margin:8px 0;font-size:13px;display:flex}.info-line .ic{border:1px solid var(--line);background:var(--paper);border-radius:50%;justify-content:center;align-items:center;width:30px;height:30px;display:flex}.connect-social-column{flex-direction:column;align-items:flex-end;gap:14px;display:flex}.socials{align-items:center;gap:10px;display:flex}.socials a{border:1px solid var(--line-strong);background:var(--paper);width:42px;height:42px;color:var(--ink);border-radius:50%;justify-content:center;align-items:center;text-decoration:none;transition:background .15s,color .15s,transform .15s;display:flex}.socials a:hover{background:var(--ink);color:var(--paper);transform:translateY(-2px)rotate(-4deg)}.note{background:var(--accent);color:#1d1a14;font-family:var(--hand);box-shadow:0 14px 22px -16px var(--accent-deep);border-radius:6px;padding:18px 16px;font-size:22px;line-height:1.15;position:relative;transform:rotate(2deg)}@supports (color:color-mix(in lab, red, red)){.note{box-shadow:0 14px 22px -16px color-mix(in oklab, var(--accent-deep) 80%, transparent)}}.note{grid-area:1/3/2/4;justify-self:end;width:200px}.note:before{content:"";background:#3c321e80;width:60px;height:18px;position:absolute;top:-10px;left:30%;transform:rotate(-6deg)}.note .smile{margin-top:8px;font-size:18px;display:block}footer{font-family:var(--mono);color:var(--muted);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-top:36px;padding:14px 6px 0;font-size:11.5px;display:flex}footer .now{align-items:center;gap:6px;display:inline-flex}footer .now .blip{background:var(--hot);border-radius:50%;width:6px;height:6px;animation:1.4s ease-out infinite pulse}@keyframes pulse{50%{opacity:.5}}.toast{left:50%;bottom:calc(32px + var(--safe-bottom));background:var(--ink);color:var(--paper);font-family:var(--mono);opacity:0;pointer-events:none;z-index:9000;border-radius:14px;padding:14px 22px;font-size:13px;transition:transform .35s cubic-bezier(.2,.8,.2,1),opacity .35s;position:fixed;transform:translate(-50%,60px);box-shadow:0 30px 50px -20px #0009}.toast.show{opacity:1;transform:translate(-50%)}.sparkle{pointer-events:none;z-index:8800;background:var(--accent);border-radius:50%;width:8px;height:8px;animation:1s ease-out forwards spk;position:fixed}@keyframes spk{0%{opacity:1;transform:scale(0)}60%{opacity:1}to{opacity:0;transform:translateY(60px)scale(1.6)}}@media (pointer:coarse){body{cursor:auto}.cursor,.cursor-dot{display:none}}@media (width<=980px){.page{padding-top:calc(24px + var(--safe-top));padding-right:max(20px, calc(12px + var(--safe-right)));padding-bottom:calc(56px + var(--safe-bottom));padding-left:max(20px, calc(12px + var(--safe-left)))}.nav{flex-wrap:wrap;align-items:center;gap:12px;padding:12px 14px}.hero{grid-template-columns:1fr;gap:24px}.arrow-svg{display:none}.band{max-width:100%;margin:32px 0 10px;overflow-x:clip;transform:none}.band .mq{gap:28px;padding:12px 0;font-size:26px}.band .mq span{gap:28px}.hero-cta{flex-wrap:wrap;gap:14px}.wave-emoji,.badge-circ,.spark,.code-card .caret{animation:none!important}.marquee,.project,.project .shot{transform:none!important}.collage{gap:14px;height:auto;padding-top:8px;display:grid}.badge-circ,.spark,.photo-card,.code-card,.me-arrow{position:relative;inset:auto;transform:none}.photo-card,.code-card{width:100%;max-width:100%}.section-card{padding:24px}.project{flex-basis:calc(50% - 11px)}.about-row{grid-template-columns:1fr}.process .steps{grid-template-columns:repeat(2,1fr);gap:18px}.connect{grid-template-columns:1fr}.note{grid-area:auto;justify-self:start}.menu-toggle{border:1px solid var(--line);background:var(--paper);cursor:pointer;width:44px;height:44px;color:var(--ink);border-radius:12px;flex-direction:column;order:5;justify-content:center;align-items:center;gap:5px;margin-left:0;display:inline-flex}.logo{order:1}.cta-dark{order:3;margin-left:auto}.menu-toggle span{background:currentColor;border-radius:99px;width:18px;height:2px;transition:transform .2s,opacity .2s}.nav.is-open .menu-toggle span:first-child{transform:translateY(7px)rotate(45deg)}.nav.is-open .menu-toggle span:nth-child(2){opacity:0}.nav.is-open .menu-toggle span:nth-child(3){transform:translateY(-7px)rotate(-45deg)}.nav ul{background:var(--paper-3);flex-direction:column;order:6;gap:4px;width:100%;margin:2px 0 0;padding:8px;display:none}@supports (color:color-mix(in lab, red, red)){.nav ul{background:color-mix(in oklab, var(--paper-3) 86%, transparent)}}.nav ul{border:1px solid var(--line);border-radius:12px}.nav.is-open ul{display:flex}.nav a.link{justify-content:flex-start;width:100%}.nav ul .menu-theme-btn{border:1px solid var(--line);border-radius:10px;justify-content:space-between;align-items:center;gap:12px;width:100%;min-height:44px;padding:8px 12px;display:flex}.nav ul .menu-theme-btn .theme-copy{font-family:var(--sans);color:var(--ink-2);font-size:14px;font-weight:500;display:inline}.nav ul .menu-theme-btn .theme-icon-wrap{border:1px solid var(--line);background:var(--paper);border-radius:999px;place-items:center;width:32px;min-width:32px;height:32px;margin-left:auto;display:grid}@supports (color:color-mix(in lab, red, red)){.nav ul .menu-theme-btn .theme-icon-wrap{background:color-mix(in oklab, var(--paper) 60%, transparent)}}.nav ul .menu-theme-btn .theme-icon-wrap{padding:0}.status{order:7;justify-content:center;width:100%}}@media (width<=640px){.page{padding-top:calc(20px + var(--safe-top));padding-right:max(16px, calc(10px + var(--safe-right)));padding-bottom:calc(44px + var(--safe-bottom));padding-left:max(16px, calc(10px + var(--safe-left)))}h1.name{font-size:56px}.nav{top:calc(10px + var(--safe-top));border-radius:14px}.nav a.link{min-height:44px;padding:8px 12px}.theme-btn{width:44px;height:44px}.cta-dark{min-height:44px}.photo-card{width:100%;height:340px}.code-card{width:100%;max-width:none}.status{display:none}.band .mq{gap:20px;font-size:20px}.band .mq span{gap:20px}.section-card{padding:20px}.project{flex-basis:88%}.project .shot{justify-content:flex-start;height:250px;padding:14px}.project .shot .bar{top:12px}.project .shot h4{width:92%;margin:34px 0 8px;font-size:34px;line-height:1.02}.project .shot p{width:92%;margin:0 0 10px;font-size:11.5px;line-height:1.38}.pager button{width:46px;height:46px}.carousel-hint{flex-wrap:wrap;font-size:16px;line-height:1.3}.scribble{display:none}.collage{gap:14px;height:auto;padding-top:8px;display:grid}.badge-circ,.spark,.photo-card,.code-card,.me-arrow{position:relative;inset:auto;transform:none}.badge-circ{width:60px;height:60px;margin-bottom:-8px;font-size:14px}.me-arrow{justify-self:end;font-size:24px}.hero-cta{flex-direction:column;align-items:stretch}.resume-cta{align-items:stretch}.btn-primary,.btn-link{justify-content:center;min-height:44px}.role-line{gap:10px}.role,.role-rotator{font-size:12px}.panel.about{grid-template-columns:1fr;gap:14px}.about-avatar-wrap{width:fit-content}.avatar{width:82px;height:82px}.connect{gap:20px;padding:22px 18px 24px}.connect-social-column{align-items:flex-start}.socials a{width:44px;height:44px}.note{justify-self:stretch;width:100%}.projects-head{flex-direction:column;align-items:flex-start;gap:10px}.projects-head-right{justify-content:space-between;width:100%}}@media (width<=420px){.page{padding-top:calc(16px + var(--safe-top));padding-right:max(12px, calc(8px + var(--safe-right)));padding-bottom:calc(36px + var(--safe-bottom));padding-left:max(12px, calc(8px + var(--safe-left)))}h1.name{font-size:48px}.label{font-size:24px}.note{width:100%}.process .steps{grid-template-columns:1fr;gap:14px}.project .shot{height:242px}.project .shot h4{width:94%;margin-top:32px;font-size:30px}.project .shot p{width:94%;font-size:11.2px}.step p{margin-left:2px;margin-right:2px}}@media (width>=1600px){.page{padding:34px clamp(36px,3vw,92px) 84px}.hero{grid-template-columns:1.1fr .9fr;gap:64px}h1.name{font-size:clamp(88px,7vw,148px)}.project{flex-basis:calc(25% - 16.5px)}.projects-head{margin-top:72px}.about-row{grid-template-columns:1fr 1.2fr}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}
