.skip{position:absolute;left:-9999px;top:0;z-index:100}.skip:focus{left:12px;top:12px;padding:10px 16px;border-radius:8px;background:#9c3712;color:#fbfaf7;font:500 14px/1 IBM Plex Sans,system-ui,sans-serif}html .nav .menu,html .mflow,html .march,html .if-touch{display:none}@media(hover:none){html .if-hover{display:none}html .if-touch{display:inline}}@media(max-width:899px){html .wrap>div[style*="grid-template-columns:minmax(0,1fr) auto"]{grid-template-columns:minmax(0,1fr)!important;gap:30px!important}}@media(max-width:719px){html{-webkit-text-size-adjust:100%}html body{-webkit-tap-highlight-color:transparent}html .nav{position:relative;height:64px;padding:0 var(--gutter,0px);flex-wrap:nowrap}html .nav>ul{display:none}html .nav .menu{display:block}html .menu>summary{list-style:none;display:flex;align-items:center;gap:10px;min-height:44px;padding:0 0 0 12px;cursor:pointer;font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink2)}html .menu>summary::-webkit-details-marker{display:none}html .menu .ico{position:relative;width:18px;height:10px}html .menu .ico i{position:absolute;left:0;right:0;top:0;height:1.5px;border-radius:1px;background:var(--ink);transition:transform .24s var(--enter),top .24s var(--enter)}html .menu .ico i+i{top:8.5px}html .menu[open] .ico i{top:4.25px;transform:rotate(45deg)}html .menu[open] .ico i+i{transform:rotate(-45deg)}html .menu .sheet{position:absolute;left:var(--gutter,0px);right:var(--gutter,0px);top:calc(100% - 6px);z-index:40;display:block;list-style:none;margin:0;padding:6px 18px;background:var(--paper2);border:1px solid var(--hair);border-radius:16px;box-shadow:0 26px 50px -26px #28241e80;animation:m-sheet .26s var(--enter) both}html .menu .sheet li+li{border-top:1px solid var(--hair)}html .menu .sheet a{display:flex;align-items:center;justify-content:space-between;min-height:58px;font-family:var(--serif);font-size:27px;letter-spacing:-.015em;color:var(--ink);text-decoration:none}html .menu .sheet a:after{content:"→";font-family:var(--sans);font-size:17px;color:var(--ink3)}html .menu .sheet a[aria-current]{color:var(--accent)}@keyframes m-sheet{0%{opacity:0;transform:translateY(-10px)}}html:root:has(.spine){--content-x:20px;--gutter:20px}html .spine,html .snode{display:none}html .hero{gap:30px;padding:30px 0 6px}html .hero h1{font-size:clamp(46px,13.6vw,60px);margin-top:14px}html .tw{font-size:17px}html .hero .facts{flex-direction:column;gap:9px}html .cluster{width:100%;aspect-ratio:auto;margin:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(40px,1fr));gap:10px}html .cluster .tile{position:static;width:auto;margin:0;aspect-ratio:1;animation:none}html .cluster .tile .br{width:44%;height:44%}html .skills{display:flex;gap:12px;overflow-x:auto;overscroll-behavior-x:contain;scroll-snap-type:x mandatory;scrollbar-width:none;margin:24px calc(-1 * var(--edge)) 0;padding:0 var(--edge) 4px;scroll-padding-inline:var(--edge)}html .skills::-webkit-scrollbar{display:none}html .skills .skill{--pad:18px;flex:0 0 min(84%,340px);scroll-snap-align:start;border-radius:18px;animation:none}html .skills .skill h3{font-size:17px}html .skills .skill p{font-size:14.5px;line-height:1.5}html .skills .skill .stack i{display:inline}html .way{flex-wrap:wrap}html .way small{flex-basis:100%;margin:-8px 0 4px 52px}html .compose{padding:18px 16px}html .send{width:100%;justify-content:center;min-height:50px;border-radius:25px}html .filters{gap:8px;flex-wrap:wrap}html .filters .label{flex-basis:100%;margin-bottom:2px}html .filters label{min-height:38px;padding:0 15px;border:1px solid var(--hair);border-radius:19px;color:var(--ink2)}html .reg:has(#f-all:checked) .filters label[for=f-all],html .reg:has(#f-delivered:checked) .filters label[for=f-delivered],html .reg:has(#f-built:checked) .filters label[for=f-built]{text-decoration:none;background:var(--accent);border-color:var(--accent);color:var(--on-accent)}html .ghead{gap:12px;padding:10px 0}html .ghead .ring{width:34px;height:34px}html .ghead .ring svg{width:17px;height:17px}html .ghead h2{font-size:21px;line-height:1.15}html .ghead .n{font-size:10px;white-space:nowrap}html .row{grid-template-columns:14px minmax(0,1fr);gap:6px 12px;padding:18px 0}html .row .line{font-size:14px;line-height:1.5}html .row .name{font-size:16.5px}html .stage.sec .strip{display:block;margin-top:28px;padding:0;border:0;border-radius:0;background:none;overflow:visible}html .stage.sec .strip .wf{display:none}html .stage.sec .strip .cap{position:static;margin:0;line-height:1.65}html .stage.sec .strip .cap.r{margin:4px 0 0}html .under .log,html .under .hint{display:none}html .mflow{display:block;list-style:none;margin:18px 0 0;padding:0}html .mflow li{position:relative;display:grid;grid-template-columns:36px minmax(0,1fr);column-gap:14px;padding-bottom:16px}html .mflow li.step:before{content:"";position:absolute;left:17px;top:38px;bottom:2px;width:2px;border-radius:1px;background:var(--accent);transform-origin:top}html .mflow li.fan{margin-left:28px}html .mflow li.fan:after{content:"";position:absolute;left:-11px;top:-16px;width:11px;height:35px;border:solid var(--accent);border-width:0 0 2px 2px;border-bottom-left-radius:10px}html .mflow li.fan:not(:last-child):before{content:"";position:absolute;left:-11px;top:8px;bottom:16px;width:2px;background:var(--accent)}html .mf-ico{width:36px;height:36px;border-radius:9px;display:grid;place-items:center;border:1.5px solid var(--accent);background:var(--wash);color:var(--accent)}html .mf-ico svg{fill:none;stroke:currentColor;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round}html .mf-t b{display:block;padding-top:8px;font-weight:500;font-size:15px;line-height:1.3;color:var(--ink)}html .mf-t i{display:block;margin-top:3px;font-style:normal;font-family:var(--mono);font-size:11px;line-height:1.45;color:var(--ink3)}html .under{margin-top:4px}html .rail{margin-top:18px!important}html .minibox{height:104px}html .minibox.none{height:46px}html .cats.path li{display:grid;grid-template-columns:44px minmax(0,1fr);column-gap:14px;row-gap:3px;align-items:start;padding:14px 0}html .cats.path .ring{grid-row:1 / span 3}html .cats.path b{margin:3px 0 0;font-size:15px}html .cats.path i{margin:0;font-size:11px;line-height:1.45}html .cats.path .sys{margin-top:3px}html .figs{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px 12px;margin-top:30px}html .figs b{font-size:34px}html .arch-track{display:none}html .march{display:block;margin-top:6px}html .ma-cap{display:flex;align-items:center;gap:10px;margin:26px 0 10px;font-family:var(--mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink3)}html .ma-cap:before{content:"";width:7px;height:7px;border-radius:50%;background:var(--accent)}html .ma-src{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;list-style:none;margin:0;padding:0}html .ma-src li{display:flex;align-items:center;gap:10px;padding:8px 10px;border:1px solid var(--hair);border-radius:12px;background:var(--paper2);font-size:12.5px;line-height:1.3;color:var(--ink)}html .ma-src .ma-extra{grid-column:1 / -1;border-style:dashed;background:transparent;font-family:var(--mono);font-size:10.5px;color:var(--ink3)}html .ma-ico{flex:none;display:grid;place-items:center;width:30px;height:30px;border-radius:50%;border:1.5px solid var(--accent);background:var(--wash);color:var(--accent)}html .ma-ico svg{width:16px;height:16px;fill:currentColor}html .ma-ico.st svg{fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}html .ma-ico.dash{border-style:dashed;border-color:var(--ink3);background:transparent}html .ma-node{padding:16px 18px 10px;border:1.5px solid var(--accent);border-radius:14px;background:var(--paper2)}html .ma-node b{display:block;font-weight:600;font-size:16px;color:var(--ink)}html .ma-node>i{display:block;margin-top:2px;font-style:normal;font-size:13px;color:var(--ink2)}html .ma-node ol,html .ma-node ul{list-style:none;margin:12px 0 0;padding:0;counter-reset:ma}html .ma-node li{padding:7px 0;border-top:1px solid var(--hair);font-family:var(--mono);font-size:11.5px;line-height:1.45;color:var(--ink2)}html .ma-node ol li{counter-increment:ma}html .ma-node ol li:before{content:counter(ma,decimal-leading-zero);display:inline-block;width:28px;color:var(--accent)}html .ma-fam{list-style:none;margin:0;padding:0}html .ma-fam li{display:flex;align-items:flex-start;gap:12px;padding:10px 0;border-bottom:1px solid var(--hair)}html .ma-fam b{display:block;padding-top:3px;font-weight:500;font-size:14.5px;color:var(--ink)}html .ma-fam i{display:block;margin-top:2px;font-style:normal;font-family:var(--mono);font-size:11px;color:var(--ink3)}html .dash .thead,html .dash .tr{grid-template-columns:44px minmax(0,1fr) 56px;gap:14px;width:auto;padding:0 16px}html .dash .thead>:nth-child(n+4),html .dash .tr>:nth-child(n+4){display:none}html .dash .bar{padding:0 16px}html section.run div[style*="text-align:right"]{text-align:left!important;margin-top:40px!important}html .tnode{perspective:none}html .tnode .faces{transform:none!important;transform-style:flat;transition:none}html .tnode .face{backface-visibility:visible;-webkit-backface-visibility:visible}html .tnode .face.back{display:none}html .tnode:is(:hover,:focus,:focus-within) .face:not(.back){border-color:var(--accent);color:var(--accent)}html .tnode:is(:hover,:focus,:focus-within) .face.back{display:flex;position:fixed;z-index:60;inset:auto auto calc(18px + env(safe-area-inset-bottom)) 50%;width:max-content;min-width:0;max-width:calc(100vw - 40px);height:44px;padding:0 18px;border-radius:22px;transform:translate(-50%);font-size:12px;box-shadow:0 16px 32px -14px #28241e99;animation:m-toast .22s var(--enter) both}@keyframes m-toast{0%{opacity:0;transform:translate(-50%,10px)}}}@supports (animation-timeline: scroll()){@media(max-width:719px){html #expertise{timeline-scope:--skills}html .skills{scroll-timeline:--skills inline}html #expertise:after{content:"";display:block;height:2px;margin-top:18px;border-radius:1px;background:linear-gradient(var(--accent),var(--accent)) 0 0/22% 100% no-repeat,var(--hair);animation:m-track linear both;animation-timeline:--skills}@keyframes m-track{to{background-position:100% 0,0 0}}}}@supports (animation-timeline: view()){@media(max-width:719px)and (prefers-reduced-motion:no-preference){html .mf-ico{animation:m-unlit linear both;animation-timeline:view();animation-range:entry 100% cover 42%}html .mflow li.step:before{animation:m-draw linear both;animation-timeline:view();animation-range:cover 30% cover 55%}html .ma-ico{animation:m-unlit linear both;animation-timeline:view();animation-range:entry 100% cover 38%}@keyframes m-unlit{0%{border-color:var(--hair);background:var(--paper2);color:var(--ink3)}}@keyframes m-draw{0%{transform:scaleY(0)}}}}html:root{color-scheme:light;--paper:#DAD9D5;--paper2:#F0EFEB;--hair:#B6B5AF;--ink:#1B1B19;--ink2:#3A3A37;--ink3:#55554F;--accent:#9C3712;--accent-2:#7C2A0C;--wash:#EADFD7;--on-accent:#FBFAF7;--maroon:var(--accent);--maroon-ink:var(--accent-2);--screen:#1F1F1C;--screen2:#36352F;--bone:#F2F1EC;--bone-dim:#A9A8A0;--rose:#E07A4F;--viz1:var(--ink);--viz2:#6F6E68;--viz3:#A2A19A;--pic-1:#8F9C86;--pic-2:#C07C5E;--pic-3:#47536E;--pic-4:#CAA467;--pic-5:#46453F;--pic-6:#677C7A}html:root{background:var(--paper) url(/texture.webp) 0 0/750px 555px repeat}html body{background:transparent}html .ghead{background:#dad9d5d1;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}@supports (animation-timeline: view()){@media(prefers-reduced-motion:no-preference){@keyframes ghead-in{0%{background:#dad9d500;-webkit-backdrop-filter:blur(0);backdrop-filter:blur(0)}to{background:#dad9d5d1;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}}@keyframes ghead-stuck{0%,to{background:#dad9d5d1;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}}html .group{view-timeline:--grp block}html .ghead{background:transparent;-webkit-backdrop-filter:none;backdrop-filter:none;animation:ghead-in linear,ghead-stuck linear;animation-timeline:--grp,--grp;animation-range:exit-crossing 20px exit-crossing 44px,exit-crossing 44px exit-crossing 100%}}}html .tnode .face,html .minibox,html .cats .ring,html .gh .ring,html .strip,html .canvas,html .snode{background:var(--paper2)}html .gates .ring,html .ghead .ring,html .guards .ring{background:var(--wash)}html .wf .plate,html .arch .ring{fill:var(--paper2)}html .snode:before{background:var(--wash)}@media(prefers-reduced-motion:reduce){html .cats .ring{background:var(--wash)}}@supports not (animation-timeline: view()){html .cats .ring{background:var(--wash)}}html .skill:hover{box-shadow:0 18px 34px -22px #302c246b}html ::selection{background:var(--accent);color:var(--on-accent)}html .chips input:checked+label,html .send,html .send:hover,html .send .sy{color:var(--on-accent)}html .tnode .face.back{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}html .tnode .face.back .br{fill:var(--on-accent)}html .mini path{stroke:var(--accent)}html .mini rect{fill:var(--wash);stroke:var(--accent)}html :is(.inv span,.invkey i)[style*="#F4F4F4" i]{background:var(--viz1)!important}html :is(.inv span,.invkey i)[style*="#CBD5E1" i]{background:var(--viz2)!important}html :is(.inv span,.invkey i)[style*="#94A3B8" i]{background:var(--viz3)!important}html :is(.inv span,.invkey i)[style*="#22D3EE" i]{background:var(--accent)!important}html :is(.inv span,.invkey i)[style*="#26304A" i]{background:var(--hair)!important}
