@font-face{font-family:Bagnard Sans;src:url(/fonts/BagnardSans.otf)format("opentype");font-weight:400;font-style:normal}:root{--ethereal-green:#f1ecca;--super-sonic:#3073b7;--surf-the-web:#203c7f;color:#fff;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Bagnard Sans,sans-serif}*{box-sizing:border-box}html,body,#root,#app{width:100%;height:100%;min-height:100%;margin:0;overflow:hidden}html,body{width:100%;height:100%;min-height:0;margin:0;position:static;overflow:hidden}#root,#app{width:100%;height:100%;min-height:0;position:relative;overflow:hidden}body{background:var(--surf-the-web);overscroll-behavior-x:none}button{font:inherit;-webkit-tap-highlight-color:transparent}.experience{isolation:isolate;z-index:1;background:0 0;width:100%;height:100dvh;min-height:0;position:absolute;inset:0 auto auto 0;overflow:hidden}.backdrop{z-index:0;pointer-events:none;background-color:#182638;background-image:linear-gradient(#a9d9e814 var(--grid-line,1px), transparent var(--grid-line,1px)), linear-gradient(90deg, #a9d9e814 var(--grid-line,1px), transparent var(--grid-line,1px));background-size:var(--grid-step,40px) var(--grid-step,40px);background-position:0 0;background-repeat:repeat;position:fixed;inset:0}.scene-sticker-popup{background:linear-gradient(145deg, #ffffff59, transparent 45%), var(--ethereal-green);width:max-content;max-width:180px;color:var(--surf-the-web);border:1.5px solid var(--surf-the-web);letter-spacing:.01em;text-align:center;white-space:normal;pointer-events:none;-webkit-user-select:none;user-select:none;z-index:0;transform-origin:bottom;border-radius:2px;padding:8px 11px 9px;font-family:Bagnard Sans,sans-serif;font-size:10px;font-weight:400;line-height:1.25;animation:.18s cubic-bezier(.2,.8,.2,1) scene-sticker-popup-in;position:relative}.scene-sticker-popup:before{content:"";background:var(--ethereal-green);z-index:-1;width:11px;height:11px;position:absolute;bottom:-5px;left:50%;transform:translate(-50%)rotate(45deg)}@keyframes scene-sticker-popup-in{0%{opacity:0;transform:translateY(5px)scale(.88)}to{opacity:1;transform:translateY(0)scale(1)}}@media (prefers-reduced-motion:reduce){.scene-sticker-popup{animation:none}}@media (width<=767px){.scene-sticker-popup{overflow-wrap:anywhere;max-width:110px;padding:5px 7px 6px;font-size:7px;line-height:1.2}}.bolt-heart{color:#f55;opacity:0;-webkit-user-select:none;user-select:none;will-change:transform, opacity;animation:1.6s ease-out forwards bolt-heart-float;display:block}@keyframes bolt-heart-float{0%{opacity:0;transform:translateY(0)scale(.7)}10%{opacity:1;transform:translateY(-10px)scale(1)}70%{opacity:.8}to{opacity:0;transform:translateY(-120px)scale(1.1)}}.experience:after{content:"";z-index:2;pointer-events:none;position:absolute;inset:0;box-shadow:inset 0 0 15vw #00000038}.scene{border:0;width:100%;height:100%;padding:0;position:absolute;inset:0;overflow:hidden}.scene canvas{display:block}.portfolio-nav{top:max(20px, env(safe-area-inset-top));z-index:10;pointer-events:none;justify-content:space-between;align-items:center;display:flex;position:absolute;left:20px;right:20px}.portfolio-nav a{color:#fff;pointer-events:auto;font-size:clamp(12px,.9vw,15px);line-height:1;text-decoration:none;transition:-webkit-text-decoration .16s,text-decoration .16s}.portfolio-nav__brand{font-weight:400}.portfolio-nav__links{align-items:center;gap:20px;display:flex}.portfolio-nav a,.portfolio-contact__button{text-decoration:none;position:relative}.portfolio-nav a:after,.portfolio-contact__button:after{content:"";transform-origin:0;background:currentColor;width:100%;height:1px;transition:transform .25s;position:absolute;bottom:-3px;left:0;transform:scaleX(0)}.portfolio-nav a:hover:after,.portfolio-contact__button:hover:after{transform:scaleX(1)}.portfolio-contact{position:relative}.portfolio-contact__button{color:#fff;font:inherit;cursor:pointer;pointer-events:auto;background:0 0;border:0;padding:0}.portfolio-footer{left:20px;right:20px;bottom:max(20px, env(safe-area-inset-bottom));z-index:10;color:#fff;pointer-events:none;justify-content:space-between;align-items:center;font-size:clamp(11px,.8vw,14px);line-height:1;display:flex;position:absolute}.portfolio-footer a,.portfolio-footer span{color:inherit}.portfolio-footer a{pointer-events:auto;text-decoration:none;transition:opacity .16s}.portfolio-footer a:hover{opacity:.65}.portfolio-footer a:focus-visible{outline:1px solid var(--ethereal-green);outline-offset:5px}.scene:focus-visible{outline-offset:-8px;border-radius:12px;outline:1px solid #b29bd173}.cursor-idle .scene{cursor:default}.cursor-hover .scene{cursor:grab}.cursor-drag .scene{cursor:grabbing}.cursor-pointer .scene{cursor:pointer}.interface{top:max(75px, env(safe-area-inset-bottom));z-index:3;text-align:center;pointer-events:none;-webkit-user-select:none;user-select:none;width:min(90%,360px);position:absolute;left:50%;transform:translate(-50%)}.replay-button{color:#fff;cursor:pointer;pointer-events:auto;background:0 0;border:0;border-radius:3px;padding:0;font-size:clamp(12px,.85vw,14px);text-decoration:none;position:relative}.replay-button:after{content:"";transform-origin:0;background:currentColor;width:100%;height:1px;transition:transform .25s;position:absolute;bottom:-3px;left:0;transform:scaleX(0)}.replay-button:hover:after{transform:scaleX(1)}.replay-button:focus-visible{outline-offset:5px;outline:1px solid #aa91c4}.replay-button:disabled{pointer-events:none}.replay-button--image{cursor:pointer;pointer-events:auto;background:0 0;border:0;padding:0}.replay-button--image img{-webkit-user-select:none;user-select:none;-webkit-user-drag:none;width:35px;height:auto;transition:transform .16s,opacity .16s;display:block}.replay-button--image:hover img{transform:scale(1.08)}.replay-button--image:active img{transform:scale(.96)}.replay-button--image:focus-visible{outline:1px solid var(--ethereal-green);outline-offset:6px}.fallback{color:#b7a9c3;text-align:center;place-content:center;height:100%;padding:32px;font-size:13px;display:grid}.project-card-html,.project-card-anchor,.project-card,.project-card-html{pointer-events:none}.project-card__link{pointer-events:auto;z-index:10;position:relative}.project-card-anchor{box-sizing:border-box;min-width:0;max-width:none;min-height:0;max-height:none;margin:0;padding:0;display:block;transform:none}.project-card,.project-card:before,.project-card:after,.project-card *,.project-card :before,.project-card :after{box-sizing:border-box}.project-card{--card-color:#4f8edc;isolation:isolate;color:#171717;text-align:left;background:linear-gradient(115deg, #ffffffb3 0%, transparent 16%, #ffec9e59 29%, transparent 43%, #b5e0ff6b 56%, transparent 69%, #ffccf159 82%, transparent 100%), radial-gradient(circle at 20% 10%, #ffffffa6, transparent 25%), linear-gradient(145deg, color-mix(in srgb, var(--card-color) 68%, white), var(--card-color) 42%, color-mix(in srgb, var(--card-color) 80%, #30263d));backface-visibility:hidden;border:3px solid #e8d58c;width:100%;min-width:0;max-width:none;height:100%;min-height:0;max-height:none;margin:0;padding:9px;font-family:Arial,Helvetica,sans-serif;transition:border-color .22s,box-shadow .22s,filter .22s;position:relative;overflow:hidden;transform:none;box-shadow:inset 0 0 0 2px #fff9,inset 0 0 0 5px #19161c26,inset 0 0 25px #fff3,0 3px 8px #00000059}.project-card:before{content:"";z-index:0;pointer-events:none;mix-blend-mode:overlay;background:repeating-linear-gradient(115deg,#0000 0 3px,#ffffff0a 3px 4px),radial-gradient(circle at 80% 30%,#fff3,#0000 32%);position:absolute;inset:0}.project-card__frame{z-index:1;background:linear-gradient(135deg, #ffffffa6, transparent 25%), linear-gradient(180deg, color-mix(in srgb, var(--card-color) 23%, #fff9dc), color-mix(in srgb, var(--card-color) 11%, #f5eac6));border:2px solid #45371f8c;border-radius:9px;flex-direction:column;width:100%;min-width:0;height:100%;min-height:0;padding:11px 12px 9px;display:flex;position:relative;overflow:hidden;box-shadow:inset 0 0 0 1px #ffffff8c,inset 0 0 16px #5339171f}.project-card__header{flex:0 0 45px;justify-content:space-between;align-items:flex-start;gap:8px;min-height:45px;display:flex}.project-card__heading{flex:1;min-width:0}.project-card__title{color:#191919;letter-spacing:-.04em;overflow-wrap:anywhere;white-space:normal;text-shadow:0 1px #fff9;margin:0;font-size:14px;font-weight:900;line-height:1.05;overflow:hidden}.project-card__eyebrow{color:color-mix(in srgb, var(--card-color) 75%, #181818);letter-spacing:.12em;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap;margin-top:4px;font-size:6px;font-weight:900;line-height:1;display:block;overflow:hidden}.project-card__number{color:#161616;font-variant-numeric:tabular-nums;flex:none;justify-content:flex-end;align-items:baseline;gap:3px;min-width:42px;padding-top:1px;display:flex}.project-card__number>span{color:#5a5042;font-size:6px;font-weight:800}.project-card__number>strong{font-size:19px;font-weight:900;line-height:1}.project-card__image-wrap{background:#ddd2ae;border:3px solid #d3bb70;border-radius:2px;flex:0 0 144px;height:144px;position:relative;overflow:hidden;box-shadow:0 0 0 1px #362a17bf,0 2px 4px #00000052,inset 0 0 8px #ffffff59}.project-card__image-wrap img{object-fit:cover;object-position:center;-webkit-user-drag:none;filter:saturate(1.06)contrast(1.03);border-radius:0;width:100%;height:100%;display:block}.project-card__image-wrap:after{content:"";pointer-events:none;mix-blend-mode:screen;opacity:.6;background:linear-gradient(120deg,#0000 15%,#ff5a8c1f 28%,#ffe7622e 38%,#66ecff2e 49%,#a175ff26 60%,#0000 74%);position:absolute;inset:0}.project-card__image-caption{z-index:2;color:#332b20;letter-spacing:.09em;background:#f7ebc2db;border:1px solid #3d301959;border-radius:1px;padding:3px 5px;font-size:5px;font-weight:900;line-height:1;position:absolute;bottom:5px;right:5px}.project-card__image-fallback{background:radial-gradient(circle, color-mix(in srgb, var(--card-color) 45%, white), var(--card-color));color:#292219;flex-direction:column;justify-content:center;align-items:center;gap:8px;width:100%;height:100%;font-size:9px;display:flex}.project-card__image-fallback>strong{color:#ffffffbf;text-shadow:1px 2px #0003;font-size:48px;font-weight:900;line-height:1}.project-card__meta{border-bottom:2px solid color-mix(in srgb, var(--card-color) 55%, #806e43);flex:0 0 31px;justify-content:space-between;align-items:center;gap:6px;height:31px;display:flex}.project-card__category{color:#252018;letter-spacing:.05em;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap;align-items:center;gap:6px;min-width:0;font-size:7px;font-weight:900;display:inline-flex;overflow:hidden}.project-card__rarity{color:#4c4131;letter-spacing:.03em;flex:none;align-items:center;gap:4px;font-size:7px;font-weight:700;display:inline-flex}.project-card__rarity>span{color:color-mix(in srgb, var(--card-color) 75%, #46351d);font-size:12px;line-height:1}.project-card__details{flex:auto;min-height:0;padding:10px 6px 0}.project-card__section-label{color:color-mix(in srgb, var(--card-color) 72%, #352d22);letter-spacing:.12em;text-transform:uppercase;margin-bottom:5px;font-size:6px;font-weight:900;line-height:1;display:block}.project-card__description{color:#28231d;margin:0;font-size:9px;font-weight:600;line-height:1.4;display:block;overflow:hidden}.project-card__tech{border-top:1px solid #4a3b2133;flex-wrap:wrap;flex:0 0 36px;align-content:center;align-items:center;gap:4px;min-height:30px;display:flex;overflow:hidden}.project-card__tech-item{border:1px solid color-mix(in srgb, var(--card-color) 50%, #6b5d3d);background:linear-gradient(180deg, color-mix(in srgb, var(--card-color) 30%, white), color-mix(in srgb, var(--card-color) 18%, #f3e8c3));color:#30291e;overflow-wrap:anywhere;white-space:normal;border-radius:8px;justify-content:center;align-items:center;min-width:0;padding:4px 6px;font-size:6px;font-weight:800;line-height:1;display:inline-flex;overflow:hidden;box-shadow:inset 0 1px #ffffff8c}.project-card__footer{color:#625541;letter-spacing:.06em;font-variant-numeric:tabular-nums;border-top:1px solid #42341d59;flex:0 0 21px;justify-content:space-between;align-items:flex-end;gap:6px;min-height:21px;margin-top:3px;padding-top:6px;font-size:5px;font-weight:700;line-height:1;display:flex}.project-card__footer>span:last-child{color:color-mix(in srgb, var(--card-color) 70%, #34291c);flex:none;font-weight:900}.project-card__shine{z-index:3;border-radius:inherit;pointer-events:none;mix-blend-mode:screen;opacity:.18;background:radial-gradient(at 18% 5%,#ffffffb3,#0000 22%),linear-gradient(115deg,#0000 18%,#ff509b21 28%,#ffe55b2b 37%,#63edff33 46%,#6e80ff26 55%,#e067ff29 64%,#0000 76%);transition:opacity .22s;position:absolute;inset:0}.project-card.is-highlighted{filter:saturate(1.1)brightness(1.04);border-color:#fff0a9;box-shadow:inset 0 0 0 2px #ffffffbf,inset 0 0 0 5px #19161c1a,inset 0 0 25px #ffffff4d,0 0 10px #ffeca98c,0 5px 12px #00000061}.project-card.is-highlighted .project-card__shine{opacity:.72}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important}}.tear-hint-html,.tear-hint-html *,.tear-hint,.tear-hint *{-webkit-user-select:none;user-select:none;pointer-events:none!important}.tear-hint{--hint-opacity:0;--hint-x:0px;--hint-scale:.92;--hint-press:0;width:0;height:0;color:var(--surf-the-web);position:relative}.tear-hint__hand{width:30px;height:36px;opacity:var(--hint-opacity);transform-origin:11px 5px;transform:translateX(var(--hint-x)) scale(var(--hint-scale));filter:drop-shadow(4px 0 #f5f2e8)drop-shadow(-4px 0 #f5f2e8)drop-shadow(0 4px #f5f2e8)drop-shadow(0 -4px #f5f2e8)drop-shadow(0 7px 3px #0003);position:absolute;top:5px;left:-100px}.tear-hint__hand-image{object-fit:contain;pointer-events:none;-webkit-user-select:none;user-select:none;width:60px;height:auto;display:block}.tear-hint__contact{fill:none;stroke:var(--ethereal-green);stroke-width:1.2px;opacity:var(--hint-press)}@media (pointer:coarse){.tear-hint__hand{width:34px;height:40px}}.tear-hint--static .tear-hint__label{opacity:1}.tear-hint--static .tear-hint__hand{display:none}@media (prefers-reduced-motion:reduce){.tear-hint__label{opacity:1}.tear-hint__hand{display:none}}.music-player{top:max(22px, env(safe-area-inset-top));z-index:10;pointer-events:auto;-webkit-user-select:none;user-select:none;align-items:center;gap:12px;padding:9px 14px;display:flex;position:absolute;left:50%;transform:translate(-50%)}.collage-sticker-wrapper{left:var(--sticker-x);top:clamp(160px, var(--sticker-y), calc(100% - 120px));width:min(var(--sticker-size), 15vw);transform:translate(-50%,-50%)}.sticker-button{cursor:pointer;pointer-events:auto;background:0 0;border:0;place-items:center;width:100%;min-height:44px;padding:0;display:grid}.sticker-button:focus-visible{outline:2px solid var(--ethereal-green);outline-offset:8px}.collage-sticker{object-fit:contain;width:100%;max-height:170px;transform:rotate(var(--sticker-rotation));position:static}.sticker-popup{overflow-wrap:anywhere;width:max-content;max-width:min(160px,60vw);padding:6px 9px;font-size:11px;line-height:1.2;top:70%;left:0}.sticker-popup--left{left:auto;right:0}.music-player{width:min(328px,100% - 32px);padding-inline:14px}.music-player audio{width:100%;min-width:0;height:54px;display:block}.interface{inset-inline:16px;width:auto;max-width:360px;margin-inline:auto;left:16px;transform:none}.asset-error{top:45%;z-index:3;text-align:center;max-width:360px;margin-inline:auto;line-height:1.5;position:absolute;inset-inline:24px}@media (width<=999px){.scene{inset:0;top:0;bottom:0}.collage-layer{top:96px;bottom:68px;grid-template-rows:110px 1fr 130px;grid-template-columns:repeat(3,minmax(0,1fr));place-items:center;gap:8px;display:grid;inset-inline:20px}.collage-sticker-wrapper{width:min(var(--sticker-size), 72%);min-width:44px;position:relative;top:auto;left:auto;transform:none}.collage-sticker-wrapper:nth-child(n+4){grid-row:3}.collage-sticker{max-height:105px}.sticker-popup{top:100%}.collage-sticker-wrapper:nth-child(3n+2) .sticker-popup{left:50%;right:auto;transform:translate(-50%)}.collage-sticker-wrapper:nth-child(3n) .sticker-popup{left:auto;right:0}.collage-sticker-wrapper:nth-child(n+4) .sticker-popup{top:auto;bottom:100%}}@media (prefers-reduced-motion:reduce){*,:before,:after{animation:none!important}}.project-link-ui{z-index:20;pointer-events:none;justify-content:center;align-items:center;display:flex;position:absolute;top:86%;left:50%;transform:translate(-50%)}.project-button{background:var(--ethereal-green);color:var(--surf-the-web);white-space:nowrap;cursor:pointer;pointer-events:auto;border-radius:9999px;justify-content:center;align-items:center;gap:10px;padding:14px 32px;font-family:Bagnard Sans,sans-serif;font-size:13px;text-decoration:none;transition:background .2s,color .2s,transform .2s;display:inline-flex}.project-button:hover{background:var(--super-sonic);color:#fff;transform:translateY(-2px)}.project-button:focus-visible{outline-offset:4px;outline:2px solid #fff}@media (width<=767px){.project-link-ui{top:80%}.project-button{padding:9px 18px;font-size:12px}}.project-title-ui{z-index:20;text-align:center;pointer-events:none;-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;width:min(90%,800px);display:flex;position:absolute;top:10%;left:50%;transform:translate(-50%)}.project-title{letter-spacing:-.02em;color:var(--ethereal-green);text-wrap:balance;margin:0;font-family:Bagnard Sans,sans-serif;font-size:clamp(22px,3vw,48px);font-weight:400;line-height:1.15;animation:.45s ease-out both project-title-enter}@keyframes project-title-enter{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@media (width<=767px){.project-title-ui{width:90%;top:17%}.project-title{font-size:clamp(20px,5vw,30px);line-height:1.2}}@media (prefers-reduced-motion:reduce){.project-title{animation:none}}
