.landing-page-container{min-height:100svh;display:flex;justify-content:center;align-items:center}.text-box{--frame-color: rgba(255, 255, 255, .98);--frame-accent: rgba(255, 255, 255, .5);--corner-pixel: 2px;position:relative;isolation:isolate;background:linear-gradient(#ffffff08,#fff0) top / 100% 3.75rem no-repeat,#000000db;color:#fff;font-family:IBM Plex Mono,monospace;transform:translateY(-32px);width:62%;max-height:90vh;max-width:1200px;border:3px solid var(--frame-color);padding:1.85rem 2.15rem;border-radius:0;margin:1rem;z-index:1;text-align:center;box-shadow:0 18px 42px #00000073;box-sizing:border-box;display:flex;flex-direction:column;transition:box-shadow .16s ease;will-change:width,height;overflow:visible}.text-box:before{content:"";position:absolute;inset:14px;border:1px solid var(--frame-accent);pointer-events:none;opacity:.9;z-index:0;transition:opacity .16s ease}.text-box>:not(.text-box-frame){position:relative;z-index:1}.text-box-frame{position:absolute;inset:0;pointer-events:none;z-index:2}.text-box-corner{position:absolute;width:0;height:0;color:var(--frame-color)}.text-box-corner:before{content:"";position:absolute;top:0;left:0;width:var(--corner-pixel);height:var(--corner-pixel);background:currentColor;transform:translate(-50%,-50%);box-shadow:0 calc(var(--corner-pixel) * -1) 0 currentColor,0 calc(var(--corner-pixel) * -2) 0 currentColor,0 calc(var(--corner-pixel) * -3) 0 currentColor,0 calc(var(--corner-pixel) * -4) 0 currentColor,0 var(--corner-pixel) 0 currentColor,0 calc(var(--corner-pixel) * 2) 0 currentColor,0 calc(var(--corner-pixel) * 3) 0 currentColor,0 calc(var(--corner-pixel) * 4) 0 currentColor,calc(var(--corner-pixel) * -1) 0 0 currentColor,calc(var(--corner-pixel) * -2) 0 0 currentColor,calc(var(--corner-pixel) * -3) 0 0 currentColor,calc(var(--corner-pixel) * -4) 0 0 currentColor,var(--corner-pixel) 0 0 currentColor,calc(var(--corner-pixel) * 2) 0 0 currentColor,calc(var(--corner-pixel) * 3) 0 0 currentColor,calc(var(--corner-pixel) * 4) 0 0 currentColor,calc(var(--corner-pixel) * -2) calc(var(--corner-pixel) * -2) 0 currentColor,calc(var(--corner-pixel) * -3) calc(var(--corner-pixel) * -3) 0 currentColor,calc(var(--corner-pixel) * 2) calc(var(--corner-pixel) * -2) 0 currentColor,calc(var(--corner-pixel) * 3) calc(var(--corner-pixel) * -3) 0 currentColor,calc(var(--corner-pixel) * -2) calc(var(--corner-pixel) * 2) 0 currentColor,calc(var(--corner-pixel) * -3) calc(var(--corner-pixel) * 3) 0 currentColor,calc(var(--corner-pixel) * 2) calc(var(--corner-pixel) * 2) 0 currentColor,calc(var(--corner-pixel) * 3) calc(var(--corner-pixel) * 3) 0 currentColor,calc(var(--corner-pixel) * -1) calc(var(--corner-pixel) * -4) 0 currentColor,var(--corner-pixel) calc(var(--corner-pixel) * -4) 0 currentColor,calc(var(--corner-pixel) * -1) calc(var(--corner-pixel) * 4) 0 currentColor,var(--corner-pixel) calc(var(--corner-pixel) * 4) 0 currentColor,calc(var(--corner-pixel) * -4) calc(var(--corner-pixel) * -1) 0 currentColor,calc(var(--corner-pixel) * -4) var(--corner-pixel) 0 currentColor,calc(var(--corner-pixel) * 4) calc(var(--corner-pixel) * -1) 0 currentColor,calc(var(--corner-pixel) * 4) var(--corner-pixel) 0 currentColor}.text-box-corner:after{content:"";position:absolute;top:0;left:0;width:calc(var(--corner-pixel) * 3);height:calc(var(--corner-pixel) * 3);border:var(--corner-pixel) solid rgba(255,255,255,.8);background:#000000eb;transform:translate(-50%,-50%);box-sizing:border-box}.text-box-corner.top-left{top:0;left:0}.text-box-corner.top-right{top:0;right:0}.text-box-corner.bottom-left{bottom:0;left:0}.text-box-corner.bottom-right{right:0;bottom:0}.text-box.box-changing{box-shadow:0 16px 38px #00000061}.text-box.box-changing:before{opacity:.8}.text-box-content{position:relative;overflow-y:auto;overflow-x:hidden;padding:.5rem;text-align:left;font-size:clamp(1rem,1.5vmin,1.3rem);display:flex;flex-direction:column;min-height:0;scrollbar-width:none;-ms-overflow-style:none;transition:opacity .12s linear}.text-box-content::-webkit-scrollbar{display:none}.text-box-content.clearing{pointer-events:none}.text-box-content.clearing .typewriter-layer{opacity:0;transform:translateY(.65rem)}.text-box-content.typing-paused{pointer-events:none}.text-box.projects-active{max-height:95vh;width:70%}.text-box h1{font-size:clamp(1.5rem,3.5vmin,2.5rem);margin-top:.2;margin-bottom:.5rem}.text-box-nav{display:flex;justify-content:center;align-items:center;gap:1.1rem;flex-wrap:wrap}.text-box-nav a{color:#fff;text-decoration:none;font-weight:500;font-size:clamp(1rem,1.8vmin,1.3rem);cursor:pointer}.text-box-nav a:hover{color:#ff0;opacity:1}.text-box-nav a.active{opacity:1;color:#ff0;text-decoration:underline;text-underline-offset:4px}.typewriter-shell{display:grid;grid-template-columns:minmax(0,1fr);align-items:start;width:100%}.typewriter-shell>*{grid-area:1 / 1;min-width:0}.typewriter-reserve{opacity:0;pointer-events:none;-webkit-user-select:none;user-select:none}.typewriter-layer{position:relative;width:100%;transition:opacity .12s linear,transform .12s steps(2,end)}.typewriter-hidden-text{visibility:hidden;-webkit-user-select:none;user-select:none}.email .email-hover,.email:hover .email-default{display:none}.email:hover .email-hover{display:inline-block}.project-display{padding-top:0;display:flex;flex-direction:column;align-items:center;text-align:center;width:100%;flex-grow:.5}.project-display h3{font-size:clamp(1.2rem,1.5rem,1.5rem);color:#ff0}.project-image{display:block;width:auto;height:auto;max-width:min(100%,var(--project-image-max-width, 34rem));max-height:var(--project-image-max-height, 100vh);padding:.18rem;border-radius:4px;border:2px solid white;margin-bottom:.2rem}.project-display p{font-size:clamp(1rem,1.5vmin,1.3rem);line-height:1.2;max-width:100%;text-align:left}.project-display ul{text-align:left;max-width:90%;margin:0;padding-left:0;list-style:none}.project-display li{position:relative;padding-left:1.1em;margin-bottom:.5em;text-align:left}.project-display li:before{content:"*";position:absolute;left:0;top:0}.project-inline-link{color:#78aedc;text-decoration:underline;text-underline-offset:.14em;transition:color .2s}.project-inline-link:hover{color:#9ac7ea}.project-display>:not(.project-nav):last-child{margin-bottom:1rem}.project-nav{display:flex;justify-content:center;width:90%;margin-top:auto;border-top:2px solid rgba(255,255,255,.4);padding-top:1rem;gap:2rem;margin-bottom:0;align-items:center}.project-nav button{font-family:IBM Plex Mono,monospace;font-size:.9rem;font-weight:700;color:#fff;background:none;border:none;padding:.5rem;cursor:pointer;transition:color .2s}.project-nav button:hover{color:#ff0}.project-nav button:disabled{color:#777;cursor:not-allowed}.project-nav button:disabled:hover{color:#777}.project-native-select{font-family:IBM Plex Mono,monospace;font-size:.9rem;font-weight:700;color:#fff;background-color:#333;border:2px solid white;border-radius:4px;padding:.4rem;cursor:pointer;text-align:center;max-width:150px;text-overflow:ellipsis}.project-native-select:hover{border-color:#ff0}.project-native-select option{font-weight:500;background-color:#000}.layers{position:fixed;inset:0;z-index:-1}.static-background{position:absolute;inset:0;background-image:url(/background.png);background-size:cover;background-position:center;z-index:1}.particle{position:absolute;inset:0;background-image:url(/background.png);background-size:cover;background-position:center;z-index:2;opacity:0;transform:scale(1);animation:particle-expand 18s infinite linear}@keyframes particle-expand{0%{transform:scale(1);opacity:0}50%{transform:scale(1.4);opacity:.7}to{transform:scale(1.8);opacity:0}}@media(max-width:1120px){.email{flex-basis:100%}.text-box{max-height:85vh;display:flex;flex-direction:column}.text-box-content{overflow-y:auto;min-height:0}}@media(max-width:700px){.text-box{--corner-pixel: 1.5px;background-color:#000000a8;width:90vw;max-width:95vw;max-height:90vh;padding:0;margin:0;display:flex;flex-direction:column}.text-box:before{inset:8px}.text-box.projects-active{width:90vw;height:90svh;max-width:90vw;max-height:90svh;padding:0;margin:0;display:flex;flex-direction:column}.text-box-content{flex-grow:1;overflow-y:auto;min-height:0;padding:1rem;font-size:.8rem;line-height:1.3}.text-box h1{font-size:1.2rem;margin-top:1rem;margin-bottom:.5rem}.text-box-nav{gap:.9rem;padding:0 1rem;margin-bottom:0}.text-box-nav a{font-size:.9rem}.project-display{padding-top:0;margin:-1rem;padding:.5rem}.project-display h3{font-size:1.1rem}.project-display p{font-size:.8rem;line-height:1.3;max-width:100%}.project-image{max-width:min(90%,var(--project-image-max-width, 34rem));max-height:min(25svh,var(--project-image-max-height, 100vh))}.project-nav{gap:.2rem}.project-nav button,.project-native-select{font-size:.7rem;padding:.4rem;max-width:120px}}#root{max-width:1280px;margin:0 auto;padding:2rem;text-align:center}.logo{height:6em;padding:1.5em;will-change:filter;transition:filter .3s}.logo:hover{filter:drop-shadow(0 0 2em #646cffaa)}.logo.react:hover{filter:drop-shadow(0 0 2em #61dafbaa)}@keyframes logo-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media(prefers-reduced-motion:no-preference){a:nth-of-type(2) .logo{animation:logo-spin infinite 20s linear}}.card{padding:2em}.read-the-docs{color:#888}html{overflow:hidden;font-size:110%}html,body,#root{margin:0 padding: 0 width: 100vw;height:100%;overflow:hidden}body{background-color:#000;color:white font-family: "IBM Plex Mono",monospace}
