:root{color-scheme:dark;--cream:#f5e8c9;--muted:#9ca6b4;--gold:#dfbd7b}*{box-sizing:border-box}body{margin:0;background:#071023;color:var(--cream);font-family:"PingFang SC","Microsoft YaHei",sans-serif;overflow:hidden;height:100dvh;min-height:560px}button{font:inherit;cursor:pointer}button:focus-visible{outline:2px solid var(--gold);outline-offset:6px}button{-webkit-tap-highlight-color:transparent}canvas{position:fixed;inset:0;width:100%;height:100%;touch-action:none}.grain{position:fixed;inset:0;pointer-events:none;opacity:.065;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.95' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' opacity='.6' filter='url(%23n)'/%3E%3C/svg%3E")}header{position:fixed;top:35px;left:4.8%;right:4.8%;display:flex;justify-content:space-between;align-items:center;z-index:4}.brand{display:flex;gap:14px;align-items:center;font-family:Georgia,serif;letter-spacing:4px;background:none;border:0;color:#e7d3aa;font-size:13px;padding:10px 0}.brand-star{font-size:24px;line-height:1}.header-actions{display:flex;gap:14px}.icon-button{color:#c4c6c7;background:rgba(10,22,42,.3);border:1px solid #c7c6b620;border-radius:50%;width:38px;height:38px;display:grid;place-items:center}.icon-button:hover{background:#ffffff12;border-color:#dfbd7b70}.icon-button svg{width:17px;height:17px;stroke:currentColor;fill:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}.icon-button span{font-family:Georgia,serif;font-size:20px}.intro{position:absolute;left:9.5%;top:50%;transform:translateY(-44%);z-index:2;transition:opacity .6s,transform .8s}.intro.leaving{opacity:0;transform:translate(-30px,-44%);pointer-events:none}.eyebrow{font-size:11px;letter-spacing:4px;color:#c5b58f;display:flex;align-items:center;gap:12px;font-weight:400}.eyebrow span{width:22px;height:1px;background:#b69d6b}.intro h1{font-family:"Noto Serif CJK SC","Songti SC",STSong,SimSun,serif;font-weight:400;font-size:clamp(65px,7.4vw,112px);letter-spacing:.14em;line-height:1.2;margin:30px 0 10px;text-shadow:0 2px 30px #eed6a010}.subtitle{font-family:"Noto Serif CJK SC","Songti SC",STSong,SimSun,serif;font-size:clamp(20px,2.3vw,31px);letter-spacing:.2em;margin:0 0 24px}.title-line{display:flex;flex-direction:column;gap:16px;width:272px}.title-line i{height:1px;background:linear-gradient(90deg,#c7aa70a0,#c7aa7000);position:relative}.title-line i:after{content:'✦';font-style:normal;font-size:10px;position:absolute;left:145px;top:-7px;color:#ddbb77}.title-line span{font-family:Georgia,serif;font-size:10px;letter-spacing:6px;color:#b9b9b2}.description{font-size:13px;line-height:2.1;letter-spacing:1.5px;color:#a6afbb;margin:29px 0 28px}.start-button{width:206px;padding:16px 22px;display:flex;justify-content:space-between;align-items:center;border:1px solid #c2a66e7a;color:#f5e5bf;background:linear-gradient(105deg,#baa06d1f,#baa06d08);letter-spacing:3px;font-size:13px;border-radius:2px;transition:.2s}.start-button:hover{background:#dec17e22;border-color:#dfbd7b;transform:translateY(-2px);box-shadow:0 6px 28px #c0a3740c}.arrow{font-size:22px;line-height:16px}.start-note{color:#727e91;font-size:10px;letter-spacing:2px;margin-top:15px}.planet-caption{position:fixed;bottom:13%;left:65%;font-size:9px;letter-spacing:3px;color:#8c9caa;display:flex;align-items:center;gap:12px;transition:opacity .4s}.orbit-dot{height:4px;width:4px;border-radius:50%;background:#d3b477;box-shadow:0 0 9px #d3b477}.caption-line{width:40px;height:1px;background:#7b8b9a50}footer{position:fixed;bottom:29px;left:4.8%;right:4.8%;display:flex;justify-content:space-between;font-size:9px;letter-spacing:2px;color:#6f7a8a;pointer-events:none}.footer-mark i{font-style:normal;color:#bda66d;margin-left:18px}.game-hud{position:fixed;top:120px;left:7%;z-index:3}.progress-label{font-size:11px;letter-spacing:3px;color:#ab9d7e}.progress-stars{font-size:27px;letter-spacing:7px;color:#e3c382;margin:14px 0 10px}.game-hud p{font-size:11px;color:#8493a7;letter-spacing:1px;max-width:220px;line-height:1.8}.controls{position:fixed;bottom:62px;left:50%;transform:translateX(-50%);z-index:3}.keyboard-hints{display:flex;align-items:center;gap:18px;white-space:nowrap;font-size:10px;color:#8493a7;letter-spacing:1px}.keyboard-hints span{display:flex;align-items:center;gap:5px}.keyboard-hints i{font-style:normal;opacity:.4}kbd{font:10px sans-serif;padding:4px 6px;min-width:23px;text-align:center;border:1px solid #8a9aad33;border-radius:3px;color:#c5ccd2;background:#18213850}.touch-controls{display:none;gap:14px;justify-content:center}.touch-controls button{width:54px;height:48px;background:#172335a8;border:1px solid #aeb6bd30;color:#e3d6b9;border-radius:16px;font-size:23px;touch-action:none;user-select:none}.touch-controls button:active{background:#b89e5f50}.toast{position:fixed;left:50%;bottom:150px;transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .4s,transform .4s;text-align:center;z-index:5;color:#e6d7b8;font-size:13px;letter-spacing:1.5px;padding:14px 24px;background:#0b1628b8;backdrop-filter:blur(10px);border:1px solid #bba37322;border-radius:30px;max-width:90vw;white-space:nowrap}.toast.show{opacity:1;transform:translate(-50%,0)}.interaction{position:fixed;left:50%;bottom:110px;transform:translateX(-50%);z-index:5}.interaction button{color:#f2dfb7;border:1px solid #d5b26b66;border-radius:24px;padding:11px 20px;letter-spacing:1.5px;background:#13202eeb;font-size:12px}.interaction span{border:1px solid #c3ad7a66;border-radius:3px;padding:1px 4px;margin-left:10px;font-size:10px}dialog{color:var(--cream);width:min(420px,90vw);padding:36px 38px;text-align:center;border:1px solid #c6ad783d;border-radius:12px;background:linear-gradient(160deg,#17263c,#091426);box-shadow:0 30px 100px #0007}dialog::backdrop{background:#030a18b8;backdrop-filter:blur(8px)}dialog h2{font-family:"Noto Serif CJK SC","Songti SC",STSong,SimSun,serif;font-weight:400;font-size:29px;line-height:1.6;letter-spacing:3px;margin:17px 0}dialog p:not(.eyebrow){font-size:12px;line-height:2.2;color:#b0b9c4}dialog .eyebrow{display:block;font-size:10px;letter-spacing:3px}dialog .muted{color:#7b8c9f!important;font-size:10px!important}.dialog-symbol{color:#e0bd76;font-size:35px;margin-bottom:20px}.dialog-close{position:absolute;right:13px;top:10px;border:0;background:none;color:#8f9aac;font-size:25px;padding:2px 7px}.solid-button{background:#d9bd87;color:#172032;padding:13px 22px;border:0;border-radius:3px;letter-spacing:2px;font-size:12px;margin-top:17px}.solid-button:hover{background:#eed3a2}.text-button{display:block;margin:16px auto 0;border:0;background:none;color:#98a6b6;font-size:11px;padding:6px;letter-spacing:1px}[hidden]{display:none!important}body.playing .planet-caption{opacity:0}body.playing .footer-mark{opacity:0}body.playing canvas{cursor:grab}body.playing canvas:active{cursor:grabbing}
@media(max-width:760px){body{min-height:520px}header{top:20px;left:6%;right:6%}.brand{font-size:11px;gap:9px}.brand-star{font-size:21px}.header-actions{gap:9px}.icon-button{width:34px;height:34px}.intro{left:9%;top:118px;transform:none}.intro.leaving{transform:translateY(-15px)}.intro .eyebrow{font-size:9px;letter-spacing:3px}.intro h1{font-size:57px;margin:17px 0 4px;letter-spacing:.15em}.subtitle{font-size:19px;margin-bottom:14px}.title-line{width:210px;gap:11px}.title-line span{font-size:8px;letter-spacing:4px}.description{font-size:11px;margin:18px 0;line-height:1.9}.start-button{width:172px;padding:13px 17px;font-size:11px}.start-note{font-size:9px;letter-spacing:1px}.planet-caption{display:none}footer{bottom:19px;left:6%;right:6%;font-size:8px;letter-spacing:1px}.footer-mark{display:none}.game-hud{top:97px;left:8%}.progress-label{font-size:10px}.progress-stars{font-size:24px;margin:10px 0}.game-hud p{font-size:10px;max-width:190px}.keyboard-hints{display:none}.touch-controls{display:flex}.controls{bottom:62px}.toast{bottom:170px;font-size:11px;padding:13px 19px;white-space:normal;width:max-content;line-height:1.7}.interaction{bottom:128px}dialog{padding:30px 24px}.intro{pointer-events:none}.intro button{pointer-events:auto}}
@media(max-width:760px) and (max-height:700px){.intro{top:95px}.intro h1{font-size:45px;margin:12px 0 3px}.description{margin:14px 0;font-size:10px}.start-note{display:none}.subtitle{font-size:17px;margin-bottom:10px}.title-line{gap:8px}.intro .eyebrow{font-size:8px}.start-button{padding:11px 16px}}
@media(prefers-reduced-motion:reduce){*{transition:none!important}.grain{display:none}}
.map-button{border:1px solid #c7c6b630;border-radius:22px;background:#15213780;color:#d7cba9;font-size:11px;padding:8px 16px;letter-spacing:2px}.world-title{position:fixed;top:34px;left:50%;transform:translateX(-50%);text-align:center;pointer-events:none;z-index:2}.world-title>span{font:9px Georgia,serif;letter-spacing:4px;color:#b3a281}.world-title h2{font-family:SimSun,serif;font-size:20px;font-weight:400;letter-spacing:4px;margin:9px 0}.world-title p{font-size:9px;color:#8495a8;letter-spacing:2px;margin:0}.travel-button{position:fixed;right:6%;bottom:88px;border:1px solid #d8b67470;background:#182538df;color:#ead7ac;padding:15px 22px;border-radius:30px;z-index:6;font-size:11px;letter-spacing:1px;box-shadow:0 0 30px #c4a56613}.travel-button:hover{background:#3a3d3be6}.flight{position:fixed;inset:0;z-index:20;background:#071222;display:grid;place-content:center;text-align:center;opacity:0;visibility:hidden;transition:opacity .4s,visibility .4s;pointer-events:none}.flight.active{opacity:1;visibility:visible}.flight span{color:#e2c283;font-size:54px}.flight p{font-size:13px;letter-spacing:4px;color:#b5c1cd;margin-top:22px}.encounter-actions{display:flex;flex-direction:column;gap:9px;margin-top:22px}.choice-button{color:#e2d6ba;background:#c0a66e0e;border:1px solid #bda3674d;border-radius:5px;padding:12px 14px;font-size:12px;letter-spacing:1px;line-height:1.6}.choice-button:hover{background:#d8b77825;border-color:#d8b7788a}#encounter-feedback{color:#d3b981;font-size:11px;min-height:12px}#encounter-dialog{width:min(450px,92vw)}#encounter-dialog h2{font-size:25px}#map-dialog{width:min(760px,94vw);max-height:86dvh;padding:30px}.route{display:grid;grid-template-columns:repeat(3,1fr);gap:13px;margin:26px 0 16px}.route-stop{display:flex;gap:11px;align-items:center;text-align:left;padding:16px 12px;background:#ffffff04;border:1px solid #d5b88422;border-radius:8px;color:#d8d8ce;min-height:84px}.route-stop.current{border-color:#dbc17d88;background:#d5b8840c}.route-stop:disabled{opacity:.35;cursor:default}.route-stop:not(:disabled):hover{border-color:#dbc17d99}.route-orb{width:35px;height:35px;min-width:35px;border-radius:50%;background:radial-gradient(circle at 30% 20%,#c2ba89,#5f705d 70%,#273747);display:grid;place-items:center;color:#fff0bb;font-size:15px;box-shadow:0 0 18px #b8c49b12}.route-stop strong{display:block;font-size:11px;font-weight:400;line-height:1.7}.route-stop small{display:block;font-size:8px;line-height:1.8;color:#8395a7;margin-top:3px}.map-note{font-size:9px!important;color:#7a8ea4!important}body.playing .planet-caption{display:none}body.playing .game-hud{max-width:230px}.progress-stars{line-height:1.8}
@media(max-width:760px){.world-title{top:82px;left:auto;right:7%;transform:none;text-align:right;max-width:58%}.world-title h2{font-size:16px;letter-spacing:2px}.world-title p{font-size:8px;letter-spacing:1px}.world-title>span{font-size:8px}.game-hud{top:158px;left:7%;max-width:210px}.progress-stars{font-size:20px!important;letter-spacing:2px;margin:3px 0}.game-hud p{font-size:9px;max-width:220px}.progress-label{font-size:9px}.travel-button{right:50%;transform:translateX(50%);bottom:124px;padding:11px 19px;white-space:nowrap;font-size:10px}.interaction{bottom:178px}.toast{bottom:224px}.map-button{padding:7px 11px;font-size:10px}.header-actions{gap:7px}.route{grid-template-columns:1fr 1fr;gap:8px}.route-stop{padding:11px 9px;min-height:75px;gap:7px}.route-orb{width:28px;height:28px;min-width:28px}.route-stop strong{font-size:10px}.route-stop small{font-size:8px}#map-dialog{padding:25px 15px}.world-title~.travel-button{z-index:6}}
#scene3d{pointer-events:none;z-index:0}.mode-3d #universe{cursor:grab}.mode-3d #universe:active{cursor:grabbing}#mode3d{font-size:10px;min-width:51px;letter-spacing:0}.mode-3d #mode3d{color:#f4dba2;border-color:#d6bc6f70}@media(max-width:760px){#mode3d{padding:7px 9px;font-size:9px;min-width:41px}.brand{letter-spacing:2px}.header-actions{gap:5px}}
/* The joystick supports a continuous full circle, including diagonal movement. */
.joystick{display:none;position:relative;width:96px;height:96px;border:1px solid #cbb78650;border-radius:50%;background:radial-gradient(circle,#172638cc,#101c2ca8);touch-action:none;user-select:none;box-shadow:inset 0 0 24px #030c1d55}.joystick-guide{position:absolute;inset:0;display:grid;place-items:center;color:#d9c38c50;font-size:78px;font-weight:200}.joystick-knob{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:38px;height:38px;border-radius:50%;border:1px solid #e0c38980;background:radial-gradient(circle at 30% 25%,#9d906bbf,#665a40bf);pointer-events:none;box-shadow:0 3px 12px #0005}.fallback-directions{display:flex;gap:14px}.touch-controls{align-items:center;gap:42px}.touch-controls #jump{font-size:13px;letter-spacing:1px;width:58px;height:58px;border-radius:50%}.mode-3d .joystick{display:block}.mode-3d .fallback-directions{display:none}
@media(max-width:760px){.mode-3d .controls{bottom:44px}.mode-3d .interaction{bottom:160px}.mode-3d .travel-button{bottom:160px}.mode-3d .interaction:not([hidden])~.travel-button{bottom:204px}.mode-3d .toast{bottom:250px}}
@media(pointer:coarse) and (min-width:761px){.touch-controls{display:flex}.keyboard-hints{display:none}.controls{bottom:36px}.mode-3d .interaction{bottom:150px}}

#illustration-dialog{width:min(92vw,760px);max-height:90dvh;padding:24px;border:1px solid #bfa77a;border-radius:18px;background:#efe2c4;color:#534632;box-shadow:0 20px 80px #02081588}#illustration-dialog::backdrop{background:#071023aa}#illustration-dialog h2{margin:0 0 16px;font:500 20px "Songti SC",serif}#illustration-dialog canvas{position:static;display:block;width:100%;height:auto;aspect-ratio:10/7;border:1px solid #c5b18a}#illustration-dialog p{font-size:13px}#illustration-dialog>div{display:flex;gap:10px;flex-wrap:wrap}#illustration-dialog button{padding:10px 14px;border:1px solid #a68c62;border-radius:24px;background:#fff8e9;color:#534632}


