Files
grok2api/app/static/admin/css/token.css
T

581 lines
12 KiB
CSS

/* Shared styles moved to common.css */
/* Table Styles */
.geist-table {
width: 100%;
border-collapse: separate;
border-spacing: 0;
font-size: 13px;
/* Unified font size */
}
.geist-table th {
text-align: center;
/* Default center */
padding: 0 16px;
border-bottom: 1px solid var(--accents-1);
color: var(--accents-5);
font-weight: 500;
height: 40px;
/* Reduced height */
background: #fff;
}
.geist-table th.text-left {
text-align: left;
}
.geist-table th.text-right {
text-align: right;
}
.geist-table td {
padding: 8px 14px;
border-bottom: 1px solid #fafafa;
background: #fff;
vertical-align: middle;
height: 44px;
color: var(--accents-6);
text-align: center;
/* Default center */
transition: background 0.15s;
font-size: 12px;
}
.geist-table td.text-left {
text-align: left;
}
.geist-table td.text-right {
text-align: right;
}
.geist-table tr:last-child td {
border-bottom: none;
}
.geist-table tr:hover td {
background: #fafafa;
}
.geist-table tr.row-selected td {
background: #f6f7f9;
}
.geist-table tr.row-selected:hover td {
background: #f0f2f5;
}
.pagination-bar {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
padding: 8px 4px;
margin-bottom: 4px;
}
/* Elegant Badges */
.badge {
display: inline-flex;
align-items: center;
padding: 0 8px;
height: 20px;
border-radius: 9999px;
font-size: 12px;
font-weight: 500;
line-height: 20px;
white-space: nowrap;
}
.badge-gray {
background: #f3f4f6;
color: #4b5563;
}
.badge-green {
background: #ecfdf5;
color: #059669;
}
.badge-orange {
background: #fff7ed;
color: #d97706;
}
.badge-red {
background: #fef2f2;
color: #dc2626;
}
.badge-purple {
background: #f3e8ff;
color: #9333ea;
}
.checkbox {
width: 12px;
height: 12px;
border-radius: 4px;
border: 1px solid var(--accents-3);
appearance: none;
cursor: pointer;
position: relative;
background: #fff;
transition: all 0.2s;
margin: 0 auto;
/* Center in cell */
display: block;
}
.checkbox:checked {
background-color: #000;
border-color: #000;
}
.checkbox:checked::after {
content: '';
position: absolute;
top: 45%;
left: 50%;
width: 3px;
height: 6px;
border: solid white;
border-width: 0 2px 2px 0;
transform: translate(-50%, -60%) rotate(45deg);
}
.checkbox:focus-visible {
outline: none;
box-shadow: 0 0 0 2px #000;
border-color: #000;
}
/* Custom Scrollbar for Table Wrapper if needed */
.table-wrapper {
border-radius: 8px;
overflow: hidden;
}
.batch-link {
font-size: 12px;
color: var(--accents-5);
text-decoration: underline;
background: transparent;
border: none;
}
.batch-link:hover {
color: #000;
}
.toolbar-sep {
width: 1px;
height: 14px;
background: var(--border);
display: inline-block;
}
#batch-actions {
display: none;
position: fixed;
bottom: 24px;
left: 50%;
transform: translateX(-50%);
width: fit-content;
max-width: 95%;
background: rgba(255, 255, 255, 0.85);
backdrop-filter: blur(20px) saturate(180%);
-webkit-backdrop-filter: blur(20px) saturate(180%);
border: 1px solid rgba(255, 255, 255, 0.3);
border-radius: 20px;
padding: 10px 16px;
box-shadow: 0 12px 40px rgba(0, 0, 0, 0.15),
0 0 0 1px rgba(0, 0, 0, 0.05);
z-index: 100;
transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1);
}
#batch-actions.show-actions {
display: flex;
animation: slideUp 0.4s cubic-bezier(0.16, 1, 0.3, 1) forwards;
}
@keyframes slideUp {
from { transform: translate(-50%, 30px); opacity: 0; }
to { transform: translate(-50%, 0); opacity: 1; }
}
@media (max-width: 900px) {
main {
padding-bottom: 160px !important;
}
#batch-actions.show-actions {
display: flex;
position: fixed;
bottom: 24px;
left: 16px;
right: 16px;
width: auto;
transform: translateY(0); /* 移动端覆盖居中定位 */
border-radius: 24px;
padding: 14px;
flex-direction: column;
background: rgba(255, 255, 255, 0.95);
border: 1px solid rgba(0, 0, 0, 0.08);
animation: slideUpMobile 0.4s cubic-bezier(0.16, 1, 0.3, 1) forwards;
}
@keyframes slideUpMobile {
from { transform: translateY(30px); opacity: 0; }
to { transform: translateY(0); opacity: 1; }
}
#batch-actions .text-sm.font-medium {
justify-content: center;
padding-bottom: 12px;
margin-bottom: 10px;
border-bottom: 1px dashed var(--border);
letter-spacing: 0.02em;
}
#batch-actions #selected-count {
background: #000;
color: #fff;
padding: 2px 8px;
font-weight: 600;
}
#batch-actions .batch-action-buttons {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 8px;
}
#batch-actions .batch-action-buttons .geist-button-outline,
#batch-actions .batch-action-buttons .geist-button-danger {
height: 42px;
border-radius: 12px;
font-size: 13px;
font-weight: 500;
background: rgba(255, 255, 255, 0.5);
border: 1px solid rgba(0, 0, 0, 0.05);
box-shadow: 0 2px 4px rgba(0,0,0,0.02);
}
#batch-actions .batch-action-buttons .geist-button-danger {
background: #ff4d4f;
color: white;
border: none;
}
}
#batch-actions .geist-button-outline:hover {
background: #f3f4f6;
}
.modal-overlay {
position: fixed;
inset: 0;
z-index: 50;
display: flex;
align-items: center;
justify-content: center;
background: rgba(0, 0, 0, 0.35);
backdrop-filter: blur(4px);
opacity: 0;
pointer-events: none;
transition: opacity 0.2s ease;
}
.modal-overlay.hidden {
display: none;
}
.modal-overlay.is-open {
opacity: 1;
pointer-events: auto;
}
.modal-content {
background: #fff;
border-radius: 12px;
padding: 16px;
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.2);
width: 100%;
transform: scale(0.96);
transition: transform 0.2s ease;
font-size: 13px;
color: var(--accents-6);
}
.modal-overlay.is-open .modal-content {
transform: scale(1);
}
.modal-lg {
max-width: 520px;
}
.modal-md {
max-width: 420px;
}
.modal-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 10px;
}
.modal-title {
font-size: 14px;
font-weight: 600;
color: var(--accents-7);
}
.modal-label {
font-size: 13px;
font-weight: 500;
color: var(--accents-7);
}
.modal-close {
color: var(--accents-4);
transition: color 0.15s;
}
.modal-close:hover {
color: #000;
}
.confirm-dialog-body {
padding: 16px;
display: flex;
flex-direction: column;
gap: 10px;
}
.confirm-dialog-title {
font-size: 14px;
font-weight: 600;
color: var(--accents-7);
}
.confirm-dialog-message {
font-size: 13px;
color: var(--accents-5);
line-height: 1.5;
}
.confirm-dialog-actions {
display: flex;
justify-content: flex-end;
gap: 8px;
padding-top: 8px;
border-top: 1px solid var(--border);
}
.confirm-dialog .modal-content {
padding: 0;
}
/* Tab Styles */
#status-tabs {
border: none;
background: #f6f6f6;
padding: 6px;
gap: 6px;
border-radius: 999px;
}
.tab-item {
position: relative;
padding: 6px 12px;
margin-right: 0;
font-size: 12.5px;
font-weight: 500;
color: var(--accents-5);
background: transparent;
border: none;
border-radius: 999px;
cursor: pointer;
transition: color 0.15s ease, background 0.15s ease;
white-space: nowrap;
display: inline-flex;
align-items: center;
gap: 8px;
}
.tab-item:hover {
color: var(--geist-foreground, #000);
background: rgba(0, 0, 0, 0.05);
}
.tab-item.active {
color: var(--geist-foreground, #000);
background: #fff;
}
#status-tabs .badge {
height: 20px;
line-height: 20px;
font-size: 11px;
padding: 0 8px;
}
.tab-item:disabled {
cursor: not-allowed;
opacity: 0.5;
}
/* Hide scrollbar for tabs on mobile */
.hide-scrollbar {
-ms-overflow-style: none;
scrollbar-width: none;
}
.hide-scrollbar::-webkit-scrollbar {
display: none;
}
.tab-sep {
width: 1px;
height: 16px;
background: #e5e5e5;
margin: 0 4px;
}
html[data-theme='dark'] #status-tabs {
background: #18212d;
border: 1px solid #2b3440;
}
html[data-theme='dark'] .tab-item {
color: #a8b3c4;
}
html[data-theme='dark'] .tab-item:hover {
color: #e6edf3;
background: rgba(230, 237, 243, 0.08);
}
html[data-theme='dark'] .tab-item.active {
color: #e6edf3;
background: #243041;
}
html[data-theme='dark'] .tab-sep {
background: #344051;
}
html[data-theme='dark'] .badge {
background: #243041;
color: #cbd5e1;
}
html[data-theme='dark'] .badge-gray {
background: #2a3342;
color: #cbd5e1;
}
html[data-theme='dark'] .badge-green {
background: rgba(16, 185, 129, 0.18);
color: #6ee7b7;
}
html[data-theme='dark'] .badge-orange {
background: rgba(245, 158, 11, 0.2);
color: #fbbf24;
}
html[data-theme='dark'] .badge-red {
background: rgba(239, 68, 68, 0.2);
color: #fca5a5;
}
html[data-theme='dark'] .badge-purple {
background: rgba(168, 85, 247, 0.22);
color: #d8b4fe;
}
@media (max-width: 900px) {
main {
padding-bottom: 5rem; /* 为底部浮窗留出空间 */
}
.pagination-bar {
display: block;
padding: 4px;
}
.pagination-bar #pagination-info {
margin-bottom: 8px;
font-size: 11px;
}
.pagination-bar .flex.items-center.gap-2 {
display: flex;
flex-wrap: wrap;
gap: 4px;
}
.pagination-bar .geist-button-outline {
padding: 0 8px;
height: 28px;
font-size: 11px;
flex: 1 1 auto;
min-width: calc(33.33% - 4px);
}
#page-size {
width: 100%;
height: 28px;
font-size: 11px;
}
#batch-actions {
left: 12px;
right: 12px;
bottom: 12px;
transform: none;
width: auto;
max-width: none;
border-radius: 12px;
padding: 4px 8px;
gap: 4px;
flex-direction: column;
align-items: stretch;
}
#batch-actions .toolbar-sep {
display: none;
}
#batch-actions .text-sm.font-medium {
padding: 4px 0;
border-bottom: 1px solid var(--border);
margin-bottom: 4px;
}
#batch-actions .batch-action-buttons {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 4px;
}
#batch-actions .batch-action-buttons .geist-button-outline,
#batch-actions .batch-action-buttons .geist-button-danger {
width: 100%;
height: 32px;
padding: 0;
font-size: 11px;
justify-content: center;
}
.modal-content {
max-height: calc(100dvh - 32px);
overflow: auto;
}
}