<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US">
  <head profile="http://gmpg.org/xfn/11">

     

      <title>Ari Bader-Natal</title>

      <meta charset="utf-8"> 
       
    
      <meta name="title" content="Ari Bader-Natal"/>
      <meta property="og:title" content="Ari Bader-Natal"/>
      <meta name="twitter:title" content="Ari Bader-Natal" />
    
	
      <meta name="application-name" content="Ari Bader-Natal"/>
      
      <meta name="author" content="Ari Bader-Natal"> 
      <meta property='article:author' content="https://aribadernatal.com"/> 

      <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5"> 

      <meta name="twitter:card" content="summary_large_image" />
      <meta name="twitter:site" content="@aribadernatal" />
      <meta name="twitter:creator" content="@aribadernatal" />

      <meta property='og:site_name' content="Ari Bader-Natal"/> 
      <meta property='og:locale' content='en_US'/>     

      <link rel="canonical" href="https://aribadernatal.com/" />

      <link rel="alternate" type="application/rss+xml" href="https://aribadernatal.com/feed.xml" title="" />

      <link rel="llms-txt" href="/llms.txt">
      
      <link rel="apple-touch-icon" sizes="180x180" href="https://www.aribadernatal.com/cdn-cgi/image/format=auto/logo-180-180.png" />
      <link rel="icon" type="image/png" sizes="32x32" href="https://www.aribadernatal.com/cdn-cgi/image/format=auto/favicon-32x32.png" />
      <link rel="icon" type="image/png" sizes="16x16" href="https://www.aribadernatal.com/cdn-cgi/image/format=auto/favicon-16x16.png" />

      <link rel="me" href="https://github.com/aribn" />
      <link rel="me" href="https://twitter.com/aribadernatal" />
      <link rel="me" href="https://bsky.app/profile/aribadernatal.com" />
      <link rel="me" href="https://www.linkedin.com/in/aribadernatal" />
      <link rel="me" href="https://sparkwise.co/team/ari-bader-natal" />

      <meta property='og:url' content="https://aribadernatal.com/" /> 
      <meta name="twitter:url" content="https://aribadernatal.com/" />

    
      <meta property='og:type' content='website' /> 
     


    
       

      
        <meta name="description" content="I design, build, and operate online learning environments that help learners access new opportunities and create new futures." />
        <meta property="og:description" content="I design, build, and operate online learning environments that help learners access new opportunities and create new futures." />
        <meta name="twitter:description" content="I design, build, and operate online learning environments that help learners access new opportunities and create new futures." />
      

    

    
      <meta name="image" content="https://aribadernatal.com/public/images/social_card.jpg" />
      <meta property="og:image" content="https://aribadernatal.com/public/images/social_card.jpg" />
      <meta name="twitter:image" content="https://aribadernatal.com/public/images/social_card.jpg" />
    


    <link rel="preload" as="font" crossorigin type="font/woff2" href="/fonts/webFonts/CallunaSansRegular/font.woff2" />
    <link rel="preload" as="font" crossorigin type="font/woff2" href="/fonts/webFonts/CallunaRegular/font.woff2" />
    <link rel="preload" as="font" crossorigin type="font/woff2" href="/fonts/webFonts/CallunaBold/font.woff2" />
    <link rel="preload" as="font" crossorigin type="font/woff2" href="/fonts/webFonts/CallunaItalic/font.woff2" />
    
    <style>
      @font-face {
        font-family: "CallunaRegular";
        font-display: swap;
        src: url('/fonts/webFonts/CallunaRegular/font.woff2') format('woff2'),
             url('/fonts/webFonts/CallunaRegular/font.woff2') format('woff');
      }
      @font-face {
        font-family: "CallunaBoldItalic";
        font-display: swap;
        src: url('/fonts/webFonts/CallunaBoldItalic/font.woff2') format('woff2'),
             url('/fonts/webFonts/CallunaBoldItalic/font.woff2') format('woff');
      }
      @font-face {
        font-family: "CallunaBold";
        font-display: swap;
        src: url('/fonts/webFonts/CallunaBold/font.woff2') format('woff2'),
             url('/fonts/webFonts/CallunaBold/font.woff2') format('woff');
      }
      @font-face {
        font-family: "CallunaSansRegular";
        font-display: swap;
        src: url('/fonts/webFonts/CallunaSansRegular/font.woff2') format('woff2'),
             url('/fonts/webFonts/CallunaSansRegular/font.woff2') format('woff');
      }
      @font-face {
        font-family: "CallunaItalic";
        font-display: swap;
        src: url('/fonts/webFonts/CallunaItalic/font.woff2') format('woff2'),
             url('/fonts/webFonts/CallunaItalic/font.woff2') format('woff');
      }

      @font-face {
          font-family: 'CallunaSansBold';
          src: url('/fonts/webFonts/CallunaSansBold/CallunaSansBold-webfont.woff2') format('woff2'),
               url('/fonts/webFonts/CallunaSansBold/CallunaSansBold-webfont.woff')  format('woff');
          font-weight: normal;
          font-style: normal;

      }
    </style>

    

    <style type="text/css">
      /* ========================================
   Custom Properties
   ======================================== */
:root {
	--color-bg: #e5e1dd;
	--color-text: #161925;
	--color-link: #0070bb;
	--color-link-hover: #2957c9;
	--color-muted: #666;
	--color-secondary: #333;
	--color-border: #ccc;
	--color-surface: rgba(255, 255, 255, 0.5);
	--color-card-shadow: rgba(0, 0, 0, 0.1);
	--color-header-bg: rgba(229, 225, 221, 0.5);
	--color-accent: #2957c9;
	--color-link-underline: rgba(41, 87, 201, 0.25);
	--color-link-underline-hover: rgba(41, 87, 201, 0.6);
}

body.dark-mode {
	--color-bg: #1c1917;
	--color-text: #faf9f7;
	--color-link: #B6C8FF;
	--color-link-hover: #fff;
	--color-muted: #a8a29e;
	--color-secondary: #d6d3d1;
	--color-border: #44403c;
	--color-surface: rgba(41, 37, 36, 0.8);
	--color-card-shadow: rgba(255, 255, 255, 0.15);
	--color-header-bg: rgba(28, 25, 23, 0.5);
	--color-accent: #6d8eef;
	--color-link-underline: rgba(182, 200, 255, 0.25);
	--color-link-underline-hover: rgba(182, 200, 255, 0.6);
}

.highlight .c {
	color: #c2b680;
	background-color: #272822;
}
/* Comment */
.highlight .err {
	color: #dcdccc;
	background-color: #272822;
}
/* Error */
.highlight .g {
	color: #dcdccc;
	background-color: #272822;
}
/* Generic */
.highlight .k {
	color: #ff6651;
	font-weight: bold;
}
/* Keyword */
.highlight .l {
	color: #dcdccc;
	background-color: #272822;
}
/* Literal */
.highlight .n {
	color: #dcdccc;
	background-color: #272822;
}
/* Name */
.highlight .o {
	color: #dcdccc;
	background-color: #272822;
}
/* Operator */
.highlight .x {
	color: #dcdccc;
	background-color: #272822;
}
/* Other */
.highlight .p {
	color: #dcdccc;
	background-color: #272822;
}
/* Punctuation */
.highlight .cm {
	color: #c2b680;
	background-color: #272822;
}
/* Comment.Multiline */
.highlight .cp {
	color: #c2aed0;
	background-color: #272822;
}
/* Comment.Preproc */
.highlight .c1 {
	color: #75715e;
	background-color: #272822;
}
/* Comment.Single */
.highlight .cs {
	color: #c2b680;
	background-color: #272822;
}
/* Comment.Special */
.highlight .gd {
	color: #dcdccc;
	background-color: #8b0000;
}
/* Generic.Deleted */
.highlight .ge {
	color: #d4b064;
	text-decoration: underline;
	background-color: #272822;
}
/* Generic.Emph */
.highlight .gr {
	color: #f07070;
	background-color: #272822;
}
/* Generic.Error */
.highlight .gh {
	color: #f7f7f1;
	font-weight: bold;
	background-color: #000;
}
/* Generic.Heading */
.highlight .gi {
	color: #dcdccc;
	background-color: #008b00;
}
/* Generic.Inserted */
.highlight .go {
	color: #9f8f80;
	font-weight: bold;
	background-color: #272822;
}
/* Generic.Output */
.highlight .gp {
	color: #dcdccc;
	background-color: #272822;
}
/* Generic.Prompt */
.highlight .gs {
	color: #dcdccc;
	background-color: #272822;
}
/* Generic.Strong */
.highlight .gu {
	color: #f7f7f1;
	font-weight: bold;
	background-color: #000;
}
/* Generic.Subheading */
.highlight .gt {
	color: #f07070;
	font-weight: bold;
	background-color: #272822;
}
/* Generic.Traceback */
.highlight .kc {
	color: #e0af91;
	font-weight: bold;
	background-color: #272822;
}
/* Keyword.Constant */
.highlight .kd {
	color: #77d8eb;
	font-weight: bold;
	background-color: #272822;
}
/* Keyword.Declaration */
.highlight .kn {
	color: #e0af91;
	font-weight: bold;
	background-color: #272822;
}
/* Keyword.Namespace */
.highlight .kp {
	color: #e0af91;
	font-weight: bold;
	background-color: #272822;
}
/* Keyword.Pseudo */
.highlight .kr {
	color: #e0af91;
	font-weight: bold;
	background-color: #272822;
}
/* Keyword.Reserved */
.highlight .kt {
	color: #dabfa5;
	font-weight: bold;
	background-color: #272822;
}
/* Keyword.Type */
.highlight .ld {
	color: #dcdccc;
	background-color: #272822;
}
/* Literal.Date */
.highlight .m {
	color: #dcdccc;
	background-color: #272822;
}
/* Literal.Number */
.highlight .s {
	color: #e6db6f;
}
/* Literal.String */
.highlight .na {
	color: #b5df5e;
}
/* Name.Attribute */
.highlight .nb {
	color: #dcdccc;
}
/* Name.Builtin */
.highlight .nc {
	color: #dcdccc;
	background-color: #272822;
}
/* Name.Class */
.highlight .no {
	color: #afe091;
	background-color: #272822;
}
/* Name.Constant */
.highlight .nd {
	color: #dcdccc;
	background-color: #272822;
}
/* Name.Decorator */
.highlight .ni {
	color: #d4b064;
	background-color: #272822;
}
/* Name.Entity */
.highlight .ne {
	color: #dcdccc;
	background-color: #272822;
}
/* Name.Exception */
.highlight .nf {
	color: #dcdccc;
	background-color: #272822;
}
/* Name.Function */
.highlight .nl {
	color: #dcdccc;
	background-color: #272822;
}
/* Name.Label */
.highlight .nn {
	color: #dcdccc;
	background-color: #272822;
}
/* Name.Namespace */
.highlight .nx {
	color: #ff6651;
	background-color: #272822;
}
/* Name.Other */
.highlight .py {
	color: #dcdccc;
	background-color: #272822;
}
/* Name.Property */
.highlight .nt {
	color: #ff6651;
	font-weight: bold;
}
/* Name.Tag */
.highlight .nv {
	color: #ff6651;
	background-color: #272822;
}
/* Name.Variable */
.highlight .ow {
	color: #dcdccc;
	background-color: #272822;
}
/* Operator.Word */
.highlight .w {
	color: #dcdccc;
	background-color: #272822;
}
/* Text.Whitespace */
.highlight .mf {
	color: #c2a4f8;
	background-color: #272822;
}
/* Literal.Number.Float */
.highlight .mh {
	color: #dcdccc;
	background-color: #272822;
}
/* Literal.Number.Hex */
.highlight .mi {
	color: #c2a4f8;
	background-color: #272822;
}
/* Literal.Number.Integer */
.highlight .mo {
	color: #dcdccc;
	background-color: #272822;
}
/* Literal.Number.Oct */
.highlight .sb {
	color: #dcdccc;
	background-color: #272822;
}
/* Literal.String.Backtick */
.highlight .sc {
	color: #dcdccc;
	background-color: #272822;
}
/* Literal.String.Char */
.highlight .sd {
	color: #dcdccc;
	background-color: #272822;
}
/* Literal.String.Doc */
.highlight .s2 {
	color: #e6db6f;
	background-color: #272822;
}
/* Literal.String.Double */
.highlight .se {
	color: #dcdccc;
	background-color: #272822;
}
/* Literal.String.Escape */
.highlight .sh {
	color: #dcdccc;
	background-color: #272822;
}
/* Literal.String.Heredoc */
.highlight .si {
	color: #dcdccc;
	background-color: #272822;
}
/* Literal.String.Interpol */
.highlight .sx {
	color: #dcdccc;
	background-color: #272822;
}
/* Literal.String.Other */
.highlight .sr {
	color: #e6db6f;
	background-color: #272822;
}
/* Literal.String.Regex */
.highlight .s1 {
	color: #dcdccc;
	background-color: #272822;
}
/* Literal.String.Single */
.highlight .ss {
	color: #e6db6f;
	background-color: #272822;
}
/* Literal.String.Symbol */
.highlight .bp {
	color: #dcdccc;
	background-color: #272822;
}
/* Name.Builtin.Pseudo */
.highlight .vc {
	color: #dabfa5;
	background-color: #272822;
}
/* Name.Variable.Class */
.highlight .vg {
	color: #dabfa5;
	background-color: #272822;
}
/* Name.Variable.Global */
.highlight .vi {
	color: #dabfa5;
	background-color: #272822;
}
/* Name.Variable.Instance */
.highlight .il {
	color: #dcdccc;
	background-color: #272822;
}
/* Literal.Number.Integer.Long */
/* 12 COLUMN : RESPONSIVE GRID SYSTEM DEVELOPER : DENIS LEBLANC URL : http://responsive.gs VERSION : 3.0 LICENSE : GPL & MIT */
/* SET ALL ELEMENTS TO BOX-SIZING : BORDER-BOX */
* {
	-webkit-box-sizing: border-box;
	-moz-box-sizing: border-box;
	box-sizing: border-box;
}
/* MAIN CONTAINER Set the width to whatever you want the width of your site to be. */
.container {
	max-width: 800px;
	margin: 0 auto;
}
/* SELF CLEARING FLOATS - CLEARFIX METHOD */
.container:after, .row:after, .col:after, .clr:after, .group:after {
	content: "";
	display: table;
	clear: both;
}
.row {
	padding-bottom: 0em;
   /* margin-bottom: 40px;
	*/
   /* padding: 0 1rem;
	*/
}
.col {
	display: block;
	float: left;
	width: 100%;
}
@media (min-width: 768px) {
	.gutters .col {
		margin-left: 2%;
   }
	.gutters .col:first-child {
		margin-left: 0;
   }
}

