@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); }