diff options
author | metamuffin <metamuffin@disroot.org> | 2023-10-24 15:08:15 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-10-24 15:08:15 +0200 |
commit | f4f3a16bca576c202887799066bd896863612e2b (patch) | |
tree | 8ddb9cdc47abae7bc615109f241b2cd12e141128 /web/style | |
parent | c1afcdc0dc4e59cb2ce1e8c65b69c5647f2132f3 (diff) | |
download | jellything-f4f3a16bca576c202887799066bd896863612e2b.tar jellything-f4f3a16bca576c202887799066bd896863612e2b.tar.bz2 jellything-f4f3a16bca576c202887799066bd896863612e2b.tar.zst |
partial theme implementation
Diffstat (limited to 'web/style')
-rw-r--r-- | web/style/forms.css | 75 | ||||
-rw-r--r-- | web/style/js-player.css | 126 | ||||
-rw-r--r-- | web/style/js-transition.css | 46 | ||||
-rw-r--r-- | web/style/layout.css | 140 | ||||
-rw-r--r-- | web/style/nodecard.css | 148 | ||||
-rw-r--r-- | web/style/nodepage.css | 65 | ||||
-rw-r--r-- | web/style/player.css | 102 | ||||
-rw-r--r-- | web/style/themes.css | 20 |
8 files changed, 722 insertions, 0 deletions
diff --git a/web/style/forms.css b/web/style/forms.css new file mode 100644 index 0000000..259d7ef --- /dev/null +++ b/web/style/forms.css @@ -0,0 +1,75 @@ +/* + This file is part of jellything (https://codeberg.org/metamuffin/jellything) + which is licensed under the GNU Affero General Public License (version 3); see /COPYING. + Copyright (C) 2023 metamuffin <metamuffin.org> + Copyright (C) 2023 tpart +*/ +input { + outline: none; + box-sizing: border-box; + height: 2.5em; +} +input[type="text"], +input[type="password"] { + border-radius: 7px; + padding: 0.3em; + margin-top: 0.3em; + border: 2px solid var(--accent-light); +} +input[type="text"]:focus, +input[type="password"]:focus { + background-color: var(--background-light); +} +input[type="text"]:disabled, +input[type="password"]:disabled { + border: 2px solid grey; +} + +input[type="submit"], +form button { + padding: 0.5em; + margin: 0.5em; + justify-self: center; + border: 0px solid transparent; + background-color: var(--accent-dark); + border-radius: 8px; + cursor: pointer; +} +input[type="submit"]:disabled { + background-color: grey; +} +input[type="submit"]:hover { + filter: brightness(150%); +} + +form.account { + padding: 3em; + border-radius: 1em; + background-color: var(--background-light); + + min-width: 25em; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +form.account input { + width: 100%; + font-size: large; +} +form.account input, +form.account label { + display: block; +} +form.account input[type="submit"] { + margin: 0; + margin-top: 1em; + margin-bottom: 1.5em; + font-weight: bold; +} +form.account h1 { + margin-top: 0px; +} +form.account p { + color: var(--font-dark); +} diff --git a/web/style/js-player.css b/web/style/js-player.css new file mode 100644 index 0000000..6d1bd71 --- /dev/null +++ b/web/style/js-player.css @@ -0,0 +1,126 @@ +/* + This file is part of jellything (https://codeberg.org/metamuffin/jellything) + which is licensed under the GNU Affero General Public License (version 3); see /COPYING. + Copyright (C) 2023 metamuffin <metamuffin.org> +*/ + +.jsp { + --csize: 50px; +} + +.jsp .jsp-controls { + position: absolute; + bottom: 0px; + left: 0px; + width: 100%; + height: var(--csize); + background-color: #1d1d1d99; + transition: opacity 0.2s; + + display: flex; + flex-direction: row; +} + +.jsp .jsp-controls button { + padding: 0px; + width: var(--csize); + height: 100%; + border: none; + background-color: #ffffff10; +} + +.jsp-controls p.jsp-status { + display: inline-block; + width: 6em; + text-align: right; + margin: 0px; + font-family: monospace; + margin: 0.4em; +} + +.jsp-pri { + position: relative; + flex-grow: 1; + padding: 0px; + display: inline-block; + margin: 0px; + width: calc(100% - var(--csize) * 2 - 2px); + height: var(--csize); + --pribufsize: calc(var(--csize) * 0.5); +} +.jsp-pri-current { + z-index: 101; + position: absolute; + height: var(--csize); + background-color: #ffffff20; +} +.jsp-pri-buffer { + z-index: 100; + position: absolute; + height: var(--pribufsize); +} +.jsp-pri-buffer-buffered { + background-color: #08fa0018; +} +.jsp-pri-buffer-loading { + background-color: #ffd00018; +} + +.jsp-overlay { + position: absolute; + bottom: var(--csize); + left: 0px; +} +.jsp-overlay .jsp-buffering { + margin: 0.2em; + font-size: larger; + color: grey; +} +.jsp-stats { + position: absolute; + background-color: rgba(0, 0, 0, 0.404); + bottom: var(--csize); + right: 0px; + padding: 1em; +} +.jsp-stats pre { + margin: 0.1em; +} + +.jsp .jsh-log { + position: absolute; + bottom: var(--csize); + left: 0px; +} +.jsp .jsh-log-line { + padding: 0.15em; + margin: 0px; + font-size: large; + animation-name: appear; + animation-timing-function: linear; + animation-duration: 0.5s; + animation-fill-mode: forwards; +} +.jsp .jsh-log-line-disappear { + animation-name: disappear; + animation-timing-function: linear; + animation-duration: 0.2s; + animation-fill-mode: forwards; +} + +@keyframes appear { + from { + opacity: 0; + } + to { + opacity: 1; + } +} +@keyframes disappear { + from { + opacity: 1; + } + to { + opacity: 0; + } +} diff --git a/web/style/js-transition.css b/web/style/js-transition.css new file mode 100644 index 0000000..dbb80f0 --- /dev/null +++ b/web/style/js-transition.css @@ -0,0 +1,46 @@ +@keyframes jst-fadein { + from { + background-color: transparent; + } + to { + background-color: black; + } +} +@keyframes jst-fadeout { + from { + background-color: black; + } + to { + background-color: transparent; + } +} + +.jst-fade { + position: fixed; + left: 0px; + top: 0px; + width: 100vw; + height: 100vh; + z-index: 10; +} +.jst-error { + position: fixed; + top: 50vh; + left: 50vw; + transform: translate(-50%, -50%); + color: rgb(247, 69, 69); + font-size: large; + z-index: 11; +} +.jst-spinner { + position: fixed; + top: 50vh; + left: 50vw; + transform: translate(-50%, -50%); + color: rgb(252, 255, 78); + font-size: large; + z-index: 11; +} +nav { + z-index: 11; +} diff --git a/web/style/layout.css b/web/style/layout.css new file mode 100644 index 0000000..ea7d3e6 --- /dev/null +++ b/web/style/layout.css @@ -0,0 +1,140 @@ +/* + This file is part of jellything (https://codeberg.org/metamuffin/jellything) + which is licensed under the GNU Affero General Public License (version 3); see /COPYING. + Copyright (C) 2023 metamuffin <metamuffin.org> + Copyright (C) 2023 tpart +*/ +@font-face { + font-family: "Cantarell"; + src: url(/assets/cantarell.woff2) format("woff2"); +} + +:root { + --card-size: 17em; + --bar-height: 5em; + --port-poster-aspect: 1.41; + --land-poster-aspect: (1.41 / 2); + --land-thumb-aspect: (9 / 16); + --backdrop-height: 24em; + --main-side-margin: 2em; +} + +::selection { + background-color: var(--accent-dark); +} + +* { + color: var(--font); + scrollbar-width: thin; + scrollbar-color: var(--background-light) #0000; +} +:root { + font-family: "Cantarell", sans-serif; + font-weight: 500; +} + +body { + background-color: var(--background-dark); + width: 100vw; + margin: 0px; + padding: 0px; +} + +h1 { + font-weight: bold; + color: var(--font-highlight); +} + +nav { + user-select: none; + z-index: 90; + position: fixed; + top: 0px; + left: 0px; + padding: 1em; + width: calc(100vw - 2em); + height: 2em; + backdrop-filter: blur(6px); + background-color: #1c1c1c9a; + + display: flex; + align-items: center; +} + +code { + font-family: monospace !important; +} +.log .time, +.log .module { + color: grey; +} + +nav a { + border: 0px solid transparent; + border-radius: 5px; + padding: 0.5em; + text-decoration: none; +} +nav a:hover { + background-color: #ffffff10; +} +nav a { + color: #dfe5f3; + text-decoration: none; + background-image: linear-gradient(transparent, transparent), + linear-gradient(var(--accent-light), var(--accent-light)); + background-size: 100% 2px, 0 2px; + background-position: 100% 100%, 0 100%; + background-repeat: no-repeat; + transition: background-size 0.15s linear; +} +nav a:hover { + background-size: 0 2px, 100% 2px; +} + +nav h1 { + margin: 0px; + margin-left: 0.5em; + margin-right: 0.5em; + font-size: 1.5em; + display: inline; +} +nav .account { + margin-left: auto; +} +nav .account .username { + color: var(--accent-light); + font-weight: bold; + margin-right: 1em; +} + +#main { + display: block; + margin-top: var(--bar-height); + margin-left: var(--main-side-margin); + margin-right: var(--main-side-margin); + margin-bottom: 1em; +} + +section.message { + background-color: var(--background-light); + border-radius: 8px; +} +.error { + padding: 1em; + color: rgb(255, 117, 117); + font-family: monospace; +} +.success { + padding: 1em; + color: rgb(117, 255, 117); +} + +footer { + padding: 0.1em; + text-align: center; +} +footer p { + color: #828282; + font-size: 0.8em; +} diff --git a/web/style/nodecard.css b/web/style/nodecard.css new file mode 100644 index 0000000..d32d5f4 --- /dev/null +++ b/web/style/nodecard.css @@ -0,0 +1,148 @@ +/* + This file is part of jellything (https://codeberg.org/metamuffin/jellything) + which is licensed under the GNU Affero General Public License (version 3); see /COPYING. + Copyright (C) 2023 metamuffin <metamuffin.org> + Copyright (C) 2023 tpart +*/ +.children { + padding: 1em; + padding-left: 3em; + padding-right: 3em; + list-style: none; + display: flex; + flex-wrap: wrap; + width: 100%; + box-sizing: border-box; +} +.children li { + display: block; +} + +.dirup { + width: 100%; + font-size: large; + display: block; + text-align: center; + background-color: var(--background-light); + border-radius: 0.2em; + padding: 0.6em; + margin: 0.2em; + transition: filter 0.22s; +} +.dirup:hover { + filter: brightness(120%); +} + +.node.card { + padding: 1em; +} + +.node.card .poster, +.node.card .poster img { + height: var(--card-size); +} +.node.card.aspect-port { + width: calc(var(--card-size) / var(--port-poster-aspect)); +} +.node.card.aspect-land { + width: calc(var(--card-size) / var(--land-poster-aspect)); +} +.node.card.aspect-thumb { + width: calc(var(--card-size) / var(--land-thumb-aspect)); +} +.node.card.aspect-square { + width: calc(var(--card-size)); +} + +.node.card .poster a img { + object-fit: cover; + object-position: center; + width: 100%; +} + +.node.card .title { + text-align: center; +} + +.node.card .title { + margin-top: 0.1em; + text-align: center; + text-overflow: ellipsis; +} +.node.card .poster { + display: grid; +} +.node.card .poster a { + grid-area: 1 / 1; +} + +.node.card.poster .poster .cardhover.open { + transition: opacity 0.3s, backdrop-filter 0.3s; + opacity: 0; + display: flex; + position: relative; + bottom: 0px; + height: 5em; + margin-top: -5em; +} +.node.card.poster .poster:hover .cardhover.open { + opacity: 1; + background-color: #0004; + backdrop-filter: blur(3px); +} +.node.card.poster .poster .cardhover.open a { + text-decoration: none; + width: 100%; + height: 1.7em; + font-size: large; + display: block; + text-align: center; + background-color: #0004; + border-radius: 0.2em; + padding: 0.6em; + margin: 0.6em; + transition: background-color 0.2s; +} +.node.card.poster .poster .cardhover.open a:hover { + background-color: #0008; +} + +.node.card.poster .poster .cardhover.item { + position: relative; + pointer-events: none; + grid-area: 1 / 1; + transition: opacity 0.3s, backdrop-filter 0.3s; + opacity: 0; + display: flex; + justify-content: center; + align-items: center; +} +.node.card.poster .poster:hover .cardhover.item { + opacity: 1; + background-color: #0004; + backdrop-filter: blur(3px); +} + +.node.card.poster .poster .cardhover.item a.play { + text-decoration: none; + font-stretch: 200%; + width: 1em; + height: 1em; + line-height: 1; + margin: auto; + padding: 0.4em 0.3em 0.4em 0.5em; + border-radius: 50%; + font-size: 1.8em; + pointer-events: all; + background-color: #0005; + transition: background-color 0.2s, font-size 0.2s; +} +.node.card.poster .poster .cardhover.item a.play:hover { + background-color: #0008; + font-size: 2.4em; +} +.node.card.poster .poster .cardhover.item .props { + position: absolute; + bottom: 0px; + left: 0px; +} diff --git a/web/style/nodepage.css b/web/style/nodepage.css new file mode 100644 index 0000000..e40706e --- /dev/null +++ b/web/style/nodepage.css @@ -0,0 +1,65 @@ +/* + This file is part of jellything (https://codeberg.org/metamuffin/jellything) + which is licensed under the GNU Affero General Public License (version 3); see /COPYING. + Copyright (C) 2023 metamuffin <metamuffin.org> + Copyright (C) 2023 tpart +*/ +.backdrop { + width: calc(100% + 2 * var(--main-side-margin)); + height: calc(var(--backdrop-height) + 5em); + margin-left: calc(-1 * var(--main-side-margin)); + margin-right: calc(-1 * var(--main-side-margin)); + margin-top: calc(-1 * var(--bar-height)); + margin-bottom: -5em; + -webkit-mask-image: linear-gradient( + rgba(0, 0, 0, 1), + transparent calc(var(--backdrop-height) + 5em) + ); + mask-image: linear-gradient( + rgba(0, 0, 0, 1), + transparent calc(var(--backdrop-height) + 5em) + ); + -webkit-mask-mode: alpha; + mask-mode: alpha; + pointer-events: none; + object-fit: cover; + object-position: center; +} +.page.node { + position: relative; + width: 100%; +} +.page.node .bigposter { + width: max(8em, 25%); + float: left; + margin: 3em; + margin-top: -1em; +} +.page.node .bigposter img { + width: 100%; + height: 100%; + object-fit: cover; + object-position: center; +} + +.page.node .title h1 { + display: inline; + margin-right: 1em; +} +.page.node .title .play { + display: inline; + font-stretch: 200%; +} +.page.node .title .play::before { + content: "▶"; +} + +.props p { + margin: 0.4em; + font-size: small; + font-weight: bolder; + display: inline-block; + padding: 0.2em; + background: #5a5a5a85; + border-radius: 4px; +} diff --git a/web/style/player.css b/web/style/player.css new file mode 100644 index 0000000..eb1a0a0 --- /dev/null +++ b/web/style/player.css @@ -0,0 +1,102 @@ +/* + This file is part of jellything (https://codeberg.org/metamuffin/jellything) + which is licensed under the GNU Affero General Public License (version 3); see /COPYING. + Copyright (C) 2023 metamuffin <metamuffin.org> + Copyright (C) 2023 tpart +*/ + +input { + color: white; + background-color: black; +} +option { + font-family: "Cantarell", sans-serif; +} + +fieldset { + background-color: var(--background-light); + border-radius: 8px; +} + +form.playerconf { + display: grid; + grid-template-areas: + "h h h" + "v a s" + "b b b"; + gap: 1em; + grid-template-columns: auto auto auto; + grid-template-rows: 3em auto 5em; +} + +legend { + font-size: 1.5em; +} +input[type="radio"] { + appearance: none; + display: inline-block; + width: 1.2em; + height: 1.2em; + border-radius: 8px; + padding: 2px; + background-clip: content-box; + border: 2px solid var(--font); + background-color: transparent; + transition: background-color 0.3s; +} +input[type="radio"]:checked { + background-color: var(--accent-light); +} + +fieldset label { + transition: color 0.2s; +} +fieldset label:hover { + color: var(--accent-light); +} + +.playerconf { + margin: 2em; +} +.playerconf h2 { + grid-area: h; + text-align: center; +} +.playerconf h3 { + grid-area: h; + text-align: center; +} +.playerconf .video { + grid-area: v; +} +.playerconf .audio { + grid-area: a; +} +.playerconf .subtitles { + grid-area: s; +} +.playerconf input[type="submit"] { + grid-area: b; + width: 30%; + height: 3em; + font-size: 1.5em; +} + +.player nav { + opacity: 0; + transition: opacity 0.2s; +} +.player nav:hover { + opacity: 1; +} +.player #main { + margin-top: 0px; + margin-left: 0px; + margin-right: 0px; + margin-bottom: 0px; +} +.player video { + width: 100vw; + height: 100vh; + background-color: black; +} diff --git a/web/style/themes.css b/web/style/themes.css new file mode 100644 index 0000000..e006513 --- /dev/null +++ b/web/style/themes.css @@ -0,0 +1,20 @@ +body.theme-dark { + --accent-light: rgb(255, 163, 87); + --accent-dark: rgb(199, 90, 0); + --background-dark: #070707; + --background-light: #1c1c1c; + --background-very-light: #323232; + --font: rgb(218, 218, 218); + --font-dark: rgb(148, 148, 148); + --font-highlight: white; +} +body.theme-light { + --accent-light: rgb(255, 163, 87); + --accent-dark: rgb(199, 90, 0); + --background-dark: #ffffff; + --background-light: #e2e2e2; + --background-very-light: #b9b9b9; + --font: rgb(43, 43, 43); + --font-dark: rgb(0, 0, 0); + --font-highlight: rgb(0, 0, 0); +} |