404.html 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510
  1. <style>
  2. body {
  3. color: #ccc;
  4. background: #111;
  5. font-family: sans-serif;
  6. }
  7. h1,
  8. h2 {
  9. margin: 0;
  10. }
  11. a {
  12. color: #ccc;
  13. }
  14. section {
  15. padding: 20px;
  16. }
  17. .hero {
  18. font-size: clamp(40px, 10vw, 100px);
  19. line-height: 1;
  20. display: inline-block;
  21. color: #fff;
  22. z-index: 2;
  23. letter-spacing: 10px;
  24. /* Bright things in dark environments usually cast that light, giving off a glow */
  25. filter: drop-shadow(0 1px 3px);
  26. }
  27. .demo {
  28. height: 100px;
  29. background: #fff;
  30. }
  31. .layers {
  32. position: relative;
  33. }
  34. .layers::before,
  35. .layers::after {
  36. content: attr(data-text);
  37. position: absolute;
  38. width: 110%;
  39. z-index: -1;
  40. }
  41. .layers::before {
  42. top: 10px;
  43. left: 15px;
  44. color: #e0287d;
  45. }
  46. .layers::after {
  47. top: 5px;
  48. left: -10px;
  49. color: #1bc7fb;
  50. }
  51. .single-path {
  52. clip-path: polygon(0% 12%,
  53. 53% 12%,
  54. 53% 26%,
  55. 25% 26%,
  56. 25% 86%,
  57. 31% 86%,
  58. 31% 0%,
  59. 53% 0%,
  60. 53% 84%,
  61. 92% 84%,
  62. 92% 82%,
  63. 70% 82%,
  64. 70% 29%,
  65. 78% 29%,
  66. 78% 65%,
  67. 69% 65%,
  68. 69% 66%,
  69. 77% 66%,
  70. 77% 45%,
  71. 85% 45%,
  72. 85% 26%,
  73. 97% 26%,
  74. 97% 28%,
  75. 84% 28%,
  76. 84% 34%,
  77. 54% 34%,
  78. 54% 89%,
  79. 30% 89%,
  80. 30% 58%,
  81. 83% 58%,
  82. 83% 5%,
  83. 68% 5%,
  84. 68% 36%,
  85. 62% 36%,
  86. 62% 1%,
  87. 12% 1%,
  88. 12% 34%,
  89. 60% 34%,
  90. 60% 57%,
  91. 98% 57%,
  92. 98% 83%,
  93. 1% 83%,
  94. 1% 53%,
  95. 91% 53%,
  96. 91% 84%,
  97. 8% 84%,
  98. 8% 83%,
  99. 4% 83%);
  100. }
  101. .paths {
  102. animation: paths 5s step-end infinite;
  103. }
  104. @keyframes paths {
  105. 0% {
  106. clip-path: polygon(0% 43%,
  107. 83% 43%,
  108. 83% 22%,
  109. 23% 22%,
  110. 23% 24%,
  111. 91% 24%,
  112. 91% 26%,
  113. 18% 26%,
  114. 18% 83%,
  115. 29% 83%,
  116. 29% 17%,
  117. 41% 17%,
  118. 41% 39%,
  119. 18% 39%,
  120. 18% 82%,
  121. 54% 82%,
  122. 54% 88%,
  123. 19% 88%,
  124. 19% 4%,
  125. 39% 4%,
  126. 39% 14%,
  127. 76% 14%,
  128. 76% 52%,
  129. 23% 52%,
  130. 23% 35%,
  131. 19% 35%,
  132. 19% 8%,
  133. 36% 8%,
  134. 36% 31%,
  135. 73% 31%,
  136. 73% 16%,
  137. 1% 16%,
  138. 1% 56%,
  139. 50% 56%,
  140. 50% 8%);
  141. }
  142. 5% {
  143. clip-path: polygon(0% 29%,
  144. 44% 29%,
  145. 44% 83%,
  146. 94% 83%,
  147. 94% 56%,
  148. 11% 56%,
  149. 11% 64%,
  150. 94% 64%,
  151. 94% 70%,
  152. 88% 70%,
  153. 88% 32%,
  154. 18% 32%,
  155. 18% 96%,
  156. 10% 96%,
  157. 10% 62%,
  158. 9% 62%,
  159. 9% 84%,
  160. 68% 84%,
  161. 68% 50%,
  162. 52% 50%,
  163. 52% 55%,
  164. 35% 55%,
  165. 35% 87%,
  166. 25% 87%,
  167. 25% 39%,
  168. 15% 39%,
  169. 15% 88%,
  170. 52% 88%);
  171. }
  172. 30% {
  173. clip-path: polygon(0% 53%,
  174. 93% 53%,
  175. 93% 62%,
  176. 68% 62%,
  177. 68% 37%,
  178. 97% 37%,
  179. 97% 89%,
  180. 13% 89%,
  181. 13% 45%,
  182. 51% 45%,
  183. 51% 88%,
  184. 17% 88%,
  185. 17% 54%,
  186. 81% 54%,
  187. 81% 75%,
  188. 79% 75%,
  189. 79% 76%,
  190. 38% 76%,
  191. 38% 28%,
  192. 61% 28%,
  193. 61% 12%,
  194. 55% 12%,
  195. 55% 62%,
  196. 68% 62%,
  197. 68% 51%,
  198. 0% 51%,
  199. 0% 92%,
  200. 63% 92%,
  201. 63% 4%,
  202. 65% 4%);
  203. }
  204. 45% {
  205. clip-path: polygon(0% 33%,
  206. 2% 33%,
  207. 2% 69%,
  208. 58% 69%,
  209. 58% 94%,
  210. 55% 94%,
  211. 55% 25%,
  212. 33% 25%,
  213. 33% 85%,
  214. 16% 85%,
  215. 16% 19%,
  216. 5% 19%,
  217. 5% 20%,
  218. 79% 20%,
  219. 79% 96%,
  220. 93% 96%,
  221. 93% 50%,
  222. 5% 50%,
  223. 5% 74%,
  224. 55% 74%,
  225. 55% 57%,
  226. 96% 57%,
  227. 96% 59%,
  228. 87% 59%,
  229. 87% 65%,
  230. 82% 65%,
  231. 82% 39%,
  232. 63% 39%,
  233. 63% 92%,
  234. 4% 92%,
  235. 4% 36%,
  236. 24% 36%,
  237. 24% 70%,
  238. 1% 70%,
  239. 1% 43%,
  240. 15% 43%,
  241. 15% 28%,
  242. 23% 28%,
  243. 23% 71%,
  244. 90% 71%,
  245. 90% 86%,
  246. 97% 86%,
  247. 97% 1%,
  248. 60% 1%,
  249. 60% 67%,
  250. 71% 67%,
  251. 71% 91%,
  252. 17% 91%,
  253. 17% 14%,
  254. 39% 14%,
  255. 39% 30%,
  256. 58% 30%,
  257. 58% 11%,
  258. 52% 11%,
  259. 52% 83%,
  260. 68% 83%);
  261. }
  262. 76% {
  263. clip-path: polygon(0% 26%,
  264. 15% 26%,
  265. 15% 73%,
  266. 72% 73%,
  267. 72% 70%,
  268. 77% 70%,
  269. 77% 75%,
  270. 8% 75%,
  271. 8% 42%,
  272. 4% 42%,
  273. 4% 61%,
  274. 17% 61%,
  275. 17% 12%,
  276. 26% 12%,
  277. 26% 63%,
  278. 73% 63%,
  279. 73% 43%,
  280. 90% 43%,
  281. 90% 67%,
  282. 50% 67%,
  283. 50% 41%,
  284. 42% 41%,
  285. 42% 46%,
  286. 50% 46%,
  287. 50% 84%,
  288. 96% 84%,
  289. 96% 78%,
  290. 49% 78%,
  291. 49% 25%,
  292. 63% 25%,
  293. 63% 14%);
  294. }
  295. 90% {
  296. clip-path: polygon(0% 41%,
  297. 13% 41%,
  298. 13% 6%,
  299. 87% 6%,
  300. 87% 93%,
  301. 10% 93%,
  302. 10% 13%,
  303. 89% 13%,
  304. 89% 6%,
  305. 3% 6%,
  306. 3% 8%,
  307. 16% 8%,
  308. 16% 79%,
  309. 0% 79%,
  310. 0% 99%,
  311. 92% 99%,
  312. 92% 90%,
  313. 5% 90%,
  314. 5% 60%,
  315. 0% 60%,
  316. 0% 48%,
  317. 89% 48%,
  318. 89% 13%,
  319. 80% 13%,
  320. 80% 43%,
  321. 95% 43%,
  322. 95% 19%,
  323. 80% 19%,
  324. 80% 85%,
  325. 38% 85%,
  326. 38% 62%);
  327. }
  328. 1%,
  329. 7%,
  330. 33%,
  331. 47%,
  332. 78%,
  333. 93% {
  334. clip-path: none;
  335. }
  336. }
  337. .movement {
  338. /* Normally this position would be absolute & on the layers, set to relative here so we can see it on the div */
  339. position: relative;
  340. animation: movement 8s step-end infinite;
  341. }
  342. @keyframes movement {
  343. 0% {
  344. top: 0px;
  345. left: -20px;
  346. }
  347. 15% {
  348. top: 10px;
  349. left: 10px;
  350. }
  351. 60% {
  352. top: 5px;
  353. left: -10px;
  354. }
  355. 75% {
  356. top: -5px;
  357. left: 20px;
  358. }
  359. 100% {
  360. top: 10px;
  361. left: 5px;
  362. }
  363. }
  364. .opacity {
  365. animation: opacity 5s step-end infinite;
  366. }
  367. @keyframes opacity {
  368. 0% {
  369. opacity: 0.1;
  370. }
  371. 5% {
  372. opacity: 0.7;
  373. }
  374. 30% {
  375. opacity: 0.4;
  376. }
  377. 45% {
  378. opacity: 0.6;
  379. }
  380. 76% {
  381. opacity: 0.4;
  382. }
  383. 90% {
  384. opacity: 0.8;
  385. }
  386. 1%,
  387. 7%,
  388. 33%,
  389. 47%,
  390. 78%,
  391. 93% {
  392. opacity: 0;
  393. }
  394. }
  395. .font {
  396. animation: font 7s step-end infinite;
  397. }
  398. @keyframes font {
  399. 0% {
  400. font-weight: 100;
  401. color: #e0287d;
  402. filter: blur(3px);
  403. }
  404. 20% {
  405. font-weight: 500;
  406. color: #fff;
  407. filter: blur(0);
  408. }
  409. 50% {
  410. font-weight: 300;
  411. color: #1bc7fb;
  412. filter: blur(2px);
  413. }
  414. 60% {
  415. font-weight: 700;
  416. color: #fff;
  417. filter: blur(0);
  418. }
  419. 90% {
  420. font-weight: 500;
  421. color: #e0287d;
  422. filter: blur(6px);
  423. }
  424. }
  425. .glitch span {
  426. animation: paths 5s step-end infinite;
  427. }
  428. .glitch::before {
  429. animation: paths 5s step-end infinite, opacity 5s step-end infinite,
  430. font 8s step-end infinite, movement 10s step-end infinite;
  431. }
  432. .glitch::after {
  433. animation: paths 5s step-end infinite, opacity 5s step-end infinite,
  434. font 7s step-end infinite, movement 8s step-end infinite;
  435. }
  436. .hero-container {
  437. position: relative;
  438. text-align: center;
  439. height: 100vh;
  440. display: flex;
  441. flex-direction: column;
  442. justify-content: center;
  443. padding: 0;
  444. /* Remove padding */
  445. margin: 0;
  446. /* Remove margin */
  447. overflow: hidden;
  448. }
  449. .environment {
  450. position: absolute;
  451. top: 0;
  452. left: 0;
  453. right: 0;
  454. bottom: 0;
  455. opacity: 0.5;
  456. filter: blur(5px);
  457. background: url(https://s3.ap-northeast-1.wasabisys.com/cunnysafe/the-perfect-girl-2.jpg) center no-repeat;
  458. background-size: cover;
  459. }
  460. </style>
  461. <div class="hero-container">
  462. <div class="environment"></div>
  463. <h2 class="hero glitch layers" data-text="404"><span>404</span></h2><br><br>
  464. <p class="glitch">Oy gevalt! Page not found!</p>
  465. </div>