:root{color-scheme:dark light;--text-xs:.95rem;--text-sm:1rem;--text-base:1.1rem;--text-up:1.2rem;--text-lg:1.35rem;--text-xl:1.45rem;--text-2xl:1.8rem;--text-3xl:3rem;--space-xs:0.5rem;--space-sm:1rem;--space-md:1.5rem;--space-cw:1.8rem;--space-lg:2rem;--space-xl:3rem;--space-2xl:4rem;--space-4xl:8rem;--header-height:85px;--max-width:1280px;--radius:12px;--radius-large:50px;--border-width:1px;--transition-func:ease;--transition-duration:0.3s;--icon-size-ref:24px;--bg:#0f1117;--bg-shape:rgb(0 212 255 / 3%);--color-card:#1a1d29;--halo:#191d28;--footer-bg:#64748b;--icon-as-bg:#393f59;--color-headline:#e2e8f0;--color-text:#cbdbef;--color-highlight:#00d4ff;--border-color:#2d3748;--color-badge:#8e98bf;--shadow:rgb(0 0 0 / 40%);--input-bg:#0e1018;--input-color:var(--color-text);--header-bg:rgb(15 17 23 / 95%);--header-border:rgb(45 55 72 / 50%);--header-shadow:rgb(0 0 0 / 30%);--logo-border:#00d4ff;--menu-label-hover:rgb(26 29 41 / 100%);--menu-item-hover:rgb(0 212 255 / 10%);--menu-item-active:rgb(0 212 255 / 15%)}:root:where(.light,.light *){--bg:#f5f7fa;--bg-shape:rgb(131 126 127 / 9%);--color-card:#fff;--halo:#e8ecf1;--icon-as-bg:#eaecee;--color-headline:#1e293b;--color-text:#334155;--color-highlight:#d33765;--border-color:#cbd5e1;--color-badge:#64748b;--shadow:rgb(0 0 0 / 15%);--input-bg:var(--bg-shape);--input-color:#1e293b;--header-bg:rgb(255 255 255 / 98%);--header-border:rgb(203 213 225 / 80%);--header-shadow:rgb(15 23 42 / 8%);--logo-border:#d33765;--menu-label-hover:rgb(255 255 255 / 100%);--menu-item-hover:rgb(211 55 101 / 8%);--menu-item-active:rgb(211 55 101 / 12%)}[id]{scroll-margin-block-start:calc(var(--header-height) + var(--space-xl))}a{text-underline-offset:5px;text-decoration-thickness:1px;font-weight:600}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;clip-path:inset(50%);white-space:nowrap;border-width:0;overflow:hidden}.align-end{text-align:end}.hidden{display:none}.ltr\:hidden:where(:dir(ltr),[dir=ltr],[dir=ltr] *){display:none}#wtf{height:1px}section:not(:first-child){margin-block:var(--space-2xl)}.card{padding:var(--space-xs);padding-block-end:var(--space-md);border:1px solid var(--border-color);border-radius:var(--radius);box-shadow:0 10px 20px var(--shadow);transition:all var(--transition-duration)var(--transition-func);background-color:var(--color-card)}.card .text{padding-inline:var(--space-sm)}summary::marker{color:var(--color-highlight)}iframe{max-width:100%}::-ms-backdrop{margin:0;padding:0;border:0 solid;box-sizing:border-box}*,::after,::before,::backdrop{margin:0;padding:0;border:0 solid;box-sizing:border-box}html,:host{-webkit-font-smoothing:antialiased;font-family:var(--font-family);line-height:1.5;text-size-adjust:100%;tab-size:4;-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit;word-break:break-all;overflow-wrap:break-word;text-underline-offset:5px}b,strong{font-weight:700}code,kbd,samp,pre{font-family:var(--font-family-mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-size:1em}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse;display:block;overflow:auto}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{display:block}img,video{height:auto;max-width:100%}button,input,select,optgroup,textarea{border-radius:0;color:inherit;font:inherit;opacity:1;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;background-color:#0000}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}::placeholder{opacity:1}[hidden]:where(:not([hidden=until-found])){display:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:auto}.icon svg{width:1em;height:1em}*{font-synthesis:none}h1{font-size:var(--text-2xl);font-weight:700}h2{font-size:var(--text-xl);font-weight:700}h3,.sidebar h3,h4{font-size:var(--text-lg);font-weight:600}h1,h2,h3,.sidebar h3,h4{margin:0;text-wrap:balance;color:var(--color-headline);margin-bottom:var(--space-sm);background-color:var(--bg)}p{text-wrap:pretty;margin:var(--space-lg)0;font-size:var(--text-base);line-height:1.6}blockquote p:first-of-type::before{content:open-quote}blockquote p:last-of-type::after{content:close-quote}.post-main a:not(.go-next,.anchor-link,.link){color:var(--color-highlight)}.post-main:where(.light,.light *) a:not(.go-next,.anchor-link,.link){text-decoration:underline}h2 a.anchor-link,h3 a.anchor-link{margin-left:-1.25ch;padding-left:1.25ch;position:relative;text-decoration:none}h2 a.anchor-link:hover::before,h2 a.anchor-link:focus-visible::before,h3 a.anchor-link:hover::before,h3 a.anchor-link:focus-visible::before{content:"#";left:0;color:var(--color-highlight);position:absolute;user-select:none}@media(hover:hover){.post-main a:not(.go-next,.anchor-link,.link):hover{text-decoration:underline}.post-main:where(.light,.light *) a:not(.go-next,.anchor-link,.link):hover{text-decoration:none}}html,body{overflow-x:clip}body{margin:0;padding:0;background-color:var(--bg);color:var(--color-text);font-size:var(--text-base);line-height:1.6;font-weight:400;text-size-adjust:none;hanging-punctuation:allow-end;word-break:auto-phrase}body::before{position:fixed;top:0;left:0;z-index:-1;width:100vw;height:100vh;background:repeating-conic-gradient( var(--bg-shape) 0 12deg,transparent 12deg 360deg );opacity:.8;content:"";pointer-events:none}.container{width:100%;max-width:var(--max-width);margin:0 auto;padding:0;padding-inline:var(--space-md)}.site-header{position:sticky;top:0;z-index:100;box-shadow:0 2px 8px var(--header-shadow);background-color:var(--header-bg);backdrop-filter:blur(10px);padding-block:var(--space-md);margin-block-end:var(--space-2xl);border-block-end:1px solid var(--header-border)}.site-header .container{display:grid;align-items:center;grid-template-columns:auto 1fr auto auto;grid-template-areas:"logo nav-menu menu-ext dark-mode";gap:var(--space-xs)}.logo{grid-area:logo;justify-self:start}.logo a{display:flex;justify-content:center;align-items:center}.logo img{border:2px solid var(--logo-border);border-radius:50%;box-shadow:0 2px 8px var(--shadow)}.site-header.shrink{--header-height:70px;padding-block:.625rem}.site-header.shrink img{-webkit-transform:scale(.75)rotate(.01deg);transform:scale(.75)rotate(.01deg)}.nav-menu{grid-area:nav-menu}.menu{--icon-size-ref:20px;position:relative}.menu .dropdown{position:relative}.dropdown-toggle{display:flex;justify-content:center;align-items:center;min-width:120px;padding:var(--space-xs)var(--space-sm);border:1px solid var(--border-color);border-radius:var(--radius);color:var(--color-text);font-size:var(--text-base);gap:var(--space-xs);background-color:transparent;font-weight:600;cursor:pointer}.dropdown-toggle:hover,.dropdown-toggle:focus{background-color:var(--menu-label-hover);border-color:var(--color-highlight);outline:none}.dropdown-icon{flex-shrink:0}.dropdown:hover .dropdown-menu,.dropdown:focus-within .dropdown-menu{display:block}.dropdown-menu{position:absolute;top:100%;left:0;z-index:100;display:none;min-width:200px;margin:2px 0 0;padding:var(--space-xs);border:1px solid var(--border-color);border-radius:var(--radius);box-shadow:0 4px 16px var(--shadow);background-color:var(--color-card);list-style:none}.dropdown-item{margin:0}.dropdown-link{display:flex;align-items:center;padding:var(--space-xs)var(--space-sm);border-radius:calc(var(--radius) - 2px);color:var(--color-text);font-size:var(--text-base);gap:var(--space-sm);font-weight:400;text-decoration:none}.dropdown-link:hover,.dropdown-link:focus{background-color:var(--menu-item-hover);color:var(--color-highlight);outline:none}.dropdown-link.active{background-color:var(--menu-item-active);color:var(--color-highlight);font-weight:600}svg{width:var(--icon-size-ref);height:var(--icon-size-ref);flex-shrink:0}.link-text{flex:1}.translations .link{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-xs)}.menu-ext{grid-area:menu-ext}.menu-ext .dropdown-menu{right:0;left:auto}@media(hover:hover){.menu .dropdown-link:hover .link-text{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2px}}.theme-toggle{--icon-size-ref:18px;--offset:24px;grid-area:dark-mode;position:relative;display:flex;align-items:center;width:64px;height:34px;padding:6px;border:1px solid var(--border-color);border-radius:var(--radius-large);background-color:var(--color-card);cursor:pointer;gap:10px}.theme-toggle::after{position:absolute;top:4px;left:7px;content:"";width:var(--offset);height:var(--offset);background-color:var(--color-highlight);border-radius:50%}.theme-toggle:where(.dark,.dark *)::after{transform:translateX(var(--offset))}:is(.moon,.sun) .icon{display:block}:is(.moon,.sun) svg{width:var(--icon-size-ref);height:var(--icon-size-ref)}.dark .moon,.light .sun{display:flex}.skip-link{position:absolute;z-index:1000;width:1px;height:1px;max-width:25ch;margin:-1px;padding:0;text-align:center;clip-path:inset(50%);white-space:nowrap;border-width:0;overflow:hidden}.skip-link:focus{position:static;width:auto;height:auto;margin:0;padding:0;clip-path:none;white-space:normal;overflow:visible}.pagination{display:flex;justify-content:space-between;flex-wrap:wrap;border-style:dotted;border-top-width:1px;border-color:var(--border-color);padding-top:var(--space-md)}.prev a{margin-right:var(--space-md)}.next a{text-align:right;margin-left:var(--space-md)}.prev a.group,.next a.group{display:flex;text-decoration:none}.prev a.group:hover,.next a.group:hover{text-decoration:none}.arrow-left{margin-right:var(--space-md);color:var(--color-highlight)}.arrow-right{margin-left:var(--space-md);color:var(--color-highlight)}.prev .title,.next .title{display:flex;flex-direction:column}.cursus-title{margin-block:var(--space-2xl)0;background-color:transparent;text-shadow:2px 2px 3px var(--color-card)}.cursus-intro{font-size:var(--text-up);text-shadow:2px 2px 3px var(--color-card)}.cursus{max-width:65ch;margin:var(--space-md)0;list-style-type:none;border-inline-start:2px solid var(--color-highlight)}.cursus .item{position:relative;margin-block:var(--space-lg)}.cursus .inner{display:flex;width:100%}.cursus .card{padding-block:var(--space-sm)}.cursus .icon{margin-block-start:var(--space-md);display:flex;justify-content:center;align-items:center;width:var(--icon-size-ref);height:var(--icon-size-ref);border-radius:var(--radius);color:var(--bg);background-color:var(--color-highlight)}.cursus .content{padding-inline:var(--space-md);margin-top:0;flex:1}.cursus .item .header{display:flex;align-items:baseline;flex-wrap:wrap;gap:var(--space-xs);justify-content:space-between}.cursus .item .header{margin-block-end:var(--space-sm)}.cursus .content .title{background-color:var(--color-card);color:var(--color-headline);font-size:var(--text-xl);line-height:1.3;margin-block:0;padding-inline:var(--space-xs)}.cursus .content .subtitle{color:var(--color-badge);font-size:var(--text-sm);font-style:italic}.page .cursus .text{max-width:47ch}.cursus .content a{text-decoration:underline;opacity:.85}.cursus .content a:hover,.cursus .content a:focus{text-decoration:none}:where(:dir(ltr),[dir=ltr],[dir=ltr] *) .cursus .item .inner .icon{margin-left:calc(.25rem * -3)}:where(:dir(rtl),[dir=rtl],[dir=rtl] *) .cursus .item .inner .icon{margin-right:-79px}.badge{display:inline-block;margin:0;padding:2px 5px;border:1px solid var(--color-badge);border-radius:var(--radius);color:var(--color-badge);font-size:var(--text-xs)}.scrolltop{margin-block:var(--space-lg);text-align:center}.scrolltop .link{text-decoration:none}.scrolltop .icon{display:inline-block;padding:.5rem;border:0;border-radius:50%;color:var(--bg);line-height:var(--icon-size-ref);background-color:var(--color-highlight)}.scrolltop svg{width:var(--icon-size-ref);height:var(--icon-size-ref);transform:rotate(-180deg)}@media(hover:hover){.scrolltop .link:hover{text-decoration:none}}.site-footer{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;color:var(--footer-bg);text-align:center;opacity:.8;border-style:dotted;border-top-width:var(--border-width);border-color:var(--border-color);margin-block-start:var(--space-lg);padding-block:var(--space-xs)var(--space-lg);gap:var(--space-sm)}.copyright{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:var(--space-xs)}@media(width < 480px){:root{--header-height:70px}.site-header{padding-block:.625rem}.site-header .container{grid-template-columns:auto 1fr 1fr auto;grid-template-areas:"logo nav-menu menu-ext dark-mode";gap:var(--space-xs);justify-items:center}.site-header .logo{justify-self:start}.site-header img{transform:none;width:32px;height:32px}.nav-menu,.menu-ext{justify-self:center}.menu .dropdown-toggle{min-width:auto;padding:.375rem .5rem;font-size:var(--text-xs);gap:.25rem}.theme-toggle{--icon-size-ref:14px;width:52px;height:28px;gap:6px}.theme-toggle::after{top:4px;left:5px;width:18px;height:18px}.theme-toggle:where(.dark,.dark *)::after{transform:translateX(20px)}}@media(width >=480px){.site-header{padding-block:var(--space-sm)}.site-header .container{gap:var(--space-sm)}.menu .dropdown-toggle{padding:var(--space-xs)var(--space-sm)}}@media(width >=500px){.posts .listing{gap:var(--space-lg);grid-template-columns:repeat(auto-fit,minmax(300px,1fr))}.card .title-container,.posts .card .text{min-height:150px}}@media(width >=768px){:root{--header-height:97px}.site-header{padding-block:var(--space-lg)}.site-header .container{grid-template-columns:1fr auto auto auto;gap:var(--space-lg)}.nav-menu{justify-self:center}.menu-ext{justify-self:end}.container{padding-inline:var(--space-md)}.contact{padding:var(--space-xs)}}@media(width >=853px){.cursus .card{padding-inline:var(--space-md);padding-block:var(--space-md)}.cursus .text{padding-inline:var(--space-xs)}.cursus .icon{margin-block-start:var(--space-md)}.listing-item .summary{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;line-clamp:2;text-overflow:ellipsis;overflow:hidden}.post-sidebar a{max-width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.badge{margin-block:initial}}@media(width >=1024px){.author{--icon-size-ref:32px}.posts .card .title{min-height:61px}h1{font-size:var(--text-3xl);line-height:1.667em}h2{font-size:var(--text-2xl);line-height:1.3em}h3{font-size:var(--text-lg);line-height:1.3em}h4{font-size:var(--text-lg);line-height:1.3em}p{font-size:var(--text-up);line-height:1.6}.site-footer,.scrolltop{justify-content:flex-end;text-align:end}.single{grid-template-columns:1fr 280px;grid-template-areas:"main sidebar";column-gap:var(--space-xl)}.post-main{grid-area:main}.single .explain{padding:var(--space-md)}.post-sidebar{width:280px;grid-area:sidebar}.toc-toggle{display:none}.toc-wrapper{position:sticky;top:calc(var(--header-height) + var(--space-xl));right:unset;bottom:unset;left:unset;z-index:1;border-radius:var(--radius);transform:translateY(0)}.toc-title{padding-inline-start:var(--space-md)}.post-sidebar a{font-size:var(--text-sm)}.toc-toggle{display:none}.container{padding-inline:var(--space-md)}section:not(:first-child,.skills){margin-block:var(--space-4xl)}.cursus-title{margin-block-start:var(--space-4xl)}.contact .nojs{align-items:center}.contact .intro svg{width:calc(var(--icon-size-ref) * 15);height:calc(var(--icon-size-ref) * 15)}.contact .response{top:50%;left:0;max-height:100%;text-align:center}.contact .response-icon{display:inline-block;margin:0 auto;font-size:8rem}.contact-fields{display:flex;gap:1.5rem}.contact-fields .first{width:50%}textarea.input-field{min-height:280px}}@media(width >=1080px){.posts .listing{gap:var(--space-lg);grid-template-columns:repeat(3,320px)}}@media(width >=1280px){.container{padding-inline:calc(.25rem * 32)}}@media(max-width:349px){header,main,footer{padding:0;opacity:.1}#screen-size-overlay{display:block}}@keyframes bounce{0%,20%,50%,80%,100%{transform:translateY(0)}40%{transform:translateY(-30px)}60%{transform:translateY(-15px)}}@keyframes slideleft{0%,20%,50%,80%,100%{transform:translateX(0)}40%{transform:translateX(-30px)}60%{transform:translateX(-15px)}}@media(prefers-reduced-motion:no-preference){.smooth{scroll-behavior:smooth}.site-header,.logo img{transition:all .3s ease-out}.go-next{animation:bounce 2s ease infinite;animation-play-state:running}.go-next:hover{animation-play-state:paused}.go-back{animation:slideleft 2s ease infinite;animation-play-state:running}.go-back:hover{animation-play-state:paused}.overlay{transition:opacity .3s ease-out}.spinner{animation:spin 750ms linear infinite}@keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@media(hover:hover){.card:where(.light,.light *):hover img,.img:where(.light,.light *):hover{transition:all var(--transition-duration)var(--transition-func);transform:scale(1.05)}}.site-header .logo a{transition:transform .2s ease}.site-header .logo a:hover{transform:scale(1.05)}.dropdown-toggle{transition:all .2s ease}.dropdown-icon{transition:transform .2s ease}.dropdown:hover .dropdown-toggle .dropdown-icon,.dropdown:focus-within .dropdown-toggle .dropdown-icon{transform:rotate(180deg)}.dropdown-link{transition:all .15s ease}.theme-toggle::after{transition:all 400ms var(--transition-func)}}@media print{.single-metadata,.site-footer,.footer{display:none}}.overlay{position:fixed;inset:0;z-index:9998;background:rgb(0 0 0/85%)}.overlay.hidden{display:none}.overlay .message{position:fixed;top:50%;left:50%;width:100%;z-index:9999;transform:translate(-50%,-50%);margin:auto;padding:1rem;border-radius:8px;text-align:center}.overlay .message h2{margin:0 0 1rem;background-color:transparent;color:#d00}