cleanup: reorganized sass files to be in src/styles instead of src/assets/css

This commit is contained in:
Netanel Henya 2023-02-26 01:01:31 +02:00
parent c46802166c
commit 494c0ed434
54 changed files with 55 additions and 55 deletions

View file

@ -0,0 +1,12 @@
.clearButton {
background: transparent;
border: 0 !important;
padding: 0 !important;
cursor: pointer;
outline: none !important;
color: inherit;
width: 100%;
vertical-align: middle;
font-family: inherit;
font-size: inherit;
}

450
src/styles/dashboard.scss Normal file
View file

@ -0,0 +1,450 @@
.dashboardColumn,
.dashboardSections {
flex-direction: column;
}
.dashboardFooter {
margin-top: 3.5em;
text-align: center;
}
.dashboardFooter a {
margin: 0 0.7em;
}
progress {
appearance: none;
margin: 0;
background: #ccc !important;
}
progress[role]::after {
background-image: none;
}
progress::-webkit-progress-bar {
background: #ccc;
}
progress::-moz-progress-bar {
background-color: #00a4dc;
}
progress::-webkit-progress-value {
background-color: #00a4dc;
}
progress[aria-valuenow]::before {
border-radius: 0.4em;
background-color: #00a4dc;
}
.localnav {
margin-bottom: 2.2em !important;
}
@media all and (min-width: 50em) {
.type-interior > div[data-role=content],
.type-interior > .ui-panel-content-wrap > div[data-role=content] {
padding-right: 0;
padding-left: 0;
padding-top: 0;
overflow: hidden;
}
}
.dashboardDocument .dashboardEntryHeaderButton,
.dashboardDocument .lnkManageServer {
display: none !important;
}
.adminDrawerLogo {
display: none;
}
.layout-mobile .adminDrawerLogo {
padding: 1.5em 1em 1.2em;
border-bottom: 1px solid #e0e0e0;
margin-bottom: 1em;
display: block;
}
.adminDrawerLogo img {
height: 4em;
}
a[data-role=button] {
background: #292929 !important;
background-clip: padding-box;
-webkit-font-smoothing: antialiased;
user-select: none;
cursor: pointer !important;
font-family: inherit !important;
font-weight: 500 !important;
margin: 0 0.25em !important;
display: inline-block;
padding: 0.8em 1em;
text-align: center;
text-decoration: none !important;
}
div[data-role=controlgroup] a[data-role=button] {
display: inline-block !important;
margin: 0 !important;
box-shadow: none !important;
border-radius: 0;
}
div[data-role=controlgroup] a[data-role=button]:first-child {
border-bottom-left-radius: 0.3125em;
border-top-left-radius: 0.3125em;
}
div[data-role=controlgroup] a[data-role=button]:last-child {
border-bottom-right-radius: 0.3125em;
border-top-right-radius: 0.3125em;
}
div[data-role=controlgroup] a[data-role=button] + a[data-role=button] {
[dir="ltr"] & {
border-left-width: 0 !important;
margin: 0 0 0 -0.4em !important;
}
[dir="rtl"] & {
border-right-width: 0 !important;
margin: 0 -0.4em 0 0 !important;
}
}
div[data-role=controlgroup] a.ui-btn-active {
background: #00a4dc !important;
color: #292929 !important;
}
.sessionAppInfo img {
max-width: 2.5em;
max-height: 2.5em;
margin-right: 8px;
}
.appLinks img {
height: 36px;
}
.wizardContent h2 img {
height: 2.5em;
vertical-align: middle;
margin-right: 0.5em;
position: relative;
top: -0.3em;
}
.header .imageLink {
display: inline-block;
}
.header .imageLink img {
height: 2.1em;
vertical-align: middle;
}
.content-primary {
padding-top: 6em;
padding-right: 1em;
padding-left: 1em;
}
.withTabs .content-primary {
padding-top: 9em !important;
}
@media all and (min-width: 40em) {
.content-primary {
padding-top: 4.6em;
}
.withTabs .content-primary {
padding-top: 10em !important;
}
}
@media all and (min-width: 84em) {
.withTabs .content-primary {
padding-top: 7em !important;
}
}
.content-primary ul:first-child {
margin-top: 0;
}
.dashboardSections {
display: flex;
flex-direction: column;
}
.dashboardColumn {
display: flex;
flex-direction: column;
flex-shrink: 0;
flex-grow: 1;
}
.dashboardActionsContainer {
margin: 1em -0.3em 0;
}
.sessionNowPlayingContent {
background-size: cover;
background-repeat: no-repeat;
background-position: center center;
position: absolute;
border-radius: 0.2em;
top: 0;
left: 0;
right: 0;
bottom: 0;
}
.activeSession:not(.playingSession) .sessionNowPlayingContent {
display: none;
}
.dashboardSection {
flex-shrink: 0;
margin: 0 0 2em;
}
.dashboardSection h3 {
margin-top: 0.5em;
margin-bottom: 0.5em;
}
.dashboardSection .sectionTitleTextButton > .material-icons.material-icons {
font-size: 1.17em;
margin-top: 0.5em;
margin-bottom: 0.5em;
padding-top: 0;
}
.activeRecordingItems > .card {
width: 50%;
}
.localUsers .cardText-secondary {
white-space: pre-wrap;
height: 3em;
}
.customCssContainer textarea {
resize: none;
}
@media all and (min-width: 70em) {
.dashboardSections {
flex-wrap: wrap;
flex-direction: row;
}
.dashboardColumn-2-60 {
flex-grow: 2;
}
.dashboardSection {
padding: 0 1.5em;
}
.activeRecordingItems > .card {
width: 25%;
}
}
.wizardContent {
max-width: 62em;
padding: 0.5em 2em 1em;
margin: 0 auto;
background: #fff;
}
.wizardNavigation {
text-align: right;
}
.wizardContent form {
max-width: 100%;
}
.scheduledTaskPaperIconItem {
outline: 0 !important;
}
.activeSession {
min-width: 20rem;
width: 100% !important;
}
.activitylogUserPhoto {
height: 1.71em;
width: 1.71em;
border-radius: 100%;
margin-right: 0.5em;
background-size: cover;
background-repeat: no-repeat;
background-position: center;
}
@media all and (min-width: 50em) {
.activeSession {
max-width: 25rem;
flex-grow: 0;
flex-shrink: 0;
flex-basis: 50%;
}
}
.sessionCardFooter {
padding-top: 0.5em !important;
padding-bottom: 1em !important;
text-align: center;
position: relative;
}
.sessionAppInfo {
flex-grow: 1;
padding: 1em;
overflow: hidden;
}
.sessionCardButtons {
min-height: 2.7em;
}
.sessionCardButton {
margin: 0;
}
.sessionNowPlayingInnerContent {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
font-weight: 400;
display: flex;
flex-direction: column;
}
.darkenContent {
background: rgba(0, 0, 0, 0.7);
color: #ddd;
}
.sessionAppName {
vertical-align: top;
max-width: 200px;
}
.sessionNowPlayingDetails {
display: flex;
}
.sessionNowPlayingInfo {
flex-grow: 1;
text-overflow: ellipsis;
padding: 1em;
}
.sessionNowPlayingName {
font-size: 0.8em;
}
.sessionNowPlayingTime {
flex-shrink: 0;
align-self: flex-end;
text-overflow: ellipsis;
padding: 1em;
}
.playbackProgress,
.transcodingProgress {
margin: 0;
width: 100%;
background: transparent !important;
}
.activeSession .backgroundProgress,
.activeSession .playbackProgress,
.activeSession .transcodingProgress {
position: absolute;
right: 0;
bottom: 0;
left: 0;
height: 6px;
width: 100%;
}
.playbackProgress > div {
z-index: 1000;
background-color: #00a4dc;
}
.transcodingProgress > div {
z-index: 10;
background-color: #dd4919;
}
.backgroundProgress > div {
background-color: #303030;
}
@media all and (max-width: 34.375em) {
.sessionAppName {
max-width: 160px;
}
}
@media all and (max-width: 31.25em) {
.sessionAppName {
max-width: 150px;
}
}
.disabledUser {
filter: grayscale(100%);
}
.disabledUserBanner {
margin: 0 0 2em;
}
.appLinks a {
text-decoration: none !important;
}
.appLinks a + a {
margin-left: 5px;
}
@keyframes rotating {
from {
transform: rotate(0);
}
to {
transform: rotate(360deg);
}
}
.rotatingCircle {
animation: rotating 2s linear infinite;
}
.pluginPreviewImg {
box-shadow: 0 0.0725em 0.29em 0 rgba(0, 0, 0, 0.37);
}
.ui-bar-a {
text-align: center;
padding: 0 20px;
}

