@font-face{font-family:"Inter";font-style:normal;font-weight:100 900;font-display:swap;src:url("/fonts/Inter.var.woff2") format("woff2")}:root{--bg: #f6f5f4;--surface: #fbfaf9;--ink: #241f31;--muted: #5e5c64;--faint: #9a9996;--rule: #deddda;--accent: #1a5fb4;--accent-hover: #1c71d8;--code-bg: #eeedeb;--selection: #cfe1f6;--measure: 42rem;--font-sans: "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;--font-mono: ui-monospace, "JetBrains Mono", "SFMono-Regular", Menlo, monospace;--step: 1.6}:root[data-theme=dark]{--bg: #1e1e22;--surface: #25252b;--ink: #e3e1de;--muted: #a8a6a0;--faint: #77767b;--rule: #3a3a40;--accent: #78aeed;--accent-hover: #99c1f1;--code-bg: #26262b;--selection: #2c4663}*,*::before,*::after{box-sizing:border-box}html{background:var(--bg)}body{margin:0;min-height:100vh;font-family:var(--font-sans);font-size:17px;line-height:var(--step);color:var(--ink);background:rgba(0,0,0,0);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;display:flex;flex-direction:column}::selection{background:var(--selection)}.container{width:100%;max-width:var(--measure);margin-inline:auto;padding-inline:1.5rem}main.container{flex:1 0 auto;padding-top:1rem;padding-bottom:4rem}h1,h2,h3,h4{line-height:1.2;font-weight:600;margin:2.2rem 0 .6rem}h1{font-weight:200;font-size:clamp(2rem,1.4rem + 2.4vw,2.8rem);letter-spacing:-.02em;margin-top:1.5rem}h2{font-size:1.35rem}h3{font-size:1.1rem}p,ul,ol{margin:0 0 1.1rem}a{color:var(--accent);font-weight:500;text-decoration:none;text-underline-offset:2px}a:hover{color:var(--accent-hover);text-decoration:underline}hr{border:0;height:1px;background:var(--rule);width:38%;margin:2.6rem auto}code{font-family:var(--font-mono);font-size:.9em;background:var(--code-bg);padding:.12em .36em;border-radius:5px}pre{font-family:var(--font-mono);font-size:.86rem;line-height:1.5;background:var(--code-bg);padding:1rem 1.1rem;border-radius:10px;overflow-x:auto}pre code{background:none;padding:0}blockquote{margin:1.4rem 0;padding-left:1.1rem;border-left:2px solid var(--rule);color:var(--muted)}.muted{color:var(--muted)}.small{font-size:.82rem}.site-header{width:100%;max-width:var(--measure);margin-inline:auto;padding:1.4rem 1.5rem .6rem;display:flex;align-items:center;justify-content:space-between;gap:1rem}.wordmark{font-weight:600;font-size:1.05rem;color:var(--ink);letter-spacing:.01em}.wordmark:hover{color:var(--accent);text-decoration:none}.site-nav{display:flex;align-items:center;gap:.55rem;font-size:.95rem}.site-nav a{color:var(--muted);font-weight:500}.site-nav a:hover{color:var(--accent);text-decoration:none}.site-nav .dot{color:var(--faint)}.theme-toggle,.motion-toggle{margin-left:.4rem;width:1.7rem;height:1.7rem;display:inline-grid;place-items:center;border:1px solid var(--rule);border-radius:50%;background:var(--surface);color:var(--muted);cursor:pointer;font-size:.7rem;line-height:1;transition:border-color .15s ease,color .15s ease}.theme-toggle:hover,.motion-toggle:hover{color:var(--accent);border-color:var(--accent)}.theme-toggle .th-dark{display:none}:root[data-theme=dark] .theme-toggle .th-light{display:none}:root[data-theme=dark] .theme-toggle .th-dark{display:inline}.motion-toggle .mo-calm{display:none}:root[data-motion=calm] .motion-toggle .mo-full{display:none}:root[data-motion=calm] .motion-toggle .mo-calm{display:inline}@media (prefers-reduced-motion: reduce){.motion-toggle{display:none}}.intro{padding-top:1.5rem}.intro .name{margin-bottom:.2rem}.intro .tagline{font-size:1.05rem;margin-top:0}.section-label{text-transform:lowercase;letter-spacing:.04em;font-size:.8rem;font-weight:600;color:var(--accent);margin:2rem 0 .6rem}.entry-list{list-style:none;margin:0;padding:0}.entry-list li{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;padding:.35rem 0;border-bottom:1px solid rgba(0,0,0,0)}.entry-list li a{color:var(--ink);font-weight:500}.entry-list li a:hover{color:var(--accent);text-decoration:none}.entry-list time{color:var(--faint);font-size:.82rem;white-space:nowrap}.prose{margin-top:.5rem}.prose img{max-width:100%;height:auto;display:block;margin:1.6rem auto;border-radius:8px}.site-footer{flex-shrink:0;padding-top:2rem;padding-bottom:2.5rem;border-top:1px solid var(--rule);margin-top:2rem;display:flex;flex-direction:column;gap:.4rem}.footer-links{display:flex;gap:.55rem;align-items:center;flex-wrap:wrap}.footer-links a{color:var(--muted);font-weight:500}.footer-links .dot{color:var(--faint)}@media (prefers-reduced-motion: reduce){*,*::before,*::after{animation-duration:.001ms !important;animation-iteration-count:1 !important;transition-duration:.001ms !important}}.toc{margin:1.4rem 0 2rem;padding:.9rem 1.1rem;background:var(--surface);border:1px solid var(--rule);border-radius:10px;font-size:.92rem}.toc-label{text-transform:lowercase;letter-spacing:.04em;font-size:.78rem;font-weight:600;color:var(--muted);margin:0 0 .4rem}.toc ol{list-style:none;margin:0;padding:0}.toc ol ol{padding-left:1rem;margin-top:.2rem}.toc li{margin:.18rem 0}.toc a{color:var(--muted);font-weight:400}.toc a:hover{color:var(--accent)}.katex-display{overflow-x:auto;overflow-y:hidden;padding:.4rem 0}.book-list{list-style:none;margin:0 0 1.5rem;padding:0}.book-row{display:flex;align-items:baseline;gap:.6rem;padding:.4rem 0;border-bottom:1px solid var(--rule)}.book-title{color:var(--ink);font-weight:500}.book-title:hover{color:var(--accent);text-decoration:none}.book-author{color:var(--muted);font-size:.85rem}.book-meta{margin-left:auto;display:flex;align-items:baseline;gap:.6rem;white-space:nowrap}.stars{color:var(--accent);font-size:.8rem;letter-spacing:1px}.book-meta time{color:var(--faint);font-size:.8rem}.project-grid{display:grid;grid-template-columns:repeat(auto-fit, minmax(220px, 1fr));gap:1rem;margin:1rem 0 2rem}.project-card{display:flex;flex-direction:column;gap:.55rem;padding:1rem 1.1rem;background:var(--surface);border:1px solid var(--rule);border-radius:12px}.project-name{margin:0;font-size:1.05rem;font-weight:600}.project-name a{color:var(--ink)}.project-name a:hover{color:var(--accent);text-decoration:none}.project-blurb{margin:0;flex:1;color:var(--muted);font-size:.9rem;line-height:1.5}.tags{display:flex;flex-wrap:wrap;gap:.35rem}.tag{font-size:.72rem;font-weight:600;padding:.1rem .55rem;border-radius:20px;background:color-mix(in srgb, var(--accent) 12%, rgba(0,0,0,0));color:var(--accent)}.card-links{display:flex;align-items:baseline;gap:.9rem;margin-top:.1rem;padding-top:.55rem;border-top:1px solid var(--rule);font-size:.82rem;font-weight:600}.card-links .lang{margin-left:auto;color:var(--faint);font-weight:400}.project-detail-links{margin:.4rem 0 1rem;padding:0;border:0}.tagline-block{max-width:34em;color:var(--muted);font-size:1.05rem}.tagline-block p{margin:0}.stream-head{display:flex;justify-content:space-between;align-items:baseline;margin:2rem 0 .5rem}.stream-head .section-label{margin:0}.stream-all{font-size:.8rem;font-weight:500;color:var(--faint)}.stream-all:hover{color:var(--accent);text-decoration:none}.reading-now{margin:.2rem 0}.reading-now strong{font-weight:600}.reading-recent{margin:.3rem 0 0;color:var(--muted);font-size:.9rem}.reading-recent a{color:var(--muted);font-weight:500}.reading-recent a:hover{color:var(--accent)}.home-projects{list-style:none;margin:.2rem 0 0;padding:0}.home-projects li{padding:.25rem 0}.home-projects b{font-weight:600}.home-projects a{color:var(--ink)}.home-projects a:hover{color:var(--accent);text-decoration:none}.home-projects .blurb{color:var(--muted)}.fig{margin:1.8rem 0}.fig img{display:block;width:100%;height:auto;border-radius:8px}.fig figcaption{margin-top:.5rem;font-size:.85rem;color:var(--muted);text-align:center}#constellation{position:fixed;inset:0;z-index:-1;pointer-events:none}:root[data-theme=light] .z-code{color:#24292e;background-color:#fff}:root[data-theme=light] .z-hl{background-color:#f6f8fa}:root[data-theme=light] .giallo-ln{color:rgba(27,31,35,.3019607843)}:root[data-theme=light] .z-comment{color:#6a737d}:root[data-theme=light] .z-constant{color:#005cc5}:root[data-theme=light] .z-entity{color:#6f42c1}:root[data-theme=light] .z-keyword{color:#d73a49}:root[data-theme=light] .z-storage{color:#d73a49}:root[data-theme=light] .z-string{color:#032f62}:root[data-theme=light] .z-support{color:#005cc5}:root[data-theme=light] .z-variable{color:#e36209}:root[data-theme=light] .z-carriage-return{color:#fafbfc;background-color:#d73a49;font-style:italic;text-decoration:underline}:root[data-theme=light] .z-variable{color:#005cc5}:root[data-theme=light] .z-source{color:#032f62}:root[data-theme=light] .z-string.z-comment{color:#6a737d}:root[data-theme=light] .z-variable.z-language{color:#005cc5}:root[data-theme=light] .z-entity.z-name{color:#6f42c1}:root[data-theme=light] .z-storage.z-type{color:#d73a49}:root[data-theme=light] .z-meta.z-property-name{color:#005cc5}:root[data-theme=light] .z-variable.z-other{color:#24292e}:root[data-theme=light] .z-invalid.z-broken{color:#b31d28;font-style:italic}:root[data-theme=light] .z-invalid.z-deprecated{color:#b31d28;font-style:italic}:root[data-theme=light] .z-invalid.z-illegal{color:#b31d28;font-style:italic}:root[data-theme=light] .z-invalid.z-unimplemented{color:#b31d28;font-style:italic}:root[data-theme=light] .z-message.z-error{color:#b31d28}:root[data-theme=light] .z-source.z-regexp{color:#032f62}:root[data-theme=light] .z-string.z-regexp{color:#032f62}:root[data-theme=light] .z-support.z-constant{color:#005cc5}:root[data-theme=light] .z-support.z-variable{color:#005cc5}:root[data-theme=light] .z-meta.z-module-reference{color:#005cc5}:root[data-theme=light] .z-markup.z-heading{color:#005cc5;font-weight:bold}:root[data-theme=light] .z-markup.z-quote{color:#22863a}:root[data-theme=light] .z-markup.z-italic{color:#24292e;font-style:italic}:root[data-theme=light] .z-markup.z-bold{color:#24292e;font-weight:bold}:root[data-theme=light] .z-markup.z-underline{text-decoration:underline}:root[data-theme=light] .z-markup.z-strikethrough{text-decoration:line-through}:root[data-theme=light] .z-markup.z-deleted{color:#b31d28;background-color:#ffeef0}:root[data-theme=light] .z-markup.z-inserted{color:#22863a;background-color:#f0fff4}:root[data-theme=light] .z-markup.z-changed{color:#e36209;background-color:#ffebda}:root[data-theme=light] .z-markup.z-ignored{color:#f6f8fa;background-color:#005cc5}:root[data-theme=light] .z-markup.z-untracked{color:#f6f8fa;background-color:#005cc5}:root[data-theme=light] .z-meta.z-separator{color:#005cc5;font-weight:bold}:root[data-theme=light] .z-meta.z-output{color:#005cc5}:root[data-theme=light] .z-brackethighlighter.z-tag{color:#586069}:root[data-theme=light] .z-brackethighlighter.z-curly{color:#586069}:root[data-theme=light] .z-brackethighlighter.z-round{color:#586069}:root[data-theme=light] .z-brackethighlighter.z-square{color:#586069}:root[data-theme=light] .z-brackethighlighter.z-angle{color:#586069}:root[data-theme=light] .z-brackethighlighter.z-quote{color:#586069}:root[data-theme=light] .z-brackethighlighter.z-unmatched{color:#b31d28}:root[data-theme=light] .z-entity.z-name{color:#005cc5;font-weight:bold}:root[data-theme=light] .z-punctuation.z-definition.z-comment{color:#6a737d}:root[data-theme=light] .z-entity.z-name.z-constant{color:#005cc5}:root[data-theme=light] .z-variable.z-other.z-constant{color:#005cc5}:root[data-theme=light] .z-variable.z-other.z-enummember{color:#005cc5}:root[data-theme=light] .z-variable.z-parameter.z-function{color:#24292e}:root[data-theme=light] .z-entity.z-name.z-tag{color:#22863a}:root[data-theme=light] .z-storage.z-modifier.z-package{color:#24292e}:root[data-theme=light] .z-storage.z-modifier.z-import{color:#24292e}:root[data-theme=light] .z-storage.z-type.z-java{color:#24292e}:root[data-theme=light] .z-punctuation.z-definition.z-string{color:#032f62}:root[data-theme=light] .z-string.z-regexp.z-character-class{color:#032f62}:root[data-theme=light] .z-markup.z-inline.z-raw{color:#005cc5}:root[data-theme=light] .z-punctuation.z-definition.z-deleted{color:#b31d28;background-color:#ffeef0}:root[data-theme=light] .z-punctuation.z-definition.z-inserted{color:#22863a;background-color:#f0fff4}:root[data-theme=light] .z-punctuation.z-definition.z-changed{color:#e36209;background-color:#ffebda}:root[data-theme=light] .z-meta.z-diff.z-range{color:#6f42c1;font-weight:bold}:root[data-theme=light] .z-meta.z-diff.z-header{color:#005cc5}:root[data-theme=light] .z-string.z-other.z-link{color:#032f62;text-decoration:underline}:root[data-theme=light] .z-constant.z-character.z-escape{color:#032f62}:root[data-theme=light] .z-source.z-ruby.z-embedded{color:#032f62}:root[data-theme=light] .z-string.z-regexp.z-arbitrary-repitition{color:#032f62}:root[data-theme=light] .z-constant.z-character.z-escape{color:#22863a;font-weight:bold}:root[data-theme=light] .z-meta.z-diff.z-header.z-from-file{color:#b31d28;background-color:#ffeef0}:root[data-theme=light] .z-meta.z-diff.z-header.z-to-file{color:#22863a;background-color:#f0fff4}:root[data-theme=light] .z-constant.z-other.z-reference.z-link{color:#032f62;text-decoration:underline}:root[data-theme=light] .z-punctuation.z-definition.z-list.z-begin.z-markdown{color:#e36209}:root[data-theme=dark] .z-code{color:#e1e4e8;background-color:#24292e}:root[data-theme=dark] .z-hl{background-color:#2b3036}:root[data-theme=dark] .giallo-ln{color:#444d56}:root[data-theme=dark] .z-comment{color:#6a737d}:root[data-theme=dark] .z-constant{color:#79b8ff}:root[data-theme=dark] .z-entity{color:#b392f0}:root[data-theme=dark] .z-keyword{color:#f97583}:root[data-theme=dark] .z-storage{color:#f97583}:root[data-theme=dark] .z-string{color:#9ecbff}:root[data-theme=dark] .z-support{color:#79b8ff}:root[data-theme=dark] .z-variable{color:#ffab70}:root[data-theme=dark] .z-carriage-return{color:#24292e;background-color:#f97583;font-style:italic;text-decoration:underline}:root[data-theme=dark] .z-variable{color:#79b8ff}:root[data-theme=dark] .z-source{color:#9ecbff}:root[data-theme=dark] .z-string.z-comment{color:#6a737d}:root[data-theme=dark] .z-variable.z-language{color:#79b8ff}:root[data-theme=dark] .z-entity.z-name{color:#b392f0}:root[data-theme=dark] .z-storage.z-type{color:#f97583}:root[data-theme=dark] .z-meta.z-property-name{color:#79b8ff}:root[data-theme=dark] .z-variable.z-other{color:#e1e4e8}:root[data-theme=dark] .z-invalid.z-broken{color:#fdaeb7;font-style:italic}:root[data-theme=dark] .z-invalid.z-deprecated{color:#fdaeb7;font-style:italic}:root[data-theme=dark] .z-invalid.z-illegal{color:#fdaeb7;font-style:italic}:root[data-theme=dark] .z-invalid.z-unimplemented{color:#fdaeb7;font-style:italic}:root[data-theme=dark] .z-message.z-error{color:#fdaeb7}:root[data-theme=dark] .z-source.z-regexp{color:#dbedff}:root[data-theme=dark] .z-string.z-regexp{color:#dbedff}:root[data-theme=dark] .z-support.z-constant{color:#79b8ff}:root[data-theme=dark] .z-support.z-variable{color:#79b8ff}:root[data-theme=dark] .z-meta.z-module-reference{color:#79b8ff}:root[data-theme=dark] .z-markup.z-heading{color:#79b8ff;font-weight:bold}:root[data-theme=dark] .z-markup.z-quote{color:#85e89d}:root[data-theme=dark] .z-markup.z-italic{color:#e1e4e8;font-style:italic}:root[data-theme=dark] .z-markup.z-bold{color:#e1e4e8;font-weight:bold}:root[data-theme=dark] .z-markup.z-underline{text-decoration:underline}:root[data-theme=dark] .z-markup.z-strikethrough{text-decoration:line-through}:root[data-theme=dark] .z-markup.z-deleted{color:#fdaeb7;background-color:#86181d}:root[data-theme=dark] .z-markup.z-inserted{color:#85e89d;background-color:#144620}:root[data-theme=dark] .z-markup.z-changed{color:#ffab70;background-color:#c24e00}:root[data-theme=dark] .z-markup.z-ignored{color:#2f363d;background-color:#79b8ff}:root[data-theme=dark] .z-markup.z-untracked{color:#2f363d;background-color:#79b8ff}:root[data-theme=dark] .z-meta.z-separator{color:#79b8ff;font-weight:bold}:root[data-theme=dark] .z-meta.z-output{color:#79b8ff}:root[data-theme=dark] .z-brackethighlighter.z-tag{color:#d1d5da}:root[data-theme=dark] .z-brackethighlighter.z-curly{color:#d1d5da}:root[data-theme=dark] .z-brackethighlighter.z-round{color:#d1d5da}:root[data-theme=dark] .z-brackethighlighter.z-square{color:#d1d5da}:root[data-theme=dark] .z-brackethighlighter.z-angle{color:#d1d5da}:root[data-theme=dark] .z-brackethighlighter.z-quote{color:#d1d5da}:root[data-theme=dark] .z-brackethighlighter.z-unmatched{color:#fdaeb7}:root[data-theme=dark] .z-entity.z-name{color:#79b8ff;font-weight:bold}:root[data-theme=dark] .z-punctuation.z-definition.z-comment{color:#6a737d}:root[data-theme=dark] .z-entity.z-name.z-constant{color:#79b8ff}:root[data-theme=dark] .z-variable.z-other.z-constant{color:#79b8ff}:root[data-theme=dark] .z-variable.z-other.z-enummember{color:#79b8ff}:root[data-theme=dark] .z-variable.z-parameter.z-function{color:#e1e4e8}:root[data-theme=dark] .z-entity.z-name.z-tag{color:#85e89d}:root[data-theme=dark] .z-storage.z-modifier.z-package{color:#e1e4e8}:root[data-theme=dark] .z-storage.z-modifier.z-import{color:#e1e4e8}:root[data-theme=dark] .z-storage.z-type.z-java{color:#e1e4e8}:root[data-theme=dark] .z-punctuation.z-definition.z-string{color:#9ecbff}:root[data-theme=dark] .z-string.z-regexp.z-character-class{color:#dbedff}:root[data-theme=dark] .z-markup.z-inline.z-raw{color:#79b8ff}:root[data-theme=dark] .z-punctuation.z-definition.z-deleted{color:#fdaeb7;background-color:#86181d}:root[data-theme=dark] .z-punctuation.z-definition.z-inserted{color:#85e89d;background-color:#144620}:root[data-theme=dark] .z-punctuation.z-definition.z-changed{color:#ffab70;background-color:#c24e00}:root[data-theme=dark] .z-meta.z-diff.z-range{color:#b392f0;font-weight:bold}:root[data-theme=dark] .z-meta.z-diff.z-header{color:#79b8ff}:root[data-theme=dark] .z-string.z-other.z-link{color:#dbedff;text-decoration:underline}:root[data-theme=dark] .z-constant.z-character.z-escape{color:#dbedff}:root[data-theme=dark] .z-source.z-ruby.z-embedded{color:#dbedff}:root[data-theme=dark] .z-string.z-regexp.z-arbitrary-repitition{color:#dbedff}:root[data-theme=dark] .z-constant.z-character.z-escape{color:#85e89d;font-weight:bold}:root[data-theme=dark] .z-meta.z-diff.z-header.z-from-file{color:#fdaeb7;background-color:#86181d}:root[data-theme=dark] .z-meta.z-diff.z-header.z-to-file{color:#85e89d;background-color:#144620}:root[data-theme=dark] .z-constant.z-other.z-reference.z-link{color:#dbedff;text-decoration:underline}:root[data-theme=dark] .z-punctuation.z-definition.z-list.z-begin.z-markdown{color:#ffab70}