summaryrefslogtreecommitdiff
path: root/web/css
diff options
context:
space:
mode:
Diffstat (limited to 'web/css')
-rw-r--r--web/css/components.css65
-rw-r--r--web/css/layout.css46
-rw-r--r--web/css/login.css56
-rw-r--r--web/css/player.css2
4 files changed, 153 insertions, 16 deletions
diff --git a/web/css/components.css b/web/css/components.css
index 475a911..a81753a 100644
--- a/web/css/components.css
+++ b/web/css/components.css
@@ -101,6 +101,7 @@ label {
/* Search bar */
.search-bar {
+ position: relative;
display: flex;
align-items: center;
gap: 0.4rem;
@@ -108,17 +109,75 @@ label {
border: 1px solid var(--border);
border-radius: var(--radius-md);
padding: 0.25rem 0.6rem;
- max-width: 22rem;
+ max-width: min(100%, 72rem);
width: 100%;
}
+.search-overlay {
+ position: fixed;
+ inset: 1rem 1rem auto 1rem;
+ z-index: 90;
+ display: flex;
+ justify-content: center;
+ pointer-events: none;
+}
+.search-overlay.hidden {
+ display: none;
+}
+.search-overlay-bar {
+ align-items: flex-start;
+ flex-wrap: wrap;
+ max-width: min(72rem, calc(100vw - 2rem));
+ box-shadow: var(--shadow-lg);
+ pointer-events: auto;
+}
.search-bar input {
background: transparent;
border: none;
padding: 0.35rem 0.2rem;
- flex: 1 1 auto;
+ flex: 1 1 18rem;
+ min-width: 8rem;
}
.search-bar input:focus { box-shadow: none; }
-
+.tag-filter-list {
+ display: flex;
+ align-items: center;
+ flex-wrap: wrap;
+ gap: 0.3rem;
+ flex: 1 1 18rem;
+ min-width: 0;
+ max-width: none;
+}
+.tag-filter-chip {
+ display: inline-flex;
+ align-items: center;
+ flex: 0 0 auto;
+ max-width: 9rem;
+ min-height: 2rem;
+ padding: 0.25rem 0.5rem;
+ border: 1px solid var(--border);
+ border-radius: var(--radius-sm);
+ background: transparent;
+ color: var(--text-secondary);
+ font: inherit;
+ font-size: 0.78rem;
+ cursor: pointer;
+}
+.tag-filter-chip:hover,
+.tag-filter-chip:focus-visible {
+ background: var(--bg-surface-hover);
+ color: var(--text-primary);
+ outline: none;
+}
+.tag-filter-chip.active {
+ border-color: var(--accent);
+ background: var(--accent-soft);
+ color: var(--text-primary);
+}
+.tag-filter-chip span {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
/* Search syntax help tooltip */
.search-help {
position: absolute;
diff --git a/web/css/layout.css b/web/css/layout.css
index 177b301..0db69bc 100644
--- a/web/css/layout.css
+++ b/web/css/layout.css
@@ -23,6 +23,27 @@ body {
gap: var(--gap);
padding: 0 1rem;
z-index: 50;
+ transform: translateY(calc(-100% + 0.45rem));
+ transition: transform var(--transition-base);
+}
+.site-header::after {
+ content: "";
+ position: absolute;
+ left: 0;
+ right: 0;
+ bottom: -0.45rem;
+ height: 0.45rem;
+}
+.site-header:hover,
+.site-header:focus-within {
+ transform: translateY(0);
+}
+.header-main {
+ display: flex;
+ align-items: center;
+ gap: var(--gap);
+ flex: 1 1 auto;
+ min-width: 0;
}
.site-header .logo {
font-weight: 700;
@@ -169,6 +190,8 @@ body {
/* Folder card placeholder */
.folder-card .thumb-wrap .placeholder { font-size: 3rem; }
+.set-card .thumb-wrap .placeholder { font-size: 3rem; }
+.set-card .thumb-wrap img + .placeholder { display: none; }
/* Media grid */
.media-grid {
@@ -176,6 +199,26 @@ body {
grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr));
gap: var(--gap);
}
+.media-pager {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: 0.75rem;
+ padding: 0.5rem 0.65rem;
+ border: 1px solid var(--border);
+ border-radius: var(--radius-sm);
+ background: var(--bg-surface);
+}
+.media-pager-top {
+ margin-bottom: 0.1rem;
+}
+.media-pager-bottom {
+ margin-top: 0.1rem;
+}
+.media-page-summary {
+ color: var(--text-secondary);
+ font-size: 0.85rem;
+}
.media-card {
position: relative;
background: var(--bg-surface);
@@ -462,6 +505,9 @@ body {
gap: 0.35rem;
padding: 0 0.5rem;
}
+ .header-main {
+ gap: 0.35rem;
+ }
.search-bar {
max-width: none;
min-width: 0;
diff --git a/web/css/login.css b/web/css/login.css
index a69c9a9..a7b3ae0 100644
--- a/web/css/login.css
+++ b/web/css/login.css
@@ -1,33 +1,65 @@
/* Login / bootstrap page layout */
+*, *::before, *::after { box-sizing: border-box; }
+html, body { min-height: 100%; }
+body {
+ margin: 0;
+ font-family: var(--font-sans);
+ background: var(--bg-body);
+ color: var(--text-primary);
+}
.login-container {
min-height: 100vh;
- display: grid;
- place-items: center;
+ min-height: 100dvh;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ gap: 1rem;
padding: 2rem 1rem;
background: var(--bg-body);
}
+.login-brand {
+ width: min(100%, 24rem);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: 0.75rem;
+}
.login-container h1 {
- margin: 0 0 0.25rem;
- font-size: 1.5rem;
+ margin: 0;
+ color: var(--text-primary);
+ font-size: 1.55rem;
+ line-height: 1.1;
}
.login-container .subtitle {
- margin: 0 0 1rem;
+ margin: 0.3rem 0 0;
color: var(--text-secondary);
font-size: 0.85rem;
}
.login-form {
width: 100%;
- max-width: 22rem;
+ max-width: 24rem;
background: var(--bg-surface);
border: 1px solid var(--border);
- border-radius: var(--radius-lg);
+ border-radius: var(--radius-md);
box-shadow: var(--shadow-md);
- padding: 1.25rem 1.25rem 1rem;
+ padding: 1.35rem;
+}
+.login-form label {
+ margin: 0 0 0.35rem;
+ color: var(--text-secondary);
+}
+.login-form input {
+ margin-bottom: 0.85rem;
+}
+.login-form .btn {
+ width: 100%;
+ margin-top: 0.15rem;
}
-.login-form .btn { width: 100%; margin-top: 0.5rem; }
.login-logo {
- width: 10rem;
- height: auto;
- margin-bottom: 0.5rem;
+ width: 3rem;
+ height: 3rem;
+ display: block;
+ flex: 0 0 auto;
}
diff --git a/web/css/player.css b/web/css/player.css
index c35cb07..45d80bc 100644
--- a/web/css/player.css
+++ b/web/css/player.css
@@ -129,7 +129,7 @@
}
.player.crop-mode video {
- object-fit: fill;
+ object-fit: cover;
object-position: var(--crop-x, 50%) var(--crop-y, 50%);
}