/*
  PaperMod v7
  License: MIT https://github.com/adityatelange/hugo-PaperMod/blob/master/LICENSE
  Copyright (c) 2020 nanxiaobei and adityatelange
  Copyright (c) 2021-2024 adityatelange
*/
:root{--gap:24px;--content-gap:20px;--nav-width:1024px;--main-width:720px;--header-height:60px;--footer-height:60px;--radius:8px;--theme:rgb(255, 255, 255);--entry:rgb(255, 255, 255);--primary:rgb(30, 30, 30);--secondary:rgb(108, 108, 108);--tertiary:rgb(214, 214, 214);--content:rgb(31, 31, 31);--code-block-bg:rgb(28, 29, 33);--code-bg:rgb(245, 245, 245);--border:rgb(238, 238, 238)}.dark{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--code-block-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51)}.list{background:var(--code-bg)}.dark.list{background:var(--theme)}*,::after,::before{box-sizing:border-box}html{-webkit-tap-highlight-color:transparent;overflow-y:scroll;-webkit-text-size-adjust:100%;text-size-adjust:100%}a,button,body,h1,h2,h3,h4,h5,h6{color:var(--primary)}body{font-family:-apple-system,BlinkMacSystemFont,segoe ui,Roboto,Oxygen,Ubuntu,Cantarell,open sans,helvetica neue,sans-serif;font-size:18px;line-height:1.6;word-break:break-word;background:var(--theme)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section,table{display:block}h1,h2,h3,h4,h5,h6{line-height:1.2}h1,h2,h3,h4,h5,h6,p{margin-top:0;margin-bottom:0}ul{padding:0}a{text-decoration:none}body,figure,ul{margin:0}table{width:100%;border-collapse:collapse;border-spacing:0;overflow-x:auto;word-break:keep-all}button,input,textarea{padding:0;font:inherit;background:0 0;border:0}input,textarea{outline:0}button,input[type=button],input[type=submit]{cursor:pointer}input:-webkit-autofill,textarea:-webkit-autofill{box-shadow:0 0 0 50px var(--theme)inset}img{display:block;max-width:100%}.not-found{position:absolute;left:0;right:0;display:flex;align-items:center;justify-content:center;height:80%;font-size:160px;font-weight:700}.archive-posts{width:100%;font-size:16px}.archive-year{margin-top:40px}.archive-year:not(:last-of-type){border-bottom:2px solid var(--border)}.archive-month{display:flex;align-items:flex-start;padding:10px 0}.archive-month-header{margin:25px 0;width:200px}.archive-month:not(:last-of-type){border-bottom:1px solid var(--border)}.archive-entry{position:relative;padding:5px;margin:10px 0}.archive-entry-title{margin:5px 0;font-weight:400}.archive-count,.archive-meta{color:var(--secondary);font-size:14px}.footer,.top-link{font-size:12px;color:var(--secondary)}.footer{max-width:calc(var(--main-width) + var(--gap) * 2);margin:auto;padding:calc((var(--footer-height) - var(--gap))/2)var(--gap);text-align:center;line-height:24px}.footer span{margin-inline-start:1px;margin-inline-end:1px}.footer span:last-child{white-space:nowrap}.footer a{color:inherit;border-bottom:1px solid var(--secondary)}.footer a:hover{border-bottom:1px solid var(--primary)}.top-link{visibility:hidden;position:fixed;bottom:60px;right:30px;z-index:99;background:var(--tertiary);width:42px;height:42px;padding:12px;border-radius:64px;transition:visibility .5s,opacity .8s linear}.top-link,.top-link svg{filter:drop-shadow(0 0 0 var(--theme))}.footer a:hover,.top-link:hover{color:var(--primary)}.top-link:focus,#theme-toggle:focus{outline:0}.nav{display:flex;flex-wrap:wrap;justify-content:space-between;max-width:calc(var(--nav-width) + var(--gap) * 2);margin-inline-start:auto;margin-inline-end:auto;line-height:var(--header-height)}.nav a{display:block}.logo,#menu{display:flex;margin:auto var(--gap)}.logo{flex-wrap:inherit}.logo a{font-size:24px;font-weight:700}.logo a img,.logo a svg{display:inline;vertical-align:middle;pointer-events:none;transform:translate(0,-10%);border-radius:6px;margin-inline-end:8px}button#theme-toggle{font-size:26px;margin:auto 4px}body.dark #moon{vertical-align:middle;display:none}body:not(.dark) #sun{display:none}#menu{list-style:none;word-break:keep-all;overflow-x:auto;white-space:nowrap}#menu li+li{margin-inline-start:var(--gap)}#menu a{font-size:16px}#menu .active{font-weight:500;border-bottom:2px solid}.lang-switch li,.lang-switch ul,.logo-switches{display:inline-flex;margin:auto 4px}.lang-switch{display:flex;flex-wrap:inherit}.lang-switch a{margin:auto 3px;font-size:16px;font-weight:500}.logo-switches{flex-wrap:inherit}.main{position:relative;min-height:calc(100vh - var(--header-height) - var(--footer-height));max-width:calc(var(--main-width) + var(--gap) * 2);margin:auto;padding:var(--gap)}.page-header h1{font-size:40px}.pagination{display:flex}.pagination a{color:var(--theme);font-size:13px;line-height:36px;background:var(--primary);border-radius:calc(36px/2);padding:0 16px}.pagination .next{margin-inline-start:auto}.social-icons a{display:inline-flex;padding:10px}.social-icons a svg{height:26px;width:26px}code{direction:ltr}div.highlight,pre{position:relative}.copy-code{display:none;position:absolute;top:4px;right:4px;color:rgba(255,255,255,.8);background:rgba(78,78,78,.8);border-radius:var(--radius);padding:0 5px;font-size:14px;user-select:none}div.highlight:hover .copy-code,pre:hover .copy-code{display:block}.first-entry{position:relative;display:flex;flex-direction:column;justify-content:center;min-height:320px;margin:var(--gap)0 calc(var(--gap) * 2)}.first-entry .entry-header{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3}.first-entry .entry-header h1{font-size:34px;line-height:1.3}.first-entry .entry-content{margin:14px 0;font-size:16px;-webkit-line-clamp:3}.first-entry .entry-footer{font-size:14px}.home-info .entry-content{-webkit-line-clamp:unset}.post-entry{position:relative;margin-bottom:var(--gap);padding:var(--gap);background:var(--entry);border-radius:var(--radius);transition:transform .1s;border:1px solid var(--border)}.post-entry:active{transform:scale(.96)}.tag-entry .entry-cover{display:none}.entry-header h2{font-size:24px;line-height:1.3}.entry-content{margin:8px 0;color:var(--secondary);font-size:14px;line-height:1.6;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.entry-footer{color:var(--secondary);font-size:13px}.entry-link{position:absolute;left:0;right:0;top:0;bottom:0}.entry-hint{color:var(--secondary)}.entry-hint-parent{display:flex;justify-content:space-between}.entry-cover{font-size:14px;margin-bottom:var(--gap);text-align:center}.entry-cover img{border-radius:var(--radius);pointer-events:none;width:100%;height:auto}.entry-cover a{color:var(--secondary);box-shadow:0 1px 0 var(--primary)}.page-header,.post-header{margin:24px auto var(--content-gap)}.post-title{margin-bottom:2px;font-size:40px}.post-description{margin-top:10px;margin-bottom:5px}.post-meta,.breadcrumbs{color:var(--secondary);font-size:14px;display:flex;flex-wrap:wrap}.post-meta .i18n_list li{display:inline-flex;list-style:none;margin:auto 3px;box-shadow:0 1px 0 var(--secondary)}.breadcrumbs a{font-size:16px}.post-content{color:var(--content)}.post-content h3,.post-content h4,.post-content h5,.post-content h6{margin:24px 0 16px}.post-content h1{margin:40px auto 32px;font-size:40px}.post-content h2{margin:32px auto 24px;font-size:32px}.post-content h3{font-size:24px}.post-content h4{font-size:16px}.post-content h5{font-size:14px}.post-content h6{font-size:12px}.post-content a,.toc a:hover{box-shadow:0 1px;box-decoration-break:clone;-webkit-box-decoration-break:clone}.post-content a code{margin:auto 0;border-radius:0;box-shadow:0 -1px 0 var(--primary)inset}.post-content del{text-decoration:line-through}.post-content dl,.post-content ol,.post-content p,.post-content figure,.post-content ul{margin-bottom:var(--content-gap)}.post-content ol,.post-content ul{padding-inline-start:20px}.post-content li{margin-top:5px}.post-content li p{margin-bottom:0}.post-content dl{display:flex;flex-wrap:wrap;margin:0}.post-content dt{width:25%;font-weight:700}.post-content dd{width:75%;margin-inline-start:0;padding-inline-start:10px}.post-content dd~dd,.post-content dt~dt{margin-top:10px}.post-content table{margin-bottom:var(--content-gap)}.post-content table th,.post-content table:not(.highlighttable,.highlight table,.gist .highlight) td{min-width:80px;padding:8px 5px;line-height:1.5;border-bottom:1px solid var(--border)}.post-content table th{text-align:start}.post-content table:not(.highlighttable) td code:only-child{margin:auto 0}.post-content .highlight table{border-radius:var(--radius)}.post-content .highlight:not(table){margin:10px auto;background:var(--code-block-bg)!important;border-radius:var(--radius);direction:ltr}.post-content li>.highlight{margin-inline-end:0}.post-content ul pre{margin-inline-start:calc(var(--gap) * -2)}.post-content .highlight pre{margin:0}.post-content .highlighttable{table-layout:fixed}.post-content .highlighttable td:first-child{width:40px}.post-content .highlighttable td .linenodiv{padding-inline-end:0!important}.post-content .highlighttable td .highlight,.post-content .highlighttable td .linenodiv pre{margin-bottom:0}.post-content code{margin:auto 4px;padding:4px 6px;font-size:.78em;line-height:1.5;background:var(--code-bg);border-radius:2px}.post-content pre code{display:grid;margin:auto 0;padding:10px;color:#d5d5d6;background:var(--code-block-bg)!important;border-radius:var(--radius);overflow-x:auto;word-break:break-all}.post-content blockquote{margin:20px 0;padding:0 14px;border-inline-start:3px solid var(--primary)}.post-content hr{margin:30px 0;height:2px;background:var(--tertiary);border:0}.post-content iframe{max-width:100%}.post-content img{border-radius:4px;margin:1rem 0}.post-content img[src*="#center"]{margin:1rem auto}.post-content figure.align-center{text-align:center}.post-content figure>figcaption{color:var(--primary);font-size:16px;font-weight:700;margin:8px 0 16px}.post-content figure>figcaption>p{color:var(--secondary);font-size:14px;font-weight:400}.toc{margin:0 2px 40px;border:1px solid var(--border);background:var(--code-bg);border-radius:var(--radius);padding:.4em}.dark .toc{background:var(--entry)}.toc details summary{cursor:zoom-in;margin-inline-start:20px}.toc details[open] summary{cursor:zoom-out}.toc .details{display:inline;font-weight:500}.toc .inner{margin:0 20px;padding:10px 20px}.toc li ul{margin-inline-start:var(--gap)}.toc summary:focus{outline:0}.post-footer{margin-top:56px}.post-footer>*{margin-bottom:10px}.post-tags{display:flex;flex-wrap:wrap;gap:10px}.post-tags li{display:inline-block}.post-tags a,.share-buttons,.paginav{border-radius:var(--radius);background:var(--code-bg);border:1px solid var(--border)}.post-tags a{display:block;padding:0 14px;color:var(--secondary);font-size:14px;line-height:34px;background:var(--code-bg)}.post-tags a:hover,.paginav a:hover{background:var(--border)}.share-buttons{padding:10px;display:flex;justify-content:center;overflow-x:auto;gap:10px}.share-buttons li,.share-buttons a{display:inline-flex}.share-buttons a:not(:last-of-type){margin-inline-end:12px}h1:hover .anchor,h2:hover .anchor,h3:hover .anchor,h4:hover .anchor,h5:hover .anchor,h6:hover .anchor{display:inline-flex;color:var(--secondary);margin-inline-start:8px;font-weight:500;user-select:none}.paginav{display:flex;line-height:30px}.paginav a{padding-inline-start:14px;padding-inline-end:14px;border-radius:var(--radius)}.paginav .title{letter-spacing:1px;text-transform:uppercase;font-size:small;color:var(--secondary)}.paginav .prev,.paginav .next{width:50%}.paginav span:hover:not(.title){box-shadow:0 1px}.paginav .next{margin-inline-start:auto;text-align:right}[dir=rtl] .paginav .next{text-align:left}h1>a>svg{display:inline}img.in-text{display:inline;margin:auto}.buttons,.main .profile{display:flex;justify-content:center}.main .profile{align-items:center;min-height:calc(100vh - var(--header-height) - var(--footer-height) - (var(--gap) * 2));text-align:center}.profile .profile_inner{display:flex;flex-direction:column;align-items:center;gap:10px}.profile img{border-radius:50%}.buttons{flex-wrap:wrap;max-width:400px}.button{background:var(--tertiary);border-radius:var(--radius);margin:8px;padding:6px;transition:transform .1s}.button-inner{padding:0 8px}.button:active{transform:scale(.96)}#searchbox input{padding:4px 10px;width:100%;color:var(--primary);font-weight:700;border:2px solid var(--tertiary);border-radius:var(--radius)}#searchbox input:focus{border-color:var(--secondary)}#searchResults li{list-style:none;border-radius:var(--radius);padding:10px;margin:10px 0;position:relative;font-weight:500}#searchResults{margin:10px 0;width:100%}#searchResults li:active{transition:transform .1s;transform:scale(.98)}#searchResults a{position:absolute;width:100%;height:100%;top:0;left:0;outline:none}#searchResults .focus{transform:scale(.98);border:2px solid var(--tertiary)}.terms-tags li{display:inline-block;margin:10px;font-weight:500}.terms-tags a{display:block;padding:3px 10px;background:var(--tertiary);border-radius:6px;transition:transform .1s}.terms-tags a:active{background:var(--tertiary);transform:scale(.96)}.bg{color:#cad3f5;background-color:#24273a}.chroma{color:#cad3f5;background-color:#24273a}.chroma .x{}.chroma .err{color:#ed8796}.chroma .cl{}.chroma .lnlinks{outline:none;text-decoration:none;color:inherit}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}.chroma .hl{background-color:#474733}.chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#8087a2}.chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#8087a2}.chroma .line{display:flex}.chroma .k{color:#c6a0f6}.chroma .kc{color:#f5a97f}.chroma .kd{color:#ed8796}.chroma .kn{color:#8bd5ca}.chroma .kp{color:#c6a0f6}.chroma .kr{color:#c6a0f6}.chroma .kt{color:#ed8796}.chroma .n{}.chroma .na{color:#8aadf4}.chroma .nb{color:#91d7e3}.chroma .bp{color:#91d7e3}.chroma .nc{color:#eed49f}.chroma .no{color:#eed49f}.chroma .nd{color:#8aadf4;font-weight:700}.chroma .ni{color:#8bd5ca}.chroma .ne{color:#f5a97f}.chroma .nf{color:#8aadf4}.chroma .fm{color:#8aadf4}.chroma .nl{color:#91d7e3}.chroma .nn{color:#f5a97f}.chroma .nx{}.chroma .py{color:#f5a97f}.chroma .nt{color:#c6a0f6}.chroma .nv{color:#f4dbd6}.chroma .vc{color:#f4dbd6}.chroma .vg{color:#f4dbd6}.chroma .vi{color:#f4dbd6}.chroma .vm{color:#f4dbd6}.chroma .l{}.chroma .ld{}.chroma .s{color:#a6da95}.chroma .sa{color:#ed8796}.chroma .sb{color:#a6da95}.chroma .sc{color:#a6da95}.chroma .dl{color:#8aadf4}.chroma .sd{color:#6e738d}.chroma .s2{color:#a6da95}.chroma .se{color:#8aadf4}.chroma .sh{color:#6e738d}.chroma .si{color:#a6da95}.chroma .sx{color:#a6da95}.chroma .sr{color:#8bd5ca}.chroma .s1{color:#a6da95}.chroma .ss{color:#a6da95}.chroma .m{color:#f5a97f}.chroma .mb{color:#f5a97f}.chroma .mf{color:#f5a97f}.chroma .mh{color:#f5a97f}.chroma .mi{color:#f5a97f}.chroma .il{color:#f5a97f}.chroma .mo{color:#f5a97f}.chroma .o{color:#91d7e3;font-weight:700}.chroma .ow{color:#91d7e3;font-weight:700}.chroma .p{}.chroma .c{color:#6e738d;font-style:italic}.chroma .ch{color:#6e738d;font-style:italic}.chroma .cm{color:#6e738d;font-style:italic}.chroma .c1{color:#6e738d;font-style:italic}.chroma .cs{color:#6e738d;font-style:italic}.chroma .cp{color:#6e738d;font-style:italic}.chroma .cpf{color:#6e738d;font-weight:700;font-style:italic}.chroma .g{}.chroma .gd{color:#ed8796;background-color:#363a4f}.chroma .ge{font-style:italic}.chroma .gr{color:#ed8796}.chroma .gh{color:#f5a97f;font-weight:700}.chroma .gi{color:#a6da95;background-color:#363a4f}.chroma .go{}.chroma .gp{}.chroma .gs{font-weight:700}.chroma .gu{color:#f5a97f;font-weight:700}.chroma .gt{color:#ed8796}.chroma .gl{text-decoration:underline}.chroma .w{}.chroma{background-color:unset!important}.chroma .hl{display:flex}.chroma .lnt{padding:0 0 0 12px}.highlight pre.chroma code{padding:8px 0}.highlight pre.chroma .line .cl,.chroma .ln{padding:0 10px}.chroma .lntd:last-of-type{width:100%}::-webkit-scrollbar-track{background:0 0}.list:not(.dark)::-webkit-scrollbar-track{background:var(--code-bg)}::-webkit-scrollbar-thumb{background:var(--tertiary);border:5px solid var(--theme);border-radius:var(--radius)}.list:not(.dark)::-webkit-scrollbar-thumb{border:5px solid var(--code-bg)}::-webkit-scrollbar-thumb:hover{background:var(--secondary)}::-webkit-scrollbar:not(.highlighttable,.highlight table,.gist .highlight){background:var(--theme)}.post-content .highlighttable td .highlight pre code::-webkit-scrollbar{display:none}.post-content :not(table) ::-webkit-scrollbar-thumb{border:2px solid var(--code-block-bg);background:#717175}.post-content :not(table) ::-webkit-scrollbar-thumb:hover{background:#a3a3a5}.gist table::-webkit-scrollbar-thumb{border:2px solid #fff;background:#adadad}.gist table::-webkit-scrollbar-thumb:hover{background:#707070}.post-content table::-webkit-scrollbar-thumb{border-width:2px}@media screen and (min-width:768px){::-webkit-scrollbar{width:19px;height:11px}}@media screen and (max-width:768px){:root{--gap:14px}.profile img{transform:scale(.85)}.first-entry{min-height:260px}.archive-month{flex-direction:column}.archive-year{margin-top:20px}.footer{padding:calc((var(--footer-height) - var(--gap) - 10px)/2)var(--gap)}}@media screen and (max-width:900px){.list .top-link{transform:translateY(-5rem)}}@media screen and (max-width:340px){.share-buttons{justify-content:unset}}@media(prefers-reduced-motion){.terms-tags a:active,.button:active,.post-entry:active,.top-link,#searchResults .focus,#searchResults li:active{transform:none}}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.post-entry{border-radius:calc(var(--radius) + 4px);border:1px solid var(--border);transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease;overflow:hidden}.post-entry:hover{transform:translateY(-3px);box-shadow:0 14px 32px rgba(0,0,0,.1);border-color:var(--secondary)}.dark .post-entry:hover{box-shadow:0 14px 32px rgba(0,0,0,.35)}.entry-header h2{font-size:20px;font-weight:600;letter-spacing:-.01em}.entry-content{font-size:13.5px;line-height:1.65;-webkit-line-clamp:3}.entry-footer{font-size:12px;opacity:.82}.post-content h2{font-size:26px;font-weight:700;letter-spacing:-.02em;padding-bottom:10px;border-bottom:2px solid var(--border);margin-bottom:20px}.post-content h3{font-size:19px;font-weight:650;letter-spacing:-.01em;color:var(--primary);margin-top:30px}.post-content h3::before{content:"▎";color:var(--secondary);margin-right:6px;opacity:.55;font-size:.85em}.post-content table{width:100%;border-collapse:collapse;font-size:14px;border-radius:var(--radius);overflow:hidden;box-shadow:0 1px 4px rgba(0,0,0,7%);margin-bottom:calc(var(--content-gap) + 4px)}.post-content table th{background:var(--tertiary);color:var(--primary);font-weight:700;font-size:12px;text-transform:uppercase;letter-spacing:.06em;padding:11px 14px;border-bottom:2px solid var(--border)}.dark .post-content table th{background:var(--code-bg)}.post-content table:not(.highlighttable,.highlight table,.gist .highlight) td{padding:10px 14px;border-bottom:1px solid var(--border);vertical-align:middle}.post-content table tbody tr:nth-child(even) td{background:rgba(0,0,0,2%)}.dark .post-content table tbody tr:nth-child(even) td{background:rgba(255,255,255,3%)}.post-content table tbody tr:last-child td{border-bottom:none}.post-content blockquote{margin:24px 0;padding:14px 20px;border-inline-start:4px solid var(--secondary);background:var(--code-bg);border-radius:0 var(--radius)var(--radius)0;color:var(--content);font-style:normal}.dark .post-content blockquote{background:var(--entry)}.post-content blockquote p{margin-bottom:0}.post-content blockquote strong{color:var(--primary)}.post-content blockquote blockquote{border-inline-start:4px solid #578eff;background:rgba(87,142,255,8%);border-radius:0 var(--radius)var(--radius)0;padding:12px 18px;margin:0}.dark .post-content blockquote blockquote{background:rgba(87,142,255,.12)}.post-content p code,.post-content li code,.post-content td code,.post-content blockquote p code{background:rgba(87,142,255,.1);color:var(--primary);border-radius:20px;padding:2px 9px;font-size:.82em;font-weight:600;font-family:inherit;border:1px solid rgba(87,142,255,.2)}.dark .post-content p code,.dark .post-content li code,.dark .post-content td code,.dark .post-content blockquote p code{background:rgba(87,142,255,.15);border-color:rgba(87,142,255,.3);color:#9ab8ff}.post-tags a{font-size:12px;padding:0 12px;line-height:28px;border-radius:20px;background:rgba(87,142,255,7%);border:1px solid rgba(87,142,255,.2);transition:background .14s ease,color .14s ease,transform .1s ease,border-color .14s ease;font-weight:500;cursor:pointer}.post-tags a:hover{background:rgba(87,142,255,.18);color:var(--primary);transform:translateY(-1px);border-color:rgba(87,142,255,.4)}.dark .post-tags a{background:rgba(87,142,255,.1);border-color:rgba(87,142,255,.25)}.dark .post-tags a:hover{background:rgba(87,142,255,.22);border-color:rgba(87,142,255,.5);color:#9ab8ff}.post-title{font-size:36px;font-weight:700;letter-spacing:-.03em}.post-content hr{margin:36px 0;height:1px;background:var(--border);border:0;opacity:.7}.post-content a{box-shadow:none;text-decoration:underline;text-decoration-color:var(--tertiary);text-underline-offset:2px;transition:text-decoration-color .15s ease}.post-content a:hover{text-decoration-color:var(--secondary)}.page-header h1{font-size:32px;font-weight:700;letter-spacing:-.025em}.page-header .post-description{color:var(--secondary);font-size:15px;line-height:1.65;max-width:68ch;margin-top:8px}.breadcrumbs{margin-bottom:8px;font-size:13px;opacity:.75}.social-icons a{transition:transform .14s ease,opacity .14s ease}.social-icons a:hover{transform:translateY(-2px);opacity:.8}.stat-grid{display:flex;flex-wrap:wrap;gap:.65rem;margin:1.25rem 0 1.75rem}.stat-card{flex:1;min-width:120px;text-align:center;padding:.9rem 1.1rem;border:2px solid rgba(87,142,255,.35);border-radius:10px;background:rgba(87,142,255,8%);transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease}.stat-card:hover{transform:translateY(-3px);box-shadow:0 8px 20px rgba(87,142,255,.12);border-color:rgba(87,142,255,.4)}.stat-card .stat-value{font-size:1.9rem;font-weight:800;line-height:1.1;color:var(--primary)}.stat-card .stat-value span{font-size:.85rem;font-weight:600}.stat-card .stat-label{font-size:.75rem;margin-top:.25rem;opacity:.65;line-height:1.3}.dark .stat-card{background:rgba(87,142,255,.12);border-color:rgba(87,142,255,.38)}.skills-chips{display:flex;flex-wrap:wrap;gap:.45rem;margin:.75rem 0 1.5rem}.skill-chip{display:inline-block;padding:.28rem .75rem;font-size:.78rem;font-weight:500;border-radius:20px;background:var(--code-bg);border:1px solid var(--border);line-height:1.6;transition:background .14s ease,border-color .14s ease,transform .12s ease;white-space:nowrap;cursor:default}.skill-chip:hover{background:rgba(87,142,255,.12);border-color:rgba(87,142,255,.4);transform:translateY(-1px)}.skill-chip.accent{background:rgba(87,142,255,.1);border-color:rgba(87,142,255,.3);color:var(--primary)}.dark .skill-chip.accent{background:rgba(87,142,255,.15);border-color:rgba(87,142,255,.35)}.dark .post-entry{background:var(--entry)}@keyframes fadeSlideUp{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.post-entry:nth-child(1){animation:fadeSlideUp .4s ease both}.post-entry:nth-child(2){animation:fadeSlideUp .4s .06s ease both}.post-entry:nth-child(3){animation:fadeSlideUp .4s .12s ease both}.post-entry:nth-child(4){animation:fadeSlideUp .4s .18s ease both}.post-entry:nth-child(5){animation:fadeSlideUp .4s .24s ease both}.post-entry:nth-child(n+6){animation:fadeSlideUp .4s .28s ease both}@media(max-width:720px){.post-content h2{font-size:22px}.post-content h3{font-size:17px}.post-content table{font-size:13px}.post-content table th,.post-content table:not(.highlighttable,.highlight table,.gist .highlight) td{padding:8px 10px}}.main .profile{position:relative;overflow:visible}.main .profile::before{content:"";Alberto Eusebio Paris, FR | albertoeusebio72@gmail.com | LinkedIn | Google Scholar | ORCID | GitHub SUMMARY Research Engineer at Huawei Paris studying episodic memory and continual learning in LLMs. Previously developing AI agents for enterprise customers (Salesforce). Background in trustworthy AI for cancer prognosis (IRCCS Milan). 4 peer-reviewed publications (IEEE EMBC, ESMO AI, ECAI, ECML PKDD). MSc 110/110, BSc 110/110 cum laude, Alta Scuola Politecnica. EDUCATION MSc Computer Science and Engineering (AI) – Politecnico di Milano Milan, Italy | 09/2023 – 12/2025 Final Grade: 110/110 highest honors. Alta Scuola Politecnica: Top 150 engineering students across Politecnico di Milano and Politecnico di Torino. BSc Computer Engineering – Politecnico di Torino Turin, Italy | 09/2020 – 07/2023 Final Grade: 110/110 cum laude. Intraprendenti Honor Program: Top 200 engineering students at Politecnico di Torino. RESEARCH EXPERIENCE Research Engineer – Huawei Paris Research Center Paris, France | 10/2025 – Present Co-authored 2 NeurIPS 2026 submissions (currently under peer review). Designed and maintained training pipelines 1,000+ multi-GPU full fine-tuning runs for Mistral and LLama models using DeepSpeed ZeRO-2. Built gradient-tracking infrastructure to regularize fine-tuning and reduce catastrophic forgetting. Built an end-to-end synthetic data pipeline that generated 21K+ high-quality training samples and developed an LLM-as-judge evaluation system for automated quality filtering, achieving 98–99% agreement with human annotators across 500+ test cases. Graduate Student Researcher – National Cancer Institute (IRCCS) Milan, Italy | 09/2024 – 12/2025 4 peer-reviewed publications: IEEE EMBC 2025, ESMO AI 2025, AEQUITAS @ ECAI 2025, PharML @ ECML PKDD 2025. Reviewer for the 47th IEEE EMBC conference. Developed 2D/3D ResNet50 pipelines for 6-month survival prediction in advanced NSCLC (385 patients, Apollo11 cohort), achieving 0.74 F1 with explainability and fairness assessments. Graduate Student Researcher – NECST Lab Milan, Italy | 11/2023 – 06/2024 Built Aurora, a mental well-being mobile app powered by fine-tuned Meta-Llama-3.1-70B (AWS Bedrock), with serverless backend (Lambda) and React Native frontend. 27-participant user study. Won Hack at the NECSTCamp (36-hour AI hackathon). PROFESSIONAL & LEADERSHIP EXPERIENCE Solution Engineer Intern – Salesforce Milan, Italy | 09/2024 – 07/2025 Built and demoed GenAI agents on the Agentforce platform for 5+ enterprise clients, integrating sales and service automation workflows under real security and compliance constraints. Software Engineer & Team Leader – Student Team Policumbent Turin, Italy | 03/2021 – 10/2023 Led 100+ students across 9 engineering divisions. Won IHPVA World Human Powered Speed Challenge 2022 & 2023, matching the world record. Built embedded telemetry (Raspberry Pi, ESP32, MQTT) for vehicles at 130+ km/h. PROJECTS Autonomous Grapevine Pruning – PIC4SeR Laboratory / Yanmar S.P.A. (Alta Scuola Politecnica) Turin, Italy | 2024 – 2025 End-to-end computer vision pipeline for autonomous agricultural pruning. Built a Stacked Hourglass Network for vine keypoint detection, a graph-based topology reconstruction module, and heuristic pruning logic derived from expert agronomic knowledge. Achieved 95% precision, 90% recall, 92% F1 under variable real-world lighting and vine density conditions. PUBLICATIONS Trustworthy Assessment of 2D Model for Lung CT Scans. IEEE EMBC 2025 (DOI: 10.1109/EMBC58623.2025.11254399) CT-based 3D ResNet50 for Predicting Survival in NSCLC Patients. ESMO AI 2025 (DOI: 10.1016/j.esmorw.2025.100335) Trustworthy Assessment of 2D Deep Learning Model for Lung CT Scans. AEQUITAS @ ECAI 2025 Trustworthy Evaluation of 2D Deep Learning Model for Lung CT Scans. PharML @ ECML PKDD 2025 SKILLS Programming: Python, Bash, C, C++, Java, SQL. ML/AI: LLMs, ViTs, CNNs, Deep Learning, Neural Networks, Distributed Training, Continual Learning, NLP, Computer Vision, Model Evaluation & Benchmarking, Explainability, Post-training, Training & Data Pipelines. Frameworks & Libraries: PyTorch, DeepSpeed, HuggingFace Transformers, TensorFlow/Keras, Scikit-Learn, Pandas, NumPy, JAX. Infrastructure: AWS, Docker, Git, Linux, REST API. Languages: Italian (Native), English (C1 Advanced), German (A2 Goethe-Zertifikat). position: absolute;inset:0% 0% auto 0%;height:420px;background:radial-gradient(circle at 12% 55%,rgba(87,142,255,.22),transparent 42%),radial-gradient(circle at 75% 35%,rgba(56,189,248,.16),transparent 42%),radial-gradient(circle at 50% 80%,rgba(124,58,237,8%),transparent 40%);filter:blur(52px);pointer-events:none;z-index:0}.main .profile{justify-content:center;align-items:center;text-align:left}.profile .profile_inner{position:relative;z-index:1;max-width:900px;width:100%;padding:clamp(16px,3vw,32px)clamp(12px,3vw,24px);display:grid;grid-template-columns:auto 1fr;grid-template-rows:repeat(4,auto);column-gap:clamp(28px,5vw,52px);row-gap:10px;align-items:start;text-align:left;animation:profileIntroRise .65s ease-out both}.profile .profile_inner img{grid-column:1;grid-row:1/-1;align-self:center;border-radius:50%;object-fit:cover;object-position:top center;width:240px;height:240px;border:3px solid rgba(87,142,255,.45);box-shadow:0 8px 28px rgba(87,142,255,.18),0 2px 8px rgba(0,0,0,.12);transition:transform .24s ease,box-shadow .24s ease}.profile .profile_inner img:hover{transform:translateY(-4px)scale(1.03);box-shadow:0 18px 40px rgba(87,142,255,.28),0 4px 12px rgba(0,0,0,.16)}.profile .profile_inner h1{grid-column:2;margin:0 0 2px;font-size:clamp(1.9rem,4.5vw,3rem);line-height:1.08;letter-spacing:-.025em}.profile .profile_inner>span{grid-column:2;display:block;max-width:68ch;margin:0;font-size:clamp(.9rem,1.35vw,1.08rem);line-height:1.78;color:var(--secondary)}.profile .profile_inner>span strong{color:var(--primary)}.profile .profile_inner .social-icons{grid-column:2;justify-content:flex-start;margin:1.5rem 0}.profile .profile_inner .buttons{grid-column:2;max-width:none;margin-top:2px;justify-content:flex-start;gap:10px}.profile .button{border:1px solid var(--border);box-shadow:0 2px 8px rgba(0,0,0,6%);transition:transform .14s ease,box-shadow .18s ease,background-color .18s ease,color .18s ease,border-color .18s ease;font-weight:500}.profile .button:hover{transform:translateY(-2px);box-shadow:0 8px 20px rgba(0,0,0,.13)}.profile .buttons a:first-child{background:#578eff;color:#fff!important;border-color:#578eff;box-shadow:0 4px 14px rgba(87,142,255,.35)}.profile .buttons a:first-child:hover{background:#3b6edf;border-color:#3b6edf;color:#fff!important;box-shadow:0 8px 22px rgba(87,142,255,.45);transform:translateY(-2px)}.profile .buttons a:not(:first-child):hover{background:var(--secondary);color:var(--theme);border-color:transparent}.dark .profile .buttons a:not(:first-child){border-color:rgba(255,255,255,.35);color:rgba(255,255,255,.88)}.dark .profile .buttons a:not(:first-child):hover{border-color:transparent;color:var(--theme)}@keyframes profileIntroRise{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}@media(max-width:620px){.profile .profile_inner{grid-template-columns:1fr;text-align:center;justify-items:center;row-gap:8px}.profile .profile_inner img{grid-row:1;grid-column:1}.profile .profile_inner h1,.profile .profile_inner>span,.profile .profile_inner .social-icons,.profile .profile_inner .buttons{grid-column:1}.profile .profile_inner>span{margin:0 auto}.profile .profile_inner .social-icons,.profile .profile_inner .buttons{justify-content:center}.main .profile::before{height:220px}}