@media (min-width: 1024px) {
   /* Target blocks that aren't first in their row */
	/* .span_4.col.featured-block + .span_4.col.featured-block {
		margin-left: 24px;
   } */
   /* Adjust the width to account for margins */
	.span_4.col.featured-block {
		margin-left: 24px;
		width: calc(33.3333% - 16px);
	   /* 16px is 24px * 2/3 to distribute the margin */
   }
   /* First block in row doesn't need margin adjustment */
	/* .row > .span_4.col.featured-block:first-child {
		margin-left: 0;
   } */
   .row > .span_4.col.featured-block:nth-child(3n+1) {
    	margin-left: 0;
		clear: both; 
  	}
   .container {
    	max-width: 1200px;
   }
	.span_1 {
		width: 8.3333333333%;
   }
	.span_2 {
		width: 16.6666666667%;
   }
	.span_3 {
		width: 25%;
   }
	.span_4 {
		width: 33.3333333333%;
   }
	.span_5 {
		width: 41.6666666667%;
   }
	.span_6 {
		width: 50%;
   }
	.span_7 {
		width: 58.3333333333%;
   }
	.span_8 {
		width: 66.6666666667%;
   }
	.span_9 {
		width: 75%;
   }
	.span_10 {
		width: 83.3333333333%;
   }
	.span_11 {
		width: 91.6666666667%;
   }
	.span_12 {
		width: 100%;
   }
	.gutters .span_1 {
		width: 6.5%;
   }
	.gutters .span_2 {
		width: 15%;
   }
	.gutters .span_3 {
		width: 23.5%;
   }
	.gutters .span_4 {
		width: 32%;
   }
	.gutters .span_5 {
		width: 40.5%;
   }
	.gutters .span_6 {
		width: 49%;
   }
	.gutters .span_7 {
		width: 57.5%;
   }
	.gutters .span_8 {
		width: 66%;
   }
	.gutters .span_9 {
		width: 74.5%;
   }
	.gutters .span_10 {
		width: 83%;
   }
	.gutters .span_11 {
		width: 91.5%;
   }
	.gutters .span_12 {
		width: 100%;
   }
}
/* rgba(218, 221, 229, 0.25) */
/* #0070bb */
/*============================================================================*/
* {
	margin: 0;
	padding: 0;
	box-sizing: border-box;
}
.small-caps {
	font-kerning: normal;
	font-variant-ligatures: no-common-ligatures contextual;
	font-variant-numeric: oldstyle-nums proportional-nums;
	font-variant-caps: small-caps;
	-moz-font-feature-settings: "kern", "liga" 0, "clig" 0, "calt", "onum", "pnum", "smcp";
	-ms-font-feature-settings: "kern", "liga" 0, "clig" 0, "calt", "onum", "pnum", "smcp";
	-webkit-font-feature-settings: "kern", "liga" 0, "clig" 0, "calt", "onum", "pnum", "smcp";
	font-feature-settings: "kern", "liga" 0, "clig" 0, "calt", "onum", "pnum", "smcp";
}
section.entry-content {
	font-family: CallunaRegular, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
	font-size: clamp(1rem, 2.5vw, 1.2rem);
	margin-top: 10px;
	hyphens: auto;
	-webkit-hyphens: auto;
	hyphenate-limit-chars: 10 4 4;
	hyphenate-limit-lines: 2;
	hanging-punctuation: first allow-end last;
	overflow-wrap: break-word;
}
section.entry-content b, section.entry-content strong {
	font-family: CallunaBold, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
	font-weight: normal;
}
section.entry-content i, section.entry-content em {
	font-family: CallunaItalic, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
	font-style: normal;
}
section.entry-content b i, section.entry-content b em, section.entry-content strong i, section.entry-content strong em, section.entry-content i b {
	font-family: CallunaBoldItalic, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
	font-weight: normal;
	font-style: normal;
}
.intro-paragraph {
	font-family: CallunaItalic, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
	margin: 0px 0px 25px;
	padding: 5px 0px 5px 0px !important;
	font-size: clamp(1.2rem, 4vw, 1.625rem);
	line-height: 1.35;
	text-align: left;
	border-left: none;
}
.intro-paragraph.homepage-entry {
	font-family: CallunaRegular, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
}
.intro-paragraph.homepage-entry img {
	width: 100px;
	height: 100px;
	margin-right: 17px;
	margin-bottom: 0px;
	-webkit-border-radius: 10px;
	border-radius: 10px;
	-webkit-box-shadow: 1px 1px 3px 0px #9f9f98;
}
img.u-logo {
	text-align: left;
	float: left;
}
article.row.gutters {
	max-width: 600px !important;
	margin: auto !important;
}
body.Projects article.row.gutters, body.Blogs article.row.gutters {
	max-width: 800px !important;
	margin: auto !important;
}
body.Projects .project-entry {
	display: inline-block;
	background-color: var(--color-surface);
	padding: 0px 20px;
	margin: 0px 0px 20px 0px !important;
	border-radius: 10px;
	-webkit-box-shadow: 1px 1px 3px 0px #9f9f98;
	transition: all 0.2s ease-in-out;
}
body.Projects .project-entry:hover {
	cursor: pointer;
	background: linear-gradient(135deg, rgba(41, 87, 201, 0.06) 0%, rgba(59, 107, 223, 0.1) 50%, rgba(74, 126, 255, 0.14) 100%);
	box-shadow: 0 4px 12px rgba(41, 87, 201, 0.15);
}
body.Projects header h2, body.Projects article h2, body.Blogs header h2, body.Blogs .archive h2, body.Blogs article h2 {
	font-size: clamp(1.5rem, 4vw, 1.75rem);
}
.article-header {
	font-family: CallunaSansBold, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
}
/* .intro-paragraph > * {
	box-shadow: 0 0.2rem 0.25rem rgba(0, 0, 0, 0.2);
}
@supports (filter: drop-shadow(0 0.2rem 0.25rem rgba(0, 0, 0, 0.2))) {
	.intro-paragraph {
		filter: drop-shadow(0 0.2rem 0.25rem rgba(0, 0, 0, 0.2));
   }
	.intro-paragraph > * {
		box-shadow: none;
   }
}
*/
html, body#main-body {
	overflow-x: hidden;
}
body#main-body {
	background-color: var(--color-bg);
	background: var(--color-bg);
	font-size: clamp(1rem, 2.8vw, 1.4rem);
	line-height: 1.5;
	font-family: CallunaRegular, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
	color: var(--color-text);
   /* font-size:14px;
	*/
	padding-top: 0px;
	-webkit-font-smoothing: auto;
	-moz-osx-font-smoothing: auto;
	font-kerning: normal;
	font-variant-ligatures: common-ligatures contextual;
	text-rendering: optimizeLegibility;
}
body#main-body b, body#main-body strong {
	font-family: CallunaBold, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
	font-weight: normal;
}
body#main-body i, body#main-body em {
	font-family: CallunaItalic, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
	font-style: normal;
}
body#main-body b i, body#main-body b em, body#main-body strong i, body#main-body strong em, body#main-body i b {
	font-family: CallunaBoldItalic, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
	font-weight: normal;
	font-style: normal;
}
h1, h2, h3, h4, h5, h6, p, ul, ol, dl, blockquote, table, img, hr, .fluid-width-video-wrapper, .highlight {
	margin-bottom: 20px;
}
li {
	margin-bottom: 0.35em;
}
li:last-child {
	margin-bottom: 0;
}
hr {
	margin-top: 20px;
}
h1 {
	font-size: clamp(1.8rem, 5vw, 2.25rem);
	line-height: 1.2;
}
h1, h2, h3 {
	font-family: CallunaSansBold, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
	font-weight: normal;
}
header h2, article h2 {
	font-size: clamp(1.75rem, 5.5vw, 2.625rem);
	line-height: 1.15;
}
section.entry-content h2,
section.entry-content h3,
section.entry-content h4 {
	margin-top: 1.5em;
}
blockquote {
	border-left: none;
	padding: 0;
	margin: 1.5em 2.5em;
	font-size: 0.95em;
}
ul, ol {
	margin-left: 40px;
}
img {
	max-width: 100%;
	height: auto;
	border: none;
	outline: none;
}
a {
	text-decoration: none;
}
hr {
	border: 0;
	height: 25px;
	background: url(/public/images/eagle.png) center center no-repeat;
}
code {
	font-family: Consolas, Courier, monospace;
	font-size: clamp(0.75rem, 1.8vw, 0.8rem);
}
p code {
	padding: 0px 5px;
	border: 1px solid #ddd;
	background-color: #f8f8f8;
	border-radius: 3px;
	white-space: nowrap;
}
table {
	border-collapse: collapse;
   /* border: 1px solid $contrast-color;
	*/
}
table td, table th {
   /* border: 1px solid $contrast-color;
	*/
	padding: 5px 10px;
}
table thead {
	background-color: #cfc8c0;
}
dt {
	float: left;
	width: 30%;
	font-family: CallunaBold, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
	font-weight: normal;
}
dd {
	float: right;
	width: 70%;
}
footer {
	font-size: clamp(0.75rem, 1.8vw, 0.8rem);
	text-align: center;
   /* border-top: 1px solid #ccc;
	*/
	padding-top: 20px;
	margin-top: 20px;
	clear: both;
}
/*============================================================================*/
.azul a {
	color: #2957c9;
}
.azul a:hover {
	color: #183274;
}
.ruby a {
	color: #e0115f;
}
.ruby a:hover {
	color: #810a37;
}
.amber a {
	color: #ff7e00;
}
.amber a:hover {
	color: #994c00;
}
.avocado a {
	color: #568203;
}
.avocado a:hover {
	color: #141e01;
}
/*----------------------------------------------------------------------------*/
pre.highlight {
	padding: 30px;
	border-radius: 6px;
	background-color: #000;
	color: #f8f8f2;
	line-height: 1;
	overflow-x: scroll;
}
pre.highlight code {
	font-size: clamp(0.65rem, 1.5vw, 0.7rem);
}
.container {
	max-width: 1200px;
	padding: 0 40px;
   /* background: #f3efec;
	*/
   /* border-left: 1px dashed #ccc;
	*/
   /* box-shadow: 0px 2px 5px 2px #ccc;
	*/
}
header #name {
	display: none;
}
.center {
	text-align: center;
}
.right {
	float: right;
	margin: 0 0 20px 20px;
}
.left {
	float: left;
	margin: 0 20px 20px 0;
}
.top-navbar {
   /* margin-bottom: 35px;
	height: 100px;
	*/
	margin-bottom: 0;
   /* Remove bottom margin */
	height: auto;
   /* Allow height to be dynamic */
	margin-top: -20px;

	text-align: center;
	width: 100%;
	margin-left: 0px;
	margin-right: 0px;		
}
.scrolled .top-navbar #nav-links-2 {
	position: absolute; 
	right: 10px;
	top: -10px;
}
.scrolled .top-navbar {
	margin-top: -8px;
}
.top-navbar #nav-links-1 {
	display: inline-block;
	margin-top: 15px;
}
.scrolled .top-navbar #nav-links-1 {
	margin-top: 0px;
}
.top-navbar #nav-links-1 a {
	font-size: clamp(1rem, 3vw, 1.25rem);
	font-family: CallunaSansBold, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
}
.top-navbar #nav-links-2 {
	display: block;
	position: absolute; 
	right: 10px;
	top: -10px;
	/* opacity: 0.4; */
}
.top-navbar a {
	display: inline-block;
	color: #161925;
	border-radius: 0 0 5px 5px;
	font-size: clamp(0.9rem, 2.5vw, 1.125rem);
	font-family: CallunaRegular, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
	vertical-align: middle;
	padding: 25px 8px 15px;
	margin-top: 0;
	transition: all 0.3s ease;
}
/* Scroll state styles */
header.top.scrolled {
	box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
	height: 45px;
}
header.top.scrolled #logo {
	width: 30px;
	height: 30px;
	margin-top: 8px;
}
header.top.scrolled .top-navbar a {
	padding: 15px 8px 10px;
}
.top-navbar a:hover, .top-navbar a.current-page {
	color: #e5e1dd;
	border-bottom: none;
	text-decoration: none !important;
}
.top-navbar a:hover {
	background: linear-gradient(135deg, #2957c9 0%, #3b6bdf 50%, #4a7eff 100%);
	box-shadow: 0 4px 12px rgba(41, 87, 201, 0.3);
}
.top-navbar a.current-page {
	background: #2957c9;
	box-shadow: 0 2px 8px rgba(41, 87, 201, 0.4);
}
.top-navbar a svg, .top-navbar a i, .top-navbar a img {
	width: 24px;
	height: 36px;
	margin-bottom: 0px;
	vertical-align: top;
}
.archive, .single {
   /* margin-bottom: 100px;
	*/
	padding-bottom: 10px;
	margin-bottom: 20px;
}
.single {
	font-size: clamp(1rem, 2.2vw, 1.1rem);
}
.single time, span.filed-under, span.filed-under a, .p-author, .permalink {
   /* color: #333;
   */
	opacity: 0.8;
	font-size: clamp(0.8rem, 2vw, 0.9rem);
}
.bundle {
	border-top: 1px solid #848eb6;
	padding-top: 10px;
	margin-bottom: 10px;
}
.post-date {
	text-align: right;
}
.not-found {
	margin-top: 150px;
	text-align: center;
	font-size: clamp(1.25rem, 4vw, 2rem);
}
.not-found h1 {
	font-size: clamp(4rem, 12vw, 8rem);
}
dl, .clearfix:before, .clearfix:after {
	content: " ";
	display: table;
}
dl, .clearfix:after {
	clear: both;
}
/*============================================================================*/
#logo {
   /* display: inline-block;
	*/
   /* height: 110px;
	width: 110px;
	background-size: 90px 90px;
	background-position: left center;
	background-repeat: no-repeat;
	*/
	margin-top: 8px;
	/* height: 75px;
	width: 75px; */
	transition: all 0.3s ease;
   /* display: inline-block;
	*/
   /* box-shadow: 1px 1px 3px 0px #999;
	*/
	margin-bottom: 0px;
	position: absolute;
	left: 5px;
	top: 0px;
}
#logo img {
	width: 90px;
	height: 90px;
	-webkit-border-radius: 10px;
	border-radius: 10px;
	-webkit-box-shadow: 1px 1px 3px 0px #999;
}
div.posts-by-year article div.col {
	margin-bottom: 8px;
	font-size: clamp(1rem, 2.8vw, 1.125rem);
}
/*============================================================================*/

@media (min-width: 768px) and (max-width: 1023px) {
	/* Adjust featured blocks to show 2 per row */
	.span_4.col.featured-block {
	  width: calc(50% - 12px); /* Adjust width for 2 columns with gap */
	  margin-left: 24px;
	}

	#projects-section .span_4.col.featured-block:nth-child(9),
	#posts-section    .span_4.col.featured-block:nth-child(3) {
		display: none;
	}

	.gutters .span_1 {
		width: 6.5%;
	}
  
	/* Reset margin for first block in row */
	.row > .span_4.col.featured-block:nth-child(2n+1) {
	  margin-left: 0;
	  clear: both; 
	}
  
	/* Container padding adjustment */
	.container {
	  padding: 0 30px;
	  max-width: 800px;
	}
  
	/* Homepage entries adjustment */
	#homepage-entries {
	  padding-right: 15px;
	}
  
	/* Feed control container adjustments */
	#feed-control-container {
	  width: 100%;
	  margin-top: 20px;
	  padding-right: 0;
	}
  
	/* Adjust grid system for medium screens */
	.span_6 {
	  width: 50%;
	}
  }

