*{margin:0;padding:0;box-sizing:border-box}html,body{width:100%;height:100%;overflow:hidden;background:#0f172a}#app{width:100%;height:100%}#loading{position:fixed;top:0;left:0;width:100%;height:100%;background:#0f172a;display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:1000;color:#94a3b8;font-family:system-ui,sans-serif;font-size:1.2rem}#loading.hidden{display:none}.loader{width:40px;height:40px;border:3px solid #334155;border-top-color:#94a3b8;border-radius:50%;animation:spin 1s linear infinite;margin-bottom:16px}@keyframes spin{to{transform:rotate(360deg)}}canvas{display:block}.dialogue-overlay{position:fixed;bottom:10%;left:50%;transform:translate(-50%);z-index:1000;pointer-events:none}.dialogue-bubble{background:#0f172ae6;border:2px solid #3b82f6;border-radius:12px;padding:1rem 1.5rem;max-width:400px;box-shadow:0 4px 20px #0000004d}.dialogue-text{color:#f1f5f9;font-family:system-ui,-apple-system,sans-serif;font-size:.75rem;line-height:1.5;text-align:center;margin:0}.dialogue-bubble:after{content:"";position:absolute;bottom:-10px;left:50%;transform:translate(-50%);border-left:10px solid transparent;border-right:10px solid transparent;border-top:10px solid #3b82f6}.fade-in{animation:fadeIn .3s ease-out forwards}.fade-out{animation:fadeOut .3s ease-out forwards}@keyframes fadeIn{0%{opacity:0;transform:translate(-50%) translateY(10px)}to{opacity:1;transform:translate(-50%) translateY(0)}}@keyframes fadeOut{0%{opacity:1;transform:translate(-50%) translateY(0)}to{opacity:0;transform:translate(-50%) translateY(10px)}}.letter-overlay{position:fixed;inset:0;z-index:2000;display:flex;align-items:center;justify-content:center;background:#0000;transition:background 1s ease;pointer-events:none}.letter-overlay.visible{background:#000000d9;pointer-events:auto}.letter-content{max-width:520px;max-height:80vh;overflow-y:auto;padding:2.5rem 2rem;color:#f1f5f9;font-family:Georgia,Times New Roman,serif;font-size:.95rem;line-height:1.8;white-space:pre-wrap;opacity:0;transform:translateY(30px);transition:opacity 1.2s ease .5s,transform 1.2s ease .5s}.letter-overlay.visible .letter-content{opacity:1;transform:translateY(0)}.letter-content::-webkit-scrollbar{width:4px}.letter-content::-webkit-scrollbar-thumb{background:#f1f5f933;border-radius:2px}.letter-close{position:absolute;top:1rem;right:1rem;width:40px;height:40px;border:none;background:#ffffff1a;color:#f1f5f9;font-size:1.5rem;cursor:pointer;border-radius:50%;opacity:0;transition:opacity .3s,background .2s}.letter-overlay.visible .letter-close{opacity:1;transition:opacity .3s 1s}.letter-close:hover{background:#fff3}
