v0.5.84: matches origin filter, mobile gate, refresh reliability.

Ship Web refresh cache/lock, mobile demand gate, matches 职业/国服 filter, and related site updates through 0.5.84.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
voson
2026-07-29 18:31:55 +08:00
co-authored by Cursor
parent 7681fdb069
commit b01552ee6e
50 changed files with 3406 additions and 487 deletions
+241 -31
View File
@@ -1873,13 +1873,18 @@ a.match-player-name:hover {
color: rgba(180, 195, 215, 0.8);
}
.match-items,
.match-skills,
.match-backpack {
display: flex;
flex-wrap: wrap;
gap: 6px;
align-items: center;
}
.match-skills {
display: flex;
flex-wrap: nowrap;
gap: 5px;
align-items: center;
}
.match-inv {
display: flex;
flex-direction: column;
@@ -2603,22 +2608,90 @@ body:has(#items-view:not(.hidden)) {
}
.matches-board .matches-body {
min-height: 0;
width: 100%;
min-width: 0;
}
.matches-center-wrap {
.matches-board .rankings-center-wrap.matches-center-wrap {
align-items: stretch;
/* Fixed column width so cards align; ~lv30 skill row + a little slack. */
width: min(1680px, 100%, calc(100vw - 280px));
}
.matches-board .match-list,
.matches-board .match-card {
width: 100%;
max-width: 100%;
box-sizing: border-box;
}
.matches-board .match-skills {
max-width: 100%;
}
@media (max-width: 1460px) {
.match-skills {
flex-wrap: wrap;
}
}
.matches-board .rankings-aside {
align-items: stretch;
}
.matches-origins,
.matches-players {
display: flex;
flex-direction: column;
gap: 6px;
max-height: min(70vh, 560px);
overflow: auto;
scrollbar-width: thin;
padding-right: 2px;
width: 100%;
}
.matches-board .rankings-aside .rankings-region-btn {
width: 100%;
box-sizing: border-box;
}
.matches-board .match-list {
gap: 12px;
}
.matches-page-wrap {
display: flex;
flex-direction: column;
gap: 16px;
width: 100%;
}
.matches-pager {
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: center;
gap: 6px;
padding: 4px 0 8px;
}
.matches-pager-btn {
min-width: 36px;
height: 34px;
padding: 0 10px;
border-radius: 6px;
border: 1px solid rgba(140, 170, 210, 0.28);
background: rgba(0, 0, 0, 0.28);
color: rgba(220, 230, 245, 0.9);
font: inherit;
font-size: 13px;
cursor: pointer;
}
.matches-pager-btn:hover:not(:disabled):not(.active) {
border-color: rgba(180, 200, 230, 0.55);
color: #fff;
}
.matches-pager-btn.active {
border-color: rgba(232, 200, 120, 0.75);
background: rgba(180, 130, 40, 0.28);
color: rgba(255, 220, 160, 0.98);
cursor: default;
}
.matches-pager-btn:disabled {
opacity: 0.4;
cursor: default;
}
.matches-pager-ell {
color: rgba(160, 175, 195, 0.7);
padding: 0 2px;
user-select: none;
}
.rankings-empty {
padding: 48px 0;
text-align: center;
@@ -2696,6 +2769,9 @@ body:has(#items-view:not(.hidden)) {
gap: 18px;
width: min(640px, 94%);
}
.matches-board .rankings-center-wrap.matches-center-wrap {
width: min(1680px, 94%);
}
.rankings-aside {
position: static;
width: 100%;
@@ -3232,7 +3308,7 @@ body:has(#items-view:not(.hidden)) {
background: rgba(16, 24, 36, 0.92);
box-sizing: border-box;
}
/* Row 1 only: avatar | nickname | actions — meta/signature live below as siblings */
/* Row 1: avatar | info (name/meta/signature) | follow */
.streamer-card-head {
display: flex;
align-items: center;
@@ -3285,11 +3361,9 @@ a.streamer-avatar-wrap:hover .streamer-avatar {
font-weight: 700;
color: var(--muted);
}
/* Douyin search live: outer ring expands+fades; avatar shrinks (1s ease). */
.streamer-avatar-wrap.is-live {
padding-bottom: 10px;
margin-bottom: -10px;
}
/* Douyin live avatar: ring pulse + badge overlaps ring (no gap).
Measured on live.douyin.com: badge bottom:-6px on 54px wrap, ~10px overlap,
gradient pill, no border/shadow. */
.streamer-avatar-wrap.is-live .streamer-avatar {
border-color: rgb(69, 71, 79);
}
@@ -3303,7 +3377,7 @@ a.streamer-avatar-wrap:hover .streamer-avatar {
width: 99px;
height: 99px;
border-radius: 50%;
border: 1px solid rgb(254, 26, 104);
border: 1px solid rgb(254, 44, 85);
box-sizing: border-box;
pointer-events: none;
z-index: 0;
@@ -3335,23 +3409,37 @@ a.streamer-avatar-wrap:hover .streamer-avatar {
.streamer-live-badge {
position: absolute;
left: 50%;
bottom: 0;
/* Douyin: bottom:-6px → badge overlaps ring/avatar bottom, no air gap. */
bottom: -6px;
transform: translateX(-50%);
z-index: 2;
padding: 1px 6px;
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 38px;
height: 16px;
padding: 0 6px;
font-size: 10px;
font-weight: 700;
line-height: 1.3;
font-weight: 600;
line-height: 1;
letter-spacing: 0.02em;
color: #fff;
background: rgb(254, 26, 104);
background: linear-gradient(131.17deg, rgb(255, 23, 100) 0%, rgb(237, 52, 149) 94.15%);
border: 0;
border-radius: 4px;
box-shadow: none;
white-space: nowrap;
pointer-events: none;
}
.streamer-name {
.streamer-card-info {
flex: 1 1 auto;
min-width: 0;
display: flex;
flex-direction: column;
justify-content: center;
gap: 5px;
}
.streamer-name {
margin: 0;
font-size: 20px;
font-weight: 700;
@@ -3362,38 +3450,52 @@ a.streamer-avatar-wrap:hover .streamer-avatar {
white-space: nowrap;
}
.streamer-meta {
display: flex;
align-items: center;
width: fit-content;
max-width: 100%;
margin: 0;
font-size: 13px;
line-height: 20px;
letter-spacing: 0.6px;
line-height: 18px;
letter-spacing: 0.2px;
color: var(--muted);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-variant-numeric: tabular-nums;
}
/* Douyin search card: 1×10px divider, 8px side margin */
.streamer-meta-sep {
display: inline-block;
flex: 0 0 auto;
width: 1px;
height: 10px;
margin: 0 8px;
vertical-align: baseline;
background: rgba(255, 255, 255, 0.16);
height: 11px;
margin: 0 10px;
background: rgba(255, 255, 255, 0.13);
}
.streamer-meta-item {
display: inline;
flex: 0 0 auto;
}
.streamer-meta-value {
color: #dce5f2;
font-weight: 600;
}
.streamer-meta-item.is-account .streamer-meta-value {
color: #aab8cd;
font-weight: 500;
}
.streamer-meta-item.is-stat .streamer-meta-label {
margin-left: 3px;
}
.streamer-signature {
margin: 0;
font-size: 13px;
line-height: 20px;
letter-spacing: 0.4px;
color: var(--muted);
letter-spacing: 0.3px;
color: #8e9bb0;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
word-break: break-word;
}
.streamer-actions {
flex: 0 0 auto;
@@ -3586,9 +3688,21 @@ a.streamer-avatar-wrap:hover .streamer-avatar {
.streamer-avatar-fallback {
font-size: 24px;
}
.streamer-live-badge {
bottom: -5px;
min-width: 34px;
height: 15px;
font-size: 9px;
}
.streamer-name {
font-size: 18px;
}
.streamer-meta {
font-size: 12px;
}
.streamer-meta-sep {
margin: 0 6px;
}
.streamer-actions {
min-width: 76px;
gap: 8px;
@@ -3636,3 +3750,99 @@ a.streamer-avatar-wrap:hover .streamer-avatar {
}
}
/* —— Mobile gate (phones / tablets; set by mobile-gate.js) —— */
#mobile-gate {
display: none;
}
html.mobile-client,
html.mobile-client body {
height: 100%;
max-height: none;
overflow: auto;
}
html.mobile-client body > :not(#mobile-gate) {
display: none !important;
}
html.mobile-client #mobile-gate {
display: flex;
flex: 1 1 auto;
min-height: 100dvh;
align-items: center;
justify-content: center;
padding: 32px 20px;
}
.mobile-gate-card {
width: min(360px, 100%);
text-align: center;
}
.mobile-gate-brand {
display: flex;
align-items: center;
justify-content: center;
gap: 10px;
margin-bottom: 28px;
}
.mobile-gate-logo {
height: 28px;
width: auto;
display: block;
}
.mobile-gate-brand-title {
font-size: 18px;
font-weight: 700;
letter-spacing: 0.16em;
color: var(--text);
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
}
.mobile-gate-title {
margin: 0 0 10px;
font-size: 22px;
font-weight: 700;
letter-spacing: 0.04em;
color: var(--text);
}
.mobile-gate-desc {
margin: 0 0 28px;
font-size: 15px;
line-height: 1.55;
color: var(--muted);
}
.mobile-demand-btn {
appearance: none;
border: 1px solid rgba(94, 200, 255, 0.45);
background: rgba(94, 200, 255, 0.12);
color: var(--sel);
font: inherit;
font-size: 15px;
font-weight: 600;
letter-spacing: 0.06em;
padding: 12px 22px;
border-radius: 8px;
cursor: pointer;
transition: background 0.15s, border-color 0.15s, color 0.15s;
}
.mobile-demand-btn:hover:not(:disabled) {
background: rgba(94, 200, 255, 0.2);
border-color: rgba(94, 200, 255, 0.7);
}
.mobile-demand-btn:focus-visible {
outline: 2px solid var(--sel);
outline-offset: 2px;
}
.mobile-demand-btn:disabled {
cursor: default;
opacity: 0.75;
border-color: rgba(140, 170, 210, 0.28);
background: rgba(140, 170, 210, 0.1);
color: var(--muted);
}
.mobile-demand-count {
margin: 16px 0 0;
font-size: 13px;
color: var(--muted);
}
.mobile-demand-count span {
color: var(--text);
font-weight: 600;
}