View file

@ -0,0 +1,19 @@
.detailTableBodyCell,
.detailTableHeaderCell {
border-spacing: 0;
padding: 0.4em;
}
.detailTable {
border-collapse: collapse;
border-spacing: 0;
text-align: left;
width: 100%;
margin: 0 auto;
}
.detailTableHeaderCell {
font-weight: 700;
text-align: left;
vertical-align: top;
}

View file

@ -0,0 +1,55 @@
.flex {
display: flex;
}
.inline-flex {
display: inline-flex;
}
.flex-direction-column {
flex-direction: column;
}
.flex-direction-row {
flex-direction: row;
}
.flex-grow {
flex-grow: 1;
}
.flex-shrink-zero {
flex-shrink: 0;
}
.align-items-center {
align-items: center;
}
.align-items-flex-start {
align-items: flex-start;
}
.align-items-flex-end {
align-items: flex-end;
}
.justify-content-center {
justify-content: center;
}
.justify-content-flex-end {
justify-content: flex-end;
}
.justify-content-space-between {
justify-content: space-between;
}
.flex-wrap-wrap {
flex-wrap: wrap;
}
.align-self-flex-end {
align-self: flex-end;
}

56
src/styles/fonts.scss Normal file
View file

@ -0,0 +1,56 @@
@import "../styles/noto-sans/index.scss";
@mixin font($weight: null, $size: null) {
font-weight: $weight;
font-size: $size;
}
html {
@include font($size: 93%);
font-family: "Noto Sans", "Noto Sans HK", "Noto Sans JP", "Noto Sans KR", "Noto Sans SC", "Noto Sans TC", sans-serif;
text-size-adjust: 100%;
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
}
html[lang|="ja"] {
font-family: "Noto Sans", "Noto Sans JP", "Noto Sans HK", "Noto Sans KR", "Noto Sans SC", "Noto Sans TC", sans-serif;
}
html[lang|="ko"] {
font-family: "Noto Sans", "Noto Sans KR", "Noto Sans HK", "Noto Sans JP", "Noto Sans SC", "Noto Sans TC", sans-serif;
}
html[lang|="zh-CN"] {
font-family: "Noto Sans", "Noto Sans SC", "Noto Sans HK", "Noto Sans JP", "Noto Sans KR", "Noto Sans TC", sans-serif;
}
html[lang|="zh-TW"] {
font-family: "Noto Sans", "Noto Sans TC", "Noto Sans HK", "Noto Sans JP", "Noto Sans KR", "Noto Sans SC", sans-serif;
}
html[lang|="zh-HK"] {
font-family: "Noto Sans", "Noto Sans HK", "Noto Sans JP", "Noto Sans KR", "Noto Sans SC", "Noto Sans TC", sans-serif;
}
h1 {
@include font(400, 1.8em);
}
h2 {
@include font(400, 1.5em);
}
h3 {
@include font(400, 1.17em);
}
.layout-tv {
/* Per WebOS and Tizen guidelines, fonts must be 20px minimum.
This takes the 16px baseline and multiplies it by 1.25 to get 20px. */
font-size: 125%;
}
.layout-mobile {
font-size: 90%;
}

