*,*:before,*:after{margin:0;padding:0;box-sizing:border-box}:root{--bgColor: #121212;--textPrimary: #f5f5f5;--fontSecondary: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, sans-serif}.root-layout{width:100%;min-height:100vh;display:flex;flex-direction:column}html{overflow:scroll;overflow-x:hidden}html.no-scroll{overflow:hidden}::-webkit-scrollbar{width:0;background:transparent}.page-loader{position:fixed;top:0;left:0;right:0;bottom:0;background:var(--bgColor);display:flex;align-items:center;justify-content:center;z-index:2000;opacity:1;transition:opacity .3s ease}.page-loader.hidden{opacity:0;pointer-events:none}.spinner{width:40px;height:40px;border:3px solid var(--textPrimary);border-top:3px solid #000000;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}body{height:100%;width:100%;margin:0;background:var(--bgColor);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,sans-serif}a{cursor:pointer;color:inherit;text-decoration:none}a:visited{color:inherit}.main-content{margin-bottom:30px;opacity:1;transition:scale .2s ease-out,opacity .2s ease-out}.page-wrapper{margin-top:90px;position:relative;display:flex;flex-direction:column;align-items:center;padding-left:10%;padding-right:10%}.markdown-page-wrapper{margin-top:90px;min-height:100vh}.cursor-inverse-circle{position:fixed;width:30px;height:30px;border-radius:50%;pointer-events:none;z-index:9999;mix-blend-mode:difference;background:#fff;transform:translate(-50%,-50%);transition:width .2s ease,height .2s ease;will-change:transform}.cursor-inverse-circle.hover{width:60px;height:60px}@media (max-width: 768px){a{cursor:default}.project-card{scale:1.05}.project-container{margin-top:10px}.page-wrapper,.markdown-page-wrapper{margin-top:70px}}@media (max-width: 480px){.page-wrapper,.markdown-page-wrapper{margin-top:60px}}.header{width:100%;background-color:transparent;z-index:1600;display:flex;align-items:center;position:absolute;justify-content:space-between;padding:0 40px}.header-placeholder{width:50px}.icon-jun{margin:0;width:50px;height:50px;fill:var(--textPrimary);object-fit:contain;justify-content:flex-start;opacity:0}@media (max-width: 768px){.icon-jun{width:50px;height:50px}.header{margin-top:10px}.header-placeholder{width:30px}}.projects-header-container{width:100%;display:flex;margin-bottom:30px}.projects-header{font-size:50px;color:var(--textPrimary);font-weight:100}.project-container{display:grid;grid-template-columns:1fr 1fr 1fr 1fr;justify-items:center;gap:30px;margin:0}.project-card{z-index:1001;width:100%;max-width:300px;display:flex;flex-direction:column;flex-shrink:0;align-items:center;cursor:pointer;box-sizing:border-box;transition:all .2s ease}.thumbnail{width:100%;aspect-ratio:4 / 3;object-fit:cover;border-radius:5px;margin-bottom:5px;border:1px solid rgba(145,145,145,.3)}.project-info{margin:3px 3px 10px;width:100%;padding:0 0 2px 2px}.project-date{color:var(--textPrimary);font-size:10px;opacity:.5;font-style:italic;font-weight:400;margin-bottom:2px}.project-title{font-family:var(--fontSecondary);color:var(--textPrimary);font-size:20px;font-weight:800;margin-bottom:2px}.project-description{color:var(--textPrimary);opacity:.5;font-size:10px;font-weight:200;line-height:1.2}.project-title-bar{display:flex;flex-direction:row;align-items:center;justify-content:space-between}.logo-container{display:flex;flex-direction:row;align-items:center;gap:6px}.logo-container svg{width:16px;height:16px;fill:var(--textPrimary);opacity:.9}.project-card:hover{transform:scale(1.01)}.project-card:active{transform:translateY(3px)}@media (max-width: 1439px){.project-container{grid-template-columns:1fr 1fr 1fr}}@media (max-width: 1024px){.project-container{grid-template-columns:1fr 1fr}}@media (max-width: 767px){.project-container{grid-template-columns:1fr;gap:0}.thumbnail{height:200px}.project-card{scale:.95}.project-card{cursor:auto}}nav{top:0;left:0;right:0;z-index:1000;display:flex;justify-content:center;gap:10px;padding:30px 40px}nav button{color:var(--textPrimary);text-decoration:none;border:none;background:transparent;font-size:14px;padding:7px 15px;border-radius:50px;transition:all .3s ease;cursor:pointer}nav button.active{background:var(--textPrimary);color:#000}nav button:hover:not(.active){background:#ffffff1a}nav.hidden{opacity:0}@media (max-width: 1024px){nav{padding:25px 30px}}@media (max-width: 768px){nav{display:none}}.mobile-menu{position:fixed;top:0;right:-100%;width:70%;max-width:300px;height:100vh;background:#0000004d;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);z-index:1700;transition:right .3s ease;padding:80px 30px 30px;display:none;flex-direction:column;gap:20px}.mobile-menu.active{right:0}.mobile-menu button{color:var(--textPrimary);background:transparent;border:none;font-size:14px;text-decoration:none;font-weight:100;padding:15px 20px;border-radius:30px;transition:all .3s ease;cursor:pointer;text-align:right}.mobile-menu button.active{background:var(--textPrimary);border:1px solid #646464;color:#000}.mobile-menu button:hover:not(.active){background:#ffffff1a}.menu-overlay{position:fixed;top:0;left:0;width:100%;height:100vh;background:#00000080;z-index:1400;opacity:0;visibility:hidden;transition:opacity .3s ease,visibility .3s ease}.menu-overlay.active{opacity:1;visibility:visible}.menu-toggle{width:18px;height:13px;position:relative;display:none;flex-direction:column;justify-content:space-between;background:transparent;border:none;cursor:pointer;transition:.4s ease;transform:translate(-15px)}.menu-toggle span{display:block;height:1px;width:100%;background:var(--textPrimary);border-radius:10px;transition:.3s ease-in-out;transform-origin:center}.menu-toggle.active span:nth-child(1){transform:translateY(7.5px) rotate(47deg)}.menu-toggle.active span:nth-child(2){opacity:0;transform:scaleX(0)}.menu-toggle.active span:nth-child(3){transform:translateY(-4.5px) rotate(-47deg)}@media (max-width: 768px){.menu-toggle,.mobile-menu,.menu-overlay{display:flex}}.hero{position:relative;height:100vh;display:flex;align-items:center;justify-content:center;overflow:hidden}.grid-background{position:absolute;top:0;left:0;width:100%;height:100%;background-image:linear-gradient(rgba(255,255,255,.05) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.05) 1px,transparent 1px);background-size:140px 140px;z-index:1}.diagonal-lines{position:absolute;top:0;left:0;width:100%;height:100%;z-index:2;pointer-events:none}.diagonal-line{position:absolute;width:1px;height:120%;background:#ffffff80;top:-10%;transform-origin:top}.diagonal-line:nth-child(1){left:22%;transform:rotate(8deg)}.diagonal-line:nth-child(2){right:25%;transform:rotate(-16deg)}.gradient-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background:radial-gradient(ellipse at center,#5050504d 5%,#000c 70%);z-index:3}.content{position:relative;z-index:10;text-align:center;max-width:1200px;padding:0 40px}.logo-jun-container{display:flex;flex-direction:column;align-items:center;gap:20px;justify-content:center}.logo-jun-wrapper{width:350px;height:auto;filter:drop-shadow(0 10px 30px rgba(255,255,255,.1))}.logo-wrapper svg{width:100%;height:auto;fill:#fff}.subtitle{font-size:14px;color:#aaa;font-weight:300;letter-spacing:3px}.side-text{position:absolute;z-index:10;font-size:13px;color:#fff;line-height:1.6;font-weight:100}.side-text.left{left:40px;top:50%;transform:translateY(-50%)}.side-text.right{right:40px;top:50%;transform:translateY(-50%);text-align:right}.side-text.bottom{left:40px;bottom:40px;font-style:italic}@media (max-width: 1024px){.logo-jun-wrapper{width:240px}.side-text{font-size:12px}}@media (max-width: 768px){.logo-jun-wrapper{width:200px}.subtitle{font-size:14px}.side-text.left{display:none}.side-text.right{right:50%;transform:translate(50%);text-align:center;top:75%}.side-text.bottom{left:50%;transform:translate(-50%);text-align:center}.content{padding:0 20px}.diagonal-line:nth-child(1){left:15%}.diagonal-line:nth-child(2){right:15%}}@media (max-width: 480px){.subtitle{font-size:12px}.side-text{font-size:11px}.grid-background{background-size:80px 80px}}.start-page-loader{position:fixed;top:0;left:0;width:100%;height:100%;background:#000;z-index:10000;display:flex;align-items:center;justify-content:center;clip-path:inset(0 0 0 0)}.loader-content{display:flex;flex-direction:column;align-items:center;gap:30px}.loader-line{width:300px;height:2px;background:#fff3;position:relative;overflow:hidden}.loader-line:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%;background:linear-gradient(90deg,#fff,#888);transform:scaleX(0);transform-origin:left;animation:loaderPulse 2s ease-in-out}@keyframes loaderPulse{0%,to{transform:scaleX(0)}50%{transform:scaleX(1)}}.loader-text{font-size:12px;letter-spacing:4px;color:#aaa;font-weight:300}.loader-progress{font-size:24px;letter-spacing:2px;color:#fff;font-weight:100;font-variant-numeric:tabular-nums}.scroll-indicator{position:absolute;bottom:50px;left:50%;transform:translate(-50%);display:flex;flex-direction:column;align-items:center;gap:15px;opacity:0;z-index:11}.scroll-text{font-size:10px;letter-spacing:3px;color:#fff9;font-weight:300}.scroll-line{width:1px;height:40px;background:linear-gradient(to bottom,rgba(255,255,255,.6),transparent);position:relative;align-items:center;transform:translate(-50%)}.scroll-line:after{content:"";position:absolute;top:0;left:50%;transform:translate(-50%);width:4px;height:4px;background:#fff;border-radius:50%;animation:scrollDot 2s ease-in-out infinite}@keyframes scrollDot{0%,to{top:0;opacity:1}80%{top:100%;opacity:0}}.skills{position:relative;min-height:100vh;display:flex;align-items:center;justify-content:center;padding:100px 40px;background:#000}.skills-content{max-width:1000px;width:100%;text-align:center}.skills-title{font-size:14px;letter-spacing:4px;color:#aaa;font-weight:300;margin-bottom:30px}.skills-divider{width:60px;height:1px;background:#ffffff4d;margin:0 auto 300px}.skill-category{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);margin-bottom:120px;display:flex;align-items:center;justify-content:center;width:100%;perspective:800px}.category-title-wrap{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);white-space:nowrap}.category-title{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:200px;letter-spacing:3px;font-weight:900;margin:0;opacity:0}.category-title.solid{color:#fff;z-index:1}.category-title.gradient{background:-webkit-linear-gradient(180deg,rgb(0,0,0) 0%,rgba(255,255,255,1) 100%);background:-moz-linear-gradient(180deg,rgba(255,255,255,1) 0%,rgba(255,255,255,1) 100%);background:linear-gradient(180deg,#000,#fff);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent;opacity:0;z-index:2}.skills-icons{display:grid;padding-left:10%;padding-right:10%;z-index:10;position:relative;grid-template-columns:repeat(4,1fr);column-gap:100px;row-gap:30px}.skill-item{display:flex;flex-direction:column;align-items:center;gap:12px;transition:transform .3s ease;opacity:0;transform-style:preserve-3d;will-change:transform,opacity,filter}.skill-item:hover{transform:translateY(-5px)}.skill-icon{width:60px;height:60px;display:flex;align-items:center;justify-content:center;border-radius:12px;background:#ffffff0d;border:1px solid rgba(255,255,255,.1);transition:all .3s ease}.skill-icon:hover{background:#ffffff1a;border-color:#fff3}.skill-icon svg{width:36px;height:36px}.skill-icon img{width:36px;height:36px}.skill-icon.figma svg{color:#f24e1e}.skills-timeline{position:absolute;top:80px;left:50%;transform:translate(-50%);width:700px;z-index:100;pointer-events:none;display:flex;flex-direction:column;align-items:center;gap:16px}.timeline-line-wrapper{position:relative;width:70%;display:flex;flex-direction:column;align-items:center}.timeline-line{position:relative;width:100%;height:2px;background:#ffffff1a;border-radius:2px;overflow:hidden}.skills-timeline-progress{position:absolute;top:0;left:0;width:0%;height:100%;background:linear-gradient(90deg,#fff,#888);box-shadow:0 0 10px #ffffff80}.timeline-dots{position:absolute;top:-6px;left:0;width:100%;display:flex;justify-content:space-between}.marker-dot{width:14px;height:14px;border-radius:50%;background:#fff3;border:2px solid rgba(255,255,255,.3);transition:all .3s ease}.marker-dot.active{background:#fff;border-color:#fff;box-shadow:0 0 20px #fffc;transform:scale(1.3)}.timeline-labels{width:100%;display:flex;justify-content:space-between;align-items:center}.marker-label{font-size:11px;letter-spacing:2px;color:#ffffff4d;font-weight:400;transition:all .3s ease;text-align:center;flex:1}.marker-label.active{color:#fff;font-weight:600}@media (max-width: 768px){.skills-timeline{top:60px;width:500px}.marker-label{font-size:9px;letter-spacing:1px}}@media (max-width: 480px){.skills-timeline{width:300px}.marker-label{font-size:8px}}@media (max-width: 1024px){.category-title{font-size:120px}.skills-icons{gap:20px}}@media (max-width: 768px){.skills{padding:80px 30px}.category-title{font-size:80px;letter-spacing:5px}.skills-icons{grid-template-columns:repeat(4,1fr);gap:20px}.skill-icon{width:50px;height:50px}.skill-icon svg{width:30px;height:30px}}@media (max-width: 480px){.skills{padding:60px 20px}.skills-title{font-size:12px}.category-title{font-size:50px;letter-spacing:3px}.skills-icons{gap:15px}.skill-icon{width:55px;height:55px}.category-icon{width:45px;height:45px}.category-icon svg{width:20px;height:20px}}.who-i-am{position:relative;min-height:100vh;display:flex;align-items:center;justify-content:center;padding:100px 40px;background:#000}.who-content{max-width:880px;text-align:center;opacity:0;transform:translateY(30px)}.who-title{font-size:14px;letter-spacing:4px;color:#aaa;font-weight:300;margin-bottom:30px}.who-divider{width:60px;height:1px;background:#ffffff4d;margin:0 auto 40px}.who-text{font-size:28px;line-height:1.8;color:#fff;font-weight:100;position:relative}.who-text-normal{display:block;font-weight:100;color:#ffffff5d}.who-text-bold{position:absolute;top:0;left:0;width:100%;font-weight:100;clip-path:inset(0 100% 0 0);background:linear-gradient(90deg,#fff,#ddd);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}@media (max-width: 768px){.who-i-am{padding:80px 30px}.who-text{font-size:22px}}@media (max-width: 480px){.who-i-am{padding:60px 20px}.who-title{font-size:12px}.who-text{font-size:18px;line-height:1.7}}.padding-bottom{height:1000px}.pop-up{opacity:0;transform:translateY(6px);transition:opacity .5s ease-out,transform .8s ease}.pop-up.page-in{opacity:1;transform:none}.fade-in{opacity:0;transition:opacity .5s ease-out}.fade-in.page-in{opacity:1}.black-blocker{position:absolute;background-color:var(--bgColor);padding:50px;width:100%;transform:translateY(-90px);z-index:2}.year-selector{display:flex;width:100%;background-color:var(--bgColor);gap:20px;z-index:3}.year{font-family:var(--fontSecondary);font-size:15px;color:var(--textPrimary);border:.5px solid rgba(255,255,255,.095);padding:5px 10px;border-radius:30px;box-sizing:border-box;transition:all .3s ease-in-out;cursor:pointer}.year:hover,.year.active{background-color:var(--textPrimary);color:var(--bgColor)}.container{width:90vw;max-width:1360px;margin-left:auto;margin-right:auto}.timeline_component{flex-direction:column;justify-content:center;align-items:center;max-width:1120px;margin-left:auto;margin-right:auto;display:flex;position:relative}.timeline_item{z-index:2;grid-column-gap:0px;grid-row-gap:0px;grid-template-rows:auto;grid-template-columns:1fr 5vw 1fr;grid-auto-columns:1fr;padding-bottom:80px;display:grid;position:relative;width:100%}.timeline_item:nth-child(2){padding-top:80px}.timeline_left{text-align:right;justify-content:flex-end;align-items:stretch}.timeline_centre{justify-content:center;display:flex}.timeline_date-text{color:var(--textPrimary);font-size:40px;font-weight:700;font-family:var(--fontSecondary);position:sticky;top:50vh}.timeline-card{margin-bottom:50px;max-width:470px}.timeline_title-bar{display:flex;align-items:center;justify-content:space-between;margin-bottom:5px}.timeline_title{color:var(--textPrimary);font-size:30px;font-weight:700;font-family:var(--fontSecondary)}.timeline_title-bar svg{fill:var(--textPrimary);opacity:.5;font-size:18px;font-weight:700;font-family:var(--fontSecondary)}.timeline_text{color:var(--textPrimary);opacity:.8;font-size:13px;margin-bottom:15px;font-weight:300}.timeline_circle{background-color:var(--textPrimary);border-radius:100%;width:15px;min-width:15px;max-width:15px;height:15px;min-height:15px;max-height:15px;position:sticky;top:50vh;box-shadow:0 0 0 8px var(--bgColor)}.timeline-progress{z-index:-2;background-color:#414141;width:3px;height:100%;position:absolute}.timeline-progress-bar{z-index:-10;background:#00c3ff;background:-webkit-linear-gradient(to bottom,#ffff1c,#00c3ff);background:linear-gradient(to bottom,#ffff1c,#00c3ff);width:3px;height:50vh;position:fixed;inset:0 auto 50vh}.timeline-row{display:flex;flex-direction:row;align-items:flex-end}.timeline_image{display:flex;flex-direction:row;cursor:pointer}.timeline_image img{width:200px;height:200px;margin-bottom:0;margin-right:8px;border-radius:10px;overflow:hidden;object-fit:cover;border:.5px solid rgba(255,255,255,.095)}.timeline_link_button{width:40px;height:40px;display:flex;justify-content:center;align-items:center;background-color:var(--textPrimary);border-radius:50%;box-sizing:border-box;cursor:pointer;margin-bottom:5px;transition:filter .2s ease-in-out}.timeline_link_button.hidden{display:none}.timeline_link_icon{width:24px;height:24px}.timeline_link_button:hover{filter:invert(100%)}.overlay-fade-top{background-image:linear-gradient(var(--bgColor),transparent);height:80px;position:absolute;inset:0% 0% auto}.overlay-fade-bottom{background-image:linear-gradient(to top,var(--bgColor),transparent);height:80px;position:absolute;inset:auto 0% 0%}@media screen and (max-width: 1080px){.year{cursor:default}.year-selector:first-child{padding-left:15px}.timeline_item{grid-template-columns:64px 1fr;width:100%}.timeline_left{text-align:left;grid-area:1 / 2 / 2 / 3}.timeline_centre{justify-content:flex-start;grid-area:1 / 1 / 3 / 2}.timeline_right{grid-area:span 1 / span 1 / span 1 / span 1;padding-right:10px}.timeline_date-text{margin-bottom:30px}.timeline-card{margin-bottom:20px}.timeline_image{cursor:default}.timeline-progress{left:6px}.container{margin-left:55px}}@media screen and (max-width: 768px){.black-blocker{transform:translate(-150px) translateY(-90px);padding:60px}.year-selector:first-child{padding-left:0}.timeline-progress-bar{position:fixed}.timeline_item{grid-template-columns:35px 1fr;width:100%}.timeline_title{font-size:25px}.timeline_text{font-size:13px}.timeline_left{text-align:left;grid-area:1 / 2 / 2 / 3}.timeline_centre{justify-content:flex-start;grid-area:1 / 1 / 3 / 2}.timeline_right{grid-area:span 1 / span 1 / span 1 / span 1;padding-right:10px}.timeline_link_button{width:30px;height:30px}.timeline_image img{width:100px;height:100px}.timeline_date-text{font-size:35px}.timeline-progress{left:6px}.container{margin-left:40px}.year-selector{justify-content:center}}@media screen and (max-width: 480px){.container{margin-left:15px}}.markdown-container{max-width:1400px;margin:0 auto;display:grid;grid-template-columns:280px 1fr;gap:2rem;background:transparent;min-height:calc(100vh - 2rem)}.sidebar{background:#161b22;padding:2rem;overflow-y:auto;overflow-x:hidden;max-height:calc(100vh - 2rem);border-radius:12px;border:1px solid #30363d;position:sticky;top:1rem;height:fit-content}.sidebar h3{font-size:.875rem;margin-bottom:1.5rem;color:#8b949e;font-weight:600;text-transform:uppercase;letter-spacing:.5px}.toc{list-style:none}.toc-item{margin-bottom:.25rem;transition:all .2s ease}.toc-item a{display:block;padding:.5rem .75rem;color:#8b949e;text-decoration:none;border-radius:6px;transition:all .2s ease;font-size:.875rem;position:relative;overflow:hidden;word-wrap:break-word}.toc-item a:before{content:"";position:absolute;left:0;top:0;height:100%;width:2px;background:#58a6ff;transform:scaleY(0);transition:transform .2s ease}.toc-item a:hover{background:#21262d;color:#c9d1d9}.toc-item.active a{background:#1f6feb1a;color:#58a6ff;font-weight:600}.toc-item.active a:before{transform:scaleY(1)}.toc-item.level-2{margin-left:1rem}.toc-item.level-3{margin-left:2rem}.content{padding:2rem;background:transparent;overflow-x:hidden;min-width:0}@media (max-width: 968px){.container{grid-template-columns:1fr}.sidebar{position:relative;top:0;max-height:300px}}.markdown-body{--base-size-4: .25rem;--base-size-8: .5rem;--base-size-16: 1rem;--base-size-24: 1.5rem;--base-size-40: 2.5rem;--base-text-weight-normal: 400;--base-text-weight-medium: 500;--base-text-weight-semibold: 600;--fontStack-monospace: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;--fgColor-accent: Highlight;overflow-x:hidden;word-wrap:break-word}.markdown-body,[data-theme=dark]{color-scheme:dark;--focus-outlineColor: #1f6feb;--fgColor-default: rgb(200, 200, 200);--fgColor-muted: #9198a1;--fgColor-accent: #4493f8;--fgColor-success: #3fb950;--fgColor-attention: #d29922;--fgColor-danger: #f85149;--fgColor-done: #ab7df8;--bgColor-default: var(--bgColor);--bgColor-muted: #151b23;--bgColor-neutral-muted: #656c7633;--bgColor-attention-muted: #bb800926;--borderColor-default: #3d444d;--borderColor-muted: #3d444db3;--borderColor-neutral-muted: #3d444db3;--borderColor-accent-emphasis: #1f6feb;--borderColor-success-emphasis: #238636;--borderColor-attention-emphasis: #9e6a03;--borderColor-danger-emphasis: #da3633;--borderColor-done-emphasis: #8957e5;--color-prettylights-syntax-comment: #9198a1;--color-prettylights-syntax-constant: #79c0ff;--color-prettylights-syntax-constant-other-reference-link: #a5d6ff;--color-prettylights-syntax-entity: #d2a8ff;--color-prettylights-syntax-storage-modifier-import: #f0f6fc;--color-prettylights-syntax-entity-tag: #7ee787;--color-prettylights-syntax-keyword: #ff7b72;--color-prettylights-syntax-string: #a5d6ff;--color-prettylights-syntax-variable: #ffa657;--color-prettylights-syntax-brackethighlighter-unmatched: #f85149;--color-prettylights-syntax-brackethighlighter-angle: #9198a1;--color-prettylights-syntax-invalid-illegal-text: #f0f6fc;--color-prettylights-syntax-invalid-illegal-bg: #8e1519;--color-prettylights-syntax-carriage-return-text: #f0f6fc;--color-prettylights-syntax-carriage-return-bg: #b62324;--color-prettylights-syntax-string-regexp: #7ee787;--color-prettylights-syntax-markup-list: #f2cc60;--color-prettylights-syntax-markup-heading: #1f6feb;--color-prettylights-syntax-markup-italic: #f0f6fc;--color-prettylights-syntax-markup-bold: #f0f6fc;--color-prettylights-syntax-markup-deleted-text: #ffdcd7;--color-prettylights-syntax-markup-deleted-bg: #67060c;--color-prettylights-syntax-markup-inserted-text: #aff5b4;--color-prettylights-syntax-markup-inserted-bg: #033a16;--color-prettylights-syntax-markup-changed-text: #ffdfb6;--color-prettylights-syntax-markup-changed-bg: #5a1e02;--color-prettylights-syntax-markup-ignored-text: #f0f6fc;--color-prettylights-syntax-markup-ignored-bg: #1158c7;--color-prettylights-syntax-meta-diff-range: #d2a8ff;--color-prettylights-syntax-sublimelinter-gutter-mark: #3d444d}.markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0;color:var(--fgColor-default);background-color:transparent;font-family:var(--fontSecondary);font-size:16px;line-height:1.5;word-wrap:break-word;text-align:start;max-width:100%}.markdown-body .octicon{display:inline-block;fill:currentColor;vertical-align:text-bottom}.markdown-body h1:hover .anchor .octicon-link:before,.markdown-body h2:hover .anchor .octicon-link:before,.markdown-body h3:hover .anchor .octicon-link:before,.markdown-body h4:hover .anchor .octicon-link:before,.markdown-body h5:hover .anchor .octicon-link:before,.markdown-body h6:hover .anchor .octicon-link:before{width:16px;height:16px;content:" ";display:inline-block;background-color:currentColor;-webkit-mask-image:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' version='1.1' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg>");mask-image:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' version='1.1' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg>")}.markdown-body details,.markdown-body figcaption,.markdown-body figure{display:block}.markdown-body summary{display:list-item}.markdown-body [hidden]{display:none!important}.markdown-body a{background-color:transparent;color:var(--fgColor-accent);text-decoration:none}.markdown-body abbr[title]{border-bottom:none;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.markdown-body b,.markdown-body strong{font-weight:var(--base-text-weight-semibold, 600)}.markdown-body dfn{font-style:italic}.markdown-body h1{font-family:"PT Serif",serif;margin:.67em 0;padding-bottom:.3em;font-size:4em;border-bottom:1px solid var(--borderColor-muted);word-wrap:break-word}.markdown-body mark{background-color:var(--bgColor-attention-muted);color:var(--fgColor-default)}.markdown-body small{font-size:90%}.markdown-body sub,.markdown-body sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}.markdown-body sub{bottom:-.25em}.markdown-body sup{top:-.5em}.markdown-body img{border-style:none;max-width:100%;border-radius:8px;box-sizing:content-box}.img-changelog{width:50%}.markdown-body code,.markdown-body kbd,.markdown-body pre,.markdown-body samp{font-family:monospace;font-size:1em}.markdown-body figure{margin:1em var(--base-size-40)}.markdown-body hr{box-sizing:content-box;overflow:hidden;background:transparent;border-bottom:1px solid var(--borderColor-muted);height:.25em;padding:0;margin:var(--base-size-24) 0;background-color:var(--borderColor-default);border:0}.markdown-body input{font:inherit;margin:0;overflow:visible;font-family:inherit;font-size:inherit;line-height:inherit}.markdown-body [type=button],.markdown-body [type=reset],.markdown-body [type=submit]{-webkit-appearance:button;-moz-appearance:button;appearance:button}.markdown-body [type=checkbox],.markdown-body [type=radio]{box-sizing:border-box;padding:0}.markdown-body [type=number]::-webkit-inner-spin-button,.markdown-body [type=number]::-webkit-outer-spin-button{height:auto}.markdown-body [type=search]::-webkit-search-cancel-button,.markdown-body [type=search]::-webkit-search-decoration{-webkit-appearance:none;-moz-appearance:none;appearance:none}.markdown-body ::-webkit-input-placeholder{color:inherit;opacity:.54}.markdown-body ::-webkit-file-upload-button{-webkit-appearance:button;-moz-appearance:button;appearance:button;font:inherit}.markdown-body a:hover{text-decoration:underline}.markdown-body ::placeholder{color:var(--fgColor-muted);opacity:1}.markdown-body hr:before{display:table;content:""}.markdown-body hr:after{display:table;clear:both;content:""}.markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow:auto;font-variant:tabular-nums}.markdown-body td,.markdown-body th{padding:0}.markdown-body details summary{cursor:pointer}.markdown-body a:focus,.markdown-body [role=button]:focus,.markdown-body input[type=radio]:focus,.markdown-body input[type=checkbox]:focus{outline:2px solid var(--focus-outlineColor);outline-offset:-2px;box-shadow:none}.markdown-body a:focus:not(:focus-visible),.markdown-body [role=button]:focus:not(:focus-visible),.markdown-body input[type=radio]:focus:not(:focus-visible),.markdown-body input[type=checkbox]:focus:not(:focus-visible){outline:solid 1px transparent}.markdown-body a:focus-visible,.markdown-body [role=button]:focus-visible,.markdown-body input[type=radio]:focus-visible,.markdown-body input[type=checkbox]:focus-visible{outline:2px solid var(--focus-outlineColor);outline-offset:-2px;box-shadow:none}.markdown-body a:not([class]):focus,.markdown-body a:not([class]):focus-visible,.markdown-body input[type=radio]:focus,.markdown-body input[type=radio]:focus-visible,.markdown-body input[type=checkbox]:focus,.markdown-body input[type=checkbox]:focus-visible{outline-offset:0}.markdown-body kbd{display:inline-block;padding:var(--base-size-4);font:11px var(--fontStack-monospace, ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace);line-height:10px;color:var(--fgColor-default);vertical-align:middle;background-color:var(--bgColor-muted);border:solid 1px var(--borderColor-neutral-muted);border-bottom-color:var(--borderColor-neutral-muted);border-radius:6px;box-shadow:inset 0 -1px 0 var(--borderColor-neutral-muted)}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:var(--base-size-24);margin-bottom:var(--base-size-16);font-weight:var(--base-text-weight-semibold, 600);line-height:1.25;word-wrap:break-word}.markdown-body h2{font-weight:var(--base-text-weight-semibold, 600);padding-bottom:.3em;font-size:1.5em;border-bottom:1px solid var(--borderColor-muted)}.markdown-body h3{font-weight:var(--base-text-weight-semibold, 600);font-size:1.25em}.markdown-body h4{font-weight:var(--base-text-weight-semibold, 600);font-size:1em}.markdown-body h5{font-weight:var(--base-text-weight-semibold, 600);font-size:.875em}.markdown-body h6{font-weight:var(--base-text-weight-semibold, 600);font-size:.85em;color:var(--fgColor-muted)}.markdown-body p{margin-top:0;margin-bottom:10px}.markdown-body blockquote{margin:0;padding:0 1em;color:var(--fgColor-muted);border-left:.25em solid var(--borderColor-default)}.markdown-body ul,.markdown-body ol{margin-top:0;margin-bottom:0;padding-left:2em}.markdown-body ol ol,.markdown-body ul ol{list-style-type:lower-roman}.markdown-body ul ul ol,.markdown-body ul ol ol,.markdown-body ol ul ol,.markdown-body ol ol ol{list-style-type:lower-alpha}.markdown-body dd{margin-left:0}.markdown-body tt,.markdown-body code,.markdown-body samp{font-family:var(--fontStack-monospace, ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace);font-size:12px}.markdown-body pre{margin-top:0;margin-bottom:0;font-family:var(--fontStack-monospace, ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace);font-size:12px;word-wrap:normal;overflow-x:auto}.markdown-body .octicon{display:inline-block;overflow:visible!important;vertical-align:text-bottom;fill:currentColor}.markdown-body input::-webkit-outer-spin-button,.markdown-body input::-webkit-inner-spin-button{margin:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.markdown-body .mr-2{margin-right:var(--base-size-8, 8px)!important}.markdown-body:before{display:table;content:""}.markdown-body:after{display:table;clear:both;content:""}.markdown-body>*:first-child{margin-top:0!important}.markdown-body>*:last-child{margin-bottom:0!important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body .absent{color:var(--fgColor-danger)}.markdown-body .anchor{float:left;padding-right:var(--base-size-4);margin-left:-20px;line-height:1}.markdown-body .anchor:focus{outline:none}.markdown-body p,.markdown-body blockquote,.markdown-body ul,.markdown-body ol,.markdown-body dl,.markdown-body table,.markdown-body pre,.markdown-body details{margin-top:0;margin-bottom:var(--base-size-16)}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:var(--fgColor-default);vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body h1 tt,.markdown-body h1 code,.markdown-body h2 tt,.markdown-body h2 code,.markdown-body h3 tt,.markdown-body h3 code,.markdown-body h4 tt,.markdown-body h4 code,.markdown-body h5 tt,.markdown-body h5 code,.markdown-body h6 tt,.markdown-body h6 code{padding:0 .2em;font-size:inherit}.markdown-body summary h1,.markdown-body summary h2,.markdown-body summary h3,.markdown-body summary h4,.markdown-body summary h5,.markdown-body summary h6{display:inline-block}.markdown-body summary h1 .anchor,.markdown-body summary h2 .anchor,.markdown-body summary h3 .anchor,.markdown-body summary h4 .anchor,.markdown-body summary h5 .anchor,.markdown-body summary h6 .anchor{margin-left:-40px}.markdown-body summary h1,.markdown-body summary h2{padding-bottom:0;border-bottom:0}.markdown-body ul.no-list,.markdown-body ol.no-list{padding:0;list-style-type:none}.markdown-body ol[type="a s"]{list-style-type:lower-alpha}.markdown-body ol[type="A s"]{list-style-type:upper-alpha}.markdown-body ol[type="i s"]{list-style-type:lower-roman}.markdown-body ol[type="I s"]{list-style-type:upper-roman}.markdown-body ol[type="1"]{list-style-type:decimal}.markdown-body div>ol:not([type]){list-style-type:decimal}.markdown-body ul ul,.markdown-body ul ol,.markdown-body ol ol,.markdown-body ol ul{margin-top:0;margin-bottom:0}.markdown-body li>p{margin-top:var(--base-size-16)}.markdown-body li+li{margin-top:.25em}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:var(--base-size-16);font-size:1em;font-style:italic;font-weight:var(--base-text-weight-semibold, 600)}.markdown-body dl dd{padding:0 var(--base-size-16);margin-bottom:var(--base-size-16)}.markdown-body table th{font-weight:var(--base-text-weight-semibold, 600)}.markdown-body table th,.markdown-body table td{padding:6px 13px;border:1px solid var(--borderColor-default)}.markdown-body table td>:last-child{margin-bottom:0}.markdown-body table tr{background-color:var(--bgColor-default);border-top:1px solid var(--borderColor-muted)}.markdown-body table tr:nth-child(2n){background-color:var(--bgColor-muted)}.markdown-body table img{background-color:transparent}.markdown-body img[align=right]{padding-left:20px}.markdown-body img[align=left]{padding-right:20px}.markdown-body .emoji{max-width:none;vertical-align:text-top;background-color:transparent}.markdown-body span.frame{display:block;overflow:hidden}.markdown-body span.frame>span{display:block;float:left;width:auto;padding:7px;margin:13px 0 0;overflow:hidden;border:1px solid var(--borderColor-default)}.markdown-body span.frame span img{display:block;float:left}.markdown-body span.frame span span{display:block;padding:5px 0 0;clear:both;color:var(--fgColor-default)}.markdown-body span.align-center{display:block;overflow:hidden;clear:both}.markdown-body span.align-center>span{display:block;margin:13px auto 0;overflow:hidden;text-align:center}.markdown-body span.align-center span img{margin:0 auto;text-align:center}.markdown-body span.align-right{display:block;overflow:hidden;clear:both}.markdown-body span.align-right>span{display:block;margin:13px 0 0;overflow:hidden;text-align:right}.markdown-body span.align-right span img{margin:0;text-align:right}.markdown-body span.float-left{display:block;float:left;margin-right:13px;overflow:hidden}.markdown-body span.float-left span{margin:13px 0 0}.markdown-body span.float-right{display:block;float:right;margin-left:13px;overflow:hidden}.markdown-body span.float-right>span{display:block;margin:13px auto 0;overflow:hidden;text-align:right}.markdown-body code,.markdown-body tt{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;background-color:var(--bgColor-neutral-muted);border-radius:6px}.markdown-body code br,.markdown-body tt br{display:none}.markdown-body del code{text-decoration:inherit}.markdown-body samp{font-size:85%}.markdown-body pre code{font-size:100%}.markdown-body pre>code{padding:0;margin:0;word-break:normal;white-space:pre;background:transparent;border:0}.markdown-body .highlight{margin-bottom:var(--base-size-16)}.markdown-body .highlight pre{margin-bottom:0;word-break:normal}.markdown-body .highlight pre,.markdown-body pre{padding:var(--base-size-16);overflow:auto;font-size:85%;line-height:1.45;color:var(--fgColor-default);background-color:var(--bgColor-muted);border-radius:6px}.markdown-body pre code,.markdown-body pre tt{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.markdown-body .task-list-item{list-style-type:none}.markdown-body .task-list-item label{font-weight:var(--base-text-weight-normal, 400)}.markdown-body .task-list-item.enabled label{cursor:pointer}.markdown-body .task-list-item+.task-list-item{margin-top:var(--base-size-4)}.markdown-body .task-list-item .handle{display:none}.markdown-body .task-list-item-checkbox{margin:0 .2em .25em -1.4em;vertical-align:middle}.markdown-body .pl-c{color:var(--color-prettylights-syntax-comment)}.markdown-body .pl-c1,.markdown-body .pl-s .pl-v{color:var(--color-prettylights-syntax-constant)}.markdown-body .pl-e,.markdown-body .pl-en{color:var(--color-prettylights-syntax-entity)}.markdown-body .pl-smi,.markdown-body .pl-s .pl-s1{color:var(--color-prettylights-syntax-storage-modifier-import)}.markdown-body .pl-ent{color:var(--color-prettylights-syntax-entity-tag)}.markdown-body .pl-k{color:var(--color-prettylights-syntax-keyword)}.markdown-body .pl-s,.markdown-body .pl-pds,.markdown-body .pl-s .pl-pse .pl-s1,.markdown-body .pl-sr,.markdown-body .pl-sr .pl-cce,.markdown-body .pl-sr .pl-sre,.markdown-body .pl-sr .pl-sra{color:var(--color-prettylights-syntax-string)}.markdown-body .pl-v,.markdown-body .pl-smw{color:var(--color-prettylights-syntax-variable)}.markdown-body .pl-bu{color:var(--color-prettylights-syntax-brackethighlighter-unmatched)}.markdown-body .pl-ii{color:var(--color-prettylights-syntax-invalid-illegal-text);background-color:var(--color-prettylights-syntax-invalid-illegal-bg)}.markdown-body .pl-c2{color:var(--color-prettylights-syntax-carriage-return-text);background-color:var(--color-prettylights-syntax-carriage-return-bg)}.markdown-body .pl-sr .pl-cce{font-weight:700;color:var(--color-prettylights-syntax-string-regexp)}.markdown-body .pl-ml{color:var(--color-prettylights-syntax-markup-list)}.markdown-body .pl-mh,.markdown-body .pl-mh .pl-en,.markdown-body .pl-ms{font-weight:700;color:var(--color-prettylights-syntax-markup-heading)}.markdown-body .pl-mi{font-style:italic;color:var(--color-prettylights-syntax-markup-italic)}.markdown-body .pl-mb{font-weight:700;color:var(--color-prettylights-syntax-markup-bold)}.markdown-body .pl-md{color:var(--color-prettylights-syntax-markup-deleted-text);background-color:var(--color-prettylights-syntax-markup-deleted-bg)}.markdown-body .pl-mi1{color:var(--color-prettylights-syntax-markup-inserted-text);background-color:var(--color-prettylights-syntax-markup-inserted-bg)}.markdown-body .pl-mc{color:var(--color-prettylights-syntax-markup-changed-text);background-color:var(--color-prettylights-syntax-markup-changed-bg)}.markdown-body .pl-mi2{color:var(--color-prettylights-syntax-markup-ignored-text);background-color:var(--color-prettylights-syntax-markup-ignored-bg)}.markdown-body .pl-mdr{font-weight:700;color:var(--color-prettylights-syntax-meta-diff-range)}.markdown-body .pl-ba{color:var(--color-prettylights-syntax-brackethighlighter-angle)}.markdown-body .pl-sg{color:var(--color-prettylights-syntax-sublimelinter-gutter-mark)}.markdown-body .pl-corl{text-decoration:underline;color:var(--color-prettylights-syntax-constant-other-reference-link)}@media (max-width: 1200px){.markdown-container{max-width:100%;padding:0 1rem;grid-template-columns:240px 1fr;gap:1.5rem}.sidebar,.content{padding:1.5rem}}@media (max-width: 968px){.markdown-container{grid-template-columns:1fr;padding:0 1rem}.sidebar{position:relative;top:0;max-height:300px;margin-bottom:1rem}.content{padding:1rem;max-height:none}.markdown-body h1{font-size:2.5em}.markdown-body h2{font-size:1.3em}.markdown-body h3{font-size:1.1em}}@media (max-width: 640px){.markdown-container{padding:0 .5rem;gap:1rem}.sidebar{padding:1rem}.content{padding:.5rem}.markdown-body{font-size:14px}.markdown-body h1{font-size:1.75em}.markdown-body h2{font-size:1.15em}.markdown-body h3{font-size:1em}.markdown-body table{font-size:12px}.markdown-body pre,.markdown-body code{font-size:11px}}.project-detail{--project-surface: #0c0c0c;--project-surface-raised: #161616;--project-text: #f5f5f5;--project-copy: rgba(245, 245, 245, .76);--project-muted: rgba(245, 245, 245, .5);--project-faint: rgba(245, 245, 245, .3);--project-line: rgba(245, 245, 245, .15);--project-content-width: 1440px;--project-reading-width: 680px;--project-ease: cubic-bezier(.16, 1, .3, 1);min-height:100vh;padding:90px clamp(24px,5vw,80px) 0;color:var(--project-text);font-family:var(--fontSecondary)}.project-detail__shell{width:min(100%,var(--project-content-width));margin:0 auto}.project-detail__utility{min-height:52px;display:flex;align-items:center;justify-content:space-between;gap:24px;border-bottom:1px solid var(--project-line)}.project-detail__back{min-height:44px;display:inline-flex;align-items:center;gap:10px;color:var(--project-copy);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;font-weight:500;letter-spacing:0;text-transform:uppercase;transition:color .2s ease}.project-detail__back>span:first-child{font-size:17px;transition:transform .2s var(--project-ease)}.project-detail__back:hover{color:var(--project-text)}.project-detail__back:hover>span:first-child{transform:translate(-4px)}.project-detail__back:focus-visible,.project-detail__toc-link:focus-visible{outline:2px solid var(--project-text);outline-offset:4px}.project-detail__utility-label,.project-detail__label{color:var(--project-muted);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:10px;font-weight:500;letter-spacing:0;line-height:1.3;text-transform:uppercase}.project-detail__hero{position:relative;isolation:isolate;width:min(100%,1120px);min-height:0;display:grid;place-items:center;margin:clamp(32px,5vw,64px) auto 0;padding:clamp(10px,1.5vw,20px);overflow:hidden;border:1px solid var(--project-line);border-radius:5px;background:#080808}.project-detail__hero:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;background:#060606a8;content:"";pointer-events:none}.project-detail__hero-ambient{position:absolute;top:-56px;right:-56px;bottom:-56px;left:-56px;z-index:0;width:calc(100% + 112px);height:calc(100% + 112px);display:block;object-fit:cover;filter:blur(56px) grayscale(1) saturate(.25) brightness(.72) contrast(.9);opacity:.24;pointer-events:none;transform:scale(1.08)}.project-detail__hero-image{position:relative;z-index:2;width:auto;height:auto;max-width:100%;max-height:min(62vh,620px);display:block;object-fit:contain}.project-detail__header{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(300px,.65fr);align-items:end;gap:clamp(48px,7vw,112px);padding:clamp(44px,5vw,72px) 0;border-bottom:1px solid var(--project-line)}.project-detail--no-image .project-detail__header{padding-top:clamp(72px,11vw,150px)}.project-detail__heading{min-width:0}.project-detail__title{max-width:10ch;margin:14px 0 0;color:var(--project-text);font-family:var(--fontSecondary);font-size:clamp(54px,7.2vw,104px);font-weight:800;letter-spacing:0;line-height:.88;overflow-wrap:anywhere}.project-detail__context{width:100%;max-width:460px;justify-self:end}.project-detail__summary p{margin:12px 0 0;color:var(--project-copy);font-size:clamp(16px,1.35vw,19px);font-weight:300;letter-spacing:0;line-height:1.65}.project-detail__facts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;margin-top:32px}.project-detail__fact{min-width:0;padding-top:14px;border-top:1px solid var(--project-line)}.project-detail__fact-value{display:block;margin-top:8px;color:var(--project-text);font-size:13px;font-weight:500;line-height:1.4}.project-detail__tools{min-height:32px;display:flex;align-items:center;flex-wrap:wrap;gap:10px;margin-top:8px}.project-detail__tool{width:28px;height:28px;display:grid;place-items:center}.project-detail__tool>span[aria-hidden=true]{width:100%;height:100%;display:grid;place-items:center}.project-detail__tool svg{width:22px;height:22px;fill:var(--project-text);opacity:.9}.project-detail__tool-name{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.project-detail__story{display:grid;grid-template-columns:minmax(160px,200px) minmax(0,var(--project-reading-width)) minmax(160px,200px);justify-content:center;gap:clamp(40px,5vw,72px);padding:clamp(56px,8vw,112px) 0}.project-detail__story--no-toc .project-detail__article{grid-column:2}.project-detail__toc{display:block;position:sticky;top:96px;align-self:start;min-width:0}.project-detail__toc[hidden]{display:none}.project-detail__toc-list{position:relative;display:grid;gap:2px;margin:18px 0 0;padding:0 0 0 14px;list-style:none}.project-detail__toc-list:before{content:"";position:absolute;inset:0 auto 0 0;width:1px;background:var(--project-line)}.project-detail__toc-item{min-width:0;margin:0}.project-detail__toc-link{position:relative;min-height:44px;display:grid;grid-template-columns:22px minmax(0,1fr);align-items:center;gap:8px;color:var(--project-muted);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:10px;font-weight:500;letter-spacing:0;line-height:1.35;text-transform:uppercase;transition:color .2s ease}.project-detail__toc-link:before{content:"";position:absolute;top:8px;bottom:8px;left:-14px;width:1px;background:var(--project-text);opacity:0;transform:scaleY(0);transition:opacity .2s ease,transform .2s var(--project-ease)}.project-detail__toc-link:hover,.project-detail__toc-link.active{color:var(--project-text)}.project-detail__toc-link.active:before{opacity:1;transform:scaleY(1)}.project-detail__toc-link>span:first-child{color:var(--project-muted);font-variant-numeric:tabular-nums}.project-detail__article{min-width:0}.project-detail .markdown-body{max-width:none;margin:0;color:var(--project-copy);background:transparent;font-family:var(--fontSecondary);font-size:16px;line-height:1.75;overflow:visible}.project-detail .markdown-body>:first-child{margin-top:0}.project-detail .markdown-body h1,.project-detail .markdown-body h2,.project-detail .markdown-body h3,.project-detail .markdown-body h4{color:var(--project-text);font-family:var(--fontSecondary);font-weight:700;letter-spacing:0;line-height:1.08;border-bottom:0;scroll-margin-top:128px}.project-detail .markdown-body h2{margin:clamp(64px,8vw,104px) 0 24px;padding:0;font-size:clamp(32px,3.25vw,46px)}.project-detail .markdown-body h3{margin:56px 0 18px;font-size:clamp(22px,2vw,28px)}.project-detail .markdown-body h4{margin:40px 0 14px;font-size:18px}.project-detail__heading-icon{display:inline-block;margin-right:.42em;font-size:.52em;line-height:1;transform:translateY(-.08em)}.project-detail .markdown-body p{margin:0 0 1.45em;color:var(--project-copy)}.project-detail .markdown-body strong{color:var(--project-text);font-weight:650}.project-detail .markdown-body a{color:var(--project-text);text-decoration:underline;text-decoration-color:#f5f5f573;text-decoration-thickness:1px;text-underline-offset:4px;transition:text-decoration-color .18s ease,opacity .18s ease}.project-detail .markdown-body a:hover{color:var(--project-text);text-decoration-color:var(--project-text)}.project-detail .markdown-body a:focus-visible{outline:2px solid var(--project-text);outline-offset:3px}.project-detail .markdown-body img{width:100%;max-width:100%;height:auto;display:block;margin:40px 0;border:1px solid var(--project-line);border-radius:5px;background:var(--project-surface);box-sizing:border-box}.project-detail .markdown-body img[src^="https://skillicons.dev/"],.project-detail .markdown-body img[alt="Tech stack icons"]{width:auto;max-width:100%;height:auto;margin:32px 0;border:0;background:transparent}.project-detail .markdown-body ul,.project-detail .markdown-body ol{margin:0 0 1.5em;padding-left:1.4em}.project-detail .markdown-body li{margin:.45em 0;padding-left:.25em}.project-detail .markdown-body blockquote{margin:40px 0;padding:4px 0 4px 24px;color:var(--project-copy);border-left:1px solid var(--project-text)}.project-detail .markdown-body blockquote>:last-child{margin-bottom:0}.project-detail .markdown-body code,.project-detail .markdown-body tt{padding:.18em .38em;color:var(--project-text);background:var(--project-surface-raised);border-radius:3px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.88em}.project-detail .markdown-body pre{max-width:100%;margin:36px 0;padding:22px;overflow:auto;color:var(--project-text);background:var(--project-surface);border:1px solid var(--project-line);border-radius:5px;line-height:1.65}.project-detail .markdown-body pre code{padding:0;background:transparent;border:0}.project-detail .markdown-body table{width:100%;max-width:100%;display:block;margin:36px 0;overflow-x:auto;border-collapse:collapse;font-size:14px}.project-detail .markdown-body th,.project-detail .markdown-body td{min-width:140px;padding:13px 16px;border:1px solid var(--project-line);text-align:left}.project-detail .markdown-body th{color:var(--project-text);background:var(--project-surface-raised);font-weight:650}.project-detail .markdown-body tr{background:transparent;border:0}.project-detail .markdown-body tr:nth-child(2n){background:#f5f5f506}.project-detail .markdown-body hr{height:1px;margin:64px 0;background:var(--project-line);border:0}.project-detail__empty{padding:20px 0 80px}.project-detail__empty p{margin:14px 0 0;color:var(--project-copy);font-size:clamp(24px,3vw,38px);font-weight:300;letter-spacing:0}.project-detail__footer{min-height:112px;display:flex;align-items:center;border-top:1px solid var(--project-line)}.project-detail__back--footer{font-size:12px}@media (max-width: 1100px){.project-detail{padding-right:clamp(20px,4vw,48px);padding-left:clamp(20px,4vw,48px)}.project-detail__header{grid-template-columns:1fr;gap:44px}.project-detail__context{max-width:760px;justify-self:start}.project-detail__story,.project-detail__story--no-toc{grid-template-columns:minmax(0,1fr);gap:48px}.project-detail__story--no-toc .project-detail__article,.project-detail__article{width:min(100%,var(--project-reading-width));grid-column:1;margin:0 auto}.project-detail__toc{display:block;position:sticky;top:0;z-index:20;width:100%;padding:10px 0;overflow-x:auto;background:#121212f5;border-top:1px solid var(--project-line);border-bottom:1px solid var(--project-line);scrollbar-width:none}.project-detail__toc::-webkit-scrollbar{display:none}.project-detail__toc>.project-detail__label{display:none}.project-detail__toc-list{width:max-content;display:flex;gap:8px;margin:0;padding:0}.project-detail__toc-list:before,.project-detail__toc-link:before{display:none}.project-detail__toc-link{min-width:max-content;padding:0 12px;white-space:nowrap}.project-detail__toc-link:after{content:"";position:absolute;right:12px;bottom:2px;left:12px;height:1px;background:var(--project-text);opacity:0;transform:scaleX(0);transition:opacity .2s ease,transform .2s var(--project-ease)}.project-detail__toc-link.active:after{opacity:1;transform:scaleX(1)}}@media (max-width: 640px){.project-detail{padding:82px 16px 0}.project-detail__utility{min-height:48px}.project-detail__utility-label{font-size:9px}.project-detail__hero{width:100%;margin-top:24px;padding:8px}.project-detail__hero-image{max-height:66vh}.project-detail__header,.project-detail--no-image .project-detail__header{gap:32px;padding:44px 0}.project-detail--no-image .project-detail__header{padding-top:72px}.project-detail__title{max-width:100%;margin-top:12px;font-size:clamp(44px,14vw,60px);line-height:.9}.project-detail__summary p{font-size:16px}.project-detail__facts{gap:12px;margin-top:28px}.project-detail__story{gap:36px;padding:48px 0 72px}.project-detail .markdown-body{font-size:16px;line-height:1.7}.project-detail .markdown-body h2{margin-top:64px;font-size:clamp(30px,9vw,38px)}.project-detail .markdown-body h3{margin-top:48px;font-size:23px}.project-detail .markdown-body img,.project-detail .markdown-body pre,.project-detail .markdown-body table,.project-detail .markdown-body blockquote{margin-top:30px;margin-bottom:30px}.project-detail .markdown-body pre{padding:18px;font-size:13px}.project-detail .markdown-body table{font-size:13px}.project-detail .markdown-body th,.project-detail .markdown-body td{min-width:120px;padding:11px 13px}.project-detail__footer{min-height:96px}}@media (prefers-reduced-motion: reduce){.project-detail,.project-detail *{scroll-behavior:auto!important}.project-detail .pop-up{opacity:1;transform:none;transition:none}.project-detail__back,.project-detail__back>span:first-child,.project-detail__toc-link,.project-detail__toc-link:before,.project-detail__toc-link:after,.project-detail .markdown-body a{transition:none}}.pop-overlay{display:flex;top:0;left:0;width:100%;height:100%;position:fixed;justify-content:center;align-items:center;z-index:2000;display:none}.pop-box{display:flex;height:95%;width:95%;background:#2a2c2d;border-radius:20px;border:1px solid rgba(142,142,142,.2);box-shadow:0 4px 6px #0003;padding:13px;flex-direction:column;flex-shrink:0;box-sizing:border-box;position:relative}.btn-close{display:flex;justify-content:flex-end}.btn-close svg{cursor:pointer}.pop-content{padding:0 20px 20px;color:var(--textPrimary);font-family:var(--fontSecondary);overflow-y:auto}.email-container{display:flex;border:1px solid rgba(200,200,200,.496);border-radius:20px;padding:10px 10px 10px 15px;box-sizing:border-box;justify-content:space-between;align-items:center}.email-address{color:#c8c8c8;font-size:16px;font-family:SF Mono,Monaco,JetBrains Mono,monospace;word-break:break-all;line-height:1.5}.copy-btn{display:flex;width:40px;height:40px;justify-content:center;align-items:center;border-radius:50%;cursor:pointer;transition:all .2s ease}.copy-btn svg{width:25px;height:25px}.copy-btn:hover{background-color:#80808055}.copy-btn:active{background-color:#8080809f}.pop-content iframe{display:block!important;max-width:100%;margin:20px auto;border-radius:12px}.feedback-overlay{display:flex;left:0;width:100%;margin-top:20px;position:fixed;justify-content:center;z-index:2001;top:-80px;transition:all .3s ease-in-out}.feedback-overlay.active{top:0}.feedback-icon{height:24px;margin-left:3px;margin-right:2px}.feedback-box{display:flex;min-width:100px;max-width:300px;background:#414446;border-radius:30px;border:1px solid rgba(142,142,142,.2);box-shadow:0 4px 6px #0003;padding:10px;flex-direction:row;flex-shrink:0;position:relative;align-items:center;justify-content:center}.feedback-content{color:var(--textPrimary);font-family:var(--fontSecondary);margin-right:5px}.img-overlay{display:flex;top:0;left:0;width:100%;height:100%;position:fixed;justify-content:center;align-items:center;z-index:2003;background-color:#0006;display:none}.img-box{display:flex;flex-direction:column;flex-shrink:0;position:relative}.img-content{padding:10px}.img-content img{max-width:90vw;max-height:600px}@media (max-width: 768px){.img-content img{max-width:80vw;max-height:500px}}
