<!DOCTYPE html><html lang="en" data-astro-cid-j7pv25f6> <head><meta charset="utf-8"><script data-cfasync="false">
	(() => {
		const root = document.documentElement;
		const paintTheme = (theme) => {
			const dark = theme === 'dark';
			root.setAttribute('data-theme', dark ? 'dark' : 'light');
			root.style.setProperty('background-color', 'var(--color-bg)');
			root.style.colorScheme = dark ? 'dark' : 'light';
		};
		let theme = 'light';
		try {
			const s = localStorage.getItem('theme');
			if (s === 'dark' || s === 'light') theme = s;
			else if (matchMedia('(prefers-color-scheme: dark)').matches) theme = 'dark';
		} catch {
			if (matchMedia('(prefers-color-scheme: dark)').matches) theme = 'dark';
		}
		paintTheme(theme);
		window.addEventListener('load', () => root.setAttribute('data-theme-ready', 'true'), { once: true });
		window.__setPreferredTheme = paintTheme;
	})();
</script><style>
	:root {
		--color-bg: #ffffff;
		--color-bg-offset: #ffffff;
		--color-bg-header: rgba(255, 255, 255, 0.85);
		--color-text-main: #1a1a1a;
		--color-text-muted: #555555;
		--color-accent: #003366;
		--color-border: #eaeaea;
	}
	[data-theme='dark'] {
		--color-bg: #0f172a;
		--color-bg-offset: #0f172a;
		--color-bg-header: rgba(15, 23, 42, 0.8);
		--color-text-main: #e2e8f0;
		--color-text-muted: #94a3b8;
		--color-accent: #60a5fa;
		--color-border: #334155;
	}
	html, body { min-height: 100%; background-color: var(--color-bg); }
	@media (prefers-color-scheme: dark) {
		html:not([data-theme='light']), html:not([data-theme='light']) body { background-color: var(--color-bg); }
	}
	html[data-theme='dark'], html[data-theme='dark'] body { background-color: var(--color-bg); color-scheme: dark; }
	html[data-theme='light'], html[data-theme='light'] body { background-color: var(--color-bg); color-scheme: light; }
	header {
		position: sticky;
		top: 0;
		z-index: 100;
		padding: 0 1em;
		backdrop-filter: blur(12px);
		-webkit-backdrop-filter: blur(12px);
	}
	header nav {
		display: flex;
		align-items: center;
		justify-content: space-between;
		max-width: 960px;
		margin: 0 auto;
		height: 4.5rem;
	}
	header { background-color: var(--color-bg-header); }
	.project-card, .interactive-card, .pi-card, .collab-card, .team-card {
		background-color: var(--color-bg-offset);
		border-color: var(--color-border);
	}
	.team-hero h1 { color: var(--color-text-main); }
	.team-hero p { color: var(--color-text-muted); }
	body {
		background-color: var(--color-bg);
		color: var(--color-text-main);
		margin: 0;
	}
	html:not([data-theme-ready]) *, html:not([data-theme-ready]) *::before, html:not([data-theme-ready]) *::after {
		transition: none !important;
		animation: none !important;
	}