View file

@ -0,0 +1,31 @@
@mixin header-font($size: null) {
font-weight: 400;
font-size: $size;
}
html {
@media all and (min-height: 720px) {
font-size: 20px;
}
/* This is supposed to be 1080p, but had to reduce the min height to account for possible browser chrome */
@media all and (min-height: 1000px) {
font-size: 27px;
}
}
h1 {
@include header-font(1.8em);
.layout-desktop & {
font-size: 2em;
}
}
h2 {
@include header-font(1.8em);
}
h3 {
@include header-font(1.17em);
}

3
src/styles/ios.scss Normal file
View file

@ -0,0 +1,3 @@
html {
font-size: 82% !important;
}

File diff suppressed because it is too large Load diff

14
src/styles/livetv.scss Normal file
View file

@ -0,0 +1,14 @@
.guideVerticalScroller {
padding-bottom: 15em;
}
#guideTab {
@media all and (min-width: 62.5em) {
padding-left: 0.5em;
}
}
// FIXME: background sizing for cards really needs revisited, but these are particularly terrible
#channelsTab .cardImageContainer {
background-size: contain;
}

View file

@ -0,0 +1,96 @@
.editPageSidebar {
display: block;
}
.editPageSidebar-withcontent {
display: none;
}
.libraryTree {
[dir="ltr"] & {
margin-left: 0.25em;
}
[dir="rtl"] & {
margin-right: 0.25em;
}
}
.offlineEditorNode {
color: #c33;
}
.editorNode img {
height: 18px;
margin: 0 0.35em;
vertical-align: middle;
position: relative;
top: -2px;
}
.jstree-anchor {
font-weight: 400 !important;
}
.jstree-wholerow-hovered {
background: #38c !important;
border-radius: 0 !important;
box-shadow: none !important;
}
.jstree-default .jstree-hovered {
background: 0 0 !important;
border-radius: 0 !important;
box-shadow: none !important;
color: #fff !important;
}
.jstree-default .jstree-wholerow-clicked {
background: #00a4dc !important;
}
.metadataSidebarIcon {
margin-right: 0.4em;
}
@media all and (min-width: 50em) {
.editPageSidebar {
position: fixed;
top: 5.2em;
bottom: 0;
width: 30%;
display: block;
[dir="ltr"] & {
left: 0;
border-right: 1px solid #555;
}
[dir="rtl"] & {
right: 0;
border-left: 1px solid #555;
}
}
.editPageInnerContent {
width: 68.5%;
[dir="ltr"] & {
float: right;
}
[dir="rtl"] & {
float: left;
}
}
}
@media all and (min-width: 112.5em) {
.editPageSidebar {
width: 25%;
}
.editPageInnerContent {
width: 73.5%;
}
}

