html, body { margin: 0; height: 100%; background: transparent; overflow: hidden; user-select: none; -webkit-user-select: none; cursor: default; font-family: "Segoe UI", "Microsoft JhengHei", "PingFang TC", system-ui, sans-serif; } #stage { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: flex-end; padding-bottom: 8px; } #bubble { position: relative; max-width: calc(100% - 12px); margin-bottom: 10px; padding: 6px 11px; background: rgba(255, 255, 255, 0.97); color: #222; border-radius: 12px; font-size: 13px; line-height: 1.35; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.28); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; transition: opacity 0.18s ease, transform 0.18s ease; cursor: pointer; } #bubble::after { content: ""; position: absolute; left: 50%; bottom: -6px; transform: translateX(-50%); border: 6px solid transparent; border-top-color: rgba(255, 255, 255, 0.97); border-bottom: 0; } #bubble.hidden { opacity: 0; transform: translateY(4px); pointer-events: none; } #sprite { display: block; } #sprite.grab { cursor: grab; } #sprite.grabbing { cursor: grabbing; }