@import"https://fonts.googleapis.com/css2?family=Fragment+Mono:ital@0;1&display=swap";.astro-route-announcer{position:absolute;left:0;top:0;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden;white-space:nowrap;width:1px;height:1px}:root{--ink: oklch(.22 .01 90);--ink-soft: oklch(.22 .01 90 / .8);--paper: oklch(.985 .004 90);--dot: oklch(.78 .008 90);--window: oklch(.99 .003 90);--chrome: oklch(.18 .01 90);--border: oklch(.22 .01 90 / .85);--shadow: oklch(.2 .01 90);--font: "Fragment Mono", ui-monospace, "Courier New", monospace;--ease-window: cubic-bezier(.24, 1, .29, 1);--topbar-h: 2.6rem;--footer-h: 2.4rem}*{box-sizing:border-box}html,body{margin:0;min-height:100%;min-height:100dvh}html{font-size:clamp(10px,.55vw + 8.4px,12.5px)}body{font-family:var(--font);font-weight:400;font-size:1.3rem;line-height:1.2;letter-spacing:0;color:var(--ink);background-color:var(--paper);background-image:linear-gradient(45deg,var(--dot) 25%,transparent 25% 75%,var(--dot) 75%),linear-gradient(45deg,var(--dot) 25%,transparent 25% 75%,var(--dot) 75%);background-size:4px 4px;background-position:0 0,2px 2px;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}a:active{opacity:.7}button{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer}button:active{opacity:.7}img{max-width:100%;height:auto;display:block}h1,h2,p{margin:0;font-size:inherit;font-weight:400}.topbar{position:fixed;inset:0 0 auto;z-index:50;display:flex;align-items:center;justify-content:space-between;gap:1rem;height:var(--topbar-h);padding:0 .7rem 0 .45rem;background:var(--window);border-bottom:2px solid var(--ink);box-shadow:0 1px 0 var(--window)}.topbar a,.topbar time{pointer-events:auto}.topbar-left,.topbar-right{display:flex;align-items:center;gap:.85rem}.topbar-right{gap:.65rem;font-variant-numeric:tabular-nums}.apple-menu{display:grid;place-items:center;width:2.2rem;height:1.85rem;color:var(--ink)}.apple-menu:active,.app-menu:active{background:var(--ink);color:var(--paper)}.app-menu{padding:.08rem .28rem .02rem}.site-footer{position:fixed;inset:auto 0 0;z-index:50;display:flex;align-items:center;justify-content:flex-start;height:var(--footer-h);padding:.2rem .7rem .3rem;background:var(--window);border-top:2px solid var(--ink)}.desktop-icons{position:relative;z-index:1;min-height:100dvh;padding-top:var(--topbar-h);padding-bottom:var(--footer-h)}.stage{position:relative;z-index:20}.desk-icon{position:absolute;width:10.8rem;display:flex;flex-direction:column;align-items:center;gap:.2rem;cursor:grab;user-select:none;touch-action:none;z-index:2}.desk-icon:active{cursor:grabbing}.desk-icon.is-dragging{z-index:8}.desk-icon .glyph{width:4.8rem;height:auto;pointer-events:none;image-rendering:pixelated}.desk-icon .label{background:var(--window);padding:.08rem .35rem .04rem;text-align:center;line-height:1.15;font-size:1.15rem;white-space:nowrap}.desk-icon.is-selected .label,.desk-icon:active .label{background:var(--ink);color:var(--paper)}.overlay{position:fixed;inset:0;z-index:30;display:flex;justify-content:center;align-items:flex-start;padding:calc(var(--topbar-h) + 1.6rem) 1rem calc(var(--footer-h) + .6rem);overflow:auto;pointer-events:none;view-transition-name:none}.overlay.behind,.stage>.overlay:not(:last-child){z-index:18}.finder{pointer-events:auto;position:relative;width:min(var(--window-width, 34rem),calc(100vw - 1.6rem));background:var(--window);border:2px solid var(--ink);box-shadow:3px 3px 0 0 var(--ink);display:flex;flex-direction:column;max-height:calc(100dvh - var(--topbar-h) - var(--footer-h) - 2.2rem);view-transition-name:none}.overlay:not([data-astro-transition-persist]):last-child .finder{animation:overlay-in .12s steps(2,end) both}.finder-title{display:grid;grid-template-columns:2.4rem 1fr 2.4rem;align-items:center;min-height:2.05rem;padding:.12rem .16rem;color:var(--ink);background-color:var(--window);background-image:repeating-linear-gradient(to bottom,var(--ink) 0 1px,var(--window) 1px 3px);border-bottom:1px solid var(--ink)}.overlay.behind .finder-title,.stage>.overlay:not(:last-child) .finder-title{background-image:none;background-color:#dfdeda}.finder-title h1{text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:1.3rem;line-height:1}.finder-title-text{display:inline-block;background:var(--window);padding:0 .55rem .04rem}.overlay.behind .finder-title-text,.stage>.overlay:not(:last-child) .finder-title-text{background:#dfdeda}.mac-hit{display:grid;place-items:center;width:2.2rem;height:1.7rem;background:var(--window)}.mac-hit.zoom{justify-self:end}.mac-box{display:grid;place-items:center;width:15px;height:15px;background:var(--window);border:2px solid var(--ink);box-sizing:border-box}.mac-box-inner{width:7px;height:7px;border:2px solid var(--ink);box-sizing:border-box}.mac-hit:active .mac-box{background:var(--ink)}.mac-hit:active .mac-box-inner{border-color:var(--paper)}.overlay.behind .mac-hit,.stage>.overlay:not(:last-child) .mac-hit{visibility:hidden}.finder-meta{display:grid;grid-template-columns:1fr 1fr 1fr;padding:.35rem .55rem .2rem;font-size:1rem}.finder-meta span:nth-child(2){text-align:center}.finder-meta span:nth-child(3){text-align:right}.finder-rule{height:1px;background:var(--ink);margin:0 .4rem}.finder-body{padding:.65rem .7rem 1.15rem;overflow:auto;font-size:1rem;line-height:1.25}.finder-body::-webkit-scrollbar{width:15px;height:15px}.finder-body::-webkit-scrollbar-track{background:#e9e8e3;border-left:1px solid var(--ink)}.finder-body::-webkit-scrollbar-thumb{background:repeating-linear-gradient(-45deg,var(--window) 0 2px,oklch(.72 .01 90) 2px 4px);border:1px solid var(--ink)}.finder-grow{position:absolute;right:0;bottom:0;width:15px;height:15px;background:linear-gradient(135deg,var(--window) 42%,var(--ink) 42% 46%,var(--window) 46% 58%,var(--ink) 58% 62%,var(--window) 62% 74%,var(--ink) 74% 78%,var(--window) 78%);border-top:1px solid var(--ink);border-left:1px solid var(--ink);pointer-events:none}.finder-body>*:first-child{margin-top:0}.work-table{width:100%;border-collapse:collapse;font-size:1rem}.work-table th,.work-table td{text-align:left;font-weight:400;padding:.38rem .2rem .32rem;border-bottom:1px solid var(--ink);vertical-align:top}.work-table th{padding-top:.1rem}.work-table td:first-child,.work-table th:first-child{width:2.4rem}.work-table td:nth-child(3),.work-table th:nth-child(3){width:26%}.work-table td:last-child,.work-table th:last-child{width:28%;text-align:left}.events-table td:nth-child(3),.events-table th:nth-child(3){width:40%}.events-table td:nth-child(4),.events-table th:nth-child(4){width:auto}.events-table td:last-child,.events-table th:last-child{width:4.2rem;white-space:nowrap}.work-table a{display:contents}.work-table tr.row.is-plain{cursor:default}.work-table tr.row.is-plain:hover td{background:none;color:inherit}.work-table tr.row:hover td{background:var(--ink);color:var(--paper)}.two-col{display:grid;grid-template-columns:minmax(7rem,.42fr) 1fr;gap:1rem;margin:0 0 1.15rem}.two-col .k{padding-top:0}.block-text{margin:0 0 1rem;white-space:pre-wrap}.block-text p+p{margin-top:.7rem}.block-image{margin:0 0 1.1rem}.block-image [data-zoom=true] img{cursor:zoom-in}.block-image figcaption,.scatter figcaption{margin-top:.25rem;font-size:1rem}.scatter{position:relative;min-height:34rem}.scatter-item{position:absolute}.scatter-item img{width:100%;cursor:zoom-in;background:#e9e8e3}.scatter-item.archive{width:6rem}.scatter-item.archive img,.scatter-item.archive svg{cursor:pointer}.empty{padding:.4rem 0 .8rem}.cv-foot{display:flex;justify-content:space-between;margin-top:1.4rem;padding-top:.4rem}.profile-hello{font-size:1.55rem;line-height:1.15;margin:0 0 .85rem}.profile-bio-row{display:grid;grid-template-columns:1fr;gap:.85rem 1rem;align-items:start}.profile-bio-row.has-photo{grid-template-columns:8.4rem 1fr}.profile-photo{margin:0;width:8.4rem}.profile-photo img{width:8.4rem;height:8.4rem;object-fit:cover;border:2px solid var(--ink);background:#e9e8e3}.profile-bio{margin:0}.profile-bio strong{font-weight:700}.profile-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:.7rem;margin:1rem 0 1.25rem;padding:.7rem 0 .55rem;border-top:1px solid var(--ink);border-bottom:1px solid var(--ink)}.profile-stats dt,.profile-stats dd{margin:0}.profile-stat-value{font-size:1.55rem;line-height:1.1}.profile-stat-label{margin-top:.12rem}.skill-tabs{display:flex;flex-wrap:wrap;width:100%;margin:0 0 .55rem;border:2px solid var(--ink)}.skill-tab{display:inline-flex;align-items:center;gap:.35rem;padding:.2rem .55rem .16rem;border-right:2px solid var(--ink)}.skill-tab:last-child{border-right:0}.skill-tab[aria-selected=true]{background:var(--ink);color:var(--paper)}.skill-mark{width:11px;height:11px;flex:none;box-sizing:border-box;border:1.5px solid currentColor}.skill-mark-expertise{background:linear-gradient(currentColor,currentColor) 50% 50% / 1.5px 100% no-repeat,linear-gradient(currentColor,currentColor) 50% 50% / 100% 1.5px no-repeat}.skill-mark-language{box-shadow:2px 2px 0 -1px currentColor}.skill-mark-ai{border:0;background:linear-gradient(currentColor,currentColor) 5px 0 / 1.5px 11px no-repeat,linear-gradient(currentColor,currentColor) 0 5px / 11px 1.5px no-repeat}.skill-mark-programming{border:0;background:linear-gradient(135deg,currentColor 0 1.5px,transparent 1.5px) 1px 2px / 4px 7px no-repeat,linear-gradient(-135deg,currentColor 0 1.5px,transparent 1.5px) 1px 2px / 4px 7px no-repeat,linear-gradient(-45deg,currentColor 0 1.5px,transparent 1.5px) 6px 2px / 4px 7px no-repeat,linear-gradient(45deg,currentColor 0 1.5px,transparent 1.5px) 6px 2px / 4px 7px no-repeat}.skill-mark-software{box-shadow:inset 0 3px 0 -1.5px currentColor}.skill-table{width:100%;border-collapse:collapse}.skill-table td{padding:.32rem .15rem .28rem;border-bottom:1px solid var(--ink);vertical-align:top}.skill-table td:last-child:not(:first-child){width:46%}.skill-grid{display:grid;grid-template-columns:1fr 1fr;margin:0;padding:0;list-style:none}.skill-grid li{padding:.32rem .15rem .28rem;border-bottom:1px solid var(--ink)}.badge-row{display:grid;grid-template-columns:1fr 1fr 1fr;gap:.75rem .9rem;margin:0;padding:0;list-style:none}.badge-card{display:grid;gap:.18rem}.badge-card img{width:5.4rem;height:5.4rem;object-fit:contain;border:2px solid var(--ink);background:var(--window);padding:.2rem}.badge-name{display:block}.credly-link{display:block;margin:.7rem 0 0}.credly-link a,.badge-card{text-decoration:underline;text-underline-offset:.15em}.badge-card{text-decoration:none}.badge-card:hover .badge-name{text-decoration:underline;text-underline-offset:.15em}.cert-table{margin-top:.55rem}.skill-table.cert-table td:last-child{width:22%;white-space:nowrap}.zoom-layer{position:fixed;inset:0;z-index:80;background:#18161161;place-items:center;padding:3rem;cursor:zoom-out}.zoom-layer[hidden]{display:none}.zoom-layer:not([hidden]){display:grid}.zoom-layer img{max-width:min(92vw,1100px);max-height:88dvh;box-shadow:3px 3px 0 0 var(--ink);border:2px solid var(--ink);background:var(--window)}@keyframes overlay-in{0%{opacity:1;transform:scale(.97)}to{opacity:1;transform:none}}::view-transition-old(root),::view-transition-new(root){animation:none;mix-blend-mode:normal}::view-transition-group(root){animation:none}@media(max-width:720px){html{font-size:11.5px}.desk-icon{cursor:pointer}.overlay,.overlay.behind{padding:calc(var(--topbar-h) + .8rem) .5rem calc(var(--footer-h) + .4rem)}.overlay.behind{display:none}.finder{width:min(100%,calc(100vw - 1rem));max-height:calc(100dvh - var(--topbar-h) - var(--footer-h) - .8rem)}.block-image.half{width:100%}.two-col{grid-template-columns:1fr;gap:.35rem}.profile-bio-row,.profile-stats,.skill-grid,.badge-row{grid-template-columns:1fr}.profile-photo,.profile-photo img{width:7.2rem;height:7.2rem}.scatter{min-height:28rem}}@keyframes astroFadeInOut{0%{opacity:1}to{opacity:0}}@keyframes astroFadeIn{0%{opacity:0;mix-blend-mode:plus-lighter}to{opacity:1;mix-blend-mode:plus-lighter}}@keyframes astroFadeOut{0%{opacity:1;mix-blend-mode:plus-lighter}to{opacity:0;mix-blend-mode:plus-lighter}}@keyframes astroSlideFromRight{0%{transform:translate(100%)}}@keyframes astroSlideFromLeft{0%{transform:translate(-100%)}}@keyframes astroSlideToRight{to{transform:translate(100%)}}@keyframes astroSlideToLeft{to{transform:translate(-100%)}}@media(prefers-reduced-motion){::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none!important}[data-astro-transition-scope]{animation:none!important}}
