Files
2026-08-14 10:55:06 +08:00

3355 lines
53 KiB
CSS

@import url("https://cdn.jsdelivr.net/gh/willow-god/Sharding-fonts/Yozai-Medium/result.min.css");
:root {
--primary: #1a73e8;
--primary-hover: #1559c4;
--on-primary: #ffffff;
--primary-container: #dbeafe;
--on-primary-container: #0b3b8f;
--accent: #3b82f6;
--secondary: #eef2f7;
--on-secondary: #1f2430;
--surface: #ffffff;
--surface-1: #f8fafc;
--surface-2: #eef1f6;
--bg: #f5f8fc;
--card: #ffffff;
--text: #1f2430;
--muted: #5f6b7a;
--border: #d8dee9;
--outline: #d8dee9;
--outline-variant: #e5eaf1;
--danger: #e5484d;
--on-danger: #ffffff;
--ok: #16a34a;
--shadow-1: 0 1px 2px rgba(16, 24, 40, .06), 0 1px 3px rgba(16, 24, 40, .10);
--shadow-2: 0 2px 6px rgba(16, 24, 40, .08), 0 6px 14px rgba(16, 24, 40, .10);
--shadow-3: 0 8px 18px rgba(16, 24, 40, .10), 0 14px 30px rgba(16, 24, 40, .12);
--radius-sm: 8px;
--radius-md: 12px;
--radius-lg: 16px;
--radius-xl: 20px;
--radius-full: 999px
}
[data-theme="dark"] {
--primary: #8ab4f8;
--primary-hover: #a9c8fb;
--on-primary: #0b1f3a;
--primary-container: #16345f;
--on-primary-container: #d6e4ff;
--accent: #60a5fa;
--secondary: #1a2230;
--on-secondary: #e6ebf2;
--surface: #161c26;
--surface-1: #1b212c;
--surface-2: #20283a;
--bg: #0f141c;
--card: #161c26;
--text: #e6ebf2;
--muted: #9aa7b8;
--border: #2a3340;
--outline: #2a3340;
--outline-variant: #222a36;
--danger: #f08a8e;
--on-danger: #2a0d10;
--ok: #4ade80;
--shadow-1: 0 1px 2px rgba(0, 0, 0, .40);
--shadow-2: 0 2px 8px rgba(0, 0, 0, .45);
--shadow-3: 0 8px 24px rgba(0, 0, 0, .50)
}
* {
font-family: "Yozai Medium";
box-sizing: border-box;
-webkit-tap-highlight-color: transparent;
margin: 0;
padding: 0
}
html {
scroll-behavior: smooth
}
body {
background: var(--bg);
color: var(--text);
line-height: 1.6;
transition: background-color .3s, color .3s
}
.container {
max-width: 1080px;
margin: 0 auto;
padding: 0 clamp(16px, 4vw, 60px)
}
a {
color: inherit;
text-decoration: none
}
img {
max-width: 100%
}
.topbar {
height: 4px;
background: var(--primary)
}
.btn {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 10px 18px;
border: none;
border-radius: var(--radius-full);
font-size: .95rem;
font-weight: 600;
cursor: pointer;
transition: transform .15s, box-shadow .2s, background .2s, color .2s;
font-family: inherit
}
.btn-primary {
background: var(--primary);
color: var(--on-primary)
}
.btn-primary:hover {
transform: translateY(-2px);
box-shadow: var(--shadow-2), 0 8px 20px rgba(26, 115, 232, .30)
}
.btn-ghost {
background: var(--secondary);
color: var(--text)
}
.btn-ghost:hover {
background: var(--outline-variant)
}
.site-header {
position: sticky;
top: 0;
z-index: 50;
background: var(--surface);
border-bottom: 1px solid var(--border)
}
.site-header .nav {
display: flex;
align-items: center;
gap: 18px;
height: 64px;
position: relative
}
.brand {
font-size: 1.25rem;
font-weight: 700;
color: var(--primary);
display: flex;
align-items: center;
gap: 8px
}
.nav-links {
display: flex;
gap: 18px;
margin-left: 10px;
flex: 1
}
.nav-links a {
color: var(--text);
font-weight: 500;
padding: 6px 2px;
position: relative
}
.nav-links a:hover,
.nav-links a.active {
color: var(--primary)
}
.nav-actions {
display: flex;
align-items: center;
gap: 10px
}
.theme-toggle {
width: 38px;
height: 38px;
border-radius: 50%;
border: 1px solid var(--outline);
background: var(--secondary);
color: var(--text);
cursor: pointer;
font-size: 1rem
}
.theme-toggle:hover {
color: var(--primary)
}
.lang-switch {
display: inline-flex;
align-items: center;
gap: 4px;
padding: 6px 12px;
border-radius: var(--radius-full);
border: 1px solid var(--outline);
background: var(--secondary);
color: var(--text);
font-size: .82rem;
font-weight: 600;
cursor: pointer;
transition: transform .15s, box-shadow .2s, background .2s, color .2s;
text-decoration: none
}
.lang-switch:hover {
color: var(--primary);
border-color: var(--primary);
transform: translateY(-1px)
}
.lang-label {
font-size: .8rem
}
.nav-toggle {
display: none;
width: 40px;
height: 40px;
border-radius: 50%;
border: 1px solid var(--outline);
background: var(--surface);
color: var(--text);
cursor: pointer;
font-size: 1.05rem;
align-items: center;
justify-content: center
}
.badge {
background: var(--danger);
color: var(--on-danger);
font-size: .72rem;
border-radius: var(--radius-full);
padding: 1px 7px;
margin-left: 4px
}
.main {
padding: 28px clamp(16px, 4vw, 60px) 50px
}
.section {
margin-bottom: 30px
}
.sec-title {
color: var(--primary);
font-size: 1.4rem;
margin-bottom: 18px;
display: flex;
align-items: center;
gap: 8px
}
.empty {
color: var(--muted);
padding: 30px 0;
text-align: center
}
.muted {
color: var(--muted)
}
.form-err {
background: #fef2f2;
border: 1px solid #fecaca;
color: #b91c1c;
padding: 10px 14px;
border-radius: var(--radius-sm);
margin-bottom: 14px;
font-size: .92rem
}
[data-theme="dark"] .form-err {
background: #3a1d1d;
border-color: #5b2a2a;
color: #fca5a5
}
.banner-ok {
background: #f0fdf4;
border: 1px solid #bbf7d0;
color: #166534;
padding: 10px 14px;
border-radius: var(--radius-sm);
margin-bottom: 14px
}
[data-theme="dark"] .banner-ok {
background: #11271a;
border-color: #1f4a32;
color: #86efac
}
.hero {
background: var(--primary);
color: var(--on-primary);
padding: 56px 20px;
text-align: center;
margin-bottom: 26px;
border-radius: 12px
}
.hero-content h1 {
font-size: 2.4rem;
margin-bottom: 8px
}
.hero-content p {
opacity: .92;
margin-bottom: 22px;
font-size: 1.05rem
}
.search-bar {
display: flex;
align-items: center;
gap: 8px;
max-width: 520px;
margin: 0 auto;
background: var(--surface);
padding: 8px 8px 8px 16px;
border-radius: var(--radius-full);
box-shadow: var(--shadow-2)
}
.search-bar i {
color: var(--muted)
}
.search-bar .btn i,
.hero .search-bar .btn i {
color: inherit
}
.search-bar input {
flex: 1;
border: none;
outline: none;
font-size: 1rem;
background: transparent;
color: var(--text)
}
.search-bar .btn {
border-radius: var(--radius-full)
}
.cat-chips {
display: flex;
flex-wrap: wrap;
gap: 10px;
margin-bottom: 22px
}
.chip {
padding: 7px 16px;
border-radius: var(--radius-full);
background: var(--surface);
border: 1px solid var(--outline);
color: var(--muted);
font-size: .92rem;
transition: .2s
}
.chip:hover {
color: var(--primary);
border-color: var(--primary)
}
.chip.active {
background: var(--primary);
color: var(--on-primary);
border-color: transparent
}
.chip i {
margin-right: 6px
}
.product-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
gap: 20px
}
.product-card {
background: var(--surface);
border-radius: var(--radius-lg);
overflow: hidden;
border: 1px solid var(--outline);
transition: transform .2s, box-shadow .2s;
display: flex;
flex-direction: column
}
.product-card:hover {
transform: translateY(-5px);
box-shadow: var(--shadow-2)
}
.pc-media {
height: 150px;
display: flex;
align-items: center;
justify-content: center;
background: var(--secondary);
color: var(--primary);
font-size: 3rem;
overflow: hidden
}
.pc-media img {
width: 100%;
height: 100%;
object-fit: cover
}
.pc-body {
padding: 16px;
flex: 1;
display: flex;
flex-direction: column;
gap: 6px
}
.pc-cat {
font-size: .78rem;
color: var(--accent);
font-weight: 600
}
.pc-name {
font-size: 1.05rem
}
.pc-meta {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: auto
}
.pc-price {
color: var(--danger);
font-weight: 700;
font-size: 1.1rem
}
.pc-stock {
font-size: .8rem;
color: var(--muted)
}
.back-link {
display: inline-flex;
gap: 6px;
color: var(--muted);
margin-bottom: 16px
}
.back-link:hover {
color: var(--primary)
}
.product-detail {
display: grid;
grid-template-columns: 300px 1fr;
gap: 30px;
background: var(--surface);
border: 1px solid var(--outline);
border-radius: var(--radius-lg);
padding: 28px
}
.pd-media {
height: 280px;
border-radius: var(--radius-md);
background: var(--secondary);
color: var(--primary);
display: flex;
align-items: center;
justify-content: center;
font-size: 5rem;
overflow: hidden
}
.pd-media img {
width: 100%;
height: 100%;
object-fit: cover
}
.pd-name {
font-size: 1.7rem;
margin: 6px 0
}
.pd-price {
color: var(--danger);
font-weight: 700;
font-size: 1.6rem
}
.pd-stock {
color: var(--muted);
margin-bottom: 12px
}
.pd-desc {
color: var(--text);
white-space: pre-wrap;
margin-bottom: 18px
}
.pd-buy {
display: flex;
align-items: flex-end;
gap: 14px;
flex-wrap: wrap
}
.pd-buy label {
display: flex;
flex-direction: column;
gap: 6px;
font-size: .9rem;
color: var(--muted)
}
.qty-input {
width: 90px;
padding: 9px 10px;
border: 2px solid var(--outline);
border-radius: var(--radius-sm);
font-size: 1rem;
background: var(--bg);
color: var(--text)
}
.cart-form {
background: var(--surface);
border: 1px solid var(--outline);
border-radius: var(--radius-lg);
padding: 22px
}
.cart-list {
display: flex;
flex-direction: column;
gap: 12px;
margin-bottom: 18px
}
.cart-item {
display: grid;
grid-template-columns: 70px 1fr 90px 90px 36px;
align-items: center;
gap: 12px;
padding: 12px;
border: 1px solid var(--outline);
border-radius: var(--radius-md)
}
.ci-media {
width: 70px;
height: 70px;
border-radius: var(--radius-sm);
background: var(--secondary);
color: var(--primary);
display: flex;
align-items: center;
justify-content: center;
font-size: 1.6rem;
overflow: hidden
}
.ci-media img {
width: 100%;
height: 100%;
object-fit: cover
}
.ci-name {
font-weight: 600
}
.ci-price {
color: var(--muted);
font-size: .9rem
}
.ci-qty input {
width: 70px;
padding: 7px;
border: 2px solid var(--outline);
border-radius: var(--radius-sm);
background: var(--bg);
color: var(--text)
}
.ci-sub {
font-weight: 700
}
.ci-del {
background: none;
border: none;
color: var(--muted);
cursor: pointer;
font-size: 1.1rem
}
.ci-del:hover {
color: var(--danger)
}
.cart-foot {
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
gap: 12px;
border-top: 1px solid var(--outline);
padding-top: 16px
}
.cart-total {
font-size: 1.1rem
}
.cart-total strong {
color: var(--danger);
font-size: 1.4rem
}
.cart-actions {
display: flex;
gap: 10px;
flex-wrap: wrap
}
.ci-info {
min-width: 0;
display: flex;
flex-direction: column;
gap: 2px
}
.uc-id {
display: flex;
flex-direction: column;
min-width: 0
}
.ann-strip-title {
font-weight: 600;
color: var(--text);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap
}
.pd-info {
min-width: 0
}
.sold-out {
display: inline-block;
background: var(--secondary);
color: var(--muted);
padding: 4px 14px;
border-radius: var(--radius-full);
font-size: .9rem;
font-weight: 600
}
.checkout {
display: grid;
grid-template-columns: 360px 1fr;
gap: 24px;
align-items: start
}
.co-items,
.co-form {
background: var(--surface);
border: 1px solid var(--outline);
border-radius: var(--radius-lg);
padding: 22px
}
.co-items h3,
.co-form h3 {
color: var(--primary);
font-size: 1.15rem;
margin-bottom: 16px
}
.co-row {
display: flex;
justify-content: space-between;
gap: 12px;
padding: 10px 0;
border-bottom: 1px dashed var(--outline-variant);
font-size: .95rem
}
.co-row:last-of-type {
border-bottom: none
}
.co-total {
padding-top: 14px;
margin-top: 6px;
border-top: 2px solid var(--outline);
font-size: 1.1rem;
font-weight: 700
}
.co-total strong {
color: var(--danger);
font-size: 1.3rem
}
.co-form label {
display: flex;
flex-direction: column;
gap: 6px;
font-size: .9rem;
color: var(--muted);
margin-bottom: 14px
}
.co-form input {
padding: 11px 13px;
border: 2px solid var(--outline);
border-radius: var(--radius-sm);
font-size: 1rem;
background: var(--bg);
color: var(--text);
font-family: inherit
}
.co-form input:focus {
outline: none;
border-color: var(--primary)
}
.co-tip {
background: var(--primary-container);
color: var(--on-primary-container);
padding: 12px 14px;
border-radius: var(--radius-md);
font-size: .88rem;
line-height: 1.6;
margin: 4px 0 16px
}
.auth-section {
display: flex;
justify-content: center
}
.auth-card {
width: 100%;
max-width: 420px;
background: var(--surface);
border: 1px solid var(--outline);
border-radius: var(--radius-lg);
padding: 30px;
margin-top: 20px;
box-shadow: var(--shadow-2)
}
.auth-tabs {
display: flex;
gap: 8px;
margin-bottom: 20px
}
.auth-tabs a {
flex: 1;
text-align: center;
padding: 10px;
border-radius: var(--radius-full);
background: var(--secondary);
color: var(--muted);
font-weight: 600
}
.auth-tabs a.active {
background: var(--primary);
color: var(--on-primary)
}
.auth-form label {
display: block;
margin-bottom: 14px;
font-size: .9rem;
color: var(--muted)
}
.auth-form input {
width: 100%;
margin-top: 6px;
padding: 11px 13px;
border: 2px solid var(--outline);
border-radius: var(--radius-sm);
font-size: 1rem;
background: var(--bg);
color: var(--text)
}
.auth-form .btn {
width: 100%;
margin-top: 6px;
justify-content: center
}
.form-tip {
font-size: .82rem;
color: var(--muted);
margin-top: 6px;
line-height: 1.5
}
.captcha-box {
display: flex;
gap: 12px;
align-items: flex-end;
flex-wrap: wrap
}
.captcha-img {
height: 44px;
border-radius: var(--radius-sm);
border: 1px solid var(--outline);
cursor: pointer;
background: var(--surface-2);
display: block
}
.captcha-box label {
flex: 1;
min-width: 150px
}
.order-list {
display: flex;
flex-direction: column;
gap: 14px
}
.order-card {
background: var(--surface);
border: 1px solid var(--outline);
border-radius: var(--radius-md);
padding: 18px
}
.oc-head {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 10px
}
.oc-no {
font-weight: 700
}
.oc-items {
border-top: 1px dashed var(--outline-variant);
border-bottom: 1px dashed var(--outline-variant);
padding: 10px 0
}
.oc-row {
display: flex;
justify-content: space-between;
font-size: .94rem;
padding: 3px 0
}
.oc-foot {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 10px;
gap: 10px;
flex-wrap: wrap
}
.oc-time {
color: var(--muted);
font-size: .85rem
}
.oc-detail {
color: var(--primary);
font-weight: 600;
font-size: .9rem;
display: inline-flex;
align-items: center;
gap: 4px
}
.oc-detail:hover {
text-decoration: underline
}
.oc-total strong {
color: var(--danger);
font-size: 1.15rem
}
.oc-addr {
margin-top: 8px;
font-size: .85rem;
color: var(--muted)
}
.badge-status {
display: inline-block;
padding: 2px 10px;
border-radius: var(--radius-full);
font-size: .8rem;
font-weight: 600
}
.status-pending {
background: #fef3c7;
color: #92670a
}
.status-paid {
background: #dbeafe;
color: #1e40af
}
.status-shipped {
background: #e0e7ff;
color: #3730a3
}
.status-completed {
background: #dcfce7;
color: #166534
}
.status-cancelled {
background: #f3f4f6;
color: #6b7280
}
[data-theme="dark"] .status-pending {
background: #3a2f0a;
color: #fde68a
}
[data-theme="dark"] .status-paid {
background: #1e2a4a;
color: #93c5fd
}
[data-theme="dark"] .status-shipped {
background: #1e1e4a;
color: #c7d2fe
}
[data-theme="dark"] .status-completed {
background: #11271a;
color: #86efac
}
[data-theme="dark"] .status-cancelled {
background: #2a2f37;
color: #9aa0a6
}
.verify-banner {
display: flex;
align-items: center;
gap: 10px;
margin: 16px auto 0;
max-width: 1080px;
padding: 12px 16px;
border-radius: var(--radius-md);
font-size: .92rem
}
.verify-banner.ok {
background: #f0fdf4;
border: 1px solid #bbf7d0;
color: #166534
}
.verify-banner.warn {
background: #fffbeb;
border: 1px solid #fde68a;
color: #92670a
}
.verify-banner a {
color: inherit;
text-decoration: underline;
font-weight: 600
}
[data-theme="dark"] .verify-banner.ok {
background: #11271a;
border-color: #1f4a32;
color: #86efac
}
[data-theme="dark"] .verify-banner.warn {
background: #2a230a;
border-color: #5b4a16;
color: #fde68a
}
.verify-card {
text-align: center
}
.verify-icon {
width: 64px;
height: 64px;
border-radius: 50%;
margin: 0 auto 14px;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.8rem
}
.verify-icon.ok {
background: #dcfce7;
color: #16a34a
}
.verify-icon.bad {
background: #fef3c7;
color: #d97706
}
[data-theme="dark"] .verify-icon.ok {
background: #11271a;
color: #4ade80
}
[data-theme="dark"] .verify-icon.bad {
background: #2a230a;
color: #fbbf24
}
.verify-title {
color: var(--text);
font-size: 1.4rem;
margin-bottom: 8px
}
.verify-msg {
color: var(--muted);
margin-bottom: 18px
}
.verify-actions {
display: flex;
gap: 10px;
justify-content: center;
flex-wrap: wrap
}
.order-detail {
background: var(--surface);
border: 1px solid var(--outline);
border-radius: var(--radius-lg);
padding: 22px
}
.od-head {
display: flex;
justify-content: space-between;
align-items: flex-start;
margin-bottom: 16px;
gap: 12px
}
.od-no {
font-weight: 700;
font-size: 1.05rem
}
.od-time {
color: var(--muted);
font-size: .85rem;
margin-top: 2px
}
.od-items {
border-top: 1px solid var(--outline-variant);
border-bottom: 1px solid var(--outline-variant);
padding: 8px 0
}
.od-th,
.od-row {
display: grid;
grid-template-columns: 1fr 96px 64px 110px;
gap: 10px;
align-items: center;
padding: 9px 4px
}
.od-th {
color: var(--muted);
font-size: .82rem;
font-weight: 600;
border-bottom: 1px solid var(--outline-variant)
}
.od-row {
border-bottom: 1px dashed var(--outline-variant)
}
.od-row:last-child {
border-bottom: none
}
.od-name {
font-weight: 500
}
.od-sub {
font-weight: 700;
text-align: right
}
.od-info {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 16px;
margin: 16px 0
}
.od-block {
background: var(--surface-1);
border: 1px solid var(--outline-variant);
border-radius: var(--radius-md);
padding: 14px
}
.od-label {
font-size: .8rem;
color: var(--muted);
margin-bottom: 6px;
font-weight: 600
}
.od-line {
font-size: .94rem;
line-height: 1.6
}
.od-foot {
display: flex;
justify-content: space-between;
align-items: center;
border-top: 1px solid var(--outline-variant);
padding-top: 14px;
gap: 10px;
flex-wrap: wrap
}
.od-total strong {
color: var(--danger);
font-size: 1.2rem
}
.settings-form {
max-width: 560px
}
.verify-panel {
max-width: 560px;
margin-top: 20px
}
.verify-panel a {
text-decoration: underline;
font-weight: 600
}
.ok-line {
color: #166534;
display: flex;
gap: 8px;
align-items: center
}
.warn-line {
color: #92670a;
display: flex;
gap: 8px;
align-items: center
}
[data-theme="dark"] .ok-line {
color: #86efac
}
[data-theme="dark"] .warn-line {
color: #fde68a
}
.user-menu {
position: relative;
flex: none
}
.avatar {
width: 38px;
height: 38px;
border-radius: 50%;
border: none;
cursor: pointer;
background: var(--primary-container);
color: var(--on-primary-container);
font-weight: 700;
font-size: 1rem;
display: inline-flex;
align-items: center;
justify-content: center;
transition: box-shadow .2s, transform .15s
}
.avatar:hover {
box-shadow: var(--shadow-2);
transform: translateY(-1px)
}
.avatar-caret {
width: 22px;
height: 22px;
border: none;
background: transparent;
color: var(--muted);
cursor: pointer;
padding: 0;
display: inline-flex;
align-items: center;
justify-content: center;
border-radius: 50%;
flex: none
}
.avatar-caret:hover {
background: var(--primary-container);
color: var(--on-primary-container)
}
.avatar-caret .fas {
font-size: 12px
}
.user-card {
position: absolute;
right: 0;
top: calc(100% + 8px);
width: 252px;
z-index: 60;
background: var(--surface);
border: 1px solid var(--outline);
border-radius: var(--radius-lg);
box-shadow: var(--shadow-3);
padding: 14px
}
.user-card[hidden] {
display: none !important
}
.user-card:not([hidden]) {
display: flex;
flex-direction: column;
animation: uc-pop .16s ease
}
@keyframes uc-pop {
from {
opacity: .6;
transform: translateY(-6px)
}
to {
opacity: 1;
transform: none
}
}
.uc-head {
display: flex;
gap: 12px;
align-items: center;
padding-bottom: 12px;
border-bottom: 1px solid var(--outline-variant);
margin-bottom: 8px
}
.uc-avatar {
width: 46px;
height: 46px;
border-radius: 50%;
background: var(--primary-container);
color: var(--on-primary-container);
font-weight: 700;
display: inline-flex;
align-items: center;
justify-content: center;
font-size: 1.2rem;
flex: none
}
.uc-name {
font-weight: 700;
color: var(--text)
}
.uc-handle {
font-size: .82rem;
color: var(--muted)
}
.uc-badge {
display: inline-block;
margin-top: 4px;
font-size: .72rem;
padding: 1px 8px;
border-radius: var(--radius-full)
}
.uc-badge.verified {
background: #dcfce7;
color: #166534
}
.uc-badge.unverified {
background: #fef3c7;
color: #92670a
}
[data-theme="dark"] .uc-badge.verified {
background: #11271a;
color: #86efac
}
[data-theme="dark"] .uc-badge.unverified {
background: #3a2f0a;
color: #fde68a
}
.uc-item {
display: flex;
align-items: center;
gap: 10px;
padding: 10px;
border-radius: var(--radius-sm);
color: var(--text);
font-size: .94rem;
margin: 2px 0
}
.uc-item .fas {
width: 22px;
text-align: center;
font-size: 1rem;
color: var(--muted);
flex: none
}
.uc-item:hover {
background: var(--secondary)
}
.uc-item.danger {
color: var(--danger)
}
.uc-item.danger .fas {
color: var(--danger)
}
.uc-item.danger:hover {
background: rgba(229, 72, 77, .12)
}
.uc-points {
font-size: .92rem;
color: var(--muted);
padding: 0 4px 10px;
border-bottom: 1px solid var(--outline-variant);
margin-bottom: 8px
}
.uc-points strong {
color: var(--primary);
font-size: 1.05rem
}
.pd-points {
font-size: .98rem;
color: var(--muted);
margin-top: 4px
}
.pd-points strong {
color: var(--primary);
font-size: 1.1rem
}
.pd-stock {
font-size: .9rem;
color: var(--muted);
margin-top: 4px
}
.sign-card {
max-width: 520px;
background: var(--surface);
border: 1px solid var(--outline);
border-radius: var(--radius-lg);
padding: 24px;
margin-top: 8px
}
.sign-points {
display: flex;
flex-direction: column;
align-items: center;
gap: 2px;
background: var(--secondary);
border-radius: var(--radius-md);
padding: 18px;
margin-bottom: 16px
}
.sp-num {
font-size: 2.4rem;
font-weight: 800;
color: var(--primary);
line-height: 1
}
.sp-label {
font-size: .85rem;
color: var(--muted)
}
.sign-tip {
margin-bottom: 16px
}
.sign-tip strong {
color: var(--primary)
}
.sign-form {
margin-top: 4px
}
.invite-card {
max-width: 680px;
background: var(--surface);
border: 1px solid var(--outline);
border-radius: var(--radius-lg);
padding: 22px;
margin-top: 8px
}
.invite-head {
display: flex;
flex-wrap: wrap;
gap: 12px 24px;
margin-bottom: 18px
}
.invite-reward {
font-size: .95rem
}
.invite-reward strong,
.invite-earned strong {
color: var(--primary)
}
.invite-earned {
font-size: .9rem;
color: var(--muted)
}
.invite-code-box,
.invite-link-box {
margin-bottom: 16px
}
.ic-label {
font-size: .85rem;
color: var(--muted);
margin-bottom: 6px;
font-weight: 600
}
.ic-code {
display: inline-block;
font-size: 1.4rem;
font-weight: 800;
letter-spacing: 2px;
color: var(--primary);
background: var(--secondary);
padding: 8px 16px;
border-radius: var(--radius-sm);
margin-right: 10px
}
.invite-link-row {
display: flex;
gap: 8px
}
.invite-link-row input {
flex: 1
}
.invite-tip {
font-size: .85rem
}
.co-pay {
margin: 8px 0;
padding: 14px;
background: var(--surface-1);
border: 1px solid var(--outline-variant);
border-radius: var(--radius-md)
}
.co-pay h3 {
margin-bottom: 10px
}
.pay-opt {
display: flex;
align-items: center;
gap: 8px;
font-size: .95rem;
margin: 6px 0;
color: var(--text)
}
.pay-opt input {
width: 16px;
height: 16px
}
.pay-opt input:disabled+* {
color: var(--muted)
}
.pay-cash {
color: var(--muted)
}
.pay-points {
color: #16a34a;
font-weight: 600
}
[data-theme="dark"] .pay-points {
color: #4ade80
}
.site-footer {
background: var(--surface);
border-top: 1px solid var(--outline);
margin-top: 30px
}
.footer-inner {
display: flex;
flex-wrap: wrap;
gap: 24px;
justify-content: space-between;
padding: 30px 20px
}
.footer-brand {
font-size: 1.1rem;
font-weight: 700;
color: var(--primary);
display: flex;
flex-direction: column;
gap: 4px
}
.footer-brand p {
font-size: .85rem;
color: var(--muted);
font-weight: 400
}
.footer-links {
display: flex;
flex-wrap: wrap;
gap: 14px;
align-items: center
}
.footer-links a {
color: var(--muted)
}
.footer-links a:hover {
color: var(--primary)
}
.footer-copy {
text-align: center;
padding: 14px;
color: var(--muted);
font-size: .85rem;
border-top: 1px solid var(--outline)
}
.admin-bar {
position: sticky;
top: 0;
z-index: 50;
background: var(--primary);
color: var(--on-primary)
}
.admin-bar .nav {
height: 60px;
display: flex;
align-items: center;
gap: 16px
}
.admin-bar .brand {
color: var(--on-primary)
}
.admin-bar .nav-links a {
color: rgba(255, 255, 255, .85);
font-weight: 500
}
.admin-bar .nav-links a:hover,
.admin-bar .nav-links a.active {
color: #fff
}
.admin-bar .nav-actions {
display: flex;
align-items: center;
gap: 10px;
margin-left: auto
}
.admin-user {
font-size: .9rem
}
.admin-bar .btn-ghost {
background: rgba(255, 255, 255, .15);
color: #fff
}
.admin-bar .btn-ghost:hover {
background: rgba(255, 255, 255, .28)
}
.admin-main {
padding: 28px 10px 50px
}
.admin-footer {
text-align: center;
padding: 20px;
color: var(--muted);
font-size: .85rem;
border-top: 1px solid var(--outline)
}
/* 深色模式下后台顶栏:用深色底 + 浅色字,避免浅蓝主色背景上白字看不清 */
[data-theme="dark"] .admin-bar {
background: #11161f;
color: #e6ebf2;
border-bottom: 1px solid rgba(255, 255, 255, .08)
}
[data-theme="dark"] .admin-bar .brand,
[data-theme="dark"] .admin-bar .nav-links a {
color: rgba(255, 255, 255, .82)
}
[data-theme="dark"] .admin-bar .nav-links a:hover,
[data-theme="dark"] .admin-bar .nav-links a.active {
color: #fff
}
[data-theme="dark"] .admin-user {
color: #d6e4ff
}
[data-theme="dark"] .admin-bar .btn-ghost {
background: rgba(255, 255, 255, .12);
color: #fff
}
[data-theme="dark"] .admin-bar .btn-ghost:hover {
background: rgba(255, 255, 255, .22)
}
/* ===== 后台全局深色模式补全 ===== */
[data-theme="dark"] .admin-main .panel {
background: var(--card);
border-color: var(--border)
}
[data-theme="dark"] .admin-main .panel h3 {
color: var(--text)
}
[data-theme="dark"] .admin-main .data-table th {
background: var(--surface-2);
color: var(--muted);
border-bottom-color: var(--border)
}
[data-theme="dark"] .admin-main .data-table td {
border-bottom-color: var(--outline-variant)
}
[data-theme="dark"] .admin-main .data-table tr:hover td {
background: var(--surface-1)
}
[data-theme="dark"] .admin-main .data-table {
color: var(--text)
}
[data-theme="dark"] .admin-main .grid-form input,
[data-theme="dark"] .admin-main .grid-form select,
[data-theme="dark"] .admin-main .grid-form textarea {
background: var(--surface-1);
border-color: var(--border);
color: var(--text)
}
[data-theme="dark"] .admin-main .grid-form input:focus,
[data-theme="dark"] .admin-main .grid-form select:focus,
[data-theme="dark"] .admin-main .grid-form textarea:focus {
border-color: var(--primary)
}
[data-theme="dark"] .admin-main .grid-form label {
color: var(--muted)
}
[data-theme="dark"] .admin-main .filter-bar select {
background: var(--surface-1);
border-color: var(--border);
color: var(--text)
}
[data-theme="dark"] .admin-main .auth-form input {
background: var(--surface-1);
border-color: var(--border);
color: var(--text)
}
[data-theme="dark"] .admin-main .auth-form label {
color: var(--muted)
}
[data-theme="dark"] .admin-main .pagination a,
[data-theme="dark"] .admin-main .pagination span {
background: var(--surface-1);
border-color: var(--border);
color: var(--text)
}
[data-theme="dark"] .admin-main .pagination a:hover {
background: var(--surface-2);
border-color: var(--primary);
color: var(--primary)
}
[data-theme="dark"] .admin-main .pagination .active {
background: var(--primary);
color: var(--on-primary);
border-color: var(--primary)
}
[data-theme="dark"] .admin-main .mini-btn {
background: var(--surface-1);
border-color: var(--border);
color: var(--text)
}
[data-theme="dark"] .admin-main .mini-btn:hover {
background: var(--surface-2);
border-color: var(--primary);
color: var(--primary)
}
[data-theme="dark"] .admin-main .mini-btn.danger:hover {
background: rgba(229, 72, 77, .15);
border-color: var(--danger);
color: var(--danger)
}
[data-theme="dark"] .admin-main .modal-overlay {
background: rgba(0, 0, 0, .65)
}
[data-theme="dark"] .admin-main .modal-box {
background: var(--card);
border-color: var(--border)
}
[data-theme="dark"] .admin-main .modal-head h3 {
color: var(--text)
}
[data-theme="dark"] .admin-main .modal-body {
color: var(--text)
}
[data-theme="dark"] .admin-main .modal-close {
background: var(--surface-1);
color: var(--muted)
}
[data-theme="dark"] .admin-main .modal-close:hover {
background: var(--outline-variant);
color: var(--text)
}
[data-theme="dark"] .admin-main .form-err {
background: #3a1d1d;
border-color: #5b2a2a;
color: #fca5a5
}
[data-theme="dark"] .admin-main .banner-ok {
background: #11271a;
border-color: #1f4a32;
color: #86efac
}
[data-theme="dark"] .admin-main .stat-card {
background: var(--card);
border-color: var(--border)
}
[data-theme="dark"] .admin-main .stat-label {
color: var(--muted)
}
[data-theme="dark"] .admin-main .page-title {
color: var(--primary)
}
[data-theme="dark"] .admin-main .cell-status select {
background: var(--surface-1);
border-color: var(--border);
color: var(--text)
}
[data-theme="dark"] .admin-footer {
border-top-color: var(--border)
}
[data-theme="dark"] .admin-main code,
[data-theme="dark"] .admin-main pre {
background: var(--surface-2);
color: var(--text)
}
[data-theme="dark"] .admin-main .smtp-log {
background: var(--surface-1);
border-color: var(--border)
}
.page-title {
font-size: 1.6rem;
margin-bottom: 22px;
display: flex;
align-items: center;
gap: 8px;
color: var(--primary)
}
.stat-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
gap: 18px;
margin-bottom: 30px
}
.stat-card {
background: var(--surface);
border: 1px solid var(--outline);
border-radius: var(--radius-lg);
padding: 24px;
text-align: center
}
.stat-card.warn {
border-color: #fcd34d
}
.stat-num {
font-size: 2.1rem;
font-weight: 800;
color: var(--primary)
}
.stat-card.warn .stat-num {
color: #d97706
}
.stat-label {
color: var(--muted);
margin-top: 4px
}
.panel {
background: var(--surface);
border: 1px solid var(--outline);
border-radius: var(--radius-lg);
padding: 22px;
margin-bottom: 24px
}
.panel-head {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 14px;
flex-wrap: wrap;
gap: 10px
}
.panel h3 {
color: var(--text);
margin-bottom: 14px
}
.grid-form {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 16px
}
.grid-form label {
display: flex;
flex-direction: column;
gap: 6px;
font-size: .9rem;
color: var(--muted)
}
.grid-form input,
.grid-form select,
.grid-form textarea {
padding: 10px 12px;
border: 2px solid var(--outline);
border-radius: var(--radius-sm);
font-size: .98rem;
background: var(--bg);
color: var(--text);
font-family: inherit
}
.grid-form .span2 {
grid-column: 1 / -1
}
.grid-form .checkbox {
flex-direction: row;
align-items: center;
gap: 8px;
grid-column: 1 / -1;
color: var(--text)
}
.grid-form .form-actions {
grid-column: 1 / -1;
display: flex;
gap: 10px
}
.data-table {
width: 100%;
border-collapse: collapse;
font-size: .94rem
}
.data-table th,
.data-table td {
text-align: left;
padding: 11px 12px;
border-bottom: 1px solid var(--outline)
}
.data-table th {
color: var(--muted);
font-weight: 600;
background: var(--secondary)
}
.data-table tr:hover td {
background: var(--secondary)
}
.badge-on {
background: #dcfce7;
color: #166534;
padding: 2px 10px;
border-radius: var(--radius-full);
font-size: .82rem
}
.badge-off {
background: #f3f4f6;
color: #6b7280;
padding: 2px 10px;
border-radius: var(--radius-full);
font-size: .82rem
}
[data-theme="dark"] .badge-on {
background: #11271a;
color: #86efac
}
[data-theme="dark"] .badge-off {
background: #2a2f37;
color: #9aa0a6
}
.row-actions {
display: flex;
gap: 8px;
align-items: center;
justify-content: flex-start;
vertical-align: middle
}
.mini-btn {
width: 38px;
height: 38px;
border-radius: var(--radius-sm);
border: 1px solid var(--outline);
background: var(--secondary);
color: var(--text);
cursor: pointer;
display: inline-flex;
align-items: center;
justify-content: center;
font-size: .95rem;
transition: transform .15s, box-shadow .2s, background .2s, color .2s;
flex-shrink: 0;
text-decoration: none;
padding: 0;
line-height: 1
}
.mini-btn:hover {
color: var(--primary);
border-color: var(--primary)
}
.mini-btn.danger:hover {
color: var(--danger);
border-color: var(--danger)
}
/* 文字型操作按钮(如工单"处理"链接) */
.mini-btn:has(:not(i)):not(:empty),
a.mini-btn:not(:has(i)) {
width: auto;
padding: 0 14px;
font-size: .88rem;
font-weight: 500;
border-radius: var(--radius-sm);
letter-spacing: .5px
}
.cell-items div {
font-size: .86rem
}
.cell-status .status-form {
display: flex;
gap: 6px;
align-items: center
}
.cell-status select {
padding: 6px 8px;
border: 1px solid var(--outline);
border-radius: var(--radius-sm);
background: var(--bg);
color: var(--text)
}
.admin-login {
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
background: var(--bg);
padding: 20px
}
.admin-login .auth-card {
max-width: 380px;
text-align: center
}
.al-title {
color: var(--primary);
font-size: 1.5rem
}
.al-sub {
color: var(--muted);
margin-bottom: 18px
}
.al-back {
display: inline-block;
margin-top: 16px;
color: var(--muted);
font-size: .88rem
}
.al-back:hover {
color: var(--primary)
}
.ticket-meta {
display: flex;
flex-wrap: wrap;
gap: 14px 22px;
align-items: center;
color: var(--muted);
font-size: .9rem
}
.ticket-msg {
background: var(--secondary);
border-radius: var(--radius-md);
padding: 14px 16px;
white-space: pre-wrap;
line-height: 1.7
}
.ticket-reply {
margin-top: 16px;
border-left: 4px solid var(--primary);
background: var(--surface);
border-radius: var(--radius-sm);
padding: 12px 16px
}
.reply-head {
font-weight: 600;
color: var(--primary);
margin-bottom: 8px
}
.ticket-timeline {
display: flex;
flex-direction: column;
gap: 14px;
margin-top: 16px
}
.ticket-bubble {
border-radius: var(--radius-md);
padding: 14px 16px;
max-width: 88%;
line-height: 1.7
}
.ticket-bubble .bubble-head {
font-weight: 600;
font-size: .88rem;
margin-bottom: 6px;
opacity: .85
}
.user-bubble {
align-self: flex-start;
background: var(--secondary);
border-left: 4px solid var(--primary)
}
.admin-bubble {
align-self: flex-end;
background: var(--surface);
border-left: 4px solid #22c55e
}
.admin-bubble .bubble-head {
color: #22c55e
}
@media (max-width:600px) {
.ticket-bubble {
max-width: 100%
}
}
.filter-bar {
display: flex;
flex-wrap: wrap;
gap: 10px;
align-items: center;
margin-bottom: 16px
}
.filter-bar select {
padding: 8px 10px;
border: 1px solid var(--outline);
border-radius: var(--radius-sm);
background: var(--bg);
color: var(--text)
}
.smtp-log {
margin-top: 14px;
background: var(--secondary);
border: 1px solid var(--outline);
border-radius: var(--radius-sm);
padding: 12px 14px
}
.smtp-log pre {
white-space: pre-wrap;
word-break: break-all;
font-size: .82rem;
margin: 0;
color: var(--muted)
}
.mini-btn.warn:hover {
color: #d97706;
border-color: #d97706
}
.mini-btn.ok:hover {
color: #16a34a;
border-color: #16a34a
}
.status-open {
background: #dbeafe;
color: #1e40af
}
.status-resolved {
background: #dcfce7;
color: #166534
}
.status-closed {
background: #f3f4f6;
color: #6b7280
}
[data-theme="dark"] .status-open {
background: #1e2a4a;
color: #93c5fd
}
[data-theme="dark"] .status-resolved {
background: #11271a;
color: #86efac
}
[data-theme="dark"] .status-closed {
background: #2a2f37;
color: #9aa0a6
}
.pd-period {
color: var(--accent);
font-weight: 600;
margin-bottom: 12px;
display: flex;
align-items: center;
gap: 6px
}
.btn-sm {
padding: 7px 14px;
font-size: .85rem
}
.btn-ok {
background: var(--ok);
color: #fff
}
.btn-ok:hover {
transform: translateY(-2px);
box-shadow: 0 6px 16px rgba(22, 163, 74, .28)
}
.oc-period {
margin-top: 8px;
font-size: .82rem;
color: var(--muted)
}
.oc-renew {
margin-top: 8px
}
.od-period {
font-style: normal;
color: var(--accent);
font-size: .85rem
}
.od-delivery {
margin-top: 16px
}
.od-renew {
margin-top: 16px;
display: flex;
align-items: center;
gap: 10px;
flex-wrap: wrap
}
.secret {
font-family: 'Roboto Mono', 'Consolas', monospace;
letter-spacing: .5px
}
.reveal-btn {
width: auto;
height: auto;
padding: 3px 10px;
border-radius: var(--radius-sm);
border: 1px solid var(--outline);
background: var(--secondary);
color: var(--text);
cursor: pointer;
font-size: .8rem
}
.reveal-btn:hover {
color: var(--primary);
border-color: var(--primary)
}
.mall-about {
margin-top: 8px
}
.about-card {
background: var(--surface-1);
border: 1px solid var(--outline-variant);
border-radius: var(--radius-md);
padding: 18px 20px;
color: var(--text);
line-height: 1.8
}
.pd-purchased {
margin-top: 18px
}
.pp-head {
display: flex;
align-items: center;
gap: 12px;
background: var(--secondary);
border: 1px solid var(--outline-variant);
border-radius: var(--radius-md);
padding: 14px 16px
}
.pp-head .fas {
color: var(--primary);
font-size: 1.2rem
}
.pp-title {
font-weight: 600
}
.pp-head .btn {
margin-left: auto
}
.pp-detail {
margin-top: 12px;
background: var(--surface-1);
border: 1px solid var(--outline-variant);
border-radius: var(--radius-md);
padding: 14px 16px
}
.od-info-block {
background: var(--secondary);
border-radius: var(--radius-sm);
padding: 8px 12px;
white-space: pre-wrap
}
.ship-form {
margin-top: 18px;
max-width: 720px
}
.ship-existing {
background: var(--surface-1);
border: 1px solid var(--outline-variant);
border-radius: var(--radius-md);
padding: 12px 14px;
margin-bottom: 4px
}
.ship-existing .od-line {
font-size: .9rem
}
.renew-box,
.ticket-order {
margin: 12px 0;
padding: 10px 14px;
border-left: 4px solid var(--primary);
background: var(--surface-1);
border-radius: var(--radius-sm);
color: var(--muted);
font-size: .9rem
}
.renew-box i,
.ticket-order i {
color: var(--primary)
}
.ann-strip-wrap {
margin-bottom: 6px
}
.ann-strip {
display: flex;
align-items: center;
gap: 14px;
background: var(--surface);
border: 1px solid var(--outline);
border-radius: var(--radius-md);
padding: 12px 16px
}
.ann-strip-label {
display: inline-flex;
align-items: center;
gap: 6px;
font-weight: 700;
color: var(--primary);
flex: none
}
.ann-strip-items {
display: flex;
gap: 18px;
overflow-x: auto;
flex: 1;
scrollbar-width: none;
-ms-overflow-style: none
}
.ann-strip-items::-webkit-scrollbar {
display: none
}
.ann-strip-item {
display: inline-flex;
align-items: center;
gap: 6px;
color: var(--muted);
white-space: nowrap;
font-size: .9rem
}
.ann-strip-item:hover {
color: var(--primary)
}
.ann-strip-date {
font-size: .78rem;
opacity: .8
}
.ann-strip-more {
flex: none;
color: var(--primary);
font-weight: 600;
font-size: .88rem;
white-space: nowrap
}
.ann-pin {
color: var(--primary)
}
.ann-list {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
gap: 18px
}
.ann-card {
background: var(--surface);
border: 1px solid var(--outline);
border-radius: var(--radius-lg);
transition: box-shadow .15s, transform .12s
}
.ann-card:hover {
box-shadow: var(--shadow-2);
transform: translateY(-2px)
}
.ann-card-link {
display: block;
padding: 18px;
color: var(--text);
text-decoration: none
}
.ann-head {
display: flex;
align-items: center;
justify-content: space-between;
gap: 10px;
margin-bottom: 6px
}
.ann-title {
font-size: 1.05rem;
font-weight: 700;
color: var(--text)
}
.ann-card-link:hover .ann-title {
color: var(--primary)
}
.ann-pin {
font-size: .72rem;
padding: 1px 8px;
border-radius: var(--radius-full);
background: var(--primary-container);
color: var(--on-primary-container);
font-weight: 600
}
.ann-time {
color: var(--muted);
font-size: .8rem;
margin-bottom: 10px
}
.ann-excerpt {
color: var(--muted);
font-size: .92rem;
line-height: 1.6;
margin: 0 0 12px;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden
}
.ann-read {
font-size: .88rem;
font-weight: 600;
color: var(--primary);
display: inline-flex;
align-items: center;
gap: 4px
}
.ann-read i {
font-size: .72rem
}
.ann-detail {
background: var(--surface);
border: 1px solid var(--outline);
border-radius: var(--radius-lg);
padding: 28px;
max-width: 800px;
margin: 0 auto
}
.ann-detail-head {
border-bottom: 1px solid var(--outline-variant);
padding-bottom: 16px;
margin-bottom: 20px
}
.ann-detail-title {
font-size: 1.45rem;
font-weight: 700;
line-height: 1.35;
margin: 0 0 10px
}
.ann-detail-title .ann-pin {
margin-right: 8px
}
.ann-detail-time {
color: var(--muted);
font-size: .88rem
}
.ann-detail-body {
color: var(--text);
line-height: 1.9;
font-size: 1rem;
white-space: pre-wrap
}
.ann-detail-foot {
margin-top: 28px;
padding-top: 18px;
border-top: 1px solid var(--outline-variant)
}
.ann-preview-wrap {
margin-top: 8px
}
.ann-preview-bar {
display: flex;
align-items: center;
justify-content: space-between;
margin: 6px 0
}
.ann-preview-bar .btn-sm {
padding: 4px 12px;
font-size: 0.82rem
}
.ann-preview {
min-height: 80px;
padding: 14px 18px;
border: 1px solid var(--outline-variant);
border-radius: 10px;
background: var(--surface-2, #f6f8fb)
}
@media (max-width:780px) {
.checkout {
grid-template-columns: 1fr
}
.nav-toggle {
display: inline-flex
}
.brand {
flex: 1
}
.nav-links {
position: absolute;
top: 100%;
left: 0;
right: 0;
flex-direction: column;
gap: 0;
flex: none;
background: var(--surface);
border-bottom: 1px solid var(--outline);
box-shadow: var(--shadow-2);
padding: 6px 16px
}
.nav-links.open {
display: flex
}
.nav-links a {
padding: 13px 4px;
border-bottom: 1px solid var(--outline-variant)
}
.nav-links a:last-child {
border-bottom: none
}
.product-detail {
grid-template-columns: 1fr
}
.pd-media {
height: 200px
}
.cart-item {
grid-template-columns: 60px 1fr;
grid-auto-rows: auto
}
.ci-qty,
.ci-sub,
.ci-del {
grid-column: 2;
justify-self: start
}
.grid-form {
grid-template-columns: 1fr
}
.od-info {
grid-template-columns: 1fr
}
.od-th,
.od-row {
grid-template-columns: 1fr 70px 48px 84px;
font-size: .86rem
}
.oc-foot {
flex-direction: column;
align-items: flex-start
}
.ann-strip {
flex-wrap: wrap
}
.od-renew {
flex-direction: column;
align-items: flex-start
}
}
@media (max-width:780px) {
#navLinks {
display: none !important;
position: absolute !important;
top: 100% !important;
left: 0 !important;
right: 0 !important;
flex-direction: column !important;
gap: 0 !important;
background: var(--surface) !important;
border-bottom: 1px solid var(--outline) !important;
box-shadow: var(--shadow-2) !important;
padding: 6px 16px !important;
border-radius: 0 0 8px 8px !important;
z-index: 100 !important
}
#navLinks.open {
display: flex !important;
animation: uc-pop .16s ease
}
#navLinks a {
padding: 13px 4px !important;
border-bottom: 1px solid var(--outline-variant) !important;
color: var(--text) !important;
background: transparent !important;
border-radius: 0 !important
}
#navLinks a:last-child {
border-bottom: none !important
}
#navLinks a:hover,
#navLinks a.active {
color: var(--primary) !important;
background: var(--secondary) !important
}
}
@media (max-width:780px) {
.admin-bar .nav-links {
display: none !important;
position: absolute !important;
top: 100% !important;
left: 0 !important;
right: 0 !important;
flex-direction: column !important;
gap: 0 !important;
background: var(--surface) !important;
border-bottom: 1px solid var(--outline) !important;
box-shadow: var(--shadow-2) !important;
padding: 6px 16px !important;
border-radius: 0 0 8px 8px !important;
z-index: 100 !important
}
.admin-bar .nav-links.open {
display: flex !important;
animation: uc-pop .16s ease
}
.admin-bar .nav-links a {
padding: 13px 4px !important;
border-bottom: 1px solid var(--outline-variant) !important;
color: var(--text) !important;
background: transparent !important;
border-radius: 0 !important
}
.admin-bar .nav-links a:last-child {
border-bottom: none !important
}
.admin-bar .nav-links a:hover,
.admin-bar .nav-links a.active {
color: var(--primary) !important;
background: var(--secondary) !important
}
}
@media (min-width:781px) {
.nav-toggle {
display: none !important
}
}
@media (max-width:780px) {
.nav-toggle {
display: inline-flex !important
}
.site-header .nav,
.admin-bar .nav {
position: relative !important
}
}
@media (max-width:520px) {
.hero-content h1 {
font-size: 1.8rem
}
.footer-inner {
flex-direction: column
}
.auth-card {
padding: 22px 18px
}
.user-card {
position: fixed;
left: 12px;
right: 12px;
width: auto;
top: 64px;
max-width: none
}
.uc-head {
flex-wrap: nowrap
}
.uc-id {
min-width: 0
}
.uc-name,
.uc-handle {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap
}
.uc-points {
white-space: nowrap
}
.uc-item {
white-space: nowrap;
display: flex;
align-items: center;
gap: 10px
}
.uc-item .fas {
width: 20px
}
.ann-list {
grid-template-columns: 1fr
}
.ann-detail {
padding: 18px
}
.ann-detail-title {
font-size: 1.2rem
}
}
.ann-detail-body,
.pd-desc {
line-height: 1.8;
color: var(--text)
}
.ann-detail-body h1,
.pd-desc h1,
.ann-detail-body h2,
.pd-desc h2,
.ann-detail-body h3,
.pd-desc h3,
.ann-detail-body h4,
.pd-desc h4,
.ann-detail-body h5,
.pd-desc h5,
.ann-detail-body h6,
.pd-desc h6 {
margin: 1.4rem 0 0.6rem;
font-weight: 700;
line-height: 1.4
}
.ann-detail-body h1,
.pd-desc h1 {
font-size: 1.8rem
}
.ann-detail-body h2,
.pd-desc h2 {
font-size: 1.5rem
}
.ann-detail-body h3,
.pd-desc h3 {
font-size: 1.25rem
}
.ann-detail-body h4,
.pd-desc h4 {
font-size: 1.1rem
}
.ann-detail-body h5,
.pd-desc h5 {
font-size: 1rem
}
.ann-detail-body h6,
.pd-desc h6 {
font-size: 0.9rem;
color: var(--muted)
}
.ann-detail-body p,
.pd-desc p {
margin: 0.6rem 0
}
.ann-detail-body strong,
.pd-desc strong {
font-weight: 700
}
.ann-detail-body em,
.pd-desc em {
font-style: italic
}
.ann-detail-body a,
.pd-desc a {
color: var(--primary);
text-decoration: underline;
text-underline-offset: 2px
}
.ann-detail-body a:hover,
.pd-desc a:hover {
color: var(--primary-hover)
}
.ann-detail-body ul,
.ann-detail-body ol,
.pd-desc ul,
.pd-desc ol {
padding-left: 1.8rem;
margin: 0.5rem 0
}
.ann-detail-body li,
.pd-desc li {
margin: 0.2rem 0
}
.ann-detail-body ul ul,
.pd-desc ul ul,
.ann-detail-body ol ol,
.pd-desc ol ol,
.ann-detail-body ul ol,
.pd-desc ul ol,
.ann-detail-body ol ul,
.pd-desc ol ul {
margin: 0.2rem 0
}
.ann-detail-body blockquote,
.pd-desc blockquote {
border-left: 4px solid var(--primary);
background: var(--surface-1);
padding: 0.6rem 1.2rem;
margin: 0.8rem 0;
border-radius: var(--radius-sm);
color: var(--muted)
}
.ann-detail-body code,
.pd-desc code {
background: var(--secondary);
padding: 0.1rem 0.4rem;
border-radius: 4px;
font-size: 0.9em;
color: var(--primary);
font-family: 'Consolas', 'Monaco', 'Courier New', monospace
}
.ann-detail-body pre,
.pd-desc pre {
background: var(--surface-2);
padding: 1rem 1.2rem;
border-radius: var(--radius-md);
overflow-x: auto;
margin: 0.8rem 0;
border: 1px solid var(--outline-variant)
}
.ann-detail-body pre code,
.pd-desc pre code {
background: transparent;
padding: 0;
color: var(--text);
font-size: 0.9rem;
font-family: 'Consolas', 'Monaco', 'Courier New', monospace
}
.ann-detail-body table,
.pd-desc table {
width: 100%;
border-collapse: collapse;
margin: 0.8rem 0;
font-size: 0.95rem
}
.ann-detail-body th,
.pd-desc th,
.ann-detail-body td,
.pd-desc td {
border: 1px solid var(--outline);
padding: 8px 12px;
text-align: left
}
.ann-detail-body th,
.pd-desc th {
background: var(--secondary);
font-weight: 700
}
.ann-detail-body tr:nth-child(even),
.pd-desc tr:nth-child(even) {
background: var(--surface-1)
}
table {
display: block;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
white-space: nowrap;
max-width: 100%;
border-radius: var(--radius-sm)
}
.ann-detail-body img,
.pd-desc img {
max-width: 100%;
border-radius: var(--radius-sm);
margin: 0.5rem 0
}
.ann-detail-body hr,
.pd-desc hr {
border: none;
border-top: 2px solid var(--outline-variant);
margin: 1.5rem 0
}
.ann-detail-body input[type="checkbox"],
.pd-desc input[type="checkbox"] {
margin-right: 6px;
vertical-align: middle;
accent-color: var(--primary)
}
.pagination {
display: flex;
gap: 6px;
justify-content: center;
margin: 24px 0;
flex-wrap: wrap
}
.pagination a,
.pagination span {
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 36px;
height: 36px;
padding: 0 12px;
border: 1px solid var(--outline);
border-radius: var(--radius-sm);
background: var(--surface);
color: var(--text);
font-size: .9rem;
transition: .15s
}
.pagination a:hover {
background: var(--secondary);
border-color: var(--primary);
color: var(--primary)
}
.pagination .active {
background: var(--primary);
color: var(--on-primary);
border-color: var(--primary)
}
.pagination .disabled {
opacity: .5;
pointer-events: none
}
.spinner {
width: 40px;
height: 40px;
border: 4px solid var(--outline);
border-top-color: var(--primary);
border-radius: 50%;
animation: spin .7s linear infinite;
margin: 30px auto
}
@keyframes spin {
to {
transform: rotate(360deg)
}
}
.loading-mask {
display: flex;
align-items: center;
justify-content: center;
padding: 40px 0;
color: var(--muted);
gap: 10px
}
.modal-overlay {
position: fixed;
inset: 0;
background: rgba(0, 0, 0, .5);
backdrop-filter: blur(4px);
z-index: 999;
display: flex;
align-items: center;
justify-content: center;
padding: 20px
}
.modal-overlay[hidden] {
display: none !important
}
.modal-box {
background: var(--surface);
border: 1px solid var(--outline);
border-radius: var(--radius-lg);
max-width: 560px;
width: 100%;
max-height: 90vh;
overflow-y: auto;
padding: 28px;
box-shadow: var(--shadow-3);
animation: modal-in .2s ease
}
@keyframes modal-in {
from {
opacity: 0;
transform: scale(.95) translateY(10px)
}
to {
opacity: 1;
transform: none
}
}
.modal-head {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 16px
}
.modal-head h3 {
font-size: 1.2rem;
color: var(--text);
margin: 0
}
.modal-close {
width: 36px;
height: 36px;
border: none;
background: var(--secondary);
border-radius: 50%;
font-size: 1.2rem;
cursor: pointer;
color: var(--muted);
display: flex;
align-items: center;
justify-content: center
}
.modal-close:hover {
background: var(--outline-variant);
color: var(--text)
}
.modal-body {
color: var(--text);
line-height: 1.7
}
.modal-foot {
margin-top: 20px;
display: flex;
gap: 10px;
justify-content: flex-end
}
/* 桌面端导航链接:干净的内联样式 */
#navLinks {
display: flex;
gap: 18px;
margin-left: 10px;
flex: 1;
align-items: center
}
/* ===== 到期时间徽标 ===== */
.exp-badge {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 2px 10px;
border-radius: var(--radius-full);
font-size: .82rem;
font-weight: 600;
line-height: 1.6;
border: 1px solid transparent;
white-space: nowrap;
vertical-align: middle;
}
.exp-badge i { font-size: .8rem; }
.exp-ok { color: var(--ok); background: rgba(22,163,74,.12); border-color: rgba(22,163,74,.35); }
.exp-warn { color: #b7791f; background: #fff7e6; border-color: #f3d28a; }
.exp-danger { color: var(--danger);background: rgba(229,72,77,.12); border-color: rgba(229,72,77,.35); }
.exp-expired { color: var(--muted); background: var(--surface-2); border-color: var(--border); }
.exp-none { color: var(--muted); background: var(--surface-2); border-color: var(--border); }
[data-theme="dark"] .exp-warn { color: #f0c050; background: rgba(240,192,80,.14); border-color: rgba(240,192,80,.40); }
/* ===== 后台:到期时间修改 ===== */
.expire-edit {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 10px;
margin-top: 10px;
padding-top: 10px;
border-top: 1px dashed var(--outline-variant);
}
.expire-edit .expire-field {
display: inline-flex;
align-items: center;
gap: 8px;
font-size: .9rem;
color: var(--muted);
}
.expire-edit input[type="datetime-local"] {
padding: 6px 10px;
border: 1px solid var(--border);
border-radius: var(--radius-sm);
background: var(--surface);
color: var(--text);
font-size: .9rem;
}
.expire-edit .expire-clear {
display: inline-flex;
align-items: center;
gap: 6px;
font-size: .9rem;
color: var(--muted);
}