summaryrefslogtreecommitdiff
path: root/assets
diff options
context:
space:
mode:
authorRaindropsSys <raindrops@equestria.dev>2023-10-24 17:43:37 +0200
committerRaindropsSys <raindrops@equestria.dev>2023-10-24 17:43:37 +0200
commitae187b6d75c8079da0be1dc288613bad8466fe61 (patch)
tree5ea0d34185a2270f29ffaa65e1f5258028d7d5d0 /assets
downloadmist-ae187b6d75c8079da0be1dc288613bad8466fe61.tar.gz
mist-ae187b6d75c8079da0be1dc288613bad8466fe61.tar.bz2
mist-ae187b6d75c8079da0be1dc288613bad8466fe61.zip
Initial commit
Diffstat (limited to 'assets')
-rw-r--r--assets/.DS_Storebin0 -> 10244 bytes
-rw-r--r--assets/dark.css86
-rw-r--r--assets/favorites.svg244
-rw-r--r--assets/fuse.min.js9
-rw-r--r--assets/icons/album.svg1
-rw-r--r--assets/icons/explore.svg1
-rw-r--r--assets/icons/favorite-off.svg1
-rw-r--r--assets/icons/favorite-on.svg1
-rw-r--r--assets/icons/favorites.svg1
-rw-r--r--assets/icons/lossless.svg3
-rw-r--r--assets/icons/lyrics.svg1
-rw-r--r--assets/icons/next.svg1
-rw-r--r--assets/icons/pause.svg1
-rw-r--r--assets/icons/play.svg1
-rw-r--r--assets/icons/playlist.svg1
-rw-r--r--assets/icons/previous.svg1
-rw-r--r--assets/icons/repeat-off.svg1
-rw-r--r--assets/icons/repeat-on.svg1
-rw-r--r--assets/icons/settings.svg1
-rw-r--r--assets/icons/shuffle-off.svg1
-rw-r--r--assets/icons/shuffle-on.svg1
-rw-r--r--assets/icons/song.svg1
-rw-r--r--assets/localforage.min.js7
-rw-r--r--assets/logo-display.pngbin0 -> 18939 bytes
-rw-r--r--assets/logo-display.svg75
-rw-r--r--assets/logo-round.svg75
-rw-r--r--assets/logo-transparent.svg61
-rw-r--r--assets/logo.svg74
-rw-r--r--assets/native.css43
-rw-r--r--assets/nothing.svg254
-rw-r--r--assets/shortcuts.js26
-rw-r--r--assets/styles.css432
32 files changed, 1406 insertions, 0 deletions
diff --git a/assets/.DS_Store b/assets/.DS_Store
new file mode 100644
index 0000000..eb23c80
--- /dev/null
+++ b/assets/.DS_Store
Binary files differ
diff --git a/assets/dark.css b/assets/dark.css
new file mode 100644
index 0000000..e969545
--- /dev/null
+++ b/assets/dark.css
@@ -0,0 +1,86 @@
+@media (prefers-color-scheme: dark) {
+ body.crossplatform, #loading {
+ background-color: black !important;
+ }
+
+ body {
+ color: white !important;
+ }
+
+ .icon {
+ filter: brightness(0%) invert(1) grayscale(1) !important;
+ }
+
+ .navigation-item.active, .navigation-item:active {
+ background-color: rgba(255, 255, 255, .25) !important;
+ }
+
+ .navigation-item:hover {
+ background-color: rgba(255, 255, 255, .1);
+ }
+
+ .album:hover {
+ background-color: rgba(255, 255, 255, .1);
+ }
+
+ #player.bg-white {
+ background-color: black !important;
+ }
+
+ iframe#player {
+ border-bottom-color: rgba(255, 255, 255, .25) !important;
+ }
+
+ .player-btn:hover {
+ background-color: rgba(255, 255, 255, .1);
+ }
+
+ .player-btn:active {
+ background-color: rgba(255, 255, 255, .25);
+ }
+
+ .desktop-player #album-art[src="/assets/nothing.svg"] {
+ filter: invert(1);
+ background-color: rgba(0, 0, 0, .1);
+ }
+
+ .desktop-player #cover, .desktop-player #info {
+ border-color: rgba(255, 255, 255, .25) !important;
+ }
+
+ .text-muted {
+ color: #666 !important;
+ }
+
+ #filter, .list-group-item, .btn, .form-check-input, .link {
+ filter: invert(1) hue-rotate(180deg);
+ }
+
+ .list-group-item img {
+ filter: invert(1) hue-rotate(180deg);
+ }
+
+ .list-group-item .icon {
+ filter: none !important;
+ }
+
+ .desktop-player #seekbar-container {
+ background-color: rgba(255, 255, 255, .1) !important;
+ }
+
+ .desktop-player #seekbar {
+ background-color: rgba(255, 255, 255, .25) !important;
+ }
+
+ #lyrics-synced-fade {
+ background-image: linear-gradient(rgba(0, 0, 0, 0) 25%, rgb(0, 0, 0) 100%) !important;
+ }
+
+ #badge-hires .player-badge-desktop, #badge-cd .player-badge-desktop, #badge-lossy .player-badge-desktop {
+ background-color: black !important;
+ }
+
+ #lyrics-outer #loading {
+ background-color: transparent !important;
+ }
+} \ No newline at end of file
diff --git a/assets/favorites.svg b/assets/favorites.svg
new file mode 100644
index 0000000..0048092
--- /dev/null
+++ b/assets/favorites.svg
@@ -0,0 +1,244 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 27.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#79C2F6;}
+ .st1{display:none;fill:url(#SVGID_1_);}
+ .st2{display:none;}
+ .st3{display:inline;fill:url(#SVGID_00000088850547965638840620000000196750037612309121_);}
+ .st4{display:inline;fill:url(#SVGID_00000011744368722295163180000009094981251186361480_);}
+ .st5{display:inline;fill:url(#SVGID_00000091695838054605714680000005423185838286306220_);}
+ .st6{display:inline;fill:url(#SVGID_00000155825115547249467460000004198170065656501153_);}
+ .st7{display:inline;fill:url(#SVGID_00000093865477538309564190000007211326047710254767_);}
+ .st8{display:inline;fill:url(#SVGID_00000014608573625131379460000015539476123034392982_);}
+ .st9{display:inline;fill:url(#SVGID_00000036951918543996135470000014588779359765284491_);}
+ .st10{display:inline;fill:url(#SVGID_00000106829403714636560790000005975464203039253379_);}
+ .st11{display:inline;fill:url(#SVGID_00000150808722794082084880000014802776632379113879_);}
+ .st12{display:inline;fill:url(#SVGID_00000052820083147990567390000017699412134241208455_);}
+ .st13{display:inline;fill:url(#SVGID_00000052818885589912895540000013007974704937385658_);}
+ .st14{display:inline;fill:url(#SVGID_00000106841926902297524100000012147743838349077653_);}
+ .st15{fill:url(#SVGID_00000070819931120881733350000014550393384682880917_);}
+</style>
+<rect class="st0" width="512" height="512"/>
+<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="157.0311" y1="362.5089" x2="370.1232" y2="149.4169" gradientTransform="matrix(1 0 0 -1 0 512)">
+ <stop offset="0" style="stop-color:#B1FF3B"/>
+ <stop offset="0.0427" style="stop-color:#95FF38"/>
+ <stop offset="0.1148" style="stop-color:#6BFE33"/>
+ <stop offset="0.1886" style="stop-color:#49FE2F"/>
+ <stop offset="0.2632" style="stop-color:#2EFD2C"/>
+ <stop offset="0.3391" style="stop-color:#1BFD2A"/>
+ <stop offset="0.417" style="stop-color:#10FD28"/>
+ <stop offset="0.5" style="stop-color:#0CFD28"/>
+ <stop offset="1" style="stop-color:#3FF3F0"/>
+</linearGradient>
+<path class="st1" d="M129.96,231.29v49.53c0,7.35-5.72,13.24-13.4,13.24c-7.36,0-12.91-5.89-12.91-13.24v-49.53
+ c0-7.36,5.56-13.4,12.91-13.4C124.24,217.89,129.96,223.94,129.96,231.29z M171.64,151.04c-7.36,0-13.08,6.05-13.08,13.4v183.24
+ c0,7.36,5.72,13.24,13.08,13.24c7.52,0,13.24-5.88,13.24-13.24V164.44C184.88,157.08,179.16,151.04,171.64,151.04z M226.56,85.32
+ c-7.36,0-12.91,5.88-12.91,13.24v314.99c0,7.35,5.56,13.24,12.91,13.24c7.52,0,13.4-5.89,13.4-13.24V98.56
+ C239.97,91.21,234.08,85.32,226.56,85.32z M281.65,170.98c-7.52,0-13.08,5.88-13.08,13.24V327.9c0,7.35,5.56,13.08,13.08,13.08
+ s13.24-5.72,13.24-13.08V184.22C294.89,176.86,289.17,170.98,281.65,170.98z M336.74,121.45c-7.68,0-13.24,6.05-13.24,13.24v242.74
+ c0,7.19,5.56,13.08,13.24,13.08c7.35,0,13.08-5.88,13.08-13.08V134.69C349.81,127.5,344.09,121.45,336.74,121.45z M391.66,203.83
+ c-7.52,0-13.08,6.05-13.08,13.24v77.97c0,7.19,5.56,13.08,13.08,13.08c7.36,0,13.24-5.88,13.24-13.08v-77.97
+ C404.9,209.88,399.01,203.83,391.66,203.83z"/>
+<g class="st2">
+
+ <linearGradient id="SVGID_00000057835885851075308160000000531724530030982844_" gradientUnits="userSpaceOnUse" x1="116.805" y1="294.11" x2="116.805" y2="217.94" gradientTransform="matrix(1 0 0 -1 0 512)">
+ <stop offset="0" style="stop-color:#B1FF3B"/>
+ <stop offset="0.0427" style="stop-color:#95FF38"/>
+ <stop offset="0.1148" style="stop-color:#6BFE33"/>
+ <stop offset="0.1886" style="stop-color:#49FE2F"/>
+ <stop offset="0.2632" style="stop-color:#2EFD2C"/>
+ <stop offset="0.3391" style="stop-color:#1BFD2A"/>
+ <stop offset="0.417" style="stop-color:#10FD28"/>
+ <stop offset="0.5" style="stop-color:#0CFD28"/>
+ <stop offset="1" style="stop-color:#3FF3F0"/>
+ </linearGradient>
+ <path style="display:inline;fill:url(#SVGID_00000057835885851075308160000000531724530030982844_);" d="M129.96,231.29v49.53
+ c0,7.35-5.72,13.24-13.4,13.24c-7.36,0-12.91-5.89-12.91-13.24v-49.53c0-7.36,5.56-13.4,12.91-13.4
+ C124.24,217.89,129.96,223.94,129.96,231.29z"/>
+
+ <linearGradient id="SVGID_00000162314686774547317460000000838507890341360788_" gradientUnits="userSpaceOnUse" x1="171.72" y1="360.96" x2="171.72" y2="151.08" gradientTransform="matrix(1 0 0 -1 0 512)">
+ <stop offset="0" style="stop-color:#B1FF3B"/>
+ <stop offset="0.0427" style="stop-color:#95FF38"/>
+ <stop offset="0.1148" style="stop-color:#6BFE33"/>
+ <stop offset="0.1886" style="stop-color:#49FE2F"/>
+ <stop offset="0.2632" style="stop-color:#2EFD2C"/>
+ <stop offset="0.3391" style="stop-color:#1BFD2A"/>
+ <stop offset="0.417" style="stop-color:#10FD28"/>
+ <stop offset="0.5" style="stop-color:#0CFD28"/>
+ <stop offset="1" style="stop-color:#3FF3F0"/>
+ </linearGradient>
+ <path style="display:inline;fill:url(#SVGID_00000162314686774547317460000000838507890341360788_);" d="M171.64,151.04
+ c-7.36,0-13.08,6.05-13.08,13.4v183.24c0,7.36,5.72,13.24,13.08,13.24c7.52,0,13.24-5.88,13.24-13.24V164.44
+ C184.88,157.08,179.16,151.04,171.64,151.04z"/>
+
+ <linearGradient id="SVGID_00000180356487356431520650000002954783130161923739_" gradientUnits="userSpaceOnUse" x1="226.805" y1="426.68" x2="226.805" y2="85.21" gradientTransform="matrix(1 0 0 -1 0 512)">
+ <stop offset="0" style="stop-color:#B1FF3B"/>
+ <stop offset="0.0427" style="stop-color:#95FF38"/>
+ <stop offset="0.1148" style="stop-color:#6BFE33"/>
+ <stop offset="0.1886" style="stop-color:#49FE2F"/>
+ <stop offset="0.2632" style="stop-color:#2EFD2C"/>
+ <stop offset="0.3391" style="stop-color:#1BFD2A"/>
+ <stop offset="0.417" style="stop-color:#10FD28"/>
+ <stop offset="0.5" style="stop-color:#0CFD28"/>
+ <stop offset="1" style="stop-color:#3FF3F0"/>
+ </linearGradient>
+ <path style="display:inline;fill:url(#SVGID_00000180356487356431520650000002954783130161923739_);" d="M226.56,85.32
+ c-7.36,0-12.91,5.88-12.91,13.24v314.99c0,7.35,5.56,13.24,12.91,13.24c7.52,0,13.4-5.89,13.4-13.24V98.56
+ C239.97,91.21,234.08,85.32,226.56,85.32z"/>
+
+ <linearGradient id="SVGID_00000167391634806161116230000015276722001138925219_" gradientUnits="userSpaceOnUse" x1="281.73" y1="341.02" x2="281.73" y2="171.02" gradientTransform="matrix(1 0 0 -1 0 512)">
+ <stop offset="0" style="stop-color:#B1FF3B"/>
+ <stop offset="0.0427" style="stop-color:#95FF38"/>
+ <stop offset="0.1148" style="stop-color:#6BFE33"/>
+ <stop offset="0.1886" style="stop-color:#49FE2F"/>
+ <stop offset="0.2632" style="stop-color:#2EFD2C"/>
+ <stop offset="0.3391" style="stop-color:#1BFD2A"/>
+ <stop offset="0.417" style="stop-color:#10FD28"/>
+ <stop offset="0.5" style="stop-color:#0CFD28"/>
+ <stop offset="1" style="stop-color:#3FF3F0"/>
+ </linearGradient>
+ <path style="display:inline;fill:url(#SVGID_00000167391634806161116230000015276722001138925219_);" d="M281.65,170.98
+ c-7.52,0-13.08,5.88-13.08,13.24V327.9c0,7.35,5.56,13.08,13.08,13.08s13.24-5.72,13.24-13.08V184.22
+ C294.89,176.86,289.17,170.98,281.65,170.98z"/>
+
+ <linearGradient id="SVGID_00000023992794525803135130000015281890792205657761_" gradientUnits="userSpaceOnUse" x1="336.66" y1="390.55" x2="336.66" y2="121.49" gradientTransform="matrix(1 0 0 -1 0 512)">
+ <stop offset="0" style="stop-color:#B1FF3B"/>
+ <stop offset="0.0427" style="stop-color:#95FF38"/>
+ <stop offset="0.1148" style="stop-color:#6BFE33"/>
+ <stop offset="0.1886" style="stop-color:#49FE2F"/>
+ <stop offset="0.2632" style="stop-color:#2EFD2C"/>
+ <stop offset="0.3391" style="stop-color:#1BFD2A"/>
+ <stop offset="0.417" style="stop-color:#10FD28"/>
+ <stop offset="0.5" style="stop-color:#0CFD28"/>
+ <stop offset="1" style="stop-color:#3FF3F0"/>
+ </linearGradient>
+ <path style="display:inline;fill:url(#SVGID_00000023992794525803135130000015281890792205657761_);" d="M336.74,121.45
+ c-7.68,0-13.24,6.05-13.24,13.24v242.74c0,7.19,5.56,13.08,13.24,13.08c7.35,0,13.08-5.88,13.08-13.08V134.69
+ C349.81,127.5,344.09,121.45,336.74,121.45z"/>
+
+ <linearGradient id="SVGID_00000040561251921766694460000013211528998237226173_" gradientUnits="userSpaceOnUse" x1="391.74" y1="308.17" x2="391.74" y2="203.88" gradientTransform="matrix(1 0 0 -1 0 512)">
+ <stop offset="0" style="stop-color:#B1FF3B"/>
+ <stop offset="0.03" style="stop-color:#95FF38"/>
+ <stop offset="0.0806" style="stop-color:#6BFE33"/>
+ <stop offset="0.1324" style="stop-color:#49FE2F"/>
+ <stop offset="0.1848" style="stop-color:#2EFD2C"/>
+ <stop offset="0.2381" style="stop-color:#1BFD2A"/>
+ <stop offset="0.2928" style="stop-color:#10FD28"/>
+ <stop offset="0.3511" style="stop-color:#0CFD28"/>
+ <stop offset="1" style="stop-color:#3FF3F0"/>
+ </linearGradient>
+ <path style="display:inline;fill:url(#SVGID_00000040561251921766694460000013211528998237226173_);" d="M391.66,203.83
+ c-7.52,0-13.08,6.05-13.08,13.24v77.97c0,7.19,5.56,13.08,13.08,13.08c7.36,0,13.24-5.88,13.24-13.08v-77.97
+ C404.9,209.88,399.01,203.83,391.66,203.83z"/>
+</g>
+<g class="st2">
+
+ <linearGradient id="SVGID_00000145760863786238389210000015674672169469452436_" gradientUnits="userSpaceOnUse" x1="116.805" y1="217.94" x2="116.805" y2="294.11" gradientTransform="matrix(1 0 0 -1 0 512)">
+ <stop offset="0" style="stop-color:#B1FF3B"/>
+ <stop offset="0.0427" style="stop-color:#95FF38"/>
+ <stop offset="0.1148" style="stop-color:#6BFE33"/>
+ <stop offset="0.1886" style="stop-color:#49FE2F"/>
+ <stop offset="0.2632" style="stop-color:#2EFD2C"/>
+ <stop offset="0.3391" style="stop-color:#1BFD2A"/>
+ <stop offset="0.417" style="stop-color:#10FD28"/>
+ <stop offset="0.5" style="stop-color:#0CFD28"/>
+ <stop offset="1" style="stop-color:#3FF3F0"/>
+ </linearGradient>
+ <path style="display:inline;fill:url(#SVGID_00000145760863786238389210000015674672169469452436_);" d="M129.96,231.29v49.53
+ c0,7.35-5.72,13.24-13.4,13.24c-7.36,0-12.91-5.89-12.91-13.24v-49.53c0-7.36,5.56-13.4,12.91-13.4
+ C124.24,217.89,129.96,223.94,129.96,231.29z"/>
+
+ <linearGradient id="SVGID_00000014618761856423392970000009025595486514880186_" gradientUnits="userSpaceOnUse" x1="171.72" y1="360.96" x2="171.72" y2="151.08" gradientTransform="matrix(1 0 0 -1 0 512)">
+ <stop offset="0" style="stop-color:#B1FF3B"/>
+ <stop offset="0.0427" style="stop-color:#95FF38"/>
+ <stop offset="0.1148" style="stop-color:#6BFE33"/>
+ <stop offset="0.1886" style="stop-color:#49FE2F"/>
+ <stop offset="0.2632" style="stop-color:#2EFD2C"/>
+ <stop offset="0.3391" style="stop-color:#1BFD2A"/>
+ <stop offset="0.417" style="stop-color:#10FD28"/>
+ <stop offset="0.5" style="stop-color:#0CFD28"/>
+ <stop offset="1" style="stop-color:#3FF3F0"/>
+ </linearGradient>
+ <path style="display:inline;fill:url(#SVGID_00000014618761856423392970000009025595486514880186_);" d="M171.64,151.04
+ c-7.36,0-13.08,6.05-13.08,13.4v183.24c0,7.36,5.72,13.24,13.08,13.24c7.52,0,13.24-5.88,13.24-13.24V164.44
+ C184.88,157.08,179.16,151.04,171.64,151.04z"/>
+
+ <linearGradient id="SVGID_00000018915473957743721540000018172113986664807307_" gradientUnits="userSpaceOnUse" x1="226.805" y1="85.21" x2="226.805" y2="426.68" gradientTransform="matrix(1 0 0 -1 0 512)">
+ <stop offset="0" style="stop-color:#B1FF3B"/>
+ <stop offset="0.0427" style="stop-color:#95FF38"/>
+ <stop offset="0.1148" style="stop-color:#6BFE33"/>
+ <stop offset="0.1886" style="stop-color:#49FE2F"/>
+ <stop offset="0.2632" style="stop-color:#2EFD2C"/>
+ <stop offset="0.3391" style="stop-color:#1BFD2A"/>
+ <stop offset="0.417" style="stop-color:#10FD28"/>
+ <stop offset="0.5" style="stop-color:#0CFD28"/>
+ <stop offset="1" style="stop-color:#3FF3F0"/>
+ </linearGradient>
+ <path style="display:inline;fill:url(#SVGID_00000018915473957743721540000018172113986664807307_);" d="M226.56,85.32
+ c-7.36,0-12.91,5.88-12.91,13.24v314.99c0,7.35,5.56,13.24,12.91,13.24c7.52,0,13.4-5.89,13.4-13.24V98.56
+ C239.97,91.21,234.08,85.32,226.56,85.32z"/>
+
+ <linearGradient id="SVGID_00000018918083883777811630000004611583559912245433_" gradientUnits="userSpaceOnUse" x1="281.73" y1="341.02" x2="281.73" y2="171.02" gradientTransform="matrix(1 0 0 -1 0 512)">
+ <stop offset="0" style="stop-color:#B1FF3B"/>
+ <stop offset="0.0427" style="stop-color:#95FF38"/>
+ <stop offset="0.1148" style="stop-color:#6BFE33"/>
+ <stop offset="0.1886" style="stop-color:#49FE2F"/>
+ <stop offset="0.2632" style="stop-color:#2EFD2C"/>
+ <stop offset="0.3391" style="stop-color:#1BFD2A"/>
+ <stop offset="0.417" style="stop-color:#10FD28"/>
+ <stop offset="0.5" style="stop-color:#0CFD28"/>
+ <stop offset="1" style="stop-color:#3FF3F0"/>
+ </linearGradient>
+ <path style="display:inline;fill:url(#SVGID_00000018918083883777811630000004611583559912245433_);" d="M281.65,170.98
+ c-7.52,0-13.08,5.88-13.08,13.24V327.9c0,7.35,5.56,13.08,13.08,13.08s13.24-5.72,13.24-13.08V184.22
+ C294.89,176.86,289.17,170.98,281.65,170.98z"/>
+
+ <linearGradient id="SVGID_00000070807659589505100080000013367495101672396948_" gradientUnits="userSpaceOnUse" x1="336.66" y1="121.49" x2="336.66" y2="390.55" gradientTransform="matrix(1 0 0 -1 0 512)">
+ <stop offset="0" style="stop-color:#B1FF3B"/>
+ <stop offset="0.0427" style="stop-color:#95FF38"/>
+ <stop offset="0.1148" style="stop-color:#6BFE33"/>
+ <stop offset="0.1886" style="stop-color:#49FE2F"/>
+ <stop offset="0.2632" style="stop-color:#2EFD2C"/>
+ <stop offset="0.3391" style="stop-color:#1BFD2A"/>
+ <stop offset="0.417" style="stop-color:#10FD28"/>
+ <stop offset="0.5" style="stop-color:#0CFD28"/>
+ <stop offset="1" style="stop-color:#3FF3F0"/>
+ </linearGradient>
+ <path style="display:inline;fill:url(#SVGID_00000070807659589505100080000013367495101672396948_);" d="M336.74,121.45
+ c-7.68,0-13.24,6.05-13.24,13.24v242.74c0,7.19,5.56,13.08,13.24,13.08c7.35,0,13.08-5.88,13.08-13.08V134.69
+ C349.81,127.5,344.09,121.45,336.74,121.45z"/>
+
+ <linearGradient id="SVGID_00000136393012750434764500000015514595737648377264_" gradientUnits="userSpaceOnUse" x1="391.74" y1="308.17" x2="391.74" y2="203.88" gradientTransform="matrix(1 0 0 -1 0 512)">
+ <stop offset="0" style="stop-color:#B1FF3B"/>
+ <stop offset="0.03" style="stop-color:#95FF38"/>
+ <stop offset="0.0806" style="stop-color:#6BFE33"/>
+ <stop offset="0.1324" style="stop-color:#49FE2F"/>
+ <stop offset="0.1848" style="stop-color:#2EFD2C"/>
+ <stop offset="0.2381" style="stop-color:#1BFD2A"/>
+ <stop offset="0.2928" style="stop-color:#10FD28"/>
+ <stop offset="0.3511" style="stop-color:#0CFD28"/>
+ <stop offset="1" style="stop-color:#3FF3F0"/>
+ </linearGradient>
+ <path style="display:inline;fill:url(#SVGID_00000136393012750434764500000015514595737648377264_);" d="M391.66,203.83
+ c-7.52,0-13.08,6.05-13.08,13.24v77.97c0,7.19,5.56,13.08,13.08,13.08c7.36,0,13.24-5.88,13.24-13.08v-77.97
+ C404.9,209.88,399.01,203.83,391.66,203.83z"/>
+</g>
+<linearGradient id="SVGID_00000063631263482730164500000012955787971229978510_" gradientUnits="userSpaceOnUse" x1="158.2286" y1="406.1799" x2="353.8929" y2="210.5155" gradientTransform="matrix(1 0 0 -1 0 512)">
+ <stop offset="0" style="stop-color:#49008D"/>
+ <stop offset="0.5" style="stop-color:#D200AB"/>
+ <stop offset="1" style="stop-color:#FE6972"/>
+</linearGradient>
+<path style="fill:url(#SVGID_00000063631263482730164500000012955787971229978510_);" d="M256,395.66l-15.51-14.7
+ c-28.85-26.94-52.39-49.6-70.62-67.97s-32.45-34.22-42.66-47.56c-10.21-13.33-17.14-25.38-20.82-36.13
+ c-3.67-10.75-5.51-21.7-5.51-32.86c0-22.32,7.82-41.23,23.47-56.74s34.77-23.27,57.35-23.27c13.33,0,26.4,3.54,39.19,10.61
+ c12.79,7.08,24.49,17.42,35.11,31.02c10.61-13.61,22.32-23.95,35.11-31.02c12.79-7.08,25.85-10.61,39.19-10.61
+ c22.59,0,41.7,7.76,57.35,23.27s23.47,34.43,23.47,56.74c0,11.16-1.84,22.11-5.51,32.86s-10.61,22.79-20.82,36.13
+ c-10.21,13.33-24.36,29.19-42.45,47.56s-41.7,41.02-70.82,67.97L256,395.66z M256,365.46c26.67-24.49,48.58-45.31,65.72-62.46
+ c17.14-17.14,30.75-32.04,40.82-44.7c10.07-12.65,17.01-23.74,20.82-33.27c3.81-9.52,5.71-19.05,5.71-28.57
+ c0-16.6-5.51-30.41-16.53-41.43s-25.1-16.53-42.25-16.53c-12.52,0-24.42,3.81-35.72,11.43c-11.29,7.62-20.61,18.23-27.96,31.84
+ h-21.23c-7.62-13.88-17.01-24.56-28.17-32.04c-11.16-7.48-23-11.23-35.51-11.23c-16.87,0-30.89,5.51-42.04,16.53
+ c-11.16,11.02-16.74,24.83-16.74,41.43c0,9.52,1.9,19.05,5.71,28.57s10.75,20.61,20.82,33.27c10.07,12.65,23.68,27.49,40.82,44.49
+ C207.42,319.81,229.33,340.69,256,365.46z"/>
+</svg>
diff --git a/assets/fuse.min.js b/assets/fuse.min.js
new file mode 100644
index 0000000..adc2835
--- /dev/null
+++ b/assets/fuse.min.js
@@ -0,0 +1,9 @@
+/**
+ * Fuse.js v6.6.2 - Lightweight fuzzy-search (http://fusejs.io)
+ *
+ * Copyright (c) 2022 Kiro Risk (http://kiro.me)
+ * All Rights Reserved. Apache Software License 2.0
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ */
+var e,t;e=this,t=function(){"use strict";function e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function t(t){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{};n%2?e(Object(r),!0).forEach((function(e){c(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):e(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function o(e,t,n){return t&&i(e.prototype,t),n&&i(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function c(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");Object.defineProperty(e,"prototype",{value:Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),writable:!1}),t&&u(e,t)}function s(e){return s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},s(e)}function u(e,t){return u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},u(e,t)}function h(e,t){if(t&&("object"==typeof t||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function l(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=s(e);if(t){var i=s(this).constructor;n=Reflect.construct(r,arguments,i)}else n=r.apply(this,arguments);return h(this,n)}}function f(e){return function(e){if(Array.isArray(e))return d(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return d(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function v(e){return Array.isArray?Array.isArray(e):"[object Array]"===b(e)}function g(e){return"string"==typeof e}function y(e){return"number"==typeof e}function p(e){return!0===e||!1===e||function(e){return m(e)&&null!==e}(e)&&"[object Boolean]"==b(e)}function m(e){return"object"===n(e)}function k(e){return null!=e}function M(e){return!e.trim().length}function b(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":Object.prototype.toString.call(e)}var x=function(e){return"Invalid value for key ".concat(e)},w=function(e){return"Pattern length exceeds max of ".concat(e,".")},L=Object.prototype.hasOwnProperty,S=function(){function e(t){var n=this;r(this,e),this._keys=[],this._keyMap={};var i=0;t.forEach((function(e){var t=_(e);i+=t.weight,n._keys.push(t),n._keyMap[t.id]=t,i+=t.weight})),this._keys.forEach((function(e){e.weight/=i}))}return o(e,[{key:"get",value:function(e){return this._keyMap[e]}},{key:"keys",value:function(){return this._keys}},{key:"toJSON",value:function(){return JSON.stringify(this._keys)}}]),e}();function _(e){var t=null,n=null,r=null,i=1,o=null;if(g(e)||v(e))r=e,t=O(e),n=j(e);else{if(!L.call(e,"name"))throw new Error(function(e){return"Missing ".concat(e," property in key")}("name"));var c=e.name;if(r=c,L.call(e,"weight")&&(i=e.weight)<=0)throw new Error(function(e){return"Property 'weight' in key '".concat(e,"' must be a positive integer")}(c));t=O(c),n=j(c),o=e.getFn}return{path:t,id:n,weight:i,src:r,getFn:o}}function O(e){return v(e)?e:e.split(".")}function j(e){return v(e)?e.join("."):e}var A={useExtendedSearch:!1,getFn:function(e,t){var n=[],r=!1;return function e(t,i,o){if(k(t))if(i[o]){var c=t[i[o]];if(!k(c))return;if(o===i.length-1&&(g(c)||y(c)||p(c)))n.push(function(e){return null==e?"":function(e){if("string"==typeof e)return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}(e)}(c));else if(v(c)){r=!0;for(var a=0,s=c.length;a<s;a+=1)e(c[a],i,o+1)}else i.length&&e(c,i,o+1)}else n.push(t)}(e,g(t)?t.split("."):t,0),r?n:n[0]},ignoreLocation:!1,ignoreFieldNorm:!1,fieldNormWeight:1},I=t(t(t(t({},{isCaseSensitive:!1,includeScore:!1,keys:[],shouldSort:!0,sortFn:function(e,t){return e.score===t.score?e.idx<t.idx?-1:1:e.score<t.score?-1:1}}),{includeMatches:!1,findAllMatches:!1,minMatchCharLength:1}),{location:0,threshold:.6,distance:100}),A),C=/[^ ]+/g;function E(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:3,n=new Map,r=Math.pow(10,t);return{get:function(t){var i=t.match(C).length;if(n.has(i))return n.get(i);var o=1/Math.pow(i,.5*e),c=parseFloat(Math.round(o*r)/r);return n.set(i,c),c},clear:function(){n.clear()}}}var $=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.getFn,i=void 0===n?I.getFn:n,o=t.fieldNormWeight,c=void 0===o?I.fieldNormWeight:o;r(this,e),this.norm=E(c,3),this.getFn=i,this.isCreated=!1,this.setIndexRecords()}return o(e,[{key:"setSources",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.docs=e}},{key:"setIndexRecords",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.records=e}},{key:"setKeys",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.keys=t,this._keysMap={},t.forEach((function(t,n){e._keysMap[t.id]=n}))}},{key:"create",value:function(){var e=this;!this.isCreated&&this.docs.length&&(this.isCreated=!0,g(this.docs[0])?this.docs.forEach((function(t,n){e._addString(t,n)})):this.docs.forEach((function(t,n){e._addObject(t,n)})),this.norm.clear())}},{key:"add",value:function(e){var t=this.size();g(e)?this._addString(e,t):this._addObject(e,t)}},{key:"removeAt",value:function(e){this.records.splice(e,1);for(var t=e,n=this.size();t<n;t+=1)this.records[t].i-=1}},{key:"getValueForItemAtKeyId",value:function(e,t){return e[this._keysMap[t]]}},{key:"size",value:function(){return this.records.length}},{key:"_addString",value:function(e,t){if(k(e)&&!M(e)){var n={v:e,i:t,n:this.norm.get(e)};this.records.push(n)}}},{key:"_addObject",value:function(e,t){var n=this,r={i:t,$:{}};this.keys.forEach((function(t,i){var o=t.getFn?t.getFn(e):n.getFn(e,t.path);if(k(o))if(v(o))!function(){for(var e=[],t=[{nestedArrIndex:-1,value:o}];t.length;){var c=t.pop(),a=c.nestedArrIndex,s=c.value;if(k(s))if(g(s)&&!M(s)){var u={v:s,i:a,n:n.norm.get(s)};e.push(u)}else v(s)&&s.forEach((function(e,n){t.push({nestedArrIndex:n,value:e})}))}r.$[i]=e}();else if(g(o)&&!M(o)){var c={v:o,n:n.norm.get(o)};r.$[i]=c}})),this.records.push(r)}},{key:"toJSON",value:function(){return{keys:this.keys,records:this.records}}}]),e}();function F(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.getFn,i=void 0===r?I.getFn:r,o=n.fieldNormWeight,c=void 0===o?I.fieldNormWeight:o,a=new $({getFn:i,fieldNormWeight:c});return a.setKeys(e.map(_)),a.setSources(t),a.create(),a}function R(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.errors,r=void 0===n?0:n,i=t.currentLocation,o=void 0===i?0:i,c=t.expectedLocation,a=void 0===c?0:c,s=t.distance,u=void 0===s?I.distance:s,h=t.ignoreLocation,l=void 0===h?I.ignoreLocation:h,f=r/e.length;if(l)return f;var d=Math.abs(a-o);return u?f+d/u:d?1:f}function N(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:I.minMatchCharLength,n=[],r=-1,i=-1,o=0,c=e.length;o<c;o+=1){var a=e[o];a&&-1===r?r=o:a||-1===r||((i=o-1)-r+1>=t&&n.push([r,i]),r=-1)}return e[o-1]&&o-r>=t&&n.push([r,o-1]),n}var P=32;function W(e){for(var t={},n=0,r=e.length;n<r;n+=1){var i=e.charAt(n);t[i]=(t[i]||0)|1<<r-n-1}return t}var T=function(){function e(t){var n=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=i.location,c=void 0===o?I.location:o,a=i.threshold,s=void 0===a?I.threshold:a,u=i.distance,h=void 0===u?I.distance:u,l=i.includeMatches,f=void 0===l?I.includeMatches:l,d=i.findAllMatches,v=void 0===d?I.findAllMatches:d,g=i.minMatchCharLength,y=void 0===g?I.minMatchCharLength:g,p=i.isCaseSensitive,m=void 0===p?I.isCaseSensitive:p,k=i.ignoreLocation,M=void 0===k?I.ignoreLocation:k;if(r(this,e),this.options={location:c,threshold:s,distance:h,includeMatches:f,findAllMatches:v,minMatchCharLength:y,isCaseSensitive:m,ignoreLocation:M},this.pattern=m?t:t.toLowerCase(),this.chunks=[],this.pattern.length){var b=function(e,t){n.chunks.push({pattern:e,alphabet:W(e),startIndex:t})},x=this.pattern.length;if(x>P){for(var w=0,L=x%P,S=x-L;w<S;)b(this.pattern.substr(w,P),w),w+=P;if(L){var _=x-P;b(this.pattern.substr(_),_)}}else b(this.pattern,0)}}return o(e,[{key:"searchIn",value:function(e){var t=this.options,n=t.isCaseSensitive,r=t.includeMatches;if(n||(e=e.toLowerCase()),this.pattern===e){var i={isMatch:!0,score:0};return r&&(i.indices=[[0,e.length-1]]),i}var o=this.options,c=o.location,a=o.distance,s=o.threshold,u=o.findAllMatches,h=o.minMatchCharLength,l=o.ignoreLocation,d=[],v=0,g=!1;this.chunks.forEach((function(t){var n=t.pattern,i=t.alphabet,o=t.startIndex,y=function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=r.location,o=void 0===i?I.location:i,c=r.distance,a=void 0===c?I.distance:c,s=r.threshold,u=void 0===s?I.threshold:s,h=r.findAllMatches,l=void 0===h?I.findAllMatches:h,f=r.minMatchCharLength,d=void 0===f?I.minMatchCharLength:f,v=r.includeMatches,g=void 0===v?I.includeMatches:v,y=r.ignoreLocation,p=void 0===y?I.ignoreLocation:y;if(t.length>P)throw new Error(w(P));for(var m,k=t.length,M=e.length,b=Math.max(0,Math.min(o,M)),x=u,L=b,S=d>1||g,_=S?Array(M):[];(m=e.indexOf(t,L))>-1;){var O=R(t,{currentLocation:m,expectedLocation:b,distance:a,ignoreLocation:p});if(x=Math.min(O,x),L=m+k,S)for(var j=0;j<k;)_[m+j]=1,j+=1}L=-1;for(var A=[],C=1,E=k+M,$=1<<k-1,F=0;F<k;F+=1){for(var W=0,T=E;W<T;)R(t,{errors:F,currentLocation:b+T,expectedLocation:b,distance:a,ignoreLocation:p})<=x?W=T:E=T,T=Math.floor((E-W)/2+W);E=T;var z=Math.max(1,b-T+1),D=l?M:Math.min(b+T,M)+k,K=Array(D+2);K[D+1]=(1<<F)-1;for(var q=D;q>=z;q-=1){var B=q-1,J=n[e.charAt(B)];if(S&&(_[B]=+!!J),K[q]=(K[q+1]<<1|1)&J,F&&(K[q]|=(A[q+1]|A[q])<<1|1|A[q+1]),K[q]&$&&(C=R(t,{errors:F,currentLocation:B,expectedLocation:b,distance:a,ignoreLocation:p}))<=x){if(x=C,(L=B)<=b)break;z=Math.max(1,2*b-L)}}if(R(t,{errors:F+1,currentLocation:b,expectedLocation:b,distance:a,ignoreLocation:p})>x)break;A=K}var U={isMatch:L>=0,score:Math.max(.001,C)};if(S){var V=N(_,d);V.length?g&&(U.indices=V):U.isMatch=!1}return U}(e,n,i,{location:c+o,distance:a,threshold:s,findAllMatches:u,minMatchCharLength:h,includeMatches:r,ignoreLocation:l}),p=y.isMatch,m=y.score,k=y.indices;p&&(g=!0),v+=m,p&&k&&(d=[].concat(f(d),f(k)))}));var y={isMatch:g,score:g?v/this.chunks.length:1};return g&&r&&(y.indices=d),y}}]),e}(),z=function(){function e(t){r(this,e),this.pattern=t}return o(e,[{key:"search",value:function(){}}],[{key:"isMultiMatch",value:function(e){return D(e,this.multiRegex)}},{key:"isSingleMatch",value:function(e){return D(e,this.singleRegex)}}]),e}();function D(e,t){var n=e.match(t);return n?n[1]:null}var K=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=e===this.pattern;return{isMatch:t,score:t?0:1,indices:[0,this.pattern.length-1]}}}],[{key:"type",get:function(){return"exact"}},{key:"multiRegex",get:function(){return/^="(.*)"$/}},{key:"singleRegex",get:function(){return/^=(.*)$/}}]),n}(z),q=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=-1===e.indexOf(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,e.length-1]}}}],[{key:"type",get:function(){return"inverse-exact"}},{key:"multiRegex",get:function(){return/^!"(.*)"$/}},{key:"singleRegex",get:function(){return/^!(.*)$/}}]),n}(z),B=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=e.startsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,this.pattern.length-1]}}}],[{key:"type",get:function(){return"prefix-exact"}},{key:"multiRegex",get:function(){return/^\^"(.*)"$/}},{key:"singleRegex",get:function(){return/^\^(.*)$/}}]),n}(z),J=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=!e.startsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,e.length-1]}}}],[{key:"type",get:function(){return"inverse-prefix-exact"}},{key:"multiRegex",get:function(){return/^!\^"(.*)"$/}},{key:"singleRegex",get:function(){return/^!\^(.*)$/}}]),n}(z),U=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=e.endsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[e.length-this.pattern.length,e.length-1]}}}],[{key:"type",get:function(){return"suffix-exact"}},{key:"multiRegex",get:function(){return/^"(.*)"\$$/}},{key:"singleRegex",get:function(){return/^(.*)\$$/}}]),n}(z),V=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=!e.endsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,e.length-1]}}}],[{key:"type",get:function(){return"inverse-suffix-exact"}},{key:"multiRegex",get:function(){return/^!"(.*)"\$$/}},{key:"singleRegex",get:function(){return/^!(.*)\$$/}}]),n}(z),G=function(e){a(n,e);var t=l(n);function n(e){var i,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},c=o.location,a=void 0===c?I.location:c,s=o.threshold,u=void 0===s?I.threshold:s,h=o.distance,l=void 0===h?I.distance:h,f=o.includeMatches,d=void 0===f?I.includeMatches:f,v=o.findAllMatches,g=void 0===v?I.findAllMatches:v,y=o.minMatchCharLength,p=void 0===y?I.minMatchCharLength:y,m=o.isCaseSensitive,k=void 0===m?I.isCaseSensitive:m,M=o.ignoreLocation,b=void 0===M?I.ignoreLocation:M;return r(this,n),(i=t.call(this,e))._bitapSearch=new T(e,{location:a,threshold:u,distance:l,includeMatches:d,findAllMatches:g,minMatchCharLength:p,isCaseSensitive:k,ignoreLocation:b}),i}return o(n,[{key:"search",value:function(e){return this._bitapSearch.searchIn(e)}}],[{key:"type",get:function(){return"fuzzy"}},{key:"multiRegex",get:function(){return/^"(.*)"$/}},{key:"singleRegex",get:function(){return/^(.*)$/}}]),n}(z),H=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){for(var t,n=0,r=[],i=this.pattern.length;(t=e.indexOf(this.pattern,n))>-1;)n=t+i,r.push([t,n-1]);var o=!!r.length;return{isMatch:o,score:o?0:1,indices:r}}}],[{key:"type",get:function(){return"include"}},{key:"multiRegex",get:function(){return/^'"(.*)"$/}},{key:"singleRegex",get:function(){return/^'(.*)$/}}]),n}(z),Q=[K,H,B,J,V,U,q,G],X=Q.length,Y=/ +(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/;function Z(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.split("|").map((function(e){for(var n=e.trim().split(Y).filter((function(e){return e&&!!e.trim()})),r=[],i=0,o=n.length;i<o;i+=1){for(var c=n[i],a=!1,s=-1;!a&&++s<X;){var u=Q[s],h=u.isMultiMatch(c);h&&(r.push(new u(h,t)),a=!0)}if(!a)for(s=-1;++s<X;){var l=Q[s],f=l.isSingleMatch(c);if(f){r.push(new l(f,t));break}}}return r}))}var ee=new Set([G.type,H.type]),te=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=n.isCaseSensitive,o=void 0===i?I.isCaseSensitive:i,c=n.includeMatches,a=void 0===c?I.includeMatches:c,s=n.minMatchCharLength,u=void 0===s?I.minMatchCharLength:s,h=n.ignoreLocation,l=void 0===h?I.ignoreLocation:h,f=n.findAllMatches,d=void 0===f?I.findAllMatches:f,v=n.location,g=void 0===v?I.location:v,y=n.threshold,p=void 0===y?I.threshold:y,m=n.distance,k=void 0===m?I.distance:m;r(this,e),this.query=null,this.options={isCaseSensitive:o,includeMatches:a,minMatchCharLength:u,findAllMatches:d,ignoreLocation:l,location:g,threshold:p,distance:k},this.pattern=o?t:t.toLowerCase(),this.query=Z(this.pattern,this.options)}return o(e,[{key:"searchIn",value:function(e){var t=this.query;if(!t)return{isMatch:!1,score:1};var n=this.options,r=n.includeMatches;e=n.isCaseSensitive?e:e.toLowerCase();for(var i=0,o=[],c=0,a=0,s=t.length;a<s;a+=1){var u=t[a];o.length=0,i=0;for(var h=0,l=u.length;h<l;h+=1){var d=u[h],v=d.search(e),g=v.isMatch,y=v.indices,p=v.score;if(!g){c=0,i=0,o.length=0;break}if(i+=1,c+=p,r){var m=d.constructor.type;ee.has(m)?o=[].concat(f(o),f(y)):o.push(y)}}if(i){var k={isMatch:!0,score:c/i};return r&&(k.indices=o),k}}return{isMatch:!1,score:1}}}],[{key:"condition",value:function(e,t){return t.useExtendedSearch}}]),e}(),ne=[];function re(e,t){for(var n=0,r=ne.length;n<r;n+=1){var i=ne[n];if(i.condition(e,t))return new i(e,t)}return new T(e,t)}var ie="$and",oe="$or",ce="$path",ae="$val",se=function(e){return!(!e[ie]&&!e[oe])},ue=function(e){return!!e[ce]},he=function(e){return!v(e)&&m(e)&&!se(e)},le=function(e){return c({},ie,Object.keys(e).map((function(t){return c({},t,e[t])})))};function fe(e,t){var n=t.ignoreFieldNorm,r=void 0===n?I.ignoreFieldNorm:n;e.forEach((function(e){var t=1;e.matches.forEach((function(e){var n=e.key,i=e.norm,o=e.score,c=n?n.weight:null;t*=Math.pow(0===o&&c?Number.EPSILON:o,(c||1)*(r?1:i))})),e.score=t}))}function de(e,t){var n=e.matches;t.matches=[],k(n)&&n.forEach((function(e){if(k(e.indices)&&e.indices.length){var n={indices:e.indices,value:e.value};e.key&&(n.key=e.key.src),e.idx>-1&&(n.refIndex=e.idx),t.matches.push(n)}}))}function ve(e,t){t.score=e.score}function ge(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.includeMatches,i=void 0===r?I.includeMatches:r,o=n.includeScore,c=void 0===o?I.includeScore:o,a=[];return i&&a.push(de),c&&a.push(ve),e.map((function(e){var n=e.idx,r={item:t[n],refIndex:n};return a.length&&a.forEach((function(t){t(e,r)})),r}))}var ye=function(){function e(n){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments.length>2?arguments[2]:void 0;r(this,e),this.options=t(t({},I),i),this.options.useExtendedSearch,this._keyStore=new S(this.options.keys),this.setCollection(n,o)}return o(e,[{key:"setCollection",value:function(e,t){if(this._docs=e,t&&!(t instanceof $))throw new Error("Incorrect 'index' type");this._myIndex=t||F(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight})}},{key:"add",value:function(e){k(e)&&(this._docs.push(e),this._myIndex.add(e))}},{key:"remove",value:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){return!1},t=[],n=0,r=this._docs.length;n<r;n+=1){var i=this._docs[n];e(i,n)&&(this.removeAt(n),n-=1,r-=1,t.push(i))}return t}},{key:"removeAt",value:function(e){this._docs.splice(e,1),this._myIndex.removeAt(e)}},{key:"getIndex",value:function(){return this._myIndex}},{key:"search",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.limit,r=void 0===n?-1:n,i=this.options,o=i.includeMatches,c=i.includeScore,a=i.shouldSort,s=i.sortFn,u=i.ignoreFieldNorm,h=g(e)?g(this._docs[0])?this._searchStringList(e):this._searchObjectList(e):this._searchLogical(e);return fe(h,{ignoreFieldNorm:u}),a&&h.sort(s),y(r)&&r>-1&&(h=h.slice(0,r)),ge(h,this._docs,{includeMatches:o,includeScore:c})}},{key:"_searchStringList",value:function(e){var t=re(e,this.options),n=this._myIndex.records,r=[];return n.forEach((function(e){var n=e.v,i=e.i,o=e.n;if(k(n)){var c=t.searchIn(n),a=c.isMatch,s=c.score,u=c.indices;a&&r.push({item:n,idx:i,matches:[{score:s,value:n,norm:o,indices:u}]})}})),r}},{key:"_searchLogical",value:function(e){var t=this,n=function(e,t){var n=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).auto,r=void 0===n||n,i=function e(n){var i=Object.keys(n),o=ue(n);if(!o&&i.length>1&&!se(n))return e(le(n));if(he(n)){var c=o?n[ce]:i[0],a=o?n[ae]:n[c];if(!g(a))throw new Error(x(c));var s={keyId:j(c),pattern:a};return r&&(s.searcher=re(a,t)),s}var u={children:[],operator:i[0]};return i.forEach((function(t){var r=n[t];v(r)&&r.forEach((function(t){u.children.push(e(t))}))})),u};return se(e)||(e=le(e)),i(e)}(e,this.options),r=function e(n,r,i){if(!n.children){var o=n.keyId,c=n.searcher,a=t._findMatches({key:t._keyStore.get(o),value:t._myIndex.getValueForItemAtKeyId(r,o),searcher:c});return a&&a.length?[{idx:i,item:r,matches:a}]:[]}for(var s=[],u=0,h=n.children.length;u<h;u+=1){var l=e(n.children[u],r,i);if(l.length)s.push.apply(s,f(l));else if(n.operator===ie)return[]}return s},i=this._myIndex.records,o={},c=[];return i.forEach((function(e){var t=e.$,i=e.i;if(k(t)){var a=r(n,t,i);a.length&&(o[i]||(o[i]={idx:i,item:t,matches:[]},c.push(o[i])),a.forEach((function(e){var t,n=e.matches;(t=o[i].matches).push.apply(t,f(n))})))}})),c}},{key:"_searchObjectList",value:function(e){var t=this,n=re(e,this.options),r=this._myIndex,i=r.keys,o=r.records,c=[];return o.forEach((function(e){var r=e.$,o=e.i;if(k(r)){var a=[];i.forEach((function(e,i){a.push.apply(a,f(t._findMatches({key:e,value:r[i],searcher:n})))})),a.length&&c.push({idx:o,item:r,matches:a})}})),c}},{key:"_findMatches",value:function(e){var t=e.key,n=e.value,r=e.searcher;if(!k(n))return[];var i=[];if(v(n))n.forEach((function(e){var n=e.v,o=e.i,c=e.n;if(k(n)){var a=r.searchIn(n),s=a.isMatch,u=a.score,h=a.indices;s&&i.push({score:u,key:t,value:n,idx:o,norm:c,indices:h})}}));else{var o=n.v,c=n.n,a=r.searchIn(o),s=a.isMatch,u=a.score,h=a.indices;s&&i.push({score:u,key:t,value:o,norm:c,indices:h})}return i}}]),e}();return ye.version="6.6.2",ye.createIndex=F,ye.parseIndex=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.getFn,r=void 0===n?I.getFn:n,i=t.fieldNormWeight,o=void 0===i?I.fieldNormWeight:i,c=e.keys,a=e.records,s=new $({getFn:r,fieldNormWeight:o});return s.setKeys(c),s.setIndexRecords(a),s},ye.config=I,function(){ne.push.apply(ne,arguments)}(te),ye},"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Fuse=t(); \ No newline at end of file
diff --git a/assets/icons/album.svg b/assets/icons/album.svg
new file mode 100644
index 0000000..1871fae
--- /dev/null
+++ b/assets/icons/album.svg
@@ -0,0 +1 @@
+<svg fill="#79c2f6" xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M480.235-324Q546-324 591-369.235q45-45.236 45-111Q636-546 590.765-591q-45.236-45-111-45Q414-636 369-590.765q-45 45.236-45 111Q324-414 369.235-369q45.236 45 111 45ZM480-440q-17 0-28.5-11.5T440-480q0-17 11.5-28.5T480-520q17 0 28.5 11.5T520-480q0 17-11.5 28.5T480-440Zm.174 340q-78.814 0-148.212-29.911-69.399-29.912-120.734-81.188-51.336-51.277-81.282-120.595Q100-401.012 100-479.826q0-79.07 29.97-148.694 29.971-69.623 81.348-121.126 51.378-51.502 120.594-80.928Q401.128-860 479.826-860q79.06 0 148.676 29.391 69.615 29.392 121.13 80.848 51.516 51.457 80.942 121.018Q860-559.181 860-480.091q0 79.091-29.391 148.149-29.392 69.059-80.835 120.496-51.443 51.436-120.987 81.441Q559.244-100 480.174-100ZM480-154q136.513 0 231.256-94.744Q806-343.487 806-480t-94.744-231.256Q616.513-806 480-806t-231.256 94.744Q154-616.513 154-480t94.744 231.256Q343.487-154 480-154Zm0-326Z"/></svg> \ No newline at end of file
diff --git a/assets/icons/explore.svg b/assets/icons/explore.svg
new file mode 100644
index 0000000..165ebe2
--- /dev/null
+++ b/assets/icons/explore.svg
@@ -0,0 +1 @@
+<svg fill="#79c2f6" xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="m298-298 240-124 124-240-240 124-124 240Zm182-142q-17 0-28.5-11.5T440-480q0-17 11.5-28.5T480-520q17 0 28.5 11.5T520-480q0 17-11.5 28.5T480-440Zm.174 340q-78.814 0-148.212-29.911-69.399-29.912-120.734-81.188-51.336-51.277-81.282-120.595Q100-401.012 100-479.826q0-79.07 29.97-148.694 29.971-69.623 81.348-121.126 51.378-51.502 120.594-80.928Q401.128-860 479.826-860q79.06 0 148.676 29.391 69.615 29.392 121.13 80.848 51.516 51.457 80.942 121.018Q860-559.181 860-480.091q0 79.091-29.391 148.149-29.392 69.059-80.835 120.496-51.443 51.436-120.987 81.441Q559.244-100 480.174-100ZM480-154q136.513 0 231.256-94.744Q806-343.487 806-480t-94.744-231.256Q616.513-806 480-806t-231.256 94.744Q154-616.513 154-480t94.744 231.256Q343.487-154 480-154Zm0-326Z"/></svg> \ No newline at end of file
diff --git a/assets/icons/favorite-off.svg b/assets/icons/favorite-off.svg
new file mode 100644
index 0000000..18e104c
--- /dev/null
+++ b/assets/icons/favorite-off.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="m480-154-38-36q-106-99-173-166.5T164.5-473q-37.5-49-51-88.5T100-642q0-82 57.5-139T298-838q49 0 96 26t86 76q39-50 86-76t96-26q83 0 140.5 57T860-642q0 41-13.5 80.5t-51 88.5q-37.5 49-104 116.5T518-190l-38 36Zm0-74q98-90 161-153t100-109.5q37-46.5 51-81.5t14-70q0-61-40.5-101.5T662-784q-46 0-87.5 28T506-678h-52q-28-51-69-78.5T298-784q-62 0-103 40.5T154-642q0 35 14 70t51 81.5q37 46.5 100 109T480-228Zm0-278Z"/></svg> \ No newline at end of file
diff --git a/assets/icons/favorite-on.svg b/assets/icons/favorite-on.svg
new file mode 100644
index 0000000..87b1d23
--- /dev/null
+++ b/assets/icons/favorite-on.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="m480-154-38-36q-106-99-173-166.5T164.5-473q-37.5-49-51-88.5T100-642q0-82 57.5-139T298-838q49 0 96 26t86 76q39-50 86-76t96-26q83 0 140.5 57T860-642q0 41-13.5 80.5t-51 88.5q-37.5 49-104 116.5T518-190l-38 36Z"/></svg> \ No newline at end of file
diff --git a/assets/icons/favorites.svg b/assets/icons/favorites.svg
new file mode 100644
index 0000000..dc71a20
--- /dev/null
+++ b/assets/icons/favorites.svg
@@ -0,0 +1 @@
+<svg fill="#79c2f6" xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="m480-154-38-36q-106-99-173-166.5T164.5-473q-37.5-49-51-88.5T100-642q0-82 57.5-139T298-838q49 0 96 26t86 76q39-50 86-76t96-26q83 0 140.5 57T860-642q0 41-13.5 80.5t-51 88.5q-37.5 49-104 116.5T518-190l-38 36Zm0-74q98-90 161-153t100-109.5q37-46.5 51-81.5t14-70q0-61-40.5-101.5T662-784q-46 0-87.5 28T506-678h-52q-28-51-69-78.5T298-784q-62 0-103 40.5T154-642q0 35 14 70t51 81.5q37 46.5 100 109T480-228Zm0-278Z"/></svg> \ No newline at end of file
diff --git a/assets/icons/lossless.svg b/assets/icons/lossless.svg
new file mode 100644
index 0000000..8138325
--- /dev/null
+++ b/assets/icons/lossless.svg
@@ -0,0 +1,3 @@
+ <svg xmlns="http://www.w3.org/2000/svg" width="150" height="90" viewBox="0 0 15 9">
+ <path fill="#000000" d="M8.184,0.35C9.944,0.35 10.703,3.296 11.338,5.238C11.673,3.842 11.497,3.542 11.857,3.542C11.99,3.542 12.126,3.633 12.126,3.798C12.126,3.809 12.123,3.839 12.117,3.883L12.091,4.058C12.02,4.522 11.845,5.494 11.654,6.144C13.198,10.191 14.345,4.861 14.474,3.772C14.493,3.615 14.612,3.542 14.731,3.542C14.891,3.542 15.022,3.662 14.997,3.843C14.72,5.605 14.295,8.35 12.547,8.35C11.582,8.35 11.04,7.595 10.611,6.73C9.54,4.626 9.047,1.093 7.997,1.093C7.66,1.093 7.411,1.444 7.394,1.444C7.362,1.444 7.337,1.301 7.023,0.909C7.322,0.567 7.734,0.35 8.184,0.35ZM2.458,0.354C5.211,0.354 5.456,7.618 7.014,7.618C7.197,7.618 7.394,7.507 7.61,7.256C7.729,7.458 7.851,7.638 7.978,7.796C7.667,8.151 7.28,8.35 6.795,8.35C5.054,8.349 4.306,5.434 3.663,3.466C3.511,4.097 3.432,4.669 3.402,4.925C3.382,5.088 3.263,5.163 3.143,5.163C3.009,5.163 2.874,5.071 2.874,4.908L2.874,4.908L2.877,4.87C2.966,4.223 3.146,3.243 3.347,2.56C3.079,1.858 2.745,1.091 2.252,1.091C1.257,1.091 0.687,3.591 0.527,4.925C0.508,5.088 0.388,5.163 0.268,5.163C0.135,5.163 0,5.071 0,4.908C0,4.896 0.001,4.883 0.002,4.87C0.283,2.836 0.808,0.354 2.458,0.354ZM5.315,0.35C5.809,0.35 6.339,0.608 6.797,1.211C6.822,1.241 7.078,1.639 7.159,1.777C8.277,3.802 8.818,7.627 9.881,7.627C10.065,7.627 10.264,7.513 10.484,7.256C10.604,7.458 10.726,7.638 10.852,7.796C10.542,8.15 10.155,8.35 9.67,8.35C6.933,8.349 6.636,1.09 5.128,1.09C4.788,1.09 4.536,1.444 4.519,1.444C4.487,1.444 4.462,1.301 4.148,0.909C4.455,0.558 4.87,0.35 5.315,0.35Z"/>
+</svg> \ No newline at end of file
diff --git a/assets/icons/lyrics.svg b/assets/icons/lyrics.svg
new file mode 100644
index 0000000..7de6c55
--- /dev/null
+++ b/assets/icons/lyrics.svg
@@ -0,0 +1 @@
+<svg fill="#79c2f6" xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M196-333v-454 454Zm-54 158v-580q0-37 24.5-61.5T228-841h350q37 0 61.5 24.5T664-755v11q-18 7-31.5 19T610-696v-59q0-14-9-23t-23-9H228q-14 0-23 9t-9 23v422h382q14 0 23-9t9-23v-79q9 17 22.5 29t31.5 19v31q0 37-24.5 61.5T578-279H246L142-175Zm130-222h142v-54H272v54Zm474.294-66Q702-463 670.5-494T639-570q0-45 31.292-76 31.291-31 75.708-31 18.452 0 29.726 5Q787-667 799-652v-225h134v54h-80v253q0 45-31.206 76t-75.5 31ZM272-533h262v-54H272v54Zm0-136h262v-54H272v54Z"/></svg> \ No newline at end of file
diff --git a/assets/icons/next.svg b/assets/icons/next.svg
new file mode 100644
index 0000000..f352a47
--- /dev/null
+++ b/assets/icons/next.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M130-274v-412l310 206-310 206Zm390 0v-412l310 206-310 206ZM184-480Zm390 0ZM184-374l158-106-158-106v212Zm390 0 158-106-158-106v212Z"/></svg> \ No newline at end of file
diff --git a/assets/icons/pause.svg b/assets/icons/pause.svg
new file mode 100644
index 0000000..d97bcb6
--- /dev/null
+++ b/assets/icons/pause.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M546-223v-516h192v516H546Zm-324 0v-516h192v516H222Zm378-54h84v-408h-84v408Zm-324 0h84v-408h-84v408Zm0-408v408-408Zm324 0v408-408Z"/></svg> \ No newline at end of file
diff --git a/assets/icons/play.svg b/assets/icons/play.svg
new file mode 100644
index 0000000..b5ac393
--- /dev/null
+++ b/assets/icons/play.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M344-256v-448l354 224-354 224Zm54-224Zm0 124 198-124-198-124v248Z"/></svg> \ No newline at end of file
diff --git a/assets/icons/playlist.svg b/assets/icons/playlist.svg
new file mode 100644
index 0000000..471d3f2
--- /dev/null
+++ b/assets/icons/playlist.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M631.765-180Q589-180 558.5-210.11 528-240.221 528-283.235q0-43.848 30.333-74.807Q588.667-389 632-389q14.548 0 27.774 7T684-367v-333h176v77H737v340q0 42.917-30.694 72.958Q675.613-180 631.765-180ZM140-341v-53h295v53H140Zm0-153v-53h444v53H140Zm0-153v-53h444v53H140Z"/></svg> \ No newline at end of file
diff --git a/assets/icons/previous.svg b/assets/icons/previous.svg
new file mode 100644
index 0000000..854b952
--- /dev/null
+++ b/assets/icons/previous.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M830-274 520-480l310-206v412Zm-390 0L130-480l310-206v412Zm-54-206Zm390 0ZM386-374v-212L228-480l158 106Zm390 0v-212L618-480l158 106Z"/></svg> \ No newline at end of file
diff --git a/assets/icons/repeat-off.svg b/assets/icons/repeat-off.svg
new file mode 100644
index 0000000..ef706ad
--- /dev/null
+++ b/assets/icons/repeat-off.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M284-99 140-243l144-144 39 38-79 79h458v-163h54v217H244l79 79-39 38Zm-80-427v-217h513l-79-79 39-38 144 144-144 144-39-38 79-79H258v163h-54Z"/></svg> \ No newline at end of file
diff --git a/assets/icons/repeat-on.svg b/assets/icons/repeat-on.svg
new file mode 100644
index 0000000..667def9
--- /dev/null
+++ b/assets/icons/repeat-on.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M113-60q-22 0-37.5-15.5T60-113v-734q0-23 15.5-38t37.5-15h734q23 0 38 15t15 38v734q0 22-15 37.5T847-60H113Zm171-39 39-38-79-79h512v-217h-54v163H244l79-79-39-38-144 144L284-99Zm-80-427h54v-163h459l-79 79 39 38 144-144-144-144-39 38 79 79H204v217Z"/></svg> \ No newline at end of file
diff --git a/assets/icons/settings.svg b/assets/icons/settings.svg
new file mode 100644
index 0000000..759e748
--- /dev/null
+++ b/assets/icons/settings.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="m393-100-16-119q-15-5-36.779-16.455Q318.441-246.909 305-260l-112 47-86-156 92-71q-1-9.926-2.5-21t-1.5-21q0-8.407 1.5-18.5T199-524l-92-69 86-152 107 44q17-14 38-25.5t39-18.5l16-117h174l15 119q21 9 38.5 18.5T656-700l111-45 86 152-98 74q3 11 3.5 21t.5 18q0 7-1 17t-2 24l94 70-86 156-113-48q-17 14-33.5 24T583-221l-16 121H393Zm46-54h78.849L533-264q31-8 55.913-22.085Q613.827-300.17 641-326l98 42 41-68-86-66q5-18 7-33.23 2-15.23 2-30.5 0-16.27-1.5-29.27t-6.5-33l87-66-39-68-102 41q-17-20-49.393-38.795T532-700l-11-108h-83l-10 106q-34 7-61 22.5T314-637l-97-41-41 68 84 65q-5 17-7 33t-2 30.424Q251-469 253-453t6 36l-83 65 41 68 97-41q28 26 54.5 40.5T427-262l12 108Zm36-212q48.6 0 82.3-33.7Q591-433.4 591-482q0-48.6-33.7-82.3Q523.6-598 475-598q-48 0-82 33.7T359-482q0 48.6 34 82.3 34 33.7 82 33.7Zm4-115Z"/></svg> \ No newline at end of file
diff --git a/assets/icons/shuffle-off.svg b/assets/icons/shuffle-off.svg
new file mode 100644
index 0000000..0eddee0
--- /dev/null
+++ b/assets/icons/shuffle-off.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M577-180v-41h136L560-374l28-27 151 151v-131h41v201H577Zm-369 0-28-28 531-531H577v-41h203v200h-41v-131L208-180Zm159-386L180-753l27-27 187 187-27 27Z"/></svg> \ No newline at end of file
diff --git a/assets/icons/shuffle-on.svg b/assets/icons/shuffle-on.svg
new file mode 100644
index 0000000..d2327f6
--- /dev/null
+++ b/assets/icons/shuffle-on.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M113-60q-21.55 0-37.275-15.725Q60-91.45 60-113v-734q0-22.55 15.725-37.775Q91.45-900 113-900h734q22.55 0 37.775 15.225Q900-869.55 900-847v734q0 21.55-15.225 37.275Q869.55-60 847-60H113Zm464-120h203v-201h-41v131L588-401l-28 27 153 153H577v41Zm-369 0 531-531v131h41v-200H577v41h134L180-208l28 28Zm159-386 27-27-187-187-27 27 187 187Z"/></svg> \ No newline at end of file
diff --git a/assets/icons/song.svg b/assets/icons/song.svg
new file mode 100644
index 0000000..d365da2
--- /dev/null
+++ b/assets/icons/song.svg
@@ -0,0 +1 @@
+<svg fill="#79c2f6" xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M400-146q-55.55 0-95.775-40.225Q264-226.45 264-282q0-55.55 40.225-95.775Q344.45-418 400-418q23 0 44 6.5t38 21.5v-424h214v122H536v410q0 55.55-40.225 95.775Q455.55-146 400-146Z"/></svg> \ No newline at end of file
diff --git a/assets/localforage.min.js b/assets/localforage.min.js
new file mode 100644
index 0000000..7403f8f
--- /dev/null
+++ b/assets/localforage.min.js
@@ -0,0 +1,7 @@
+/*!
+ localForage -- Offline Storage, Improved
+ Version 1.10.0
+ https://localforage.github.io/localForage
+ (c) 2013-2017 Mozilla, Apache License 2.0
+*/
+!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.localforage=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c||a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b,c){(function(a){"use strict";function c(){k=!0;for(var a,b,c=l.length;c;){for(b=l,l=[],a=-1;++a<c;)b[a]();c=l.length}k=!1}function d(a){1!==l.push(a)||k||e()}var e,f=a.MutationObserver||a.WebKitMutationObserver;if(f){var g=0,h=new f(c),i=a.document.createTextNode("");h.observe(i,{characterData:!0}),e=function(){i.data=g=++g%2}}else if(a.setImmediate||void 0===a.MessageChannel)e="document"in a&&"onreadystatechange"in a.document.createElement("script")?function(){var b=a.document.createElement("script");b.onreadystatechange=function(){c(),b.onreadystatechange=null,b.parentNode.removeChild(b),b=null},a.document.documentElement.appendChild(b)}:function(){setTimeout(c,0)};else{var j=new a.MessageChannel;j.port1.onmessage=c,e=function(){j.port2.postMessage(0)}}var k,l=[];b.exports=d}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],2:[function(a,b,c){"use strict";function d(){}function e(a){if("function"!=typeof a)throw new TypeError("resolver must be a function");this.state=s,this.queue=[],this.outcome=void 0,a!==d&&i(this,a)}function f(a,b,c){this.promise=a,"function"==typeof b&&(this.onFulfilled=b,this.callFulfilled=this.otherCallFulfilled),"function"==typeof c&&(this.onRejected=c,this.callRejected=this.otherCallRejected)}function g(a,b,c){o(function(){var d;try{d=b(c)}catch(b){return p.reject(a,b)}d===a?p.reject(a,new TypeError("Cannot resolve promise with itself")):p.resolve(a,d)})}function h(a){var b=a&&a.then;if(a&&("object"==typeof a||"function"==typeof a)&&"function"==typeof b)return function(){b.apply(a,arguments)}}function i(a,b){function c(b){f||(f=!0,p.reject(a,b))}function d(b){f||(f=!0,p.resolve(a,b))}function e(){b(d,c)}var f=!1,g=j(e);"error"===g.status&&c(g.value)}function j(a,b){var c={};try{c.value=a(b),c.status="success"}catch(a){c.status="error",c.value=a}return c}function k(a){return a instanceof this?a:p.resolve(new this(d),a)}function l(a){var b=new this(d);return p.reject(b,a)}function m(a){function b(a,b){function d(a){g[b]=a,++h!==e||f||(f=!0,p.resolve(j,g))}c.resolve(a).then(d,function(a){f||(f=!0,p.reject(j,a))})}var c=this;if("[object Array]"!==Object.prototype.toString.call(a))return this.reject(new TypeError("must be an array"));var e=a.length,f=!1;if(!e)return this.resolve([]);for(var g=new Array(e),h=0,i=-1,j=new this(d);++i<e;)b(a[i],i);return j}function n(a){function b(a){c.resolve(a).then(function(a){f||(f=!0,p.resolve(h,a))},function(a){f||(f=!0,p.reject(h,a))})}var c=this;if("[object Array]"!==Object.prototype.toString.call(a))return this.reject(new TypeError("must be an array"));var e=a.length,f=!1;if(!e)return this.resolve([]);for(var g=-1,h=new this(d);++g<e;)b(a[g]);return h}var o=a(1),p={},q=["REJECTED"],r=["FULFILLED"],s=["PENDING"];b.exports=e,e.prototype.catch=function(a){return this.then(null,a)},e.prototype.then=function(a,b){if("function"!=typeof a&&this.state===r||"function"!=typeof b&&this.state===q)return this;var c=new this.constructor(d);if(this.state!==s){g(c,this.state===r?a:b,this.outcome)}else this.queue.push(new f(c,a,b));return c},f.prototype.callFulfilled=function(a){p.resolve(this.promise,a)},f.prototype.otherCallFulfilled=function(a){g(this.promise,this.onFulfilled,a)},f.prototype.callRejected=function(a){p.reject(this.promise,a)},f.prototype.otherCallRejected=function(a){g(this.promise,this.onRejected,a)},p.resolve=function(a,b){var c=j(h,b);if("error"===c.status)return p.reject(a,c.value);var d=c.value;if(d)i(a,d);else{a.state=r,a.outcome=b;for(var e=-1,f=a.queue.length;++e<f;)a.queue[e].callFulfilled(b)}return a},p.reject=function(a,b){a.state=q,a.outcome=b;for(var c=-1,d=a.queue.length;++c<d;)a.queue[c].callRejected(b);return a},e.resolve=k,e.reject=l,e.all=m,e.race=n},{1:1}],3:[function(a,b,c){(function(b){"use strict";"function"!=typeof b.Promise&&(b.Promise=a(2))}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{2:2}],4:[function(a,b,c){"use strict";function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function e(){try{if("undefined"!=typeof indexedDB)return indexedDB;if("undefined"!=typeof webkitIndexedDB)return webkitIndexedDB;if("undefined"!=typeof mozIndexedDB)return mozIndexedDB;if("undefined"!=typeof OIndexedDB)return OIndexedDB;if("undefined"!=typeof msIndexedDB)return msIndexedDB}catch(a){return}}function f(){try{if(!ua||!ua.open)return!1;var a="undefined"!=typeof openDatabase&&/(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent)&&!/Chrome/.test(navigator.userAgent)&&!/BlackBerry/.test(navigator.platform),b="function"==typeof fetch&&-1!==fetch.toString().indexOf("[native code");return(!a||b)&&"undefined"!=typeof indexedDB&&"undefined"!=typeof IDBKeyRange}catch(a){return!1}}function g(a,b){a=a||[],b=b||{};try{return new Blob(a,b)}catch(f){if("TypeError"!==f.name)throw f;for(var c="undefined"!=typeof BlobBuilder?BlobBuilder:"undefined"!=typeof MSBlobBuilder?MSBlobBuilder:"undefined"!=typeof MozBlobBuilder?MozBlobBuilder:WebKitBlobBuilder,d=new c,e=0;e<a.length;e+=1)d.append(a[e]);return d.getBlob(b.type)}}function h(a,b){b&&a.then(function(a){b(null,a)},function(a){b(a)})}function i(a,b,c){"function"==typeof b&&a.then(b),"function"==typeof c&&a.catch(c)}function j(a){return"string"!=typeof a&&(console.warn(a+" used as a key, but it is not a string."),a=String(a)),a}function k(){if(arguments.length&&"function"==typeof arguments[arguments.length-1])return arguments[arguments.length-1]}function l(a){for(var b=a.length,c=new ArrayBuffer(b),d=new Uint8Array(c),e=0;e<b;e++)d[e]=a.charCodeAt(e);return c}function m(a){return new va(function(b){var c=a.transaction(wa,Ba),d=g([""]);c.objectStore(wa).put(d,"key"),c.onabort=function(a){a.preventDefault(),a.stopPropagation(),b(!1)},c.oncomplete=function(){var a=navigator.userAgent.match(/Chrome\/(\d+)/),c=navigator.userAgent.match(/Edge\//);b(c||!a||parseInt(a[1],10)>=43)}}).catch(function(){return!1})}function n(a){return"boolean"==typeof xa?va.resolve(xa):m(a).then(function(a){return xa=a})}function o(a){var b=ya[a.name],c={};c.promise=new va(function(a,b){c.resolve=a,c.reject=b}),b.deferredOperations.push(c),b.dbReady?b.dbReady=b.dbReady.then(function(){return c.promise}):b.dbReady=c.promise}function p(a){var b=ya[a.name],c=b.deferredOperations.pop();if(c)return c.resolve(),c.promise}function q(a,b){var c=ya[a.name],d=c.deferredOperations.pop();if(d)return d.reject(b),d.promise}function r(a,b){return new va(function(c,d){if(ya[a.name]=ya[a.name]||B(),a.db){if(!b)return c(a.db);o(a),a.db.close()}var e=[a.name];b&&e.push(a.version);var f=ua.open.apply(ua,e);b&&(f.onupgradeneeded=function(b){var c=f.result;try{c.createObjectStore(a.storeName),b.oldVersion<=1&&c.createObjectStore(wa)}catch(c){if("ConstraintError"!==c.name)throw c;console.warn('The database "'+a.name+'" has been upgraded from version '+b.oldVersion+" to version "+b.newVersion+', but the storage "'+a.storeName+'" already exists.')}}),f.onerror=function(a){a.preventDefault(),d(f.error)},f.onsuccess=function(){var b=f.result;b.onversionchange=function(a){a.target.close()},c(b),p(a)}})}function s(a){return r(a,!1)}function t(a){return r(a,!0)}function u(a,b){if(!a.db)return!0;var c=!a.db.objectStoreNames.contains(a.storeName),d=a.version<a.db.version,e=a.version>a.db.version;if(d&&(a.version!==b&&console.warn('The database "'+a.name+"\" can't be downgraded from version "+a.db.version+" to version "+a.version+"."),a.version=a.db.version),e||c){if(c){var f=a.db.version+1;f>a.version&&(a.version=f)}return!0}return!1}function v(a){return new va(function(b,c){var d=new FileReader;d.onerror=c,d.onloadend=function(c){var d=btoa(c.target.result||"");b({__local_forage_encoded_blob:!0,data:d,type:a.type})},d.readAsBinaryString(a)})}function w(a){return g([l(atob(a.data))],{type:a.type})}function x(a){return a&&a.__local_forage_encoded_blob}function y(a){var b=this,c=b._initReady().then(function(){var a=ya[b._dbInfo.name];if(a&&a.dbReady)return a.dbReady});return i(c,a,a),c}function z(a){o(a);for(var b=ya[a.name],c=b.forages,d=0;d<c.length;d++){var e=c[d];e._dbInfo.db&&(e._dbInfo.db.close(),e._dbInfo.db=null)}return a.db=null,s(a).then(function(b){return a.db=b,u(a)?t(a):b}).then(function(d){a.db=b.db=d;for(var e=0;e<c.length;e++)c[e]._dbInfo.db=d}).catch(function(b){throw q(a,b),b})}function A(a,b,c,d){void 0===d&&(d=1);try{var e=a.db.transaction(a.storeName,b);c(null,e)}catch(e){if(d>0&&(!a.db||"InvalidStateError"===e.name||"NotFoundError"===e.name))return va.resolve().then(function(){if(!a.db||"NotFoundError"===e.name&&!a.db.objectStoreNames.contains(a.storeName)&&a.version<=a.db.version)return a.db&&(a.version=a.db.version+1),t(a)}).then(function(){return z(a).then(function(){A(a,b,c,d-1)})}).catch(c);c(e)}}function B(){return{forages:[],db:null,dbReady:null,deferredOperations:[]}}function C(a){function b(){return va.resolve()}var c=this,d={db:null};if(a)for(var e in a)d[e]=a[e];var f=ya[d.name];f||(f=B(),ya[d.name]=f),f.forages.push(c),c._initReady||(c._initReady=c.ready,c.ready=y);for(var g=[],h=0;h<f.forages.length;h++){var i=f.forages[h];i!==c&&g.push(i._initReady().catch(b))}var j=f.forages.slice(0);return va.all(g).then(function(){return d.db=f.db,s(d)}).then(function(a){return d.db=a,u(d,c._defaultConfig.version)?t(d):a}).then(function(a){d.db=f.db=a,c._dbInfo=d;for(var b=0;b<j.length;b++){var e=j[b];e!==c&&(e._dbInfo.db=d.db,e._dbInfo.version=d.version)}})}function D(a,b){var c=this;a=j(a);var d=new va(function(b,d){c.ready().then(function(){A(c._dbInfo,Aa,function(e,f){if(e)return d(e);try{var g=f.objectStore(c._dbInfo.storeName),h=g.get(a);h.onsuccess=function(){var a=h.result;void 0===a&&(a=null),x(a)&&(a=w(a)),b(a)},h.onerror=function(){d(h.error)}}catch(a){d(a)}})}).catch(d)});return h(d,b),d}function E(a,b){var c=this,d=new va(function(b,d){c.ready().then(function(){A(c._dbInfo,Aa,function(e,f){if(e)return d(e);try{var g=f.objectStore(c._dbInfo.storeName),h=g.openCursor(),i=1;h.onsuccess=function(){var c=h.result;if(c){var d=c.value;x(d)&&(d=w(d));var e=a(d,c.key,i++);void 0!==e?b(e):c.continue()}else b()},h.onerror=function(){d(h.error)}}catch(a){d(a)}})}).catch(d)});return h(d,b),d}function F(a,b,c){var d=this;a=j(a);var e=new va(function(c,e){var f;d.ready().then(function(){return f=d._dbInfo,"[object Blob]"===za.call(b)?n(f.db).then(function(a){return a?b:v(b)}):b}).then(function(b){A(d._dbInfo,Ba,function(f,g){if(f)return e(f);try{var h=g.objectStore(d._dbInfo.storeName);null===b&&(b=void 0);var i=h.put(b,a);g.oncomplete=function(){void 0===b&&(b=null),c(b)},g.onabort=g.onerror=function(){var a=i.error?i.error:i.transaction.error;e(a)}}catch(a){e(a)}})}).catch(e)});return h(e,c),e}function G(a,b){var c=this;a=j(a);var d=new va(function(b,d){c.ready().then(function(){A(c._dbInfo,Ba,function(e,f){if(e)return d(e);try{var g=f.objectStore(c._dbInfo.storeName),h=g.delete(a);f.oncomplete=function(){b()},f.onerror=function(){d(h.error)},f.onabort=function(){var a=h.error?h.error:h.transaction.error;d(a)}}catch(a){d(a)}})}).catch(d)});return h(d,b),d}function H(a){var b=this,c=new va(function(a,c){b.ready().then(function(){A(b._dbInfo,Ba,function(d,e){if(d)return c(d);try{var f=e.objectStore(b._dbInfo.storeName),g=f.clear();e.oncomplete=function(){a()},e.onabort=e.onerror=function(){var a=g.error?g.error:g.transaction.error;c(a)}}catch(a){c(a)}})}).catch(c)});return h(c,a),c}function I(a){var b=this,c=new va(function(a,c){b.ready().then(function(){A(b._dbInfo,Aa,function(d,e){if(d)return c(d);try{var f=e.objectStore(b._dbInfo.storeName),g=f.count();g.onsuccess=function(){a(g.result)},g.onerror=function(){c(g.error)}}catch(a){c(a)}})}).catch(c)});return h(c,a),c}function J(a,b){var c=this,d=new va(function(b,d){if(a<0)return void b(null);c.ready().then(function(){A(c._dbInfo,Aa,function(e,f){if(e)return d(e);try{var g=f.objectStore(c._dbInfo.storeName),h=!1,i=g.openKeyCursor();i.onsuccess=function(){var c=i.result;if(!c)return void b(null);0===a?b(c.key):h?b(c.key):(h=!0,c.advance(a))},i.onerror=function(){d(i.error)}}catch(a){d(a)}})}).catch(d)});return h(d,b),d}function K(a){var b=this,c=new va(function(a,c){b.ready().then(function(){A(b._dbInfo,Aa,function(d,e){if(d)return c(d);try{var f=e.objectStore(b._dbInfo.storeName),g=f.openKeyCursor(),h=[];g.onsuccess=function(){var b=g.result;if(!b)return void a(h);h.push(b.key),b.continue()},g.onerror=function(){c(g.error)}}catch(a){c(a)}})}).catch(c)});return h(c,a),c}function L(a,b){b=k.apply(this,arguments);var c=this.config();a="function"!=typeof a&&a||{},a.name||(a.name=a.name||c.name,a.storeName=a.storeName||c.storeName);var d,e=this;if(a.name){var f=a.name===c.name&&e._dbInfo.db,g=f?va.resolve(e._dbInfo.db):s(a).then(function(b){var c=ya[a.name],d=c.forages;c.db=b;for(var e=0;e<d.length;e++)d[e]._dbInfo.db=b;return b});d=a.storeName?g.then(function(b){if(b.objectStoreNames.contains(a.storeName)){var c=b.version+1;o(a);var d=ya[a.name],e=d.forages;b.close();for(var f=0;f<e.length;f++){var g=e[f];g._dbInfo.db=null,g._dbInfo.version=c}return new va(function(b,d){var e=ua.open(a.name,c);e.onerror=function(a){e.result.close(),d(a)},e.onupgradeneeded=function(){e.result.deleteObjectStore(a.storeName)},e.onsuccess=function(){var a=e.result;a.close(),b(a)}}).then(function(a){d.db=a;for(var b=0;b<e.length;b++){var c=e[b];c._dbInfo.db=a,p(c._dbInfo)}}).catch(function(b){throw(q(a,b)||va.resolve()).catch(function(){}),b})}}):g.then(function(b){o(a);var c=ya[a.name],d=c.forages;b.close();for(var e=0;e<d.length;e++){d[e]._dbInfo.db=null}return new va(function(b,c){var d=ua.deleteDatabase(a.name);d.onerror=function(){var a=d.result;a&&a.close(),c(d.error)},d.onblocked=function(){console.warn('dropInstance blocked for database "'+a.name+'" until all open connections are closed')},d.onsuccess=function(){var a=d.result;a&&a.close(),b(a)}}).then(function(a){c.db=a;for(var b=0;b<d.length;b++)p(d[b]._dbInfo)}).catch(function(b){throw(q(a,b)||va.resolve()).catch(function(){}),b})})}else d=va.reject("Invalid arguments");return h(d,b),d}function M(){return"function"==typeof openDatabase}function N(a){var b,c,d,e,f,g=.75*a.length,h=a.length,i=0;"="===a[a.length-1]&&(g--,"="===a[a.length-2]&&g--);var j=new ArrayBuffer(g),k=new Uint8Array(j);for(b=0;b<h;b+=4)c=Da.indexOf(a[b]),d=Da.indexOf(a[b+1]),e=Da.indexOf(a[b+2]),f=Da.indexOf(a[b+3]),k[i++]=c<<2|d>>4,k[i++]=(15&d)<<4|e>>2,k[i++]=(3&e)<<6|63&f;return j}function O(a){var b,c=new Uint8Array(a),d="";for(b=0;b<c.length;b+=3)d+=Da[c[b]>>2],d+=Da[(3&c[b])<<4|c[b+1]>>4],d+=Da[(15&c[b+1])<<2|c[b+2]>>6],d+=Da[63&c[b+2]];return c.length%3==2?d=d.substring(0,d.length-1)+"=":c.length%3==1&&(d=d.substring(0,d.length-2)+"=="),d}function P(a,b){var c="";if(a&&(c=Ua.call(a)),a&&("[object ArrayBuffer]"===c||a.buffer&&"[object ArrayBuffer]"===Ua.call(a.buffer))){var d,e=Ga;a instanceof ArrayBuffer?(d=a,e+=Ia):(d=a.buffer,"[object Int8Array]"===c?e+=Ka:"[object Uint8Array]"===c?e+=La:"[object Uint8ClampedArray]"===c?e+=Ma:"[object Int16Array]"===c?e+=Na:"[object Uint16Array]"===c?e+=Pa:"[object Int32Array]"===c?e+=Oa:"[object Uint32Array]"===c?e+=Qa:"[object Float32Array]"===c?e+=Ra:"[object Float64Array]"===c?e+=Sa:b(new Error("Failed to get type for BinaryArray"))),b(e+O(d))}else if("[object Blob]"===c){var f=new FileReader;f.onload=function(){var c=Ea+a.type+"~"+O(this.result);b(Ga+Ja+c)},f.readAsArrayBuffer(a)}else try{b(JSON.stringify(a))}catch(c){console.error("Couldn't convert value into a JSON string: ",a),b(null,c)}}function Q(a){if(a.substring(0,Ha)!==Ga)return JSON.parse(a);var b,c=a.substring(Ta),d=a.substring(Ha,Ta);if(d===Ja&&Fa.test(c)){var e=c.match(Fa);b=e[1],c=c.substring(e[0].length)}var f=N(c);switch(d){case Ia:return f;case Ja:return g([f],{type:b});case Ka:return new Int8Array(f);case La:return new Uint8Array(f);case Ma:return new Uint8ClampedArray(f);case Na:return new Int16Array(f);case Pa:return new Uint16Array(f);case Oa:return new Int32Array(f);case Qa:return new Uint32Array(f);case Ra:return new Float32Array(f);case Sa:return new Float64Array(f);default:throw new Error("Unkown type: "+d)}}function R(a,b,c,d){a.executeSql("CREATE TABLE IF NOT EXISTS "+b.storeName+" (id INTEGER PRIMARY KEY, key unique, value)",[],c,d)}function S(a){var b=this,c={db:null};if(a)for(var d in a)c[d]="string"!=typeof a[d]?a[d].toString():a[d];var e=new va(function(a,d){try{c.db=openDatabase(c.name,String(c.version),c.description,c.size)}catch(a){return d(a)}c.db.transaction(function(e){R(e,c,function(){b._dbInfo=c,a()},function(a,b){d(b)})},d)});return c.serializer=Va,e}function T(a,b,c,d,e,f){a.executeSql(c,d,e,function(a,g){g.code===g.SYNTAX_ERR?a.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name = ?",[b.storeName],function(a,h){h.rows.length?f(a,g):R(a,b,function(){a.executeSql(c,d,e,f)},f)},f):f(a,g)},f)}function U(a,b){var c=this;a=j(a);var d=new va(function(b,d){c.ready().then(function(){var e=c._dbInfo;e.db.transaction(function(c){T(c,e,"SELECT * FROM "+e.storeName+" WHERE key = ? LIMIT 1",[a],function(a,c){var d=c.rows.length?c.rows.item(0).value:null;d&&(d=e.serializer.deserialize(d)),b(d)},function(a,b){d(b)})})}).catch(d)});return h(d,b),d}function V(a,b){var c=this,d=new va(function(b,d){c.ready().then(function(){var e=c._dbInfo;e.db.transaction(function(c){T(c,e,"SELECT * FROM "+e.storeName,[],function(c,d){for(var f=d.rows,g=f.length,h=0;h<g;h++){var i=f.item(h),j=i.value;if(j&&(j=e.serializer.deserialize(j)),void 0!==(j=a(j,i.key,h+1)))return void b(j)}b()},function(a,b){d(b)})})}).catch(d)});return h(d,b),d}function W(a,b,c,d){var e=this;a=j(a);var f=new va(function(f,g){e.ready().then(function(){void 0===b&&(b=null);var h=b,i=e._dbInfo;i.serializer.serialize(b,function(b,j){j?g(j):i.db.transaction(function(c){T(c,i,"INSERT OR REPLACE INTO "+i.storeName+" (key, value) VALUES (?, ?)",[a,b],function(){f(h)},function(a,b){g(b)})},function(b){if(b.code===b.QUOTA_ERR){if(d>0)return void f(W.apply(e,[a,h,c,d-1]));g(b)}})})}).catch(g)});return h(f,c),f}function X(a,b,c){return W.apply(this,[a,b,c,1])}function Y(a,b){var c=this;a=j(a);var d=new va(function(b,d){c.ready().then(function(){var e=c._dbInfo;e.db.transaction(function(c){T(c,e,"DELETE FROM "+e.storeName+" WHERE key = ?",[a],function(){b()},function(a,b){d(b)})})}).catch(d)});return h(d,b),d}function Z(a){var b=this,c=new va(function(a,c){b.ready().then(function(){var d=b._dbInfo;d.db.transaction(function(b){T(b,d,"DELETE FROM "+d.storeName,[],function(){a()},function(a,b){c(b)})})}).catch(c)});return h(c,a),c}function $(a){var b=this,c=new va(function(a,c){b.ready().then(function(){var d=b._dbInfo;d.db.transaction(function(b){T(b,d,"SELECT COUNT(key) as c FROM "+d.storeName,[],function(b,c){var d=c.rows.item(0).c;a(d)},function(a,b){c(b)})})}).catch(c)});return h(c,a),c}function _(a,b){var c=this,d=new va(function(b,d){c.ready().then(function(){var e=c._dbInfo;e.db.transaction(function(c){T(c,e,"SELECT key FROM "+e.storeName+" WHERE id = ? LIMIT 1",[a+1],function(a,c){var d=c.rows.length?c.rows.item(0).key:null;b(d)},function(a,b){d(b)})})}).catch(d)});return h(d,b),d}function aa(a){var b=this,c=new va(function(a,c){b.ready().then(function(){var d=b._dbInfo;d.db.transaction(function(b){T(b,d,"SELECT key FROM "+d.storeName,[],function(b,c){for(var d=[],e=0;e<c.rows.length;e++)d.push(c.rows.item(e).key);a(d)},function(a,b){c(b)})})}).catch(c)});return h(c,a),c}function ba(a){return new va(function(b,c){a.transaction(function(d){d.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'",[],function(c,d){for(var e=[],f=0;f<d.rows.length;f++)e.push(d.rows.item(f).name);b({db:a,storeNames:e})},function(a,b){c(b)})},function(a){c(a)})})}function ca(a,b){b=k.apply(this,arguments);var c=this.config();a="function"!=typeof a&&a||{},a.name||(a.name=a.name||c.name,a.storeName=a.storeName||c.storeName);var d,e=this;return d=a.name?new va(function(b){var d;d=a.name===c.name?e._dbInfo.db:openDatabase(a.name,"","",0),b(a.storeName?{db:d,storeNames:[a.storeName]}:ba(d))}).then(function(a){return new va(function(b,c){a.db.transaction(function(d){function e(a){return new va(function(b,c){d.executeSql("DROP TABLE IF EXISTS "+a,[],function(){b()},function(a,b){c(b)})})}for(var f=[],g=0,h=a.storeNames.length;g<h;g++)f.push(e(a.storeNames[g]));va.all(f).then(function(){b()}).catch(function(a){c(a)})},function(a){c(a)})})}):va.reject("Invalid arguments"),h(d,b),d}function da(){try{return"undefined"!=typeof localStorage&&"setItem"in localStorage&&!!localStorage.setItem}catch(a){return!1}}function ea(a,b){var c=a.name+"/";return a.storeName!==b.storeName&&(c+=a.storeName+"/"),c}function fa(){var a="_localforage_support_test";try{return localStorage.setItem(a,!0),localStorage.removeItem(a),!1}catch(a){return!0}}function ga(){return!fa()||localStorage.length>0}function ha(a){var b=this,c={};if(a)for(var d in a)c[d]=a[d];return c.keyPrefix=ea(a,b._defaultConfig),ga()?(b._dbInfo=c,c.serializer=Va,va.resolve()):va.reject()}function ia(a){var b=this,c=b.ready().then(function(){for(var a=b._dbInfo.keyPrefix,c=localStorage.length-1;c>=0;c--){var d=localStorage.key(c);0===d.indexOf(a)&&localStorage.removeItem(d)}});return h(c,a),c}function ja(a,b){var c=this;a=j(a);var d=c.ready().then(function(){var b=c._dbInfo,d=localStorage.getItem(b.keyPrefix+a);return d&&(d=b.serializer.deserialize(d)),d});return h(d,b),d}function ka(a,b){var c=this,d=c.ready().then(function(){for(var b=c._dbInfo,d=b.keyPrefix,e=d.length,f=localStorage.length,g=1,h=0;h<f;h++){var i=localStorage.key(h);if(0===i.indexOf(d)){var j=localStorage.getItem(i);if(j&&(j=b.serializer.deserialize(j)),void 0!==(j=a(j,i.substring(e),g++)))return j}}});return h(d,b),d}function la(a,b){var c=this,d=c.ready().then(function(){var b,d=c._dbInfo;try{b=localStorage.key(a)}catch(a){b=null}return b&&(b=b.substring(d.keyPrefix.length)),b});return h(d,b),d}function ma(a){var b=this,c=b.ready().then(function(){for(var a=b._dbInfo,c=localStorage.length,d=[],e=0;e<c;e++){var f=localStorage.key(e);0===f.indexOf(a.keyPrefix)&&d.push(f.substring(a.keyPrefix.length))}return d});return h(c,a),c}function na(a){var b=this,c=b.keys().then(function(a){return a.length});return h(c,a),c}function oa(a,b){var c=this;a=j(a);var d=c.ready().then(function(){var b=c._dbInfo;localStorage.removeItem(b.keyPrefix+a)});return h(d,b),d}function pa(a,b,c){var d=this;a=j(a);var e=d.ready().then(function(){void 0===b&&(b=null);var c=b;return new va(function(e,f){var g=d._dbInfo;g.serializer.serialize(b,function(b,d){if(d)f(d);else try{localStorage.setItem(g.keyPrefix+a,b),e(c)}catch(a){"QuotaExceededError"!==a.name&&"NS_ERROR_DOM_QUOTA_REACHED"!==a.name||f(a),f(a)}})})});return h(e,c),e}function qa(a,b){if(b=k.apply(this,arguments),a="function"!=typeof a&&a||{},!a.name){var c=this.config();a.name=a.name||c.name,a.storeName=a.storeName||c.storeName}var d,e=this;return d=a.name?new va(function(b){b(a.storeName?ea(a,e._defaultConfig):a.name+"/")}).then(function(a){for(var b=localStorage.length-1;b>=0;b--){var c=localStorage.key(b);0===c.indexOf(a)&&localStorage.removeItem(c)}}):va.reject("Invalid arguments"),h(d,b),d}function ra(a,b){a[b]=function(){var c=arguments;return a.ready().then(function(){return a[b].apply(a,c)})}}function sa(){for(var a=1;a<arguments.length;a++){var b=arguments[a];if(b)for(var c in b)b.hasOwnProperty(c)&&($a(b[c])?arguments[0][c]=b[c].slice():arguments[0][c]=b[c])}return arguments[0]}var ta="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},ua=e();"undefined"==typeof Promise&&a(3);var va=Promise,wa="local-forage-detect-blob-support",xa=void 0,ya={},za=Object.prototype.toString,Aa="readonly",Ba="readwrite",Ca={_driver:"asyncStorage",_initStorage:C,_support:f(),iterate:E,getItem:D,setItem:F,removeItem:G,clear:H,length:I,key:J,keys:K,dropInstance:L},Da="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",Ea="~~local_forage_type~",Fa=/^~~local_forage_type~([^~]+)~/,Ga="__lfsc__:",Ha=Ga.length,Ia="arbf",Ja="blob",Ka="si08",La="ui08",Ma="uic8",Na="si16",Oa="si32",Pa="ur16",Qa="ui32",Ra="fl32",Sa="fl64",Ta=Ha+Ia.length,Ua=Object.prototype.toString,Va={serialize:P,deserialize:Q,stringToBuffer:N,bufferToString:O},Wa={_driver:"webSQLStorage",_initStorage:S,_support:M(),iterate:V,getItem:U,setItem:X,removeItem:Y,clear:Z,length:$,key:_,keys:aa,dropInstance:ca},Xa={_driver:"localStorageWrapper",_initStorage:ha,_support:da(),iterate:ka,getItem:ja,setItem:pa,removeItem:oa,clear:ia,length:na,key:la,keys:ma,dropInstance:qa},Ya=function(a,b){return a===b||"number"==typeof a&&"number"==typeof b&&isNaN(a)&&isNaN(b)},Za=function(a,b){for(var c=a.length,d=0;d<c;){if(Ya(a[d],b))return!0;d++}return!1},$a=Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)},_a={},ab={},bb={INDEXEDDB:Ca,WEBSQL:Wa,LOCALSTORAGE:Xa},cb=[bb.INDEXEDDB._driver,bb.WEBSQL._driver,bb.LOCALSTORAGE._driver],db=["dropInstance"],eb=["clear","getItem","iterate","key","keys","length","removeItem","setItem"].concat(db),fb={description:"",driver:cb.slice(),name:"localforage",size:4980736,storeName:"keyvaluepairs",version:1},gb=function(){function a(b){d(this,a);for(var c in bb)if(bb.hasOwnProperty(c)){var e=bb[c],f=e._driver;this[c]=f,_a[f]||this.defineDriver(e)}this._defaultConfig=sa({},fb),this._config=sa({},this._defaultConfig,b),this._driverSet=null,this._initDriver=null,this._ready=!1,this._dbInfo=null,this._wrapLibraryMethodsWithReady(),this.setDriver(this._config.driver).catch(function(){})}return a.prototype.config=function(a){if("object"===(void 0===a?"undefined":ta(a))){if(this._ready)return new Error("Can't call config() after localforage has been used.");for(var b in a){if("storeName"===b&&(a[b]=a[b].replace(/\W/g,"_")),"version"===b&&"number"!=typeof a[b])return new Error("Database version must be a number.");this._config[b]=a[b]}return!("driver"in a&&a.driver)||this.setDriver(this._config.driver)}return"string"==typeof a?this._config[a]:this._config},a.prototype.defineDriver=function(a,b,c){var d=new va(function(b,c){try{var d=a._driver,e=new Error("Custom driver not compliant; see https://mozilla.github.io/localForage/#definedriver");if(!a._driver)return void c(e);for(var f=eb.concat("_initStorage"),g=0,i=f.length;g<i;g++){var j=f[g];if((!Za(db,j)||a[j])&&"function"!=typeof a[j])return void c(e)}(function(){for(var b=function(a){return function(){var b=new Error("Method "+a+" is not implemented by the current driver"),c=va.reject(b);return h(c,arguments[arguments.length-1]),c}},c=0,d=db.length;c<d;c++){var e=db[c];a[e]||(a[e]=b(e))}})();var k=function(c){_a[d]&&console.info("Redefining LocalForage driver: "+d),_a[d]=a,ab[d]=c,b()};"_support"in a?a._support&&"function"==typeof a._support?a._support().then(k,c):k(!!a._support):k(!0)}catch(a){c(a)}});return i(d,b,c),d},a.prototype.driver=function(){return this._driver||null},a.prototype.getDriver=function(a,b,c){var d=_a[a]?va.resolve(_a[a]):va.reject(new Error("Driver not found."));return i(d,b,c),d},a.prototype.getSerializer=function(a){var b=va.resolve(Va);return i(b,a),b},a.prototype.ready=function(a){var b=this,c=b._driverSet.then(function(){return null===b._ready&&(b._ready=b._initDriver()),b._ready});return i(c,a,a),c},a.prototype.setDriver=function(a,b,c){function d(){g._config.driver=g.driver()}function e(a){return g._extend(a),d(),g._ready=g._initStorage(g._config),g._ready}function f(a){return function(){function b(){for(;c<a.length;){var f=a[c];return c++,g._dbInfo=null,g._ready=null,g.getDriver(f).then(e).catch(b)}d();var h=new Error("No available storage method found.");return g._driverSet=va.reject(h),g._driverSet}var c=0;return b()}}var g=this;$a(a)||(a=[a]);var h=this._getSupportedDrivers(a),j=null!==this._driverSet?this._driverSet.catch(function(){return va.resolve()}):va.resolve();return this._driverSet=j.then(function(){var a=h[0];return g._dbInfo=null,g._ready=null,g.getDriver(a).then(function(a){g._driver=a._driver,d(),g._wrapLibraryMethodsWithReady(),g._initDriver=f(h)})}).catch(function(){d();var a=new Error("No available storage method found.");return g._driverSet=va.reject(a),g._driverSet}),i(this._driverSet,b,c),this._driverSet},a.prototype.supports=function(a){return!!ab[a]},a.prototype._extend=function(a){sa(this,a)},a.prototype._getSupportedDrivers=function(a){for(var b=[],c=0,d=a.length;c<d;c++){var e=a[c];this.supports(e)&&b.push(e)}return b},a.prototype._wrapLibraryMethodsWithReady=function(){for(var a=0,b=eb.length;a<b;a++)ra(this,eb[a])},a.prototype.createInstance=function(b){return new a(b)},a}(),hb=new gb;b.exports=hb},{3:3}]},{},[4])(4)}); \ No newline at end of file
diff --git a/assets/logo-display.png b/assets/logo-display.png
new file mode 100644
index 0000000..90a52eb
--- /dev/null
+++ b/assets/logo-display.png
Binary files differ
diff --git a/assets/logo-display.svg b/assets/logo-display.svg
new file mode 100644
index 0000000..bfa41b2
--- /dev/null
+++ b/assets/logo-display.svg
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 27.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#79C2F6;}
+ .st1{fill:#49008D;}
+ .st2{fill:#FE6972;}
+ .st3{fill:#D200AB;}
+ .st4{fill:#FD6872;}
+ .st5{fill:#FD6774;}
+ .st6{fill:#48426B;}
+ .st7{fill:#4D426A;}
+ .st8{fill:#4B4168;}
+</style>
+<path class="st0" d="M427,512H85c-46.94,0-85-38.06-85-85L0,85C0,38.06,38.06,0,85,0l342,0c46.94,0,85,38.06,85,85v342
+ C512,473.94,473.94,512,427,512z"/>
+<g>
+ <path class="st1" d="M281.63,222.68c13.9-18.51,28.16-36.7,45.6-52.1c15.57-13.74,32.28-25.55,52.97-30.4
+ c7.16-1.68,14.34-1.92,21.57-0.42c10.59,2.21,17.55,9.86,18.84,20.59c1.07,8.92-0.61,17.59-2.45,26.21
+ c-5.54,25.88-11.3,51.71-22.15,76.04c-3.36,7.52-7.29,14.78-12.99,20.87c-3.66,3.9-7.7,7.27-13.02,8.68
+ c-2.09,2.82-4.57,1.57-6.83,0.46c-19.4-9.57-40.36-10.51-61.37-11.09c-4.5-0.12-9.01-0.1-13.52,0.01
+ c-2.45,0.06-4.67-0.46-6.47-2.27c-1.65-1.85-2.32-4.19-2.48-6.49c-0.61-8.5-3.72-16.39-5.74-24.54c-1.15-4.66-1.14-8.85,2.15-12.69
+ c1.85-2.16,2.3-4.93,2.82-7.63C278.96,225.81,279.19,223.6,281.63,222.68z"/>
+ <path class="st1" d="M131.67,294.79c-4.4-2.11-8.67-4.38-11.32-8.76c-8.45-11.8-15-24.6-20.13-38.16
+ c-4.3-11.36-7.68-22.98-9.84-34.93c-1.53-8.47-3.33-16.9-5.78-25.12c-2.73-9.18-3.47-18.28-1.9-27.65
+ c2.31-9.82,9.52-13.94,18.59-15.48c14.63-2.48,28.44,0.54,41.66,6.9c20.29,9.77,36.79,24.41,52.12,40.54
+ c9.46,9.95,17.77,20.88,26.47,31.48c0.19,0.02,0.54,0.01,0.56,0.08c2.49,9.52,12.62,16.89,7.4,28.67
+ c-2.34,5.28-3.49,11.15-4.01,17.06c-0.28,3.24-0.39,6.7-2.83,9.38c-2.63,2.55-5.96,2.55-9.3,2.6c-18.55,0.26-37,1.42-55.04,6.16
+ c-6.62,1.74-12.81,4.63-19.13,7.15C136.74,295.68,134.2,297.42,131.67,294.79z"/>
+ <path class="st2" d="M221.8,277.72c1.09-10.87,2.8-21.61,7.29-31.7c0.55-1.24,1.56-2.76,0.15-3.71c-6.79-4.55-6.51-11.9-7.69-18.69
+ c3.57-7.61,6.51-15.64,14.14-20.49c1.49-0.95,1.36-2.57,0.95-4.25c-4.4-18.06-12.28-34.27-25.16-47.88
+ c-3.04-3.21-6.39-5.32-11.02-6c-9.66-1.4-15.41-9.02-14.92-18.76c0.34-6.63,5.63-10.21,11.95-7.89
+ c7.02,2.58,11.35,7.75,12.62,15.04c1.02,5.87,3.8,10.34,7.89,14.6c12.37,12.84,20.42,28.22,24.75,45.46
+ c1.19,4.74,3.16,6.89,8.13,5.47c1.09-0.31,2.39-0.32,3.5-0.07c4.37,1,5.79-1.14,6.57-5.11c3.49-17.68,10.87-33.56,23.26-46.77
+ c3.93-4.19,6.85-8.17,8.16-14.19c1.66-7.63,7.52-12.67,15.65-14.22c4.37-0.83,8.48-0.26,11,3.64c2.65,4.1,1.73,8.42-1.25,12.03
+ c-4.77,5.79-10.85,9.7-18.38,10.68c-2.97,0.38-5.1,1.56-7.05,3.66c-13.54,14.54-20.78,32.09-24.73,51.24
+ c-0.41,2.01-0.27,4.01,1.51,5.36c5.98,4.55,9.17,11.07,12.51,17.49c-0.47,6.28-1.06,12.49-5.85,17.34
+ c-1.23,1.24-1.02,2.85-0.55,4.43c3.47,11.45,6.12,23.1,8.3,34.86c3.73,4.21,3.13,9.59,3.49,14.52c1.24,17.12-1.3,33.87-6.05,50.32
+ c-0.44,1.52-0.9,3.03-2.59,3.66c-2.1,1.12-2.48,3.42-3.55,5.23c-2.09,3.53-4.23,7.01-7.13,9.97c-8.83,9.04-18.82,9.1-27.55-0.04
+ c-3.22-3.37-6.08-7.1-9.1-10.66c-2.92-0.93-3.28-3.61-4.1-5.98c-6.7-19.46-8.91-39.5-8.17-59.99
+ C218.92,282.97,220.11,280.35,221.8,277.72z"/>
+ <path class="st3" d="M221.8,277.72c-1.55,25.44,0.95,50.37,9.26,74.59c-1.99,11.8-3.82,23.59-10.35,34.07
+ c-7.11,11.41-17.32,16.64-30.58,16.13c-9.4-0.37-14.44-4.42-16.81-13.48c-2.59-9.92-3.81-20.01-3.33-30.28
+ c0.41-8.81,0.36-8.86-7.99-5.23c-8.12,3.52-16.47,6.3-25.13,8.18c-4.28,0.93-8.55,1.1-12.84,0.16
+ c-10.19-2.25-15.83-10.02-14.06-20.33c3.01-17.48,9.24-33.57,21.68-46.73c7.64-2.91,15.15-6.24,22.95-8.63
+ c19.45-5.96,39.52-7.41,59.75-7.42C216.89,278.73,219.47,279.14,221.8,277.72z"/>
+ <path class="st3" d="M278.39,347.81c0.16-2.13-0.06-4.38,0.55-6.37c5.97-19.43,7.01-39.19,4.3-59.25c-0.13-0.93,0.19-1.92,0.3-2.88
+ c22.13-0.9,44.11-0.35,65.78,5.07c7.25,1.81,13.38,6.28,20.67,7.79c3.6,5.59,8.96,9.75,12.41,15.52
+ c4.67,7.82,8.56,15.92,9.93,24.96c2.25,14.87-6.15,24.04-21.05,23.02c-10.48-0.72-20.38-3.82-29.91-8.16
+ c-5.8-2.64-5.66-2.67-5.33,3.5c0.54,10.18,0.89,20.33-1.12,30.46c-1.69,8.52-7.08,12.87-15.15,14.19
+ c-9.27,1.51-17.42-0.9-24.22-7.65C284.35,376.9,279.62,363.12,278.39,347.81z"/>
+ <path class="st3" d="M356.69,256.64c-9.32,2.05-21.03,1.65-32.76,0.56c-3.27-0.31-4.93-1.99-5.11-5.26
+ c-0.82-15.35-0.04-30.54,5.18-45.18c2.64-7.39,8.4-11.07,15.95-12.15c5.3-0.75,10.09,2.48,11.68,7.65c1.3,4.24,0.8,8.49,0.26,12.8
+ c-0.99,8-0.89,8.02,6.74,5.99c3.6-0.96,7.17-1.92,10.96-1.82c7.82,0.21,11.79,4.81,10.74,12.59
+ C378.9,242.48,369.4,253.24,356.69,256.64z"/>
+ <path class="st4" d="M367.18,196.96c-2.51-9.58,4.72-22.51,14.23-25.42c6.54-2,11.81,1.12,13.15,7.79
+ c1.9,9.43-5.58,21.9-14.81,24.71C373.78,205.85,368.77,203.03,367.18,196.96z"/>
+ <path class="st3" d="M180.35,219.06c2.43,11.62,3.75,23.44,2.91,35.48c-0.24,3.39-1.69,4.99-4.95,5.29
+ c-10.73,1-21.45,2.25-32.22,0.43c-12.42-2.1-23.27-13.26-24.88-25.75c-0.85-6.54,3.28-11.1,10.58-10.93
+ c4.46,0.1,9.01,0.76,13.31,1.94c4.07,1.12,5.02,0,4.5-3.83c-0.52-3.87-1.21-7.8-1.07-11.67c0.38-10.02,8.12-14.55,17.6-10.79
+ C175.13,202.8,177.6,210.91,180.35,219.06z"/>
+ <path class="st5" d="M134.84,193.65c0.35,1.19,0.7,4.06,0.05,7.03c-1.47,6.76-7.43,9.96-13.87,7.39
+ c-7.75-3.09-14.39-13.08-14.23-21.4c0.19-9.45,8.16-13.94,16.41-9.21C128.93,180.75,132.68,185.58,134.84,193.65z"/>
+ <path class="st6" d="M268.28,304.04c0.35,1.11,0.22,2.04-0.58,2.77c-1.05,0.95-2.21,0.78-3.18-0.04
+ c-7.25-6.07-14.33-4.77-21.43,0.31c-1.15,0.83-2.54,1.19-3.69-0.14c-0.92-1.06-0.54-2.1,0.11-3.2c4.61-7.77,23.66-8.22,28.27-0.64
+ C267.98,303.44,268.14,303.79,268.28,304.04z"/>
+ <path class="st7" d="M250.87,274.88c4.94-1.08,9.31,0.92,12.89,5.04c0.93,1.07,1.67,2.42,0.72,3.7c-1.12,1.52-2.35,0.63-3.45-0.31
+ c-5.11-4.37-10.15-4.29-15.15,0.2c-1.01,0.9-2.21,2.12-3.51,0.89c-1.37-1.3-0.68-2.87,0.34-4.19
+ C244.66,277.67,247.15,275.89,250.87,274.88z"/>
+ <path class="st8" d="M265.33,328.25c0.25,1.23,0.45,2.22-0.49,2.92c-0.97,0.72-1.92,0.31-2.64-0.37
+ c-5.57-5.27-10.85-4.21-16.01,0.65c-0.72,0.68-1.66,1.11-2.67,0.56c-1.02-0.55-1.06-1.52-0.85-2.53c0.66-3.28,7.15-7.5,11.75-7.49
+ C259.31,322.01,263.02,324.16,265.33,328.25z"/>
+</g>
+</svg>
diff --git a/assets/logo-round.svg b/assets/logo-round.svg
new file mode 100644
index 0000000..3917ccd
--- /dev/null
+++ b/assets/logo-round.svg
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 27.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#79C2F6;}
+ .st1{fill:#49008D;}
+ .st2{fill:#FE6972;}
+ .st3{fill:#D200AB;}
+ .st4{fill:#FD6872;}
+ .st5{fill:#FD6774;}
+ .st6{fill:#48426B;}
+ .st7{fill:#4D426A;}
+ .st8{fill:#4B4168;}
+</style>
+<path class="st0" d="M256,512L256,512C114.61,512,0,397.39,0,256l0,0C0,114.61,114.61,0,256,0h0c141.38,0,256,114.61,256,256v0
+ C512,397.39,397.39,512,256,512z"/>
+<g>
+ <path class="st1" d="M281.63,222.68c13.9-18.51,28.16-36.7,45.6-52.1c15.57-13.74,32.28-25.55,52.97-30.4
+ c7.16-1.68,14.34-1.92,21.57-0.42c10.59,2.21,17.55,9.86,18.84,20.59c1.07,8.92-0.61,17.59-2.45,26.21
+ c-5.54,25.88-11.3,51.71-22.15,76.04c-3.36,7.52-7.29,14.78-12.99,20.87c-3.66,3.9-7.7,7.27-13.02,8.68
+ c-2.09,2.82-4.57,1.57-6.83,0.46c-19.4-9.57-40.36-10.51-61.37-11.09c-4.5-0.12-9.01-0.1-13.52,0.01
+ c-2.45,0.06-4.67-0.46-6.47-2.27c-1.65-1.85-2.32-4.19-2.48-6.49c-0.61-8.5-3.72-16.39-5.74-24.54c-1.15-4.66-1.14-8.85,2.15-12.69
+ c1.85-2.16,2.3-4.93,2.82-7.63C278.96,225.81,279.19,223.6,281.63,222.68z"/>
+ <path class="st1" d="M131.67,294.79c-4.4-2.11-8.67-4.38-11.32-8.76c-8.45-11.8-15-24.6-20.13-38.16
+ c-4.3-11.36-7.68-22.98-9.84-34.93c-1.53-8.47-3.33-16.9-5.78-25.12c-2.73-9.18-3.47-18.28-1.9-27.65
+ c2.31-9.82,9.52-13.94,18.59-15.48c14.63-2.48,28.44,0.54,41.66,6.9c20.29,9.77,36.79,24.41,52.12,40.54
+ c9.46,9.95,17.77,20.88,26.47,31.48c0.19,0.02,0.54,0.01,0.56,0.08c2.49,9.52,12.62,16.89,7.4,28.67
+ c-2.34,5.28-3.49,11.15-4.01,17.06c-0.28,3.24-0.39,6.7-2.83,9.38c-2.63,2.55-5.96,2.55-9.3,2.6c-18.55,0.26-37,1.42-55.04,6.16
+ c-6.62,1.74-12.81,4.63-19.13,7.15C136.74,295.68,134.2,297.42,131.67,294.79z"/>
+ <path class="st2" d="M221.8,277.72c1.09-10.87,2.8-21.61,7.29-31.7c0.55-1.24,1.56-2.76,0.15-3.71c-6.79-4.55-6.51-11.9-7.69-18.69
+ c3.57-7.61,6.51-15.64,14.14-20.49c1.49-0.95,1.36-2.57,0.95-4.25c-4.4-18.06-12.28-34.27-25.16-47.88
+ c-3.04-3.21-6.39-5.32-11.02-6c-9.66-1.4-15.41-9.02-14.92-18.76c0.34-6.63,5.63-10.21,11.95-7.89
+ c7.02,2.58,11.35,7.75,12.62,15.04c1.02,5.87,3.8,10.34,7.89,14.6c12.37,12.84,20.42,28.22,24.75,45.46
+ c1.19,4.74,3.16,6.89,8.13,5.47c1.09-0.31,2.39-0.32,3.5-0.07c4.37,1,5.79-1.14,6.57-5.11c3.49-17.68,10.87-33.56,23.26-46.77
+ c3.93-4.19,6.85-8.17,8.16-14.19c1.66-7.63,7.52-12.67,15.65-14.22c4.37-0.83,8.48-0.26,11,3.64c2.65,4.1,1.73,8.42-1.25,12.03
+ c-4.77,5.79-10.85,9.7-18.38,10.68c-2.97,0.38-5.1,1.56-7.05,3.66c-13.54,14.54-20.78,32.09-24.73,51.24
+ c-0.41,2.01-0.27,4.01,1.51,5.36c5.98,4.55,9.17,11.07,12.51,17.49c-0.47,6.28-1.06,12.49-5.85,17.34
+ c-1.23,1.24-1.02,2.85-0.55,4.43c3.47,11.45,6.12,23.1,8.3,34.86c3.73,4.21,3.13,9.59,3.49,14.52c1.24,17.12-1.3,33.87-6.05,50.32
+ c-0.44,1.52-0.9,3.03-2.59,3.66c-2.1,1.12-2.48,3.42-3.55,5.23c-2.09,3.53-4.23,7.01-7.13,9.97c-8.83,9.04-18.82,9.1-27.55-0.04
+ c-3.22-3.37-6.08-7.1-9.1-10.66c-2.92-0.93-3.28-3.61-4.1-5.98c-6.7-19.46-8.91-39.5-8.17-59.99
+ C218.92,282.97,220.11,280.35,221.8,277.72z"/>
+ <path class="st3" d="M221.8,277.72c-1.55,25.44,0.95,50.37,9.26,74.59c-1.99,11.8-3.82,23.59-10.35,34.07
+ c-7.11,11.41-17.32,16.64-30.58,16.13c-9.4-0.37-14.44-4.42-16.81-13.48c-2.59-9.92-3.81-20.01-3.33-30.28
+ c0.41-8.81,0.36-8.86-7.99-5.23c-8.12,3.52-16.47,6.3-25.13,8.18c-4.28,0.93-8.55,1.1-12.84,0.16
+ c-10.19-2.25-15.83-10.02-14.06-20.33c3.01-17.48,9.24-33.57,21.68-46.73c7.64-2.91,15.15-6.24,22.95-8.63
+ c19.45-5.96,39.52-7.41,59.75-7.42C216.89,278.73,219.47,279.14,221.8,277.72z"/>
+ <path class="st3" d="M278.39,347.81c0.16-2.13-0.06-4.38,0.55-6.37c5.97-19.43,7.01-39.19,4.3-59.25c-0.13-0.93,0.19-1.92,0.3-2.88
+ c22.13-0.9,44.11-0.35,65.78,5.07c7.25,1.81,13.38,6.28,20.67,7.79c3.6,5.59,8.96,9.75,12.41,15.52
+ c4.67,7.82,8.56,15.92,9.93,24.96c2.25,14.87-6.15,24.04-21.05,23.02c-10.48-0.72-20.38-3.82-29.91-8.16
+ c-5.8-2.64-5.66-2.67-5.33,3.5c0.54,10.18,0.89,20.33-1.12,30.46c-1.69,8.52-7.08,12.87-15.15,14.19
+ c-9.27,1.51-17.42-0.9-24.22-7.65C284.35,376.9,279.62,363.12,278.39,347.81z"/>
+ <path class="st3" d="M356.69,256.64c-9.32,2.05-21.03,1.65-32.76,0.56c-3.27-0.31-4.93-1.99-5.11-5.26
+ c-0.82-15.35-0.04-30.54,5.18-45.18c2.64-7.39,8.4-11.07,15.95-12.15c5.3-0.75,10.09,2.48,11.68,7.65c1.3,4.24,0.8,8.49,0.26,12.8
+ c-0.99,8-0.89,8.02,6.74,5.99c3.6-0.96,7.17-1.92,10.96-1.82c7.82,0.21,11.79,4.81,10.74,12.59
+ C378.9,242.48,369.4,253.24,356.69,256.64z"/>
+ <path class="st4" d="M367.18,196.96c-2.51-9.58,4.72-22.51,14.23-25.42c6.54-2,11.81,1.12,13.15,7.79
+ c1.9,9.43-5.58,21.9-14.81,24.71C373.78,205.85,368.77,203.03,367.18,196.96z"/>
+ <path class="st3" d="M180.35,219.06c2.43,11.62,3.75,23.44,2.91,35.48c-0.24,3.39-1.69,4.99-4.95,5.29
+ c-10.73,1-21.45,2.25-32.22,0.43c-12.42-2.1-23.27-13.26-24.88-25.75c-0.85-6.54,3.28-11.1,10.58-10.93
+ c4.46,0.1,9.01,0.76,13.31,1.94c4.07,1.12,5.02,0,4.5-3.83c-0.52-3.87-1.21-7.8-1.07-11.67c0.38-10.02,8.12-14.55,17.6-10.79
+ C175.13,202.8,177.6,210.91,180.35,219.06z"/>
+ <path class="st5" d="M134.84,193.65c0.35,1.19,0.7,4.06,0.05,7.03c-1.47,6.76-7.43,9.96-13.87,7.39
+ c-7.75-3.09-14.39-13.08-14.23-21.4c0.19-9.45,8.16-13.94,16.41-9.21C128.93,180.75,132.68,185.58,134.84,193.65z"/>
+ <path class="st6" d="M268.28,304.04c0.35,1.11,0.22,2.04-0.58,2.77c-1.05,0.95-2.21,0.78-3.18-0.04
+ c-7.25-6.07-14.33-4.77-21.43,0.31c-1.15,0.83-2.54,1.19-3.69-0.14c-0.92-1.06-0.54-2.1,0.11-3.2c4.61-7.77,23.66-8.22,28.27-0.64
+ C267.98,303.44,268.14,303.79,268.28,304.04z"/>
+ <path class="st7" d="M250.87,274.88c4.94-1.08,9.31,0.92,12.89,5.04c0.93,1.07,1.67,2.42,0.72,3.7c-1.12,1.52-2.35,0.63-3.45-0.31
+ c-5.11-4.37-10.15-4.29-15.15,0.2c-1.01,0.9-2.21,2.12-3.51,0.89c-1.37-1.3-0.68-2.87,0.34-4.19
+ C244.66,277.67,247.15,275.89,250.87,274.88z"/>
+ <path class="st8" d="M265.33,328.25c0.25,1.23,0.45,2.22-0.49,2.92c-0.97,0.72-1.92,0.31-2.64-0.37
+ c-5.57-5.27-10.85-4.21-16.01,0.65c-0.72,0.68-1.66,1.11-2.67,0.56c-1.02-0.55-1.06-1.52-0.85-2.53c0.66-3.28,7.15-7.5,11.75-7.49
+ C259.31,322.01,263.02,324.16,265.33,328.25z"/>
+</g>
+</svg>
diff --git a/assets/logo-transparent.svg b/assets/logo-transparent.svg
new file mode 100644
index 0000000..734922c
--- /dev/null
+++ b/assets/logo-transparent.svg
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 27.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#49008D;}
+ .st1{fill:#FE6972;}
+ .st2{fill:#D200AB;}
+ .st3{fill:#FD6872;}
+ .st4{fill:#FD6774;}
+ .st5{fill:#48426B;}
+ .st6{fill:#4D426A;}
+ .st7{fill:#4B4168;}
+</style>
+<g>
+ <path class="st0" d="M281.6,222.7c13.9-18.5,28.2-36.7,45.6-52.1c15.6-13.7,32.3-25.6,53-30.4c7.2-1.7,14.3-1.9,21.6-0.4
+ c10.6,2.2,17.5,9.9,18.8,20.6c1.1,8.9-0.6,17.6-2.5,26.2c-5.5,25.9-11.3,51.7-22.1,76c-3.4,7.5-7.3,14.8-13,20.9
+ c-3.7,3.9-7.7,7.3-13,8.7c-2.1,2.8-4.6,1.6-6.8,0.5c-19.4-9.6-40.4-10.5-61.4-11.1c-4.5-0.1-9-0.1-13.5,0c-2.5,0.1-4.7-0.5-6.5-2.3
+ c-1.6-1.9-2.3-4.2-2.5-6.5c-0.6-8.5-3.7-16.4-5.7-24.5c-1.1-4.7-1.1-8.9,2.1-12.7c1.9-2.2,2.3-4.9,2.8-7.6
+ C279,225.8,279.2,223.6,281.6,222.7z"/>
+ <path class="st0" d="M131.7,294.8c-4.4-2.1-8.7-4.4-11.3-8.8c-8.4-11.8-15-24.6-20.1-38.2c-4.3-11.4-7.7-23-9.8-34.9
+ c-1.5-8.5-3.3-16.9-5.8-25.1c-2.7-9.2-3.5-18.3-1.9-27.6c2.3-9.8,9.5-13.9,18.6-15.5c14.6-2.5,28.4,0.5,41.7,6.9
+ c20.3,9.8,36.8,24.4,52.1,40.5c9.5,9.9,17.8,20.9,26.5,31.5c0.2,0,0.5,0,0.6,0.1c2.5,9.5,12.6,16.9,7.4,28.7
+ c-2.3,5.3-3.5,11.2-4,17.1c-0.3,3.2-0.4,6.7-2.8,9.4c-2.6,2.5-6,2.5-9.3,2.6c-18.6,0.3-37,1.4-55,6.2c-6.6,1.7-12.8,4.6-19.1,7.1
+ C136.7,295.7,134.2,297.4,131.7,294.8z"/>
+ <path class="st1" d="M221.8,277.7c1.1-10.9,2.8-21.6,7.3-31.7c0.6-1.2,1.6-2.8,0.1-3.7c-6.8-4.6-6.5-11.9-7.7-18.7
+ c3.6-7.6,6.5-15.6,14.1-20.5c1.5-0.9,1.4-2.6,0.9-4.2c-4.4-18.1-12.3-34.3-25.2-47.9c-3-3.2-6.4-5.3-11-6
+ c-9.7-1.4-15.4-9-14.9-18.8c0.3-6.6,5.6-10.2,11.9-7.9c7,2.6,11.4,7.8,12.6,15c1,5.9,3.8,10.3,7.9,14.6
+ c12.4,12.8,20.4,28.2,24.8,45.5c1.2,4.7,3.2,6.9,8.1,5.5c1.1-0.3,2.4-0.3,3.5-0.1c4.4,1,5.8-1.1,6.6-5.1
+ c3.5-17.7,10.9-33.6,23.3-46.8c3.9-4.2,6.9-8.2,8.2-14.2c1.7-7.6,7.5-12.7,15.6-14.2c4.4-0.8,8.5-0.3,11,3.6
+ c2.6,4.1,1.7,8.4-1.2,12c-4.8,5.8-10.9,9.7-18.4,10.7c-3,0.4-5.1,1.6-7,3.7c-13.5,14.5-20.8,32.1-24.7,51.2c-0.4,2-0.3,4,1.5,5.4
+ c6,4.6,9.2,11.1,12.5,17.5c-0.5,6.3-1.1,12.5-5.9,17.3c-1.2,1.2-1,2.9-0.5,4.4c3.5,11.4,6.1,23.1,8.3,34.9
+ c3.7,4.2,3.1,9.6,3.5,14.5c1.2,17.1-1.3,33.9-6,50.3c-0.4,1.5-0.9,3-2.6,3.7c-2.1,1.1-2.5,3.4-3.5,5.2c-2.1,3.5-4.2,7-7.1,10
+ c-8.8,9-18.8,9.1-27.6,0c-3.2-3.4-6.1-7.1-9.1-10.7c-2.9-0.9-3.3-3.6-4.1-6c-6.7-19.5-8.9-39.5-8.2-60
+ C218.9,283,220.1,280.4,221.8,277.7z"/>
+ <path class="st2" d="M221.8,277.7c-1.6,25.4,0.9,50.4,9.3,74.6c-2,11.8-3.8,23.6-10.4,34.1c-7.1,11.4-17.3,16.6-30.6,16.1
+ c-9.4-0.4-14.4-4.4-16.8-13.5c-2.6-9.9-3.8-20-3.3-30.3c0.4-8.8,0.4-8.9-8-5.2c-8.1,3.5-16.5,6.3-25.1,8.2
+ c-4.3,0.9-8.6,1.1-12.8,0.2c-10.2-2.2-15.8-10-14.1-20.3c3-17.5,9.2-33.6,21.7-46.7c7.6-2.9,15.1-6.2,22.9-8.6
+ c19.4-6,39.5-7.4,59.8-7.4C216.9,278.7,219.5,279.1,221.8,277.7z"/>
+ <path class="st2" d="M278.4,347.8c0.2-2.1-0.1-4.4,0.5-6.4c6-19.4,7-39.2,4.3-59.2c-0.1-0.9,0.2-1.9,0.3-2.9
+ c22.1-0.9,44.1-0.4,65.8,5.1c7.2,1.8,13.4,6.3,20.7,7.8c3.6,5.6,9,9.8,12.4,15.5c4.7,7.8,8.6,15.9,9.9,25c2.2,14.9-6.1,24-21,23
+ c-10.5-0.7-20.4-3.8-29.9-8.2c-5.8-2.6-5.7-2.7-5.3,3.5c0.5,10.2,0.9,20.3-1.1,30.5c-1.7,8.5-7.1,12.9-15.1,14.2
+ c-9.3,1.5-17.4-0.9-24.2-7.6C284.4,376.9,279.6,363.1,278.4,347.8z"/>
+ <path class="st2" d="M356.7,256.6c-9.3,2-21,1.6-32.8,0.6c-3.3-0.3-4.9-2-5.1-5.3c-0.8-15.4,0-30.5,5.2-45.2
+ c2.6-7.4,8.4-11.1,16-12.1c5.3-0.8,10.1,2.5,11.7,7.6c1.3,4.2,0.8,8.5,0.3,12.8c-1,8-0.9,8,6.7,6c3.6-1,7.2-1.9,11-1.8
+ c7.8,0.2,11.8,4.8,10.7,12.6C378.9,242.5,369.4,253.2,356.7,256.6z"/>
+ <path class="st3" d="M367.2,197c-2.5-9.6,4.7-22.5,14.2-25.4c6.5-2,11.8,1.1,13.1,7.8c1.9,9.4-5.6,21.9-14.8,24.7
+ C373.8,205.9,368.8,203,367.2,197z"/>
+ <path class="st2" d="M180.4,219.1c2.4,11.6,3.8,23.4,2.9,35.5c-0.2,3.4-1.7,5-4.9,5.3c-10.7,1-21.4,2.2-32.2,0.4
+ c-12.4-2.1-23.3-13.3-24.9-25.8c-0.8-6.5,3.3-11.1,10.6-10.9c4.5,0.1,9,0.8,13.3,1.9c4.1,1.1,5,0,4.5-3.8
+ c-0.5-3.9-1.2-7.8-1.1-11.7c0.4-10,8.1-14.6,17.6-10.8C175.1,202.8,177.6,210.9,180.4,219.1z"/>
+ <path class="st4" d="M134.8,193.6c0.4,1.2,0.7,4.1,0.1,7c-1.5,6.8-7.4,10-13.9,7.4c-7.8-3.1-14.4-13.1-14.2-21.4
+ c0.2-9.4,8.2-13.9,16.4-9.2C128.9,180.8,132.7,185.6,134.8,193.6z"/>
+ <path class="st5" d="M268.3,304c0.4,1.1,0.2,2-0.6,2.8c-1,1-2.2,0.8-3.2,0c-7.2-6.1-14.3-4.8-21.4,0.3c-1.1,0.8-2.5,1.2-3.7-0.1
+ c-0.9-1.1-0.5-2.1,0.1-3.2c4.6-7.8,23.7-8.2,28.3-0.6C268,303.4,268.1,303.8,268.3,304z"/>
+ <path class="st6" d="M250.9,274.9c4.9-1.1,9.3,0.9,12.9,5c0.9,1.1,1.7,2.4,0.7,3.7c-1.1,1.5-2.4,0.6-3.5-0.3
+ c-5.1-4.4-10.1-4.3-15.1,0.2c-1,0.9-2.2,2.1-3.5,0.9c-1.4-1.3-0.7-2.9,0.3-4.2C244.7,277.7,247.1,275.9,250.9,274.9z"/>
+ <path class="st7" d="M265.3,328.2c0.2,1.2,0.5,2.2-0.5,2.9c-1,0.7-1.9,0.3-2.6-0.4c-5.6-5.3-10.9-4.2-16,0.6
+ c-0.7,0.7-1.7,1.1-2.7,0.6c-1-0.5-1.1-1.5-0.9-2.5c0.7-3.3,7.1-7.5,11.8-7.5C259.3,322,263,324.2,265.3,328.2z"/>
+</g>
+</svg>
diff --git a/assets/logo.svg b/assets/logo.svg
new file mode 100644
index 0000000..aa4f35a
--- /dev/null
+++ b/assets/logo.svg
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 27.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#79C2F6;}
+ .st1{fill:#49008D;}
+ .st2{fill:#FE6972;}
+ .st3{fill:#D200AB;}
+ .st4{fill:#FD6872;}
+ .st5{fill:#FD6774;}
+ .st6{fill:#48426B;}
+ .st7{fill:#4D426A;}
+ .st8{fill:#4B4168;}
+</style>
+<rect x="0" y="0" class="st0" width="512" height="512"/>
+<g>
+ <path class="st1" d="M281.63,222.68c13.9-18.51,28.16-36.7,45.6-52.1c15.57-13.74,32.28-25.55,52.97-30.4
+ c7.16-1.68,14.34-1.92,21.57-0.42c10.59,2.21,17.55,9.86,18.84,20.59c1.07,8.92-0.61,17.59-2.45,26.21
+ c-5.54,25.88-11.3,51.71-22.15,76.04c-3.36,7.52-7.29,14.78-12.99,20.87c-3.66,3.9-7.7,7.27-13.02,8.68
+ c-2.09,2.82-4.57,1.57-6.83,0.46c-19.4-9.57-40.36-10.51-61.37-11.09c-4.5-0.12-9.01-0.1-13.52,0.01
+ c-2.45,0.06-4.67-0.46-6.47-2.27c-1.65-1.85-2.32-4.19-2.48-6.49c-0.61-8.5-3.72-16.39-5.74-24.54c-1.15-4.66-1.14-8.85,2.15-12.69
+ c1.85-2.16,2.3-4.93,2.82-7.63C278.96,225.81,279.19,223.6,281.63,222.68z"/>
+ <path class="st1" d="M131.67,294.79c-4.4-2.11-8.67-4.38-11.32-8.76c-8.45-11.8-15-24.6-20.13-38.16
+ c-4.3-11.36-7.68-22.98-9.84-34.93c-1.53-8.47-3.33-16.9-5.78-25.12c-2.73-9.18-3.47-18.28-1.9-27.65
+ c2.31-9.82,9.52-13.94,18.59-15.48c14.63-2.48,28.44,0.54,41.66,6.9c20.29,9.77,36.79,24.41,52.12,40.54
+ c9.46,9.95,17.77,20.88,26.47,31.48c0.19,0.02,0.54,0.01,0.56,0.08c2.49,9.52,12.62,16.89,7.4,28.67
+ c-2.34,5.28-3.49,11.15-4.01,17.06c-0.28,3.24-0.39,6.7-2.83,9.38c-2.63,2.55-5.96,2.55-9.3,2.6c-18.55,0.26-37,1.42-55.04,6.16
+ c-6.62,1.74-12.81,4.63-19.13,7.15C136.74,295.68,134.2,297.42,131.67,294.79z"/>
+ <path class="st2" d="M221.8,277.72c1.09-10.87,2.8-21.61,7.29-31.7c0.55-1.24,1.56-2.76,0.15-3.71c-6.79-4.55-6.51-11.9-7.69-18.69
+ c3.57-7.61,6.51-15.64,14.14-20.49c1.49-0.95,1.36-2.57,0.95-4.25c-4.4-18.06-12.28-34.27-25.16-47.88
+ c-3.04-3.21-6.39-5.32-11.02-6c-9.66-1.4-15.41-9.02-14.92-18.76c0.34-6.63,5.63-10.21,11.95-7.89
+ c7.02,2.58,11.35,7.75,12.62,15.04c1.02,5.87,3.8,10.34,7.89,14.6c12.37,12.84,20.42,28.22,24.75,45.46
+ c1.19,4.74,3.16,6.89,8.13,5.47c1.09-0.31,2.39-0.32,3.5-0.07c4.37,1,5.79-1.14,6.57-5.11c3.49-17.68,10.87-33.56,23.26-46.77
+ c3.93-4.19,6.85-8.17,8.16-14.19c1.66-7.63,7.52-12.67,15.65-14.22c4.37-0.83,8.48-0.26,11,3.64c2.65,4.1,1.73,8.42-1.25,12.03
+ c-4.77,5.79-10.85,9.7-18.38,10.68c-2.97,0.38-5.1,1.56-7.05,3.66c-13.54,14.54-20.78,32.09-24.73,51.24
+ c-0.41,2.01-0.27,4.01,1.51,5.36c5.98,4.55,9.17,11.07,12.51,17.49c-0.47,6.28-1.06,12.49-5.85,17.34
+ c-1.23,1.24-1.02,2.85-0.55,4.43c3.47,11.45,6.12,23.1,8.3,34.86c3.73,4.21,3.13,9.59,3.49,14.52c1.24,17.12-1.3,33.87-6.05,50.32
+ c-0.44,1.52-0.9,3.03-2.59,3.66c-2.1,1.12-2.48,3.42-3.55,5.23c-2.09,3.53-4.23,7.01-7.13,9.97c-8.83,9.04-18.82,9.1-27.55-0.04
+ c-3.22-3.37-6.08-7.1-9.1-10.66c-2.92-0.93-3.28-3.61-4.1-5.98c-6.7-19.46-8.91-39.5-8.17-59.99
+ C218.92,282.97,220.11,280.35,221.8,277.72z"/>
+ <path class="st3" d="M221.8,277.72c-1.55,25.44,0.95,50.37,9.26,74.59c-1.99,11.8-3.82,23.59-10.35,34.07
+ c-7.11,11.41-17.32,16.64-30.58,16.13c-9.4-0.37-14.44-4.42-16.81-13.48c-2.59-9.92-3.81-20.01-3.33-30.28
+ c0.41-8.81,0.36-8.86-7.99-5.23c-8.12,3.52-16.47,6.3-25.13,8.18c-4.28,0.93-8.55,1.1-12.84,0.16
+ c-10.19-2.25-15.83-10.02-14.06-20.33c3.01-17.48,9.24-33.57,21.68-46.73c7.64-2.91,15.15-6.24,22.95-8.63
+ c19.45-5.96,39.52-7.41,59.75-7.42C216.89,278.73,219.47,279.14,221.8,277.72z"/>
+ <path class="st3" d="M278.39,347.81c0.16-2.13-0.06-4.38,0.55-6.37c5.97-19.43,7.01-39.19,4.3-59.25c-0.13-0.93,0.19-1.92,0.3-2.88
+ c22.13-0.9,44.11-0.35,65.78,5.07c7.25,1.81,13.38,6.28,20.67,7.79c3.6,5.59,8.96,9.75,12.41,15.52
+ c4.67,7.82,8.56,15.92,9.93,24.96c2.25,14.87-6.15,24.04-21.05,23.02c-10.48-0.72-20.38-3.82-29.91-8.16
+ c-5.8-2.64-5.66-2.67-5.33,3.5c0.54,10.18,0.89,20.33-1.12,30.46c-1.69,8.52-7.08,12.87-15.15,14.19
+ c-9.27,1.51-17.42-0.9-24.22-7.65C284.35,376.9,279.62,363.12,278.39,347.81z"/>
+ <path class="st3" d="M356.69,256.64c-9.32,2.05-21.03,1.65-32.76,0.56c-3.27-0.31-4.93-1.99-5.11-5.26
+ c-0.82-15.35-0.04-30.54,5.18-45.18c2.64-7.39,8.4-11.07,15.95-12.15c5.3-0.75,10.09,2.48,11.68,7.65c1.3,4.24,0.8,8.49,0.26,12.8
+ c-0.99,8-0.89,8.02,6.74,5.99c3.6-0.96,7.17-1.92,10.96-1.82c7.82,0.21,11.79,4.81,10.74,12.59
+ C378.9,242.48,369.4,253.24,356.69,256.64z"/>
+ <path class="st4" d="M367.18,196.96c-2.51-9.58,4.72-22.51,14.23-25.42c6.54-2,11.81,1.12,13.15,7.79
+ c1.9,9.43-5.58,21.9-14.81,24.71C373.78,205.85,368.77,203.03,367.18,196.96z"/>
+ <path class="st3" d="M180.35,219.06c2.43,11.62,3.75,23.44,2.91,35.48c-0.24,3.39-1.69,4.99-4.95,5.29
+ c-10.73,1-21.45,2.25-32.22,0.43c-12.42-2.1-23.27-13.26-24.88-25.75c-0.85-6.54,3.28-11.1,10.58-10.93
+ c4.46,0.1,9.01,0.76,13.31,1.94c4.07,1.12,5.02,0,4.5-3.83c-0.52-3.87-1.21-7.8-1.07-11.67c0.38-10.02,8.12-14.55,17.6-10.79
+ C175.13,202.8,177.6,210.91,180.35,219.06z"/>
+ <path class="st5" d="M134.84,193.65c0.35,1.19,0.7,4.06,0.05,7.03c-1.47,6.76-7.43,9.96-13.87,7.39
+ c-7.75-3.09-14.39-13.08-14.23-21.4c0.19-9.45,8.16-13.94,16.41-9.21C128.93,180.75,132.68,185.58,134.84,193.65z"/>
+ <path class="st6" d="M268.28,304.04c0.35,1.11,0.22,2.04-0.58,2.77c-1.05,0.95-2.21,0.78-3.18-0.04
+ c-7.25-6.07-14.33-4.77-21.43,0.31c-1.15,0.83-2.54,1.19-3.69-0.14c-0.92-1.06-0.54-2.1,0.11-3.2c4.61-7.77,23.66-8.22,28.27-0.64
+ C267.98,303.44,268.14,303.79,268.28,304.04z"/>
+ <path class="st7" d="M250.87,274.88c4.94-1.08,9.31,0.92,12.89,5.04c0.93,1.07,1.67,2.42,0.72,3.7c-1.12,1.52-2.35,0.63-3.45-0.31
+ c-5.11-4.37-10.15-4.29-15.15,0.2c-1.01,0.9-2.21,2.12-3.51,0.89c-1.37-1.3-0.68-2.87,0.34-4.19
+ C244.66,277.67,247.15,275.89,250.87,274.88z"/>
+ <path class="st8" d="M265.33,328.25c0.25,1.23,0.45,2.22-0.49,2.92c-0.97,0.72-1.92,0.31-2.64-0.37
+ c-5.57-5.27-10.85-4.21-16.01,0.65c-0.72,0.68-1.66,1.11-2.67,0.56c-1.02-0.55-1.06-1.52-0.85-2.53c0.66-3.28,7.15-7.5,11.75-7.49
+ C259.31,322.01,263.02,324.16,265.33,328.25z"/>
+</g>
+</svg>
diff --git a/assets/native.css b/assets/native.css
new file mode 100644
index 0000000..3e361ca
--- /dev/null
+++ b/assets/native.css
@@ -0,0 +1,43 @@
+body, #player.bg-white {
+ background-color: transparent !important;
+}
+
+body.navigation-body {
+ background-color: rgba(255, 255, 255, .1) !important;
+ border-right: 1px solid rgba(0, 0, 0, .1) !important;
+ position: fixed;
+ inset: 0;
+}
+
+#navigation-gradient {
+ display: none !important;
+}
+
+#filter, .list-group-item {
+ background-color: rgba(255, 255, 255, .25) !important;
+}
+
+@media (prefers-color-scheme: dark) {
+ body, #player.bg-white {
+ background-color: transparent !important;
+ }
+
+ body.navigation-body {
+ background-color: rgba(0, 0, 0, .1) !important;
+ border-right: 1px solid rgba(255, 255, 255, .1) !important;
+ position: fixed;
+ inset: 0;
+ }
+
+ #navigation-gradient {
+ display: none !important;
+ }
+
+ #filter, .list-group-item {
+ background-color: rgba(0, 0, 0, .25) !important;
+ }
+}
+
+#lyrics-synced-fade {
+ display: none !important;
+} \ No newline at end of file
diff --git a/assets/nothing.svg b/assets/nothing.svg
new file mode 100644
index 0000000..b4601c2
--- /dev/null
+++ b/assets/nothing.svg
@@ -0,0 +1,254 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 27.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<style type="text/css">
+ .st0{display:none;fill:#231F20;}
+ .st1{display:none;fill:url(#SVGID_1_);}
+ .st2{display:none;}
+ .st3{display:inline;fill:url(#SVGID_00000165948932707136870270000013698650605504231305_);}
+ .st4{display:inline;fill:url(#SVGID_00000006706092490612205640000014196703876635517876_);}
+ .st5{display:inline;fill:url(#SVGID_00000105421661165625073140000011335077852329227433_);}
+ .st6{display:inline;fill:url(#SVGID_00000087409665362253419490000008985782800579452574_);}
+ .st7{display:inline;fill:url(#SVGID_00000141446210445068922920000012966896438362703774_);}
+ .st8{display:inline;fill:url(#SVGID_00000058557327034000861970000008492302055976198054_);}
+ .st9{display:inline;fill:url(#SVGID_00000078752425464110958260000018330588191870012817_);}
+ .st10{display:inline;fill:url(#SVGID_00000016033985761526033210000017736963579697337020_);}
+ .st11{display:inline;fill:url(#SVGID_00000035496552515850356990000008081835235917118868_);}
+ .st12{display:inline;fill:url(#SVGID_00000101087326278528009790000005178021829784114568_);}
+ .st13{display:inline;fill:url(#SVGID_00000055676141435116322590000001808160953820285874_);}
+ .st14{display:inline;fill:url(#SVGID_00000165945742536010038050000010580504813209678522_);}
+ .st15{display:none;fill:url(#SVGID_00000094609900083240362290000016436121427771157137_);}
+ .st16{opacity:0.5;enable-background:new ;}
+</style>
+<rect class="st0" width="512" height="512"/>
+<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="157.0311" y1="362.5089" x2="370.1232" y2="149.4169" gradientTransform="matrix(1 0 0 -1 0 512)">
+ <stop offset="0" style="stop-color:#B1FF3B"/>
+ <stop offset="0.0427" style="stop-color:#95FF38"/>
+ <stop offset="0.1148" style="stop-color:#6BFE33"/>
+ <stop offset="0.1886" style="stop-color:#49FE2F"/>
+ <stop offset="0.2632" style="stop-color:#2EFD2C"/>
+ <stop offset="0.3391" style="stop-color:#1BFD2A"/>
+ <stop offset="0.417" style="stop-color:#10FD28"/>
+ <stop offset="0.5" style="stop-color:#0CFD28"/>
+ <stop offset="1" style="stop-color:#3FF3F0"/>
+</linearGradient>
+<path class="st1" d="M129.96,231.29v49.53c0,7.35-5.72,13.24-13.4,13.24c-7.36,0-12.91-5.89-12.91-13.24v-49.53
+ c0-7.36,5.56-13.4,12.91-13.4C124.24,217.89,129.96,223.94,129.96,231.29z M171.64,151.04c-7.36,0-13.08,6.05-13.08,13.4v183.24
+ c0,7.36,5.72,13.24,13.08,13.24c7.52,0,13.24-5.88,13.24-13.24V164.44C184.88,157.08,179.16,151.04,171.64,151.04z M226.56,85.32
+ c-7.36,0-12.91,5.88-12.91,13.24v314.99c0,7.35,5.56,13.24,12.91,13.24c7.52,0,13.4-5.89,13.4-13.24V98.56
+ C239.97,91.21,234.08,85.32,226.56,85.32z M281.65,170.98c-7.52,0-13.08,5.88-13.08,13.24V327.9c0,7.35,5.56,13.08,13.08,13.08
+ s13.24-5.72,13.24-13.08V184.22C294.89,176.86,289.17,170.98,281.65,170.98z M336.74,121.45c-7.68,0-13.24,6.05-13.24,13.24v242.74
+ c0,7.19,5.56,13.08,13.24,13.08c7.35,0,13.08-5.88,13.08-13.08V134.69C349.81,127.5,344.09,121.45,336.74,121.45z M391.66,203.83
+ c-7.52,0-13.08,6.05-13.08,13.24v77.97c0,7.19,5.56,13.08,13.08,13.08c7.36,0,13.24-5.88,13.24-13.08v-77.97
+ C404.9,209.88,399.01,203.83,391.66,203.83z"/>
+<g class="st2">
+
+ <linearGradient id="SVGID_00000089561510513081540650000009393124060639006634_" gradientUnits="userSpaceOnUse" x1="116.805" y1="294.11" x2="116.805" y2="217.94" gradientTransform="matrix(1 0 0 -1 0 512)">
+ <stop offset="0" style="stop-color:#B1FF3B"/>
+ <stop offset="0.0427" style="stop-color:#95FF38"/>
+ <stop offset="0.1148" style="stop-color:#6BFE33"/>
+ <stop offset="0.1886" style="stop-color:#49FE2F"/>
+ <stop offset="0.2632" style="stop-color:#2EFD2C"/>
+ <stop offset="0.3391" style="stop-color:#1BFD2A"/>
+ <stop offset="0.417" style="stop-color:#10FD28"/>
+ <stop offset="0.5" style="stop-color:#0CFD28"/>
+ <stop offset="1" style="stop-color:#3FF3F0"/>
+ </linearGradient>
+ <path style="display:inline;fill:url(#SVGID_00000089561510513081540650000009393124060639006634_);" d="M129.96,231.29v49.53
+ c0,7.35-5.72,13.24-13.4,13.24c-7.36,0-12.91-5.89-12.91-13.24v-49.53c0-7.36,5.56-13.4,12.91-13.4
+ C124.24,217.89,129.96,223.94,129.96,231.29z"/>
+
+ <linearGradient id="SVGID_00000052063207629809641900000016193030240250563207_" gradientUnits="userSpaceOnUse" x1="171.72" y1="360.96" x2="171.72" y2="151.08" gradientTransform="matrix(1 0 0 -1 0 512)">
+ <stop offset="0" style="stop-color:#B1FF3B"/>
+ <stop offset="0.0427" style="stop-color:#95FF38"/>
+ <stop offset="0.1148" style="stop-color:#6BFE33"/>
+ <stop offset="0.1886" style="stop-color:#49FE2F"/>
+ <stop offset="0.2632" style="stop-color:#2EFD2C"/>
+ <stop offset="0.3391" style="stop-color:#1BFD2A"/>
+ <stop offset="0.417" style="stop-color:#10FD28"/>
+ <stop offset="0.5" style="stop-color:#0CFD28"/>
+ <stop offset="1" style="stop-color:#3FF3F0"/>
+ </linearGradient>
+ <path style="display:inline;fill:url(#SVGID_00000052063207629809641900000016193030240250563207_);" d="M171.64,151.04
+ c-7.36,0-13.08,6.05-13.08,13.4v183.24c0,7.36,5.72,13.24,13.08,13.24c7.52,0,13.24-5.88,13.24-13.24V164.44
+ C184.88,157.08,179.16,151.04,171.64,151.04z"/>
+
+ <linearGradient id="SVGID_00000158007606123480461850000000052774185933992639_" gradientUnits="userSpaceOnUse" x1="226.805" y1="426.68" x2="226.805" y2="85.21" gradientTransform="matrix(1 0 0 -1 0 512)">
+ <stop offset="0" style="stop-color:#B1FF3B"/>
+ <stop offset="0.0427" style="stop-color:#95FF38"/>
+ <stop offset="0.1148" style="stop-color:#6BFE33"/>
+ <stop offset="0.1886" style="stop-color:#49FE2F"/>
+ <stop offset="0.2632" style="stop-color:#2EFD2C"/>
+ <stop offset="0.3391" style="stop-color:#1BFD2A"/>
+ <stop offset="0.417" style="stop-color:#10FD28"/>
+ <stop offset="0.5" style="stop-color:#0CFD28"/>
+ <stop offset="1" style="stop-color:#3FF3F0"/>
+ </linearGradient>
+ <path style="display:inline;fill:url(#SVGID_00000158007606123480461850000000052774185933992639_);" d="M226.56,85.32
+ c-7.36,0-12.91,5.88-12.91,13.24v314.99c0,7.35,5.56,13.24,12.91,13.24c7.52,0,13.4-5.89,13.4-13.24V98.56
+ C239.97,91.21,234.08,85.32,226.56,85.32z"/>
+
+ <linearGradient id="SVGID_00000044164862004309411120000008605783023584992949_" gradientUnits="userSpaceOnUse" x1="281.73" y1="341.02" x2="281.73" y2="171.02" gradientTransform="matrix(1 0 0 -1 0 512)">
+ <stop offset="0" style="stop-color:#B1FF3B"/>
+ <stop offset="0.0427" style="stop-color:#95FF38"/>
+ <stop offset="0.1148" style="stop-color:#6BFE33"/>
+ <stop offset="0.1886" style="stop-color:#49FE2F"/>
+ <stop offset="0.2632" style="stop-color:#2EFD2C"/>
+ <stop offset="0.3391" style="stop-color:#1BFD2A"/>
+ <stop offset="0.417" style="stop-color:#10FD28"/>
+ <stop offset="0.5" style="stop-color:#0CFD28"/>
+ <stop offset="1" style="stop-color:#3FF3F0"/>
+ </linearGradient>
+ <path style="display:inline;fill:url(#SVGID_00000044164862004309411120000008605783023584992949_);" d="M281.65,170.98
+ c-7.52,0-13.08,5.88-13.08,13.24V327.9c0,7.35,5.56,13.08,13.08,13.08s13.24-5.72,13.24-13.08V184.22
+ C294.89,176.86,289.17,170.98,281.65,170.98z"/>
+
+ <linearGradient id="SVGID_00000112615680247767210630000016229938031916599201_" gradientUnits="userSpaceOnUse" x1="336.66" y1="390.55" x2="336.66" y2="121.49" gradientTransform="matrix(1 0 0 -1 0 512)">
+ <stop offset="0" style="stop-color:#B1FF3B"/>
+ <stop offset="0.0427" style="stop-color:#95FF38"/>
+ <stop offset="0.1148" style="stop-color:#6BFE33"/>
+ <stop offset="0.1886" style="stop-color:#49FE2F"/>
+ <stop offset="0.2632" style="stop-color:#2EFD2C"/>
+ <stop offset="0.3391" style="stop-color:#1BFD2A"/>
+ <stop offset="0.417" style="stop-color:#10FD28"/>
+ <stop offset="0.5" style="stop-color:#0CFD28"/>
+ <stop offset="1" style="stop-color:#3FF3F0"/>
+ </linearGradient>
+ <path style="display:inline;fill:url(#SVGID_00000112615680247767210630000016229938031916599201_);" d="M336.74,121.45
+ c-7.68,0-13.24,6.05-13.24,13.24v242.74c0,7.19,5.56,13.08,13.24,13.08c7.35,0,13.08-5.88,13.08-13.08V134.69
+ C349.81,127.5,344.09,121.45,336.74,121.45z"/>
+
+ <linearGradient id="SVGID_00000039836709363122267950000000121979477128354215_" gradientUnits="userSpaceOnUse" x1="391.74" y1="308.17" x2="391.74" y2="203.88" gradientTransform="matrix(1 0 0 -1 0 512)">
+ <stop offset="0" style="stop-color:#B1FF3B"/>
+ <stop offset="0.03" style="stop-color:#95FF38"/>
+ <stop offset="0.0806" style="stop-color:#6BFE33"/>
+ <stop offset="0.1324" style="stop-color:#49FE2F"/>
+ <stop offset="0.1848" style="stop-color:#2EFD2C"/>
+ <stop offset="0.2381" style="stop-color:#1BFD2A"/>
+ <stop offset="0.2928" style="stop-color:#10FD28"/>
+ <stop offset="0.3511" style="stop-color:#0CFD28"/>
+ <stop offset="1" style="stop-color:#3FF3F0"/>
+ </linearGradient>
+ <path style="display:inline;fill:url(#SVGID_00000039836709363122267950000000121979477128354215_);" d="M391.66,203.83
+ c-7.52,0-13.08,6.05-13.08,13.24v77.97c0,7.19,5.56,13.08,13.08,13.08c7.36,0,13.24-5.88,13.24-13.08v-77.97
+ C404.9,209.88,399.01,203.83,391.66,203.83z"/>
+</g>
+<g class="st2">
+
+ <linearGradient id="SVGID_00000044146558501155522190000014011198174991435914_" gradientUnits="userSpaceOnUse" x1="116.805" y1="217.94" x2="116.805" y2="294.11" gradientTransform="matrix(1 0 0 -1 0 512)">
+ <stop offset="0" style="stop-color:#B1FF3B"/>
+ <stop offset="0.0427" style="stop-color:#95FF38"/>
+ <stop offset="0.1148" style="stop-color:#6BFE33"/>
+ <stop offset="0.1886" style="stop-color:#49FE2F"/>
+ <stop offset="0.2632" style="stop-color:#2EFD2C"/>
+ <stop offset="0.3391" style="stop-color:#1BFD2A"/>
+ <stop offset="0.417" style="stop-color:#10FD28"/>
+ <stop offset="0.5" style="stop-color:#0CFD28"/>
+ <stop offset="1" style="stop-color:#3FF3F0"/>
+ </linearGradient>
+ <path style="display:inline;fill:url(#SVGID_00000044146558501155522190000014011198174991435914_);" d="M129.96,231.29v49.53
+ c0,7.35-5.72,13.24-13.4,13.24c-7.36,0-12.91-5.89-12.91-13.24v-49.53c0-7.36,5.56-13.4,12.91-13.4
+ C124.24,217.89,129.96,223.94,129.96,231.29z"/>
+
+ <linearGradient id="SVGID_00000000214900161292021940000006908863667260938911_" gradientUnits="userSpaceOnUse" x1="171.72" y1="360.96" x2="171.72" y2="151.08" gradientTransform="matrix(1 0 0 -1 0 512)">
+ <stop offset="0" style="stop-color:#B1FF3B"/>
+ <stop offset="0.0427" style="stop-color:#95FF38"/>
+ <stop offset="0.1148" style="stop-color:#6BFE33"/>
+ <stop offset="0.1886" style="stop-color:#49FE2F"/>
+ <stop offset="0.2632" style="stop-color:#2EFD2C"/>
+ <stop offset="0.3391" style="stop-color:#1BFD2A"/>
+ <stop offset="0.417" style="stop-color:#10FD28"/>
+ <stop offset="0.5" style="stop-color:#0CFD28"/>
+ <stop offset="1" style="stop-color:#3FF3F0"/>
+ </linearGradient>
+ <path style="display:inline;fill:url(#SVGID_00000000214900161292021940000006908863667260938911_);" d="M171.64,151.04
+ c-7.36,0-13.08,6.05-13.08,13.4v183.24c0,7.36,5.72,13.24,13.08,13.24c7.52,0,13.24-5.88,13.24-13.24V164.44
+ C184.88,157.08,179.16,151.04,171.64,151.04z"/>
+
+ <linearGradient id="SVGID_00000090292831012669993400000000032040088601092005_" gradientUnits="userSpaceOnUse" x1="226.805" y1="85.21" x2="226.805" y2="426.68" gradientTransform="matrix(1 0 0 -1 0 512)">
+ <stop offset="0" style="stop-color:#B1FF3B"/>
+ <stop offset="0.0427" style="stop-color:#95FF38"/>
+ <stop offset="0.1148" style="stop-color:#6BFE33"/>
+ <stop offset="0.1886" style="stop-color:#49FE2F"/>
+ <stop offset="0.2632" style="stop-color:#2EFD2C"/>
+ <stop offset="0.3391" style="stop-color:#1BFD2A"/>
+ <stop offset="0.417" style="stop-color:#10FD28"/>
+ <stop offset="0.5" style="stop-color:#0CFD28"/>
+ <stop offset="1" style="stop-color:#3FF3F0"/>
+ </linearGradient>
+ <path style="display:inline;fill:url(#SVGID_00000090292831012669993400000000032040088601092005_);" d="M226.56,85.32
+ c-7.36,0-12.91,5.88-12.91,13.24v314.99c0,7.35,5.56,13.24,12.91,13.24c7.52,0,13.4-5.89,13.4-13.24V98.56
+ C239.97,91.21,234.08,85.32,226.56,85.32z"/>
+
+ <linearGradient id="SVGID_00000020379624376311255910000007257332708980220321_" gradientUnits="userSpaceOnUse" x1="281.73" y1="341.02" x2="281.73" y2="171.02" gradientTransform="matrix(1 0 0 -1 0 512)">
+ <stop offset="0" style="stop-color:#B1FF3B"/>
+ <stop offset="0.0427" style="stop-color:#95FF38"/>
+ <stop offset="0.1148" style="stop-color:#6BFE33"/>
+ <stop offset="0.1886" style="stop-color:#49FE2F"/>
+ <stop offset="0.2632" style="stop-color:#2EFD2C"/>
+ <stop offset="0.3391" style="stop-color:#1BFD2A"/>
+ <stop offset="0.417" style="stop-color:#10FD28"/>
+ <stop offset="0.5" style="stop-color:#0CFD28"/>
+ <stop offset="1" style="stop-color:#3FF3F0"/>
+ </linearGradient>
+ <path style="display:inline;fill:url(#SVGID_00000020379624376311255910000007257332708980220321_);" d="M281.65,170.98
+ c-7.52,0-13.08,5.88-13.08,13.24V327.9c0,7.35,5.56,13.08,13.08,13.08s13.24-5.72,13.24-13.08V184.22
+ C294.89,176.86,289.17,170.98,281.65,170.98z"/>
+
+ <linearGradient id="SVGID_00000048479140423375020540000006118453157082167431_" gradientUnits="userSpaceOnUse" x1="336.66" y1="121.49" x2="336.66" y2="390.55" gradientTransform="matrix(1 0 0 -1 0 512)">
+ <stop offset="0" style="stop-color:#B1FF3B"/>
+ <stop offset="0.0427" style="stop-color:#95FF38"/>
+ <stop offset="0.1148" style="stop-color:#6BFE33"/>
+ <stop offset="0.1886" style="stop-color:#49FE2F"/>
+ <stop offset="0.2632" style="stop-color:#2EFD2C"/>
+ <stop offset="0.3391" style="stop-color:#1BFD2A"/>
+ <stop offset="0.417" style="stop-color:#10FD28"/>
+ <stop offset="0.5" style="stop-color:#0CFD28"/>
+ <stop offset="1" style="stop-color:#3FF3F0"/>
+ </linearGradient>
+ <path style="display:inline;fill:url(#SVGID_00000048479140423375020540000006118453157082167431_);" d="M336.74,121.45
+ c-7.68,0-13.24,6.05-13.24,13.24v242.74c0,7.19,5.56,13.08,13.24,13.08c7.35,0,13.08-5.88,13.08-13.08V134.69
+ C349.81,127.5,344.09,121.45,336.74,121.45z"/>
+
+ <linearGradient id="SVGID_00000119807530370731469280000016554850128614888840_" gradientUnits="userSpaceOnUse" x1="391.74" y1="308.17" x2="391.74" y2="203.88" gradientTransform="matrix(1 0 0 -1 0 512)">
+ <stop offset="0" style="stop-color:#B1FF3B"/>
+ <stop offset="0.03" style="stop-color:#95FF38"/>
+ <stop offset="0.0806" style="stop-color:#6BFE33"/>
+ <stop offset="0.1324" style="stop-color:#49FE2F"/>
+ <stop offset="0.1848" style="stop-color:#2EFD2C"/>
+ <stop offset="0.2381" style="stop-color:#1BFD2A"/>
+ <stop offset="0.2928" style="stop-color:#10FD28"/>
+ <stop offset="0.3511" style="stop-color:#0CFD28"/>
+ <stop offset="1" style="stop-color:#3FF3F0"/>
+ </linearGradient>
+ <path style="display:inline;fill:url(#SVGID_00000119807530370731469280000016554850128614888840_);" d="M391.66,203.83
+ c-7.52,0-13.08,6.05-13.08,13.24v77.97c0,7.19,5.56,13.08,13.08,13.08c7.36,0,13.24-5.88,13.24-13.08v-77.97
+ C404.9,209.88,399.01,203.83,391.66,203.83z"/>
+</g>
+<linearGradient id="SVGID_00000145738709191382401880000009605369570553229696_" gradientUnits="userSpaceOnUse" x1="158.2286" y1="406.1799" x2="353.8929" y2="210.5155" gradientTransform="matrix(1 0 0 -1 0 512)">
+ <stop offset="0" style="stop-color:#B1FF3B"/>
+ <stop offset="0.0427" style="stop-color:#95FF38"/>
+ <stop offset="0.1148" style="stop-color:#6BFE33"/>
+ <stop offset="0.1886" style="stop-color:#49FE2F"/>
+ <stop offset="0.2632" style="stop-color:#2EFD2C"/>
+ <stop offset="0.3391" style="stop-color:#1BFD2A"/>
+ <stop offset="0.417" style="stop-color:#10FD28"/>
+ <stop offset="0.5" style="stop-color:#0CFD28"/>
+ <stop offset="1" style="stop-color:#3FF3F0"/>
+</linearGradient>
+<path style="display:none;fill:url(#SVGID_00000145738709191382401880000009605369570553229696_);" d="M256,395.66l-15.51-14.7
+ c-28.85-26.94-52.39-49.6-70.62-67.97s-32.45-34.22-42.66-47.56c-10.21-13.33-17.14-25.38-20.82-36.13
+ c-3.67-10.75-5.51-21.7-5.51-32.86c0-22.32,7.82-41.23,23.47-56.74s34.77-23.27,57.35-23.27c13.33,0,26.4,3.54,39.19,10.61
+ c12.79,7.08,24.49,17.42,35.11,31.02c10.61-13.61,22.32-23.95,35.11-31.02c12.79-7.08,25.85-10.61,39.19-10.61
+ c22.59,0,41.7,7.76,57.35,23.27s23.47,34.43,23.47,56.74c0,11.16-1.84,22.11-5.51,32.86s-10.61,22.79-20.82,36.13
+ c-10.21,13.33-24.36,29.19-42.45,47.56s-41.7,41.02-70.82,67.97L256,395.66z M256,365.46c26.67-24.49,48.58-45.31,65.72-62.46
+ c17.14-17.14,30.75-32.04,40.82-44.7c10.07-12.65,17.01-23.74,20.82-33.27c3.81-9.52,5.71-19.05,5.71-28.57
+ c0-16.6-5.51-30.41-16.53-41.43s-25.1-16.53-42.25-16.53c-12.52,0-24.42,3.81-35.72,11.43c-11.29,7.62-20.61,18.23-27.96,31.84
+ h-21.23c-7.62-13.88-17.01-24.56-28.17-32.04c-11.16-7.48-23-11.23-35.51-11.23c-16.87,0-30.89,5.51-42.04,16.53
+ c-11.16,11.02-16.74,24.83-16.74,41.43c0,9.52,1.9,19.05,5.71,28.57s10.75,20.61,20.82,33.27c10.07,12.65,23.68,27.49,40.82,44.49
+ C207.42,319.81,229.33,340.69,256,365.46z"/>
+<path class="st16" d="M231.09,360c-11.53,0-21.47-4.17-29.82-12.53c-8.35-8.35-12.53-18.29-12.53-29.82
+ c0-11.53,4.17-21.47,12.53-29.82c8.35-8.35,18.29-12.53,29.82-12.53c4.78,0,9.34,0.67,13.7,2.02s8.3,3.58,11.83,6.69V152h66.64
+ v37.99h-49.82v127.67c0,11.53-4.17,21.47-12.53,29.82C252.56,355.83,242.62,360,231.09,360z"/>
+</svg>
diff --git a/assets/shortcuts.js b/assets/shortcuts.js
new file mode 100644
index 0000000..2fa48ca
--- /dev/null
+++ b/assets/shortcuts.js
@@ -0,0 +1,26 @@
+document.onkeydown = (e) => {
+
+ if ((e.metaKey || e.ctrlKey) && e.key === ".") {
+ e.preventDefault();
+ window.parent.stop();
+ return false;
+ }
+
+ if ((e.metaKey || e.ctrlKey) && e.key === "ArrowRight") {
+ e.preventDefault();
+ window.parent.next();
+ return false;
+ }
+
+ if ((e.metaKey || e.ctrlKey) && e.key === "ArrowLeft") {
+ e.preventDefault();
+ window.parent.previous();
+ return false;
+ }
+
+ if (e.key === " " && e.target.tagName !== "INPUT") {
+ e.preventDefault();
+ window.parent.playPause();
+ return false;
+ }
+} \ No newline at end of file
diff --git a/assets/styles.css b/assets/styles.css
new file mode 100644
index 0000000..de4d33f
--- /dev/null
+++ b/assets/styles.css
@@ -0,0 +1,432 @@
+iframe {
+ border: none;
+}
+
+* {
+ user-select: none;
+ -webkit-user-drag: none;
+}
+
+.player-btn:hover {
+ background-color: rgba(0, 0, 0, .05);
+}
+
+.player-btn:active {
+ background-color: rgba(0, 0, 0, .1);
+}
+
+.navigation-item {
+ padding: 5px 10px;
+}
+
+.navigation-item.active, .navigation-item:active {
+ background-color: rgba(0, 0, 0, .1) !important;
+ border-top-left-radius: 10px;
+ border-bottom-left-radius: 10px;
+}
+
+.navigation-item:hover {
+ background-color: rgba(0, 0, 0, .05);
+ border-top-left-radius: 10px;
+ border-bottom-left-radius: 10px;
+}
+
+.album:hover {
+ background-color: rgba(0, 0, 0, .05);
+ border-radius: 5px;
+}
+
+.player-btn.disabled {
+ opacity: .5;
+ pointer-events: none;
+}
+
+@media (max-width: 1200px) {
+ #album-grid {
+ grid-template-columns: repeat(4, 1fr) !important;
+ }
+
+ .album-list-item {
+ max-width: calc(80vw / 4) !important;
+ }
+}
+
+@media (max-width: 1215px) {
+ #album-grid {
+ grid-template-columns: repeat(5, 1fr) !important;
+ }
+
+ .album-list-item {
+ max-width: calc(80vw / 5) !important;
+ }
+}
+
+@media (max-width: 1311px) {
+ #navigation {
+ width: 96px !important;
+ }
+
+ iframe#player {
+ left: 96px !important;
+ width: calc(100vw - 96px) !important;
+ }
+
+ #ui, #lyrics-page {
+ left: 96px !important;
+ width: calc(100vw - 96px) !important;
+ }
+}
+
+@media (max-width: 1295px) {
+ #album-grid {
+ grid-template-columns: repeat(4, 1fr) !important;
+ }
+
+ .album-list-item {
+ max-width: calc(80vw / 4) !important;
+ }
+}
+
+@media (max-width: 96px) {
+ .navigation-desktop {
+ display: none;
+ }
+}
+
+@media (max-width: 991px) {
+ #player.desktop-player .player-btn {
+ width: 32px !important;
+ }
+
+ #player.desktop-player .player-badge-desktop {
+ display: none !important;
+ }
+
+ #album-grid {
+ grid-template-columns: repeat(3, 1fr) !important;
+ }
+
+ .album-list-item {
+ max-width: calc(80vw / 3) !important;
+ }
+}
+
+@media (max-width: 767px) {
+ #album-grid {
+ grid-template-columns: repeat(2, 1fr) !important;
+ }
+
+ .album-list-item {
+ max-width: calc(80vw / 2) !important;
+ }
+}
+
+@media (max-width: 863px) {
+ #player.bg-white.desktop-player.mobilified .container {
+ grid-template-columns: 1fr !important;
+ }
+
+ #player.desktop-player.mobilified .player-badge-desktop {
+ display: initial !important;
+ }
+
+ #player.desktop-player.mobilified .player-btn {
+ width: 32px !important;
+ height: 32px !important;
+ }
+
+ #player.bg-white.desktop-player.mobilified {
+ height: 144px !important;
+ }
+
+ #player.bg-white.desktop-player.mobilified #info, #player.bg-white.desktop-player.mobilified #cover {
+ border: none !important;
+ }
+
+ #player.desktop-player.mobilified #badge-hires, #player.desktop-player.mobilified #badge-cd, #player.desktop-player.mobilified #badge-lossy {
+ margin-top: 4px !important;
+ }
+
+ #player.desktop-player.mobilified #badges {
+ text-align: center !important;
+ justify-content: center !important;
+ }
+
+ #player.desktop-player.mobilified #buttons {
+ text-align: center;
+ height: 32px !important;
+ }
+
+ #ui, #lyrics-page {
+ top: 145px !important;
+ height: calc(100vh - 145px) !important;
+ }
+
+ iframe#player {
+ height: 144px !important;
+ }
+
+ #navigation {
+ position: fixed !important;
+ top: unset !important;
+ bottom: 0 !important;
+ left: 0 !important;
+ right: 0 !important;
+ width: 100vw !important;
+ height: 48px !important;
+ border-top: 1px solid rgba(0, 0, 0, .25);
+ }
+
+ iframe#player {
+ position: fixed !important;
+ top: unset !important;
+ bottom: 48px !important;
+ left: 0 !important;
+ right: 0 !important;
+ width: 100vw !important;
+ height: 48px !important;
+ border-top: 1px solid rgba(0, 0, 0, .25);
+ border-bottom: none !important;
+ }
+
+ #player.bg-white.desktop-player.mobilified {
+ height: 48px !important;
+ }
+
+ #player.desktop-player.mobilified #btn-shuffle.player-btn, #player.desktop-player.mobilified #btn-previous.player-btn, #player.desktop-player.mobilified #btn-repeat.player-btn, #player.desktop-player.mobilified #info-grid-sep, #player.desktop-player.mobilified #info-grid-info, #player.desktop-player.mobilified #seekbar-container, #player.desktop-player.mobilified #info-grid-time {
+ display: none !important;
+ }
+
+ #player.desktop-player.mobilified #info-grid-title {
+ text-align: left !important;
+ justify-content: left !important;
+ align-items: center !important;
+ margin-left: 15px !important;
+ }
+
+ #player.bg-white.desktop-player.mobilified #buttons {
+ position: fixed;
+ right: 10px;
+ }
+
+ #player.desktop-player.mobilified #info, #player.desktop-player.mobilified #cover {
+ height: 48px !important;
+ grid-template-columns: 48px 1fr !important;
+ }
+
+ #player.desktop-player.mobilified #info-grid {
+ grid-template-rows: 1fr !important;
+ }
+
+ #player.desktop-player.mobilified #album-art {
+ height: 48px !important;
+ width: 48px !important;
+ }
+
+ .list-actions {
+ display: flex;
+ align-items: center;
+ }
+
+ #player.desktop-player.mobilified #desktop-player-action {
+ display: block !important;
+ top: 0;
+ position: fixed;
+ left: 0;
+ right: 86px;
+ bottom: 0;
+ }
+
+ #player.desktop-player.mobilified .container {
+ margin: 0 !important;
+ padding: 0 !important;
+ width: 100% !important;
+ max-width: 100% !important;
+ }
+
+ #ui, #lyrics-page {
+ top: 0 !important;
+ bottom: 97px !important;
+ left: 0 !important;
+ right: 0 !important;
+ width: 100vw !important;
+ height: calc(100vh - 97px) !important;
+ }
+
+ iframe#lyrics-page {
+ display: block !important;
+ z-index: 100000 !important;
+ top: 96px !important;
+ left: 20px !important;
+ right: 20px !important;
+ width: calc(100vw - 40px) !important;
+ height: calc(100vh - 276px) !important;
+ opacity: 0;
+ pointer-events: none;
+ transition: opacity 200ms !important;
+ }
+
+ iframe#lyrics-page.mobile-show {
+ transition: opacity 200ms linear 500ms !important;
+ opacity: 1;
+ pointer-events: auto !important;
+ }
+}
+
+@media (min-width: 864px) {
+ #player-mobile-container {
+ display: none !important;
+ }
+}
+
+@media (max-width: 1010px) {
+ #album-info {
+ grid-gap: 0 !important;
+ grid-template-columns: 1fr !important;
+ }
+
+ #album-info-art {
+ display: block !important;
+ margin-left: auto !important;
+ margin-right: auto !important;
+ }
+
+ #album-info-text {
+ text-align: center;
+ grid-gap: 10px;
+ }
+
+ #filter {
+ display: none;
+ }
+}
+
+@media (max-width: 575px) {
+ #album-info-buttons {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ grid-gap: 10px;
+ }
+
+ #album-info-buttons.nolibrary {
+ display: grid;
+ grid-template-columns: 1fr;
+ grid-gap: 10px;
+ }
+
+ #album-info-buttons .btn {
+ width: 100% !important;
+ }
+}
+
+.player-badge-icon {
+ width: 24px;
+ margin-right: 5px;
+}
+
+#player #badge-hires .player-badge-desktop {
+ background: white;
+ color: rgb(182, 110, 2);
+ padding-left: 5px;
+ margin: -2px -5px -2px 5px;
+ display: flex;
+ align-items: center;
+ padding-right: 5px;
+ border-top-right-radius: 5px;
+ border-bottom-right-radius: 5px;
+}
+
+#player #badge-cd .player-badge-desktop {
+ background: white;
+ color: #02b6a7;
+ padding-left: 5px;
+ margin: -2px -5px -2px 5px;
+ display: flex;
+ align-items: center;
+ padding-right: 5px;
+ border-top-right-radius: 5px;
+ border-bottom-right-radius: 5px;
+}
+
+#player #badge-lossy .player-badge-desktop {
+ background: white;
+ color: #a402b6;
+ padding-left: 5px;
+ margin: -2px -5px -2px 5px;
+ display: flex;
+ align-items: center;
+ padding-right: 5px;
+ border-top-right-radius: 5px;
+ border-bottom-right-radius: 5px;
+}
+
+.navigation-item img {
+ filter: brightness(0%);
+}
+
+@media (max-height: 64px) {
+ #navigation-left, #navigation-version {
+ display: none !important;
+ }
+
+ #navigation-container {
+ grid-template-columns: repeat(5, 1fr) !important;
+ display: grid !important;
+ margin-top: 2px;
+ }
+
+ #navigation-container #lyrics {
+ display: none !important;
+ }
+
+ .navigation-desktop {
+ display: none;
+ }
+
+ div.navigation-item, div.navigation-item.active {
+ background-color: transparent !important;
+ border-radius: 10px;
+ }
+
+ .navigation-container-inner {
+ margin: 0 !important;
+ padding: 0 !important;
+ width: 100% !important;
+ max-width: 100% !important;
+ }
+
+ .navigation-item img {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+ filter: brightness(0%);
+ }
+
+ .navigation-item.active img {
+ filter: none !important;
+ }
+}
+
+@media (max-width: 823px) {
+ #lyrics-outer, #lyrics-outer * {
+ color: rgba(255, 255, 255, .75);
+ }
+
+ .synced-lyrics-item {
+ font-size: 26px !important;
+ }
+
+ #lyrics-synced-fade {
+ display: none !important;
+ }
+}
+
+@media (min-width: 992px) {
+ .container {
+ max-width: 95%;
+ }
+}
+
+#badges {
+ -webkit-app-region: drag;
+} \ No newline at end of file