|
46 | 46 | display: flex; |
47 | 47 | flex-direction: column; |
48 | 48 | align-items: center; |
49 | | - padding: 48px 32px 36px; |
50 | | - gap: 16px; |
| 49 | + padding: 40px 32px 24px; |
| 50 | + gap: 10px; |
51 | 51 | } |
52 | 52 |
|
53 | 53 | .card__title { |
|
64 | 64 | } |
65 | 65 | } |
66 | 66 |
|
| 67 | +.card__head-detail { |
| 68 | + width: 100%; |
| 69 | + min-height: 64px; |
| 70 | + display: flex; |
| 71 | + flex-direction: column; |
| 72 | + align-items: center; |
| 73 | + justify-content: center; |
| 74 | + gap: 8px; |
| 75 | +} |
| 76 | + |
67 | 77 | .card__subtitle { |
68 | 78 | margin: 0; |
69 | 79 | font-size: 14px; |
|
160 | 170 | position: relative; |
161 | 171 | width: 72px; |
162 | 172 | height: 72px; |
163 | | - margin-bottom: 8px; |
164 | 173 | } |
165 | 174 |
|
166 | 175 | .spinner__ring { |
|
191 | 200 | to { transform: rotate(-360deg); } |
192 | 201 | } |
193 | 202 |
|
194 | | -/* ── Indeterminate progress bar ── */ |
| 203 | +/* ── Success checkmark (replaces spinner on complete) ── */ |
| 204 | + |
| 205 | +.success-mark { |
| 206 | + width: 72px; |
| 207 | + height: 72px; |
| 208 | +} |
195 | 209 |
|
196 | | -.progress-bar { |
| 210 | +.success-mark svg { |
197 | 211 | width: 100%; |
198 | | - max-width: 320px; |
199 | | - height: 4px; |
200 | | - border-radius: 2px; |
201 | | - background: var(--color-primaryPalette-200); |
202 | | - overflow: hidden; |
| 212 | + height: 100%; |
| 213 | + overflow: visible; |
| 214 | +} |
| 215 | + |
| 216 | +.success-mark__circle { |
| 217 | + fill: none; |
| 218 | + stroke: var(--color-successPalette-500); |
| 219 | + stroke-width: 2; |
| 220 | + stroke-linecap: round; |
| 221 | + stroke-dasharray: 158; |
| 222 | + stroke-dashoffset: 158; |
| 223 | + animation: success-circle 500ms ease-out forwards; |
| 224 | + transform-origin: 50% 50%; |
| 225 | +} |
| 226 | + |
| 227 | +.success-mark__check { |
| 228 | + fill: none; |
| 229 | + stroke: var(--color-successPalette-500); |
| 230 | + stroke-width: 3.5; |
| 231 | + stroke-linecap: round; |
| 232 | + stroke-linejoin: round; |
| 233 | + stroke-dasharray: 36; |
| 234 | + stroke-dashoffset: 36; |
| 235 | + animation: success-check 350ms 400ms ease-out forwards; |
| 236 | +} |
| 237 | + |
| 238 | +@keyframes success-circle { |
| 239 | + to { stroke-dashoffset: 0; } |
| 240 | +} |
| 241 | + |
| 242 | +@keyframes success-check { |
| 243 | + to { stroke-dashoffset: 0; } |
| 244 | +} |
| 245 | + |
| 246 | +/* ── Summary chips (shown on complete) ── */ |
| 247 | + |
| 248 | +.summary-chips { |
| 249 | + display: flex; |
| 250 | + flex-wrap: wrap; |
| 251 | + justify-content: center; |
| 252 | + gap: 8px; |
203 | 253 | margin-top: 4px; |
204 | 254 | } |
205 | 255 |
|
| 256 | +.summary-chip { |
| 257 | + display: inline-flex; |
| 258 | + align-items: baseline; |
| 259 | + gap: 4px; |
| 260 | + padding: 4px 10px; |
| 261 | + border-radius: 999px; |
| 262 | + background: var(--color-successPalette-50); |
| 263 | + color: var(--color-successPalette-700); |
| 264 | + font-size: 12px; |
| 265 | + font-weight: 500; |
| 266 | + line-height: 1.4; |
| 267 | + white-space: nowrap; |
| 268 | + animation: chip-enter 280ms ease-out; |
| 269 | +} |
| 270 | + |
| 271 | +.summary-chip strong { |
| 272 | + font-size: 13px; |
| 273 | + font-weight: 700; |
| 274 | +} |
| 275 | + |
206 | 276 | @media (prefers-color-scheme: dark) { |
207 | | - .progress-bar { |
208 | | - background: var(--color-primaryPalette-800); |
| 277 | + .summary-chip { |
| 278 | + background: var(--color-successPalette-900); |
| 279 | + color: var(--color-successPalette-100); |
209 | 280 | } |
210 | 281 | } |
211 | 282 |
|
212 | | -.progress-bar__fill { |
213 | | - width: 40%; |
214 | | - height: 100%; |
215 | | - border-radius: 2px; |
216 | | - background: var(--color-accentedPalette-500); |
217 | | - animation: indeterminate 1.5s ease-in-out infinite; |
| 283 | +@keyframes chip-enter { |
| 284 | + from { transform: scale(0.85); opacity: 0; } |
| 285 | + to { transform: scale(1); opacity: 1; } |
218 | 286 | } |
219 | 287 |
|
220 | | -@keyframes indeterminate { |
221 | | - 0% { transform: translateX(-100%); } |
222 | | - 100% { transform: translateX(350%); } |
| 288 | +/* ── Live status log ── */ |
| 289 | + |
| 290 | +.status-log { |
| 291 | + list-style: none; |
| 292 | + margin: 0; |
| 293 | + padding: 0; |
| 294 | + width: 100%; |
| 295 | + max-width: 360px; |
| 296 | + height: 78px; |
| 297 | + display: flex; |
| 298 | + flex-direction: column; |
| 299 | + justify-content: flex-end; |
| 300 | + gap: 8px; |
| 301 | + overflow: hidden; |
| 302 | + mask-image: linear-gradient(to bottom, transparent 0, black 28px); |
| 303 | + -webkit-mask-image: linear-gradient(to bottom, transparent 0, black 28px); |
| 304 | +} |
| 305 | + |
| 306 | +.status-log__item { |
| 307 | + display: flex; |
| 308 | + align-items: center; |
| 309 | + gap: 10px; |
| 310 | + font-size: 13px; |
| 311 | + color: var(--color-primaryPalette-400); |
| 312 | + text-align: left; |
| 313 | + line-height: 1.35; |
| 314 | + animation: status-log-enter 240ms ease-out; |
| 315 | +} |
| 316 | + |
| 317 | +.status-log__item_done { |
| 318 | + color: var(--color-primaryPalette-200); |
| 319 | + font-size: 12px; |
| 320 | +} |
| 321 | + |
| 322 | +.status-log__item_current { |
| 323 | + color: var(--color-primaryPalette-800); |
| 324 | + font-weight: 500; |
| 325 | +} |
| 326 | + |
| 327 | +@media (prefers-color-scheme: dark) { |
| 328 | + .status-log__item_done { |
| 329 | + color: var(--color-primaryPalette-500); |
| 330 | + } |
| 331 | + .status-log__item_current { |
| 332 | + color: var(--color-primaryPalette-50); |
| 333 | + } |
| 334 | +} |
| 335 | + |
| 336 | +.status-log__icon { |
| 337 | + flex-shrink: 0; |
| 338 | + width: 16px; |
| 339 | + height: 16px; |
| 340 | + display: inline-flex; |
| 341 | + align-items: center; |
| 342 | + justify-content: center; |
| 343 | +} |
| 344 | + |
| 345 | +.status-log__check { |
| 346 | + color: var(--color-primaryPalette-200); |
| 347 | + font-size: 13px; |
| 348 | + font-weight: 700; |
| 349 | + line-height: 1; |
| 350 | +} |
| 351 | + |
| 352 | +@media (prefers-color-scheme: dark) { |
| 353 | + .status-log__check { |
| 354 | + color: var(--color-primaryPalette-500); |
| 355 | + } |
| 356 | +} |
| 357 | + |
| 358 | +.status-log__spinner { |
| 359 | + width: 12px; |
| 360 | + height: 12px; |
| 361 | + border-radius: 50%; |
| 362 | + border: 2px solid var(--color-accentedPalette-200); |
| 363 | + border-top-color: var(--color-accentedPalette-500); |
| 364 | + animation: tiny-spin 0.8s linear infinite; |
| 365 | +} |
| 366 | + |
| 367 | +@keyframes tiny-spin { |
| 368 | + to { transform: rotate(360deg); } |
| 369 | +} |
| 370 | + |
| 371 | +@keyframes status-log-enter { |
| 372 | + from { transform: translateY(-6px); opacity: 0; } |
| 373 | + to { transform: translateY(0); opacity: 1; } |
| 374 | +} |
| 375 | + |
| 376 | +.card__status { |
| 377 | + margin: 0; |
| 378 | + min-height: 20px; |
| 379 | + font-size: 13px; |
| 380 | + color: var(--color-primaryPalette-500); |
| 381 | + text-align: center; |
| 382 | + line-height: 1.4; |
| 383 | + max-width: 360px; |
| 384 | +} |
| 385 | + |
| 386 | +.card__status_error { |
| 387 | + color: var(--color-warnPalette-500); |
| 388 | +} |
| 389 | + |
| 390 | +@media (prefers-color-scheme: dark) { |
| 391 | + .card__status { |
| 392 | + color: var(--color-primaryPalette-200); |
| 393 | + } |
223 | 394 | } |
0 commit comments