aboutsummaryrefslogtreecommitdiff
path: root/web/style
diff options
context:
space:
mode:
Diffstat (limited to 'web/style')
-rw-r--r--web/style/forms.css75
-rw-r--r--web/style/js-player.css126
-rw-r--r--web/style/js-transition.css46
-rw-r--r--web/style/layout.css140
-rw-r--r--web/style/nodecard.css148
-rw-r--r--web/style/nodepage.css65
-rw-r--r--web/style/player.css102
-rw-r--r--web/style/themes.css20
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);
+}