.author-bio{display:flex;flex-direction:column;gap:10px}.author-name{font-family:DejaVu Sans;font-weight:700}.author-avatar{border-radius:50%;height:64px;margin-right:1rem;width:64px}.author-credentials{align-items:center;display:flex;flex-direction:row;justify-content:flex-start}.author-info,.author-info h3{display:flex;flex-direction:column}.author-info h3{margin:0}.author-links{display:flex;flex-direction:row;gap:10px}.author-links a{color:#07c}.author-links a img{height:32px;width:32px}.copy-code-pre{background:var(--code-bg,#f6f8fa);border-radius:8px;overflow:auto;padding:.75rem;position:relative}.copy-code-pre>.highlight,.copy-code-pre>code,.copy-code-pre>pre{display:block;width:100%}.copy-code-pre>code{font-size:1rem}.copy-code-button{background:rgba(0,0,0,.6);border:0;border-radius:6px;color:#fff;cursor:pointer;font-size:.875rem;margin:0;opacity:0;padding:.25rem .5rem;pointer-events:none;position:absolute;right:.5rem;top:.5rem;transform:translateY(-4px);transition:opacity .15s ease,transform .12s ease;user-select:none;z-index:10}.copy-code-pre:focus-within .copy-code-button,.copy-code-pre:hover .copy-code-button{opacity:1;pointer-events:auto;transform:translateY(0)}.copy-code-button.copied{background:#000}.copy-code-button.failed{background:#e76f51}@media print{.copy-code-button{display:none}}code.hljs{background:transparent!important}:root{--underline-color:#0ea5a4;--underline-thickness:3px;--underline-gap:.25em;--underline-duration:320ms;--underline-ease:cubic-bezier(.2,.9,.2,1)}h2,h3,h4,h5,h6{display:inline-block;font-weight:700;line-height:1.1;margin:.5rem 0;position:relative;text-decoration:none}h2:after,h3:after,h4:after,h5:after,h6:after{background:var(--underline-color);bottom:calc(var(--underline-gap)*-1);content:"";height:var(--underline-thickness);left:0;opacity:0;position:absolute;right:0;transform:scaleX(0);transform-origin:left center;transition:transform var(--underline-duration) var(--underline-ease),opacity var(--underline-duration) var(--underline-ease);will-change:transform,opacity}h2:hover::focus-visible,h2:hover:after,h3:hover::focus-visible,h3:hover:after,h4:hover::focus-visible,h4:hover:after,h5:hover::afect,h6:fover::focus-visible,h6:fover:after{opacity:1;transform:scaleX(1)}@media(prefers-reduced-motion:reduce){.heading:after,.heading:focus-visible:after,.heading:hover:after{opacity:1;transform:none;transition:none}}article .heading-anchor{position:relative}.heading-link{align-items:center;color:currentColor;display:inline-flex;height:1.2rem;justify-content:center;margin-left:.45rem;margin-right:-.25rem;opacity:0;text-decoration:none;transform:translateY(-1px);transition:opacity .16s ease;vertical-align:middle;width:1.2rem}.heading-link:focus:not(span),article h2:hover .heading-link,article h3:hover .heading-link,article h4:hover .heading-link,article h5:hover .heading-link,article h6:hover .heading-link{opacity:.5}.heading-link:focus span{opacity:1}.heading-link:focus{outline:2px solid Highlight;outline-offset:2px}.heading-link:focus svg,.heading-link:hover svg{transform:translateY(-1px) scale(1.02);transition:transform .12s}.heading-link .copy-feedback{background:#111;border-radius:.35rem;color:#fff;font-size:.8rem;left:50%;opacity:0;padding:.25rem .5rem;pointer-events:none;position:absolute;top:-2.2rem;transform:translateX(-50%);transform-origin:bottom center;transition:opacity .15s ease,transform .15s ease;white-space:nowrap;z-index:10}.heading-link.copied .copy-feedback{opacity:1;transform:translateX(-50%) translateY(-4px)}.heading-link .copy-feedback:after{border-color:#111 transparent transparent;border-style:solid;border-width:5px 5px 0;bottom:-5px;content:"";left:50%;position:absolute;transform:translateX(-50%)}@media(prefers-reduced-motion:reduce){.heading-link,.heading-link .copy-feedback{transition:none!important}}@media(hover:none)and (pointer:coarse){.heading-link{display:none}.selection-toolbar{display:none!important}}.selection-toolbar{align-items:center;background:linear-gradient(180deg,hsla(0,0%,100%,.933),#f6f8fb);border:1px solid rgba(12,20,30,.06);border-radius:10px;box-shadow:0 6px 18px rgba(12,20,30,.15);display:inline-flex;flex-direction:row;flex-wrap:nowrap;gap:6px;opacity:0;padding:6px;pointer-events:none;position:absolute;transform-origin:center bottom;transition:opacity .15s ease,transform .15s cubic-bezier(.22,1,.36,1);white-space:nowrap;z-index:9999}.selection-toolbar.show{opacity:1;pointer-events:auto;transform:translateY(0) scale(1)}.selection-toolbar.hide{transform:translateY(6px) scale(.96)}.selection-toolbar button{-webkit-tap-highlight-color:rgba(0,0,0,0);align-items:center;background:transparent;border:none;border-radius:8px;cursor:pointer;display:inline-flex;flex-direction:row;font:inherit;gap:8px;justify-content:center;padding:6px}.selection-toolbar button:hover{background:rgba(12,20,30,.04)}.selection-toolbar button:active{transform:translateY(1px)}.selection-toolbar button .icon{font-size:14px;opacity:.9}.selection-toolbar .label{font-size:.85rem}html.dark-mode .selection-toolbar{background:#141414}@media(max-width:520px){.selection-toolbar{border-radius:12px;gap:4px;padding:5px}.selection-toolbar .label{display:none}}:root{--glow-spread:28px;--glow-blur1:22px;--glow-blur2:36px;--glow-opacity:0.55;--spin-duration:8s;--pulse-duration:4.5s}.magic-glow{backdrop-filter:blur(6px);background:linear-gradient(180deg,hsla(0,0%,100%,.03),hsla(0,0%,100%,.01));border-radius:14px;box-shadow:inset 0 1px 0 hsla(0,0%,100%,.02);color:var(--text);cursor:default;font-weight:600;letter-spacing:.4px;padding:1.2rem 2rem;position:relative;transform:translateZ(0);user-select:none;z-index:1}.magic-glow:after,.magic-glow:before{animation:spin var(--spin-duration) linear infinite,pulse var(--pulse-duration) ease-in-out infinite;background:conic-gradient(from 0deg,#ff6b6b 0deg 72deg,#f5a623 72deg 140deg,#ffd86b 140deg 200deg,#8be9fd 200deg 260deg,#a29bfe 260deg 330deg,#ff6b6b 330deg 1turn);border-radius:inherit;content:"";filter:blur(var(--glow-blur1));height:calc(100% + var(--glow-spread));left:50%;mix-blend-mode:screen;opacity:var(--glow-opacity);pointer-events:none;position:absolute;top:50%;transform:translate(-50%,-50%) rotate(0deg);transition:opacity .25s linear;width:calc(100% + var(--glow-spread));will-change:transform,opacity,filter;z-index:-1}.magic-glow:after{animation-direction:reverse,normal;animation-duration:calc(var(--spin-duration)*1.6),var(--pulse-duration);filter:blur(var(--glow-blur2));height:calc(100% + var(--glow-spread)*1.8);opacity:calc(var(--glow-opacity)*.75);transform-origin:center;width:calc(100% + var(--glow-spread)*1.8)}@media(max-width:420px){:root{--glow-spread:18px;--glow-blur1:18px;--glow-blur2:28px;--spin-duration:10s}}@media(prefers-reduced-motion:reduce){.magic-glow:after,.magic-glow:before{animation:none;opacity:calc(var(--glow-opacity)*.7)}}@keyframes spin{0%{transform:translate(-50%,-50%) rotate(0deg)}to{transform:translate(-50%,-50%) rotate(1turn)}}@keyframes pulse{0%{filter:blur(var(--glow-blur1));opacity:calc(var(--glow-opacity)*.75)}50%{filter:blur(calc(var(--glow-blur1) + 8px));opacity:calc(var(--glow-opacity)*1)}to{filter:blur(var(--glow-blur1));opacity:calc(var(--glow-opacity)*.75)}}:root{fab-btn-color:#a3a3a3}html.dark-mode{fab-btn-color:#333}.fab-container{bottom:2rem;display:flex;flex-direction:column;gap:10px;position:fixed;right:2rem;z-index:1000}.fab-btn{align-items:center;background-color:var(--fab-btn-color);border:none;border-radius:50%;box-shadow:0 4px 10px rgba(0,0,0,.3);color:var(--text);cursor:pointer;display:flex;height:50px;justify-content:center;opacity:1;transform:translateY(0);transition:all .3s ease-in-out;width:50px}.fab-btn:hover{background-color:#555;transform:scale(1.1)}.fab-btn.hide{opacity:0;transform:translateY(20px);visibility:hidden}.floating-heart{animation:idle-burst 3s linear infinite;font-size:14px;left:50%;opacity:0;pointer-events:none;position:absolute;top:50%;z-index:-1}.floating-heart:first-child{animation-delay:0s;left:20%}.floating-heart:nth-child(2){animation-delay:.5s;font-size:18px;left:40%}.floating-heart:nth-child(3){animation-delay:1.2s;left:60%}.floating-heart:nth-child(4){animation-delay:1.8s;font-size:12px;left:80%}.floating-heart:nth-child(5){animation-delay:2.3s;left:50%}@keyframes idle-burst{0%{opacity:0;transform:translateY(0) scale(.5)}20%{opacity:1}to{opacity:0;transform:translateY(-80px) translateX(var(--sway,10px)) scale(1.2)}}.floating-heart:nth-child(odd){--sway:-15px}.floating-heart:nth-child(2n){--sway:15px}html.dark-mode .graphviz,html.dark-mode .invert,html.dark-mode .jupyter,html.dark-mode img.jupyter{filter:invert(1) hue-rotate(180deg)}@font-face{font-display:swap;font-family:Archivo Black;font-weight:400;src:url(/assets/fonts/ArchivoBlack-Regular.woff2) format("woff2")}@font-face{font-display:swap;font-family:DejaVu Sans;font-style:normal;font-weight:400;src:url(/assets/fonts/DejaVuSans.woff2) format("woff2")}@font-face{font-display:swap;font-family:Noto Sans Regular;font-style:normal;font-weight:400;src:url(/assets/fonts/NotoSans-Regular.woff2) format("woff2")}@font-face{font-display:swap;font-family:Fira Code Bold;font-style:normal;font-weight:700;src:url(/assets/fonts/FiraCode-Bold.woff2) format("woff2")}@font-face{font-display:swap;font-family:Alex Brush;font-style:normal;font-weight:400;src:url(/assets/fonts/AlexBrush-Regular.woff2) format("woff2")}a{color:var(--accent)}pre code{background:var(--code-bg);border-radius:6px;color:var(--text);padding:.75rem}.small-muted{color:var(--muted)}button,input,select,textarea{color:inherit;font:inherit}table{border:2px solid #000;border-collapse:collapse;display:table;table-layout:fixed;width:100%}td,th{display:table-cell;width:auto!important}figure{display:block;margin:1rem auto!important;width:fit-content!important}h1,h2,h3,h4,h5,h6{flex-wrap:wrap}footer{align-items:center;justify-content:center;text-align:center}.shout{font-family:Archivo Black;font-weight:700}h1:not(.no-indicator):before,h2:not(.no-indicator):before,h3:not(.no-indicator):before,h4:not(.no-indicator):before,h5:not(.no-indicator):before,h6:not(.no-indicator):before{border-bottom:6px solid transparent;border-left:10px solid;border-top:6px solid transparent;content:"";display:inline-block;height:0;margin-right:8px;vertical-align:middle;width:0}h1:not(.no-indicator):before{border-left-color:#e74c3c}h2:not(.no-indicator):before{border-left-color:#3498db}h3:not(.no-indicator):before{border-left-color:#2ecc71}h4:not(.no-indicator):before{border-left-color:#f1c40f}h5:not(.no-indicator):before{border-left-color:#9b59b6}h6:not(.no-indicator):before{border-left-color:#e67e22}.nav-drawer{box-shadow:-12px 0 30px rgba(0,0,0,.15)}.desktop-nav{box-shadow:0 2px 5px rgba(0,0,0,.1)}[data-barba=container]{opacity:1;transition:opacity 1s ease-in-out}.is-entering [data-barba=container],.is-exiting [data-barba=container]{opacity:0}.hide-on-wrap{display:flex;flex-wrap:wrap}.hide-on-wrap.is-wrapped{opacity:0!important;pointer-events:none!important;visibility:hidden!important}:root{--repeating-bg-bg-color:#fff;--repeating-bg-color:rgba(0,0,0,.05);--repeating-bg-size:30px;--repeating-bg-block-fade-duration:1.5s;--repeating-bg-ripple-light-color:#bdbdbd;--repeating-bg-ripple-speed:3s;--repeating-bg-ripple-interval:10s;--glow-color:#bdbdbd35}html.dark-mode{--repeating-bg-bg-color:#1a1a1b;--repeating-bg-color:hsla(0,0%,100%,.05);--repeating-bg-ripple-light-color:#555}#smooth-wrapper{background:transparent!important;pointer-events:none;position:relative;z-index:1}#smooth-wrapper .box-selectable,#smooth-wrapper a,#smooth-wrapper button,#smooth-wrapper h1,#smooth-wrapper h2,#smooth-wrapper h3,#smooth-wrapper h4,#smooth-wrapper h5,#smooth-wrapper h6,#smooth-wrapper input,#smooth-wrapper p,#smooth-wrapper span{pointer-events:auto}.grid-container{height:100%;left:0;overflow:hidden;pointer-events:none;top:0;width:100%;z-index:0}.grid-background,.grid-container{background-color:var(--repeating-bg-bg-color);position:absolute}.grid-background{background-image:linear-gradient(var(--repeating-bg-color) 1px,transparent 1px),linear-gradient(90deg,var(--repeating-bg-color) 1px,transparent 1px);background-size:var(--repeating-bg-size) var(--repeating-bg-size);inset:0;z-index:1}.cells-wrapper{display:grid;grid-template-columns:repeat(auto-fill,var(--repeating-bg-size));grid-template-rows:repeat(auto-fill,var(--repeating-bg-size));inset:0;pointer-events:none;position:absolute;will-change:transform;z-index:2}.cell{background-color:transparent;height:var(--repeating-bg-size);pointer-events:all;transition:background-color 1.5s ease-out;width:var(--repeating-bg-size)}.cell:hover{background-color:var(--glow-color);transition:0s}.black-hole-background{backdrop-filter:blur(10px);background-image:url(/assets/images/backgrounds/black-hole.png)}@keyframes ripple-move{0%{-webkit-mask-position:0 0,-150% 0;opacity:0}25%,5%{opacity:.25}30%{-webkit-mask-position:0 0,150% 0;opacity:0}to{-webkit-mask-position:0 0,150% 0;opacity:0}}.pattern-container{display:grid;height:100vh;left:0;overflow:hidden;pointer-events:none;position:fixed;top:0;width:100vw;z-index:1}.pattern-block{background-color:var(--repeating-bg-color);opacity:0;transition:opacity var(--repeating-bg-block-fade-duration) ease-out}.pattern-block.active{background-color:#fff;opacity:1;transition:none}.supernova{animation:supernova-burst linear forwards;background:radial-gradient(circle,hsla(0,0%,100%,.9) 0,rgba(138,43,226,.8) 20%,rgba(75,0,130,.3) 50%,transparent 80%);border-radius:50%;filter:blur(20px);mix-blend-mode:screen;opacity:0;pointer-events:none;position:absolute;will-change:transform,opacity}@keyframes supernova-burst{0%{opacity:0;transform:scale(.1)}30%{opacity:.4}to{opacity:0;transform:scale(1.5)}}