:root{--bg:#0e1116;--panel:#12161d;--card:#171c25;--ink:#edeff2;--muted:#a6aebb;--line:#2b3340;--cyan:#23d8ea;--orange:#ff9551;--accent:var(--cyan)}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:90px}body{margin:0;color:var(--ink);background:var(--bg);font:16px/1.65 'Space Grotesk',Arial,sans-serif;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}a:hover{color:var(--cyan)}a:focus-visible,button:focus-visible{outline:3px solid var(--orange);outline-offset:5px}::selection{background:var(--cyan);color:var(--bg)}header,main,footer{max-width:1180px;margin:auto}header{position:sticky;top:0;z-index:5;display:flex;justify-content:space-between;align-items:center;padding:18px 30px;background:rgba(14,17,22,.92);backdrop-filter:blur(14px);border-bottom:1px solid var(--line);gap:20px}.brand{font-size:14px;font-weight:700;letter-spacing:.02em}.brand-mark{color:var(--cyan);font-size:22px;margin-left:12px}nav{display:flex;gap:28px;align-items:center;font-size:14px;color:#c5cad3}.nav-paper{border:1px solid var(--line);border-radius:8px;padding:6px 15px}.hero{position:relative;text-align:center;padding:85px 30px 55px;background:radial-gradient(ellipse at 36% 20%,#23d8ea12,transparent 50%),radial-gradient(ellipse at 73% 45%,#ff95510b,transparent 50%)}.eyebrow,.section-label{font:12px/1.5 'IBM Plex Mono',monospace;letter-spacing:.16em;font-weight:500}.eyebrow{color:var(--muted);margin-bottom:32px}.eyebrow span{margin:0 13px;color:#626d7e}h1{font-size:clamp(76px,10vw,126px);letter-spacing:-.055em;line-height:1.02;margin:0 0 26px;font-weight:600}h1 span{color:var(--cyan)}.hero h2{font-size:25px;line-height:1.45;letter-spacing:-.025em;max-width:760px;margin:0 auto;color:#c5cad3;font-weight:500}.hero-tag{color:var(--orange);font-size:18px;margin:20px 0 0}.actions{display:flex;justify-content:center;gap:13px;margin-top:30px}.button{display:inline-flex;background:var(--cyan);color:#04161a;padding:12px 22px;gap:22px;align-items:center;font-size:15px;border:1px solid var(--cyan);border-radius:9px;font-weight:600;transition:transform .2s,box-shadow .2s}.button:hover{color:#04161a;transform:translateY(-2px);box-shadow:0 8px 25px -10px #23d8ea80}.button.secondary{background:var(--card);border-color:var(--line);color:var(--ink)}.button.secondary:hover{border-color:var(--cyan);color:var(--cyan)}.lineage{font-size:14px;margin:24px 0 0}.lineage a{color:var(--cyan)}.metrics{margin:0 30px;display:grid;grid-template-columns:repeat(3,1fr);background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:28px 0;gap:0;text-align:center}.metrics>div{padding:4px 18px}.metrics>div+div{border-left:1px solid var(--line)}.metrics strong{font-size:62px;line-height:1.15;font-weight:500;letter-spacing:-.06em;color:var(--cyan)}.metrics>div:nth-child(2) strong{color:var(--orange)}.metrics strong span{font-size:32px}.metrics p{margin:12px 0 4px;color:var(--ink);font-size:15px;font-weight:500}.metrics small{font-size:13px;color:var(--muted)}.teaser{margin:55px 30px 0}.figure-top{display:flex;justify-content:space-between;font:12px/1.5 'IBM Plex Mono',monospace;letter-spacing:.06em;padding:0 0 18px;color:var(--muted)}.figure-top span:first-child{color:var(--orange)}.teaser>a{display:block;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:white;padding:18px}.teaser img{width:100%;height:auto;display:block}figcaption{font-size:14px;color:var(--muted);padding:17px 0;max-width:980px}.section{margin:0 30px;padding:80px 0;border-bottom:1px solid var(--line);display:grid;grid-template-columns:1fr 2.7fr;gap:35px}.section-label{padding-top:8px;color:var(--cyan)}h2{font-size:42px;font-weight:600;line-height:1.15;letter-spacing:-.035em;margin:0 0 24px}.lead{font-size:19px;line-height:1.75;color:#c5cad3}p{color:var(--muted)}.goal{border:1px solid var(--line);border-left:3px solid var(--cyan);border-radius:0 8px 8px 0;background:var(--panel);padding:20px 24px;margin-top:30px}.goal span{display:block;font:12px 'IBM Plex Mono',monospace;letter-spacing:.1em;color:var(--muted);margin-bottom:10px}.goal strong{font-size:23px;font-weight:500}.goal i{font-style:normal;color:var(--orange);padding:0 12px}.steps{grid-column:1/-1;display:grid;grid-template-columns:repeat(3,1fr);gap:20px}.steps article{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:24px;display:flex;flex-direction:column}.step-number{font:14px 'IBM Plex Mono',monospace;color:var(--cyan)}.steps article:nth-child(2) .step-number{color:var(--orange)}.steps h3{font-size:23px;margin:22px 0 4px;letter-spacing:-.03em}.steps h4{font-size:15px;font-weight:400;margin:0;color:#c5cad3}.steps p{font-size:16px}.step-detail{font-size:14px;font-weight:500;margin-top:auto;padding-top:15px;color:var(--cyan)}.steps article:nth-child(2) .step-detail{color:var(--orange)}.method-figure{grid-column:1/-1;margin:8px 0 0;overflow:hidden}.method-figure>a{display:block;background:white;padding:25px;border:1px solid var(--line);border-radius:12px}.method-figure img{width:100%;height:auto;display:block}.footnote{font-size:13px;line-height:1.7;margin:0;color:var(--muted)}.method>.footnote{grid-column:1/-1}.results{margin:0 30px;padding:70px 0;border-bottom:1px solid var(--line)}.result-heading{display:flex;justify-content:space-between;gap:80px;margin-top:24px}.result-heading p{max-width:365px;font-size:17px}.controls{display:flex;gap:8px;margin-top:24px;flex-wrap:wrap}.controls button{font:15px 'Space Grotesk',Arial,sans-serif;background:var(--card);color:#c5cad3;border:1px solid var(--line);border-radius:8px;padding:13px 20px;cursor:pointer}.controls button.selected{color:#04161a;background:var(--cyan);border-color:var(--cyan);font-weight:600}.controls button:hover{border-color:var(--cyan)}#criterion{font-size:14px}.legend{display:flex;gap:25px;font-size:14px;margin:30px 0 20px}.legend i{display:inline-block;width:10px;height:10px;border-radius:2px;background:#73849b;margin-right:8px}.legend span+span i{background:var(--orange)}.chart{display:grid;gap:25px;background:var(--panel);padding:30px;border:1px solid var(--line);border-radius:12px}.bar-row{display:grid;grid-template-columns:160px 1fr;gap:25px;align-items:center}.rope-name{font-size:16px}.rope-name small{display:block;color:var(--muted);font-size:13px}.bars{display:grid;gap:8px}.track{background:#232c38;height:30px;position:relative;border-radius:3px;overflow:hidden}.bar{height:100%;background:#73849b;transition:width .35s ease}.track.ours .bar{background:var(--orange)}.track b{position:absolute;right:8px;top:2px;font-size:14px;color:white;text-shadow:0 1px 3px #142237}.result-total{margin-top:15px;padding:18px 0 24px;display:flex;justify-content:space-between;align-items:center}.result-total strong{font-size:42px;font-weight:500;letter-spacing:-.04em}.result-total strong span{color:var(--orange);padding:0 10px}.results .footnote{max-width:960px}table{border-collapse:collapse;width:100%;font-size:16px;margin-top:30px}caption{text-align:left;color:var(--muted);font-size:14px;padding-bottom:12px}th,td{text-align:right;padding:16px 12px;border-bottom:1px solid var(--line)}th:first-child{text-align:left}thead th{font-size:14px;font-weight:400;color:var(--muted)}tbody th{font-weight:400}.ours th,.ours td{font-weight:600;color:var(--cyan);background:#23d8ea08}.simulation .footnote{margin-top:20px}.closing{margin:0 30px;padding:70px 0;display:flex;align-items:center;justify-content:space-between;gap:30px}.closing h2{margin:18px 0}.closing p{margin:0}footer{padding:25px 30px;border-top:1px solid var(--line);display:flex;justify-content:space-between;font-size:13px;color:var(--muted)}footer a{color:var(--cyan)}.skip{position:absolute;top:-70px;left:20px;background:var(--bg);padding:10px;z-index:9}.skip:focus{top:10px}@media(max-width:900px){.section{grid-template-columns:1fr;gap:20px}.result-heading{gap:30px}.steps{gap:14px}.steps article{padding:20px}h2{font-size:38px}.chart{padding:25px}}@media(max-width:600px){header{padding:15px 20px}.brand{font-size:12px;max-width:145px}.brand-mark{margin-left:4px}nav{gap:14px;font-size:13px}nav>a:first-child{display:none}nav>a:nth-child(2){display:none}.hero{padding:55px 20px 35px}.eyebrow{font-size:12px;max-width:300px;margin:0 auto 26px;line-height:2}.eyebrow span{margin:0 5px}h1{font-size:76px;line-height:1.06}.hero h2{font-size:20px}.hero h2 br{display:none}.hero-tag{font-size:16px}.actions{gap:10px;flex-wrap:wrap}.button{font-size:14px;padding:12px 16px;gap:12px}.metrics{margin:0 20px;grid-template-columns:1fr;padding:10px 18px;text-align:left}.metrics>div{display:grid;grid-template-columns:98px 1fr;column-gap:12px;align-items:center;padding:20px 0}.metrics strong{font-size:50px;grid-row:1/3}.metrics p{margin:0;font-size:15px}.metrics>div+div{border-left:0;border-top:1px solid var(--line)}.metrics small{font-size:12px}.teaser{margin:35px 20px 0}.teaser>a{padding:7px;border-radius:8px}.figure-top{font-size:12px;gap:12px;align-items:center}.figure-top span+span{text-align:right}.section{margin:0 20px;padding:50px 0}h2{font-size:34px}.lead{font-size:18px}.steps{grid-template-columns:1fr;gap:15px}.steps h3{margin-top:14px}.step-detail{padding-top:5px}.method-figure>a{padding:10px}.results{margin:0 20px;padding:45px 0}.result-heading{display:block}.result-heading p{max-width:none;font-size:16px}.controls button{font-size:14px;padding:12px}.chart{padding:18px 12px}.bar-row{grid-template-columns:87px 1fr;gap:12px}.rope-name{font-size:15px}.rope-name small{font-size:12px}.result-total{gap:10px}.result-total>span{max-width:140px;font-size:14px}.result-total strong{font-size:32px;white-space:nowrap}.result-total strong span{padding:0 4px}.closing{margin:0 20px;padding:45px 0;display:block}.closing .button{margin-top:24px}footer{padding:24px 20px;gap:20px;font-size:12px}.table-wrap{overflow:auto}th,td{padding:12px 8px;font-size:14px}.goal strong{font-size:20px}.goal{padding:18px}.goal i{padding:0 5px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.bar,.button{transition:none}.button:hover{transform:none}}
/* Draft media slots map directly to requested research assets. */
.draft-byline{font-size:14px;color:var(--muted);margin:22px 0 -10px}.media-slot{grid-column:1/-1;display:flex;min-height:255px;flex-direction:column;justify-content:center;align-items:flex-start;padding:32px;border:1px dashed #526172;border-radius:12px;background:var(--panel);position:relative}.media-slot h3{font-size:25px;line-height:1.3;letter-spacing:-.02em;margin:20px 0 10px}.media-slot p{max-width:740px;font-size:15px;margin:0}.asset-label{font:12px 'IBM Plex Mono',monospace;letter-spacing:.12em;color:var(--orange)}.asset-status{font-size:12px;color:var(--muted);margin-top:25px;border:1px solid var(--line);padding:4px 9px;border-radius:4px}.hero-slot{margin:0 30px 35px;min-height:310px;align-items:center;text-align:center;background:linear-gradient(135deg,#142029,#171b23);border-color:#47626b}.hero-slot h3{font-size:32px}.hero-slot p{max-width:650px}.demo-grid{grid-column:1/-1;display:grid;grid-template-columns:1fr 1fr;gap:20px}.demo-grid .media-slot{grid-column:auto;min-height:280px}.demo-grid .media-slot:last-child{grid-column:1/-1;min-height:220px}.wide{grid-column:1/-1}.goal-note{margin-top:18px}.evidence .table-wrap .footnote{margin-top:18px}.table-wrap{max-width:100%;overflow-x:auto}.table-wrap table{min-width:400px}.evidence table{min-width:680px}.simulation .method-figure{margin:30px 0}.simulation .method-figure img{max-width:650px;margin:auto}.hero-tag{max-width:700px;margin-left:auto;margin-right:auto}@media(max-width:600px){.hero-slot{margin:0 20px 25px;min-height:280px;padding:24px}.hero-slot h3{font-size:27px}.media-slot{padding:24px;min-height:250px}.demo-grid{grid-template-columns:1fr}.demo-grid .media-slot:last-child{grid-column:auto}.asset-label{font-size:12px;letter-spacing:.07em}}
.demo-notice{font-size:14px;padding:12px 16px;border-left:2px solid var(--orange);background:var(--panel)}.demo-layout{display:grid;grid-template-columns:1.1fr 1fr;gap:28px}.target-plane{height:330px;border:1px solid #425567;border-radius:10px;position:relative;cursor:crosshair;background-color:#131b23;background-image:linear-gradient(#ffffff0b 1px,transparent 1px),linear-gradient(90deg,#ffffff0b 1px,transparent 1px);background-size:10% 10%;overflow:hidden;margin-bottom:14px;touch-action:manipulation}.axis-label{position:absolute;font:12px 'IBM Plex Mono',monospace;color:#a1acb9;left:16px;pointer-events:none}.axis-label.top{top:14px}.axis-label.bottom{bottom:14px}.plane-label{position:absolute;right:14px;bottom:14px;font:12px 'IBM Plex Mono',monospace;color:var(--cyan);pointer-events:none}.target-marker{position:absolute;left:50%;top:50%;width:0;height:0;pointer-events:none}.target-dot{position:absolute;width:14px;height:14px;left:-7px;top:-7px;background:var(--orange);border:2px solid white;border-radius:50%;box-shadow:0 0 0 8px #ff955124}.direction-pointer{position:absolute;font-size:60px;color:var(--cyan);line-height:1;left:-18px;top:-58px;width:36px;height:60px;transform-origin:50% 100%;text-align:center}.target-controls{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin:25px 0 18px}.target-controls label{font-size:14px;color:#c5cad3}.target-controls output{float:right;color:var(--cyan)}.target-controls input{display:block;width:100%;accent-color:var(--cyan);margin:14px 0 0;cursor:pointer}.generate-button{margin-top:24px;cursor:pointer;font-family:inherit}.generate-button:disabled{background:var(--card);border-color:var(--line);color:#98a3b1;cursor:not-allowed;transform:none;box-shadow:none}.demo-state{font-size:14px;min-height:24px}.playback-panel{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:28px;align-self:start;min-height:440px}.playback-panel h3{font-size:28px;line-height:1.25;margin-top:40px}.playback-panel p,.playback-panel li{font-size:15px;color:var(--muted)}.playback-panel ol{padding-left:20px;line-height:2}.playback-panel video{width:100%;margin-top:25px;border-radius:8px;background:#000}.playback-panel .footnote{margin-top:16px}[hidden]{display:none!important}@media(max-width:700px){.demo-layout{grid-template-columns:1fr}.target-plane{height:280px}.playback-panel{min-height:320px}.target-controls{gap:16px}.target-controls label{font-size:14px}.plane-label{display:none}}
/* Compact research landing page */
header{padding:13px 30px}nav{gap:22px}.compact-hero{display:grid;grid-template-columns:.95fr 1.05fr;align-items:center;gap:45px;text-align:left;padding:65px 30px 48px;background:none}.hero-copy .eyebrow{margin-bottom:23px;font-size:12px}.compact-hero h1{font-size:clamp(64px,6.3vw,84px);line-height:1.02;margin-bottom:24px}.compact-hero h2{font-size:19px;line-height:1.5;margin:0;max-width:450px}.compact-hero .hero-tag{font-size:16px;margin:18px 0 0}.compact-hero .actions{justify-content:flex-start;margin-top:26px}.compact-hero .lineage{margin-top:18px;font-size:13px}.hero-visual{margin:0;border:1px solid var(--line);border-radius:18px;background:var(--panel);padding:20px;box-shadow:0 20px 60px #0003}.hero-visual .figure-top{font-size:12px;letter-spacing:.03em;gap:12px;padding-bottom:17px}.hero-visual .figure-top span+span{color:var(--muted)}.hero-visual>a{display:block;background:white;border-radius:8px;overflow:hidden}.hero-visual img{width:100%;height:auto;display:block}.hero-visual figcaption{font-size:14px;padding:17px 0 0;color:#c5cad3}.video-note{font:12px 'IBM Plex Mono',monospace;color:#939eae;border-top:1px solid var(--line);padding-top:13px;margin-top:14px}.metrics{border-radius:0;background:transparent;border-left:0;border-right:0;padding:22px 0}.metrics strong{font-size:44px;letter-spacing:-.04em}.metrics strong span{font-size:25px}.metrics p{font-size:14px;margin:7px 0 3px}.metrics small{font-size:12px}.section{padding:55px 0;gap:22px;grid-template-columns:210px 1fr}h2{font-size:34px;margin-bottom:13px}.lead{font-size:17px;margin:0}.interactive-demo>.section-label,.compact-method>.section-label{padding-top:6px}.demo-notice{padding:0;background:transparent;border:0;font-size:13px;color:var(--orange);margin:12px 0 0}.demo-layout{gap:22px;margin-top:7px;grid-template-columns:1.1fr 1fr}.target-plane{height:230px;margin-bottom:10px}.target-controls{margin:18px 0 13px;gap:12px 20px}.target-controls input{margin-top:8px}.target-controls label{font-size:14px}.demo-layout .footnote{font-size:12px}.playback-panel{min-height:320px;padding:24px;display:flex;flex-direction:column;justify-content:center;background:radial-gradient(ellipse at 50% 35%,#23d8ea07,transparent 75%),var(--panel);border-radius:12px}.playback-panel h3{font-size:25px;margin:36px 0 14px}.playback-panel p{font-size:14px}.generate-button{margin-top:17px;padding:10px 17px}.demo-state{font-size:13px;margin-bottom:0}.steps{gap:16px}.steps article{padding:22px;position:relative}.steps h3{font-size:21px;margin:22px 0 5px}.steps p{font-size:15px;margin:7px 0 0;line-height:1.6}.steps .step-number{font-size:12px}.results{padding:50px 0}.result-heading{margin-top:18px;gap:25px;align-items:center}.result-heading h2{margin-bottom:0}.result-heading p{font-size:15px;max-width:350px;margin:0}.controls{margin-top:25px}.controls button{padding:10px 17px;font-size:14px}.legend{margin:20px 0 15px}.chart{padding:22px;gap:17px}.track{height:25px}.track b{top:0}.result-total{padding:12px 0 18px;margin-top:7px}.result-total strong{font-size:34px}.result-total>span{font-size:14px}.results>.footnote{font-size:12px}.more-content{margin:0 30px;padding:10px 0 0}.disclosure{border-bottom:1px solid var(--line)}.disclosure summary{display:flex;justify-content:space-between;align-items:center;padding:24px 0;cursor:pointer;list-style:none;font-size:17px}.disclosure summary::-webkit-details-marker{display:none}.disclosure summary small{display:block;font-size:13px;color:var(--muted);margin-top:4px}.expand-icon{font-size:24px;color:var(--cyan);transition:transform .2s}.disclosure[open] .expand-icon{transform:rotate(45deg)}.disclosure summary:hover{color:var(--cyan)}.disclosure summary:focus-visible{outline:2px solid var(--cyan);outline-offset:3px}.disclosure-body{padding-bottom:25px}.disclosure-body .section{margin:0;padding:35px 0}.disclosure-body .section h2{font-size:29px}.disclosure-body .method-figure{margin-top:0}.disclosure-body .lead{font-size:17px}.material-slots{display:grid;grid-template-columns:1fr 1fr;gap:16px}.material-slots>.footnote{grid-column:1/-1}.material-slots .media-slot{grid-column:auto;min-height:0;padding:23px;margin:0;align-items:flex-start;text-align:left;background:var(--panel)}.material-slots .media-slot h3{font-size:21px}.material-slots .media-slot p{font-size:14px}.material-slots .asset-status{margin-top:18px}.compact-closing{padding:40px 0}.compact-closing h2{font-size:28px;margin:0 0 8px}.compact-closing p{font-size:14px}footer{padding:20px 30px}@media(max-width:900px){.compact-hero{gap:25px;padding-top:45px}.compact-hero h1{font-size:66px}.hero-visual{padding:14px}.hero-visual .figure-top{font-size:12px;display:block}.hero-visual .figure-top span+span{display:none}.section{grid-template-columns:1fr}.result-heading{align-items:flex-start}.disclosure-body .section{grid-template-columns:1fr}}@media(max-width:650px){.compact-hero{grid-template-columns:1fr;padding:38px 20px 30px;gap:28px}.compact-hero h1{font-size:72px}.hero-copy .eyebrow{margin:0 0 20px;max-width:none;line-height:1.5}.compact-hero h2{font-size:18px;max-width:none}.hero-visual .figure-top{display:flex}.hero-visual .figure-top span+span{display:inline}.hero-visual{padding:16px}.metrics{grid-template-columns:repeat(3,1fr);margin:0 20px;padding:18px 0;text-align:center}.metrics>div{display:block;padding:0 9px}.metrics>div+div{border-top:0;border-left:1px solid var(--line)}.metrics strong{font-size:35px}.metrics strong span{font-size:20px}.metrics p{font-size:13px;line-height:1.4;margin-top:8px}.metrics small{display:block;font-size:12px;line-height:1.4;margin-top:5px}.section{padding:38px 0;gap:16px}h2{font-size:29px}.demo-layout{grid-template-columns:1fr;gap:22px}.target-plane{height:220px}.playback-panel{min-height:225px}.playback-panel h3{margin-top:22px;font-size:24px}.result-heading{display:block}.result-heading p{margin-top:14px}.results{padding:38px 0}.chart{padding:16px 12px}.result-total strong{font-size:28px}.more-content{margin:0 20px}.material-slots{grid-template-columns:1fr}.disclosure summary{font-size:16px}.disclosure summary small{font-size:12px}.compact-closing{padding:35px 0}.compact-closing .button{margin-top:18px}nav{gap:15px}footer{padding:20px}.result-total>span{font-size:13px}.hero-visual img{aspect-ratio:1431/714}}@media(prefers-reduced-motion:reduce){.expand-icon{transition:none}}
/* Centered project masthead, following the DeformX project page. */
.compact-hero{display:block;text-align:center;padding:60px 30px 38px;background:radial-gradient(ellipse at 50% 18%,#23d8ea0b,transparent 60%)}.hero-copy{max-width:900px;margin:0 auto}.hero-copy .eyebrow{margin:0 auto 25px}.compact-hero h1{font-size:clamp(62px,7.5vw,98px);line-height:1.04;margin-bottom:23px}.compact-hero h1 br{display:none}.compact-hero h1 span:before{content:' '}.compact-hero h2{max-width:750px;margin:0 auto;font-size:23px;line-height:1.45}.compact-hero .hero-tag{margin:17px auto 0}.compact-hero .actions{justify-content:center;align-items:stretch;margin-top:27px;flex-wrap:wrap}.actions .button{font:500 15px 'Space Grotesk',Arial,sans-serif;min-height:47px;gap:11px}.actions .button:first-child{font-weight:600}.github-pending:disabled{opacity:1;color:#bcc5d1;background:var(--card);cursor:not-allowed;box-shadow:none;transform:none;border-color:var(--line)}.github-pending small{font-size:12px;color:#9ca6b4;border-left:1px solid #455060;padding-left:10px}.github-pending svg{flex-shrink:0}.compact-hero .lineage{margin:20px auto 0}.hero-visual{max-width:900px;margin:35px auto 0;text-align:left;padding:17px 22px;border-radius:14px}.hero-visual>a{max-width:780px;margin:auto}.hero-visual figcaption{text-align:center;font-size:14px;padding-top:13px}.hero-visual .video-note{text-align:center;padding-top:10px;margin-top:11px;font-size:12px}.hero-visual .figure-top{padding-bottom:13px}@media(max-width:650px){.compact-hero{padding:38px 20px 28px}.compact-hero h1{font-size:clamp(48px,10.5vw,68px);letter-spacing:-.05em}.compact-hero h2{font-size:19px}.hero-copy .eyebrow{font-size:12px}.compact-hero .actions{gap:9px;margin-top:23px}.actions .button{font-size:14px;padding:11px 14px}.github-pending small{font-size:12px}.hero-visual{margin-top:28px;padding:13px}.hero-visual .figure-top{font-size:12px}.compact-hero .hero-tag{font-size:15px}}
/* Clearly marked production placeholders for the filming/editing draft. */
.shoot-nav{color:#ffbf70;border:1px solid #b27737;padding:5px 10px;border-radius:6px;white-space:nowrap}.shoot-nav span{background:#ffb85c;color:#25190b;padding:1px 5px;border-radius:3px;font-size:12px;margin-left:4px}.hero-visual .shoot-link{display:block;background:#ffb85c15;border:2px dashed #e4a655;border-radius:7px;margin-top:15px;padding:14px;color:#ffcd8e;text-align:left}.shoot-link strong{display:block;font-size:16px;font-family:'Space Grotesk',Arial,sans-serif}.shoot-link span{display:block;font-size:12px;line-height:1.7;margin-top:5px}.section-shoot-note{display:block;border:1px dashed #ba8a48;background:#ffb85c0c;color:#ffc780;border-radius:7px;padding:11px 15px;font-size:14px;margin-bottom:14px}.section-shoot-note:hover,.shoot-link:hover{color:#ffe2b8;background:#ffb85c20}.shoot-list{margin-top:18px;border:2px solid #d49a4c!important;border-radius:12px;background:#171714;padding:0 22px}.shoot-list>summary{color:#ffd294;font-weight:600;font-size:20px}.shoot-list>summary small{font-weight:400;color:#c7b596}.shoot-list .expand-icon{color:#ffc780}.material-slots{gap:20px}.material-slots>.footnote{background:#ffb85c10;border-left:3px solid #d49a4c;color:#e1d5c4;padding:14px 16px;font-size:14px}.material-slots .shoot-card{padding:0;background:#1d2026;border:2px dashed #c99147;border-radius:10px;overflow:hidden;display:block}.shoot-top{display:flex;justify-content:space-between;align-items:center;gap:12px;background:#f7b75e;color:#22190d;padding:14px 18px}.shoot-top strong{font-size:24px;letter-spacing:.02em}.shoot-top>span{font-size:13px;font-weight:600}.missing-badge{font:12px 'IBM Plex Mono',monospace;color:#ffc985;letter-spacing:.07em;margin:20px 20px 0}.material-slots .shoot-card h3{font-size:23px;color:#f5f1eb;margin:12px 20px 20px}.shoot-card dl{margin:0 20px 20px}.shoot-card dt{font-size:13px;font-weight:600;color:#ffc985;margin-top:16px}.shoot-card dd{font-size:15px;color:#d4d8df;line-height:1.8;margin:5px 0 0}.shoot-file{padding:14px 20px;background:#101216;border-top:1px solid #444137;font-size:13px;color:#bfc7d3;overflow-wrap:anywhere}.shoot-file code{color:#ffe0a9;font-size:13px}#asset-01,#asset-02,#asset-03,#asset-04,#asset-05,#asset-06,#asset-07{scroll-margin-top:100px}.shoot-card:target{border-style:solid;box-shadow:0 0 0 4px #ffbf7035}.playback-panel>.asset-label{padding:10px 12px;background:#ffb85c12;border:1px dashed #c99147;border-radius:5px;color:#ffc985;line-height:1.6;font-size:13px}@media(max-width:650px){.shoot-list{padding:0 13px}.shoot-list>summary{font-size:17px}.material-slots .shoot-card h3{font-size:22px}.shoot-top{padding:12px 16px}.shoot-top strong{font-size:23px}.shoot-top>span{font-size:12px}nav{gap:9px}.shoot-nav{font-size:12px;padding:5px 7px}header .brand{max-width:105px}.section-shoot-note{font-size:13px}.shoot-link strong{font-size:15px}.shoot-list .material-slots{grid-template-columns:1fr}}

/* --- ropeviz swing replay (imported from v9_single_example_19dirs) --- */
/* Tokens the viewer runtime reads off :root. --card/--ink/--line already
   exist above and are shared; the rest are viewer-only. */
:root{--page:#0e1116;--ink2:#a6aebb;--ink3:#6c7788;--grid:#242b36;--metal:#7d8794;--stick:#ff9551;--wire:#23d8ea;--goal:#ff6b84;--wall:#8d4646;--good:#2fd08a;--warn:#ffc44d;--bad:#ff6b5f;--s1:#57a5ff;--s2:#ff8a52;--s3:#2fd08a;--s4:#a98bff;--s5:#ffc44d;--s6:#98a2b2;--s7:#ff7ad1;--s8:#b3d16a;--mono:'IBM Plex Mono',ui-monospace,Menlo,monospace}
.swing-lab .viewer-stack{margin-top:7px}
.swing-lab .dy-card{background:var(--card);border:1px solid var(--line);border-radius:12px;margin:0 0 16px;padding:10px}
.swing-lab .dy-pane{padding:12px 14px}
.swing-lab .dy-pane+.dy-pane{border-top:1px solid var(--line)}
.swing-lab .dy-ttl{font:500 12px/1.5 'IBM Plex Mono',monospace;letter-spacing:.16em;text-transform:uppercase;color:var(--muted);margin:0 0 10px}
.swing-lab .dy-note{font-size:12.5px;color:var(--muted);margin:10px 0 0;font-family:var(--mono)}
.swing-lab canvas{display:block;width:100%;border-radius:10px}
.swing-lab canvas.dy-view{cursor:grab;touch-action:none;background:var(--panel)}
.swing-lab canvas.dy-view:active{cursor:grabbing}
.swing-lab .dy-row{display:flex;gap:9px;align-items:center;flex-wrap:wrap;margin-top:9px}
.swing-lab .dy-btns{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.swing-lab .dy-layers{margin-top:9px}
.swing-lab .dy-sep{display:inline-block;width:1px;height:16px;background:var(--line);margin:0 4px}
.swing-lab button{font:500 12px/1.5 'IBM Plex Mono',monospace;padding:6px 11px;border-radius:8px;cursor:pointer;border:1px solid var(--line);background:transparent;color:var(--ink)}
.swing-lab button:hover{border-color:var(--cyan);color:var(--cyan)}
.swing-lab button.on{background:var(--cyan);color:#04161a;border-color:var(--cyan)}
.swing-lab button strong{font-weight:700;margin-right:4px}
.swing-lab select{font:500 12px/1.5 'IBM Plex Mono',monospace;padding:5px 8px;border-radius:8px;border:1px solid var(--line);background:var(--card);color:var(--ink)}
.swing-lab input[type=range]{accent-color:var(--cyan)}
.swing-lab .dy-t{font-family:var(--mono);font-size:11.5px;color:var(--muted);min-width:108px;text-align:right;font-variant-numeric:tabular-nums}
.swing-lab .dy-layers button.on,.swing-lab .dy-play.on{background:transparent;color:var(--cyan);border-color:var(--cyan)}

/* Compact hero spacing and source-resolution looping replay. */
.compact-hero{padding-top:28px}.hero-copy .eyebrow{margin-bottom:14px}.compact-hero h1{margin-bottom:14px}.compact-hero .actions{margin-top:18px}.compact-hero .lineage{margin-top:12px}.hero-visual{margin-top:20px;padding:12px}.hero-visual .figure-top{padding-bottom:8px}.hero-replay{display:block;width:100%;height:auto;border-radius:8px;background:#fafafa}.hero-visual .video-note a{color:var(--muted)}.hero-visual .video-note a:hover{color:var(--cyan)}@media(max-width:650px){.compact-hero{padding-top:24px}.hero-visual{margin-top:18px;padding:10px}}

/* Method foundation and individual source-resolution demonstrations. */
.method-foundation{grid-column:1/-1;display:flex;align-items:center;gap:36px;padding:20px 24px;border:1px solid var(--line);border-radius:12px;background:var(--panel)}
.method-foundation .step-number{font:12px 'IBM Plex Mono',monospace;color:var(--cyan)}
.method-foundation h3{margin:6px 0 0;font-size:23px;white-space:nowrap}
.method-foundation p{margin:0;color:var(--muted);font-size:15px}
.method-steps{grid-column:1/-1;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}
.method-steps article{display:flex;flex-direction:column;min-width:0;padding:18px}
.method-steps h3{margin:14px 0 5px;font-size:23px}
.method-steps h3 span{display:block;font-size:14px;font-weight:500;color:var(--cyan);margin-top:4px}
.method-steps p{min-height:120px;margin:8px 0 18px}
.method-steps video{display:block;width:100%;height:auto;aspect-ratio:16/9;border-radius:7px;background:#fafafa;margin-top:auto}
.method-video-link{font-size:12px;color:var(--muted);margin-top:12px;align-self:flex-end}
@media(max-width:1000px){.method-steps{grid-template-columns:1fr}.method-steps article{display:grid;grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr);column-gap:22px}.method-steps .step-number,.method-steps h3,.method-steps p{grid-column:1}.method-steps p{min-height:0}.method-steps video{grid-column:2;grid-row:1/4;margin:0;align-self:center}.method-video-link{grid-column:2;justify-self:end}}
@media(max-width:650px){.method-foundation{display:block;padding:18px}.method-foundation p{margin-top:12px}.method-steps article{display:flex}.method-steps video{margin-top:0}.method-steps p{min-height:0}.method-video-link{align-self:flex-end}}
/* Real-world demonstrations before the simulation replay. */
.real-demo-grid{grid-column:1/-1;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px}
.real-demo-grid figure{margin:0;min-width:0;padding:16px;background:var(--panel);border:1px solid var(--line);border-radius:12px}
.real-demo-grid figcaption{padding:0 0 14px;text-align:left}
.real-demo-grid h3{font-size:22px;color:var(--ink);margin:0 0 5px}
.real-demo-grid p{font-size:14px;margin:0;color:var(--muted)}
.real-demo-grid video{display:block;width:100%;height:auto;aspect-ratio:16/9;background:#fafafa;border-radius:7px}
.real-demo-grid figure>a{display:block;text-align:right;margin-top:12px;font-size:12px;color:var(--muted)}
.real-demo-grid figure>a:hover{color:var(--cyan)}
@media(max-width:650px){.real-demo-grid{grid-template-columns:1fr}}
.real-demo-grid video{aspect-ratio:auto}

/* Keep the three method stages in separate rows at every desktop width. */
.method-steps{grid-template-columns:1fr}
.method-steps article{display:grid;grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr);column-gap:24px}
.method-steps .step-number,.method-steps h3,.method-steps p{grid-column:1}
.method-steps p{min-height:0}
.method-steps video{grid-column:2;grid-row:1/4;margin:0;align-self:center}
.method-steps .method-video-link{grid-column:2;justify-self:end}
@media(max-width:650px){.method-steps article{display:flex}.method-steps video{margin-top:0}.method-steps .method-video-link{align-self:flex-end}}
/* Equal-height real-world players; preserve each complete cropped frame. */
.real-demo-grid video{aspect-ratio:1276/1080;object-fit:contain;background:#fafcfc}

/* Keep each method heading and paragraph together, independent of video height. */
.method-steps article{grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr);gap:10px 28px;padding:24px}
.method-steps .method-copy{grid-column:1;grid-row:1;align-self:center;min-width:0}
.method-steps .method-copy .step-number{display:block;line-height:1.5}
.method-steps .method-copy h3{margin:10px 0 12px;line-height:1.2;font-size:25px}
.method-steps .method-copy h3 span{margin-top:6px;line-height:1.4}
.method-steps .method-copy p{margin:0;min-height:0;line-height:1.65;max-width:38ch}
.method-steps video{grid-column:2;grid-row:1;align-self:center}
.method-steps .method-video-link{grid-column:2;grid-row:2;margin-top:0}
@media(max-width:650px){.method-steps article{display:flex;gap:16px;padding:18px}.method-steps .method-copy{align-self:stretch}.method-steps .method-copy h3{font-size:23px}.method-steps .method-copy p{max-width:none}}
/* Film-first opening, followed by the paper masthead. */
.opening-film{max-width:1440px;margin:0 auto;padding:18px 28px 20px;min-height:calc(100svh - 64px);display:flex;flex-direction:column;justify-content:center;background:#0e1116}
.opening-kicker{display:flex;justify-content:space-between;gap:15px;margin-bottom:12px;font:11px/1.5 var(--mono);letter-spacing:.13em;color:var(--cyan)}
.opening-kicker span{color:var(--muted)}
.opening-film video{display:block;width:100%;height:auto;max-height:calc(100svh - 200px);object-fit:contain;background:#0e1116;border-radius:8px}
.opening-labels{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;text-align:center;margin:12px 0;font-size:13px;color:#c5cad3}
.opening-scroll{display:flex;align-items:center;justify-content:center;gap:14px;align-self:center;margin-top:12px;padding:8px 20px;font-size:13px;color:var(--muted)}
.opening-scroll span{font-size:21px;color:var(--cyan)}
#paper{scroll-margin-top:72px;padding-top:48px;border-top:1px solid var(--line)}
.paper-authors{display:flex;flex-wrap:wrap;justify-content:center;gap:9px 22px;margin:27px auto 18px;max-width:880px;font-size:17px;line-height:1.7;color:var(--ink)}
.paper-authors>span{white-space:nowrap}
.paper-authors sup,.paper-affiliations sup{font-size:10px;color:var(--cyan);margin-left:3px}
.paper-affiliations{display:flex;flex-wrap:wrap;justify-content:center;gap:5px 20px;max-width:880px;margin:0 auto;color:var(--muted);font-size:13px;line-height:1.8}
.equal-contribution{color:var(--muted);font-size:12px;margin:12px auto 0}
@media(max-width:650px){.opening-film{padding:16px 12px;min-height:0}.opening-kicker{font-size:9px;letter-spacing:.03em}.opening-labels{font-size:10px}.opening-scroll{margin-top:0}.paper-authors{font-size:15px;gap:7px 15px}.paper-affiliations{display:block;font-size:12px}.paper-affiliations>span{display:block}#paper{padding-top:32px}}
/* Full-viewport opening, matching DeformX's cover-video and overlaid navigation. */
body>header{position:fixed;top:0;left:0;right:0;z-index:100;max-width:none;height:64px;box-sizing:border-box;padding:0 max(28px,calc((100vw - 1124px)/2));background:transparent;backdrop-filter:none;border-bottom:1px solid transparent;transition:background .3s,border-color .3s,backdrop-filter .3s}
body>header.scrolled{background:rgba(14,17,22,.82);backdrop-filter:blur(14px);border-bottom-color:var(--line)}
body>header .brand,body>header nav{text-shadow:0 1px 8px #0009;color:#fff}
.opening-film{position:relative;display:block;width:100%;max-width:none;height:100vh;height:100svh;min-height:560px;margin:0;padding:0;overflow:hidden;background:#0e1116}
.opening-film video{position:absolute;inset:0;width:100%;height:100%;max-height:none;object-fit:cover;object-position:center;border-radius:0;z-index:0}
.opening-scrim{position:absolute;inset:0;z-index:1;pointer-events:none;background:linear-gradient(180deg,rgba(8,10,14,.34) 0%,rgba(8,10,14,.05) 24%,rgba(8,10,14,.05) 58%,rgba(8,10,14,.72) 100%)}
.opening-scroll{position:absolute;bottom:30px;left:50%;transform:translateX(-50%);z-index:3;display:flex;flex-direction:column;gap:8px;align-items:center;padding:0;margin:0;color:#eee;font:10.5px/1.5 var(--mono);letter-spacing:.22em;text-transform:uppercase}
.opening-scroll span{font:inherit;color:inherit}.opening-scroll svg{width:22px;height:22px;animation:opening-bob 1.8s ease-in-out infinite}
.opening-pause{position:absolute;bottom:26px;right:28px;z-index:3;width:42px;height:42px;border:1px solid #ffffff55;border-radius:50%;background:#080a0e66;color:#fff;font-size:18px;cursor:pointer}
@keyframes opening-bob{0%,100%{transform:translateY(0)}50%{transform:translateY(6px)}}
@media(max-width:650px){body>header{padding:0 16px}.opening-film{height:100svh;min-height:540px}.opening-scroll{bottom:20px}.opening-pause{right:16px;bottom:18px}}
@media(prefers-reduced-motion:reduce){.opening-scroll svg{animation:none}}
/* Preserve all three rope rows and target columns in the fullscreen teaser. */
.opening-film{background:#fafcfc}.opening-film video{object-fit:contain;background:#fafcfc}.opening-scrim{background:linear-gradient(180deg,rgba(8,10,14,.60),transparent 14%,transparent 85%,rgba(8,10,14,.65))}

/* Start directly with the paper while the opening film is disabled. */
body.without-opening{padding-top:64px}body.without-opening>header{background:rgba(14,17,22,.92);backdrop-filter:blur(14px);border-bottom-color:var(--line)}body.without-opening #paper{border-top:0}

/* Impact highlight and horizontally scrolling method demonstrations. */
.burst-highlight{max-width:900px;margin:32px auto 24px;padding:24px;display:grid;grid-template-columns:1fr 1fr;gap:32px;align-items:center;text-align:left;border:1px solid var(--line);border-radius:14px;background:var(--panel)}
.compact-hero .burst-copy h2{font-size:clamp(28px,3.5vw,42px);line-height:1.15;color:var(--ink);margin:14px 0}
.burst-copy p{font-size:16px;color:var(--muted);line-height:1.7}.burst-copy .eyebrow{color:var(--cyan);margin:0}.burst-speed{font:11px/1.6 var(--mono);color:var(--orange)}
.burst-highlight video{display:block;width:100%;height:auto;max-height:72svh;object-fit:contain;border-radius:8px;background:#0b0d11}
.method-carousel-nav{grid-column:1/-1;display:flex;gap:16px;justify-content:space-between;align-items:center}.method-tabs,.method-arrows{display:flex;gap:8px;flex-wrap:wrap}
.method-carousel-nav button{background:var(--panel);color:var(--muted);border:1px solid var(--line);border-radius:8px;padding:10px 14px;font:13px 'Space Grotesk',sans-serif;cursor:pointer}.method-carousel-nav button[aria-pressed="true"]{color:var(--cyan);border-color:var(--cyan)}.method-carousel-nav button:disabled{opacity:.35;cursor:default}
#method-carousel{display:flex;position:relative;min-width:0;max-width:100%;overflow-x:auto;scroll-snap-type:x mandatory;gap:20px;padding:0 0 14px;scrollbar-color:var(--line) transparent;overscroll-behavior-x:contain}
#method-carousel article{flex:0 0 92%;box-sizing:border-box;display:flex;flex-direction:column;gap:16px;padding:24px;scroll-snap-align:start;scroll-snap-stop:always}
#method-carousel .method-copy{align-self:stretch;display:block}#method-carousel .method-copy h3{margin:8px 0;font-size:28px}#method-carousel .method-copy h3 span{display:inline;font-size:16px;margin-left:8px}#method-carousel .method-copy p{max-width:75ch;font-size:15px}
#method-carousel video{width:100%;height:auto;margin:0;align-self:stretch;aspect-ratio:16/9}#method-carousel .method-video-link{align-self:flex-end;margin:0}
@media(max-width:650px){.burst-highlight{grid-template-columns:1fr;padding:16px;gap:16px}.burst-highlight video{max-height:65svh}.method-carousel-nav{align-items:flex-start}.method-tabs{gap:5px}.method-carousel-nav button{font-size:11px;padding:8px}.method-arrows{flex-wrap:nowrap}#method-carousel article{flex-basis:96%;padding:14px}#method-carousel .method-copy h3{font-size:24px}#method-carousel .method-copy h3 span{display:block;margin:4px 0 0}}
/* Interactive task workspace */
.workspace-toolbar{display:flex;align-items:center;justify-content:space-between;font:11px 'IBM Plex Mono',monospace;letter-spacing:.07em;color:var(--cyan);padding:12px 14px;border:1px solid var(--line);border-bottom:0;border-radius:12px 12px 0 0;background:#131b23}.workspace-toolbar button{background:transparent;color:#c5cad3;border:1px solid #40515f;border-radius:5px;padding:6px 9px;cursor:pointer}#target-space{display:block;width:100%;height:420px;touch-action:none;cursor:grab;background:radial-gradient(ellipse at 55% 45%,#19313b,#10171f 80%);border:1px solid var(--line);border-radius:0 0 12px 12px}.workspace-legend{display:flex;gap:16px;flex-wrap:wrap;color:#59d4d3;font-size:12px;margin:12px 0}.workspace-legend .goal-legend{color:#ffd27e}#workspace-state{font-size:13px;color:#8dddab;min-height:40px;margin:12px 0 0}#workspace-state.outside{color:#ff8585}.demo-layout>div{min-width:0}@media(max-width:650px){#target-space{height:350px}}

/* Arrival angle sits beside the 3D scene, increasing upward. */
.workspace-stage{display:grid;grid-template-columns:minmax(0,1fr) 76px;border:1px solid var(--line);border-radius:0 0 12px 12px;overflow:hidden;background:#10171f}.workspace-stage #target-space{border:0;border-radius:0;min-width:0}.arrival-rail{display:flex;flex-direction:column;align-items:center;gap:10px;padding:16px 6px;border-left:1px solid var(--line);font-size:12px;text-align:center;color:#c5cad3;margin:0}.arrival-rail output{font:14px 'IBM Plex Mono',monospace;color:#ffd27e}.arrival-rail .angle-end{font-size:10px;color:var(--muted)}.arrival-rail input{writing-mode:vertical-lr;direction:rtl;appearance:auto;flex:1;min-height:0;width:28px;margin:0;accent-color:#ffd27e;cursor:ns-resize;touch-action:none}.target-controls{grid-template-columns:repeat(3,minmax(0,1fr))}@media(max-width:650px){.workspace-stage{grid-template-columns:minmax(0,1fr) 64px}.arrival-rail{font-size:11px}.target-controls{column-gap:12px}.target-controls label{font-size:12px}.target-controls output{float:none;display:block;margin-top:5px}}

/* Floating cards for the approach carousel. */
#method{position:relative;isolation:isolate}
#method::before{content:"";position:absolute;z-index:-1;pointer-events:none;inset:150px -20px 0;background:radial-gradient(ellipse at 20% 40%,#25cbd30b,transparent 62%)}
#method .method-foundation{border-radius:18px;border-color:#35434d;background:linear-gradient(125deg,#1b2630,#141c24);box-shadow:0 12px 30px #0003,inset 0 1px 0 #ffffff08;padding:24px 28px}
#method .method-carousel-nav button{border-radius:999px;transition:background .2s,border-color .2s,box-shadow .2s}
#method .method-carousel-nav button[aria-pressed="true"]{background:#16343a;box-shadow:0 4px 18px #12cad31a}
#method-carousel{gap:28px;padding:22px 0 40px;scrollbar-width:thin}
#method-carousel article{position:relative;flex-basis:90%;border:1px solid #3b4b58;border-radius:24px;padding:28px;gap:20px;background:linear-gradient(145deg,#202e39 0%,#17212b 48%,#111a22 100%);box-shadow:0 18px 28px -12px #0009,0 5px 12px #0003,inset 0 1px 0 #ffffff0d;transition:transform .25s ease,box-shadow .25s ease,border-color .25s ease}
#method-carousel article::before{content:"";position:absolute;top:-1px;left:28px;width:72px;height:3px;border-radius:6px;background:var(--cyan);box-shadow:0 0 20px #27dce84d}
#method-carousel article:nth-child(2)::before{background:#9cafff;box-shadow:0 0 20px #9cafff4d}
#method-carousel article:nth-child(3)::before{background:#ffbc80;box-shadow:0 0 20px #ffbc804d}
#method-carousel .step-number{letter-spacing:.09em;font-size:11px}
#method-carousel .method-copy h3{margin:10px 0;font-size:30px}
#method-carousel .method-copy p{color:#b7c4cf;line-height:1.65}
#method-carousel video{border-radius:14px;border:1px solid #ffffff20;box-shadow:0 8px 22px #0004}
#method-carousel .method-video-link{font-size:12px;color:#aebfcc}
#method-carousel article:focus-within{border-color:#65cdd4;box-shadow:0 22px 32px -12px #000b,0 0 0 1px #65cdd433}
@media(hover:hover) and (prefers-reduced-motion:no-preference){#method-carousel article:hover{transform:translateY(-7px);border-color:#65cdd4;box-shadow:0 25px 34px -12px #000b,0 0 25px #27dce80a}}
@media(max-width:650px){#method .method-foundation{padding:20px;border-radius:16px}#method-carousel{gap:16px;padding-top:16px;padding-bottom:30px}#method-carousel article{flex-basis:94%;padding:18px;gap:16px;border-radius:18px}#method-carousel .method-copy h3{font-size:25px}#method-carousel video{border-radius:10px}}
@media(prefers-reduced-motion:reduce){#method-carousel article,#method .method-carousel-nav button{transition:none}}

/* Circular floating deck with controls on either side. */
.method-loop{grid-column:1/-1;position:relative;min-width:0;padding:24px 62px 0;isolation:isolate}
#method .method-carousel-nav{justify-content:center}
#method-carousel{display:grid;grid-template-columns:minmax(0,1fr);overflow:visible;scroll-snap-type:none;padding:0;margin:0;gap:0;touch-action:pan-y;perspective:1200px}
#method-carousel article{grid-area:1/1;min-width:0;width:100%;margin:0;transform-origin:center;transition:transform .45s cubic-bezier(.22,.7,.2,1),opacity .35s,border-color .25s;backface-visibility:hidden}
#method-carousel article[data-position="active"]{transform:translateX(0) scale(1);opacity:1;z-index:3;box-shadow:0 24px 45px -16px #000b,0 4px 16px #0005}
#method-carousel article[data-position="previous"]{transform:translateX(-4.5%) scale(.93);opacity:.35;z-index:1;pointer-events:none}
#method-carousel article[data-position="next"]{transform:translateX(4.5%) scale(.93);opacity:.35;z-index:2;pointer-events:none}
#method-carousel article:not([data-position="active"]) video{visibility:hidden}
.loop-arrow{position:absolute;top:48%;z-index:5;display:grid;place-items:center;width:46px;height:46px;padding:0;border:1px solid #53646f;border-radius:50%;background:#1b2a34;color:#e3f8fa;font-size:25px;cursor:pointer;box-shadow:0 6px 18px #0006;transition:background .2s,transform .2s}
.loop-prev{left:0}.loop-next{right:0}.loop-arrow:hover{background:#25505a;transform:scale(1.08)}.loop-arrow:focus-visible{outline:2px solid var(--cyan);outline-offset:4px}
.loop-status{text-align:center;color:var(--muted);font:12px 'IBM Plex Mono',monospace;letter-spacing:.05em;margin:30px 0 0}
@media(max-width:650px){.method-loop{padding:14px 34px 0}.loop-arrow{width:30px;height:38px;font-size:21px}#method-carousel article{padding:14px;gap:14px}#method-carousel .method-copy h3{font-size:23px}#method-carousel .method-copy p{font-size:13px}.loop-status{font-size:11px;margin-top:24px}}
@media(prefers-reduced-motion:reduce){#method-carousel article,.loop-arrow{transition:none}}

/* Perspective deck: the active card floats ahead of two angled side cards. */
.method-loop{padding-left:76px;padding-right:76px;padding-top:32px}
#method-carousel{perspective:1500px;perspective-origin:50% 45%;transform-style:preserve-3d}
#method-carousel article{transform-style:preserve-3d;transition:transform .65s cubic-bezier(.22,.75,.2,1),opacity .5s,filter .5s,border-color .25s;backface-visibility:hidden}
#method-carousel article[data-position="active"]{transform:translate3d(0,-6px,45px) rotateY(0deg) scale(.96);opacity:1;z-index:3;filter:brightness(1);box-shadow:0 36px 50px -20px #000e,0 12px 25px #0007,inset 0 1px 0 #ffffff20;border-color:#596d7c}
#method-carousel article[data-position="previous"]{transform:translate3d(-10%,8px,-140px) rotateY(24deg) scale(.96);opacity:.65;z-index:1;filter:brightness(.62);box-shadow:-12px 20px 35px #0006}
#method-carousel article[data-position="next"]{transform:translate3d(10%,8px,-140px) rotateY(-24deg) scale(.96);opacity:.65;z-index:2;filter:brightness(.62);box-shadow:12px 20px 35px #0006}
#method-carousel article:not([data-position="active"]) video{visibility:visible}
#method-carousel article::after{content:"";position:absolute;pointer-events:none;inset:0;border-radius:inherit;background:linear-gradient(120deg,#ffffff09,transparent 36%,transparent 75%,#00000015);border:1px solid #ffffff05}
#method-carousel article[data-position="active"] .method-copy{transform:translateZ(8px)}
#method-carousel article[data-position="active"] video{transform:translateZ(12px);box-shadow:0 12px 28px #0006}
@media(max-width:650px){.method-loop{padding-left:36px;padding-right:36px;padding-top:22px}#method-carousel{perspective:1000px}#method-carousel article[data-position="active"]{transform:translate3d(0,-3px,20px) scale(.98)}#method-carousel article[data-position="previous"]{transform:translate3d(-9%,5px,-100px) rotateY(22deg) scale(.97)}#method-carousel article[data-position="next"]{transform:translate3d(9%,5px,-100px) rotateY(-22deg) scale(.97)}}
@media(prefers-reduced-motion:reduce){#method-carousel article{transition:none}}

/* Fan the rear cards upward and outward around the foreground card. */
.method-loop{padding-top:118px}
#method-carousel article[data-position="previous"]{transform:translate3d(-9%,-115px,-110px) rotateY(-38deg) scale(.92);transform-origin:50% 70%;opacity:.72;box-shadow:-18px 25px 40px #0007}
#method-carousel article[data-position="next"]{transform:translate3d(9%,-115px,-110px) rotateY(38deg) scale(.92);transform-origin:50% 70%;opacity:.72;box-shadow:18px 25px 40px #0007}
@media(max-width:650px){.method-loop{padding-top:86px}#method-carousel article[data-position="previous"]{transform:translate3d(-7%,-65px,-95px) rotateY(-32deg) scale(.92)}#method-carousel article[data-position="next"]{transform:translate3d(7%,-65px,-95px) rotateY(32deg) scale(.92)}}

/* Independent perspective planes keep the rear cards behind the foreground. */
#method-carousel{transform-style:flat}
#method-carousel article[data-position="previous"]{transform:translate3d(-26%,-115px,-230px) rotateY(-38deg) scale(.92)}
#method-carousel article[data-position="next"]{transform:translate3d(26%,-115px,-230px) rotateY(38deg) scale(.92)}
@media(max-width:650px){#method-carousel article[data-position="previous"]{transform:translate3d(-22%,-65px,-150px) rotateY(-32deg) scale(.92)}#method-carousel article[data-position="next"]{transform:translate3d(22%,-65px,-150px) rotateY(32deg) scale(.92)}}

/* Hinged triptych: adjoining edges remain attached to the front panel. */
.method-loop{padding:30px 48px 0}
#method-carousel{perspective:1100px;perspective-origin:50% 50%;margin:0 14%;transform-style:flat}
#method-carousel article[data-position="active"]{transform:none;opacity:1;filter:none;z-index:3;border-radius:16px}
#method-carousel article[data-position="previous"]{transform-origin:100% 50%;transform:translateX(-100%) rotateY(-64deg);opacity:.72;filter:brightness(.65);z-index:1;border-radius:16px}
#method-carousel article[data-position="next"]{transform-origin:0% 50%;transform:translateX(100%) rotateY(64deg);opacity:.72;filter:brightness(.65);z-index:1;border-radius:16px}
#method-carousel article[data-position="active"] .method-copy,#method-carousel article[data-position="active"] video{transform:none}
#method-carousel article{transition:transform .65s cubic-bezier(.22,.75,.2,1),opacity .5s,filter .5s;}
.loop-arrow{top:48%;background:#1b2a34f5}
@media(max-width:650px){.method-loop{padding:24px 30px 0}#method-carousel{margin:0 9%;perspective:800px}#method-carousel article[data-position="previous"]{transform:translateX(-100%) rotateY(-72deg)}#method-carousel article[data-position="next"]{transform:translateX(100%) rotateY(72deg)}}
@media(prefers-reduced-motion:reduce){#method-carousel article{transition:none}}

/* Softer side panels, separated hinges, and controls over the side panels. */
#method-carousel article[data-position="previous"]{transform:translateX(calc(-100% - 18px)) rotateY(-64deg);filter:blur(2px) brightness(.52);opacity:.58}
#method-carousel article[data-position="next"]{transform:translateX(calc(100% + 18px)) rotateY(64deg);filter:blur(2px) brightness(.52);opacity:.58}
.method-loop .loop-prev{left:7.8%}.method-loop .loop-next{right:7.8%}
.method-loop .loop-arrow{background:#182e3ee6;border-color:#8295a180;box-shadow:0 5px 22px #0009;backdrop-filter:blur(8px)}
@media(max-width:650px){#method-carousel article[data-position="previous"]{transform:translateX(calc(-100% - 10px)) rotateY(-72deg);filter:blur(1.5px) brightness(.52)}#method-carousel article[data-position="next"]{transform:translateX(calc(100% + 10px)) rotateY(72deg);filter:blur(1.5px) brightness(.52)}.method-loop .loop-prev{left:6%}.method-loop .loop-next{right:6%}}

/* Expand the deck and move the overlaid controls toward the outer edges. */
.method-loop{padding-left:16px;padding-right:16px}
#method-carousel{margin-left:11%;margin-right:11%}
.method-loop .loop-prev{left:2%}.method-loop .loop-next{right:2%}
@media(min-width:1100px){.method-loop{width:calc(100% + 48px);max-width:calc(100vw - 40px);justify-self:center}#method-carousel{margin-left:10%;margin-right:10%}}
@media(max-width:650px){.method-loop{padding-left:8px;padding-right:8px}#method-carousel{margin-left:9%;margin-right:9%}.method-loop .loop-prev{left:0}.method-loop .loop-next{right:0}}

/* Stable rotation origins prevent edge jumps; the returning rear panel is hidden in transit. */
#method-carousel article[data-position]{transform-origin:50% 50%;will-change:transform,opacity;transform-style:flat;transition:transform 700ms cubic-bezier(.25,.8,.25,1),opacity 240ms ease,filter 700ms ease;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden}
#method-carousel article[data-position="active"]{transform:translateX(0) rotateY(0deg) translateX(0);filter:blur(0) brightness(1)}
#method-carousel article[data-position="previous"]{transform:translateX(calc(-50% - 18px)) rotateY(-64deg) translateX(-50%)}
#method-carousel article[data-position="next"]{transform:translateX(calc(50% + 18px)) rotateY(64deg) translateX(50%)}
#method-carousel article.is-wrapping{transition:none!important;visibility:hidden!important;opacity:0!important}
#method-carousel video{backface-visibility:hidden;-webkit-backface-visibility:hidden;border-color:transparent}
.method-loop .loop-arrow{backdrop-filter:none;isolation:isolate;transform:translateZ(0)}
.method-loop .loop-arrow:hover{transform:translateZ(0) scale(1.06)}
@media(max-width:650px){#method-carousel article[data-position="previous"]{transform:translateX(calc(-50% - 10px)) rotateY(-72deg) translateX(-50%)}#method-carousel article[data-position="next"]{transform:translateX(calc(50% + 10px)) rotateY(72deg) translateX(50%)}}
@media(prefers-reduced-motion:reduce){#method-carousel article[data-position]{transition:none}}

/* Sister-project navigation. */
nav a.project-switch{display:inline-flex;align-items:center;gap:8px;flex-shrink:0;white-space:nowrap;padding:7px 12px;border:1px solid #23d8ea75;border-radius:9px;background:linear-gradient(120deg,#14323ded,#17222fed);color:#e6fcff;font-size:13px;font-weight:600;box-shadow:0 0 15px #23d8ea12;transition:border-color .2s,background .2s}
nav a.project-switch:hover{border-color:#23d8ea;background:#1b3e49;color:#fff}
nav a.project-switch:focus-visible{outline:2px solid #23d8ea;outline-offset:4px}
.project-switch .project-icon{display:block;flex:none}.project-switch .project-arrow{color:#23d8ea;font-size:16px}
@media(max-width:420px){nav a.project-switch{gap:5px;padding:6px 8px;font-size:11px}.project-switch .project-icon{width:18px;height:18px}}

.paper-authors a{border-bottom:1px solid #23d8ea55;text-underline-offset:4px;transition:color .2s,border-color .2s}.paper-authors a:hover{color:var(--cyan);border-color:var(--cyan)}

.balloon-boom-title{padding-right:28px;overflow:visible}
.balloon-boom-title .boom-word{position:relative;display:inline-block;color:#ffad62;text-shadow:0 0 28px #ff95512b}
.boom-burst{position:absolute;width:52px;height:52px;right:-34px;top:-25px;pointer-events:none;transform:rotate(12deg)}
@media(hover:hover) and (prefers-reduced-motion:no-preference){.burst-highlight:hover .boom-burst{animation:boom-pop .65s ease-out both}}
@keyframes boom-pop{0%{transform:rotate(12deg) scale(.7);opacity:.5}45%{transform:rotate(26deg) scale(1.15);opacity:1}100%{transform:rotate(12deg) scale(1);opacity:1}}
@media(max-width:650px){.boom-burst{width:40px;height:40px;right:-27px;top:-19px}}

/* Red burst, with a short pop and expanding rays between calm intervals. */
.balloon-boom-title .boom-word{color:#ff4b4b;text-shadow:0 0 22px #ff333338}
.boom-burst path:first-child{fill:#ff3939;stroke:#ff6767;fill-opacity:.18}
.boom-burst path:last-child{fill:#ffb29a}
.boom-word::after{content:"";position:absolute;pointer-events:none;right:-26px;top:-17px;width:36px;height:36px;border:2px solid #ff5050;border-radius:50%;opacity:0}
@media(prefers-reduced-motion:no-preference){
 .burst-highlight .boom-burst,.burst-highlight:hover .boom-burst{animation:boom-explode 3s ease-out infinite}
 .boom-word::after{animation:boom-shockwave 3s ease-out infinite}
}
@keyframes boom-explode{0%,64%,100%{transform:rotate(12deg) scale(1);opacity:.9}69%{transform:rotate(5deg) scale(.7);opacity:.65}76%{transform:rotate(20deg) scale(1.35);opacity:1}85%{transform:rotate(10deg) scale(.95);opacity:1}92%{transform:rotate(12deg) scale(1)}}
@keyframes boom-shockwave{0%,69%{transform:scale(.3);opacity:0}74%{transform:scale(.65);opacity:.8}94%,100%{transform:scale(1.9);opacity:0}}
@media(max-width:650px){.boom-word::after{width:28px;height:28px;right:-21px;top:-13px}}

/* Let the word join the burst without changing the surrounding layout. */
.balloon-boom-title .boom-word{transform-origin:50% 65%}
@media(prefers-reduced-motion:no-preference){.balloon-boom-title .boom-word{animation:boom-word-pop 3s ease-out infinite}}
@keyframes boom-word-pop{0%,64%,100%{transform:scale(1)}69%{transform:scale(.95)}76%{transform:scale(1.12)}85%{transform:scale(.98)}92%{transform:scale(1)}}
/* 00 / Simulation replay: the floating goal panel and the guides toggle (viewer.js) */
.swing-lab .sl-vcard{position:relative}
.swing-lab .sl-float{position:absolute;top:20px;right:20px;z-index:2;width:200px;padding:10px 11px;border:1px solid var(--line);border-radius:10px;background:rgba(23,28,37,.88);backdrop-filter:blur(6px);box-shadow:0 6px 22px rgba(0,0,0,.35);font:500 11.5px/1.4 'IBM Plex Mono',monospace;color:var(--ink)}
.swing-lab .sl-in label{display:grid;grid-template-columns:44px 1fr 14px;gap:6px;align-items:center;margin:0 0 4px}
.swing-lab .sl-in span{color:var(--muted)}
.swing-lab .sl-in i{font-style:normal;color:var(--ink3);text-align:right}
.swing-lab .sl-in input{width:100%;min-width:0;font:500 11.5px/1.4 'IBM Plex Mono',monospace;padding:3px 6px;border:1px solid var(--line);border-radius:6px;background:var(--panel);color:var(--ink);font-variant-numeric:tabular-nums}
.swing-lab .sl-in input:focus{outline:none;border-color:var(--cyan)}
.swing-lab button.sl-run{width:100%;margin-top:6px;padding:6px 0;border-color:var(--cyan);color:var(--cyan);font-weight:600}
.swing-lab button.sl-run:hover:not(:disabled){background:var(--cyan);color:#04161a}
.swing-lab button.sl-run:disabled{opacity:.45;cursor:default;border-color:var(--line);color:var(--muted)}
.swing-lab .sl-msg{margin:5px 0 0;font-size:10.5px;color:var(--muted)}
.swing-lab .sl-msg:empty{display:none}
.swing-lab .sl-res{width:100%;margin:6px 0 0;border-collapse:collapse;border:0;background:none;font:500 11.5px/1.4 'IBM Plex Mono',monospace}
.swing-lab .sl-res:empty{display:none}
.swing-lab .sl-res td{padding:2px 0;border:0;background:none;font:inherit;white-space:nowrap;text-align:left}
.swing-lab .sl-res td:first-child{color:var(--muted)}
.swing-lab .sl-res td:last-child{text-align:right}
.swing-lab .sl-res .ok{color:var(--good)}
.swing-lab .sl-res .bad{color:var(--bad)}
.swing-lab .sl-res em{font-style:normal;color:var(--warn);margin-left:4px}
.swing-lab button.sl-guides{margin-left:auto}
.swing-lab button.sl-guides.on{background:transparent;color:var(--cyan);border-color:var(--cyan)}
.swing-lab #swing-picker button.sl-runbtn{border-style:dashed}
@media (max-width:760px){.swing-lab .sl-float{position:static;width:auto;margin-top:10px;backdrop-filter:none;box-shadow:none}}
