.footprint-globe{position:relative;animation:none!important;filter:none!important;overflow:visible;max-width:560px!important;max-height:560px!important}
#footprint-canvas{display:block;width:100%;height:100%;aspect-ratio:1;touch-action:pan-y}
.footprint-controls{position:absolute;bottom:0;left:0;right:0;display:flex;justify-content:center;align-items:center;gap:22px;font-size:10px;letter-spacing:1px}
.footprint-controls>span{color:var(--muted);font-size:9px;margin-right:5px}
.footprint-controls button{border:0;background:none;color:#c7cdd7;font-size:10px;display:flex;align-items:center;gap:7px;padding:8px 0}
.footprint-controls i,.place-card strong i{display:inline-block;width:5px;height:5px;border-radius:50%;background:var(--place-color)}
.footprint-controls button[aria-pressed=true]{color:#fff}
.place-card{position:absolute;z-index:5;right:5%;top:8%;width:260px;padding:18px 20px;background:rgba(8,11,16,.96);border:1px solid rgba(210,220,240,.2);box-shadow:0 14px 40px #0004;pointer-events:none}
.place-card strong{font-size:13px;font-weight:400;display:flex;align-items:center;gap:9px}
.place-card small{display:block;margin-top:9px;font-size:9px;color:#929aab;letter-spacing:1px}
.place-card p{font-size:11px;color:#c0c6d0;line-height:1.9;margin:12px 0 0}
header nav{margin-right:auto}
.tree-heading-note{display:none}
.hero-copy .eyebrow,.home-bottom .section-mark{display:none}
@media(max-width:650px){.footprint-globe{width:100%;margin:20px auto 40px}.place-card{width:230px;right:0;top:0}.footprint-controls{gap:15px}}
.intro-active{overflow:hidden}
/* Route cover conceals the content swap, then reveals the next scene. */
/* 页面切换：和开场同一套语言——纯黑幕布沿同一斜角擦入、换页、再擦出，白色斜边领跑，不写字 */
.page-transition{position:fixed;inset:0;z-index:80;pointer-events:none;visibility:hidden;overflow:hidden}
.page-transition.active{visibility:visible;pointer-events:auto}
.pt-panel{position:absolute;inset:0;background:#000;clip-path:polygon(0 0,0 0,0 100%,0 100%);will-change:clip-path}
.pt-canvas{position:absolute;inset:0;width:100%;height:100%}
.pt-edge{position:absolute;top:-2%;bottom:-2%;left:0;width:1px;background:#f2f2f2;opacity:0;transform-origin:0 100%;will-change:transform}
.navigating main{pointer-events:none}
.page{animation:scene-arrival 1.1s cubic-bezier(.16,1,.3,1) both}
.home .hero-copy>*{animation:content-arrival 1s cubic-bezier(.16,1,.3,1) both}
.home .hero-copy>:nth-child(1){animation-delay:.08s}.home .hero-copy>:nth-child(2){animation-delay:.15s}.home .hero-copy>:nth-child(3){animation-delay:.22s}.home .hero-copy>:nth-child(4){animation-delay:.3s}.home .hero-copy>:nth-child(5){animation-delay:.38s}.home .hero-copy>:nth-child(6){animation-delay:.46s}.home .hero-copy>:nth-child(7){animation-delay:.54s}
.home .hero-visual{animation:visual-arrival 1.8s .2s cubic-bezier(.16,1,.3,1) both}
.tree-page #edges path{stroke-dasharray:900;stroke-dashoffset:0;animation:connect-path 1.8s .25s ease both}
.tree-page #edges path.future{stroke-dasharray:4 7;animation:arrive 1.4s .4s both}
.tree-page .node{animation:node-arrival .9s calc(.3s + var(--node-order,0) * 35ms) cubic-bezier(.16,1,.3,1) both}
.node.explore .node-marker{animation:node-breathe 5s ease-in-out infinite}
#replay-intro{background:none;border:0;border-right:1px solid var(--line);padding:3px 14px 3px 0;font-size:9px;color:var(--muted);letter-spacing:1px}#replay-intro:hover{color:var(--accent)}
.enter-symbol{transition:background .3s,transform .4s}.enter:hover .enter-symbol{transform:rotate(-7deg);background:rgba(var(--rgb),.08)}.enter-arrow{transition:transform .4s}.enter:hover .enter-arrow{transform:translateX(5px)}
@keyframes scene-arrival{from{opacity:0;}to{opacity:1;}}
@keyframes content-arrival{from{opacity:0;transform:translateY(24px);}to{opacity:1;transform:translateY(0);}}
@keyframes visual-arrival{from{opacity:0;transform:scale(1.08) rotate(-5deg);}to{opacity:1;transform:scale(1) rotate(0);}}
@keyframes node-arrival{from{opacity:0;}to{opacity:1;}}
@keyframes connect-path{from{stroke-dashoffset:900}to{stroke-dashoffset:0}}
@keyframes node-breathe{0%,100%{box-shadow:0 0 0 rgba(var(--rgb),0)}50%{box-shadow:0 0 18px rgba(var(--rgb),.22)}}
.node.dim{opacity:.15!important}.node.absent{visibility:hidden;pointer-events:none}

/* Scene changes use opacity and transforms, without full-page blur. */
.grain{display:none}
.page{animation:scene-arrival .42s ease-out both}
.home .hero-copy>*{animation-duration:.55s}
.home .hero-visual{animation-duration:.8s}
.tree-page .node{animation:node-arrival .45s calc(.06s + var(--node-order,0) * 15ms) ease-out both}
.tree-page #edges path,.tree-page #edges path.future{animation:none}
.node.explore .node-marker{animation:none}
.node{font-size:calc(11px * var(--inverse-scale,1))}
.node.root{font-size:calc(13px * var(--inverse-scale,1))}
.node small{font-size:calc(8px * var(--inverse-scale,1))}
.tree-page #edges path{stroke-dasharray:none}
.tree-page #edges path.future{stroke-dasharray:4 7}
.orbital-two{animation:none}
@keyframes scene-arrival{from{opacity:0}to{opacity:1}}
@keyframes node-arrival{from{opacity:0;transform:translate(-50%,calc(-50% + 5px))}to{opacity:1;transform:translate(-50%,-50%)}}
@media(min-width:901px){
 header{height:72px;max-width:1560px;width:calc(100% - 96px);margin-inline:auto}
 footer{max-width:1560px;width:calc(100% - 96px);margin-inline:auto;padding:18px 0;min-height:64px}
 .tree-page{max-width:1480px;width:calc(100% - 128px);margin-inline:auto;padding:20px 0 8px;height:calc(100dvh - 136px);min-height:610px;display:grid;grid-template-rows:auto auto minmax(270px,1fr) auto auto}
 .tree-heading h2{font-size:30px;margin:10px 0 7px}.tree-heading p{margin:8px 0}
 .tree-heading-note{font-size:9px}
 .map-toolbar{margin-top:12px;padding-bottom:10px}
 .map-shell{height:auto;min-height:0}
 .timeline{padding:14px 0 5px}
 .timeline input{margin:13px 0 10px}
 .evidence-note{margin:10px 0 0;font-size:8px}
 .home{max-width:1480px;width:calc(100% - 128px);padding:40px 0 0;margin-inline:auto;min-height:calc(100dvh - 136px);grid-template-columns:1.1fr 1fr}
 .home h1{font-size:clamp(46px,4.7vw,76px)}
 .home .hero-visual{max-height:510px;max-width:510px;width:100%;justify-self:end}
 .home-bottom{margin-top:30px}
}
@media(max-width:650px){.theme-control{gap:8px;flex-wrap:wrap}#replay-intro{font-size:8px;padding-right:9px}.home h1{font-size:43px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}.page,.hero-copy>*,.hero-visual,.node{opacity:1;filter:none}.page-transition{display:none}}
