/* 首次 JavaScript 尚未就绪时也保留真实等待反馈，挂载应用后由 Vue 自动替换。 */
html, body { margin: 0; background: #0d1217; }
.boot-screen { min-height: 100svh; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 24px; padding: 24px; box-sizing: border-box; color: #bcc7d5; font: 14px/1.6 system-ui, sans-serif; }
.boot-emblem { width: 56px; height: 56px; border-radius: 18px; border: 1px solid #8cd9f140; background: linear-gradient(135deg, #8cd9f110, #8cd9f105); display: grid; place-items: center; box-shadow: 0 0 32px #8cd9f110; }
.boot-emblem::after { content: ''; width: 22px; height: 22px; border: 2px solid #8cd9f133; border-top-color: #8cd9f1; border-radius: 50%; animation: boot-spin 1s linear infinite; }
.boot-track { width: min(240px, 70vw); height: 3px; overflow: hidden; background: #8cd9f115; border-radius: 9px; }
.boot-track::after { content: ''; display: block; width: 40%; height: 100%; background: linear-gradient(90deg, transparent, #8cd9f1); animation: boot-progress 1.2s ease-in-out infinite; }
.boot-screen p { margin: 0; }.boot-screen button { min-height: 44px; padding: 10px 24px; border: 1px solid #8cd9f150; border-radius: 10px; background: #19212a; color: #b7eafa; font: inherit; cursor: pointer; }.boot-screen button:focus-visible { outline: 2px solid #8cd9f1; outline-offset: 3px; }
.boot-screen.has-error .boot-track { display: none; }.boot-screen.has-error .boot-emblem::after { animation: none; border-color: #fb7185; }
.boot-noscript { display: block; padding: 24px; text-align: center; color: #bcc7d5; background: #0d1217; }
@keyframes boot-spin { to { transform: rotate(360deg); } }
@keyframes boot-progress { from { transform: translateX(-100%); } to { transform: translateX(350%); } }
@media (prefers-reduced-motion: reduce) { .boot-emblem::after, .boot-track::after { animation: none; } }
