404.css 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. @import url("https://fonts.googleapis.com/css2?family=Open+Sans:wght@800&family=Roboto:wght@100;300&display=swap");
  2. :root {
  3. --button: #b3b3b3;
  4. --button-color: #0a0a0a;
  5. --shadow: #000;
  6. --bg: #737373;
  7. --header: #7a7a7a;
  8. --color: #fafafa;
  9. --lit-header: #e6e6e6;
  10. --speed: 2s;
  11. }/* */
  12. * {
  13. box-sizing: border-box;
  14. transform-style: preserve-3d;
  15. }
  16. @property --swing-x {
  17. initial-value: 0;
  18. inherits: false;
  19. syntax: '<integer>';
  20. }
  21. @property --swing-y {
  22. initial-value: 0;
  23. inherits: false;
  24. syntax: '<integer>';
  25. }
  26. body {
  27. min-height: 100vh;
  28. display: flex;
  29. font-family: 'Roboto', sans-serif;
  30. flex-direction: column;
  31. align-items: center;
  32. justify-content: center;
  33. background: var(--bg);
  34. color: var(--color);
  35. perspective: 1200px;
  36. }
  37. a {
  38. text-transform: uppercase;
  39. text-decoration: none;
  40. background: var(--button);
  41. color: var(--button-color);
  42. padding: 1rem 4rem;
  43. border-radius: 4rem;
  44. font-size: 0.875rem;
  45. letter-spacing: 0.05rem;
  46. }
  47. p {
  48. font-weight: 100;
  49. }
  50. h1 {
  51. -webkit-animation: swing var(--speed) infinite alternate ease-in-out;
  52. animation: swing var(--speed) infinite alternate ease-in-out;
  53. font-size: clamp(5rem, 40vmin, 20rem);
  54. font-family: 'Open Sans', sans-serif;
  55. margin: 0;
  56. margin-bottom: 1rem;
  57. letter-spacing: 1rem;
  58. transform: translate3d(0, 0, 0vmin);
  59. --x: calc(50% + (var(--swing-x) * 0.5) * 1%);
  60. background: radial-gradient(var(--lit-header), var(--header) 45%) var(--x) 100%/200% 200%;
  61. -webkit-background-clip: text;
  62. color: transparent;
  63. }
  64. h1:after {
  65. -webkit-animation: swing var(--speed) infinite alternate ease-in-out;
  66. animation: swing var(--speed) infinite alternate ease-in-out;
  67. content: "404";
  68. position: absolute;
  69. top: 0;
  70. left: 0;
  71. color: var(--shadow);
  72. filter: blur(1.5vmin);
  73. transform: scale(1.05) translate3d(0, 12%, -10vmin) translate(calc((var(--swing-x, 0) * 0.05) * 1%), calc((var(--swing-y) * 0.05) * 1%));
  74. }
  75. .cloak {
  76. animation: swing var(--speed) infinite alternate-reverse ease-in-out;
  77. height: 100%;
  78. width: 100%;
  79. transform-origin: 50% 30%;
  80. transform: rotate(calc(var(--swing-x) * -0.25deg));
  81. background: radial-gradient(40% 40% at 50% 42%, transparent, #000 35%);
  82. }
  83. .cloak__wrapper {
  84. position: fixed;
  85. top: 0;
  86. left: 0;
  87. bottom: 0;
  88. right: 0;
  89. overflow: hidden;
  90. }
  91. .cloak__container {
  92. height: 250vmax;
  93. width: 250vmax;
  94. position: absolute;
  95. top: 50%;
  96. left: 50%;
  97. transform: translate(-50%, -50%);
  98. }
  99. .info {
  100. text-align: center;
  101. line-height: 1.5;
  102. max-width: clamp(16rem, 90vmin, 25rem);
  103. }
  104. .info > p {
  105. margin-bottom: 3rem;
  106. }
  107. @-webkit-keyframes swing {
  108. 0% {
  109. --swing-x: -100;
  110. --swing-y: -100;
  111. }
  112. 50% {
  113. --swing-y: 0;
  114. }
  115. 100% {
  116. --swing-y: -100;
  117. --swing-x: 100;
  118. }
  119. }
  120. @keyframes swing {
  121. 0% {
  122. --swing-x: -100;
  123. --swing-y: -100;
  124. }
  125. 50% {
  126. --swing-y: 0;
  127. }
  128. 100% {
  129. --swing-y: -100;
  130. --swing-x: 100;
  131. }
  132. }