- 已获得 {{ summary.unlocked }} / {{ summary.total }}
+
+
+ {{ summary.percent }}
+ %
+
完成度
-
+
-
- {{ r.label }}
-
-
-
-
-
- {{ r.unlocked }} / {{ r.total }}
-
+ />
+
+ {{
+ r.unlocked
+ }}
+ / {{ r.total }}
+
+
{{ r.label }}
+
+
+
+
+
+
@@ -143,77 +185,163 @@ watch(name, load)
.overview-row {
display: flex;
align-items: center;
- gap: 32px;
+ gap: 28px;
flex-wrap: wrap;
}
-.percent {
+
+/* 等级铭牌:六边形靠 clip-path,老 Chrome 也支持 */
+.level {
flex: none;
- width: 110px;
text-align: center;
}
-.percent :deep(.n-progress) {
- width: 110px;
+.plate {
+ width: 84px;
+ height: 92px;
+ display: flex;
+ align-items: baseline;
+ justify-content: center;
+ clip-path: polygon(50% 0, 93% 25%, 93% 75%, 50% 100%, 7% 75%, 7% 25%);
+ background: linear-gradient(
+ 180deg,
+ rgba(128, 128, 128, 0.24),
+ rgba(128, 128, 128, 0.1)
+ );
}
-.ring-percent {
+.plate-num {
+ font-size: 26px;
+ font-weight: 700;
+ line-height: 92px;
+ font-variant-numeric: tabular-nums;
+}
+.plate-unit {
+ font-size: 13px;
+ opacity: 0.6;
+ margin-left: 1px;
+}
+.plate-label {
+ margin-top: 6px;
+ font-size: 11px;
+ letter-spacing: 3px;
+ opacity: 0.55;
+ padding-left: 3px; /* 抵消字距在末字后面留的空 */
+}
+
+/* 奖杯陈列 */
+.trophies {
+ flex: 1;
+ min-width: 260px;
+ display: flex;
+ justify-content: space-around;
+ gap: 8px;
+}
+.trophy {
+ text-align: center;
+ min-width: 56px;
+}
+.trophy.none {
+ opacity: 0.35;
+ filter: grayscale(1);
+}
+.trophy-count {
+ margin-top: 4px;
+ font-variant-numeric: tabular-nums;
+ line-height: 1.1;
+}
+.trophy-count b {
font-size: 22px;
font-weight: 700;
- line-height: 1;
}
-.sub {
- margin-top: 8px;
+.trophy-count span {
font-size: 12px;
- opacity: 0.65;
- white-space: nowrap;
+ opacity: 0.5;
+ margin-left: 3px;
}
-.rarity {
- flex: 1;
- min-width: 240px;
- display: grid;
- grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
- gap: 10px 28px;
+.trophy-label {
+ margin-top: 2px;
+ font-size: 11px;
+ letter-spacing: 2px;
+ opacity: 0.55;
+ padding-left: 2px;
}
-.rarity-item {
+
+/* 总进度条:四段拼起来正好是总完成度 */
+.track {
display: flex;
- align-items: center;
- gap: 10px;
-}
-.rarity-label {
- flex: none;
- width: 30px;
- font-size: 13px;
- font-weight: 600;
-}
-.rarity-bar {
- flex: 1;
height: 6px;
- min-width: 40px;
+ margin-top: 20px;
border-radius: 3px;
overflow: hidden;
background: rgba(128, 128, 128, 0.2); /* 灰底在明暗两套主题下都成立 */
}
-.rarity-fill {
- display: block;
+.seg {
height: 100%;
- border-radius: 3px;
- transition: width 0.4s ease;
+ transition: width 0.5s ease;
}
-.rarity-count {
- flex: none;
+.foot {
+ display: flex;
+ justify-content: space-between;
+ margin-top: 8px;
font-size: 12px;
- opacity: 0.7;
- white-space: nowrap;
- font-variant-numeric: tabular-nums;
+ opacity: 0.6;
}
-.rarity-count b {
- font-size: 13px;
+.done {
opacity: 0.9;
}
+
+/* 移动端改成竖排:铭牌居中一行,四个奖杯等分下面一行 */
+.mobile .overview-row {
+ flex-direction: column;
+ align-items: center;
+ gap: 14px;
+}
+.mobile .plate {
+ width: 72px;
+ height: 80px;
+}
+.mobile .plate-num {
+ font-size: 22px;
+ line-height: 80px;
+}
+.mobile .trophies {
+ width: 100%;
+ min-width: 0;
+ gap: 4px;
+}
+.mobile .trophy {
+ flex: 1 1 0;
+ min-width: 0;
+}
+.mobile .trophy svg {
+ width: 26px;
+ height: 26px;
+}
+.mobile .trophy-count b {
+ font-size: 19px;
+}
+.mobile .trophy-label {
+ letter-spacing: 1px;
+ padding-left: 1px;
+}
+.mobile .track {
+ margin-top: 16px;
+}
+.mobile .foot {
+ font-size: 11px;
+}
+
+/* 这个留给系统偏好,和断点无关 */
+@media (prefers-reduced-motion: reduce) {
+ .seg {
+ transition: none;
+ }
+}
.tabs {
margin: 16px 0;
}
.grid {
display: grid;
- grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
+ /* min() 兜住窄屏:不加的话 300px 的下限会把 320 宽的手机撑出横向滚动 */
+ grid-template-columns: repeat(auto-fill, minmax(min(300px, 100%), 1fr));
gap: 12px;
}
.badge-row {