:root{--bg-primary: hsl(20, 30%, 98%);--bg-secondary: hsl(20, 30%, 95%);--text-primary: #222222;--text-secondary: #404040;--text-muted: #808080;--border-light: #808080;--border-dark: #404040;--hover-bg: #2f2f2f;--hover-text: #ffffff;--nav-bg: var(--bg-primary);--nav-border: var(--border-light);--nav-border-accent: var(--border-dark);--nav-text: var(--text-primary);--nav-hover-bg: var(--hover-bg);--nav-hover-text: var(--hover-text);--form-bg: #ffffff;--form-border: #dddddd;--form-border-focus: #666666;--form-text: var(--text-primary);--portfolio-border: #cccccc;--portfolio-overlay: rgba(0, 0, 0, .7);--tag-bg: #F8FCFD;--tag-border: #a1a1a1;--tag-text: var(--text-primary)}html.dark{--bg-primary: #170b1c;--bg-secondary: #2c1338;--text-primary: #ffffff;--text-secondary: #e5c8f6;--text-muted: #b8a1c9;--border-light: #5a2a73;--border-dark: #7d4094;--hover-bg: #e5c8f6;--hover-text: #592556;--nav-bg: var(--bg-secondary);--nav-border: var(--border-light);--nav-border-accent: var(--border-light);--nav-text: var(--text-primary);--nav-hover-bg: var(--hover-bg);--nav-hover-text: var(--hover-text);--form-bg: var(--bg-secondary);--form-border: var(--border-light);--form-border-focus: var(--border-dark);--form-text: var(--text-primary);--portfolio-border: var(--border-light);--portfolio-overlay: rgba(0, 0, 0, .8);--tag-bg: var(--bg-secondary);--tag-border: var(--border-light);--tag-text: var(--text-primary)}header{top:.5em;position:relative}html{background-color:var(--bg-primary);font-family:Atkinson Hyperlegible Next Variable,sans-serif;color:var(--text-primary)}@font-face{font-family:Atkinson Hyperlegible Next Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(https://cdn.jsdelivr.net/fontsource/fonts/atkinson-hyperlegible-next:vf@latest/latin-wght-normal.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(https://cdn.jsdelivr.net/fontsource/fonts/geist-mono:vf@latest/latin-wght-normal.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}body{margin:0 auto;width:100%;max-width:60em;padding:1rem;line-height:1.5;color:var(--text-primary);border:1px solid var(--portfolio-border)}*{box-sizing:border-box}h1{margin:1rem 0;font-size:1.75rem;padding-top:.25rem;border-bottom:3px solid var(--border-dark);padding-bottom:.5rem;color:var(--text-primary)}h2{border-bottom:1px dashed var(--border-light);padding-bottom:.5rem;color:var(--text-primary)}button{padding:.5rem;margin-bottom:1em;width:100%;background:var(--bg-primary);border:1px solid var(--border-light);border-bottom:3px solid var(--border-dark);flex-direction:column;align-items:flex-start;font:inherit;color:var(--text-primary);cursor:pointer}button:hover,button:focus{background-color:var(--hover-bg);color:var(--hover-text)}body:before{content:"";position:fixed;top:-1em;left:0;right:0;height:1.25em;background:linear-gradient(to right,pink,red 10%,orange 22%,#ff0 36%,green 53%,#00f 68%,indigo 82%,violet 100%,#fff0);opacity:1;z-index:2;pointer-events:none}header nav{padding:.5rem;background:var(--nav-bg);border:1px solid var(--nav-border);border-bottom:3px solid var(--nav-border-accent);display:flex;flex-direction:column;align-items:flex-start}.nav-top-row{display:flex;align-items:center;width:100%}.site-title{font-size:1.5rem;white-space:nowrap;margin:0;color:var(--nav-text)}.nav-links{display:grid;grid-template-columns:repeat(2,1fr);gap:.5rem;width:100%;max-height:unset;overflow:visible;transition:none;scrollbar-width:none;padding-top:.5rem}.nav-links::-webkit-scrollbar{display:none}.nav-links a{display:block;text-align:center;text-decoration:none;font-size:1rem;font-weight:700;text-transform:uppercase;border:1px solid var(--nav-border);padding:1px;color:var(--nav-text)}.nav-links a.active{border-top:3px solid var(--nav-border)}.nav-links a:hover,.nav-links a:focus{background-color:var(--nav-hover-bg);color:var(--nav-hover-text)}@media screen and (min-width: 769px){body{margin-top:1em;margin-bottom:1em}header{position:sticky;top:1em;z-index:1}header nav{flex-direction:row;justify-content:space-between;align-items:center;padding:.3em}.nav-top-row{display:contents}.site-title{margin:0 0 0 .25em}.nav-links{display:flex;max-height:unset;overflow:visible;width:auto;padding-top:0}.nav-links a{padding:5px 10px;margin:.25em;background-color:transparent}}.tile-container{display:grid;gap:1rem}.tile-item{border:1px solid var(--border-light);padding:.5rem;background-color:var(--bg-primary)}.tile-item:hover,.tile-item:focus{background-color:var(--hover-bg);color:var(--hover-text)}.tile-item a{text-decoration:none;color:inherit;display:block}@media screen and (min-width: 769px){.tile-container{grid-template-columns:repeat(auto-fill,minmax(350px,1fr))}}.portfolio-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(350px,1fr));gap:.5rem}.portfolio-item{position:relative;display:block;overflow:hidden;border:1px solid var(--portfolio-border);text-decoration:none;transition:transform .3s ease}.portfolio-thumbnail-container{position:relative;width:100%;height:0;padding-bottom:56.25%;overflow:hidden}.portfolio-thumbnail{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;transition:transform .3s ease}.portfolio-item:hover .portfolio-thumbnail{transform:scale(1.05)}.portfolio-title-overlay{position:absolute;bottom:0;left:0;right:0;background-color:var(--portfolio-overlay);color:#fff;padding:.5rem;opacity:0;transition:opacity .3s ease;text-align:center}.portfolio-item:hover .portfolio-title-overlay{opacity:1}.portfolio-title-overlay h3{margin:0;font-size:1em;color:#fff}.embedded-video-container{position:relative;width:100%;height:0;padding-bottom:56.25%}.embedded-video-container iframe{position:absolute;top:0;left:0;width:100%;height:100%}.contact-form{max-width:100%;margin:2rem 0}.contact-form button{width:100%}.form-group{margin-bottom:1.5rem}.form-group label{display:block;margin-bottom:.5rem;font-weight:500;color:var(--form-text)}.form-group input,.form-group textarea{width:100%;padding:.75rem;border:1px solid var(--form-border);background-color:var(--form-bg);color:var(--form-text);font-family:inherit;font-size:1rem;transition:border-color .3s,box-shadow .3s;box-sizing:border-box}@media (max-width: 600px){.form-group input,.form-group textarea{padding:.6rem;font-size:16px}}.form-group input:focus,.form-group textarea:focus{border-color:var(--form-border-focus);box-shadow:0 0 0 3px #0000001a;outline:none}.contact-form button{background-color:var(--text-secondary);color:var(--bg-primary);border:none;padding:.75rem 1.5rem;font-size:1rem;font-family:inherit;cursor:pointer}.contact-form button:hover{background-color:var(--hover-bg);color:var(--hover-text)}.contact-info{margin-bottom:2rem}.contact-info p{display:flex;align-items:center;margin-bottom:.75rem;color:var(--text-primary)}.contact-info .material-symbols-outlined{margin-right:.75rem}.contact-info a{color:var(--text-primary);border-bottom:1px solid transparent}.contact-info a:hover{border-bottom-color:var(--text-primary)}.about-intro{display:flex;flex-direction:column;align-items:center;margin-bottom:2rem}.about-intro img{order:-1;margin-bottom:1.5rem;max-width:200px}@media screen and (min-width: 512px){.about-intro{flex-direction:row;align-items:flex-start;gap:2rem}.about-intro p{flex:1;text-align:left;margin-bottom:0}.about-intro img{order:1;margin-bottom:0;margin-left:auto}}.tags{display:flex;flex-wrap:wrap}.tag{margin-right:.25em;border:dotted 1px var(--tag-border);padding:.25em .5em;background-color:var(--tag-bg)}.tag a{color:var(--tag-text);text-decoration:none}pre,code,kbd{font-family:Geist Mono Variable,monospace!important}pre{position:relative;padding:3.5em 1.5em 1em 1em!important;background-color:#282a36!important;overflow-x:auto!important;margin-block-end:1em!important}pre:before{content:attr(data-language);position:absolute;top:1em;left:1em;padding:.25em .5em;background-color:#6272a4;color:#f8f8f2;font-size:.8rem;font-weight:700}pre:not([data-language]):before{content:"TEXT"}code{font-size:.9rem!important;padding:.2rem .4rem!important;background-color:#44475a!important;color:#f8f8f2!important}pre code{padding:0!important;background-color:transparent!important;color:inherit!important;border-radius:0!important}
