diff --git a/app/app.css b/app/app.css
index 04c61d4..0e8f3f1 100644
--- a/app/app.css
+++ b/app/app.css
@@ -40,6 +40,9 @@ button {
cursor: pointer;
flex-shrink: 0;
}
+.art img {
+ vertical-align: top;
+}
@font-face {
font-family: 'Lato';
src: url('font/LatoLatin-Regular.woff2') format('woff2');
@@ -101,9 +104,6 @@ nav ul li.active {
#player:not([data-flags~=repeat]) .repeat {
opacity: 0.5;
}
-#player .art img {
- vertical-align: top;
-}
#player .info {
flex-grow: 1;
white-space: nowrap;
@@ -245,6 +245,9 @@ nav ul li.active {
width: 32px;
}
}
+#library li {
+ padding: 0;
+}
#library .tiles {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
@@ -341,6 +344,78 @@ nav ul li.active {
width: 32px;
}
}
+#yt {
+ height: 100%;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+}
+#yt ul {
+ flex-grow: 1;
+ overflow: auto;
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+#yt li {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ padding: 0 4px;
+ white-space: nowrap;
+}
+#yt h2 {
+ flex-grow: 1;
+ font-size: 100%;
+ font-weight: normal;
+ margin: 0;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+#yt h2 .icon {
+ margin-right: 4px;
+ color: var(--primary);
+}
+#yt li:nth-child(odd) {
+ background-color: #555;
+}
+@media (pointer: coarse) {
+ #yt .icon {
+ width: 32px;
+ }
+}
+#yt .go {
+ width: 96px;
+ height: 96px;
+}
+#yt .go:disabled {
+ position: relative;
+}
+#yt .go:disabled::before {
+ content: "";
+ display: block;
+ position: absolute;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ border-top: 3px solid var(--primary);
+ border-radius: 50%;
+ animation: rotate linear 3s infinite;
+}
+#yt p {
+ margin: 16px 8px;
+ white-space: pre-wrap;
+}
+@keyframes rotate {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 100% {
+ transform: rotate(360deg);
+ }
+}
:root {
--primary: dodgerblue;
--fg: #fff;
diff --git a/app/css/app.less b/app/css/app.less
index cdbf6fe..4655ea4 100644
--- a/app/css/app.less
+++ b/app/css/app.less
@@ -40,6 +40,10 @@ button {
flex-shrink: 0;
}
+.art img {
+ vertical-align: top;
+}
+
@import "font.less";
@import "icons.less";
@import "main.less";
@@ -50,4 +54,5 @@ button {
@import "library.less";
@import "fs.less";
@import "playlists.less";
+@import "yt.less";
@import "variables.less";
diff --git a/app/css/library.less b/app/css/library.less
index cf01e49..2ecac4b 100644
--- a/app/css/library.less
+++ b/app/css/library.less
@@ -1,6 +1,10 @@
#library {
.component;
+ li {
+ padding: 0;
+ }
+
.tiles {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
diff --git a/app/css/player.less b/app/css/player.less
index 6efee57..f1e4ee0 100644
--- a/app/css/player.less
+++ b/app/css/player.less
@@ -7,8 +7,6 @@
&[data-state=play] .play { display: none; }
&:not([data-flags~=random]) .random, &:not([data-flags~=repeat]) .repeat { opacity: 0.5; }
- .art img { vertical-align: top; }
-
.info {
flex-grow: 1;
white-space: nowrap;
diff --git a/app/css/yt.less b/app/css/yt.less
new file mode 100644
index 0000000..fe88962
--- /dev/null
+++ b/app/css/yt.less
@@ -0,0 +1,38 @@
+#yt {
+ .component;
+
+ align-items: center;
+ justify-content: center;
+
+ .go {
+ width: 96px;
+ height: 96px;
+
+ &:disabled {
+ position: relative;
+
+ &::before {
+ content: "";
+ display: block;
+ position: absolute;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ border-top: 3px solid var(--primary);
+ border-radius: 50%;
+ animation: rotate linear 3s infinite;
+ }
+ }
+ }
+
+ p {
+ margin: 16px 8px;
+ white-space: pre-wrap;
+ }
+}
+
+@keyframes rotate {
+ 0% { transform: rotate(0deg); }
+ 100% { transform: rotate(360deg); }
+}
diff --git a/app/index.html b/app/index.html
index b47d941..14c91ca 100644
--- a/app/index.html
+++ b/app/index.html
@@ -50,6 +50,7 @@