/*============================================================================*/
@media screen and (max-width: 767px) {
	.hide-if-small {
		display: none;
   }
   img.u-logo {
		text-align: center;
		clear: both; 
   }
	.span_4.col.featured-block {
		width: 100%;
		margin-left: 0;
   }
	.container {
		padding: 0 20px;
   }
	#homepage-entries {
		padding-right: 0px !important;
   }
	div[data-tippy-root] {
		display: none;
   }
	h1 {
		font-size: clamp(1.5rem, 4vw, 1.8rem);
   }
   .top-navbar #nav-links-1 {
		margin-top: 0px;
		margin-bottom: 10px; 
   }
   .scrolled .top-navbar #nav-links-1 {
		margin-top: 10px;
	}
   .top-navbar #nav-links-2 {
		display: block;
		position: relative; 
		display: block;
		margin: 0px;
		right: 0px;
		top: 0px;
		opacity: 1;
	}	
	.scrolled .top-navbar #nav-links-2 {
		display: none;
	}
	#nav-links-2 a svg {
		/* opacity: 0.4; */
   }
	#feed-control-container {
		padding-right: 10px;
		border-top: none;
		margin-top: 20px;
   }
	#feed-control-container.loaded {
		border-right: none;
   }
	header.top {
		height: 45px;
   }
	header.top.scrolled {
		height: 45px;
	   /* Same height when scrolled */
   }
	header.top .container {
		padding: 8px 12px;
   }
   /* Main navigation links */
	#nav-links-1 {
		display: inline-block;
		margin-left: 8px;
   }
	#nav-links-1 a {
		font-size: clamp(1rem, 3vw, 1.25rem);
		padding: 6px 6px;
		margin: 0 2px;
   }

   /* Remove vertical spacing and centering */
	.top-navbar {
		margin: 0;
		text-align: left;
		height: auto;
		padding: 0;
		border: none;
   }
   /* Ensure the logo and nav stay on the same line */
	.col.span_2 {
		width: auto;
		display: inline-block;
		vertical-align: middle;
   }
	.col.span_10 {
		width: auto;
		display: inline-block;
		vertical-align: middle;
   }
	.top-navbar a {
		padding: 5px 8px;
   }
	header.top.scrolled .top-navbar a {
		padding: 5px 8px;
   }
	.top-navbar {
		text-align: center;
		margin-top: 0px;
		margin-bottom: 25px !important;
	   /* border-top: 1px dotted #ccc;
		border-bottom: 1px dotted #ccc;
		*/
		padding-top: 0px;
		height: auto !important;
	   /* padding: 5px 0;
		*/
   }
	.top-navbar a {
		padding: 2px 5px;
		margin: 2px 2px 8px 2px;
		border-radius: 0;
		border: none;
	   /* 1px solid $contrast-color;
		*/
		transition: none;
		font-size: clamp(0.9rem, 2.5vw, 1.125rem);
   }
	.top-navbar a:hover {
		transform: none;
   }
	.top-navbar a.link-to-home {
		display: none;
   }
	.bundle, .post-date {
	   /* text-align: center;
		*/
   }
	.bundle article {
	   /* margin-bottom: 30px;
		*/
   }
	#logo {
		background-position: center center;
		width: 40px;
		height: 40px;
		margin: 8px 0px 0px 0px;
   }
	.col.span_2 {
		min-width: 50px;
   }
	.homepage-entry img.large-icon {
		width: 64px;
		height: 64px;
   }
	div.posts-by-year article.row.gutters {
	   /* a {
			margin-left:25px;
			margin-top:-7px;
	   }
		*/
   }
	div.posts-by-year article.row.gutters .post-icon {
		display: none !important;
		position: absolute;
		top: 0;
		left: 0px !important;
		color: #999;
   }
	div.posts-by-year article.row.gutters::before {
		content: none !important;
   }
	body.Projects div.project-entry div.project-icon-container {
		text-align: center;
   }
	body.Projects div.project-entry div.project-icon-container img.project-icon {
		width: 64px;
		height: 64px;
   }
	blockquote {
		margin: 1.2em 1em;
	}
}
/*=========================================*/
div.posts-by-year article.row.gutters {
   /* margin-bottom: -17px !important;
	*/
	position: relative;
}
div.posts-by-year article.row.gutters .post-icon {
	display: none;
	position: absolute;
	top: 0;
	left: -17px;
	color: #999;
}
div.posts-by-year article.row.gutters::before {
	/* content: "•";
	position: absolute;
	color: #0070bb;
	opacity: 0.5; */
}
div.posts-by-year article.row.gutters:hover .post-icon {
	color: #000;
}
div.posts-by-year article.row.gutters a {
	font-family: CallunaRegular, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
}
div.posts-by-year article.row.gutters .post-date {
	color: var(--color-muted);
}
cite {
	font-family: CallunaBold, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
	font-weight: normal;
	font-style: normal;
}
header.top {
	position: relative;
	/* top: 0; */
	z-index: 1000;
    background: rgb(229, 225, 221, 0.5);
	
	backdrop-filter: blur(8px);
	-webkit-backdrop-filter: blur(8px); /* Safari and older WebKit-based browsers */

	margin: 0;
	width: 100%;
	transition: all 0.3s ease;
	height: 75px;
}
header.top .container {
	padding: 0px;
	margin: 0px 10px;
	max-width: 1000px;
}
#feed-control-container {
	float: left;
	padding-right: 10px;
	background-color: rgba(0, 0, 0, 0.05);
}
#feed-control-container.loaded {
	border: 1px dotted #ccc;
}
#feed-control {
	padding-top: 10px;
	font-family: CallunaRegular, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
	font-weight: 300;
	line-height: 1.2;
}
#feed-control ul {
	margin-left: 0px;
	list-style-type: none;
}
#feed-control ul .favelog-link {
	font-size: 13px;
	padding-bottom: 9px;
	list-style-position: outside;
	margin-left: 32px;
	padding-left: 3px;
	font-family: CallunaSansRegular;
	filter: contrast(0.25);
}

