.update-overlay[hidden] { display: none; }
.update-overlay { position: fixed; inset: 0; z-index: 2147483647; display: grid; place-items: center; box-sizing: border-box; padding: 24px; background: rgba(2, 9, 18, .58); backdrop-filter: blur(10px) saturate(.72); -webkit-backdrop-filter: blur(10px) saturate(.72); color: #f4f8fc; font-family: Inter, Pretendard, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; opacity: 0; transition: opacity .28s ease; }
.update-overlay.is-visible { opacity: 1; }
.update-dialog { box-sizing: border-box; width: min(520px, 100%); padding: 34px; border: 1px solid #33506d; border-radius: 24px; background: rgba(9, 24, 39, .94); box-shadow: 0 34px 110px rgba(0, 0, 0, .58); text-align: left; }
.update-dialog .eyebrow { display: block; color: #76b9ff; font-size: 11px; font-weight: 800; letter-spacing: .14em; }
.update-dialog h2 { margin: 9px 0 8px; color: #f4f8fc; font-size: 30px; line-height: 1.2; }
.update-dialog p { margin: 0 0 25px; color: #91a6bb; font-size: 15px; line-height: 1.65; }
.update-dialog > small { display: block; margin-top: 13px; color: #7893ad; }
.update-symbol { display: flex; gap: 6px; margin-bottom: 25px; }
.update-symbol span { width: 9px; height: 9px; border-radius: 50%; background: #5aa9ff; animation: update-pulse 1.1s infinite ease-in-out; }
.update-symbol span:nth-child(2) { animation-delay: .16s; }
.update-symbol span:nth-child(3) { animation-delay: .32s; }
.update-progress { display: grid; grid-template-columns: 1fr 52px; align-items: center; gap: 14px; }
.update-track { height: 12px; overflow: hidden; border-radius: 999px; background: #06101c; box-shadow: inset 0 0 0 1px #263d53; }
.update-track span { display: block; width: 0; height: 100%; border-radius: inherit; background: linear-gradient(90deg, #4ea4ff, #5e70ff); box-shadow: 0 0 20px #4d8fff99; transition: width .55s ease; }
.update-progress strong { color: #a8d5ff; text-align: right; font-size: 16px; }
.update-overlay.is-failed .update-symbol span, .update-overlay.is-failed .update-track span { background: #ff7a82; }
@keyframes update-pulse { 0%, 65%, 100% { opacity: .28; transform: translateY(0); } 32% { opacity: 1; transform: translateY(-4px); } }
@media (prefers-reduced-motion: reduce) { .update-overlay, .update-track span { transition: none; } .update-symbol span { animation: none; } }
