-
-
+
+
+
mdi-headset
+
+
{{ finishedLessons }}/{{ totalLessons }}
+
Lessons complete
+
+
+
+
mdi-target-account
+
+
{{ missionCompletionPct }}%
+
Mission progress
+
+
+
+
mdi-star-shooting
+
+
{{ finishedLessons ? globalAccuracy + '%' : '—' }}
+
Avg. best score
-
{{ objective.status }}
@@ -2092,36 +2024,6 @@ onMounted(() => {
box-shadow: 0 30px 80px rgba(0, 0, 0, .35)
}
-.hero-header {
- display: flex;
- align-items: center;
- justify-content: space-between;
- gap: 12px;
- margin-bottom: 6px
-}
-
-.hero-left .eyebrow {
- font-size: 12px;
- letter-spacing: .18em;
- color: var(--t3);
- text-transform: uppercase
-}
-
-.hero-pill {
- display: inline-flex;
- align-items: center;
- gap: 6px;
- padding: 6px 12px;
- border-radius: 999px;
- border: 1px solid color-mix(in srgb, var(--accent) 40%, transparent);
- background: color-mix(in srgb, var(--accent) 14%, transparent);
- color: var(--accent);
- font-size: 12px;
- letter-spacing: .14em;
- text-transform: uppercase;
- box-shadow: 0 6px 20px rgba(34, 211, 238, .25)
-}
-
.hero-sub {
max-width: 520px;
margin-top: 4px
@@ -2343,197 +2245,38 @@ onMounted(() => {
margin-top: 16px
}
-.season {
- margin-top: 18px;
- display: flex;
- flex-direction: column;
- gap: 8px
-}
-
-.season-head {
- display: flex;
- justify-content: space-between;
- color: var(--t3);
- font-size: 12px;
- text-transform: uppercase;
- letter-spacing: .14em
-}
-
-.bar {
- height: 8px;
- background: color-mix(in srgb, var(--text) 8%, transparent);
- border: 1px solid var(--border);
- border-radius: 999px;
- overflow: hidden
-}
-
-.fill {
- height: 100%;
- background: linear-gradient(90deg, var(--accent), var(--accent2))
-}
-
.hero-right {
display: flex;
flex-direction: column;
gap: clamp(12px, 2vw, 16px)
}
-.badge-stack {
+.hero-stats {
+ border: 1px solid var(--border);
+ border-radius: 20px;
+ padding: clamp(14px, 3vw, 20px);
+ background: color-mix(in srgb, var(--text) 6%, transparent);
+ box-shadow: 0 18px 40px rgba(0, 0, 0, .26);
display: flex;
flex-direction: column;
- gap: 12px
+ gap: 12px;
+ animation: float 16s ease-in-out infinite
}
-.badge-card {
- border: 1px solid var(--border);
- border-radius: 18px;
- padding: 16px;
- background: color-mix(in srgb, var(--text) 5%, transparent);
- position: relative;
- overflow: hidden;
- box-shadow: 0 16px 40px rgba(0, 0, 0, .24);
- animation: float 14s ease-in-out infinite
-}
-
-.badge-card.current {
- background: linear-gradient(135deg, color-mix(in srgb, var(--accent) 28%, transparent), color-mix(in srgb, var(--accent2) 18%, transparent));
- color: var(--text)
-}
-
-.badge-card.next.complete {
- opacity: .9
-}
-
-.badge-chip {
+.hero-stats-title {
display: inline-flex;
align-items: center;
- gap: 6px;
- padding: 6px 12px;
- border-radius: 999px;
- border: 1px solid color-mix(in srgb, var(--text) 20%, transparent);
- background: color-mix(in srgb, var(--text) 12%, transparent);
- font-size: 11px;
- letter-spacing: .12em;
- text-transform: uppercase;
- color: var(--t2)
-}
-
-.badge-chip.accent {
- color: var(--accent);
- border-color: color-mix(in srgb, var(--accent) 38%, transparent);
- background: color-mix(in srgb, var(--accent) 12%, transparent)
-}
-
-.badge-name {
- font-size: 22px;
- font-weight: 600;
- margin-top: 10px
-}
-
-.badge-progress {
- margin-top: 14px;
- height: 8px;
- border-radius: 999px;
- border: 1px solid color-mix(in srgb, var(--text) 20%, transparent);
- background: color-mix(in srgb, var(--text) 8%, transparent);
- overflow: hidden
-}
-
-.badge-progress-fill {
- height: 100%;
- background: linear-gradient(90deg, var(--accent), var(--accent2));
- transition: width .4s ease
-}
-
-.hero-right .rail-title {
- color: var(--t3);
- display: flex;
- align-items: center;
- gap: 6px;
- margin-bottom: 6px;
- text-transform: uppercase;
- letter-spacing: .14em;
- font-size: 12px
-}
-
-.rail {
- display: flex;
- gap: 12px;
- overflow: auto;
- padding-bottom: 4px
-}
-
-.card {
- border: 1px solid var(--border);
- background: color-mix(in srgb, var(--text) 6%, transparent);
- padding: 14px;
- min-width: 240px;
- border-radius: 16px
-}
-
-.challenge-card {
- position: relative;
- overflow: hidden;
- transition: transform .3s ease, box-shadow .3s ease
-}
-
-.challenge-card::after {
- content: '';
- position: absolute;
- inset: 0;
- background: radial-gradient(140% 140% at 0% 100%, color-mix(in srgb, var(--accent) 16%, transparent), transparent 60%);
- opacity: 0;
- transition: opacity .3s ease;
- pointer-events: none
-}
-
-.challenge-card:hover {
- box-shadow: 0 16px 34px rgba(0, 0, 0, .28)
-}
-
-.challenge-card:hover::after {
- opacity: 1
-}
-
-.challenge-card.done {
- border-color: color-mix(in srgb, var(--accent) 40%, transparent);
- background: color-mix(in srgb, var(--accent) 12%, transparent);
- box-shadow: 0 10px 20px rgba(0, 0, 0, .18);
-}
-
-.challenge-card.done::after {
- opacity: .4;
-}
-
-.challenge-card.done:hover {
- transform: none;
-}
-
-.card-head {
- display: flex;
- justify-content: space-between;
- align-items: center
-}
-
-.badge {
- border: 1px solid var(--border);
- padding: 2px 8px;
+ gap: 8px;
font-size: 12px;
- color: var(--t2);
- border-radius: 999px;
- letter-spacing: .08em;
- text-transform: uppercase
+ letter-spacing: .16em;
+ text-transform: uppercase;
+ color: var(--t3)
}
-.badge.complete {
- border-color: color-mix(in srgb, var(--accent) 45%, transparent);
- color: var(--accent);
+.hero-right .hero-metrics {
+ margin-top: 0
}
-.card-title {
- font-weight: 600;
- margin: 6px 0 2px
-}
/* Buttons */
.btn {