#feed-control ul .favelog-link:hover {
	filter: none;
}
#feed-control ul .favelog-link.bluesky {
	list-style-image: url('/img/icons/bluesky.svg');
}
#feed-control ul .favelog-link.get-pocket {
	list-style-image: url('/img/icons/get-pocket.svg');
}
#feed-control ul .favelog-link.github {
	list-style-image: url('/img/icons/github.svg');
}
#feed-control ul .favelog-link.twitter {
	list-style-image: url('/img/icons/twitter.svg');
}
#feed-control ul .favelog-link.youtube {
	list-style-image: url('/img/icons/youtube.svg');
}
#feed-control ul .favelog-link.medium {
	list-style-image: url('/img/icons/medium.svg');
}
#feed-control ul .favelog-link.vimeo {
	list-style-image: url('/img/icons/vimeo.svg');
}
#feed-control ul .favelog-link.bookmark {
	list-style-image: url('/img/icons/bookmark.svg');
}
#feed-control ul .favelog-link::marker {
	font-size: 30px;
	line-height: 13px;
}
#feed-control ul .favelog-link a {
	color: #333;
	border-bottom: 1px dotted transparent;
}
#feed-control ul .favelog-link a:hover {
	border-bottom: 1px dotted #0070bb;
}
#feed-control ul .favelog-link i {
	margin-right: 5px;
	margin-left: -20px;
}
.favelog-header {
	font-family: CallunaRegular, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
	font-size: 16px;
	padding-top: 10px;
	padding-bottom: 10px;
	margin-left: 15px;
}
.favelog-header a {
	color: #333;
	font-family: CallunaSansBold;
	filter: contrast(0.25);
}
body#main-body #homepage-entries {
	padding-right: 25px;
	font-family: CallunaRegular, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
	font-weight: 300;
	font-size: clamp(1rem, 2.8vw, 1.125rem);
}
body#main-body #homepage-entries b, body#main-body #homepage-entries strong {
	font-family: CallunaBold, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
	font-weight: inherit;
}
body#main-body #homepage-entries i, body#main-body #homepage-entries em {
	font-family: CallunaItalic, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
	font-style: italic;
	font-style: normal;
}
body#main-body #homepage-entries b i, body#main-body #homepage-entries b em, body#main-body #homepage-entries strong i, body#main-body #homepage-entries strong em, body#main-body #homepage-entries i b {
	font-family: CallunaBoldItalic, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
	font-weight: inherit;
	font-style: normal;
}
body#main-body #homepage-entries .homepage-entry {
	padding-bottom: 10px;
}
body#main-body #homepage-entries .homepage-entry img.large-icon {
	width: 150px;
	height: 150px;
	margin: 0 10px 0 0;
}
body#main-body #homepage-entries .homepage-entry img.medium-icon {
	width: 80px;
	height: 80px;
	border: none;
	margin: 10px 0px 10px 10px;
}
body#main-body #homepage-entries .homepage-entry img.small-icon {
	width: 64px;
	height: 64px;
	border: none;
	margin: 10px 0px 10px 10px;
}
.view-full-post, .external-post-excerpt {
	margin-top: 15px;
	font-family: CallunaRegular, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
	font-size: clamp(1.25rem, 3.5vw, 1.5rem);
}
.view-full-post .fa, .external-post-excerpt .fa {
	font-size: 15px;
	vertical-align: top;
}
.external-post-header {
	font-family: CallunaBold, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
	margin-top: 15px;
	font-size: clamp(1rem, 2.8vw, 1.125rem);
}
div.sidebar {
	margin-top: -35px;
}
form.navbar-search {
	margin-bottom: 20px;
}
.tweets {
	margin-top: 15px !important;
}
.tweets-header-container {
	position: inherit !important;
}
.tweets-header-container .tweets-header {
	padding: 0px 0 5px !important;
	width: inherit !important;
}
#dissertation {
	font-size: 17px;
	background-color: #ccc;
}
.comments {
	font-size: 15px;
	line-height: 1.4;
	color: #333;
}
.bundle.row.gutters.callout {
   /* background-color:#ccc;
	*/
}
.ss {
	font-family: CallunaBold, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
	font-weight: normal;
}
#extra-button {
	padding-top: 15px;
	font-size: 18px;
}
#loading {
	color: #676767;
	font-size: 11px;
	margin: 10px;
	padding: 4px;
}
.publication, .patent {
	font-size: clamp(1rem, 2.8vw, 1.125rem);
	line-height: 1.5;
	text-align: left;
	margin-bottom: 25px;
}
.publication .abstract, .patent .abstract {
	margin-top: 20px;
	margin-left: 25px;
	font-size: clamp(0.9rem, 2.5vw, 1rem);
	font-family: CallunaItalic, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
}
.title, .patent-title {
	font-family: CallunaBold, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
	font-weight: normal;
}
.title cite {
	font-style: normal;
}
.docs {
	padding-left: 15px;
	padding-top: 5px;
	font-family: CallunaSansRegular, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
	font-size: 12px;
}
.docs a {
	margin-right: 15px;
}
.docs i {
	margin: 0 2px 0 10px;
}
table.project-table tr td.tech {
	opacity: 0;
	color: #333;
	font-size: 13px;
}
table.project-table tr:hover td.tech {
	opacity: 1;
}
.homepage-entry a {
	border-bottom: 1px dotted #0070bb55;
}
.homepage-entry a:hover, .featured-title a:hover {
	border-bottom: 1px dotted;
	background: linear-gradient(135deg, rgba(41, 87, 201, 0.05) 0%, rgba(59, 107, 223, 0.08) 50%, rgba(74, 126, 255, 0.1) 100%);
	border-radius: 3px;
	padding: 1px 3px;
	margin: -1px -3px;
	transition: all 0.2s ease;
}
div.abstract.show {
	display: block;
}
div.abstract {
	color: #333;
	display: none;
	margin-top: 10px;
	padding: 0 0 0 10px;
	border-left: 1px solid #ccc;
}
body.Publications h2 {
	font-size: 28px;
}
body.Publications h1, body.Publications h2, body.Publications h3, body.Publications h4 {
	margin: 15px 0 0 0;
}
body.Projects h1, body.Projects h2, body.Projects h3, body.Projects h4 {
	margin: 5px 0;
}
body.Projects .status {
	font-size: 16px;
	padding: 1px 7px;
   /* color: #333;
   */
	font-family: CallunaSansBold, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
	border-radius: 10px;
   /* background-color: white;
	*/
	border: 1px dotted #ccc;
	float: right;
}
body.Projects .dates {
	font-size: 13px;
	font-weight: normal;
	margin-left: 3px;
	font-family: CallunaSansRegular, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
}
body.Projects .status-current {
	background-color: green;
}
body.Projects .status-recent {
	background-color: orange;
}
body.Projects .status-ancient {
	background-color: red;
}
body.Projects div.project-entry {
	position: relative;
	border-bottom: 1px dotted #eee;
	margin-bottom: 0;
	margin-top: 0;
	padding-bottom: 20px;
	padding-top: 20px;
}
body.Projects div.project-entry .project-name {
	margin-bottom: 12px;
	font-size: 28px;
}
body.Projects div.project-entry .status {
   /* position: absolute;
	right: 0;
	top: 10px;
	*/
}
body.Projects .gfg-title, body.Projects .gfg-subtitle {
	display: none;
}
.screenshots {
	text-align: center;
	width: 100%;
}
.screenshots img {
	border: 1px solid #333;
	margin-bottom: 20px;
}
.iframe-container iframe {
	margin: 10px 0 40px;
	border: 1px solid #ccc;
}
body.Blogs h1 {
	margin: 15px 0 0 0;
}
body.Blogs h2 {
	margin: 0;
}
body.Blogs article h2 {
	margin-bottom: 0px;
}
body.Blogs .external-post-explanation {
	margin-top: 10px;
	margin-bottom: 20px;
}
body.Blogs .content-hidden {
	opacity: 0.5;
}
body.Blogs .external-post-image img {
	border: 1px solid #ccc;
}
.social-buttons {
	float: right;
	text-align: right;
	padding-bottom: 10px;
	padding-left: 10px;
	width: 80px;
}
.small-list-container li {
	font-size: 18px;
	line-height: 1.5;
}
.small-list-container div {
	font-size: 14px;
	margin-bottom: 10px;
}
.small-list-container.container-compact div {
	line-height: 18px;
}
a.separate-line {
	display: block;
}
.primary {
	/* font-family: CallunaBold, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif; */
}
.toggle-abstract {
	text-decoration: none;
	border-bottom: 1px dotted #999;
}
.box-sidebar {
	border-left: 1px dotted #ccc;
	padding: 10px 15px;
   /*border-top:1px dotted #ccc;
	*/
}
.box-sidebar:hover {
	opacity: 1;
}
.featured_projects {
	background-color: var(--color-surface);
}
.archived-tweets a {
	font-size: 11px;
}
.featured-block {
	border-radius: 14px;
	transition: all 0.3s ease;
	background: var(--color-surface);
	box-shadow: 0 2px 8px var(--color-card-shadow);
   /* padding: 16px;
	*/
	margin-bottom: 24px;
   /* Vertical gap between rows */
}
header.top + .container {
	padding-top: 1px;
}
.featured-block .featured-title a:hover {
	background: linear-gradient(135deg, rgba(41, 87, 201, 0.05) 0%, rgba(59, 107, 223, 0.08) 50%, rgba(74, 126, 255, 0.1) 100%);
	border-radius: 3px;
	padding: 1px 3px;
	margin: -1px -3px;
}
.featured-block .featured-image-wrapper a:hover img {
	opacity: 0.85;
}
.featured-block .featured-label {
	text-align: center;
	padding: 15px 20px 10px 20px;
}
.featured-title {
	font-family: CallunaSansBold, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
	line-height: 1.2;
}
.featured-block .featured-secondary {
	font-size: 14px;
	color: var(--color-secondary);
	margin-top: 10px;
	margin-bottom: 10px;
	font-family: CallunaSansRegular, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
	font-weight: 300;
}
.featured-block .featured-tagline {
	font-size: 14px;
	color: var(--color-muted);
	margin-top: 5px;
	margin-bottom: 0px;
	font-family: CallunaItalic, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
	font-weight: 300;
}
.featured-block img {
	margin-bottom: 0px;
	border-radius: 14px 14px 0px 0px;
	transition: all 0.2s ease-in-out;
	border-bottom: 1px solid #ccc;
}
/* .featured-block:hover img {
	transform: scale(1.02);
}
*/
.row-header {
	font-family: CallunaSansBold, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
	padding: 26px 6px 6px 6px;
	font-size: clamp(1.5rem, 4.5vw, 1.875rem);
	margin: 37px 0px 21px;
	text-align: center;
	color: var(--color-secondary);
	border-top: 1px solid #999;
	border-image: none;
	letter-spacing: 0.05em;
	font-variant-caps: small-caps;
}
.row-header:hover a {
	text-decoration: underline;
}
.patent {
	line-height: 1.5 !important;
	margin-bottom: 16px !important;
}
.post-image {
	text-align: center;
}
.PageNavigation .prevnext-dir {
	font-family: CallunaSansBold, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
}
.PageNavigation .prevnext-container {
	font-family: CallunaSansRegular, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
}
.PageNavigation .prevnext-container .prevnext-title {
	font-family: CallunaSansRegular, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
}
.social li a {
	text-decoration: none;
	color: #333;
}
.post-year.col {
	text-align: right;
}
#lunrsearchresults {
	padding-top: 0.2rem;
}
.lunrsearchresult {
	padding-bottom: 1rem;
}
.lunrsearchresult .title {
	color: #2957c9;
	font-size: clamp(1.25rem, 3.5vw, 1.5625rem);
	font-family: CallunaSansBold, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
}
.lunrsearchresult .url {
	color: silver;
}
.lunrsearchresult a, .lunrsearchresult a:hover {
	display: block;
	color: #777 !important;
}
.lunrsearchresult a:hover, .lunrsearchresult a:focus {
	text-decoration: none;
}
.lunrsearchresult a:hover .title {
	text-decoration: underline;
}
input#lunrsearch {
	margin-bottom: 25px;
	height: 30px;
	padding: 20px 12px;
	font-size: clamp(1.25rem, 4vw, 1.625rem);
	color: #999;
	background: linear-gradient(135deg, #f8f8f8 0%, #eee 50%, #e5e5e5 100%);
	border: 2px solid transparent;
	border-radius: 8px;
	font-family: CallunaBold, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
	transition: all 0.3s ease;
}
input#lunrsearch:focus {
	outline: none;
	border: 2px solid transparent;
	background: linear-gradient(135deg, #fff 0%, #f8f8f8 50%, #f0f0f0 100%);
	box-shadow: 0 0 0 2px rgba(41, 87, 201, 0.3), 0 4px 12px rgba(41, 87, 201, 0.1);
}
#lunrsearchresults #results-header {
	font-family: CallunaBold, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
}
.svg-12 {
	margin-bottom: 0px;
	width: 12px;
	height: 12px;
}
.at {
	vertical-align: top;
}
.name {
	font-size: 18px;
	font-weight: regular;
}
.title {
   /*font-size: 15px;
	*/
	margin-bottom: 10px;
}
.group {
	font-size: 15px;
	display: flex;
	align-items: center;
	height: 130px;
}
.group-title {
	width: 70px;
	font-family: CallunaBoldItalic, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
	font-size: 14px;
}
.link {
	color: #5e8793;
}
.social li {
	display: inline;
	margin: 0px 3px;
}
.social li a {
	text-decoration: none;
}
.social li a:hover {
	background: linear-gradient(135deg, #2957c9 0%, #3b6bdf 50%, #4a7eff 100%);
	-webkit-background-clip: text;
	-webkit-text-fill-color: transparent;
	background-clip: text;
	filter: drop-shadow(0 2px 4px rgba(41, 87, 201, 0.3));
}
.social {
	margin-bottom: 32px;
	margin-top: 0px;
	margin-left: 0;
}
.social i {
	vertical-align: middle;
	margin: 0 5px;
}
.icon {
	width: 32px;
	height: 32px;
}
.icon:hover {
	opacity: 0.6;
}
.copyright {
	margin-top: -20px;
	margin-bottom: 20px;
	font-family: CallunaSansRegular, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
}
/* Print-journal oldstyle numerals for dates and metadata */
.featured-secondary,
.status,
.post-date,
time,
.copyright {
	font-variant-numeric: oldstyle-nums proportional-nums;
}
@media print {
	section.PageNavigation, header.top, footer {
		display: none;
   }
	body#main-body {
		border-top: none;
		background: transparent;
		background-color: transparent;
   }
	body {
		color: #000 !important;
   }
	.container {
		background: transparent !important;
   }
}
.PageNavigation {
	font-size: 14px;
	display: block;
	width: auto;
	overflow: hidden;
   /* background-color: rgba(0,0,0,0.025);
	*/
	/* margin-left: -20px;
	margin-right: -20px;
	padding-left: 20px;
	padding-right: 20px; */
	border-top: 3px solid #ccc;
}
.PageNavigation .prevnext-container {
	display: block;
	width: 40%;
	float: left;
	margin: 1em 0;
}
.PageNavigation .prevnext-container.prev {
	float: right;
	text-align: left;
}
.PageNavigation .prevnext-container.next {
	float: left;
	text-align: right;
}
.PageNavigation .prevnext-container .prevnext-img {
	padding-top: 5px;
}
.PageNavigation .prevnext-container .prevnext-img img {
	border: 1px solid #ccc;
}
.PageNavigation .prevnext-container .prevnext-img img:hover {
	border: 1px solid #000;
}
.tippy-content {
	font-family: CallunaRegular, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
	font-weight: 300;
	padding: 20px 20px 0px;
}
.tippy-content b, .tippy-content strong {
	font-family: CallunaBold, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
	font-weight: inherit;
}
.tippy-content i, .tippy-content em {
	font-family: CallunaItalic, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
	font-style: normal;
}
.tippy-content b i, .tippy-content b em, .tippy-content strong i, .tippy-content strong em, .tippy-content i b {
	font-family: CallunaBoldItalic, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
	font-weight: inherit;
	font-style: normal;
}
blockquote.twitter-tweet {
	border-left:none;
	border: 1px dotted #999;
	padding: 15px;
	background: #fff;
}
blockquote p[dir=ltr] {
	font-family: CallunaItalic, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
	font-weight: normal;
	font-style: normal;
	margin-bottom: 5px;
}
blockquote p[dir=ltr] a {
	color: inherit;
}
.sketchpad-blog-title a, .academic-publications li, .sketchpad-studio-list li {
	font-size: 14px;
}
.academic-publications li {
	margin-top: 5px;
	margin-bottom: 5px;
}
/* Earliest-possible dark mode background (applied to html before body loads) */
html.dark-mode body#main-body {
	background-color: #1c1917;
}
/* Light mode styles */
body.light-mode {
	background-color: var(--color-bg) !important;
	color: var(--color-text) !important;
}
body.light-mode a:hover {
	color: var(--color-link-hover) !important;
}
body.light-mode .top-navbar a.current-page {
	color: #f3efec !important;
}
body.light-mode .top-navbar a {
	color: var(--color-text) !important;
}
body.light-mode .top-navbar a:hover {
	color: var(--color-bg) !important;
}
body.light-mode img {
	filter: none !important;
}
/* Dark mode styles */
body.dark-mode {
	background-color: var(--color-bg) !important;
	color: var(--color-text) !important;
}
/* Dark mode support */
body.dark-mode header.top {
	background: var(--color-header-bg);
}
body.dark-mode a {
	color: var(--color-link) !important;
}
body.dark-mode a:hover {
	color: var(--color-link-hover) !important;
}
body.dark-mode .top-navbar a {
	color: #e5e1dd !important;
}
body.dark-mode img {
	filter: brightness(0.7) !important;
	/* transition: filter 0.3s ease-in-out !important; */
}
body.dark-mode img:hover {
	filter: brightness(1) !important;
}
/* Toggle icon visibility */
.light-mode #dark-mode-toggle .light-mode-icon {
	display: block !important;
}
.light-mode #dark-mode-toggle .dark-mode-icon {
	display: none !important;
}
.dark-mode #dark-mode-toggle .light-mode-icon {
	display: none !important;
}
.dark-mode #dark-mode-toggle .dark-mode-icon {
	display: block !important;
}
/* Transitions */
body {
	transition: background-color 0.3s ease, color 0.3s ease;
}
.sr-only {
	position: absolute;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
	border: 0;
}
body.dark-mode img.invert-conditionally, body.dark-mode div.docs img {
	filter: invert(1) hue-rotate(180deg) !important;
}
body#main-body.dark-mode {
	border-top: #000;
}
body.dark-mode.Projects .project-entry {
	background: var(--color-surface);
}
body.dark-mode.Projects .project-entry:hover {
	background: linear-gradient(135deg, rgba(41, 87, 201, 0.1) 0%, rgba(59, 107, 223, 0.15) 50%, rgba(74, 126, 255, 0.18) 100%);
	box-shadow: 0 4px 12px rgba(41, 87, 201, 0.25);
}
body.dark-mode .featured-block {
	background: var(--color-surface);
	box-shadow: 0 2px 8px var(--color-card-shadow);
}
body.dark-mode .featured-block .featured-title a:hover {
	background: linear-gradient(135deg, rgba(41, 87, 201, 0.1) 0%, rgba(59, 107, 223, 0.15) 50%, rgba(74, 126, 255, 0.18) 100%);
}
body.dark-mode .featured-block .featured-secondary {
	color: var(--color-secondary);
}
body.dark-mode .featured-block .featured-tagline {
	color: var(--color-muted);
}
body.dark-mode footer ul.social a {
	color: #e5e1dd !important;
}
body.dark-mode footer ul.social a:hover {
	background: linear-gradient(135deg, #6d8eef 0%, #8fa3ff 50%, #a8b8ff 100%);
	-webkit-background-clip: text;
	-webkit-text-fill-color: transparent;
	background-clip: text;
	filter: drop-shadow(0 2px 4px rgba(109, 142, 239, 0.4));
}
body.dark-mode .top-navbar a:hover {
	background: linear-gradient(135deg, #2957c9 0%, #3b6bdf 50%, #5d8aff 100%);
	box-shadow: 0 4px 12px rgba(41, 87, 201, 0.4);
}
body.dark-mode .top-navbar a.current-page {
	background: #2957c9;
	box-shadow: 0 2px 8px rgba(41, 87, 201, 0.5);
}
body.dark-mode div.abstract {
	color: rgb(243, 239, 236);
}
body.dark-mode .comments {
	color: rgba(255,255,255,0.6);
}
body.dark-mode .tippy-box {
	background-color: #292524;
	color: #d6d3d1;
}
body.dark-mode .presentation-url img, body.dark-mode .external-mention img {
	filter: invert(1) hue-rotate(180deg) !important;
}
body.dark-mode blockquote.twitter-tweet {
	background: #1c1917;
}
.no-hover a:hover {
	color: inherit !important;
	background: none !important;
	text-decoration: none !important;
}
.no-hover svg:hover {
	fill: currentColor !important;
}
svg {
	fill: currentColor;
}
.no-hover svg:hover {
	fill: inherit !important;
}
.no-hover a:hover, .no-hover svg:hover {
	color: inherit !important;
	background-color: transparent !important;
	border-color: transparent !important;
	fill: inherit !important;
	text-shadow: none !important;
	box-shadow: none !important;
	filter: none !important;
	opacity: 1 !important;
	transform: none !important;
}

.featured-image-wrapper {
	aspect-ratio: 16 / 9;
	overflow: hidden;
}
img.featured-image {
	width: 100%; 
	height: auto; 
	object-fit: cover; 
}
.patent-number a, 
.presentation-url a, 
a.toggle-abstract {
	font-family: CallunaSansRegular, -apple-system, BlinkMacSystemFont, system-ui, CallunaRegular, charter, Georgia, sans-serif;
}

.record-type-label {
	color: var(--color-muted);
}

body.Search .container {
    max-width: 800px;
}

img.project-header-image {
	width: 291px;
	height: 161px;
	margin: 0px auto;
	border: none;
}

/* ========================================
   Accessibility: Focus Styles
   ======================================== */
:focus-visible {
	outline: 2px solid var(--color-accent);
	outline-offset: 2px;
}
body.dark-mode :focus-visible {
	outline-color: var(--color-accent);
}
/* Skip link */
.skip-link {
	position: absolute;
	top: -100%;
	left: 50%;
	transform: translateX(-50%);
	background: var(--color-accent);
	color: #fff;
	padding: 8px 16px;
	border-radius: 0 0 6px 6px;
	z-index: 1000;
	font-family: CallunaSansRegular, -apple-system, BlinkMacSystemFont, system-ui, sans-serif;
	font-size: 14px;
	text-decoration: none;
	transition: top 0.2s ease;
}
.skip-link:focus {
	top: 0;
	outline: none;
}

/* ========================================
   Fine Press Styling
   ======================================== */

/* Consecutive paragraphs: indent instead of full gap */
article.single.post span[itemprop="articleBody"] p + p {
	text-indent: 1.5em;
	margin-top: -12px;
}

/* First paragraph after any block element: no indent */
article.single.post span[itemprop="articleBody"] > p:first-child,
article.single.post span[itemprop="articleBody"] h2 + p,
article.single.post span[itemprop="articleBody"] h3 + p,
article.single.post span[itemprop="articleBody"] h4 + p,
article.single.post span[itemprop="articleBody"] hr + p,
article.single.post span[itemprop="articleBody"] blockquote + p,
article.single.post span[itemprop="articleBody"] .highlight + p,
article.single.post span[itemprop="articleBody"] img + p,
article.single.post span[itemprop="articleBody"] .fluid-width-video-wrapper + p,
article.single.post span[itemprop="articleBody"] ul + p,
article.single.post span[itemprop="articleBody"] ol + p,
article.single.post span[itemprop="articleBody"] table + p {
	text-indent: 0;
}

/* Drop cap on article opener */
article.single.post span[itemprop="articleBody"] > p:first-child::first-letter {
	float: left;
	font-family: CallunaBold, Georgia, serif;
	font-size: 3.2em;
	line-height: 0.8;
	padding-right: 0.08em;
	margin-top: 0.05em;
	margin-bottom: -0.1em;
	color: var(--color-text);
}

/* Hairline link underlines in article text */
article.single.post span[itemprop="articleBody"] a {
	text-decoration: underline;
	text-decoration-color: var(--color-link-underline);
	text-underline-offset: 0.15em;
	text-decoration-thickness: 0.5px;
	transition: text-decoration-color 0.2s ease;
}
article.single.post span[itemprop="articleBody"] a:hover {
	text-decoration-color: var(--color-link-underline-hover);
}

/* First-line small caps after section headings */
article.single.post span[itemprop="articleBody"] h2 + p::first-line,
article.single.post span[itemprop="articleBody"] h3 + p::first-line {
	font-variant-caps: small-caps;
	font-variant-ligatures: no-common-ligatures contextual;
	font-variant-numeric: oldstyle-nums proportional-nums;
	font-feature-settings: "kern", "liga" 0, "clig" 0, "calt", "onum", "pnum", "smcp";
	letter-spacing: 0.03em;
}

/* Blockquote citation styling */
blockquote cite {
	display: block;
	text-align: right;
	font-family: CallunaRegular, Georgia, serif;
	font-style: normal;
	font-variant-caps: small-caps;
	font-feature-settings: "kern", "liga" 0, "clig" 0, "calt", "onum", "pnum", "smcp";
	font-size: 0.9em;
	margin-top: 0.5em;
	color: var(--color-muted);
}

/* ========================================
   Reduced Motion
   ======================================== */
@media (prefers-reduced-motion: reduce) {
	*, *::before, *::after {
		animation-duration: 0.01ms !important;
		animation-iteration-count: 1 !important;
		transition-duration: 0.01ms !important;
		scroll-behavior: auto !important;
	}
	.project-entry:hover,
	.featured-block:hover,
	.top-navbar a:hover {
		transform: none !important;
	}
}
    </style>
    
    <style type="text/css">
      .tippy-box[data-theme~=light-border]{background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,8,16,.15);color:#333;box-shadow:0 4px 14px -2px rgba(0,8,16,.08)}.tippy-box[data-theme~=light-border]>.tippy-backdrop{background-color:#fff}.tippy-box[data-theme~=light-border]>.tippy-arrow:after,.tippy-box[data-theme~=light-border]>.tippy-svg-arrow:after{content:"";position:absolute;z-index:-1}.tippy-box[data-theme~=light-border]>.tippy-arrow:after{border-color:transparent;border-style:solid}.tippy-box[data-theme~=light-border][data-placement^=top]>.tippy-arrow:before{border-top-color:#fff}.tippy-box[data-theme~=light-border][data-placement^=top]>.tippy-arrow:after{border-top-color:rgba(0,8,16,.2);border-width:7px 7px 0;top:17px;left:1px}.tippy-box[data-theme~=light-border][data-placement^=top]>.tippy-svg-arrow>svg{top:16px}.tippy-box[data-theme~=light-border][data-placement^=top]>.tippy-svg-arrow:after{top:17px}.tippy-box[data-theme~=light-border][data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:#fff;bottom:16px}.tippy-box[data-theme~=light-border][data-placement^=bottom]>.tippy-arrow:after{border-bottom-color:rgba(0,8,16,.2);border-width:0 7px 7px;bottom:17px;left:1px}.tippy-box[data-theme~=light-border][data-placement^=bottom]>.tippy-svg-arrow>svg{bottom:16px}.tippy-box[data-theme~=light-border][data-placement^=bottom]>.tippy-svg-arrow:after{bottom:17px}.tippy-box[data-theme~=light-border][data-placement^=left]>.tippy-arrow:before{border-left-color:#fff}.tippy-box[data-theme~=light-border][data-placement^=left]>.tippy-arrow:after{border-left-color:rgba(0,8,16,.2);border-width:7px 0 7px 7px;left:17px;top:1px}.tippy-box[data-theme~=light-border][data-placement^=left]>.tippy-svg-arrow>svg{left:11px}.tippy-box[data-theme~=light-border][data-placement^=left]>.tippy-svg-arrow:after{left:12px}.tippy-box[data-theme~=light-border][data-placement^=right]>.tippy-arrow:before{border-right-color:#fff;right:16px}.tippy-box[data-theme~=light-border][data-placement^=right]>.tippy-arrow:after{border-width:7px 7px 7px 0;right:17px;top:1px;border-right-color:rgba(0,8,16,.2)}.tippy-box[data-theme~=light-border][data-placement^=right]>.tippy-svg-arrow>svg{right:11px}.tippy-box[data-theme~=light-border][data-placement^=right]>.tippy-svg-arrow:after{right:12px}.tippy-box[data-theme~=light-border]>.tippy-svg-arrow{fill:#fff}.tippy-box[data-theme~=light-border]>.tippy-svg-arrow:after{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMCA2czEuNzk2LS4wMTMgNC42Ny0zLjYxNUM1Ljg1MS45IDYuOTMuMDA2IDggMGMxLjA3LS4wMDYgMi4xNDguODg3IDMuMzQzIDIuMzg1QzE0LjIzMyA2LjAwNSAxNiA2IDE2IDZIMHoiIGZpbGw9InJnYmEoMCwgOCwgMTYsIDAuMikiLz48L3N2Zz4=);background-size:16px 6px;width:16px;height:6px}
    </style>

    <script>
      // Prevent flash of wrong theme on load
      (function() {
        var saved = localStorage.getItem('theme');
        var theme = saved || (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light');
        document.documentElement.classList.add(theme + '-mode');
      })();
    </script>

  </head> 
  <body id="main-body" class="Home azul">
    <a href="#main-content" class="skip-link">Skip to main content</a>
    <header role="banner" class="top row gutters">
      <div>
        <div class="col span_2">
          <a href="/" title="Ari Bader-Natal"><img alt="ABN" id="logo" src="https://www.aribadernatal.com/cdn-cgi/image/format=auto/logo-180-180.png" width="75" height="75" class="invert-conditionally" /></a>
          <div id="name">Ari Bader-Natal</div>
        </div>
        <span role="navigation">
          
        <nav class="col top-navbar">
        	<div id="nav-links-1">
           
          	
          		<a href="/projects" title="Go to Projects" aria-label="Projects" class=" ">Projects</a>
          	
           
          	
          		<a href="/blog" title="Go to Blogs" aria-label="Blogs" class=" ">Posts</a>
          	
           
          	
          		<a href="/publications" title="Go to Publications" aria-label="Publications" class=" ">Publications</a>
          	
           
          	
          
         </div>

        	<div id="nav-links-2">
             
              
             
              
             
              
             
              
                <a href="https://www.linkedin.com/in/aribadernatal" title="Go to LinkedIn" aria-label="LinkedIn" class=" "><svg xmlns="http://www.w3.org/2000/svg" aria-label='LinkedIn' viewBox="0 0 72 72"><g fill-rule="evenodd"><path d="M8,72 L64,72 C68.418278,72 72,68.418278 72,64 L72,8 C72,3.581722 68.418278,-8.11624501e-16 64,0 L8,0 C3.581722,8.11624501e-16 -5.41083001e-16,3.581722 0,8 L0,64 C5.41083001e-16,68.418278 3.581722,72 8,72 Z" fill="currentColor"/><path d="M62,62 L51.315625,62 L51.315625,43.8021149 C51.315625,38.8127542 49.4197917,36.0245323 45.4707031,36.0245323 C41.1746094,36.0245323 38.9300781,38.9261103 38.9300781,43.8021149 L38.9300781,62 L28.6333333,62 L28.6333333,27.3333333 L38.9300781,27.3333333 L38.9300781,32.0029283 C38.9300781,32.0029283 42.0260417,26.2742151 49.3825521,26.2742151 C56.7356771,26.2742151 62,30.7644705 62,40.051212 L62,62 Z M16.349349,22.7940133 C12.8420573,22.7940133 10,19.9296567 10,16.3970067 C10,12.8643566 12.8420573,10 16.349349,10 C19.8566406,10 22.6970052,12.8643566 22.6970052,16.3970067 C22.6970052,19.9296567 19.8566406,22.7940133 16.349349,22.7940133 Z M11.0325521,62 L21.769401,62 L21.769401,27.3333333 L11.0325521,27.3333333 L11.0325521,62 Z" fill="white" fill-rule="evenodd" clip-rule="evenodd"/></g></svg></a>
              
            

            <a href="#" id="dark-mode-toggle" title="Toggle dark mode" aria-label="Toggle dark mode" class="">
              <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="light-mode-icon size-6">
                <path fill-rule="evenodd" d="M9.528 1.718a.75.75 0 0 1 .162.819A8.97 8.97 0 0 0 9 6a9 9 0 0 0 9 9 8.97 8.97 0 0 0 3.463-.69.75.75 0 0 1 .981.98 10.503 10.503 0 0 1-9.694 6.46c-5.799 0-10.5-4.7-10.5-10.5 0-4.368 2.667-8.112 6.46-9.694a.75.75 0 0 1 .818.162Z" clip-rule="evenodd" />
              </svg>
              <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="dark-mode-icon size-6">
                <path d="M12 2.25a.75.75 0 0 1 .75.75v2.25a.75.75 0 0 1-1.5 0V3a.75.75 0 0 1 .75-.75ZM7.5 12a4.5 4.5 0 1 1 9 0 4.5 4.5 0 0 1-9 0ZM18.894 6.166a.75.75 0 0 0-1.06-1.06l-1.591 1.59a.75.75 0 1 0 1.06 1.061l1.591-1.59ZM21.75 12a.75.75 0 0 1-.75.75h-2.25a.75.75 0 0 1 0-1.5H21a.75.75 0 0 1 .75.75ZM17.834 18.894a.75.75 0 0 0 1.06-1.06l-1.59-1.591a.75.75 0 1 0-1.061 1.06l1.59 1.591ZM12 18a.75.75 0 0 1 .75.75V21a.75.75 0 0 1-1.5 0v-2.25A.75.75 0 0 1 12 18ZM7.758 17.303a.75.75 0 0 0-1.061-1.06l-1.591 1.59a.75.75 0 0 0 1.06 1.061l1.591-1.59ZM6 12a.75.75 0 0 1-.75.75H3a.75.75 0 0 1 0-1.5h2.25A.75.75 0 0 1 6 12ZM6.697 7.757a.75.75 0 0 0 1.06-1.06l-1.59-1.591a.75.75 0 0 0-1.061 1.06l1.59 1.591Z" />
              </svg>
            </a>
         </div>


        </nav>


        </span>
      </div>
    </header>
    <div class="container">
      <section id="main-content" class="entry-content e-content" role="main">
        <link rel="preload" as="image" href="https://www.aribadernatal.com/cdn-cgi/image/format=auto/logo-180-180.png" />
<link rel="preload" as="image" href="https://www.aribadernatal.com/cdn-cgi/image/format=auto/public/images/aribadernatal-200.png" />
<link rel="preload" as="image" href="https://www.aribadernatal.com/cdn-cgi/image/format=auto/img/sparkwise-logo.svg" />
<link rel="preload" as="image" href="https://www.aribadernatal.com/cdn-cgi/image/format=auto/img/calbright_state_star_bw.svg" />
<link rel="preload" as="image" href="https://www.aribadernatal.com/cdn-cgi/image/format=auto/img/minerva_logo_large.png" />
<link rel="preload" as="image" href="https://www.aribadernatal.com/cdn-cgi/image/format=auto/common/sketchpad_128x128.png" />
<link rel="preload" as="image" href="https://www.aribadernatal.com/cdn-cgi/image/format=auto/img/icons/github.svg" />
<link rel="preload" as="image" href="https://www.aribadernatal.com/cdn-cgi/image/format=auto/img/icons/bookmark.svg" />

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "url": "https://aribadernatal.com/",
  "name": "Ari Bader-Natal",
  "description": "I design, build, and operate online learning environments that help learners access new opportunities and create new futures.",
  "thumbnailUrl": "https://aribadernatal.com/public/images/social_card.jpg",
  "image": {
    "@type": "ImageObject",
    "url": "https://aribadernatal.com/public/images/social_card.jpg", 
    "creditText": "Ari Bader-Natal",
    "copyrightNotice": "Ari Bader-Natal",
    "creator": {
      "@type": "Person",
      "name": "Ari Bader-Natal"
     }
  },
  "potentialAction": {
    "@type": "SearchAction",
    "target": {
      "@type": "EntryPoint",
      "urlTemplate": "https://aribadernatal.com/search/?q={search_term_string}"
    },
    "query-input": "required name=search_term_string"
  },
  "publisher": {
    "@type": "Person",
    "name": "Ari Bader-Natal",
    "givenName": "Ari",
    "familyName": "Bader-Natal",
    "email": "ari@aribadernatal.com",
    "sameAs":[  
      "https://twitter.com/aribadernatal",
      "https://bsky.app/profile/aribadernatal.com",
      "https://www.linkedin.com/in/aribadernatal",
      "https://sparkwise.co/team/ari-bader-natal",
      "https://github.com/aribn"
    ]
  },
  "mainEntityOfPage":{  
     "@type": "WebSite",
     "@id": "https://aribadernatal.com"
  },
  "author": {
    "@type": "Person",
    "name": "Ari Bader-Natal",
    "givenName": "Ari",
    "familyName": "Bader-Natal",
    "email": "ari@aribadernatal.com",
    "sameAs":[  
      "https://twitter.com/aribadernatal",
      "https://bsky.app/profile/aribadernatal.com",
      "https://www.linkedin.com/in/aribadernatal",
      "https://sparkwise.co/team/ari-bader-natal",
      "https://github.com/aribn"
    ]
  }
}
</script>

<div class="homepage-entry col span_12 p-note intro-paragraph rn-highlight h-card" style="">
  <a href="https://www.aribadernatal.com/cdn-cgi/image/format=auto/public/images/aribadernatal.png" class="u-uid u-url" title="Ari Bader-Natal">
    <img alt="Ari Bader-Natal" src="https://www.aribadernatal.com/cdn-cgi/image/format=auto/public/images/aribadernatal-200.png" width="100" height="100" class="u-logo" style="border-radius:none;-webkit-border-radius:none;-webkit-box-shadow:none;">
  </a>
  <strong>I'm Ari Bader-Natal.</strong> <i class="p-note">I design, build, and operate online learning environments that help people gain access to new opportunities and create new futures.</i> 
</div>


 
<div class="row">

  <div class="span_8 col" id="homepage-entries">

    <div class="homepage-entry" style="margin-bottom: 18px;">
        <IMG alt="Sparkwise logo" class="small-icon" width="64" height="64" src="https://www.aribadernatal.com/cdn-cgi/image/format=auto/img/sparkwise-logo.svg" align="right">
        I am <B><A HREF="/projects/Sparkwise/">co-founder and CTO at Sparkwise</A></B>. Sparkwise automates live group learning — scaling up the active engagement people need to build skills in business, AI, and more. Check us out at <A href="https://sparkwise.co" target='_blank'>sparkwise.co</A>.
    </div>

    <div class="homepage-entry">
      <IMG alt="Calbright logo" class="small-icon invert-conditionally" width="64" height="64" SRC="https://www.aribadernatal.com/cdn-cgi/image/format=auto/img/calbright_state_star_bw.svg" align="right">
      From 2019-2021, I served as the <B><A HREF="/projects/Calbright/">founding CTO at Calbright College.</A></B> 
      <span>Calbright is a fully-online competency-based college in the California Community Colleges system designed for working adults.</span>
    </div>

    <div class="homepage-entry">
      <IMG alt="Minerva logo" class="small-icon invert-conditionally" width="64" height="64" SRC="https://www.aribadernatal.com/cdn-cgi/image/format=auto/img/minerva_logo_large.png" align="right"> 
      Before this, I served as <B><A HREF="/projects/Minerva/">Chief Learning Scientist at Minerva Project</A></B>. I joined Minerva as Employee #1 in 2012, and spent 7 years creating new tools to support learning and teaching, including Minerva's signature <a href="/projects/Minerva/#forum">Forum</a>, tools for <a href="/projects/Minerva/#formative-feedback">formative assessment</a>, and a connected suite of <a href="/projects/Minerva/#curriculum-design">authoring tools</a>.
    </div>

<!--
    <div class="homepage-entry">
      <IMG alt="Grockit logo" class="small-icon invert-conditionally" SRC="https://www.aribadernatal.com/cdn-cgi/image/format=auto/common/grockit_logo_bw.png" align="right"> 
      Prior to Minerva, I was <b><A HREF="/projects/Grockit/">Chief Learning Architect at Grockit</A></b>, where I helped develop the company's core social learning and assessment technologies, designed a system for educational data analysis and learning analytics, and led all research initiatives. In 2011, I developed <A HREF="/projects/GrockitAnswers/">Grockit Answers</A> to enable productive peer-to-peer learning around educational videos. 
    </div>
-->

    <div class="homepage-entry">
      <IMG alt="Sketchpad logo" class="small-icon invert-conditionally" width="64" height="64" SRC="https://www.aribadernatal.com/cdn-cgi/image/format=auto/common/sketchpad_128x128.png" align="right"> 
        Back in 2010, I built <B><A HREF="/projects/Sketchpad/">Studio Sketchpad</A></B>, a place for creative coders to collaboratively create interactive animations in Processing (and later <a href="https://p5js.org/" target="_blank">P5.js</a>.) It has been used by 100+ universities, high schools, and coding workshops. Notably, Sketchpad has been online and offered at no cost for over 15 years.
    </div>


    <div class="homepage-entry">
      <strong>tl;dr - Ari does <a href="/learning-engineering/">"learning engineering."</a></strong>
    </div>
  </div>


  <div id="feed-control-container" class="span_4 col loaded">
    <div id="feed-control">
      <div class="favelog-header">
        <a href="https://favorites.aribadernatal.com">Recently liked:</a>
      </div>
      <ul> 
        
          

          

          <li class='favelog-link bookmark'>
            <a 
              href='https://favorites.aribadernatal.com/pocket-favorites/2026/04/home-strandbeest-2/' 
              title='Link saved: https://www.strandbeest.com/ Home &#8211; Strandbeest Theo Jansen is engaged in creating new forms of life: the so called strandbeests. Skeletons made from yellow plastic tube (Dutch electricity ipe) are able to walk and get their energy from the wind. They have evolved since their inception in 1990 and have been divided into 12 periods [&hellip;]' 
              data-tippy-content='<h3>Home &#8211; Strandbeest</h3><blockquote><p>Link saved: https://www.strandbeest.com/ Home &#8211; Strandbeest Theo Jansen is engaged in creating new forms of life: the so called strandbeests. Skeletons made from yellow plastic tube (Dutch electricity ipe) are able to walk and get their energy from the wind. They have evolved since their inception in 1990 and have been divided into 12 periods [&hellip;]</p></blockquote>' 
              data-tippy-title='Home &#8211; Strandbeest'
              target='_blank' 
              rel='noopener'
            >Web: Home &#8211; Strandbeest</a>
          </li>
        
          

          

          <li class='favelog-link bookmark'>
            <a 
              href='https://favorites.aribadernatal.com/pocket-favorites/2026/04/home-strandbeest/' 
              title='Link saved: https://www.strandbeest.com/ Home &#8211; Strandbeest Theo Jansen is engaged in creating new forms of life: the so called strandbeests. Skeletons made from yellow plastic tube (Dutch electricity ipe) are able to walk and get their energy from the wind. They have evolved since their inception in 1990 and have been divided into 12 periods [&hellip;]' 
              data-tippy-content='<h3>Home &#8211; Strandbeest</h3><blockquote><p>Link saved: https://www.strandbeest.com/ Home &#8211; Strandbeest Theo Jansen is engaged in creating new forms of life: the so called strandbeests. Skeletons made from yellow plastic tube (Dutch electricity ipe) are able to walk and get their energy from the wind. They have evolved since their inception in 1990 and have been divided into 12 periods [&hellip;]</p></blockquote>' 
              data-tippy-title='Home &#8211; Strandbeest'
              target='_blank' 
              rel='noopener'
            >Web: Home &#8211; Strandbeest</a>
          </li>
        
          

          

          <li class='favelog-link bookmark'>
            <a 
              href='https://favorites.aribadernatal.com/pocket-favorites/2026/04/building-toward-learner-owned-portable-proof-of-capability/' 
              title='Link saved: https://collegefutures.org/building-toward-learner-owned-portable-proof-of-capability/ building-toward-learner-owned-portable-proof-of-capability' 
              data-tippy-content='<h3>building-toward-learner-owned-portable-proof-of-capability</h3><blockquote><p>Link saved: https://collegefutures.org/building-toward-learner-owned-portable-proof-of-capability/ building-toward-learner-owned-portable-proof-of-capability</p></blockquote>' 
              data-tippy-title='building-toward-learner-owned-portable-proof-of-capability'
              target='_blank' 
              rel='noopener'
            >Web: building-toward-learner-owned-portable-proof-of-capability</a>
          </li>
        
          

          

          <li class='favelog-link bookmark'>
            <a 
              href='https://favorites.aribadernatal.com/pocket-favorites/2026/04/llm-problems-observed-in-humans/' 
              title='Link saved: https://embd.cc/llm-problems-observed-in-humans LLM problems observed in humans >' 
              data-tippy-content='<h3>LLM problems observed in humans</h3><blockquote><p>Link saved: https://embd.cc/llm-problems-observed-in-humans LLM problems observed in humans ></p></blockquote>' 
              data-tippy-title='LLM problems observed in humans'
              target='_blank' 
              rel='noopener'
            >Web: LLM problems observed in humans</a>
          </li>
        
          

          

          <li class='favelog-link bookmark'>
            <a 
              href='https://favorites.aribadernatal.com/pocket-favorites/2026/04/the-next-two-years-of-software-engineering-2/' 
              title='Link saved: https://addyosmani.com/ The Next Two Years of Software Engineering Exploring five critical questions shaping software engineering through 2026, with contrasting scenarios for each. These lenses help prepare for the evolving…' 
              data-tippy-content='<h3>The Next Two Years of Software Engineering</h3><blockquote><p>Link saved: https://addyosmani.com/ The Next Two Years of Software Engineering Exploring five critical questions shaping software engineering through 2026, with contrasting scenarios for each. These lenses help prepare for the evolving…</p></blockquote>' 
              data-tippy-title='The Next Two Years of Software Engineering'
              target='_blank' 
              rel='noopener'
            >Web: The Next Two Years of Software Engineering</a>
          </li>
        
          

          

          <li class='favelog-link bookmark'>
            <a 
              href='https://favorites.aribadernatal.com/pocket-favorites/2026/04/building-multi-agent-systems-part-3/' 
              title='Link saved: https://blog.sshh.io/p/building-multi-agent-systems-part-c0c Building Multi-Agent Systems (Part 3) Updated methods for scaling scripting-based agents to handle complex problems reliably.' 
              data-tippy-content='<h3>Building Multi-Agent Systems (Part 3)</h3><blockquote><p>Link saved: https://blog.sshh.io/p/building-multi-agent-systems-part-c0c Building Multi-Agent Systems (Part 3) Updated methods for scaling scripting-based agents to handle complex problems reliably.</p></blockquote>' 
              data-tippy-title='Building Multi-Agent Systems (Part 3)'
              target='_blank' 
              rel='noopener'
            >Web: Building Multi-Agent Systems (Part 3)</a>
          </li>
        
          

          

          <li class='favelog-link bookmark'>
            <a 
              href='https://favorites.aribadernatal.com/pocket-favorites/2026/04/a-sift-rebuild-in-progress/' 
              title='Link saved: https://mikecaulfield.substack.com/p/a-sift-rebuild-in-progress A SIFT Rebuild (in progress) It’s probably too important to keep my mouth shut until it is done' 
              data-tippy-content='<h3>A SIFT Rebuild (in progress)</h3><blockquote><p>Link saved: https://mikecaulfield.substack.com/p/a-sift-rebuild-in-progress A SIFT Rebuild (in progress) It’s probably too important to keep my mouth shut until it is done</p></blockquote>' 
              data-tippy-title='A SIFT Rebuild (in progress)'
              target='_blank' 
              rel='noopener'
            >Web: A SIFT Rebuild (in progress)</a>
          </li>
        
          

          

          <li class='favelog-link bookmark'>
            <a 
              href='https://favorites.aribadernatal.com/pocket-favorites/2026/04/code-wiki/' 
              title='Link saved: https://codewiki.google/ Code Wiki Code Wiki provides automatically generated, up-to-date documentation for your code. Stop wasting time on manual docs and explore codebase insights, API references, and architecture overviews instantly.' 
              data-tippy-content='<h3>Code Wiki</h3><blockquote><p>Link saved: https://codewiki.google/ Code Wiki Code Wiki provides automatically generated, up-to-date documentation for your code. Stop wasting time on manual docs and explore codebase insights, API references, and architecture overviews instantly.</p></blockquote>' 
              data-tippy-title='Code Wiki'
              target='_blank' 
              rel='noopener'
            >Web: Code Wiki</a>
          </li>
        
          

          

          <li class='favelog-link bookmark'>
            <a 
              href='https://favorites.aribadernatal.com/pocket-favorites/2026/03/what-we-wish-we-knew-about-building-ai-agents/' 
              title='Link saved: https://newsletter.posthog.com/p/what-we-wish-we-knew-before-building What we wish we knew about building AI agents Lessons learned from two years of building AI agents at PostHog' 
              data-tippy-content='<h3>What we wish we knew about building AI agents</h3><blockquote><p>Link saved: https://newsletter.posthog.com/p/what-we-wish-we-knew-before-building What we wish we knew about building AI agents Lessons learned from two years of building AI agents at PostHog</p></blockquote>' 
              data-tippy-title='What we wish we knew about building AI agents'
              target='_blank' 
              rel='noopener'
            >Web: What we wish we knew about building AI agents</a>
          </li>
        
          

          

          <li class='favelog-link github'>
            <a 
              href='https://favorites.aribadernatal.com/github-favorites/2026/03/aribn-starred-garrytan-gstack/' 
              title='Starred on Github: https://github.com/garrytan/gstack GitHub &#8211; garrytan/gstack: Use Garry Tan’s exact Claude Code setup: 6 opinionated tools that serve as CEO, Eng Manager, Release Manager and QA Engineer Use Garry Tan’s exact Claude Code setup: 6 opinionated tools that serve as CEO, Eng Manager, Release Manager and QA Engineer &#8211; garrytan/gstack' 
              data-tippy-content='<h3>aribn starred garrytan/gstack</h3><blockquote><p>Starred on Github: https://github.com/garrytan/gstack GitHub &#8211; garrytan/gstack: Use Garry Tan’s exact Claude Code setup: 6 opinionated tools that serve as CEO, Eng Manager, Release Manager and QA Engineer Use Garry Tan’s exact Claude Code setup: 6 opinionated tools that serve as CEO, Eng Manager, Release Manager and QA Engineer &#8211; garrytan/gstack</p></blockquote>' 
              data-tippy-title='aribn starred garrytan/gstack'
              target='_blank' 
              rel='noopener'
            >Repo: garrytan/gstack</a>
          </li>
        
          

          

          <li class='favelog-link github'>
            <a 
              href='https://favorites.aribadernatal.com/github-favorites/2026/03/aribn-starred-everyinc-proof-sdk/' 
              title='Starred on Github: https://github.com/EveryInc/proof-sdk GitHub &#8211; EveryInc/proof-sdk: Proof SDK: open-source collaborative editor, provenance model, and agent HTTP bridge Proof SDK: open-source collaborative editor, provenance model, and agent HTTP bridge &#8211; EveryInc/proof-sdk' 
              data-tippy-content='<h3>aribn starred EveryInc/proof-sdk</h3><blockquote><p>Starred on Github: https://github.com/EveryInc/proof-sdk GitHub &#8211; EveryInc/proof-sdk: Proof SDK: open-source collaborative editor, provenance model, and agent HTTP bridge Proof SDK: open-source collaborative editor, provenance model, and agent HTTP bridge &#8211; EveryInc/proof-sdk</p></blockquote>' 
              data-tippy-title='aribn starred EveryInc/proof-sdk'
              target='_blank' 
              rel='noopener'
            >Repo: EveryInc/proof-sdk</a>
          </li>
        
          

          

          <li class='favelog-link github'>
            <a 
              href='https://favorites.aribadernatal.com/github-favorites/2026/03/aribn-starred-googleworkspace-cli/' 
              title='Starred on Github: https://github.com/googleworkspace/cli GitHub &#8211; googleworkspace/cli: Google Workspace CLI — one command-line tool for Drive, Gmail, Calendar, Sheets, Docs, Chat, Admin, and more. Dynamically built from Google Discovery Service. Includes AI agent skills. Google Workspace CLI — one command-line tool for Drive, Gmail, Calendar, Sheets, Docs, Chat, Admin, and more. Dynamically built from Google [&hellip;]' 
              data-tippy-content='<h3>aribn starred googleworkspace/cli</h3><blockquote><p>Starred on Github: https://github.com/googleworkspace/cli GitHub &#8211; googleworkspace/cli: Google Workspace CLI — one command-line tool for Drive, Gmail, Calendar, Sheets, Docs, Chat, Admin, and more. Dynamically built from Google Discovery Service. Includes AI agent skills. Google Workspace CLI — one command-line tool for Drive, Gmail, Calendar, Sheets, Docs, Chat, Admin, and more. Dynamically built from Google [&hellip;]</p></blockquote>' 
              data-tippy-title='aribn starred googleworkspace/cli'
              target='_blank' 
              rel='noopener'
            >Repo: googleworkspace/cli</a>
          </li>
         

        <li class='favelog-link bookmark'>
          <a href='https://favorites.aribadernatal.com' target='_blank' rel='noopener'>
            <span style="color: #000;">More:</span> <u>favorites.aribadernatal.com</u>
          </a>
        </li> 
      </ul> 
    </div>
  </div>   


</div>

&nbsp;<BR>

<div class="row">
  <div class="row-header"><a href="/projects/">16 Projects</A></div>
</div>
 


<div class="row" id="projects-section">
  
    
     
      <div class="span_4 col featured-block">
        <div class="featured-image-wrapper">
          <a href="/projects/Sparkwise/">
            <img 
              class='featured-image' 
              alt='Sparkwise' 
              src='https://www.aribadernatal.com/cdn-cgi/image/format=auto/projects/Sparkwise/featured.jpg' 
              loading='lazy'
            />
          </a>
        </div>
        <div class="featured-label">
          <div class="featured-title">
            <a href="/projects/Sparkwise/">Sparkwise</a>
          </div>
          <div class="featured-tagline">
            Automating live group learning
          </div>
          <div class="featured-secondary">
            2021-now
          </div>
        </div>
      </div>
     
      <div class="span_4 col featured-block">
        <div class="featured-image-wrapper">
          <a href="/projects/Sideways/">
            <img 
              class='featured-image' 
              alt='Sideways' 
              src='https://www.aribadernatal.com/cdn-cgi/image/format=auto/projects/Sideways/featured.jpg' 
              loading='lazy'
            />
          </a>
        </div>
        <div class="featured-label">
          <div class="featured-title">
            <a href="/projects/Sideways/">Sideways</a>
          </div>
          <div class="featured-tagline">
            Shift perspective. Unlock creativity.
          </div>
          <div class="featured-secondary">
            2025-2026
          </div>
        </div>
      </div>
     
      <div class="span_4 col featured-block">
        <div class="featured-image-wrapper">
          <a href="/projects/Calbright/">
            <img 
              class='featured-image' 
              alt='Calbright College' 
              src='https://www.aribadernatal.com/cdn-cgi/image/format=auto/projects/Calbright/featured.jpg' 
              loading='lazy'
            />
          </a>
        </div>
        <div class="featured-label">
          <div class="featured-title">
            <a href="/projects/Calbright/">Calbright College</a>
          </div>
          <div class="featured-tagline">
            Fast, focused, flexible
          </div>
          <div class="featured-secondary">
            2019-2021
          </div>
        </div>
      </div>
     
  
    
     
      <div class="span_4 col featured-block">
        <div class="featured-image-wrapper">
          <a href="/projects/Minerva/">
            <img 
              class='featured-image' 
              alt='Minerva Project' 
              src='https://www.aribadernatal.com/cdn-cgi/image/format=auto/projects/Minerva/featured.jpg' 
              loading='lazy'
            />
          </a>
        </div>
        <div class="featured-label">
          <div class="featured-title">
            <a href="/projects/Minerva/">Minerva Project</a>
          </div>
          <div class="featured-tagline">
            Nurturing critical wisdom for the sake of the world
          </div>
          <div class="featured-secondary">
            2012-2019
          </div>
        </div>
      </div>
     
      <div class="span_4 col featured-block">
        <div class="featured-image-wrapper">
          <a href="/projects/Sketchpad/">
            <img 
              class='featured-image' 
              alt='Studio Sketchpad' 
              src='https://www.aribadernatal.com/cdn-cgi/image/format=auto/projects/Sketchpad/featured.jpg' 
              loading='lazy'
            />
          </a>
        </div>
        <div class="featured-label">
          <div class="featured-title">
            <a href="/projects/Sketchpad/">Studio Sketchpad</a>
          </div>
          <div class="featured-tagline">
            Collaborative coding for visual thinkers
          </div>
          <div class="featured-secondary">
            2010-2015
          </div>
        </div>
      </div>
     
      <div class="span_4 col featured-block">
        <div class="featured-image-wrapper">
          <a href="/projects/Favelog/">
            <img 
              class='featured-image' 
              alt='Favelog' 
              src='https://www.aribadernatal.com/cdn-cgi/image/format=auto/projects/Favelog/featured.jpg' 
              loading='lazy'
            />
          </a>
        </div>
        <div class="featured-label">
          <div class="featured-title">
            <a href="/projects/Favelog/">Favelog</a>
          </div>
          <div class="featured-tagline">
            A central collection of web favorites
          </div>
          <div class="featured-secondary">
            2015
          </div>
        </div>
      </div>
     
  
    
     
      <div class="span_4 col featured-block">
        <div class="featured-image-wrapper">
          <a href="/projects/Sketchcasting/">
            <img 
              class='featured-image' 
              alt='Sketchcasting' 
              src='https://www.aribadernatal.com/cdn-cgi/image/format=auto/projects/Sketchcasting/featured.jpg' 
              loading='lazy'
            />
          </a>
        </div>
        <div class="featured-label">
          <div class="featured-title">
            <a href="/projects/Sketchcasting/">Sketchcasting</a>
          </div>
          <div class="featured-tagline">
            Pixel-free narrated code screencasts
          </div>
          <div class="featured-secondary">
            2012
          </div>
        </div>
      </div>
     
      <div class="span_4 col featured-block">
        <div class="featured-image-wrapper">
          <a href="/projects/GrockitAnswers/">
            <img 
              class='featured-image' 
              alt='Grockit Answers' 
              src='https://www.aribadernatal.com/cdn-cgi/image/format=auto/projects/GrockitAnswers/featured.jpg' 
              loading='lazy'
            />
          </a>
        </div>
        <div class="featured-label">
          <div class="featured-title">
            <a href="/projects/GrockitAnswers/">Grockit Answers</a>
          </div>
          <div class="featured-tagline">
            Q&A discussions for educational videos
          </div>
          <div class="featured-secondary">
            2011-2012
          </div>
        </div>
      </div>
     
      <div class="span_4 col featured-block">
        <div class="featured-image-wrapper">
          <a href="/projects/Grockit/">
            <img 
              class='featured-image' 
              alt='Grockit' 
              src='https://www.aribadernatal.com/cdn-cgi/image/format=auto/projects/Grockit/featured.jpg' 
              loading='lazy'
            />
          </a>
        </div>
        <div class="featured-label">
          <div class="featured-title">
            <a href="/projects/Grockit/">Grockit</a>
          </div>
          <div class="featured-tagline">
            Social Learning meets Adaptive Learning
          </div>
          <div class="featured-secondary">
            2008-2012
          </div>
        </div>
      </div>
     
  
</div>


<div class="row-header"><a href="/blog/">118 Posts</A></div>

<div class="row" id="posts-section">

  
  

  

  
    <div class="span_4 col featured-block">
      <div class="featured-image-wrapper">
        <a href="/2025/04/03/sparkwise-completes-second-annual-soc-2-type-ii-audit/">
          
            <img 
              class='featured-image'
              alt='Sparkwise Completes Second Annual SOC 2 Type II Audit' 
              src='https://www.aribadernatal.com/cdn-cgi/image/format=auto/images/2024/03/sparkwise-soc2.jpg' 
              loading='lazy'
            />
          
        </a>
      </div>
      <div class="featured-label">
        <div class="featured-title">
          <a href="/2025/04/03/sparkwise-completes-second-annual-soc-2-type-ii-audit/">Sparkwise Completes Second Annual SOC 2 Type II Audit</a>
        </div>
        <div class="featured-secondary">
          April 2025
        </div>
      </div>
    </div>
  
    <div class="span_4 col featured-block">
      <div class="featured-image-wrapper">
        <a href="/2024/10/15/introducing-program-builder/">
          
            <img 
              class='featured-image'
              alt='Introducing the Program Builder: Design your custom learning journey' 
              src='https://www.aribadernatal.com/cdn-cgi/image/format=auto/images/2024/10/program-builder-1080.jpg' 
              loading='lazy'
            />
          
        </a>
      </div>
      <div class="featured-label">
        <div class="featured-title">
          <a href="/2024/10/15/introducing-program-builder/">Introducing the Program Builder: Design your custom learning journey</a>
        </div>
        <div class="featured-secondary">
          October 2024
        </div>
      </div>
    </div>
  
    <div class="span_4 col featured-block">
      <div class="featured-image-wrapper">
        <a href="/2024/09/30/product-updates-september-2024/">
          
            <img 
              class='featured-image'
              alt='Product Updates: September 2024' 
              src='https://www.aribadernatal.com/cdn-cgi/image/format=auto/images/2024/09/website-thumbnail.png' 
              loading='lazy'
            />
          
        </a>
      </div>
      <div class="featured-label">
        <div class="featured-title">
          <a href="/2024/09/30/product-updates-september-2024/">Product Updates: September 2024</a>
        </div>
        <div class="featured-secondary">
          September 2024
        </div>
      </div>
    </div>
  
</div>

<!-- 
<div class="row-header"><a href="/blog/">3 Blogs</A></div>

<div class="row">
  <div class="span_4 col featured-block">
    <div class="featured-image-wrapper">
      <a href="https://favorites.aribadernatal.com">
        <img 
          alt="Favelog" 
          class='featured-image'
          src="https://www.aribadernatal.com/cdn-cgi/image/format=auto/projects/Favelog/featured.jpg" 
          loading='lazy'
        />
      </a>
    </div>
    <div class="featured-label">
      <div class="featured-title">
        <a href="https://favorites.aribadernatal.com">Ari's Favelog</A>
      </div>
      <div class="featured-secondary">
        favorites.aribadernatal.com
      </div>
    </div>
  </div>

  <div class="span_4 col featured-block">
    <div class="featured-image-wrapper">
      <a href="https://blog.sketchpad.cc">
        <img 
          class='featured-image'
          alt="Sketchpad blog" 
          src="https://www.aribadernatal.com/cdn-cgi/image/format=auto/images/sketchpad_blog_featured.jpg" 
          loading='lazy'
        />
      </a>
    </div>
    <div class="featured-label">
      <div class="featured-title">
        <a href="https://blog.sketchpad.cc">Sketchpad Blog</A>
      </div>
      <div class="featured-secondary">
        blog.sketchpad.cc
      </div>
    </div>
  </div>

  <div class="span_4 col featured-block">
    <div class="featured-image-wrapper">
      <a href="https://snapshots.aribadernatal.com">
        <img 
          alt="Snapshots" 
          class='featured-image'
          src="https://www.aribadernatal.com/cdn-cgi/image/format=auto/images/snapshots_blog_featured.jpg" 
          loading='lazy'
        />
      </a>
    </div>
    <div class="featured-label">
      <div class="featured-title">
        <a href="https://snapshots.aribadernatal.com">Snapshots</A>
      </div>
      <div class="featured-secondary">
        snapshots.aribadernatal.com
      </div>
    </div>
  </div>
</div>
 -->

<div class="row-header"><a href="/publications/">18 Publications</A></div>


<div class="row" id="publications-section">
  
    
     
      
        <div class="span_4 col featured-block">
          <div class="featured-image-wrapper">
            <a href="/2020/10/21/cccapply-memo/">
              <img 
                class='featured-image'
                alt="CCCApply and OpenCCC Issues and Opportunities" 
                src="https://www.aribadernatal.com/cdn-cgi/image/format=auto/images/publications/cccapplymemo2020/featured.jpg" 
                loading='lazy'
              />
            </a>
          </div>
          <div class="featured-label">
            <div class="featured-title">
              <a href="/publications/#cccapplymemo2020">CCCApply and OpenCCC Issues and Opportunities</a>
            </div>
            <div class="featured-secondary">
              Bader-Natal, A.
            </div>
          </div>
        </div>
      
     
      
        <div class="span_4 col featured-block">
          <div class="featured-image-wrapper">
            <a href="/2017/10/06/3-building-lesson-plans/">
              <img 
                class='featured-image'
                alt="Building Lesson Plans for Twenty-First-Century Active Learning" 
                src="https://www.aribadernatal.com/cdn-cgi/image/format=auto/images/publications/minerva2017C/featured.jpg" 
                loading='lazy'
              />
            </a>
          </div>
          <div class="featured-label">
            <div class="featured-title">
              <a href="/publications/#minerva2017C">Building Lesson Plans for Twenty-First-Century Active Learning</a>
            </div>
            <div class="featured-secondary">
              Bader-Natal, A., Fost, J., and Genone, J.
            </div>
          </div>
        </div>
      
     
      
        <div class="span_4 col featured-block">
          <div class="featured-image-wrapper">
            <a href="/2017/10/06/2-active-learning-forum/">
              <img 
                class='featured-image'
                alt="The Active Learning Forum" 
                src="https://www.aribadernatal.com/cdn-cgi/image/format=auto/images/publications/minerva2017B/featured.jpg" 
                loading='lazy'
              />
            </a>
          </div>
          <div class="featured-label">
            <div class="featured-title">
              <a href="/publications/#minerva2017B">The Active Learning Forum</a>
            </div>
            <div class="featured-secondary">
              Katzman, J., Regan, M., and Bader-Natal, A.
            </div>
          </div>
        </div>
      
     
  
    
     
      
        <div class="span_4 col featured-block">
          <div class="featured-image-wrapper">
            <a href="/2017/10/06/1-assessing-student-learning/">
              <img 
                class='featured-image'
                alt="Assessing Student Learning" 
                src="https://www.aribadernatal.com/cdn-cgi/image/format=auto/images/publications/minerva2017A/featured.jpg" 
                loading='lazy'
              />
            </a>
          </div>
          <div class="featured-label">
            <div class="featured-title">
              <a href="/publications/#minerva2017A">Assessing Student Learning</a>
            </div>
            <div class="featured-secondary">
              Levitt, R., Bader-Natal, A., and Chandler, V.
            </div>
          </div>
        </div>
      
     
      
        <div class="span_4 col featured-block">
          <div class="featured-image-wrapper">
            <a href="/2011/07/01/nine-activities-within-a-self-directed-learning-environment/">
              <img 
                class='featured-image'
                alt="A Comparison of the Effects of Nine Activities within a Self-Directed Learning Environment on Skill-Grained Learning" 
                src="https://www.aribadernatal.com/cdn-cgi/image/format=auto/images/publications/aied2011/featured.jpg" 
                loading='lazy'
              />
            </a>
          </div>
          <div class="featured-label">
            <div class="featured-title">
              <a href="/publications/#aied2011">A Comparison of the Effects of Nine Activities within a Self-Directed Learning Environment on Skill-Grained Learning</a>
            </div>
            <div class="featured-secondary">
              Bader-Natal, A., Lotze, T., and Furr, D.
            </div>
          </div>
        </div>
      
     
      
        <div class="span_4 col featured-block">
          <div class="featured-image-wrapper">
            <a href="/2011/02/28/evolving-a-learning-analytics-platform/">
              <img 
                class='featured-image'
                alt="Evolving a learning analytics platform" 
                src="https://www.aribadernatal.com/cdn-cgi/image/format=auto/images/publications/lak2011/featured.jpg" 
                loading='lazy'
              />
            </a>
          </div>
          <div class="featured-label">
            <div class="featured-title">
              <a href="/publications/#lak2011">Evolving a learning analytics platform</a>
            </div>
            <div class="featured-secondary">
              Bader-Natal, A. and Lotze, T.
            </div>
          </div>
        </div>
      
     
  
    
     
      
     
      
     
      
     
  
</div>




<div class="row-header"><a href="/publications/">9 Patents</A></div>

<div class="row" id="patents-section">
   
    <div class="span_4 col featured-block">
      <!-- <div class="featured-image-wrapper">
        <a href="">
          <img 
            class="featured-image"
            alt="Techniques for computer-guided multi-device group learning" 
            src="https://www.aribadernatal.com/cdn-cgi/image/format=auto/images/patents/sparkwise-group-learning/featured.png" 
            loading='lazy'
          />
        </a>
      </div> -->
      <div class="featured-label">
        <div class="featured-title">
          
          <a href="/publications/">Techniques for computer-guided multi-device group learning</a>
          
        </div>
        <div class="featured-secondary">
          
            Patent pending
          
        </div>
      </div>
    </div>
   
    <div class="span_4 col featured-block">
      <!-- <div class="featured-image-wrapper">
        <a href="/2022/01/04/patent-course-builder/">
          <img 
            class="featured-image"
            alt="Apparatus, user interface, and method for authoring and managing lesson plans and course design for virtual conference learning environments" 
            src="https://www.aribadernatal.com/cdn-cgi/image/format=auto/images/patents/minerva-course-builder/featured.png" 
            loading='lazy'
          />
        </a>
      </div> -->
      <div class="featured-label">
        <div class="featured-title">
          
            <a href="/2022/01/04/patent-course-builder/">Apparatus, user interface, and method for authoring and managing lesson plans and course design for virtual conference learning environments</a>
          
        </div>
        <div class="featured-secondary">
          
            U.S. Patent 11,217,109
          
        </div>
      </div>
    </div>
   
    <div class="span_4 col featured-block">
      <!-- <div class="featured-image-wrapper">
        <a href="/2020/05/26/patent-virtual-conference-interactive-timeline/">
          <img 
            class="featured-image"
            alt="System and method for a virtual conference interactive timeline" 
            src="https://www.aribadernatal.com/cdn-cgi/image/format=auto/images/patents/minerva-timeline/featured.png" 
            loading='lazy'
          />
        </a>
      </div> -->
      <div class="featured-label">
        <div class="featured-title">
          
            <a href="/2020/05/26/patent-virtual-conference-interactive-timeline/">System and method for a virtual conference interactive timeline</a>
          
        </div>
        <div class="featured-secondary">
          
            U.S. Patent 10,666,696
          
        </div>
      </div>
    </div>
   
    <div class="span_4 col featured-block">
      <!-- <div class="featured-image-wrapper">
        <a href="/2020/01/21/patent-scalable-interactive-virtual-conferencing/">
          <img 
            class="featured-image"
            alt="System and method for scalable, interactive virtual conferencing" 
            src="https://www.aribadernatal.com/cdn-cgi/image/format=auto/images/patents/minerva-scalable-seminar/featured.png" 
            loading='lazy'
          />
        </a>
      </div> -->
      <div class="featured-label">
        <div class="featured-title">
          
            <a href="/2020/01/21/patent-scalable-interactive-virtual-conferencing/">System and method for scalable, interactive virtual conferencing</a>
          
        </div>
        <div class="featured-secondary">
          
            U.S. Patent 10,541,824
          
        </div>
      </div>
    </div>
   
    <div class="span_4 col featured-block">
      <!-- <div class="featured-image-wrapper">
        <a href="/2018/04/03/patent-participation-queue/">
          <img 
            class="featured-image"
            alt="Participation queue system and method for online video conferencing" 
            src="https://www.aribadernatal.com/cdn-cgi/image/format=auto/images/patents/minerva-participation-queue/featured.png" 
            loading='lazy'
          />
        </a>
      </div> -->
      <div class="featured-label">
        <div class="featured-title">
          
            <a href="/2018/04/03/patent-participation-queue/">Participation queue system and method for online video conferencing</a>
          
        </div>
        <div class="featured-secondary">
          
            U.S. Patent 9,935,987
          
        </div>
      </div>
    </div>
   
    <div class="span_4 col featured-block">
      <!-- <div class="featured-image-wrapper">
        <a href="/2017/06/06/patent-minerva-tracking-events/">
          <img 
            class="featured-image"
            alt="System and method for tracking events and providing feedback in a virtual conference" 
            src="https://www.aribadernatal.com/cdn-cgi/image/format=auto/images/patents/minerva-tracking-events/featured.png" 
            loading='lazy'
          />
        </a>
      </div> -->
      <div class="featured-label">
        <div class="featured-title">
          
            <a href="/2017/06/06/patent-minerva-tracking-events/">System and method for tracking events and providing feedback in a virtual conference</a>
          
        </div>
        <div class="featured-secondary">
          
            U.S. Patent 9,674,243
          
        </div>
      </div>
    </div>
   
    <div class="span_4 col featured-block">
      <!-- <div class="featured-image-wrapper">
        <a href="/2017/02/21/patent-minerva-decision-support/">
          <img 
            class="featured-image"
            alt="System and method for decision support in a virtual conference" 
            src="https://www.aribadernatal.com/cdn-cgi/image/format=auto/images/patents/minerva-decision-support/featured.png" 
            loading='lazy'
          />
        </a>
      </div> -->
      <div class="featured-label">
        <div class="featured-title">
          
            <a href="/2017/02/21/patent-minerva-decision-support/">System and method for decision support in a virtual conference</a>
          
        </div>
        <div class="featured-secondary">
          
            U.S. Patent 9,578,073
          
        </div>
      </div>
    </div>
   
    <div class="span_4 col featured-block">
      <!-- <div class="featured-image-wrapper">
        <a href="/2018/05/01/patent-minerva-breakout-groups/">
          <img 
            class="featured-image"
            alt="System and method for managing virtual conferencing breakout groups" 
            src="https://www.aribadernatal.com/cdn-cgi/image/format=auto/images/patents/minerva-breakout-groups/featured.png" 
            loading='lazy'
          />
        </a>
      </div> -->
      <div class="featured-label">
        <div class="featured-title">
          
            <a href="/2018/05/01/patent-minerva-breakout-groups/">System and method for managing virtual conferencing breakout groups</a>
          
        </div>
        <div class="featured-secondary">
          
            U.S. Patent 9,961,119
          
        </div>
      </div>
    </div>
   
    <div class="span_4 col featured-block">
      <!-- <div class="featured-image-wrapper">
        <a href="/2019/07/16/patent-minerva-attention-metadata/">
          <img 
            class="featured-image"
            alt="Registering and displaying visual attention metadata in a web video conferencing and seminar system" 
            src="https://www.aribadernatal.com/cdn-cgi/image/format=auto/images/patents/minerva-attention-metadata/featured.png" 
            loading='lazy'
          />
        </a>
      </div> -->
      <div class="featured-label">
        <div class="featured-title">
          
            <a href="/2019/07/16/patent-minerva-attention-metadata/">Registering and displaying visual attention metadata in a web video conferencing and seminar system</a>
          
        </div>
        <div class="featured-secondary">
          
            U.S. Patent 10,356,364
          
        </div>
      </div>
    </div>
   
</div>

<BR>

      </section>
    </div>
    <footer>
      <ul class="social">
        <li>
          <a href="https://www.linkedin.com/in/aribadernatal/" target="_blank" rel="noopener" rel="me" class="url" aria-label='LinkedIn'>
              <svg style="width:25px;height:25px;" xmlns="http://www.w3.org/2000/svg" aria-label='LinkedIn' viewBox="0 0 72 72"><g fill="none" fill-rule="evenodd"><path d="M8,72 L64,72 C68.418278,72 72,68.418278 72,64 L72,8 C72,3.581722 68.418278,-8.11624501e-16 64,0 L8,0 C3.581722,8.11624501e-16 -5.41083001e-16,3.581722 0,8 L0,64 C5.41083001e-16,68.418278 3.581722,72 8,72 Z" fill="currentColor"/><path d="M62,62 L51.315625,62 L51.315625,43.8021149 C51.315625,38.8127542 49.4197917,36.0245323 45.4707031,36.0245323 C41.1746094,36.0245323 38.9300781,38.9261103 38.9300781,43.8021149 L38.9300781,62 L28.6333333,62 L28.6333333,27.3333333 L38.9300781,27.3333333 L38.9300781,32.0029283 C38.9300781,32.0029283 42.0260417,26.2742151 49.3825521,26.2742151 C56.7356771,26.2742151 62,30.7644705 62,40.051212 L62,62 Z M16.349349,22.7940133 C12.8420573,22.7940133 10,19.9296567 10,16.3970067 C10,12.8643566 12.8420573,10 16.349349,10 C19.8566406,10 22.6970052,12.8643566 22.6970052,16.3970067 C22.6970052,19.9296567 19.8566406,22.7940133 16.349349,22.7940133 Z M11.0325521,62 L21.769401,62 L21.769401,27.3333333 L11.0325521,27.3333333 L11.0325521,62 Z" fill="#DADDE5"/></g></svg>
            </i>
          </a>
        </li>
        <!-- <li>
          <a href="https://bsky.app/profile/aribadernatal.com" target="_blank" rel="noopener" rel="me" class="url" aria-label='Bluesky'>
            <svg style="width:25px;height:25px;" xmlns="http://www.w3.org/2000/svg" aria-label='Bluesky' viewBox="0 0 568 501" fill="currentColor" ><path d="M123.121 33.6637C188.241 82.5526 258.281 181.681 284 234.873C309.719 181.681 379.759 82.5526 444.879 33.6637C491.866 -1.61183 568 -28.9064 568 57.9464C568 75.2916 558.055 203.659 552.222 224.501C531.947 296.954 458.067 315.434 392.347 304.249C507.222 323.8 536.444 388.56 473.333 453.32C353.473 576.312 301.061 422.461 287.631 383.039C285.169 375.812 284.017 372.431 284 375.306C283.983 372.431 282.831 375.812 280.369 383.039C266.939 422.461 214.527 576.312 94.6667 453.32C31.5556 388.56 60.7778 323.8 175.653 304.249C109.933 315.434 36.0535 296.954 15.7778 224.501C9.94525 203.659 0 75.2916 0 57.9464C0 -28.9064 76.1345 -1.61183 123.121 33.6637Z" fill-rule="evenodd" clip-rule="evenodd"/></svg>
          </a>
        </li> -->
        <li>
          <a href="/feed.xml" aria-label='RSS Feed'>
            <svg style="width:25px;height:25px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" aria-label='RSS feed' fill="currentColor" class="w-6 h-6"><path fill-rule="evenodd" d="M3.75 4.5a.75.75 0 01.75-.75h.75c8.284 0 15 6.716 15 15v.75a.75.75 0 01-.75.75h-.75a.75.75 0 01-.75-.75v-.75C18 11.708 12.292 6 5.25 6H4.5a.75.75 0 01-.75-.75V4.5zm0 6.75a.75.75 0 01.75-.75h.75a8.25 8.25 0 018.25 8.25v.75a.75.75 0 01-.75.75H12a.75.75 0 01-.75-.75v-.75a6 6 0 00-6-6H4.5a.75.75 0 01-.75-.75v-.75zm0 7.5a1.5 1.5 0 113 0 1.5 1.5 0 01-3 0z" clip-rule="evenodd" /></svg>
          </a>
        </li>
        <li>
          <a href="/search/" class="url" aria-label='Search'>
            <svg style="width:25px;height:25px;" xmlns="http://www.w3.org/2000/svg" aria-label='Search' viewBox="0 0 24 24" fill="currentColor" class="w-6 h-6"><path d="M8.25 10.875a2.625 2.625 0 115.25 0 2.625 2.625 0 01-5.25 0z" /><path fill-rule="evenodd" d="M12 2.25c-5.385 0-9.75 4.365-9.75 9.75s4.365 9.75 9.75 9.75 9.75-4.365 9.75-9.75S17.385 2.25 12 2.25zm-1.125 4.5a4.125 4.125 0 102.338 7.524l2.007 2.006a.75.75 0 101.06-1.06l-2.006-2.007a4.125 4.125 0 00-3.399-6.463z" clip-rule="evenodd" /></svg>
          </a>
        </li>
        <li>
          <a href="/contact/" aria-label='Contact'>
            <svg style="width:25px;height:25px;" aria-label='Contact' xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="w-6 h-6"><path d="M1.5 8.67v8.58a3 3 0 003 3h15a3 3 0 003-3V8.67l-8.928 5.493a3 3 0 01-3.144 0L1.5 8.67z" /><path d="M22.5 6.908V6.75a3 3 0 00-3-3h-15a3 3 0 00-3 3v.158l9.714 5.978a1.5 1.5 0 001.572 0L22.5 6.908z" /></svg>
          </a>
        </li>
      </ul>
      <div class="copyright">
        &copy; 2005-2026, Ari Bader-Natal
      </div>
    </footer>

    <script defer src="/public/js/tippy/popper.min.js"></script>
    <script defer src="/public/js/tippy/tippy-bundle.umd.min.js" onload="loadTippy()"></script>
    <script>
      function loadTippy() {
        tippy('a[data-tippy-content]', {
          allowHTML: true,
          theme: 'light-border',
          placement: 'left',
          content(reference) {
            reference.removeAttribute('title');
            return reference.getAttribute('data-tippy-content');
          },
        });
      }
    </script>

    <script>
      // Check for saved user preference or system preference on load of the website
      const darkModeToggle = document.querySelector('#dark-mode-toggle');
      const prefersDarkScheme = window.matchMedia('(prefers-color-scheme: dark)');

      // Load theme based on saved preference or system preference
      function loadTheme() {
        const savedTheme = localStorage.getItem('theme');
        if (savedTheme) {
          // Use saved preference if it exists
          document.body.classList.add(`${savedTheme}-mode`);
        } else {
          // Otherwise use system preference
          const theme = prefersDarkScheme.matches ? 'dark' : 'light';
          document.body.classList.add(`${theme}-mode`);
          localStorage.setItem('theme', theme);
        }
      }

      // Toggle between light and dark mode
      function toggleTheme() {
        if (document.body.classList.contains('dark-mode')) {
          document.body.classList.remove('dark-mode');
          document.body.classList.add('light-mode');
          localStorage.setItem('theme', 'light');
        } else {
          document.body.classList.remove('light-mode');
          document.body.classList.add('dark-mode');
          localStorage.setItem('theme', 'dark');
        }
      }

      // Listen for system preference changes
      prefersDarkScheme.addEventListener('change', (e) => {
        // Only update if there's no saved preference
        if (!localStorage.getItem('theme')) {
          const theme = e.matches ? 'dark' : 'light';
          document.body.classList.remove('light-mode', 'dark-mode');
          document.body.classList.add(`${theme}-mode`);
          localStorage.setItem('theme', theme);
        }
      });
      
      document.addEventListener('touchstart', function() {
        document.body.classList.add('no-hover');

        // Force a repaint by reading and writing to the DOM
        void document.body.offsetHeight;

        setTimeout(() => document.body.classList.remove('no-hover'), 300);
      });

      // Initial load
      document.addEventListener('DOMContentLoaded', loadTheme);

      // Add click event listener to toggle button
      document.getElementById('dark-mode-toggle').addEventListener('click', function(e) {
        e.preventDefault();
        toggleTheme();
      });

      function clearHoverState() {
        document.body.classList.add('no-hover');
        void document.body.offsetHeight; // Force a repaint
        setTimeout(() => document.body.classList.remove('no-hover'), 300);
      }

      document.addEventListener('touchstart', clearHoverState);
      document.addEventListener('touchend', clearHoverState);

      /* Sticky header scroll behavior disabled for testing
      document.addEventListener('DOMContentLoaded', function() {
        const header = document.querySelector('header.top');
        const scrollThreshold = 50;
        const bufferZone = 10; // Prevents rapid toggling
        let lastScrollY = window.scrollY;
        let ticking = false;
        let timeoutId = null;

        function debounce(func, wait) {
          return function() {
            clearTimeout(timeoutId);
            timeoutId = setTimeout(() => func(), wait);
          }
        }

        function updateHeaderClass() {
          const currentScrollY = window.scrollY;

          // Add buffer zone to prevent flickering
          if (currentScrollY > (scrollThreshold + bufferZone)) {
            header.classList.add('scrolled');
          } else if (currentScrollY < (scrollThreshold - bufferZone)) {
            header.classList.remove('scrolled');
          }

          lastScrollY = currentScrollY;
          ticking = false;
        }

        function handleScroll() {
          if (!ticking) {
            window.requestAnimationFrame(() => {
              debounce(updateHeaderClass, 10)();
              ticking = true;
            });
          }
        }

        window.addEventListener('scroll', handleScroll, { passive: true });
      });
      */
    </script>
  </body>
</html> 
