ac90ef9206
PostCSS 将 :global(spin) 解析为伪元素 :: 导致 Vercel 构建失败。 改用在每个 CSS Module 中定义本地 @keyframes spin。
488 lines
8.2 KiB
CSS
488 lines
8.2 KiB
CSS
.page {
|
|
position: relative;
|
|
min-height: 100vh;
|
|
padding: 34px 20px 28px;
|
|
color: #e2ecff;
|
|
background:
|
|
radial-gradient(circle at 8% 8%, rgba(56, 189, 248, 0.24), transparent 38%),
|
|
radial-gradient(circle at 92% 10%, rgba(45, 212, 191, 0.2), transparent 34%),
|
|
radial-gradient(circle at 50% 120%, rgba(14, 165, 233, 0.26), transparent 40%),
|
|
#050b16;
|
|
overflow-x: hidden;
|
|
}
|
|
|
|
.aurora {
|
|
position: absolute;
|
|
inset: -10% -5% auto;
|
|
height: 340px;
|
|
background: linear-gradient(
|
|
95deg,
|
|
rgba(56, 189, 248, 0.2) 0%,
|
|
rgba(45, 212, 191, 0.12) 46%,
|
|
rgba(99, 102, 241, 0.08) 100%
|
|
);
|
|
filter: blur(58px);
|
|
pointer-events: none;
|
|
}
|
|
|
|
.gridNoise {
|
|
position: absolute;
|
|
inset: 0;
|
|
background-image:
|
|
linear-gradient(rgba(148, 163, 184, 0.06) 1px, transparent 1px),
|
|
linear-gradient(90deg, rgba(148, 163, 184, 0.06) 1px, transparent 1px);
|
|
background-size: 42px 42px;
|
|
mask-image: radial-gradient(circle at 50% 25%, black, transparent 72%);
|
|
pointer-events: none;
|
|
opacity: 0.22;
|
|
}
|
|
|
|
.shell {
|
|
position: relative;
|
|
width: min(1120px, 100%);
|
|
margin: 0 auto;
|
|
display: grid;
|
|
gap: 16px;
|
|
}
|
|
|
|
.topBar {
|
|
display: flex;
|
|
align-items: flex-start;
|
|
justify-content: space-between;
|
|
gap: 14px;
|
|
border: 1px solid rgba(148, 163, 184, 0.2);
|
|
background: rgba(15, 23, 42, 0.76);
|
|
backdrop-filter: blur(14px);
|
|
border-radius: 16px;
|
|
padding: 16px 18px;
|
|
}
|
|
|
|
.brandBlock {
|
|
display: grid;
|
|
gap: 5px;
|
|
}
|
|
|
|
.title {
|
|
margin: 0;
|
|
font-size: clamp(24px, 2.2vw, 30px);
|
|
line-height: 1.15;
|
|
letter-spacing: -0.02em;
|
|
color: #f8fbff;
|
|
}
|
|
|
|
.subtitle {
|
|
margin: 0;
|
|
font-size: 13px;
|
|
color: #8ea3c9;
|
|
}
|
|
|
|
.actions {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
}
|
|
|
|
.ghostBtn,
|
|
.primaryBtn {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 6px;
|
|
height: 36px;
|
|
border-radius: 10px;
|
|
border: 1px solid rgba(148, 163, 184, 0.35);
|
|
padding: 0 12px;
|
|
color: #dce8ff;
|
|
font-size: 12px;
|
|
font-weight: 600;
|
|
text-decoration: none;
|
|
transition: all 0.22s ease;
|
|
background: rgba(15, 23, 42, 0.5);
|
|
cursor: pointer;
|
|
}
|
|
|
|
.ghostBtn:hover,
|
|
.primaryBtn:hover {
|
|
transform: translateY(-1px);
|
|
}
|
|
|
|
.ghostBtn:hover {
|
|
border-color: rgba(45, 212, 191, 0.45);
|
|
color: #f8fcff;
|
|
background: rgba(45, 212, 191, 0.12);
|
|
}
|
|
|
|
.primaryBtn {
|
|
border-color: rgba(56, 189, 248, 0.52);
|
|
background: linear-gradient(135deg, rgba(14, 116, 144, 0.88), rgba(6, 182, 212, 0.74));
|
|
color: #f6fcff;
|
|
box-shadow: 0 12px 26px rgba(8, 47, 73, 0.35);
|
|
}
|
|
|
|
.primaryBtn:hover {
|
|
border-color: rgba(103, 232, 249, 0.72);
|
|
box-shadow: 0 16px 30px rgba(14, 116, 144, 0.42);
|
|
}
|
|
|
|
.heroCard {
|
|
display: grid;
|
|
grid-template-columns: auto 1fr auto;
|
|
gap: 16px;
|
|
align-items: center;
|
|
border: 1px solid rgba(56, 189, 248, 0.24);
|
|
background:
|
|
linear-gradient(135deg, rgba(14, 116, 144, 0.17) 0%, rgba(15, 23, 42, 0.86) 58%),
|
|
rgba(15, 23, 42, 0.8);
|
|
border-radius: 18px;
|
|
padding: 18px 20px;
|
|
}
|
|
|
|
.avatar {
|
|
width: 64px;
|
|
height: 64px;
|
|
border-radius: 18px;
|
|
display: grid;
|
|
place-items: center;
|
|
font-size: 22px;
|
|
font-weight: 800;
|
|
color: #e7fbff;
|
|
border: 1px solid rgba(103, 232, 249, 0.45);
|
|
background: linear-gradient(135deg, rgba(6, 182, 212, 0.65), rgba(59, 130, 246, 0.56));
|
|
box-shadow: 0 18px 38px rgba(2, 132, 199, 0.28);
|
|
}
|
|
|
|
.heroMain {
|
|
display: grid;
|
|
gap: 8px;
|
|
}
|
|
|
|
.heroMain h2 {
|
|
margin: 0;
|
|
font-size: clamp(20px, 1.9vw, 28px);
|
|
letter-spacing: -0.02em;
|
|
color: #f8fcff;
|
|
}
|
|
|
|
.heroMain p {
|
|
margin: 0;
|
|
color: #a7bcdd;
|
|
font-size: 13px;
|
|
}
|
|
|
|
.badges {
|
|
display: flex;
|
|
align-items: center;
|
|
flex-wrap: wrap;
|
|
gap: 8px;
|
|
}
|
|
|
|
.badge,
|
|
.badgeWarn,
|
|
.badgeGhost {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
border-radius: 999px;
|
|
padding: 5px 11px;
|
|
font-size: 12px;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.badge {
|
|
border: 1px solid rgba(34, 197, 94, 0.45);
|
|
background: rgba(34, 197, 94, 0.12);
|
|
color: #86efac;
|
|
}
|
|
|
|
.badgeWarn {
|
|
border: 1px solid rgba(245, 158, 11, 0.46);
|
|
background: rgba(245, 158, 11, 0.13);
|
|
color: #fcd34d;
|
|
}
|
|
|
|
.badgeGhost {
|
|
border: 1px solid rgba(148, 163, 184, 0.34);
|
|
background: rgba(148, 163, 184, 0.12);
|
|
color: #cbd5e1;
|
|
}
|
|
|
|
.updatedText {
|
|
justify-self: end;
|
|
font-size: 12px;
|
|
color: #8ea3c9;
|
|
text-align: right;
|
|
font-variant-numeric: tabular-nums;
|
|
}
|
|
|
|
.noticeRow,
|
|
.errorRow {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
border-radius: 12px;
|
|
padding: 11px 14px;
|
|
font-size: 13px;
|
|
}
|
|
|
|
.noticeRow {
|
|
border: 1px solid rgba(56, 189, 248, 0.3);
|
|
background: rgba(15, 23, 42, 0.75);
|
|
color: #bae6fd;
|
|
}
|
|
|
|
.errorRow {
|
|
border: 1px solid rgba(248, 113, 113, 0.44);
|
|
background: rgba(127, 29, 29, 0.34);
|
|
color: #fecaca;
|
|
}
|
|
|
|
.cards {
|
|
display: grid;
|
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
gap: 14px;
|
|
}
|
|
|
|
.card,
|
|
.cardWide {
|
|
border: 1px solid rgba(148, 163, 184, 0.2);
|
|
border-radius: 14px;
|
|
background:
|
|
linear-gradient(180deg, rgba(15, 23, 42, 0.84), rgba(15, 23, 42, 0.72)),
|
|
rgba(10, 15, 30, 0.78);
|
|
padding: 16px;
|
|
}
|
|
|
|
.cardWide {
|
|
grid-column: 1 / -1;
|
|
}
|
|
|
|
.card h3,
|
|
.cardWide h3 {
|
|
margin: 0 0 12px;
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 7px;
|
|
font-size: 15px;
|
|
color: #e6f0ff;
|
|
}
|
|
|
|
.metaList {
|
|
margin: 0;
|
|
display: grid;
|
|
gap: 10px;
|
|
}
|
|
|
|
.metaList > div {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 10px;
|
|
border-bottom: 1px dashed rgba(148, 163, 184, 0.22);
|
|
padding-bottom: 9px;
|
|
}
|
|
|
|
.metaList > div:last-child {
|
|
border-bottom: none;
|
|
padding-bottom: 0;
|
|
}
|
|
|
|
.metaList dt {
|
|
font-size: 12px;
|
|
color: #89a1c8;
|
|
}
|
|
|
|
.metaList dd {
|
|
margin: 0;
|
|
font-size: 13px;
|
|
color: #eff6ff;
|
|
max-width: 62%;
|
|
text-align: right;
|
|
word-break: break-word;
|
|
}
|
|
|
|
.mono {
|
|
font-family: "Consolas", "SFMono-Regular", "Menlo", monospace;
|
|
font-size: 12px;
|
|
color: #c7d2fe;
|
|
}
|
|
|
|
.hint {
|
|
margin: 0 0 12px;
|
|
font-size: 13px;
|
|
color: #9ab0d2;
|
|
line-height: 1.6;
|
|
}
|
|
|
|
.commandRow {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
.command {
|
|
flex: 1 1 420px;
|
|
min-height: 40px;
|
|
display: flex;
|
|
align-items: center;
|
|
border-radius: 10px;
|
|
border: 1px solid rgba(103, 232, 249, 0.24);
|
|
background: rgba(8, 47, 73, 0.32);
|
|
color: #d1f9ff;
|
|
padding: 0 12px;
|
|
font-size: 12px;
|
|
white-space: pre-wrap;
|
|
word-break: break-all;
|
|
}
|
|
|
|
.copyBtn {
|
|
height: 36px;
|
|
border-radius: 9px;
|
|
border: 1px solid rgba(45, 212, 191, 0.48);
|
|
background: rgba(20, 184, 166, 0.12);
|
|
color: #99f6e4;
|
|
padding: 0 12px;
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
font-size: 12px;
|
|
font-weight: 700;
|
|
cursor: pointer;
|
|
transition: all 0.2s ease;
|
|
}
|
|
|
|
.copyBtn:hover {
|
|
background: rgba(20, 184, 166, 0.22);
|
|
border-color: rgba(94, 234, 212, 0.78);
|
|
color: #ecfeff;
|
|
}
|
|
|
|
.spin {
|
|
animation: spin 0.9s linear infinite;
|
|
}
|
|
|
|
@media (max-width: 960px) {
|
|
.topBar {
|
|
flex-direction: column;
|
|
align-items: stretch;
|
|
}
|
|
|
|
.actions {
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
.heroCard {
|
|
grid-template-columns: auto 1fr;
|
|
align-items: start;
|
|
}
|
|
|
|
.updatedText {
|
|
grid-column: 1 / -1;
|
|
justify-self: start;
|
|
}
|
|
|
|
.cards {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
|
|
.metaList dd {
|
|
max-width: 56%;
|
|
}
|
|
}
|
|
|
|
@media (max-width: 640px) {
|
|
.page {
|
|
padding: 18px 12px 20px;
|
|
}
|
|
|
|
.topBar,
|
|
.heroCard,
|
|
.card,
|
|
.cardWide {
|
|
border-radius: 12px;
|
|
padding: 13px;
|
|
}
|
|
|
|
.ghostBtn,
|
|
.primaryBtn {
|
|
width: 100%;
|
|
}
|
|
|
|
.actions {
|
|
flex-direction: column;
|
|
align-items: stretch;
|
|
}
|
|
|
|
.ghostBtn,
|
|
.primaryBtn {
|
|
min-height: 40px;
|
|
justify-content: center;
|
|
}
|
|
|
|
.title {
|
|
font-size: 22px;
|
|
}
|
|
|
|
.subtitle {
|
|
font-size: 12px;
|
|
}
|
|
|
|
.heroCard {
|
|
grid-template-columns: 1fr;
|
|
gap: 12px;
|
|
}
|
|
|
|
.avatar {
|
|
width: 56px;
|
|
height: 56px;
|
|
border-radius: 16px;
|
|
font-size: 20px;
|
|
}
|
|
|
|
.heroMain h2 {
|
|
font-size: 22px;
|
|
}
|
|
|
|
.updatedText {
|
|
text-align: left;
|
|
}
|
|
|
|
.metaList > div {
|
|
flex-direction: column;
|
|
align-items: flex-start;
|
|
gap: 4px;
|
|
}
|
|
|
|
.metaList dd {
|
|
max-width: 100%;
|
|
text-align: left;
|
|
}
|
|
|
|
.commandRow {
|
|
flex-direction: column;
|
|
align-items: stretch;
|
|
}
|
|
|
|
.command {
|
|
flex: 1 1 auto;
|
|
width: 100%;
|
|
min-height: 48px;
|
|
padding: 10px 12px;
|
|
}
|
|
|
|
.copyBtn {
|
|
width: 100%;
|
|
justify-content: center;
|
|
}
|
|
|
|
.noticeRow,
|
|
.errorRow {
|
|
width: 100%;
|
|
align-items: flex-start;
|
|
line-height: 1.5;
|
|
}
|
|
}
|
|
|
|
|
|
@keyframes spin { to { transform: rotate(360deg); } }
|