.app-container{min-height:100vh;display:flex;flex-direction:column;position:relative;background-color:var(--paper);box-shadow:0 0 0 1px rgba(var(--grid-ink),.12),0 6px 40px #00000012}.app-container:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;pointer-events:none;background-image:linear-gradient(to right,var(--grid-minor) 1px,transparent 1px),linear-gradient(to bottom,var(--grid-minor) 1px,transparent 1px),linear-gradient(to right,var(--grid-major) 1px,transparent 1px),linear-gradient(to bottom,var(--grid-major) 1px,transparent 1px);background-size:var(--cell) var(--cell),var(--cell) var(--cell),var(--major) var(--major),var(--major) var(--major);background-position:0 0;will-change:transform}.app-container:after{content:"";position:absolute;top:0;bottom:0;left:calc(var(--cell) * 3);width:8px;pointer-events:none;z-index:0;background-image:linear-gradient(90deg,var(--margin-red),var(--margin-red)),linear-gradient(90deg,var(--margin-red),var(--margin-red));background-size:2px 100%,2px 100%;background-position:0 0,6px 0;background-repeat:no-repeat;opacity:.5}.navbar,.main-content,.footer{position:relative;z-index:1}@media (max-width: 600px){.app-container:after{display:none}}main{flex:1}.main-content{padding-left:var(--writing-inset);padding-right:var(--space-1);box-sizing:border-box}.footer{text-align:left;padding:var(--baseline-nudge) 0 var(--space-2) var(--writing-inset);margin-top:auto;background:var(--paper)}.footer>div{display:block;font-family:inherit;font-size:1rem;line-height:var(--line);letter-spacing:.02em;color:rgba(var(--grid-ink),.75)}.container{width:100%;max-width:1200px;margin:0 auto;padding:10px;box-sizing:border-box}.gallery{width:100%}nav{display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start;min-height:calc(var(--cell) * 6);padding-top:var(--space-1);padding-left:var(--writing-inset);box-sizing:border-box;background-color:transparent;animation:fadeInNav 1.2s ease;position:relative;z-index:1000;pointer-events:auto}@keyframes fadeInNav{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.logo-container{margin-bottom:var(--space-1);position:relative;z-index:1001;height:var(--space-2);display:flex;align-items:center}.logo{height:var(--space-2);width:auto;display:block;transition:filter 1.2s ease-out}.logo:hover{filter:drop-shadow(0 2px 8px rgba(0,255,228,.3))}.nav-links{display:flex;justify-content:flex-start;width:100%;position:relative;z-index:1001}.nav-links ul{list-style-type:none;padding:0;margin:0;display:flex;width:auto;flex-wrap:wrap;justify-content:flex-start;gap:var(--space-1)}.nav-links li{flex:0 0 auto;text-align:center}.nav-links a{text-decoration:none;color:#000;height:var(--control-h);line-height:calc(var(--control-h) - 2px);padding:0 var(--space-1);display:block;border-radius:0;border:1px solid black;transition:all .6s ease;box-sizing:border-box;white-space:nowrap;position:relative;overflow:hidden;background-color:transparent}.nav-links a:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;transition:left .8s ease}.nav-links a:hover{color:#000;border-color:#000;transform:translateY(-1px)}.nav-links a:hover:before{left:100%}.nav-links li:nth-child(1) a:before{background:linear-gradient(90deg,#ff700000,#ff7000,#ff700000)}.nav-links li:nth-child(1) a:hover{background-color:#ff7000;box-shadow:0 2px 8px #ff70004d}.nav-links li:nth-child(2) a:before{background:linear-gradient(90deg,#ffe10000,#ffe100,#ffe10000)}.nav-links li:nth-child(2) a:hover{background-color:#ffe100;box-shadow:0 2px 8px #ffe1004d}.nav-links li:nth-child(3) a:before{background:linear-gradient(90deg,#00ffe400,#00ffe4,#00ffe400)}.nav-links li:nth-child(3) a:hover{background-color:#00ffe4;box-shadow:0 2px 8px #00ffe44d}.nav-links li:nth-child(4) a:before{background:linear-gradient(90deg,#ff090000,#ff0900,#ff090000)}.nav-links li:nth-child(4) a:hover{background-color:#ff0900;box-shadow:0 2px 8px #ff09004d}.nav-links a:focus{outline:none}@media (max-width: 768px){nav{padding-top:var(--space-1);padding-left:var(--writing-inset);background-color:transparent}.nav-links ul{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:flex-start;gap:var(--space-1);width:100%;padding:0}.nav-links li{flex:0 0 auto;margin:0}.nav-links a{white-space:nowrap}}.list ul{list-style-type:none;padding:0;margin:0}.list ul li{margin:8px 0}.list ul li a{text-decoration:none;color:#ff7000;padding:8px 16px;display:block;border-radius:0;transition:background-color .3s}.list ul li a:hover{background-color:#f0f0f0}.logo{will-change:filter;transition:filter .3s}.logo:hover{filter:drop-shadow(0 0 2em rgb(0,234,255))}.card{padding:2em}.project-page-transition{animation:fadeIn .8s ease;padding-top:var(--baseline-nudge)}.projects-container{max-width:1400px;margin:0 auto;padding:var(--space-2) 0;animation:fadeIn .8s ease}.category-filter-bar{display:flex;flex-wrap:wrap;justify-content:flex-start;gap:var(--space-1);margin-bottom:var(--space-2)}.desktop-filter{display:flex!important}.mobile-filter{display:none!important}.category-filter-button{height:var(--control-h);line-height:calc(var(--control-h) - 2px);padding:0 var(--space-1);border:1px solid black;background-color:transparent;color:#000;cursor:pointer;border-radius:0;transition:all .6s ease;font-size:1rem;font-family:inherit;font-weight:400;white-space:nowrap;outline:none;box-sizing:border-box;position:relative;overflow:hidden}.category-filter-button:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,#ff700000,#ff7000,#ff700000);transition:left .8s ease}.category-filter-button:hover{background-color:#ff7000;border-color:#000;transform:translateY(-1px);box-shadow:0 2px 8px #ff70004d}.category-filter-button:hover:before{left:100%}.category-filter-button.active{background-color:#ff7000;border-color:#000;color:#000;box-shadow:0 2px 8px #ff70004d}.category-filter-button:focus{outline:none}.category-filter-button:active{transform:translateY(0)}.sort-control{display:inline-flex;align-items:center;gap:var(--space-1)}.sort-button{height:var(--control-h);line-height:calc(var(--control-h) - 2px);padding:0 var(--space-1);border:1px solid black;background-color:transparent;color:#000;cursor:pointer;border-radius:calc(var(--control-h) / 2);transition:all .6s ease;font-size:1rem;font-family:inherit;font-weight:400;white-space:nowrap;outline:none;box-sizing:border-box;position:relative;overflow:hidden}.sort-button:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,#00ffe400,#00ffe4,#00ffe400);transition:left .8s ease}.sort-button:hover{background-color:#00ffe4;border-color:#000;transform:translateY(-1px);box-shadow:0 2px 8px #00ffe459}.sort-button:hover:before{left:100%}.sort-button.active{background-color:#00ffe4;border-color:#000;color:#000;box-shadow:0 2px 8px #00ffe459}.sort-button:focus{outline:none}.sort-button:active{transform:translateY(0)}.sort-select{height:var(--control-h);padding:0 var(--space-2) 0 var(--space-1);border:1px solid black;background-color:transparent;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23000000' d='M6 9L1 4h10z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right var(--space-0-5) center;color:#000;cursor:pointer;border-radius:0;font-size:1rem;font-family:inherit;font-weight:400;text-align:left;outline:none;transition:all .6s ease;-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box}.sort-select:hover,.sort-select:focus{background-color:#00ffe4;border-color:#000;transform:translateY(-1px);box-shadow:0 2px 8px #00ffe459}.sort-select:active{transform:translateY(0)}.mobile-filter-row{display:flex;align-items:center;gap:var(--space-0-5);min-height:var(--control-h)}.category-filter-dropdown{display:flex;flex-direction:column;align-items:flex-start;gap:var(--space-1);margin-bottom:var(--space-2);padding:0}.category-select{height:var(--control-h);padding:0 var(--space-2) 0 var(--space-1);border:1px solid black;background-color:transparent;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23000000' d='M6 9L1 4h10z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center;color:#000;cursor:pointer;border-radius:0;font-size:1rem;font-family:inherit;font-weight:400;text-align:left;outline:none;transition:all .6s ease;min-width:220px;-webkit-appearance:none;-moz-appearance:none;appearance:none;position:relative;box-sizing:border-box}.category-select:hover{background-color:#ffe100;border-color:#000;transform:translateY(-1px);box-shadow:0 2px 8px #ffe1004d;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23000000' d='M6 9L1 4h10z'/%3E%3C/svg%3E")}.category-select:focus{outline:none;background-color:#ffe100;border-color:#000;box-shadow:0 2px 8px #ffe1004d;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23000000' d='M6 9L1 4h10z'/%3E%3C/svg%3E")}.category-select:active{transform:translateY(0)}@media (max-width: 768px){.desktop-filter{display:none!important}.mobile-filter{display:flex!important}.category-select{min-width:180px;padding:0 var(--space-2) 0 var(--space-1);background-position:right var(--space-0-5) center}}@media (max-width: 480px){.category-select{width:100%;max-width:280px}}.category-section{margin-bottom:var(--space-1);text-align:left;animation:fadeIn .8s ease}.category-title{display:block;font-size:1rem;font-weight:700;line-height:var(--cell);text-align:left;padding-top:var(--baseline-nudge);margin:0 0 var(--baseline-offset);color:#000}.category-title:before{content:"";display:inline-block;width:12px;height:12px;margin-right:var(--space-0-5);vertical-align:baseline;background:var(--brand-cyan);border:1px solid black}.project-caption{box-sizing:border-box;padding:var(--baseline-nudge) var(--space-0-25) var(--baseline-offset)}.project-year{text-align:center;font-size:1rem;line-height:var(--line);color:#000;margin:0}.projects-grid{display:grid;grid-template-columns:repeat(auto-fill,192px);gap:var(--space-1);justify-content:start;width:100%}.year-section{margin-bottom:var(--space-1)}.year-section-grid{display:grid;grid-template-columns:repeat(auto-fit,192px);gap:var(--space-1);justify-content:start}.year-card{cursor:pointer;transition:all .6s ease;display:flex;justify-content:center;align-items:center;height:100%;width:100%;background:transparent;border-radius:0;border:1px solid black}.year-card:hover{background:#ff7000;border-color:#000;transform:translateY(-2px);box-shadow:0 4px 12px #ff70004d}.year-title{font-size:2rem;font-weight:400;text-align:center;justify-content:center}.year-subtitle{font-size:1rem;margin:0}.year-section-year-card{cursor:pointer;transition:opacity .3s ease}.year-section-image-container{background:transparent;display:flex;justify-content:center;align-items:center;position:relative}.year-section-title{font-size:1rem;font-weight:400;margin:0}.year-section-close{position:absolute;top:10px;right:10px;font-size:1.2rem}.project-item{transition:opacity .3s ease}.project-card{position:relative;width:100%;max-width:192px;overflow:hidden;border-radius:0;background:transparent;transition:all .6s ease}.project-card:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border:1px solid black;pointer-events:none;z-index:2}.project-card:hover{background:var(--brand-yellow);transform:translateY(-2px);box-shadow:0 4px 12px #ffe1004d}.project-link{text-decoration:none}.project-image-container{width:192px;height:120px;overflow:hidden}.project-image{width:100%;height:100%;object-fit:cover;transition:all .6s ease;transform:rotate(var(--rotation, 0deg))}.project-card:hover .project-image{transform:rotate(var(--rotation, 0deg)) scale(1.05)}.project-image-placeholder{width:100%;height:100%;display:flex;align-items:center;justify-content:center;background:transparent;font-family:var(--font-mono);font-size:.85rem;color:#000;padding:0 12px;box-sizing:border-box;text-align:center;letter-spacing:.02em}.project-title{text-align:center;margin:0;line-height:var(--line);font-style:normal;font-weight:400;font-size:1rem;color:#000;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.image-display-container{display:flex;justify-content:center;align-items:center;padding:1rem;box-sizing:border-box;max-width:100%;overflow:hidden}.image-display{max-width:90%;max-height:90vh;object-fit:contain}.gallery-container{padding:0;margin:calc(-1 * var(--baseline-nudge)) 0 calc(var(--space-1) + var(--baseline-nudge))}.gallery-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));grid-auto-rows:calc(var(--cell) * 8);gap:var(--space-1)}.gallery-item{position:relative}.gallery-item.tall{grid-row:span 2}.gallery-image{width:100%;height:100%;object-fit:cover;cursor:pointer;position:absolute;top:0;left:0}.lightbox-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:var(--paper);background-image:linear-gradient(to right,var(--grid-minor) 1px,transparent 1px),linear-gradient(to bottom,var(--grid-minor) 1px,transparent 1px),linear-gradient(to right,var(--grid-major) 1px,transparent 1px),linear-gradient(to bottom,var(--grid-major) 1px,transparent 1px);background-size:var(--cell) var(--cell),var(--cell) var(--cell),var(--major) var(--major),var(--major) var(--major);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-1);padding:var(--space-3) var(--space-3) var(--space-1);box-sizing:border-box;z-index:1000}.lightbox-button{background:transparent;border:1px solid black;border-radius:0;color:#000;cursor:pointer;padding:0;transition:background .3s ease,transform .2s ease;width:var(--control-h);height:var(--control-h);display:flex;align-items:center;justify-content:center;position:relative;box-sizing:border-box;outline:none}.lightbox-button:focus,.lightbox-button:focus-visible{outline:none;border-color:#000}.lightbox-button:active{background:var(--brand-orange);border-color:#000;transform:scale(.95)}.lightbox-button:hover{background:var(--brand-orange);border-color:#000}.lightbox-close{position:absolute;top:var(--space-1);right:var(--space-1)}.lightbox-prev{position:absolute;left:var(--space-1)}.lightbox-next{position:absolute;right:var(--space-1)}.lightbox-image-container{flex:1 1 auto;min-height:0;max-width:100%;display:flex;align-items:center;justify-content:center}.lightbox-image{max-width:100%;max-height:100%;object-fit:contain;border:1px solid black;background:#fff;box-shadow:0 6px 40px #00000026}.lightbox-bottom-bar{flex-shrink:0;display:flex;align-items:center;justify-content:center;gap:var(--space-1)}.lightbox-counter{color:#000;height:var(--control-h);display:inline-flex;align-items:center;padding:0 var(--space-1);border-radius:0;font-family:var(--font-mono);font-size:.85rem;letter-spacing:.05em;background:transparent;border:1px solid black}.lightbox-bottom-arrow{display:none}@media (max-width: 768px){.lightbox-overlay{padding:var(--space-2) var(--space-0-5) var(--space-1);gap:var(--space-0-5)}.lightbox-side-arrow{display:none}.lightbox-bottom-arrow{display:flex}.lightbox-close{top:var(--space-0-5);right:var(--space-0-5)}}.pdf-wrapper{display:flex;justify-content:center;width:100%;margin-top:calc(-1 * var(--baseline-nudge))}.pdf-container{width:100%;box-sizing:border-box;padding:var(--baseline-nudge) var(--space-0-5) var(--cell);box-shadow:inset 0 0 0 1px #000;border-radius:0;background:transparent;transition:background .6s ease,box-shadow .6s ease,transform .6s ease}.pdf-container:hover{background:var(--brand-yellow);box-shadow:inset 0 0 0 1px #000,0 4px 12px #ffe1004d;transform:translateY(-2px)}.pdf-title{font-size:1rem;font-weight:700;line-height:var(--line);padding-top:0;margin:0;color:#000;text-align:left}.pdf-abstract{color:#000;font-size:1rem;margin:0 0 var(--baseline-offset);text-align:left;line-height:var(--line)}.pdf-link{display:block;width:calc(var(--cell) * 5);height:var(--control-h);line-height:calc(var(--control-h) - 2px);margin:0;text-decoration:none;color:#333;padding:0 var(--space-1);border:1px solid black;text-align:center;transition:all .6s ease;background-color:transparent;white-space:nowrap;border-radius:0;position:relative;overflow:hidden;box-sizing:border-box;font-family:inherit}.pdf-link:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,#ff700000,#ff7000,#ff700000);transition:left .8s ease}.pdf-link:hover{background-color:#ff7000;border-color:#000;color:#000;transform:translateY(-1px);box-shadow:0 2px 8px #ff70004d}.pdf-link:hover:before{left:100%}.pdf-link:focus{outline:none}.project-title-wrapper{width:100%;display:flex;justify-content:flex-start;margin:0 0 var(--cell)}.project-title-container{text-align:left;max-width:800px}.project-main-title{font-size:var(--h2-size);line-height:calc(var(--cell) * 2);font-weight:700;padding-top:var(--h2-pad);margin:0 0 calc(var(--cell) - var(--h2-pad))}.project-details{display:flex;flex-direction:column;gap:0}.project-description{margin:0;text-align:left;line-height:var(--line);font-size:1rem;font-style:italic}.project-date{margin:0;text-align:left;line-height:var(--line);font-size:1rem;color:#000}.random-grid-container{-webkit-user-select:none;user-select:none;z-index:1000;width:100%;margin:0 auto;display:flex;align-items:center;justify-content:center;padding:0}.random-grid-container.mobile{position:static;left:0;top:0}.random-grid-container.desktop{position:static}.random-grid-wrapper{width:100%;max-width:900px;padding:20px 40px;background:transparent;margin:0 auto}.random-grid-wrapper.mobile{padding:10px}.random-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:20px 25px;padding:0;perspective:2000px;max-width:100%}.random-grid-item{position:relative;width:100%;aspect-ratio:210/118;max-width:400px;display:block;text-decoration:none;margin:0 auto}.cube-scene{width:100%;height:100%;position:relative;transform-style:preserve-3d}@media (max-width: 1024px){.random-grid{gap:18px 22px;padding:10px 0}.random-grid-item{max-width:350px}}@media (max-width: 768px){.home-content{min-height:auto;justify-content:flex-start;padding:15px 0 0}.random-grid-container{padding:0}.random-grid-wrapper{padding:0 30px;max-width:500px}.random-grid{grid-template-columns:repeat(2,1fr);gap:12px 10px;padding:0;perspective:1500px}.random-grid-item{max-width:none;aspect-ratio:210/118}.button-cube-scene{margin:10px auto 0}}@media (max-width: 480px){.home-content{padding:10px 0 0}.random-grid-container{padding:0}.random-grid-wrapper{padding:0 25px;max-width:400px}.random-grid{grid-template-columns:repeat(2,1fr);gap:10px 8px;padding:0;perspective:1200px}.random-grid-item{max-width:none;aspect-ratio:210/118}.button-cube-scene{margin:8px auto 0}}.cube{width:100%;height:100%;position:relative;border:1px solid black;box-sizing:border-box;background:#fff;transform:scale(.85) rotateY(-30deg) rotateX(45deg) translateZ(2.5rem);transform-origin:50% 100%;transform-style:preserve-3d;box-shadow:1rem 1rem 2rem #00000040;transition:.6s ease transform}.random-grid-item:hover .cube{transform:scale(1) rotateY(0) rotateX(0) translateZ(0)}.cube:before{content:"";position:absolute;top:0;left:0;width:100%;height:100%;transform:translateZ(2rem);transition:.6s ease transform;pointer-events:none}.random-grid-item:hover .cube:before{transform:translateZ(0)}.cube:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%;transform:translateZ(-2rem);transition:.6s ease transform;border:1px solid black;box-sizing:border-box}.random-grid-item:hover .cube:after{transform:translateZ(-1px)}.cube[data-color-index="0"]:after{background:#ff7000cc}.cube[data-color-index="1"]:after{background:#ffe100cc}.cube[data-color-index="2"]:after{background:#00ffe4cc}.cube[data-color-index="3"]:after{background:#ff0900cc}.cube-face{position:absolute;width:100%;height:100%;top:0;left:0}.cube-face-front{background:#fff;position:relative;z-index:2}.cube-face-top,.cube-face-right{display:none}@media (max-width: 768px){.cube{transform:scale(1) rotateY(-30deg) rotateX(45deg) translateZ(.5rem)}.cube:before{transform:translateZ(.4rem)}.cube:after{transform:translateZ(-.4rem)}}@media (max-width: 480px){.cube{transform:scale(1) rotateY(-30deg) rotateX(45deg) translateZ(.4rem)}.cube:before{transform:translateZ(.3rem)}.cube:after{transform:translateZ(-.3rem)}}.random-grid-image{width:100%;height:100%;object-fit:cover;display:block}.random-grid-overlay{position:absolute;top:0;left:0;width:100%;height:100%;display:none;pointer-events:none;z-index:3}.random-grid-title{display:none}.button-cube-scene{width:fit-content;margin:15px auto 0;perspective:2000px}.random-grid-refresh{background:#fff;border:1px solid black;border-radius:0;cursor:pointer;outline:none;padding:0;font-size:18px;font-weight:600;min-width:240px;height:70px;position:relative;transform:scale(.75) rotateY(-30deg) rotateX(45deg) translateZ(3rem);transform-origin:50% 100%;transform-style:preserve-3d;box-shadow:1rem 1rem 2rem #00000040;transition:.6s ease transform}.random-grid-refresh:hover{transform:scale(1) rotateY(0) rotateX(0) translateZ(0);border:1px solid black}.random-grid-refresh:active{transform:scale(.95) rotateY(0) rotateX(0) translateZ(0);border:1px solid black}.random-grid-refresh:focus{outline:none;border:1px solid black}.random-grid-refresh:focus-visible{outline:none;border:1px solid black}.random-grid-refresh:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%;background:#000;transform:translateZ(-3rem);transition:.6s ease transform;border:1px solid black;border-radius:0;box-sizing:border-box;z-index:-1}.random-grid-refresh:hover:after{transform:translateZ(-1px)}.button-cube,.button-face{display:none}@media (max-width: 768px){.random-grid-refresh{min-width:120px;height:40px;font-size:12px;transform:scale(.7) rotateY(-30deg) rotateX(45deg) translateZ(.8rem)}.random-grid-refresh:after{transform:translateZ(-.8rem)}}@media (max-width: 480px){.random-grid-refresh{min-width:100px;height:35px;font-size:11px;transform:scale(.65) rotateY(-30deg) rotateX(45deg) translateZ(.6rem)}.random-grid-refresh:after{transform:translateZ(-.6rem)}}.soundcloud-container{position:relative;width:100%;max-width:calc(var(--cell) * 16);height:calc(var(--cell) * 13);overflow:hidden;border:1px solid black;box-sizing:border-box;transition:transform .3s ease;margin:calc(-1 * var(--baseline-nudge)) 0 calc(var(--cell) + var(--baseline-nudge))}.soundcloud-container:hover{transform:scale(1.01)}.soundcloud-iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:none;background:#fff}.youtube-container{position:relative;width:100%;max-width:calc(var(--cell) * 16);height:calc(var(--cell) * 9);overflow:hidden;border:1px solid black;box-sizing:border-box;background:#000;margin:calc(-1 * var(--baseline-nudge)) 0 calc(var(--cell) + var(--baseline-nudge))}.youtube-iframe{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;border:none}.page-404{padding:var(--space-0-5);display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:80vh}.page-404-title{margin-bottom:var(--space-0-5)}.page-404-link{color:#000;text-decoration:underline}.contact-page{padding:16px}.contact-text{text-align:center}.contact-link{color:#ff7000;text-decoration:underline;transition:all .4s ease}.contact-link:hover{color:#cc5a00;text-shadow:0 0 8px rgba(255,112,0,.5)}.cv-page{padding-top:var(--space-1);animation:fadeIn .8s ease;max-width:100%;overflow-x:hidden}.cv-button-container{display:flex;flex-wrap:wrap;justify-content:flex-start;gap:var(--space-1);margin-bottom:var(--space-1)}.cv-button{height:var(--control-h);line-height:calc(var(--control-h) - 2px);padding:0 var(--space-1);border:1px solid black;background-color:transparent;cursor:pointer;border-radius:0;outline:none;color:#333;transition:all .6s ease;position:relative;overflow:hidden;box-sizing:border-box;font-family:inherit}.cv-button:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,#00ffe400,#00ffe4,#00ffe400);transition:left .8s ease}.cv-button:hover{background-color:#00ffe4;border-color:#000;color:#000;transform:translateY(-1px);box-shadow:0 2px 8px #00ffe44d}.cv-button:hover:before{left:100%}.cv-button:focus{outline:none}.cv-button.active{background-color:#00ffe4;border-color:#000;color:#000}.cv-phase-out{animation:cvOut .3s ease forwards}@keyframes cvOut{0%{opacity:1}to{opacity:0;transform:translateY(-6px)}}.cv-phase-in .resume-main>*{opacity:0;animation:cvSectionIn .4s ease forwards}.cv-phase-in .resume-main>*:nth-child(1){animation-delay:.04s}.cv-phase-in .resume-main>*:nth-child(2){animation-delay:.08s}.cv-phase-in .resume-main>*:nth-child(3){animation-delay:.12s}.cv-phase-in .resume-main>*:nth-child(4){animation-delay:.16s}.cv-phase-in .resume-main>*:nth-child(5){animation-delay:.2s}.cv-phase-in .resume-main>*:nth-child(6){animation-delay:.24s}.cv-phase-in .resume-main>*:nth-child(7){animation-delay:.28s}.cv-phase-in .resume-main>*:nth-child(8){animation-delay:.32s}.cv-phase-in .resume-main>*:nth-child(9){animation-delay:.36s}.cv-phase-in .resume-main>*:nth-child(10){animation-delay:.4s}@keyframes cvSectionIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.resume-main{text-align:left;max-width:800px;width:100%;margin:0;padding:var(--baseline-nudge) 0 var(--space-2);box-sizing:border-box;overflow-wrap:break-word}.resume-header{text-align:left;display:flow-root;margin-bottom:calc(-1 * var(--space-1))}.resume-name{font-size:var(--h2-size);line-height:calc(var(--cell) * 2);font-weight:700;padding-top:var(--h2-pad);margin-bottom:calc(var(--cell) - var(--h2-pad))}.resume-contact{text-align:left;margin:0;width:100%;word-wrap:break-word}.resume-section-header{font-size:16px;font-weight:700;line-height:var(--line);margin:var(--space-1) 0 0}.resume-hr{border:none;border-top:1px solid black;margin:var(--space-0-5) 0 calc(var(--space-0-5) - 1px)}.resume-header-row{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:0;flex-wrap:wrap;gap:0 var(--space-0-25)}.resume-bullet-list{list-style-type:none;padding-left:var(--space-1);margin:0}.resume-link{color:#ff7000;text-decoration:none;transition:all .4s ease}.resume-link:hover{color:#cc5a00;text-shadow:0 0 8px rgba(255,112,0,.3)}.resume-indent{margin-left:var(--space-1);margin-bottom:var(--cell)}.resume-indent-top{margin-left:var(--space-1);margin-top:0;margin-bottom:var(--cell)}.resume-section-spacing{margin-bottom:var(--space-1)}.resume-subsection-spacing{margin-top:var(--space-1)}.resume-award-category{margin-top:var(--cell);display:block}.skill-atlas-title{font-size:1rem;font-weight:400;font-style:italic;color:#000;text-align:left;padding:0;font-family:inherit;line-height:var(--line);margin:0 0 var(--baseline-offset)}.skill-atlas{display:flex;flex-wrap:wrap;gap:0 var(--space-0-25)}.skill-atlas-section-marker{display:inline-flex;align-items:center;height:var(--cell);box-sizing:border-box;padding:0 var(--space-0-5);font-size:12px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:#000;background:transparent;border:1px solid black;border-radius:0;font-family:inherit;white-space:nowrap;line-height:1}.skill-atlas-tag{display:inline-flex;align-items:center;height:var(--cell);box-sizing:border-box;padding:0 var(--space-0-5);font-size:13px;line-height:1;border:1px solid black;border-radius:0;color:#000;font-family:inherit;cursor:default;white-space:nowrap}.skill-atlas-level-1{background:#ffe100}.skill-atlas-level-2{background:#bfe839}.skill-atlas-level-3{background:#80f072}.skill-atlas-level-4{background:#40f8ab}.skill-atlas-level-5{background:#00ffe4}.skill-atlas-legend{display:flex;flex-wrap:wrap;align-items:center;gap:0 var(--space-0-25);margin:0 0 var(--space-1)}.skill-atlas-legend-prefix{display:inline-flex;align-items:center;height:var(--cell);margin-right:var(--space-0-5);font-size:12px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:#000}.skill-atlas-legend-item{display:inline-flex;align-items:center;height:var(--cell);box-sizing:border-box;padding:0 var(--space-0-5);border:1px solid black;font-size:13px;line-height:1;color:#000;white-space:nowrap}.home-background{position:fixed;top:0;left:0;width:100%;height:100%;z-index:-1;background:#fff}.home-content{position:relative;min-height:auto;z-index:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;box-sizing:border-box;padding:0}.home-main-container{width:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:0}.home-text-section{padding:0;width:100%;box-sizing:border-box;display:flex;justify-content:center;align-items:center}.prose-page{max-width:800px;width:100%;margin:0;box-sizing:border-box;position:relative;z-index:1;padding:var(--space-1) 0 var(--space-2);font-size:16px;line-height:var(--line);color:#000;text-align:left}.home-text-content{font-size:16px;color:#000;line-height:var(--line);word-wrap:break-word;margin-top:0;text-align:left}.home-highlight{background:var(--brand-cyan);padding:0 var(--space-0-5);height:var(--cell);line-height:calc(var(--cell) - 2px);cursor:pointer;display:block;margin-bottom:var(--cell);width:fit-content;border-radius:0;box-sizing:border-box;transition:all .6s ease;border:1px solid black}.home-highlight:hover{background:var(--brand-yellow);border-color:#000;transform:translate(2px)}.home-black-box{background:transparent;color:#333;padding:var(--baseline-nudge) var(--space-0-5) var(--baseline-offset);display:block;line-height:var(--line);font-weight:400;margin-bottom:var(--cell);border-radius:0;box-shadow:inset 0 0 0 1px #000;animation:fadeIn .8s ease}@keyframes fadeIn{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.home-thesis-link{color:#ff7000;text-decoration:underline;transition:all .4s ease}.home-thesis-link:hover{color:#cc5a00;text-shadow:0 0 8px rgba(255,112,0,.5)}.game{width:100%;margin-bottom:var(--cell)}.game-board{position:relative;display:block;width:fit-content;background:transparent;cursor:pointer;line-height:0;touch-action:manipulation}.game-canvas{display:block}.game-overlay{position:absolute;top:0;right:0;bottom:0;left:0;box-sizing:border-box;border:1px solid black;pointer-events:none}.github-terminal{background:transparent;box-shadow:inset 0 0 0 1px #000;padding:var(--mono-nudge) var(--space-0-5) var(--mono-offset);font-family:var(--font-mono);font-size:var(--gh-font-size);line-height:var(--line);animation:fadeIn .8s ease;margin-bottom:var(--cell);overflow:hidden}.gh-cursor{animation:blink 1s step-end infinite}@keyframes blink{50%{opacity:0}}.gh-prompt{color:#888;height:var(--cell);line-height:var(--cell);margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gh-dollar{color:var(--brand-orange);font-weight:700;margin-right:6px}.gh-repos{margin:0 0 var(--cell)}.gh-repo-row{display:grid;grid-template-columns:calc(var(--cell) * 6) auto 1fr;gap:var(--space-0-5);height:var(--cell);line-height:var(--cell);padding:0;text-decoration:none;color:#000;transition:background .3s ease;align-items:baseline}.gh-repo-row:hover{background:#ff70001a}.gh-repo-name{font-weight:600;color:#ff7000;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gh-repo-meta{display:flex;align-items:center;gap:6px;white-space:nowrap}.gh-lang-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;border:1px solid rgba(0,0,0,.1)}.gh-lang-name{color:#666;font-size:.8rem}.gh-repo-desc{color:#999;font-size:.8rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gh-contrib-total{color:#999;font-size:.8em}.gh-graph-section{margin-bottom:var(--cell)}.gh-graph-section .gh-prompt{margin-bottom:0}.gh-calendar{display:flex;gap:4px;height:calc(var(--cell) * 5);padding:4px 0 0;box-sizing:border-box;max-width:100%;overflow:hidden}.gh-day-labels{display:flex;flex-direction:column;gap:3px;flex-shrink:0}.gh-month-spacer{height:15px}.gh-day-label{height:11px;font-size:.65rem;color:#999;display:flex;align-items:center;line-height:1;padding-right:4px}.gh-calendar-scroll{flex:1;min-width:0;overflow-x:auto;overflow-y:hidden;scrollbar-width:thin;scrollbar-color:#ddd transparent}.gh-calendar-scroll::-webkit-scrollbar{height:4px}.gh-calendar-scroll::-webkit-scrollbar-thumb{background:#ddd;border-radius:2px}.gh-calendar-cols{display:flex;gap:3px;width:fit-content}.gh-week-col{display:flex;flex-direction:column;gap:3px}.gh-month-label{height:15px;font-size:.65rem;color:#999;white-space:nowrap;line-height:15px;width:0;overflow:visible}.gh-cell{width:11px;height:11px;border-radius:2px;box-sizing:border-box;transition:transform .15s ease}.gh-cell:hover{transform:scale(1.5);outline:1px solid black;outline-offset:-1px;z-index:1;position:relative}.gh-legend-cell{width:11px;height:11px}.gh-legend-cell:hover{transform:none;outline:none}.gh-graph-legend{display:flex;align-items:center;justify-content:flex-end;gap:3px;height:var(--cell);font-size:.65rem;color:#999;margin-top:0;font-family:var(--font-mono)}.gh-profile-link{display:block;color:#ff7000;text-decoration:none;font-weight:600;height:var(--cell);line-height:var(--cell);transition:all .4s ease}.gh-profile-link:hover{color:#cc5a00;text-shadow:0 0 8px rgba(255,112,0,.5)}@media (max-width: 768px){.gh-repo-row{grid-template-columns:1fr auto;gap:8px;padding:6px 4px}.gh-repo-desc{display:none}.gh-cell,.gh-legend-cell{width:9px;height:9px}.gh-calendar{gap:3px}.gh-calendar-cols,.gh-week-col{gap:2px}.gh-day-label{height:9px;font-size:.6rem}.gh-day-labels{gap:2px}.gh-month-spacer{height:14px}.gh-month-label{height:14px;font-size:.6rem;line-height:14px}}@media (max-width: 480px){.gh-cell,.gh-legend-cell{width:7px;height:7px}.gh-calendar-cols,.gh-week-col,.gh-day-labels{gap:2px}.gh-day-label{height:7px;font-size:.55rem}.gh-month-spacer{height:13px}.gh-month-label{height:13px;font-size:.55rem;line-height:13px}.github-terminal{padding:12px 14px;font-size:.8rem}.gh-repo-name{font-size:.8rem}}.home-grid-container{padding:0;width:100%;height:auto;box-sizing:border-box;display:flex;justify-content:center;align-items:center;position:relative;overflow:visible;z-index:0}.project-external-link{color:#ff7000;text-decoration:underline;transition:all .4s ease}.project-external-link:hover{color:#cc5a00;text-shadow:0 0 8px rgba(255,112,0,.5)}.project-page-transition p{margin:0 0 var(--cell);text-align:left;line-height:var(--line)}.project-page-transition .pdf-abstract{margin:0 0 var(--baseline-offset)}.project-page-transition .project-description,.project-page-transition .project-date{margin:0}.project-page-transition ul,.project-page-transition ol{margin:0 0 var(--cell);padding-left:var(--space-1);text-align:left}.project-page-transition img{display:block;max-width:100%;height:auto;margin:0 0 var(--cell)}.project-prose{text-align:left;line-height:var(--line)}.project-label{display:block;width:fit-content;max-width:100%;background:#000;color:#fff;height:var(--cell);line-height:var(--cell);padding:0 var(--space-0-5);margin:0 0 var(--cell);box-sizing:border-box;font-weight:400;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.route-graph-container{width:100vw;height:calc(100vh - 120px);margin:0;padding:0;display:flex;justify-content:center;align-items:center;box-sizing:border-box;overflow:visible;position:fixed;top:120px;left:0;z-index:0;pointer-events:none}.route-graph-canvas{width:100%;height:100%;display:block;touch-action:manipulation;user-select:none;-webkit-user-select:none;position:relative;pointer-events:auto}@media (max-width: 768px){.route-graph-container{height:calc(100vh - 200px);top:150px}.route-graph-canvas{width:100%;height:100%}}@media (max-width: 480px){.route-graph-container{height:calc(100vh - 180px);top:130px}.route-graph-canvas{width:100%;height:100%}}.center-flex{display:flex;justify-content:center;align-items:center}.text-center{text-align:center}.transition-opacity{transition:opacity .3s ease}::selection{background:#ffe100;color:#000}html{scroll-behavior:smooth}body{background:transparent;min-height:100vh}:root{--font-serif: "Inria Serif", "Times New Roman", Times, serif;--font-mono: "SF Mono", "Fira Code", "Cascadia Code", "Consolas", "Menlo", monospace;font-family:var(--font-serif);line-height:1.5;font-weight:400;color-scheme:light;color:#000000de;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--cell: 24px;--major: 120px;--line: 24px;--space-0-25: 6px;--space-0-5: 12px;--space-1: 24px;--space-2: 48px;--space-3: 72px;--space-4: 96px;--space-5: 120px;--control-h: var(--space-2);--font-size-base: 16px;--font-upm: 1000;--font-ascent: 1055;--font-descent: 323;--baseline-offset: calc( (var(--line) - (var(--font-ascent) + var(--font-descent)) / var(--font-upm) * var(--font-size-base)) / 2 + var(--font-ascent) / var(--font-upm) * var(--font-size-base) );--baseline-nudge: calc(var(--cell) - var(--baseline-offset));--h2-size: 1.5rem;--h2-offset: calc( (calc(var(--cell) * 2) - (var(--font-ascent) + var(--font-descent)) / var(--font-upm) * var(--h2-size)) / 2 + var(--font-ascent) / var(--font-upm) * var(--h2-size) );--h2-pad: calc(var(--cell) * 2 - var(--baseline-nudge) - var(--h2-offset));--gh-font-size: .85rem;--mono-upm: 2048;--mono-ascent: 1901;--mono-descent: 483;--mono-offset: calc( (var(--line) - (var(--mono-ascent) + var(--mono-descent)) / var(--mono-upm) * var(--gh-font-size)) / 2 + var(--mono-ascent) / var(--mono-upm) * var(--gh-font-size) );--mono-nudge: calc(var(--cell) - var(--mono-offset));--writing-inset: var(--space-4);--grid-ink: 58, 92, 178;--grid-minor: rgba(var(--grid-ink), .09);--grid-major: rgba(var(--grid-ink), .19);--paper: #ffffff;--desk: #e9ebee;--margin-red: #ff0900;--brand-orange: #ff7000;--brand-yellow: #ffe100;--brand-cyan: #00ffe4;--brand-red: #ff0900;background-color:var(--desk);background-image:linear-gradient(to right,rgba(var(--grid-ink),.05) 1px,transparent 1px),linear-gradient(to bottom,rgba(var(--grid-ink),.05) 1px,transparent 1px);background-size:var(--cell) var(--cell);background-position:0 0}@media (min-width: 768px){:root{width:50%;margin:auto}}@media (max-width: 600px){:root{--writing-inset: var(--space-1)}}body,html{width:100%;height:100%;margin:0;padding:0}body{margin:0;display:flex;place-items:center;min-width:320px;min-height:100vh;font-size:16px;line-height:var(--line)}h1,h2,h3,h4,h5,h6,p,ul,ol,hr,figure,blockquote,dl,dd{margin:0}h1{font-size:2rem;line-height:round(up,2.2rem,var(--cell))}h2{font-size:var(--h2-size);line-height:calc(var(--cell) * 2);text-align:left;padding-top:var(--h2-pad);margin:0 0 calc(var(--cell) - var(--h2-pad))}h3{font-size:1.1rem;line-height:var(--line);text-align:left}h4{font-size:1rem;line-height:var(--line);text-align:left}p,ul{text-align:left}a{font-weight:500;color:#ff7000;text-decoration:inherit}a:hover{color:#cc5a00}button{border-radius:8px;border:1px solid transparent;padding:.6em 1.2em;font-size:1em;font-weight:500;font-family:inherit;background-color:#1a1a1a;cursor:pointer;transition:border-color .25s}button:hover{border-color:#646cff}button:focus,button:focus-visible{outline:4px auto -webkit-focus-ring-color}#root{width:100%;height:100%;max-width:1280px;margin:0 auto;text-align:center}@media (prefers-color-scheme: light){:root{color:#213547;background-color:var(--desk)}a:hover{color:#cc5a00}button{background-color:#f9f9f9}}
