@import "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Space+Grotesk:wght@500;600;700&display=swap";:root{--color-page-background:#fff;--color-text:#222;--color-text-muted:#444;--color-link:#111;--color-link-hover:#444;--color-border:#ddd;--color-card-background:transparent;--color-navbar-background:#fff;--color-control-background:#fff;--color-control-background-active:#2f2f2f;--color-control-border:#d0d0d0;--color-control-icon:#2f2f2f;--color-control-icon-active:#fff;--color-focus-outline:#111;--color-transparent:transparent;color:var(--color-text);background:var(--color-page-background);font-synthesis:none;text-rendering:optimizelegibility;font-family:system-ui,sans-serif;transition:background-color .25s,color .25s}[data-theme=dark]{--color-page-background:#1f2328;--color-text:#e6edf3;--color-text-muted:#a8b3bf;--color-link:#b6d4f2;--color-link-hover:#d8e9fa;--color-border:#3d444d;--color-card-background:#262c33;--color-navbar-background:#1f2328;--color-control-background:#262c33;--color-control-background-active:#e6edf3;--color-control-border:#57606a;--color-control-icon:#b8c2cc;--color-control-icon-active:#262c33;--color-focus-outline:#b6d4f2}*{box-sizing:border-box}body{margin:0;line-height:1.6}button,input,textarea{font:inherit}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid}}}@layer theme{:root,:host{--font-sans:"Inter", ui-sans-serif, system-ui, sans-serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-400:oklch(70.4% .191 22.216);--color-amber-300:oklch(87.9% .169 91.605);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-950:oklch(26.2% .051 172.552);--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:1.5;--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--animate-ping:ping 1s cubic-bezier(0, 0, .2, 1) infinite;--font-display:"Space Grotesk", sans-serif}}@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:0}.inset-2{inset:calc(var(--spacing) * 2)}.top-3{top:calc(var(--spacing) * 3)}.top-\[54\%\]{top:54%}.right-0{right:0}.right-3{right:calc(var(--spacing) * 3)}.bottom-28{bottom:calc(var(--spacing) * 28)}.left-0{left:0}.left-3{left:calc(var(--spacing) * 3)}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.mb-1{margin-bottom:var(--spacing)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.block{display:block}.flex{display:flex}.aspect-\[9\/14\]{aspect-ratio:9/14}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-8{height:calc(var(--spacing) * 8)}.h-full{height:100%}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-8{width:calc(var(--spacing) * 8)}.w-full{width:100%}.-translate-y-1\/2{--tw-translate-y:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-ping{animation:var(--animate-ping)}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:var(--spacing)}.gap-2{gap:calc(var(--spacing) * 2)}.overflow-hidden{overflow:hidden}.rounded-full{border-radius:3.40282e38px}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-emerald-400{border-color:var(--color-emerald-400)}.bg-\[\#3f65b3\]{background-color:#3f65b3}.bg-emerald-400{background-color:var(--color-emerald-400)}.bg-emerald-950{background-color:var(--color-emerald-950)}.fill-amber-300\/20{fill:#ffd23633}@supports (color:color-mix(in lab,red,red)){.fill-amber-300\/20{fill:color-mix(in oklab,var(--color-amber-300) 20%,transparent)}}.fill-emerald-950\/20{fill:#002c2233}@supports (color:color-mix(in lab,red,red)){.fill-emerald-950\/20{fill:color-mix(in oklab,var(--color-emerald-950) 20%,transparent)}}.px-6{padding-inline:calc(var(--spacing) * 6)}.text-center{text-align:center}.font-display{font-family:var(--font-display)}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.leading-none{--tw-leading:1;line-height:1}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-amber-300{color:var(--color-amber-300)}.text-emerald-300{color:var(--color-emerald-300)}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-500\/80{color:#00bb7fcc}@supports (color:color-mix(in lab,red,red)){.text-emerald-500\/80{color:color-mix(in oklab,var(--color-emerald-500) 80%,transparent)}}.text-emerald-600{color:var(--color-emerald-600)}.text-red-400{color:var(--color-red-400)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.select-none{-webkit-user-select:none;user-select:none}}html,body,#root{min-height:100%}body{margin:0}@keyframes pulse-ring{0%{opacity:.8;transform:scale(.9)}50%{opacity:.4;transform:scale(1.1)}to{opacity:0;transform:scale(1.3)}}.animate-pulse-ring{animation:2s cubic-bezier(.4,0,.6,1) infinite pulse-ring}@keyframes wiggle{0%,to{transform:rotate(-5deg)}50%{transform:rotate(5deg)}}.animate-wiggle{animation:1s ease-in-out infinite wiggle}.frog-demo-page{box-sizing:border-box;color:#111;text-align:center;background:#fff;place-items:center;min-height:100dvh;padding:clamp(3rem,8vw,7rem) 1.5rem;font-family:Inter,ui-sans-serif,system-ui,sans-serif;display:grid}.frog-demo-page h1{letter-spacing:-.055em;margin:0 0 .75rem;font-size:clamp(2.5rem,7vw,4.5rem);font-weight:600;line-height:1.02}.frog-demo-lede{color:#555;margin:0;font-size:1.05rem;line-height:1.7}@media (width<=480px){.frog-demo-page{padding:2.5rem 1.25rem 7rem}}.frog-game-widget{--frog-game-wood:#aa8c55;--frog-game-wood-light:#cfb879;--frog-game-wood-highlight:#e2cc92;--frog-game-wood-dark:#76582f;--frog-game-wood-deep:#49351f;--frog-game-ink:#2b1d10;--frog-game-bg:var(--frog-game-wood-dark);--frog-game-surface:var(--frog-game-wood);--frog-game-border:var(--frog-game-wood-deep);--frog-game-text:#fff7dc;--frog-game-muted:#ead8a5;--frog-game-accent:var(--frog-game-wood-highlight);--frog-game-edge:1.25rem;z-index:2147483000;bottom:var(--frog-game-edge);color:var(--frog-game-text);box-sizing:border-box;flex-direction:column;align-items:flex-end;gap:.75rem;font-family:Inter,ui-sans-serif,system-ui,sans-serif;display:flex;position:fixed}.frog-game-widget *,.frog-game-widget :before,.frog-game-widget :after{box-sizing:border-box}.frog-game-widget--bottom-right{right:var(--frog-game-edge)}.frog-game-widget--bottom-left{left:var(--frog-game-edge);align-items:flex-start}.frog-game-popup{box-sizing:content-box;width:min(360px,calc(100vw - 2 * var(--frog-game-edge) - 1.5rem),calc(64.2857dvh - 5.4643rem));aspect-ratio:9/14;border:4px solid var(--frog-game-border);background:var(--frog-game-wood);box-shadow:inset 0 0 0 3px var(--frog-game-wood-light),6px 6px 0 var(--frog-game-wood-deep);opacity:0;visibility:hidden;pointer-events:none;transform-origin:100% 100%;border-radius:3px;padding:.5rem;transition:opacity .12s steps(2,end),transform .12s steps(2,end),visibility .12s;overflow:hidden;transform:translateY(.5rem)scale(.98)}.frog-game-widget--bottom-left .frog-game-popup{transform-origin:0 100%}.frog-game-widget--compact .frog-game-popup{width:min(316px,calc(100vw - 2 * var(--frog-game-edge) - 1.5rem),calc(64.2857dvh - 5.4643rem))}.frog-game-popup--open{opacity:1;visibility:visible;pointer-events:auto;transform:none}.frog-game-panel-shell{color:var(--frog-game-text);background:var(--frog-game-bg);border-radius:0}.frog-game-launcher{cursor:pointer;color:#000;background:#fff;border:2px solid #000;border-radius:50%;width:3rem;height:3rem;padding:.45rem;transition:transform .12s,background-color .12s,box-shadow .12s;overflow:hidden;box-shadow:0 2px 10px #0003}.frog-game-launcher:hover{background:#f4f4f4;border-color:#000;transform:translateY(-1px);box-shadow:0 4px 14px #00000042}.frog-game-launcher:active{transform:translateY(0)scale(.96);box-shadow:0 1px 6px #0003}.frog-game-launcher:focus-visible{outline-offset:3px;outline:2px solid #000}.frog-game-launcher img{object-fit:contain;width:100%;height:100%;image-rendering:pixelated;display:block}.frog-game-heading{color:var(--frog-game-text);letter-spacing:.04em;font-size:.875rem;font-weight:600}.frog-game-subheading{color:var(--frog-game-muted);letter-spacing:.06em}.frog-game-console{box-shadow:none;background:0 0;border:0;border-radius:0;padding:0}.frog-game-screen{box-shadow:none;border:0;border-radius:0}.frog-game-ui-button{border:3px solid var(--frog-game-wood-deep);width:2rem;height:2rem;color:var(--frog-game-text);background:var(--frog-game-wood-dark);box-shadow:inset 0 0 0 1px var(--frog-game-wood-light),3px 3px #2b1d10bf;border-radius:2px;justify-content:center;align-items:center;transition:transform 70ms step-end,box-shadow 70ms step-end,background-color 70ms linear;display:flex}.frog-game-ui-button:hover{background:var(--frog-game-wood);border-color:var(--frog-game-wood-deep)}.frog-game-ui-button:active{box-shadow:inset 0 0 0 1px var(--frog-game-wood-dark),1px 1px #2b1d10bf;transform:translate(2px,2px)}.frog-game-github-icon{filter:invert()}.frog-game-score{border:3px solid var(--frog-game-wood-deep);background:var(--frog-game-wood-dark);min-height:2rem;box-shadow:inset 0 0 0 1px var(--frog-game-wood-light),3px 3px #2b1d10bf;font-variant-numeric:tabular-nums;border-radius:2px;align-items:center;gap:.35rem;padding:0 .625rem;display:flex;color:var(--frog-game-text)!important}.frog-game-score--current{border-color:var(--frog-game-wood-deep);background:var(--frog-game-wood-highlight);justify-content:center;min-width:2.75rem;color:var(--frog-game-ink)!important}.frog-game-tutorial{border:3px solid var(--frog-game-wood-deep);background:var(--frog-game-wood);max-width:13rem;box-shadow:inset 0 0 0 2px var(--frog-game-wood-light),4px 4px #2b1d10cc;color:var(--frog-game-ink);border-radius:2px;padding:.75rem 1rem}.frog-game-tutorial-wrap--exiting{animation:.22s ease-out forwards tutorial-panel-out}@keyframes tutorial-panel-out{0%{opacity:1}to{opacity:0}}.frog-game-tutorial h3,.frog-game-tutorial p{color:var(--frog-game-ink)!important}.frog-game-tutorial .rounded-full{border-radius:50%;background:#21170f!important;border-color:#21170f!important}.frog-game-dialog{border:4px solid var(--frog-game-wood-deep);background:var(--frog-game-wood);width:100%;max-width:17rem;box-shadow:inset 0 0 0 2px var(--frog-game-wood-light),5px 5px #2b1d10d9;color:var(--frog-game-ink);border-radius:2px;padding:1.25rem}.frog-game-dialog h3,.frog-game-dialog .text-emerald-400,.frog-game-dialog .text-emerald-600,.frog-game-dialog .text-white,.frog-game-dialog .text-amber-300{color:var(--frog-game-ink)!important}.frog-game-stat-list{border-block:3px solid var(--frog-game-wood-deep);padding:.75rem 0}.frog-game-primary{border:3px solid var(--frog-game-wood-deep);width:100%;color:var(--frog-game-ink);background:var(--frog-game-wood-highlight);box-shadow:3px 3px 0 var(--frog-game-wood-deep);letter-spacing:.06em;text-transform:uppercase;border-radius:2px;padding:.625rem 1rem;font-size:.75rem;font-weight:700;transition:transform 70ms step-end,box-shadow 70ms step-end,background-color 70ms linear}.frog-game-primary:hover{background:#f0dca3}.frog-game-primary:active{box-shadow:1px 1px 0 var(--frog-game-wood-deep);transform:translate(2px,2px)}.frog-game-interactive{-webkit-tap-highlight-color:transparent}.frog-game-canvas{image-rendering:pixelated}@media (width<=480px){.frog-game-widget{--frog-game-edge:.75rem}.frog-game-popup{width:min(360px,calc(100vw - 2 * var(--frog-game-edge) - 1.5rem),calc(64.2857dvh - 4.9821rem))}.frog-game-widget--compact .frog-game-popup{width:min(316px,calc(100vw - 2 * var(--frog-game-edge) - 1.5rem),calc(64.2857dvh - 4.9821rem))}}@media (prefers-reduced-motion:reduce){.frog-game-popup,.frog-game-launcher{transition:none}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}html{scroll-behavior:smooth}.navbar{z-index:10;background:var(--color-navbar-background);border-bottom:1px solid var(--color-border);transition:background-color .25s,border-color .25s;position:sticky;top:0}.navbar__content{justify-content:space-between;align-items:center;max-width:800px;margin:0 auto;padding:1rem 1.25rem;display:flex}.navbar__name{color:inherit;font-weight:600;text-decoration:none}.navbar ul{gap:1rem;margin:0;padding:0;list-style:none;display:flex}.navbar__actions{align-items:center;gap:1.25rem;display:flex}.theme-switch{flex:none;width:2.8em;height:1.4em;display:inline-block;position:relative}.theme-switch input{opacity:0;width:0;height:0}.theme-switch__slider{cursor:pointer;background-color:var(--color-control-background-active);box-shadow:inset 0 0 0 1px var(--color-control-border);border-radius:999px;transition:background-color .25s,box-shadow .25s;position:absolute;inset:0}.theme-switch__slider:before{background:var(--color-control-icon-active);content:"";border-radius:50%;width:.9em;height:.9em;transition:transform .35s cubic-bezier(.4,0,.2,1),background-color .25s;position:absolute;top:50%;left:.25em;transform:translateY(-50%)}.theme-switch__slider:after{background:var(--color-control-background-active);content:"";opacity:0;pointer-events:none;border-radius:50%;width:.72em;height:.72em;transition:transform .35s cubic-bezier(.4,0,.2,1),opacity .35s,background-color .25s;position:absolute;top:50%;left:.178em;transform:translateY(-50%)scale(.3)}.theme-switch input:checked+.theme-switch__slider{background-color:var(--color-control-background-active);box-shadow:none}.theme-switch input:checked+.theme-switch__slider:before{background:var(--color-control-icon-active);box-shadow:none;transform:translate(1.4em,-50%)}.theme-switch input:checked+.theme-switch__slider:after{opacity:1;transform:translate(1.4em,calc(-50% - .072em))scale(1)}.theme-switch input:focus-visible+.theme-switch__slider{outline:2px solid var(--color-focus-outline);outline-offset:3px}a{color:var(--color-link);transition:color .25s,transform .15s;display:inline-block}a:hover{color:var(--color-link-hover);transform:translateY(-1px)}main,footer{max-width:800px;margin:0 auto;padding-inline:1.25rem}.section{border-bottom:1px solid var(--color-border);min-height:50vh;padding-block:4rem;scroll-margin-top:1rem;transition:border-color .25s}.section h1,.section h2{margin-top:0}.section p{max-width:65ch}.projects-grid{grid-template-columns:repeat(2,minmax(0,1fr));align-items:stretch;gap:1.5rem;display:grid}.project-card{border:1px solid var(--color-border);background:var(--color-card-background);border-radius:.575rem;flex-direction:column;padding:1rem;transition:background-color .25s,border-color .25s;display:flex}.project-card__image{aspect-ratio:3/2;object-fit:cover;border-radius:.25rem;width:100%;margin-bottom:1rem;display:block}.project-card h3{margin-top:0}.project-card__links{align-items:center;gap:1rem;margin-top:auto;display:flex}.icon-link{align-items:center;gap:.35rem;display:inline-flex}.icon-link__icon{width:19px;height:19px;transition:filter .25s}[data-theme=dark] .icon-link__icon{filter:invert()}.links{flex-wrap:wrap;gap:1rem;margin:0;padding:0;list-style:none;display:flex}footer{padding-block:2rem;font-size:.9rem}@media (prefers-reduced-motion:reduce){:root,.navbar,.theme-switch__slider,.theme-switch__slider:before,.theme-switch__slider:after,a,.section,.project-card,.icon-link__icon{transition-duration:.01ms}}@media (width<=700px){.projects-grid{grid-template-columns:1fr}}@media (width<=520px){.navbar__content{flex-direction:column;align-items:flex-start;gap:.75rem}.navbar ul{gap:.75rem}.navbar__actions{justify-content:space-between;width:100%}}
