/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-feature-settings:normal;font-variation-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}}.hidden{display:none}@layer components{.project-card-name{gap:.5rem;margin-bottom:.5rem;font-size:.875rem;font-weight:600;line-height:1.42857}.blog-empty,.bookmarks-empty{color:var(--color-muted-foreground);padding:3rem 0}.blog-empty a{margin-top:1.5rem;display:inline-block}.blog-series-link{color:var(--color-muted-foreground);overflow-wrap:anywhere;margin-top:1rem;font-size:.875rem;line-height:1.5}.bookmark+.bookmark{border-top:1px solid var(--color-border)}.bookmark-byline{color:var(--color-muted-foreground);margin-top:.5rem;font-size:.875rem}.bookmark-note{margin-top:1rem}.bookmark-note>*+*{margin-top:.75rem}.bookmark-note ul,.bookmark-note ol{list-style:revert;padding-left:1.5rem}.bookmark-note pre{background:var(--color-muted);padding:1rem;overflow-x:auto}.bookmark-note blockquote{border-left:2px solid var(--color-border);padding-left:1rem}.bookmark-note img{max-width:100%;height:auto}.bookmark-player{aspect-ratio:16/9;background:var(--color-muted);width:100%;height:auto;margin-top:1.25rem;display:block}.bookmarks-pagination{border-top:1px solid var(--color-border);color:var(--color-muted-foreground);gap:1.5rem;display:flex}.bookmarks-older{margin-left:auto}.blog-series-header .blog-title{overflow-wrap:anywhere;max-width:28ch;font-size:clamp(2rem,4vw,2.625rem)}.blog-series-header .blog-subtitle{white-space:pre-line;overflow-wrap:anywhere}.blog-series-count{color:var(--color-muted-foreground);margin-top:1.5rem;font-size:.875rem}.blog-series-navigation{border-top:1px solid var(--color-border)}.blog-series-navigation-header{color:var(--color-muted-foreground);overflow-wrap:anywhere;flex-wrap:wrap;justify-content:space-between;gap:.75rem 2rem;font-size:.875rem;display:flex}.blog-series-neighbors a{overflow-wrap:anywhere}.blog-series-neighbors span{color:var(--color-muted-foreground);display:block}.blog-item-link{grid-template-columns:minmax(0,1fr) auto;align-items:baseline;gap:2rem;display:grid}.blog-item-date{color:var(--color-muted-foreground);white-space:nowrap;font-size:.8125rem}.blog-item-title{overflow-wrap:break-word}.blog-skip-link{z-index:60;background:var(--color-background);border:2px solid var(--color-foreground);padding:.75rem 1rem;position:fixed;top:5rem;left:1rem;transform:translateY(-15rem)}.blog-skip-link:focus{transform:none}.blog-article-title{margin-bottom:1.5rem}.blog-article-meta{color:var(--color-muted-foreground);flex-wrap:wrap;align-items:center;gap:.25rem .75rem;font-size:.875rem;line-height:1.42857;display:flex}.blog-article-meta-sep{opacity:.4}.blog-toc{line-height:1.45}.blog-toc summary{cursor:pointer;list-style:none}.blog-toc summary::-webkit-details-marker{display:none}.blog-toc summary:after{content:"+";color:var(--color-muted-foreground)}.blog-toc[open] summary:after{content:"−"}.blog-toc ul{margin:0;padding:0;list-style:none}.blog-toc ul ul{padding-left:1rem}.blog-toc li{margin:.125rem 0}.blog-toc nav a{display:block}.blog-article-content{overflow-wrap:break-word;min-width:0}.blog-article-content :is(h1,h2,h3,h4,h5,h6){line-height:1.3}.blog-article-content :is(h1,h2){margin:3.25rem 0 1.125rem}.blog-article-content h3{margin:2.5rem 0 1rem}.blog-article-content :is(h4,h5,h6){margin:2rem 0 .75rem;font-size:1.125rem}.blog-article-content p{margin:0 0 1.25rem}.blog-article-content>:first-child{margin-top:0}.blog-article-content .heading-permalink{color:var(--color-muted-foreground);opacity:0;margin-left:.4em;font-size:.75em;font-weight:400;text-decoration:none;display:inline-block}.blog-article-content :is(h1,h2,h3,h4,h5,h6):hover .heading-permalink,.blog-article-content .heading-permalink:focus{opacity:1}.blog-article-content ul,.blog-article-content ol{margin:0 0 1.5rem;padding-left:1.5rem}.blog-article-content ul{list-style:outside}.blog-article-content ol{list-style:decimal}.blog-article-content li{margin-bottom:.5rem;padding-left:.25rem}.blog-article-content li :is(ul,ol){margin:.5rem 0}.blog-article-content hr{border:none;border-top:1px solid var(--color-border);margin:3rem 0}.blog-article-content blockquote{margin:1.75rem 0;font-style:normal}.blog-article-content blockquote p:last-child{margin-bottom:0}.blog-article-content code{background:var(--color-muted);border:1px solid var(--color-border);padding:.1em .3em;font-size:.8em}.blog-article-content pre{border:1px solid var(--color-border);tab-size:4;white-space:pre;margin:1.75rem 0;padding:1.25rem;line-height:1.6;overflow-x:auto}.blog-article-content pre code{color:var(--color-foreground);text-shadow:none;background:0 0;border:none;padding:0}.blog-code-block{border:1px solid var(--color-border);margin:1.75rem 0}.blog-code-toolbar{border-bottom:1px solid var(--color-border);min-height:2.75rem;color:var(--color-muted-foreground);justify-content:space-between;align-items:center;gap:1rem;padding-left:1.25rem;font-size:.75rem;display:flex}.blog-code-toolbar button{border-left:1px solid var(--color-border);cursor:pointer;min-height:2.75rem;padding:.5rem 1.25rem}.blog-code-toolbar button:hover{background:var(--color-muted);color:var(--color-foreground)}.blog-code-block pre{border:0;margin:0}.blog-article-content .token:is(.comment,.prolog,.doctype,.cdata,.punctuation,.operator){color:var(--color-muted-foreground)}.blog-article-content .token:is(.keyword,.boolean,.constant,.class-name,.function){font-weight:700}.blog-article-content .token:is(.string,.char,.number,.attr-value){color:#444}.blog-article-content img{max-width:100%;height:auto;margin:1.75rem auto}.blog-table-scroll{max-width:100%;margin:1.75rem 0;overflow-x:auto}.blog-article-content table{border:1px solid var(--color-border);border-collapse:separate;border-spacing:0;width:100%}.blog-article-content th,.blog-article-content td{border-bottom:1px solid var(--color-border);padding:.5rem 1rem;font-size:.875rem;line-height:1.25rem}.blog-article-content th{background:var(--color-muted);text-align:left;font-weight:600}.blog-article-content tr:last-child td{border-bottom:none}.blog-comments{border-top:1px solid var(--color-border);padding-top:2rem}.blog-comments h2{margin-bottom:.5rem}.blog-comments-help{color:var(--color-muted-foreground);margin-bottom:1.5rem;font-size:.875rem;line-height:1.5}.blog-comments-github{color:var(--color-muted-foreground);margin-top:1rem;font-size:.875rem;display:inline-block}.attractor-canvas-wrap{position:relative}.attractor-canvas-wrap canvas{width:100%;display:block}.attractor-overlay{color:var(--color-foreground);pointer-events:none;justify-content:center;align-items:center;font-size:.875rem;transition:opacity .2s;display:flex;position:absolute;inset:0}.attractor-row{flex-wrap:wrap;display:flex}.attractor-btn{cursor:pointer;transition:all .15s}.attractor-btn:disabled{opacity:.5;cursor:not-allowed}.attractor-dots{vertical-align:middle;gap:3px;margin-right:6px;display:inline-flex}.attractor-dot{border:1px solid #0003;width:8px;height:8px;display:inline-block}.attractor-colors{flex-wrap:wrap;gap:1rem;margin-top:.75rem;display:flex}.attractor-colors label{color:var(--color-muted-foreground);align-items:center;gap:.5rem;display:flex}.attractor-colors input[type=color]{background:var(--color-background);cursor:pointer;padding:2px}.attractor-sliders{grid-template-columns:minmax(0,1fr);gap:1rem;display:grid}.attractor-slider{flex-direction:column;gap:.25rem;display:flex}.attractor-slider-header{justify-content:space-between;align-items:center;display:flex}.attractor-slider-name{color:var(--color-muted-foreground)}.attractor-slider-value{color:var(--color-foreground);font-weight:700}.attractor-slider input[type=range]{cursor:pointer;width:100%}.error-message{color:var(--color-muted-foreground)}.alert-warning{color:#713f12;background:#fefce8;border:2px solid #ca8a04;align-items:flex-start;gap:.75rem;margin-bottom:1rem;padding:1rem;font-size:.875rem;display:flex}.alert-content{flex:1}.alert-title{margin-bottom:.25rem;font-weight:700}.alert-actions{gap:.75rem;margin-top:.75rem;display:flex}.alert-actions form{display:inline}@media (min-width:768px){.attractor-sliders{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (hover:none){.blog-article-content .heading-permalink{opacity:1}}}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url("../fonts/ibm-plex-mono-regular-latin--Imvmox.woff2")format("woff2")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:600;font-display:swap;src:url("../fonts/ibm-plex-mono-semibold-latin-fzPWCu4.woff2")format("woff2")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url("../fonts/ibm-plex-mono-medium-latin-J35NZ7_.woff2")format("woff2")}html.public-page{color-scheme:light;scrollbar-gutter:stable;-webkit-font-smoothing:antialiased;background:#fff}body.public-site{--color-background:#fff;--color-foreground:#292727;--color-card:#fff;--color-muted:#f5f3f3;--color-muted-foreground:#615c5c;--color-border:#dad6d6;--color-primary:#8d0010;--color-primary-foreground:#fff;--color-control-border:#8a8282;--color-link-visited:#651b22;--font-sans:var(--font-mono);--font-heading:var(--font-sans);--font-mono:"IBM Plex Mono", "SFMono-Regular", Consolas, monospace;width:calc(100% - 4rem);max-width:1120px;min-height:calc(100svh - 4rem);color:var(--color-foreground);font-family:var(--font-sans);background:0 0;border:0;grid-template-columns:224px minmax(0,1fr);align-content:start;column-gap:3rem;margin:2rem auto;font-size:1rem;line-height:1.6;display:grid}.public-site>main,.public-site>.public-footer{grid-column:2;min-width:0}body.public-site.fun-page{max-width:1280px;display:block}.fun-header{margin-bottom:1.5rem;font-size:.9375rem}.fun-header a{align-items:center;min-height:32px;display:inline-flex}body.public-site.public-error{max-width:42rem;display:block}.public-error>main{min-height:inherit;align-items:center;display:grid}.public-error .error-page-container{text-align:left;min-height:0;padding:0;display:block}.public-error .error-title{color:var(--color-primary);letter-spacing:normal;margin:0;font-size:clamp(3rem,10vw,5rem);font-weight:600;line-height:1}.public-error .error-subtitle{letter-spacing:normal;margin:1rem 0 0;font-size:1.25rem;font-weight:600;line-height:1.4}.public-error .error-message{max-width:65ch;margin:1rem 0}.public-error .error-home{align-items:center;min-height:44px;display:inline-flex}.public-site *,.public-site :before,.public-site :after{border-radius:0}.public-site a{color:var(--color-primary);text-underline-offset:3px;text-decoration:underline;text-decoration-thickness:1px;transition:color .16s,background-color .16s,border-color .16s}.public-site a:visited{color:var(--color-link-visited)}.public-site a:hover{color:var(--color-foreground);text-decoration-thickness:2px}.public-site :focus-visible{outline:3px solid var(--color-primary);outline-offset:4px}.public-site ::selection{background:var(--color-primary);color:#fff}.public-skip{z-index:100;background:var(--color-primary);color:#fff;padding:.75rem 1rem;position:fixed;top:.5rem;left:1rem;transform:translateY(-200%)}.public-site .public-skip:focus{color:#fff;transform:none}.public-site .public-navbar{-webkit-backdrop-filter:none;backdrop-filter:none;background:0 0;border:0;grid-area:1/1/span 3;align-self:stretch;max-height:none;padding:.5rem;position:static;overflow:visible}.public-navbar-content{position:sticky;top:2rem}@media (max-height:700px){.public-navbar-content{position:static}}@media (max-height:850px){.public-navbar-content:has(.availability-banner){position:static}}.public-portrait{aspect-ratio:1;align-self:start;width:100%;margin-bottom:.75rem}.public-portrait img{object-fit:cover;width:100%;height:100%;display:block}.public-navbar-row{display:block}.public-site .navbar-brand,.public-site .navbar-brand:visited{min-height:32px;color:var(--color-foreground);font-family:var(--font-mono);letter-spacing:-.025em;align-items:center;font-size:1.125rem;font-weight:500;line-height:1.5;text-decoration:none;display:inline-flex}.public-site .navbar-links{color:var(--color-muted-foreground);flex-direction:column;justify-content:flex-start;align-items:flex-start;gap:.125rem;margin-top:.75rem;font-size:1rem;font-weight:500;line-height:1.42857;display:flex}.public-site .navbar-links a{min-height:32px;color:var(--color-foreground);align-items:center;padding:0;text-decoration:none;display:inline-flex}.public-site .navbar-links a:hover,.public-site .navbar-links a[aria-current]{color:var(--color-primary);text-underline-offset:4px;text-decoration:underline;text-decoration-thickness:2px}.public-contact{margin-top:1.25rem;font-size:.875rem}.public-social ul{grid-template-columns:repeat(2,minmax(0,1fr));gap:.25rem .75rem;margin:0;padding:0;list-style:none;display:grid}.public-social li:first-child{grid-column:1/-1;margin-bottom:.25rem}.public-social a{align-items:center;min-height:24px;display:inline-flex}.public-site .public-contact a{color:var(--color-muted-foreground)}.public-site .public-contact a:hover{color:var(--color-primary)}.public-site .availability-banner{color:var(--color-foreground);background:#fff5f5;border:1px solid #e7ced1;border-radius:0;margin:1.5rem 0 0}.public-site .availability-banner-inner{max-width:none;padding:.875rem;display:block}.public-site .availability-banner-copy{display:block}.public-site .availability-banner-title{color:var(--color-primary);text-wrap:balance;font-size:.875rem;font-weight:600;line-height:1.5}.public-site .availability-banner-details{color:var(--color-foreground);margin-top:.375rem;font-size:.875rem;line-height:1.5}.public-site .availability-banner-contact,.public-site .availability-banner-contact:visited{border:1px solid var(--color-primary);background:var(--color-primary);width:100%;min-height:44px;color:var(--color-primary-foreground);border-radius:0;justify-content:center;align-items:center;margin-top:.75rem;padding:.5rem .75rem;font-size:.875rem;font-weight:600;line-height:1.42857;text-decoration:none;display:inline-flex}.public-site .availability-banner-contact:hover{border-color:var(--color-foreground);background:var(--color-foreground);color:var(--color-primary-foreground)}.public-site .homepage{grid-template-columns:minmax(0,1fr);align-items:start;gap:1.75rem;padding:0 0 1.5rem;display:grid}.public-site .homepage-identity{text-align:left;background:0 0;margin:0;padding:0;display:block}.homepage-about{min-width:0}.public-site .homepage-name{color:var(--color-foreground);font-family:var(--font-heading);letter-spacing:normal;margin:0;font-size:2rem;font-weight:600;line-height:1.25}.homepage-intro{max-width:60ch;color:var(--color-muted-foreground);margin:.625rem 0 0;font-size:1rem;line-height:1.6}.homepage-columns{grid-template-columns:minmax(0,1fr);align-items:start;gap:2rem;min-width:0;display:grid}.homepage-updates{grid-template-columns:minmax(0,1fr);gap:2rem 3.5rem;display:grid}.homepage-work{min-width:0}.homepage-work .homepage-section+.homepage-section{margin-top:1.5rem}.public-site .homepage-section h2{color:var(--color-foreground);font-family:var(--font-heading);letter-spacing:normal;text-transform:none;margin:0 0 1rem;font-size:1.25rem;font-weight:600;line-height:1.25}.homepage-section-heading{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:.375rem .75rem;margin-bottom:1rem;display:flex}.public-site .homepage-section-heading h2{margin-bottom:0}.homepage-section-heading>a{min-height:32px;font-size:.875rem}.homepage-recent-list{margin:0;padding:0;list-style:none}.homepage-recent-list li{overflow-wrap:anywhere;padding:0 0 1rem}.homepage-recent-list li:last-child{padding-bottom:0}.public-site .homepage-entry{min-height:44px;color:var(--color-foreground);padding:.375rem 0;text-decoration:none;display:block;position:relative}.homepage-entry-title{color:var(--color-primary);letter-spacing:normal;text-underline-offset:4px;font-size:1.125rem;font-weight:500;line-height:1.35;text-decoration:underline;text-decoration-thickness:1px}.homepage-entry-title>a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}.homepage-entry-title>a:after{content:"";position:absolute;inset:0}.homepage-entry-title>a:visited{color:var(--color-link-visited)}.homepage-entry:hover .homepage-entry-title{text-decoration-thickness:2px}.homepage-entry-summary{-webkit-line-clamp:3;max-width:70ch;color:var(--color-muted-foreground);-webkit-box-orient:vertical;margin-top:.375rem;font-size:1rem;font-weight:400;line-height:1.6;display:-webkit-box;overflow:hidden}.homepage-item-meta{color:var(--color-muted-foreground);flex-wrap:wrap;gap:.125rem .625rem;margin-top:.25rem;font-size:.875rem;line-height:1.45;display:flex}.homepage-item-meta a{min-height:24px}.homepage-project-list{gap:1rem;margin:0;display:grid}.homepage-project-list>div{grid-template-columns:10.5rem minmax(0,1fr);align-items:baseline;gap:.25rem 1.5rem;display:grid}.homepage-project-list dt{min-width:0;font-size:1rem;font-weight:600}.homepage-project-list dt a{align-items:center;min-height:32px;display:inline-flex}.homepage-project-list dd{color:var(--color-muted-foreground);margin:0;font-size:.9375rem;line-height:1.6}.homepage-empty{color:var(--color-muted-foreground)}.homepage-work #tools{display:block}.public-site .public-footer{border:0;border-top:1px solid var(--color-border);color:var(--color-muted-foreground);background:0 0;border-radius:0;margin-top:.5rem;padding:1rem 0 0;font-size:.875rem;display:block}.public-footer-links{flex-wrap:wrap;align-items:center;gap:.25rem 1rem;margin:0;padding:0;list-style:none;display:flex}.public-footer-links a{align-items:center;min-height:32px;padding:.125rem 0;display:inline-flex}.public-site .footer-login{font-size:inherit;font-weight:500;line-height:1.42857}.public-site .blog-container,.public-site .blog-article-page,.public-site .attractor-container{width:100%;max-width:none;padding:0 0 2rem}.public-site .public-list,.public-site .blog-series-page{max-width:none}.public-site .blog-header{border:0;margin-bottom:1.75rem;padding-bottom:0;display:block}.public-site .blog-title,.public-site .attractor-title{color:var(--color-foreground);font-family:var(--font-heading);letter-spacing:normal;margin:0;font-size:clamp(1.75rem,4vw,2rem);font-weight:600;line-height:1.15}.public-site .blog-subtitle{max-width:64ch;color:var(--color-muted-foreground);text-wrap:pretty;margin-top:.625rem;font-size:1rem;line-height:1.5}.public-list .listing-entry{overflow-wrap:anywhere;background:0 0;border:0;border-radius:0;margin:0;padding:0;overflow:visible}.public-list .listing-link{color:var(--color-foreground);border-radius:0;padding:1rem 0;text-decoration:none;display:block}.public-site .blog-item-link{position:relative}.public-site .blog-item-title>a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}.public-site .blog-item-title>a:after{content:"";position:absolute;inset:0}.public-list .listing-link:hover{background:0 0}.public-list .listing-link:hover .blog-item-title{text-decoration-thickness:2px}.public-list .listing-meta{color:var(--color-muted-foreground);flex-wrap:wrap;justify-content:flex-start;align-items:baseline;gap:.25rem .5rem;margin-bottom:.75rem;font-size:.875rem;display:flex}.public-list .blog-item-title,.public-list .bookmark-title{color:var(--color-primary);font-family:var(--font-heading);letter-spacing:normal;text-underline-offset:3px;margin:0 0 .5rem;font-size:1.25rem;font-weight:600;line-height:1.3;text-decoration:underline;text-decoration-thickness:1px}.public-site .blog-item-title>a:visited{color:var(--color-link-visited)}.public-list .blog-item-description,.public-site .bookmark-note{max-width:70ch;color:var(--color-muted-foreground);font-size:1rem;line-height:1.65}.public-site .listing-action,.public-site .listing-action:visited{min-height:32px;color:var(--color-primary);text-underline-offset:3px;background:0 0;border:0;border-radius:0;align-items:center;gap:.5rem;padding:0;font-size:.9375rem;font-weight:400;line-height:1.5;text-decoration:underline;display:inline-flex}.public-site .listing-action:hover{color:var(--color-foreground);background:0 0}.bookmark-actions .listing-action>[aria-hidden=true]{transition:transform .16s}.bookmark-actions .listing-action:hover>[aria-hidden=true]{transform:translate(2px,-2px)}.public-list .listing-link .listing-action{margin-top:.75rem}.public-list .listing-entry>.blog-series-link{color:var(--color-muted-foreground);background:0 0;border:0;margin:0;padding:0 0 1rem;font-size:.875rem}.public-list .blog-list,.bookmark-list{grid-template-columns:minmax(0,1fr);gap:.5rem;margin:0;padding:0;list-style:none;display:grid}.public-list .blog-list .listing-entry{flex-direction:column;display:flex}.public-list .blog-list .listing-link{flex:1}.public-list .blog-item:first-child .listing-link{padding-top:0}.public-list .bookmark{background:0 0;padding:1.25rem 0}.public-list .bookmark:first-child{padding-top:0}.bookmark-list .bookmark:has(.bookmark-player){grid-column:1/-1}.public-list .bookmark-meta time{width:auto;margin-left:0}.bookmark-actions{flex-wrap:wrap;align-items:center;gap:.5rem .75rem;margin-top:.75rem;display:flex}.bookmark-external{color:var(--color-muted-foreground);font-size:.8125rem}.public-site .bookmark-player{border:0;border-radius:0;max-width:760px;min-height:0}.public-site .bookmarks-pagination{margin-top:1.5rem;padding-top:1rem}.public-site .blog-series-posts{padding-left:2rem;list-style:decimal}.public-site .blog-series-posts li::marker{color:var(--color-primary);font-weight:500}.public-site .blog-series-posts .blog-item-link{border-radius:0;gap:1rem;padding:1.25rem 1rem;text-decoration:none}.public-site .blog-series-posts .blog-item-title{color:var(--color-primary);font-family:var(--font-heading);font-size:1.25rem;font-weight:600;line-height:1.3}.public-site .blog-series-posts .blog-item{border:0}.public-site .blog-series-posts .blog-item-link:hover{background:var(--color-muted)}.public-site .blog-series-description{max-width:70ch;color:var(--color-muted-foreground);margin-top:.5rem}.public-site .blog-article-header{max-width:840px;margin-bottom:2rem}.public-site .blog-article-title{color:var(--color-foreground);font-family:var(--font-heading);letter-spacing:normal;text-wrap:pretty;font-size:clamp(1.5rem,3.4vw,2rem);font-weight:600;line-height:1.2}.public-site .blog-reading-layout{max-width:70ch;font-size:1.0625rem;display:block}.public-site .blog-sidebar{flex-wrap:wrap;align-items:baseline;gap:.5rem 1.5rem;max-height:none;margin-bottom:1.5rem;display:flex;position:static;overflow:visible}.public-site .blog-toc{background:0 0;border:0;border-radius:0;flex:12rem;min-width:0;padding:0;font-size:.875rem}.public-site .blog-toc summary{min-height:32px;font-family:var(--font-heading);align-items:center;gap:.75rem;padding:0;font-size:.875rem;font-weight:600;display:inline-flex}.public-site .blog-toc nav{margin-top:.5rem}.public-site .blog-toc nav a{color:var(--color-muted-foreground);padding:.375rem 0;text-decoration:underline}.public-site .blog-toc nav a:hover,.public-site .blog-toc nav a[aria-current]{color:var(--color-primary);font-weight:600}.blog-section-links{flex-wrap:wrap;align-items:center;gap:.25rem 1.25rem;font-size:.875rem;display:flex}.blog-section-links a{align-items:center;min-height:32px;display:inline-flex}.public-site .blog-article-content{max-width:70ch;color:var(--color-foreground);font-family:var(--font-sans);font-size:1.0625rem;line-height:1.75}.public-site .blog-article-content :is(h1,h2,h3,h4,h5,h6){color:var(--color-foreground);font-family:var(--font-heading);letter-spacing:normal;scroll-margin-top:1.5rem;font-weight:600}.public-site .blog-article-content :is(h1,h2){margin-top:2rem;font-size:1.375rem}.public-site .blog-article-content h3{margin-top:1.5rem;font-size:1.125rem}.public-site .blog-article-content a{color:var(--color-primary)}.public-site .blog-article-content blockquote{border-left:3px solid var(--color-primary);background:var(--color-muted);color:var(--color-foreground);border-radius:0;padding:.5rem 1.25rem}.public-site .blog-article-content code,.public-site .bookmark-note code{font-family:var(--font-mono);font-weight:500}.public-site .blog-article-content pre,.public-site .blog-code-block{background:var(--color-muted);border-radius:0}.public-site .blog-code-block{overflow:hidden}.public-site .blog-code-toolbar{font-family:var(--font-sans);background:#eeecec}.public-site .blog-article-content pre code{font-size:.8125rem}.public-site .blog-article-content .token:is(.keyword,.boolean,.constant,.class-name){color:var(--color-primary)}.public-site .blog-article-content .token.function{color:#26624a}.public-site .blog-comments,.public-site .blog-series-navigation,.public-site .blog-back{max-width:70ch;font-family:var(--font-sans);margin-top:2rem;scroll-margin-top:1.5rem;font-size:1rem}.public-site .blog-comments h2{font-family:var(--font-heading);font-size:1.25rem;font-weight:600}.public-site .blog-back{border:0;flex-wrap:wrap;gap:.5rem 1.5rem;padding:0;display:flex}.public-site .blog-back a{align-items:center;min-height:32px;font-size:.875rem;display:inline-flex}.public-site .blog-series-navigation{border-top-color:var(--color-border)}.public-site .blog-series-navigation-header{padding:1rem 0}.public-site .blog-series-navigation-header .blog-series-link{margin:0;font-size:.875rem}.public-site .blog-series-neighbors{border:0;grid-template-columns:minmax(0,1fr);gap:.5rem;display:grid}.blog-series-neighbors>div{grid-template-columns:10rem minmax(0,1fr);align-items:baseline;gap:0 1rem;display:grid}.public-site .blog-series-neighbors span{margin:0;font-size:.875rem}.public-site .blog-series-neighbors a{background:0 0;align-items:center;min-height:44px;padding:0;font-size:1rem;line-height:1.5;display:inline-flex}.public-site .blog-series-next,.public-site .blog-series-previous+.blog-series-next{text-align:left;border:0;grid-column:1}.public-site .attractor-header{margin-bottom:1.5rem}.attractor-layout{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:2rem;display:grid}.public-site .attractor-canvas-wrap{background:var(--color-muted);border:0;border-radius:0;margin-bottom:.75rem;overflow:hidden}.public-site .attractor-sub{color:var(--color-muted-foreground);font-family:var(--font-mono);overflow-wrap:anywhere;font-size:.8125rem}.public-site .attractor-overlay{background:var(--color-muted);font-family:var(--font-sans)}.public-site .attractor-overlay.hidden{display:none}.public-site .attractor-section{margin-bottom:1.25rem}.public-site .attractor-label{color:var(--color-foreground);font-family:var(--font-heading);text-transform:none;letter-spacing:normal;margin-bottom:.625rem;font-size:1rem;font-weight:600}.public-site .attractor-row{gap:.5rem}.public-site .attractor-btn,.public-site .btn,.public-site .btn-primary{border:1px solid var(--color-control-border);background:var(--color-card);min-height:44px;color:var(--color-foreground);font-family:var(--font-sans);border-radius:0;justify-content:center;align-items:center;gap:.5rem;padding:.5rem .875rem;font-size:.9375rem;font-weight:500;line-height:1.5;display:inline-flex}.public-site .attractor-btn:hover,.public-site .btn:hover,.public-site .btn-primary:hover{border-color:var(--color-foreground);background:var(--color-muted);color:var(--color-foreground)}.public-site .attractor-btn.active{border-color:var(--color-foreground);background:var(--color-foreground);color:#fff}.public-site .attractor-btn:active,.public-site .btn:active,.public-site .btn-primary:active,.homepage-entry:active .listing-action,.listing-link:active .listing-action{transform:translateY(1px)}.public-site .attractor-colors label,.public-site .attractor-slider-header{font-family:var(--font-sans);font-size:.9375rem}.public-site .attractor-colors input[type=color]{border:1px solid var(--color-control-border);border-radius:0;width:44px;height:44px}.public-site .attractor-slider-name{text-transform:none}.public-site .attractor-slider input[type=range]{min-height:32px;accent-color:var(--color-primary)}.public-site .attractor-dl-size{opacity:1;font-size:.8125rem}@media (max-width:899px){.attractor-layout{grid-template-columns:minmax(0,1fr)}}@media (max-width:760px){body.public-site{grid-template-columns:minmax(0,1fr);width:calc(100% - 2rem);min-height:calc(100svh - 2rem);margin:1rem auto}.public-site>main,.public-site>.public-footer{grid-column:1}.public-site .public-navbar{grid-area:auto/1;grid-template-columns:64px minmax(0,1fr);align-self:start;gap:.75rem 1rem;max-height:none;margin-bottom:1.75rem;padding:0;display:grid;position:static;overflow:visible}.public-portrait{width:100%;margin:0}.public-navbar-row{align-self:center}.public-navbar-content{display:contents}.public-site .navbar-links{flex-flow:wrap;gap:0 1rem;margin:0;font-size:.9375rem}.public-contact,.public-site .availability-banner{grid-column:1/-1;margin-top:0}.public-social ul{flex-wrap:wrap;gap:.125rem .875rem;display:flex}.public-social li:first-child{width:100%;margin:0}.homepage-columns,.public-site .homepage{gap:1.5rem}.public-site .homepage-name{font-size:1.75rem}.public-site .blog-item-link{grid-template-columns:minmax(0,1fr)}}@media (max-width:500px){.homepage-project-list>div,.blog-series-neighbors>div{grid-template-columns:minmax(0,1fr)}}@media (prefers-reduced-motion:no-preference){html.public-page{scroll-behavior:smooth}}@media (prefers-reduced-motion:reduce){.public-site *,.public-site :before,.public-site :after{scroll-behavior:auto;transition:none;animation:none}}