*,:before,:after{box-sizing:border-box}@font-face{font-family:Libron;src:url(/vendor/libron/Libron-Regular.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Libron;src:url(/vendor/libron/Libron-Italic.woff2)format("woff2");font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:Libron;src:url(/vendor/libron/Libron-Bold.woff2)format("woff2");font-weight:700;font-style:normal;font-display:swap}html{--tf-margin:72px;--tf-max:1296px;--tf-gap:24px;--tf-bar-h:64px;--tf-body:"Libron", Georgia, serif;--tf-title:"Libron", Georgia, serif;--tf-column:min(100% - 2 * var(--tf-margin), var(--tf-max));scroll-padding-top:calc(var(--tf-bar-h) + 16px)}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important;animation:none!important}}body:has(>.tf-main){background:var(--tf-ground);color:var(--tf-ink);font:400 18px / 1.6 var(--tf-body);cursor:auto;margin:0}.tf-hidden{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.tf-skip{z-index:30;background:var(--tf-ink);color:var(--tf-ground);padding:8px 12px;position:absolute;top:8px;left:8px;transform:translateY(-200%)}.tf-skip:focus-visible{transform:none}.tf-main :focus-visible,.tf-bar :focus-visible,.tf-foot :focus-visible,.tf-skip:focus-visible{outline:2px solid var(--tf-ink);outline-offset:3px;box-shadow:none}.tf-main:focus,.tf-main [tabindex="-1"]:focus{outline:none}.tf-main a,.tf-foot a,.tf-bar a{color:inherit}.tf-bar{z-index:20;background:var(--tf-ground);border-bottom:1px solid var(--tf-line);position:sticky;top:0}.tf-bar-inner{width:var(--tf-column);height:var(--tf-bar-h);justify-content:space-between;align-items:center;gap:24px;margin-inline:auto;display:flex}.tf-wordmark{align-items:baseline;gap:10px;text-decoration:none;display:inline-flex}.tf-nav-list,.tf-menu-list,.tf-foot-list,.tf-index-list,.tf-list-rows{margin:0;padding:0;list-style:none}.tf-nav-list{align-items:center;gap:24px;display:flex}.tf-nav-link{align-items:center;gap:4px;min-height:44px;display:inline-flex}.tf-nav-link[aria-current]{text-decoration-thickness:2px}.tf-nav-contact{background:var(--tf-ink);padding:0 16px;text-decoration:none;color:var(--tf-ground)!important}.tf-arrow,.tf-menu-mark,.tf-media-play-mark,.tf-note-back-arrow{fill:none;stroke:currentColor;stroke-width:1.5px;stroke-linecap:square;flex:none;width:.72em;height:.72em}.tf-media-play-mark{fill:currentColor;stroke:none}.tf-menu-button{background:var(--tf-ink);min-height:44px;color:var(--tf-ground);font:inherit;cursor:pointer;border:0;align-items:center;gap:8px;padding:0 12px;display:none}.tf-menu-mark{width:1em;height:1em}.tf-menu-button[aria-expanded=true] .tf-menu-bars,.tf-menu-button[aria-expanded=false] .tf-menu-cross{display:none}.tf-menu{background:var(--tf-ground);border-bottom:1px solid var(--tf-line);position:absolute;top:100%;left:0;right:0}.tf-menu[hidden]{display:none}.tf-menu-link{min-height:52px;padding:0 var(--tf-margin);border-top:1px solid var(--tf-line);align-items:center;gap:6px;text-decoration:none;display:flex}.tf-main{width:var(--tf-column);flex-direction:column;gap:32px;margin-inline:auto;padding-bottom:48px;display:flex}.tf-card{background:var(--tf-face);border:1px solid var(--tf-line);padding:24px}.tf-card-title,.tf-section-title,.tf-index-title,.tf-contact-title{font-family:var(--tf-title);text-wrap:balance;margin:0;font-weight:700;line-height:1.1}p{text-wrap:pretty}.tf-section-head{border-bottom:1px solid var(--tf-line);justify-content:space-between;align-items:baseline;gap:16px;margin-bottom:24px;padding-bottom:12px;display:flex}.tf-section-title{font-size:2.2rem}.tf-section{padding-top:48px}.tf-caps{font-variant-caps:all-small-caps}.tf-hero{column-gap:var(--tf-gap);grid-template-columns:repeat(12,minmax(0,1fr));align-items:start;row-gap:32px;padding-top:64px;display:grid}.tf-hero-text{grid-column:1/span 7}.tf-name{font:700 4rem / 1 var(--tf-title);text-wrap:balance;margin:0 0 16px}.tf-roles{flex-wrap:wrap;align-items:center;gap:4px 14px;margin:0 0 24px;font-style:italic;display:flex}.tf-role-mark{background:currentColor;width:6px;height:6px}.tf-line{max-width:38em;margin:0 0 16px}.tf-invite{margin:0 0 32px;font-style:italic}.tf-hero-ways{flex-wrap:wrap;gap:0 24px;margin:0 0 32px;display:flex}.tf-hero-way{align-items:center;gap:6px;min-height:44px;display:inline-flex}.tf-actions{flex-wrap:wrap;align-items:center;gap:16px 28px;display:flex}.tf-action{align-items:center;gap:8px;min-height:48px;display:inline-flex}.tf-action-primary{background:var(--tf-ink);padding:0 20px;text-decoration:none;color:var(--tf-ground)!important}.tf-pair{gap:var(--tf-gap);grid-template-columns:repeat(12,minmax(0,1fr));display:grid}.tf-latest{flex-direction:column;grid-column:6/span 7;align-items:flex-start;gap:12px;display:flex}.tf-card-title{margin-bottom:12px;font-size:1.4rem}.tf-share-action{min-height:32px;color:inherit;font:inherit;cursor:pointer;background:0 0;border:0;align-items:center;gap:4px;padding:0 8px;font-size:.85em;text-decoration:underline;display:inline-flex}.tf-copy{display:inline-grid}.tf-copy-word,.tf-copy-done{grid-area:1/1}.tf-copy[data-state=ready] .tf-copy-done,.tf-copy[data-state=copied] .tf-copy-word{visibility:hidden}.tf-latest-meta{color:var(--tf-soft);font-variant-numeric:lining-nums tabular-nums;margin:0}.tf-meta-sep{vertical-align:middle;background:currentColor;width:4px;height:4px;margin:0 10px;display:inline-block}.tf-latest-head{margin:0;font-size:1.4rem;line-height:1.25}.tf-latest-summary{-webkit-line-clamp:4;line-clamp:4;-webkit-box-orient:vertical;margin:0;display:-webkit-box;overflow:hidden}.tf-latest-read{margin-top:auto}.tf-placeholder{font:italic 400 .72rem / 1.6 var(--tf-body);vertical-align:middle;border:1px solid;padding:0 6px;display:inline-block}.tf-empty{color:var(--tf-soft);margin:0;font-style:italic}.tf-projects-body{gap:var(--tf-gap);grid-template-columns:repeat(12,minmax(0,1fr));align-items:start;display:grid}.tf-index{top:calc(var(--tf-bar-h) + 24px);grid-column:1/span 3;position:sticky}.tf-cards{flex-direction:column;grid-column:4/span 9;gap:16px;display:flex}.tf-index-head{justify-content:space-between;align-items:baseline;margin-bottom:8px;display:flex}.tf-index-title{font-size:1.1rem}.tf-index-entry{border-top:1px solid var(--tf-line);padding:10px 0;text-decoration:none;display:grid}.tf-index-entry[aria-current=true] .tf-index-name{text-decoration:underline}.tf-index-what{color:var(--tf-soft);text-overflow:ellipsis;white-space:nowrap;font-size:.85em;font-style:italic;overflow:hidden}.tf-project{container-type:inline-size}.tf-project-head,.tf-internship-head{border-bottom:1px solid var(--tf-line);flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:4px 16px;margin-bottom:16px;padding-bottom:12px;display:flex}.tf-project-name,.tf-internship-name{font:700 1.5rem / 1.15 var(--tf-title);scroll-margin-top:calc(var(--tf-bar-h) + 24px);-webkit-hyphens:none;hyphens:none;margin:0}.tf-kind{color:var(--tf-soft);margin:0;font-size:.85em}.tf-project-body{grid-template-columns:minmax(0,1fr);gap:20px;display:grid}@container (width>=720px){.tf-project-body{grid-template-columns:5fr 4fr;align-items:start}}.tf-project-lead{margin:0 0 8px;font-weight:700}.tf-project-about{margin:0}.tf-rule{border:0;border-top:1px solid var(--tf-line);height:0;margin:16px 0}.tf-record{margin:0}.tf-record-row{grid-template-columns:5.5em minmax(0,1fr);gap:12px;padding:4px 0;display:grid}.tf-record-label{color:var(--tf-soft)}.tf-record-value,.tf-media{margin:0}.tf-media-frame{aspect-ratio:16/9;background:var(--tf-face);border:1px solid var(--tf-line);position:relative;overflow:hidden}.tf-media-poster,.tf-media-video{object-fit:cover;object-position:top;width:100%;height:100%;display:block}.tf-media-picture{height:100%;display:block}.tf-media-video{background:var(--t5-black);object-fit:contain;position:absolute;inset:0}.tf-media-video[hidden],.tf-media-play[hidden]{display:none}.tf-media-type{text-align:center;place-items:center;height:100%;padding:16px;display:grid}.tf-media-type-name{font:700 1.6rem / 1.1 var(--tf-title)}.tf-media-play,.tf-media-open{background:var(--tf-ink);min-width:48px;min-height:48px;font:inherit;cursor:pointer;border:0;justify-content:center;align-items:center;gap:8px;padding:0 12px;text-decoration:none;display:inline-flex;position:absolute;bottom:12px;left:12px;color:var(--tf-ground)!important}.tf-media-play .tf-media-play-mark{width:20px;height:20px}.tf-media-caption{color:var(--tf-soft);margin-top:8px;font-size:.85em;font-style:italic}.tf-internship-cards{gap:var(--tf-gap);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.tf-internship-role{flex-wrap:wrap;gap:0 12px;margin:0 0 12px;font-style:italic;display:flex}.tf-internship-months{color:var(--tf-soft)}.tf-internship-about{margin:0}.tf-contact{scroll-margin-top:calc(var(--tf-bar-h) + 24px);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px 32px;margin-top:32px;display:flex}.tf-contact-title{font-size:1.4rem}.tf-contact-invite{margin:4px 0 0;font-style:italic}.tf-contact-actions{flex-wrap:wrap;gap:8px 24px;display:flex}.tf-contact-action{align-items:center;gap:6px;min-height:44px;display:inline-flex}.tf-foot{border-top:1px solid var(--tf-line)}.tf-foot-inner{width:var(--tf-column);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 24px;margin-inline:auto;padding:20px 0 120px;font-size:.9rem;display:flex}.tf-foot-mark{margin:0}.tf-foot-list{gap:20px;display:flex}.tf-foot-link,.tf-away-words{align-items:center;gap:4px;display:inline-flex}.tf-foot-link{min-height:44px}.tf-main[data-page=blog] .tf-blog,.tf-main[data-page=post]>.tf-back,.tf-main[data-page=post]>.tf-post,.tf-main[data-page=post]>.tf-neighbours,.tf-main[data-page=missing]>.tf-missing{width:min(100%,848px);margin-inline:auto}.tf-blog,.tf-missing{padding-top:64px}.tf-page-title{font-size:2.6rem}.tf-list{padding:0}.tf-list[data-empty]{padding:24px}.tf-list-row{border-top:1px solid var(--tf-line);grid-template-columns:3em 9em minmax(0,1fr);gap:8px 16px;padding:20px 24px;display:grid;position:relative}.tf-list-row:first-child{border-top:0}.tf-list-number,.tf-list-date{color:var(--tf-soft);font-variant-numeric:lining-nums tabular-nums}.tf-list-head{margin:0 0 4px;font-size:1.15rem;line-height:1.3}.tf-list-link{text-decoration:none}.tf-list-link:after{content:"";position:absolute;inset:0}.tf-list-row:hover .tf-list-title,.tf-list-link:focus-visible .tf-list-title{text-decoration:underline}.tf-list-summary{color:var(--tf-soft);-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;margin:0;display:-webkit-box;overflow:hidden}.tf-back{align-self:flex-start;align-items:center;gap:8px;min-height:44px;margin-top:32px;display:inline-flex}.tf-main[data-page=missing] .tf-back{margin-top:16px}.tf-missing-title{font:700 2rem / 1.2 var(--tf-title);margin:0}.tf-post{padding:48px 24px}.tf-post-head,.tf-post-rule,.tf-post-body,.tf-share{width:min(100%,640px);margin-inline:auto}.tf-post-title-row{flex-wrap:wrap;align-items:center;gap:8px 16px;margin-bottom:16px;display:flex}.tf-post-title{font:700 2.6rem / 1.1 var(--tf-title);text-wrap:balance;margin:0}.tf-post-meta{flex-wrap:wrap;gap:4px 32px;margin:0;display:flex}.tf-post-meta-item{gap:8px;display:flex}.tf-post-meta-label{color:var(--tf-soft)}.tf-post-meta-value{font-variant-numeric:lining-nums tabular-nums;margin:0}.tf-post-body{font-variant-numeric:oldstyle-nums;font-size:19px;line-height:1.63;position:relative}.tf-post-body h2,.tf-post-body h3{font-family:var(--tf-title);scroll-margin-top:calc(var(--tf-bar-h) + 24px);text-wrap:balance;margin:2em 0 .5em;line-height:1.2}.tf-post-body p,.tf-post-body ul,.tf-post-body ol,.tf-post-body blockquote,.tf-post-body pre{margin:0 0 1em}.tf-post-body blockquote{border-left:1px solid var(--tf-line);padding-left:1em;font-style:italic}.tf-post-body pre{border:1px solid var(--tf-line);padding:16px;font-size:15px;line-height:1.6;overflow-x:auto}.tf-post-body code{font-family:ui-monospace,monospace;font-size:.92em}.tf-figure{margin:1.5em 0}.tf-figure img{border:1px solid var(--tf-line);width:100%;height:auto;display:block}.tf-figure-caption{color:var(--tf-soft);margin-top:8px;font-size:15px;font-style:italic;line-height:1.45}.tf-figure-number{font-style:normal;font-variant-caps:all-small-caps}.tf-note-ref{line-height:0}.tf-note-ref a{font-variant-numeric:lining-nums;scroll-margin-top:calc(var(--tf-bar-h) + 24px);padding:0 2px}.tf-notes{border-top:1px solid var(--tf-line);margin-top:2.5em;padding-top:1em;font-size:16px}.tf-notes .tf-notes-title{margin-top:0;font-size:1.1rem}.tf-note{scroll-margin-top:calc(var(--tf-bar-h) + 24px)}.tf-note-back{vertical-align:middle;padding:4px;display:inline-flex}.tf-share{border-top:1px solid var(--tf-line);flex-wrap:wrap;align-items:center;gap:8px 16px;margin-top:32px;padding-top:16px;display:flex}.tf-share-words{display:inline}.tf-neighbours{gap:var(--tf-gap);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.tf-neighbour{gap:4px;text-decoration:none;display:grid}.tf-neighbour-next{text-align:right;grid-column:2}.tf-neighbour-label{color:var(--tf-soft);align-items:center;gap:6px;display:inline-flex}.tf-neighbour-next .tf-neighbour-label{justify-content:flex-end}.tf-neighbour-title{font-weight:700}@media (width<=1199px){.tf-hero-text{grid-column:1/-1}}@media (width<=1023px){.tf-index{display:none}.tf-cards{grid-column:1/-1}}@media (width<=899px){.tf-latest{grid-column:1/-1}}@media (width<=699px){html{--tf-margin:16px;--tf-bar-h:56px}body:has(>.tf-main){font-size:17px}.tf-nav{display:none}.tf-menu-button{display:inline-flex}.tf-menu-link{padding:0 16px}.tf-name{font-size:2.75rem}.tf-hero{padding-top:40px}.tf-section-head{flex-direction:column;gap:4px}.tf-internship-cards,.tf-neighbours{grid-template-columns:minmax(0,1fr)}.tf-neighbour-next{grid-column:1}.tf-card{padding:16px}.tf-list{padding:0}.tf-list-row{grid-template-columns:auto minmax(0,1fr);padding:16px}.tf-list-entry{grid-column:1/-1}.tf-post{padding:28px 16px}.tf-post-title{font-size:2rem}.tf-post-body{font-size:18px}}@media print{.tf-bar,.tf-skip,.tf-contact,.tf-share,.tf-back,.tf-neighbours,.tf-foot,.tf-note-back{display:none!important}body:has(>.tf-main){font-size:11pt}.tf-main{width:auto}.tf-post{box-shadow:none;border:0;padding:0}.tf-post-body{font-size:11pt}.tf-post-body a[href^=http]:after{content:" (" attr(href) ")";overflow-wrap:anywhere;font-size:.85em}.tf-post-body h2,.tf-post-body h3,.tf-figure{break-inside:avoid;break-after:avoid}}@font-face{font-family:Workbench;src:url(/vendor/workbench/Workbench%5BBLED,SCAN%5D.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Cartisse;src:url(/vendor/cartisse/Cartisse-Italic.woff2)format("woff2");font-weight:400;font-style:italic;font-display:swap}:root{--t5-black:#0a0a0c;--t5-panel:#131318;--t5-cream:#f4eddd;--t5-soft:#b3ac9e;--t5-orange:#f3642a;--t5-hue-yellow:#f5f04c;--t5-hue-blue:#4687c9;--t5-hue-orange:#f56529;--t5-hue-green:#47b447;--t5-hue-amber:#f0b41e;--t5-hue-red:#eb2429;--t5-hue-red-text:#f04b50;--t5-hue-light-blue:#a6dce6;--t5-edge:#f4eddd1f;--t5-lit:#f4eddd08;--t5-grain:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.16 -0.06'/%3E%3C/filter%3E%3Crect width='180' height='180' filter='url(%23g)'/%3E%3C/svg%3E");--t5-line:28px;--t5-dots:"Workbench", "Libron", Georgia, serif;--t5-code:ui-monospace, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;--tf-margin:120px;--tf-max:1200px;--tf-gap:24px;--tf-bar-h:64px;--tf-ground:var(--t5-black);--tf-face:var(--t5-panel);--tf-ink:var(--t5-cream);--tf-soft:var(--t5-soft);--tf-line:transparent;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;background:var(--t5-black);scrollbar-color:var(--t5-soft) var(--t5-black);caret-color:var(--t5-cream);scroll-padding-top:calc(var(--tf-bar-h) + var(--t5-line))}:root[data-faces=loading] body{visibility:hidden}:root body:has(>.tf-main){color:var(--t5-cream);font:400 17px / 28px var(--tf-body);font-variant-numeric:oldstyle-nums proportional-nums;font-kerning:normal;background:0 0}:root body:has(>.tf-main):before{content:"";z-index:-1;background:var(--t5-grain);pointer-events:none;position:fixed;inset:0}:root body:has(>.tf-plain):before{content:"";z-index:-1;background:var(--t5-grain);pointer-events:none;position:fixed;inset:0}:root body:has(>.tf-plain){margin:0}:root .tf-plain{width:var(--tf-column);padding-block:calc(3 * var(--t5-line));color:var(--t5-cream);font:400 17px / 28px var(--tf-body);margin-inline:auto;display:block}:root .tf-plain h1{margin:0 0 var(--t5-line);font:700 34px / 42px var(--tf-title);text-wrap:balance}:root .tf-plain p,:root .tf-plain ul{max-width:34em;margin:0 0 var(--t5-line);padding:0;list-style:none}:root .tf-plain a{min-height:var(--t5-line);display:inline-block}:root .tf-plain :focus-visible{outline:2px solid var(--t5-cream);outline-offset:3px}:root ::selection{background:var(--t5-cream);color:var(--t5-black)}:root .tf-main :focus-visible,:root .tf-bar :focus-visible,:root .tf-foot :focus-visible,:root .tf-skip:focus-visible{outline:2px solid var(--t5-cream);outline-offset:3px}:root a,:root .tf-share-action{color:var(--t5-cream);text-decoration-line:underline;-webkit-text-decoration-color:var(--t5-cream);text-decoration-color:var(--t5-cream);text-underline-offset:3px;-webkit-text-decoration-skip-ink:auto;text-decoration-skip-ink:auto;text-decoration-thickness:1px;transition:text-decoration-color .24s,text-decoration-thickness .24s}:root a:hover,:root a:focus-visible,:root .tf-share-action:hover,:root .tf-share-action:focus-visible{color:var(--t5-orange);-webkit-text-decoration-color:var(--t5-orange);text-decoration-color:var(--t5-orange);text-decoration-thickness:2px}:root .tf-wordmark,:root .tf-action-primary,:root .tf-nav-contact,:root .tf-media-open,:root .tf-skip,:root .tf-index-entry,:root .tf-list-link,:root .tf-neighbour{text-decoration-line:none}:root .tf-list-title,:root .tf-neighbour-title{text-decoration-line:underline;-webkit-text-decoration-color:var(--t5-cream);text-decoration-color:var(--t5-cream);text-underline-offset:3px;-webkit-text-decoration-skip-ink:auto;text-decoration-skip-ink:auto;text-decoration-thickness:1px;transition:text-decoration-color .24s,text-decoration-thickness .24s}:root .tf-list-row:hover .tf-list-title,:root .tf-list-link:focus-visible .tf-list-title,:root .tf-neighbour:hover .tf-neighbour-title,:root .tf-neighbour:focus-visible .tf-neighbour-title{color:var(--t5-orange);-webkit-text-decoration-color:var(--t5-orange);text-decoration-color:var(--t5-orange);text-decoration-thickness:2px}:root .tf-skip,:root .tf-skip:is(:hover,:focus-visible){background:var(--t5-cream);color:var(--t5-black)}:root .tf-kind,:root .tf-record-label,:root .tf-post-meta-label,:root .tf-neighbour-label,:root .tf-placeholder,:root time{font-variant-numeric:lining-nums tabular-nums;letter-spacing:0;font-style:normal;font-variant-caps:all-small-caps}:root .tf-list-number,:root .tf-latest-meta,:root .tf-post-meta-value{font-variant-numeric:lining-nums tabular-nums}:root .tf-bar,:root .tf-card,:root .tf-section-head,:root .tf-index-entry,:root .tf-project-head,:root .tf-internship-head,:root .tf-list-row,:root .tf-share,:root .tf-notes,:root .tf-menu-link,:root .tf-placeholder,:root .tf-post-body blockquote,:root .tf-post-body pre{border:0}:root .tf-card{background:0 0;padding:0}:root .tf-rule{color:var(--t5-cream);display:none}:root .tf-post-title,:root .tf-missing-title{color:var(--t5-cream);font:700 34px / 42px var(--tf-title);text-wrap:balance;margin:0}:root .tf-card-title,:root .tf-contact-title,:root .tf-project-name,:root .tf-internship-name{font:700 24px / 35px var(--tf-title);text-wrap:balance;margin:0}:root .tf-section-title{color:var(--t5-cream);font:400 56px / 56px var(--t5-dots);font-variation-settings:"SCAN" -10, "BLED" 10;letter-spacing:0;text-transform:uppercase;margin:0}:root .tf-notes .tf-notes-title,:root .tf-latest-head,:root .tf-list-head{font:700 17px / 28px var(--tf-title);margin:0}:root .tf-bar{background:var(--t5-black);border-bottom:1px solid var(--t5-edge)}:root .tf-bar:before{content:"";background:var(--t5-grain);pointer-events:none;position:absolute;inset:0}:root .tf-bar-inner{position:relative}:root .tf-wordmark{gap:2px;font-weight:700}:root .tf-wordmark-tail{color:var(--t5-soft);font-synthesis:none;font:italic 400 15px/1 Cartisse,Georgia,serif}:root .tf-nav-list{gap:var(--t5-line)}:root .tf-nav-link,:root .tf-menu-link{text-decoration-line:none;transition:none}:root :is(.tf-nav-link,.tf-menu-link):is(:hover,:focus-visible){color:var(--t5-cream);text-decoration-line:underline;-webkit-text-decoration-color:var(--t5-orange);text-decoration-color:var(--t5-orange);text-decoration-thickness:1px}:root .tf-wordmark:focus-visible{color:var(--t5-cream)}:root .tf-wordmark:hover{color:var(--t5-orange)}:root .tf-nav-contact:is(:hover,:focus-visible){background:var(--t5-orange);text-decoration-line:none}:root :is(.tf-nav-link,.tf-menu-link)[aria-current]{color:var(--t5-orange)}:root .tf-nav-contact,:root .tf-action-primary{background:var(--t5-cream);min-height:42px;padding:0 21px;color:var(--t5-black)!important}:root .tf-nav-contact{min-height:40px;padding:0 16px}:root .tf-action-primary:hover,:root .tf-action-primary:focus-visible,:root .tf-media-play:hover,:root .tf-media-play:focus-visible,:root .tf-media-open:hover,:root .tf-media-open:focus-visible{background:var(--t5-orange)}:root .tf-menu-button{color:var(--t5-cream);background:0 0;padding:0 4px}:root .tf-menu-word{-webkit-text-decoration:underline 1px var(--t5-cream);text-decoration:underline 1px var(--t5-cream);text-underline-offset:3px}:root [data-scramble],:root [data-scramble] .t5-scramble{text-decoration-line:none}:root .t5-scramble{font-variant-ligatures:none;position:relative}:root [data-scrambling] .t5-scramble-words{opacity:0}:root .t5-scramble-shown{white-space:pre;text-align:left;position:absolute;inset:0;overflow:hidden}:root .t5-scramble:before,:root .t5-scramble:after{content:"";pointer-events:none;position:absolute;bottom:-2px;left:0;right:0}:root .t5-scramble:before{background:var(--t5-cream);height:1px}:root .tf-hero .tf-action-primary .t5-scramble:before,:root .tf-media-open .t5-scramble:before{content:none}:root .t5-scramble:after{transform-origin:100%;background:currentColor;height:2px;transition:transform .45s cubic-bezier(.625,.05,0,1);transform:scaleX(0)}:root [data-scramble]:is(:hover,:focus-visible,[data-pressed]) .t5-scramble:after{transform-origin:0;transform:scaleX(1)}:root [data-scramble=arrow] .tf-arrow{transition:transform .3s}:root [data-scramble=arrow]:is(:hover,:focus-visible,[data-pressed]) .tf-arrow{transform:rotate(-45deg)}:root [data-scramble=arrow]:is(:hover,:focus-visible,[data-pressed]) :is(.tf-arrow-back,.tf-arrow-up){transform:rotate(45deg)}:root [data-scramble][data-pressed]{color:var(--t5-orange)!important}:root .tf-hero .tf-action-primary[data-pressed]{background:var(--t5-orange);color:var(--t5-black)!important}:root .tf-menu-button:is(:hover,:focus-visible){color:var(--t5-orange)}@media (prefers-reduced-motion:reduce){:root .t5-scramble:after,:root [data-scramble=arrow] .tf-arrow{transition:none}:root [data-scramble=arrow]:is(:hover,:focus-visible,[data-pressed]) .tf-arrow,:root [data-scramble=arrow]:is(:hover,:focus-visible,[data-pressed]) :is(.tf-arrow-back,.tf-arrow-up){transform:none}}:root .tf-menu{background:var(--t5-black);border-bottom:1px solid var(--t5-edge)}:root .tf-menu-link{min-height:56px}:root .tf-main{gap:0;padding-bottom:0}:root .tf-hero{row-gap:calc(2 * var(--t5-line));padding-top:calc(6 * var(--t5-line) - var(--tf-bar-h))}:root .tf-name{font:700 84px / 84px var(--tf-title);text-wrap:balance;margin:0 0 14px}:root .tf-roles{margin:0 0 var(--t5-line);gap:0 12px}:root .tf-role-mark{background:var(--t5-cream);border-radius:50%;width:5px;height:5px}:root .tf-line{max-width:34em;margin:0 0 var(--t5-line)}:root .tf-invite{margin:0 0 var(--t5-line);color:var(--t5-cream)}:root .tf-hero-ways{gap:0 var(--t5-line);margin:0 0 var(--t5-line)}:root .tf-hero-way{min-height:42px}:root .tf-actions{gap:14px var(--t5-line)}:root .tf-action{min-height:42px}:root .tf-pair,:root .tf-section,:root .tf-contact{margin-top:calc(3 * var(--t5-line));padding-top:calc(var(--t5-line) - 1px);border-top:1px solid var(--t5-edge)}:root .tf-section-head{margin-bottom:calc(2 * var(--t5-line));padding:0}:root .tf-empty{color:var(--t5-soft)}:root .tf-latest{grid-column:1/span 7;gap:0}@media (width>=1200px){:root .tf-main[data-page=home]{column-gap:var(--tf-gap);grid-template-columns:repeat(12,minmax(0,1fr));display:grid}:root .tf-main[data-page=home]>*{grid-column:1/-1}:root .tf-main[data-page=home]>.tf-hero{grid-area:1/1/auto/span 7}:root .tf-main[data-page=home] .tf-hero-text{grid-column:1/-1}:root .tf-main[data-page=home]>.tf-pair{border-top:0;grid-area:1/9/auto/span 4;align-self:end;margin-top:0;padding-top:0;display:block}}:root .tf-card-title{margin-bottom:var(--t5-line)}:root .tf-latest-meta{color:var(--t5-soft);margin:0 0 7px}:root .tf-meta-sep{background:var(--t5-cream);border-radius:50%;width:4px;height:4px;margin:0 10px}:root .tf-latest-summary{max-width:440px;margin:0 0 var(--t5-line);display:block}:root .tf-action-primary.tf-latest-read,:root .tf-action-primary.tf-latest-read:hover,:root .tf-action-primary.tf-latest-read:focus-visible{background:0 0;min-height:28px;margin-top:0;padding:0}:root .tf-action-primary.tf-latest-read{color:var(--t5-cream)!important}:root .tf-action-primary.tf-latest-read:hover,:root .tf-action-primary.tf-latest-read:focus-visible,:root .tf-action-primary.tf-latest-read[data-pressed]{color:var(--t5-orange)!important}:root .tf-placeholder{color:var(--t5-soft);font-family:inherit;font-size:17px;font-weight:400;line-height:inherit;vertical-align:baseline;padding:0}:root [data-hue=yellow]{--t5-hue:var(--t5-hue-yellow)}:root [data-hue=blue]{--t5-hue:var(--t5-hue-blue)}:root [data-hue=orange]{--t5-hue:var(--t5-hue-orange)}:root [data-hue=green]{--t5-hue:var(--t5-hue-green)}:root [data-hue=amber]{--t5-hue:var(--t5-hue-amber)}:root [data-hue=red]{--t5-hue:var(--t5-hue-red)}:root [data-hue=light-blue]{--t5-hue:var(--t5-hue-light-blue)}@media (width>=1024px){:root .tf-projects-body{grid-template-columns:264px minmax(0,1fr)}:root .tf-index{grid-column:1}:root .tf-cards{grid-column:2}}:root .tf-index{top:calc(var(--tf-bar-h) + var(--t5-line));border:1px solid var(--t5-edge);background:var(--t5-panel);padding:0}:root .tf-index-head{border-bottom:1px solid var(--t5-edge);align-items:center;min-height:34px;margin:0;padding:0 12px}:root .tf-index-title{color:var(--t5-cream);font:700 11px / 13.2px var(--tf-title);letter-spacing:.08em;text-transform:uppercase;margin:0}:root .tf-index-list{padding:4.8px}:root .tf-index-entry{color:var(--t5-cream);border:1px solid #0000;gap:0;padding:6.4px 8.8px}:root .tf-index-entry[aria-current=true]{border-color:var(--t5-hue);background:var(--t5-lit)}:root .tf-index-name{font:700 14px / 18.9px var(--tf-title);text-wrap:pretty}:root .tf-index-entry[aria-current=true] .tf-index-name{color:var(--t5-hue);text-decoration:none}:root .tf-index-entry[data-hue=red][aria-current=true] .tf-index-name{color:var(--t5-hue-red-text)}:root .tf-index-entry:hover,:root .tf-index-entry:focus-visible{color:var(--t5-cream)}:root .tf-index-entry:hover .tf-index-name,:root .tf-index-entry:focus-visible .tf-index-name{text-underline-offset:3px;text-decoration:underline;text-decoration-thickness:1px}:root .tf-index-what{color:var(--t5-soft);font:400 12px / 16.2px var(--tf-body);font-style:normal}:root .tf-cards{gap:calc(2 * var(--t5-line))}:root .tf-projects{container:t5-projects/inline-size}@media (width>=1024px){:root .tf-cards{grid-auto-rows:1fr;display:grid}}@media (width<=1023px){@container t5-projects (width>=658px){:root .tf-cards{grid-auto-rows:1fr;display:grid}}}:root .tf-project{padding:var(--t5-line) var(--t5-line) calc(var(--t5-line) + 7px);border:1px solid var(--t5-edge);background:var(--t5-panel)}:root .tf-project-head{align-items:last baseline;gap:0 var(--t5-line);margin-bottom:var(--t5-line);border-bottom:1px solid var(--t5-edge);padding:0 0 14px}:root .tf-internship-head{margin-bottom:var(--t5-line);flex-direction:column-reverse;align-items:flex-start;gap:0;padding:0}:root .tf-internship-head .tf-kind{text-align:left}:root .tf-project-name{color:var(--t5-cream)}:root .tf-project-name,:root .tf-internship-name{scroll-margin-top:calc(var(--tf-bar-h) + var(--t5-line))}:root .tf-kind{color:var(--t5-soft);text-align:right;font-size:1em}:root .tf-project-body{gap:var(--t5-line) var(--t5-line)}@container (width>=600px){:root .tf-project-body{grid-template-columns:9fr 10fr;align-items:start}}:root .tf-project-lead{text-wrap:balance;margin:0 0 14px}:root .tf-internship-about{max-width:440px}:root .tf-project-about{margin:0}:root .tf-project .tf-rule{border-top:1px solid var(--t5-edge);margin:21px 0 14px;display:block}:root .tf-record-row{grid-template-columns:5.5em minmax(0,1fr);gap:0 12px;padding:0 0 7px}:root .tf-record-label{color:var(--t5-soft)}:root .tf-record-list{font-family:var(--t5-code);font-variant-numeric:normal;font-size:15px}:root .tf-record-value,:root .tf-media-caption{text-wrap:pretty}:root .tf-about-rows{max-width:44rem}:root .tf-about-rows .tf-record-row{grid-template-columns:9em minmax(0,1fr);padding-bottom:14px}@media (width<=699px){:root .tf-about-rows .tf-record-row{grid-template-columns:minmax(0,1fr)}}:root .tf-media-frame{background:var(--t5-black);border:1px solid var(--t5-edge)}:root .tf-media[data-media=picture] .tf-media-frame{overflow:visible}:root .tf-media[data-shape="16-10"] .tf-media-frame{aspect-ratio:16/10}:root .tf-media[data-media=picture] .tf-media-poster{object-fit:contain}:root .tf-media-frame:has(>.tf-media-picture:is(:hover,:focus-visible)){border-color:var(--t5-orange)}:root .tf-media-caption{color:var(--t5-soft);margin-top:7px;font-size:1em}:root .tf-media-type{padding:var(--t5-line);text-align:left;place-items:end start}:root .tf-media-type-name{color:var(--t5-cream);font:700 24px / 35px var(--tf-title);text-wrap:balance}:root .tf-media-play,:root .tf-media-open{background:var(--t5-cream);min-height:48px;color:var(--t5-black);bottom:14px;left:14px}:root .tf-media-play{width:48px;padding:0}@media (width>=1200px){:root .tf-project-body:has(>.tf-media[data-shape="16-10"]){grid-template-columns:minmax(0,1fr)}:root .tf-media[data-shape="16-10"]{max-width:min(38rem,100%)}:root .tf-cards{grid-template-rows:auto}}:root .tf-internship-cards{gap:calc(2 * var(--t5-line)) var(--tf-gap)}:root .tf-internship-role{margin:0 0 var(--t5-line);gap:0 12px}:root .tf-internship-months{color:var(--t5-soft);font-style:normal}:root .tf-contact{gap:var(--t5-line);align-items:flex-start}:root .tf-contact-invite{margin:0}:root .tf-contact-actions{gap:0 var(--t5-line)}:root .tf-contact-action{min-height:35px}:root .tf-foot{margin-top:calc(3 * var(--t5-line));border-top:0}:root .tf-foot-inner{padding:calc(var(--t5-line) - 1px) 0 calc(3 * var(--t5-line));border-top:1px solid var(--t5-edge);font-size:1em}:root .tf-foot-mark{color:var(--t5-soft)}:root .tf-foot-list{gap:var(--t5-line)}:root .tf-main[data-page=blog] .tf-blog,:root .tf-main[data-page=missing]>.tf-missing{width:min(100%,792px);padding-top:calc(6 * var(--t5-line) - var(--tf-bar-h))}:root .tf-list[data-empty]{padding:0}:root .tf-list-row{padding:0 0 var(--t5-line);grid-template-columns:20px 104px minmax(0,1fr);align-items:baseline;gap:0 16px}:root .tf-list-number,:root .tf-list-date{color:var(--t5-soft);font-size:14px}:root .tf-list-head{font-size:24px;line-height:35px}:root .tf-list-summary{color:var(--t5-cream);display:block}:root .tf-main[data-page=post]>.tf-back,:root .tf-main[data-page=post]>.tf-post,:root .tf-main[data-page=post]>.tf-neighbours{width:min(100%,640px)}:root .tf-back{min-height:28px;margin-top:calc(2 * var(--t5-line))}:root .tf-main[data-page=missing] .tf-back{margin-top:var(--t5-line)}:root .tf-post{padding:calc(2 * var(--t5-line)) 0 0}:root .tf-post-title-row{gap:0 14px;margin-bottom:7px}:root .tf-post-meta{gap:0 var(--t5-line);margin-bottom:calc(2 * var(--t5-line))}:root .tf-post-meta-label{color:var(--t5-soft)}:root .tf-post-body{font-size:19px;line-height:35px}:root .tf-post-body p,:root .tf-post-body ul,:root .tf-post-body ol,:root .tf-post-body blockquote,:root .tf-post-body pre{margin:0 0 35px}:root .tf-post-body h2,:root .tf-post-body h3{color:var(--t5-cream);font:700 24px / 35px var(--tf-title);margin:70px 0 0}:root .tf-post-body h3{font-size:19px}:root .tf-post-body blockquote{padding-left:var(--t5-line)}:root .tf-post-body pre{padding:0 0 0 var(--t5-line);font-family:var(--t5-code);font-size:16px;line-height:28px}:root .tf-post-body code{font-family:var(--t5-code);font-variant-numeric:normal;font-size:.9em}:root .tf-post-body pre code{font-size:1em}:root .tf-figure{margin:0 0 35px}:root .tf-figure img{border:1px solid var(--t5-edge)}:root .tf-open{text-decoration-line:none;display:block}:root .tf-open:is(:hover,:focus-visible) img{border-color:var(--t5-orange)}:root .tf-self{text-decoration-line:none}:root .tf-self:is(:hover,:focus-visible){text-decoration-line:underline}:root .tf-figure-caption{color:var(--t5-soft);margin-top:7px;font-size:17px;line-height:28px}:root .tf-note-ref a{text-underline-offset:2px}:root .tf-notes{margin-top:70px;padding-top:0;font-size:17px;line-height:28px}:root .tf-notes .tf-notes-title{margin-bottom:14px}:root .tf-notes p{margin:0}:root .tf-notes li+li{margin-top:14px}@media screen{:root .tf-margined{--tf-note-gap:var(--t5-line);--tf-note-width:clamp(160px, calc((100vw - 640px) / 2 - var(--tf-note-gap) - var(--tf-margin)), 252px);min-height:var(--tf-notes-room,0)}:root .tf-margined .tf-notes{margin:0}:root .tf-margined .tf-notes .tf-notes-title{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;margin:0;position:absolute;overflow:hidden}:root .tf-margined .tf-notes-list{margin:0;padding:0;list-style-position:inside}:root .tf-margined .tf-notes-list .tf-note{left:calc(-1 * (var(--tf-note-width) + var(--tf-note-gap)));width:var(--tf-note-width);color:var(--t5-soft);margin:0;position:absolute}:root .tf-margined .tf-note>p:first-child{display:inline}}:root .tf-share{gap:0 var(--t5-line);margin-top:calc(2 * var(--t5-line));padding-top:0}:root .tf-share-action{min-height:28px;padding:0;font-size:1em}:root .tf-neighbours{margin-top:calc(2 * var(--t5-line))}:root .tf-neighbour{gap:0}:root .tf-neighbour-label{color:var(--t5-soft)}@media (width<=1199px){:root{--tf-margin:48px}}@media (width<=899px){:root .tf-latest{grid-column:1/-1}}@media (width<=699px){:root{--tf-margin:20px;--tf-bar-h:56px}:root body:has(>.tf-main){font-size:17px}:root .tf-hero{padding-top:calc(2 * var(--t5-line))}:root .tf-post-title,:root .tf-missing-title,:root .tf-plain h1{font-size:28px;line-height:35px}:root .tf-plain{padding-block:calc(2 * var(--t5-line))}:root .tf-name{font-size:min(42px, calc((100vw - 2 * var(--tf-margin)) * .12));margin-bottom:7px;line-height:calc(1em + 7px)}:root .tf-section-title{font-size:40px;line-height:42px}:root .tf-card-title,:root .tf-contact-title,:root .tf-project-name,:root .tf-internship-name,:root .tf-media-type-name{font-size:20px;line-height:28px}:root .tf-roles{flex-direction:column;align-items:flex-start}:root .tf-role-mark{display:none}:root .tf-actions{flex-direction:column;align-items:stretch}:root .tf-action-primary{justify-content:center}:root .tf-action-second{align-self:flex-start}:root .tf-menu-link{padding:0 20px}:root .tf-section-head{margin-bottom:var(--t5-line)}:root .tf-project{padding:21px 20px var(--t5-line)}:root .tf-project-head{flex-direction:column;align-items:flex-start}:root .tf-kind{text-align:left}:root .tf-main[data-page=blog] .tf-blog,:root .tf-main[data-page=missing]>.tf-missing{padding-top:calc(2 * var(--t5-line))}:root .tf-list-row{grid-template-columns:auto auto minmax(0,1fr);gap:0 12px}:root .tf-list-head .tf-placeholder{width:fit-content;display:block}:root .tf-post-body{font-size:18px;line-height:28px}:root .tf-post-body p,:root .tf-post-body ul,:root .tf-post-body ol,:root .tf-post-body blockquote,:root .tf-post-body pre,:root .tf-figure{margin-bottom:var(--t5-line)}:root .tf-post-body h2{margin-top:calc(2 * var(--t5-line));font-size:20px;line-height:28px}:root .tf-post-body pre{padding-left:14px;font-size:15px;line-height:24px}}@media print{:root{color:var(--t5-black);background:0 0}:root body:has(>.tf-main){color:var(--t5-black);background:0 0}:root a,:root :is(.tf-post-title,.tf-post-body h2,.tf-post-body h3,.tf-post-meta-label,.tf-figure-caption,.tf-placeholder){color:var(--t5-black)}:root body:has(>.tf-main):before{display:none}:root .tf-post{padding:0}:root .tf-post-body{font-size:11pt;line-height:1.6}}
