.tcf{--m-cur: var(--color-accent);--m-gt: #1a1a1a;--m-base: #b5532a;--m-imu1: #6c7380;--m-imu2: #2f9e57;--m-baro: #2b86c0;--m-mag: #8a3fd1;--m-pose: #4a4f5a;--m-grid: rgba(27, 31, 42, .1);--m-tint: rgba(78, 42, 132, .08);--m-on: #ffffff;position:relative;padding:.9rem 1rem .7rem;border:1px solid var(--color-border);border-radius:8px;background:var(--color-surface)}@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .tcf{--m-gt: #e4e4e4;--m-base: #e8895a;--m-imu1: #9aa1ae;--m-imu2: #5fc78a;--m-baro: #6fbfe8;--m-mag: #b98af0;--m-pose: #b4bac6;--m-grid: rgba(255, 255, 255, .12);--m-tint: rgba(179, 157, 219, .12);--m-on: #14161d}}:root[data-theme=dark] .tcf{--m-gt: #e4e4e4;--m-base: #e8895a;--m-imu1: #9aa1ae;--m-imu2: #5fc78a;--m-baro: #6fbfe8;--m-mag: #b98af0;--m-pose: #b4bac6;--m-grid: rgba(255, 255, 255, .12);--m-tint: rgba(179, 157, 219, .12);--m-on: #14161d}.tcf-wide{margin-top:1.6rem}.tcf-svg{display:block;width:100%;height:auto;overflow:visible}.tcf-svg text{fill:var(--color-text);font-family:inherit;font-size:15px}.tcf-svg .t-sm{font-size:13px}.tcf-svg .t-muted{fill:var(--color-text-muted)}.tcf-svg .t-mid{text-anchor:middle}.tcf-svg .t-end{text-anchor:end}.tcf-svg .tcf-cap,.tcf-svg .tcf-val{font-size:17px;font-weight:700}.tcf-svg .c-cur{fill:var(--m-cur);font-weight:700}.tcf-svg .c-base{fill:var(--m-base);font-weight:700}.tcf-svg .c-baro{fill:var(--m-baro);font-weight:700}.tcf-svg .c-mag{fill:var(--m-mag);font-weight:700}.tcf-svg .c-imu2{fill:var(--m-imu2);font-weight:700}.tcf-line{fill:none;stroke-linecap:round;stroke-linejoin:round}.tcf-gt{stroke:var(--m-gt);stroke-width:3}.tcf-gt-soft{stroke:var(--m-gt);stroke-width:2;stroke-dasharray:5 6;opacity:.55}.tcf-base{stroke:var(--m-base);stroke-width:3.5}.tcf-cur{stroke:var(--m-cur);stroke-width:3.5}.tcf-baro{stroke:var(--m-baro);stroke-width:3.5}.tcf-mag{stroke:var(--m-mag);stroke-width:3.5}.tcf-gap{stroke:var(--m-base);stroke-width:2;stroke-dasharray:4 5}.tcf-gap-cur{stroke:var(--m-cur);stroke-width:2;stroke-dasharray:4 5}.tcf-axis,.tcf-grid{stroke:var(--m-grid);stroke-width:1}.tcf-dash{stroke-dasharray:1 1;stroke-dashoffset:0}.tcf-dot{offset-distance:100%;offset-rotate:0deg}.tcf-dot-gt{fill:var(--m-gt)}.tcf-dot-base{fill:var(--m-base)}.tcf-dot-cur{fill:var(--m-cur)}.tcf-dot-baro{fill:var(--m-baro)}.tcf-dot-mag{fill:var(--m-mag)}.tcf-box{fill:var(--color-surface);stroke:var(--color-border);stroke-width:2}.tcf-box-soft{fill:var(--m-tint);stroke:none}.tcf-pill{fill:var(--color-surface);stroke-width:3}.tcf-p-imu1{stroke:var(--m-imu1)}.tcf-p-imu2{stroke:var(--m-imu2)}.tcf-p-baro{stroke:var(--m-baro)}.tcf-p-mag{stroke:var(--m-mag)}.tcf-p-pose{stroke:var(--m-pose)}.tcf-f-imu1{fill:var(--m-imu1)}.tcf-f-imu2{fill:var(--m-imu2)}.tcf-f-baro{fill:var(--m-baro)}.tcf-f-mag{fill:var(--m-mag)}.tcf-f-pose{fill:var(--m-pose)}.tcf-tile{stroke:none;opacity:.85}.tcf-arrow{fill:none;stroke:var(--color-text-light);stroke-width:2;stroke-linecap:round}.tcf-head{fill:var(--color-text-light)}.tcf-pulse{fill:var(--m-cur)}.tcf-body{fill:none;stroke:var(--color-text-light);stroke-width:6;stroke-linecap:round;stroke-linejoin:round}.tcf-leg{fill:none;stroke:var(--m-cur);stroke-width:9;stroke-linecap:round;stroke-linejoin:round}.tcf-skull{fill:var(--color-surface);stroke:var(--color-text-light);stroke-width:4}.tcf-specs{fill:none;stroke:var(--m-cur);stroke-width:4;stroke-linecap:round}.tcf-trace{fill:none;stroke:var(--m-cur);stroke-width:3;stroke-linecap:round;stroke-linejoin:round}.tcf-bar-a{fill:var(--m-base)}.tcf-bar-b{fill:var(--m-cur)}.tcf-sq{fill:var(--m-cur);opacity:.35}.tcf-sq-held{fill:var(--m-base);opacity:.9}.tcf-vis{opacity:0}.tcf-vis.tcf-static,.tcf-late{opacity:1}.tcf-orig{margin-top:.7rem;font-size:.85rem;color:var(--color-text-muted)}.tcf-orig summary{cursor:pointer;width:fit-content}.tcf-orig summary:hover{color:var(--color-accent)}.tcf-note{margin:.6rem 0 0;font-size:.88rem;color:var(--color-text-muted);line-height:1.5}.tcf-story{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:clamp(1.4rem,4vw,3rem);align-items:center;margin:2.6rem 0 0}.tcf-story--lead{grid-template-columns:minmax(0,5fr) minmax(0,7fr)}.tcf-story figure{margin:0}.tcf-story-text>p{margin:0 0 .95rem}.tcf-story-text>p:last-child{margin-bottom:0}.tcf-kicker{margin:0 0 .4rem;font-size:1.02rem;font-weight:700;line-height:1.35;color:var(--color-text)}.tcf-story-text>.tcf-kicker{margin-bottom:.4rem}.tcf-photo{overflow:hidden;border:1px solid var(--color-border);border-radius:8px;background:#fff}.tcf-photo img{display:block;width:100%;height:auto;border:0}.tcf-story figcaption{margin:.6rem 0 0;font-size:.845rem;line-height:1.5;color:var(--color-text-muted)}.tcf-story-photo{margin-top:1.1rem!important}.tcf-story .tcf--loop{display:flex;align-items:center;justify-content:center;aspect-ratio:4 / 3;box-sizing:border-box}.tcf-story .tcf--loop .tcf-svg{width:100%;height:100%}.tcf-step-head{margin:3.2rem 0 0!important}.tcf-step-head+.tcf-wide,.tcf-step-head+.project-table-figure{margin-top:1.1rem}.tcf-three{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem;margin:1.1rem 0 0}.tcf-three>figure{margin:0}.tcf-three>figure>.tcf{padding:.6rem .6rem .4rem}.tcf-three figcaption{margin:.55rem 0 0;font-size:.86rem;line-height:1.45;color:var(--color-text-muted)}.tcf-three figcaption strong{color:var(--color-text)}.tcf.tcf-strip{padding:.9rem 1.1rem}@media(max-width:860px){.tcf-three{grid-template-columns:1fr}}@media(max-width:760px){.tcf{padding:.7rem .6rem .5rem}.tcf-story,.tcf-story--lead{grid-template-columns:minmax(0,1fr);gap:1.2rem}}@media(prefers-reduced-motion:no-preference){.tcf-flow{stroke-dasharray:6 8;animation:tcfFlow .9s linear infinite}@keyframes tcfFlow{to{stroke-dashoffset:-14}}.tcf--loop:not(.is-play) .tcf-flow,.tcf--loop:not(.is-play) [class*=k-],.tcf--loop:not(.is-play) [class*=tcf-walk]{animation-play-state:paused}@keyframes tcfThigh{0%{transform:rotate(28deg)}50%{transform:rotate(-28deg)}to{transform:rotate(28deg)}}@keyframes tcfShin{0%{transform:rotate(0)}25%{transform:rotate(52deg)}50%{transform:rotate(6deg)}to{transform:rotate(0)}}@keyframes tcfBob{0%,50%,to{transform:translateY(0)}25%,75%{transform:translateY(-3px)}}@keyframes tcfGround{to{stroke-dashoffset:-44}}@keyframes tcfScroll{to{transform:translate(-120px)}}.tcf-walk-thigh{animation:tcfThigh 1.2s linear infinite}.tcf-walk-thigh.is-b{animation-delay:-.6s}.tcf-walk-shin{animation:tcfShin 1.2s linear infinite}.tcf-walk-shin.is-b{animation-delay:-.6s}.tcf-walk-bob{animation:tcfBob 1.2s ease-in-out infinite}.tcf-walk-ground{stroke-dasharray:14 30;animation:tcfGround 1.2s linear infinite}.tcf-walk-scroll{animation:tcfScroll 1.2s linear infinite}}@media(prefers-reduced-motion:reduce){.tcf-walk-thigh{transform:rotate(14deg)}.tcf-walk-thigh.is-b{transform:rotate(-14deg)}}.tcf.tcf-strip{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem .9rem}.tcf-chiprow{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem .9rem;margin-top:.4rem;padding-top:.8rem;border-top:1px solid var(--color-border)}body:not(.present-mode) .tcf-deck-only{display:none}body.present-mode .tcf-deck-only .ck-reveal,body.present-mode .tcf-deck-only .animate-on-scroll{opacity:1;transform:none;transition:none}.tcf{--t-warp: #b5532a;--t-weft: #2b86c0;--t-skin: #f3c4a4;--t-red: #d6322f;--t-nc: #cfd2da;--t-rec: #e8604a}@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .tcf{--t-warp: #e8895a;--t-weft: #6fbfe8;--t-skin: #8a6556;--t-red: #ff6b6b;--t-nc: #4a4f5a;--t-rec: #ff8a76}}:root[data-theme=dark] .tcf{--t-warp: #e8895a;--t-weft: #6fbfe8;--t-skin: #8a6556;--t-red: #ff6b6b;--t-nc: #4a4f5a;--t-rec: #ff8a76}.tcf-yarn{fill:none;stroke-width:6;stroke-linecap:round}.tcf-warp{stroke:var(--t-warp)}.tcf-weft{stroke:var(--t-weft)}.tcf-fill-warp{fill:var(--t-warp)}.tcf-fill-weft{fill:var(--t-weft)}.tcf-nc{fill:var(--t-nc);stroke:none}.tcf-fabric{fill:var(--m-tint);stroke:var(--color-border);stroke-width:2}.tcf-skin{fill:var(--t-skin);opacity:.38}.tcf-rec{fill:var(--t-rec);opacity:.9}.tcf-rec-stalk{fill:none;stroke:var(--t-rec);stroke-width:3;stroke-linecap:round;opacity:.8}.tcf-node{fill:var(--t-red)}.tcf-halo{fill:var(--t-red);opacity:.22}.tcf-finger{fill:var(--t-skin);fill-opacity:.55;stroke:var(--t-skin);stroke-width:2.5}.tcf-sense{fill:none;stroke:var(--m-cur);stroke-width:3;stroke-dasharray:5 5}.tcf-bar-red{fill:var(--t-red)}.tcf-bar-sense{fill:var(--m-cur)}.tcf-track{fill:none;stroke:var(--color-border);stroke-width:1.5}.tcf-svg .c-red{fill:var(--t-red);font-weight:700}.tcf-svg .c-warp{fill:var(--t-warp);font-weight:700}.tcf-svg .c-weft{fill:var(--t-weft);font-weight:700}.tcf-svg .tcf-stage{font-size:15px;font-weight:700}.tcf-svg .t-it{font-style:italic}.tcf-dot-hv{fill:var(--t-red)}.tcf-dot-sense{fill:var(--t-weft)}.tcf-sym{fill:none;stroke:var(--color-text-light);stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.tcf-sym-bg{fill:var(--color-surface)}.tcf-jdot{fill:var(--color-text-light);stroke:none}.tcf-flowline{fill:none;stroke:var(--t-red);stroke-width:4;stroke-linecap:round;stroke-linejoin:round}.tcf-tag{fill:var(--color-surface);stroke:var(--color-border);stroke-width:2}.tcf-cm-base{fill:var(--m-grid);opacity:.55}.tcf-svg .tcf-cm-n{text-anchor:middle;font-weight:600;pointer-events:none}.tcf-svg .tcf-cm-n--on{fill:var(--m-on)}.tcf-svg .tcf-cm-n--zero{fill:var(--color-text-muted);opacity:.45;font-weight:400}.tcf-cm-hl{fill:transparent;stroke:transparent;stroke-width:2}.tcf-cmc:hover .tcf-cm-hl{stroke:var(--color-text)}.tcf-cm-ring{fill:none;stroke:var(--color-text);stroke-width:2.5;pointer-events:none}.tcf-ic{fill:var(--color-border)}.tcf-ic--on{fill:var(--m-cur)}.tcf-sens{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.7rem}.tcf-sens-item{display:flex;flex-direction:column;align-items:center;gap:.45rem;min-width:0}.tcf-sens-item .tcf-photo{width:100%}.tcf-sens-item span{font-size:.78rem;line-height:1.2;letter-spacing:.02em;color:var(--color-text-muted)}@media(max-width:460px){.tcf-sens{grid-template-columns:repeat(2,minmax(0,1fr))}}body.present-mode .present-deck--research .tcf{--m-gt: #1a1a1a;--m-base: #b5532a;--m-imu1: #6c7380;--m-imu2: #2f9e57;--m-baro: #2b86c0;--m-mag: #8a3fd1;--m-pose: #4a4f5a;--m-grid: rgba(27, 31, 42, .1);--m-tint: rgba(78, 42, 132, .08);--m-on: #ffffff}body.present-mode:not(.present-theme-light) .present-deck--research .tcf{--m-gt: #e4e4e4;--m-base: #e8895a;--m-imu1: #9aa1ae;--m-imu2: #5fc78a;--m-baro: #6fbfe8;--m-mag: #b98af0;--m-pose: #b4bac6;--m-grid: rgba(255, 255, 255, .12);--m-tint: rgba(179, 157, 219, .12);--m-on: #14161d}.present-deck--research .tcf{padding:.7rem .9rem .55rem}@media(prefers-reduced-motion:no-preference){@keyframes k-wf{0%,2%{stroke-dashoffset:1;opacity:1}20%,92%{stroke-dashoffset:0;opacity:1}98%{stroke-dashoffset:0;opacity:0}to{stroke-dashoffset:1;opacity:0}}@keyframes k-wp{0%,10%{stroke-dashoffset:1;opacity:1}28%,92%{stroke-dashoffset:0;opacity:1}98%{stroke-dashoffset:0;opacity:0}to{stroke-dashoffset:1;opacity:0}}@keyframes k-ow{0%,28%{opacity:0}32%,92%{opacity:1}98%,to{opacity:0}}@keyframes k-lc1{0%,34%{opacity:0}35%,34.8%{opacity:1}35.8%,to{opacity:0}}@keyframes k-lc2{0%,34.5%{opacity:0}35.5%,40.4%{opacity:1}41.4%,to{opacity:0}}@keyframes k-lc3{0%,40.2%{opacity:0}41.2%,46%{opacity:1}47%,to{opacity:0}}@keyframes k-lc4{0%,45.8%{opacity:0}46.8%,51.7%{opacity:1}52.7%,to{opacity:0}}@keyframes k-lc5{0%,51.4%{opacity:0}52.4%,57.3%{opacity:1}58.3%,to{opacity:0}}@keyframes k-lc6{0%,57.1%{opacity:0}58.1%,62.9%{opacity:1}63.9%,to{opacity:0}}@keyframes k-lc7{0%,62.7%{opacity:0}63.7%,68.6%{opacity:1}69.6%,to{opacity:0}}@keyframes k-lc8{0%,68.3%{opacity:0}69.3%,74.2%{opacity:1}75.2%,to{opacity:0}}@keyframes k-lc9{0%,74%{opacity:0}75%,79.9%{opacity:1}80.9%,to{opacity:0}}@keyframes k-lc10{0%,79.6%{opacity:0}80.6%,81%{opacity:1}82%,to{opacity:0}}@keyframes k-fg{0%,30%{offset-distance:0%;opacity:0}31%{offset-distance:0%;opacity:1}82%,85%{offset-distance:100%;opacity:1}90%,to{offset-distance:100%;opacity:0}}@keyframes k-st{0%,5.6%{opacity:0}8.3%,36.7%{opacity:1}41.1%,to{opacity:0}}@keyframes k-sw0{0%,44.4%{opacity:0}45.6%,52.2%{opacity:1}53.3%,to{opacity:0}}@keyframes k-sw1{0%,53.3%{opacity:0}54.4%,61.1%{opacity:1}62.2%,to{opacity:0}}@keyframes k-sw2{0%,62.2%{opacity:0}63.3%,70%{opacity:1}71.1%,to{opacity:0}}@keyframes k-sw3{0%,71.1%{opacity:0}72.2%,78.9%{opacity:1}80%,to{opacity:0}}@keyframes k-sw4{0%,80%{opacity:0}81.1%,87.8%{opacity:1}88.9%,to{opacity:0}}@keyframes k-sw5{0%,88.9%{opacity:0}90%,96.7%{opacity:1}97.8%,to{opacity:0}}@keyframes k-t1{0%,4.4%{opacity:0}7.8%,37.8%{opacity:1}42.2%,to{opacity:0}}@keyframes k-t2{0%,43.3%{opacity:0}46.7%,92.2%{opacity:1}97.8%,to{opacity:0}}@keyframes k-c1{0%,37.1%{opacity:0}39.3%,60.7%{opacity:1}62.9%,to{opacity:0}}@keyframes k-c2{0%{opacity:0}7.1%{opacity:0}9.3%{opacity:1}32.1%{opacity:1}34.3%{opacity:0}63.6%{opacity:0}65.7%{opacity:1}89.3%{opacity:1}91.4%{opacity:0}to{opacity:0}}@keyframes k-li{0%,38.6%{opacity:0}40.7%,60%{opacity:1}62.1%,to{opacity:0}}@keyframes k-lb{0%,65%{opacity:0}67.1%,87.9%{opacity:1}90%,to{opacity:0}}@keyframes k-so{0%,4.3%{opacity:1}5.7%,95.7%{opacity:0}97.1%,to{opacity:1}}@keyframes k-sc{0%,4.3%{opacity:0}5.7%,95.7%{opacity:1}97.1%,to{opacity:0}}@keyframes k-s0{0%,36.4%{opacity:1}38.2%,90%{opacity:0}91.4%,to{opacity:1}}@keyframes k-s1{0%,36.4%{opacity:0}38.2%,90%{opacity:1}91.4%,to{opacity:0}}@keyframes k-fing{0%,32.9%{offset-distance:0%;opacity:0}33.3%{offset-distance:0%;opacity:1}37.9%,90%{offset-distance:100%;opacity:1}94.3%,to{offset-distance:100%;opacity:0}}@keyframes k-vA{0%,19.3%{opacity:0}21.4%,30.7%{opacity:1}32.9%,to{opacity:0}}@keyframes k-vB{0%,74.3%{opacity:0}76.4%,87.9%{opacity:1}90%,to{opacity:0}}@keyframes k-hl{0%{opacity:0}10%{opacity:0}12.1%{opacity:1}30.7%{opacity:1}32.9%{opacity:0}65%{opacity:0}67.1%{opacity:1}88.6%{opacity:1}90.7%{opacity:0}to{opacity:0}}@keyframes k-cd{0%{offset-distance:0%}to{offset-distance:100%}}@keyframes k-cdA{0%{offset-distance:0%;opacity:1}86%{opacity:1}to{offset-distance:100%;opacity:0}}@keyframes k-rg{0%{transform:scale(1);opacity:.75}to{transform:scale(1.75);opacity:0}}@keyframes k-fi{0%,38.6%{opacity:0}40.7%,60%{opacity:1}62.1%,to{opacity:0}}@keyframes k-sa{0%,10%{opacity:0}12.1%,30%{opacity:1}32.1%,to{opacity:0}}@keyframes k-sb{0%,65%{opacity:0}67.1%,87.9%{opacity:1}90%,to{opacity:0}}@keyframes k-sd1{0%,11.4%{offset-distance:0%;opacity:0}11.9%{offset-distance:0%;opacity:1}19.3%,20%{offset-distance:100%;opacity:1}20.7%,to{offset-distance:100%;opacity:0}}@keyframes k-sd2{0%,66.4%{offset-distance:0%;opacity:0}66.9%{offset-distance:0%;opacity:1}74.3%,75%{offset-distance:100%;opacity:1}75.7%,to{offset-distance:100%;opacity:0}}.k-wf{animation:k-wf 10s linear infinite backwards}.k-wp{animation:k-wp 10s linear infinite backwards}.k-ow{animation:k-ow 10s linear infinite}.k-lc1{animation:k-lc1 10s linear infinite}.k-lc2{animation:k-lc2 10s linear infinite}.k-lc3{animation:k-lc3 10s linear infinite}.k-lc4{animation:k-lc4 10s linear infinite}.k-lc5{animation:k-lc5 10s linear infinite}.k-lc6{animation:k-lc6 10s linear infinite}.k-lc7{animation:k-lc7 10s linear infinite}.k-lc8{animation:k-lc8 10s linear infinite}.k-lc9{animation:k-lc9 10s linear infinite}.k-lc10{animation:k-lc10 10s linear infinite}.k-fg{animation:k-fg 10s linear infinite}.k-st{animation:k-st 9s linear infinite}.k-sw0{animation:k-sw0 9s linear infinite}.k-sw1{animation:k-sw1 9s linear infinite}.k-sw2{animation:k-sw2 9s linear infinite}.k-sw3{animation:k-sw3 9s linear infinite}.k-sw4{animation:k-sw4 9s linear infinite}.k-sw5{animation:k-sw5 9s linear infinite}.k-t1{animation:k-t1 9s linear infinite}.k-t2{animation:k-t2 9s linear infinite}.k-c1{animation:k-c1 14s linear infinite}.k-c2{animation:k-c2 14s linear infinite}.k-li{animation:k-li 14s linear infinite}.k-lb{animation:k-lb 14s linear infinite}.k-so{animation:k-so 14s linear infinite}.k-sc{animation:k-sc 14s linear infinite}.k-s0{animation:k-s0 14s linear infinite}.k-s1{animation:k-s1 14s linear infinite}.k-fing{animation:k-fing 14s linear infinite}.k-vA{animation:k-vA 14s linear infinite}.k-vB{animation:k-vB 14s linear infinite}.k-hl{animation:k-hl 14s linear infinite}.k-cd{animation:k-cd 3s linear infinite}.k-cdA{animation:k-cdA 1.5s linear infinite}.k-rg{transform-box:fill-box;transform-origin:center;animation:k-rg 1.2s ease-out infinite}.k-fi{animation:k-fi 14s linear infinite}.k-sa{animation:k-sa 14s linear infinite}.k-sb{animation:k-sb 14s linear infinite}.k-sd1{animation:k-sd1 14s linear infinite}.k-sd2{animation:k-sd2 14s linear infinite}}
