Modify the authentication handler to return an unauthorized error when an invalid or disabled bearer token is provided, rather than silently falling back to an anonymous request. This ensures that clients attempting to authenticate but failing (due to expired, malformed, or disabled tokens) are explicitly notified of the auth failure instead of proceeding anonymously. True anonymous requests without any Authorization header remain supported.
275 lines
4.5 KiB
CSS
275 lines
4.5 KiB
CSS
.download-view {
|
|
width: min(38rem, calc(100% - 2rem));
|
|
min-height: calc(100vh - 7.25rem);
|
|
margin: 0 auto;
|
|
padding: 2.5rem 0;
|
|
display: grid;
|
|
place-items: center;
|
|
}
|
|
|
|
.download-view-wide {
|
|
width: min(58rem, calc(100% - 2rem));
|
|
}
|
|
|
|
.download-card {
|
|
text-align: center;
|
|
}
|
|
|
|
.file-emblem {
|
|
width: 4rem;
|
|
height: 4rem;
|
|
margin: 0 auto 1rem;
|
|
display: grid;
|
|
place-items: center;
|
|
border-radius: var(--radius);
|
|
background: var(--muted);
|
|
color: var(--muted-foreground);
|
|
}
|
|
|
|
.file-emblem svg {
|
|
width: 1.75rem;
|
|
height: 1.75rem;
|
|
}
|
|
|
|
.badge-row {
|
|
margin-top: 1rem;
|
|
display: flex;
|
|
justify-content: center;
|
|
flex-wrap: wrap;
|
|
gap: 0.5rem;
|
|
}
|
|
|
|
|
|
.download-item {
|
|
color: var(--foreground);
|
|
text-align: left;
|
|
text-decoration: none;
|
|
}
|
|
|
|
.view-toolbar {
|
|
display: flex;
|
|
justify-content: center;
|
|
flex-wrap: wrap;
|
|
gap: 0.5rem;
|
|
margin-top: 1rem;
|
|
}
|
|
|
|
.button.is-active {
|
|
background: var(--primary);
|
|
color: var(--primary-foreground);
|
|
}
|
|
|
|
.file-browser {
|
|
transition: opacity 160ms ease;
|
|
}
|
|
|
|
.file-card {
|
|
position: relative;
|
|
}
|
|
|
|
.thumb-link {
|
|
display: block;
|
|
overflow: hidden;
|
|
flex: 0 0 4.75rem;
|
|
width: 4.75rem;
|
|
aspect-ratio: 16 / 10;
|
|
border: 1px solid var(--border);
|
|
border-radius: calc(var(--radius) - 0.125rem);
|
|
background: var(--muted);
|
|
}
|
|
|
|
.thumb-link img {
|
|
width: 100%;
|
|
height: 100%;
|
|
display: block;
|
|
object-fit: cover;
|
|
}
|
|
|
|
.file-main {
|
|
min-width: 0;
|
|
max-width: 100%;
|
|
flex: 1;
|
|
color: var(--foreground);
|
|
text-decoration: none;
|
|
}
|
|
|
|
.file-actions {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 0.5rem;
|
|
}
|
|
|
|
.preview-action [hidden] {
|
|
display: none;
|
|
}
|
|
|
|
.file-browser.is-thumbs {
|
|
grid-template-columns: repeat(auto-fill, minmax(10rem, 1fr));
|
|
}
|
|
|
|
.file-browser.is-thumbs .file-card {
|
|
display: grid;
|
|
min-width: 0;
|
|
align-content: start;
|
|
gap: 0.7rem;
|
|
}
|
|
|
|
.file-browser.is-thumbs .file-main {
|
|
width: 100%;
|
|
}
|
|
|
|
.file-browser.is-thumbs .thumb-link {
|
|
width: 100%;
|
|
flex-basis: auto;
|
|
}
|
|
|
|
.file-browser.is-thumbs .button {
|
|
width: 100%;
|
|
}
|
|
|
|
.file-browser.is-thumbs .file-actions {
|
|
width: 100%;
|
|
display: grid;
|
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
}
|
|
|
|
.file-browser.images-only .file-card:not([data-kind="image"]) {
|
|
display: none;
|
|
}
|
|
|
|
.context-menu {
|
|
position: fixed;
|
|
z-index: 30;
|
|
width: 10.75rem;
|
|
overflow: hidden;
|
|
border: 1px solid var(--border);
|
|
border-radius: calc(var(--radius) - 0.125rem);
|
|
background: color-mix(in srgb, var(--card) 96%, #000);
|
|
box-shadow: 0 18px 48px rgba(0, 0, 0, 0.46);
|
|
padding: 0.4rem;
|
|
}
|
|
|
|
.context-menu[hidden] {
|
|
display: none;
|
|
}
|
|
|
|
.context-menu button {
|
|
width: 100%;
|
|
min-height: 2.05rem;
|
|
justify-content: flex-start;
|
|
border-radius: calc(var(--radius) - 0.25rem);
|
|
padding: 0.42rem 0.5rem;
|
|
color: var(--foreground);
|
|
font-size: 0.8rem;
|
|
}
|
|
|
|
.context-menu button:hover,
|
|
.context-menu button:focus-visible,
|
|
.context-menu button.is-copied {
|
|
background: var(--accent);
|
|
}
|
|
|
|
.context-menu-top {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 0.5rem;
|
|
padding: 0.1rem 0.1rem 0.2rem 0.45rem;
|
|
}
|
|
|
|
.context-menu-top small {
|
|
color: color-mix(in srgb, var(--muted-foreground) 74%, transparent);
|
|
font-size: 0.72rem;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.context-menu-icons {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 0.2rem;
|
|
}
|
|
|
|
.context-menu-icons button {
|
|
width: 1.9rem;
|
|
min-height: 1.9rem;
|
|
padding: 0;
|
|
justify-content: center;
|
|
}
|
|
|
|
.context-menu hr {
|
|
height: 1px;
|
|
margin: 0.35rem 0.2rem;
|
|
border: 0;
|
|
background: var(--border);
|
|
}
|
|
|
|
.sr-only {
|
|
position: absolute;
|
|
width: 1px;
|
|
height: 1px;
|
|
overflow: hidden;
|
|
clip: rect(0, 0, 0, 0);
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.unlock-form {
|
|
margin: 1rem auto 0;
|
|
display: grid;
|
|
max-width: 22rem;
|
|
gap: 0.75rem;
|
|
}
|
|
|
|
.manage-details {
|
|
display: grid;
|
|
gap: 0.5rem;
|
|
margin: 1rem 0 0;
|
|
text-align: left;
|
|
}
|
|
|
|
.manage-details div {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
gap: 1rem;
|
|
border-bottom: 1px solid var(--border);
|
|
padding: 0.45rem 0;
|
|
}
|
|
|
|
.manage-details dt,
|
|
.manage-details dd {
|
|
margin: 0;
|
|
min-width: 0;
|
|
}
|
|
|
|
.manage-details dt {
|
|
color: var(--muted-foreground);
|
|
font-size: 0.78rem;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.manage-details dd {
|
|
color: var(--foreground);
|
|
font-size: 0.84rem;
|
|
text-align: right;
|
|
}
|
|
|
|
.preview-stage {
|
|
overflow: hidden;
|
|
margin-bottom: 1rem;
|
|
border: 1px solid var(--border);
|
|
border-radius: var(--radius);
|
|
background: var(--background);
|
|
}
|
|
|
|
.preview-stage img,
|
|
.preview-stage video {
|
|
width: 100%;
|
|
max-height: 55vh;
|
|
display: block;
|
|
object-fit: contain;
|
|
}
|
|
|
|
.preview-stage audio {
|
|
width: calc(100% - 2rem);
|
|
margin: 1rem;
|
|
}
|