:root{--color-bg: oklch(97% 0.001 106.424);--color-text: oklch(26.9% 0 0);--color-text-muted: #666;--color-border: lightgray;--color-tag-bg: #e0e0e0;--color-tag-text: #666;--color-accent-blue: #028BFF;--color-accent-scarlet: #FF2803;--color-accent-green: #16a34a;--color-accent-purple: #595AFF}[data-theme="dark"]{--color-bg: #1a1a1d;--color-text: #e8e8e8;--color-text-muted: #a0a0a0;--color-border: #3a3a3d;--color-tag-bg: #3a3a3d;--color-tag-text: #c0c0c0;--color-accent-blue: #3da1ff;--color-accent-scarlet: #ff5a40;--color-accent-green: #22c55e;--color-accent-purple: #7879ff}@media (prefers-color-scheme: dark){:root:not([data-theme]){--color-bg: #1a1a1d;--color-text: #e8e8e8;--color-text-muted: #a0a0a0;--color-border: #3a3a3d;--color-tag-bg: #3a3a3d;--color-tag-text: #c0c0c0;--color-accent-blue: #3da1ff;--color-accent-scarlet: #ff5a40;--color-accent-green: #22c55e;--color-accent-purple: #7879ff}}.theme-toggle{background:none;border:1px solid var(--color-border);border-radius:0.5em;padding:0.375em 0.5em;cursor:pointer;font-size:1em;line-height:1;color:var(--color-text);transition:border-color 0.2s ease}.theme-toggle:hover{border-color:var(--color-text-muted)}.theme-toggle:focus{outline:2px solid var(--color-accent-blue);outline-offset:2px}.theme-toggle::before{content:"☀️"}:root:not([data-theme="dark"]) .theme-toggle::before{content:"🌙"}@media (prefers-color-scheme: dark){:root:not([data-theme]) .theme-toggle::before{content:"☀️"}}@font-face{font-family:"Prelude";font-style:normal;font-weight:normal;src:url("/assets/fonts/Prelude/Prelude-Medium.ttf")}@font-face{font-family:"Prelude";font-style:italic;font-weight:normal;src:url("/assets/fonts/Prelude/Prelude-MediumOblique.ttf")}@font-face{font-family:"Prelude";font-style:normal;font-weight:bold;src:url("/assets/fonts/Prelude/Prelude-Bold.ttf")}@font-face{font-family:"Prelude";font-style:italic;font-weight:bold;src:url("/assets/fonts/Prelude/Prelude-BoldOblique.ttf")}header{display:flex;align-items:center;justify-content:space-between}@media (max-width: 640px){header{flex-direction:column;align-items:flex-start}}.header-logo{display:flex;align-items:center;gap:0.5em}.header-logo>img{width:2.75em;height:2.75em;border-radius:1.5em}.header-links{display:flex;align-items:center;gap:0.5em}html{scroll-behavior:smooth;height:100%}a{text-decoration:underline;text-decoration-color:color-mix(in srgb, currentColor 30%, transparent)}a:hover{text-decoration-color:color-mix(in srgb, currentColor 60%, transparent)}.blue{color:var(--color-accent-blue)}.scarlet{color:var(--color-accent-scarlet)}.green{color:var(--color-accent-green)}.purple{color:var(--color-accent-purple)}body{background-color:var(--color-bg);color:var(--color-text);position:relative;min-height:100%;margin:0 auto;padding:1.25em;box-sizing:border-box;display:flex;flex-direction:column;justify-content:center;font-family:"Prelude", sans-serif;max-width:42em}article{padding-top:1em;padding-bottom:1em;border-bottom:1px var(--color-border) solid}article>time{font-size:1em;line-height:1.0;opacity:0.6}article>h1{font-size:2em;font-weight:bold;line-height:1.2}article>h2{font-size:1.25em;font-weight:normal;line-height:1.2}article>h3{font-size:1.25em;font-weight:normal;line-height:1.2;opacity:0.6}article>p{font-size:1em;line-height:1.6}article>ul{font-size:1em;line-height:1.6;padding-left:1em}article>ul>li{margin-bottom:0.5em}footer>p{color:grey}.hero{padding:2em 0;border-bottom:1px var(--color-border) solid}.hero .tagline{font-size:1.25em;line-height:1.5;margin:0}section{padding:1.5em 0;border-bottom:1px var(--color-border) solid}section h2{font-size:1.5em;font-weight:bold;color:var(--color-text);margin-bottom:0.75em}.featured-projects .project-card{display:flex;gap:1em;align-items:flex-start;margin-top:2.0em;margin-bottom:2.0em}.featured-projects .project-card:last-child{margin-bottom:0}.featured-projects .project-info h3{font-size:1.25em;margin:0 0 0.5em 0}.platform-tag{font-size:0.75em;font-weight:bold;background-color:var(--color-tag-bg);color:var(--color-tag-text);padding:0.125em 0.5em;border-radius:0.75em;margin-left:0.25em;vertical-align:0.125em}.featured-projects .project-info p{font-size:1em;line-height:1.5;margin:0 0 0.5em 0}.featured-projects .project-info img{width:3em;height:3em;border-radius:0.5em}.featured-projects .project-link{font-size:1em}.about p{font-size:1em;line-height:1.5;margin-bottom:0.5em}.about p:last-child{margin-bottom:0}.about a{color:inherit}footer{padding:1.5em 0}footer p{font-size:0.75em;color:var(--color-text-muted)}footer a{color:var(--color-text-muted)}code[class*=language-],pre[class*=language-]{color:#f8f8f2;background:none;text-shadow:0 1px rgba(0,0,0,0.3);font-family:SFMono-Regular, Consolas, Liberation Mono, Menlo, Monaco, Andale Mono, Ubuntu Mono, Courier, monospace;font-size:0.90em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;tab-size:4;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;border-radius:.3em}:not(pre)>code[class*=language-],pre[class*=language-]{background:#202025}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#f8f8f2}.namespace{opacity:.7}.token.constant,.token.deleted,.token.property,.token.symbol,.token.tag{color:#f92672}.token.boolean,.token.number{color:#ae81ff}.token.string{color:#fc5661}.token.attr-name,.token.char,.token.inserted,.token.selector{color:#66daff}.token.builtin{color:#e0b8ff}.token.interpolation{color:#56d0b3}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url,.token.variable{color:#f8f8f2}.token.atrule,.token.attr-value{color:#e6db74}.token.class-name{color:#76e6ff}.token.function{color:#54dcfc}.token.keyword{color:#f2248c;font-weight:700}.token.important,.token.regex{color:#fd971f}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}hstack{display:flex;align-self:stretch;align-items:center;flex-direction:row}hstack[spacing=xl]>*{margin-right:40px}hstack[spacing=l]>*{margin-right:28px}hstack[spacing=m]>*{margin-right:20px}hstack[spacing=s]>*{margin-right:15px}hstack[spacing=xs]>*{margin-right:10px}hstack[spacing=xxs]>*{margin-right:6px}hstack[spacing]>:last-child{margin-right:0}hstack[align-y=top]{align-items:flex-start}hstack[align-y=center]{align-items:center}hstack[align-y=bottom]{align-items:flex-end}hstack[align-x=left]{justify-content:flex-start}hstack[align-x=center]{justify-content:center}hstack[align-x=right]{justify-content:flex-end}vstack{display:flex;align-self:stretch;flex:1 1 auto;flex-direction:column}vstack[spacing=xl]>*{margin-bottom:40px}vstack[spacing=l]>*{margin-bottom:28px}vstack[spacing=m]>*{margin-bottom:20px}vstack[spacing=s]>*{margin-bottom:15px}vstack[spacing=xs]>*{margin-bottom:10px}vstack[spacing=xxs]>*{margin-bottom:6px}vstack[spacing]>:last-child{margin-bottom:0}vstack[align-x=left]{align-items:flex-start}vstack[align-x=center]{align-items:center}vstack[align-x=right]{align-items:flex-end}vstack[align-y=top]{justify-content:flex-start}vstack[align-y=center]{justify-content:center}vstack[align-y=bottom]{justify-content:flex-end}list{display:flex;align-self:stretch;flex:1 1 auto;flex-direction:column}list>*{border-bottom:1px solid var(--color-border)}list>*,list vstack{margin:0}list>:last-child{border-bottom:none}list[spacing=xl]>*{padding:40px 0}list[spacing=l]>*{padding:28px 0}list[spacing=m]>*{padding:20px 0}list[spacing=s]>*{padding:15px 0}list[spacing=xs]>*{padding:10px 0}list[spacing=xxs]>*{padding:6px 0}list[align-x=left]{align-items:flex-start}list[align-x=center]{align-items:center}list[align-x=right]{align-items:flex-end}list[align-y=top]{justify-content:flex-start}list[align-y=center]{justify-content:center}list[align-y=bottom]{justify-content:flex-end}spacer{flex:1}divider{background-color:var(--color-border);align-self:stretch}vstack>divider{margin:10px 0;height:1px}vstack[spacing]>divider{margin-top:0}hstack>divider{margin:0 10px;width:1px}hstack[spacing]>divider{margin-left:0}divider+list{margin-top:calc(-1*10px)}text{line-height:auto}text[font=title]{font-size:24px;font-weight:600}text[font=caption]{color:var(--color-text-muted);font-size:13px}text[bold]{font-weight:700}text[underline=true],text[underline]{text-decoration:underline}text[underline=false]{text-decoration:none}view{display:flex;height:100%}.pylon{height:100%;padding:0;margin:0}[debug] *{outline:1px solid #009ddc !important}[stretch]{align-self:stretch;flex:1 1 auto}vstack[stretch]{height:100%}
