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.
175 lines
2.8 KiB
CSS
175 lines
2.8 KiB
CSS
.admin-header,
|
|
.table-header {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 1rem;
|
|
}
|
|
|
|
.kicker {
|
|
margin: 0 0 0.4rem;
|
|
color: var(--muted-foreground);
|
|
font-size: 0.78rem;
|
|
font-weight: 700;
|
|
text-transform: uppercase;
|
|
}
|
|
|
|
.metric-grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(6, minmax(0, 1fr));
|
|
gap: 0.8rem;
|
|
margin-top: 1.5rem;
|
|
}
|
|
|
|
.metric-card {
|
|
border: 1px solid var(--border);
|
|
border-radius: var(--radius);
|
|
background: rgba(24, 24, 27, 0.78);
|
|
padding: 1rem;
|
|
}
|
|
|
|
.metric-card span,
|
|
.table-header p {
|
|
display: block;
|
|
color: var(--muted-foreground);
|
|
font-size: 0.78rem;
|
|
}
|
|
|
|
.metric-card strong {
|
|
display: block;
|
|
margin-top: 0.4rem;
|
|
color: var(--foreground);
|
|
font-size: 1.35rem;
|
|
}
|
|
|
|
.admin-table-card {
|
|
margin-top: 1rem;
|
|
}
|
|
|
|
.table-header h2 {
|
|
margin: 0;
|
|
font-size: 1.05rem;
|
|
}
|
|
|
|
.table-header p {
|
|
margin: 0.3rem 0 0;
|
|
}
|
|
|
|
.admin-table-wrap {
|
|
overflow-x: auto;
|
|
margin-top: 1rem;
|
|
}
|
|
|
|
.admin-table {
|
|
width: 100%;
|
|
border-collapse: collapse;
|
|
font-size: 0.85rem;
|
|
}
|
|
|
|
.admin-table th,
|
|
.admin-table td {
|
|
border-bottom: 1px solid var(--border);
|
|
padding: 0.75rem;
|
|
text-align: left;
|
|
vertical-align: middle;
|
|
}
|
|
|
|
.admin-table th {
|
|
color: var(--muted-foreground);
|
|
font-weight: 650;
|
|
}
|
|
|
|
.table-actions {
|
|
display: flex;
|
|
align-items: flex-start;
|
|
flex-wrap: wrap;
|
|
gap: 0.5rem;
|
|
}
|
|
|
|
.table-actions form {
|
|
margin: 0;
|
|
}
|
|
|
|
|
|
/* Inline row edit (details/summary in table cells) */
|
|
.row-edit {
|
|
margin-top: 0.35rem;
|
|
}
|
|
|
|
.row-edit > summary {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
color: var(--muted-foreground);
|
|
font-size: 0.72rem;
|
|
cursor: pointer;
|
|
list-style: none;
|
|
text-decoration: underline;
|
|
text-decoration-style: dotted;
|
|
text-underline-offset: 2px;
|
|
opacity: 0.75;
|
|
}
|
|
|
|
.row-edit > summary::-webkit-details-marker { display: none; }
|
|
|
|
.row-edit[open] > summary {
|
|
opacity: 1;
|
|
}
|
|
|
|
.row-edit-form {
|
|
display: flex;
|
|
gap: 0.4rem;
|
|
align-items: center;
|
|
margin-top: 0.4rem;
|
|
}
|
|
|
|
.row-edit-form input,
|
|
.row-edit-form select {
|
|
width: auto;
|
|
flex: 1;
|
|
min-width: 8rem;
|
|
min-height: 1.9rem;
|
|
font-size: 0.8rem;
|
|
padding: 0.25rem 0.55rem;
|
|
}
|
|
|
|
.storage-edit-form {
|
|
width: min(34rem, calc(100vw - 2rem));
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr;
|
|
align-items: end;
|
|
gap: 0.6rem;
|
|
padding: 0.85rem;
|
|
border: 1px solid var(--border);
|
|
border-radius: var(--radius);
|
|
background: var(--card);
|
|
box-shadow: none;
|
|
}
|
|
|
|
.storage-edit-form label {
|
|
display: grid;
|
|
gap: 0.25rem;
|
|
}
|
|
|
|
.storage-edit-form label span {
|
|
color: var(--muted-foreground);
|
|
font-size: 0.72rem;
|
|
}
|
|
|
|
.storage-edit-form textarea {
|
|
min-height: 5rem;
|
|
resize: vertical;
|
|
}
|
|
|
|
.storage-edit-form .checkbox-field,
|
|
.storage-edit-form button {
|
|
align-self: center;
|
|
}
|
|
|
|
@media (max-width: 720px) {
|
|
.storage-edit-form {
|
|
position: static;
|
|
grid-template-columns: 1fr;
|
|
width: 100%;
|
|
}
|
|
}
|