@-webkit-keyframes rainbow { 0% { background-position: 0 50% } 50% { background-position: 100% 50% } 100% { background-position: 0 50% } } @-moz-keyframes rainbow { 0% { background-position: 0 50% } 50% { background-position: 100% 50% } 100% { background-position: 0 50% } } @keyframes rainbow { 0% { background-position: 0 50% } 50% { background-position: 100% 50% } 100% { background-position: 0 50% } } #photoprism .animate-rainbow { background: repeating-linear-gradient(315deg, #ff9aa2, #dabcd2, #c7ceea, #bbe0de, #b5ead7); background-size: 200% 200%; -webkit-animation: rainbow 6s ease infinite; -moz-animation: rainbow 6s ease infinite; animation: rainbow 6s ease infinite; } #photoprism .static-rainbow { background-size: 200% 200%; background: repeating-linear-gradient(315deg, #ff9aa2, #dabcd2, #c7ceea, #bbe0de, #b5ead7) 100% 50%; } @keyframes rotation { from { transform: rotate(0deg); } to { transform: rotate(359deg); } } #photoprism .animate-rotate { animation: rotation 8s infinite linear; } @keyframes pulse { 0% { opacity: 0.5; } 50% { opacity: 1; } 100% { opacity: 0.5; } } #photoprism .animate-pulse { animation: pulse 5s infinite; } @keyframes stretch { 0% { transform: scale(.3); } 50% { transform: scale(1); } 100% { transform: scale(.3); } } #photoprism .animate-stretch { animation: stretch 1.5s ease-out 0s alternate infinite none running; }