switch.css 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. .theme-li {
  2. height: 50px;
  3. padding: 15px 8px;
  4. }
  5. .theme-li:hover {
  6. background-color: rgba(0, 0, 0, 0.02);
  7. }
  8. body.darktheme .theme-li:hover {
  9. background-color: #262626;
  10. }
  11. .theme-toggle {
  12. --ease-3: cubic-bezier(0.25, 0, 0.3, 1);
  13. --ease-out-5: cubic-bezier(0, 0, 0, 1);
  14. --ease-elastic-3: cubic-bezier(0.5, 1.25, 0.75, 1.25);
  15. --ease-elastic-4: cubic-bezier(0.5, 1.5, 0.75, 1.25);
  16. --size: 2rem;
  17. --icon-fill: #abb3ba;
  18. --icon-fill-hover: #e2e6e9;
  19. -webkit-tap-highlight-color: transparent;
  20. aspect-ratio: 1;
  21. background: none;
  22. block-size: var(--size);
  23. border: none;
  24. border-radius: 50%;
  25. cursor: pointer;
  26. inline-size: var(--size);
  27. outline-offset: 5px;
  28. padding: 0;
  29. touch-action: manipulation;
  30. }
  31. .theme-toggle > svg {
  32. stroke-linecap: round;
  33. block-size: 100%;
  34. inline-size: 100%;
  35. }
  36. [data-mode=dark].theme-toggle {
  37. --icon-fill: #454d54;
  38. --icon-fill-hover: #22262a;
  39. }
  40. @media (hover: none) {
  41. .theme-toggle {
  42. --size: 48px;
  43. }
  44. }
  45. @media (max-width: 767px) {
  46. .theme-toggle {
  47. --size: 24px;
  48. }
  49. [data-mode=dark].theme-toggle {
  50. --icon-fill: #abb3ba;
  51. --icon-fill-hover: #e2e6e9;
  52. }
  53. }
  54. .sun-and-moon > .moon,
  55. .sun-and-moon > .sun,
  56. .sun-and-moon > .sun-beams {
  57. transform-origin: center center;
  58. }
  59. .sun-and-moon > .moon,
  60. .sun-and-moon > .sun {
  61. fill: var(--icon-fill);
  62. }
  63. .sun-and-moon > .sun-beams {
  64. stroke: var(--icon-fill);
  65. stroke-width: 2px;
  66. }
  67. .theme-toggle:hover > .sun-and-moon > .moon,
  68. .theme-toggle:hover > .sun-and-moon > .sun {
  69. fill: var(--icon-fill-hover);
  70. }
  71. .theme-toggle:hover > .sun-and-moon > .sun-beams {
  72. stroke: var(--icon-fill-hover);
  73. }
  74. .theme-toggle:focus-visible > .sun-and-moon > .moon,
  75. .theme-toggle:focus-visible > .sun-and-moon > .sun {
  76. fill: var(--icon-fill-hover);
  77. }
  78. .theme-toggle:focus-visible > .sun-and-moon > .sun-beams {
  79. stroke: var(--icon-fill-hover);
  80. }
  81. [data-mode=light] .sun-and-moon > .sun {
  82. transform: scale(1.75);
  83. }
  84. [data-mode=light] .sun-and-moon > .sun-beams {
  85. opacity: 0;
  86. }
  87. [data-mode=light] .sun-and-moon > .moon > circle {
  88. transform: translate(-7px);
  89. }
  90. @supports (cx:1) {
  91. [data-mode=light] .sun-and-moon > .moon > circle {
  92. cx: 17;
  93. transform: translate(0);
  94. }
  95. }
  96. @media (prefers-reduced-motion: no-preference) {
  97. .sun-and-moon > .sun {
  98. transition: transform 0.5s var(--ease-elastic-3);
  99. }
  100. .sun-and-moon > .sun-beams {
  101. transition: transform 0.5s var(--ease-elastic-4), opacity 0.5s var(--ease-3);
  102. }
  103. .sun-and-moon .moon > circle {
  104. transition: transform 0.25s var(--ease-out-5);
  105. }
  106. @supports (cx:1) {
  107. .sun-and-moon .moon > circle {
  108. transition: cx 0.25s var(--ease-out-5);
  109. }
  110. }
  111. [data-mode=light] .sun-and-moon > .sun {
  112. transform: scale(1.75);
  113. transition-duration: 0.25s;
  114. transition-timing-function: var(--ease-3);
  115. }
  116. [data-mode=light] .sun-and-moon > .sun-beams {
  117. transform: rotate(-25deg);
  118. transition-duration: 0.15s;
  119. }
  120. [data-mode=light] .sun-and-moon > .moon > circle {
  121. transition-delay: 0.25s;
  122. transition-duration: 0.5s;
  123. }
  124. }