@font-face{font-display:swap;font-family:Fira Code;font-style:normal;font-weight:400;src:url(/fonts/fira-code-v27-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:Fira Code;font-style:normal;font-weight:600;src:url(/fonts/fira-code-v27-latin-600.woff2)format("woff2")}:root{--background:#1a170f;--foreground:#eceae5;--accent:#eec35e;--radius:0;--font-size:1rem;--line-height:1.54em}html{box-sizing:border-box}*,:before,:after{box-sizing:inherit;margin:0;padding:0}body{font-family:Fira Code,JetBrains Mono,Monaco,Consolas,Ubuntu Mono,monospace;font-size:var(--font-size);font-weight:400;line-height:var(--line-height);background-color:var(--background);color:var(--foreground);text-rendering:optimizelegibility;font-variant-ligatures:contextual;-webkit-overflow-scrolling:touch;-webkit-text-size-adjust:100%;margin:0;padding:0}h1{font-size:calc(var(--font-size) * 1.45);letter-spacing:0}h2{font-size:calc(var(--font-size) * 1.35);letter-spacing:0}h3{font-size:calc(var(--font-size) * 1.15);letter-spacing:0}h4,h5,h6{font-size:calc(var(--font-size) * 1);letter-spacing:0}h1,h2,h3,h4,h5,h6,p,ul,ol,img,figure,video,table{margin:25px 0}a{color:var(--accent)}button{font:inherit;text-align:center;color:var(--accent);border:4px solid var(--accent);border-radius:var(--radius);appearance:none;cursor:pointer;background:0 0;outline:none;padding:5px 18px;font-weight:700;text-decoration:none;transition:background .15s linear;position:relative}button:hover{background:color-mix(in srgb, var(--accent) 15%, transparent)}button:focus-visible,a:focus-visible{outline:1px solid var(--accent);outline-offset:2px}fieldset{border:2px solid var(--foreground);border-radius:calc(var(--radius) * 1.6);padding:10px;display:inline-block}fieldset :first-child{margin-top:0}fieldset input,fieldset select,fieldset textarea,fieldset label,fieldset button{margin-top:calc(var(--line-height) * .5);width:100%}label{display:inline-block}label input{margin-top:0}input,textarea,select{color:var(--foreground);border:1px solid var(--foreground);border-radius:var(--radius);font:inherit;appearance:none;background:0 0;padding:10px}input[type=checkbox]{width:auto}input:focus-visible,input:active,textarea:focus-visible,textarea:active,select:focus-visible,select:active{border-color:var(--accent);outline:1px solid var(--accent);outline-offset:2px}input:active,textarea:active,select:active{box-shadow:none}select{background-image:linear-gradient(45deg, transparent 50%, var(--foreground) 50%), linear-gradient(135deg, var(--foreground) 50%, transparent 50%);background-position:calc(100% - 20px),calc(100% - 15px);background-repeat:no-repeat;background-size:5px 5px,5px 5px;padding-right:40px}select option{background:var(--background)}input[type=checkbox],input[type=radio]{vertical-align:middle;box-shadow:inset 0 0 0 3px var(--background);padding:10px}input[type=radio]{border-radius:20px;display:inline-block;width:10px!important;height:10px!important}input[type=checkbox]:checked,input[type=radio]:checked{background:var(--accent)}img{border:8px solid var(--accent);border-radius:var(--radius);max-width:100%;padding:8px;display:block;overflow:hidden}figure img,figure video{margin-bottom:0}figure figcaption{background:var(--accent);color:var(--background);text-align:center;border-radius:0 0 var(--radius) var(--radius);margin-top:-8px;font-size:1em;font-weight:400}ul,ol{margin-left:4ch;padding:0}ul ul,ul ol,ol ul,ol ol{margin-top:0}li::marker{color:var(--accent)}ul li,ol li{position:relative}code,kbd{font-feature-settings:normal;background:color-mix(in srgb, var(--foreground) 5%, transparent);color:color-mix(in srgb, var(--foreground) 5%, var(--accent));margin:0 2px;padding:0 6px;font-size:.95em;font-family:Fira Code,JetBrains Mono,Monaco,Consolas,Ubuntu Mono,monospace!important}code{border:1px solid color-mix(in srgb, var(--foreground) 25%, transparent)}kbd{border-top:1px solid color-mix(in srgb, var(--accent) 25%, transparent);border-left:1px solid var(--accent);border-right:1px solid var(--accent);border-bottom:4px solid var(--accent);border-radius:4px}code code{background:0 0;margin:0;padding:0}pre{tab-size:4;color:color-mix(in srgb, var(--foreground) 5%, var(--accent));border-radius:var(--radius);border:1px solid color-mix(in srgb, var(--foreground) 25%, transparent);padding:20px 10px;overflow:auto;background:color-mix(in srgb, var(--foreground) 5%, transparent)!important;font-size:.95em!important}pre code{font-size:inherit;border:none;margin:0;padding:0;background:0 0!important}sup{line-height:0}abbr{text-decoration-style:wavy;-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent);cursor:help;position:relative}sub{bottom:-.25em}sup{top:-.25em}mark{background:color-mix(in srgb, var(--accent) 45%, transparent);color:var(--foreground)}blockquote{border-top:1px solid var(--accent);border-bottom:1px solid var(--accent);margin:0;padding:25px;position:relative}blockquote:before{content:">";color:var(--accent);display:block;position:absolute;left:0}blockquote p:first-child{margin-top:0}blockquote p:last-child{margin-bottom:0}table{table-layout:auto;border-collapse:collapse}table,th,td{border:2px solid var(--foreground);padding:10px}th{color:var(--foreground);text-align:left;text-transform:uppercase;letter-spacing:.04em;border-style:solid}hr{background:var(--accent);border:none;width:100%;height:2px}h1,h2,h3,h4,h5,h6,b,strong,th,button{font-weight:600}.font-light{font-weight:300}.font-regular{font-weight:400}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-bold{font-weight:700}.uppercase{text-transform:uppercase;letter-spacing:.04em}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.text-xs{font-size:calc(var(--font-size) * .75)}.text-sm{font-size:calc(var(--font-size) * .875)}.text-base{font-size:var(--font-size)}.text-lg{font-size:calc(var(--font-size) * 1.125)}.text-xl{font-size:calc(var(--font-size) * 1.25)}.text-2xl{font-size:calc(var(--font-size) * 1.5)}.container{border-right:1px solid color-mix(in srgb, var(--accent) 10%, transparent);flex-direction:column;max-width:864px;min-height:100vh;margin:0 auto;padding:40px;display:flex}.container.full,.container.center{border:none;margin:0 auto}.container.full{max-width:100%}.content{flex-direction:column;flex:1;display:flex}.index-content{margin-bottom:40px}.index-content.framed{margin-bottom:60px}.framed{border:4px solid var(--accent);padding:20px}figure{text-align:center;background:0 0;width:fit-content;margin:25px auto;padding:0;display:inline-block}figure img{display:block;margin-bottom:-8px!important}figure figcaption{position:relative;background:var(--accent)!important;color:var(--background)!important;text-align:center!important;border:none!important;border-radius:0!important;margin-top:0!important;padding:15px 20px!important;font-weight:400!important}figure figcaption p{margin:0}.page h1,article h1{color:var(--accent);border-bottom:3px dotted var(--accent);padding-bottom:15px;position:relative;margin-top:0!important;margin-bottom:15px!important}.page h1:after,article h1:after{content:"";border-bottom:3px dotted var(--accent);width:100%;display:block;position:absolute;bottom:2px}@media (width<=684px){.container{padding:20px}.content{margin-top:20px}}@media print{.container,.content{display:initial}}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.float-left{float:left}.float-right{float:right}.mb-0{margin-bottom:0!important}.mt-0{margin-top:0!important}.clearfix:after{content:"";clear:both;display:table}ul{list-style:none}ul li{position:relative}ul li:not(:empty):before{content:"-";color:var(--accent);position:absolute;left:-20px}ul ul{margin-left:20px}::selection{background:var(--accent);color:var(--background)}::selection{background:var(--accent);color:var(--background)}.header{flex-direction:column;display:flex;position:relative}.header__inner{justify-content:space-between;align-items:center;display:flex}.header__logo{flex:1;align-items:center;display:flex}.header__logo:after{content:"";background:repeating-linear-gradient(90deg, var(--accent), var(--accent) 2px, transparent 0, transparent 10px);width:100%;height:35px;margin-left:10px;display:block}.header__logo a{flex:none;max-width:100%;text-decoration:none}.logo{background:var(--accent);color:var(--background);align-items:center;padding:5px 10px;font-weight:700;text-decoration:none;display:flex}.breadcrumbs{border-top:1px dashed var(--accent);margin-top:10px;padding:8px 0 0}.breadcrumb-list{flex-wrap:wrap;margin:0;padding:0;font-family:monospace;font-size:.9rem;list-style:none;display:flex}.breadcrumb-item{align-items:center;display:flex}.breadcrumb-item a{color:var(--accent);text-decoration:none}.breadcrumb-item a:hover{text-decoration:underline}.breadcrumb-separator{color:var(--gray);margin:0}.breadcrumb-root{color:var(--color)}.breadcrumb-current{color:var(--color);font-weight:500}@media (width<=684px){.header__inner{flex-direction:row;justify-content:space-between;align-items:center;width:100%}.header__logo{flex:1;margin-bottom:0}.header__logo:after{flex:1;width:auto;margin-left:10px;margin-right:10px;display:block}}.navigation-menu{flex-direction:column;justify-content:space-between;align-items:flex-start;margin:20px 1px;display:flex}.navigation-menu__inner{flex-wrap:wrap;flex:1;margin:0;padding:0;list-style:none;display:flex}.navigation-menu__inner>li{white-space:nowrap;flex:none;margin-bottom:10px;position:relative}.navigation-menu__inner>li:not(:last-of-type){margin-right:20px}.navigation-menu__inner>li>a{color:var(--accent);text-decoration:none;position:relative}.navigation-menu__inner>li>a:after{content:"";background-color:var(--accent);height:2px;transition:transform .2s ease-in-out;position:absolute;bottom:-2px;left:0;right:0;transform:scaleX(0)}.navigation-menu__inner>li>a:hover:after{transform:scaleX(1)}.menu--desktop .menu{display:inline-block}.menu--desktop .menu .menu__trigger{color:var(--accent);cursor:pointer;display:inline-block;margin-right:0!important}.menu--desktop .menu .menu__trigger a{color:var(--accent);text-decoration:none;position:relative}.menu--desktop .menu .menu__trigger a:after{content:"";background-color:var(--accent);height:2px;transition:transform .2s ease-in-out;position:absolute;bottom:-2px;left:0;right:0;transform:scaleX(0)}.menu--desktop .menu .menu__trigger a:hover:after{transform:scaleX(1)}.menu--desktop .menu:hover .menu__dropdown,.menu--desktop .menu .menu__dropdown:hover{display:flex}.menu--desktop .menu .menu__dropdown:before{content:"";background:0 0;height:15px;position:absolute;top:-15px;left:0;right:0}.menu--desktop .menu .menu__dropdown{min-width:180px;margin-top:0;top:calc(100% + 5px)}.menu--desktop .menu .menu__dropdown li{margin-bottom:0}.menu--desktop .menu .menu__dropdown li:not(:last-of-type){margin-bottom:10px}.menu{flex-direction:column;margin:0;padding:0;list-style:none;display:flex;position:relative}.menu ul,.navigation-menu ul,.header ul{margin:0;padding:0;list-style:none}.menu li:before,.navigation-menu li:before,.header li:before,.menu__dropdown li:before,.navigation-menu__inner li:before{content:none!important}.menu__trigger{color:var(--accent);-webkit-user-select:none;user-select:none;cursor:pointer;margin-right:0!important}.menu__dropdown{background:var(--background);box-shadow:0 10px var(--background), -10px 10px var(--background), 10px 10px var(--background);color:var(--accent);border:2px solid var(--accent);z-index:99;flex-direction:column;margin:0;padding:10px;list-style:none;display:none;position:absolute;top:100%;left:0}.open .menu__dropdown{display:flex}.menu__dropdown>li:not(:last-of-type){margin-bottom:10px}.menu__dropdown>li>a{color:var(--accent);padding:5px;text-decoration:none;display:flex;position:relative}.menu__dropdown>li>a:after{content:"";background-color:var(--accent);height:2px;transition:transform .2s ease-in-out;position:absolute;bottom:3px;left:5px;right:5px;transform:scaleX(0)}.menu__dropdown>li>a:hover:after{transform:scaleX(1)}.menu--mobile{flex:none;margin:0;padding:0;list-style:none;display:none}.menu--mobile .menu__trigger{color:var(--accent);cursor:pointer;border:2px solid;height:100%;margin-left:0;padding:3px 8px;position:relative;margin-bottom:0!important}.submenu-divider{color:var(--gray);border-top:1px dashed var(--accent);cursor:default;margin-top:10px;padding-top:10px;font-size:.85rem}.submenu-divider:hover{background:0 0}.submenu-item a{padding-left:5px;font-size:.9rem}.menu--language-selector .menu__trigger{color:var(--accent);border:2px solid;margin-left:10px;padding:3px 8px}@media (width<=684px){.navigation-menu{margin:0}.menu--desktop{display:none}.menu--mobile{display:flex}.menu--mobile .menu__dropdown{margin-top:5px;top:100%;left:auto;right:0}.menu--language-selector .menu__dropdown{left:auto;right:0}}.footer{opacity:.65;flex-grow:0;padding:40px 0}.footer__inner{justify-content:space-between;align-items:center;max-width:100%;margin:0;display:flex}.footer a{color:inherit}.footer .copyright{flex-flow:wrap;flex:1;justify-content:center;align-items:center;display:flex}.footer .copyright--user{text-align:center;margin:auto}.footer .copyright>:first-child:not(:only-child){margin-right:10px}.footer .copyright span{white-space:nowrap}.footer .copyright span:not(:last-child){margin-right:5px}@media (width<=900px){.footer__inner{flex-direction:column}}@media (width<=684px){.footer{padding:20px 0}.footer__inner{padding:0 10px}.copyright{text-align:center;flex-wrap:wrap;gap:5px}.copyright span{white-space:normal;font-size:14px;line-height:1.6}.copyright .separator{display:none}.copyright span:not(.separator){width:100%;display:block}.footer a{padding:2px 4px;display:inline-block}}.buttons{flex-wrap:wrap;justify-content:center;gap:10px;margin:40px 0;display:flex}.button{font:inherit;text-align:center;color:var(--accent);border:4px solid var(--accent);border-radius:var(--radius);appearance:none;cursor:pointer;background:0 0;outline:none;justify-content:center;align-items:center;padding:5px 18px;font-weight:700;text-decoration:none;transition:background .15s linear;display:inline-flex;position:relative}.button:hover{background:color-mix(in srgb, var(--accent) 15%, transparent)}.button:focus-visible{outline:1px solid var(--accent);outline-offset:2px}.button.outline{box-shadow:none;background:0 0;padding:8px 18px}.button.link{text-underline-offset:3px;background:0 0;border:none;padding:0;font-size:1rem;text-decoration:underline}.button.link:hover{background:0 0;text-decoration:none}.button.small{font-size:calc(var(--font-size) * .8)}.button.wide{min-width:200px;padding:14px 24px}.button.inline{text-underline-offset:3px;background:0 0;border:none;padding:0;font-weight:400;text-decoration:underline}.button.inline:hover{background:0 0;text-decoration:none}.read-more{color:var(--accent);margin-top:10px;font-weight:700;text-decoration:none;display:inline-block}.project-links,.research-links{flex-wrap:wrap;gap:1rem;display:flex}.research-links{margin-top:1rem}.project-links .button,.research-links .button{border:2px solid var(--accent);color:var(--accent);padding:.5rem 1rem;font-weight:500;text-decoration:none;transition:all .2s;display:inline-block}.project-links .button:hover,.research-links .button:hover{background:var(--accent);color:var(--background)}.page{max-width:760px;margin:0 auto}.page h2{border-top:2px solid var(--accent);margin-top:3rem;padding-top:2rem;padding-bottom:.5rem;font-size:1.5rem}.page h1+h2{border-top:none;margin-top:2rem;padding-top:0}.project-header+.project-section h2,.category-section h2:first-child{border-top:none;margin-top:1rem;padding-top:0}.page ul{margin-left:1.5rem}.page>p,.page>ul{margin-bottom:1.5rem}.project-detail{padding:0}.project-header{border-bottom:2px solid var(--accent);margin-bottom:2rem;padding-bottom:1rem}.project-header h1{margin:0 0 1rem}.project-meta{flex-wrap:wrap;align-items:center;gap:1rem;display:flex}.status-badge{border:1px solid var(--accent);color:var(--accent);border-radius:3px;padding:.25rem .75rem;font-size:.85rem;font-weight:500;display:inline-block}.status-in-progress{background:#ffa5001a}.status-planned{background:#8080801a}.status-completed{background:#00ff001a}.project-category{color:var(--gray);font-size:.9rem}.project-section{margin-bottom:2rem}.project-section h2{color:var(--accent);margin-bottom:1rem}.project-section p{margin-bottom:1rem;line-height:1.8}.project-section ul{padding-left:1.5rem;line-height:1.8}.project-section li{margin-bottom:.5rem}.back-link{border-top:1px solid var(--accent);margin-top:3rem;padding-top:2rem}.back-link a{color:var(--accent);font-weight:500;text-decoration:none}.back-link a:hover{text-decoration:underline}.notice{background:var(--accent);border-radius:4px;margin:1rem 0;padding:1rem}.footnote{color:var(--gray);margin-top:-1rem;margin-bottom:1.5rem;font-size:.85rem}.profile-image{object-fit:cover;border:2px solid var(--accent);width:210px;height:210px;overflow:hidden}.highlight{border:1px solid var(--code-border);margin:20px 0;position:relative}.code-title{background:color-mix(in srgb, var(--foreground) 5%, transparent);border-bottom:1px solid var(--code-border);color:var(--comment);text-transform:uppercase;font-size:calc(var(--font-size) * .8);justify-content:space-between;align-items:center;padding:6px 10px;line-height:1;display:flex}.copy-button{text-align:center;border:1px solid color-mix(in srgb, var(--accent) 15%, transparent);appearance:none;cursor:pointer;color:var(--accent);background:0 0;outline:none;justify-content:center;align-items:center;padding:3px 8px;font-size:13px;font-weight:500;text-decoration:none;transition:all .15s linear;display:inline-flex;position:relative}.copy-button:hover{background:color-mix(in srgb, var(--accent) 15%, transparent)}.collapsible{margin:40px 0;position:relative}.collapsible-title{background:color-mix(in srgb, var(--foreground) 5%, transparent);border:1px solid color-mix(in srgb, var(--foreground) 10%, transparent);border-radius:var(--radius);cursor:pointer;-webkit-user-select:none;user-select:none;padding:10px;position:relative}.collapsible-title:after{content:">";transition:transform .2s;position:absolute;right:10px}.collapsible.open .collapsible-title:after{transform:rotate(90deg)}.collapsible-content{border:1px solid color-mix(in srgb, var(--foreground) 10%, transparent);border-radius:0 0 var(--radius) var(--radius);border-top:none;margin-top:-1px;display:none}.collapsible.open .collapsible-content{display:block}.line-numbers{counter-reset:linenumber;position:relative;padding-left:3.8em!important}.line-numbers>code{white-space:inherit;position:relative}.line-numbers .line-numbers-rows{pointer-events:none;letter-spacing:-1px;border-right:1px solid color-mix(in srgb, var(--foreground) 10%, transparent);-webkit-user-select:none;user-select:none;width:3em;font-size:100%;position:absolute;top:0;left:-3.8em}.line-numbers-rows>span{counter-increment:linenumber;display:block}.line-numbers-rows>span:before{content:counter(linenumber);color:color-mix(in srgb, var(--foreground) 50%, transparent);text-align:right;padding-right:.8em;display:block}:root{--astro-code-color-text:var(--foreground);--astro-code-color-background:color-mix(in srgb, var(--foreground) 5%, transparent);--astro-code-foreground:var(--foreground);--astro-code-token-constant:var(--foreground);--astro-code-token-string:var(--foreground);--astro-code-token-comment:color-mix(in srgb, var(--foreground) 50%, transparent);--astro-code-token-keyword:var(--accent);--astro-code-token-parameter:var(--foreground);--astro-code-token-function:color-mix(in srgb, var(--accent) 70%, transparent);--astro-code-token-string-expression:var(--accent);--astro-code-token-punctuation:var(--foreground);--astro-code-token-link:var(--accent);--astro-code-token-namespace:var(--foreground);--astro-code-token-tag:var(--accent);--astro-code-token-selector:var(--accent);--astro-code-token-attribute:var(--foreground);--astro-code-token-attribute-name:color-mix(in srgb, var(--accent) 70%, transparent);--astro-code-token-variable:var(--foreground);--astro-code-token-literal:var(--foreground);--astro-code-token-number:var(--foreground);--astro-code-token-unit:var(--foreground);--astro-code-token-symbol:var(--foreground);--astro-code-token-regex:var(--accent);--astro-code-token-boolean:var(--accent);--astro-code-token-important:var(--accent);--code-border:color-mix(in srgb, var(--foreground) 25%, transparent);--comment:color-mix(in srgb, var(--foreground) 50%, transparent)}.astro-code{background:color-mix(in srgb, var(--foreground) 5%, transparent)!important;border:1px solid color-mix(in srgb, var(--foreground) 25%, transparent)!important;padding:20px 10px!important}.astro-code,.astro-code span,.astro-code span[style*=--astro-code-foreground],.astro-code span[style*=--astro-code-token-punctuation],.astro-code span[style*=--astro-code-token-constant],.astro-code span[style*=--astro-code-token-string],.astro-code span[style*=--astro-code-token-parameter],.astro-code span[style*=--astro-code-token-variable],.astro-code span[style*=--astro-code-token-literal],.astro-code span[style*=--astro-code-token-number]{color:var(--foreground)!important}.astro-code span[style*=--astro-code-token-keyword],.astro-code span[style*=--astro-code-token-string-expression],.astro-code span[style*=--astro-code-token-tag],.astro-code span[style*=--astro-code-token-selector],.astro-code span[style*=--astro-code-token-regex],.astro-code span[style*=--astro-code-token-boolean],.astro-code span[style*=--astro-code-token-important]{color:var(--accent)!important}.astro-code span[style*=--astro-code-token-function]{opacity:.7;color:var(--accent)!important}.astro-code span[style*=--astro-code-token-comment]{color:var(--comment)!important}.highlight-line{background:color-mix(in srgb, var(--accent) 10%, transparent);border-left:3px solid var(--accent);margin:0 -10px;padding:0 10px;display:block}.token.deleted{background:#ff66661a;color:#f66!important}.token.inserted{background:#66ff661a;color:#6f6!important}.post-content code,.page code{word-break:break-word}.code-toolbar{position:relative}.code-toolbar .toolbar{gap:5px;display:flex;position:absolute;top:10px;right:10px}.code-toolbar .toolbar-item button{border:1px solid var(--accent);color:var(--accent);font-size:calc(var(--font-size) * .8);cursor:pointer;background:0 0;padding:2px 8px;transition:all .15s linear}.code-toolbar .toolbar-item button:hover{background:color-mix(in srgb, var(--accent) 15%, transparent)}