View file

@ -0,0 +1,57 @@
.scrollX {
overflow-x: auto;
overflow-y: hidden;
white-space: nowrap;
}
.smoothScrollX {
scroll-behavior: smooth;
}
.hiddenScrollX,
.layout-tv .scrollX {
-ms-overflow-style: none;
scrollbar-width: none;
}
.hiddenScrollX-forced {
overflow: -moz-scrollbars-none;
}
.hiddenScrollX::-webkit-scrollbar,
.layout-tv .scrollX::-webkit-scrollbar {
height: 0 !important;
display: none;
}
.scrollY {
overflow-y: auto;
overflow-x: hidden;
}
.smoothScrollY {
overflow-y: auto;
overflow-x: hidden;
scroll-behavior: smooth;
}
.hiddenScrollY,
.layout-tv .smoothScrollY {
-ms-overflow-style: none;
scrollbar-width: none;
/* Can't do this because it not only hides the scrollbar, but also prevents scrolling */
/* overflow: -moz-scrollbars-none; */
}
.hiddenScrollY-forced {
overflow: -moz-scrollbars-none;
}
.hiddenScrollY::-webkit-scrollbar,
.layout-tv .smoothScrollY::-webkit-scrollbar,
.layout-tv .scrollY::-webkit-scrollbar {
width: 0 !important;
display: none;
}

152
src/styles/site.scss Normal file
View file