</style><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" type="image/png" href="/seven-icon.png"><link rel="preload" href="/fonts/monaspace-argon-var.woff2" as="font" type="font/woff2" crossorigin><link rel="preload" href="/fonts/monaspace-radon-var.woff2" as="font" type="font/woff2" crossorigin><meta name="msvalidate.01" content="299AA121F95D8E90BC8476329BBB0811"><link rel="sitemap" href="/sitemap-index.xml"><link rel="alternate" type="application/rss+xml" title="<⚡️ tkolleh>" href="https://kolleh.com/posts/rss.xml"><meta name="generator" content="Astro v6.1.7"><meta name="color-scheme" content="light dark"><link rel="canonical" href="https://kolleh.com/"><title>&lt;⚡️ tkolleh&gt;</title><meta name="title" content="<⚡️ tkolleh>"><meta name="description" content="An Engineer’s blog: Functional Foundations and the A.I. Frontier"><meta property="og:type" content="website"><meta property="og:url" content="https://kolleh.com/"><meta property="og:title" content="<⚡️ tkolleh>"><meta property="og:description" content="An Engineer’s blog: Functional Foundations and the A.I. Frontier"><meta property="og:image" content="https://kolleh.com/og.png"><meta property="twitter:card" content="summary_large_image"><meta property="twitter:url" content="https://kolleh.com/"><meta property="twitter:title" content="<⚡️ tkolleh>"><meta property="twitter:description" content="An Engineer’s blog: Functional Foundations and the A.I. Frontier"><meta property="twitter:image" content="https://kolleh.com/og.png"><style>@font-face{font-family:Monaspace Argon;font-style:normal;font-weight:200 800;font-stretch:100% 125%;font-display:swap;src:url(/fonts/monaspace-argon-var.woff2) format("woff2")}@font-face{font-family:Monaspace Argon Fallback;src:local("Menlo");ascent-override:90%;descent-override:22%;line-gap-override:0%;size-adjust:100.5%}@font-face{font-family:Monaspace Radon;font-style:normal;font-weight:200 800;font-stretch:100% 125%;font-display:swap;src:url(/fonts/monaspace-radon-var.woff2) format("woff2")}@font-face{font-family:Monaspace Radon Fallback;src:local("Georgia");ascent-override:88%;descent-override:20%;line-gap-override:0%;size-adjust:102%}:root{--font-sans: "Monaspace Argon", "Monaspace Argon Fallback", system-ui, -apple-system, sans-serif;--font-serif: "Monaspace Radon", "Monaspace Radon Fallback", Georgia, "Times New Roman", Times, serif;--font-mono: "Monaspace Argon", "Monaspace Argon Fallback", SFMono-Regular, Menlo, Consolas, monospace;--color-bg: #ffffff;--color-bg-offset: #ffffff;--color-bg-header: rgba(255, 255, 255, .85);--color-text-main: #1a1a1a;--color-text-muted: #555555;--color-accent: #003366;--color-accent-light: #e6f0fa;--color-border: #eaeaea;--color-header-border: rgba(0, 0, 0, .08);--color-bg-mobile-menu: rgba(255, 255, 255, .95);--max-width: 960px;--radius: 8px;--shadow-sm: 0 1px 3px rgba(0, 0, 0, .05);--shadow-md: 0 4px 6px rgba(0, 0, 0, .08);--shadow-lg: 0 10px 15px rgba(0, 0, 0, .1)}[data-theme=dark]{--color-bg: #0f172a;--color-bg-offset: #0f172a;--color-bg-header: rgba(15, 23, 42, .8);--color-text-main: #e2e8f0;--color-text-muted: #94a3b8;--color-accent: #60a5fa;--color-accent-light: #1e3a8a;--color-border: #334155;--color-header-border: rgba(255, 255, 255, .1);--color-bg-mobile-menu: rgba(15, 23, 42, .95);--shadow-sm: 0 1px 3px rgba(0, 0, 0, .5);--shadow-md: 0 4px 6px rgba(0, 0, 0, .5);--shadow-lg: 0 10px 15px rgba(0, 0, 0, .5)}html{box-sizing:border-box;scroll-behavior:smooth}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--color-bg)}::-webkit-scrollbar-thumb{background-color:var(--color-border);border-radius:10px;border:2px solid var(--color-bg)}::-webkit-scrollbar-thumb:hover{background-color:var(--color-text-muted)}*,*:before,*:after{box-sizing:inherit}body{font-family:var(--font-sans);background-color:var(--color-bg);color:var(--color-text-main);line-height:1.6;margin:0;font-size:18px;transition:background-color .3s ease,color .3s ease}main{width:100%;max-width:var(--max-width);margin:0 auto;padding:3rem 1rem}h1,h2,h3,h4,h5{font-family:var(--font-serif);color:var(--color-text-main);line-height:1.2;margin-bottom:.75rem}h1{font-size:2.5rem;margin-top:0}h2{font-size:2rem;margin-top:2rem;border-bottom:2px solid var(--color-accent);padding-bottom:.5rem;display:inline-block}h3{font-size:1.5rem;color:var(--color-accent);margin-top:1.5rem}p{margin-bottom:1.5rem;color:var(--color-text-muted)}a{color:var(--color-accent);text-decoration:none;transition:.2s}a:hover{opacity:.8;text-decoration:underline}.btn{display:inline-block;background-color:var(--color-accent);color:var(--color-bg);font-weight:600;padding:.5rem 1rem;border-radius:4px;text-decoration:none!important}.btn-outline{background:transparent;border:1px solid var(--color-accent);color:var(--color-accent);padding:.5rem 1rem;border-radius:4px}.grid-2{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:2rem;margin-top:2rem}.grid-3{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:2rem;margin-top:2rem}.author-link{position:relative;display:inline-block;cursor:pointer;border-bottom:1px dotted var(--color-accent);color:var(--color-text-main)}.author-link:hover .author-tooltip{opacity:1;visibility:visible;transform:translate(-50%) translateY(-10px)}.author-tooltip{position:absolute;bottom:100%;left:50%;transform:translate(-50%) translateY(0);background-color:var(--color-bg);color:var(--color-text-main);border:1px solid var(--color-border);box-shadow:var(--shadow-lg);padding:1rem;width:max-content;max-width:320px;border-radius:8px;opacity:0;visibility:hidden;transition:all .2s ease-in-out;z-index:1000;text-align:left;pointer-events:none}.author-tooltip img{width:50px;height:50px;border-radius:50%;float:left;margin-right:1rem;object-fit:cover}.author-tooltip h4{margin:0;font-size:1rem;font-family:var(--font-sans);color:var(--color-text-main)}.author-tooltip p{margin:0;font-size:.85rem;line-height:1.4;color:var(--color-text-muted)}.author-tooltip .role{font-size:.8rem;color:var(--color-accent);display:block;margin-bottom:.25rem}.bibtex-panel::-webkit-scrollbar{height:6px}.bibtex-panel::-webkit-scrollbar-track{background:transparent}.bibtex-panel::-webkit-scrollbar-thumb{background-color:var(--color-border);border-radius:10px}.blog-row{display:flex;gap:1.5rem;border-bottom:1px solid var(--color-border);padding:1.5rem 0;align-items:flex-start}.blog-row:first-child{padding-top:0}.blog-row:last-child{border-bottom:none}.blog-row img{width:200px;height:120px;object-fit:cover;border-radius:6px;flex-shrink:0}.blog-content{flex:1}.blog-title{margin:0 0 .5rem;font-size:1.4rem;font-family:var(--font-serif);color:var(--color-text-main)}.blog-meta{font-size:.9rem;color:var(--color-text-muted);margin-bottom:.5rem}.blog-desc{margin:0;font-size:1rem;color:var(--color-text-muted)}.publication-item{margin-bottom:1.5rem;padding-bottom:1.5rem;border-bottom:1px solid var(--color-border)}.pub-title{font-weight:700;font-size:1.1rem;color:var(--color-text-main);display:block}.pub-authors{margin:.25rem 0;color:var(--color-text-muted)}.pub-venue{font-style:italic;color:var(--color-text-muted)}.team-card{text-align:center}.team-avatar{width:140px;height:140px;border-radius:50%;object-fit:cover;margin-bottom:1rem;border:3px solid var(--color-accent-light)}.team-name{font-weight:700;font-size:1.1rem;display:block;color:var(--color-text-main)}.team-role{font-size:.9rem;color:var(--color-accent);display:block;margin-bottom:.5rem}.project-card{background-color:var(--color-bg-offset);border:1px solid var(--color-border);border-radius:var(--radius)}.hmchart{height:420px;min-height:400px}.inputchart{min-height:30px;height:42px}.sankdiv{height:500px;min-height:430px}[data-theme=dark] img{filter:brightness(.9)}@media(max-width:720px){.blog-row{flex-direction:column}.blog-row img{width:100%;height:auto}}.pagefind-ui__result.svelte-j9e30.svelte-j9e30{list-style-type:none;display:flex;align-items:flex-start;gap:min(calc(40px * var(--pagefind-ui-scale)),3%);padding:calc(30px * var(--pagefind-ui-scale)) 0 calc(40px * var(--pagefind-ui-scale));border-top:solid var(--pagefind-ui-border-width) var(--pagefind-ui-border)}.pagefind-ui__result.svelte-j9e30.svelte-j9e30:last-of-type{border-bottom:solid var(--pagefind-ui-border-width) var(--pagefind-ui-border)}.pagefind-ui__result-thumb.svelte-j9e30.svelte-j9e30{width:min(30%,calc((30% - (100px * var(--pagefind-ui-scale))) * 100000));max-width:calc(120px * var(--pagefind-ui-scale));margin-top:calc(10px * var(--pagefind-ui-scale));aspect-ratio:var(--pagefind-ui-image-box-ratio);position:relative}.pagefind-ui__result-image.svelte-j9e30.svelte-j9e30{display:block;position:absolute;left:50%;transform:translate(-50%);font-size:0;width:auto;height:auto;max-width:100%;max-height:100%;border-radius:var(--pagefind-ui-image-border-radius)}.pagefind-ui__result-inner.svelte-j9e30.svelte-j9e30{flex:1;display:flex;flex-direction:column;align-items:flex-start;margin-top:calc(10px * var(--pagefind-ui-scale))}.pagefind-ui__result-title.svelte-j9e30.svelte-j9e30{display:inline-block;font-weight:700;font-size:calc(21px * var(--pagefind-ui-scale));margin-top:0;margin-bottom:0}.pagefind-ui__result-title.svelte-j9e30 .pagefind-ui__result-link.svelte-j9e30{color:var(--pagefind-ui-text);text-decoration:none}.pagefind-ui__result-title.svelte-j9e30 .pagefind-ui__result-link.svelte-j9e30:hover{text-decoration:underline}.pagefind-ui__result-excerpt.svelte-j9e30.svelte-j9e30{display:inline-block;font-weight:400;font-size:calc(16px * var(--pagefind-ui-scale));margin-top:calc(4px * var(--pagefind-ui-scale));margin-bottom:0;min-width:calc(250px * var(--pagefind-ui-scale))}.pagefind-ui__loading.svelte-j9e30.svelte-j9e30{color:var(--pagefind-ui-text);background-color:var(--pagefind-ui-text);border-radius:var(--pagefind-ui-border-radius);opacity:.1;pointer-events:none}.pagefind-ui__result-tags.svelte-j9e30.svelte-j9e30{list-style-type:none;padding:0;display:flex;gap:calc(20px * var(--pagefind-ui-scale));flex-wrap:wrap;margin-top:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__result-tag.svelte-j9e30.svelte-j9e30{padding:calc(4px * var(--pagefind-ui-scale)) calc(8px * var(--pagefind-ui-scale));font-size:calc(14px * var(--pagefind-ui-scale));border-radius:var(--pagefind-ui-border-radius);background-color:var(--pagefind-ui-tag)}.pagefind-ui__result.svelte-4xnkmf.svelte-4xnkmf{list-style-type:none;display:flex;align-items:flex-start;gap:min(calc(40px * var(--pagefind-ui-scale)),3%);padding:calc(30px * var(--pagefind-ui-scale)) 0 calc(40px * var(--pagefind-ui-scale));border-top:solid var(--pagefind-ui-border-width) var(--pagefind-ui-border)}.pagefind-ui__result.svelte-4xnkmf.svelte-4xnkmf:last-of-type{border-bottom:solid var(--pagefind-ui-border-width) var(--pagefind-ui-border)}.pagefind-ui__result-nested.svelte-4xnkmf.svelte-4xnkmf{display:flex;flex-direction:column;padding-left:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__result-nested.svelte-4xnkmf.svelte-4xnkmf:first-of-type{padding-top:calc(10px * var(--pagefind-ui-scale))}.pagefind-ui__result-nested.svelte-4xnkmf .pagefind-ui__result-link.svelte-4xnkmf{font-size:.9em;position:relative}.pagefind-ui__result-nested.svelte-4xnkmf .pagefind-ui__result-link.svelte-4xnkmf:before{content:"⤷ ";position:absolute;top:0;right:calc(100% + .1em)}.pagefind-ui__result-thumb.svelte-4xnkmf.svelte-4xnkmf{width:min(30%,calc((30% - (100px * var(--pagefind-ui-scale))) * 100000));max-width:calc(120px * var(--pagefind-ui-scale));margin-top:calc(10px * var(--pagefind-ui-scale));aspect-ratio:var(--pagefind-ui-image-box-ratio);position:relative}.pagefind-ui__result-image.svelte-4xnkmf.svelte-4xnkmf{display:block;position:absolute;left:50%;transform:translate(-50%);font-size:0;width:auto;height:auto;max-width:100%;max-height:100%;border-radius:var(--pagefind-ui-image-border-radius)}.pagefind-ui__result-inner.svelte-4xnkmf.svelte-4xnkmf{flex:1;display:flex;flex-direction:column;align-items:flex-start;margin-top:calc(10px * var(--pagefind-ui-scale))}.pagefind-ui__result-title.svelte-4xnkmf.svelte-4xnkmf{display:inline-block;font-weight:700;font-size:calc(21px * var(--pagefind-ui-scale));margin-top:0;margin-bottom:0}.pagefind-ui__result-title.svelte-4xnkmf .pagefind-ui__result-link.svelte-4xnkmf{color:var(--pagefind-ui-text);text-decoration:none}.pagefind-ui__result-title.svelte-4xnkmf .pagefind-ui__result-link.svelte-4xnkmf:hover{text-decoration:underline}.pagefind-ui__result-excerpt.svelte-4xnkmf.svelte-4xnkmf{display:inline-block;font-weight:400;font-size:calc(16px * var(--pagefind-ui-scale));margin-top:calc(4px * var(--pagefind-ui-scale));margin-bottom:0;min-width:calc(250px * var(--pagefind-ui-scale))}.pagefind-ui__loading.svelte-4xnkmf.svelte-4xnkmf{color:var(--pagefind-ui-text);background-color:var(--pagefind-ui-text);border-radius:var(--pagefind-ui-border-radius);opacity:.1;pointer-events:none}.pagefind-ui__result-tags.svelte-4xnkmf.svelte-4xnkmf{list-style-type:none;padding:0;display:flex;gap:calc(20px * var(--pagefind-ui-scale));flex-wrap:wrap;margin-top:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__result-tag.svelte-4xnkmf.svelte-4xnkmf{padding:calc(4px * var(--pagefind-ui-scale)) calc(8px * var(--pagefind-ui-scale));font-size:calc(14px * var(--pagefind-ui-scale));border-radius:var(--pagefind-ui-border-radius);background-color:var(--pagefind-ui-tag)}legend.svelte-1v2r7ls.svelte-1v2r7ls{position:absolute;clip:rect(0 0 0 0)}.pagefind-ui__filter-panel.svelte-1v2r7ls.svelte-1v2r7ls{min-width:min(calc(260px * var(--pagefind-ui-scale)),100%);flex:1;display:flex;flex-direction:column;margin-top:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__filter-group.svelte-1v2r7ls.svelte-1v2r7ls{border:0;padding:0}.pagefind-ui__filter-block.svelte-1v2r7ls.svelte-1v2r7ls{padding:0;display:block;border-bottom:solid calc(2px * var(--pagefind-ui-scale)) var(--pagefind-ui-border);padding:calc(20px * var(--pagefind-ui-scale)) 0}.pagefind-ui__filter-name.svelte-1v2r7ls.svelte-1v2r7ls{font-size:calc(16px * var(--pagefind-ui-scale));position:relative;display:flex;align-items:center;list-style:none;font-weight:700;cursor:pointer;height:calc(24px * var(--pagefind-ui-scale))}.pagefind-ui__filter-name.svelte-1v2r7ls.svelte-1v2r7ls::-webkit-details-marker{display:none}.pagefind-ui__filter-name.svelte-1v2r7ls.svelte-1v2r7ls:after{position:absolute;content:"";right:calc(6px * var(--pagefind-ui-scale));top:50%;width:calc(8px * var(--pagefind-ui-scale));height:calc(8px * var(--pagefind-ui-scale));border:solid calc(2px * var(--pagefind-ui-scale)) currentColor;border-right:0;border-top:0;transform:translateY(-70%) rotate(-45deg)}.pagefind-ui__filter-block[open].svelte-1v2r7ls .pagefind-ui__filter-name.svelte-1v2r7ls:after{transform:translateY(-70%) rotate(-225deg)}.pagefind-ui__filter-group.svelte-1v2r7ls.svelte-1v2r7ls{display:flex;flex-direction:column;gap:calc(20px * var(--pagefind-ui-scale));padding-top:calc(30px * var(--pagefind-ui-scale))}.pagefind-ui__filter-value.svelte-1v2r7ls.svelte-1v2r7ls{position:relative;display:flex;align-items:center;gap:calc(8px * var(--pagefind-ui-scale))}.pagefind-ui__filter-value.svelte-1v2r7ls.svelte-1v2r7ls:before{position:absolute;content:"";top:50%;left:calc(8px * var(--pagefind-ui-scale));width:0px;height:0px;border:solid 1px #fff;opacity:0;transform:translate(calc(4.5px * var(--pagefind-ui-scale) * -1),calc(.8px * var(--pagefind-ui-scale))) skew(-5deg) rotate(-45deg);transform-origin:top left;border-top:0;border-right:0;pointer-events:none}.pagefind-ui__filter-value.pagefind-ui__filter-value--checked.svelte-1v2r7ls.svelte-1v2r7ls:before{opacity:1;width:calc(9px * var(--pagefind-ui-scale));height:calc(4px * var(--pagefind-ui-scale));transition:width .1s ease-out .1s,height .1s ease-in}.pagefind-ui__filter-checkbox.svelte-1v2r7ls.svelte-1v2r7ls{margin:0;width:calc(16px * var(--pagefind-ui-scale));height:calc(16px * var(--pagefind-ui-scale));border:solid 1px var(--pagefind-ui-border);appearance:none;-webkit-appearance:none;border-radius:calc(var(--pagefind-ui-border-radius) / 2);background-color:var(--pagefind-ui-background);cursor:pointer}.pagefind-ui__filter-checkbox.svelte-1v2r7ls.svelte-1v2r7ls:checked{background-color:var(--pagefind-ui-primary);border:solid 1px var(--pagefind-ui-primary)}.pagefind-ui__filter-label.svelte-1v2r7ls.svelte-1v2r7ls{cursor:pointer;font-size:calc(16px * var(--pagefind-ui-scale));font-weight:400}.pagefind-ui--reset *:where(:not(html,iframe,canvas,img,svg,video):not(svg *,symbol *)){all:unset;display:revert;outline:revert}.pagefind-ui--reset *,.pagefind-ui--reset *:before,.pagefind-ui--reset *:after{box-sizing:border-box}.pagefind-ui--reset a,.pagefind-ui--reset button{cursor:revert}.pagefind-ui--reset ol,.pagefind-ui--reset ul,.pagefind-ui--reset menu{list-style:none}.pagefind-ui--reset img{max-width:100%}.pagefind-ui--reset table{border-collapse:collapse}.pagefind-ui--reset input,.pagefind-ui--reset textarea{-webkit-user-select:auto}.pagefind-ui--reset textarea{white-space:revert}.pagefind-ui--reset meter{-webkit-appearance:revert;appearance:revert}.pagefind-ui--reset ::placeholder{color:unset}.pagefind-ui--reset :where([hidden]){display:none}.pagefind-ui--reset :where([contenteditable]:not([contenteditable=false])){-moz-user-modify:read-write;-webkit-user-modify:read-write;overflow-wrap:break-word;-webkit-line-break:after-white-space;-webkit-user-select:auto}.pagefind-ui--reset :where([draggable=true]){-webkit-user-drag:element}.pagefind-ui--reset mark{all:revert}:root{--pagefind-ui-scale:.8;--pagefind-ui-primary:#393939;--pagefind-ui-text:#393939;--pagefind-ui-background:#ffffff;--pagefind-ui-border:#eeeeee;--pagefind-ui-tag:#eeeeee;--pagefind-ui-border-width:2px;--pagefind-ui-border-radius:8px;--pagefind-ui-image-border-radius:8px;--pagefind-ui-image-box-ratio:3 / 2;--pagefind-ui-font:system, -apple-system, "BlinkMacSystemFont", ".SFNSText-Regular", "San Francisco", "Roboto", "Segoe UI", "Helvetica Neue", "Lucida Grande", "Ubuntu", "arial", sans-serif}.pagefind-ui.svelte-e9gkc3{width:100%;color:var(--pagefind-ui-text);font-family:var(--pagefind-ui-font)}.pagefind-ui__hidden.svelte-e9gkc3{display:none!important}.pagefind-ui__suppressed.svelte-e9gkc3{opacity:0;pointer-events:none}.pagefind-ui__form.svelte-e9gkc3{position:relative}.pagefind-ui__form.svelte-e9gkc3:before{background-color:var(--pagefind-ui-text);width:calc(18px * var(--pagefind-ui-scale));height:calc(18px * var(--pagefind-ui-scale));top:calc(23px * var(--pagefind-ui-scale));left:calc(20px * var(--pagefind-ui-scale));content:"";position:absolute;display:block;opacity:.7;-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z' fill='%23000000'/%3E%3C/svg%3E%0A");mask-image:url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z' fill='%23000000'/%3E%3C/svg%3E%0A");-webkit-mask-size:100%;mask-size:100%;z-index:9;pointer-events:none}.pagefind-ui__search-input.svelte-e9gkc3{height:calc(64px * var(--pagefind-ui-scale));padding:0 calc(70px * var(--pagefind-ui-scale)) 0 calc(54px * var(--pagefind-ui-scale));background-color:var(--pagefind-ui-background);border:var(--pagefind-ui-border-width) solid var(--pagefind-ui-border);border-radius:var(--pagefind-ui-border-radius);font-size:calc(21px * var(--pagefind-ui-scale));position:relative;appearance:none;-webkit-appearance:none;display:flex;width:100%;box-sizing:border-box;font-weight:700}.pagefind-ui__search-input.svelte-e9gkc3::placeholder{opacity:.2}.pagefind-ui__search-clear.svelte-e9gkc3{position:absolute;top:calc(3px * var(--pagefind-ui-scale));right:calc(3px * var(--pagefind-ui-scale));height:calc(58px * var(--pagefind-ui-scale));padding:0 calc(15px * var(--pagefind-ui-scale)) 0 calc(2px * var(--pagefind-ui-scale));color:var(--pagefind-ui-text);font-size:calc(14px * var(--pagefind-ui-scale));cursor:pointer;background-color:var(--pagefind-ui-background);border-radius:var(--pagefind-ui-border-radius)}.pagefind-ui__drawer.svelte-e9gkc3{gap:calc(60px * var(--pagefind-ui-scale));display:flex;flex-direction:row;flex-wrap:wrap}.pagefind-ui__results-area.svelte-e9gkc3{min-width:min(calc(400px * var(--pagefind-ui-scale)),100%);flex:1000;margin-top:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__results.svelte-e9gkc3{padding:0}.pagefind-ui__message.svelte-e9gkc3{box-sizing:content-box;font-size:calc(16px * var(--pagefind-ui-scale));height:calc(24px * var(--pagefind-ui-scale));padding:calc(20px * var(--pagefind-ui-scale)) 0;display:flex;align-items:center;font-weight:700;margin-top:0}.pagefind-ui__button.svelte-e9gkc3{margin-top:calc(40px * var(--pagefind-ui-scale));border:var(--pagefind-ui-border-width) solid var(--pagefind-ui-border);border-radius:var(--pagefind-ui-border-radius);height:calc(48px * var(--pagefind-ui-scale));padding:0 calc(12px * var(--pagefind-ui-scale));font-size:calc(16px * var(--pagefind-ui-scale));color:var(--pagefind-ui-primary);background:var(--pagefind-ui-background);width:100%;text-align:center;font-weight:700;cursor:pointer}.pagefind-ui__button.svelte-e9gkc3:hover{border-color:var(--pagefind-ui-primary);color:var(--pagefind-ui-primary);background:var(--pagefind-ui-background)}.search-overlay[data-astro-cid-otpdt6jm]{position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:1000}.search-overlay[data-astro-cid-otpdt6jm].hidden{display:none}.search-backdrop[data-astro-cid-otpdt6jm]{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#00000080;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}.search-panel-wrapper[data-astro-cid-otpdt6jm]{position:relative;display:flex;justify-content:center;align-items:flex-start;padding-top:10vh;padding-left:1rem;padding-right:1rem;height:100%;pointer-events:none}.search-panel[data-astro-cid-otpdt6jm]{pointer-events:auto;width:100%;max-width:42rem;max-height:80vh;background-color:var(--color-bg);border:1px solid var(--color-border);border-radius:12px;box-shadow:0 25px 50px -12px #00000040;display:flex;flex-direction:column;overflow:hidden}.search-panel-header[data-astro-cid-otpdt6jm]{display:flex;align-items:center;justify-content:space-between;padding:1.25rem 1.5rem .5rem}.search-title[data-astro-cid-otpdt6jm]{font-size:.75rem;font-family:monospace;text-transform:uppercase;letter-spacing:.1em;color:var(--color-text-muted)}.search-close-btn[data-astro-cid-otpdt6jm]{cursor:pointer;border-radius:.375rem;background-color:var(--color-bg-offset);border:1px solid var(--color-border);padding:.25rem .75rem;font-size:.875rem;font-weight:500;color:var(--color-text-muted);transition:color .15s ease,background-color .15s ease}.search-close-btn[data-astro-cid-otpdt6jm]:hover{color:var(--color-text-main);background-color:var(--color-border)}.search-panel-content[data-astro-cid-otpdt6jm]{padding:.5rem 1.5rem 1.5rem;overflow-y:auto;flex:1;min-height:0}.search-dev-msg[data-astro-cid-otpdt6jm]{text-align:center;padding:2rem 0;color:var(--color-text-muted)}#pagefind__search[data-astro-cid-otpdt6jm]{--pagefind-ui-primary: var(--color-accent);--pagefind-ui-text: var(--color-text-main);--pagefind-ui-background: var(--color-bg);--pagefind-ui-border: var(--color-border);--pagefind-ui-border-width: 1px;--pagefind-ui-font: var(--font-sans)}.pagefind-ui__search-input,.pagefind-ui__button{background-color:var(--color-bg-offset)!important;color:var(--color-text-main)!important}#pagefind__search .pagefind-ui__search-input:focus{outline:none;border-color:var(--color-accent)}#pagefind__search .pagefind-ui__search-clear{width:calc(60px * var(--pagefind-ui-scale));padding:0;background-color:transparent;overflow:hidden}#pagefind__search .pagefind-ui__search-clear:focus{outline:1px solid var(--color-accent)}#pagefind__search .pagefind-ui__search-clear:before{content:"";-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='currentColor' %3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M6 18L18 6M6 6l12 12'%3E%3C/path%3E%3C/svg%3E") center / 60% no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='currentColor' %3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M6 18L18 6M6 6l12 12'%3E%3C/path%3E%3C/svg%3E") center / 60% no-repeat;background-color:var(--color-accent);display:block;width:100%;height:100%}#pagefind__search .pagefind-ui__result{border:0}#pagefind__search .pagefind-ui__result-link{background-size:100% 6px;background-position:bottom;background-repeat:repeat-x;background-image:linear-gradient(transparent,transparent 5px,var(--color-text-main) 5px,var(--color-text-main))}#pagefind__search .pagefind-ui__result-link:hover{text-decoration:none;background-image:linear-gradient(transparent,transparent 4px,var(--color-accent) 4px,var(--color-accent))}#pagefind__search mark{color:var(--color-bg);background-color:var(--color-accent);font-weight:600}.site-footer[data-astro-cid-sz7xmlte]{background-color:var(--color-bg-offset);color:var(--color-text-main);padding:4rem 1rem;margin-top:auto;transition:background-color .3s ease;position:relative;padding-bottom:.5%!important}.site-footer[data-astro-cid-sz7xmlte]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent 0%,var(--color-border) 20%,var(--color-border) 80%,transparent 100%);opacity:.6}.footer-content[data-astro-cid-sz7xmlte]{max-width:var(--max-width);margin:0 auto;display:grid;grid-template-columns:2fr 1fr 1fr 1fr;gap:3rem}.footer-col[data-astro-cid-sz7xmlte] h3[data-astro-cid-sz7xmlte]{font-family:var(--font-serif);font-size:1.5rem;margin-bottom:1rem;color:var(--color-accent)}.footer-col[data-astro-cid-sz7xmlte] h4[data-astro-cid-sz7xmlte]{font-family:var(--font-sans);font-size:.9rem;text-transform:uppercase;letter-spacing:.05em;margin-bottom:1.25rem;color:var(--color-text-main)}.footer-col[data-astro-cid-sz7xmlte] ul[data-astro-cid-sz7xmlte]{list-style:none;padding:0;margin:0}.footer-col[data-astro-cid-sz7xmlte] ul[data-astro-cid-sz7xmlte] li[data-astro-cid-sz7xmlte]{margin-bottom:.75rem}.footer-col[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte]{color:var(--color-text-muted);text-decoration:none;transition:color .2s}.footer-col[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte]:hover{color:var(--color-accent)}.brand-col[data-astro-cid-sz7xmlte] p[data-astro-cid-sz7xmlte]{font-size:.95rem;line-height:1.6;color:var(--color-text-muted);margin-bottom:1.5rem}.copyright[data-astro-cid-sz7xmlte]{font-size:.85rem;color:var(--color-text-muted);line-height:1.5}address[data-astro-cid-sz7xmlte]{font-style:normal;font-size:.95rem;line-height:1.6;color:var(--color-text-muted)}.social-links[data-astro-cid-sz7xmlte]{display:flex;gap:1rem}.social-links[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte]{color:var(--color-text-muted);transition:all .2s}.social-links[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte]:hover{color:var(--color-accent);transform:translateY(-2px)}@media(max-width:900px){.footer-content[data-astro-cid-sz7xmlte]{grid-template-columns:1fr 1fr;gap:2rem}.brand-col[data-astro-cid-sz7xmlte]{grid-column:span 2}}@media(max-width:600px){.footer-content[data-astro-cid-sz7xmlte]{grid-template-columns:1fr;text-align:center}.brand-col[data-astro-cid-sz7xmlte]{grid-column:span 1}.social-links[data-astro-cid-sz7xmlte]{justify-content:center}}.footer-credit[data-astro-cid-sz7xmlte]{text-align:center;margin-top:.25rem;padding-top:.5rem;border-top:1px solid var(--color-border);font-size:.65rem;color:var(--color-text-main);line-height:1.2}.footer-credit[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte]{color:var(--color-accent);text-decoration:none}.footer-credit[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte]:hover{color:var(--color-text-main);text-decoration:underline}a[data-astro-cid-eimmu3lg]{display:inline-block;text-decoration:none}a[data-astro-cid-eimmu3lg].active{font-weight:bolder;text-decoration:underline}header[data-astro-cid-3ef6ksr2]{margin:0;padding:0 1em;background-color:var(--color-bg-header);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);position:sticky;top:0;z-index:100;transition:background-color .3s ease}header[data-astro-cid-3ef6ksr2]:after{content:"";position:absolute;bottom:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent 0%,var(--color-border) 20%,var(--color-border) 80%,transparent 100%);opacity:.6}nav[data-astro-cid-3ef6ksr2]{display:flex;align-items:center;justify-content:space-between;max-width:var(--max-width);margin:0 auto;height:4.5rem}h2[data-astro-cid-3ef6ksr2]{margin:0;font-size:1.3em;font-family:var(--font-sans);font-weight:700;letter-spacing:-.02em}h2[data-astro-cid-3ef6ksr2] a[data-astro-cid-3ef6ksr2]{text-decoration:none;color:var(--color-text-main);border:none}.internal-links[data-astro-cid-3ef6ksr2]{display:flex;gap:.25rem}.internal-links[data-astro-cid-3ef6ksr2] a{padding:.5em .75em;color:var(--color-text-main);border-bottom:2px solid transparent;text-decoration:none;font-size:.95rem;font-weight:500;transition:all .2s ease}.internal-links[data-astro-cid-3ef6ksr2] a:hover{color:var(--color-accent)}.internal-links[data-astro-cid-3ef6ksr2] a.active{text-decoration:none;border-bottom-color:var(--color-accent);color:var(--color-accent)}.header-actions[data-astro-cid-3ef6ksr2]{display:flex;align-items:center;gap:.5rem}.search-toggle[data-astro-cid-3ef6ksr2],#theme-toggle[data-astro-cid-3ef6ksr2]{background:transparent;border:none;cursor:pointer;width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:var(--color-text-main);transition:background-color .2s ease}.search-toggle[data-astro-cid-3ef6ksr2]:hover,#theme-toggle[data-astro-cid-3ef6ksr2]:hover{background-color:var(--color-bg-offset);color:var(--color-accent)}.github-link[data-astro-cid-3ef6ksr2]{background:transparent;border:none;cursor:pointer;width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:var(--color-text-main);transition:background-color .2s ease}.github-link[data-astro-cid-3ef6ksr2]:hover{background-color:var(--color-bg-offset);color:var(--color-accent)}.mobile-menu-header[data-astro-cid-3ef6ksr2]{display:flex;align-items:center;justify-content:space-between;padding-bottom:.25rem;border-bottom:1px solid var(--color-border);margin-bottom:.25rem}.mobile-menu-title[data-astro-cid-3ef6ksr2]{font-size:.9rem;font-weight:600;color:var(--color-text-muted);padding-left:.5rem;text-transform:uppercase;letter-spacing:.05em}#menu-toggle[data-astro-cid-3ef6ksr2]{display:none;background:transparent;border:none;cursor:pointer;width:40px;height:40px;display:flex;align-items:center;justify-content:center;color:var(--color-text-main)}.mobile-menu[data-astro-cid-3ef6ksr2]{position:absolute;top:calc(100% + .5rem);right:1rem;width:fit-content;min-width:180px;background-color:var(--color-bg-mobile-menu);backdrop-filter:blur(40px) saturate(150%);-webkit-backdrop-filter:blur(40px) saturate(150%);border:1px solid var(--color-header-border);border-radius:12px;padding:.5rem;display:flex;flex-direction:column;gap:.125rem;box-shadow:0 8px 32px #0000001f,0 2px 8px #00000014;z-index:200;animation:menuFadeIn .2s ease}@keyframes menuFadeIn{0%{opacity:0;transform:translateY(-8px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}.mobile-menu[data-astro-cid-3ef6ksr2] a[data-astro-cid-3ef6ksr2]{padding:.5rem .875rem;text-decoration:none;color:var(--color-text-main);font-weight:500;font-size:.9rem;border-radius:8px;transition:background-color .2s,color .2s}.mobile-menu[data-astro-cid-3ef6ksr2] a[data-astro-cid-3ef6ksr2]:hover{background-color:var(--color-bg-offset);color:var(--color-accent)}.hidden[data-astro-cid-3ef6ksr2],.moon-icon[data-astro-cid-3ef6ksr2]{display:none}.sun-icon[data-astro-cid-3ef6ksr2],html[data-theme=dark] .moon-icon[data-astro-cid-3ef6ksr2]{display:block}html[data-theme=dark] .sun-icon[data-astro-cid-3ef6ksr2]{display:none}@media(min-width:721px){#menu-toggle[data-astro-cid-3ef6ksr2]{display:none}.mobile-menu[data-astro-cid-3ef6ksr2]{display:none!important}}@media(max-width:720px){.internal-links[data-astro-cid-3ef6ksr2]{display:none}#menu-toggle[data-astro-cid-3ef6ksr2]{display:flex}#search-toggle-desktop[data-astro-cid-3ef6ksr2]{display:none!important}}
.hero[data-astro-cid-j7pv25f6]{display:flex;align-items:center;gap:3rem;padding:3rem 0;margin-bottom:2rem}.hero-content[data-astro-cid-j7pv25f6]{flex:3}.hero-image[data-astro-cid-j7pv25f6]{flex:2;text-align:center}.hero-image[data-astro-cid-j7pv25f6] img[data-astro-cid-j7pv25f6]{width:240px;height:240px;object-fit:cover;border-radius:50%;border:4px solid var(--color-border);box-shadow:var(--shadow-lg)}.hero-buttons[data-astro-cid-j7pv25f6]{display:flex;gap:1rem;flex-wrap:wrap}.post-list[data-astro-cid-j7pv25f6]{list-style:none;padding:0}.post-item[data-astro-cid-j7pv25f6]{margin-bottom:1.5rem;padding-bottom:1.5rem;border-bottom:1px dashed var(--color-border)}.post-item[data-astro-cid-j7pv25f6]:last-child{border-bottom:none}.post-item[data-astro-cid-j7pv25f6] a[data-astro-cid-j7pv25f6]{display:block;font-family:var(--font-serif);font-size:1.15rem;font-weight:600;color:var(--color-text-main);margin-bottom:.25rem}.post-item[data-astro-cid-j7pv25f6] a[data-astro-cid-j7pv25f6]:hover{color:var(--color-accent)}.post-meta[data-astro-cid-j7pv25f6]{font-size:.85rem;color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.05em}@media(max-width:768px){.hero[data-astro-cid-j7pv25f6]{flex-direction:column-reverse;text-align:center;padding:2rem 0;gap:2rem}.hero-image[data-astro-cid-j7pv25f6] img[data-astro-cid-j7pv25f6]{width:180px;height:180px}.hero-buttons[data-astro-cid-j7pv25f6]{justify-content:center}}
</style></head> <body data-pagefind-body data-astro-cid-j7pv25f6> <header data-astro-cid-3ef6ksr2> <nav data-pagefind-ignore data-astro-cid-3ef6ksr2> <h2 data-astro-cid-3ef6ksr2><a href="/" data-astro-cid-3ef6ksr2>&lt;⚡️ tkolleh&gt;</a></h2> <div class="internal-links" data-astro-cid-3ef6ksr2> <a href="/" class="active" data-astro-cid-3ef6ksr2="true" data-astro-cid-eimmu3lg> Home </a> <a href="/posts/" data-astro-cid-3ef6ksr2="true" data-astro-cid-eimmu3lg> Blog </a> <a href="/projects" data-astro-cid-3ef6ksr2="true" data-astro-cid-eimmu3lg> Projects </a> <a href="/archive" data-astro-cid-3ef6ksr2="true" data-astro-cid-eimmu3lg> Archive </a> </div> <div class="header-actions" data-astro-cid-3ef6ksr2> <a href="https://github.com/tkolleh" target="_blank" rel="noopener noreferrer" class="github-link" aria-label="GitHub" title="GitHub" data-astro-cid-3ef6ksr2> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-3ef6ksr2><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22" data-astro-cid-3ef6ksr2></path></svg> </a> <button id="search-toggle-desktop" class="search-toggle" aria-label="Search site" data-astro-cid-3ef6ksr2> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-3ef6ksr2><circle cx="11" cy="11" r="8" data-astro-cid-3ef6ksr2></circle><line x1="21" y1="21" x2="16.65" y2="16.65" data-astro-cid-3ef6ksr2></line></svg> </button> <button id="theme-toggle" aria-label="Toggle Dark Mode" data-astro-cid-3ef6ksr2> <svg class="sun-icon" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-3ef6ksr2><circle cx="12" cy="12" r="5" data-astro-cid-3ef6ksr2></circle><line x1="12" y1="1" x2="12" y2="3" data-astro-cid-3ef6ksr2></line><line x1="12" y1="21" x2="12" y2="23" data-astro-cid-3ef6ksr2></line><line x1="4.22" y1="4.22" x2="5.64" y2="5.64" data-astro-cid-3ef6ksr2></line><line x1="18.36" y1="18.36" x2="19.78" y2="19.78" data-astro-cid-3ef6ksr2></line><line x1="1" y1="12" x2="3" y2="12" data-astro-cid-3ef6ksr2></line><line x1="21" y1="12" x2="23" y2="12" data-astro-cid-3ef6ksr2></line><line x1="4.22" y1="19.78" x2="5.64" y2="18.36" data-astro-cid-3ef6ksr2></line><line x1="18.36" y1="5.64" x2="19.78" y2="4.22" data-astro-cid-3ef6ksr2></line></svg> <svg class="moon-icon" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-3ef6ksr2><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z" data-astro-cid-3ef6ksr2></path></svg> </button> <button id="menu-toggle" aria-label="Toggle Menu" aria-expanded="false" aria-controls="mobile-menu" data-astro-cid-3ef6ksr2> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-3ef6ksr2><line x1="3" y1="12" x2="21" y2="12" data-astro-cid-3ef6ksr2></line><line x1="3" y1="6" x2="21" y2="6" data-astro-cid-3ef6ksr2></line><line x1="3" y1="18" x2="21" y2="18" data-astro-cid-3ef6ksr2></line></svg> </button> </div> </nav> <div id="mobile-menu" class="mobile-menu hidden" role="menu" aria-label="Navigation menu" data-astro-cid-3ef6ksr2> <div class="mobile-menu-header" data-astro-cid-3ef6ksr2> <span class="mobile-menu-title" data-astro-cid-3ef6ksr2>Menu</span> <button id="search-toggle-mobile" class="search-toggle" aria-label="Search site" data-astro-cid-3ef6ksr2> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-3ef6ksr2><circle cx="11" cy="11" r="8" data-astro-cid-3ef6ksr2></circle><line x1="21" y1="21" x2="16.65" y2="16.65" data-astro-cid-3ef6ksr2></line></svg> </button> </div> <a href="/" data-astro-cid-3ef6ksr2>Home</a> <a href="/posts/" data-astro-cid-3ef6ksr2>Blog</a> <a href="/projects" data-astro-cid-3ef6ksr2>Projects</a> <a href="/archive" data-astro-cid-3ef6ksr2>Archive</a> </div> </header> <script type="module">document.getElementById("theme-toggle")?.addEventListener("click",()=>{const e=document.documentElement.getAttribute("data-theme")==="dark"?"light":"dark";window.__setPreferredTheme?.(e),localStorage.setItem("theme",e)});document.getElementById("menu-toggle")?.addEventListener("click",()=>{const t=document.getElementById("mobile-menu"),e=document.getElementById("menu-toggle");t?.classList.toggle("hidden");const n=!t?.classList.contains("hidden");e?.setAttribute("aria-expanded",String(n))});document.querySelectorAll(".search-toggle").forEach(t=>{t.addEventListener("click",()=>{document.dispatchEvent(new CustomEvent("open-search"))})});document.addEventListener("keydown",t=>{if(t.key==="Escape"){const e=document.getElementById("mobile-menu"),n=document.getElementById("menu-toggle");e&&!e.classList.contains("hidden")&&(e.classList.add("hidden"),n?.setAttribute("aria-expanded","false"),n?.focus())}});</script> <main data-astro-cid-j7pv25f6> <section class="hero" data-astro-cid-j7pv25f6> <div class="hero-content" data-astro-cid-j7pv25f6> <h1 style="margin-bottom: 0.5rem; font-size: 2.5rem;" data-astro-cid-j7pv25f6>&lt;⚡️ tkolleh&gt;</h1> <p style="font-size: 1.1rem; line-height: 1.7; margin-bottom: 2rem; color: var(--color-text-muted);" data-astro-cid-j7pv25f6> An Engineer’s blog: Functional Foundations and the A.I. Frontier </p> <div class="hero-buttons" data-astro-cid-j7pv25f6> <a href="/posts/" class="btn" data-astro-cid-j7pv25f6>Read Blog</a> <a href="/projects" class="btn btn-outline" data-astro-cid-j7pv25f6>Projects</a> </div> </div> <div class="hero-image" data-astro-cid-j7pv25f6> <img src="/profile-pic.jpg" alt="Profile photo" width="240" height="240" data-astro-cid-j7pv25f6> </div> </section> <hr style="margin: 2rem 0; border-top: 1px solid var(--color-border);" data-astro-cid-j7pv25f6> <h2 style="margin-top: 0;" data-astro-cid-j7pv25f6>Recent Posts</h2> <ul class="post-list" data-astro-cid-j7pv25f6> <li class="post-item" data-astro-cid-j7pv25f6> <a href="/posts/lua-for-terminal-scripts/" data-astro-cid-j7pv25f6>Why Lua is the Secret Weapon for Terminal Scripts</a> <div class="post-meta" data-astro-cid-j7pv25f6> <time datetime="2026-04-17T00:00:00.000Z"> Apr 17, 2026 </time>  · <span data-astro-cid-j7pv25f6> <span class="author-link author-modal-trigger" data-member="{&#34;id&#34;:&#34;tkolleh&#34;,&#34;name&#34;:&#34;T.J. Kolleh&#34;,&#34;slug&#34;:&#34;tkolleh&#34;,&#34;bio&#34;:&#34;Engineer with interests in the development &#38; delivery of A.I. enhanced products. This site is a collection of thoughts about technology, and a way to keep track of research.&#34;,&#34;avatar&#34;:&#34;/profile-pic.jpg&#34;,&#34;url&#34;:&#34;https://kolleh.com&#34;}" style="cursor: pointer;">T.J. Kolleh</span>  </span> </div> <p style="color: var(--color-text-muted); margin: 0.5rem 0 0; font-size: 0.95rem;" data-astro-cid-j7pv25f6>A deep dive into the performance benefits of LuaJIT vs Python, Go, and Node.js for terminal utilities and small scripts.</p> </li><li class="post-item" data-astro-cid-j7pv25f6> <a href="/posts/sshfs-ubuntu-virtualbox/post/" data-astro-cid-j7pv25f6>Use local dev tools on remote files with SSHFS</a> <div class="post-meta" data-astro-cid-j7pv25f6> <time datetime="2020-11-13T00:00:00.000Z"> Nov 13, 2020 </time>  · <span data-astro-cid-j7pv25f6> <span class="author-link author-modal-trigger" data-member="{&#34;id&#34;:&#34;tkolleh&#34;,&#34;name&#34;:&#34;T.J. Kolleh&#34;,&#34;slug&#34;:&#34;tkolleh&#34;,&#34;bio&#34;:&#34;Engineer with interests in the development &#38; delivery of A.I. enhanced products. This site is a collection of thoughts about technology, and a way to keep track of research.&#34;,&#34;avatar&#34;:&#34;/profile-pic.jpg&#34;,&#34;url&#34;:&#34;https://kolleh.com&#34;}" style="cursor: pointer;">T.J. Kolleh</span>  </span> </div> <p style="color: var(--color-text-muted); margin: 0.5rem 0 0; font-size: 0.95rem;" data-astro-cid-j7pv25f6>Using SSHFS to mount remote filesystems locally, enabling local development tools on remote files.</p> </li><li class="post-item" data-astro-cid-j7pv25f6> <a href="/posts/ssh-ubuntu-virtualbox/post/" data-astro-cid-j7pv25f6>SSH To Guest or Remote OS</a> <div class="post-meta" data-astro-cid-j7pv25f6> <time datetime="2020-04-03T00:00:00.000Z"> Apr 3, 2020 </time>  · <span data-astro-cid-j7pv25f6> <span class="author-link author-modal-trigger" data-member="{&#34;id&#34;:&#34;tkolleh&#34;,&#34;name&#34;:&#34;T.J. Kolleh&#34;,&#34;slug&#34;:&#34;tkolleh&#34;,&#34;bio&#34;:&#34;Engineer with interests in the development &#38; delivery of A.I. enhanced products. This site is a collection of thoughts about technology, and a way to keep track of research.&#34;,&#34;avatar&#34;:&#34;/profile-pic.jpg&#34;,&#34;url&#34;:&#34;https://kolleh.com&#34;}" style="cursor: pointer;">T.J. Kolleh</span>  </span> </div> <p style="color: var(--color-text-muted); margin: 0.5rem 0 0; font-size: 0.95rem;" data-astro-cid-j7pv25f6>How to set up SSH access to a guest or remote operating system using VirtualBox.</p> </li><li class="post-item" data-astro-cid-j7pv25f6> <a href="/posts/conda-to-the-point/conda-to-the-point/" data-astro-cid-j7pv25f6>Conda, to the point</a> <div class="post-meta" data-astro-cid-j7pv25f6> <time datetime="2020-03-06T00:00:00.000Z"> Mar 6, 2020 </time>  · <span data-astro-cid-j7pv25f6> <span class="author-link author-modal-trigger" data-member="{&#34;id&#34;:&#34;tkolleh&#34;,&#34;name&#34;:&#34;T.J. Kolleh&#34;,&#34;slug&#34;:&#34;tkolleh&#34;,&#34;bio&#34;:&#34;Engineer with interests in the development &#38; delivery of A.I. enhanced products. This site is a collection of thoughts about technology, and a way to keep track of research.&#34;,&#34;avatar&#34;:&#34;/profile-pic.jpg&#34;,&#34;url&#34;:&#34;https://kolleh.com&#34;}" style="cursor: pointer;">T.J. Kolleh</span>  </span> </div> <p style="color: var(--color-text-muted); margin: 0.5rem 0 0; font-size: 0.95rem;" data-astro-cid-j7pv25f6>A concise guide to Conda — environment management, package installation, and best practices for Python developers.</p> </li><li class="post-item" data-astro-cid-j7pv25f6> <a href="/posts/patient-flow-mimic-iii/patient-flow/" data-astro-cid-j7pv25f6>Optimizing Patient Flow</a> <div class="post-meta" data-astro-cid-j7pv25f6> <time datetime="2020-02-26T00:00:00.000Z"> Feb 26, 2020 </time>  · <span data-astro-cid-j7pv25f6> <span class="author-link author-modal-trigger" data-member="{&#34;id&#34;:&#34;tkolleh&#34;,&#34;name&#34;:&#34;T.J. Kolleh&#34;,&#34;slug&#34;:&#34;tkolleh&#34;,&#34;bio&#34;:&#34;Engineer with interests in the development &#38; delivery of A.I. enhanced products. This site is a collection of thoughts about technology, and a way to keep track of research.&#34;,&#34;avatar&#34;:&#34;/profile-pic.jpg&#34;,&#34;url&#34;:&#34;https://kolleh.com&#34;}" style="cursor: pointer;">T.J. Kolleh</span>  </span> </div> <p style="color: var(--color-text-muted); margin: 0.5rem 0 0; font-size: 0.95rem;" data-astro-cid-j7pv25f6>Data visualizations exploring patient flow within hospitals using the MIMIC-III dataset, featuring interactive Sankey diagrams and heatmaps.</p> </li> </ul> <div style="margin-top: 1.5rem;" data-astro-cid-j7pv25f6> <a href="/posts/" style="font-weight: 600;" data-astro-cid-j7pv25f6>View All Posts &rarr;</a> </div> </main> <footer class="site-footer" data-pagefind-ignore data-astro-cid-sz7xmlte> <div class="footer-content" data-astro-cid-sz7xmlte> <div class="footer-col brand-col" data-astro-cid-sz7xmlte> <h3 data-astro-cid-sz7xmlte>&lt;⚡️ tkolleh&gt;</h3> <p data-astro-cid-sz7xmlte>An Engineer’s blog: Functional Foundations and the A.I. Frontier</p> <div class="copyright" data-astro-cid-sz7xmlte>
&copy; 2026 &lt;⚡️ tkolleh&gt;.<br data-astro-cid-sz7xmlte>All rights reserved.
</div> </div> <div class="footer-col" data-astro-cid-sz7xmlte> <h4 data-astro-cid-sz7xmlte>Quick Links</h4> <ul data-astro-cid-sz7xmlte> <li data-astro-cid-sz7xmlte><a href="/" data-astro-cid-sz7xmlte>Home</a></li> <li data-astro-cid-sz7xmlte><a href="/posts/" data-astro-cid-sz7xmlte>Blog</a></li> <li data-astro-cid-sz7xmlte><a href="/projects" data-astro-cid-sz7xmlte>Projects</a></li> <li data-astro-cid-sz7xmlte><a href="/archive" data-astro-cid-sz7xmlte>Archive</a></li> </ul> </div> <div class="footer-col" data-astro-cid-sz7xmlte> <h4 data-astro-cid-sz7xmlte>Contact</h4> <address data-astro-cid-sz7xmlte> Number 7 Consulting LLC<br data-astro-cid-sz7xmlte> <br data-astro-cid-sz7xmlte>  </address> <p style="margin-top: 1rem;" data-astro-cid-sz7xmlte>  <a href="mailto:info@number7.consulting" style="text-decoration: underline;" data-astro-cid-sz7xmlte>info@number7.consulting</a><br data-astro-cid-sz7xmlte>  </p> </div> <div class="footer-col" data-astro-cid-sz7xmlte> <h4 data-astro-cid-sz7xmlte>Connect</h4> <div class="social-links" data-astro-cid-sz7xmlte> <a href="https://github.com/tkolleh" target="_blank" rel="noopener noreferrer" aria-label="GitHub" data-astro-cid-sz7xmlte> <svg viewBox="0 0 24 24" width="24" height="24" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-sz7xmlte><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22" data-astro-cid-sz7xmlte></path></svg>       </a><a href="https://linkedin.com/in/tkolleh" target="_blank" rel="noopener noreferrer" aria-label="LinkedIn" data-astro-cid-sz7xmlte>  <svg viewBox="0 0 24 24" width="24" height="24" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-sz7xmlte><path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z" data-astro-cid-sz7xmlte></path><rect x="2" y="9" width="4" height="12" data-astro-cid-sz7xmlte></rect><circle cx="4" cy="4" r="2" data-astro-cid-sz7xmlte></circle></svg>      </a><a href="https://bsky.app/profile/tkolleh.social" target="_blank" rel="noopener noreferrer" aria-label="Bluesky" data-astro-cid-sz7xmlte>    <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor" data-astro-cid-sz7xmlte><path d="M12 10.8c-1.087-2.114-4.046-4.226-6.098-3.977-1.03.125-1.708.878-1.708 2.118 0 2.186 3.4 5.072 5.798 6.316 1.505.782 2.008.952 2.008.952s.503-.17 2.008-.952C16.406 13.013 19.806 10.127 19.806 7.941c0-1.24-.678-1.993-1.708-2.118-2.052-.249-5.011 1.863-6.098 3.977z" data-astro-cid-sz7xmlte></path></svg>    </a><a href="https://keybase.io/tkolleh" target="_blank" rel="noopener noreferrer" aria-label="Keybase" data-astro-cid-sz7xmlte>     <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor" data-astro-cid-sz7xmlte><path d="M12.275 2.025A10.066 10.066 0 0 0 4.55 5.554a10.066 10.066 0 0 0-2.527 7.725 10.066 10.066 0 0 0 3.528 6.975A10.066 10.066 0 0 0 12.275 22a10.066 10.066 0 0 0 6.975-3.528A10.066 10.066 0 0 0 22.275 12a10.066 10.066 0 0 0-3.528-6.975A10.066 10.066 0 0 0 12.275 2.025zm-.575 3.1a7 7 0 1 1 0 14 7 7 0 0 1 0-14zm-1.5 2.5v2h3v-2h-3zm0 3.5v4.5h3v-4.5h-3z" data-astro-cid-sz7xmlte></path></svg>   </a><a href="/posts/rss.xml" target="_blank" rel="noopener noreferrer" aria-label="RSS" data-astro-cid-sz7xmlte>      <svg viewBox="0 0 24 24" width="24" height="24" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-sz7xmlte><path d="M4 11a9 9 0 0 1 9 9" data-astro-cid-sz7xmlte></path><path d="M4 4a16 16 0 0 1 16 16" data-astro-cid-sz7xmlte></path><circle cx="5" cy="19" r="1" data-astro-cid-sz7xmlte></circle></svg>  </a> </div> </div> </div> <div class="footer-credit" data-astro-cid-sz7xmlte>
Based on Astro Scholar Theme <a href="https://github.com/shravanngoswamii/astro-scholar" target="_blank" rel="noopener noreferrer" data-astro-cid-sz7xmlte>Astro Scholar</a> | <a href="https://github.com/shravanngoswamii/astro-scholar" target="_blank" rel="noopener noreferrer" data-astro-cid-sz7xmlte>Open Source</a> </div> </footer> <div id="search-overlay" class="search-overlay hidden" data-astro-cid-otpdt6jm> <div id="search-backdrop" class="search-backdrop" data-astro-cid-otpdt6jm></div> <div class="search-panel-wrapper" data-astro-cid-otpdt6jm> <div id="search-panel" class="search-panel" data-astro-cid-otpdt6jm> <div class="search-panel-header" data-astro-cid-otpdt6jm> <span class="search-title" data-astro-cid-otpdt6jm>Search</span> <button id="search-close-btn" class="search-close-btn" data-astro-cid-otpdt6jm>Esc</button> </div> <div class="search-panel-content" data-astro-cid-otpdt6jm> <div id="pagefind__search" data-astro-cid-otpdt6jm></div> </div> </div> </div> </div> <script type="module" src="/_astro/Search.astro_astro_type_script_index_0_lang.E5k9tv5i.js"></script> </body></html>