@font-face{font-family:Fira Code;src:local("Fira Code Variable"),url(../_fonts/uU9NCBsR6Z2vfE9aq3bh0NSDqFGedCMX-eioOa9InPr.woff2) format(woff2);font-display:swap;unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;font-weight:300 700;font-style:normal}@font-face{font-family:"Fira Code Fallback: Courier New";src:local("Courier New");size-adjust:99.9837%;ascent-override:99.0161%;descent-override:32.2052%;line-gap-override:0%}@font-face{font-family:Fira Code;src:local("Fira Code Variable"),url(../_fonts/uU9NCBsR6Z2vfE9aq3bh2dSDqFGedCMX-3N0bgJT5Vf.woff2) format(woff2);font-display:swap;unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;font-weight:300 700;font-style:normal}@font-face{font-family:Fira Code;src:local("Fira Code Variable"),url(../_fonts/uU9NCBsR6Z2vfE9aq3bh0dSDqFGedCMX-DMA5JOYb79.woff2) format(woff2);font-display:swap;unicode-range:U+1F00-1FFF;font-weight:300 700;font-style:normal}@font-face{font-family:Fira Code;src:local("Fira Code Variable"),url(../_fonts/uU9NCBsR6Z2vfE9aq3bh3tSDqFGedCMX-l3t9xESAQO.woff2) format(woff2);font-display:swap;unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;font-weight:300 700;font-style:normal}@font-face{font-family:Fira Code;src:local("Fira Code Variable"),url(../_fonts/uU9NCBsR6Z2vfE9aq3bhZ_Wmh3mUfBsu_Q-ZioHXJn8p4.woff2) format(woff2);font-display:swap;unicode-range:U+2000-2001,U+2004-2008,U+200A,U+23B8-23BD,U+2500-259F;font-weight:300 700;font-style:normal}@font-face{font-family:Fira Code;src:local("Fira Code Variable"),url(../_fonts/uU9NCBsR6Z2vfE9aq3bh09SDqFGedCMX-FtB8bEy274.woff2) format(woff2);font-display:swap;unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;font-weight:300 700;font-style:normal}@font-face{font-family:Fira Code;src:local("Fira Code Variable"),url(../_fonts/uU9NCBsR6Z2vfE9aq3bh3dSDqFGedA-JZYgPQR10J.woff2) format(woff2);font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-weight:300 700;font-style:normal}@font-face{font-family:Fira Code;src:local("Fira Code Light"),url(../_fonts/fonts.gstatic-GFTsIcNl7W.woff) format(woff);font-display:swap;font-weight:300;font-style:normal}@font-face{font-family:Fira Code;src:local("Fira Code Regular"),local("Fira Code"),url(../_fonts/fonts.gstatic-U1jMt19abi.woff) format(woff);font-display:swap;font-weight:400;font-style:normal}@font-face{font-family:Fira Code;src:local("Fira Code Medium"),url(../_fonts/fonts.gstatic-2IVKGAbInZ.woff) format(woff);font-display:swap;font-weight:500;font-style:normal}@font-face{font-family:Fira Code;src:local("Fira Code SemiBold"),url(../_fonts/fonts.gstatic-3Ugt50XZIG.woff) format(woff);font-display:swap;font-weight:600;font-style:normal}@font-face{font-family:Fira Code;src:local("Fira Code Bold"),url(../_fonts/fonts.gstatic-uSYtRSFVPE.woff) format(woff);font-display:swap;font-weight:700;font-style:normal}:root{--primary:#8b5cf6;--primary-light:#a78bfa;--bg-light:#fff;--bg-dark:#1e1e1e;--text-light:#24292e;--text-dark:#e1e1e1;--comment:#6a9955;--string:#ce9178;--keyword:#569cd6;--function:#dcdcaa}*{box-sizing:border-box;font-family:Fira Code,"Fira Code Fallback: Courier New",Courier New,monospace;margin:0;padding:0}body{background-color:var(--bg-light);color:var(--text-light);overflow-x:hidden;transition:background-color .3s,color .3s}body.dark-mode{background-color:var(--bg-dark);color:var(--text-dark)}:focus-visible{border-radius:4px;outline:2px solid var(--primary);outline-offset:2px}a:focus-visible,button:focus-visible{outline:2px solid var(--primary);outline-offset:4px}.scroll-reveal{opacity:0;transform:translateY(24px);transition:opacity .6s ease-out,transform .6s ease-out}.scroll-reveal.scroll-revealed{opacity:1;transform:translateY(0)}@media(prefers-reduced-motion:reduce){*,:after,:before{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}.scroll-reveal{opacity:1;transform:none}}
