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.
303 lines
4.9 KiB
CSS
303 lines
4.9 KiB
CSS
.upload-view {
|
|
width: min(48rem, calc(100% - 2rem));
|
|
min-height: calc(100vh - 7.25rem);
|
|
margin: 0 auto;
|
|
padding: 2.5rem 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: center;
|
|
gap: 1.5rem;
|
|
}
|
|
|
|
.hero-copy {
|
|
text-align: center;
|
|
}
|
|
|
|
|
|
.drop-zone {
|
|
min-height: 19rem;
|
|
display: grid;
|
|
place-items: center;
|
|
align-content: center;
|
|
gap: 0.65rem;
|
|
padding: 2rem;
|
|
border: 2px dashed var(--border);
|
|
border-radius: var(--radius);
|
|
background: rgba(39, 39, 42, 0.42);
|
|
text-align: center;
|
|
cursor: pointer;
|
|
transition: border-color 160ms ease, background 160ms ease;
|
|
}
|
|
|
|
.drop-zone:hover,
|
|
.drop-zone.is-dragging {
|
|
border-color: var(--primary);
|
|
background: rgba(39, 39, 42, 0.68);
|
|
}
|
|
|
|
.drop-zone input {
|
|
position: absolute;
|
|
inline-size: 1px;
|
|
block-size: 1px;
|
|
opacity: 0;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.drop-icon {
|
|
width: 2.75rem;
|
|
height: 2.75rem;
|
|
display: grid;
|
|
place-items: center;
|
|
color: var(--muted-foreground);
|
|
}
|
|
|
|
.drop-icon svg {
|
|
width: 2.5rem;
|
|
height: 2.5rem;
|
|
}
|
|
|
|
.drop-title {
|
|
font-size: 1rem;
|
|
font-weight: 650;
|
|
}
|
|
|
|
.drop-copy,
|
|
.drop-meta {
|
|
color: var(--muted-foreground);
|
|
font-size: 0.9rem;
|
|
}
|
|
|
|
.drop-meta {
|
|
margin-top: 0.75rem;
|
|
font-size: 0.78rem;
|
|
}
|
|
|
|
.advanced-options {
|
|
margin-top: 1rem;
|
|
border: 1px solid var(--border);
|
|
border-radius: var(--radius);
|
|
background: rgba(39, 39, 42, 0.28);
|
|
padding: 0.75rem 0.9rem;
|
|
}
|
|
|
|
.advanced-options summary {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 0.35rem;
|
|
color: var(--foreground);
|
|
cursor: pointer;
|
|
font-size: 0.875rem;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.option-grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
gap: 0.9rem;
|
|
margin-top: 1rem;
|
|
}
|
|
|
|
|
|
.form-footer,
|
|
.result-header {
|
|
margin-top: 1rem;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 1rem;
|
|
}
|
|
|
|
.form-footer p,
|
|
#result-meta {
|
|
margin: 0;
|
|
color: var(--muted-foreground);
|
|
font-size: 0.82rem;
|
|
}
|
|
|
|
.button,
|
|
button {
|
|
min-height: 2.25rem;
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 0.45rem;
|
|
border: 1px solid transparent;
|
|
border-radius: calc(var(--radius) - 0.125rem);
|
|
padding: 0.45rem 0.85rem;
|
|
color: var(--foreground);
|
|
background: transparent;
|
|
font: inherit;
|
|
font-size: 0.875rem;
|
|
font-weight: 600;
|
|
line-height: 1;
|
|
text-decoration: none;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.button-primary {
|
|
background: var(--primary);
|
|
color: var(--primary-foreground);
|
|
}
|
|
|
|
.button-primary:hover {
|
|
background: #e4e4e7;
|
|
}
|
|
|
|
.button-outline {
|
|
border-color: var(--border);
|
|
background: var(--background);
|
|
}
|
|
|
|
.button-outline:hover,
|
|
.button-ghost:hover {
|
|
background: var(--accent);
|
|
}
|
|
|
|
.button-danger {
|
|
border-color: rgba(248, 113, 113, 0.28);
|
|
background: rgba(127, 29, 29, 0.3);
|
|
color: #fecaca;
|
|
}
|
|
|
|
.button-danger:hover {
|
|
background: rgba(127, 29, 29, 0.55);
|
|
}
|
|
|
|
.button-wide {
|
|
width: 100%;
|
|
min-height: 2.75rem;
|
|
margin-top: 1.25rem;
|
|
}
|
|
|
|
.upload-progress {
|
|
margin-top: 1rem;
|
|
}
|
|
|
|
.progress-row {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
color: var(--muted-foreground);
|
|
font-size: 0.8rem;
|
|
}
|
|
|
|
.progress {
|
|
height: 0.4rem;
|
|
margin-top: 0.55rem;
|
|
overflow: hidden;
|
|
border-radius: 999px;
|
|
background: var(--muted);
|
|
}
|
|
|
|
.progress span {
|
|
display: block;
|
|
width: 100%;
|
|
height: 100%;
|
|
background: var(--primary);
|
|
transform-origin: left center;
|
|
transform: scaleX(0);
|
|
transition: transform 180ms ease;
|
|
}
|
|
|
|
.upload-result {
|
|
border-color: rgba(244, 244, 245, 0.24);
|
|
background: rgba(244, 244, 245, 0.06);
|
|
}
|
|
|
|
.result-title {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 0.5rem;
|
|
font-weight: 650;
|
|
}
|
|
|
|
.result-title svg {
|
|
color: var(--success);
|
|
}
|
|
|
|
.result-actions {
|
|
display: flex;
|
|
gap: 0.5rem;
|
|
}
|
|
|
|
.manage-link {
|
|
margin: 0.9rem 0 0;
|
|
color: var(--muted-foreground);
|
|
font-size: 0.78rem;
|
|
text-align: left;
|
|
}
|
|
|
|
.manage-link a {
|
|
color: var(--foreground);
|
|
font-weight: 600;
|
|
}
|
|
|
|
.result-list,
|
|
.download-list {
|
|
display: grid;
|
|
gap: 0.6rem;
|
|
margin-top: 1rem;
|
|
}
|
|
|
|
.upload-queue {
|
|
margin-top: 1rem;
|
|
}
|
|
|
|
.result-item,
|
|
.download-item {
|
|
min-width: 0;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 0.8rem;
|
|
border: 1px solid var(--border);
|
|
border-radius: calc(var(--radius) - 0.125rem);
|
|
background: var(--background);
|
|
padding: 0.75rem;
|
|
}
|
|
|
|
.result-item > span,
|
|
.download-item > span {
|
|
min-width: 0;
|
|
max-width: 100%;
|
|
flex: 1;
|
|
}
|
|
|
|
.result-item strong,
|
|
.download-item strong,
|
|
.result-item code,
|
|
.download-item code {
|
|
display: block;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.file-progress-side {
|
|
width: min(10rem, 32vw);
|
|
display: grid;
|
|
gap: 0.35rem;
|
|
}
|
|
|
|
.file-progress-percent {
|
|
color: var(--muted-foreground);
|
|
font-size: 0.75rem;
|
|
text-align: right;
|
|
}
|
|
|
|
.file-progress {
|
|
height: 0.35rem;
|
|
margin-top: 0;
|
|
}
|
|
|
|
.result-item small,
|
|
.download-item small,
|
|
.result-item code,
|
|
.download-item code {
|
|
display: block;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
margin-top: 0.25rem;
|
|
color: var(--muted-foreground);
|
|
font-size: 0.78rem;
|
|
}
|