@font-face{font-family:Horizon;src:url(/EchoHorizonModern-nADZg.ttf)}html,body{margin:0;padding:0;height:100%;background:#000;overflow-x:hidden;overflow-y:auto;scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.5) transparent}p,a{margin:0}#stars{opacity:0;transition:opacity 2s ease}#main{display:flex;flex-direction:column;height:100vh;height:100dvh}body:before{content:"";position:fixed;top:-50%;left:-50%;width:200%;height:200%;background:linear-gradient(135deg,#e74545,#772c71,#331972,#1c83a0);background-size:400% 400%;animation:gradientMove 20s ease infinite;opacity:.8}@keyframes gradientMove{0%{transform:translate(0)}50%{transform:translate(-20%,-20%)}to{transform:translate(0)}}canvas{position:fixed;top:0;left:0;width:100%;height:100%}#top{margin-left:5%;margin-top:20px;background-color:#0000004d;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);border-bottom:3px solid rgba(255,255,255,.3);border-right:3px solid rgba(255,255,255,.3);width:90%;height:100px;display:flex;box-shadow:10px 10px 30px #00000070;border-radius:10px;transform:scaleX(0) scaleY(.3) translateY(5%);transform-origin:left;transition:transform 1.3s ease-in-out}@keyframes navbarGlow{0%{box-shadow:0 0 #fff0}60%{box-shadow:0 0 20px #ffffffb3,0 0 40px #00c8ff66}80%{box-shadow:-10px -10px 20px #e0bc1899,0 0 20px #ffffffb3,0 0 40px #00c8ff66}to{box-shadow:10px 10px 30px #0006}}@keyframes navbarGlow-reverse{0%{box-shadow:0 0 #fff0}30%{box-shadow:-10px -10px 20px #e0bc1899,0 0 20px #ffffffb3,0 0 40px #00c8ff66}60%{box-shadow:0 0 20px #ffffffb3,0 0 40px #00c8ff66}to{box-shadow:10px 10px 30px #0006}}#top.show{transform:scaleX(1) scaleY(1);opacity:1}#top.show.animation{animation:navbarGlow 1.2s ease-out}#top.hide{transform:scaleX(0) scaleY(.3) translateY(5%)}#top.hide.animation{animation:navbarGlow-reverse 1.2s ease-in}.nav-container{flex:4;display:flex;margin:15px 20px 20px;justify-content:center}.contact-container{flex:2;display:flex;margin:15px 30px 20px 0;justify-content:right}.elevated-button{background-color:#ffffff3a;color:#fff;height:50px;border:none;margin:10px 30px;font-size:2.6em;font-family:Horizon;border-radius:8px;cursor:pointer;box-shadow:0 4px 10px #0000004d;transition:transform .2s ease,box-shadow .2s ease;position:relative;z-index:1;flex:1}.elevated-button>p{position:relative;top:2px;right:2px;flex:1}.elevated-button:hover{transform:translateY(-4px);box-shadow:0 8px 20px #0006;animation:button-glow .5s infinite}@keyframes button-glow{0%{box-shadow:0 0 20px #ffffffb3,0 0 30px #00c8ff66}15%{box-shadow:0 0 20px #ffffffb3,0 0 30px 10px #00c8ff66}50%{box-shadow:0 0 20px #ffffffb3,0 0 40px 20px #00c8ff80}85%{box-shadow:0 0 20px #ffffffb3,0 0 30px 10px #00c8ff66}to{box-shadow:0 0 20px #ffffffb3,0 0 30px #00c8ff66}}.logo{background-color:#ffffff3a;border:none;border-radius:8px;height:50px;width:50px;flex:0 0 auto;margin:10px 20px;cursor:pointer;position:relative;padding:0;display:flex;justify-content:center;align-items:center}.icon{color:#fff;font-size:100px;margin:0}.nav-toggle{display:none}.options-group{flex:0 0 auto;display:flex;gap:10px;align-items:center;margin:15px 30px 20px 4px;padding-left:18px;border-left:2px solid rgba(255,255,255,.2)}.option-btn{background-color:#ffffff3a;border:2px solid rgba(255,255,255,.35);border-radius:50%;width:38px;height:38px;padding:0;display:flex;justify-content:center;align-items:center;color:#ffffff80;cursor:pointer;box-shadow:0 4px 10px #0000004d;transition:color .2s ease,border-color .2s ease,transform .2s ease,box-shadow .2s ease}.option-btn svg{width:18px;height:18px}@media(hover:hover)and (pointer:fine){.option-btn:hover{border-color:#ffffffb3;color:#fffc;transform:translateY(-4px);box-shadow:0 8px 20px #0006;animation:button-glow .5s infinite}}.option-btn.is-on{color:#fff;border-color:#00c8ffe6}#name{color:#fff;font-size:7rem;position:absolute;text-align:right;right:-100%;bottom:10%;padding:0}#name h3{margin:0 0 0 20px;font-family:Horizon;text-align:right}#name p{font-size:1.2rem;font-family:Courier New,Courier,monospace}#name.name-anim{right:10%;animation:float-in 2s ease-out forwards,hover 3s ease-in-out infinite}#name.name-fly-in{right:10%;animation:float-in 2s ease-out forwards}#name.name-static{right:10%}#name.name-hover{right:10%;animation:hover 3s ease-in-out infinite}@keyframes float-in{0%{right:-50%;bottom:10%}to{right:10%;bottom:10%}}@keyframes hover{0%{transform:translateY(0)}50%{transform:translateY(-10%)}to{transform:translateY(0)}}@keyframes nav-title-hover{0%{transform:translate(-50%,-50%) translateY(0)}50%{transform:translate(-50%,-50%) translateY(-10%)}to{transform:translate(-50%,-50%) translateY(0)}}.page-header{font-family:Horizon;color:#fff;font-size:4rem;text-align:center;position:relative;margin:0;padding:0;animation:hover 3s ease-in-out infinite}.page-header h3{margin:30px 0 0}.body-container{padding-top:20px;margin-left:5%;margin-right:5%}.text-container{padding:20px;background-color:#0000004d;color:#fff;font-size:1.5rem;font-family:Courier New,Courier,monospace;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);border-bottom:3px solid rgba(255,255,255,.3);border-right:3px solid rgba(255,255,255,.3);box-shadow:10px 10px 30px #00000070;border-radius:10px}.skills-container{padding:20px;background-color:#0000004d;color:#fff;font-size:1.3rem;font-family:Courier New,Courier,monospace;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);border-bottom:3px solid rgba(255,255,255,.3);border-right:3px solid rgba(255,255,255,.3);box-shadow:10px 10px 30px #00000070;border-radius:10px;display:flex;flex-direction:row;flex-wrap:wrap;align-content:flex-start;justify-content:center;gap:10px;max-width:1000px}.content-container{display:grid;margin-bottom:20px;grid-template-columns:repeat(3,auto);justify-content:center;gap:20px}.img-container{margin-right:20px;background-color:#0000004d;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);border-bottom:3px solid rgba(255,255,255,.3);border-right:3px solid rgba(255,255,255,.3);box-shadow:10px 10px 30px #00000070;border-radius:10px;width:300px;min-width:300px;max-height:400px;height:auto}.img-container img{object-fit:contain;align-self:flex-end;width:100%;height:100%}.spotify-container{margin-left:20px;flex:1;background-color:#0000004d;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);border-bottom:3px solid rgba(255,255,255,.3);border-right:3px solid rgba(255,255,255,.3);box-shadow:10px 10px 30px #00000070;border-radius:10px;display:block;text-wrap:wrap;max-width:300px;max-height:400px;height:auto}.now-playing{color:#fff;display:flex;flex-direction:column;font-family:Horizon;text-wrap:wrap;overflow:hidden}.spotify-image{filter:brightness(100%);transition:filter .3s}.spotify-image:hover{filter:brightness(50%)}.now-playing h1{text-align:center;margin:20px 0 0}.now-playing a{margin:0;width:60%;height:60%}.now-playing img{margin:0;border-radius:10px;box-shadow:10px 10px 30px #00000070;width:100%;height:100%}.now-playing p{margin:10px 20px;font-family:Courier New,Courier,monospace}.skill{background-color:#ffffff3a;border-radius:50px;max-height:30px;padding:10px;display:flex;justify-content:center;align-items:center;gap:10px}.skill-badge{background:linear-gradient(135deg,#e74545,#772c71,#331972,#1c83a0);border-radius:50%;flex:1;height:20px;width:20px}.resume-link{text-decoration:none;color:#fff;transition:text-decoration 3s ease-in}.resume-link-underline{background-color:#fff;height:2px;width:375px;border-radius:20px;transform:scaleX(0);transform-origin:bottom left;transition:transform .3s ease}.resume-link:hover~.resume-link-underline{transform:scaleX(1)}.projects-container{position:relative;padding-left:5%;padding-right:5%;display:flex;min-width:90%;padding-top:20px}.description-container{display:flex;flex-direction:column;justify-content:space-between;position:relative;flex-basis:60%;padding:20px;background-color:#0000004d;color:#fff;font-size:1.5rem;font-family:Courier New,Courier,monospace;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);border-bottom:3px solid rgba(255,255,255,.3);border-right:3px solid rgba(255,255,255,.3);box-shadow:10px 10px 30px #00000070;border-radius:10px;min-height:350px;max-height:600px;overflow-y:auto;scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.5) transparent;margin-bottom:20px;transition:opacity 1s ease}.project-list-container{flex:1;display:flex;flex-direction:column;margin-left:2.5%}.project-container{flex:1;margin-bottom:20px;display:flex;align-items:center;padding-left:20px;padding-right:20px;background-color:#0000004d;color:#fff;font-size:1.7rem;font-family:Courier New,Courier,monospace;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);border-bottom:3px solid rgba(255,255,255,.3);border-right:3px solid rgba(255,255,255,.3);box-shadow:10px 10px 30px #00000070;border-radius:10px;overflow:hidden;transition:transform .2s ease;min-height:80px;max-height:80px}.project-img{float:right;width:200px;height:200px;margin:10px;border-radius:50%}.project-container>p{font-weight:700;justify-self:center;margin-top:5px}.project-container:hover{transform:translateY(-3px);box-shadow:0 8px 20px #0006;animation:project-glow .5s infinite}.project-actions-container{display:flex;gap:30px;flex-direction:row;justify-content:right}.project-action{background-color:#0000004d;color:#fff;text-decoration:none;font-size:1.5rem;font-family:Courier New,Courier,monospace;padding:10px;border-bottom:3px solid rgba(255,255,255,.3);border-right:3px solid rgba(255,255,255,.3);box-shadow:10px 10px 30px #00000070;border-radius:10px;overflow:hidden;transition:transform .2s ease}.project-action:hover{transform:translateY(-3px);box-shadow:0 8px 20px #0006;animation:project-glow .5s infinite}@keyframes project-glow{0%{box-shadow:0 0 10px #ffffffb3,0 0 15px #00c8ff66}15%{box-shadow:0 0 10px #ffffffb3,0 0 15px 5px #00c8ff66}50%{box-shadow:0 0 10px #ffffffb3,0 0 20px 10px #00c8ff80}85%{box-shadow:0 0 10px #ffffffb3,0 0 15px 5px #00c8ff66}to{box-shadow:0 0 10px #ffffffb3,0 0 15px #00c8ff66}}.footer{position:relative;margin-top:40px;width:100%;text-align:center;color:#fff;font-family:Courier New,Courier,monospace}@media(max-width:1600px){.project-container{font-size:1.2rem}}@media(max-width:1200px){body{overflow-y:auto}.content-container{align-items:stretch;grid-template-columns:repeat(2,auto);grid-template-areas:"one three" "two two"}.img-container,.spotify-container{float:none;height:auto;width:auto;max-width:none;min-width:0;margin:0;max-width:300px;min-height:330px}.img-container{grid-area:one;justify-self:end;margin-left:20px}.skills-container{grid-area:two;margin-left:20px;margin-right:20px}.skill{font-size:20px}.spotify-container{grid-area:three;justify-self:"start";margin-right:20px;height:fit-content}.now-playing h1{font-size:1.5rem}.img-container img{object-fit:contain;width:100%}.text-container{clear:both;margin:20px;height:auto;max-height:none}.resume-link:hover{transition:none}.resume-link-underline{opacity:0}.body-container{position:relative;margin-left:0;width:100%}}@media(max-width:1050px){#top{height:auto;flex-direction:column;margin-left:5%;margin-right:5%;position:relative}.nav-toggle{display:flex;align-items:center;position:relative;margin:10px 16px}.nav-page-title{display:block;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);animation:nav-title-hover 3s ease-in-out infinite;margin:0;line-height:1;color:#fff;font-family:Horizon;font-size:2rem}.page-header{display:none}#top:not(.nav-expanded) .nav-container,#top:not(.nav-expanded) .contact-container{display:none}#top:not(.nav-expanded){background:none;-webkit-backdrop-filter:none;backdrop-filter:none;border:none;box-shadow:none}.elevated-button{font-size:1.4rem;height:44px;max-width:150px;margin-right:20px;margin-left:20px;padding:0}.nav-container,.contact-container{flex:none;justify-content:center;margin:5px 0;flex-wrap:wrap}.contact-container{margin-top:0}.options-group{position:absolute;top:10px;right:16px;margin:0;padding-left:0;border-left:none}.logo{padding:0;margin:6px;width:36px;height:36px}.option-btn{width:32px;height:32px}.option-btn svg{width:16px;height:16px}}@media(max-width:768px){body{overflow-y:auto}canvas{position:fixed}#name{right:-200%;text-align:right;margin:0;width:90%}#name h3{font-size:4rem;margin:0}#name p{margin-left:25%}#name.name-anim{right:10%;animation:float-in 2s ease-out forwards,hover 3s ease-in-out infinite}#name.name-fly-in{right:10%;animation:float-in 2s ease-out forwards}#name.name-static{right:10%}#name.name-hover{right:10%;animation:hover 3s ease-in-out infinite}@keyframes float-in{0%{right:-100%;bottom:10%}to{right:10%;bottom:10%}}.description-container{overflow-y:auto;min-height:0;margin-left:5%;margin-right:5%}.description-container h2{font-size:1.5rem}.description-container p{font-size:.9rem}.project-img{width:100px;height:100px}.project-action{font-size:1rem;padding:6px}.img-container,.spotify-container{max-width:200px;min-height:225px}.text-container{font-size:15px}.now-playing{color:#fff;display:flex;flex-direction:column;font-family:Horizon;text-wrap:wrap;overflow:hidden}.now-playing h1{font-size:1rem}.now-playing a{width:60%;height:60%}.now-playing p{margin-left:10%;margin-top:0;font-size:.7rem}.skill{font-size:15px;padding:5px 10px 5px 5px}.skill-badge{height:10px;width:10px}.projects-container{flex-direction:column;padding:0;margin-top:15px}.project-list-container{margin-left:0;margin-top:0}.project-container{font-size:1.2rem;margin-left:5%;margin-right:5%;min-height:80px}.footer{position:relative;margin-top:40px}.elevated-button:hover,.project-container:hover{transform:none;animation:none;box-shadow:0 4px 10px #0000004d}.spotify-image:hover{filter:none}}@media(max-width:620px){.now-playing a{width:50%;height:50%}.img-container,.spotify-container{max-width:150px;min-height:175px}.now-playing p{font-size:.5rem}.skill{font-size:.8rem}}@media(max-width:400px){.now-playing a{width:40%;height:40%}.now-playing p{font-size:.5rem}}.marquee-container{width:260px;height:40px;margin:0 20px;overflow:hidden;white-space:nowrap;position:relative}.marquee-content{display:inline-flex;gap:2rem}.marquee-content span{display:inline-block}.scroll{animation:marquee 10s linear infinite}.scroll:hover{animation-play-state:paused}@keyframes marquee{0%{transform:translate(0)}to{transform:translate(-55%)}}@media(max-width:768px){.marquee-container{width:80%;height:40px;margin:0 10%;overflow:hidden;white-space:nowrap;position:relative;font-size:.8rem}}@media(max-width:500px){.marquee-container{width:70%;height:30px;font-size:.6rem}}:root{--twin-color-bg-overlay: rgba(0, 0, 0, .8);--twin-color-border: rgba(255, 255, 255, .3);--twin-color-shadow: rgba(0, 0, 0, .438);--twin-color-text: #ffffff;--twin-color-text-muted: grey;--twin-color-surface: rgb(39, 5, 65);--twin-color-accent: rgb(123, 34, 240);--twin-color-accent-hover: rgb(158, 100, 235);--twin-color-accent-soft: rgb(197, 145, 236);--twin-color-accent-soft-50: rgba(197, 145, 236, .5);--twin-color-focus-border: rgb(219, 215, 238);--twin-color-focus-ring: rgb(243, 243, 243);--twin-font-family: "Courier New", Courier, monospace;--twin-font-size-base: 1.5rem;--twin-font-size-sm: 1rem;--twin-content-width: 760px;--twin-radius-container: 10px;--twin-radius-composer: 8px;--twin-radius-bubble: 20px;--twin-msg-max-width: 500px;--twin-icon-size: 40px}.twin-page{display:flex;flex-grow:1;flex-direction:column;align-items:center;height:100%;min-height:0}.container{display:flex;flex-direction:column;justify-self:center;margin-top:10px;min-height:0;gap:20px;width:95%;flex-grow:1;position:relative;background-color:var(--twin-color-bg-overlay);color:var(--twin-color-text);font-size:var(--twin-font-size-base);font-family:var(--twin-font-family);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);border-bottom:3px solid var(--twin-color-border);border-right:3px solid var(--twin-color-border);box-shadow:10px 10px 30px var(--twin-color-shadow);border-radius:var(--twin-radius-container);overflow:hidden}.convo-container{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;scrollbar-gutter:stable}.convo-inner{display:flex;flex-direction:column;gap:10px;width:100%;max-width:var(--twin-content-width);margin:10px auto 0;flex-shrink:0;padding:0 12px;box-sizing:border-box}.composer-container{display:flex;flex-direction:column;padding:5px;gap:10px;justify-content:flex-end;align-items:center;min-height:120px;flex-shrink:0;z-index:1}.composer{background:var(--twin-color-surface);display:flex;flex-direction:row;align-items:flex-end;width:100%;max-width:var(--twin-content-width);gap:5px;padding:20px;border-radius:var(--twin-radius-composer);border:3px solid var(--twin-color-accent);box-sizing:border-box;transition:border-color .2s ease-in-out,box-shadow .2s ease-in-out}.composer.is-disabled,.composer.is-disabled textarea,.composer.is-disabled .btn-send{opacity:.6;cursor:not-allowed;pointer-events:none}.composer:focus-within{outline:none;border-color:var(--twin-color-focus-border);box-shadow:0 0 0 2px var(--twin-color-focus-ring)}#composer-input{flex:1;background:none;border:none;resize:none;color:var(--twin-color-text);font-family:inherit;font-size:var(--twin-font-size-base);min-height:1.5em;max-height:200px;overflow-y:auto;line-height:1.5;-webkit-appearance:none;appearance:none}#composer-input::placeholder{color:var(--twin-color-text)}#composer-input:focus{outline:none;box-shadow:none}.btn-send{display:flex;align-items:center;justify-content:center;justify-self:flex-end;width:40px;height:40px;background:var(--twin-color-accent);color:var(--twin-color-text);border:none;border-radius:30%;flex-shrink:0;cursor:pointer;-webkit-appearance:none;appearance:none;-webkit-tap-highlight-color:transparent;transition:background-color .2s ease-in-out}.btn-send:hover{background-color:var(--twin-color-accent-hover)}.composer-text{flex:0 0 20px;font-size:var(--twin-font-size-sm);color:var(--twin-color-text);text-align:center}.key{border:1px solid var(--twin-color-accent);background-color:var(--twin-color-surface);padding:2px;border-radius:4px}.msg{display:flex;flex-direction:row;gap:10px}.msg--twin{justify-content:flex-start}.msg--user{justify-content:flex-end}.msg-body{display:flex;flex-direction:column;gap:5px;max-width:min(var(--twin-msg-max-width),80%)}.msg--user .msg-body{align-items:flex-end}.msg--twin .msg-body{align-items:flex-start}.msg-bubble{background:var(--twin-color-surface);padding:20px;border-radius:var(--twin-radius-bubble);overflow-wrap:break-word;min-width:0}.msg-bubble pre{overflow-x:auto;max-width:100%}.msg-bubble code{overflow-wrap:break-word}.msg--twin .msg-bubble{border-bottom-left-radius:0}.msg--user .msg-bubble{border-bottom-right-radius:0}.msg--twin .metadata{margin-left:10px}.msg--user .metadata{margin-right:10px;display:flex;justify-content:flex-end}.role-name{font-size:var(--twin-font-size-sm);color:var(--twin-color-accent-soft)}.timestamp{font-size:var(--twin-font-size-sm);color:var(--twin-color-text-muted)}.role-icon{border-radius:50%;height:var(--twin-icon-size);width:var(--twin-icon-size);background-color:var(--twin-color-accent-soft-50);flex-shrink:0;display:flex;justify-content:center;align-items:center}.role-icon img{object-fit:contain;width:100%;height:100%;border-radius:50%}.typing-indicator{display:flex;align-items:center;gap:10px;height:30px;margin-left:10px}.typing-indicator span{width:10px;height:10px;background-color:var(--twin-color-accent-soft-50);border-radius:50%;animation:typing 1.4s infinite ease-in-out}.typing-indicator span:nth-child(1){animation-delay:0s}.typing-indicator span:nth-child(2){animation-delay:.2s}.typing-indicator span:nth-child(3){animation-delay:.4s}@keyframes typing{0%,60%,to{transform:translateY(0);opacity:.4}30%{transform:translateY(-4px);opacity:1}}@media(max-width:768px){.container{width:96%;font-size:1.15rem;border-radius:8px}.convo-inner{padding:0 8px}.composer{padding:14px;gap:4px}#composer-input{font-size:1.15rem}.msg-body{max-width:88%}.msg-bubble{padding:14px}.composer-text{font-size:.8rem}}@media(max-width:480px){.container{gap:10px}.composer-container{min-height:90px;padding:4px}.composer{padding:10px;border-width:2px}#composer-input{font-size:1rem}.msg-body{max-width:92%}.msg-bubble{padding:10px;border-radius:14px}:root{--twin-icon-size: 32px}.composer-text{font-size:.72rem}}.intro-text{text-align:center;color:#fff;font-size:7rem;font-family:Horizon;transition:opacity .5s ease,transform 1.2s ease}.start{opacity:0;transform:scale(.8)}.show{opacity:1;transform:scale(1)}.explode{opacity:0;transform:scale(6)}
