diff --git a/src/App.vue b/src/App.vue index 2136a52..06e644b 100644 --- a/src/App.vue +++ b/src/App.vue @@ -74,63 +74,93 @@ function onChange(markdownValue) { .theme-toggle__track { position: relative; - width: 78px; - height: 40px; + width: 72px; + height: 36px; display: block; border-radius: 999px; - border: 1px solid var(--panel-border); + border: 2px solid var(--panel-border); background: linear-gradient(135deg, var(--toggle-bg-start), var(--toggle-bg-end)); - box-shadow: var(--panel-shadow); + box-shadow: var(--panel-shadow), inset 0 2px 4px rgba(255, 255, 255, 0.1), inset 0 -2px 4px rgba(0, 0, 0, 0.1); + overflow: hidden; + transition: background 400ms ease, border-color 400ms ease, box-shadow 400ms ease; +} + +.theme-toggle__track::before { + content: ''; + position: absolute; + inset: 0; + background: linear-gradient(180deg, rgba(255,255,255,0.15) 0%, transparent 50%, rgba(0,0,0,0.1) 100%); + border-radius: 999px; + pointer-events: none; + transition: opacity 400ms ease; } .theme-toggle__thumb { position: absolute; - top: 3px; - left: 3px; - width: 32px; - height: 32px; + top: 2px; + left: 2px; + width: 28px; + height: 28px; border-radius: 50%; - background: var(--toggle-thumb-bg); - box-shadow: 0 5px 14px rgba(0, 0, 0, 0.2); - transition: transform 220ms ease; + background: linear-gradient(135deg, var(--toggle-thumb-bg) 0%, var(--toggle-thumb-bg) 100%); + box-shadow: 0 2px 6px rgba(0, 0, 0, 0.25), 0 0 0 1px rgba(0, 0, 0, 0.05), inset 0 1px 0 rgba(255, 255, 255, 0.4); + transition: transform 400ms cubic-bezier(0.34, 1.56, 0.64, 1); + z-index: 2; } .theme-toggle__sun, .theme-toggle__moon { position: absolute; top: 50%; - width: 16px; - height: 16px; + width: 18px; + height: 18px; transform: translateY(-50%); - transition: opacity 200ms ease, transform 220ms ease; + transition: opacity 300ms ease, transform 400ms cubic-bezier(0.34, 1.56, 0.64, 1); } .theme-toggle__sun { - left: 12px; + left: 10px; color: var(--toggle-sun); opacity: 1; - transform: translateY(-50%) rotate(0deg); + transform: translateY(-50%) scale(1); +} + +.theme-toggle__sun svg { + width: 18px; + height: 18px; + filter: drop-shadow(0 0 3px var(--toggle-sun)); } .theme-toggle__moon { - right: 12px; + right: 10px; color: var(--toggle-moon); - opacity: 0.55; - transform: translateY(-50%) rotate(-16deg); + opacity: 0.5; + transform: translateY(-50%) scale(0.85); +} + +.theme-toggle__moon svg { + width: 18px; + height: 18px; } .theme-toggle.is-dark .theme-toggle__thumb { - transform: translateX(38px); + transform: translateX(36px); + background: linear-gradient(135deg, var(--toggle-thumb-bg) 0%, #c8d4ec 100%); } .theme-toggle.is-dark .theme-toggle__sun { - opacity: 0.55; - transform: translateY(-50%) rotate(16deg); + opacity: 0.5; + transform: translateY(-50%) scale(0.85); } .theme-toggle.is-dark .theme-toggle__moon { opacity: 1; - transform: translateY(-50%) rotate(0deg); + transform: translateY(-50%) scale(1); + color: #c8d4ec; +} + +.theme-toggle.is-dark .theme-toggle__moon svg { + filter: drop-shadow(0 0 4px rgba(200, 212, 236, 0.6)); } .theme-toggle:focus-visible { diff --git a/src/components/MilkdownEditor.vue b/src/components/MilkdownEditor.vue index 0e2b71a..655c728 100644 --- a/src/components/MilkdownEditor.vue +++ b/src/components/MilkdownEditor.vue @@ -38,8 +38,8 @@