:root{--carousel-inset:10%;color-scheme:light;--paper:#ffffff;--ink:#282330;--muted:#595360;--purple:#592380;--purple-dark:#41165f;--lavender:#ede6f2;--line:#ddd7df;--dark:#0a1520;--serif:Georgia,'Times New Roman',serif;--sans:Arial,Helvetica,sans-serif;scroll-behavior:smooth;scroll-padding-top:100px}
*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font:var(--type-4)/1.75 var(--sans);-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}a,button,summary{-webkit-tap-highlight-color:transparent}a:focus-visible,button:focus-visible,summary:focus-visible,video:focus-visible,[tabindex]:focus-visible{outline:3px solid #a373c4;outline-offset:5px}button,summary{cursor:pointer}button{font:inherit}img,video{display:block;width:100%;max-width:100%}video{background:var(--dark)}figure,dl,dd{margin:0}h1,h2,h3,h4,p{margin:0}p+p{margin-top:16px}[hidden]{display:none!important}.section-shell{width:min(1080px,calc(100% - 96px));margin-inline:auto}.reading-column{max-width:800px;margin:auto}.skip-link{position:absolute;top:-100px;left:16px;background:var(--paper);z-index:100;padding:10px 20px}.skip-link:focus{top:10px}.site-header{position:sticky;top:0;z-index:20;background:var(--paper);border-bottom:1px solid var(--line)}.nav-shell{max-width:1360px;padding:17px 40px;margin:auto;display:flex;justify-content:space-between;align-items:center;gap:24px}.wordmark{font:var(--type-4)/1 var(--serif);font-weight:bold;letter-spacing:-1.1px}.wordmark span{color:var(--purple)}.nav-links{display:flex;gap:30px;font-size:var(--type-4)}.nav-links a{padding-block:6px;color:var(--muted)}.nav-links a:hover,.nav-links a[aria-current]{color:var(--purple)}.eyebrow{text-transform:uppercase;letter-spacing:2px;font-size:var(--type-4);line-height:1.5;color:var(--muted);font-weight:600;display:block}.intro{padding-top:62px;text-align:center}.review-label{display:flex;gap:9px;align-items:center;justify-content:center}.review-label>span{width:6px;height:6px;background:var(--purple);border-radius:50%}h1{font:var(--type-4)/1.16 var(--serif);letter-spacing:-1.3px;max-width:1030px;margin:22px auto 20px;text-wrap:balance}h1>span{color:var(--purple);font-weight:bold}.authors{font:var(--type-4) var(--serif);color:var(--muted);margin-top:22px}.resource-links{display:flex;gap:10px;justify-content:center;flex-wrap:wrap;margin:26px 0 36px}.button{display:inline-flex;align-items:center;justify-content:center;gap:25px;min-height:45px;padding:10px 21px;border-radius:5px;font-size:var(--type-4);font-weight:600;line-height:1.5;transition:background .15s}.button-primary{background:var(--purple);color:#fff;border:1px solid var(--purple)}.button-primary:hover{background:var(--purple-dark)}.button-outline{border:1px solid #c8bbd2;color:var(--purple)}.button-outline:hover{background:var(--lavender)}.hero-figure{margin-top:8px}.video-frame{position:relative;border-radius:9px;background:var(--dark);isolation:isolate}.video-frame video{aspect-ratio:16/9;object-fit:contain;border-radius:inherit;transform:translateZ(0);backface-visibility:hidden}.tactile-video video{aspect-ratio:16/7}.video-label{pointer-events:none;position:absolute;z-index:1;color:#fff;background:#0a1520d9;border-radius:3px;padding:4px 8px;letter-spacing:.7px;font-size:var(--type-4);text-transform:uppercase;line-height:1.3}.scene-label{left:1.5%;top:3.5%}.left-label{left:64%;top:3.5%}.right-label{left:64%;top:53.5%}.light-video,.light-video video{background:#f7f8fa}figcaption{font-size:var(--type-4);color:var(--muted);margin-top:12px;text-align:center;line-height:1.6}.hero-statement{font:var(--type-4)/1.35 var(--serif);letter-spacing:-.5px;margin:36px auto 28px}.hero-statement em{font-style:normal;color:var(--purple)}.spec-strip{display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding-block:23px;gap:16px}.spec-strip dt{font:var(--type-4)/1.2 var(--serif);margin-bottom:8px}.spec-strip dd{font-size:var(--type-4);color:var(--muted)}.spec-strip>div+div{border-left:1px solid var(--line)}.cost-note{font-size:var(--type-4);color:var(--muted);text-align:right;margin-top:9px}.abstract{padding-block:56px 68px}.abstract h2{text-align:center;font-size:var(--type-4);margin-bottom:23px}.abstract p{font-size:var(--type-4);line-height:1.85}h2{font:var(--type-4)/1.19 var(--serif);letter-spacing:-.8px;text-wrap:balance}h3{font:var(--type-4)/1.25 var(--serif);letter-spacing:-.4px}h4{font:var(--type-4)/1.25 var(--serif)}.chapter{padding-block:70px;border-top:1px solid var(--line)}.section-heading .eyebrow{margin-bottom:15px}.section-deck{color:var(--muted);font-size:var(--type-4);margin-top:16px;max-width:760px}.sensor-layout{display:grid;grid-template-columns:.85fr 1.15fr;gap:55px;margin-top:40px;align-items:start}.sensor-copy{padding-top:54px}.sensor-copy p,.setup-layout p{font-size:var(--type-4);color:var(--muted);margin-top:18px;line-height:1.85}.dimensions{display:flex;gap:40px;margin-top:26px}.dimensions dt{font:var(--type-4) var(--serif)}.dimensions dd{font-size:var(--type-4);color:var(--muted);margin-top:4px}.tabs{display:none;gap:5px}.js .tabs{display:flex}.tabs button{border:none;background:transparent;color:var(--muted);padding:12px 16px;font-size:var(--type-4);border-radius:5px;line-height:1.3;min-height:44px}.tabs button[aria-selected=true]{color:var(--purple);background:var(--lavender);font-weight:600}.tabs button:hover{background:#efebf1}.sensor-gallery .tabs{margin-bottom:13px}.tab-panel+.tab-panel{margin-top:24px}.js .tab-panel+.tab-panel{margin-top:0}.step-number{font:var(--type-4) var(--sans);color:var(--purple);margin-bottom:10px;display:block}.task-section{background:var(--paper)}.task-tabs{margin-top:32px;margin-bottom:30px;padding-bottom:15px;border-bottom:1px solid #d9cedf;gap:10px}.task-tabs button{font-size:var(--type-4);padding:12px 20px}.task-tabs button[aria-selected=true]{background:var(--purple);color:#fff}.task-tabs button:hover:not([aria-selected=true]){background:#e5dce9}.tab-number{font-size:var(--type-4);margin-right:10px;opacity:.7}.task-intro{display:grid;grid-template-columns:1fr 180px;gap:40px;align-items:center;margin-bottom:24px}.task-intro p{max-width:740px;font-size:var(--type-4);color:var(--muted);margin-top:12px}.task-stat{padding-left:26px;border-left:1px solid #d2c4dc;display:flex;flex-direction:column}.task-stat>strong{font:var(--type-4)/1.1 var(--serif);color:var(--purple);letter-spacing:-1px}.task-stat>strong span{font-size:var(--type-4)}.task-stat>span{font-size:var(--type-4);line-height:1.6;color:var(--muted);margin-top:6px}.task-insight{display:grid;grid-template-columns:185px 1fr;gap:20px;margin-top:26px;font-size:var(--type-4);border-top:1px solid #d9cedf;padding-top:21px}.task-insight>span{font-weight:600;color:var(--purple)}.task-insight p{color:var(--muted)}.clip-controls{display:flex;gap:6px;align-items:center;margin-bottom:13px}.clip-controls>span{font-size:var(--type-4);color:var(--muted);margin-right:6px}.clip-controls button{min-width:38px;min-height:36px;border:1px solid #cfc0d9;border-radius:4px;background:transparent;font-size:var(--type-4);color:var(--purple)}.clip-controls button[aria-pressed=true]{background:var(--purple);color:#fff;border-color:var(--purple)}.salt-figure{background:#fff;padding:24px 18px 16px;border-radius:9px}.salt-figure img{height:auto;object-fit:contain}.salt-figure figcaption{color:#696270}.setup-layout{display:grid;grid-template-columns:1fr 1.05fr;gap:65px;align-items:center}.setup-layout h2{font-size:var(--type-4);margin-top:13px}.text-link{font-size:var(--type-4);color:var(--purple);border-bottom:1px solid #c4afd3;padding-bottom:3px}.setup-layout .text-link{display:inline-block;margin-top:22px}.results-layout{display:grid;grid-template-columns:.85fr 1.15fr;gap:80px;margin-top:45px}.big-result{font:var(--type-4)/1 var(--serif);letter-spacing:-3px;color:var(--purple)}.big-result span{font-size:var(--type-4)}.result-label{font:var(--type-4)/1.5 var(--serif);margin-top:10px!important}.result-context>p:not(.result-label){font-size:var(--type-4);color:var(--muted);margin-top:18px}.fine-print{font-size:var(--type-4)!important;line-height:1.8;color:var(--muted)}.bar-chart>figcaption{margin:0 0 25px;font-size:var(--type-4);text-align:left;color:var(--ink)}.bar-chart>figcaption>span{color:var(--muted)}.bar-row{margin:19px 0}.bar-heading{display:flex;justify-content:space-between;gap:10px;font-size:var(--type-4);margin-bottom:7px}.bar-heading strong{font-size:var(--type-4);font-variant-numeric:tabular-nums}.bar-track{background:#eae5ed;height:15px}.bar{background:#aaa0b2;height:100%}.ours .bar{background:var(--purple)}.bar-heading small{font-size:var(--type-4);text-transform:uppercase;letter-spacing:1px;color:var(--purple);margin-left:6px}.results-detail{margin-top:44px;border-top:1px solid var(--line);padding-top:20px}.results-detail summary,.limitations summary{font-size:var(--type-4);color:var(--ink);font-weight:600}.table-scroll{overflow-x:auto;margin-top:20px}table{border-collapse:collapse;width:100%;font-size:var(--type-4);min-width:590px;text-align:right;font-variant-numeric:tabular-nums}table caption{caption-side:bottom;text-align:left;color:var(--muted);font-size:var(--type-4);padding:12px 0 4px}th,td{padding:13px 14px;border-bottom:1px solid var(--line)}thead th{font-weight:400;color:var(--muted);font-size:var(--type-4)}th:first-child{text-align:left;padding-left:0}tbody th{font-weight:400}.ours-row{color:var(--purple)}.ours-row th{font-weight:600}.results-detail>.fine-print{margin-top:9px}.limitations{margin-top:25px;border-top:1px solid var(--line);padding-top:20px}.limitations p{font-size:var(--type-4);color:var(--muted);margin-top:15px;max-width:800px}.resource-section{padding:54px 0;background:#ede6f2;border-top:1px solid #e0d6e6}.resource-layout{display:flex;align-items:center;justify-content:space-between;gap:35px}.resource-layout h2{font-size:var(--type-4);margin-top:12px}.resource-layout p{font-size:var(--type-4);color:var(--muted);margin-top:13px}.resource-layout .button{flex-shrink:0}.site-footer{padding-block:30px;display:flex;align-items:center;justify-content:space-between;gap:20px}.site-footer .wordmark{font-size:var(--type-4)}.site-footer p{font-size:var(--type-4);color:var(--muted)}.site-footer .text-link{font-size:var(--type-4)}.noscript-note{font-size:var(--type-4);color:var(--muted)}
@media(min-width:1600px){.section-shell{width:min(1140px,calc(100% - 100px))}.intro{padding-top:75px}}
@media(max-width:900px){.section-shell{width:calc(100% - 56px)}.nav-shell{padding:15px 28px}.sensor-layout{gap:30px;grid-template-columns:1fr 1.15fr}.sensor-copy{padding-top:20px}.sensor-copy h3{font-size:var(--type-4)}.sensor-copy p{font-size:var(--type-4)}.dimensions{gap:20px}.dimensions dt{font-size:var(--type-4)}.tabs button{padding:11px 12px}.setup-layout{gap:35px}.results-layout{gap:40px}.task-tabs button{padding:12px 15px}.task-intro{grid-template-columns:1fr 140px;gap:22px}h2{font-size:var(--type-4)}.hero-statement{font-size:var(--type-4)}.spec-strip dt{font-size:var(--type-4)}}
@media(max-width:640px){:root{scroll-padding-top:125px}.section-shell{width:calc(100% - 36px)}.nav-shell{padding:14px 18px;gap:12px;flex-wrap:wrap}.wordmark{font-size:var(--type-4)}.nav-links{gap:15px;font-size:var(--type-4)}.intro{padding-top:35px}h1{font-size:var(--type-4);line-height:1.14;letter-spacing:-.9px;margin-top:18px}.review-label{font-size:var(--type-4);letter-spacing:1.7px}.authors{font-size:var(--type-4)}.resource-links{margin:23px 0 27px;gap:8px}.button{padding:10px 15px;font-size:var(--type-4);gap:17px}.video-frame{border-radius:6px}.video-label{font-size:var(--type-4);letter-spacing:0;padding:3px 4px}.hero-figure figcaption{font-size:var(--type-4)}.hero-statement{font-size:var(--type-4);margin:28px auto 22px}.spec-strip{gap:7px;padding-block:20px}.spec-strip dt{font-size:var(--type-4);white-space:nowrap}.spec-strip dd{font-size:var(--type-4);line-height:1.6;padding-inline:4px}.cost-note{font-size:var(--type-4)}.abstract{padding-block:38px 45px}.abstract p{font-size:var(--type-4)}.chapter{padding-block:44px}h2{font-size:var(--type-4)}.section-deck{font-size:var(--type-4)}.sensor-layout,.setup-layout{grid-template-columns:1fr;gap:30px;margin-top:27px}.sensor-copy{padding:0}.sensor-copy h3{font-size:var(--type-4)}.sensor-copy p{font-size:var(--type-4)}.sensor-gallery .tabs{gap:7px}.dimensions{gap:35px;margin-top:20px}.task-tabs{flex-wrap:wrap;gap:6px;margin-top:25px;margin-bottom:24px}.task-tabs button{font-size:var(--type-4);padding:10px 11px}.tab-number{margin-right:5px}.task-intro{grid-template-columns:1fr;gap:16px}.task-intro h3{font-size:var(--type-4)}.task-intro p{font-size:var(--type-4)}.task-stat{flex-direction:row;align-items:center;gap:15px;border-left:0;padding:0}.task-stat>strong{font-size:var(--type-4)}.task-stat>span{font-size:var(--type-4);margin:0}.task-stat>span br{display:none}.task-stat>span br:after{content:' '}.task-insight{grid-template-columns:1fr;gap:7px;margin-top:19px;padding-top:16px;font-size:var(--type-4)}.salt-figure{padding:12px 6px}.salt-figure figcaption{font-size:var(--type-4)}.setup-layout{margin-top:0}.setup-layout h2{font-size:var(--type-4)}.results-layout{grid-template-columns:1fr;gap:25px;margin-top:30px}.big-result{font-size:var(--type-4)}.result-context p{max-width:480px}.bar-chart>figcaption{margin-bottom:17px}.bar-heading{font-size:var(--type-4)}.results-detail{margin-top:25px}.resource-section{padding-block:35px}.resource-layout{align-items:flex-start;flex-direction:column;gap:23px}.resource-layout h2{font-size:var(--type-4)}.site-footer{flex-wrap:wrap;padding-block:25px;gap:16px}.site-footer p{font-size:var(--type-4)}.site-footer .text-link{margin-left:auto}}
@media(max-width:380px){.nav-shell{justify-content:center}.nav-links{width:100%;justify-content:space-between;gap:10px}h1{font-size:var(--type-4)}.spec-strip dt{font-size:var(--type-4)}.resource-links .button{gap:12px}.video-label{font-size:var(--type-4)}.task-tabs{gap:4px}.task-tabs button{padding-inline:8px}}
@media(prefers-reduced-motion:reduce){:root{scroll-behavior:auto}*,*::before,*::after{transition:none!important}}
@media print{.site-header,.resource-links,.video-label,.tabs,.clip-controls,.site-footer{display:none!important}.section-shell{width:100%}.chapter{padding:25px 0}.tab-panel[hidden]{display:block!important}.video-frame{break-inside:avoid}.intro{padding-top:0}body{background:#fff}}

/* Four-rollout teaser: full external camera beside tightly cropped tactile fields. */
.hero-figure .teaser-video video{aspect-ratio:209/75}.hero-figure figcaption strong{font-weight:600;color:var(--ink)}

/* Characterization figure supplied with the updated sensor media. */
.signal-figure{max-width:900px;margin:32px auto 0;padding:22px;background:#fff;border:1px solid var(--line);border-radius:9px}.signal-figure img{height:auto}.signal-figure figcaption{max-width:700px;margin:14px auto 0}.light-video video{aspect-ratio:1540/884}
@media(max-width:640px){.spec-strip dt{font-size:var(--type-4);white-space:normal}.signal-figure{padding:12px}.cost-note{text-align:center}}

/* Three-axis field construction: the three steps beside Fig. 2(d). */
.field-construction{display:grid;grid-template-columns:.85fr 1.15fr;gap:55px;align-items:center;margin-top:45px;border-top:1px solid var(--line);padding-top:36px}
.field-steps{list-style:none;margin:0;padding:0;display:grid;gap:22px}.field-steps li{display:grid;grid-template-columns:34px 1fr;column-gap:12px}.field-steps .step-number{grid-row:1/3;margin:0;padding-top:4px}.field-steps p{grid-column:2;font-size:var(--type-4);line-height:1.8;color:var(--muted);margin-top:6px;max-width:300px}
.field-figure{background:#fff;border:1px solid var(--line);border-radius:9px;padding:26px 24px}.field-figure img{height:auto}
@media(max-width:900px){.field-construction{gap:30px;grid-template-columns:1fr 1.15fr}.field-figure{padding:16px 14px}}
@media(max-width:640px){.field-construction{grid-template-columns:1fr;gap:24px;margin-top:29px;padding-top:24px}.field-steps{gap:16px}.field-steps p{max-width:none}.field-figure{padding:12px 10px}}

/* Each task has an independent, manually controlled video carousel. */
.failure-section{background:var(--paper)}.failure-carousel{margin-top:0}.carousel-window{position:relative}.carousel-track{position:relative;display:flex;gap:24px;overflow-x:auto;scroll-snap-type:x mandatory;scroll-padding-inline:var(--carousel-inset);padding:12px var(--carousel-inset) 18px;scrollbar-width:none;overscroll-behavior-x:contain}.carousel-track::-webkit-scrollbar{display:none}.carousel-slide{flex:0 0 100%;min-width:0;scroll-snap-align:center;background:#fff;border-radius:13px;padding:10px;box-shadow:0 5px 18px #28233012;transition:opacity .2s;opacity:.5}.carousel-slide.is-current{opacity:1}.carousel-slide .video-frame{background:#fff}.carousel-slide video{aspect-ratio:16/9}.carousel-arrow{display:none;position:absolute;top:50%;transform:translateY(-50%);z-index:2;width:42px;height:42px;border:0;border-radius:50%;background:#282330b8;color:white;font:var(--type-4)/1 Georgia,serif;align-items:center;justify-content:center}.js .carousel-arrow{display:flex}.carousel-prev{left:1%}.carousel-next{right:1%}.carousel-arrow:disabled{opacity:.25;cursor:default}.carousel-dots{display:none;justify-content:center;gap:5px;margin-top:3px}.js .carousel-dots{display:flex}.carousel-dots button{border:0;background:transparent;width:30px;height:34px;padding:0;display:grid;place-items:center}.carousel-dots button::after{content:'';width:10px;height:10px;border-radius:50%;background:#bbb6bd}.carousel-dots button[aria-current=true]::after{background:var(--purple)}html:not(.js) .carousel-slide{opacity:1}
@media(max-width:640px){:root{--carousel-inset:6%}.nav-links{gap:11px}.carousel-track{gap:12px;padding-inline:var(--carousel-inset);scroll-padding-inline:var(--carousel-inset)}.carousel-slide{padding:5px;border-radius:9px}.carousel-arrow{width:32px;height:32px;font-size:var(--type-4)}.carousel-prev{left:0}.carousel-next{right:0}}
@media(prefers-reduced-motion:reduce){.carousel-slide{transition:none}}

.hero-figure #teaser-caption{font-size:var(--type-4);color:var(--ink);margin-top:12px}

/* Hardware overview: all four media visible in reading order. */
.sensor-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:32px 28px;margin-top:36px}
.sensor-card{min-width:0}
.sensor-grid .video-frame,.sensor-image{aspect-ratio:16/9;border-radius:9px;overflow:hidden}
.sensor-grid .video-frame video{width:100%;height:100%;aspect-ratio:16/9;object-fit:contain}
.sensor-image{display:flex;align-items:center;justify-content:center;background:#fff;border:1px solid var(--line);padding:16px}
.sensor-image img{width:100%;height:100%;object-fit:contain}
.sensor-card figcaption{color:var(--muted);font-size:var(--type-4);line-height:1.6;margin-top:12px}
@media(max-width:640px){.sensor-grid{grid-template-columns:1fr;gap:26px;margin-top:27px}.sensor-image{padding:12px}}

#sensor{scroll-margin-top:70px}

.characterization-section{padding-bottom:70px;scroll-margin-top:90px}
.characterization-section .signal-figure{width:100%;max-width:none;margin:0;padding:0;border:0;background:transparent}
.characterization-section .signal-figure img{width:100%;height:auto}
@media(max-width:640px){.characterization-section{padding-bottom:44px}}

/* Group hardware construction separately from signal interpretation. */
.sensor-group{margin-top:38px}
.sensor-group h3{font-family:var(--sans);font-size:var(--type-4);font-weight:600;line-height:1.4;letter-spacing:0}
.sensor-group .sensor-grid{margin-top:22px}
.sensor-group+.sensor-group{margin-top:48px;padding-top:34px;border-top:1px solid var(--line)}
@media(max-width:640px){.sensor-group{margin-top:30px}.sensor-group h3{font-size:var(--type-4)}.sensor-group .sensor-grid{margin-top:18px}.sensor-group+.sensor-group{margin-top:36px;padding-top:28px}}

/* Keep the hardware heading and its supporting line together. */
#sensor .section-heading .eyebrow{margin-bottom:12px}
#sensor .section-heading h2{line-height:1.12}
#sensor .section-deck{margin-top:8px;line-height:1.5}

/* Compact sensor mark beside the paper name. */
.paper-brand{white-space:nowrap}
.paper-title-logo{display:inline-block;width:.95em;height:.95em;object-fit:contain;vertical-align:-.12em;margin-right:8px}
@media(max-width:640px){.paper-title-logo{margin-right:6px}}

/* Sequential capability experiments. */
.capability-task{margin-top:42px;scroll-margin-top:90px}
.capability-task+.capability-task{margin-top:52px;padding-top:40px;border-top:1px solid #d9cedf}
.capability-task .task-intro{grid-template-columns:minmax(0,1fr) 190px;gap:36px;margin-bottom:24px}
.capability-task .step-number{margin-bottom:8px}
.capability-task h3{font-family:var(--sans);font-size:var(--type-4);font-weight:600;letter-spacing:-.3px;line-height:1.3}
.capability-task .task-intro p{max-width:710px;margin-top:10px}
@media(max-width:640px){.capability-task{margin-top:30px}.capability-task+.capability-task{margin-top:36px;padding-top:28px}.capability-task .task-intro{grid-template-columns:1fr;gap:16px}.capability-task h3{font-size:var(--type-4)}}

.hardware-interactive{margin:30px 0 46px}.interactive-heading{margin-bottom:18px}.interactive-heading h3{font:600 var(--type-4)/1.4 var(--sans);letter-spacing:0}.interactive-heading p{font-size:var(--type-4);color:var(--muted);margin-top:7px}#touch-interactive{display:block;width:100%;border:0;height:1000px}@media(max-width:640px){.hardware-interactive{margin:26px 0 34px}.interactive-heading h3{font-size:var(--type-4)}}

/* Full-width task navigation for failure cases. */
.js #failures .task-tabs{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;width:100%;margin:28px 0 26px}
#failures .task-tabs button{display:flex;align-items:center;justify-content:center;gap:10px;text-align:center;cursor:pointer;min-width:0;min-height:78px;padding:20px 16px;border:2px solid #c1a9d0;background:#eee8f2;color:var(--purple);font-size:var(--type-4);font-weight:700;border-radius:9px;box-shadow:0 3px 0 #d6cbdc;transition:background .15s,border-color .15s,box-shadow .15s,transform .15s}
#failures .task-tabs button:hover{background:#e3d8eb;border-color:var(--purple);transform:translateY(-2px);box-shadow:0 5px 0 #d6cbdc}
#failures .task-tabs button[aria-selected=true]{background:var(--purple);border-color:var(--purple);color:#fff}
#failures .tab-number{font-size:var(--type-4);margin:0;opacity:.75}
#failures .task-tabs button:active{transform:translateY(2px);box-shadow:0 1px 0 #d6cbdc}
@media(max-width:640px){.js #failures .task-tabs{gap:8px;margin:24px 0}#failures .task-tabs button{flex-direction:column;gap:5px;padding:14px 8px;min-height:88px;font-size:var(--type-4)}#failures .tab-number{display:block;margin:0;font-size:var(--type-4)}}

.collection-video{margin-top:30px}.collection-video figcaption{margin-top:20px;text-align:center}.collection-video figcaption strong{display:block;font:600 var(--type-4)/1.45 var(--sans);color:var(--ink)}.collection-video figcaption span{display:block;margin-top:7px;font-size:var(--type-4);color:var(--muted)}
@media(max-width:640px){.collection-video{margin-top:24px}.collection-video figcaption strong{font-size:var(--type-4)}.collection-video figcaption span{font-size:var(--type-4)}}

/* Paper authors and affiliations. */
.author-block{max-width:1000px;margin:20px auto 0}
.author-block .authors{display:flex;justify-content:center;flex-wrap:wrap;gap:6px 18px;margin:0;color:var(--ink);font-size:var(--type-4);line-height:1.5}
.authors>span{white-space:nowrap}
.author-block sup{font-size:.65em;line-height:0;vertical-align:super;margin-left:2px;color:var(--purple)}
.affiliations{display:flex;justify-content:center;flex-wrap:wrap;gap:5px 22px;margin:12px auto 0;max-width:880px;font-size:var(--type-4);line-height:1.7;color:var(--muted)}
.author-notes{display:flex;justify-content:center;gap:22px;margin-top:12px;font-size:var(--type-4);color:var(--muted)}
@media(max-width:640px){.author-block .authors{font-size:var(--type-4);gap:6px 14px}.affiliations{font-size:var(--type-4);gap:4px 16px}.author-notes{font-size:var(--type-4);gap:18px}}

.author-block .author-row-break{flex-basis:100%;height:0}

/* Semantic typography: one size per level, shared with the touch interface. */
h1{font-size:var(--type-1);line-height:1.16}
h2,.abstract h2,.setup-layout h2,.resource-layout h2{font-size:var(--type-2);line-height:1.25}
h3,h4,.sensor-copy h3,.task-intro h3,.sensor-group h3,.capability-task h3,.interactive-heading h3{font:600 var(--type-3)/1.4 var(--sans);letter-spacing:0}
.hero-statement,.spec-strip dt,.dimensions dt,.result-label,.wordmark,.site-footer .wordmark{font-size:var(--type-3);line-height:1.4;letter-spacing:0}
.task-stat>strong,.big-result{font-size:var(--type-2);line-height:1.25;letter-spacing:0}
.task-stat>strong span,.big-result span{font-size:inherit}
.author-block .authors{font-family:var(--sans)}
body{line-height:1.7}.abstract p{line-height:1.8}
#sensor .section-heading h2{line-height:1.25}
.eyebrow{letter-spacing:1px}.nav-links{flex-wrap:wrap;justify-content:flex-end}
.spec-strip>div{min-width:0}.spec-strip dd{overflow-wrap:break-word}
#failures .task-tabs button{line-height:1.5;overflow-wrap:normal}
@media(max-width:640px){.spec-strip{grid-template-columns:1fr;gap:18px}.spec-strip>div+div{border-left:0}.nav-links{justify-content:center}.nav-shell{justify-content:center}.task-stat>span br{display:none}}

/* Center numbered chapter titles; keep supporting text compact. */
.section-heading{text-align:center}
.section-heading .section-deck{margin-inline:auto}
body{line-height:1.6}
.abstract p,.sensor-copy p,.setup-layout p{line-height:1.65}
figcaption,.sensor-card figcaption,.affiliations,.fine-print{line-height:1.5}
.author-block .authors{line-height:1.4;gap:4px 16px}
.author-notes{line-height:1.5}

h1#paper-title{text-wrap:initial}


#paper-title .paper-title-line{display:block;white-space:nowrap;color:var(--ink);font-weight:400}
#paper-title .paper-brand{color:var(--purple);font-weight:bold}
@media(max-width:640px){#paper-title .paper-title-line{display:inline;white-space:normal}}

.intro .hero-figure{margin-top:40px}
.teaser-intro{display:block;font:600 var(--type-3)/1.4 var(--sans);margin:0;text-align:center;text-wrap:pretty}
.teaser-demo-label{display:block;margin-top:8px;font-size:var(--type-4);color:var(--muted)}
@media(max-width:640px){.intro .hero-figure{margin-top:32px}.teaser-intro{margin-bottom:0}}

.hardware-overview{text-align:center}
.hardware-overview .spec-strip p{font:400 var(--type-3)/1.4 var(--serif)}
#sensor>.hardware-interactive{margin:48px 0 0;padding-top:34px;border-top:1px solid var(--line)}
@media(max-width:640px){#sensor>.hardware-interactive{margin-top:36px;padding-top:28px}}

.hardware-overview .hero-statement{margin:28px auto 10px}
.hardware-specs{display:flex;flex-wrap:wrap;justify-content:center;gap:6px 0;margin:0;color:var(--muted);font-size:var(--type-4);line-height:1.6}
.hardware-specs span{white-space:nowrap}
.hardware-specs span+span::before{content:'·';display:inline-block;margin:0 16px;color:var(--muted)}

/* HTML labels aligned with the teaser's two equal-width panels. */
.teaser-panel-labels{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:10px;font-size:var(--type-4);line-height:1.5;color:var(--muted);text-align:center}
.teaser-panel-labels>span{min-width:0}

.capability-task .task-intro p{font-weight:600}

/* Let task descriptions use the available width beside the percentage. */
.capability-task .task-intro{grid-template-columns:minmax(0,1fr) auto;gap:24px}
.capability-task .task-intro p{max-width:none}
.capability-task .task-stat{padding-left:24px}
@media(max-width:640px){.capability-task .task-intro{grid-template-columns:1fr;gap:16px}.capability-task .task-stat{padding-left:0}}

/* Navigation behavior follows the Patch Policy reference. */
.site-header{background:var(--paper);border-top:1px solid var(--purple);border-bottom:0}
.site-header .nav-shell{max-width:none;justify-content:flex-start;gap:24px;padding:8px 12px;min-height:64px}
.site-header .wordmark{font-size:var(--type-2);font-weight:400;white-space:nowrap}
.site-header .nav-links{font:400 var(--type-3)/1.4 var(--serif);justify-content:flex-start;gap:0}
.site-header .nav-links a{padding:8px 12px}
.site-header .nav-links a:hover{background:#5923800d;color:var(--purple)}
.nav-toggle{display:none}
@media(max-width:1024px){
 .site-header .nav-shell{flex-wrap:wrap;justify-content:space-between;gap:0}
 .nav-toggle{display:flex;flex-direction:column;justify-content:center;gap:5px;width:44px;height:44px;padding:12px;border:0;background:transparent;color:var(--ink)}
 .nav-toggle span{display:block;width:20px;height:1px;background:currentColor}
 .site-header .nav-links{display:none;width:100%;flex-direction:column;font-size:var(--type-4);padding:8px 0}
 .site-header .nav-links.is-open{display:flex}
}

/* Reserve a desktop gutter for the expanded section-navigation label. */
@media(min-width:1025px){
 main>.section-shell,main>section>.section-shell{width:min(1080px,calc(100% - 360px));margin-inline:auto}
 #paper-title{font-size:clamp(28px,3vw,46px)}
}

/* Match the full failure-carousel viewport width. */
#results .results-layout{display:block;width:100%;margin:36px auto 0}

.failure-description{font:600 var(--type-4)/1.6 var(--sans);color:var(--muted);margin:14px 8px 8px;text-align:left}

.collection-video h3{margin:0 0 16px;text-align:left}
.collection-video figcaption{font:600 var(--type-4)/1.6 var(--sans);text-align:left;color:var(--muted)}

.collection-sound-note{font:400 var(--type-4)/1.6 var(--sans);color:var(--muted)}

.hardware-overview .hero-statement{font:600 var(--type-4)/1.6 var(--sans);letter-spacing:0;color:var(--muted);margin:12px auto 10px}

/* Supporting labels stay smaller than the main explanatory text. */
.author-block .authors,.affiliations,.author-notes,.teaser-panel-labels,.teaser-demo-label,
.section-deck,.collection-sound-note,.sensor-card figcaption,.signal-figure figcaption,
.bar-chart>figcaption,.bar-heading,.bar-heading strong,.bar-heading small,
#failures .task-tabs button,#failures .tab-number,.site-footer p{font-size:var(--type-5)}

/* Give capability task titles more prominence above their descriptions. */
.capability-task h3{font-size:28px;line-height:1.35}
@media(max-width:640px){.capability-task h3{font-size:26px}}

/* Compact multiline video descriptions while retaining their reading size. */
.collection-video figcaption,.capability-task .task-intro p,.failure-description{line-height:1.4}

/* Align prose with the media and chart it introduces. */
.abstract .reading-column{width:100%;max-width:none}
#results .section-deck{width:100%;max-width:none;color:var(--ink);text-align:left;line-height:1.4;margin:24px auto 0;font-size:var(--type-5)}
#results .results-layout{margin-top:24px}

#results .bar-chart>figcaption,#results .bar-heading,#results .bar-heading strong,#results .bar-heading small{font-size:var(--type-4)}

#results .bar-chart>figcaption,#results .bar-heading,#results .bar-heading strong,#results .bar-heading small{font-weight:600}

/* Restore the original serif introduction and separated specification columns. */
.hardware-overview .hero-statement{font:400 var(--type-3)/1.4 var(--serif);color:var(--ink);margin:12px auto 20px}
.hardware-overview .hero-statement em{font-style:normal;color:var(--purple)}
.hardware-specs{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0;padding-block:20px;border-block:1px solid var(--line);font:400 var(--type-4)/1.4 var(--serif);color:var(--ink)}
.hardware-specs span{padding-inline:12px;white-space:normal}
.hardware-specs span+span{border-left:1px solid var(--line)}
.hardware-specs span+span::before{content:none}
@media(max-width:640px){.hardware-specs{padding-block:16px}.hardware-specs span{padding-inline:8px}}

/* Reference-style persistent table of contents. */
.page-toc{position:fixed;left:26px;top:50%;transform:translateY(-50%);width:252px;max-height:calc(100dvh - 120px);overflow:auto;z-index:25;font:400 var(--type-5)/1.4 var(--sans);color:var(--muted);padding:6px 8px 6px 4px;scrollbar-width:thin}
.toc-heading{font:600 var(--type-5)/1.4 var(--sans);letter-spacing:0;color:var(--muted);margin:0 0 16px 20px}
.page-toc ul{list-style:none;margin:0;padding:0}
.page-toc .toc-sections{border-left:1px solid var(--line)}
.toc-sections>li{position:relative;padding:0 0 4px 18px}
.toc-sections>li>a::before{content:"";position:absolute;left:-4px;top:14px;width:7px;height:7px;box-sizing:border-box;border:1.5px solid var(--line);border-radius:50%;background:var(--paper);transition:background .2s,box-shadow .2s}
.page-toc a{display:block;padding:5px 0;transition:color .2s;color:var(--muted)}
.page-toc a:hover{color:var(--ink)}
.toc-sections>li.is-active>a{color:var(--ink);font-weight:600}
.toc-sections>li>a[aria-current]::before{background:var(--purple);border-color:var(--purple);box-shadow:0 0 0 3px #59238024;width:9px;height:9px;left:-5px;top:13px}
.toc-sections>li>ul{display:block;margin:0 0 5px 0}
.toc-sections ul li{padding-left:14px;position:relative}
.toc-sections ul li::before{content:"";position:absolute;left:2px;top:16px;width:4px;height:4px;border-radius:50%;background:#aaa0b4}
.toc-sections ul a{color:var(--muted);font-size:var(--type-5);line-height:1.4}
.page-toc a[aria-current]{color:var(--ink);font-weight:600}
.toc-sections ul a[aria-current]{text-decoration:underline;text-decoration-color:var(--purple);text-decoration-thickness:1.5px;text-underline-offset:4px}
.toc-sections ul li:has(a[aria-current])::before{background:var(--purple);width:6px;height:6px;left:1px;top:15px}
.toc-toggle{display:none}
#hardware-build,#hardware-feedback,#interactive-title,.capability-task{scroll-margin-top:10px}
@media(min-width:1541px){main>.section-shell,main>section>.section-shell{width:min(1080px,calc(100% - 580px))}}
@media(max-width:1540px),(max-height:700px){
 .toc-toggle{display:flex;position:fixed;left:14px;top:50%;transform:translateY(-50%);z-index:31;width:40px;height:40px;align-items:center;justify-content:center;border:1px solid var(--line);border-radius:50%;padding:0;background:#fffffff0;color:var(--purple);box-shadow:0 3px 12px #28233012;transition:left .25s}
 .toc-toggle[aria-expanded="true"]{left:290px}
 .toc-toggle[aria-expanded="true"] svg{transform:rotate(180deg)}
 .page-toc{left:14px;width:264px;max-height:calc(100dvh - 130px);background:#fffffff5;border:1px solid var(--line);border-radius:12px;padding:18px 12px;box-shadow:0 18px 42px -22px #28233060;transform:translate(-120%,-50%);visibility:hidden;transition:transform .25s,visibility .25s;z-index:30}
 .page-toc.is-open{visibility:visible;transform:translate(0,-50%)}
}
@media(prefers-reduced-motion:reduce){.page-toc,.toc-toggle{transition:none}}

.bonus-video{margin-top:30px}
.bonus-video figcaption{font:400 var(--type-4)/1.65 var(--sans);color:var(--ink);text-align:left;margin-top:20px}

/* Compact publication resources, beneath the author block. */
.paper-resources{display:flex;flex-wrap:wrap;justify-content:center;gap:10px;margin:24px auto 0}
.paper-resource{display:inline-flex;align-items:center;justify-content:center;gap:9px;min-height:44px;padding:8px 20px;border:1px solid #363636;border-radius:999px;background:#363636;color:#fff;font:500 var(--type-5)/1.4 var(--sans);white-space:nowrap;text-decoration:none;transition:background .15s,border-color .15s}
.paper-resource svg{width:19px;height:19px;flex:0 0 19px}
.paper-resource[href]:hover{background:var(--purple);border-color:var(--purple)}
.paper-resource[aria-disabled="true"]{cursor:default}
.paper-resources-note{margin:9px 0 0;color:var(--muted);font:400 var(--type-5)/1.4 var(--sans);text-align:center}
@media(max-width:640px){.paper-resources{gap:8px;margin-top:20px}.paper-resource{padding:8px 15px}}

.paper-resource .ai{font-size:19px;line-height:1;width:19px;text-align:center}

#bibtex .section-heading{text-align:left;margin-bottom:24px}
#bibtex .section-heading h2{font:600 32px/1.125 var(--sans);color:#363636;text-align:left}
.bibtex-code{margin:0;padding:20px 24px;border:0;border-radius:0;background:#f5f5f5;color:#4a4a4a;font:400 14px/1.5 monospace;white-space:pre-wrap;overflow-wrap:anywhere;text-align:left}
.bibtex-code code{font:inherit}
@media(max-width:640px){.bibtex-code{padding:20px}}

/* White, continuous page background and a more prominent teaser description. */
.teaser-intro{font-size:28px}
.teaser-demo-label{font-size:var(--type-4)}
@media(max-width:640px){.teaser-intro{font-size:24px}}