@ -0,0 +1,152 @@
@mixin fullpage {
margin: 0;
padding: 0;
height: 100%;
}
html {
@include fullpage;
line-height: 1.35;
}
body {
@include fullpage;
overflow-x: hidden;
background-color: transparent !important;
-webkit-font-smoothing: antialiased;
}
.clipForScreenReader {
clip: rect(1px, 1px, 1px, 1px);
clip-path: inset(50%);
height: 1px;
width: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute;
}
.material-icons {
/* Fix font ligatures on older WebOS versions */
font-feature-settings: "liga";
}
.backgroundContainer {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
contain: strict;
}
.layout-mobile,
.layout-tv {
-webkit-touch-callout: none;
user-select: none;
}
.mainAnimatedPage {
contain: style size !important;
}
.pageContainer {
overflow-x: visible !important;
}
.bodyWithPopupOpen {
overflow-y: hidden !important;
}
div[data-role="page"] {
outline: 0;
}
.pageTitle {
margin-top: 0;
font-family: inherit;
}
.fieldDescription {
padding-left: 0.15em;
font-weight: 400;
white-space: normal !important;
+ .fieldDescription {
margin-top: 0.3em;
}
}
.content-primary,
.padded-bottom-page,
.page,
.pageWithAbsoluteTabs .pageTabContent {
/* provides room for the music controls */
padding-bottom: 5em !important;
padding-bottom: calc(env(safe-area-inset-bottom) + 5em) !important;
}
.readOnlyContent {
@media all and (min-width: 50em) {
max-width: 54em;
}
}
form {
@media all and (min-width: 50em) {
max-width: 54em;
}
}
.headerHelpButton {
margin-left: 1.25em !important;
padding-bottom: 0.4em !important;
padding-top: 0.4em !important;
}
.mediaInfoContent {
margin-left: auto;
margin-right: auto;
width: 85%;
}
.headroom {
will-change: transform;
transition: transform 200ms linear;
&--pinned {
transform: translateY(0%);
}
&--unpinned {
transform: translateY(-100%);
}
}
.drawerContent {
/* make sure the bottom of the drawer is visible when music is playing */
padding-bottom: 4em;
}
.force-scroll {
overflow-y: scroll;
}
.hide-scroll {
overflow-y: hidden;
}
.w-100 {
width: 100%;
}
.margin-auto-x {
margin-left: auto;
margin-right: auto;
}
.margin-auto-y {
margin-top: auto;
margin-bottom: auto;
}

332
src/styles/videoosd.scss Normal file
View file

