:root{--bg: #0b1230;--bg-2: #141c44;--panel: rgba(16, 22, 56, .82);--line: rgba(255, 255, 255, .12);--text: #eef1ff;--muted: #9aa3c7;--accent: #ffb347;--accent-2: #ff5c8a;--ok: #4be1a0;--warn: #ffd23f;--bad: #ff6b6b;--safe-top: env(safe-area-inset-top, 0px);--safe-bottom: env(safe-area-inset-bottom, 0px)}*{box-sizing:border-box}html,body{margin:0;height:100%;background:radial-gradient(120% 90% at 50% 0%,var(--bg-2),var(--bg) 70%);color:var(--text);font-family:system-ui,-apple-system,Segoe UI,Noto Sans TC,sans-serif;-webkit-text-size-adjust:100%}body{overscroll-behavior:none}button{font:inherit}#app{min-height:100svh;display:grid;grid-template-rows:auto minmax(46svh,1fr) auto;grid-template-areas:"hud" "stage" "controls";padding-top:var(--safe-top)}.hud{grid-area:hud;display:flex;justify-content:space-between;align-items:center;gap:8px;padding:8px 12px;flex-wrap:wrap}.hud-left{display:flex;align-items:center;gap:10px;min-width:0}.back-lobby{color:var(--muted);text-decoration:none;font-size:13px;padding:6px 8px;border:1px solid var(--line);border-radius:8px;white-space:nowrap}.back-lobby:hover{color:var(--text);border-color:#ffffff4d}.title{margin:0;font-size:18px;letter-spacing:.08em;display:flex;flex-direction:column;line-height:1.1}.title small{font-size:11px;color:var(--muted);letter-spacing:0;font-weight:400}.hud-right{display:flex;gap:10px}.stat{display:flex;flex-direction:column;align-items:flex-start;min-width:48px}.stat .label{font-size:11px;color:var(--muted)}.stat strong{font-size:16px;font-variant-numeric:tabular-nums}.stage{grid-area:stage;position:relative;min-height:300px;overflow:hidden}#view{position:absolute;inset:0;width:100%;height:100%;display:block;touch-action:none}.stage.orbit #view{cursor:grab}.boot{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;text-align:center;padding:16px;background:#080c24b3}.boot[hidden]{display:none}.boot-detail{margin:0;color:var(--muted);font-size:13px;max-width:32ch;word-break:break-word}.boot.error strong{color:var(--bad)}.view-tools{position:absolute;top:8px;right:8px;display:flex;gap:6px;align-items:center;z-index:2}.chip,.chip-btn{font-size:12px;padding:5px 9px;border-radius:999px;border:1px solid var(--line);background:#0a0e28b3;color:var(--text)}.chip-btn{cursor:pointer}.chip-btn[aria-pressed=true]{border-color:var(--accent);color:var(--accent)}.fps{font-variant-numeric:tabular-nums;color:var(--muted)}.result{position:absolute;left:8px;bottom:8px;top:auto;display:flex;align-items:flex-start;gap:10px;padding:10px 14px;border-radius:14px;background:#0a0e28e6;border:1px solid rgba(255,179,71,.45);max-width:calc(100% - 16px);z-index:2;animation:pop .35s ease-out;pointer-events:none}.result[hidden]{display:none}.result-ball{width:34px;height:34px;border-radius:50%;flex:none;margin-top:2px;background:linear-gradient(180deg,var(--ball, #999) 50%,#fff4e0 50%);box-shadow:inset 0 -3px 6px #00000040,0 2px 8px #0006;border:1px solid rgba(0,0,0,.3)}.result-text{display:flex;flex-direction:column;gap:2px;line-height:1.25;min-width:0}.result-text strong{font-size:clamp(16px,4.2vw,20px);word-break:break-word;overflow-wrap:anywhere;color:#ffe6b0}.result-text span{font-size:12px;color:var(--muted);word-break:break-word}.result.fail{border-color:#ff6b6b80}.result.fail strong{color:var(--bad)}@keyframes pop{0%{transform:translateY(8px) scale(.92);opacity:0}to{transform:none;opacity:1}}.capsule-layer{--cap: 104px;position:absolute;inset:0;z-index:3;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;padding:12px;background:#080c2499;animation:fade-in .25s ease-out;overflow:hidden}.capsule-layer[hidden]{display:none}.capsule-stage{position:relative;width:min(260px,100%);height:calc(var(--cap) * 2.1);flex:none}.capsule{position:absolute;left:50%;bottom:0;width:var(--cap);height:var(--cap);margin-left:calc(var(--cap) / -2);padding:0;border:0;background:none;cursor:pointer;z-index:2;border-radius:50%;animation:capsule-in .45s cubic-bezier(.2,1.4,.4,1),wobble 1.8s ease-in-out .6s infinite}.capsule:focus-visible{outline:3px solid var(--accent);outline-offset:4px}.cap-top,.cap-bottom{position:absolute;left:0;width:100%;height:50%;box-shadow:inset 0 -4px 10px #0000002e;border:1px solid rgba(0,0,0,.3)}.cap-top{top:0;border-radius:var(--cap) var(--cap) 0 0;background:radial-gradient(60% 70% at 35% 30%,rgba(255,255,255,.55),transparent 60%),var(--ball, #ff8a3c);transform-origin:8% 100%;z-index:1}.cap-bottom{bottom:0;border-radius:0 0 var(--cap) var(--cap);background:linear-gradient(180deg,#fff9ee,#f0dcc0)}.slip{position:absolute;left:50%;bottom:calc(var(--cap) * .42);width:min(220px,92%);padding:10px 12px 12px;display:flex;flex-direction:column;align-items:center;gap:2px;text-align:center;color:#3a2a12;background:repeating-linear-gradient(180deg,#fffdf6 0 21px,#efe6d2 21px 22px);border-radius:4px;box-shadow:0 6px 16px #00000059;transform:translate(-50%,40%) scale(.2,.1);transform-origin:50% 100%;opacity:0;z-index:1}.slip-kicker{font-size:11px;letter-spacing:.2em;color:#9a7b4f}.slip strong{font-size:clamp(18px,5vw,24px);line-height:1.2;word-break:break-word;overflow-wrap:anywhere}.slip-meta{font-size:11px;color:#9a7b4f}.capsule-tip{margin:0;font-size:13px;color:var(--text);text-align:center;min-height:1.4em}.btn-take{background:linear-gradient(180deg,#ffc46b,#ff8a3c);color:#2b1400;border:none}.capsule-layer[data-state=opening] .capsule,.capsule-layer[data-state=open] .capsule{animation:twist .35s ease-in-out;cursor:default}.capsule-layer[data-state=opening] .cap-top,.capsule-layer[data-state=open] .cap-top{animation:lid-off .55s .3s cubic-bezier(.3,.8,.4,1) both}.capsule-layer[data-state=opening] .slip,.capsule-layer[data-state=open] .slip{animation:slip-out .8s .55s cubic-bezier(.2,.9,.3,1.15) both}@keyframes fade-in{0%{opacity:0}}@keyframes capsule-in{0%{transform:translateY(40px) scale(.4);opacity:0}}@keyframes wobble{0%,70%,to{transform:rotate(0)}78%{transform:rotate(-8deg)}86%{transform:rotate(7deg)}93%{transform:rotate(-3deg)}}@keyframes twist{30%{transform:rotate(-14deg)}70%{transform:rotate(10deg)}}@keyframes lid-off{0%{transform:none}45%{transform:translate(-6px,-48px) rotate(-35deg)}to{transform:translate(calc(var(--cap) * -.2),calc(var(--cap) * .12)) rotate(-180deg) scale(.7);opacity:.9}}@keyframes slip-out{0%{transform:translate(-50%,40%) scale(.2,.1);opacity:0}40%{transform:translate(-50%,-10%) scale(.25,.6);opacity:1}70%{transform:translate(-50%,-4%) scale(1.04,.9);opacity:1}to{transform:translate(-50%) scale(1);opacity:1}}@media(max-height:640px),(max-width:360px){.capsule-layer{--cap: 84px}}@media(prefers-reduced-motion:reduce){.capsule-layer,.capsule,.cap-top,.slip{animation-duration:.01s!important;animation-delay:0s!important;animation-iteration-count:1!important}}.controls{grid-area:controls;display:flex;flex-direction:column;gap:10px;padding:8px 12px calc(12px + var(--safe-bottom))}.ops-sticky{position:sticky;top:0;z-index:3;background:linear-gradient(180deg,var(--bg) 70%,transparent);padding:4px 0 6px}.actions{display:flex;gap:8px}.btn{flex:1;padding:12px 14px;border-radius:12px;border:1px solid var(--line);background:#ffffff0f;color:var(--text);cursor:pointer;font-weight:600;min-height:44px}.btn:disabled{opacity:.45;cursor:not-allowed}.btn-draw{background:linear-gradient(180deg,#ffc46b,#ff8a3c);color:#2b1400;border:none}.btn-draw:not(:disabled):active{transform:translateY(1px)}.btn-reset{flex:0 0 auto}.btn-small{flex:0 0 auto;padding:8px 12px;min-height:36px;font-size:13px}.btn-ghost{background:transparent}.hint{margin:6px 0 0;font-size:12px;color:var(--muted);line-height:1.4}.notice{display:flex;gap:10px;align-items:flex-start;padding:10px 12px;border-radius:12px;background:#ffd23f1f;border:1px solid rgba(255,210,63,.4)}.notice[hidden]{display:none}.notice-body{flex:1;min-width:0}.notice-body p{margin:4px 0 0;font-size:13px;color:var(--text)}.notice-actions{display:flex;flex-direction:column;gap:6px}.panel{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:10px 12px}.panel-head{display:flex;justify-content:space-between;align-items:baseline;gap:8px}.panel h2{margin:0;font-size:14px}.muted{color:var(--muted);font-size:12px}.round-log{list-style:none;margin:6px 0 0;padding:0;display:flex;flex-direction:column;gap:3px;font-size:12px;max-height:120px;overflow:auto}.round-log li{display:flex;gap:8px}.round-log time{color:var(--muted);font-variant-numeric:tabular-nums;flex:none;width:5ch}.round-log li[data-phase=rescue]{color:var(--warn)}.round-log li[data-phase=idle]{color:var(--ok)}.round-log:empty:before{content:"尚未開始";color:var(--muted)}.history{list-style:none;margin:6px 0 0;padding:0;display:flex;flex-direction:column;gap:6px}.history li{display:flex;align-items:flex-start;gap:8px;padding:6px 10px 6px 6px;border-radius:12px;border:1px solid var(--line);background:#ffffff0a;font-size:13px;min-width:0}.history .dot{width:18px;height:18px;border-radius:50%;flex:none;margin-top:2px;background:linear-gradient(180deg,var(--ball, #999) 50%,#fff4e0 50%);border:1px solid rgba(0,0,0,.3)}.history .hist-main{min-width:0;flex:1;word-break:break-word;overflow-wrap:anywhere;font-weight:600}.history .hist-sub{display:block;font-size:11px;color:var(--muted);font-weight:400;margin-top:2px}.history li.fail{border-color:#ff6b6b80;color:var(--bad)}.history li.sealed{border-style:dashed;color:var(--muted)}.history:empty:before{content:"尚無出貨";color:var(--muted);font-size:12px}.prize-pool{list-style:none;margin:6px 0 0;padding:0;display:flex;flex-wrap:wrap;gap:6px}.prize-pool li{padding:4px 8px;border-radius:8px;border:1px solid var(--line);background:#ffffff0a;font-size:12px;max-width:100%;word-break:break-word}.prize-pool:empty:before{content:"載入中…";color:var(--muted);font-size:12px}.tuner summary{list-style:none;display:flex;justify-content:space-between;align-items:baseline;cursor:pointer}.tuner summary::-webkit-details-marker{display:none}.tuner-form{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px 12px;margin-top:10px}.field{display:flex;flex-direction:column;gap:3px;font-size:12px;color:var(--muted)}.field input{width:100%;padding:6px 8px;border-radius:8px;border:1px solid var(--line);background:#00000040;color:var(--text);font-variant-numeric:tabular-nums}.field.structural span:after{content:" ・重建";color:var(--warn)}.tuner-actions{display:flex;gap:8px;margin-top:10px}@media(min-width:900px){#app{grid-template-columns:minmax(0,1fr) 340px;grid-template-rows:auto 1fr;grid-template-areas:"hud hud" "stage controls";height:100svh}.stage{min-height:0}.controls{overflow:auto}}@media(max-width:360px){.title{font-size:15px}.hud-right{gap:6px}.stat{min-width:40px}.btn{padding:10px 8px;font-size:14px}}
