| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
|
|
| .theme-toggle {
|
| background: none;
|
| border: none;
|
| cursor: none;
|
| padding: 0;
|
| flex-shrink: 0;
|
| position: relative;
|
| }
|
|
|
|
|
| .theme-toggle::before {
|
| content: '';
|
| position: absolute;
|
| inset: -6px;
|
| border-radius: 40px;
|
| background: var(--grad-aurora);
|
| opacity: 0;
|
| filter: blur(8px);
|
| transition: opacity 0.4s ease;
|
| pointer-events: none;
|
| z-index: -1;
|
| }
|
| .theme-toggle:hover::before {
|
| opacity: 0.18;
|
| }
|
| .theme-toggle.just-toggled::before {
|
| animation: toggleAuraPulse 0.65s cubic-bezier(0.19,1,0.22,1) forwards;
|
| }
|
| @keyframes toggleAuraPulse {
|
| 0% { opacity: 0; transform: scale(0.8); }
|
| 30% { opacity: 0.45; transform: scale(1.2); }
|
| 100% { opacity: 0; transform: scale(1.5); }
|
| }
|
|
|
|
|
| .toggle-track {
|
| position: relative;
|
| width: 64px;
|
| height: 32px;
|
| background: var(--toggle-bg, rgba(124,58,237,0.14));
|
| border: 1.5px solid var(--toggle-border, rgba(124,58,237,0.4));
|
| border-radius: 100px;
|
| display: flex;
|
| align-items: center;
|
| justify-content: space-between;
|
| padding: 0 8px;
|
| overflow: hidden;
|
| cursor: none;
|
| transition:
|
| background 0.55s cubic-bezier(0.4,0,0.2,1),
|
| border-color 0.55s cubic-bezier(0.4,0,0.2,1),
|
| box-shadow 0.55s cubic-bezier(0.4,0,0.2,1);
|
| box-shadow: 0 0 14px rgba(124,58,237,0.22);
|
| }
|
|
|
|
|
| .toggle-track::after {
|
| content: '';
|
| position: absolute;
|
| top: 0; left: -100%; width: 100%; height: 100%;
|
| background: linear-gradient(
|
| 90deg,
|
| transparent 0%,
|
| rgba(255,255,255,0.18) 50%,
|
| transparent 100%
|
| );
|
| transition: left 0.5s ease;
|
| pointer-events: none;
|
| border-radius: inherit;
|
| }
|
| .theme-toggle:hover .toggle-track::after { left: 100%; }
|
|
|
|
|
| [data-theme='light'] .toggle-track {
|
| background: var(--toggle-bg, rgba(253,230,138,0.2));
|
| border-color: var(--toggle-border, rgba(217,119,6,0.5));
|
| box-shadow: 0 0 14px rgba(217,119,6,0.22);
|
| }
|
|
|
|
|
| .toggle-icon {
|
| font-size: 14px;
|
| line-height: 1;
|
| z-index: 1;
|
| position: relative;
|
| transition:
|
| opacity 0.35s ease,
|
| transform 0.35s cubic-bezier(0.34,1.56,0.64,1),
|
| filter 0.35s ease;
|
| }
|
|
|
|
|
| .toggle-icon.moon { opacity: 1; filter: drop-shadow(0 0 5px rgba(0,255,238,0.8)); }
|
| .toggle-icon.sun { opacity: 0.32; transform: scale(0.75) rotate(-30deg); filter: none; }
|
|
|
|
|
| [data-theme='light'] .toggle-icon.moon {
|
| opacity: 0.32;
|
| transform: scale(0.75) rotate(30deg);
|
| filter: none;
|
| }
|
| [data-theme='light'] .toggle-icon.sun {
|
| opacity: 1;
|
| transform: scale(1) rotate(0deg);
|
| filter: drop-shadow(0 0 6px rgba(217,119,6,0.9));
|
| }
|
|
|
|
|
| .toggle-thumb {
|
| position: absolute;
|
| top: 50%;
|
| left: 4px;
|
| transform: translateY(-50%);
|
| width: 24px;
|
| height: 24px;
|
| border-radius: 50%;
|
|
|
|
|
| background: linear-gradient(135deg, #7c3aed, #00ffee);
|
| box-shadow:
|
| 0 0 14px rgba(0,255,238,0.75),
|
| 0 0 28px rgba(124,58,237,0.35),
|
| 0 2px 6px rgba(0,0,0,0.4);
|
|
|
| transition:
|
| left 0.45s cubic-bezier(0.34,1.56,0.64,1),
|
| background 0.55s cubic-bezier(0.4,0,0.2,1),
|
| box-shadow 0.55s cubic-bezier(0.4,0,0.2,1),
|
| border-radius 0.3s ease;
|
|
|
| will-change: left, background;
|
| }
|
|
|
|
|
| .toggle-thumb.squish {
|
| animation: thumbSquish 0.45s cubic-bezier(0.34,1.56,0.64,1);
|
| }
|
| @keyframes thumbSquish {
|
| 0% { border-radius: 50%; transform: translateY(-50%) scaleX(1); }
|
| 30% { border-radius: 40% 60% 60% 40%; transform: translateY(-50%) scaleX(1.35); }
|
| 60% { border-radius: 60% 40% 40% 60%; transform: translateY(-50%) scaleX(0.8); }
|
| 100% { border-radius: 50%; transform: translateY(-50%) scaleX(1); }
|
| }
|
|
|
|
|
| .toggle-thumb.light {
|
| left: calc(100% - 28px);
|
| background: linear-gradient(135deg, #d97706, #fbbf24);
|
| box-shadow:
|
| 0 0 14px rgba(251,191,36,0.9),
|
| 0 0 28px rgba(217,119,6,0.5),
|
| 0 2px 6px rgba(0,0,0,0.2);
|
| }
|
|
|
|
|
| .toggle-thumb::before {
|
| content: '';
|
| position: absolute;
|
| top: 3px; left: 3px;
|
| width: 8px; height: 8px;
|
| border-radius: 50%;
|
| background: rgba(255,255,255,0.5);
|
| filter: blur(2px);
|
| transition: background 0.55s ease;
|
| }
|
| .toggle-thumb.light::before {
|
| background: rgba(255,255,255,0.7);
|
| }
|
|
|
|
|
| .toggle-label-sr {
|
| position: absolute;
|
| width: 1px; height: 1px;
|
| padding: 0; margin: -1px;
|
| overflow: hidden; clip: rect(0,0,0,0);
|
| white-space: nowrap; border: 0;
|
| } |