@font-face{font-family:nomo;src:url(/font/nomo.woff2) format("woff2");font-weight:400 700;font-style:normal;font-display:swap}:root{--background: #ffffff;--border: #ededed;--text: #111111;--muted: #888888;--subtle: #888888;--link: #2684ff;--code: #f0f0f0;--syntax-pink: #e9348b;--syntax-green: #12a566;--syntax-blue: #2684ff;--background-overlay: rgb(255 255 255 / .2);--page-font-family: "nomo", ui-sans-serif, system-ui, sans-serif;--page-font-size: 15px;--page-line-height: 20.5px;--page-paragraph: 14px;--page-letter-spacing: -.3px;--font-mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}html[data-theme=dark]{--background: #111111;--border: #2a2a2a;--text: #eeeeee;--muted: #888888;--subtle: #888888;--link: #6bb0ff;--code: #1c1c1c;--syntax-pink: #ff5cad;--syntax-green: #3dd68c;--syntax-blue: #6bb0ff;--background-overlay: rgb(17 17 17 / .4)}*{box-sizing:border-box}html,body,#root{min-height:100%}html,body{margin:0;background:var(--background);color:var(--text);font-family:var(--page-font-family);font-size:var(--page-font-size);line-height:var(--page-line-height);letter-spacing:var(--page-letter-spacing);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}::selection{background:var(--text);color:var(--background)}a{color:var(--link);text-decoration:none}.app-shell{min-height:100vh;padding:3rem 1.5rem;display:flex;flex-direction:column}.page-wrap{width:100%;margin:0 auto;max-width:35em;min-height:calc(100vh - 6rem);display:flex;flex-direction:column}.page-content{flex:1 0 auto;display:flex;flex-direction:column;justify-content:flex-start}.page-fade{position:relative;overflow:hidden}.page-fade__leave{position:absolute;inset:0 auto auto 0;width:100%;pointer-events:none;animation:page-fade-out .16s cubic-bezier(.23,1,.32,1) forwards}.page-fade__live{animation:page-fade-in .2s cubic-bezier(.23,1,.32,1) both}@keyframes page-fade-out{to{opacity:0;filter:blur(2px)}}@keyframes page-fade-in{0%{opacity:0;filter:blur(2px)}}.app-footer{margin-top:64px;padding:0;color:var(--muted);font-size:13px;display:flex;justify-content:flex-start;align-items:center;gap:.3em;text-align:left}.page-header{margin-bottom:1.25rem}.home-link{color:var(--muted);font-size:.95rem}.markdown{background:var(--background);padding:1.25rem;line-height:var(--page-line-height);letter-spacing:var(--page-letter-spacing)}.markdown>:first-child{margin-top:0}.markdown>:last-child{margin-bottom:0}.markdown a{color:var(--link)}.markdown strong{font-weight:500}.markdown em{font-weight:400}.markdown .markdown-link,.app-footer .markdown-link{display:inline-flex;align-items:center;gap:.1rem;color:var(--link);font-weight:500;text-decoration:none;transition:opacity .16s ease}.markdown .markdown-link:hover,.app-footer .markdown-link:hover{opacity:.8}.markdown .markdown-link__icon,.app-footer .markdown-link__icon{flex:0 0 auto;width:12px;height:12px}.markdown code{background:var(--code);color:var(--text);border-radius:2px;padding:1px 4px;font-family:var(--font-mono);font-size:13px;letter-spacing:0}.markdown .markdown-muted,.app-footer .markdown-muted{color:var(--muted)}.markdown .markdown-small{font-size:.85em}.markdown .markdown-muted .markdown-link,.app-footer .markdown-muted .markdown-link{color:var(--link)}.markdown .markdown-muted .markdown-link__label,.app-footer .markdown-muted .markdown-link__label{text-decoration-color:currentColor}.markdown-dot{display:inline-block;width:3px;height:3px;margin:0 .4em;vertical-align:middle;background:currentColor}.markdown .code-block{position:relative;margin:1em 0;background:var(--code);border-radius:2px}.markdown .code-block pre{margin:0;overflow-x:auto;padding:8px 42px 8px 12px;border:0;background:transparent;font:400 13px/1.6 var(--font-mono);white-space:pre-wrap;overflow-wrap:anywhere}.markdown .code-block code{padding:0;background:transparent;font:inherit;color:inherit}.command-prompt{color:var(--muted);-webkit-user-select:none;user-select:none}.syntax-pink{color:var(--syntax-pink)}.syntax-green{color:var(--syntax-green)}.syntax-blue{color:var(--syntax-blue)}.code-copy-button{position:absolute;top:5px;right:6px;display:grid;place-items:center;width:28px;height:28px;padding:0;color:var(--muted);background:transparent;border:0;border-radius:2px;cursor:pointer;opacity:0;transition:color .15s,background-color .15s,opacity .15s}.code-block:hover .code-copy-button,.code-copy-button:focus-visible{opacity:1}.code-copy-button:hover{color:var(--text);background:var(--border)}.code-copy-button svg{width:14px;height:14px}.markdown img,.markdown video{display:block;max-width:100%;height:auto;border-radius:10px}.markdown video::-webkit-media-controls{display:none!important}.markdown .markdown-media{margin-top:.55em;margin-bottom:.55em}.markdown .markdown-media--framed{object-fit:cover;object-position:center}.markdown .markdown-media--nomo{color:var(--text)}.markdown-gallery{--gallery-gap: .4rem;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-items:start;gap:var(--gallery-gap);margin:.85em 0}.markdown-gallery__item{appearance:none;display:block;justify-self:start;margin:0;border:0;background:transparent;background-color:transparent;border-radius:0;box-shadow:none;padding:0;cursor:pointer;text-align:left;transform:perspective(900px) rotateX(0) rotateY(0) translateZ(0);transform-style:preserve-3d;transition:transform .22s cubic-bezier(.22,1,.36,1)}.markdown-gallery__item:hover,.markdown-gallery__item:focus-visible,.markdown-gallery__item:active{background:transparent;background-color:transparent}.markdown-gallery__item[data-tilt-active=true]{transition:transform 70ms linear}.markdown-gallery__media{display:block;width:100%;aspect-ratio:16 / 9;object-fit:cover;background:transparent;backface-visibility:hidden;pointer-events:none}.markdown-lightbox{position:fixed;inset:0;z-index:1000;display:grid;place-items:center;padding:2rem;border:0;background:var(--background-overlay);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);cursor:pointer;opacity:0;transition:opacity .18s ease}.markdown-lightbox[data-state=open]{opacity:1}.markdown-lightbox[data-state=closing]{opacity:0}.markdown-lightbox__media-wrap{max-width:min(92vw,1080px);max-height:88vh;transform:scale(.96);transition:transform .18s ease}.markdown-lightbox[data-state=open] .markdown-lightbox__media-wrap{transform:scale(1)}.markdown-lightbox__media{display:block;width:auto;max-width:min(92vw,1080px);height:auto;max-height:88vh;border-radius:14px;object-fit:contain;background:transparent}.markdown h1,.markdown h2,.markdown h3,.markdown h4{margin:.4em 0 .02em;color:var(--text);font-weight:500;line-height:var(--page-line-height)}.markdown h1{margin-top:0;font-size:1.7em}.markdown h2{font-size:1.35em}.markdown h3{font-size:1.15em}.markdown h4,.markdown h5{font-size:1em}.markdown h5,.markdown h6{margin:0;color:var(--text);font-weight:400;line-height:var(--page-line-height)}.markdown h5{color:var(--muted)}.markdown h6{color:var(--subtle);font-size:.85em}.markdown p,.markdown ul,.markdown ol,.markdown blockquote,.markdown table,.markdown hr{margin:.2em 0}.markdown ul,.markdown ol{padding-left:1.3em}.markdown ul{list-style:none;padding-left:1.1em}.markdown ul>li{position:relative}.markdown ul>li:before{content:"";position:absolute;left:-.85em;top:calc((var(--page-line-height) / 2) - 1.5px);width:3px;height:3px;background:currentColor}.markdown li+li{margin-top:.18em}.markdown li>ul,.markdown li>ol{margin-top:.25em;margin-bottom:.25em}.markdown blockquote{margin-left:0;border-left:3px solid var(--border);padding-left:.75rem;color:var(--muted)}.markdown hr{border:0;border-top:1px solid var(--border)}.markdown table{width:100%;border-collapse:collapse;table-layout:auto}.markdown th,.markdown td{padding:.45rem .25rem;border-bottom:1px solid var(--border);text-align:left;vertical-align:top}.markdown th{color:var(--muted);font-weight:600}.markdown.analytics{width:100%}.markdown.analytics ul{list-style:none;padding-left:0;width:100%}.markdown.analytics ul+ul,.markdown.analytics ul>li:nth-child(4){margin-top:calc(2 * var(--page-line-height))}.markdown.analytics ul>li,.markdown.analytics ul>li>p{display:flex;justify-content:space-between;align-items:baseline;width:100%;margin:0;gap:16px}.markdown.analytics ul>li:before{content:none}.markdown sup{color:var(--muted);font-size:.72em}.markdown [data-footnotes]{margin-top:1.25rem;border-top:1px solid var(--border);padding-top:.75rem}.markdown [data-footnotes] p,.markdown [data-footnotes] li{color:var(--muted)}.markdown [data-footnote-backref]{text-decoration:none}.app-shell[data-layout=portfolio]{position:relative;min-height:100svh;padding:72px 24px;align-items:center;justify-content:safe center}[data-layout=portfolio] .page-wrap{width:100%;max-width:450px;min-height:0}[data-layout=portfolio] .page-content{flex:none}[data-layout=portfolio] .markdown{padding:0;color:var(--text);font-size:var(--page-font-size);line-height:var(--page-line-height);letter-spacing:var(--page-letter-spacing);overflow-wrap:anywhere}.profile-avatar-wrap{margin-bottom:24px;display:flex;align-items:center}.profile-balls{display:flex;align-items:center;gap:6px}.pool-balls-3d,.pool-balls-3d canvas{display:block}.pool-ball{display:grid;place-items:center;width:36px;height:36px;border-radius:50%;background:var(--ball-color);color:#0d0d0d;transform:rotate(var(--ball-rotation, 0deg));transition:transform .14s cubic-bezier(.23,1,.32,1)}.pool-ball>span{display:grid;place-items:center;width:59%;height:59%;border-radius:50%;background:#f5f5f5;font-size:11px;font-weight:600;line-height:1}.profile-avatar-link{display:inline-flex;transition:transform .16s cubic-bezier(.23,1,.32,1)}.profile-avatar-link:active{transform:scale(.97)}.profile-avatar-link--mark:active{transform:none}.profile-avatar{display:block;object-fit:cover;border-radius:10px}.nomo-mark-3d,.nomo-mark-3d canvas{display:block}svg.nomo-mark-3d{width:57px;height:60px}.profile-navigation{display:flex;flex-wrap:wrap;align-items:baseline;gap:14px;margin-bottom:48px;font-size:var(--page-font-size);line-height:var(--page-line-height);letter-spacing:var(--page-letter-spacing)}.profile-navigation a{color:var(--muted);white-space:nowrap}.profile-navigation a[aria-current=page],.profile-navigation a:hover{color:var(--text)}[data-layout=portfolio] .markdown p,[data-layout=portfolio] .markdown ul,[data-layout=portfolio] .markdown ol,[data-layout=portfolio] .markdown blockquote,[data-layout=portfolio] .markdown table,[data-layout=portfolio] .markdown hr{margin:0;letter-spacing:inherit}[data-layout=portfolio] .markdown .code-block,[data-layout=portfolio] .markdown .markdown-media,[data-layout=portfolio] .markdown .markdown-gallery-block{margin:1em 0 0;letter-spacing:inherit}[data-layout=portfolio] .markdown h1,[data-layout=portfolio] .markdown h2,[data-layout=portfolio] .markdown h3,[data-layout=portfolio] .markdown h4,[data-layout=portfolio] .markdown h5,[data-layout=portfolio] .markdown h6{letter-spacing:inherit}[data-layout=portfolio] .markdown>:first-child{margin-top:0!important}[data-layout=portfolio] .markdown>:last-child{margin-bottom:0}[data-layout=portfolio] .markdown .markdown-link{display:inline;font-weight:400}[data-layout=portfolio] .markdown .markdown-link--arrow{display:inline-flex;align-items:center;gap:.1rem}[data-layout=portfolio] .markdown .markdown-link__icon{flex:0 0 auto;width:12px;height:12px}[data-layout=portfolio] .markdown .markdown-link:hover{opacity:1;text-decoration:underline}[data-layout=portfolio] .app-footer{position:fixed;bottom:16px;left:24px;right:auto;margin:0;padding:0;font-size:13px;line-height:var(--page-line-height);letter-spacing:var(--page-letter-spacing);white-space:nowrap;z-index:2}.theme-toggle{position:fixed;bottom:16px;right:24px;z-index:2;display:grid;place-items:center;width:28px;height:28px;padding:0;border:0;background:transparent;color:var(--muted);cursor:pointer}.theme-toggle:hover{color:var(--text)}.theme-toggle:active{transform:scale(.96)}.theme-toggle svg{width:16px;height:16px}[data-layout=portfolio] .app-footer .markdown-link{color:var(--link);font-weight:400}[data-layout=portfolio] .markdown .markdown-muted .markdown-link{color:var(--link)}[data-layout=portfolio] .markdown-gallery{grid-template-columns:repeat(2,minmax(0,1fr))}.retry-button{font:inherit;border:1px solid var(--border);background:var(--code);color:var(--text);border-radius:6px;padding:8px 12px;cursor:pointer}a:focus-visible,button:focus-visible{outline:2px solid var(--link);outline-offset:4px}dialog.markdown-lightbox{width:100vw;height:100dvh;max-width:none;max-height:none;margin:0;color:var(--text)}dialog.markdown-lightbox::backdrop{background:transparent}.lightbox-close{position:absolute;top:16px;right:16px;width:44px;height:44px;border:0;border-radius:0;background:transparent;color:var(--text);font:28px/1 sans-serif;cursor:pointer}@media(max-width:540px){.app-shell[data-layout=portfolio]{padding-left:28px;padding-right:28px}[data-layout=portfolio] .app-footer{left:28px}.theme-toggle{right:28px}.profile-avatar-wrap{margin-bottom:12px}}@media(hover:none){.code-copy-button{opacity:.7}}@media(hover:hover)and (pointer:fine){.profile-avatar-link:hover{transform:scale(.97)}.profile-avatar-link--mark:hover{transform:none}.profile-balls:hover .pool-ball{transform:translateY(var(--ball-hover-y, -3px)) rotate(var(--ball-rotation, 0deg))}}@media(prefers-reduced-motion:reduce){.markdown-gallery__item{transform:none!important;transition:none}.markdown-lightbox,.markdown-lightbox__media-wrap{transition:none;transform:none}.profile-avatar-link,.pool-ball{transition:none}.theme-toggle:active{transform:none}.page-fade__leave,.page-fade__live{animation:none;filter:none}}