@ -0,0 +1,332 @@
.chapterThumbTextContainer,
.videoOsdBottom {
user-select: none;
}
.videoOsdBottom {
bottom: 0;
left: 0;
right: 0;
position: fixed;
background: linear-gradient(0deg, rgba(16, 16, 16, 0.75) 0%, rgba(16, 16, 16, 0) 100%);
padding-left: env(safe-area-inset-left);
padding-right: env(safe-area-inset-right);
padding-top: 7.5em;
padding-bottom: 1.75em;
padding-bottom: max(env(safe-area-inset-bottom), 1.75em);
display: flex;
flex-direction: row;
justify-content: center;
will-change: opacity;
transition: opacity 0.3s ease-out;
color: #fff;
user-select: none;
-webkit-touch-callout: none;
pointer-events: none;
}
.skinHeader-withBackground.osdHeader {
transition: opacity 0.3s ease-out;
position: relative;
z-index: 1;
background: linear-gradient(180deg, rgba(16, 16, 16, 0.75) 0%, rgba(16, 16, 16, 0) 100%);
backdrop-filter: none;
color: #eee;
height: 7.5em;
pointer-events: none;
}
.osdHeader-hidden {
opacity: 0;
}
.osdHeader .headerTop {
pointer-events: all;
max-height: 3.5em;
}
.osdHeader .headerButton:not(.headerBackButton):not(.headerCastButton):not(.headerSyncButton) {
display: none;
}
.chapterThumbContainer {
box-shadow: 0 0 1.9vh #000;
flex-grow: 1;
position: relative;
}
.chapterThumb {
background-position: center center;
background-size: contain;
background-repeat: no-repeat;
border: 0;
height: 20vh;
min-width: 20vh;
}
@media all and (orientation: portrait) {
.chapterThumb {
height: 30vw;
min-width: 30vw;
}
}
@media all and (max-height: 50em) and (orientation: landscape) {
.chapterThumb {
height: 30vh;
min-width: 30vh;
}
}
.chapterThumbTextContainer {
position: absolute;
bottom: 0;
left: 0;
right: 0;
background: rgba(0, 0, 0, 0.7);
padding: 0.25em 0.5em;
user-select: none;
}
.chapterThumbText {
padding: 0.25em 0;
margin: 0;
opacity: 1;
}
.chapterThumbText-dim {
opacity: 0.6;
}
.videoOsdBottom-hidden {
opacity: 0;
}
.osdControls {
pointer-events: all;
flex-grow: 1;
padding: 0 0.8em;
}
.videoOsdBottom .buttons {
padding: 0.25em 0 0;
display: flex;
flex-wrap: wrap;
align-items: center;
[dir="rtl"] & {
flex-direction: row-reverse;
}
}
.osdVolumeSliderContainer {
width: 9em;
flex-grow: 1;
}
.osdMediaInfo,
.volumeButtons {
display: flex;
align-items: center;
}
.volumeButtons {
margin: 0 1em 0 0.29em;
display: flex;
align-items: center;
}
.osdTimeText {
margin-left: 1em;
margin-right: auto;
user-select: none;
}
.osdTitle,
.osdTitleSmall {
margin: 0 1em 0 0;
}
.osdMediaInfo {
display: flex;
align-items: center;
}
.osdSecondaryMediaInfo {
padding-left: 0.6em !important;
}
.osdTextContainer {
display: flex;
align-items: center;
user-select: none;
margin-bottom: 0.7em;
padding-left: 0.5em;
}
.osdMainTextContainer {
align-items: baseline;
}
.osdMediaStatus {
margin-left: auto;
}
@keyframes spin {
100% {
transform: rotate(360deg);
}
}
.osdMediaStatus .animate {
animation: spin 4s linear infinite;
}
@media all and (max-width: 30em) {
.osdMediaInfo,
.osdPoster {
display: none !important;
}
}
@media all and (max-width: 33.75em) {
.videoOsdBottom .paper-icon-button-light {
margin: 0;
}
}
@media all and (max-width: 43em) {
.videoOsdBottom .volumeButtons,
.osdMediaStatus span {
display: none !important;
}
}
@media all and (max-width: 50em) {
.videoOsdBottom .btnFastForward,
.videoOsdBottom .btnRewind {
display: none !important;
}
}
@media all and (max-width: 75em) {
.videoOsdBottom .endsAtText {
display: none !important;
}
}
.syncPlayContainer {
display: flex;
justify-content: center;
align-items: center;
position: absolute;
pointer-events: none;
top: 0;
bottom: 0;
right: 0;
left: 0;
}
.primary-icon {
position: absolute;
font-size: 64px;
align-self: center;
}
.primary-icon.spin {
font-size: 76px !important;
animation: spin 2s linear infinite;
}
.secondary-icon {
position: absolute;
font-size: 24px;
}
.secondary-icon.centered {
font-size: 28px !important;
align-self: center;
}
.secondary-icon.shifted {
right: 0;
bottom: 0;
font-size: 52px;
}
.syncPlayIconCircle {
position: relative;
visibility: hidden;
display: flex;
justify-content: center;
border-radius: 50%;
margin: 60px;
height: 96px;
width: 96px;
color: rgba(0, 164, 220, 0);
background: rgba(0, 164, 220, 0);
box-shadow: 0 0 0 0 rgba(0, 164, 220, 0);
transform: scale(1);
}
.syncPlayIconCircle.oneShotPulse {
animation: pulse 1.5s 1;
}
.syncPlayIconCircle.infinitePulse {
animation: infinite-pulse 1.5s infinite;
}
@keyframes pulse {
0% {
transform: scale(0.95);
color: rgba(0, 164, 220, 0.7);
background: rgba(0, 164, 220, 0.3);
box-shadow: 0 0 0 0 rgba(0, 164, 220, 0.3);
}
70% {
transform: scale(1);
color: rgba(0, 164, 220, 0);
background: rgba(0, 164, 220, 0);
box-shadow: 0 0 0 60px rgba(0, 164, 220, 0);
}
100% {
transform: scale(0.95);
color: rgba(0, 164, 220, 0);
background: rgba(0, 164, 220, 0);
box-shadow: 0 0 0 0 rgba(0, 164, 220, 0);
}
}
@keyframes infinite-pulse {
0% {
transform: scale(0.95);
color: rgba(0, 164, 220, 0.7);
background: rgba(0, 164, 220, 0.3);
box-shadow: 0 0 0 0 rgba(0, 164, 220, 0.3);
}
70% {
transform: scale(1);
color: rgba(0, 164, 220, 0.6);
background: rgba(0, 164, 220, 0);
box-shadow: 0 0 0 60px rgba(0, 164, 220, 0);
}
100% {
transform: scale(0.95);
color: rgba(0, 164, 220, 0.7);
background: rgba(0, 164, 220, 0.3);
box-shadow: 0 0 0 0 rgba(0, 164, 220, 0);
}
}
@keyframes spin {
100% {
transform: rotate(-360deg);
}
}