feat: improve responsive admin experience

This commit is contained in:
2026-08-04 16:47:14 +08:00
parent c71b1351d6
commit 631a362501
20 changed files with 522 additions and 801 deletions
+1 -1
View File
File diff suppressed because one or more lines are too long
+121
View File
@@ -184,6 +184,107 @@
border-color: rgba(0, 94, 184, .22);
border-top-color: #005EB8;
}
/* Authentication-specific controls, compiled with the shared Tailwind bundle. */
.password-toggle {
position: absolute;
top: 50%;
right: .75rem;
display: inline-flex;
width: 32px;
height: 32px;
align-items: center;
justify-content: center;
transform: translateY(-50%);
border: 0;
border-radius: .5rem;
background: transparent;
color: #64748b;
padding: 0;
transition: background-color .15s ease, color .15s ease;
}
.password-toggle:hover {
background: rgba(148, 163, 184, .16);
color: #005EB8;
}
.password-toggle:focus-visible {
outline: 2px solid #005EB8;
outline-offset: 2px;
}
.password-toggle:disabled {
cursor: not-allowed;
opacity: .45;
}
.password-toggle .material-symbols-outlined {
font-size: 20px;
line-height: 1;
}
.auth-input-error {
border-color: #dc2626 !important;
background: #fff7f7 !important;
box-shadow: 0 0 0 3px rgba(220, 38, 38, .12) !important;
}
.captcha-token {
-webkit-user-select: none;
user-select: none;
}
.dot-grid {
background-image: radial-gradient(circle at 1px 1px, rgba(148, 163, 184, .30) 1.2px, transparent 0);
background-size: 42px 42px;
}
.panel-frame {
border: none;
box-shadow: none;
}
.gradient-board {
background: linear-gradient(180deg, #2455a3 0%, #123e7d 100%);
}
.auth-alert {
pointer-events: none;
top: max(1rem, env(safe-area-inset-top));
right: auto;
left: 50%;
width: calc(100vw - 2rem);
max-width: 26rem;
max-height: calc(100dvh - 2rem);
overflow-y: auto;
opacity: 0;
transform: translate(-50%, .5rem);
}
.auth-alert::before {
position: absolute;
top: -7px;
left: 24px;
width: 14px;
height: 14px;
transform: rotate(45deg);
border-top: 1px solid currentColor;
border-left: 1px solid currentColor;
background: #fff;
color: #bfdbfe;
content: '';
}
.auth-alert.is-error::before {
color: #fecaca;
}
.auth-alert.is-visible {
pointer-events: auto;
opacity: 1;
transform: translate(-50%, 0);
}
}
@keyframes spin {
@@ -191,3 +292,23 @@
transform: rotate(360deg);
}
}
@media (min-width: 1280px) {
.auth-alert {
width: 320px;
max-width: calc(100vw - 2rem);
transform: translateX(.75rem);
}
.auth-alert::before {
top: var(--auth-alert-arrow-top, 44px);
left: -7px;
border: 0;
border-bottom: 1px solid currentColor;
border-left: 1px solid currentColor;
}
.auth-alert.is-visible {
transform: translateX(0);
}
}