canvas{top:0;left:0;width:100vw;height:100vh;display:block;position:absolute;touch-action:none}canvas#bg{position:fixed;top:0;left:0;width:100vw;height:100vh}#canvas-container{position:fixed;top:0;left:0;width:40vw;height:100vh;overflow:hidden}a:hover{text-decoration:underline}section a{color:#c3ffcb;text-decoration:none}blockquote{margin:0;padding:0;grid-column:2 / span 9;margin-bottom:var(--spacing)}blockquote p{color:#232323;background-color:#dcdcdc;font-size:4rem;display:inline;line-height:1}main{width:100vw;color:#dcdcdc;z-index:99;position:absolute;width:100%;padding:4rem 0rem;display:grid;grid-template-columns:repeat(12,1fr)}main>section{position:absolute;top:50%;left:40vw;width:60vw;height:80vh;background:#23232399;border-radius:2rem 0 0 2rem;display:flex;flex-direction:column;padding:2rem;box-sizing:border-box;overflow:auto;transition:width .5s ease}@media (max-width: 768px){main>section{width:80vw}}main>section.focus{outline:none}main>section.visible{display:block}.content-wrapper{flex:1;overflow-y:auto;padding-right:2rem;scrollbar-width:thin;scrollbar-color:#dbdbdb transparent}#scroll-hint{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:2rem;color:#dcdcdc;animation:pulse 2s infinite;z-index:10;pointer-events:none;text-align:center;opacity:1;transition:opacity .5s ease-in-out}@keyframes pulse{0%{opacity:.3;transform:translate(-50%) translateY(0)}50%{opacity:1;transform:translate(-50%) translateY(-5px)}to{opacity:.3;transform:translate(-50%) translateY(0)}}#loading-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#191919;color:#dcdcdc;display:flex;justify-content:center;align-items:center;z-index:1001;font-size:4rem;transition:opacity .5s ease}.hidden{opacity:0;transition:opacity .5s ease;pointer-events:none}.loading-dot{width:12px;height:12px;margin:0 6px;border-radius:50%;background-color:#dcdcdc;animation:wave 1s infinite ease-in-out}.loading-dot-1{animation-delay:0s}.loading-dot-2{animation-delay:.2s}.loading-dot-3{animation-delay:.4s}@keyframes wave{0%,to{transform:translateY(0);opacity:.6}50%{transform:translateY(-12px);opacity:1}}#nav{position:fixed;right:20px;top:50%;transform:translateY(-50%);z-index:1000;display:none;flex-direction:column;gap:10px;opacity:0;pointer-events:none;transition:opacity .3s ease}#nav.visible{display:flex;opacity:1;pointer-events:auto}.nav-dot{width:10px;height:10px;border-radius:50%;background-color:gray;transition:background-color .3s ease}.nav-dot:hover{cursor:pointer}.nav-dot.active{background-color:#dcdcdc}.scrollable{overflow-y:auto;scrollbar-width:thin;scrollbar-color:#dbdbdb transparent;padding-right:3rem}.bio{font-size:1.2rem;padding-left:1rem}@keyframes slideInRight{0%{opacity:0;transform:translate(50%)}to{opacity:1;transform:translate(0)}}.slide-in{animation:slideInRight .5s ease-out}h1,h2,h3{font-family:DM Sans;color:#78d782}html,body{font-family:DM Sans;margin:0;padding:0;overflow:hidden;height:100%;width:100%;visibility:visible;opacity:1;touch-action:none;overscroll-behavior:none}.repo-card{display:flex;flex-wrap:wrap;align-items:flex-start;border:1px solid #dddddd33;border-radius:8px;padding:16px;margin-bottom:20px;box-shadow:0 2px 6px #0000000d;max-width:100%;box-sizing:border-box}.repo-image{width:150px;height:auto;border-radius:6px;margin-right:16px;flex-shrink:0}.repo-content{flex:1;min-width:0}.repo-title{font-size:1.25rem;font-weight:600}.repo-language{font-size:.9rem;color:#555}@media (max-width: 768px){.repo-card{flex-direction:column;align-items:center;text-align:center}.repo-image{margin:0 0 12px}.repo-content{text-align:left;width:100%}}.nav-tooltip{position:fixed;background:#000000d9;color:#fff;padding:4px 8px;border-radius:4px;font-size:.85rem;white-space:normal;pointer-events:none;z-index:9999;transform:translate(-50%,-100%);transition:opacity .1s ease;opacity:0}#scroll-indicator{position:fixed;left:20px;top:50%;transform:translateY(-50%);display:flex;flex-direction:column;align-items:center;pointer-events:none;z-index:9999;opacity:0;transition:opacity .5 ease}.arrow-wrapper{margin:1px 0;animation-duration:2s;animation-iteration-count:infinite;animation-timing-function:ease-in-out}.arrow{width:8px;height:8px;border-left:3px solid white;border-bottom:3px solid white}.arrow-wrapper.up .arrow{transform:rotate(135deg)}.arrow-wrapper.down .arrow{transform:rotate(-45deg)}@keyframes bounce-up{0%,to{transform:translateY(0);opacity:.05}50%{transform:translateY(-6px);opacity:.3}}@keyframes bounce-down{0%,to{transform:translateY(0);opacity:.05}50%{transform:translateY(6px);opacity:.3}}.arrow-wrapper.up{animation-name:bounce-up}.arrow-wrapper.down{animation-name:bounce-down}#tap-indicator{opacity:0;pointer-events:none;position:fixed;bottom:20px;left:20px;width:40px;height:40px;z-index:9999;display:flex;align-items:center;justify-content:center}.ring{position:absolute;width:20px;height:20px;border:2px solid white;border-radius:50%;opacity:.3;animation:ring-expand 4s linear infinite}.ring:nth-child(1){animation-delay:0s}.ring:nth-child(2){animation-delay:1s}.ring:nth-child(3){animation-delay:2s}@keyframes ring-expand{0%{transform:scale(.5);opacity:.3}70%{opacity:.05}to{transform:scale(2);opacity:0}}
