mirror of
https://github.com/ikunshare/Onekey.git
synced 2026-01-12 16:25:53 +08:00
Add project files including Python source code, web assets, configuration, and CI/CD workflows. Includes main application logic, web interface, supporting modules, and documentation for the Onekey Steam Depot Manifest Downloader.
278 lines
4.2 KiB
CSS
278 lines
4.2 KiB
CSS
@keyframes fadeIn {
|
|
from {
|
|
opacity: 0;
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
}
|
|
}
|
|
|
|
@keyframes slideUp {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateY(20px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
}
|
|
}
|
|
|
|
@keyframes slideIn {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateX(-20px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: translateX(0);
|
|
}
|
|
}
|
|
|
|
@keyframes slideInDown {
|
|
from {
|
|
transform: translateY(-20px);
|
|
opacity: 0;
|
|
}
|
|
to {
|
|
transform: translateY(0);
|
|
opacity: 1;
|
|
}
|
|
}
|
|
|
|
@keyframes slideInUp {
|
|
from {
|
|
transform: translateY(60px);
|
|
opacity: 0;
|
|
}
|
|
to {
|
|
transform: translateY(0);
|
|
opacity: 1;
|
|
}
|
|
}
|
|
|
|
@keyframes rotate {
|
|
0% {
|
|
transform: rotate(0deg);
|
|
}
|
|
100% {
|
|
transform: rotate(360deg);
|
|
}
|
|
}
|
|
|
|
@keyframes subtle-rotate {
|
|
0% {
|
|
transform: rotate(0deg);
|
|
}
|
|
100% {
|
|
transform: rotate(360deg);
|
|
}
|
|
}
|
|
|
|
@keyframes spin {
|
|
0% {
|
|
transform: rotate(0deg);
|
|
}
|
|
100% {
|
|
transform: rotate(360deg);
|
|
}
|
|
}
|
|
|
|
@keyframes pulse {
|
|
0%,
|
|
100% {
|
|
opacity: 0.3;
|
|
transform: scale(1);
|
|
}
|
|
50% {
|
|
opacity: 0.5;
|
|
transform: scale(1.05);
|
|
}
|
|
}
|
|
|
|
@keyframes float {
|
|
0%,
|
|
100% {
|
|
transform: translateY(0px);
|
|
}
|
|
50% {
|
|
transform: translateY(-10px);
|
|
}
|
|
}
|
|
|
|
@keyframes shimmer {
|
|
0% {
|
|
background-position: -200% center;
|
|
}
|
|
100% {
|
|
background-position: 200% center;
|
|
}
|
|
}
|
|
|
|
@keyframes shake {
|
|
0%,
|
|
100% {
|
|
transform: translateX(0);
|
|
}
|
|
10%,
|
|
30%,
|
|
50%,
|
|
70%,
|
|
90% {
|
|
transform: translateX(-5px);
|
|
}
|
|
20%,
|
|
40%,
|
|
60%,
|
|
80% {
|
|
transform: translateX(5px);
|
|
}
|
|
}
|
|
|
|
@keyframes success-pulse {
|
|
0% {
|
|
transform: scale(1);
|
|
box-shadow: 0 0 0 0 rgba(76, 175, 80, 0.4);
|
|
}
|
|
50% {
|
|
transform: scale(1.05);
|
|
box-shadow: 0 0 0 10px rgba(76, 175, 80, 0);
|
|
}
|
|
100% {
|
|
transform: scale(1);
|
|
box-shadow: 0 0 0 0 rgba(76, 175, 80, 0);
|
|
}
|
|
}
|
|
|
|
@keyframes loading-bounce {
|
|
0%,
|
|
80%,
|
|
100% {
|
|
transform: scale(0);
|
|
opacity: 0.5;
|
|
}
|
|
40% {
|
|
transform: scale(1);
|
|
opacity: 1;
|
|
}
|
|
}
|
|
|
|
.loading {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 12px;
|
|
color: var(--md-sys-color-on-surface-variant);
|
|
}
|
|
|
|
.loading::before {
|
|
content: "";
|
|
width: 20px;
|
|
height: 20px;
|
|
border: 2px solid var(--md-sys-color-primary-container);
|
|
border-top: 2px solid var(--md-sys-color-primary);
|
|
border-radius: 50%;
|
|
animation: spin 1s cubic-bezier(0.68, -0.55, 0.265, 1.55) infinite;
|
|
}
|
|
|
|
.loading-dots {
|
|
display: inline-flex;
|
|
gap: 4px;
|
|
}
|
|
|
|
.loading-dots span {
|
|
width: 8px;
|
|
height: 8px;
|
|
border-radius: 50%;
|
|
background: var(--md-sys-color-primary);
|
|
animation: loading-bounce 1.4s ease-in-out infinite;
|
|
}
|
|
|
|
.loading-dots span:nth-child(1) {
|
|
animation-delay: -0.32s;
|
|
}
|
|
|
|
.loading-dots span:nth-child(2) {
|
|
animation-delay: -0.16s;
|
|
}
|
|
|
|
.skeleton-loader {
|
|
background: linear-gradient(
|
|
90deg,
|
|
var(--md-sys-color-surface-container) 25%,
|
|
var(--md-sys-color-surface-container-high) 50%,
|
|
var(--md-sys-color-surface-container) 75%
|
|
);
|
|
background-size: 200% 100%;
|
|
animation: shimmer 1.5s infinite;
|
|
}
|
|
|
|
.error-state {
|
|
animation: shake 0.5s ease-in-out;
|
|
}
|
|
|
|
.success-state {
|
|
animation: success-pulse 0.5s ease-out;
|
|
}
|
|
|
|
.ripple {
|
|
position: relative;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.ripple::before {
|
|
content: "";
|
|
position: absolute;
|
|
top: var(--ripple-y, 50%);
|
|
left: var(--ripple-x, 50%);
|
|
width: 0;
|
|
height: 0;
|
|
border-radius: 50%;
|
|
background: rgba(255, 255, 255, 0.5);
|
|
transform: translate(-50%, -50%);
|
|
transition:
|
|
width 0.6s ease,
|
|
height 0.6s ease,
|
|
opacity 0.6s ease;
|
|
opacity: 0;
|
|
}
|
|
|
|
.ripple:active::before {
|
|
width: 300px;
|
|
height: 300px;
|
|
opacity: 0.3;
|
|
}
|
|
|
|
@media (prefers-reduced-motion: reduce) {
|
|
*,
|
|
*::before,
|
|
*::after {
|
|
animation-duration: 0.01ms !important;
|
|
animation-iteration-count: 1 !important;
|
|
transition-duration: 0.01ms !important;
|
|
}
|
|
}
|
|
|
|
.animate-fadeIn {
|
|
animation: fadeIn var(--transition-medium) ease;
|
|
}
|
|
|
|
.animate-slideUp {
|
|
animation: slideUp var(--transition-medium) ease-out;
|
|
}
|
|
|
|
.animate-slideIn {
|
|
animation: slideIn var(--transition-medium) ease-out;
|
|
}
|
|
|
|
.animate-pulse {
|
|
animation: pulse 2s ease-in-out infinite;
|
|
}
|
|
|
|
.animate-float {
|
|
animation: float 3s ease-in-out infinite;
|
|
}
|
|
|
|
.animate-spin {
|
|
animation: spin 1s linear infinite;
|
|
}
|