:root{--ink:#233936;--muted:#778781;--line:#d7dfd9;--accent:#16725f;--paper:#eef1e9}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font-family:'Avenir Next','PingFang SC','Microsoft YaHei',sans-serif;font-size:13px}header{height:82px;border-bottom:1px solid var(--line);margin:0 38px;display:flex;align-items:center;gap:48px}.brand{font-size:24px;font-weight:800;color:var(--ink);text-decoration:none;letter-spacing:-1px}.brand span{color:#98a49a;font-weight:400}.headnote{font-size:10px;letter-spacing:2px}.headnote b{margin-left:15px;color:#8c9d92}.badge{margin-left:auto;font-size:11px;border:1px solid #bfcfc1;padding:8px 13px;border-radius:3px;color:var(--accent)}main{position:relative;height:calc(100vh - 159px);min-height:620px;overflow:hidden}.intro{position:absolute;z-index:2;top:54px;left:38px;pointer-events:none;width:260px}.eyebrow{font-size:10px;letter-spacing:2px;color:var(--accent);font-weight:600}h1{font-size:35px;line-height:1.25;letter-spacing:-2px;font-weight:500;margin:20px 0}p{line-height:1.9;color:var(--muted)}.intro p{font-size:12px}.facts{display:flex;gap:26px;border-top:1px solid var(--line);padding-top:24px;margin-top:36px}.facts strong{font-size:23px;font-weight:500;display:block;letter-spacing:-1px}.facts small{font-size:9px;display:block;color:var(--muted);margin-top:6px}.legend{margin-top:35px;font-size:10px;line-height:2.5;color:var(--muted)}.legend i{display:inline-block;background:#217a61;width:6px;height:6px;margin-right:7px;border-radius:50%}.legend i.amber{background:#c8914f}#viewport{position:absolute;inset:0 270px 38px 230px;touch-action:none}canvas{display:block;width:100%;height:100%}aside{position:absolute;right:32px;top:48px;width:226px;background:#eef1e9e8;padding:12px 0}h2{font-size:17px;font-weight:500;margin:12px 0 22px}.modes{border-top:1px solid var(--line)}button{font:inherit;color:inherit;cursor:pointer}.modes button{width:100%;display:flex;gap:20px;border:0;border-bottom:1px solid var(--line);background:transparent;padding:15px 12px;text-align:left;font-size:10px;color:#819087}.modes button span{font-size:12px}.modes button.active{background:var(--ink);color:white}.slider-label{display:flex;justify-content:space-between;font-size:11px;margin:24px 0 8px}output{color:var(--accent)}input[type=range]{width:100%;accent-color:var(--accent);cursor:pointer}.toggles{display:flex;flex-wrap:wrap;gap:12px;margin:20px 0;font-size:11px}.toggles label{display:flex;align-items:center;gap:5px}input[type=checkbox]{accent-color:var(--accent)}.part-info{border-top:1px solid var(--line);padding-top:20px;min-height:162px}.part-info small{font-size:10px;color:#a17741}.part-info h3{font-size:15px;font-weight:500;margin:9px 0}.part-info p{font-size:11px;margin:0}.reset{border:0;background:transparent;color:var(--accent);padding:12px 0;font-size:11px}.viewbar{position:absolute;bottom:12px;left:38px;right:32px;display:flex;align-items:center;gap:6px}.viewbar button{border:1px solid var(--line);background:transparent;padding:9px 15px;font-size:11px;border-radius:3px}.viewbar button.active{border-color:var(--accent);color:var(--accent);background:#e0e9df}.viewbar span{margin-left:16px;color:#93a095;font-size:10px}footer{height:77px;border-top:1px solid var(--line);margin:0 38px;display:flex;align-items:center;gap:26px;font-size:10px;color:var(--muted)}footer p{max-width:660px;font-size:10px;line-height:1.7}footer b{font-weight:600;color:var(--accent);margin-right:8px}#model-status{margin-left:auto;white-space:nowrap;letter-spacing:1px;font-size:9px}#labels{position:absolute;inset:0;pointer-events:none;overflow:hidden}.label{position:absolute;pointer-events:auto;background:#f7f8f1ed;border:1px solid #cbd6cb;border-radius:3px;padding:6px 9px;white-space:nowrap;font-size:10px;box-shadow:0 3px 12px #263b3410;transform:translate(-50%,-100%)}.label:after{content:'';position:absolute;left:50%;top:100%;height:13px;width:1px;background:#7d9a87}.label.concept{border-left:2px solid #c18d49}#loading{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font-size:12px;color:var(--accent);background:var(--paper);padding:18px}button:hover{filter:brightness(.93)}button:focus-visible,input:focus-visible{outline:2px solid #ad793c;outline-offset:3px}@media(max-width:1050px){.intro{width:190px}h1{font-size:33px}#viewport{left:160px;right:235px}aside{width:195px;right:20px}header,footer{margin:0 22px}.intro{left:22px}.legend{max-width:165px}.viewbar span{display:none}}@media(max-width:720px){header{height:64px;gap:15px}.headnote{display:none}.badge{font-size:9px}main{height:auto;min-height:1020px}.intro{top:22px;width:100%;pointer-events:none}.intro h1{font-size:27px;margin:9px 0}.intro h1 br{display:none}.intro p,.facts,.legend{display:none}#viewport{inset:90px 0 auto;height:480px}aside{top:590px;left:22px;right:22px;width:auto}.modes{display:flex}.modes button{padding:13px 7px;gap:7px}.part-info{min-height:110px}.viewbar{left:22px;right:22px;bottom:auto;top:548px}footer{height:auto;padding:20px 0;flex-wrap:wrap;gap:5px}footer p{margin:4px 0}#model-status{display:none}.toggles{margin:13px 0}h2{margin-bottom:12px}}

button:disabled{opacity:.4;cursor:default;filter:none}

#language{font:inherit;border:1px solid var(--line);background:transparent;color:var(--ink);padding:7px;max-width:115px}.tour-primary{pointer-events:auto;background:var(--accent);color:white;border:0;border-radius:3px;padding:13px 18px;margin-top:16px;font-size:12px}.intro .facts{margin-top:24px}#tour-panel{position:absolute;z-index:5;bottom:12px;left:50%;transform:translateX(-50%);width:min(580px,96%);padding:16px 20px;background:#f7f8f3f5;border:1px solid #bdcdbd;border-radius:6px;box-shadow:0 8px 30px #23393615}.tour-meta{display:flex;justify-content:space-between;font-size:10px;letter-spacing:1px;color:var(--accent)}#tour-panel h3{font-weight:500;font-size:18px;margin:9px 0 4px}#tour-desc{font-size:11px;line-height:1.7;margin:0 0 8px;min-height:38px}.tour-actions{display:flex;gap:7px;flex-wrap:wrap;align-items:center}.tour-actions button,.tour-actions select{border:1px solid var(--line);background:transparent;padding:6px 8px;font:inherit;font-size:10px;color:var(--ink);border-radius:3px}.tour-actions select{margin-left:auto}.tour-active #labels{display:none}aside{max-height:calc(100% - 105px);overflow-y:auto;overflow-x:hidden}html[lang=en] h1{letter-spacing:-1.5px;font-size:41px}html[lang=en] .intro{width:220px}html[lang=en] .legend{font-size:9px}#tour-panel[hidden]{display:none}
@media(max-width:720px){header{gap:10px}.badge{display:none}#language{margin-left:auto}.intro .tour-primary{position:absolute;right:44px;top:26px;margin:0;padding:9px;font-size:10px}.intro h1,html[lang=en] h1{font-size:25px!important}.intro,html[lang=en] .intro{width:100%}#tour-panel{padding:10px;bottom:0}.tour-active #viewport{height:500px}aside{max-height:none;overflow:visible}.viewbar{flex-wrap:wrap;gap:4px}.viewbar button{padding:7px 9px}.intro .eyebrow{font-size:8px}.headnote{display:none}}

/* Keep the guide outside the WebGL canvas; mobile sections size themselves. */
#tour-panel{bottom:50px;left:calc(50% - 20px);width:min(580px,calc(100% - 520px))}
@media(max-width:720px){
 main{display:flex;flex-direction:column;height:auto;min-height:0;overflow:visible;padding-bottom:20px}
 .intro,html[lang=en] .intro{position:relative;inset:auto;width:auto;margin:20px 22px 0;order:0}
 .intro .tour-primary{position:static;margin:6px 0 0;padding:11px 16px;font-size:12px;min-height:44px}
 #viewport,.tour-active #viewport{position:relative;inset:auto;width:100%;height:clamp(300px,48svh,440px);flex:none;order:1}
 #tour-panel{position:relative;inset:auto;transform:none;width:auto;margin:0 16px 12px;padding:14px;order:2;box-shadow:none}
 #tour-desc{min-height:0}
 .tour-actions button,.tour-actions select{min-height:44px;font-size:12px;padding:8px 10px}
 #tour-progress{height:28px;margin:4px 0}
 .viewbar{position:relative;inset:auto;order:3;margin:0 22px 12px;flex-wrap:wrap}
 aside{position:relative;inset:auto;order:4;width:auto;margin:0 22px;max-height:none;overflow:visible}
}
