.star-canvas-fixed[data-astro-cid-qmqexpae]{position:fixed;inset:0;width:100%;height:100%;pointer-events:none;z-index:-1}:root{--bg: #181825;--mantle: #141422;--surface0: #1e1e2e;--surface1: #313244;--surface2: #45475a;--overlay: #6c7086;--subtext: #a6adc8;--text: #cdd6f4;--green: #32ff7e;--yellow: #ffff4d;--blue: #89b4fa;--mauve: #cba6f7;--red: #f38ba8;--peach: #fab387;--teal: #94e2d5;--sky: #89dceb;--crimson: #c0415a;--font: "Cascadia Code NF", "Cascadia Code", "Fira Code", "JetBrains Mono", monospace;--radius: 12px;--transition: .3s ease}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(/fonts/fa-webfonts/fa-solid-900.woff2) format("woff2")}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(/fonts/fa-webfonts/fa-brands-400.woff2) format("woff2")}.fa,.fas,.far,.fab,.fa-solid,.fa-brands,.fa-regular{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-solid,.fas{font-family:"Font Awesome 6 Free";font-weight:900}.fa-brands,.fab{font-family:"Font Awesome 6 Brands";font-weight:400}.fa-magnifying-glass:before{content:""}.fa-clock:before{content:""}.fa-link:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-down:before{content:""}.fa-arrow-up-right-from-square:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-terminal:before{content:""}.fa-music:before{content:""}.fa-globe:before{content:""}.fa-dragon:before{content:""}.fa-volume-high:before{content:""}.fa-user:before{content:""}.fa-folder-open:before{content:""}.fa-screwdriver-wrench:before{content:""}.fa-laptop-code:before{content:""}.fa-code-branch:before{content:""}.fa-keyboard:before{content:""}.fa-palette:before{content:""}.fa-envelope:before{content:""}.fa-triangle-exclamation:before{content:""}.fa-house:before{content:""}.fa-x-twitter:before{content:""}.fa-facebook-f:before{content:""}.fa-linkedin-in:before{content:""}.fa-telegram:before{content:""}.fa-github:before{content:""}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;scrollbar-width:thin;scrollbar-color:var(--surface1) transparent}html::-webkit-scrollbar{width:6px}html::-webkit-scrollbar-track{background:transparent}html::-webkit-scrollbar-thumb{background:var(--surface1);border-radius:3px}body{background:var(--bg);color:var(--text);font-family:var(--font);overflow-x:hidden}::selection{background:#32ff7e38;color:var(--text)}a{color:inherit;text-decoration:none}img{display:block;max-width:100%}ul{list-style:none}.cursor{display:inline-block;animation:blink .8s infinite;font-weight:200;color:var(--yellow)}@keyframes blink{0%,50%{opacity:1}51%,to{opacity:0}}.tag{padding:.25rem .7rem;border-radius:4px;font-size:.75rem;border:1px solid;display:inline-block}.tag-green{border-color:var(--green);color:var(--green);background:#32ff7e14}.tag-yellow{border-color:var(--yellow);color:var(--yellow);background:#ffff4d14}.tag-blue{border-color:var(--blue);color:var(--blue);background:#89b4fa14}.tag-sm{font-size:.68rem;padding:.18rem .55rem;border-color:var(--surface2);color:var(--subtext);background:var(--surface1)}.btn{padding:.7rem 1.6rem;border-radius:8px;font-weight:600;font-family:var(--font);font-size:.9rem;cursor:pointer;border:none;transition:box-shadow .25s,transform .2s;text-decoration:none;display:inline-block}.btn-primary{background:var(--yellow);color:var(--bg)}.btn-primary:hover{box-shadow:0 0 24px var(--yellow),0 4px 16px #ffff4d4d}.btn-outline{border:1.5px solid var(--yellow);color:var(--yellow);background:transparent}.btn-outline:hover{box-shadow:0 0 22px #ffff4d40}.reveal{opacity:0;transform:translateY(24px);transition:opacity .7s ease,transform .7s ease}.reveal.visible{opacity:1;transform:none}footer{background:var(--bg);padding:1.75rem 5%;text-align:center;font-size:.78rem;color:var(--overlay);border-top:1px solid var(--surface1)}footer .fa-terminal{color:var(--green)}footer span{color:var(--green)}.nav-favicon{display:inline-block;vertical-align:middle;border-radius:3px;image-rendering:auto}.footer-favicon{display:inline-block;vertical-align:middle;border-radius:2px;opacity:.7}[data-tooltip]{position:relative}[data-tooltip]:after{content:attr(data-tooltip);position:absolute;bottom:calc(100% + 7px);left:50%;transform:translate(-50%);background:var(--surface1);color:var(--text);font-size:.7rem;font-family:var(--font);white-space:nowrap;padding:.3rem .6rem;border-radius:5px;border:1px solid var(--surface2);pointer-events:none;opacity:0;transition:opacity .15s ease;transition-delay:0s;z-index:200}[data-tooltip]:before{content:"";position:absolute;bottom:calc(100% + 2px);left:50%;transform:translate(-50%);border:4px solid transparent;border-top-color:var(--surface2);pointer-events:none;opacity:0;transition:opacity .15s ease;transition-delay:0s;z-index:201}[data-tooltip]:hover:after,[data-tooltip]:hover:before{opacity:1;transition-delay:1s}[data-tooltip-dir=right]:after{bottom:auto;top:50%;left:calc(100% + 7px);transform:translateY(-50%)}[data-tooltip-dir=right]:before{bottom:auto;top:50%;left:calc(100% + 2px);transform:translateY(-50%);border:4px solid transparent;border-right-color:var(--surface2);border-top-color:transparent}[data-tooltip].tooltip-copied:after{background:#32ff7e1f;border-color:var(--green);color:var(--green);opacity:1!important;transition:none!important}[data-tooltip].tooltip-copied:before{border-top-color:var(--green);opacity:1!important;transition:none!important}.site-nav{position:fixed;top:0;left:0;right:0;z-index:100;height:56px;display:flex;align-items:center;justify-content:space-between;padding:0 5%;background:#141422d1;backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);border-bottom:1px solid var(--surface1);transform:translateY(-100%);opacity:0;transition:transform .5s cubic-bezier(.22,1,.36,1),opacity .5s ease}.site-nav.visible{transform:translateY(0);opacity:1}.nav-logo{font-size:.95rem;font-weight:700;color:var(--text);letter-spacing:.03em;white-space:nowrap;flex:1}.nav-logo .logo-prefix{color:var(--green)}.nav-logo .logo-domain{color:var(--text)}.nav-logo .logo-tld{color:var(--subtext)}.nav-center{display:flex;align-items:center;gap:.25rem;position:absolute;left:50%;transform:translate(-50%)}.nav-links{display:flex;align-items:center;gap:.35rem;list-style:none}.nav-links a{display:flex;align-items:center;gap:.3em;padding:.35rem .6rem;font-size:.83rem;color:var(--subtext);transition:color .18s;white-space:nowrap;letter-spacing:.01em;border-radius:0;background:none}.nav-links a .num{font-size:.65rem;color:var(--overlay);transition:color .18s}.nav-links a:hover{color:var(--text);background:none}.nav-links a.active{color:var(--text);font-weight:700;background:none}.nav-links a.active .num{color:var(--green)}.nav-right{display:flex;align-items:center;gap:.75rem;flex:1;justify-content:flex-end}.lang-switch{display:flex;align-items:center;gap:0;font-size:.72rem;font-weight:600;letter-spacing:.06em;color:var(--overlay)}.ls-bracket{padding:0 .18rem;user-select:none}.ls-pipe{padding:0 .1rem;user-select:none;color:var(--surface2)}.ls-lang{padding:.22rem .35rem;border-radius:4px;color:var(--subtext);text-decoration:none;font-family:var(--font);transition:color .18s,background .18s}.ls-lang:hover{color:var(--text)}.ls-lang.ls-active{color:var(--yellow)}.hamburger{display:none;flex-direction:column;gap:5px;cursor:pointer;padding:5px;background:none;border:none}.hamburger span{display:block;width:20px;height:2px;background:var(--subtext);border-radius:2px;transition:all .28s ease}.hamburger.open span:nth-child(1){transform:translateY(7px) rotate(45deg)}.hamburger.open span:nth-child(2){opacity:0}.hamburger.open span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}.mobile-menu{position:fixed;inset:0;background:#0e0e18f7;backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);z-index:99;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:2rem;transform:translate(100%);transition:transform .4s cubic-bezier(.77,0,.18,1);pointer-events:none}.mobile-menu.open{transform:translate(0);pointer-events:all}.mobile-menu a{font-size:1.7rem;font-weight:600;color:var(--subtext);transition:color .2s}.mobile-menu a .num{color:var(--green);font-size:.9rem;margin-right:.45em;vertical-align:middle}.mobile-menu a:hover{color:var(--text)}.mobile-lang{display:flex;align-items:center;gap:.6rem;font-size:1rem;font-weight:600;letter-spacing:.1em;margin-top:1rem;color:var(--overlay)}.ml-lang{padding:.3rem .5rem;border-radius:6px;color:var(--subtext);text-decoration:none;transition:color .2s}.ml-lang:hover{color:var(--text)}.ml-lang.ml-active{color:var(--yellow)}.ml-pipe{color:var(--surface2)}@media(max-width:700px){.nav-center{display:none}.hamburger{display:flex}.lang-switch{display:none}}.magic-card{position:relative;border:1px solid transparent!important;background:linear-gradient(var(--surface0),var(--surface0)) padding-box,radial-gradient(circle at var(--mx, -300px) var(--my, -300px),rgba(50,255,126,.9) 0%,rgba(50,255,126,.3) 30%,rgba(50,255,126,0) 60%) border-box!important}.magic-card:before{content:"";position:absolute;inset:0;border-radius:inherit;background:radial-gradient(circle at var(--mx, -300px) var(--my, -300px),rgba(50,255,126,.11),transparent 50%);opacity:0;transition:opacity .35s ease;pointer-events:none;z-index:0}.magic-card:hover:before{opacity:1}.magic-card>*{position:relative;z-index:1}.magic-card:hover{box-shadow:none!important}.magic-card-sm:before{background:radial-gradient(circle at var(--mx, -300px) var(--my, -300px),rgba(50,255,126,.1),transparent 50%)}.magnetic{position:relative;transition:transform .15s cubic-bezier(.25,.46,.45,.94);isolation:isolate}.magnetic:hover{transition:transform .5s cubic-bezier(.34,1.56,.64,1)}.magnetic.mag-hover{transform:translate(var(--mag-x, 0px),var(--mag-y, 0px)) scale(1.06);transition:transform .45s cubic-bezier(.34,1.56,.64,1)}.btn-inner{display:inline-flex;align-items:center;justify-content:center;gap:inherit;width:100%;height:100%;transition:transform .25s cubic-bezier(.25,.46,.45,.94);pointer-events:none}.magnetic:not(.mag-active) .btn-inner{transform:none;transition:transform .5s cubic-bezier(.34,1.56,.64,1)}@media(pointer:coarse){.magnetic,.magnetic:hover,.magnetic.mag-hover{transition:transform .4s cubic-bezier(.34,1.56,.64,1)}.magnetic:active{transform:scale(.96);transition:transform .1s ease}}.pf-share-btn.magnetic,.post-back.magnetic,.project-link.magnetic{transform-origin:center}
