:root{--ink: #0b3b4a;--ink-soft: rgba(11, 59, 74, .62);--coral: #ef7559;--coral-deep: #d9543a;--glass: rgba(255, 252, 245, .58);--glass-strong: rgba(255, 253, 248, .84);--glass-border: rgba(255, 255, 255, .72);--shadow: 0 12px 34px rgba(8, 48, 63, .18);--safe-bottom: env(safe-area-inset-bottom, 0px)}*{box-sizing:border-box}html,body{height:100%;margin:0}body{overflow:hidden;overscroll-behavior:none;background:#123a48;color:var(--ink);font-family:ui-sans-serif,system-ui,-apple-system,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Noto Sans SC,sans-serif;-webkit-tap-highlight-color:transparent}#scene{position:fixed;inset:0;display:block;width:100%;height:100%;touch-action:none;cursor:default;outline:none}body.is-placing #scene{cursor:crosshair}body.is-grabbing #scene{cursor:grabbing!important}.veil{position:fixed;inset:0;z-index:1;pointer-events:none;background:radial-gradient(120% 96% at 50% 44%,#04243200 50%,#0424323d)}.brand{position:fixed;top:clamp(18px,3.4vh,36px);left:clamp(18px,3.4vw,46px);z-index:5;pointer-events:none;color:#fffdf7;text-shadow:0 1px 2px rgba(6,40,55,.24),0 2px 26px rgba(6,40,55,.34)}.brand__eyebrow{margin:0 0 8px;font-size:10px;font-weight:600;letter-spacing:.46em;opacity:.82}.brand__title{margin:0;font-family:Songti SC,"Noto Serif SC","Source Han Serif SC",Iowan Old Style,Palatino,Georgia,serif;font-size:clamp(25px,3.2vw,38px);font-weight:600;letter-spacing:.14em}.brand__hint{margin:10px 0 0;font-size:12.5px;font-weight:500;letter-spacing:.08em;opacity:.96}.orbit-hint{position:fixed;left:clamp(18px,3.4vw,46px);bottom:calc(clamp(88px,11vh,112px) + var(--safe-bottom));z-index:4;display:flex;align-items:center;gap:8px;margin:0;padding:7px 13px;font-size:11.5px;letter-spacing:.06em;color:#fffdf4e6;background:#092f3d47;border:1px solid rgba(255,255,255,.16);border-radius:999px;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);pointer-events:none;text-shadow:0 1px 2px rgba(6,40,55,.3);transition:opacity .6s ease}.orbit-hint__dot{width:6px;height:6px;border-radius:50%;background:#ffd9a2;box-shadow:0 0 0 4px #ffd9a22e}.orbit-hint.is-faded{opacity:0}.actions{position:fixed;top:clamp(18px,3.4vh,36px);right:clamp(18px,3.2vw,40px);z-index:5;display:flex;gap:8px}.icon-btn{display:grid;place-items:center;width:40px;height:40px;padding:0;color:var(--ink);background:var(--glass);border:1px solid var(--glass-border);border-radius:50%;box-shadow:0 6px 18px #08303f24;-webkit-backdrop-filter:blur(12px) saturate(1.25);backdrop-filter:blur(12px) saturate(1.25);cursor:pointer;transition:transform .18s ease,background .18s ease,opacity .18s ease}.icon-btn:hover:not(:disabled){transform:translateY(-1px);background:var(--glass-strong)}.icon-btn:active:not(:disabled){transform:translateY(0) scale(.96)}.icon-btn:disabled{opacity:.35;cursor:default}.dock{position:fixed;left:50%;bottom:calc(clamp(16px,3vh,30px) + var(--safe-bottom));z-index:5;display:flex;width:max-content;max-width:calc(100vw - 24px);gap:4px;padding:7px;background:var(--glass);border:1px solid var(--glass-border);border-radius:999px;box-shadow:var(--shadow);-webkit-backdrop-filter:blur(16px) saturate(1.3);backdrop-filter:blur(16px) saturate(1.3);transform:translate(-50%)}.tool{display:inline-flex;align-items:center;gap:7px;padding:9px 14px;font:inherit;font-size:13px;letter-spacing:.04em;white-space:nowrap;color:var(--ink);background:transparent;border:0;border-radius:999px;cursor:pointer;transition:background .18s ease,color .18s ease,transform .18s ease}.tool:hover{background:#ffffff8c}.tool:active{transform:scale(.97)}.tool__icon{display:grid;place-items:center;width:20px;height:20px}.tool.is-active{color:#fff;background:linear-gradient(160deg,var(--coral),var(--coral-deep));box-shadow:0 6px 16px #d9543a59}.tool.is-active:hover{background:linear-gradient(160deg,var(--coral),var(--coral-deep))}.toast{position:fixed;left:50%;bottom:calc(clamp(16px,3vh,30px) + 76px + var(--safe-bottom));z-index:6;max-width:min(86vw,420px);padding:9px 16px;font-size:12.5px;letter-spacing:.04em;color:#fdf8ee;background:#0a3442c7;border:1px solid rgba(255,255,255,.14);border-radius:999px;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;pointer-events:none;transform:translate(-50%,8px);transition:opacity .24s ease,transform .24s ease}.toast.is-on{opacity:1;transform:translate(-50%)}.noscript{position:fixed;inset:40% 20% auto;z-index:9;color:#fff;text-align:center}.loading{position:fixed;inset:0;z-index:8;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;color:#fdf7ea;background:linear-gradient(180deg,#356f95,#7fb0c4 54%,#f3d3a6);transition:opacity .7s ease,visibility .7s ease}.loading.is-off{opacity:0;visibility:hidden;pointer-events:none}.loading__ring{width:30px;height:30px;border:2px solid rgba(255,253,244,.35);border-top-color:#fffdf4;border-radius:50%;animation:spin .95s linear infinite}.loading__text{margin:0;font-size:12.5px;letter-spacing:.28em;text-indent:.28em;opacity:.92}@keyframes spin{to{transform:rotate(360deg)}}.fallback{position:fixed;inset:0;z-index:20;display:grid;place-items:center;padding:24px;background:linear-gradient(180deg,#356f95,#7fb0c4 58%,#eecd9f)}.fallback[hidden]{display:none}.fallback__card{max-width:420px;padding:30px 30px 26px;text-align:center;color:var(--ink);background:var(--glass-strong);border:1px solid var(--glass-border);border-radius:22px;box-shadow:var(--shadow);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}.fallback__eyebrow{margin:0 0 8px;font-size:10px;font-weight:700;letter-spacing:.4em;color:var(--ink-soft)}.fallback__title{margin:0 0 10px;font-family:Songti SC,"Noto Serif SC",Georgia,serif;font-size:21px;letter-spacing:.08em}.fallback__text{margin:0;font-size:13px;line-height:1.8;color:var(--ink-soft)}.fallback__text a{color:var(--coral-deep)}button:focus-visible,a:focus-visible{outline:2px solid #fff;outline-offset:3px}@media(max-width:640px){.brand__hint,.orbit-hint{display:none}.tool{padding:9px 11px;font-size:12px}.dock{gap:2px}.actions{gap:6px}.icon-btn{width:36px;height:36px}}@media(max-width:380px){.tool__label{display:none}.tool{padding:10px 13px}}@media(prefers-reduced-motion:reduce){.icon-btn,.tool,.toast{transition-duration:.01ms}.loading__ring{animation-duration:3s}}
