:root{--ink:#171717;--mono:Consolas, Inconsolata, ui-monospace, Menlo, monospace;--serif:"Libertinus Serif Display", "Libertinus Serif", Georgia, serif;--ease-out:cubic-bezier(.22, 1, .36, 1);--slide:56;--u:min(calc(100vw / 1920), calc(100dvh / 1080));--bu:max(calc(100vw / 1920), calc(100dvh / 1080));--ox:calc((100vw - 1920 * var(--u)) / 2);--oy:calc((100dvh - 1080 * var(--u)) / 2)}*{box-sizing:border-box;margin:0}html,body{background:#fff;height:100%;overflow:hidden}img{display:block}button{appearance:none;color:inherit;font:inherit;cursor:pointer;background:0 0;border:0;padding:0}a{color:inherit;text-decoration:none}:focus-visible{outline:2px solid var(--ink);outline-offset:3px}.stage{left:var(--ox);top:var(--oy);width:calc(1920 * var(--u));height:calc(1080 * var(--u));position:absolute}:where(.pixel-btn){--btn-px:max(2px, calc(3 * var(--u)))}.pixel-btn{border:calc(4 * var(--btn-px)) solid transparent;--btn-flat:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='9' height='9' shape-rendering='crispEdges'%3E%3Cpath fill='%23303838' d='M2 0h5v1h1v1h1v5H8v1H7v1H2V8H1V7H0V2h1V1h1z'/%3E%3Cpath fill='%23e0e0e0' d='M2 1h5v1h1v5H7v1H2V7H1V2h1z'/%3E%3C/svg%3E");--btn-raised:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='9' height='9' shape-rendering='crispEdges'%3E%3Cpath fill='%23303838' d='M2 0h5v1h1v1h1v5H8v1H7v1H2V8H1V7H0V2h1V1h1z'/%3E%3Cpath fill='%23a0a0a0' d='M2 1h5v1h1v5H7v1H2V7H1V2h1z'/%3E%3Cpath fill='%23f0f0f0' d='M2 1h4v1H3v1H2v3H1V2h1z'/%3E%3Cpath fill='%23e0e0e0' d='M3 2h3v3H5v1H2V3h1z'/%3E%3C/svg%3E");--btn-pressed:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='9' height='9' shape-rendering='crispEdges'%3E%3Cpath fill='%23303838' d='M2 0h5v1h1v1h1v5H8v1H7v1H2V8H1V7H0V2h1V1h1z'/%3E%3Cpath fill='%23f0f0f0' d='M2 1h5v1h1v5H7v1H2V7H1V2h1z'/%3E%3Cpath fill='%23a0a0a0' d='M2 1h4v1H3v1H2v3H1V2h1z'/%3E%3Cpath fill='%23e0e0e0' d='M3 2h3v3H5v1H2V3h1z'/%3E%3C/svg%3E");border-image:var(--btn-raised) 4 fill / calc(4 * var(--btn-px)) stretch;color:#303838;justify-content:center;align-items:center;padding:0;transition:transform .12s;display:flex}@media (hover:hover){.pixel-btn{border-image-source:var(--btn-flat)}.pixel-btn:hover,.pixel-btn:focus-visible{border-image-source:var(--btn-raised);transform:translateY(-1px)}.pixel-btn:hover:after{content:"";inset:calc(-4 * var(--btn-px) - 2px);position:absolute}}.pixel-btn:active{border-image-source:var(--btn-pressed);transform:translateY(1px)}:where(.pixel-field){--btn-px:max(2px, calc(3 * var(--u)))}.pixel-field{border:calc(4 * var(--btn-px)) solid transparent;border-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='9' height='9' shape-rendering='crispEdges'%3E%3Cpath fill='%23303838' d='M2 0h5v1h1v1h1v5H8v1H7v1H2V8H1V7H0V2h1V1h1z'/%3E%3Cpath fill='%23f0f0f0' d='M2 1h5v1h1v5H7v1H2V7H1V2h1z'/%3E%3C/svg%3E") 4 fill / calc(4 * var(--btn-px)) stretch}:where(.ambient,.card,.burger,.name,.intro,.sticker,.tag-text,.btn,.gh){left:calc(var(--x) * var(--u));top:calc(var(--y) * var(--u));width:calc(var(--w) * var(--u));height:calc(var(--h) * var(--u));position:absolute}@media (width<=700px),(aspect-ratio<=1){:root{--u:min(calc(100vw / 393), 1.5px);--ox:calc((100vw - 393 * var(--u)) / 2);--oy:0px}html,body{height:auto;overflow:clip visible}body{--projects-page-h:1500;min-height:100dvh;position:relative}[data-panel=repo]{--projects-page-h:1110}[data-panel=skills]{--projects-page-h:1220}.stage{margin-left:var(--ox);width:calc(393 * var(--u));height:calc(1688 * var(--u));position:relative;top:auto;left:auto}[data-view=projects] .stage{height:calc(var(--projects-page-h) * var(--u))}[data-panel]:not([data-panel=projects]) .stage{overflow:clip}}.scene{pointer-events:none;position:fixed;inset:0;overflow:hidden}.scene img{object-fit:cover;max-width:none;position:absolute}.sky{left:calc((100vw - 1920 * var(--bu)) / 2);top:calc((100dvh - 1080 * var(--bu)) / 2 - 119 * var(--bu));width:calc(1920 * var(--bu));height:calc(1439 * var(--bu));opacity:.47}.landscape{left:calc((100vw - 1920 * var(--bu)) / 2);top:calc((100dvh - 1080 * var(--bu)) / 2 + 183 * var(--bu));width:calc(1920 * var(--bu));height:calc(1072 * var(--bu))}.scene:after{content:"";opacity:0;background:#ffffffbf;transition:opacity .45s;position:absolute;inset:0}[data-view=projects] .scene:after{opacity:1}@media (width<=700px),(aspect-ratio<=1){.scene{height:calc(1688 * var(--u));position:absolute;inset:0 0 auto}[data-view=projects] .scene{height:calc(var(--projects-page-h) * var(--u))}.sky{left:calc(var(--ox) - 628 * var(--u));top:calc(-6 * var(--u));width:calc(1920 * var(--u));height:calc(1439 * var(--u))}.landscape{left:calc(var(--ox) - 619 * var(--u));top:calc(793 * var(--u));width:calc(1603 * var(--u));height:calc(895 * var(--u))}}.hello{--hello-y:76;--hello-w:230;--hello-card-h:858;--hello-lift:calc((var(--hello-card-h) - var(--hello-w) * 200 / 638) / 2 - var(--hello-y));--hello-step:25;animation:hello-rise var(--hello-rise) cubic-bezier(.65, 0, .35, 1) var(--hello-land) both, hello-settle var(--hello-settle) cubic-bezier(.45, 0, .25, 1) calc(var(--hello-land) + var(--hello-rise)) forwards;left:calc(50% - var(--hello-w) * var(--u) / 2);top:calc(var(--hello-y) * var(--u));width:calc(var(--hello-w) * var(--u));aspect-ratio:638/200;fill:none;stroke:#fff;stroke-width:14.8883px;stroke-linecap:round;filter:drop-shadow(0 0 calc(24 * var(--u)) #00000040);position:absolute;overflow:visible}.hello path{stroke-dasharray:1 1}.hello-h{animation:hello-draw .8s ease-in-out var(--hello-start) both, hello-fade .4s linear var(--hello-start) both}.hello-ello{animation:hello-draw 2.8s ease-in-out calc(var(--hello-start) + .7s) both, hello-fade .7s linear calc(var(--hello-start) + .7s) both}.is-typing .hello,.is-typing .hello path{animation-play-state:paused}@keyframes hello-rise{0%{transform:translateY(calc(var(--hello-lift) * var(--u)))}to{transform:translateY(calc(var(--hello-step) * -1 * var(--u)))}}@keyframes hello-settle{0%{transform:translateY(calc(var(--hello-step) * -1 * var(--u)))}to{transform:none}}@keyframes hello-draw{0%{stroke-dashoffset:1px}to{stroke-dashoffset:0}}@keyframes hello-fade{0%{opacity:0}to{opacity:1}}@media (width<=700px),(aspect-ratio<=1){.hello{--hello-y:40;--hello-w:180;--hello-card-h:560.878;--hello-step:16}}@media (prefers-reduced-motion:reduce){.hello,.hello-h,.hello-ello{animation:none}}.ambient{--x:151;--y:146;--w:439;--h:478;object-fit:cover;filter:blur(calc(62.1 * var(--u)));transition:opacity .4s}.card{--x:132;--y:111;--w:482;--h:858;--hello-blur-in:.7s;--hello-start:.35s;--hello-write:3.5s;--hello-hold:.4s;--hello-land:calc(var(--hello-start) + var(--hello-write) + var(--hello-hold));--hello-rise:1.1s;--hello-settle:.55s;box-shadow:0 0 calc(24 * var(--u)) #00000040;transition:box-shadow .5s;overflow:hidden}[data-animating] .card{transition:left .6s var(--ease-out), top .6s var(--ease-out), width .6s var(--ease-out), height .6s var(--ease-out), box-shadow .5s ease}.photo,.veil{position:absolute;inset:0}.photo-bg,.photo-plant{object-fit:cover;width:100%;height:100%;position:absolute;inset:0}.photo-strip{height:27.156%;filter:blur(calc(2.95 * var(--u)));position:absolute;inset:0 0 auto}.photo-strip>div{position:absolute;inset:0;overflow:hidden}.photo-strip img{width:133.71%;max-width:none;height:368.24%;position:absolute;top:0;left:-16.86%}.photo-shade{--shade-h:137;height:calc(var(--shade-h) * var(--u));background:linear-gradient(#d9d9d900,#0000 .0100017%,#000);position:absolute;inset:auto 0 0}.flower{--fl-x:19;--fl-y:183;--fl-s:155;left:calc(var(--fl-x) * var(--u));top:calc(var(--fl-y) * var(--u));width:calc(var(--fl-s) * var(--u));height:calc(var(--fl-s) * var(--u));object-fit:cover;position:absolute}@property --intro-in{syntax:"<number>";inherits:false;initial-value:0}@property --intro-out{syntax:"<number>";inherits:false;initial-value:1}.intro-veil{--intro-amount:calc(var(--intro-in) * var(--intro-out));backdrop-filter:blur(calc(28 * var(--u) * var(--intro-amount)));background:rgba(0, 0, 0, calc(.18 * var(--intro-amount)));pointer-events:none;animation:intro-blur-in var(--hello-blur-in) ease-in-out forwards, intro-blur-out var(--hello-rise) ease-in-out var(--hello-land) forwards;position:absolute;inset:0}@keyframes intro-blur-in{to{--intro-in:1}}@keyframes intro-blur-out{to{--intro-out:0}}.photo-plant-front{object-fit:cover;clip-path:inset(0 0 80%);width:100%;height:100%;animation:hair-over 10ms linear calc(var(--hello-land) + var(--hello-rise)) backwards;position:absolute;inset:0}@keyframes hair-over{0%{opacity:0}}.is-typing .intro-veil,.is-typing .photo-plant-front{animation-play-state:paused}.card.hello-reset *{animation:none!important}[data-view=projects] .ambient{opacity:0}.playpen{visibility:hidden;opacity:0;transition:opacity .3s,visibility 0s linear .3s;position:absolute;inset:0}[data-view=projects] .playpen{visibility:visible;opacity:1;transition:opacity .45s,visibility}.playpen-bg{width:250.4%;max-width:none;height:187.43%;position:absolute;top:-43.71%;left:-38.13%}.playpen-title{--pp-x:49;--pp-y:194;--pp-s:48;left:calc(var(--pp-x) * var(--u));top:calc(var(--pp-y) * var(--u));font:700 calc(var(--pp-s) * var(--u)) / normal "IBM Plex Serif", Georgia, serif;color:#fff;white-space:nowrap;position:absolute}.playpen-plant{width:53.527%;height:100%;filter:drop-shadow(0 0 calc(24 * var(--u)) #00000040);position:absolute;top:0;left:46.473%;overflow:hidden}.playpen-plant img{width:301.13%;max-width:none;height:120.89%;position:absolute;top:-16.33%;left:0}.veil{--veil-blur:46.45;backdrop-filter:blur();transition:-webkit-backdrop-filter .55s,backdrop-filter .55s}.veil:after{content:"";opacity:0;background:linear-gradient(#d9d9d900,#0000 .0100017%,#000);transition:opacity .55s;position:absolute;inset:0}[data-menu=open] .ambient{opacity:0}[data-menu=open] .card{box-shadow:1px 1px calc(37.2 * var(--u)) 1px #00000040}[data-menu=open] .veil{backdrop-filter:blur(calc(var(--veil-blur) * var(--u)))}[data-menu=open] .veil:after{opacity:1}@media (width<=700px),(aspect-ratio<=1){.ambient{--x:54.65;--y:93;--w:286.976;--h:312.47}.card{--x:42.23;--y:70.12;--w:315.085;--h:560.878}[data-menu=open] .card{--x:0;--y:0;--w:393;--h:648}.veil{--veil-blur:46.5}.playpen-title{--pp-x:32;--pp-y:126.8;--pp-s:31.4}.photo-shade{--shade-h:89.557}.flower{--fl-x:12.42;--fl-y:119.63;--fl-s:101.324}}@media (prefers-reduced-motion:reduce){.card,[data-animating] .card,.veil,.veil:after{transition-duration:.01ms}.playpen,[data-view=projects] .playpen{transition-duration:.01ms;transition-delay:0s}.intro-veil,.photo-plant-front{animation:none}}.home{transition:opacity .35s,visibility linear}[data-view=projects] .home{opacity:0;visibility:hidden;transition:opacity .3s,visibility 0s linear .3s}.burger{--x:181;--y:877;--w:48;--h:48;font:700 calc(48 * var(--u)) / 1 Inter, Arial, sans-serif;white-space:nowrap;transition:transform .2s var(--ease-out), opacity .3s ease .2s}.burger:after{content:"";width:max(100%,44px);height:max(100%,44px);position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.burger:hover{transform:scale(1.1)rotate(-6deg)}[data-menu=open] .burger{opacity:0;visibility:hidden;transition:opacity .25s,visibility 0s linear .25s}.name{--x:730;--y:188;--w:444;--h:58;font:400 calc(64 * var(--u)) / normal var(--serif);color:var(--ink);white-space:nowrap}.cursor{vertical-align:-.14em;background:currentColor;width:.05em;height:.95em;margin-left:.06em;animation:1.2s ease-in-out infinite cursor-blink;display:inline-block}.is-typing .cursor{animation:none}@keyframes cursor-blink{0%,to{opacity:1}50%{opacity:0}}.intro{--x:730;--y:320;--w:995;height:auto;font:400 calc(40 * var(--u)) / normal var(--serif);color:var(--ink)}.intro p+p{margin-top:1.2em}.sticker{pointer-events:none;justify-content:center;align-items:center;display:flex}.sticker img{width:calc(var(--iw) * var(--u));height:calc(var(--ih) * var(--u));object-fit:cover;transform:var(--t);flex:none}.rainbow-cat{--x:-133;--y:-111;--w:506.122;--h:506.122;--iw:389.035;--ih:389.035;--t:rotate(-21.91deg);left:calc(-133 * var(--u) - var(--ox))}.pizza{--x:1621;--y:368;--w:165.007;--h:119.537;--iw:154.538;--ih:103.045;--t:rotate(-173.64deg) scaleY(-1)}.cat{--x:1496;--y:-120;--w:458.444;--h:442.305;--iw:407.376;--ih:388.336;--t:rotate(-8.17deg)}.thumb{--x:1533.48;--y:91.15;--w:235.985;--h:261.95;--iw:177.296;--ih:217.774;--t:rotate(-18.03deg)}.tag{--x:1327;--y:88;--w:218.948;--h:172.328;--iw:194.877;--ih:133.819;--t:rotate(-12.32deg)}.tag-text{--x:1360.77;--y:140.84;--w:155.487;--h:71.181;pointer-events:none;justify-content:center;align-items:center;display:flex}.tag-text p{width:calc(150.301 * var(--u));font:400 calc(32 * var(--u)) / normal "Comic Relief", "Comic Sans MS", cursive;color:var(--ink);text-align:center;white-space:nowrap;flex:none;transform:rotate(-12.05deg)}.car{--x:1502.54;--y:439.52;--w:567.606;--h:380.249;--iw:519.555;--ih:250.519;--t:rotate(15.5deg);left:calc(1502.54 * var(--u) + var(--ox))}.btn{--x:730;--y:642;--w:315;--h:77;--btn-s:28;font:400 calc(var(--btn-s) * var(--u)) / 1 "Geist Pixel", ui-monospace, monospace;font-synthesis:none;white-space:nowrap}.gh{--x:1073;--y:646;--w:70;--h:70;transition:transform .2s var(--ease-out);border-radius:50%;overflow:hidden}.gh:hover{transform:scale(1.08)}.gh img{width:131.17%;max-width:none;height:131.17%;position:absolute;top:-9.74%;left:-11.69%}@media (width<=700px),(aspect-ratio<=1){.desk-only,br.desk{display:none}.rainbow-cat{--x:-131;--y:-75;--w:330.854;--h:330.854;--iw:254.314;--ih:254.314;left:calc(-131 * var(--u) - var(--ox));transition:opacity .3s .2s}[data-menu=open] .rainbow-cat{opacity:0;visibility:hidden;transition:opacity .25s,visibility 0s linear .25s}.burger{--x:284;--y:548}.name{--x:61;--y:678;--w:271;--h:46;font-size:calc(40 * var(--u))}.intro{--x:49;--y:752;--w:297;font-size:calc(20 * var(--u));text-align:center}.btn{--x:43;--y:994;--w:236;--h:53;--btn-s:21;--btn-px:max(2px, calc(2 * var(--u)))}.gh{--x:299;--y:994;--w:53;--h:53}.cat{--x:-23.69;--y:1010.44;--w:216.736;--h:210.564;--iw:175.038;--ih:166.081;--t:rotate(-17.31deg)}.thumb{--x:8.15;--y:1122.61;--w:110.486;--h:117.518;--iw:76.151;--ih:93.171;--t:rotate(-27.12deg)}.car{--x:154.76;--y:1099;--w:307.666;--h:229.249;--iw:274.407;--ih:161.804;left:calc(154.76 * var(--u))}}@media (prefers-reduced-motion:reduce){.cursor{animation:none}.burger,.gh,.btn{transition-duration:.01ms}.burger:hover,.gh:hover{transform:none}}.menu{--panel-x:132;--panel-w:482;--lx:137;visibility:hidden;pointer-events:none;transition:visibility 0s linear .3s;position:absolute;inset:0}.menu:focus{outline:none}.menu :focus-visible{outline-color:#fff}.menu-list{visibility:hidden;transition:visibility 0s linear .2s}.ing,.row{opacity:0;transform:translateY(calc(var(--slide) * var(--u)));transition:opacity .22s ease-in,transform .25s ease-in}.ing{left:calc((var(--panel-x) + var(--ex)) * var(--u));top:calc(var(--ey) * var(--u));width:calc(48 * var(--u));height:calc(48 * var(--u));font:700 calc(48 * var(--u)) / 1 Inter, Arial, sans-serif;white-space:nowrap;position:absolute}.ing:before{content:var(--e);transform:rotate(var(--r,0deg));display:block}.row{left:calc(var(--panel-x) * var(--u));top:calc(var(--ey) * var(--u));width:calc(var(--panel-w) * var(--u));height:calc(48 * var(--u));color:#fff;text-align:left;pointer-events:auto;display:block;position:absolute}.row:before{content:"";inset:calc(-20 * var(--u)) 0;position:absolute}.lbl{left:calc(var(--lx) * var(--u));top:calc((var(--ly) - var(--ey)) * var(--u));font:400 calc(24 * var(--u)) / normal var(--mono);white-space:nowrap;position:absolute}a.row:hover .lbl,button.row:enabled:hover .lbl{text-underline-offset:.2em;text-decoration:underline}.row--about:disabled{cursor:default}.row--about:disabled .lbl{font-weight:700}.ing:first-child,.menu-list>:first-child{--i:0;--e:"🍞";--ey:391.67;--ly:402;--ex:49.67;--r:-82.43deg}.ing:nth-child(2),.menu-list>:nth-child(2){--i:1;--e:"🍅";--ey:482;--ly:492;--ex:49}.ing:nth-child(3),.menu-list>:nth-child(3){--i:2;--e:"🧀";--ey:579;--ly:589;--ex:49}.ing:nth-child(4),.menu-list>:nth-child(4){--i:3;--e:"🥩";--ey:676;--ly:686;--ex:49}.ing:nth-child(5),.menu-list>:nth-child(5){--i:4;--e:"🥬";--ey:772.67;--ly:783;--ex:48.67}.ing:nth-child(6),.row--back{--i:5;--e:"🍞";--ey:877;--ly:886;--ex:49;--r:96.79deg}.lbl--two{--ly:768}[data-menu=open] .menu,[data-menu=open] .menu[data-list=main] .list-main,[data-menu=open] .menu[data-list=socials] .list-socials{visibility:visible;transition-delay:0s}[data-menu=open] .menu[data-list=main] .list-main{transition-delay:0s}[data-menu=open] .menu-list>.row{transform:none}[data-menu=open] .ing,[data-menu=open] .row--back,[data-menu=open] .menu[data-list=main] .list-main>.row,[data-menu=open] .menu[data-list=socials] .list-socials>.row{opacity:1;transition:opacity .5s ease calc(.14s + var(--i) * 60ms), transform .75s var(--ease-out) calc(.14s + var(--i) * 60ms);transform:none}[data-menu=open] .menu[data-swap] .menu-list>.row{transition:opacity .2s}[data-menu=open] .menu[data-swap][data-list=main] .list-main>.row,[data-menu=open] .menu[data-swap][data-list=socials] .list-socials>.row{transition:opacity .25s .12s}@media (width<=700px),(aspect-ratio<=1){.menu{--panel-x:0;--panel-w:393;--lr:282}.lbl{left:calc(var(--lr) * var(--u));font-size:calc(16 * var(--u));text-align:right;transform:translate(-100%)}.ing:first-child,.menu-list>:first-child{--ey:65.95;--ly:86;--ex:303.34}.ing:nth-child(2),.menu-list>:nth-child(2){--ey:156.28;--ly:173;--ex:302.67}.ing:nth-child(3),.menu-list>:nth-child(3){--ey:253.28;--ly:270;--ex:302.67}.ing:nth-child(4),.menu-list>:nth-child(4){--ey:350.28;--ly:367;--ex:302.67}.ing:nth-child(5),.menu-list>:nth-child(5){--ey:446.95;--ly:462;--ex:302.34}.ing:nth-child(6),.row--back{--ey:551.28;--ly:566;--ex:302.67}.lbl--two{--ly:462}}@media (prefers-reduced-motion:reduce){.ing,.row{transform:none}[data-menu=open] .ing,[data-menu=open] .row--back,[data-menu=open] .menu[data-list=main] .list-main>.row,[data-menu=open] .menu[data-list=socials] .list-socials>.row{transition:opacity .2s}}.skill-search{left:calc(705 * var(--u));top:calc(264 * var(--u));width:calc(578 * var(--u));height:calc(85 * var(--u));z-index:1;align-items:center;display:flex;position:absolute}.skill-search:focus-within{outline:2px solid var(--ink);outline-offset:2px}.skill-search input{min-width:0;padding:0 calc(8 * var(--u));appearance:none;color:#303838;font:400 calc(30 * var(--u)) / 1 "Geist Pixel", ui-monospace, monospace;font-synthesis:none;background:0 0;border:0;border-radius:0;outline:0;flex:1}.skill-search input::placeholder{color:#303838;opacity:.75}.skill-search input::-webkit-search-cancel-button{appearance:none}.project-pages.skill-pages{top:calc(264 * var(--u));height:calc(570 * var(--u))}.project-page.skill-page{display:block}.skill-tabs{left:calc(618 * var(--u));align-items:center;gap:calc(48 * var(--u));height:calc(85 * var(--u));display:flex;position:absolute;top:0}.skill-tab{color:#17171780;font:700 calc(30 * var(--u)) / normal Inconsolata, ui-monospace, Menlo, monospace;text-transform:uppercase;white-space:nowrap;transition:color .2s}.skill-tab:hover{color:#171717bf}.skill-tab[aria-current]{color:var(--ink)}.skill-grid{grid-template-columns:repeat(3, calc(353 * var(--u)));grid-auto-rows:calc(85 * var(--u));column-gap:calc(27 * var(--u));row-gap:calc(32 * var(--u));margin:0;padding:0;list-style:none;display:grid}.skill-grid[hidden]{display:none}.skill-page .skill-grid{margin-top:calc(193 * var(--u))}.skill.pixel-btn{justify-content:space-between;gap:calc(12 * var(--u));padding:0 calc(6 * var(--u));font:400 calc(30 * var(--u)) / 1.05 "Geist Pixel", ui-monospace, monospace;font-synthesis:none;cursor:default;position:relative}.skill[hidden]{display:none}.skill-name{text-align:right}.skill-logo,.skill-badge{width:calc(50 * var(--u));height:calc(50 * var(--u));flex:none}.skill-logo{position:relative}.skill-logo img{object-fit:contain;-webkit-user-drag:none;width:100%;height:100%;position:absolute;inset:0}.skill-logo-white{visibility:hidden;filter:brightness(0)invert()}.skill-badge{font-size:calc(24 * var(--u));justify-content:center;align-items:center;display:flex}@media (hover:hover) and (pointer:fine){.skill.pixel-btn:hover,.skill.pixel-btn:active{border-image-source:var(--skill-frame);color:var(--skill-text)}.skill:hover .skill-logo-colour{visibility:hidden}.skill:hover .skill-logo-white{visibility:visible}.skill:hover .skill-badge{color:#fff}}.skill-results{left:calc(705 * var(--u));top:calc(388 * var(--u));width:calc(1113 * var(--u));height:calc(454 * var(--u));padding:calc(8 * var(--u)) 0;scrollbar-width:thin;position:absolute;overflow-y:auto}.skill-results[hidden]{display:none}.skill-none{color:var(--ink);font:400 calc(30 * var(--u)) / 1.2 "Geist Pixel", ui-monospace, monospace}#panel-skills[data-searching] .skill-pages,[data-panel=skills]:has(#panel-skills[data-searching]) .pager{visibility:hidden}@media (width<=700px),(aspect-ratio<=1){.skill-search{--btn-px:max(2px, calc(2 * var(--u)));left:calc(42.23 * var(--u));top:calc(704 * var(--u));width:calc(315.085 * var(--u));height:calc(52 * var(--u))}.skill-search input{font-size:calc(16 * var(--u))}.project-pages.skill-pages{top:calc(776 * var(--u));height:calc(320 * var(--u))}.skill-tabs{gap:calc(20 * var(--u));height:calc(24 * var(--u));position:static}.skill-tab{font-size:calc(16 * var(--u))}.skill-grid{grid-template-columns:repeat(2, calc(150 * var(--u)));grid-auto-rows:calc(48 * var(--u));column-gap:calc(15.085 * var(--u));row-gap:calc(10 * var(--u))}.skill-page .skill-grid{margin-top:calc(12 * var(--u))}.skill.pixel-btn{--btn-px:max(2px, calc(2 * var(--u)));gap:calc(6 * var(--u));font-size:calc(12 * var(--u));padding:0}.skill-logo,.skill-badge{width:calc(24 * var(--u));height:calc(24 * var(--u))}.skill-badge{font-size:calc(10 * var(--u))}.skill-results{left:calc(42.23 * var(--u));top:calc(768 * var(--u));width:calc(315.085 * var(--u));height:calc(336 * var(--u))}.skill-none{font-size:calc(16 * var(--u))}[data-panel=skills] .pager{top:calc(1116 * var(--u))}[data-panel=skills] .repo{top:calc(1172 * var(--u))}}@media (prefers-reduced-motion:reduce){.skill-tab{transition-duration:.01ms}}.cert.pixel-btn{justify-content:flex-start;gap:calc(24 * var(--u));padding:0 calc(12 * var(--u));-webkit-user-select:none;user-select:none;-webkit-user-drag:none;position:relative}.cert-badge{width:calc(204 * var(--u));height:calc(204 * var(--u));-webkit-user-drag:none;flex:none}.cert-text{gap:calc(14 * var(--u));flex-direction:column;min-width:0;display:flex}.cert-name{font:400 calc(32 * var(--u)) / 1.12 "Geist Pixel", ui-monospace, monospace;font-synthesis:none}.cert-meta{font:700 calc(26 * var(--u)) / normal Inconsolata, ui-monospace, Menlo, monospace;text-transform:uppercase;opacity:.7}@media (width<=700px),(aspect-ratio<=1){.cert.pixel-btn{--btn-px:max(2px, calc(2 * var(--u)));gap:calc(12 * var(--u));padding:0 calc(4 * var(--u))}.cert-badge{width:calc(116 * var(--u));height:calc(116 * var(--u))}.cert-text{gap:calc(8 * var(--u))}.cert-name{font-size:calc(16 * var(--u))}.cert-meta{font-size:calc(13 * var(--u))}}.jb-content{left:calc(705 * var(--u));top:calc(270 * var(--u));width:calc(1113 * var(--u));gap:calc(48 * var(--u));color:var(--ink);flex-direction:column;display:flex;position:absolute}.jb-intro{font:400 calc(44 * var(--u)) / 1.2 var(--serif)}.jb-label{margin-bottom:calc(14 * var(--u));font:700 calc(30 * var(--u)) / normal Inconsolata, ui-monospace, Menlo, monospace;text-transform:uppercase;display:block}.jb-url-row{gap:calc(20 * var(--u));display:flex}.jb-field{min-width:0;height:calc(96 * var(--u));padding:0 calc(8 * var(--u));color:#303838;font:700 calc(38 * var(--u)) / 1 Inconsolata, ui-monospace, Menlo, monospace;outline-offset:2px;background:0 0;flex:1}.jb-btn{height:calc(96 * var(--u));font:400 calc(34 * var(--u)) / 1 "Geist Pixel", ui-monospace, monospace;font-synthesis:none;white-space:nowrap}.jb-copy{width:calc(220 * var(--u));flex:none}.jb-actions{gap:calc(20 * var(--u));grid-template-columns:1fr 1fr;display:grid}.jb-back{left:calc(705 * var(--u));top:calc(898 * var(--u));align-items:center;gap:calc(12 * var(--u));color:var(--ink);font:700 calc(36 * var(--u)) / normal Inconsolata, ui-monospace, Menlo, monospace;text-transform:uppercase;display:inline-flex;position:absolute}.jb-back[hidden]{display:none}.jb-back img{width:calc(24 * var(--u));height:calc(24 * var(--u))}.jb-back:hover{text-underline-offset:.2em;text-decoration:underline}[data-framed] .card,[data-framed] .burger{display:none}[data-framed] .projects{translate:calc(-302 * var(--u)) 0}@media (width<=700px),(aspect-ratio<=1){[data-framed] .projects{translate:none}[data-framed] .stage{margin-top:calc(-640 * var(--u))}[data-framed][data-view] .scene{height:100dvh}.jb-content{left:calc(42.23 * var(--u));top:calc(712 * var(--u));width:calc(315.085 * var(--u));gap:calc(16 * var(--u))}.jb-intro{font-size:calc(20 * var(--u))}.jb-label{margin-bottom:calc(6 * var(--u));font-size:calc(15 * var(--u))}.jb-url-row{gap:calc(10 * var(--u));flex-direction:column}.jb-field{--btn-px:max(2px, calc(2 * var(--u)));height:calc(48 * var(--u));font-size:calc(16 * var(--u));text-align:center;flex:none;padding:0}.jb-btn{--btn-px:max(2px, calc(2 * var(--u)));height:calc(48 * var(--u));font-size:calc(18 * var(--u))}.jb-copy{width:auto}.jb-actions{gap:calc(10 * var(--u));grid-template-columns:1fr}.jb-back{left:calc(42.23 * var(--u));top:calc(1052 * var(--u));gap:calc(8 * var(--u));font-size:calc(16 * var(--u))}.jb-back img{width:calc(14 * var(--u));height:calc(14 * var(--u))}}.projects{inset:0 0 calc(var(--slide) * var(--u));visibility:hidden;opacity:0;transform:translateY(calc(var(--slide) * var(--u)));pointer-events:none;transition:opacity .22s ease-in,transform .25s ease-in,visibility 0s linear .25s;position:absolute}.projects:focus,.box-panel:focus{outline:none}[data-view=projects] .projects{visibility:visible;opacity:1;transition:opacity .5s ease .2s, transform .75s var(--ease-out) .2s, visibility 0s;transform:none}.box-tabs{--tab-s:58;left:calc(705 * var(--u));top:calc(124 * var(--u));height:calc(75 * var(--u));transition:opacity .3s .1s,visibility;position:absolute}.box-tab[data-tab=projects]{--tab-x:0}.box-tab[data-tab=skills]{--tab-x:725}.box-tab[data-tab=certifications]{--tab-x:998}[data-panel=skills] .box-tab[data-tab=skills]{--tab-x:443}[data-panel=certifications] .box-tab[data-tab=skills]{--tab-x:318}[data-panel=certifications] .box-tab[data-tab=certifications]{--tab-x:726}[data-panel=repo] .box-tabs{visibility:hidden;opacity:0;transition:opacity .2s,visibility 0s linear .2s}.box-tab,.box-title{font:400 calc(var(--tab-s,58) * var(--u)) / normal "IBM Plex Serif", Georgia, serif;white-space:nowrap}.box-tab{color:#17171773;pointer-events:auto;transform:translateX(calc(var(--tab-x) * var(--u)));transition:transform .55s var(--ease-out), color .25s ease;position:absolute;top:0;left:0}.tab-fold{vertical-align:bottom;white-space:pre;max-width:6.4em;transition:max-width .55s var(--ease-out), opacity .3s ease;display:inline-block;overflow:hidden}.box-tab:not([aria-current]) .tab-fold,.box-tab .tab-fold--idle{opacity:0;max-width:0}.box-tab:not([aria-current]) .tab-fold--idle{opacity:1;max-width:.6em}.box-tab:hover{color:#171717b3}.box-tab[aria-current]{color:var(--ink);font-weight:700}.box-title{left:calc(705 * var(--u));top:calc(124 * var(--u));color:var(--ink);position:absolute}.box-panel{pointer-events:none;visibility:hidden;opacity:0;transform:translateX(calc(48 * var(--u)));transition:opacity .2s,visibility 0s linear .2s,transform 0s linear .2s;position:absolute;inset:0}.box-panel>*{pointer-events:auto}[data-panel=projects] #panel-projects,[data-panel=skills] #panel-skills,[data-panel=certifications] #panel-certifications,[data-panel=repo] #panel-repo{visibility:inherit;opacity:1;transition:opacity .3s ease .1s, transform .5s var(--ease-out) .1s, visibility 0s;transform:none}.project-pages{--page-step:112%;--edge-l:48;--edge-r:102;left:calc(705 * var(--u));top:calc(264 * var(--u));width:calc(1113 * var(--u));height:calc(570 * var(--u));clip-path:inset(calc(-12 * var(--u)) calc(var(--edge-r) * -1 * var(--u)) calc(-12 * var(--u)) calc(var(--edge-l) * -1 * var(--u)));touch-action:pan-y;position:absolute}.project-pages:before{content:"";inset:0 calc(var(--edge-r) * -1 * var(--u)) 0 calc(var(--edge-l) * -1 * var(--u));position:absolute}.project-page{--page-x:0;grid-template-columns:repeat(2, calc(531 * var(--u)));grid-auto-rows:calc(262 * var(--u));column-gap:calc(51 * var(--u));row-gap:calc(46 * var(--u));visibility:hidden;transform:translateX(calc(var(--page-x) * var(--page-step)));will-change:transform;display:grid;position:absolute;inset:0}.project-page[data-visible]{visibility:inherit}.pcard{-webkit-user-select:none;user-select:none;-webkit-user-drag:none;transition:transform .25s var(--ease-out);display:block}.pcard img{-webkit-user-drag:none}.pcard:hover{transform:translateY(calc(-6 * var(--u)))}.pcard img{object-fit:cover;width:100%;height:100%}.box-footer{transition:opacity .3s .1s,visibility;position:absolute;inset:0}.box-footer>*{pointer-events:auto}[data-panel=repo] .box-footer{visibility:hidden;opacity:0;transition:opacity .2s,visibility 0s linear .2s}.repo{left:calc(705 * var(--u));top:calc(898 * var(--u));font:700 calc(36 * var(--u)) / normal Inconsolata, ui-monospace, Menlo, monospace;color:var(--ink);text-transform:uppercase;white-space:nowrap;position:absolute}.repo:hover{text-underline-offset:.2em;text-decoration:underline}.pager{--arrow:64;--arrow-icon:30;--dot:32;--dot-gap:20.5;left:calc(1445 * var(--u));top:calc(885 * var(--u));width:calc(373 * var(--u));height:calc(var(--arrow) * var(--u));justify-content:space-between;align-items:center;display:flex;position:absolute}.pager-arrow{width:calc(var(--arrow) * var(--u));height:calc(var(--arrow) * var(--u));flex:none;position:relative}.pager-arrow:after{content:"";inset:calc(-4 * var(--btn-px) - 2px);position:absolute}.pager-arrow img{width:calc(var(--arrow-icon) * var(--u));height:calc(var(--arrow-icon) * var(--u));flex:none}.pager-arrow--next img{transform:rotate(180deg)}.pager-dot-sets{flex:1;align-self:stretch;position:relative}.pager-dots{gap:calc(var(--dot-gap) * var(--u));visibility:hidden;opacity:0;transition:opacity .2s,visibility 0s linear .2s;display:flex;position:absolute;top:50%;left:50%;translate:-50% -50%}[data-panel=projects] .pager-dots[data-for=projects],[data-panel=skills] .pager-dots[data-for=skills],[data-panel=certifications] .pager-dots[data-for=certifications]{visibility:inherit;opacity:1;transition:opacity .3s .1s,visibility}.pager-dot{width:calc(var(--dot) * var(--u));height:calc(var(--dot) * var(--u));background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' shape-rendering='crispEdges'%3E%3Cpath fill='%236c6c6c' d='M3 2h2v1h1v2H5v1H3V5H2V3h1z'/%3E%3C/svg%3E") 50%/100% 100% no-repeat;flex:none;transition:transform .12s;display:block;position:relative}.pager-dot[aria-current]{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' shape-rendering='crispEdges'%3E%3Cpath fill='%23fff' d='M2 0h4v1h1v1h1v4H7v1H6v1H2V7H1V6H0V2h1V1h1z'/%3E%3Cpath fill='%23171717' d='M2 1h4v1h1v4H6v1H2V6H1V2h1z'/%3E%3C/svg%3E")}.pager-dot:after{content:"";inset:calc(var(--dot-gap) / -2 * var(--u));position:absolute}.pager-dot:not([aria-current]):hover{transform:translateY(-1px)}.pager-dot:not([aria-current]):active{transform:translateY(1px)}.pager-status{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}@media (width<=700px),(aspect-ratio<=1){.box-tabs{--tab-s:20;left:calc(42.23 * var(--u));top:calc(658 * var(--u));height:calc(26 * var(--u))}.box-tab[data-tab=skills]{--tab-x:221}.box-tab[data-tab=certifications]{--tab-x:287}[data-panel=skills] .box-tab[data-tab=skills]{--tab-x:118.5}[data-panel=skills] .box-tab[data-tab=certifications]{--tab-x:275}[data-panel=certifications] .box-tab[data-tab=skills]{--tab-x:92}[data-panel=certifications] .box-tab[data-tab=certifications]{--tab-x:181.6}.box-title{--tab-s:24;left:calc(42.23 * var(--u));top:calc(656 * var(--u))}.project-pages{--page-step:115%;--edge-l:42;--edge-r:36;left:calc(42.23 * var(--u));top:calc(712 * var(--u));width:calc(315.085 * var(--u));height:calc(669 * var(--u))}.project-page{grid-template-columns:calc(315.085 * var(--u));grid-auto-rows:calc(155.25 * var(--u));row-gap:calc(16 * var(--u))}.pager{--arrow:42;--arrow-icon:20;--dot:16;--dot-gap:11;left:calc(42.23 * var(--u));top:calc(1397 * var(--u));width:calc(315.085 * var(--u))}.pager-arrow{--btn-px:max(2px, calc(2 * var(--u)))}.repo{left:calc(199.77 * var(--u));top:calc(1453 * var(--u));font-size:calc(16 * var(--u));transform:translate(-50%)}}@media (prefers-reduced-motion:reduce){.projects{transform:none}[data-view=projects] .projects{transition:opacity .2s,visibility}.pcard,.pager-arrow,.pager-dot,.box-tab,.tab-fold{transition-duration:.01ms}.box-panel,.box-tabs,.box-footer,.pager-dots{transition:none!important}.box-panel,.box-tabs{transform:none!important}.pcard:hover{transform:none}}
