Profile: store covers in object storage (WebP); add covers config; remember artworks categories content-type preference

This commit is contained in:
2026-03-29 09:22:36 +02:00
parent cab4fbd83e
commit 1da7d3bf88
27 changed files with 703 additions and 448 deletions

View File

@@ -53,6 +53,21 @@
input[type="file"] {
@apply bg-transparent text-soft p-0;
}
.auth-card {
max-width: 720px;
margin-left: auto;
margin-right: auto;
}
.auth-card h1 {
font-size: 1.25rem;
line-height: 1.2;
}
.auth-card p {
color: rgba(203,213,225,0.9);
}
}
@@ -61,9 +76,88 @@
box-sizing: border-box;
border: 0 solid transparent;
}
h1, h2, h3, h4, h5, h6 {
color: #ffffff;
margin-top: 1rem;
margin-bottom: 0.5rem;
}
h1 {
font-size: 2.25rem;
line-height: 1.05;
font-weight: 800;
letter-spacing: -0.02em;
}
h2 {
font-size: 1.5rem;
line-height: 1.15;
font-weight: 700;
letter-spacing: -0.01em;
}
h3 {
font-size: 1.125rem;
line-height: 1.2;
font-weight: 600;
}
h4 {
font-size: 1rem;
line-height: 1.25;
font-weight: 600;
}
h5 {
font-size: 0.95rem;
line-height: 1.25;
font-weight: 600;
}
h6 {
font-size: 0.85rem;
line-height: 1.3;
font-weight: 600;
text-transform: uppercase;
opacity: 0.85;
}
.prose h1 {
font-size: 2.25rem;
}
.prose h2 {
font-size: 1.5rem;
}
.prose h3 {
font-size: 1.125rem;
}
.prose h4,
.prose h5,
.prose h6 {
font-weight: 600;
}
[x-cloak] {
display: none !important;
}
}
@layer utilities {
.nova-card-enter {
opacity: 0;
transform: translateY(10px) scale(0.995);
}
.nova-card-enter.nova-card-enter-active {
transition: transform 380ms cubic-bezier(.2,.9,.2,1), opacity 380ms ease-out;
opacity: 1;
transform: none;
}
.nova-scrollbar {
scrollbar-width: thin;
scrollbar-color: rgba(255,255,255,0.14) transparent;
@@ -171,6 +265,106 @@
.messages-page *::-webkit-scrollbar-corner {
background: transparent;
}
/* Gallery page helpers */
.nb-hero-fade {
background: linear-gradient(180deg, rgba(17,24,39,0) 0%, rgba(7,10,15,0.9) 60%, rgba(7,10,15,1) 100%);
}
.nb-hero-gradient {
background: linear-gradient(135deg, rgba(224,122,33,0.08) 0%, rgba(15,23,36,0) 50%, rgba(21,36,58,0.4) 100%);
animation: nb-hero-shimmer 8s ease-in-out infinite alternate;
}
.gallery-rank-tab {
-webkit-tap-highlight-color: transparent;
}
.gallery-rank-tab .nb-tab-indicator {
transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1), background-color 200ms ease;
}
.nb-scrollbar-none {
-ms-overflow-style: none;
scrollbar-width: none;
}
.nb-scrollbar-none::-webkit-scrollbar {
display: none;
}
[data-react-masonry-gallery] {
animation: nb-gallery-fade-in 300ms ease-out both;
}
.nb-filter-choice {
display: inline-flex;
cursor: pointer;
}
.nb-filter-choice--block {
display: flex;
width: 100%;
}
.nb-filter-choice-label {
display: inline-flex;
align-items: center;
padding: 0.375rem 0.875rem;
border-radius: 9999px;
border: 1px solid rgba(255,255,255,0.1);
background: rgba(255,255,255,0.05);
color: rgba(214,224,238,0.8);
font-size: 0.8125rem;
font-weight: 500;
transition: background 150ms ease, color 150ms ease, border-color 150ms ease;
white-space: nowrap;
}
.nb-filter-choice--block .nb-filter-choice-label {
border-radius: 0.6rem;
width: 100%;
}
.nb-filter-choice input:checked ~ .nb-filter-choice-label {
background: #E07A21;
border-color: #E07A21;
color: #fff;
box-shadow: 0 1px 8px rgba(224,122,33,0.35);
}
.nb-filter-choice input:focus-visible ~ .nb-filter-choice-label {
outline: 2px solid rgba(224,122,33,0.6);
outline-offset: 2px;
}
.nb-filter-input {
appearance: none;
background: rgba(255,255,255,0.05);
border: 1px solid rgba(255,255,255,0.1);
border-radius: 0.5rem;
color: rgba(255,255,255,0.85);
font-size: 0.8125rem;
padding: 0.425rem 0.75rem;
transition: border-color 150ms ease;
color-scheme: dark;
}
.nb-filter-input:focus {
outline: none;
border-color: rgba(224,122,33,0.6);
box-shadow: 0 0 0 3px rgba(224,122,33,0.15);
}
@keyframes nb-hero-shimmer {
0% { opacity: 0.6; }
100% { opacity: 1; }
}
@keyframes nb-gallery-fade-in {
from { opacity: 0; transform: translateY(12px); }
to { opacity: 1; transform: translateY(0); }
}
}
/* ─── TipTap rich text editor ─── */