ENH - refine setup and reset transitions

This commit is contained in:
smx.pusha
2026-08-14 17:27:35 +02:00
parent d0d6f96b7d
commit 7ab9924fa7
2 changed files with 268 additions and 290 deletions
+171 -74
View File
@@ -156,6 +156,7 @@ async function submitAccount(): Promise<void> {
}
function selectAccountMode(mode: 'login' | 'register'): void {
if (accountMode.value === mode) return
accountMode.value = mode
password.value = ''
passwordConfirm.value = ''
@@ -241,16 +242,16 @@ function finish(): void {
<main :key="step" class="setup-assistant__page">
<template v-if="step === 0">
<div class="setup-welcome__hero" aria-hidden="true">
<div class="setup-welcome__halo setup-welcome__halo--outer"></div>
<div class="setup-welcome__halo setup-welcome__halo--inner"></div>
<div class="setup-welcome__greetings">
<span>{{ phone.t('Setup.welcome.hello') }}</span>
<span>{{ phone.t('Setup.welcome.hallo') }}</span>
<span>{{ phone.t('Setup.welcome.bonjour') }}</span>
</div>
<div class="setup-welcome__spark setup-welcome__spark--one"></div>
<div class="setup-welcome__spark setup-welcome__spark--two"></div>
<div class="setup-welcome__spark setup-welcome__spark--three"></div>
<div class="setup-welcome__signature">
<span></span>
<span></span>
<span></span>
</div>
</div>
<div class="setup-welcome__copy">
<p class="setup-welcome__eyebrow">
@@ -320,20 +321,31 @@ function finish(): void {
<p class="setup-assistant__eyebrow">
{{ phone.t('Setup.cloud.eyebrow') }}
</p>
<h1>{{ phone.t(accountMode === 'login' ? 'Setup.cloud.signInTitle' : 'Setup.cloud.createTitle') }}</h1>
<p class="setup-assistant__lead">
{{ phone.t(accountMode === 'login' ? 'Setup.cloud.signInBody' : 'Setup.cloud.createBody') }}
</p>
<Transition name="setup-account-copy" mode="out-in">
<div :key="accountMode" class="setup-cloud-heading">
<h1>{{ phone.t(accountMode === 'login' ? 'Setup.cloud.signInTitle' : 'Setup.cloud.createTitle') }}</h1>
<p class="setup-assistant__lead">
{{ phone.t(accountMode === 'login' ? 'Setup.cloud.signInBody' : 'Setup.cloud.createBody') }}
</p>
</div>
</Transition>
<div v-if="!account.email" class="setup-cloud-form">
<div class="setup-assistant__selector">
<div class="setup-assistant__selector" role="group">
<span
class="setup-assistant__selector-indicator"
:class="{ 'setup-assistant__selector-indicator--register': accountMode === 'register' }"
aria-hidden="true"
></span>
<button
:class="{ active: accountMode === 'login' }"
:aria-pressed="accountMode === 'login'"
@click="selectAccountMode('login')"
>
{{ phone.t('Setup.cloud.signIn') }}
</button>
<button
:class="{ active: accountMode === 'register' }"
:aria-pressed="accountMode === 'register'"
@click="selectAccountMode('register')"
>
{{ phone.t('Setup.cloud.create') }}
@@ -372,26 +384,30 @@ function finish(): void {
:label="phone.t('Setup.cloud.password')"
:autocomplete="accountMode === 'login' ? 'current-password' : 'new-password'"
/>
<SkyField
v-if="accountMode === 'register'"
id="setup-cloud-password-confirm"
v-model="passwordConfirm"
type="password"
:label="phone.t('Setup.cloud.confirmPassword')"
autocomplete="new-password"
/>
<Transition name="setup-account-field">
<SkyField
v-if="accountMode === 'register'"
id="setup-cloud-password-confirm"
v-model="passwordConfirm"
type="password"
:label="phone.t('Setup.cloud.confirmPassword')"
autocomplete="new-password"
/>
</Transition>
</div>
<div v-if="accountMode === 'register'" class="setup-cloud-strength">
<div>
<span
v-for="level in 4"
:key="level"
:class="{ active: level <= passwordStrength }"
></span>
<Transition name="setup-account-strength">
<div v-if="accountMode === 'register'" class="setup-cloud-strength">
<div>
<span
v-for="level in 4"
:key="level"
:class="{ active: level <= passwordStrength }"
></span>
</div>
<small>{{ phone.t(`Setup.cloud.strength${passwordStrength}`) }}</small>
</div>
<small>{{ phone.t(`Setup.cloud.strength${passwordStrength}`) }}</small>
</div>
</Transition>
<p v-if="accountError" class="setup-assistant__error" role="alert">
{{ accountError }}
</p>
@@ -401,7 +417,9 @@ function finish(): void {
@click="submitAccount"
>
<SkySpinner v-if="accountBusy" />
<span v-else>{{ phone.t(accountMode === 'login' ? 'Setup.cloud.signInAction' : 'Setup.cloud.createAction') }}</span>
<Transition v-else name="setup-account-action" mode="out-in">
<span :key="accountMode">{{ phone.t(accountMode === 'login' ? 'Setup.cloud.signInAction' : 'Setup.cloud.createAction') }}</span>
</Transition>
</SkyButton>
<div class="setup-cloud-security-note">
<LockKeyhole :size="13" />
@@ -956,44 +974,40 @@ function finish(): void {
position: relative;
display: grid;
width: 286px;
height: 292px;
height: 274px;
flex: none;
place-items: center;
isolation: isolate;
}
.setup-welcome__hero::before {
position: absolute;
z-index: -3;
width: 224px;
height: 224px;
border-radius: 50%;
background: radial-gradient(circle, rgb(32 111 255 / 24%), rgb(53 49 190 / 8%) 52%, transparent 72%);
filter: blur(5px);
z-index: -1;
top: 48px;
right: 12px;
bottom: 44px;
left: 12px;
background:
linear-gradient(90deg, transparent, rgb(55 122 255 / 13%) 28%, rgb(121 91 255 / 11%) 72%, transparent),
linear-gradient(180deg, transparent, rgb(39 126 255 / 9%) 48%, transparent);
filter: blur(22px);
content: '';
animation: setup-welcome-breathe 5s ease-in-out infinite;
}
.setup-welcome__halo {
.setup-welcome__hero::after {
position: absolute;
border: 1px solid rgb(111 167 255 / 16%);
border-radius: 50%;
transform: rotateX(66deg) rotateZ(-10deg);
}
.setup-welcome__halo--outer {
width: 270px;
height: 270px;
animation: setup-welcome-orbit 13s linear infinite;
}
.setup-welcome__halo--inner {
width: 210px;
height: 210px;
border-color: rgb(184 119 255 / 16%);
animation: setup-welcome-orbit 9s linear infinite reverse;
top: 51px;
right: 28px;
bottom: 47px;
left: 28px;
border-top: 1px solid rgb(142 184 255 / 9%);
border-bottom: 1px solid rgb(142 184 255 / 9%);
content: '';
}
.setup-welcome__greetings {
position: relative;
width: 100%;
height: 96px;
filter: drop-shadow(0 14px 28px rgb(15 89 255 / 26%));
height: 104px;
filter: drop-shadow(0 16px 30px rgb(15 89 255 / 20%));
}
.setup-welcome__greetings span {
position: absolute;
@@ -1001,7 +1015,7 @@ function finish(): void {
display: grid;
color: #ffffff;
font-family: 'Snell Roundhand', 'Segoe Script', 'Brush Script MT', cursive;
font-size: 64px;
font-size: 68px;
font-weight: 500;
letter-spacing: -0.06em;
opacity: 0;
@@ -1011,18 +1025,23 @@ function finish(): void {
}
.setup-welcome__greetings span:nth-child(2) { animation-delay: 3s; }
.setup-welcome__greetings span:nth-child(3) { animation-delay: 6s; }
.setup-welcome__spark {
.setup-welcome__signature {
position: absolute;
width: 4px;
height: 4px;
border-radius: 50%;
background: #b9d8ff;
box-shadow: 0 0 14px 4px rgb(78 154 255 / 65%);
animation: setup-welcome-spark 3.6s ease-in-out infinite;
bottom: 66px;
display: flex;
align-items: center;
gap: 5px;
}
.setup-welcome__signature span {
width: 22px;
height: 2px;
background: rgb(109 170 255 / 20%);
}
.setup-welcome__signature span:nth-child(2) {
width: 42px;
background: linear-gradient(90deg, #4b9fff, #9677ff);
box-shadow: 0 0 12px rgb(73 148 255 / 34%);
}
.setup-welcome__spark--one { top: 65px; left: 47px; }
.setup-welcome__spark--two { right: 48px; bottom: 67px; animation-delay: -1.2s; }
.setup-welcome__spark--three { top: 91px; right: 71px; animation-delay: -2.4s; }
.setup-welcome__copy {
position: relative;
z-index: 1;
@@ -1094,16 +1113,9 @@ function finish(): void {
8%, 27% { opacity: 1; transform: translateY(0) scale(1); filter: blur(0); }
34%, 100% { opacity: 0; transform: translateY(-10px) scale(1.03); filter: blur(4px); }
}
@keyframes setup-welcome-orbit {
to { transform: rotateX(66deg) rotateZ(350deg); }
}
@keyframes setup-welcome-breathe {
0%, 100% { transform: scale(0.92); opacity: 0.65; }
50% { transform: scale(1.08); opacity: 1; }
}
@keyframes setup-welcome-spark {
0%, 100% { transform: scale(0.55); opacity: 0.25; }
50% { transform: scale(1); opacity: 0.9; }
0%, 100% { transform: scaleX(0.92); opacity: 0.58; }
50% { transform: scaleX(1.04); opacity: 1; }
}
.setup-connectivity-card {
position: relative;
@@ -1172,6 +1184,12 @@ function finish(): void {
margin: 7px 0 6px;
font-size: 29px;
}
.setup-cloud-heading {
display: flex;
width: 100%;
flex-direction: column;
align-items: center;
}
.setup-assistant--step-2 .setup-assistant__lead {
max-width: 310px;
font-size: 12px;
@@ -1266,6 +1284,26 @@ function finish(): void {
border-radius: 17px;
background: rgb(255 255 255 / 5%);
}
.setup-account-field-enter-active,
.setup-account-field-leave-active {
overflow: hidden;
transition:
max-height 280ms cubic-bezier(0.32, 0.72, 0, 1),
opacity 180ms ease,
transform 280ms cubic-bezier(0.32, 0.72, 0, 1);
}
.setup-account-field-enter-from,
.setup-account-field-leave-to {
max-height: 0;
opacity: 0;
transform: translateY(-8px);
}
.setup-account-field-enter-to,
.setup-account-field-leave-from {
max-height: 58px;
opacity: 1;
transform: translateY(0);
}
.setup-cloud-fields :deep(.sky-field) { border: 0; border-radius: 0; background: transparent; }
.setup-cloud-fields :deep(.sky-field + .sky-field) { border-top: 1px solid rgb(255 255 255 / 8%); }
.setup-cloud-fields :deep(.sky-field) { padding: 3px 12px; }
@@ -1287,6 +1325,17 @@ function finish(): void {
.setup-cloud-strength > div { display: flex; flex: 1; gap: 4px; }
.setup-cloud-strength span { height: 3px; flex: 1; border-radius: 99px; background: rgb(255 255 255 / 10%); }
.setup-cloud-strength span.active { background: linear-gradient(90deg, #318bff, #66c0ff); box-shadow: 0 0 7px rgb(49 139 255 / 34%); }
.setup-account-strength-enter-active,
.setup-account-strength-leave-active {
transition:
opacity 180ms ease,
transform 240ms cubic-bezier(0.32, 0.72, 0, 1);
}
.setup-account-strength-enter-from,
.setup-account-strength-leave-to {
opacity: 0;
transform: translateY(-5px);
}
.setup-cloud-security-note {
display: flex;
align-items: center;
@@ -1299,24 +1348,72 @@ function finish(): void {
.setup-assistant--step-2 .setup-assistant__later { padding: 7px; }
@keyframes setup-cloud-orbit { to { transform: rotate(360deg); } }
.setup-assistant__selector {
position: relative;
display: grid;
padding: 3px;
grid-template-columns: 1fr 1fr;
border-radius: 13px;
background: rgb(255 255 255/8%);
}
.setup-assistant__selector-indicator {
position: absolute;
z-index: 0;
top: 3px;
bottom: 3px;
left: 3px;
width: calc(50% - 3px);
border: 1px solid rgb(255 255 255 / 7%);
border-radius: 10px;
background: rgb(255 255 255 / 13%);
box-shadow:
0 3px 12px rgb(0 0 0 / 20%),
inset 0 1px rgb(255 255 255 / 7%);
transition: transform 320ms cubic-bezier(0.32, 0.72, 0, 1);
}
.setup-assistant__selector-indicator--register {
transform: translateX(100%);
}
.setup-assistant__selector button {
position: relative;
z-index: 1;
height: 34px;
border: 0;
border-radius: 10px;
color: rgb(255 255 255/55%);
background: transparent;
font-weight: 650;
transition: color 220ms ease;
}
.setup-assistant__selector button.active {
color: white;
background: rgb(255 255 255/13%);
box-shadow: 0 3px 12px rgb(0 0 0/20%);
}
.setup-account-copy-enter-active,
.setup-account-copy-leave-active {
transition:
opacity 170ms ease,
transform 230ms cubic-bezier(0.32, 0.72, 0, 1);
}
.setup-account-copy-enter-from {
opacity: 0;
transform: translateY(7px);
}
.setup-account-copy-leave-to {
opacity: 0;
transform: translateY(-5px);
}
.setup-account-action-enter-active,
.setup-account-action-leave-active {
transition:
opacity 140ms ease,
transform 180ms ease;
}
.setup-account-action-enter-from {
opacity: 0;
transform: translateY(5px);
}
.setup-account-action-leave-to {
opacity: 0;
transform: translateY(-5px);
}
.setup-cloud-connected {
align-items: center;
+97 -216
View File
@@ -4,7 +4,6 @@ import {
Bluetooth,
Camera,
Check,
Cloud,
EyeOff,
KeyRound,
Images,
@@ -1577,17 +1576,8 @@ onBeforeUnmount(() => {
class="settings-reset-overlay"
aria-live="polite"
>
<div class="settings-reset-ambient" aria-hidden="true">
<span v-for="particle in 8" :key="particle" />
</div>
<div class="settings-reset-content">
<div class="settings-reset-eyebrow">
<ShieldCheck :size="13" :stroke-width="2.2" />
{{ phone.t('Apps.settings.factoryResetSystemProcess') }}
</div>
<div class="settings-reset-orbit" aria-hidden="true">
<div class="settings-reset-symbol" aria-hidden="true">
<svg viewBox="0 0 104 104">
<circle class="settings-reset-ring-track" cx="52" cy="52" r="46" />
<circle
@@ -1602,45 +1592,33 @@ onBeforeUnmount(() => {
"
/>
</svg>
<div class="settings-reset-device">
<Smartphone :size="37" :stroke-width="1.45" />
<span class="settings-reset-device__scan" />
<div class="settings-reset-symbol__icon">
<Smartphone :size="34" :stroke-width="1.55" />
</div>
<span class="settings-reset-orbit__pulse" />
</div>
<div class="settings-reset-heading">
<strong>{{ Math.floor(factoryResetProgress) }}%</strong>
<h2>{{ phone.t('Apps.settings.factoryResetProgress') }}</h2>
<p>{{ factoryResetPhase.label }}</p>
</div>
<div class="settings-reset-progress-copy">
<strong>{{ Math.floor(factoryResetProgress) }}%</strong>
<span>{{ factoryResetSecondsRemaining }}s</span>
</div>
<div class="settings-reset-progress" role="progressbar" :aria-valuenow="Math.floor(factoryResetProgress)" aria-valuemin="0" aria-valuemax="100">
<span :style="{ width: `${factoryResetProgress}%` }" />
</div>
<p class="settings-reset-detail">{{ factoryResetPhase.detail }}</p>
<div class="settings-reset-phase-card">
<div class="settings-reset-phase-card__topline">
<span>{{ factoryResetPhase.detail }}</span>
<strong>{{ factoryResetSecondsRemaining }}s</strong>
</div>
<div class="settings-reset-steps" aria-hidden="true">
<span
v-for="step in 4"
:key="step"
:class="{
'settings-reset-step--active': step - 1 === factoryResetPhase.index,
'settings-reset-step--complete': step - 1 < factoryResetPhase.index,
}"
>
<Check v-if="step - 1 < factoryResetPhase.index" :size="9" :stroke-width="3" />
</span>
</div>
</div>
<div class="settings-reset-protected">
<span><Signal :size="14" /> {{ phone.t('Apps.settings.factoryResetSimSafe') }}</span>
<span><Cloud :size="14" /> {{ phone.t('Apps.settings.factoryResetCloudSafe') }}</span>
<div class="settings-reset-assurance">
<span class="settings-reset-assurance__icon">
<ShieldCheck :size="18" :stroke-width="1.8" />
</span>
<span>
<strong>{{ phone.t('Apps.settings.factoryResetSimSafe') }}</strong>
<small>{{ phone.t('Apps.settings.factoryResetCloudSafe') }}</small>
</span>
</div>
<p class="settings-reset-warning">{{ phone.t('Apps.settings.factoryResetWarning') }}</p>
</div>
@@ -2139,79 +2117,31 @@ onBeforeUnmount(() => {
flex-direction: column;
align-items: center;
justify-content: center;
overflow: hidden;
padding: 34px 26px 24px;
background:
radial-gradient(circle at 50% 42%, rgb(19 92 164 / 22%), transparent 34%),
radial-gradient(circle at 50% 100%, rgb(8 57 107 / 18%), transparent 40%),
#000000;
padding: 52px 28px 28px;
background: #000000;
color: #ffffff;
text-align: center;
}
.settings-reset-content {
position: relative;
z-index: 1;
display: flex;
width: 100%;
max-width: 310px;
max-width: 294px;
flex-direction: column;
align-items: center;
}
.settings-reset-ambient {
position: absolute;
inset: 0;
pointer-events: none;
}
.settings-reset-ambient span {
position: absolute;
width: 2px;
height: 2px;
border-radius: 50%;
background: #66b9ff;
box-shadow: 0 0 8px 2px rgb(43 153 255 / 45%);
opacity: 0.5;
animation: settings-reset-particle 3.8s ease-in-out infinite;
}
.settings-reset-ambient span:nth-child(1) { top: 23%; left: 17%; }
.settings-reset-ambient span:nth-child(2) { top: 31%; right: 13%; animation-delay: -1.2s; }
.settings-reset-ambient span:nth-child(3) { top: 48%; left: 9%; animation-delay: -2.4s; }
.settings-reset-ambient span:nth-child(4) { top: 56%; right: 8%; animation-delay: -0.6s; }
.settings-reset-ambient span:nth-child(5) { bottom: 24%; left: 21%; animation-delay: -3s; }
.settings-reset-ambient span:nth-child(6) { bottom: 19%; right: 18%; animation-delay: -1.7s; }
.settings-reset-ambient span:nth-child(7) { top: 16%; right: 30%; animation-delay: -2.1s; }
.settings-reset-ambient span:nth-child(8) { bottom: 34%; left: 33%; animation-delay: -0.9s; }
.settings-reset-eyebrow {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 6px 10px;
border: 1px solid rgb(255 255 255 / 10%);
border-radius: 999px;
background: rgb(255 255 255 / 6%);
color: rgb(255 255 255 / 70%);
font-size: 9px;
font-weight: 700;
letter-spacing: 0.12em;
text-transform: uppercase;
}
.settings-reset-orbit {
.settings-reset-symbol {
position: relative;
display: grid;
width: 112px;
height: 112px;
margin-top: 26px;
width: 116px;
height: 116px;
place-items: center;
}
.settings-reset-orbit svg {
.settings-reset-symbol svg {
position: absolute;
inset: 4px;
inset: 6px;
width: 104px;
height: 104px;
overflow: visible;
@@ -2224,73 +2154,62 @@ onBeforeUnmount(() => {
stroke-width: 2.6;
}
.settings-reset-ring-track { stroke: rgb(255 255 255 / 10%); }
.settings-reset-ring-track { stroke: rgb(255 255 255 / 12%); }
.settings-reset-ring-value {
stroke: #2997ff;
stroke: #0a84ff;
stroke-linecap: round;
filter: drop-shadow(0 0 6px rgb(41 151 255 / 75%));
transition: stroke-dashoffset 120ms linear;
}
.settings-reset-device {
position: relative;
.settings-reset-symbol__icon {
display: grid;
width: 72px;
height: 72px;
overflow: hidden;
border: 1px solid rgb(255 255 255 / 13%);
border-radius: 23px;
background: linear-gradient(145deg, rgb(255 255 255 / 11%), rgb(255 255 255 / 3%));
box-shadow: inset 0 1px 0 rgb(255 255 255 / 10%), 0 18px 36px rgb(0 0 0 / 38%);
color: rgb(255 255 255 / 88%);
width: 76px;
height: 76px;
border: 1px solid rgb(255 255 255 / 12%);
border-radius: 24px;
background: rgb(255 255 255 / 7%);
color: rgb(255 255 255 / 92%);
place-items: center;
}
.settings-reset-device__scan {
position: absolute;
right: 13px;
left: 13px;
height: 1px;
background: #42a5ff;
box-shadow: 0 0 9px 2px rgb(41 151 255 / 65%);
animation: settings-reset-scan 2s ease-in-out infinite;
}
.settings-reset-orbit__pulse {
position: absolute;
inset: 0;
border: 1px solid rgb(41 151 255 / 20%);
border-radius: 50%;
animation: settings-reset-pulse 2.4s ease-out infinite;
}
.settings-reset-heading { margin-top: 19px; }
.settings-reset-heading > strong {
display: block;
font-size: 34px;
font-variant-numeric: tabular-nums;
letter-spacing: -0.04em;
line-height: 1;
}
.settings-reset-heading { margin-top: 28px; }
.settings-reset-heading h2 {
margin: 10px 0 0;
font-size: 19px;
letter-spacing: -0.02em;
margin: 0;
font-size: 22px;
letter-spacing: -0.035em;
}
.settings-reset-heading p {
margin: 5px 0 0;
color: #66b5ff;
margin: 7px 0 0;
color: rgb(255 255 255 / 54%);
font-size: 13px;
}
.settings-reset-progress-copy {
display: flex;
width: 100%;
align-items: baseline;
justify-content: space-between;
margin-top: 34px;
}
.settings-reset-progress-copy strong {
font-size: 15px;
font-variant-numeric: tabular-nums;
}
.settings-reset-progress-copy span {
color: rgb(255 255 255 / 44%);
font-size: 12px;
font-weight: 600;
font-variant-numeric: tabular-nums;
}
.settings-reset-progress {
width: 100%;
height: 5px;
height: 4px;
overflow: hidden;
margin-top: 22px;
margin-top: 9px;
border-radius: 999px;
background: rgb(255 255 255 / 10%);
}
@@ -2299,103 +2218,65 @@ onBeforeUnmount(() => {
display: block;
height: 100%;
border-radius: inherit;
background: linear-gradient(90deg, #087cff, #55b8ff);
box-shadow: 0 0 10px rgb(41 151 255 / 60%);
background: #0a84ff;
transition: width 120ms linear;
}
.settings-reset-phase-card {
.settings-reset-detail {
width: 100%;
margin-top: 13px;
padding: 12px 13px;
border: 1px solid rgb(255 255 255 / 9%);
border-radius: 15px;
background: rgb(255 255 255 / 5%);
box-shadow: inset 0 1px 0 rgb(255 255 255 / 5%);
margin: 9px 0 0;
color: rgb(255 255 255 / 48%);
font-size: 11px;
text-align: left;
}
.settings-reset-phase-card__topline {
.settings-reset-assurance {
display: flex;
width: 100%;
align-items: center;
justify-content: space-between;
color: rgb(255 255 255 / 68%);
font-size: 10px;
gap: 12px;
margin-top: 30px;
padding: 13px 14px;
border: 1px solid rgb(255 255 255 / 9%);
border-radius: 16px;
background: rgb(255 255 255 / 5%);
text-align: left;
}
.settings-reset-phase-card__topline strong {
color: rgb(255 255 255 / 88%);
font-variant-numeric: tabular-nums;
}
.settings-reset-steps {
display: flex;
gap: 6px;
margin-top: 10px;
}
.settings-reset-steps > span {
.settings-reset-assurance__icon {
display: grid;
height: 4px;
flex: 1;
border-radius: 99px;
background: rgb(255 255 255 / 10%);
color: #ffffff;
width: 34px;
height: 34px;
flex: 0 0 34px;
border-radius: 50%;
background: rgb(10 132 255 / 14%);
color: #5eb0ff;
place-items: center;
}
.settings-reset-steps > .settings-reset-step--active {
background: #2997ff;
box-shadow: 0 0 7px rgb(41 151 255 / 55%);
}
.settings-reset-steps > .settings-reset-step--complete {
height: 12px;
margin-top: -4px;
border-radius: 50%;
background: #2997ff;
}
.settings-reset-protected {
.settings-reset-assurance > span:last-child {
display: flex;
gap: 8px;
margin-top: 15px;
min-width: 0;
flex-direction: column;
gap: 3px;
}
.settings-reset-protected span {
display: flex;
align-items: center;
gap: 5px;
padding: 7px 9px;
border: 1px solid rgb(85 190 129 / 15%);
border-radius: 999px;
background: rgb(51 199 89 / 8%);
color: rgb(120 226 160 / 88%);
font-size: 9px;
.settings-reset-assurance strong {
font-size: 11px;
font-weight: 600;
}
.settings-reset-assurance small {
color: rgb(255 255 255 / 45%);
font-size: 10px;
}
.settings-reset-warning {
max-width: 270px;
margin: 11px 0 0;
color: rgb(255 255 255 / 42%);
max-width: 258px;
margin: 14px 0 0;
color: rgb(255 255 255 / 34%);
font-size: 9px;
line-height: 13px;
}
@keyframes settings-reset-scan {
0%, 100% { transform: translateY(-18px); opacity: 0.25; }
50% { transform: translateY(18px); opacity: 1; }
}
@keyframes settings-reset-pulse {
0% { transform: scale(0.82); opacity: 0; }
28% { opacity: 0.7; }
100% { transform: scale(1.18); opacity: 0; }
}
@keyframes settings-reset-particle {
0%, 100% { transform: translateY(0) scale(0.75); opacity: 0.2; }
50% { transform: translateY(-12px) scale(1); opacity: 0.7; }
line-height: 14px;
}
.settings-dialog-button--danger {