diff --git a/.gitignore b/.gitignore
index d7fe905..0fdaee3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,4 @@ web/dist/
web/public/data
config.yaml
.claude
+public-config.yaml
diff --git a/.golangci.yml b/.golangci.yml
new file mode 100644
index 0000000..a9c19b4
--- /dev/null
+++ b/.golangci.yml
@@ -0,0 +1,19 @@
+run:
+ timeout: 5m
+
+linters:
+ enable:
+ - gosec
+ - staticcheck
+
+linters-settings:
+ gosec:
+ excludes: []
+ confidence: low
+ severity: medium
+
+issues:
+ exclude-dirs:
+ - .repos
+ - web
+ exclude-dirs-use-default: true
diff --git a/.gosecignore b/.gosecignore
new file mode 100644
index 0000000..441934b
--- /dev/null
+++ b/.gosecignore
@@ -0,0 +1 @@
+.repos
diff --git a/Makefile b/Makefile
index 1cddd49..2377512 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-.PHONY: all build build-spa build-quick install clean test test-coverage lint dev dev-spa serve help
+.PHONY: all build build-spa build-quick install clean test test-coverage lint security dev dev-spa serve help
# Build configuration
BINARY_NAME := git-velocity
@@ -57,6 +57,11 @@ lint:
@echo "Running linter..."
@golangci-lint run ./...
+## Run security scanner (uses .golangci.yml config)
+security:
+ @echo "Running security scanner..."
+ @golangci-lint run --enable gosec ./...
+
## Run Vue dev server for frontend development
dev-spa:
@mkdir -p ./dist/data # Ensure data dir exists for symlink
@@ -95,6 +100,7 @@ help:
@echo " test Run tests with race detector"
@echo " test-coverage Run tests with coverage report"
@echo " lint Run golangci-lint"
+ @echo " security Run gosec security scanner"
@echo " dev-spa Run Vue dev server"
@echo " dev Run analyzer with sample config"
@echo " serve Serve generated output locally"
diff --git a/README.md b/README.md
index 73974ad..78d287f 100644
--- a/README.md
+++ b/README.md
@@ -51,7 +51,7 @@ $ git-velocity serve --port 8080
### 🎮 Gamification Engine
- **Scoring System**: Earn points for every contribution
-- **95 Achievements**: Tiered progression from "First Steps" to "Code Warrior"
+- **115 Achievements**: Tiered progression from "First Steps" to "Code Warrior"
- **Leaderboards**: Compete with your team
- **Tier Progression**: Multiple tiers per achievement category
- **Activity Patterns**: Track early bird, night owl, weekend, and out-of-hours commits
@@ -226,7 +226,7 @@ jobs:
## 🏆 Achievements
-Git Velocity includes **95 hardcoded achievements** across 20 categories with multiple progression tiers. Achievements cannot be modified via configuration to prevent manipulation.
+Git Velocity includes **115 hardcoded achievements** across 26 categories with multiple progression tiers. Achievements cannot be modified via configuration to prevent manipulation.
### Achievement Categories
@@ -254,6 +254,10 @@ Git Velocity includes **95 hardcoded achievements** across 20 categories with mu
| **Out of Hours** | 10, 25, 50, 100 | Commits outside 9am-5pm |
| **Documentation** | 100, 500, 1K, 2.5K, 5K | Comment/doc lines added |
| **Comment Cleanup** | 50, 200, 500, 1K, 2.5K | Outdated comments removed |
+| **Issues Opened** | 1, 5, 10, 25, 50 | Track issues created |
+| **Issues Closed** | 1, 5, 10, 25, 50 | Track issues resolved |
+| **Issue Comments** | 5, 10, 25, 50, 100 | Track issue discussion participation |
+| **Issue References** | 5, 10, 25, 50, 100 | Track commits referencing issues |
### Example Achievements
@@ -270,6 +274,10 @@ Git Velocity includes **95 hardcoded achievements** across 20 categories with mu
| 🏛️ Code Historian | Added 5000 lines of comments/docs |
| ✂️ Comment Trimmer | Removed 50 outdated comment lines |
| 💀 Dead Code Hunter | Removed 500 outdated comment lines |
+| 🎫 Issue Opener | Opened your first issue |
+| 🏷️ Issue Tracker | Opened 25 issues |
+| ✅ Issue Closer | Closed your first issue |
+| 🔗 Issue Linker | 25 commits referencing issues |
## 🔑 GitHub Token Permissions
@@ -392,8 +400,10 @@ scoring:
pr_merged: 50
pr_reviewed: 30
review_comment: 5
- issue_opened: 15
+ issue_opened: 10
issue_closed: 20
+ issue_comment: 5
+ issue_reference_commit: 5
fast_review_1h: 50
fast_review_4h: 25
fast_review_24h: 10
diff --git a/docs/calculations.html b/docs/calculations.html
index 9bb5a40..fe750cf 100644
--- a/docs/calculations.html
+++ b/docs/calculations.html
@@ -181,7 +181,7 @@
Score Formula
-
Total Score = Commits + Line Changes + PRs + Reviews + Comments + Response Bonus + Out of Hours
+ Total Score = Commits + Line Changes + PRs + Reviews + Comments + Issues + Response Bonus + Out of Hours
Where:
Commits = commit_count × 10 points
@@ -189,6 +189,7 @@ Where:
PRs = (PRs_opened × 25) + (PRs_merged × 50) points
Reviews = reviews_given × 30 points
Comments = review_comments × 5 points
+ Issues = (issues_opened × 10) + (issues_closed × 20) + (issue_comments × 5) + (issue_refs × 5) points
Response = bonus for fast review response (0-50 points)
Out of Hours = commits outside 9am-5pm × 2 points
@@ -269,11 +270,31 @@ Where:
10 |
Bonus for average response under 24 hours |
-
+
| Out of Hours |
2 |
Per commit outside 9am-5pm |
+
+ | Issue Opened |
+ 10 |
+ Per issue created |
+
+
+ | Issue Closed |
+ 20 |
+ Per issue resolved/closed |
+
+
+ | Issue Comment |
+ 5 |
+ Per comment on issues |
+
+
+ | Issue Reference |
+ 5 |
+ Per commit referencing an issue (#123) |
+
@@ -433,7 +454,7 @@ Where:
Achievement System
-
95 achievements across 22 categories with tiered progression
+
115 achievements across 26 categories with tiered progression
@@ -533,6 +554,46 @@ Where:
Commits at different times of day unlock special badges
+
+
+
+ Issues Opened
+
+
Tiers: 1, 5, 10, 25, 50
+
+ Issue Opener → Reporter → Bug Hunter → Issue Tracker → Issue Master
+
+
+
+
+
+ Issues Closed
+
+
Tiers: 1, 5, 10, 25, 50
+
+ Issue Closer → Problem Solver → Resolver → Issue Crusher → Closure King
+
+
+
+
+
+ Issue Comments
+
+
Tiers: 5, 10, 25, 50, 100
+
+ Issue Commenter → Discussion Starter → Feedback Provider → Issue Conversationalist → Discussion Champion
+
+
+
+
+
+ Issue References
+
+
Tiers: 5, 10, 25, 50, 100
+
+ Issue Linker → Reference Maker → Connector → Link Master → Reference Champion
+
+
@@ -586,11 +647,31 @@ Where:
PRs with no changes requested |
≥ threshold |
-
+
| repo_count |
Repositories contributed to |
≥ threshold |
+
+ | issues_opened |
+ Issues created |
+ ≥ threshold |
+
+
+ | issues_closed |
+ Issues resolved/closed |
+ ≥ threshold |
+
+
+ | issue_comments |
+ Comments on issues |
+ ≥ threshold |
+
+
+ | issue_references |
+ Commits referencing issues |
+ ≥ threshold |
+
@@ -714,6 +795,10 @@ Where:
Unique Reviewees
Count of distinct PR authors reviewed
+
+
Issue References
+
Commits containing #123 patterns (fixes, closes, resolves, refs)
+
diff --git a/docs/index.html b/docs/index.html
index e8e638e..d4ea039 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -210,7 +210,7 @@
@@ -255,7 +255,7 @@
Gamification Engine
-
Earn points, unlock 95 achievements, climb leaderboards, progress through tiers
+
Earn points, unlock 115 achievements, climb leaderboards, progress through tiers
@@ -415,7 +415,7 @@
Unlock Achievements
-
95 achievements to earn across 22 categories
+
115 achievements to earn across 26 categories
@@ -509,7 +509,7 @@
-
...and 87 more achievements to unlock!
+
...and 107 more achievements to unlock!
diff --git a/internal/aggregator/aggregator.go b/internal/aggregator/aggregator.go
index d5f020c..670f77a 100644
--- a/internal/aggregator/aggregator.go
+++ b/internal/aggregator/aggregator.go
@@ -408,6 +408,63 @@ func (a *Aggregator) Aggregate(data *models.RawData, dateRange *config.ParsedDat
}
}
+ // Process issue comments
+ for _, comment := range data.IssueComments {
+ login := comment.Author.Login
+ if login == "" {
+ continue
+ }
+
+ // Initialize contributor if needed
+ if _, ok := contributorMap[login]; !ok {
+ contributorMap[login] = &models.ContributorMetrics{
+ Login: login,
+ Period: period,
+ }
+ }
+
+ cm := contributorMap[login]
+ cm.IssueComments++
+
+ // Track repository participation
+ if !contains(cm.RepositoriesContributed, comment.Repository) {
+ cm.RepositoriesContributed = append(cm.RepositoriesContributed, comment.Repository)
+ }
+
+ // Update per-repo contributor metrics
+ rcm := getRepoContributor(comment.Repository, login, cm.Name, cm.AvatarURL)
+ rcm.IssueComments++
+ }
+
+ // Count issue references in commits (e.g., "fixes #123", "closes #456", "refs #789")
+ for _, commit := range data.Commits {
+ login := commit.Author.Login
+ if login == "" {
+ continue
+ }
+
+ // Normalize login
+ if mappedLogin, ok := emailToLogin[commit.Author.Email]; ok {
+ login = mappedLogin
+ }
+ if mappedLogin, ok := loginToLogin[login]; ok {
+ login = mappedLogin
+ }
+
+ // Count issue references in commit message
+ issueRefCount := countIssueReferences(commit.Message)
+ if issueRefCount > 0 {
+ if cm, ok := contributorMap[login]; ok {
+ cm.IssueReferencesInCommits += issueRefCount
+ }
+
+ // Update per-repo contributor metrics
+ if rcm, ok := repoContributorMap[commit.Repository][login]; ok {
+ rcm.IssueReferencesInCommits += issueRefCount
+ }
+ }
+ }
+
// Calculate averages and finalize contributor metrics
for login, cm := range contributorMap {
// Calculate average time to merge
@@ -1272,7 +1329,6 @@ func calculateStreaks(days map[string]bool) (longest, current int) {
// Calculate streaks
longest = 1
- current = 1
streak := 1
for i := 1; i < len(dates); i++ {
@@ -1300,3 +1356,32 @@ func calculateStreaks(days map[string]bool) (longest, current int) {
return longest, current
}
+
+// countIssueReferences counts the number of issue references in a commit message
+// Detects patterns like: fixes #123, closes #456, resolves #789, refs #12, etc.
+func countIssueReferences(message string) int {
+ count := 0
+
+ // Count all # patterns in the message
+ // This covers both keyword-prefixed references (fixes #123, closes #456)
+ // and standalone mentions (see #123, just #123)
+ // We only count each unique position once
+ for i := 0; i < len(message); i++ {
+ if message[i] == '#' && i+1 < len(message) {
+ // Check for digits after #
+ hasDigits := false
+ for j := i + 1; j < len(message); j++ {
+ if message[j] >= '0' && message[j] <= '9' {
+ hasDigits = true
+ } else {
+ break
+ }
+ }
+ if hasDigits {
+ count++
+ }
+ }
+ }
+
+ return count
+}
diff --git a/internal/aggregator/aggregator_test.go b/internal/aggregator/aggregator_test.go
index c59d2fd..ff6a61c 100644
--- a/internal/aggregator/aggregator_test.go
+++ b/internal/aggregator/aggregator_test.go
@@ -876,3 +876,248 @@ func TestBuildEmailToLoginMapping_NoReplyEmailWithoutID(t *testing.T) {
// Should map via name matching since there's a PR author with the same name
assert.Equal(t, "johndoe", mapping["johndoe@users.noreply.github.com"])
}
+
+func TestCountIssueReferences(t *testing.T) {
+ t.Parallel()
+
+ tests := []struct {
+ name string
+ message string
+ expected int
+ }{
+ {
+ name: "no references",
+ message: "Just a regular commit message",
+ expected: 0,
+ },
+ {
+ name: "fixes issue",
+ message: "fixes #123",
+ expected: 1,
+ },
+ {
+ name: "Fixes issue uppercase",
+ message: "Fixes #456",
+ expected: 1,
+ },
+ {
+ name: "closes issue",
+ message: "closes #789",
+ expected: 1,
+ },
+ {
+ name: "resolves issue",
+ message: "resolves #101",
+ expected: 1,
+ },
+ {
+ name: "refs issue",
+ message: "refs #202",
+ expected: 1,
+ },
+ {
+ name: "ref issue",
+ message: "ref #303",
+ expected: 1,
+ },
+ {
+ name: "multiple fixes",
+ message: "fixes #1, fixes #2, fixes #3",
+ expected: 3,
+ },
+ {
+ name: "mixed keywords",
+ message: "fixes #1 and closes #2",
+ expected: 2,
+ },
+ {
+ name: "standalone issue reference",
+ message: "Related to #123",
+ expected: 1,
+ },
+ {
+ name: "multiple standalone references",
+ message: "See #1 and #2 for context",
+ expected: 2,
+ },
+ {
+ name: "fix with extra whitespace",
+ message: "fix #123",
+ expected: 1,
+ },
+ {
+ name: "closed past tense",
+ message: "closed #123",
+ expected: 1,
+ },
+ {
+ name: "fixed past tense",
+ message: "fixed #456",
+ expected: 1,
+ },
+ {
+ name: "resolved past tense",
+ message: "resolved #789",
+ expected: 1,
+ },
+ {
+ name: "close without s",
+ message: "close #123",
+ expected: 1,
+ },
+ {
+ name: "fix without es",
+ message: "fix #456",
+ expected: 1,
+ },
+ {
+ name: "resolve without s",
+ message: "resolve #789",
+ expected: 1,
+ },
+ {
+ name: "hash without number",
+ message: "This is about # something",
+ expected: 0,
+ },
+ {
+ name: "complex commit message",
+ message: "feat: Add new feature\n\nThis implements the feature requested in #123.\nAlso fixes #456 and closes #789.",
+ expected: 3,
+ },
+ {
+ name: "PR style reference",
+ message: "Merge pull request #100 from feature-branch",
+ expected: 1,
+ },
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ result := countIssueReferences(tt.message)
+ assert.Equal(t, tt.expected, result, "message: %s", tt.message)
+ })
+ }
+}
+
+func TestAggregator_IssueComments(t *testing.T) {
+ t.Parallel()
+
+ cfg := config.DefaultConfig()
+ agg := New(cfg)
+
+ data := &models.RawData{
+ // Need a commit to create the repository
+ Commits: []models.Commit{
+ {
+ SHA: "abc123",
+ Author: models.Author{Login: "user1"},
+ Repository: "owner/repo",
+ },
+ },
+ IssueComments: []models.IssueComment{
+ {
+ ID: 1,
+ Issue: 1,
+ Repository: "owner/repo",
+ Author: models.Author{Login: "user1"},
+ CreatedAt: time.Now(),
+ },
+ {
+ ID: 2,
+ Issue: 1,
+ Repository: "owner/repo",
+ Author: models.Author{Login: "user1"},
+ CreatedAt: time.Now(),
+ },
+ {
+ ID: 3,
+ Issue: 2,
+ Repository: "owner/repo",
+ Author: models.Author{Login: "user2"},
+ CreatedAt: time.Now(),
+ },
+ },
+ }
+
+ dateRange := &config.ParsedDateRange{}
+
+ metrics, err := agg.Aggregate(data, dateRange)
+ require.NoError(t, err)
+
+ // Check that issue comments are counted
+ require.Len(t, metrics.Repositories, 1)
+ repo := metrics.Repositories[0]
+
+ // Find user1 and user2
+ var user1, user2 *models.ContributorMetrics
+ for i := range repo.Contributors {
+ if repo.Contributors[i].Login == "user1" {
+ user1 = &repo.Contributors[i]
+ }
+ if repo.Contributors[i].Login == "user2" {
+ user2 = &repo.Contributors[i]
+ }
+ }
+
+ require.NotNil(t, user1)
+ assert.Equal(t, 2, user1.IssueComments) // user1 has 2 comments
+
+ require.NotNil(t, user2)
+ assert.Equal(t, 1, user2.IssueComments) // user2 has 1 comment
+}
+
+func TestAggregator_IssueReferencesInCommits(t *testing.T) {
+ t.Parallel()
+
+ cfg := config.DefaultConfig()
+ agg := New(cfg)
+
+ data := &models.RawData{
+ Commits: []models.Commit{
+ {
+ SHA: "abc123",
+ Message: "fixes #1 and closes #2",
+ Author: models.Author{Login: "user1"},
+ Repository: "owner/repo",
+ },
+ {
+ SHA: "def456",
+ Message: "Regular commit without issue refs",
+ Author: models.Author{Login: "user1"},
+ Repository: "owner/repo",
+ },
+ {
+ SHA: "ghi789",
+ Message: "resolves #3",
+ Author: models.Author{Login: "user2"},
+ Repository: "owner/repo",
+ },
+ },
+ }
+
+ dateRange := &config.ParsedDateRange{}
+
+ metrics, err := agg.Aggregate(data, dateRange)
+ require.NoError(t, err)
+
+ require.Len(t, metrics.Repositories, 1)
+ repo := metrics.Repositories[0]
+
+ // Find user1 and user2
+ var user1, user2 *models.ContributorMetrics
+ for i := range repo.Contributors {
+ if repo.Contributors[i].Login == "user1" {
+ user1 = &repo.Contributors[i]
+ }
+ if repo.Contributors[i].Login == "user2" {
+ user2 = &repo.Contributors[i]
+ }
+ }
+
+ require.NotNil(t, user1)
+ assert.Equal(t, 2, user1.IssueReferencesInCommits) // user1 has 2 issue references (fixes #1, closes #2)
+
+ require.NotNil(t, user2)
+ assert.Equal(t, 1, user2.IssueReferencesInCommits) // user2 has 1 issue reference (resolves #3)
+}
diff --git a/internal/app/app.go b/internal/app/app.go
index 1c23562..cf0b256 100644
--- a/internal/app/app.go
+++ b/internal/app/app.go
@@ -267,6 +267,19 @@ func (a *App) collectRepoData(ctx context.Context, owner, name string, dateRange
}
}
+ // Fetch issue comments
+ issueComments, err := a.client.FetchIssueComments(ctx, owner, name, dateRange.Start, dateRange.End)
+ if err != nil {
+ return fmt.Errorf("failed to fetch issue comments: %w", err)
+ }
+ a.log(" Found %d issue comments", len(issueComments))
+
+ for _, comment := range issueComments {
+ if !a.config.IsBot(comment.Author.Login) {
+ data.IssueComments = append(data.IssueComments, comment)
+ }
+ }
+
return nil
}
diff --git a/internal/config/config_test.go b/internal/config/config_test.go
index 60d2be9..d636f66 100644
--- a/internal/config/config_test.go
+++ b/internal/config/config_test.go
@@ -193,7 +193,7 @@ date_range:
// Create temp config file
tmpDir := t.TempDir()
configPath := filepath.Join(tmpDir, "config.yaml")
- err := os.WriteFile(configPath, []byte(tt.configYAML), 0644)
+ err := os.WriteFile(configPath, []byte(tt.configYAML), 0600)
require.NoError(t, err)
// Load config
@@ -940,7 +940,7 @@ func TestLoad_FileNotFound(t *testing.T) {
func TestLoad_InvalidYAML(t *testing.T) {
tmpDir := t.TempDir()
configPath := filepath.Join(tmpDir, "config.yaml")
- err := os.WriteFile(configPath, []byte("invalid: yaml: content: ["), 0644)
+ err := os.WriteFile(configPath, []byte("invalid: yaml: content: ["), 0600)
require.NoError(t, err)
_, err = Load(configPath)
diff --git a/internal/config/schema.go b/internal/config/schema.go
index 21f6295..7b85dd4 100644
--- a/internal/config/schema.go
+++ b/internal/config/schema.go
@@ -84,6 +84,8 @@ type PointsConfig struct {
ReviewComment int `yaml:"review_comment"` // PR review comments (not code comments)
IssueOpened int `yaml:"issue_opened"`
IssueClosed int `yaml:"issue_closed"`
+ IssueComment int `yaml:"issue_comment"` // Commenting on an issue
+ IssueReference int `yaml:"issue_reference_commit"` // Commit referencing an issue (fixes #123, etc.)
FastReview1h int `yaml:"fast_review_1h"`
FastReview4h int `yaml:"fast_review_4h"`
FastReview24h int `yaml:"fast_review_24h"`
@@ -197,8 +199,10 @@ func DefaultConfig() *Config {
PRMerged: 50,
PRReviewed: 30,
ReviewComment: 5,
- IssueOpened: 15,
+ IssueOpened: 10,
IssueClosed: 20,
+ IssueComment: 5,
+ IssueReference: 5,
FastReview1h: 50,
FastReview4h: 25,
FastReview24h: 10,
@@ -371,5 +375,33 @@ func defaultAchievements() []AchievementConfig {
{ID: "docs-del-500", Name: "Dead Code Hunter", Description: "Removed 500 lines of outdated comments", Icon: "fa-skull-crossbones", Condition: AchievementCondition{Type: "comment_lines_deleted", Threshold: 500}},
{ID: "docs-del-1000", Name: "Comment Surgeon", Description: "Removed 1000 lines of outdated comments", Icon: "fa-scalpel", Condition: AchievementCondition{Type: "comment_lines_deleted", Threshold: 1000}},
{ID: "docs-del-2500", Name: "Noise Eliminator", Description: "Removed 2500 lines of outdated comments", Icon: "fa-volume-xmark", Condition: AchievementCondition{Type: "comment_lines_deleted", Threshold: 2500}},
+
+ // ===== ISSUES OPENED (Tiers: 1, 5, 10, 25, 50) =====
+ {ID: "issue-1", Name: "Bug Hunter", Description: "Opened your first issue", Icon: "fa-bug", Condition: AchievementCondition{Type: "issues_opened", Threshold: 1}},
+ {ID: "issue-5", Name: "Issue Reporter", Description: "Opened 5 issues", Icon: "fa-flag", Condition: AchievementCondition{Type: "issues_opened", Threshold: 5}},
+ {ID: "issue-10", Name: "Quality Advocate", Description: "Opened 10 issues", Icon: "fa-clipboard-list", Condition: AchievementCondition{Type: "issues_opened", Threshold: 10}},
+ {ID: "issue-25", Name: "Issue Expert", Description: "Opened 25 issues", Icon: "fa-list-check", Condition: AchievementCondition{Type: "issues_opened", Threshold: 25}},
+ {ID: "issue-50", Name: "Issue Champion", Description: "Opened 50 issues", Icon: "fa-bullhorn", Condition: AchievementCondition{Type: "issues_opened", Threshold: 50}},
+
+ // ===== ISSUES CLOSED (Tiers: 1, 5, 10, 25, 50) =====
+ {ID: "issue-close-1", Name: "Problem Solver", Description: "Closed your first issue", Icon: "fa-circle-check", Condition: AchievementCondition{Type: "issues_closed", Threshold: 1}},
+ {ID: "issue-close-5", Name: "Bug Squasher", Description: "Closed 5 issues", Icon: "fa-bug-slash", Condition: AchievementCondition{Type: "issues_closed", Threshold: 5}},
+ {ID: "issue-close-10", Name: "Issue Resolver", Description: "Closed 10 issues", Icon: "fa-check-double", Condition: AchievementCondition{Type: "issues_closed", Threshold: 10}},
+ {ID: "issue-close-25", Name: "Closure Expert", Description: "Closed 25 issues", Icon: "fa-square-check", Condition: AchievementCondition{Type: "issues_closed", Threshold: 25}},
+ {ID: "issue-close-50", Name: "Issue Terminator", Description: "Closed 50 issues", Icon: "fa-crosshairs", Condition: AchievementCondition{Type: "issues_closed", Threshold: 50}},
+
+ // ===== ISSUE COMMENTS (Tiers: 5, 10, 25, 50, 100) =====
+ {ID: "issue-comment-5", Name: "Issue Commenter", Description: "Left 5 issue comments", Icon: "fa-comment", Condition: AchievementCondition{Type: "issue_comments", Threshold: 5}},
+ {ID: "issue-comment-10", Name: "Discussion Starter", Description: "Left 10 issue comments", Icon: "fa-comments", Condition: AchievementCondition{Type: "issue_comments", Threshold: 10}},
+ {ID: "issue-comment-25", Name: "Issue Collaborator", Description: "Left 25 issue comments", Icon: "fa-people-arrows", Condition: AchievementCondition{Type: "issue_comments", Threshold: 25}},
+ {ID: "issue-comment-50", Name: "Community Voice", Description: "Left 50 issue comments", Icon: "fa-bullhorn", Condition: AchievementCondition{Type: "issue_comments", Threshold: 50}},
+ {ID: "issue-comment-100", Name: "Issue Guru", Description: "Left 100 issue comments", Icon: "fa-graduation-cap", Condition: AchievementCondition{Type: "issue_comments", Threshold: 100}},
+
+ // ===== ISSUE REFERENCES IN COMMITS (Tiers: 5, 10, 25, 50, 100) =====
+ {ID: "issue-ref-5", Name: "Issue Linker", Description: "Referenced issues in 5 commits", Icon: "fa-link", Condition: AchievementCondition{Type: "issue_references", Threshold: 5}},
+ {ID: "issue-ref-10", Name: "Commit Connector", Description: "Referenced issues in 10 commits", Icon: "fa-diagram-project", Condition: AchievementCondition{Type: "issue_references", Threshold: 10}},
+ {ID: "issue-ref-25", Name: "Traceability Pro", Description: "Referenced issues in 25 commits", Icon: "fa-sitemap", Condition: AchievementCondition{Type: "issue_references", Threshold: 25}},
+ {ID: "issue-ref-50", Name: "Issue Tracker", Description: "Referenced issues in 50 commits", Icon: "fa-chart-gantt", Condition: AchievementCondition{Type: "issue_references", Threshold: 50}},
+ {ID: "issue-ref-100", Name: "Traceability Master", Description: "Referenced issues in 100 commits", Icon: "fa-network-wired", Condition: AchievementCondition{Type: "issue_references", Threshold: 100}},
}
}
diff --git a/internal/domain/models/metrics.go b/internal/domain/models/metrics.go
index f46c8bd..4182c59 100644
--- a/internal/domain/models/metrics.go
+++ b/internal/domain/models/metrics.go
@@ -49,9 +49,10 @@ type ContributorMetrics struct {
AvgReviewTime float64 `json:"avg_review_time_hours"`
// Issue metrics
- IssuesOpened int `json:"issues_opened"`
- IssuesClosed int `json:"issues_closed"`
- IssueComments int `json:"issue_comments"`
+ IssuesOpened int `json:"issues_opened"`
+ IssuesClosed int `json:"issues_closed"`
+ IssueComments int `json:"issue_comments"`
+ IssueReferencesInCommits int `json:"issue_references_in_commits"` // Commits referencing issues (fixes #123, etc.)
// Activity patterns
ActiveDays int `json:"active_days"` // Unique days with activity
@@ -87,6 +88,7 @@ type ScoreBreakdown struct {
PRs int `json:"prs"`
Reviews int `json:"reviews"`
Comments int `json:"comments"` // PR review comments (not code comments)
+ Issues int `json:"issues"` // Issue-related points (opened, closed, comments, references)
ResponseBonus int `json:"response_bonus"`
LineChanges int `json:"line_changes"`
OutOfHours int `json:"out_of_hours"` // Bonus for out-of-hours commits
diff --git a/internal/domain/models/rawdata.go b/internal/domain/models/rawdata.go
index ec99bf9..50bb71e 100644
--- a/internal/domain/models/rawdata.go
+++ b/internal/domain/models/rawdata.go
@@ -2,8 +2,9 @@ package models
// RawData holds the raw collected data from GitHub
type RawData struct {
- Commits []Commit
- PullRequests []PullRequest
- Reviews []Review
- Issues []Issue
+ Commits []Commit
+ PullRequests []PullRequest
+ Reviews []Review
+ Issues []Issue
+ IssueComments []IssueComment
}
diff --git a/internal/domain/scoring/calculator.go b/internal/domain/scoring/calculator.go
index 7548682..7336185 100644
--- a/internal/domain/scoring/calculator.go
+++ b/internal/domain/scoring/calculator.go
@@ -48,6 +48,11 @@ func (c *Calculator) Calculate(metrics *models.GlobalMetrics) *models.GlobalMetr
existing.PRsMerged += cm.PRsMerged
existing.ReviewsGiven += cm.ReviewsGiven
existing.ReviewComments += cm.ReviewComments
+ // Issue metrics
+ existing.IssuesOpened += cm.IssuesOpened
+ existing.IssuesClosed += cm.IssuesClosed
+ existing.IssueComments += cm.IssueComments
+ existing.IssueReferencesInCommits += cm.IssueReferencesInCommits
// Combine unique repositories
for _, r := range cm.RepositoriesContributed {
if !contains(existing.RepositoriesContributed, r) {
@@ -181,6 +186,12 @@ func (c *Calculator) calculateScore(cm *models.ContributorMetrics) models.Score
// Comment points (PR review comments)
breakdown.Comments = cm.ReviewComments * points.ReviewComment
+ // Issue points
+ breakdown.Issues = cm.IssuesOpened*points.IssueOpened +
+ cm.IssuesClosed*points.IssueClosed +
+ cm.IssueComments*points.IssueComment +
+ cm.IssueReferencesInCommits*points.IssueReference
+
// Response time bonus
if cm.ReviewsGiven > 0 && cm.AvgReviewTime > 0 {
if cm.AvgReviewTime <= 1 {
@@ -197,7 +208,8 @@ func (c *Calculator) calculateScore(cm *models.ContributorMetrics) models.Score
// Calculate total
total := breakdown.Commits + breakdown.LineChanges + breakdown.PRs +
- breakdown.Reviews + breakdown.ResponseBonus + breakdown.Comments + breakdown.OutOfHours
+ breakdown.Reviews + breakdown.ResponseBonus + breakdown.Comments +
+ breakdown.Issues + breakdown.OutOfHours
return models.Score{
Total: total,
@@ -265,6 +277,15 @@ func (c *Calculator) checkAchievements(cm *models.ContributorMetrics) []string {
earned = float64(cm.CommentLinesAdded) >= ach.Condition.Threshold
case "comment_lines_deleted":
earned = float64(cm.CommentLinesDeleted) >= ach.Condition.Threshold
+ // Issue metrics
+ case "issues_opened":
+ earned = float64(cm.IssuesOpened) >= ach.Condition.Threshold
+ case "issues_closed":
+ earned = float64(cm.IssuesClosed) >= ach.Condition.Threshold
+ case "issue_comments":
+ earned = float64(cm.IssueComments) >= ach.Condition.Threshold
+ case "issue_references":
+ earned = float64(cm.IssueReferencesInCommits) >= ach.Condition.Threshold
}
if earned {
diff --git a/internal/domain/scoring/calculator_test.go b/internal/domain/scoring/calculator_test.go
index f5b6a53..472866f 100644
--- a/internal/domain/scoring/calculator_test.go
+++ b/internal/domain/scoring/calculator_test.go
@@ -1105,3 +1105,319 @@ func TestCalculator_CommentLinesAchievements(t *testing.T) {
assert.NotContains(t, entry.Achievements, "docs-del-200", "60 < 200")
})
}
+
+func TestCalculator_IssueScoring(t *testing.T) {
+ t.Parallel()
+
+ t.Run("calculates issue points correctly", func(t *testing.T) {
+ t.Parallel()
+
+ cfg := config.DefaultConfig()
+ cfg.Scoring.Enabled = true
+ cfg.Scoring.Points = config.PointsConfig{
+ Commit: 10,
+ IssueOpened: 10, // 10 points per issue opened
+ IssueClosed: 20, // 20 points per issue closed
+ IssueComment: 5, // 5 points per issue comment
+ IssueReference: 5, // 5 points per issue reference in commit
+ }
+ calc := NewCalculator(cfg)
+
+ metrics := &models.GlobalMetrics{
+ Repositories: []models.RepositoryMetrics{
+ {
+ FullName: "owner/repo",
+ Contributors: []models.ContributorMetrics{
+ {
+ Login: "issue-worker",
+ CommitCount: 10,
+ IssuesOpened: 5, // 5 * 10 = 50
+ IssuesClosed: 3, // 3 * 20 = 60
+ IssueComments: 10, // 10 * 5 = 50
+ IssueReferencesInCommits: 8, // 8 * 5 = 40
+ RepositoriesContributed: []string{"owner/repo"},
+ },
+ },
+ },
+ },
+ }
+
+ result := calc.Calculate(metrics)
+
+ contributor := result.Repositories[0].Contributors[0]
+ // Issue points: 50 + 60 + 50 + 40 = 200
+ assert.Equal(t, 200, contributor.Score.Breakdown.Issues)
+ // Commits: 10 * 10 = 100
+ // Total: 100 + 200 = 300
+ assert.Equal(t, 300, contributor.Score.Total)
+ })
+
+ t.Run("aggregates issue metrics across repositories", func(t *testing.T) {
+ t.Parallel()
+
+ cfg := config.DefaultConfig()
+ cfg.Scoring.Enabled = true
+ cfg.Scoring.Points = config.PointsConfig{
+ IssueOpened: 10,
+ IssueClosed: 20,
+ IssueComment: 5,
+ IssueReference: 5,
+ }
+ calc := NewCalculator(cfg)
+
+ metrics := &models.GlobalMetrics{
+ Repositories: []models.RepositoryMetrics{
+ {
+ FullName: "owner/repo1",
+ Contributors: []models.ContributorMetrics{
+ {
+ Login: "issue-worker",
+ IssuesOpened: 3,
+ IssuesClosed: 2,
+ IssueComments: 5,
+ IssueReferencesInCommits: 4,
+ RepositoriesContributed: []string{"owner/repo1"},
+ },
+ },
+ },
+ {
+ FullName: "owner/repo2",
+ Contributors: []models.ContributorMetrics{
+ {
+ Login: "issue-worker",
+ IssuesOpened: 2,
+ IssuesClosed: 1,
+ IssueComments: 3,
+ IssueReferencesInCommits: 2,
+ RepositoriesContributed: []string{"owner/repo2"},
+ },
+ },
+ },
+ },
+ }
+
+ result := calc.Calculate(metrics)
+
+ require.Len(t, result.Leaderboard, 1)
+ // Aggregated: 5 opened, 3 closed, 8 comments, 6 references
+ // Points: 5*10 + 3*20 + 8*5 + 6*5 = 50 + 60 + 40 + 30 = 180
+ assert.Equal(t, 180, result.Leaderboard[0].Score)
+ })
+
+ t.Run("zero issue metrics results in zero issue points", func(t *testing.T) {
+ t.Parallel()
+
+ cfg := config.DefaultConfig()
+ cfg.Scoring.Enabled = true
+ cfg.Scoring.Points = config.PointsConfig{
+ Commit: 10,
+ IssueOpened: 10,
+ IssueClosed: 20,
+ IssueComment: 5,
+ IssueReference: 5,
+ }
+ calc := NewCalculator(cfg)
+
+ metrics := &models.GlobalMetrics{
+ Repositories: []models.RepositoryMetrics{
+ {
+ FullName: "owner/repo",
+ Contributors: []models.ContributorMetrics{
+ {
+ Login: "code-only",
+ CommitCount: 20,
+ RepositoriesContributed: []string{"owner/repo"},
+ },
+ },
+ },
+ },
+ }
+
+ result := calc.Calculate(metrics)
+
+ contributor := result.Repositories[0].Contributors[0]
+ assert.Equal(t, 0, contributor.Score.Breakdown.Issues)
+ // Only commits: 20 * 10 = 200
+ assert.Equal(t, 200, contributor.Score.Total)
+ })
+}
+
+func TestCalculator_IssueAchievements(t *testing.T) {
+ t.Parallel()
+
+ t.Run("earns issue opened achievements", func(t *testing.T) {
+ t.Parallel()
+
+ cfg := config.DefaultConfig()
+ cfg.Scoring.Enabled = true
+ calc := NewCalculator(cfg)
+
+ metrics := &models.GlobalMetrics{
+ Repositories: []models.RepositoryMetrics{
+ {
+ FullName: "owner/repo",
+ Contributors: []models.ContributorMetrics{
+ {
+ Login: "bug-hunter",
+ IssuesOpened: 12, // Should earn issue-1, issue-5, issue-10
+ RepositoriesContributed: []string{"owner/repo"},
+ },
+ },
+ },
+ },
+ }
+
+ result := calc.Calculate(metrics)
+
+ contributor := result.Repositories[0].Contributors[0]
+ assert.Contains(t, contributor.Achievements, "issue-1", "Should earn issue-1 for 1+ issues opened")
+ assert.Contains(t, contributor.Achievements, "issue-5", "Should earn issue-5 for 5+ issues opened")
+ assert.Contains(t, contributor.Achievements, "issue-10", "Should earn issue-10 for 10+ issues opened")
+ assert.NotContains(t, contributor.Achievements, "issue-25", "Should not earn issue-25 for <25 issues")
+ })
+
+ t.Run("earns issue closed achievements", func(t *testing.T) {
+ t.Parallel()
+
+ cfg := config.DefaultConfig()
+ cfg.Scoring.Enabled = true
+ calc := NewCalculator(cfg)
+
+ metrics := &models.GlobalMetrics{
+ Repositories: []models.RepositoryMetrics{
+ {
+ FullName: "owner/repo",
+ Contributors: []models.ContributorMetrics{
+ {
+ Login: "problem-solver",
+ IssuesClosed: 8, // Should earn issue-close-1, issue-close-5
+ RepositoriesContributed: []string{"owner/repo"},
+ },
+ },
+ },
+ },
+ }
+
+ result := calc.Calculate(metrics)
+
+ contributor := result.Repositories[0].Contributors[0]
+ assert.Contains(t, contributor.Achievements, "issue-close-1", "Should earn issue-close-1 for 1+ issues closed")
+ assert.Contains(t, contributor.Achievements, "issue-close-5", "Should earn issue-close-5 for 5+ issues closed")
+ assert.NotContains(t, contributor.Achievements, "issue-close-10", "Should not earn issue-close-10 for <10 issues")
+ })
+
+ t.Run("earns issue comment achievements", func(t *testing.T) {
+ t.Parallel()
+
+ cfg := config.DefaultConfig()
+ cfg.Scoring.Enabled = true
+ calc := NewCalculator(cfg)
+
+ metrics := &models.GlobalMetrics{
+ Repositories: []models.RepositoryMetrics{
+ {
+ FullName: "owner/repo",
+ Contributors: []models.ContributorMetrics{
+ {
+ Login: "discusser",
+ IssueComments: 30, // Should earn issue-comment-5, issue-comment-10, issue-comment-25
+ RepositoriesContributed: []string{"owner/repo"},
+ },
+ },
+ },
+ },
+ }
+
+ result := calc.Calculate(metrics)
+
+ contributor := result.Repositories[0].Contributors[0]
+ assert.Contains(t, contributor.Achievements, "issue-comment-5", "Should earn issue-comment-5 for 5+ comments")
+ assert.Contains(t, contributor.Achievements, "issue-comment-10", "Should earn issue-comment-10 for 10+ comments")
+ assert.Contains(t, contributor.Achievements, "issue-comment-25", "Should earn issue-comment-25 for 25+ comments")
+ assert.NotContains(t, contributor.Achievements, "issue-comment-50", "Should not earn issue-comment-50 for <50 comments")
+ })
+
+ t.Run("earns issue reference achievements", func(t *testing.T) {
+ t.Parallel()
+
+ cfg := config.DefaultConfig()
+ cfg.Scoring.Enabled = true
+ calc := NewCalculator(cfg)
+
+ metrics := &models.GlobalMetrics{
+ Repositories: []models.RepositoryMetrics{
+ {
+ FullName: "owner/repo",
+ Contributors: []models.ContributorMetrics{
+ {
+ Login: "linker",
+ IssueReferencesInCommits: 15, // Should earn issue-ref-5, issue-ref-10
+ RepositoriesContributed: []string{"owner/repo"},
+ },
+ },
+ },
+ },
+ }
+
+ result := calc.Calculate(metrics)
+
+ contributor := result.Repositories[0].Contributors[0]
+ assert.Contains(t, contributor.Achievements, "issue-ref-5", "Should earn issue-ref-5 for 5+ references")
+ assert.Contains(t, contributor.Achievements, "issue-ref-10", "Should earn issue-ref-10 for 10+ references")
+ assert.NotContains(t, contributor.Achievements, "issue-ref-25", "Should not earn issue-ref-25 for <25 references")
+ })
+
+ t.Run("earns all issue achievement tiers", func(t *testing.T) {
+ t.Parallel()
+
+ cfg := config.DefaultConfig()
+ cfg.Scoring.Enabled = true
+ calc := NewCalculator(cfg)
+
+ metrics := &models.GlobalMetrics{
+ Repositories: []models.RepositoryMetrics{
+ {
+ FullName: "owner/repo",
+ Contributors: []models.ContributorMetrics{
+ {
+ Login: "super-issue-worker",
+ IssuesOpened: 100,
+ IssuesClosed: 100,
+ IssueComments: 150,
+ IssueReferencesInCommits: 150,
+ RepositoriesContributed: []string{"owner/repo"},
+ },
+ },
+ },
+ },
+ }
+
+ result := calc.Calculate(metrics)
+
+ contributor := result.Repositories[0].Contributors[0]
+ // Should have all issue opened achievements
+ assert.Contains(t, contributor.Achievements, "issue-1")
+ assert.Contains(t, contributor.Achievements, "issue-5")
+ assert.Contains(t, contributor.Achievements, "issue-10")
+ assert.Contains(t, contributor.Achievements, "issue-25")
+ assert.Contains(t, contributor.Achievements, "issue-50")
+ // Should have all issue closed achievements
+ assert.Contains(t, contributor.Achievements, "issue-close-1")
+ assert.Contains(t, contributor.Achievements, "issue-close-5")
+ assert.Contains(t, contributor.Achievements, "issue-close-10")
+ assert.Contains(t, contributor.Achievements, "issue-close-25")
+ assert.Contains(t, contributor.Achievements, "issue-close-50")
+ // Should have all issue comment achievements
+ assert.Contains(t, contributor.Achievements, "issue-comment-5")
+ assert.Contains(t, contributor.Achievements, "issue-comment-10")
+ assert.Contains(t, contributor.Achievements, "issue-comment-25")
+ assert.Contains(t, contributor.Achievements, "issue-comment-50")
+ assert.Contains(t, contributor.Achievements, "issue-comment-100")
+ // Should have all issue reference achievements
+ assert.Contains(t, contributor.Achievements, "issue-ref-5")
+ assert.Contains(t, contributor.Achievements, "issue-ref-10")
+ assert.Contains(t, contributor.Achievements, "issue-ref-25")
+ assert.Contains(t, contributor.Achievements, "issue-ref-50")
+ assert.Contains(t, contributor.Achievements, "issue-ref-100")
+ })
+}
diff --git a/internal/generator/site/dist/assets/index-8XjWwD9J.css b/internal/generator/site/dist/assets/index-DOVyCPqp.css
similarity index 99%
rename from internal/generator/site/dist/assets/index-8XjWwD9J.css
rename to internal/generator/site/dist/assets/index-DOVyCPqp.css
index 1019bc3..f287a05 100644
--- a/internal/generator/site/dist/assets/index-8XjWwD9J.css
+++ b/internal/generator/site/dist/assets/index-DOVyCPqp.css
@@ -1 +1 @@
-@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-500:oklch(63.7% .237 25.331);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-amber-500:oklch(76.9% .188 70.08);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-teal-500:oklch(70.4% .14 182.503);--color-cyan-400:oklch(78.9% .154 211.53);--color-cyan-500:oklch(71.5% .143 215.221);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-indigo-500:oklch(58.5% .233 277.117);--color-violet-500:oklch(60.6% .25 292.717);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-300:oklch(82.7% .119 306.383);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-800:oklch(43.8% .218 303.724);--color-purple-900:oklch(38.1% .176 304.987);--color-fuchsia-600:oklch(59.1% .293 322.896);--color-pink-500:oklch(65.6% .241 354.308);--color-rose-500:oklch(64.5% .246 16.439);--color-rose-600:oklch(58.6% .253 17.585);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-stone-400:oklch(70.9% .01 56.259);--color-stone-500:oklch(55.3% .013 58.071);--color-white:#fff;--spacing:.25rem;--container-2xl:42rem;--container-5xl:64rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--text-6xl:3.75rem;--text-6xl--line-height:1;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wider:.05em;--leading-tight:1.25;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--drop-shadow-sm:0 1px 2px #00000026;--ease-out:cubic-bezier(0,0,.2,1);--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-primary-100:#fce7f3;--color-primary-300:#f9a8d4;--color-primary-400:#f472b6;--color-primary-500:#ec4899;--color-primary-600:#db2777;--color-primary-700:#be185d;--color-primary-900:#831843;--color-accent-400:#c084fc;--color-accent-500:#a855f7;--color-accent-600:#9333ea;--animate-fade-in-up:fadeInUp .6s ease-out}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.-top-1{top:calc(var(--spacing)*-1)}.top-0{top:calc(var(--spacing)*0)}.top-full{top:100%}.-right-1{right:calc(var(--spacing)*-1)}.bottom-full{bottom:100%}.left-1\/2{left:50%}.z-50{z-index:50}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-16{margin-top:calc(var(--spacing)*16)}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-3{margin-right:calc(var(--spacing)*3)}.mr-4{margin-right:calc(var(--spacing)*4)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.ml-0\.5{margin-left:calc(var(--spacing)*.5)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.btn-primary{background-image:linear-gradient(to right,var(--color-primary-500),var(--color-accent-500));color:#fff;border-radius:.5rem;align-items:center;padding:.75rem 1.5rem;font-weight:500;transition:all .2s;display:inline-flex;box-shadow:0 10px 40px -10px #00000026}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-flex{display:inline-flex}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-4{height:calc(var(--spacing)*4)}.h-6{height:calc(var(--spacing)*6)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-11{height:calc(var(--spacing)*11)}.h-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-32{height:calc(var(--spacing)*32)}.h-full{height:100%}.min-h-\[60vh\]{min-height:60vh}.min-h-screen{min-height:100vh}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-3{width:calc(var(--spacing)*3)}.w-4{width:calc(var(--spacing)*4)}.w-6{width:calc(var(--spacing)*6)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-11{width:calc(var(--spacing)*11)}.w-14{width:calc(var(--spacing)*14)}.w-16{width:calc(var(--spacing)*16)}.w-32{width:calc(var(--spacing)*32)}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-\[280px\]{max-width:280px}.flex-1{flex:1}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.animate-fade-in-up{animation:.6s ease-out fadeInUp;animation:var(--animate-fade-in-up)}.cursor-pointer{cursor:pointer}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-6>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*6)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-x-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-gray-200>:not(:last-child)){border-color:var(--color-gray-200)}.overflow-hidden{overflow:hidden}.scroll-smooth{scroll-behavior:smooth}.card{border-radius:.75rem;padding:1.5rem}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-\[6px\]{border-style:var(--tw-border-style);border-width:6px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-transparent{border-color:#0000}.border-white\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.border-t-gray-900{border-top-color:var(--color-gray-900)}.glass{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background-color:#ffffffb3;border:1px solid #fff3}.bg-blue-500{background-color:var(--color-blue-500)}.bg-cyan-500{background-color:var(--color-cyan-500)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-500{background-color:var(--color-green-500)}.bg-orange-500{background-color:var(--color-orange-500)}.bg-pink-500{background-color:var(--color-pink-500)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-purple-500{background-color:var(--color-purple-500)}.bg-red-500{background-color:var(--color-red-500)}.bg-stone-500{background-color:var(--color-stone-500)}.bg-violet-500{background-color:var(--color-violet-500)}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.gradient-text{background-image:linear-gradient(to right,var(--color-primary-400),var(--color-accent-400));color:#0000;-webkit-background-clip:text;background-clip:text}.score-card{background-image:linear-gradient(90deg,#f472b61a,#c084fc1a);border:1px solid #f472b633}.rank-1{background-image:linear-gradient(90deg,#facc15,#f59e0b)}.rank-2{background-image:linear-gradient(90deg,#94a3b8,#64748b)}.rank-3{background-image:linear-gradient(90deg,#d97706,#b45309)}.from-blue-400{--tw-gradient-from:var(--color-blue-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-cyan-400{--tw-gradient-from:var(--color-cyan-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-emerald-400{--tw-gradient-from:var(--color-emerald-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-gray-50{--tw-gradient-from:var(--color-gray-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-gray-400{--tw-gradient-from:var(--color-gray-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-green-400{--tw-gradient-from:var(--color-green-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-orange-400{--tw-gradient-from:var(--color-orange-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-pink-500{--tw-gradient-from:var(--color-pink-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-primary-500{--tw-gradient-from:var(--color-primary-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-purple-400{--tw-gradient-from:var(--color-purple-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-red-500{--tw-gradient-from:var(--color-red-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-stone-400{--tw-gradient-from:var(--color-stone-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-violet-500{--tw-gradient-from:var(--color-violet-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-yellow-400{--tw-gradient-from:var(--color-yellow-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-accent-500{--tw-gradient-to:var(--color-accent-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-amber-500{--tw-gradient-to:var(--color-amber-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-cyan-500{--tw-gradient-to:var(--color-cyan-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-emerald-500{--tw-gradient-to:var(--color-emerald-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-fuchsia-600{--tw-gradient-to:var(--color-fuchsia-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-gray-100{--tw-gradient-to:var(--color-gray-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-gray-500{--tw-gradient-to:var(--color-gray-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-indigo-500{--tw-gradient-to:var(--color-indigo-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-purple-600{--tw-gradient-to:var(--color-purple-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-red-500{--tw-gradient-to:var(--color-red-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-rose-600{--tw-gradient-to:var(--color-rose-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-stone-500{--tw-gradient-to:var(--color-stone-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-teal-500{--tw-gradient-to:var(--color-teal-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-violet-500{--tw-gradient-to:var(--color-violet-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.p-0{padding:calc(var(--spacing)*0)}.p-2{padding:calc(var(--spacing)*2)}.p-4{padding:calc(var(--spacing)*4)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-4{padding-block:calc(var(--spacing)*4)}.py-8{padding-block:calc(var(--spacing)*8)}.py-12{padding-block:calc(var(--spacing)*12)}.py-16{padding-block:calc(var(--spacing)*16)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-4{padding-top:calc(var(--spacing)*4)}.pr-1{padding-right:calc(var(--spacing)*1)}.pr-10{padding-right:calc(var(--spacing)*10)}.pr-25{padding-right:calc(var(--spacing)*25)}.pr-50{padding-right:calc(var(--spacing)*50)}.pr-100{padding-right:calc(var(--spacing)*100)}.pr-250{padding-right:calc(var(--spacing)*250)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.nav-link-active{color:var(--color-primary-500);font-weight:500}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.whitespace-nowrap{white-space:nowrap}.nav-link{color:#374151;transition:color .2s}.text-accent-500{color:var(--color-accent-500)}.text-amber-500{color:var(--color-amber-500)}.text-blue-500{color:var(--color-blue-500)}.text-cyan-500{color:var(--color-cyan-500)}.text-emerald-500{color:var(--color-emerald-500)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-green-500{color:var(--color-green-500)}.text-indigo-500{color:var(--color-indigo-500)}.text-orange-500{color:var(--color-orange-500)}.text-pink-500{color:var(--color-pink-500)}.text-primary-500{color:var(--color-primary-500)}.text-purple-400{color:var(--color-purple-400)}.text-purple-500{color:var(--color-purple-500)}.text-purple-800{color:var(--color-purple-800)}.text-red-500{color:var(--color-red-500)}.text-rose-500{color:var(--color-rose-500)}.text-white{color:var(--color-white)}.text-yellow-500{color:var(--color-yellow-500)}.uppercase{text-transform:uppercase}.opacity-0{opacity:0}.opacity-50{opacity:.5}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-modern{box-shadow:0 10px 40px -10px #00000026}.ring-transparent{--tw-ring-color:transparent}.ring-yellow-400{--tw-ring-color:var(--color-yellow-400)}.drop-shadow-sm{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#00000026));--tw-drop-shadow:drop-shadow(var(--drop-shadow-sm));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}@media(hover:hover){.group-hover\:text-primary-500:is(:where(.group):hover *){color:var(--color-primary-500)}.group-hover\:ring-primary-500:is(:where(.group):hover *){--tw-ring-color:var(--color-primary-500)}.group-hover\/badge\:opacity-100:is(:where(.group\/badge):hover *){opacity:1}.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-primary-100:hover{background-color:var(--color-primary-100)}.hover\:text-primary-500:hover{color:var(--color-primary-500)}.hover\:text-primary-600:hover{color:var(--color-primary-600)}.hover\:text-primary-700:hover{color:var(--color-primary-700)}.hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-xl:hover{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus\:ring-primary-500:focus{--tw-ring-color:var(--color-primary-500)}@media(min-width:40rem){.sm\:table-cell{display:table-cell}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}@media(min-width:48rem){.md\:flex{display:flex}.md\:hidden{display:none}.md\:table-cell{display:table-cell}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-start{align-items:flex-start}.md\:justify-start{justify-content:flex-start}:where(.md\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.md\:space-x-8>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*8)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-x-reverse)))}.md\:text-left{text-align:left}.md\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}}@media(min-width:64rem){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}}@media(prefers-color-scheme:dark){:where(.dark\:divide-gray-700>:not(:last-child)),.dark\:border-gray-700{border-color:var(--color-gray-700)}.dark\:border-t-gray-800{border-top-color:var(--color-gray-800)}.dark\:bg-gray-600{background-color:var(--color-gray-600)}.dark\:bg-gray-700{background-color:var(--color-gray-700)}.dark\:bg-gray-800{background-color:var(--color-gray-800)}.dark\:bg-gray-800\/50{background-color:#1e293980}@supports (color:color-mix(in lab,red,red)){.dark\:bg-gray-800\/50{background-color:color-mix(in oklab,var(--color-gray-800)50%,transparent)}}.dark\:bg-purple-900\/30{background-color:#59168b4d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-purple-900\/30{background-color:color-mix(in oklab,var(--color-purple-900)30%,transparent)}}.dark\:from-gray-900{--tw-gradient-from:var(--color-gray-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark\:to-gray-800{--tw-gradient-to:var(--color-gray-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark\:text-gray-200{color:var(--color-gray-200)}.dark\:text-gray-300{color:var(--color-gray-300)}.dark\:text-gray-400{color:var(--color-gray-400)}.dark\:text-gray-500{color:var(--color-gray-500)}.dark\:text-gray-600{color:var(--color-gray-600)}.dark\:text-purple-300{color:var(--color-purple-300)}.dark\:text-white{color:var(--color-white)}@media(hover:hover){.dark\:hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.dark\:hover\:bg-gray-800:hover{background-color:var(--color-gray-800)}.dark\:hover\:bg-gray-800\/30:hover{background-color:#1e29394d}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-gray-800\/30:hover{background-color:color-mix(in oklab,var(--color-gray-800)30%,transparent)}}.dark\:hover\:bg-primary-900\/30:hover{background-color:#8318434d}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-primary-900\/30:hover{background-color:color-mix(in oklab,var(--color-primary-900)30%,transparent)}}.dark\:hover\:text-primary-300:hover{color:var(--color-primary-300)}}}}.dark .glass{background-color:#111827b3;border-color:#ffffff1a}.dark .shadow-modern{box-shadow:0 10px 40px -10px #0006}.dark .score-card{background-image:linear-gradient(90deg,#f472b60d,#c084fc0d);border-color:#f472b61a}.btn-primary:hover{background-image:linear-gradient(to right,var(--color-primary-600),var(--color-accent-600))}.nav-link:hover{color:var(--color-primary-500)}.dark .nav-link{color:#e5e7eb}.dark .nav-link:hover{color:var(--color-primary-400)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes fadeInUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.velocity-chart[data-v-401bbb13]{position:relative;width:100%}
+@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-500:oklch(63.7% .237 25.331);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-amber-500:oklch(76.9% .188 70.08);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-teal-500:oklch(70.4% .14 182.503);--color-cyan-400:oklch(78.9% .154 211.53);--color-cyan-500:oklch(71.5% .143 215.221);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-indigo-500:oklch(58.5% .233 277.117);--color-violet-500:oklch(60.6% .25 292.717);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-300:oklch(82.7% .119 306.383);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-800:oklch(43.8% .218 303.724);--color-purple-900:oklch(38.1% .176 304.987);--color-fuchsia-600:oklch(59.1% .293 322.896);--color-pink-500:oklch(65.6% .241 354.308);--color-rose-500:oklch(64.5% .246 16.439);--color-rose-600:oklch(58.6% .253 17.585);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-stone-400:oklch(70.9% .01 56.259);--color-stone-500:oklch(55.3% .013 58.071);--color-white:#fff;--spacing:.25rem;--container-2xl:42rem;--container-5xl:64rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--text-6xl:3.75rem;--text-6xl--line-height:1;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wider:.05em;--leading-tight:1.25;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--drop-shadow-sm:0 1px 2px #00000026;--ease-out:cubic-bezier(0,0,.2,1);--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-primary-100:#fce7f3;--color-primary-300:#f9a8d4;--color-primary-400:#f472b6;--color-primary-500:#ec4899;--color-primary-600:#db2777;--color-primary-700:#be185d;--color-primary-900:#831843;--color-accent-400:#c084fc;--color-accent-500:#a855f7;--color-accent-600:#9333ea;--animate-fade-in-up:fadeInUp .6s ease-out}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.-top-1{top:calc(var(--spacing)*-1)}.top-0{top:calc(var(--spacing)*0)}.top-full{top:100%}.-right-1{right:calc(var(--spacing)*-1)}.bottom-full{bottom:100%}.left-1\/2{left:50%}.z-50{z-index:50}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-16{margin-top:calc(var(--spacing)*16)}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-3{margin-right:calc(var(--spacing)*3)}.mr-4{margin-right:calc(var(--spacing)*4)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.ml-0\.5{margin-left:calc(var(--spacing)*.5)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.btn-primary{background-image:linear-gradient(to right,var(--color-primary-500),var(--color-accent-500));color:#fff;border-radius:.5rem;align-items:center;padding:.75rem 1.5rem;font-weight:500;transition:all .2s;display:inline-flex;box-shadow:0 10px 40px -10px #00000026}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-flex{display:inline-flex}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-4{height:calc(var(--spacing)*4)}.h-6{height:calc(var(--spacing)*6)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-11{height:calc(var(--spacing)*11)}.h-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-32{height:calc(var(--spacing)*32)}.h-full{height:100%}.min-h-\[60vh\]{min-height:60vh}.min-h-screen{min-height:100vh}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-3{width:calc(var(--spacing)*3)}.w-4{width:calc(var(--spacing)*4)}.w-6{width:calc(var(--spacing)*6)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-11{width:calc(var(--spacing)*11)}.w-14{width:calc(var(--spacing)*14)}.w-16{width:calc(var(--spacing)*16)}.w-32{width:calc(var(--spacing)*32)}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-\[280px\]{max-width:280px}.flex-1{flex:1}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.animate-fade-in-up{animation:.6s ease-out fadeInUp;animation:var(--animate-fade-in-up)}.cursor-pointer{cursor:pointer}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-6>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*6)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-x-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-gray-200>:not(:last-child)){border-color:var(--color-gray-200)}.overflow-hidden{overflow:hidden}.scroll-smooth{scroll-behavior:smooth}.card{border-radius:.75rem;padding:1.5rem}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-\[6px\]{border-style:var(--tw-border-style);border-width:6px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-transparent{border-color:#0000}.border-white\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.border-t-gray-900{border-top-color:var(--color-gray-900)}.glass{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background-color:#ffffffb3;border:1px solid #fff3}.bg-blue-500{background-color:var(--color-blue-500)}.bg-cyan-500{background-color:var(--color-cyan-500)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-500{background-color:var(--color-green-500)}.bg-orange-500{background-color:var(--color-orange-500)}.bg-pink-500{background-color:var(--color-pink-500)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-purple-500{background-color:var(--color-purple-500)}.bg-red-500{background-color:var(--color-red-500)}.bg-stone-500{background-color:var(--color-stone-500)}.bg-violet-500{background-color:var(--color-violet-500)}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.gradient-text{background-image:linear-gradient(to right,var(--color-primary-400),var(--color-accent-400));color:#0000;-webkit-background-clip:text;background-clip:text}.score-card{background-image:linear-gradient(90deg,#f472b61a,#c084fc1a);border:1px solid #f472b633}.rank-1{background-image:linear-gradient(90deg,#facc15,#f59e0b)}.rank-2{background-image:linear-gradient(90deg,#94a3b8,#64748b)}.rank-3{background-image:linear-gradient(90deg,#d97706,#b45309)}.from-blue-400{--tw-gradient-from:var(--color-blue-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-cyan-400{--tw-gradient-from:var(--color-cyan-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-emerald-400{--tw-gradient-from:var(--color-emerald-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-gray-50{--tw-gradient-from:var(--color-gray-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-gray-400{--tw-gradient-from:var(--color-gray-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-green-400{--tw-gradient-from:var(--color-green-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-orange-400{--tw-gradient-from:var(--color-orange-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-pink-500{--tw-gradient-from:var(--color-pink-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-primary-500{--tw-gradient-from:var(--color-primary-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-purple-400{--tw-gradient-from:var(--color-purple-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-red-500{--tw-gradient-from:var(--color-red-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-stone-400{--tw-gradient-from:var(--color-stone-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-violet-500{--tw-gradient-from:var(--color-violet-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-yellow-400{--tw-gradient-from:var(--color-yellow-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-accent-500{--tw-gradient-to:var(--color-accent-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-amber-500{--tw-gradient-to:var(--color-amber-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-cyan-500{--tw-gradient-to:var(--color-cyan-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-emerald-500{--tw-gradient-to:var(--color-emerald-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-fuchsia-600{--tw-gradient-to:var(--color-fuchsia-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-gray-100{--tw-gradient-to:var(--color-gray-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-gray-500{--tw-gradient-to:var(--color-gray-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-indigo-500{--tw-gradient-to:var(--color-indigo-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-purple-600{--tw-gradient-to:var(--color-purple-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-red-500{--tw-gradient-to:var(--color-red-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-rose-600{--tw-gradient-to:var(--color-rose-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-stone-500{--tw-gradient-to:var(--color-stone-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-teal-500{--tw-gradient-to:var(--color-teal-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-violet-500{--tw-gradient-to:var(--color-violet-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.p-0{padding:calc(var(--spacing)*0)}.p-2{padding:calc(var(--spacing)*2)}.p-4{padding:calc(var(--spacing)*4)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-4{padding-block:calc(var(--spacing)*4)}.py-8{padding-block:calc(var(--spacing)*8)}.py-12{padding-block:calc(var(--spacing)*12)}.py-16{padding-block:calc(var(--spacing)*16)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-4{padding-top:calc(var(--spacing)*4)}.pr-1{padding-right:calc(var(--spacing)*1)}.pr-10{padding-right:calc(var(--spacing)*10)}.pr-25{padding-right:calc(var(--spacing)*25)}.pr-50{padding-right:calc(var(--spacing)*50)}.pr-100{padding-right:calc(var(--spacing)*100)}.pr-250{padding-right:calc(var(--spacing)*250)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.nav-link-active{color:var(--color-primary-500);font-weight:500}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.whitespace-nowrap{white-space:nowrap}.nav-link{color:#374151;transition:color .2s}.text-accent-500{color:var(--color-accent-500)}.text-amber-500{color:var(--color-amber-500)}.text-blue-500{color:var(--color-blue-500)}.text-cyan-500{color:var(--color-cyan-500)}.text-emerald-500{color:var(--color-emerald-500)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-green-500{color:var(--color-green-500)}.text-indigo-500{color:var(--color-indigo-500)}.text-orange-500{color:var(--color-orange-500)}.text-pink-500{color:var(--color-pink-500)}.text-primary-500{color:var(--color-primary-500)}.text-purple-400{color:var(--color-purple-400)}.text-purple-500{color:var(--color-purple-500)}.text-purple-800{color:var(--color-purple-800)}.text-red-500{color:var(--color-red-500)}.text-rose-500{color:var(--color-rose-500)}.text-white{color:var(--color-white)}.text-yellow-500{color:var(--color-yellow-500)}.uppercase{text-transform:uppercase}.opacity-0{opacity:0}.opacity-50{opacity:.5}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-modern{box-shadow:0 10px 40px -10px #00000026}.ring-transparent{--tw-ring-color:transparent}.ring-yellow-400{--tw-ring-color:var(--color-yellow-400)}.drop-shadow-sm{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#00000026));--tw-drop-shadow:drop-shadow(var(--drop-shadow-sm));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}@media(hover:hover){.group-hover\:text-primary-500:is(:where(.group):hover *){color:var(--color-primary-500)}.group-hover\:ring-primary-500:is(:where(.group):hover *){--tw-ring-color:var(--color-primary-500)}.group-hover\/badge\:opacity-100:is(:where(.group\/badge):hover *){opacity:1}.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-primary-100:hover{background-color:var(--color-primary-100)}.hover\:text-primary-500:hover{color:var(--color-primary-500)}.hover\:text-primary-600:hover{color:var(--color-primary-600)}.hover\:text-primary-700:hover{color:var(--color-primary-700)}.hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-xl:hover{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus\:ring-primary-500:focus{--tw-ring-color:var(--color-primary-500)}@media(min-width:40rem){.sm\:table-cell{display:table-cell}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}@media(min-width:48rem){.md\:flex{display:flex}.md\:hidden{display:none}.md\:table-cell{display:table-cell}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-start{align-items:flex-start}.md\:justify-start{justify-content:flex-start}:where(.md\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.md\:space-x-8>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*8)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-x-reverse)))}.md\:text-left{text-align:left}.md\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}}@media(min-width:64rem){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}}@media(prefers-color-scheme:dark){:where(.dark\:divide-gray-700>:not(:last-child)),.dark\:border-gray-700{border-color:var(--color-gray-700)}.dark\:border-t-gray-800{border-top-color:var(--color-gray-800)}.dark\:bg-gray-600{background-color:var(--color-gray-600)}.dark\:bg-gray-700{background-color:var(--color-gray-700)}.dark\:bg-gray-800{background-color:var(--color-gray-800)}.dark\:bg-gray-800\/50{background-color:#1e293980}@supports (color:color-mix(in lab,red,red)){.dark\:bg-gray-800\/50{background-color:color-mix(in oklab,var(--color-gray-800)50%,transparent)}}.dark\:bg-purple-900\/30{background-color:#59168b4d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-purple-900\/30{background-color:color-mix(in oklab,var(--color-purple-900)30%,transparent)}}.dark\:from-gray-900{--tw-gradient-from:var(--color-gray-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark\:to-gray-800{--tw-gradient-to:var(--color-gray-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark\:text-gray-200{color:var(--color-gray-200)}.dark\:text-gray-300{color:var(--color-gray-300)}.dark\:text-gray-400{color:var(--color-gray-400)}.dark\:text-gray-500{color:var(--color-gray-500)}.dark\:text-gray-600{color:var(--color-gray-600)}.dark\:text-purple-300{color:var(--color-purple-300)}.dark\:text-white{color:var(--color-white)}@media(hover:hover){.dark\:hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.dark\:hover\:bg-gray-800:hover{background-color:var(--color-gray-800)}.dark\:hover\:bg-gray-800\/30:hover{background-color:#1e29394d}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-gray-800\/30:hover{background-color:color-mix(in oklab,var(--color-gray-800)30%,transparent)}}.dark\:hover\:bg-primary-900\/30:hover{background-color:#8318434d}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-primary-900\/30:hover{background-color:color-mix(in oklab,var(--color-primary-900)30%,transparent)}}.dark\:hover\:text-primary-300:hover{color:var(--color-primary-300)}}}}.dark .glass{background-color:#111827b3;border-color:#ffffff1a}.dark .shadow-modern{box-shadow:0 10px 40px -10px #0006}.dark .score-card{background-image:linear-gradient(90deg,#f472b60d,#c084fc0d);border-color:#f472b61a}.btn-primary:hover{background-image:linear-gradient(to right,var(--color-primary-600),var(--color-accent-600))}.nav-link:hover{color:var(--color-primary-500)}.dark .nav-link{color:#e5e7eb}.dark .nav-link:hover{color:var(--color-primary-400)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes fadeInUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.velocity-chart[data-v-401bbb13]{position:relative;width:100%}
diff --git a/internal/generator/site/dist/assets/index-IALpeAps.js b/internal/generator/site/dist/assets/index-IALpeAps.js
new file mode 100644
index 0000000..f12c2d3
--- /dev/null
+++ b/internal/generator/site/dist/assets/index-IALpeAps.js
@@ -0,0 +1 @@
+import{C as rr,r as Oi}from"./chart-Bcjh2pZL.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))n(r);new MutationObserver(r=>{for(const o of r)if(o.type==="childList")for(const i of o.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&n(i)}).observe(document,{childList:!0,subtree:!0});function s(r){const o={};return r.integrity&&(o.integrity=r.integrity),r.referrerPolicy&&(o.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?o.credentials="include":r.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function n(r){if(r.ep)return;r.ep=!0;const o=s(r);fetch(r.href,o)}})();function In(e){const t=Object.create(null);for(const s of e.split(","))t[s]=1;return s=>s in t}const ue={},qt=[],rt=()=>{},Xr=()=>!1,Fs=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Nn=e=>e.startsWith("onUpdate:"),$e=Object.assign,Mn=(e,t)=>{const s=e.indexOf(t);s>-1&&e.splice(s,1)},Ii=Object.prototype.hasOwnProperty,re=(e,t)=>Ii.call(e,t),G=Array.isArray,Wt=e=>ws(e)==="[object Map]",Vs=e=>ws(e)==="[object Set]",or=e=>ws(e)==="[object Date]",z=e=>typeof e=="function",ge=e=>typeof e=="string",We=e=>typeof e=="symbol",de=e=>e!==null&&typeof e=="object",Zr=e=>(de(e)||z(e))&&z(e.then)&&z(e.catch),eo=Object.prototype.toString,ws=e=>eo.call(e),Ni=e=>ws(e).slice(8,-1),to=e=>ws(e)==="[object Object]",Dn=e=>ge(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,is=In(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Hs=e=>{const t=Object.create(null);return(s=>t[s]||(t[s]=e(s)))},Mi=/-\w/g,Ue=Hs(e=>e.replace(Mi,t=>t.slice(1).toUpperCase())),Di=/\B([A-Z])/g,Lt=Hs(e=>e.replace(Di,"-$1").toLowerCase()),Bs=Hs(e=>e.charAt(0).toUpperCase()+e.slice(1)),tn=Hs(e=>e?`on${Bs(e)}`:""),Rt=(e,t)=>!Object.is(e,t),Ps=(e,...t)=>{for(let s=0;s{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:n,value:s})},Li=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let ir;const Gs=()=>ir||(ir=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function St(e){if(G(e)){const t={};for(let s=0;s{if(s){const n=s.split(Fi);n.length>1&&(t[n[0].trim()]=n[1].trim())}}),t}function Q(e){let t="";if(ge(e))t=e;else if(G(e))for(let s=0;sUs(s,t))}const oo=e=>!!(e&&e.__v_isRef===!0),w=e=>ge(e)?e:e==null?"":G(e)||de(e)&&(e.toString===eo||!z(e.toString))?oo(e)?w(e.value):JSON.stringify(e,io,2):String(e),io=(e,t)=>oo(t)?io(e,t.value):Wt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((s,[n,r],o)=>(s[sn(n,o)+" =>"]=r,s),{})}:Vs(t)?{[`Set(${t.size})`]:[...t.values()].map(s=>sn(s))}:We(t)?sn(t):de(t)&&!G(t)&&!to(t)?String(t):t,sn=(e,t="")=>{var s;return We(e)?`Symbol(${(s=e.description)!=null?s:t})`:e};let Le;class qi{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=Le,!t&&Le&&(this.index=(Le.scopes||(Le.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,s;if(this.scopes)for(t=0,s=this.scopes.length;t0&&--this._on===0&&(Le=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let s,n;for(s=0,n=this.effects.length;s0)return;if(as){let t=as;for(as=void 0;t;){const s=t.next;t.next=void 0,t.flags&=-9,t=s}}let e;for(;ls;){let t=ls;for(ls=void 0;t;){const s=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(n){e||(e=n)}t=s}}if(e)throw e}function uo(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function fo(e){let t,s=e.depsTail,n=s;for(;n;){const r=n.prevDep;n.version===-1?(n===s&&(s=r),Fn(n),Ki(n)):t=n,n.dep.activeLink=n.prevActiveLink,n.prevActiveLink=void 0,n=r}e.deps=t,e.depsTail=s}function yn(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(mo(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function mo(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===hs)||(e.globalVersion=hs,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!yn(e))))return;e.flags|=2;const t=e.dep,s=me,n=qe;me=e,qe=!0;try{uo(e);const r=e.fn(e._value);(t.version===0||Rt(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{me=s,qe=n,fo(e),e.flags&=-3}}function Fn(e,t=!1){const{dep:s,prevSub:n,nextSub:r}=e;if(n&&(n.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=n,e.nextSub=void 0),s.subs===e&&(s.subs=n,!n&&s.computed)){s.computed.flags&=-5;for(let o=s.computed.deps;o;o=o.nextDep)Fn(o,!0)}!t&&!--s.sc&&s.map&&s.map.delete(s.key)}function Ki(e){const{prevDep:t,nextDep:s}=e;t&&(t.nextDep=s,e.prevDep=void 0),s&&(s.prevDep=t,e.nextDep=void 0)}let qe=!0;const ho=[];function ft(){ho.push(qe),qe=!1}function mt(){const e=ho.pop();qe=e===void 0?!0:e}function lr(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const s=me;me=void 0;try{t()}finally{me=s}}}let hs=0;class zi{constructor(t,s){this.sub=t,this.dep=s,this.version=s.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Vn{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!me||!qe||me===this.computed)return;let s=this.activeLink;if(s===void 0||s.sub!==me)s=this.activeLink=new zi(me,this),me.deps?(s.prevDep=me.depsTail,me.depsTail.nextDep=s,me.depsTail=s):me.deps=me.depsTail=s,po(s);else if(s.version===-1&&(s.version=this.version,s.nextDep)){const n=s.nextDep;n.prevDep=s.prevDep,s.prevDep&&(s.prevDep.nextDep=n),s.prevDep=me.depsTail,s.nextDep=void 0,me.depsTail.nextDep=s,me.depsTail=s,me.deps===s&&(me.deps=n)}return s}trigger(t){this.version++,hs++,this.notify(t)}notify(t){Ln();try{for(let s=this.subs;s;s=s.prevSub)s.sub.notify()&&s.sub.dep.notify()}finally{jn()}}}function po(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let n=t.deps;n;n=n.nextDep)po(n)}const s=e.dep.subs;s!==e&&(e.prevSub=s,s&&(s.nextSub=e)),e.dep.subs=e}}const xn=new WeakMap,Nt=Symbol(""),bn=Symbol(""),ps=Symbol("");function Se(e,t,s){if(qe&&me){let n=xn.get(e);n||xn.set(e,n=new Map);let r=n.get(s);r||(n.set(s,r=new Vn),r.map=n,r.key=s),r.track()}}function ut(e,t,s,n,r,o){const i=xn.get(e);if(!i){hs++;return}const l=a=>{a&&a.trigger()};if(Ln(),t==="clear")i.forEach(l);else{const a=G(e),c=a&&Dn(s);if(a&&s==="length"){const d=Number(n);i.forEach((m,p)=>{(p==="length"||p===ps||!We(p)&&p>=d)&&l(m)})}else switch((s!==void 0||i.has(void 0))&&l(i.get(s)),c&&l(i.get(ps)),t){case"add":a?c&&l(i.get("length")):(l(i.get(Nt)),Wt(e)&&l(i.get(bn)));break;case"delete":a||(l(i.get(Nt)),Wt(e)&&l(i.get(bn)));break;case"set":Wt(e)&&l(i.get(Nt));break}}jn()}function Bt(e){const t=ne(e);return t===e?t:(Se(t,"iterate",ps),Be(e)?t:t.map(Ke))}function qs(e){return Se(e=ne(e),"iterate",ps),e}function _t(e,t){return ht(e)?Mt(e)?Jt(Ke(t)):Jt(t):Ke(t)}const Qi={__proto__:null,[Symbol.iterator](){return rn(this,Symbol.iterator,e=>_t(this,e))},concat(...e){return Bt(this).concat(...e.map(t=>G(t)?Bt(t):t))},entries(){return rn(this,"entries",e=>(e[1]=_t(this,e[1]),e))},every(e,t){return lt(this,"every",e,t,void 0,arguments)},filter(e,t){return lt(this,"filter",e,t,s=>s.map(n=>_t(this,n)),arguments)},find(e,t){return lt(this,"find",e,t,s=>_t(this,s),arguments)},findIndex(e,t){return lt(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return lt(this,"findLast",e,t,s=>_t(this,s),arguments)},findLastIndex(e,t){return lt(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return lt(this,"forEach",e,t,void 0,arguments)},includes(...e){return on(this,"includes",e)},indexOf(...e){return on(this,"indexOf",e)},join(e){return Bt(this).join(e)},lastIndexOf(...e){return on(this,"lastIndexOf",e)},map(e,t){return lt(this,"map",e,t,void 0,arguments)},pop(){return ss(this,"pop")},push(...e){return ss(this,"push",e)},reduce(e,...t){return ar(this,"reduce",e,t)},reduceRight(e,...t){return ar(this,"reduceRight",e,t)},shift(){return ss(this,"shift")},some(e,t){return lt(this,"some",e,t,void 0,arguments)},splice(...e){return ss(this,"splice",e)},toReversed(){return Bt(this).toReversed()},toSorted(e){return Bt(this).toSorted(e)},toSpliced(...e){return Bt(this).toSpliced(...e)},unshift(...e){return ss(this,"unshift",e)},values(){return rn(this,"values",e=>_t(this,e))}};function rn(e,t,s){const n=qs(e),r=n[t]();return n!==e&&!Be(e)&&(r._next=r.next,r.next=()=>{const o=r._next();return o.done||(o.value=s(o.value)),o}),r}const Ji=Array.prototype;function lt(e,t,s,n,r,o){const i=qs(e),l=i!==e&&!Be(e),a=i[t];if(a!==Ji[t]){const m=a.apply(e,o);return l?Ke(m):m}let c=s;i!==e&&(l?c=function(m,p){return s.call(this,_t(e,m),p,e)}:s.length>2&&(c=function(m,p){return s.call(this,m,p,e)}));const d=a.call(i,c,n);return l&&r?r(d):d}function ar(e,t,s,n){const r=qs(e);let o=s;return r!==e&&(Be(e)?s.length>3&&(o=function(i,l,a){return s.call(this,i,l,a,e)}):o=function(i,l,a){return s.call(this,i,_t(e,l),a,e)}),r[t](o,...n)}function on(e,t,s){const n=ne(e);Se(n,"iterate",ps);const r=n[t](...s);return(r===-1||r===!1)&&Gn(s[0])?(s[0]=ne(s[0]),n[t](...s)):r}function ss(e,t,s=[]){ft(),Ln();const n=ne(e)[t].apply(e,s);return jn(),mt(),n}const Yi=In("__proto__,__v_isRef,__isVue"),go=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(We));function Xi(e){We(e)||(e=String(e));const t=ne(this);return Se(t,"has",e),t.hasOwnProperty(e)}class vo{constructor(t=!1,s=!1){this._isReadonly=t,this._isShallow=s}get(t,s,n){if(s==="__v_skip")return t.__v_skip;const r=this._isReadonly,o=this._isShallow;if(s==="__v_isReactive")return!r;if(s==="__v_isReadonly")return r;if(s==="__v_isShallow")return o;if(s==="__v_raw")return n===(r?o?al:_o:o?bo:xo).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(n)?t:void 0;const i=G(t);if(!r){let a;if(i&&(a=Qi[s]))return a;if(s==="hasOwnProperty")return Xi}const l=Reflect.get(t,s,Ee(t)?t:n);if((We(s)?go.has(s):Yi(s))||(r||Se(t,"get",s),o))return l;if(Ee(l)){const a=i&&Dn(s)?l:l.value;return r&&de(a)?wn(a):a}return de(l)?r?wn(l):Ws(l):l}}class yo extends vo{constructor(t=!1){super(!1,t)}set(t,s,n,r){let o=t[s];const i=G(t)&&Dn(s);if(!this._isShallow){const c=ht(o);if(!Be(n)&&!ht(n)&&(o=ne(o),n=ne(n)),!i&&Ee(o)&&!Ee(n))return c||(o.value=n),!0}const l=i?Number(s)e,Ss=e=>Reflect.getPrototypeOf(e);function nl(e,t,s){return function(...n){const r=this.__v_raw,o=ne(r),i=Wt(o),l=e==="entries"||e===Symbol.iterator&&i,a=e==="keys"&&i,c=r[e](...n),d=s?_n:t?Jt:Ke;return!t&&Se(o,"iterate",a?bn:Nt),{next(){const{value:m,done:p}=c.next();return p?{value:m,done:p}:{value:l?[d(m[0]),d(m[1])]:d(m),done:p}},[Symbol.iterator](){return this}}}}function As(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function rl(e,t){const s={get(r){const o=this.__v_raw,i=ne(o),l=ne(r);e||(Rt(r,l)&&Se(i,"get",r),Se(i,"get",l));const{has:a}=Ss(i),c=t?_n:e?Jt:Ke;if(a.call(i,r))return c(o.get(r));if(a.call(i,l))return c(o.get(l));o!==i&&o.get(r)},get size(){const r=this.__v_raw;return!e&&Se(ne(r),"iterate",Nt),r.size},has(r){const o=this.__v_raw,i=ne(o),l=ne(r);return e||(Rt(r,l)&&Se(i,"has",r),Se(i,"has",l)),r===l?o.has(r):o.has(r)||o.has(l)},forEach(r,o){const i=this,l=i.__v_raw,a=ne(l),c=t?_n:e?Jt:Ke;return!e&&Se(a,"iterate",Nt),l.forEach((d,m)=>r.call(o,c(d),c(m),i))}};return $e(s,e?{add:As("add"),set:As("set"),delete:As("delete"),clear:As("clear")}:{add(r){!t&&!Be(r)&&!ht(r)&&(r=ne(r));const o=ne(this);return Ss(o).has.call(o,r)||(o.add(r),ut(o,"add",r,r)),this},set(r,o){!t&&!Be(o)&&!ht(o)&&(o=ne(o));const i=ne(this),{has:l,get:a}=Ss(i);let c=l.call(i,r);c||(r=ne(r),c=l.call(i,r));const d=a.call(i,r);return i.set(r,o),c?Rt(o,d)&&ut(i,"set",r,o):ut(i,"add",r,o),this},delete(r){const o=ne(this),{has:i,get:l}=Ss(o);let a=i.call(o,r);a||(r=ne(r),a=i.call(o,r)),l&&l.call(o,r);const c=o.delete(r);return a&&ut(o,"delete",r,void 0),c},clear(){const r=ne(this),o=r.size!==0,i=r.clear();return o&&ut(r,"clear",void 0,void 0),i}}),["keys","values","entries",Symbol.iterator].forEach(r=>{s[r]=nl(r,e,t)}),s}function Hn(e,t){const s=rl(e,t);return(n,r,o)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?n:Reflect.get(re(s,r)&&r in n?s:n,r,o)}const ol={get:Hn(!1,!1)},il={get:Hn(!1,!0)},ll={get:Hn(!0,!1)};const xo=new WeakMap,bo=new WeakMap,_o=new WeakMap,al=new WeakMap;function cl(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function ul(e){return e.__v_skip||!Object.isExtensible(e)?0:cl(Ni(e))}function Ws(e){return ht(e)?e:Bn(e,!1,el,ol,xo)}function wo(e){return Bn(e,!1,sl,il,bo)}function wn(e){return Bn(e,!0,tl,ll,_o)}function Bn(e,t,s,n,r){if(!de(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const o=ul(e);if(o===0)return e;const i=r.get(e);if(i)return i;const l=new Proxy(e,o===2?n:s);return r.set(e,l),l}function Mt(e){return ht(e)?Mt(e.__v_raw):!!(e&&e.__v_isReactive)}function ht(e){return!!(e&&e.__v_isReadonly)}function Be(e){return!!(e&&e.__v_isShallow)}function Gn(e){return e?!!e.__v_raw:!1}function ne(e){const t=e&&e.__v_raw;return t?ne(t):e}function dl(e){return!re(e,"__v_skip")&&Object.isExtensible(e)&&so(e,"__v_skip",!0),e}const Ke=e=>de(e)?Ws(e):e,Jt=e=>de(e)?wn(e):e;function Ee(e){return e?e.__v_isRef===!0:!1}function ke(e){return ko(e,!1)}function fl(e){return ko(e,!0)}function ko(e,t){return Ee(e)?e:new ml(e,t)}class ml{constructor(t,s){this.dep=new Vn,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=s?t:ne(t),this._value=s?t:Ke(t),this.__v_isShallow=s}get value(){return this.dep.track(),this._value}set value(t){const s=this._rawValue,n=this.__v_isShallow||Be(t)||ht(t);t=n?t:ne(t),Rt(t,s)&&(this._rawValue=t,this._value=n?t:Ke(t),this.dep.trigger())}}function A(e){return Ee(e)?e.value:e}const hl={get:(e,t,s)=>t==="__v_raw"?e:A(Reflect.get(e,t,s)),set:(e,t,s,n)=>{const r=e[t];return Ee(r)&&!Ee(s)?(r.value=s,!0):Reflect.set(e,t,s,n)}};function Co(e){return Mt(e)?e:new Proxy(e,hl)}class pl{constructor(t,s,n){this.fn=t,this.setter=s,this._value=void 0,this.dep=new Vn(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=hs-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!s,this.isSSR=n}notify(){if(this.flags|=16,!(this.flags&8)&&me!==this)return co(this,!0),!0}get value(){const t=this.dep.track();return mo(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function gl(e,t,s=!1){let n,r;return z(e)?n=e:(n=e.get,r=e.set),new pl(n,r,s)}const Es={},Os=new WeakMap;let Tt;function vl(e,t=!1,s=Tt){if(s){let n=Os.get(s);n||Os.set(s,n=[]),n.push(e)}}function yl(e,t,s=ue){const{immediate:n,deep:r,once:o,scheduler:i,augmentJob:l,call:a}=s,c=L=>r?L:Be(L)||r===!1||r===0?dt(L,1):dt(L);let d,m,p,v,S=!1,I=!1;if(Ee(e)?(m=()=>e.value,S=Be(e)):Mt(e)?(m=()=>c(e),S=!0):G(e)?(I=!0,S=e.some(L=>Mt(L)||Be(L)),m=()=>e.map(L=>{if(Ee(L))return L.value;if(Mt(L))return c(L);if(z(L))return a?a(L,2):L()})):z(e)?t?m=a?()=>a(e,2):e:m=()=>{if(p){ft();try{p()}finally{mt()}}const L=Tt;Tt=d;try{return a?a(e,3,[v]):e(v)}finally{Tt=L}}:m=rt,t&&r){const L=m,ee=r===!0?1/0:r;m=()=>dt(L(),ee)}const K=Wi(),j=()=>{d.stop(),K&&K.active&&Mn(K.effects,d)};if(o&&t){const L=t;t=(...ee)=>{L(...ee),j()}}let D=I?new Array(e.length).fill(Es):Es;const V=L=>{if(!(!(d.flags&1)||!d.dirty&&!L))if(t){const ee=d.run();if(r||S||(I?ee.some((ve,he)=>Rt(ve,D[he])):Rt(ee,D))){p&&p();const ve=Tt;Tt=d;try{const he=[ee,D===Es?void 0:I&&D[0]===Es?[]:D,v];D=ee,a?a(t,3,he):t(...he)}finally{Tt=ve}}}else d.run()};return l&&l(V),d=new lo(m),d.scheduler=i?()=>i(V,!1):V,v=L=>vl(L,!1,d),p=d.onStop=()=>{const L=Os.get(d);if(L){if(a)a(L,4);else for(const ee of L)ee();Os.delete(d)}},t?n?V(!0):D=d.run():i?i(V.bind(null,!0),!0):d.run(),j.pause=d.pause.bind(d),j.resume=d.resume.bind(d),j.stop=j,j}function dt(e,t=1/0,s){if(t<=0||!de(e)||e.__v_skip||(s=s||new Map,(s.get(e)||0)>=t))return e;if(s.set(e,t),t--,Ee(e))dt(e.value,t,s);else if(G(e))for(let n=0;n{dt(n,t,s)});else if(to(e)){for(const n in e)dt(e[n],t,s);for(const n of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,n)&&dt(e[n],t,s)}return e}function ks(e,t,s,n){try{return n?e(...n):e()}catch(r){Ks(r,t,s)}}function ot(e,t,s,n){if(z(e)){const r=ks(e,t,s,n);return r&&Zr(r)&&r.catch(o=>{Ks(o,t,s)}),r}if(G(e)){const r=[];for(let o=0;o>>1,r=Ie[n],o=gs(r);o=gs(s)?Ie.push(e):Ie.splice(bl(t),0,e),e.flags|=1,Ao()}}function Ao(){Is||(Is=Ro.then(Po))}function _l(e){G(e)?Kt.push(...e):wt&&e.id===-1?wt.splice(Gt+1,0,e):e.flags&1||(Kt.push(e),e.flags|=1),Ao()}function cr(e,t,s=st+1){for(;sgs(s)-gs(n));if(Kt.length=0,wt){wt.push(...t);return}for(wt=t,Gt=0;Gte.id==null?e.flags&2?-1:1/0:e.id;function Po(e){try{for(st=0;st{n._d&&Ls(-1);const o=Ns(t);let i;try{i=e(...r)}finally{Ns(o),n._d&&Ls(1)}return i};return n._n=!0,n._c=!0,n._d=!0,n}function wl(e,t){if(we===null)return e;const s=Ys(we),n=e.dirs||(e.dirs=[]);for(let r=0;re.__isTeleport,Rl=Symbol("_leaveCb");function qn(e,t){e.shapeFlag&6&&e.component?(e.transition=t,qn(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function To(e,t){return z(e)?$e({name:e.name},t,{setup:e}):e}function Oo(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}const Ms=new WeakMap;function cs(e,t,s,n,r=!1){if(G(e)){e.forEach((S,I)=>cs(S,t&&(G(t)?t[I]:t),s,n,r));return}if(zt(n)&&!r){n.shapeFlag&512&&n.type.__asyncResolved&&n.component.subTree.component&&cs(e,t,s,n.component.subTree);return}const o=n.shapeFlag&4?Ys(n.component):n.el,i=r?null:o,{i:l,r:a}=e,c=t&&t.r,d=l.refs===ue?l.refs={}:l.refs,m=l.setupState,p=ne(m),v=m===ue?Xr:S=>re(p,S);if(c!=null&&c!==a){if(ur(t),ge(c))d[c]=null,v(c)&&(m[c]=null);else if(Ee(c)){c.value=null;const S=t;S.k&&(d[S.k]=null)}}if(z(a))ks(a,l,12,[i,d]);else{const S=ge(a),I=Ee(a);if(S||I){const K=()=>{if(e.f){const j=S?v(a)?m[a]:d[a]:a.value;if(r)G(j)&&Mn(j,o);else if(G(j))j.includes(o)||j.push(o);else if(S)d[a]=[o],v(a)&&(m[a]=d[a]);else{const D=[o];a.value=D,e.k&&(d[e.k]=D)}}else S?(d[a]=i,v(a)&&(m[a]=i)):I&&(a.value=i,e.k&&(d[e.k]=i))};if(i){const j=()=>{K(),Ms.delete(e)};j.id=-1,Ms.set(e,j),Fe(j,s)}else ur(e),K()}}}function ur(e){const t=Ms.get(e);t&&(t.flags|=8,Ms.delete(e))}Gs().requestIdleCallback;Gs().cancelIdleCallback;const zt=e=>!!e.type.__asyncLoader,Io=e=>e.type.__isKeepAlive;function Sl(e,t){No(e,"a",t)}function Al(e,t){No(e,"da",t)}function No(e,t,s=Ae){const n=e.__wdc||(e.__wdc=()=>{let r=s;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(zs(t,n,s),s){let r=s.parent;for(;r&&r.parent;)Io(r.parent.vnode)&&El(n,t,s,r),r=r.parent}}function El(e,t,s,n){const r=zs(t,e,n,!0);Mo(()=>{Mn(n[t],r)},s)}function zs(e,t,s=Ae,n=!1){if(s){const r=s[e]||(s[e]=[]),o=t.__weh||(t.__weh=(...i)=>{ft();const l=Cs(s),a=ot(t,s,e,i);return l(),mt(),a});return n?r.unshift(o):r.push(o),o}}const gt=e=>(t,s=Ae)=>{(!xs||e==="sp")&&zs(e,(...n)=>t(...n),s)},Pl=gt("bm"),jt=gt("m"),$l=gt("bu"),Tl=gt("u"),Ol=gt("bum"),Mo=gt("um"),Il=gt("sp"),Nl=gt("rtg"),Ml=gt("rtc");function Dl(e,t=Ae){zs("ec",e,t)}const Do="components";function Ll(e,t){return jo(Do,e,!0,t)||e}const Lo=Symbol.for("v-ndc");function jl(e){return ge(e)?jo(Do,e,!1)||e:e||Lo}function jo(e,t,s=!0,n=!1){const r=we||Ae;if(r){const o=r.type;{const l=Sa(o,!1);if(l&&(l===t||l===Ue(t)||l===Bs(Ue(t))))return o}const i=dr(r[e]||o[e],t)||dr(r.appContext[e],t);return!i&&n?o:i}}function dr(e,t){return e&&(e[t]||e[Ue(t)]||e[Bs(Ue(t))])}function xe(e,t,s,n){let r;const o=s,i=G(e);if(i||ge(e)){const l=i&&Mt(e);let a=!1,c=!1;l&&(a=!Be(e),c=ht(e),e=qs(e)),r=new Array(e.length);for(let d=0,m=e.length;dt(l,a,void 0,o));else{const l=Object.keys(e);r=new Array(l.length);for(let a=0,c=l.length;a0;return t!=="default"&&(s.name=t),y(),ie(J,null,[N("slot",s,n&&n())],c?-2:64)}let o=e[t];o&&o._c&&(o._d=!1),y();const i=o&&Fo(o(s)),l=s.key||i&&i.key,a=ie(J,{key:(l&&!We(l)?l:`_${t}`)+(!i&&n?"_fb":"")},i||(n?n():[]),i&&e._===1?64:-2);return a.scopeId&&(a.slotScopeIds=[a.scopeId+"-s"]),o&&o._c&&(o._d=!0),a}function Fo(e){return e.some(t=>ys(t)?!(t.type===pt||t.type===J&&!Fo(t.children)):!0)?e:null}const kn=e=>e?oi(e)?Ys(e):kn(e.parent):null,us=$e(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>kn(e.parent),$root:e=>kn(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Ho(e),$forceUpdate:e=>e.f||(e.f=()=>{Un(e.update)}),$nextTick:e=>e.n||(e.n=So.bind(e.proxy)),$watch:e=>Ql.bind(e)}),ln=(e,t)=>e!==ue&&!e.__isScriptSetup&&re(e,t),Fl={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:s,setupState:n,data:r,props:o,accessCache:i,type:l,appContext:a}=e;if(t[0]!=="$"){const p=i[t];if(p!==void 0)switch(p){case 1:return n[t];case 2:return r[t];case 4:return s[t];case 3:return o[t]}else{if(ln(n,t))return i[t]=1,n[t];if(r!==ue&&re(r,t))return i[t]=2,r[t];if(re(o,t))return i[t]=3,o[t];if(s!==ue&&re(s,t))return i[t]=4,s[t];Cn&&(i[t]=0)}}const c=us[t];let d,m;if(c)return t==="$attrs"&&Se(e.attrs,"get",""),c(e);if((d=l.__cssModules)&&(d=d[t]))return d;if(s!==ue&&re(s,t))return i[t]=4,s[t];if(m=a.config.globalProperties,re(m,t))return m[t]},set({_:e},t,s){const{data:n,setupState:r,ctx:o}=e;return ln(r,t)?(r[t]=s,!0):n!==ue&&re(n,t)?(n[t]=s,!0):re(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(o[t]=s,!0)},has({_:{data:e,setupState:t,accessCache:s,ctx:n,appContext:r,props:o,type:i}},l){let a;return!!(s[l]||e!==ue&&l[0]!=="$"&&re(e,l)||ln(t,l)||re(o,l)||re(n,l)||re(us,l)||re(r.config.globalProperties,l)||(a=i.__cssModules)&&a[l])},defineProperty(e,t,s){return s.get!=null?e._.accessCache[t]=0:re(s,"value")&&this.set(e,t,s.value,null),Reflect.defineProperty(e,t,s)}};function fr(e){return G(e)?e.reduce((t,s)=>(t[s]=null,t),{}):e}let Cn=!0;function Vl(e){const t=Ho(e),s=e.proxy,n=e.ctx;Cn=!1,t.beforeCreate&&mr(t.beforeCreate,e,"bc");const{data:r,computed:o,methods:i,watch:l,provide:a,inject:c,created:d,beforeMount:m,mounted:p,beforeUpdate:v,updated:S,activated:I,deactivated:K,beforeDestroy:j,beforeUnmount:D,destroyed:V,unmounted:L,render:ee,renderTracked:ve,renderTriggered:he,errorCaptured:Ce,serverPrefetch:vt,expose:Qe,inheritAttrs:yt,components:At,directives:Je,filters:es}=t;if(c&&Hl(c,n,null),i)for(const ce in i){const te=i[ce];z(te)&&(n[ce]=te.bind(s))}if(r){const ce=r.call(s,s);de(ce)&&(e.data=Ws(ce))}if(Cn=!0,o)for(const ce in o){const te=o[ce],it=z(te)?te.bind(s,s):z(te.get)?te.get.bind(s,s):rt,xt=!z(te)&&z(te.set)?te.set.bind(s):rt,Ye=oe({get:it,set:xt});Object.defineProperty(n,ce,{enumerable:!0,configurable:!0,get:()=>Ye.value,set:Ne=>Ye.value=Ne})}if(l)for(const ce in l)Vo(l[ce],n,s,ce);if(a){const ce=z(a)?a.call(s):a;Reflect.ownKeys(ce).forEach(te=>{ds(te,ce[te])})}d&&mr(d,e,"c");function be(ce,te){G(te)?te.forEach(it=>ce(it.bind(s))):te&&ce(te.bind(s))}if(be(Pl,m),be(jt,p),be($l,v),be(Tl,S),be(Sl,I),be(Al,K),be(Dl,Ce),be(Ml,ve),be(Nl,he),be(Ol,D),be(Mo,L),be(Il,vt),G(Qe))if(Qe.length){const ce=e.exposed||(e.exposed={});Qe.forEach(te=>{Object.defineProperty(ce,te,{get:()=>s[te],set:it=>s[te]=it,enumerable:!0})})}else e.exposed||(e.exposed={});ee&&e.render===rt&&(e.render=ee),yt!=null&&(e.inheritAttrs=yt),At&&(e.components=At),Je&&(e.directives=Je),vt&&Oo(e)}function Hl(e,t,s=rt){G(e)&&(e=Rn(e));for(const n in e){const r=e[n];let o;de(r)?"default"in r?o=Pe(r.from||n,r.default,!0):o=Pe(r.from||n):o=Pe(r),Ee(o)?Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:()=>o.value,set:i=>o.value=i}):t[n]=o}}function mr(e,t,s){ot(G(e)?e.map(n=>n.bind(t.proxy)):e.bind(t.proxy),t,s)}function Vo(e,t,s,n){let r=n.includes(".")?Uo(s,n):()=>s[n];if(ge(e)){const o=t[e];z(o)&&Ge(r,o)}else if(z(e))Ge(r,e.bind(s));else if(de(e))if(G(e))e.forEach(o=>Vo(o,t,s,n));else{const o=z(e.handler)?e.handler.bind(s):t[e.handler];z(o)&&Ge(r,o,e)}}function Ho(e){const t=e.type,{mixins:s,extends:n}=t,{mixins:r,optionsCache:o,config:{optionMergeStrategies:i}}=e.appContext,l=o.get(t);let a;return l?a=l:!r.length&&!s&&!n?a=t:(a={},r.length&&r.forEach(c=>Ds(a,c,i,!0)),Ds(a,t,i)),de(t)&&o.set(t,a),a}function Ds(e,t,s,n=!1){const{mixins:r,extends:o}=t;o&&Ds(e,o,s,!0),r&&r.forEach(i=>Ds(e,i,s,!0));for(const i in t)if(!(n&&i==="expose")){const l=Bl[i]||s&&s[i];e[i]=l?l(e[i],t[i]):t[i]}return e}const Bl={data:hr,props:pr,emits:pr,methods:os,computed:os,beforeCreate:Te,created:Te,beforeMount:Te,mounted:Te,beforeUpdate:Te,updated:Te,beforeDestroy:Te,beforeUnmount:Te,destroyed:Te,unmounted:Te,activated:Te,deactivated:Te,errorCaptured:Te,serverPrefetch:Te,components:os,directives:os,watch:Ul,provide:hr,inject:Gl};function hr(e,t){return t?e?function(){return $e(z(e)?e.call(this,this):e,z(t)?t.call(this,this):t)}:t:e}function Gl(e,t){return os(Rn(e),Rn(t))}function Rn(e){if(G(e)){const t={};for(let s=0;s1)return s&&z(t)?t.call(n&&n.proxy):t}}const Kl=Symbol.for("v-scx"),zl=()=>Pe(Kl);function Ge(e,t,s){return Go(e,t,s)}function Go(e,t,s=ue){const{immediate:n,deep:r,flush:o,once:i}=s,l=$e({},s),a=t&&n||!t&&o!=="post";let c;if(xs){if(o==="sync"){const v=zl();c=v.__watcherHandles||(v.__watcherHandles=[])}else if(!a){const v=()=>{};return v.stop=rt,v.resume=rt,v.pause=rt,v}}const d=Ae;l.call=(v,S,I)=>ot(v,d,S,I);let m=!1;o==="post"?l.scheduler=v=>{Fe(v,d&&d.suspense)}:o!=="sync"&&(m=!0,l.scheduler=(v,S)=>{S?v():Un(v)}),l.augmentJob=v=>{t&&(v.flags|=4),m&&(v.flags|=2,d&&(v.id=d.uid,v.i=d))};const p=yl(e,t,l);return xs&&(c?c.push(p):a&&p()),p}function Ql(e,t,s){const n=this.proxy,r=ge(e)?e.includes(".")?Uo(n,e):()=>n[e]:e.bind(n,n);let o;z(t)?o=t:(o=t.handler,s=t);const i=Cs(this),l=Go(r,o.bind(n),s);return i(),l}function Uo(e,t){const s=t.split(".");return()=>{let n=e;for(let r=0;rt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ue(t)}Modifiers`]||e[`${Lt(t)}Modifiers`];function Yl(e,t,...s){if(e.isUnmounted)return;const n=e.vnode.props||ue;let r=s;const o=t.startsWith("update:"),i=o&&Jl(n,t.slice(7));i&&(i.trim&&(r=s.map(d=>ge(d)?d.trim():d)),i.number&&(r=s.map(Li)));let l,a=n[l=tn(t)]||n[l=tn(Ue(t))];!a&&o&&(a=n[l=tn(Lt(t))]),a&&ot(a,e,6,r);const c=n[l+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,ot(c,e,6,r)}}const Xl=new WeakMap;function qo(e,t,s=!1){const n=s?Xl:t.emitsCache,r=n.get(e);if(r!==void 0)return r;const o=e.emits;let i={},l=!1;if(!z(e)){const a=c=>{const d=qo(c,t,!0);d&&(l=!0,$e(i,d))};!s&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!o&&!l?(de(e)&&n.set(e,null),null):(G(o)?o.forEach(a=>i[a]=null):$e(i,o),de(e)&&n.set(e,i),i)}function Qs(e,t){return!e||!Fs(t)?!1:(t=t.slice(2).replace(/Once$/,""),re(e,t[0].toLowerCase()+t.slice(1))||re(e,Lt(t))||re(e,t))}function gr(e){const{type:t,vnode:s,proxy:n,withProxy:r,propsOptions:[o],slots:i,attrs:l,emit:a,render:c,renderCache:d,props:m,data:p,setupState:v,ctx:S,inheritAttrs:I}=e,K=Ns(e);let j,D;try{if(s.shapeFlag&4){const L=r||n,ee=L;j=nt(c.call(ee,L,d,m,v,p,S)),D=l}else{const L=t;j=nt(L.length>1?L(m,{attrs:l,slots:i,emit:a}):L(m,null)),D=t.props?l:Zl(l)}}catch(L){fs.length=0,Ks(L,e,1),j=N(pt)}let V=j;if(D&&I!==!1){const L=Object.keys(D),{shapeFlag:ee}=V;L.length&&ee&7&&(o&&L.some(Nn)&&(D=ea(D,o)),V=Yt(V,D,!1,!0))}return s.dirs&&(V=Yt(V,null,!1,!0),V.dirs=V.dirs?V.dirs.concat(s.dirs):s.dirs),s.transition&&qn(V,s.transition),j=V,Ns(K),j}const Zl=e=>{let t;for(const s in e)(s==="class"||s==="style"||Fs(s))&&((t||(t={}))[s]=e[s]);return t},ea=(e,t)=>{const s={};for(const n in e)(!Nn(n)||!(n.slice(9)in t))&&(s[n]=e[n]);return s};function ta(e,t,s){const{props:n,children:r,component:o}=e,{props:i,children:l,patchFlag:a}=t,c=o.emitsOptions;if(t.dirs||t.transition)return!0;if(s&&a>=0){if(a&1024)return!0;if(a&16)return n?vr(n,i,c):!!i;if(a&8){const d=t.dynamicProps;for(let m=0;mObject.create(Wo),zo=e=>Object.getPrototypeOf(e)===Wo;function na(e,t,s,n=!1){const r={},o=Ko();e.propsDefaults=Object.create(null),Qo(e,t,r,o);for(const i in e.propsOptions[0])i in r||(r[i]=void 0);s?e.props=n?r:wo(r):e.type.props?e.props=r:e.props=o,e.attrs=o}function ra(e,t,s,n){const{props:r,attrs:o,vnode:{patchFlag:i}}=e,l=ne(r),[a]=e.propsOptions;let c=!1;if((n||i>0)&&!(i&16)){if(i&8){const d=e.vnode.dynamicProps;for(let m=0;m{a=!0;const[p,v]=Jo(m,t,!0);$e(i,p),v&&l.push(...v)};!s&&t.mixins.length&&t.mixins.forEach(d),e.extends&&d(e.extends),e.mixins&&e.mixins.forEach(d)}if(!o&&!a)return de(e)&&n.set(e,qt),qt;if(G(o))for(let d=0;de==="_"||e==="_ctx"||e==="$stable",Kn=e=>G(e)?e.map(nt):[nt(e)],ia=(e,t,s)=>{if(t._n)return t;const n=Z((...r)=>Kn(t(...r)),s);return n._c=!1,n},Yo=(e,t,s)=>{const n=e._ctx;for(const r in e){if(Wn(r))continue;const o=e[r];if(z(o))t[r]=ia(r,o,n);else if(o!=null){const i=Kn(o);t[r]=()=>i}}},Xo=(e,t)=>{const s=Kn(t);e.slots.default=()=>s},Zo=(e,t,s)=>{for(const n in t)(s||!Wn(n))&&(e[n]=t[n])},la=(e,t,s)=>{const n=e.slots=Ko();if(e.vnode.shapeFlag&32){const r=t._;r?(Zo(n,t,s),s&&so(n,"_",r,!0)):Yo(t,n)}else t&&Xo(e,t)},aa=(e,t,s)=>{const{vnode:n,slots:r}=e;let o=!0,i=ue;if(n.shapeFlag&32){const l=t._;l?s&&l===1?o=!1:Zo(r,t,s):(o=!t.$stable,Yo(t,r)),i=t}else t&&(Xo(e,t),i={default:1});if(o)for(const l in r)!Wn(l)&&i[l]==null&&delete r[l]},Fe=ma;function ca(e){return ua(e)}function ua(e,t){const s=Gs();s.__VUE__=!0;const{insert:n,remove:r,patchProp:o,createElement:i,createText:l,createComment:a,setText:c,setElementText:d,parentNode:m,nextSibling:p,setScopeId:v=rt,insertStaticContent:S}=e,I=(f,h,g,b=null,k=null,x=null,$=void 0,P=null,E=!!h.dynamicChildren)=>{if(f===h)return;f&&!ns(f,h)&&(b=_(f),Ne(f,k,x,!0),f=null),h.patchFlag===-2&&(E=!1,h.dynamicChildren=null);const{type:R,ref:B,shapeFlag:O}=h;switch(R){case Js:K(f,h,g,b);break;case pt:j(f,h,g,b);break;case cn:f==null&&D(h,g,b,$);break;case J:At(f,h,g,b,k,x,$,P,E);break;default:O&1?ee(f,h,g,b,k,x,$,P,E):O&6?Je(f,h,g,b,k,x,$,P,E):(O&64||O&128)&&R.process(f,h,g,b,k,x,$,P,E,F)}B!=null&&k?cs(B,f&&f.ref,x,h||f,!h):B==null&&f&&f.ref!=null&&cs(f.ref,null,x,f,!0)},K=(f,h,g,b)=>{if(f==null)n(h.el=l(h.children),g,b);else{const k=h.el=f.el;h.children!==f.children&&c(k,h.children)}},j=(f,h,g,b)=>{f==null?n(h.el=a(h.children||""),g,b):h.el=f.el},D=(f,h,g,b)=>{[f.el,f.anchor]=S(f.children,h,g,b,f.el,f.anchor)},V=({el:f,anchor:h},g,b)=>{let k;for(;f&&f!==h;)k=p(f),n(f,g,b),f=k;n(h,g,b)},L=({el:f,anchor:h})=>{let g;for(;f&&f!==h;)g=p(f),r(f),f=g;r(h)},ee=(f,h,g,b,k,x,$,P,E)=>{if(h.type==="svg"?$="svg":h.type==="math"&&($="mathml"),f==null)ve(h,g,b,k,x,$,P,E);else{const R=f.el&&f.el._isVueCE?f.el:null;try{R&&R._beginPatch(),vt(f,h,k,x,$,P,E)}finally{R&&R._endPatch()}}},ve=(f,h,g,b,k,x,$,P)=>{let E,R;const{props:B,shapeFlag:O,transition:H,dirs:W}=f;if(E=f.el=i(f.type,x,B&&B.is,B),O&8?d(E,f.children):O&16&&Ce(f.children,E,null,b,k,an(f,x),$,P),W&&Pt(f,null,b,"created"),he(E,f,f.scopeId,$,b),B){for(const fe in B)fe!=="value"&&!is(fe)&&o(E,fe,null,B[fe],x,b);"value"in B&&o(E,"value",null,B.value,x),(R=B.onVnodeBeforeMount)&&tt(R,b,f)}W&&Pt(f,null,b,"beforeMount");const X=da(k,H);X&&H.beforeEnter(E),n(E,h,g),((R=B&&B.onVnodeMounted)||X||W)&&Fe(()=>{R&&tt(R,b,f),X&&H.enter(E),W&&Pt(f,null,b,"mounted")},k)},he=(f,h,g,b,k)=>{if(g&&v(f,g),b)for(let x=0;x{for(let R=E;R{const P=h.el=f.el;let{patchFlag:E,dynamicChildren:R,dirs:B}=h;E|=f.patchFlag&16;const O=f.props||ue,H=h.props||ue;let W;if(g&&$t(g,!1),(W=H.onVnodeBeforeUpdate)&&tt(W,g,h,f),B&&Pt(h,f,g,"beforeUpdate"),g&&$t(g,!0),(O.innerHTML&&H.innerHTML==null||O.textContent&&H.textContent==null)&&d(P,""),R?Qe(f.dynamicChildren,R,P,g,b,an(h,k),x):$||te(f,h,P,null,g,b,an(h,k),x,!1),E>0){if(E&16)yt(P,O,H,g,k);else if(E&2&&O.class!==H.class&&o(P,"class",null,H.class,k),E&4&&o(P,"style",O.style,H.style,k),E&8){const X=h.dynamicProps;for(let fe=0;fe{W&&tt(W,g,h,f),B&&Pt(h,f,g,"updated")},b)},Qe=(f,h,g,b,k,x,$)=>{for(let P=0;P{if(h!==g){if(h!==ue)for(const x in h)!is(x)&&!(x in g)&&o(f,x,h[x],null,k,b);for(const x in g){if(is(x))continue;const $=g[x],P=h[x];$!==P&&x!=="value"&&o(f,x,P,$,k,b)}"value"in g&&o(f,"value",h.value,g.value,k)}},At=(f,h,g,b,k,x,$,P,E)=>{const R=h.el=f?f.el:l(""),B=h.anchor=f?f.anchor:l("");let{patchFlag:O,dynamicChildren:H,slotScopeIds:W}=h;W&&(P=P?P.concat(W):W),f==null?(n(R,g,b),n(B,g,b),Ce(h.children||[],g,B,k,x,$,P,E)):O>0&&O&64&&H&&f.dynamicChildren?(Qe(f.dynamicChildren,H,g,k,x,$,P),(h.key!=null||k&&h===k.subTree)&&ei(f,h,!0)):te(f,h,g,B,k,x,$,P,E)},Je=(f,h,g,b,k,x,$,P,E)=>{h.slotScopeIds=P,f==null?h.shapeFlag&512?k.ctx.activate(h,g,b,$,E):es(h,g,b,k,x,$,E):Ft(f,h,E)},es=(f,h,g,b,k,x,$)=>{const P=f.component=ba(f,b,k);if(Io(f)&&(P.ctx.renderer=F),wa(P,!1,$),P.asyncDep){if(k&&k.registerDep(P,be,$),!f.el){const E=P.subTree=N(pt);j(null,E,h,g),f.placeholder=E.el}}else be(P,f,h,g,k,x,$)},Ft=(f,h,g)=>{const b=h.component=f.component;if(ta(f,h,g))if(b.asyncDep&&!b.asyncResolved){ce(b,h,g);return}else b.next=h,b.update();else h.el=f.el,b.vnode=h},be=(f,h,g,b,k,x,$)=>{const P=()=>{if(f.isMounted){let{next:O,bu:H,u:W,parent:X,vnode:fe}=f;{const Ze=ti(f);if(Ze){O&&(O.el=fe.el,ce(f,O,$)),Ze.asyncDep.then(()=>{f.isUnmounted||P()});return}}let le=O,Me;$t(f,!1),O?(O.el=fe.el,ce(f,O,$)):O=fe,H&&Ps(H),(Me=O.props&&O.props.onVnodeBeforeUpdate)&&tt(Me,X,O,fe),$t(f,!0);const De=gr(f),Xe=f.subTree;f.subTree=De,I(Xe,De,m(Xe.el),_(Xe),f,k,x),O.el=De.el,le===null&&sa(f,De.el),W&&Fe(W,k),(Me=O.props&&O.props.onVnodeUpdated)&&Fe(()=>tt(Me,X,O,fe),k)}else{let O;const{el:H,props:W}=h,{bm:X,m:fe,parent:le,root:Me,type:De}=f,Xe=zt(h);$t(f,!1),X&&Ps(X),!Xe&&(O=W&&W.onVnodeBeforeMount)&&tt(O,le,h),$t(f,!0);{Me.ce&&Me.ce._def.shadowRoot!==!1&&Me.ce._injectChildStyle(De);const Ze=f.subTree=gr(f);I(null,Ze,g,b,f,k,x),h.el=Ze.el}if(fe&&Fe(fe,k),!Xe&&(O=W&&W.onVnodeMounted)){const Ze=h;Fe(()=>tt(O,le,Ze),k)}(h.shapeFlag&256||le&&zt(le.vnode)&&le.vnode.shapeFlag&256)&&f.a&&Fe(f.a,k),f.isMounted=!0,h=g=b=null}};f.scope.on();const E=f.effect=new lo(P);f.scope.off();const R=f.update=E.run.bind(E),B=f.job=E.runIfDirty.bind(E);B.i=f,B.id=f.uid,E.scheduler=()=>Un(B),$t(f,!0),R()},ce=(f,h,g)=>{h.component=f;const b=f.vnode.props;f.vnode=h,f.next=null,ra(f,h.props,b,g),aa(f,h.children,g),ft(),cr(f),mt()},te=(f,h,g,b,k,x,$,P,E=!1)=>{const R=f&&f.children,B=f?f.shapeFlag:0,O=h.children,{patchFlag:H,shapeFlag:W}=h;if(H>0){if(H&128){xt(R,O,g,b,k,x,$,P,E);return}else if(H&256){it(R,O,g,b,k,x,$,P,E);return}}W&8?(B&16&&He(R,k,x),O!==R&&d(g,O)):B&16?W&16?xt(R,O,g,b,k,x,$,P,E):He(R,k,x,!0):(B&8&&d(g,""),W&16&&Ce(O,g,b,k,x,$,P,E))},it=(f,h,g,b,k,x,$,P,E)=>{f=f||qt,h=h||qt;const R=f.length,B=h.length,O=Math.min(R,B);let H;for(H=0;HB?He(f,k,x,!0,!1,O):Ce(h,g,b,k,x,$,P,E,O)},xt=(f,h,g,b,k,x,$,P,E)=>{let R=0;const B=h.length;let O=f.length-1,H=B-1;for(;R<=O&&R<=H;){const W=f[R],X=h[R]=E?kt(h[R]):nt(h[R]);if(ns(W,X))I(W,X,g,null,k,x,$,P,E);else break;R++}for(;R<=O&&R<=H;){const W=f[O],X=h[H]=E?kt(h[H]):nt(h[H]);if(ns(W,X))I(W,X,g,null,k,x,$,P,E);else break;O--,H--}if(R>O){if(R<=H){const W=H+1,X=WH)for(;R<=O;)Ne(f[R],k,x,!0),R++;else{const W=R,X=R,fe=new Map;for(R=X;R<=H;R++){const je=h[R]=E?kt(h[R]):nt(h[R]);je.key!=null&&fe.set(je.key,R)}let le,Me=0;const De=H-X+1;let Xe=!1,Ze=0;const ts=new Array(De);for(R=0;R=De){Ne(je,k,x,!0);continue}let et;if(je.key!=null)et=fe.get(je.key);else for(le=X;le<=H;le++)if(ts[le-X]===0&&ns(je,h[le])){et=le;break}et===void 0?Ne(je,k,x,!0):(ts[et-X]=R+1,et>=Ze?Ze=et:Xe=!0,I(je,h[et],g,null,k,x,$,P,E),Me++)}const tr=Xe?fa(ts):qt;for(le=tr.length-1,R=De-1;R>=0;R--){const je=X+R,et=h[je],sr=h[je+1],nr=je+1{const{el:x,type:$,transition:P,children:E,shapeFlag:R}=f;if(R&6){Ye(f.component.subTree,h,g,b);return}if(R&128){f.suspense.move(h,g,b);return}if(R&64){$.move(f,h,g,F);return}if($===J){n(x,h,g);for(let O=0;OP.enter(x),k);else{const{leave:O,delayLeave:H,afterLeave:W}=P,X=()=>{f.ctx.isUnmounted?r(x):n(x,h,g)},fe=()=>{x._isLeaving&&x[Rl](!0),O(x,()=>{X(),W&&W()})};H?H(x,X,fe):fe()}else n(x,h,g)},Ne=(f,h,g,b=!1,k=!1)=>{const{type:x,props:$,ref:P,children:E,dynamicChildren:R,shapeFlag:B,patchFlag:O,dirs:H,cacheIndex:W}=f;if(O===-2&&(k=!1),P!=null&&(ft(),cs(P,null,g,f,!0),mt()),W!=null&&(h.renderCache[W]=void 0),B&256){h.ctx.deactivate(f);return}const X=B&1&&H,fe=!zt(f);let le;if(fe&&(le=$&&$.onVnodeBeforeUnmount)&&tt(le,h,f),B&6)Et(f.component,g,b);else{if(B&128){f.suspense.unmount(g,b);return}X&&Pt(f,null,h,"beforeUnmount"),B&64?f.type.remove(f,h,g,F,b):R&&!R.hasOnce&&(x!==J||O>0&&O&64)?He(R,h,g,!1,!0):(x===J&&O&384||!k&&B&16)&&He(E,h,g),b&&Vt(f)}(fe&&(le=$&&$.onVnodeUnmounted)||X)&&Fe(()=>{le&&tt(le,h,f),X&&Pt(f,null,h,"unmounted")},g)},Vt=f=>{const{type:h,el:g,anchor:b,transition:k}=f;if(h===J){Ht(g,b);return}if(h===cn){L(f);return}const x=()=>{r(g),k&&!k.persisted&&k.afterLeave&&k.afterLeave()};if(f.shapeFlag&1&&k&&!k.persisted){const{leave:$,delayLeave:P}=k,E=()=>$(g,x);P?P(f.el,x,E):E()}else x()},Ht=(f,h)=>{let g;for(;f!==h;)g=p(f),r(f),f=g;r(h)},Et=(f,h,g)=>{const{bum:b,scope:k,job:x,subTree:$,um:P,m:E,a:R}=f;xr(E),xr(R),b&&Ps(b),k.stop(),x&&(x.flags|=8,Ne($,f,h,g)),P&&Fe(P,h),Fe(()=>{f.isUnmounted=!0},h)},He=(f,h,g,b=!1,k=!1,x=0)=>{for(let $=x;${if(f.shapeFlag&6)return _(f.component.subTree);if(f.shapeFlag&128)return f.suspense.next();const h=p(f.anchor||f.el),g=h&&h[kl];return g?p(g):h};let M=!1;const T=(f,h,g)=>{f==null?h._vnode&&Ne(h._vnode,null,null,!0):I(h._vnode||null,f,h,null,null,null,g),h._vnode=f,M||(M=!0,cr(),Eo(),M=!1)},F={p:I,um:Ne,m:Ye,r:Vt,mt:es,mc:Ce,pc:te,pbc:Qe,n:_,o:e};return{render:T,hydrate:void 0,createApp:Wl(T)}}function an({type:e,props:t},s){return s==="svg"&&e==="foreignObject"||s==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:s}function $t({effect:e,job:t},s){s?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function da(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function ei(e,t,s=!1){const n=e.children,r=t.children;if(G(n)&&G(r))for(let o=0;o>1,e[s[l]]0&&(t[n]=s[o-1]),s[o]=n)}}for(o=s.length,i=s[o-1];o-- >0;)s[o]=i,i=t[i];return s}function ti(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:ti(t)}function xr(e){if(e)for(let t=0;te.__isSuspense;function ma(e,t){t&&t.pendingBranch?G(e)?t.effects.push(...e):t.effects.push(e):_l(e)}const J=Symbol.for("v-fgt"),Js=Symbol.for("v-txt"),pt=Symbol.for("v-cmt"),cn=Symbol.for("v-stc"),fs=[];let Ve=null;function y(e=!1){fs.push(Ve=e?null:[])}function ha(){fs.pop(),Ve=fs[fs.length-1]||null}let vs=1;function Ls(e,t=!1){vs+=e,e<0&&Ve&&t&&(Ve.hasOnce=!0)}function ni(e){return e.dynamicChildren=vs>0?Ve||qt:null,ha(),vs>0&&Ve&&Ve.push(e),e}function C(e,t,s,n,r,o){return ni(u(e,t,s,n,r,o,!0))}function ie(e,t,s,n,r){return ni(N(e,t,s,n,r,!0))}function ys(e){return e?e.__v_isVNode===!0:!1}function ns(e,t){return e.type===t.type&&e.key===t.key}const ri=({key:e})=>e??null,$s=({ref:e,ref_key:t,ref_for:s})=>(typeof e=="number"&&(e=""+e),e!=null?ge(e)||Ee(e)||z(e)?{i:we,r:e,k:t,f:!!s}:e:null);function u(e,t=null,s=null,n=0,r=null,o=e===J?0:1,i=!1,l=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ri(t),ref:t&&$s(t),scopeId:$o,slotScopeIds:null,children:s,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:n,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:we};return l?(zn(a,s),o&128&&e.normalize(a)):s&&(a.shapeFlag|=ge(s)?8:16),vs>0&&!i&&Ve&&(a.patchFlag>0||o&6)&&a.patchFlag!==32&&Ve.push(a),a}const N=pa;function pa(e,t=null,s=null,n=0,r=null,o=!1){if((!e||e===Lo)&&(e=pt),ys(e)){const l=Yt(e,t,!0);return s&&zn(l,s),vs>0&&!o&&Ve&&(l.shapeFlag&6?Ve[Ve.indexOf(e)]=l:Ve.push(l)),l.patchFlag=-2,l}if(Aa(e)&&(e=e.__vccOpts),t){t=ga(t);let{class:l,style:a}=t;l&&!ge(l)&&(t.class=Q(l)),de(a)&&(Gn(a)&&!G(a)&&(a=$e({},a)),t.style=St(a))}const i=ge(e)?1:si(e)?128:Cl(e)?64:de(e)?4:z(e)?2:0;return u(e,t,s,n,r,i,o,!0)}function ga(e){return e?Gn(e)||zo(e)?$e({},e):e:null}function Yt(e,t,s=!1,n=!1){const{props:r,ref:o,patchFlag:i,children:l,transition:a}=e,c=t?va(r||{},t):r,d={__v_isVNode:!0,__v_skip:!0,type:e.type,props:c,key:c&&ri(c),ref:t&&t.ref?s&&o?G(o)?o.concat($s(t)):[o,$s(t)]:$s(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==J?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:a,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Yt(e.ssContent),ssFallback:e.ssFallback&&Yt(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return a&&n&&qn(d,a.clone(d)),d}function ae(e=" ",t=0){return N(Js,null,e,t)}function q(e="",t=!1){return t?(y(),ie(pt,null,e)):N(pt,null,e)}function nt(e){return e==null||typeof e=="boolean"?N(pt):G(e)?N(J,null,e.slice()):ys(e)?kt(e):N(Js,null,String(e))}function kt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Yt(e)}function zn(e,t){let s=0;const{shapeFlag:n}=e;if(t==null)t=null;else if(G(t))s=16;else if(typeof t=="object")if(n&65){const r=t.default;r&&(r._c&&(r._d=!1),zn(e,r()),r._c&&(r._d=!0));return}else{s=32;const r=t._;!r&&!zo(t)?t._ctx=we:r===3&&we&&(we.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else z(t)?(t={default:t,_ctx:we},s=32):(t=String(t),n&64?(s=16,t=[ae(t)]):s=8);e.children=t,e.shapeFlag|=s}function va(...e){const t={};for(let s=0;sAe||we;let js,An;{const e=Gs(),t=(s,n)=>{let r;return(r=e[s])||(r=e[s]=[]),r.push(n),o=>{r.length>1?r.forEach(i=>i(o)):r[0](o)}};js=t("__VUE_INSTANCE_SETTERS__",s=>Ae=s),An=t("__VUE_SSR_SETTERS__",s=>xs=s)}const Cs=e=>{const t=Ae;return js(e),e.scope.on(),()=>{e.scope.off(),js(t)}},br=()=>{Ae&&Ae.scope.off(),js(null)};function oi(e){return e.vnode.shapeFlag&4}let xs=!1;function wa(e,t=!1,s=!1){t&&An(t);const{props:n,children:r}=e.vnode,o=oi(e);na(e,n,o,t),la(e,r,s||t);const i=o?ka(e,t):void 0;return t&&An(!1),i}function ka(e,t){const s=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Fl);const{setup:n}=s;if(n){ft();const r=e.setupContext=n.length>1?Ra(e):null,o=Cs(e),i=ks(n,e,0,[e.props,r]),l=Zr(i);if(mt(),o(),(l||e.sp)&&!zt(e)&&Oo(e),l){if(i.then(br,br),t)return i.then(a=>{_r(e,a)}).catch(a=>{Ks(a,e,0)});e.asyncDep=i}else _r(e,i)}else ii(e)}function _r(e,t,s){z(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:de(t)&&(e.setupState=Co(t)),ii(e)}function ii(e,t,s){const n=e.type;e.render||(e.render=n.render||rt);{const r=Cs(e);ft();try{Vl(e)}finally{mt(),r()}}}const Ca={get(e,t){return Se(e,"get",""),e[t]}};function Ra(e){const t=s=>{e.exposed=s||{}};return{attrs:new Proxy(e.attrs,Ca),slots:e.slots,emit:e.emit,expose:t}}function Ys(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Co(dl(e.exposed)),{get(t,s){if(s in t)return t[s];if(s in us)return us[s](e)},has(t,s){return s in t||s in us}})):e.proxy}function Sa(e,t=!0){return z(e)?e.displayName||e.name:e.name||t&&e.__name}function Aa(e){return z(e)&&"__vccOpts"in e}const oe=(e,t)=>gl(e,t,xs);function li(e,t,s){try{Ls(-1);const n=arguments.length;return n===2?de(t)&&!G(t)?ys(t)?N(e,null,[t]):N(e,t):N(e,null,t):(n>3?s=Array.prototype.slice.call(arguments,2):n===3&&ys(s)&&(s=[s]),N(e,t,s))}finally{Ls(1)}}const Ea="3.5.25";let En;const wr=typeof window<"u"&&window.trustedTypes;if(wr)try{En=wr.createPolicy("vue",{createHTML:e=>e})}catch{}const ai=En?e=>En.createHTML(e):e=>e,Pa="http://www.w3.org/2000/svg",$a="http://www.w3.org/1998/Math/MathML",ct=typeof document<"u"?document:null,kr=ct&&ct.createElement("template"),Ta={insert:(e,t,s)=>{t.insertBefore(e,s||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,s,n)=>{const r=t==="svg"?ct.createElementNS(Pa,e):t==="mathml"?ct.createElementNS($a,e):s?ct.createElement(e,{is:s}):ct.createElement(e);return e==="select"&&n&&n.multiple!=null&&r.setAttribute("multiple",n.multiple),r},createText:e=>ct.createTextNode(e),createComment:e=>ct.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>ct.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,s,n,r,o){const i=s?s.previousSibling:t.lastChild;if(r&&(r===o||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),s),!(r===o||!(r=r.nextSibling)););else{kr.innerHTML=ai(n==="svg"?``:n==="mathml"?``:e);const l=kr.content;if(n==="svg"||n==="mathml"){const a=l.firstChild;for(;a.firstChild;)l.appendChild(a.firstChild);l.removeChild(a)}t.insertBefore(l,s)}return[i?i.nextSibling:t.firstChild,s?s.previousSibling:t.lastChild]}},Oa=Symbol("_vtc");function Ia(e,t,s){const n=e[Oa];n&&(t=(t?[t,...n]:[...n]).join(" ")),t==null?e.removeAttribute("class"):s?e.setAttribute("class",t):e.className=t}const Cr=Symbol("_vod"),Na=Symbol("_vsh"),Ma=Symbol(""),Da=/(?:^|;)\s*display\s*:/;function La(e,t,s){const n=e.style,r=ge(s);let o=!1;if(s&&!r){if(t)if(ge(t))for(const i of t.split(";")){const l=i.slice(0,i.indexOf(":")).trim();s[l]==null&&Ts(n,l,"")}else for(const i in t)s[i]==null&&Ts(n,i,"");for(const i in s)i==="display"&&(o=!0),Ts(n,i,s[i])}else if(r){if(t!==s){const i=n[Ma];i&&(s+=";"+i),n.cssText=s,o=Da.test(s)}}else t&&e.removeAttribute("style");Cr in e&&(e[Cr]=o?n.display:"",e[Na]&&(n.display="none"))}const Rr=/\s*!important$/;function Ts(e,t,s){if(G(s))s.forEach(n=>Ts(e,t,n));else if(s==null&&(s=""),t.startsWith("--"))e.setProperty(t,s);else{const n=ja(e,t);Rr.test(s)?e.setProperty(Lt(n),s.replace(Rr,""),"important"):e[n]=s}}const Sr=["Webkit","Moz","ms"],un={};function ja(e,t){const s=un[t];if(s)return s;let n=Ue(t);if(n!=="filter"&&n in e)return un[t]=n;n=Bs(n);for(let r=0;rdn||(Ba.then(()=>dn=0),dn=Date.now());function Ua(e,t){const s=n=>{if(!n._vts)n._vts=Date.now();else if(n._vts<=s.attached)return;ot(qa(n,s.value),t,5,[n])};return s.value=e,s.attached=Ga(),s}function qa(e,t){if(G(t)){const s=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{s.call(e),e._stopped=!0},t.map(n=>r=>!r._stopped&&n&&n(r))}else return t}const Or=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Wa=(e,t,s,n,r,o)=>{const i=r==="svg";t==="class"?Ia(e,n,i):t==="style"?La(e,s,n):Fs(t)?Nn(t)||Va(e,t,s,n,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Ka(e,t,n,i))?(Pr(e,t,n),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Er(e,t,n,i,o,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!ge(n))?Pr(e,Ue(t),n,o,t):(t==="true-value"?e._trueValue=n:t==="false-value"&&(e._falseValue=n),Er(e,t,n,i))};function Ka(e,t,s,n){if(n)return!!(t==="innerHTML"||t==="textContent"||t in e&&Or(t)&&z(s));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return Or(t)&&ge(s)?!1:t in e}const Ir=e=>{const t=e.props["onUpdate:modelValue"]||!1;return G(t)?s=>Ps(t,s):t},fn=Symbol("_assign"),za={deep:!0,created(e,t,s){e[fn]=Ir(s),ci(e,"change",()=>{const n=e._modelValue,r=Qa(e),o=e.checked,i=e[fn];if(G(n)){const l=ro(n,r),a=l!==-1;if(o&&!a)i(n.concat(r));else if(!o&&a){const c=[...n];c.splice(l,1),i(c)}}else if(Vs(n)){const l=new Set(n);o?l.add(r):l.delete(r),i(l)}else i(ui(e,o))})},mounted:Nr,beforeUpdate(e,t,s){e[fn]=Ir(s),Nr(e,t,s)}};function Nr(e,{value:t,oldValue:s},n){e._modelValue=t;let r;if(G(t))r=ro(t,n.props.value)>-1;else if(Vs(t))r=t.has(n.props.value);else{if(t===s)return;r=Us(t,ui(e,!0))}e.checked!==r&&(e.checked=r)}function Qa(e){return"_value"in e?e._value:e.value}function ui(e,t){const s=t?"_trueValue":"_falseValue";return s in e?e[s]:t}const Ja=["ctrl","shift","alt","meta"],Ya={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Ja.some(s=>e[`${s}Key`]&&!t.includes(s))},Qn=(e,t)=>{const s=e._withMods||(e._withMods={}),n=t.join(".");return s[n]||(s[n]=((r,...o)=>{for(let i=0;i{const t=Za().createApp(...e),{mount:s}=t;return t.mount=n=>{const r=sc(n);if(!r)return;const o=t._component;!z(o)&&!o.render&&!o.template&&(o.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const i=s(r,!1,tc(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),i},t});function tc(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function sc(e){return ge(e)?document.querySelector(e):e}const Ut=typeof document<"u";function di(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function nc(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&di(e.default)}const se=Object.assign;function mn(e,t){const s={};for(const n in t){const r=t[n];s[n]=ze(r)?r.map(e):e(r)}return s}const ms=()=>{},ze=Array.isArray;function Dr(e,t){const s={};for(const n in e)s[n]=n in t?t[n]:e[n];return s}const fi=/#/g,rc=/&/g,oc=/\//g,ic=/=/g,lc=/\?/g,mi=/\+/g,ac=/%5B/g,cc=/%5D/g,hi=/%5E/g,uc=/%60/g,pi=/%7B/g,dc=/%7C/g,gi=/%7D/g,fc=/%20/g;function Jn(e){return e==null?"":encodeURI(""+e).replace(dc,"|").replace(ac,"[").replace(cc,"]")}function mc(e){return Jn(e).replace(pi,"{").replace(gi,"}").replace(hi,"^")}function Pn(e){return Jn(e).replace(mi,"%2B").replace(fc,"+").replace(fi,"%23").replace(rc,"%26").replace(uc,"`").replace(pi,"{").replace(gi,"}").replace(hi,"^")}function hc(e){return Pn(e).replace(ic,"%3D")}function pc(e){return Jn(e).replace(fi,"%23").replace(lc,"%3F")}function gc(e){return pc(e).replace(oc,"%2F")}function bs(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}const vc=/\/$/,yc=e=>e.replace(vc,"");function hn(e,t,s="/"){let n,r={},o="",i="";const l=t.indexOf("#");let a=t.indexOf("?");return a=l>=0&&a>l?-1:a,a>=0&&(n=t.slice(0,a),o=t.slice(a,l>0?l:t.length),r=e(o.slice(1))),l>=0&&(n=n||t.slice(0,l),i=t.slice(l,t.length)),n=wc(n??t,s),{fullPath:n+o+i,path:n,query:r,hash:bs(i)}}function xc(e,t){const s=t.query?e(t.query):"";return t.path+(s&&"?")+s+(t.hash||"")}function Lr(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function bc(e,t,s){const n=t.matched.length-1,r=s.matched.length-1;return n>-1&&n===r&&Xt(t.matched[n],s.matched[r])&&vi(t.params,s.params)&&e(t.query)===e(s.query)&&t.hash===s.hash}function Xt(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function vi(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const s in e)if(!_c(e[s],t[s]))return!1;return!0}function _c(e,t){return ze(e)?jr(e,t):ze(t)?jr(t,e):e===t}function jr(e,t){return ze(t)?e.length===t.length&&e.every((s,n)=>s===t[n]):e.length===1&&e[0]===t}function wc(e,t){if(e.startsWith("/"))return e;if(!e)return t;const s=t.split("/"),n=e.split("/"),r=n[n.length-1];(r===".."||r===".")&&n.push("");let o=s.length-1,i,l;for(i=0;i1&&o--;else break;return s.slice(0,o).join("/")+"/"+n.slice(i).join("/")}const bt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};let $n=(function(e){return e.pop="pop",e.push="push",e})({}),pn=(function(e){return e.back="back",e.forward="forward",e.unknown="",e})({});function kc(e){if(!e)if(Ut){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),yc(e)}const Cc=/^[^#]+#/;function Rc(e,t){return e.replace(Cc,"#")+t}function Sc(e,t){const s=document.documentElement.getBoundingClientRect(),n=e.getBoundingClientRect();return{behavior:t.behavior,left:n.left-s.left-(t.left||0),top:n.top-s.top-(t.top||0)}}const Xs=()=>({left:window.scrollX,top:window.scrollY});function Ac(e){let t;if("el"in e){const s=e.el,n=typeof s=="string"&&s.startsWith("#"),r=typeof s=="string"?n?document.getElementById(s.slice(1)):document.querySelector(s):s;if(!r)return;t=Sc(r,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function Fr(e,t){return(history.state?history.state.position-t:-1)+e}const Tn=new Map;function Ec(e,t){Tn.set(e,t)}function Pc(e){const t=Tn.get(e);return Tn.delete(e),t}function $c(e){return typeof e=="string"||e&&typeof e=="object"}function yi(e){return typeof e=="string"||typeof e=="symbol"}let pe=(function(e){return e[e.MATCHER_NOT_FOUND=1]="MATCHER_NOT_FOUND",e[e.NAVIGATION_GUARD_REDIRECT=2]="NAVIGATION_GUARD_REDIRECT",e[e.NAVIGATION_ABORTED=4]="NAVIGATION_ABORTED",e[e.NAVIGATION_CANCELLED=8]="NAVIGATION_CANCELLED",e[e.NAVIGATION_DUPLICATED=16]="NAVIGATION_DUPLICATED",e})({});const xi=Symbol("");pe.MATCHER_NOT_FOUND+"",pe.NAVIGATION_GUARD_REDIRECT+"",pe.NAVIGATION_ABORTED+"",pe.NAVIGATION_CANCELLED+"",pe.NAVIGATION_DUPLICATED+"";function Zt(e,t){return se(new Error,{type:e,[xi]:!0},t)}function at(e,t){return e instanceof Error&&xi in e&&(t==null||!!(e.type&t))}const Tc=["params","query","hash"];function Oc(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;const t={};for(const s of Tc)s in e&&(t[s]=e[s]);return JSON.stringify(t,null,2)}function Ic(e){const t={};if(e===""||e==="?")return t;const s=(e[0]==="?"?e.slice(1):e).split("&");for(let n=0;nr&&Pn(r)):[n&&Pn(n)]).forEach(r=>{r!==void 0&&(t+=(t.length?"&":"")+s,r!=null&&(t+="="+r))})}return t}function Nc(e){const t={};for(const s in e){const n=e[s];n!==void 0&&(t[s]=ze(n)?n.map(r=>r==null?null:""+r):n==null?n:""+n)}return t}const Mc=Symbol(""),Hr=Symbol(""),Yn=Symbol(""),Xn=Symbol(""),On=Symbol("");function rs(){let e=[];function t(n){return e.push(n),()=>{const r=e.indexOf(n);r>-1&&e.splice(r,1)}}function s(){e=[]}return{add:t,list:()=>e.slice(),reset:s}}function Ct(e,t,s,n,r,o=i=>i()){const i=n&&(n.enterCallbacks[r]=n.enterCallbacks[r]||[]);return()=>new Promise((l,a)=>{const c=p=>{p===!1?a(Zt(pe.NAVIGATION_ABORTED,{from:s,to:t})):p instanceof Error?a(p):$c(p)?a(Zt(pe.NAVIGATION_GUARD_REDIRECT,{from:t,to:p})):(i&&n.enterCallbacks[r]===i&&typeof p=="function"&&i.push(p),l())},d=o(()=>e.call(n&&n.instances[r],t,s,c));let m=Promise.resolve(d);e.length<3&&(m=m.then(c)),m.catch(p=>a(p))})}function gn(e,t,s,n,r=o=>o()){const o=[];for(const i of e)for(const l in i.components){let a=i.components[l];if(!(t!=="beforeRouteEnter"&&!i.instances[l]))if(di(a)){const c=(a.__vccOpts||a)[t];c&&o.push(Ct(c,s,n,i,l,r))}else{let c=a();o.push(()=>c.then(d=>{if(!d)throw new Error(`Couldn't resolve component "${l}" at "${i.path}"`);const m=nc(d)?d.default:d;i.mods[l]=d,i.components[l]=m;const p=(m.__vccOpts||m)[t];return p&&Ct(p,s,n,i,l,r)()}))}}return o}function Dc(e,t){const s=[],n=[],r=[],o=Math.max(t.matched.length,e.matched.length);for(let i=0;iXt(c,l))?n.push(l):s.push(l));const a=e.matched[i];a&&(t.matched.find(c=>Xt(c,a))||r.push(a))}return[s,n,r]}let Lc=()=>location.protocol+"//"+location.host;function bi(e,t){const{pathname:s,search:n,hash:r}=t,o=e.indexOf("#");if(o>-1){let i=r.includes(e.slice(o))?e.slice(o).length:1,l=r.slice(i);return l[0]!=="/"&&(l="/"+l),Lr(l,"")}return Lr(s,e)+n+r}function jc(e,t,s,n){let r=[],o=[],i=null;const l=({state:p})=>{const v=bi(e,location),S=s.value,I=t.value;let K=0;if(p){if(s.value=v,t.value=p,i&&i===S){i=null;return}K=I?p.position-I.position:0}else n(v);r.forEach(j=>{j(s.value,S,{delta:K,type:$n.pop,direction:K?K>0?pn.forward:pn.back:pn.unknown})})};function a(){i=s.value}function c(p){r.push(p);const v=()=>{const S=r.indexOf(p);S>-1&&r.splice(S,1)};return o.push(v),v}function d(){if(document.visibilityState==="hidden"){const{history:p}=window;if(!p.state)return;p.replaceState(se({},p.state,{scroll:Xs()}),"")}}function m(){for(const p of o)p();o=[],window.removeEventListener("popstate",l),window.removeEventListener("pagehide",d),document.removeEventListener("visibilitychange",d)}return window.addEventListener("popstate",l),window.addEventListener("pagehide",d),document.addEventListener("visibilitychange",d),{pauseListeners:a,listen:c,destroy:m}}function Br(e,t,s,n=!1,r=!1){return{back:e,current:t,forward:s,replaced:n,position:window.history.length,scroll:r?Xs():null}}function Fc(e){const{history:t,location:s}=window,n={value:bi(e,s)},r={value:t.state};r.value||o(n.value,{back:null,current:n.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function o(a,c,d){const m=e.indexOf("#"),p=m>-1?(s.host&&document.querySelector("base")?e:e.slice(m))+a:Lc()+e+a;try{t[d?"replaceState":"pushState"](c,"",p),r.value=c}catch(v){console.error(v),s[d?"replace":"assign"](p)}}function i(a,c){o(a,se({},t.state,Br(r.value.back,a,r.value.forward,!0),c,{position:r.value.position}),!0),n.value=a}function l(a,c){const d=se({},r.value,t.state,{forward:a,scroll:Xs()});o(d.current,d,!0),o(a,se({},Br(n.value,a,null),{position:d.position+1},c),!1),n.value=a}return{location:n,state:r,push:l,replace:i}}function Vc(e){e=kc(e);const t=Fc(e),s=jc(e,t.state,t.location,t.replace);function n(o,i=!0){i||s.pauseListeners(),history.go(o)}const r=se({location:"",base:e,go:n,createHref:Rc.bind(null,e)},t,s);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}function Hc(e){return e=location.host?e||location.pathname+location.search:"",e.includes("#")||(e+="#"),Vc(e)}let Ot=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e})({});var ye=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e})(ye||{});const Bc={type:Ot.Static,value:""},Gc=/[a-zA-Z0-9_]/;function Uc(e){if(!e)return[[]];if(e==="/")return[[Bc]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(v){throw new Error(`ERR (${s})/"${c}": ${v}`)}let s=ye.Static,n=s;const r=[];let o;function i(){o&&r.push(o),o=[]}let l=0,a,c="",d="";function m(){c&&(s===ye.Static?o.push({type:Ot.Static,value:c}):s===ye.Param||s===ye.ParamRegExp||s===ye.ParamRegExpEnd?(o.length>1&&(a==="*"||a==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),o.push({type:Ot.Param,value:c,regexp:d,repeatable:a==="*"||a==="+",optional:a==="*"||a==="?"})):t("Invalid state to consume buffer"),c="")}function p(){c+=a}for(;lt.length?t.length===1&&t[0]===Oe.Static+Oe.Segment?1:-1:0}function _i(e,t){let s=0;const n=e.score,r=t.score;for(;s0&&t[t.length-1]<0}const Qc={strict:!1,end:!0,sensitive:!1};function Jc(e,t,s){const n=Kc(Uc(e.path),s),r=se(n,{record:e,parent:t,children:[],alias:[]});return t&&!r.record.aliasOf==!t.record.aliasOf&&t.children.push(r),r}function Yc(e,t){const s=[],n=new Map;t=Dr(Qc,t);function r(m){return n.get(m)}function o(m,p,v){const S=!v,I=Wr(m);I.aliasOf=v&&v.record;const K=Dr(t,m),j=[I];if("alias"in m){const L=typeof m.alias=="string"?[m.alias]:m.alias;for(const ee of L)j.push(Wr(se({},I,{components:v?v.record.components:I.components,path:ee,aliasOf:v?v.record:I})))}let D,V;for(const L of j){const{path:ee}=L;if(p&&ee[0]!=="/"){const ve=p.record.path,he=ve[ve.length-1]==="/"?"":"/";L.path=p.record.path+(ee&&he+ee)}if(D=Jc(L,p,K),v?v.alias.push(D):(V=V||D,V!==D&&V.alias.push(D),S&&m.name&&!Kr(D)&&i(m.name)),wi(D)&&a(D),I.children){const ve=I.children;for(let he=0;he{i(V)}:ms}function i(m){if(yi(m)){const p=n.get(m);p&&(n.delete(m),s.splice(s.indexOf(p),1),p.children.forEach(i),p.alias.forEach(i))}else{const p=s.indexOf(m);p>-1&&(s.splice(p,1),m.record.name&&n.delete(m.record.name),m.children.forEach(i),m.alias.forEach(i))}}function l(){return s}function a(m){const p=eu(m,s);s.splice(p,0,m),m.record.name&&!Kr(m)&&n.set(m.record.name,m)}function c(m,p){let v,S={},I,K;if("name"in m&&m.name){if(v=n.get(m.name),!v)throw Zt(pe.MATCHER_NOT_FOUND,{location:m});K=v.record.name,S=se(qr(p.params,v.keys.filter(V=>!V.optional).concat(v.parent?v.parent.keys.filter(V=>V.optional):[]).map(V=>V.name)),m.params&&qr(m.params,v.keys.map(V=>V.name))),I=v.stringify(S)}else if(m.path!=null)I=m.path,v=s.find(V=>V.re.test(I)),v&&(S=v.parse(I),K=v.record.name);else{if(v=p.name?n.get(p.name):s.find(V=>V.re.test(p.path)),!v)throw Zt(pe.MATCHER_NOT_FOUND,{location:m,currentLocation:p});K=v.record.name,S=se({},p.params,m.params),I=v.stringify(S)}const j=[];let D=v;for(;D;)j.unshift(D.record),D=D.parent;return{name:K,path:I,params:S,matched:j,meta:Zc(j)}}e.forEach(m=>o(m));function d(){s.length=0,n.clear()}return{addRoute:o,resolve:c,removeRoute:i,clearRoutes:d,getRoutes:l,getRecordMatcher:r}}function qr(e,t){const s={};for(const n of t)n in e&&(s[n]=e[n]);return s}function Wr(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:Xc(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function Xc(e){const t={},s=e.props||!1;if("component"in e)t.default=s;else for(const n in e.components)t[n]=typeof s=="object"?s[n]:s;return t}function Kr(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Zc(e){return e.reduce((t,s)=>se(t,s.meta),{})}function eu(e,t){let s=0,n=t.length;for(;s!==n;){const o=s+n>>1;_i(e,t[o])<0?n=o:s=o+1}const r=tu(e);return r&&(n=t.lastIndexOf(r,n-1)),n}function tu(e){let t=e;for(;t=t.parent;)if(wi(t)&&_i(e,t)===0)return t}function wi({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function zr(e){const t=Pe(Yn),s=Pe(Xn),n=oe(()=>{const a=A(e.to);return t.resolve(a)}),r=oe(()=>{const{matched:a}=n.value,{length:c}=a,d=a[c-1],m=s.matched;if(!d||!m.length)return-1;const p=m.findIndex(Xt.bind(null,d));if(p>-1)return p;const v=Qr(a[c-2]);return c>1&&Qr(d)===v&&m[m.length-1].path!==v?m.findIndex(Xt.bind(null,a[c-2])):p}),o=oe(()=>r.value>-1&&ou(s.params,n.value.params)),i=oe(()=>r.value>-1&&r.value===s.matched.length-1&&vi(s.params,n.value.params));function l(a={}){if(ru(a)){const c=t[A(e.replace)?"replace":"push"](A(e.to)).catch(ms);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>c),c}return Promise.resolve()}return{route:n,href:oe(()=>n.value.href),isActive:o,isExactActive:i,navigate:l}}function su(e){return e.length===1?e[0]:e}const nu=To({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:zr,setup(e,{slots:t}){const s=Ws(zr(e)),{options:n}=Pe(Yn),r=oe(()=>({[Jr(e.activeClass,n.linkActiveClass,"router-link-active")]:s.isActive,[Jr(e.exactActiveClass,n.linkExactActiveClass,"router-link-exact-active")]:s.isExactActive}));return()=>{const o=t.default&&su(t.default(s));return e.custom?o:li("a",{"aria-current":s.isExactActive?e.ariaCurrentValue:null,href:s.href,onClick:s.navigate,class:r.value},o)}}}),Re=nu;function ru(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function ou(e,t){for(const s in t){const n=t[s],r=e[s];if(typeof n=="string"){if(n!==r)return!1}else if(!ze(r)||r.length!==n.length||n.some((o,i)=>o!==r[i]))return!1}return!0}function Qr(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Jr=(e,t,s)=>e??t??s,iu=To({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:s}){const n=Pe(On),r=oe(()=>e.route||n.value),o=Pe(Hr,0),i=oe(()=>{let c=A(o);const{matched:d}=r.value;let m;for(;(m=d[c])&&!m.components;)c++;return c}),l=oe(()=>r.value.matched[i.value]);ds(Hr,oe(()=>i.value+1)),ds(Mc,l),ds(On,r);const a=ke();return Ge(()=>[a.value,l.value,e.name],([c,d,m],[p,v,S])=>{d&&(d.instances[m]=c,v&&v!==d&&c&&c===p&&(d.leaveGuards.size||(d.leaveGuards=v.leaveGuards),d.updateGuards.size||(d.updateGuards=v.updateGuards))),c&&d&&(!v||!Xt(d,v)||!p)&&(d.enterCallbacks[m]||[]).forEach(I=>I(c))},{flush:"post"}),()=>{const c=r.value,d=e.name,m=l.value,p=m&&m.components[d];if(!p)return Yr(s.default,{Component:p,route:c});const v=m.props[d],S=v?v===!0?c.params:typeof v=="function"?v(c):v:null,K=li(p,se({},S,t,{onVnodeUnmounted:j=>{j.component.isUnmounted&&(m.instances[d]=null)},ref:a}));return Yr(s.default,{Component:K,route:c})||K}}});function Yr(e,t){if(!e)return null;const s=e(t);return s.length===1?s[0]:s}const lu=iu;function au(e){const t=Yc(e.routes,e),s=e.parseQuery||Ic,n=e.stringifyQuery||Vr,r=e.history,o=rs(),i=rs(),l=rs(),a=fl(bt);let c=bt;Ut&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const d=mn.bind(null,_=>""+_),m=mn.bind(null,gc),p=mn.bind(null,bs);function v(_,M){let T,F;return yi(_)?(T=t.getRecordMatcher(_),F=M):F=_,t.addRoute(F,T)}function S(_){const M=t.getRecordMatcher(_);M&&t.removeRoute(M)}function I(){return t.getRoutes().map(_=>_.record)}function K(_){return!!t.getRecordMatcher(_)}function j(_,M){if(M=se({},M||a.value),typeof _=="string"){const g=hn(s,_,M.path),b=t.resolve({path:g.path},M),k=r.createHref(g.fullPath);return se(g,b,{params:p(b.params),hash:bs(g.hash),redirectedFrom:void 0,href:k})}let T;if(_.path!=null)T=se({},_,{path:hn(s,_.path,M.path).path});else{const g=se({},_.params);for(const b in g)g[b]==null&&delete g[b];T=se({},_,{params:m(g)}),M.params=m(M.params)}const F=t.resolve(T,M),Y=_.hash||"";F.params=d(p(F.params));const f=xc(n,se({},_,{hash:mc(Y),path:F.path})),h=r.createHref(f);return se({fullPath:f,hash:Y,query:n===Vr?Nc(_.query):_.query||{}},F,{redirectedFrom:void 0,href:h})}function D(_){return typeof _=="string"?hn(s,_,a.value.path):se({},_)}function V(_,M){if(c!==_)return Zt(pe.NAVIGATION_CANCELLED,{from:M,to:_})}function L(_){return he(_)}function ee(_){return L(se(D(_),{replace:!0}))}function ve(_,M){const T=_.matched[_.matched.length-1];if(T&&T.redirect){const{redirect:F}=T;let Y=typeof F=="function"?F(_,M):F;return typeof Y=="string"&&(Y=Y.includes("?")||Y.includes("#")?Y=D(Y):{path:Y},Y.params={}),se({query:_.query,hash:_.hash,params:Y.path!=null?{}:_.params},Y)}}function he(_,M){const T=c=j(_),F=a.value,Y=_.state,f=_.force,h=_.replace===!0,g=ve(T,F);if(g)return he(se(D(g),{state:typeof g=="object"?se({},Y,g.state):Y,force:f,replace:h}),M||T);const b=T;b.redirectedFrom=M;let k;return!f&&bc(n,F,T)&&(k=Zt(pe.NAVIGATION_DUPLICATED,{to:b,from:F}),Ye(F,F,!0,!1)),(k?Promise.resolve(k):Qe(b,F)).catch(x=>at(x)?at(x,pe.NAVIGATION_GUARD_REDIRECT)?x:xt(x):te(x,b,F)).then(x=>{if(x){if(at(x,pe.NAVIGATION_GUARD_REDIRECT))return he(se({replace:h},D(x.to),{state:typeof x.to=="object"?se({},Y,x.to.state):Y,force:f}),M||b)}else x=At(b,F,!0,h,Y);return yt(b,F,x),x})}function Ce(_,M){const T=V(_,M);return T?Promise.reject(T):Promise.resolve()}function vt(_){const M=Ht.values().next().value;return M&&typeof M.runWithContext=="function"?M.runWithContext(_):_()}function Qe(_,M){let T;const[F,Y,f]=Dc(_,M);T=gn(F.reverse(),"beforeRouteLeave",_,M);for(const g of F)g.leaveGuards.forEach(b=>{T.push(Ct(b,_,M))});const h=Ce.bind(null,_,M);return T.push(h),He(T).then(()=>{T=[];for(const g of o.list())T.push(Ct(g,_,M));return T.push(h),He(T)}).then(()=>{T=gn(Y,"beforeRouteUpdate",_,M);for(const g of Y)g.updateGuards.forEach(b=>{T.push(Ct(b,_,M))});return T.push(h),He(T)}).then(()=>{T=[];for(const g of f)if(g.beforeEnter)if(ze(g.beforeEnter))for(const b of g.beforeEnter)T.push(Ct(b,_,M));else T.push(Ct(g.beforeEnter,_,M));return T.push(h),He(T)}).then(()=>(_.matched.forEach(g=>g.enterCallbacks={}),T=gn(f,"beforeRouteEnter",_,M,vt),T.push(h),He(T))).then(()=>{T=[];for(const g of i.list())T.push(Ct(g,_,M));return T.push(h),He(T)}).catch(g=>at(g,pe.NAVIGATION_CANCELLED)?g:Promise.reject(g))}function yt(_,M,T){l.list().forEach(F=>vt(()=>F(_,M,T)))}function At(_,M,T,F,Y){const f=V(_,M);if(f)return f;const h=M===bt,g=Ut?history.state:{};T&&(F||h?r.replace(_.fullPath,se({scroll:h&&g&&g.scroll},Y)):r.push(_.fullPath,Y)),a.value=_,Ye(_,M,T,h),xt()}let Je;function es(){Je||(Je=r.listen((_,M,T)=>{if(!Et.listening)return;const F=j(_),Y=ve(F,Et.currentRoute.value);if(Y){he(se(Y,{replace:!0,force:!0}),F).catch(ms);return}c=F;const f=a.value;Ut&&Ec(Fr(f.fullPath,T.delta),Xs()),Qe(F,f).catch(h=>at(h,pe.NAVIGATION_ABORTED|pe.NAVIGATION_CANCELLED)?h:at(h,pe.NAVIGATION_GUARD_REDIRECT)?(he(se(D(h.to),{force:!0}),F).then(g=>{at(g,pe.NAVIGATION_ABORTED|pe.NAVIGATION_DUPLICATED)&&!T.delta&&T.type===$n.pop&&r.go(-1,!1)}).catch(ms),Promise.reject()):(T.delta&&r.go(-T.delta,!1),te(h,F,f))).then(h=>{h=h||At(F,f,!1),h&&(T.delta&&!at(h,pe.NAVIGATION_CANCELLED)?r.go(-T.delta,!1):T.type===$n.pop&&at(h,pe.NAVIGATION_ABORTED|pe.NAVIGATION_DUPLICATED)&&r.go(-1,!1)),yt(F,f,h)}).catch(ms)}))}let Ft=rs(),be=rs(),ce;function te(_,M,T){xt(_);const F=be.list();return F.length?F.forEach(Y=>Y(_,M,T)):console.error(_),Promise.reject(_)}function it(){return ce&&a.value!==bt?Promise.resolve():new Promise((_,M)=>{Ft.add([_,M])})}function xt(_){return ce||(ce=!_,es(),Ft.list().forEach(([M,T])=>_?T(_):M()),Ft.reset()),_}function Ye(_,M,T,F){const{scrollBehavior:Y}=e;if(!Ut||!Y)return Promise.resolve();const f=!T&&Pc(Fr(_.fullPath,0))||(F||!T)&&history.state&&history.state.scroll||null;return So().then(()=>Y(_,M,f)).then(h=>h&&Ac(h)).catch(h=>te(h,_,M))}const Ne=_=>r.go(_);let Vt;const Ht=new Set,Et={currentRoute:a,listening:!0,addRoute:v,removeRoute:S,clearRoutes:t.clearRoutes,hasRoute:K,getRoutes:I,resolve:j,options:e,push:L,replace:ee,go:Ne,back:()=>Ne(-1),forward:()=>Ne(1),beforeEach:o.add,beforeResolve:i.add,afterEach:l.add,onError:be.add,isReady:it,install(_){_.component("RouterLink",Re),_.component("RouterView",lu),_.config.globalProperties.$router=Et,Object.defineProperty(_.config.globalProperties,"$route",{enumerable:!0,get:()=>A(a)}),Ut&&!Vt&&a.value===bt&&(Vt=!0,L(r.location).catch(F=>{}));const M={};for(const F in bt)Object.defineProperty(M,F,{get:()=>a.value[F],enumerable:!0});_.provide(Yn,Et),_.provide(Xn,wo(M)),_.provide(On,a);const T=_.unmount;Ht.add(_),_.unmount=function(){Ht.delete(_),Ht.size<1&&(c=bt,Je&&Je(),Je=null,a.value=bt,Vt=!1,ce=!1),T()}}};function He(_){return _.reduce((M,T)=>M.then(()=>vt(T)),Promise.resolve())}return Et}function Zs(e){return Pe(Xn)}const cu=["aria-label"],uu={key:0,class:"fas fa-moon text-purple-400"},du={key:1,class:"fas fa-sun text-yellow-500"},fu={__name:"ThemeToggle",setup(e){const t=ke(!1);jt(()=>{const r=localStorage.getItem("theme"),o=window.matchMedia("(prefers-color-scheme: dark)").matches;t.value=r==="dark"||!r&&o,s(),window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",i=>{localStorage.getItem("theme")||(t.value=i.matches,s())})}),Ge(t,()=>{s(),localStorage.setItem("theme",t.value?"dark":"light")});function s(){t.value?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")}function n(){t.value=!t.value}return(r,o)=>(y(),C("button",{onClick:n,class:"p-2 rounded-lg hover:bg-gray-200 dark:hover:bg-gray-700 transition","aria-label":t.value?"Switch to light mode":"Switch to dark mode"},[t.value?(y(),C("i",uu)):(y(),C("i",du))],8,cu))}},mu={class:"sticky top-0 z-50 glass shadow-modern"},hu={class:"container mx-auto px-4"},pu={class:"flex items-center justify-between h-16"},gu={class:"hidden md:flex items-center space-x-6"},vu={class:"flex items-center space-x-4"},yu={key:0,class:"md:hidden py-4 border-t border-gray-200 dark:border-gray-700"},xu={class:"flex flex-col space-y-3"},bu={__name:"Navbar",setup(e){const t=Zs(),s=Pe("globalData"),n=ke(!1),r=oe(()=>s.value?.Repositories||[]);return(o,i)=>(y(),C("nav",mu,[u("div",hu,[u("div",pu,[N(A(Re),{to:"/",class:"flex items-center space-x-2"},{default:Z(()=>[...i[4]||(i[4]=[u("i",{class:"fas fa-rocket text-2xl gradient-text"},null,-1),u("span",{class:"text-xl font-bold gradient-text"},"Git Velocity",-1)])]),_:1}),u("div",gu,[N(A(Re),{to:"/",class:Q(A(t).path==="/"?"nav-link-active":"nav-link")},{default:Z(()=>[...i[5]||(i[5]=[ae(" Dashboard ",-1)])]),_:1},8,["class"]),N(A(Re),{to:"/leaderboard",class:Q(A(t).path==="/leaderboard"?"nav-link-active":"nav-link")},{default:Z(()=>[...i[6]||(i[6]=[ae(" Leaderboard ",-1)])]),_:1},8,["class"]),(y(!0),C(J,null,xe(r.value,l=>(y(),ie(A(Re),{key:`${l.Owner}/${l.Name}`,to:`/repos/${l.Owner}/${l.Name}`,class:Q(A(t).path.includes(`/repos/${l.Owner}/${l.Name}`)?"nav-link-active":"nav-link")},{default:Z(()=>[ae(w(l.Name),1)]),_:2},1032,["to","class"]))),128))]),u("div",vu,[N(fu),u("button",{onClick:i[0]||(i[0]=l=>n.value=!n.value),class:"md:hidden p-2 rounded-lg hover:bg-gray-200 dark:hover:bg-gray-700 transition"},[...i[7]||(i[7]=[u("i",{class:"fas fa-bars text-gray-700 dark:text-gray-200"},null,-1)])])])]),n.value?(y(),C("div",yu,[u("div",xu,[N(A(Re),{to:"/",onClick:i[1]||(i[1]=l=>n.value=!1),class:Q(A(t).path==="/"?"nav-link-active":"nav-link")},{default:Z(()=>[...i[8]||(i[8]=[ae(" Dashboard ",-1)])]),_:1},8,["class"]),N(A(Re),{to:"/leaderboard",onClick:i[2]||(i[2]=l=>n.value=!1),class:Q(A(t).path==="/leaderboard"?"nav-link-active":"nav-link")},{default:Z(()=>[...i[9]||(i[9]=[ae(" Leaderboard ",-1)])]),_:1},8,["class"]),(y(!0),C(J,null,xe(r.value,l=>(y(),ie(A(Re),{key:`${l.Owner}/${l.Name}`,to:`/repos/${l.Owner}/${l.Name}`,onClick:i[3]||(i[3]=a=>n.value=!1),class:Q(A(t).path.includes(`/repos/${l.Owner}/${l.Name}`)?"nav-link-active":"nav-link")},{default:Z(()=>[ae(w(l.Name),1)]),_:2},1032,["to","class"]))),128))])])):q("",!0)])]))}},_u={class:"py-8 px-4 mt-16 border-t border-gray-200 dark:border-gray-700"},wu={class:"container mx-auto text-center"},ku={key:0,class:"text-sm text-gray-400 dark:text-gray-500 mt-2"},Cu={__name:"Footer",setup(e){const t=Pe("globalData"),s=oe(()=>t.value?.GeneratedAt?new Date(t.value.GeneratedAt).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric"}):"");return(n,r)=>(y(),C("footer",_u,[u("div",wu,[r[0]||(r[0]=u("p",{class:"text-gray-500 dark:text-gray-400"},[ae(" Generated by "),u("a",{href:"https://github.com/lukaszraczylo/git-velocity",class:"text-primary-500 hover:text-primary-600",target:"_blank",rel:"noopener noreferrer"}," Git Velocity ")],-1)),s.value?(y(),C("p",ku,w(s.value),1)):q("",!0)])]))}},Ru={class:"min-h-screen flex flex-col"},Su={class:"flex-1"},Au={key:0,class:"flex items-center justify-center min-h-[60vh]"},Eu={key:1,class:"flex items-center justify-center min-h-[60vh]"},Pu={class:"text-center"},$u={class:"text-gray-600 dark:text-gray-400"},Tu={__name:"App",setup(e){const t=ke(null),s=ke(!0),n=ke(null);return ds("globalData",t),jt(async()=>{try{const r=await fetch("./data/global.json");if(!r.ok)throw new Error("Failed to load data");t.value=await r.json()}catch(r){n.value=r.message}finally{s.value=!1}}),(r,o)=>{const i=Ll("router-view");return y(),C("div",Ru,[N(bu),u("main",Su,[s.value?(y(),C("div",Au,[...o[0]||(o[0]=[u("div",{class:"text-center"},[u("i",{class:"fas fa-spinner fa-spin text-4xl text-primary-500 mb-4"}),u("p",{class:"text-gray-600 dark:text-gray-400"},"Loading dashboard...")],-1)])])):n.value?(y(),C("div",Eu,[u("div",Pu,[o[1]||(o[1]=u("i",{class:"fas fa-exclamation-triangle text-4xl text-red-500 mb-4"},null,-1)),u("p",$u,w(n.value),1)])])):(y(),ie(i,{key:2}))]),N(Cu)])}}};function U(e){return e==null?"0":e>=1e6?(e/1e6).toFixed(1)+"M":e>=1e3?(e/1e3).toFixed(1)+"K":String(e)}function Ou(e){return e==null?"-":e<1?Math.round(e*60)+"m":e<24?e.toFixed(1)+"h":(e/24).toFixed(1)+"d"}function vn(e){return e?new Date(e).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric"}):""}function Iu(e){return e==null?"0%":e.toFixed(1)+"%"}function ki(e){return e?e.toLowerCase().replace(/\s+/g,"-").replace(/_/g,"-").replace(/[^a-z0-9-]/g,""):""}const Nu={class:"flex items-center justify-between"},Mu={class:"text-sm text-gray-500 dark:text-gray-400 mt-1"},_e={__name:"StatCard",props:{value:{type:[Number,String],required:!0},label:{type:String,required:!0},icon:{type:String,default:""},iconColor:{type:String,default:"text-gray-500"},valueClass:{type:String,default:"gradient-text"},delay:{type:String,default:"0s"}},setup(e){return(t,s)=>(y(),C("div",{class:"card animate-fade-in-up",style:St({animationDelay:e.delay})},[u("div",Nu,[u("div",null,[u("div",{class:Q(["text-3xl font-bold",e.valueClass])},w(typeof e.value=="number"?A(U)(e.value):e.value),3),u("div",Mu,w(e.label),1)]),e.icon?(y(),C("div",{key:0,class:Q(["text-3xl opacity-50",e.iconColor])},[u("i",{class:Q(e.icon)},null,2)],2)):q("",!0)])],4))}},Du=["src","alt"],Rs={__name:"Avatar",props:{src:{type:String,default:""},name:{type:String,required:!0},size:{type:String,default:"md"}},setup(e){const t=e,s={sm:"w-8 h-8 text-xs",md:"w-10 h-10 text-sm",lg:"w-14 h-14 text-xl",xl:"w-16 h-16 text-2xl","2xl":"w-32 h-32 text-4xl"},n=oe(()=>t.name.charAt(0).toUpperCase()),r=oe(()=>s[t.size]||s.md);return(o,i)=>e.src?(y(),C("img",{key:0,src:e.src,alt:e.name,class:Q([r.value,"rounded-full"])},null,10,Du)):(y(),C("div",{key:1,class:Q([r.value,"rounded-full bg-gradient-to-br from-primary-500 to-accent-500 flex items-center justify-center text-white font-bold"])},w(n.value),3))}},Ci={__name:"RankBadge",props:{rank:{type:Number,required:!0},size:{type:String,default:"md"}},setup(e){const t=e,s={sm:"w-6 h-6 text-xs",md:"w-8 h-8 text-sm"},n=oe(()=>t.rank===1?"rank-1":t.rank===2?"rank-2":t.rank===3?"rank-3":"bg-gray-200 dark:bg-gray-700 text-gray-600 dark:text-gray-300"),r=oe(()=>s[t.size]||s.md);return(o,i)=>(y(),C("span",{class:Q([[r.value,n.value,{"text-white":e.rank<=3}],"inline-flex items-center justify-center rounded-full font-bold"])},w(e.rank),3))}},Lu={class:"inline-flex flex-col items-center gap-2"},ju=["title"],Fu={class:"absolute bottom-full left-1/2 -translate-x-1/2 mb-3 px-3 py-2 bg-gray-900 dark:bg-gray-800 text-white text-xs rounded-xl opacity-0 group-hover/badge:opacity-100 transition-all duration-200 pointer-events-none whitespace-nowrap z-50 shadow-xl border border-white/10"},Vu={class:"font-bold text-sm"},Hu={class:"text-gray-300 text-[11px] mt-0.5"},Bu={key:0,class:"text-[11px] font-medium text-gray-600 dark:text-gray-400 text-center leading-tight",style:{"max-width":"72px","word-wrap":"break-word"}},_s={__name:"AchievementBadge",props:{achievementId:{type:String,required:!0},size:{type:String,default:"md"},showLabel:{type:Boolean,default:!1}},setup(e){const t={1:"from-stone-400 to-stone-500",2:"from-green-400 to-emerald-500",3:"from-blue-400 to-indigo-500",4:"from-purple-400 to-violet-500",5:"from-yellow-400 to-amber-500",6:"from-orange-400 to-red-500",7:"from-red-500 to-rose-600",8:"from-pink-500 to-fuchsia-600",9:"from-cyan-400 to-teal-500",10:"from-emerald-400 to-cyan-500",11:"from-violet-500 to-purple-600"},s=l=>{const a=[1,10,25,50,100,250,500,1e3,5e3,1e4,25e3];for(let c=a.length-1;c>=0;c--)if(l>=a[c])return c+1;return 1},n=l=>{const a=l.match(/(\d+)$/);return a?parseInt(a[1],10):50},r={"commit-1":{name:"First Steps",description:"Made your first commit",icon:"fa-baby"},"commit-10":{name:"Getting Started",description:"Made 10 commits",icon:"fa-seedling"},"commit-50":{name:"Contributor",description:"Made 50 commits",icon:"fa-code"},"commit-100":{name:"Committed",description:"Made 100 commits",icon:"fa-fire"},"commit-500":{name:"Code Machine",description:"Made 500 commits",icon:"fa-robot"},"commit-1000":{name:"Code Warrior",description:"Made 1000 commits",icon:"fa-crown"},"pr-1":{name:"PR Pioneer",description:"Opened your first pull request",icon:"fa-code-pull-request"},"pr-10":{name:"PR Regular",description:"Opened 10 pull requests",icon:"fa-code-branch"},"pr-25":{name:"PR Pro",description:"Opened 25 pull requests",icon:"fa-code-compare"},"pr-50":{name:"Merge Master",description:"Opened 50 pull requests",icon:"fa-code-merge"},"pr-100":{name:"PR Champion",description:"Opened 100 pull requests",icon:"fa-trophy"},"pr-250":{name:"PR Legend",description:"Opened 250 pull requests",icon:"fa-medal"},"review-1":{name:"First Review",description:"Reviewed your first pull request",icon:"fa-magnifying-glass"},"review-10":{name:"Reviewer",description:"Reviewed 10 pull requests",icon:"fa-eye"},"review-25":{name:"Review Regular",description:"Reviewed 25 pull requests",icon:"fa-glasses"},"review-50":{name:"Review Expert",description:"Reviewed 50 pull requests",icon:"fa-user-check"},"review-100":{name:"Review Guru",description:"Reviewed 100 pull requests",icon:"fa-user-graduate"},"review-250":{name:"Review Master",description:"Reviewed 250 pull requests",icon:"fa-award"},"comment-10":{name:"Commentator",description:"Left 10 PR review comments",icon:"fa-comment"},"comment-50":{name:"Feedback Giver",description:"Left 50 PR review comments",icon:"fa-comments"},"comment-100":{name:"Code Critic",description:"Left 100 PR review comments",icon:"fa-comment-dots"},"comment-250":{name:"Feedback Expert",description:"Left 250 PR review comments",icon:"fa-message"},"comment-500":{name:"Comment Champion",description:"Left 500 PR review comments",icon:"fa-scroll"},"lines-added-100":{name:"First Hundred",description:"Added 100 lines of code",icon:"fa-plus"},"lines-added-1000":{name:"Thousand Lines",description:"Added 1000 lines of code",icon:"fa-layer-group"},"lines-added-5000":{name:"Five Thousand",description:"Added 5000 lines of code",icon:"fa-cubes"},"lines-added-10000":{name:"Ten Thousand",description:"Added 10000 lines of code",icon:"fa-mountain"},"lines-added-50000":{name:"Code Mountain",description:"Added 50000 lines of code",icon:"fa-mountain-sun"},"lines-deleted-100":{name:"Tidying Up",description:"Deleted 100 lines of code",icon:"fa-eraser"},"lines-deleted-500":{name:"Spring Cleaning",description:"Deleted 500 lines of code",icon:"fa-broom"},"lines-deleted-1000":{name:"Code Cleaner",description:"Deleted 1000 lines of code",icon:"fa-trash-can"},"lines-deleted-5000":{name:"Refactoring Hero",description:"Deleted 5000 lines of code",icon:"fa-recycle"},"lines-deleted-10000":{name:"Deletion Master",description:"Deleted 10000 lines of code",icon:"fa-dumpster-fire"},"review-time-24h":{name:"Same Day Reviewer",description:"Average review response under 24 hours",icon:"fa-clock"},"review-time-4h":{name:"Quick Responder",description:"Average review response under 4 hours",icon:"fa-stopwatch"},"review-time-1h":{name:"Speed Demon",description:"Average review response under 1 hour",icon:"fa-bolt"},"repo-2":{name:"Multi-Repo",description:"Contributed to 2 repositories",icon:"fa-folder"},"repo-5":{name:"Repo Explorer",description:"Contributed to 5 repositories",icon:"fa-folder-tree"},"repo-10":{name:"Repo Master",description:"Contributed to 10 repositories",icon:"fa-network-wired"},"reviewees-3":{name:"Helpful Colleague",description:"Reviewed PRs from 3 different contributors",icon:"fa-user-group"},"reviewees-10":{name:"Team Player",description:"Reviewed PRs from 10 different contributors",icon:"fa-people-group"},"reviewees-25":{name:"Community Pillar",description:"Reviewed PRs from 25 different contributors",icon:"fa-people-roof"},"large-pr-500":{name:"Big Change",description:"Merged a PR with 500+ lines changed",icon:"fa-expand"},"large-pr-1000":{name:"Heavy Lifter",description:"Merged a PR with 1000+ lines changed",icon:"fa-weight-hanging"},"large-pr-5000":{name:"Mega Merge",description:"Merged a PR with 5000+ lines changed",icon:"fa-dumbbell"},"small-pr-5":{name:"Small Changes",description:"Merged 5 PRs under 100 lines",icon:"fa-compress"},"small-pr-10":{name:"Small PR Advocate",description:"Merged 10 PRs under 100 lines",icon:"fa-minimize"},"small-pr-25":{name:"Atomic Commits",description:"Merged 25 PRs under 100 lines",icon:"fa-atom"},"small-pr-50":{name:"Micro PR Master",description:"Merged 50 PRs under 100 lines",icon:"fa-microchip"},"perfect-pr-1":{name:"First Try",description:"1 PR merged without changes requested",icon:"fa-check"},"perfect-pr-5":{name:"Clean Code",description:"5 PRs merged without changes requested",icon:"fa-check-double"},"perfect-pr-10":{name:"Quality Author",description:"10 PRs merged without changes requested",icon:"fa-circle-check"},"perfect-pr-25":{name:"Flawless",description:"25 PRs merged without changes requested",icon:"fa-gem"},"active-7":{name:"Week Active",description:"Active on 7 different days",icon:"fa-calendar-day"},"active-30":{name:"Month Active",description:"Active on 30 different days",icon:"fa-calendar-week"},"active-60":{name:"Consistent Contributor",description:"Active on 60 different days",icon:"fa-chart-line"},"active-100":{name:"Dedicated Developer",description:"Active on 100 different days",icon:"fa-fire-flame-curved"},"streak-3":{name:"Getting Rolling",description:"3 day contribution streak",icon:"fa-forward"},"streak-7":{name:"Week Warrior",description:"7 day contribution streak",icon:"fa-calendar-week"},"streak-14":{name:"Two Week Streak",description:"14 day contribution streak",icon:"fa-fire"},"streak-30":{name:"Month Master",description:"30 day contribution streak",icon:"fa-calendar-check"},"workweek-3":{name:"Work Week Start",description:"3 consecutive weekday streak",icon:"fa-briefcase"},"workweek-5":{name:"Full Work Week",description:"5 consecutive weekday streak",icon:"fa-building"},"workweek-10":{name:"Two Week Grind",description:"10 consecutive weekday streak",icon:"fa-business-time"},"workweek-20":{name:"Month of Mondays",description:"20 consecutive weekday streak",icon:"fa-landmark"},"earlybird-10":{name:"Early Riser",description:"10 commits before 9am",icon:"fa-mug-hot"},"earlybird-25":{name:"Morning Person",description:"25 commits before 9am",icon:"fa-cloud-sun"},"earlybird-50":{name:"Early Bird",description:"50 commits before 9am",icon:"fa-sun"},"earlybird-100":{name:"Dawn Warrior",description:"100 commits before 9am",icon:"fa-sunrise"},"nightowl-10":{name:"Late Worker",description:"10 commits after 9pm",icon:"fa-cloud-moon"},"nightowl-25":{name:"Evening Coder",description:"25 commits after 9pm",icon:"fa-moon"},"nightowl-50":{name:"Night Owl",description:"50 commits after 9pm",icon:"fa-star"},"nightowl-100":{name:"Nocturnal",description:"100 commits after 9pm",icon:"fa-star-and-crescent"},"midnight-5":{name:"Night Shift",description:"5 commits between midnight and 4am",icon:"fa-ghost"},"midnight-10":{name:"Insomniac",description:"10 commits between midnight and 4am",icon:"fa-bed"},"midnight-25":{name:"Nosferatu",description:"25 commits between midnight and 4am",icon:"fa-skull"},"midnight-50":{name:"Vampire Coder",description:"50 commits between midnight and 4am",icon:"fa-skull-crossbones"},"weekend-5":{name:"Weekend Work",description:"5 weekend commits",icon:"fa-couch"},"weekend-10":{name:"Weekend Regular",description:"10 weekend commits",icon:"fa-house-laptop"},"weekend-25":{name:"Weekend Warrior",description:"25 weekend commits",icon:"fa-gamepad"},"weekend-50":{name:"No Days Off",description:"50 weekend commits",icon:"fa-person-running"},"ooh-10":{name:"Extra Hours",description:"10 commits outside 9am-5pm",icon:"fa-clock-rotate-left"},"ooh-25":{name:"Flexible Schedule",description:"25 commits outside 9am-5pm",icon:"fa-user-clock"},"ooh-50":{name:"Off-Hours Hero",description:"50 commits outside 9am-5pm",icon:"fa-hourglass-half"},"ooh-100":{name:"Time Bender",description:"100 commits outside 9am-5pm",icon:"fa-infinity"},"docs-100":{name:"Documenter",description:"Added 100 lines of comments/docs",icon:"fa-file-lines"},"docs-500":{name:"Technical Writer",description:"Added 500 lines of comments/docs",icon:"fa-book"},"docs-1000":{name:"Documentation Hero",description:"Added 1000 lines of comments/docs",icon:"fa-book-open"},"docs-2500":{name:"Knowledge Keeper",description:"Added 2500 lines of comments/docs",icon:"fa-scroll"},"docs-5000":{name:"Code Historian",description:"Added 5000 lines of comments/docs",icon:"fa-landmark"},"docs-del-50":{name:"Comment Trimmer",description:"Removed 50 lines of outdated comments",icon:"fa-scissors"},"docs-del-200":{name:"Cleanup Crew",description:"Removed 200 lines of outdated comments",icon:"fa-broom"},"docs-del-500":{name:"Dead Code Hunter",description:"Removed 500 lines of outdated comments",icon:"fa-skull-crossbones"},"docs-del-1000":{name:"Comment Surgeon",description:"Removed 1000 lines of outdated comments",icon:"fa-user-doctor"},"docs-del-2500":{name:"Noise Eliminator",description:"Removed 2500 lines of outdated comments",icon:"fa-volume-xmark"},"issue-1":{name:"Bug Hunter",description:"Opened your first issue",icon:"fa-bug"},"issue-5":{name:"Issue Reporter",description:"Opened 5 issues",icon:"fa-flag"},"issue-10":{name:"Quality Advocate",description:"Opened 10 issues",icon:"fa-clipboard-list"},"issue-25":{name:"Issue Expert",description:"Opened 25 issues",icon:"fa-list-check"},"issue-50":{name:"Issue Champion",description:"Opened 50 issues",icon:"fa-bullhorn"},"issue-close-1":{name:"Problem Solver",description:"Closed your first issue",icon:"fa-circle-check"},"issue-close-5":{name:"Bug Squasher",description:"Closed 5 issues",icon:"fa-bug-slash"},"issue-close-10":{name:"Issue Resolver",description:"Closed 10 issues",icon:"fa-check-double"},"issue-close-25":{name:"Closure Expert",description:"Closed 25 issues",icon:"fa-square-check"},"issue-close-50":{name:"Issue Terminator",description:"Closed 50 issues",icon:"fa-crosshairs"},"issue-comment-5":{name:"Issue Commenter",description:"Left 5 issue comments",icon:"fa-comment"},"issue-comment-10":{name:"Discussion Starter",description:"Left 10 issue comments",icon:"fa-comments"},"issue-comment-25":{name:"Issue Collaborator",description:"Left 25 issue comments",icon:"fa-people-arrows"},"issue-comment-50":{name:"Community Voice",description:"Left 50 issue comments",icon:"fa-bullhorn"},"issue-comment-100":{name:"Issue Guru",description:"Left 100 issue comments",icon:"fa-graduation-cap"},"issue-ref-5":{name:"Issue Linker",description:"Referenced issues in 5 commits",icon:"fa-link"},"issue-ref-10":{name:"Commit Connector",description:"Referenced issues in 10 commits",icon:"fa-diagram-project"},"issue-ref-25":{name:"Traceability Pro",description:"Referenced issues in 25 commits",icon:"fa-sitemap"},"issue-ref-50":{name:"Issue Tracker",description:"Referenced issues in 50 commits",icon:"fa-chart-gantt"},"issue-ref-100":{name:"Traceability Master",description:"Referenced issues in 100 commits",icon:"fa-network-wired"}},o=l=>{const a=r[l]||{name:l,description:"",icon:"fa-medal"},c=n(l),d=s(c),m=t[d]||"from-gray-400 to-gray-500";return{...a,gradient:m,tier:d,threshold:c}},i={sm:{wrapper:"w-9 h-9",icon:"text-sm",radius:"rounded-lg"},md:{wrapper:"w-11 h-11",icon:"text-base",radius:"rounded-xl"},lg:{wrapper:"w-14 h-14",icon:"text-lg",radius:"rounded-xl"}};return(l,a)=>(y(),C("div",Lu,[u("div",{class:"relative group/badge",title:o(e.achievementId).name},[u("div",{class:Q(["flex items-center justify-center bg-gradient-to-br shadow-lg hover:scale-105 hover:shadow-xl transition-all duration-200 cursor-pointer",[i[e.size].wrapper,i[e.size].radius,o(e.achievementId).gradient]])},[u("i",{class:Q(["fas text-white drop-shadow-sm",[o(e.achievementId).icon,i[e.size].icon]])},null,2)],2),u("div",Fu,[u("div",Vu,w(o(e.achievementId).name),1),u("div",Hu,w(o(e.achievementId).description),1),a[0]||(a[0]=u("div",{class:"absolute top-full left-1/2 -translate-x-1/2 border-[6px] border-transparent border-t-gray-900 dark:border-t-gray-800"},null,-1))])],8,ju),e.showLabel?(y(),C("span",Bu,w(o(e.achievementId).name),1)):q("",!0)]))}},Gu={class:"flex items-center space-x-4"},Uu={class:"relative"},qu={class:"flex-1"},Wu={class:"font-semibold text-gray-800 dark:text-white group-hover:text-primary-500 transition-colors"},Ku={class:"text-sm text-gray-500 dark:text-gray-400"},zu={key:0,class:"text-xs text-accent-500"},Qu={class:"text-right"},Ju={class:"text-2xl font-bold gradient-text"},Yu={key:0,class:"mt-4 flex flex-wrap gap-1.5"},Xu={key:0,class:"inline-flex items-center justify-center w-8 h-8 rounded-lg bg-gray-200 dark:bg-gray-700 text-gray-600 dark:text-gray-300 text-xs font-bold"},Zu={__name:"ContributorCard",props:{contributor:{type:Object,required:!0},rank:{type:Number,default:0},showRank:{type:Boolean,default:!0},featured:{type:Boolean,default:!1}},setup(e){return(t,s)=>(y(),ie(A(Re),{to:{name:"contributor",params:{login:e.contributor.login}},class:Q(["card animate-fade-in-up block cursor-pointer hover:shadow-lg transition-shadow",e.featured&&e.rank===1?"ring-2 ring-yellow-400":""])},{default:Z(()=>[u("div",Gu,[u("div",Uu,[N(Rs,{src:e.contributor.avatar_url,name:e.contributor.login,size:e.featured?"xl":"lg"},null,8,["src","name","size"]),e.showRank&&e.rank>0?(y(),ie(Ci,{key:0,rank:e.rank,size:"sm",class:"absolute -top-1 -right-1"},null,8,["rank"])):q("",!0)]),u("div",qu,[u("h3",Wu,w(e.contributor.name||e.contributor.login),1),u("p",Ku,[u("span",{class:"hover:text-primary-500 transition-colors",onClick:s[0]||(s[0]=Qn(n=>t.window.open(`https://github.com/${e.contributor.login}`,"_blank"),["stop","prevent"]))},[ae(" @"+w(e.contributor.login)+" ",1),s[1]||(s[1]=u("i",{class:"fas fa-external-link-alt text-xs ml-0.5 opacity-50"},null,-1))])]),e.contributor.team?(y(),C("p",zu,w(e.contributor.team),1)):q("",!0)]),u("div",Qu,[u("div",Ju,w(A(U)(e.contributor.score?.total||e.contributor.score||0)),1),s[2]||(s[2]=u("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"points",-1))])]),e.contributor.achievements?.length?(y(),C("div",Yu,[(y(!0),C(J,null,xe(e.contributor.achievements.slice(0,6),n=>(y(),ie(_s,{key:n,"achievement-id":n,size:"sm"},null,8,["achievement-id"]))),128)),e.contributor.achievements.length>6?(y(),C("span",Xu," +"+w(e.contributor.achievements.length-6),1)):q("",!0)])):q("",!0)]),_:1},8,["to","class"]))}},ed={class:"flex items-center justify-between mb-4"},td={class:"font-semibold text-gray-800 dark:text-white group-hover:text-primary-500 transition"},sd={class:"text-sm text-gray-500 dark:text-gray-400 mb-4"},nd={class:"grid grid-cols-3 gap-4 text-center"},rd={class:"text-lg font-semibold text-gray-800 dark:text-white"},od={class:"text-lg font-semibold text-gray-800 dark:text-white"},id={class:"text-lg font-semibold text-gray-800 dark:text-white"},ld={__name:"RepoCard",props:{repo:{type:Object,required:!0}},setup(e){return(t,s)=>(y(),ie(A(Re),{to:`/repos/${e.repo.owner}/${e.repo.name}`,class:"card hover:shadow-lg transition group"},{default:Z(()=>[u("div",ed,[u("h3",td,w(e.repo.name),1),s[0]||(s[0]=u("i",{class:"fas fa-arrow-right text-gray-400 group-hover:text-primary-500 transition"},null,-1))]),u("p",sd,w(e.repo.owner)+"/"+w(e.repo.name),1),u("div",nd,[u("div",null,[u("div",rd,w(A(U)(e.repo.total_commits)),1),s[1]||(s[1]=u("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"Commits",-1))]),u("div",null,[u("div",od,w(A(U)(e.repo.total_prs)),1),s[2]||(s[2]=u("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"PRs",-1))]),u("div",null,[u("div",id,w(e.repo.active_contributors),1),s[3]||(s[3]=u("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"Contributors",-1))])])]),_:1},8,["to"]))}},ad={class:"flex items-center justify-between mb-4"},cd={class:"font-semibold text-gray-800 dark:text-white group-hover:text-primary-500 transition"},ud={class:"flex items-center space-x-2 mb-4"},dd={key:0,class:"w-8 h-8 rounded-full bg-gray-200 dark:bg-gray-700 flex items-center justify-center text-gray-600 dark:text-gray-300 text-xs font-bold"},fd={class:"grid grid-cols-2 gap-4 text-center"},md={class:"text-lg font-semibold gradient-text"},hd={class:"text-lg font-semibold text-gray-800 dark:text-white"},pd={__name:"TeamCard",props:{team:{type:Object,required:!0}},setup(e){return(t,s)=>(y(),ie(A(Re),{to:`/teams/${A(ki)(e.team.name)}`,class:"card hover:shadow-lg transition group"},{default:Z(()=>[u("div",ad,[u("h3",cd,w(e.team.name),1),u("span",{class:"w-3 h-3 rounded-full",style:St({backgroundColor:e.team.color||"#8b5cf6"})},null,4)]),u("div",ud,[(y(!0),C(J,null,xe((e.team.members||[]).slice(0,5),(n,r)=>(y(),ie(Rs,{key:n,name:n,size:"sm"},null,8,["name"]))),128)),(e.team.members?.length||0)>5?(y(),C("span",dd," +"+w(e.team.members.length-5),1)):q("",!0)]),u("div",fd,[u("div",null,[u("div",md,w(A(U)(e.team.total_score)),1),s[0]||(s[0]=u("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"Total Score",-1))]),u("div",null,[u("div",hd,w(e.team.members?.length||0),1),s[1]||(s[1]=u("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"Members",-1))])])]),_:1},8,["to"]))}},gd={class:"text-2xl font-bold text-gray-800 dark:text-white mb-6"},It={__name:"SectionHeader",props:{title:{type:String,required:!0},icon:{type:String,default:""},iconColor:{type:String,default:"text-primary-500"}},setup(e){return(t,s)=>(y(),C("h2",gd,[e.icon?(y(),C("i",{key:0,class:Q([[e.icon,e.iconColor],"mr-2"])},null,2)):q("",!0),ae(w(e.title)+" ",1),Dt(t.$slots,"suffix")]))}},vd=(e,t)=>{const s=e.__vccOpts||e;for(const[n,r]of t)s[n]=r;return s},yd={key:0,class:"flex items-center justify-center h-full"},xd={__name:"VelocityChart",props:{timeline:{type:Object,required:!0},height:{type:String,default:"300px"},showScore:{type:Boolean,default:!1}},setup(e){rr.register(...Oi);const t=e,s=ke(null);let n=null;const r=oe(()=>t.timeline?.series?t.timeline.series.filter(c=>t.showScore||c.name!=="Score"):[]),o=oe(()=>!t.timeline?.labels||!r.value.length?{labels:[],datasets:[]}:{labels:t.timeline.labels,datasets:r.value.map(c=>({label:c.name,data:c.data,borderColor:c.color,backgroundColor:c.color+"20",fill:!0,tension:.4,pointRadius:3,pointHoverRadius:5}))}),i={responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{legend:{position:"top",labels:{usePointStyle:!0,padding:20,font:{size:12}}},tooltip:{backgroundColor:"rgba(0, 0, 0, 0.8)",padding:12,titleFont:{size:14},bodyFont:{size:13},callbacks:{label:c=>`${c.dataset.label}: ${c.parsed.y.toLocaleString()}`}}},scales:{x:{grid:{display:!1},ticks:{font:{size:11}}},y:{beginAtZero:!0,grid:{color:"rgba(0, 0, 0, 0.05)"},ticks:{font:{size:11},callback:c=>c>=1e3?(c/1e3).toFixed(1)+"k":c}}}};function l(){if(!s.value||!o.value.labels.length)return;n&&n.destroy();const c=s.value.getContext("2d");n=new rr(c,{type:"line",data:o.value,options:i})}function a(){n?(n.data=o.value,n.update()):l()}return jt(()=>{l()}),Ge(()=>t.timeline,()=>{a()},{deep:!0}),Ge(()=>t.showScore,()=>{a()}),(c,d)=>(y(),C("div",{class:"velocity-chart",style:St({height:e.height})},[u("canvas",{ref_key:"chartRef",ref:s},null,512),e.timeline?.labels?.length?q("",!0):(y(),C("div",yd,[...d[0]||(d[0]=[u("p",{class:"text-gray-400"},"No velocity data available",-1)])]))],4))}},bd=vd(xd,[["__scopeId","data-v-401bbb13"]]),_d={class:"py-16 px-4"},wd={class:"container mx-auto text-center animate-fade-in-up"},kd={class:"flex flex-col items-center space-y-2 mt-4 text-sm text-gray-500 dark:text-gray-400"},Cd={key:0},Rd={key:0},Sd={key:1},Ad={key:2},Ed={key:1},Pd={key:0,class:"py-8 px-4"},$d={class:"container mx-auto"},Td={class:"card"},Od={class:"flex items-center justify-between mb-6"},Id={class:"flex items-center space-x-2 text-sm text-gray-600 dark:text-gray-400 cursor-pointer"},Nd={class:"py-8 px-4"},Md={class:"container mx-auto"},Dd={class:"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-6 gap-4"},Ld={class:"py-8 px-4"},jd={class:"container mx-auto"},Fd={class:"grid md:grid-cols-3 gap-6"},Vd={class:"mt-6 text-center"},Hd={class:"py-8 px-4"},Bd={class:"container mx-auto"},Gd={class:"grid md:grid-cols-2 lg:grid-cols-3 gap-6"},Ud={key:1,class:"py-8 px-4"},qd={class:"container mx-auto"},Wd={class:"grid md:grid-cols-2 lg:grid-cols-3 gap-6"},Kd={__name:"Dashboard",setup(e){const t=Pe("globalData"),s=oe(()=>t.value||{}),n=oe(()=>s.value.leaderboard?.slice(0,3)||[]),r=oe(()=>s.value.repositories||[]),o=oe(()=>s.value.teams||[]),i=oe(()=>s.value.velocity_timeline),l=ke(!1);return(a,c)=>(y(),C("div",null,[u("header",_d,[u("div",wd,[c[4]||(c[4]=u("h1",{class:"text-4xl md:text-6xl font-bold mb-4"},[u("span",{class:"gradient-text"},"Git Velocity")],-1)),c[5]||(c[5]=u("p",{class:"text-xl text-gray-600 dark:text-gray-300 max-w-2xl mx-auto"}," Celebrate your team's achievements and contributions with beautiful insights. ",-1)),u("div",kd,[s.value.period?.start||s.value.period?.end?(y(),C("p",Cd,[c[1]||(c[1]=u("i",{class:"fas fa-calendar-alt mr-1 text-primary-500"},null,-1)),c[2]||(c[2]=u("span",{class:"font-medium"},"Period:",-1)),s.value.period.start?(y(),C("span",Rd,w(A(vn)(s.value.period.start)),1)):q("",!0),s.value.period.start&&s.value.period.end?(y(),C("span",Sd," — ")):q("",!0),s.value.period.end?(y(),C("span",Ad,w(A(vn)(s.value.period.end)),1)):q("",!0)])):q("",!0),s.value.generated_at?(y(),C("p",Ed,[c[3]||(c[3]=u("i",{class:"fas fa-clock mr-1"},null,-1)),ae(" Generated on "+w(A(vn)(s.value.generated_at)),1)])):q("",!0)])])]),i.value?(y(),C("section",Pd,[u("div",$d,[u("div",Td,[u("div",Od,[N(It,{title:"Velocity Timeline",icon:"fas fa-chart-line","icon-color":"text-primary-500"}),u("label",Id,[wl(u("input",{type:"checkbox","onUpdate:modelValue":c[0]||(c[0]=d=>l.value=d),class:"rounded border-gray-300 text-primary-500 focus:ring-primary-500"},null,512),[[za,l.value]]),c[6]||(c[6]=u("span",null,"Show Score",-1))])]),N(bd,{timeline:i.value,"show-score":l.value,height:"320px"},null,8,["timeline","show-score"])])])])):q("",!0),u("section",Nd,[u("div",Md,[u("div",Dd,[N(_e,{value:s.value.total_contributors||0,label:"Contributors",delay:"0s"},null,8,["value"]),N(_e,{value:s.value.total_commits||0,label:"Commits",delay:"0.1s"},null,8,["value"]),N(_e,{value:s.value.total_prs||0,label:"Pull Requests",delay:"0.2s"},null,8,["value"]),N(_e,{value:s.value.total_reviews||0,label:"Reviews",delay:"0.3s"},null,8,["value"]),N(_e,{value:"+"+A(U)(s.value.total_lines_added||0),label:"Lines Added","value-class":"text-green-500",delay:"0.4s"},null,8,["value"]),N(_e,{value:"-"+A(U)(s.value.total_lines_deleted||0),label:"Lines Deleted","value-class":"text-red-500",delay:"0.5s"},null,8,["value"])])])]),u("section",Ld,[u("div",jd,[N(It,{title:"Top Contributors",icon:"fas fa-trophy","icon-color":"text-yellow-500"}),u("div",Fd,[(y(!0),C(J,null,xe(n.value,(d,m)=>(y(),ie(Zu,{key:d.login,contributor:d,rank:m+1,featured:""},null,8,["contributor","rank"]))),128))]),u("div",Vd,[N(A(Re),{to:"/leaderboard",class:"btn-primary"},{default:Z(()=>[...c[7]||(c[7]=[ae(" View Full Leaderboard ",-1),u("i",{class:"fas fa-arrow-right ml-2"},null,-1)])]),_:1})])])]),u("section",Hd,[u("div",Bd,[N(It,{title:"Repositories",icon:"fas fa-code-branch","icon-color":"text-accent-500"}),u("div",Gd,[(y(!0),C(J,null,xe(r.value,d=>(y(),ie(ld,{key:`${d.owner}/${d.name}`,repo:d},null,8,["repo"]))),128))])])]),o.value.length?(y(),C("section",Ud,[u("div",qd,[N(It,{title:"Teams",icon:"fas fa-users","icon-color":"text-blue-500"}),u("div",Wd,[(y(!0),C(J,null,xe(o.value,d=>(y(),ie(pd,{key:d.name,team:d},null,8,["team"]))),128))])])])):q("",!0)]))}},zd={class:"flex items-center space-x-2 text-sm text-gray-500 dark:text-gray-400 mb-6"},Qd={key:2,class:"fas fa-chevron-right text-xs"},Jd={__name:"Breadcrumb",props:{items:{type:Array,required:!0}},setup(e){return(t,s)=>(y(),C("div",zd,[(y(!0),C(J,null,xe(e.items,(n,r)=>(y(),C(J,{key:r},[n.to?(y(),ie(A(Re),{key:0,to:n.to,class:"hover:text-primary-500"},{default:Z(()=>[ae(w(n.label),1)]),_:2},1032,["to"])):(y(),C("span",{key:1,class:Q(r===e.items.length-1?"text-gray-800 dark:text-white":"")},w(n.label),3)),r[]},centered:{type:Boolean,default:!1}},setup(e){return(t,s)=>(y(),C("header",Yd,[u("div",{class:Q(["container mx-auto",{"text-center":e.centered}])},[e.breadcrumbs.length?(y(),ie(Jd,{key:0,items:e.breadcrumbs},null,8,["items"])):q("",!0),u("div",{class:Q(["flex items-center",e.centered?"justify-center":""])},[Dt(t.$slots,"prefix"),u("h1",Xd,[e.icon?(y(),C("i",{key:0,class:Q([[e.icon,e.iconColor],"mr-3"])},null,2)):q("",!0),u("span",Zd,w(e.title),1)])],2),e.subtitle||t.$slots.subtitle?(y(),C("p",ef,[Dt(t.$slots,"subtitle",{},()=>[ae(w(e.subtitle),1)])])):q("",!0),Dt(t.$slots,"extra")],2)]))}},tf={class:"card overflow-hidden p-0"},sf={class:"w-full"},nf={class:"bg-gray-50 dark:bg-gray-800/50"},rf={class:"divide-y divide-gray-200 dark:divide-gray-700"},of=["onClick"],lf={key:0,class:"text-center py-12"},af={class:"text-gray-500 dark:text-gray-400"},Ri={__name:"DataTable",props:{columns:{type:Array,required:!0},items:{type:Array,default:()=>[]},emptyIcon:{type:String,default:"fas fa-inbox"},emptyMessage:{type:String,default:"No data found"},rowClass:{type:String,default:"hover:bg-gray-50 dark:hover:bg-gray-800/30 transition"},clickableRows:{type:Boolean,default:!1}},emits:["row-click"],setup(e){const t=s=>{switch(s){case"center":return"text-center";case"right":return"text-right";default:return"text-left"}};return(s,n)=>(y(),C("div",tf,[u("table",sf,[u("thead",nf,[u("tr",null,[(y(!0),C(J,null,xe(e.columns,r=>(y(),C("th",{key:r.key,class:Q(["px-6 py-4 text-xs font-semibold text-gray-500 dark:text-gray-400 uppercase tracking-wider",t(r.align),r.headerClass])},w(r.label),3))),128))])]),u("tbody",rf,[(y(!0),C(J,null,xe(e.items,(r,o)=>(y(),C("tr",{key:r.id||r.login||o,class:Q([e.rowClass,{"cursor-pointer":e.clickableRows}]),onClick:i=>e.clickableRows&&s.$emit("row-click",r)},[(y(!0),C(J,null,xe(e.columns,i=>(y(),C("td",{key:i.key,class:Q(["px-6 py-4",t(i.align),i.class])},[Dt(s.$slots,i.key,{item:r,index:o},()=>[ae(w(r[i.key]),1)])],2))),128))],10,of))),128))])]),e.items.length?q("",!0):(y(),C("div",lf,[u("i",{class:Q([e.emptyIcon,"text-4xl text-gray-300 dark:text-gray-600 mb-4"])},null,2),u("p",af,w(e.emptyMessage),1)]))]))}},cf={class:"font-medium text-gray-800 dark:text-white group-hover:text-primary-500 transition-colors"},uf={class:"text-sm"},df=["href"],ff={key:1,class:"text-gray-500 dark:text-gray-400"},Si={__name:"ContributorRow",props:{contributor:{type:Object,required:!0},showGithubLink:{type:Boolean,default:!1},columns:{type:Array,default:()=>["commits","prs","reviews","lines","score"]}},setup(e){return(t,s)=>(y(),ie(A(Re),{to:{name:"contributor",params:{login:e.contributor.login}},class:"flex items-center space-x-3"},{default:Z(()=>[N(Rs,{src:e.contributor.avatar_url,name:e.contributor.login,class:"ring-2 ring-transparent group-hover:ring-primary-500 transition-all"},null,8,["src","name"]),u("div",null,[u("div",cf,w(e.contributor.name||e.contributor.login),1),u("div",uf,[e.showGithubLink?(y(),C("a",{key:0,href:`https://github.com/${e.contributor.login}`,target:"_blank",rel:"noopener noreferrer",class:"text-gray-500 dark:text-gray-400 hover:text-primary-500 transition-colors",onClick:s[0]||(s[0]=Qn(()=>{},["stop"]))},[ae(" @"+w(e.contributor.login)+" ",1),s[1]||(s[1]=u("i",{class:"fas fa-external-link-alt text-xs ml-1 opacity-50"},null,-1))],8,df)):(y(),C("span",ff," @"+w(e.contributor.login),1))])])]),_:1},8,["to"]))}},Ai={commit:["commit-1","commit-10","commit-50","commit-100","commit-500","commit-1000"],pr:["pr-1","pr-10","pr-25","pr-50","pr-100","pr-250"],review:["review-1","review-10","review-25","review-50","review-100","review-250"],comment:["comment-10","comment-50","comment-100","comment-250","comment-500"],"lines-added":["lines-added-100","lines-added-1000","lines-added-5000","lines-added-10000","lines-added-50000"],"lines-deleted":["lines-deleted-100","lines-deleted-500","lines-deleted-1000","lines-deleted-5000","lines-deleted-10000"],"review-time":["review-time-24h","review-time-4h","review-time-1h"],repo:["repo-2","repo-5","repo-10"],reviewees:["reviewees-3","reviewees-10","reviewees-25"],"large-pr":["large-pr-500","large-pr-1000","large-pr-5000"],"small-pr":["small-pr-5","small-pr-10","small-pr-25","small-pr-50"],"perfect-pr":["perfect-pr-1","perfect-pr-5","perfect-pr-10","perfect-pr-25"],active:["active-7","active-30","active-60","active-100"],streak:["streak-3","streak-7","streak-14","streak-30"],workweek:["workweek-3","workweek-5","workweek-10","workweek-20"],earlybird:["earlybird-10","earlybird-25","earlybird-50","earlybird-100"],nightowl:["nightowl-10","nightowl-25","nightowl-50","nightowl-100"],midnight:["midnight-5","midnight-10","midnight-25","midnight-50"],weekend:["weekend-5","weekend-10","weekend-25","weekend-50"],ooh:["ooh-10","ooh-25","ooh-50","ooh-100"],docs:["docs-100","docs-500","docs-1000","docs-2500","docs-5000"],"docs-del":["docs-del-50","docs-del-200","docs-del-500","docs-del-1000","docs-del-2500"],issue:["issue-1","issue-5","issue-10","issue-25","issue-50"],"issue-close":["issue-close-1","issue-close-5","issue-close-10","issue-close-25","issue-close-50"],"issue-comment":["issue-comment-5","issue-comment-10","issue-comment-25","issue-comment-50","issue-comment-100"],"issue-ref":["issue-ref-5","issue-ref-10","issue-ref-25","issue-ref-50","issue-ref-100"]};function Ei(e){for(const[t,s]of Object.entries(Ai))if(s.includes(e))return t;return null}function mf(e){const t=Ei(e);return t?Ai[t].indexOf(e):-1}function Pi(e){if(!e||!e.length)return[];const t={};for(const s of e){const n=Ei(s);if(!n){t[s]={id:s,tier:-1};continue}const r=mf(s);(!t[n]||r>t[n].tier)&&(t[n]={id:s,tier:r})}return Object.values(t).sort((s,n)=>n.tier-s.tier).map(s=>s.id)}const hf={class:"py-8 px-4"},pf={class:"container mx-auto max-w-5xl"},gf={class:"flex flex-wrap gap-1.5 max-w-[280px]"},vf={key:0,class:"text-gray-400 text-sm"},yf={class:"hidden md:table-cell"},xf={key:0,class:"inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-purple-100 dark:bg-purple-900/30 text-purple-800 dark:text-purple-300"},bf={key:1,class:"text-gray-400"},_f={class:"hidden sm:table-cell"},wf={key:0,class:"text-sm text-gray-600 dark:text-gray-300"},kf={key:1,class:"text-gray-400"},Cf={class:"text-lg font-bold gradient-text"},Rf={__name:"Leaderboard",setup(e){const t=Pe("globalData"),s=oe(()=>t.value?.leaderboard||[]),n=[{key:"rank",label:"Rank",align:"left"},{key:"contributor",label:"Contributor",align:"left"},{key:"achievements",label:"Achievements",align:"left"},{key:"team",label:"Team",align:"left",headerClass:"hidden md:table-cell"},{key:"category",label:"Best At",align:"left",headerClass:"hidden sm:table-cell"},{key:"score",label:"Score",align:"right"}],r=o=>({Commits:"fas fa-code-commit text-green-500",PRs:"fas fa-code-pull-request text-blue-500",Reviews:"fas fa-eye text-purple-500",Comments:"fas fa-comment text-orange-500"})[o]||"";return(o,i)=>(y(),C("div",null,[N(en,{title:"Leaderboard",subtitle:"Top contributors ranked by their velocity score",icon:"fas fa-trophy","icon-color":"text-yellow-500",centered:""}),u("section",hf,[u("div",pf,[N(Ri,{columns:n,items:s.value,"empty-icon":"fas fa-users","empty-message":"No contributors found","row-class":"hover:bg-gray-50 dark:hover:bg-gray-800/30 transition group"},{rank:Z(({item:l})=>[N(Ci,{rank:l.rank},null,8,["rank"])]),contributor:Z(({item:l})=>[N(Si,{contributor:l,"show-github-link":""},null,8,["contributor"])]),achievements:Z(({item:l})=>[u("div",gf,[(y(!0),C(J,null,xe(A(Pi)(l.achievements),a=>(y(),ie(_s,{key:a,"achievement-id":a,size:"sm"},null,8,["achievement-id"]))),128)),(l.achievements||[]).length?q("",!0):(y(),C("span",vf,"-"))])]),team:Z(({item:l})=>[u("td",yf,[l.team?(y(),C("span",xf,w(l.team),1)):(y(),C("span",bf,"-"))])]),category:Z(({item:l})=>[u("td",_f,[l.top_category?(y(),C("span",wf,[u("i",{class:Q([r(l.top_category),"mr-1"])},null,2),ae(" "+w(l.top_category),1)])):(y(),C("span",kf,"-"))])]),score:Z(({item:l})=>[u("span",Cf,w(A(U)(l.score)),1)]),_:1},8,["items"])])])]))}},Sf={class:"flex items-center justify-center min-h-[60vh]"},Af={class:"text-center"},Ef={class:"text-gray-600 dark:text-gray-400"},Zn={__name:"LoadingState",props:{message:{type:String,default:"Loading..."}},setup(e){return(t,s)=>(y(),C("div",Sf,[u("div",Af,[s[0]||(s[0]=u("i",{class:"fas fa-spinner fa-spin text-4xl text-primary-500 mb-4"},null,-1)),u("p",Ef,w(e.message),1)])]))}},Pf={class:"flex items-center justify-center min-h-[60vh]"},$f={class:"text-center"},Tf={class:"text-gray-600 dark:text-gray-400"},er={__name:"ErrorState",props:{message:{type:String,default:"An error occurred"},icon:{type:String,default:"fas fa-exclamation-triangle"}},setup(e){return(t,s)=>(y(),C("div",Pf,[u("div",$f,[u("i",{class:Q([e.icon,"text-4xl text-red-500 mb-4"])},null,2),u("p",Tf,w(e.message),1),Dt(t.$slots,"actions")])]))}},Of=["href"],If={key:0,class:"fas fa-external-link-alt text-xs ml-1 opacity-50"},$i={__name:"GithubLink",props:{url:{type:String,required:!0},label:{type:String,default:""},showIcon:{type:Boolean,default:!0}},setup(e){return(t,s)=>(y(),C("a",{href:e.url,target:"_blank",rel:"noopener noreferrer",class:"hover:text-primary-500 transition-colors",onClick:s[0]||(s[0]=Qn(()=>{},["stop"]))},[Dt(t.$slots,"default",{},()=>[ae(w(e.label),1)]),e.showIcon?(y(),C("i",If)):q("",!0)],8,Of))}},Nf={class:"py-8 px-4"},Mf={class:"container mx-auto"},Df={class:"grid grid-cols-2 md:grid-cols-4 gap-4"},Lf={class:"py-8 px-4"},jf={class:"container mx-auto"},Ff={class:"text-gray-800 dark:text-white"},Vf={class:"text-gray-800 dark:text-white"},Hf={class:"text-gray-800 dark:text-white"},Bf={class:"text-green-500"},Gf={class:"text-red-500"},Uf={class:"text-lg font-bold gradient-text"},qf={__name:"Repository",setup(e){const t=Zs(),s=ke(null),n=ke(!0),r=ke(null),o=oe(()=>[{label:"Dashboard",to:"/"},{label:"Repositories"},{label:s.value?.name||t.params.name}]),i=[{key:"contributor",label:"Contributor",align:"left"},{key:"commits",label:"Commits",align:"center"},{key:"prs",label:"PRs",align:"center"},{key:"reviews",label:"Reviews",align:"center"},{key:"lines",label:"Lines +/-",align:"center"},{key:"score",label:"Score",align:"right"}];async function l(){n.value=!0,r.value=null;try{const a=await fetch(`./data/repos/${t.params.owner}/${t.params.name}/metrics.json`);if(!a.ok)throw new Error("Repository not found");s.value=await a.json()}catch(a){r.value=a.message}finally{n.value=!1}}return jt(l),Ge(()=>t.params,l),(a,c)=>(y(),C("div",null,[n.value?(y(),ie(Zn,{key:0,message:"Loading repository..."})):r.value?(y(),ie(er,{key:1,message:r.value},null,8,["message"])):s.value?(y(),C(J,{key:2},[N(en,{title:s.value.name,icon:"fas fa-code-branch","icon-color":"text-accent-500",breadcrumbs:o.value},{subtitle:Z(()=>[N($i,{url:`https://github.com/${s.value.owner}/${s.value.name}`},{default:Z(()=>[ae(w(s.value.owner)+"/"+w(s.value.name),1)]),_:1},8,["url"])]),_:1},8,["title","breadcrumbs"]),u("section",Nf,[u("div",Mf,[u("div",Df,[N(_e,{value:s.value.total_commits,label:"Commits",icon:"fas fa-code-commit","icon-color":"text-green-500"},null,8,["value"]),N(_e,{value:s.value.total_prs,label:"Pull Requests",icon:"fas fa-code-pull-request","icon-color":"text-blue-500"},null,8,["value"]),N(_e,{value:s.value.total_reviews,label:"Reviews",icon:"fas fa-eye","icon-color":"text-purple-500"},null,8,["value"]),N(_e,{value:s.value.active_contributors,label:"Contributors",icon:"fas fa-users","icon-color":"text-orange-500"},null,8,["value"])])])]),u("section",Lf,[u("div",jf,[N(It,{title:"Contributors",icon:"fas fa-users","icon-color":"text-blue-500"}),N(Ri,{columns:i,items:s.value.contributors,"empty-icon":"fas fa-users","empty-message":"No contributors found","row-class":"hover:bg-gray-50 dark:hover:bg-gray-800/30 transition group"},{contributor:Z(({item:d})=>[N(Si,{contributor:d},null,8,["contributor"])]),commits:Z(({item:d})=>[u("span",Ff,w(A(U)(d.commit_count)),1)]),prs:Z(({item:d})=>[u("span",Vf,w(A(U)(d.prs_opened)),1)]),reviews:Z(({item:d})=>[u("span",Hf,w(A(U)(d.reviews_given)),1)]),lines:Z(({item:d})=>[u("span",Bf,"+"+w(A(U)(d.lines_added)),1),c[0]||(c[0]=u("span",{class:"text-gray-400 mx-1"},"/",-1)),u("span",Gf,"-"+w(A(U)(d.lines_deleted)),1)]),score:Z(({item:d})=>[u("span",Uf,w(A(U)(d.score?.total||0)),1)]),_:1},8,["items"])])])],64)):q("",!0)]))}},Wf={class:"flex items-center space-x-4 mb-4"},Kf={class:"font-semibold text-gray-800 dark:text-white"},zf={class:"text-sm text-gray-500 dark:text-gray-400"},Qf={class:"grid grid-cols-3 gap-4 text-center mb-4"},Jf={class:"text-lg font-semibold text-gray-800 dark:text-white"},Yf={class:"text-lg font-semibold text-gray-800 dark:text-white"},Xf={class:"text-lg font-semibold text-gray-800 dark:text-white"},Zf={class:"flex items-center justify-between pt-4 border-t border-gray-200 dark:border-gray-700"},em={class:"text-xl font-bold gradient-text"},tm={key:0,class:"mt-4 flex flex-wrap gap-2"},sm={key:0,class:"inline-flex items-center justify-center w-8 h-8 rounded-lg bg-gray-200 dark:bg-gray-700 text-gray-600 dark:text-gray-300 text-xs font-bold"},nm={__name:"MemberCard",props:{member:{type:Object,required:!0},linkToProfile:{type:Boolean,default:!0}},setup(e){return(t,s)=>(y(),ie(jl(e.linkToProfile?A(Re):"div"),{to:e.linkToProfile?{name:"contributor",params:{login:e.member.login}}:void 0,class:Q(["card block",{"hover:shadow-lg transition cursor-pointer":e.linkToProfile}])},{default:Z(()=>[u("div",Wf,[N(Rs,{src:e.member.avatar_url,name:e.member.login,size:"lg"},null,8,["src","name"]),u("div",null,[u("h3",Kf,w(e.member.name||e.member.login),1),u("p",zf,"@"+w(e.member.login),1)])]),u("div",Qf,[u("div",null,[u("div",Jf,w(A(U)(e.member.commit_count)),1),s[0]||(s[0]=u("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"Commits",-1))]),u("div",null,[u("div",Yf,w(A(U)(e.member.prs_opened)),1),s[1]||(s[1]=u("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"PRs",-1))]),u("div",null,[u("div",Xf,w(A(U)(e.member.reviews_given)),1),s[2]||(s[2]=u("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"Reviews",-1))])]),u("div",Zf,[s[3]||(s[3]=u("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"Score",-1)),u("span",em,w(A(U)(e.member.score?.total||0)),1)]),e.member.achievements?.length?(y(),C("div",tm,[(y(!0),C(J,null,xe(e.member.achievements.slice(0,4),n=>(y(),ie(_s,{key:n,"achievement-id":n,size:"sm"},null,8,["achievement-id"]))),128)),e.member.achievements.length>4?(y(),C("span",sm," +"+w(e.member.achievements.length-4),1)):q("",!0)])):q("",!0)]),_:1},8,["to","class"]))}},rm={class:"py-8 px-4"},om={class:"container mx-auto"},im={class:"grid grid-cols-2 md:grid-cols-4 gap-4"},lm={class:"py-8 px-4"},am={class:"container mx-auto"},cm={class:"grid md:grid-cols-2 lg:grid-cols-3 gap-6"},um={__name:"Team",setup(e){const t=Zs(),s=Pe("globalData"),n=ke(null),r=ke(!0),o=ke(null),i=oe(()=>[{label:"Dashboard",to:"/"},{label:"Teams"},{label:n.value?.name||t.params.slug}]);function l(){r.value=!0,o.value=null;const c=(s.value?.teams||[]).find(d=>ki(d.name)===t.params.slug);c?n.value=c:o.value="Team not found",r.value=!1}return jt(l),Ge(()=>t.params,l),Ge(s,l),(a,c)=>(y(),C("div",null,[r.value?(y(),ie(Zn,{key:0,message:"Loading team..."})):o.value?(y(),ie(er,{key:1,message:o.value},null,8,["message"])):n.value?(y(),C(J,{key:2},[N(en,{title:n.value.name,breadcrumbs:i.value,subtitle:`${n.value.members?.length||0} team members`},{prefix:Z(()=>[u("div",{class:"w-4 h-4 rounded-full mr-4",style:St({backgroundColor:n.value.color||"#8b5cf6"})},null,4)]),_:1},8,["title","breadcrumbs","subtitle"]),u("section",rm,[u("div",om,[u("div",im,[N(_e,{value:n.value.total_score,label:"Total Score",icon:"fas fa-star","icon-color":"text-yellow-500"},null,8,["value"]),N(_e,{value:n.value.aggregated_metrics?.commit_count||0,label:"Commits",icon:"fas fa-code-commit","icon-color":"text-green-500"},null,8,["value"]),N(_e,{value:n.value.aggregated_metrics?.prs_merged||0,label:"PRs Merged",icon:"fas fa-code-merge","icon-color":"text-purple-500"},null,8,["value"]),N(_e,{value:n.value.aggregated_metrics?.reviews_given||0,label:"Reviews",icon:"fas fa-eye","icon-color":"text-blue-500"},null,8,["value"])])])]),u("section",lm,[u("div",am,[N(It,{title:"Team Members",icon:"fas fa-users","icon-color":"text-blue-500"}),u("div",cm,[(y(!0),C(J,null,xe(n.value.member_metrics,d=>(y(),ie(nm,{key:d.login,member:d},null,8,["member"]))),128))])])])],64)):q("",!0)]))}},dm={class:"space-y-3"},fm={class:"flex items-start justify-between mb-3"},mm={class:"flex items-center space-x-3"},hm={class:"text-sm font-semibold text-gray-800 dark:text-white"},pm={class:"flex items-center space-x-2 text-xs text-gray-500 dark:text-gray-400"},gm={class:"font-medium"},vm={class:"text-right"},ym={class:"text-gray-500 dark:text-gray-400 font-medium"},xm={class:"text-xs text-gray-500 dark:text-gray-400 mt-0.5"},bm={class:"h-2.5 bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden"},_m={class:"flex items-center justify-between mt-1.5"},wm={class:"flex items-center space-x-1"},km=["title"],Cm={key:0,class:"text-[10px] text-gray-400"},Rm={key:0,class:"text-center text-xs text-gray-500 dark:text-gray-400 pt-2"},Sm={key:1,class:"text-center py-8 text-gray-500 dark:text-gray-400"},Am={__name:"AchievementProgress",props:{contributor:{type:Object,required:!0},showEarned:{type:Boolean,default:!1},maxDisplay:{type:Number,default:6}},setup(e){const t=e,s=[1,10,25,50,100,250,500,1e3,5e3,1e4,25e3],n={1:"from-stone-400 to-stone-500",2:"from-green-400 to-emerald-500",3:"from-blue-400 to-indigo-500",4:"from-purple-400 to-violet-500",5:"from-yellow-400 to-amber-500",6:"from-orange-400 to-red-500",7:"from-red-500 to-rose-600",8:"from-pink-500 to-fuchsia-600",9:"from-cyan-400 to-teal-500",10:"from-emerald-400 to-cyan-500",11:"from-violet-500 to-purple-600"},r={1:"bg-stone-500",2:"bg-green-500",3:"bg-blue-500",4:"bg-purple-500",5:"bg-yellow-500",6:"bg-orange-500",7:"bg-red-500",8:"bg-pink-500",9:"bg-cyan-500",10:"bg-emerald-500",11:"bg-violet-500"},o=[{category:"Commits",icon:"fa-code-commit",iconColor:"text-green-500",getValue:d=>d.commit_count||0,achievements:[{id:"first-commit",threshold:1,name:"First Steps"},{id:"commit-10",threshold:10,name:"Getting Started"},{id:"commit-25",threshold:25,name:"Warming Up"},{id:"commit-50",threshold:50,name:"On A Roll"},{id:"commit-100",threshold:100,name:"Committed"},{id:"commit-250",threshold:250,name:"Dedicated"},{id:"commit-500",threshold:500,name:"Code Machine"},{id:"commit-1000",threshold:1e3,name:"Code Warrior"},{id:"commit-5000",threshold:5e3,name:"Legendary"},{id:"commit-10000",threshold:1e4,name:"Mythical"},{id:"commit-25000",threshold:25e3,name:"Transcendent"}]},{category:"Pull Requests",icon:"fa-code-pull-request",iconColor:"text-blue-500",getValue:d=>d.prs_opened||0,achievements:[{id:"pr-opener",threshold:1,name:"PR Pioneer"},{id:"pr-10",threshold:10,name:"Pull Request Pro"},{id:"pr-25",threshold:25,name:"PR Regular"},{id:"pr-50",threshold:50,name:"Merge Master"},{id:"pr-100",threshold:100,name:"PR Champion"}]},{category:"Reviews",icon:"fa-eye",iconColor:"text-purple-500",getValue:d=>d.reviews_given||0,achievements:[{id:"reviewer",threshold:1,name:"Code Reviewer"},{id:"reviewer-10",threshold:10,name:"Review Starter"},{id:"reviewer-25",threshold:25,name:"Review Regular"},{id:"reviewer-50",threshold:50,name:"Review Expert"},{id:"reviewer-100",threshold:100,name:"Review Guru"}]},{category:"Lines Added",icon:"fa-plus",iconColor:"text-emerald-500",getValue:d=>d.lines_added||0,achievements:[{id:"lines-1000",threshold:1e3,name:"Thousand Lines"},{id:"lines-10000",threshold:1e4,name:"Ten Thousand"}]},{category:"Lines Deleted",icon:"fa-minus",iconColor:"text-red-500",getValue:d=>d.lines_deleted||0,achievements:[{id:"cleaner",threshold:1e3,name:"Code Cleaner"},{id:"refactorer",threshold:1e4,name:"Refactoring Champion"}]},{category:"Small PRs",icon:"fa-compress",iconColor:"text-cyan-500",getValue:d=>d.small_pr_count||0,achievements:[{id:"small-pr-10",threshold:10,name:"Small PR Advocate"},{id:"small-pr-50",threshold:50,name:"Atomic Commits Hero"}]},{category:"Perfect PRs",icon:"fa-gem",iconColor:"text-pink-500",getValue:d=>d.perfect_prs||0,achievements:[{id:"perfect-pr-5",threshold:5,name:"Clean Code"},{id:"perfect-pr-25",threshold:25,name:"Flawless"}]},{category:"Active Days",icon:"fa-calendar-check",iconColor:"text-orange-500",getValue:d=>d.active_days||0,achievements:[{id:"active-30",threshold:30,name:"Consistent Contributor"},{id:"active-100",threshold:100,name:"Dedicated Developer"}]},{category:"Streak",icon:"fa-fire",iconColor:"text-amber-500",getValue:d=>d.longest_streak||0,achievements:[{id:"streak-7",threshold:7,name:"Week Warrior"},{id:"streak-30",threshold:30,name:"Month Master"}]}],i=d=>{for(let m=s.length-1;m>=0;m--)if(d>=s[m])return m+1;return 1},l=d=>d.map(m=>({threshold:m.threshold,name:m.name,tier:i(m.threshold)})),a=oe(()=>{const d=new Set(t.contributor.achievements||[]),m=[];for(const p of o){const v=p.getValue(t.contributor);let S=null,I=null;const K=l(p.achievements);for(const Ce of p.achievements)v>=Ce.threshold?I=Ce:S||(S=Ce);if(!S)continue;const j=I?I.threshold:0,D=S.threshold-j,V=v-j,L=Math.min(100,Math.max(0,Math.round(V/D*100))),ee=i(S.threshold),ve=K.findIndex(Ce=>Ce.threshold===S.threshold),he=K.length;m.push({category:p.category,icon:p.icon,iconColor:p.iconColor,currentValue:v,target:S.threshold,name:S.name,id:S.id,progress:L,tier:ee,tierIndex:ve+1,totalTiers:he,allTiers:K,gradient:n[ee],progressColor:r[ee],isClose:L>=75,remaining:S.threshold-v,isEarned:d.has(S.id)})}return m.sort((p,v)=>v.progress-p.progress),m}),c=oe(()=>{new Set(t.contributor.achievements||[]);let d=0;for(const m of o){const p=m.getValue(t.contributor);for(const v of m.achievements)p(y(),C("div",dm,[(y(!0),C(J,null,xe(a.value,p=>(y(),C("div",{key:p.id,class:"bg-gray-50 dark:bg-gray-800/50 rounded-xl p-4 hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors"},[u("div",fm,[u("div",mm,[u("div",{class:Q(["w-10 h-10 rounded-lg bg-gradient-to-br flex items-center justify-center shadow-md",p.gradient])},[u("i",{class:Q(["fas text-white text-sm",p.icon])},null,2)],2),u("div",null,[u("div",hm,w(p.name),1),u("div",pm,[u("span",null,w(p.category),1),m[0]||(m[0]=u("span",{class:"text-gray-300 dark:text-gray-600"},"•",-1)),u("span",gm,"Tier "+w(p.tierIndex)+"/"+w(p.totalTiers),1)])])]),u("div",vm,[u("div",{class:Q(["text-sm font-bold",p.isClose?"text-green-500":"text-gray-700 dark:text-gray-200"])},[ae(w(A(U)(p.currentValue))+" ",1),m[1]||(m[1]=u("span",{class:"text-gray-400 dark:text-gray-500 font-normal"},"/",-1)),u("span",ym,w(A(U)(p.target)),1)],2),u("div",xm,w(p.remaining>0?`${A(U)(p.remaining)} to go`:"Ready to claim!"),1)])]),u("div",bm,[u("div",{class:Q(["h-full rounded-full transition-all duration-500 ease-out",p.progressColor]),style:St({width:`${p.progress}%`})},null,6)]),u("div",_m,[u("div",wm,[(y(!0),C(J,null,xe(p.allTiers.slice(0,5),(v,S)=>(y(),C("span",{key:v.threshold,class:Q(["w-1.5 h-1.5 rounded-full",S5?(y(),C("span",Cm,"+"+w(p.totalTiers-5),1)):q("",!0)]),u("span",{class:Q(["text-xs font-semibold",p.isClose?"text-green-500":"text-gray-400 dark:text-gray-500"])},w(p.progress)+"% ",3)])]))),128)),c.value>0?(y(),C("div",Rm," +"+w(c.value)+" more achievements to unlock ",1)):q("",!0),a.value.length?q("",!0):(y(),C("div",Sm,[...m[2]||(m[2]=[u("div",{class:"w-16 h-16 mx-auto mb-3 rounded-2xl bg-gradient-to-br from-yellow-400 to-amber-500 flex items-center justify-center shadow-lg"},[u("i",{class:"fas fa-trophy text-2xl text-white"})],-1),u("p",{class:"font-medium text-gray-700 dark:text-gray-300"},"All achievements unlocked!",-1),u("p",{class:"text-sm mt-1"},"You're a legend!",-1)])]))]))}},Em={class:"py-12 px-4"},Pm={class:"container mx-auto"},$m={class:"flex flex-col md:flex-row items-center md:items-start space-y-4 md:space-y-0 md:space-x-8"},Tm={class:"text-center md:text-left"},Om={class:"text-4xl font-bold gradient-text"},Im={class:"text-xl text-gray-500 dark:text-gray-400 mt-1"},Nm={class:"flex items-center justify-center md:justify-start space-x-4 mt-4"},Mm={class:"score-card rounded-lg px-4 py-2"},Dm={class:"text-2xl font-bold gradient-text ml-2"},Lm={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},jm={key:0},Fm={key:0,class:"mt-6 flex flex-wrap justify-center md:justify-start gap-3"},Vm={class:"py-8 px-4"},Hm={class:"container mx-auto"},Bm={class:"grid grid-cols-2 md:grid-cols-4 gap-4"},Gm={class:"py-8 px-4"},Um={class:"container mx-auto"},qm={class:"grid md:grid-cols-2 gap-6"},Wm={class:"card"},Km={class:"space-y-4"},zm={class:"flex items-center justify-between"},Qm={class:"text-green-500 font-semibold"},Jm={class:"flex items-center justify-between"},Ym={class:"text-red-500 font-semibold"},Xm={key:0,class:"flex items-center justify-between"},Zm={class:"text-emerald-500 font-semibold"},e0={key:1,class:"flex items-center justify-between"},t0={class:"text-rose-500 font-semibold"},s0={key:2,class:"flex items-center justify-between"},n0={class:"text-cyan-500 font-semibold"},r0={key:3,class:"flex items-center justify-between"},o0={class:"text-amber-500 font-semibold"},i0={class:"flex items-center justify-between"},l0={class:"text-gray-800 dark:text-white font-semibold"},a0={key:4,class:"flex items-center justify-between"},c0={class:"text-gray-800 dark:text-white font-semibold"},u0={class:"card"},d0={class:"space-y-4"},f0={class:"flex items-center justify-between"},m0={class:"text-gray-800 dark:text-white font-semibold"},h0={class:"flex items-center justify-between"},p0={class:"text-green-500 font-semibold"},g0={class:"flex items-center justify-between"},v0={class:"text-orange-500 font-semibold"},y0={class:"flex items-center justify-between"},x0={class:"text-gray-800 dark:text-white font-semibold"},b0={key:0,class:"flex items-center justify-between"},_0={class:"text-gray-800 dark:text-white font-semibold"},w0={key:0,class:"card"},k0={class:"space-y-4"},C0={class:"flex items-center justify-between"},R0={class:"text-red-500 font-semibold"},S0={class:"flex items-center justify-between"},A0={class:"text-green-500 font-semibold"},E0={class:"flex items-center justify-between"},P0={class:"text-blue-500 font-semibold"},$0={class:"flex items-center justify-between"},T0={class:"text-purple-500 font-semibold"},O0={key:0,class:"py-8 px-4"},I0={class:"container mx-auto"},N0={class:"card"},M0={class:"grid grid-cols-2 md:grid-cols-4 lg:grid-cols-8 gap-4"},D0={class:"text-center p-4 rounded-lg bg-gray-50 dark:bg-gray-800/50"},L0={class:"text-2xl font-bold text-green-500"},j0={class:"text-xs text-gray-400 dark:text-gray-500"},F0={class:"text-center p-4 rounded-lg bg-gray-50 dark:bg-gray-800/50"},V0={class:"text-2xl font-bold text-blue-500"},H0={class:"text-xs text-gray-400 dark:text-gray-500"},B0={class:"text-center p-4 rounded-lg bg-gray-50 dark:bg-gray-800/50"},G0={class:"text-2xl font-bold text-purple-500"},U0={class:"text-xs text-gray-400 dark:text-gray-500"},q0={class:"text-center p-4 rounded-lg bg-gray-50 dark:bg-gray-800/50"},W0={class:"text-2xl font-bold text-pink-500"},K0={class:"text-xs text-gray-400 dark:text-gray-500"},z0={class:"text-center p-4 rounded-lg bg-gray-50 dark:bg-gray-800/50"},Q0={class:"text-2xl font-bold text-red-500"},J0={class:"text-center p-4 rounded-lg bg-gray-50 dark:bg-gray-800/50"},Y0={class:"text-2xl font-bold text-orange-500"},X0={class:"text-center p-4 rounded-lg bg-gray-50 dark:bg-gray-800/50"},Z0={class:"text-2xl font-bold text-yellow-500"},eh={class:"text-center p-4 rounded-lg bg-gray-50 dark:bg-gray-800/50"},th={class:"text-2xl font-bold text-indigo-500"},sh={class:"text-xs text-gray-400 dark:text-gray-500"},nh={class:"py-8 px-4"},rh={class:"container mx-auto"},oh={class:"grid md:grid-cols-2 gap-6"},ih={key:0,class:"card"},lh={class:"flex items-center justify-between mb-6"},ah={class:"px-2.5 py-1 rounded-full bg-gradient-to-r from-yellow-400 to-amber-500 text-white text-sm font-bold shadow-md"},ch={class:"grid grid-cols-4 sm:grid-cols-5 gap-3"},uh={class:"card"},dh={key:1,class:"py-8 px-4"},fh={class:"container mx-auto"},mh={class:"flex flex-wrap gap-2"},hh={__name:"Contributor",setup(e){const t=Zs(),s=Pe("globalData"),n=ke(null),r=ke(!0),o=ke(null),i=oe(()=>[{label:"Dashboard",to:"/"},{label:"Contributors"},{label:n.value?.login||t.params.login}]);async function l(){r.value=!0,o.value=null;const a=t.params.login;try{const c=await fetch(`./data/contributors/${a}.json`);if(c.ok){const d=await c.json(),p=(s.value?.leaderboard||[]).find(v=>v.login===a);p&&(d.score={total:p.score,rank:p.rank,breakdown:d.score?.breakdown},d.achievements=p.achievements),n.value=d}else{let m=(s.value?.leaderboard||[]).find(p=>p.login===a);if(!m){const p=s.value?.repositories||[];for(const v of p){const S=v.contributors?.find(I=>I.login===a);if(S){m=S;break}}}m?n.value=m:o.value="Contributor not found"}}catch(c){o.value=`Failed to load contributor: ${c.message}`}r.value=!1}return jt(l),Ge(()=>t.params,l),Ge(s,l),(a,c)=>(y(),C("div",null,[r.value?(y(),ie(Zn,{key:0,message:"Loading contributor..."})):o.value?(y(),ie(er,{key:1,message:o.value},null,8,["message"])):n.value?(y(),C(J,{key:2},[u("header",Em,[u("div",Pm,[N(en,{breadcrumbs:i.value,title:""},null,8,["breadcrumbs"]),u("div",$m,[N(Rs,{src:n.value.avatar_url,name:n.value.login,size:"2xl",class:"shadow-modern"},null,8,["src","name"]),u("div",Tm,[u("h1",Om,w(n.value.name||n.value.login),1),u("p",Im,[N($i,{url:`https://github.com/${n.value.login}`},{default:Z(()=>[ae(" @"+w(n.value.login),1)]),_:1},8,["url"])]),u("div",Nm,[u("div",Mm,[c[0]||(c[0]=u("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"Score:",-1)),u("span",Dm,w(A(U)(n.value.score?.total||n.value.score||0)),1)]),n.value.score?.rank?(y(),C("div",Lm,[ae(" Rank #"+w(n.value.score.rank)+" ",1),n.value.score?.percentile_rank?(y(),C("span",jm," (Top "+w(A(Iu)(n.value.score.percentile_rank))+") ",1)):q("",!0)])):q("",!0)]),n.value.achievements?.length?(y(),C("div",Fm,[(y(!0),C(J,null,xe(A(Pi)(n.value.achievements),d=>(y(),ie(_s,{key:d,"achievement-id":d,size:"lg","show-label":""},null,8,["achievement-id"]))),128))])):q("",!0)])])])]),u("section",Vm,[u("div",Hm,[u("div",Bm,[N(_e,{value:n.value.commit_count||0,label:"Commits",icon:"fas fa-code-commit","icon-color":"text-green-500"},null,8,["value"]),N(_e,{value:n.value.prs_opened||0,label:"PRs Opened",icon:"fas fa-code-pull-request","icon-color":"text-blue-500"},null,8,["value"]),N(_e,{value:n.value.prs_merged||0,label:"PRs Merged",icon:"fas fa-code-merge","icon-color":"text-purple-500"},null,8,["value"]),N(_e,{value:n.value.reviews_given||0,label:"Reviews Given",icon:"fas fa-eye","icon-color":"text-orange-500"},null,8,["value"])])])]),u("section",Gm,[u("div",Um,[u("div",qm,[u("div",Wm,[c[9]||(c[9]=u("h3",{class:"text-lg font-semibold text-gray-800 dark:text-white mb-4"},[u("i",{class:"fas fa-code text-green-500 mr-2"}),ae("Code Contributions ")],-1)),u("div",Km,[u("div",zm,[c[1]||(c[1]=u("span",{class:"text-gray-600 dark:text-gray-300"},"Lines Added",-1)),u("span",Qm," +"+w(A(U)(n.value.lines_added||0)),1)]),u("div",Jm,[c[2]||(c[2]=u("span",{class:"text-gray-600 dark:text-gray-300"},"Lines Deleted",-1)),u("span",Ym," -"+w(A(U)(n.value.lines_deleted||0)),1)]),n.value.meaningful_lines_added!==void 0?(y(),C("div",Xm,[c[3]||(c[3]=u("span",{class:"text-gray-600 dark:text-gray-300"},"Meaningful Lines Added",-1)),u("span",Zm," +"+w(A(U)(n.value.meaningful_lines_added||0)),1)])):q("",!0),n.value.meaningful_lines_deleted!==void 0?(y(),C("div",e0,[c[4]||(c[4]=u("span",{class:"text-gray-600 dark:text-gray-300"},"Meaningful Lines Deleted",-1)),u("span",t0," -"+w(A(U)(n.value.meaningful_lines_deleted||0)),1)])):q("",!0),n.value.comment_lines_added!==void 0?(y(),C("div",s0,[c[5]||(c[5]=u("span",{class:"text-gray-600 dark:text-gray-300"},"Comment Lines Added",-1)),u("span",n0," +"+w(A(U)(n.value.comment_lines_added||0)),1)])):q("",!0),n.value.comment_lines_deleted!==void 0?(y(),C("div",r0,[c[6]||(c[6]=u("span",{class:"text-gray-600 dark:text-gray-300"},"Comment Lines Deleted",-1)),u("span",o0," -"+w(A(U)(n.value.comment_lines_deleted||0)),1)])):q("",!0),u("div",i0,[c[7]||(c[7]=u("span",{class:"text-gray-600 dark:text-gray-300"},"Files Changed",-1)),u("span",l0,w(A(U)(n.value.files_changed||0)),1)]),n.value.avg_pr_size?(y(),C("div",a0,[c[8]||(c[8]=u("span",{class:"text-gray-600 dark:text-gray-300"},"Avg PR Size",-1)),u("span",c0,w(A(U)(Math.round(n.value.avg_pr_size)))+" lines ",1)])):q("",!0)])]),u("div",u0,[c[15]||(c[15]=u("h3",{class:"text-lg font-semibold text-gray-800 dark:text-white mb-4"},[u("i",{class:"fas fa-comments text-purple-500 mr-2"}),ae("Review Activity ")],-1)),u("div",d0,[u("div",f0,[c[10]||(c[10]=u("span",{class:"text-gray-600 dark:text-gray-300"},"Reviews Given",-1)),u("span",m0,w(A(U)(n.value.reviews_given||0)),1)]),u("div",h0,[c[11]||(c[11]=u("span",{class:"text-gray-600 dark:text-gray-300"},"Approvals",-1)),u("span",p0,w(A(U)(n.value.approvals_given||0)),1)]),u("div",g0,[c[12]||(c[12]=u("span",{class:"text-gray-600 dark:text-gray-300"},"Changes Requested",-1)),u("span",v0,w(A(U)(n.value.changes_requested||0)),1)]),u("div",y0,[c[13]||(c[13]=u("span",{class:"text-gray-600 dark:text-gray-300"},"Review Comments",-1)),u("span",x0,w(A(U)(n.value.review_comments||0)),1)]),n.value.avg_review_time_hours?(y(),C("div",b0,[c[14]||(c[14]=u("span",{class:"text-gray-600 dark:text-gray-300"},"Avg Review Time",-1)),u("span",_0,w(A(Ou)(n.value.avg_review_time_hours)),1)])):q("",!0)])]),n.value.issues_opened||n.value.issues_closed||n.value.issue_comments||n.value.issue_references_in_commits?(y(),C("div",w0,[c[20]||(c[20]=u("h3",{class:"text-lg font-semibold text-gray-800 dark:text-white mb-4"},[u("i",{class:"fas fa-bug text-red-500 mr-2"}),ae("Issue Activity ")],-1)),u("div",k0,[u("div",C0,[c[16]||(c[16]=u("span",{class:"text-gray-600 dark:text-gray-300"},"Issues Opened",-1)),u("span",R0,w(A(U)(n.value.issues_opened||0)),1)]),u("div",S0,[c[17]||(c[17]=u("span",{class:"text-gray-600 dark:text-gray-300"},"Issues Closed",-1)),u("span",A0,w(A(U)(n.value.issues_closed||0)),1)]),u("div",E0,[c[18]||(c[18]=u("span",{class:"text-gray-600 dark:text-gray-300"},"Issue Comments",-1)),u("span",P0,w(A(U)(n.value.issue_comments||0)),1)]),u("div",$0,[c[19]||(c[19]=u("span",{class:"text-gray-600 dark:text-gray-300"},"Issue References in Commits",-1)),u("span",T0,w(A(U)(n.value.issue_references_in_commits||0)),1)])])])):q("",!0)])])]),n.value.score?.breakdown?(y(),C("section",O0,[u("div",I0,[u("div",N0,[c[32]||(c[32]=u("h3",{class:"text-lg font-semibold text-gray-800 dark:text-white mb-4"},[u("i",{class:"fas fa-chart-pie gradient-text mr-2"}),ae("Score Breakdown ")],-1)),u("div",M0,[u("div",D0,[u("div",L0,w(A(U)(n.value.score.breakdown.commits||0)),1),c[21]||(c[21]=u("div",{class:"text-xs text-gray-500 dark:text-gray-400 mt-1"},"Commits",-1)),u("div",j0,w(n.value.commit_count||0)+" × 10 pts",1)]),u("div",F0,[u("div",V0,w(A(U)(n.value.score.breakdown.prs||0)),1),c[22]||(c[22]=u("div",{class:"text-xs text-gray-500 dark:text-gray-400 mt-1"},"PRs",-1)),u("div",H0,w(n.value.prs_opened||0)+" opened + "+w(n.value.prs_merged||0)+" merged",1)]),u("div",B0,[u("div",G0,w(A(U)(n.value.score.breakdown.reviews||0)),1),c[23]||(c[23]=u("div",{class:"text-xs text-gray-500 dark:text-gray-400 mt-1"},"Reviews",-1)),u("div",U0,w(n.value.reviews_given||0)+" × 30 pts",1)]),u("div",q0,[u("div",W0,w(A(U)(n.value.score.breakdown.comments||0)),1),c[24]||(c[24]=u("div",{class:"text-xs text-gray-500 dark:text-gray-400 mt-1"},"Comments",-1)),u("div",K0,w(n.value.review_comments||0)+" × 5 pts",1)]),u("div",z0,[u("div",Q0,w(A(U)(n.value.score.breakdown.issues||0)),1),c[25]||(c[25]=u("div",{class:"text-xs text-gray-500 dark:text-gray-400 mt-1"},"Issues",-1)),c[26]||(c[26]=u("div",{class:"text-xs text-gray-400 dark:text-gray-500"},"opened, closed, comments, refs",-1))]),u("div",J0,[u("div",Y0,w(A(U)(n.value.score.breakdown.line_changes||0)),1),c[27]||(c[27]=u("div",{class:"text-xs text-gray-500 dark:text-gray-400 mt-1"},"Line Changes",-1)),c[28]||(c[28]=u("div",{class:"text-xs text-gray-400 dark:text-gray-500"},"meaningful lines × 0.1 pts",-1))]),u("div",X0,[u("div",Z0,w(A(U)(n.value.score.breakdown.response_bonus||0)),1),c[29]||(c[29]=u("div",{class:"text-xs text-gray-500 dark:text-gray-400 mt-1"},"Response Bonus",-1)),c[30]||(c[30]=u("div",{class:"text-xs text-gray-400 dark:text-gray-500"},"fast review bonus",-1))]),u("div",eh,[u("div",th,w(A(U)(n.value.score.breakdown.out_of_hours||0)),1),c[31]||(c[31]=u("div",{class:"text-xs text-gray-500 dark:text-gray-400 mt-1"},"Out of Hours",-1)),u("div",sh,w(n.value.out_of_hours_count||0)+" × 2 pts",1)])])])])])):q("",!0),u("section",nh,[u("div",rh,[u("div",oh,[n.value.achievements?.length?(y(),C("div",ih,[u("div",lh,[c[33]||(c[33]=u("h3",{class:"text-lg font-semibold text-gray-800 dark:text-white"},[u("i",{class:"fas fa-award gradient-text mr-2"}),ae("Achievements Earned ")],-1)),u("span",ah,w(n.value.achievements.length),1)]),u("div",ch,[(y(!0),C(J,null,xe(n.value.achievements,d=>(y(),C("div",{key:d,class:"flex flex-col items-center p-2 rounded-xl bg-gray-50 dark:bg-gray-800/50 hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors"},[N(_s,{"achievement-id":d,size:"md","show-label":""},null,8,["achievement-id"])]))),128))])])):q("",!0),u("div",uh,[c[34]||(c[34]=u("h3",{class:"text-lg font-semibold text-gray-800 dark:text-white mb-6"},[u("i",{class:"fas fa-chart-line text-primary-500 mr-2"}),ae("Next Achievements ")],-1)),N(Am,{contributor:n.value,"max-display":6},null,8,["contributor"])])])])]),n.value.repositories_contributed?.length?(y(),C("section",dh,[u("div",fh,[N(It,{title:`Contributed to ${n.value.repositories_contributed.length} Repositories`,icon:"fas fa-folder-tree","icon-color":"text-blue-500"},null,8,["title"]),u("div",mh,[(y(!0),C(J,null,xe(n.value.repositories_contributed,d=>(y(),ie(A(Re),{key:d,to:`/repos/${d}`,class:"inline-flex items-center px-3 py-1.5 rounded-full text-sm bg-gray-100 dark:bg-gray-800 text-gray-700 dark:text-gray-300 hover:bg-primary-100 dark:hover:bg-primary-900/30 hover:text-primary-700 dark:hover:text-primary-300 transition-colors"},{default:Z(()=>[c[35]||(c[35]=u("i",{class:"fas fa-code-branch text-gray-400 mr-2"},null,-1)),ae(" "+w(d),1)]),_:2},1032,["to"]))),128))])])])):q("",!0)],64)):q("",!0)]))}},ph=[{path:"/",name:"dashboard",component:Kd},{path:"/leaderboard",name:"leaderboard",component:Rf},{path:"/repos/:owner/:name",name:"repository",component:qf},{path:"/teams/:slug",name:"team",component:um},{path:"/contributors/:login",name:"contributor",component:hh}],gh=au({history:Hc(),routes:ph,scrollBehavior(){return{top:0}}}),Ti=ec(Tu);Ti.use(gh);Ti.mount("#app");
diff --git a/internal/generator/site/dist/assets/index-LBN7XWrH.js b/internal/generator/site/dist/assets/index-LBN7XWrH.js
deleted file mode 100644
index 85cca9e..0000000
--- a/internal/generator/site/dist/assets/index-LBN7XWrH.js
+++ /dev/null
@@ -1 +0,0 @@
-import{C as rr,r as Oi}from"./chart-Bcjh2pZL.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))s(r);new MutationObserver(r=>{for(const o of r)if(o.type==="childList")for(const i of o.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&s(i)}).observe(document,{childList:!0,subtree:!0});function n(r){const o={};return r.integrity&&(o.integrity=r.integrity),r.referrerPolicy&&(o.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?o.credentials="include":r.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function s(r){if(r.ep)return;r.ep=!0;const o=n(r);fetch(r.href,o)}})();function Is(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const ue={},qt=[],rt=()=>{},Xr=()=>!1,Vn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Ns=e=>e.startsWith("onUpdate:"),$e=Object.assign,Ms=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Ii=Object.prototype.hasOwnProperty,re=(e,t)=>Ii.call(e,t),U=Array.isArray,Wt=e=>kn(e)==="[object Map]",Hn=e=>kn(e)==="[object Set]",or=e=>kn(e)==="[object Date]",K=e=>typeof e=="function",pe=e=>typeof e=="string",We=e=>typeof e=="symbol",de=e=>e!==null&&typeof e=="object",Zr=e=>(de(e)||K(e))&&K(e.then)&&K(e.catch),eo=Object.prototype.toString,kn=e=>eo.call(e),Ni=e=>kn(e).slice(8,-1),to=e=>kn(e)==="[object Object]",Ds=e=>pe(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,ln=Is(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Bn=e=>{const t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},Mi=/-\w/g,Ge=Bn(e=>e.replace(Mi,t=>t.slice(1).toUpperCase())),Di=/\B([A-Z])/g,Lt=Bn(e=>e.replace(Di,"-$1").toLowerCase()),Un=Bn(e=>e.charAt(0).toUpperCase()+e.slice(1)),ns=Bn(e=>e?`on${Un(e)}`:""),Ct=(e,t)=>!Object.is(e,t),$n=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},Li=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let ir;const Gn=()=>ir||(ir=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function St(e){if(U(e)){const t={};for(let n=0;n{if(n){const s=n.split(Fi);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function J(e){let t="";if(pe(e))t=e;else if(U(e))for(let n=0;nqn(n,t))}const oo=e=>!!(e&&e.__v_isRef===!0),k=e=>pe(e)?e:e==null?"":U(e)||de(e)&&(e.toString===eo||!K(e.toString))?oo(e)?k(e.value):JSON.stringify(e,io,2):String(e),io=(e,t)=>oo(t)?io(e,t.value):Wt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],o)=>(n[ss(s,o)+" =>"]=r,n),{})}:Hn(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>ss(n))}:We(t)?ss(t):de(t)&&!U(t)&&!to(t)?String(t):t,ss=(e,t="")=>{var n;return We(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};let Le;class qi{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=Le,!t&&Le&&(this.index=(Le.scopes||(Le.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0&&--this._on===0&&(Le=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n0)return;if(cn){let t=cn;for(cn=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;an;){let t=an;for(an=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function uo(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function fo(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),Fs(s),Ki(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function ys(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(mo(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function mo(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===gn)||(e.globalVersion=gn,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!ys(e))))return;e.flags|=2;const t=e.dep,n=me,s=qe;me=e,qe=!0;try{uo(e);const r=e.fn(e._value);(t.version===0||Ct(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{me=n,qe=s,fo(e),e.flags&=-3}}function Fs(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let o=n.computed.deps;o;o=o.nextDep)Fs(o,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Ki(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let qe=!0;const ho=[];function ft(){ho.push(qe),qe=!1}function mt(){const e=ho.pop();qe=e===void 0?!0:e}function lr(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=me;me=void 0;try{t()}finally{me=n}}}let gn=0;class zi{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Vs{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!me||!qe||me===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==me)n=this.activeLink=new zi(me,this),me.deps?(n.prevDep=me.depsTail,me.depsTail.nextDep=n,me.depsTail=n):me.deps=me.depsTail=n,go(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=me.depsTail,n.nextDep=void 0,me.depsTail.nextDep=n,me.depsTail=n,me.deps===n&&(me.deps=s)}return n}trigger(t){this.version++,gn++,this.notify(t)}notify(t){Ls();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{js()}}}function go(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)go(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const xs=new WeakMap,Nt=Symbol(""),bs=Symbol(""),pn=Symbol("");function Se(e,t,n){if(qe&&me){let s=xs.get(e);s||xs.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new Vs),r.map=s,r.key=n),r.track()}}function ut(e,t,n,s,r,o){const i=xs.get(e);if(!i){gn++;return}const l=a=>{a&&a.trigger()};if(Ls(),t==="clear")i.forEach(l);else{const a=U(e),c=a&&Ds(n);if(a&&n==="length"){const u=Number(s);i.forEach((m,g)=>{(g==="length"||g===pn||!We(g)&&g>=u)&&l(m)})}else switch((n!==void 0||i.has(void 0))&&l(i.get(n)),c&&l(i.get(pn)),t){case"add":a?c&&l(i.get("length")):(l(i.get(Nt)),Wt(e)&&l(i.get(bs)));break;case"delete":a||(l(i.get(Nt)),Wt(e)&&l(i.get(bs)));break;case"set":Wt(e)&&l(i.get(Nt));break}}js()}function Bt(e){const t=se(e);return t===e?t:(Se(t,"iterate",pn),Be(e)?t:t.map(Ke))}function Wn(e){return Se(e=se(e),"iterate",pn),e}function _t(e,t){return ht(e)?Mt(e)?Qt(Ke(t)):Qt(t):Ke(t)}const Ji={__proto__:null,[Symbol.iterator](){return os(this,Symbol.iterator,e=>_t(this,e))},concat(...e){return Bt(this).concat(...e.map(t=>U(t)?Bt(t):t))},entries(){return os(this,"entries",e=>(e[1]=_t(this,e[1]),e))},every(e,t){return lt(this,"every",e,t,void 0,arguments)},filter(e,t){return lt(this,"filter",e,t,n=>n.map(s=>_t(this,s)),arguments)},find(e,t){return lt(this,"find",e,t,n=>_t(this,n),arguments)},findIndex(e,t){return lt(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return lt(this,"findLast",e,t,n=>_t(this,n),arguments)},findLastIndex(e,t){return lt(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return lt(this,"forEach",e,t,void 0,arguments)},includes(...e){return is(this,"includes",e)},indexOf(...e){return is(this,"indexOf",e)},join(e){return Bt(this).join(e)},lastIndexOf(...e){return is(this,"lastIndexOf",e)},map(e,t){return lt(this,"map",e,t,void 0,arguments)},pop(){return nn(this,"pop")},push(...e){return nn(this,"push",e)},reduce(e,...t){return ar(this,"reduce",e,t)},reduceRight(e,...t){return ar(this,"reduceRight",e,t)},shift(){return nn(this,"shift")},some(e,t){return lt(this,"some",e,t,void 0,arguments)},splice(...e){return nn(this,"splice",e)},toReversed(){return Bt(this).toReversed()},toSorted(e){return Bt(this).toSorted(e)},toSpliced(...e){return Bt(this).toSpliced(...e)},unshift(...e){return nn(this,"unshift",e)},values(){return os(this,"values",e=>_t(this,e))}};function os(e,t,n){const s=Wn(e),r=s[t]();return s!==e&&!Be(e)&&(r._next=r.next,r.next=()=>{const o=r._next();return o.done||(o.value=n(o.value)),o}),r}const Qi=Array.prototype;function lt(e,t,n,s,r,o){const i=Wn(e),l=i!==e&&!Be(e),a=i[t];if(a!==Qi[t]){const m=a.apply(e,o);return l?Ke(m):m}let c=n;i!==e&&(l?c=function(m,g){return n.call(this,_t(e,m),g,e)}:n.length>2&&(c=function(m,g){return n.call(this,m,g,e)}));const u=a.call(i,c,s);return l&&r?r(u):u}function ar(e,t,n,s){const r=Wn(e);let o=n;return r!==e&&(Be(e)?n.length>3&&(o=function(i,l,a){return n.call(this,i,l,a,e)}):o=function(i,l,a){return n.call(this,i,_t(e,l),a,e)}),r[t](o,...s)}function is(e,t,n){const s=se(e);Se(s,"iterate",pn);const r=s[t](...n);return(r===-1||r===!1)&&Us(n[0])?(n[0]=se(n[0]),s[t](...n)):r}function nn(e,t,n=[]){ft(),Ls();const s=se(e)[t].apply(e,n);return js(),mt(),s}const Yi=Is("__proto__,__v_isRef,__isVue"),po=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(We));function Xi(e){We(e)||(e=String(e));const t=se(this);return Se(t,"has",e),t.hasOwnProperty(e)}class vo{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,o=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return o;if(n==="__v_raw")return s===(r?o?al:_o:o?bo:xo).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const i=U(t);if(!r){let a;if(i&&(a=Ji[n]))return a;if(n==="hasOwnProperty")return Xi}const l=Reflect.get(t,n,Ee(t)?t:s);if((We(n)?po.has(n):Yi(n))||(r||Se(t,"get",n),o))return l;if(Ee(l)){const a=i&&Ds(n)?l:l.value;return r&&de(a)?ws(a):a}return de(l)?r?ws(l):Kn(l):l}}class yo extends vo{constructor(t=!1){super(!1,t)}set(t,n,s,r){let o=t[n];const i=U(t)&&Ds(n);if(!this._isShallow){const c=ht(o);if(!Be(s)&&!ht(s)&&(o=se(o),s=se(s)),!i&&Ee(o)&&!Ee(s))return c||(o.value=s),!0}const l=i?Number(n)e,An=e=>Reflect.getPrototypeOf(e);function sl(e,t,n){return function(...s){const r=this.__v_raw,o=se(r),i=Wt(o),l=e==="entries"||e===Symbol.iterator&&i,a=e==="keys"&&i,c=r[e](...s),u=n?_s:t?Qt:Ke;return!t&&Se(o,"iterate",a?bs:Nt),{next(){const{value:m,done:g}=c.next();return g?{value:m,done:g}:{value:l?[u(m[0]),u(m[1])]:u(m),done:g}},[Symbol.iterator](){return this}}}}function En(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function rl(e,t){const n={get(r){const o=this.__v_raw,i=se(o),l=se(r);e||(Ct(r,l)&&Se(i,"get",r),Se(i,"get",l));const{has:a}=An(i),c=t?_s:e?Qt:Ke;if(a.call(i,r))return c(o.get(r));if(a.call(i,l))return c(o.get(l));o!==i&&o.get(r)},get size(){const r=this.__v_raw;return!e&&Se(se(r),"iterate",Nt),r.size},has(r){const o=this.__v_raw,i=se(o),l=se(r);return e||(Ct(r,l)&&Se(i,"has",r),Se(i,"has",l)),r===l?o.has(r):o.has(r)||o.has(l)},forEach(r,o){const i=this,l=i.__v_raw,a=se(l),c=t?_s:e?Qt:Ke;return!e&&Se(a,"iterate",Nt),l.forEach((u,m)=>r.call(o,c(u),c(m),i))}};return $e(n,e?{add:En("add"),set:En("set"),delete:En("delete"),clear:En("clear")}:{add(r){!t&&!Be(r)&&!ht(r)&&(r=se(r));const o=se(this);return An(o).has.call(o,r)||(o.add(r),ut(o,"add",r,r)),this},set(r,o){!t&&!Be(o)&&!ht(o)&&(o=se(o));const i=se(this),{has:l,get:a}=An(i);let c=l.call(i,r);c||(r=se(r),c=l.call(i,r));const u=a.call(i,r);return i.set(r,o),c?Ct(o,u)&&ut(i,"set",r,o):ut(i,"add",r,o),this},delete(r){const o=se(this),{has:i,get:l}=An(o);let a=i.call(o,r);a||(r=se(r),a=i.call(o,r)),l&&l.call(o,r);const c=o.delete(r);return a&&ut(o,"delete",r,void 0),c},clear(){const r=se(this),o=r.size!==0,i=r.clear();return o&&ut(r,"clear",void 0,void 0),i}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=sl(r,e,t)}),n}function Hs(e,t){const n=rl(e,t);return(s,r,o)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(re(n,r)&&r in s?n:s,r,o)}const ol={get:Hs(!1,!1)},il={get:Hs(!1,!0)},ll={get:Hs(!0,!1)};const xo=new WeakMap,bo=new WeakMap,_o=new WeakMap,al=new WeakMap;function cl(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function ul(e){return e.__v_skip||!Object.isExtensible(e)?0:cl(Ni(e))}function Kn(e){return ht(e)?e:Bs(e,!1,el,ol,xo)}function wo(e){return Bs(e,!1,nl,il,bo)}function ws(e){return Bs(e,!0,tl,ll,_o)}function Bs(e,t,n,s,r){if(!de(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const o=ul(e);if(o===0)return e;const i=r.get(e);if(i)return i;const l=new Proxy(e,o===2?s:n);return r.set(e,l),l}function Mt(e){return ht(e)?Mt(e.__v_raw):!!(e&&e.__v_isReactive)}function ht(e){return!!(e&&e.__v_isReadonly)}function Be(e){return!!(e&&e.__v_isShallow)}function Us(e){return e?!!e.__v_raw:!1}function se(e){const t=e&&e.__v_raw;return t?se(t):e}function dl(e){return!re(e,"__v_skip")&&Object.isExtensible(e)&&no(e,"__v_skip",!0),e}const Ke=e=>de(e)?Kn(e):e,Qt=e=>de(e)?ws(e):e;function Ee(e){return e?e.__v_isRef===!0:!1}function ke(e){return ko(e,!1)}function fl(e){return ko(e,!0)}function ko(e,t){return Ee(e)?e:new ml(e,t)}class ml{constructor(t,n){this.dep=new Vs,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:se(t),this._value=n?t:Ke(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||Be(t)||ht(t);t=s?t:se(t),Ct(t,n)&&(this._rawValue=t,this._value=s?t:Ke(t),this.dep.trigger())}}function P(e){return Ee(e)?e.value:e}const hl={get:(e,t,n)=>t==="__v_raw"?e:P(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return Ee(r)&&!Ee(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function Ro(e){return Mt(e)?e:new Proxy(e,hl)}class gl{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Vs(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=gn-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&me!==this)return co(this,!0),!0}get value(){const t=this.dep.track();return mo(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function pl(e,t,n=!1){let s,r;return K(e)?s=e:(s=e.get,r=e.set),new gl(s,r,n)}const Pn={},In=new WeakMap;let Tt;function vl(e,t=!1,n=Tt){if(n){let s=In.get(n);s||In.set(n,s=[]),s.push(e)}}function yl(e,t,n=ue){const{immediate:s,deep:r,once:o,scheduler:i,augmentJob:l,call:a}=n,c=L=>r?L:Be(L)||r===!1||r===0?dt(L,1):dt(L);let u,m,g,v,S=!1,I=!1;if(Ee(e)?(m=()=>e.value,S=Be(e)):Mt(e)?(m=()=>c(e),S=!0):U(e)?(I=!0,S=e.some(L=>Mt(L)||Be(L)),m=()=>e.map(L=>{if(Ee(L))return L.value;if(Mt(L))return c(L);if(K(L))return a?a(L,2):L()})):K(e)?t?m=a?()=>a(e,2):e:m=()=>{if(g){ft();try{g()}finally{mt()}}const L=Tt;Tt=u;try{return a?a(e,3,[v]):e(v)}finally{Tt=L}}:m=rt,t&&r){const L=m,ee=r===!0?1/0:r;m=()=>dt(L(),ee)}const W=Wi(),j=()=>{u.stop(),W&&W.active&&Ms(W.effects,u)};if(o&&t){const L=t;t=(...ee)=>{L(...ee),j()}}let D=I?new Array(e.length).fill(Pn):Pn;const V=L=>{if(!(!(u.flags&1)||!u.dirty&&!L))if(t){const ee=u.run();if(r||S||(I?ee.some((ve,he)=>Ct(ve,D[he])):Ct(ee,D))){g&&g();const ve=Tt;Tt=u;try{const he=[ee,D===Pn?void 0:I&&D[0]===Pn?[]:D,v];D=ee,a?a(t,3,he):t(...he)}finally{Tt=ve}}}else u.run()};return l&&l(V),u=new lo(m),u.scheduler=i?()=>i(V,!1):V,v=L=>vl(L,!1,u),g=u.onStop=()=>{const L=In.get(u);if(L){if(a)a(L,4);else for(const ee of L)ee();In.delete(u)}},t?s?V(!0):D=u.run():i?i(V.bind(null,!0),!0):u.run(),j.pause=u.pause.bind(u),j.resume=u.resume.bind(u),j.stop=j,j}function dt(e,t=1/0,n){if(t<=0||!de(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,Ee(e))dt(e.value,t,n);else if(U(e))for(let s=0;s{dt(s,t,n)});else if(to(e)){for(const s in e)dt(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&dt(e[s],t,n)}return e}function Rn(e,t,n,s){try{return s?e(...s):e()}catch(r){zn(r,t,n)}}function ot(e,t,n,s){if(K(e)){const r=Rn(e,t,n,s);return r&&Zr(r)&&r.catch(o=>{zn(o,t,n)}),r}if(U(e)){const r=[];for(let o=0;o>>1,r=Ie[s],o=vn(r);o=vn(n)?Ie.push(e):Ie.splice(bl(t),0,e),e.flags|=1,Ao()}}function Ao(){Nn||(Nn=Co.then(Po))}function _l(e){U(e)?Kt.push(...e):wt&&e.id===-1?wt.splice(Ut+1,0,e):e.flags&1||(Kt.push(e),e.flags|=1),Ao()}function cr(e,t,n=nt+1){for(;nvn(n)-vn(s));if(Kt.length=0,wt){wt.push(...t);return}for(wt=t,Ut=0;Ute.id==null?e.flags&2?-1:1/0:e.id;function Po(e){try{for(nt=0;nt{s._d&&jn(-1);const o=Mn(t);let i;try{i=e(...r)}finally{Mn(o),s._d&&jn(1)}return i};return s._n=!0,s._c=!0,s._d=!0,s}function wl(e,t){if(we===null)return e;const n=Xn(we),s=e.dirs||(e.dirs=[]);for(let r=0;re.__isTeleport,Cl=Symbol("_leaveCb");function qs(e,t){e.shapeFlag&6&&e.component?(e.transition=t,qs(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function To(e,t){return K(e)?$e({name:e.name},t,{setup:e}):e}function Oo(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}const Dn=new WeakMap;function un(e,t,n,s,r=!1){if(U(e)){e.forEach((S,I)=>un(S,t&&(U(t)?t[I]:t),n,s,r));return}if(zt(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&un(e,t,n,s.component.subTree);return}const o=s.shapeFlag&4?Xn(s.component):s.el,i=r?null:o,{i:l,r:a}=e,c=t&&t.r,u=l.refs===ue?l.refs={}:l.refs,m=l.setupState,g=se(m),v=m===ue?Xr:S=>re(g,S);if(c!=null&&c!==a){if(ur(t),pe(c))u[c]=null,v(c)&&(m[c]=null);else if(Ee(c)){c.value=null;const S=t;S.k&&(u[S.k]=null)}}if(K(a))Rn(a,l,12,[i,u]);else{const S=pe(a),I=Ee(a);if(S||I){const W=()=>{if(e.f){const j=S?v(a)?m[a]:u[a]:a.value;if(r)U(j)&&Ms(j,o);else if(U(j))j.includes(o)||j.push(o);else if(S)u[a]=[o],v(a)&&(m[a]=u[a]);else{const D=[o];a.value=D,e.k&&(u[e.k]=D)}}else S?(u[a]=i,v(a)&&(m[a]=i)):I&&(a.value=i,e.k&&(u[e.k]=i))};if(i){const j=()=>{W(),Dn.delete(e)};j.id=-1,Dn.set(e,j),Fe(j,n)}else ur(e),W()}}}function ur(e){const t=Dn.get(e);t&&(t.flags|=8,Dn.delete(e))}Gn().requestIdleCallback;Gn().cancelIdleCallback;const zt=e=>!!e.type.__asyncLoader,Io=e=>e.type.__isKeepAlive;function Sl(e,t){No(e,"a",t)}function Al(e,t){No(e,"da",t)}function No(e,t,n=Ae){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(Jn(t,s,n),n){let r=n.parent;for(;r&&r.parent;)Io(r.parent.vnode)&&El(s,t,n,r),r=r.parent}}function El(e,t,n,s){const r=Jn(t,e,s,!0);Mo(()=>{Ms(s[t],r)},n)}function Jn(e,t,n=Ae,s=!1){if(n){const r=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...i)=>{ft();const l=Cn(n),a=ot(t,n,e,i);return l(),mt(),a});return s?r.unshift(o):r.push(o),o}}const pt=e=>(t,n=Ae)=>{(!bn||e==="sp")&&Jn(e,(...s)=>t(...s),n)},Pl=pt("bm"),jt=pt("m"),$l=pt("bu"),Tl=pt("u"),Ol=pt("bum"),Mo=pt("um"),Il=pt("sp"),Nl=pt("rtg"),Ml=pt("rtc");function Dl(e,t=Ae){Jn("ec",e,t)}const Do="components";function Ll(e,t){return jo(Do,e,!0,t)||e}const Lo=Symbol.for("v-ndc");function jl(e){return pe(e)?jo(Do,e,!1)||e:e||Lo}function jo(e,t,n=!0,s=!1){const r=we||Ae;if(r){const o=r.type;{const l=Sa(o,!1);if(l&&(l===t||l===Ge(t)||l===Un(Ge(t))))return o}const i=dr(r[e]||o[e],t)||dr(r.appContext[e],t);return!i&&s?o:i}}function dr(e,t){return e&&(e[t]||e[Ge(t)]||e[Un(Ge(t))])}function xe(e,t,n,s){let r;const o=n,i=U(e);if(i||pe(e)){const l=i&&Mt(e);let a=!1,c=!1;l&&(a=!Be(e),c=ht(e),e=Wn(e)),r=new Array(e.length);for(let u=0,m=e.length;ut(l,a,void 0,o));else{const l=Object.keys(e);r=new Array(l.length);for(let a=0,c=l.length;a0;return t!=="default"&&(n.name=t),y(),ie(Q,null,[N("slot",n,s&&s())],c?-2:64)}let o=e[t];o&&o._c&&(o._d=!1),y();const i=o&&Fo(o(n)),l=n.key||i&&i.key,a=ie(Q,{key:(l&&!We(l)?l:`_${t}`)+(!i&&s?"_fb":"")},i||(s?s():[]),i&&e._===1?64:-2);return a.scopeId&&(a.slotScopeIds=[a.scopeId+"-s"]),o&&o._c&&(o._d=!0),a}function Fo(e){return e.some(t=>xn(t)?!(t.type===gt||t.type===Q&&!Fo(t.children)):!0)?e:null}const ks=e=>e?oi(e)?Xn(e):ks(e.parent):null,dn=$e(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>ks(e.parent),$root:e=>ks(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Ho(e),$forceUpdate:e=>e.f||(e.f=()=>{Gs(e.update)}),$nextTick:e=>e.n||(e.n=So.bind(e.proxy)),$watch:e=>Jl.bind(e)}),ls=(e,t)=>e!==ue&&!e.__isScriptSetup&&re(e,t),Fl={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:o,accessCache:i,type:l,appContext:a}=e;if(t[0]!=="$"){const g=i[t];if(g!==void 0)switch(g){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return o[t]}else{if(ls(s,t))return i[t]=1,s[t];if(r!==ue&&re(r,t))return i[t]=2,r[t];if(re(o,t))return i[t]=3,o[t];if(n!==ue&&re(n,t))return i[t]=4,n[t];Rs&&(i[t]=0)}}const c=dn[t];let u,m;if(c)return t==="$attrs"&&Se(e.attrs,"get",""),c(e);if((u=l.__cssModules)&&(u=u[t]))return u;if(n!==ue&&re(n,t))return i[t]=4,n[t];if(m=a.config.globalProperties,re(m,t))return m[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:o}=e;return ls(r,t)?(r[t]=n,!0):s!==ue&&re(s,t)?(s[t]=n,!0):re(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(o[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,props:o,type:i}},l){let a;return!!(n[l]||e!==ue&&l[0]!=="$"&&re(e,l)||ls(t,l)||re(o,l)||re(s,l)||re(dn,l)||re(r.config.globalProperties,l)||(a=i.__cssModules)&&a[l])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:re(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function fr(e){return U(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Rs=!0;function Vl(e){const t=Ho(e),n=e.proxy,s=e.ctx;Rs=!1,t.beforeCreate&&mr(t.beforeCreate,e,"bc");const{data:r,computed:o,methods:i,watch:l,provide:a,inject:c,created:u,beforeMount:m,mounted:g,beforeUpdate:v,updated:S,activated:I,deactivated:W,beforeDestroy:j,beforeUnmount:D,destroyed:V,unmounted:L,render:ee,renderTracked:ve,renderTriggered:he,errorCaptured:Re,serverPrefetch:vt,expose:Je,inheritAttrs:yt,components:At,directives:Qe,filters:en}=t;if(c&&Hl(c,s,null),i)for(const ae in i){const te=i[ae];K(te)&&(s[ae]=te.bind(n))}if(r){const ae=r.call(n,n);de(ae)&&(e.data=Kn(ae))}if(Rs=!0,o)for(const ae in o){const te=o[ae],it=K(te)?te.bind(n,n):K(te.get)?te.get.bind(n,n):rt,xt=!K(te)&&K(te.set)?te.set.bind(n):rt,Ye=oe({get:it,set:xt});Object.defineProperty(s,ae,{enumerable:!0,configurable:!0,get:()=>Ye.value,set:Ne=>Ye.value=Ne})}if(l)for(const ae in l)Vo(l[ae],s,n,ae);if(a){const ae=K(a)?a.call(n):a;Reflect.ownKeys(ae).forEach(te=>{fn(te,ae[te])})}u&&mr(u,e,"c");function be(ae,te){U(te)?te.forEach(it=>ae(it.bind(n))):te&&ae(te.bind(n))}if(be(Pl,m),be(jt,g),be($l,v),be(Tl,S),be(Sl,I),be(Al,W),be(Dl,Re),be(Ml,ve),be(Nl,he),be(Ol,D),be(Mo,L),be(Il,vt),U(Je))if(Je.length){const ae=e.exposed||(e.exposed={});Je.forEach(te=>{Object.defineProperty(ae,te,{get:()=>n[te],set:it=>n[te]=it,enumerable:!0})})}else e.exposed||(e.exposed={});ee&&e.render===rt&&(e.render=ee),yt!=null&&(e.inheritAttrs=yt),At&&(e.components=At),Qe&&(e.directives=Qe),vt&&Oo(e)}function Hl(e,t,n=rt){U(e)&&(e=Cs(e));for(const s in e){const r=e[s];let o;de(r)?"default"in r?o=Pe(r.from||s,r.default,!0):o=Pe(r.from||s):o=Pe(r),Ee(o)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>o.value,set:i=>o.value=i}):t[s]=o}}function mr(e,t,n){ot(U(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Vo(e,t,n,s){let r=s.includes(".")?Go(n,s):()=>n[s];if(pe(e)){const o=t[e];K(o)&&Ue(r,o)}else if(K(e))Ue(r,e.bind(n));else if(de(e))if(U(e))e.forEach(o=>Vo(o,t,n,s));else{const o=K(e.handler)?e.handler.bind(n):t[e.handler];K(o)&&Ue(r,o,e)}}function Ho(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:o,config:{optionMergeStrategies:i}}=e.appContext,l=o.get(t);let a;return l?a=l:!r.length&&!n&&!s?a=t:(a={},r.length&&r.forEach(c=>Ln(a,c,i,!0)),Ln(a,t,i)),de(t)&&o.set(t,a),a}function Ln(e,t,n,s=!1){const{mixins:r,extends:o}=t;o&&Ln(e,o,n,!0),r&&r.forEach(i=>Ln(e,i,n,!0));for(const i in t)if(!(s&&i==="expose")){const l=Bl[i]||n&&n[i];e[i]=l?l(e[i],t[i]):t[i]}return e}const Bl={data:hr,props:gr,emits:gr,methods:on,computed:on,beforeCreate:Te,created:Te,beforeMount:Te,mounted:Te,beforeUpdate:Te,updated:Te,beforeDestroy:Te,beforeUnmount:Te,destroyed:Te,unmounted:Te,activated:Te,deactivated:Te,errorCaptured:Te,serverPrefetch:Te,components:on,directives:on,watch:Gl,provide:hr,inject:Ul};function hr(e,t){return t?e?function(){return $e(K(e)?e.call(this,this):e,K(t)?t.call(this,this):t)}:t:e}function Ul(e,t){return on(Cs(e),Cs(t))}function Cs(e){if(U(e)){const t={};for(let n=0;n1)return n&&K(t)?t.call(s&&s.proxy):t}}const Kl=Symbol.for("v-scx"),zl=()=>Pe(Kl);function Ue(e,t,n){return Uo(e,t,n)}function Uo(e,t,n=ue){const{immediate:s,deep:r,flush:o,once:i}=n,l=$e({},n),a=t&&s||!t&&o!=="post";let c;if(bn){if(o==="sync"){const v=zl();c=v.__watcherHandles||(v.__watcherHandles=[])}else if(!a){const v=()=>{};return v.stop=rt,v.resume=rt,v.pause=rt,v}}const u=Ae;l.call=(v,S,I)=>ot(v,u,S,I);let m=!1;o==="post"?l.scheduler=v=>{Fe(v,u&&u.suspense)}:o!=="sync"&&(m=!0,l.scheduler=(v,S)=>{S?v():Gs(v)}),l.augmentJob=v=>{t&&(v.flags|=4),m&&(v.flags|=2,u&&(v.id=u.uid,v.i=u))};const g=yl(e,t,l);return bn&&(c?c.push(g):a&&g()),g}function Jl(e,t,n){const s=this.proxy,r=pe(e)?e.includes(".")?Go(s,e):()=>s[e]:e.bind(s,s);let o;K(t)?o=t:(o=t.handler,n=t);const i=Cn(this),l=Uo(r,o.bind(s),n);return i(),l}function Go(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;rt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ge(t)}Modifiers`]||e[`${Lt(t)}Modifiers`];function Yl(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||ue;let r=n;const o=t.startsWith("update:"),i=o&&Ql(s,t.slice(7));i&&(i.trim&&(r=n.map(u=>pe(u)?u.trim():u)),i.number&&(r=n.map(Li)));let l,a=s[l=ns(t)]||s[l=ns(Ge(t))];!a&&o&&(a=s[l=ns(Lt(t))]),a&&ot(a,e,6,r);const c=s[l+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,ot(c,e,6,r)}}const Xl=new WeakMap;function qo(e,t,n=!1){const s=n?Xl:t.emitsCache,r=s.get(e);if(r!==void 0)return r;const o=e.emits;let i={},l=!1;if(!K(e)){const a=c=>{const u=qo(c,t,!0);u&&(l=!0,$e(i,u))};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!o&&!l?(de(e)&&s.set(e,null),null):(U(o)?o.forEach(a=>i[a]=null):$e(i,o),de(e)&&s.set(e,i),i)}function Qn(e,t){return!e||!Vn(t)?!1:(t=t.slice(2).replace(/Once$/,""),re(e,t[0].toLowerCase()+t.slice(1))||re(e,Lt(t))||re(e,t))}function pr(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[o],slots:i,attrs:l,emit:a,render:c,renderCache:u,props:m,data:g,setupState:v,ctx:S,inheritAttrs:I}=e,W=Mn(e);let j,D;try{if(n.shapeFlag&4){const L=r||s,ee=L;j=st(c.call(ee,L,u,m,v,g,S)),D=l}else{const L=t;j=st(L.length>1?L(m,{attrs:l,slots:i,emit:a}):L(m,null)),D=t.props?l:Zl(l)}}catch(L){mn.length=0,zn(L,e,1),j=N(gt)}let V=j;if(D&&I!==!1){const L=Object.keys(D),{shapeFlag:ee}=V;L.length&&ee&7&&(o&&L.some(Ns)&&(D=ea(D,o)),V=Yt(V,D,!1,!0))}return n.dirs&&(V=Yt(V,null,!1,!0),V.dirs=V.dirs?V.dirs.concat(n.dirs):n.dirs),n.transition&&qs(V,n.transition),j=V,Mn(W),j}const Zl=e=>{let t;for(const n in e)(n==="class"||n==="style"||Vn(n))&&((t||(t={}))[n]=e[n]);return t},ea=(e,t)=>{const n={};for(const s in e)(!Ns(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function ta(e,t,n){const{props:s,children:r,component:o}=e,{props:i,children:l,patchFlag:a}=t,c=o.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&a>=0){if(a&1024)return!0;if(a&16)return s?vr(s,i,c):!!i;if(a&8){const u=t.dynamicProps;for(let m=0;mObject.create(Wo),zo=e=>Object.getPrototypeOf(e)===Wo;function sa(e,t,n,s=!1){const r={},o=Ko();e.propsDefaults=Object.create(null),Jo(e,t,r,o);for(const i in e.propsOptions[0])i in r||(r[i]=void 0);n?e.props=s?r:wo(r):e.type.props?e.props=r:e.props=o,e.attrs=o}function ra(e,t,n,s){const{props:r,attrs:o,vnode:{patchFlag:i}}=e,l=se(r),[a]=e.propsOptions;let c=!1;if((s||i>0)&&!(i&16)){if(i&8){const u=e.vnode.dynamicProps;for(let m=0;m{a=!0;const[g,v]=Qo(m,t,!0);$e(i,g),v&&l.push(...v)};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!o&&!a)return de(e)&&s.set(e,qt),qt;if(U(o))for(let u=0;ue==="_"||e==="_ctx"||e==="$stable",Ks=e=>U(e)?e.map(st):[st(e)],ia=(e,t,n)=>{if(t._n)return t;const s=Z((...r)=>Ks(t(...r)),n);return s._c=!1,s},Yo=(e,t,n)=>{const s=e._ctx;for(const r in e){if(Ws(r))continue;const o=e[r];if(K(o))t[r]=ia(r,o,s);else if(o!=null){const i=Ks(o);t[r]=()=>i}}},Xo=(e,t)=>{const n=Ks(t);e.slots.default=()=>n},Zo=(e,t,n)=>{for(const s in t)(n||!Ws(s))&&(e[s]=t[s])},la=(e,t,n)=>{const s=e.slots=Ko();if(e.vnode.shapeFlag&32){const r=t._;r?(Zo(s,t,n),n&&no(s,"_",r,!0)):Yo(t,s)}else t&&Xo(e,t)},aa=(e,t,n)=>{const{vnode:s,slots:r}=e;let o=!0,i=ue;if(s.shapeFlag&32){const l=t._;l?n&&l===1?o=!1:Zo(r,t,n):(o=!t.$stable,Yo(t,r)),i=t}else t&&(Xo(e,t),i={default:1});if(o)for(const l in r)!Ws(l)&&i[l]==null&&delete r[l]},Fe=ma;function ca(e){return ua(e)}function ua(e,t){const n=Gn();n.__VUE__=!0;const{insert:s,remove:r,patchProp:o,createElement:i,createText:l,createComment:a,setText:c,setElementText:u,parentNode:m,nextSibling:g,setScopeId:v=rt,insertStaticContent:S}=e,I=(f,h,p,b=null,w=null,x=null,$=void 0,E=null,A=!!h.dynamicChildren)=>{if(f===h)return;f&&!sn(f,h)&&(b=_(f),Ne(f,w,x,!0),f=null),h.patchFlag===-2&&(A=!1,h.dynamicChildren=null);const{type:C,ref:B,shapeFlag:O}=h;switch(C){case Yn:W(f,h,p,b);break;case gt:j(f,h,p,b);break;case cs:f==null&&D(h,p,b,$);break;case Q:At(f,h,p,b,w,x,$,E,A);break;default:O&1?ee(f,h,p,b,w,x,$,E,A):O&6?Qe(f,h,p,b,w,x,$,E,A):(O&64||O&128)&&C.process(f,h,p,b,w,x,$,E,A,F)}B!=null&&w?un(B,f&&f.ref,x,h||f,!h):B==null&&f&&f.ref!=null&&un(f.ref,null,x,f,!0)},W=(f,h,p,b)=>{if(f==null)s(h.el=l(h.children),p,b);else{const w=h.el=f.el;h.children!==f.children&&c(w,h.children)}},j=(f,h,p,b)=>{f==null?s(h.el=a(h.children||""),p,b):h.el=f.el},D=(f,h,p,b)=>{[f.el,f.anchor]=S(f.children,h,p,b,f.el,f.anchor)},V=({el:f,anchor:h},p,b)=>{let w;for(;f&&f!==h;)w=g(f),s(f,p,b),f=w;s(h,p,b)},L=({el:f,anchor:h})=>{let p;for(;f&&f!==h;)p=g(f),r(f),f=p;r(h)},ee=(f,h,p,b,w,x,$,E,A)=>{if(h.type==="svg"?$="svg":h.type==="math"&&($="mathml"),f==null)ve(h,p,b,w,x,$,E,A);else{const C=f.el&&f.el._isVueCE?f.el:null;try{C&&C._beginPatch(),vt(f,h,w,x,$,E,A)}finally{C&&C._endPatch()}}},ve=(f,h,p,b,w,x,$,E)=>{let A,C;const{props:B,shapeFlag:O,transition:H,dirs:G}=f;if(A=f.el=i(f.type,x,B&&B.is,B),O&8?u(A,f.children):O&16&&Re(f.children,A,null,b,w,as(f,x),$,E),G&&Pt(f,null,b,"created"),he(A,f,f.scopeId,$,b),B){for(const fe in B)fe!=="value"&&!ln(fe)&&o(A,fe,null,B[fe],x,b);"value"in B&&o(A,"value",null,B.value,x),(C=B.onVnodeBeforeMount)&&tt(C,b,f)}G&&Pt(f,null,b,"beforeMount");const X=da(w,H);X&&H.beforeEnter(A),s(A,h,p),((C=B&&B.onVnodeMounted)||X||G)&&Fe(()=>{C&&tt(C,b,f),X&&H.enter(A),G&&Pt(f,null,b,"mounted")},w)},he=(f,h,p,b,w)=>{if(p&&v(f,p),b)for(let x=0;x{for(let C=A;C{const E=h.el=f.el;let{patchFlag:A,dynamicChildren:C,dirs:B}=h;A|=f.patchFlag&16;const O=f.props||ue,H=h.props||ue;let G;if(p&&$t(p,!1),(G=H.onVnodeBeforeUpdate)&&tt(G,p,h,f),B&&Pt(h,f,p,"beforeUpdate"),p&&$t(p,!0),(O.innerHTML&&H.innerHTML==null||O.textContent&&H.textContent==null)&&u(E,""),C?Je(f.dynamicChildren,C,E,p,b,as(h,w),x):$||te(f,h,E,null,p,b,as(h,w),x,!1),A>0){if(A&16)yt(E,O,H,p,w);else if(A&2&&O.class!==H.class&&o(E,"class",null,H.class,w),A&4&&o(E,"style",O.style,H.style,w),A&8){const X=h.dynamicProps;for(let fe=0;fe{G&&tt(G,p,h,f),B&&Pt(h,f,p,"updated")},b)},Je=(f,h,p,b,w,x,$)=>{for(let E=0;E{if(h!==p){if(h!==ue)for(const x in h)!ln(x)&&!(x in p)&&o(f,x,h[x],null,w,b);for(const x in p){if(ln(x))continue;const $=p[x],E=h[x];$!==E&&x!=="value"&&o(f,x,E,$,w,b)}"value"in p&&o(f,"value",h.value,p.value,w)}},At=(f,h,p,b,w,x,$,E,A)=>{const C=h.el=f?f.el:l(""),B=h.anchor=f?f.anchor:l("");let{patchFlag:O,dynamicChildren:H,slotScopeIds:G}=h;G&&(E=E?E.concat(G):G),f==null?(s(C,p,b),s(B,p,b),Re(h.children||[],p,B,w,x,$,E,A)):O>0&&O&64&&H&&f.dynamicChildren?(Je(f.dynamicChildren,H,p,w,x,$,E),(h.key!=null||w&&h===w.subTree)&&ei(f,h,!0)):te(f,h,p,B,w,x,$,E,A)},Qe=(f,h,p,b,w,x,$,E,A)=>{h.slotScopeIds=E,f==null?h.shapeFlag&512?w.ctx.activate(h,p,b,$,A):en(h,p,b,w,x,$,A):Ft(f,h,A)},en=(f,h,p,b,w,x,$)=>{const E=f.component=ba(f,b,w);if(Io(f)&&(E.ctx.renderer=F),wa(E,!1,$),E.asyncDep){if(w&&w.registerDep(E,be,$),!f.el){const A=E.subTree=N(gt);j(null,A,h,p),f.placeholder=A.el}}else be(E,f,h,p,w,x,$)},Ft=(f,h,p)=>{const b=h.component=f.component;if(ta(f,h,p))if(b.asyncDep&&!b.asyncResolved){ae(b,h,p);return}else b.next=h,b.update();else h.el=f.el,b.vnode=h},be=(f,h,p,b,w,x,$)=>{const E=()=>{if(f.isMounted){let{next:O,bu:H,u:G,parent:X,vnode:fe}=f;{const Ze=ti(f);if(Ze){O&&(O.el=fe.el,ae(f,O,$)),Ze.asyncDep.then(()=>{f.isUnmounted||E()});return}}let le=O,Me;$t(f,!1),O?(O.el=fe.el,ae(f,O,$)):O=fe,H&&$n(H),(Me=O.props&&O.props.onVnodeBeforeUpdate)&&tt(Me,X,O,fe),$t(f,!0);const De=pr(f),Xe=f.subTree;f.subTree=De,I(Xe,De,m(Xe.el),_(Xe),f,w,x),O.el=De.el,le===null&&na(f,De.el),G&&Fe(G,w),(Me=O.props&&O.props.onVnodeUpdated)&&Fe(()=>tt(Me,X,O,fe),w)}else{let O;const{el:H,props:G}=h,{bm:X,m:fe,parent:le,root:Me,type:De}=f,Xe=zt(h);$t(f,!1),X&&$n(X),!Xe&&(O=G&&G.onVnodeBeforeMount)&&tt(O,le,h),$t(f,!0);{Me.ce&&Me.ce._def.shadowRoot!==!1&&Me.ce._injectChildStyle(De);const Ze=f.subTree=pr(f);I(null,Ze,p,b,f,w,x),h.el=Ze.el}if(fe&&Fe(fe,w),!Xe&&(O=G&&G.onVnodeMounted)){const Ze=h;Fe(()=>tt(O,le,Ze),w)}(h.shapeFlag&256||le&&zt(le.vnode)&&le.vnode.shapeFlag&256)&&f.a&&Fe(f.a,w),f.isMounted=!0,h=p=b=null}};f.scope.on();const A=f.effect=new lo(E);f.scope.off();const C=f.update=A.run.bind(A),B=f.job=A.runIfDirty.bind(A);B.i=f,B.id=f.uid,A.scheduler=()=>Gs(B),$t(f,!0),C()},ae=(f,h,p)=>{h.component=f;const b=f.vnode.props;f.vnode=h,f.next=null,ra(f,h.props,b,p),aa(f,h.children,p),ft(),cr(f),mt()},te=(f,h,p,b,w,x,$,E,A=!1)=>{const C=f&&f.children,B=f?f.shapeFlag:0,O=h.children,{patchFlag:H,shapeFlag:G}=h;if(H>0){if(H&128){xt(C,O,p,b,w,x,$,E,A);return}else if(H&256){it(C,O,p,b,w,x,$,E,A);return}}G&8?(B&16&&He(C,w,x),O!==C&&u(p,O)):B&16?G&16?xt(C,O,p,b,w,x,$,E,A):He(C,w,x,!0):(B&8&&u(p,""),G&16&&Re(O,p,b,w,x,$,E,A))},it=(f,h,p,b,w,x,$,E,A)=>{f=f||qt,h=h||qt;const C=f.length,B=h.length,O=Math.min(C,B);let H;for(H=0;HB?He(f,w,x,!0,!1,O):Re(h,p,b,w,x,$,E,A,O)},xt=(f,h,p,b,w,x,$,E,A)=>{let C=0;const B=h.length;let O=f.length-1,H=B-1;for(;C<=O&&C<=H;){const G=f[C],X=h[C]=A?kt(h[C]):st(h[C]);if(sn(G,X))I(G,X,p,null,w,x,$,E,A);else break;C++}for(;C<=O&&C<=H;){const G=f[O],X=h[H]=A?kt(h[H]):st(h[H]);if(sn(G,X))I(G,X,p,null,w,x,$,E,A);else break;O--,H--}if(C>O){if(C<=H){const G=H+1,X=GH)for(;C<=O;)Ne(f[C],w,x,!0),C++;else{const G=C,X=C,fe=new Map;for(C=X;C<=H;C++){const je=h[C]=A?kt(h[C]):st(h[C]);je.key!=null&&fe.set(je.key,C)}let le,Me=0;const De=H-X+1;let Xe=!1,Ze=0;const tn=new Array(De);for(C=0;C=De){Ne(je,w,x,!0);continue}let et;if(je.key!=null)et=fe.get(je.key);else for(le=X;le<=H;le++)if(tn[le-X]===0&&sn(je,h[le])){et=le;break}et===void 0?Ne(je,w,x,!0):(tn[et-X]=C+1,et>=Ze?Ze=et:Xe=!0,I(je,h[et],p,null,w,x,$,E,A),Me++)}const tr=Xe?fa(tn):qt;for(le=tr.length-1,C=De-1;C>=0;C--){const je=X+C,et=h[je],nr=h[je+1],sr=je+1{const{el:x,type:$,transition:E,children:A,shapeFlag:C}=f;if(C&6){Ye(f.component.subTree,h,p,b);return}if(C&128){f.suspense.move(h,p,b);return}if(C&64){$.move(f,h,p,F);return}if($===Q){s(x,h,p);for(let O=0;OE.enter(x),w);else{const{leave:O,delayLeave:H,afterLeave:G}=E,X=()=>{f.ctx.isUnmounted?r(x):s(x,h,p)},fe=()=>{x._isLeaving&&x[Cl](!0),O(x,()=>{X(),G&&G()})};H?H(x,X,fe):fe()}else s(x,h,p)},Ne=(f,h,p,b=!1,w=!1)=>{const{type:x,props:$,ref:E,children:A,dynamicChildren:C,shapeFlag:B,patchFlag:O,dirs:H,cacheIndex:G}=f;if(O===-2&&(w=!1),E!=null&&(ft(),un(E,null,p,f,!0),mt()),G!=null&&(h.renderCache[G]=void 0),B&256){h.ctx.deactivate(f);return}const X=B&1&&H,fe=!zt(f);let le;if(fe&&(le=$&&$.onVnodeBeforeUnmount)&&tt(le,h,f),B&6)Et(f.component,p,b);else{if(B&128){f.suspense.unmount(p,b);return}X&&Pt(f,null,h,"beforeUnmount"),B&64?f.type.remove(f,h,p,F,b):C&&!C.hasOnce&&(x!==Q||O>0&&O&64)?He(C,h,p,!1,!0):(x===Q&&O&384||!w&&B&16)&&He(A,h,p),b&&Vt(f)}(fe&&(le=$&&$.onVnodeUnmounted)||X)&&Fe(()=>{le&&tt(le,h,f),X&&Pt(f,null,h,"unmounted")},p)},Vt=f=>{const{type:h,el:p,anchor:b,transition:w}=f;if(h===Q){Ht(p,b);return}if(h===cs){L(f);return}const x=()=>{r(p),w&&!w.persisted&&w.afterLeave&&w.afterLeave()};if(f.shapeFlag&1&&w&&!w.persisted){const{leave:$,delayLeave:E}=w,A=()=>$(p,x);E?E(f.el,x,A):A()}else x()},Ht=(f,h)=>{let p;for(;f!==h;)p=g(f),r(f),f=p;r(h)},Et=(f,h,p)=>{const{bum:b,scope:w,job:x,subTree:$,um:E,m:A,a:C}=f;xr(A),xr(C),b&&$n(b),w.stop(),x&&(x.flags|=8,Ne($,f,h,p)),E&&Fe(E,h),Fe(()=>{f.isUnmounted=!0},h)},He=(f,h,p,b=!1,w=!1,x=0)=>{for(let $=x;${if(f.shapeFlag&6)return _(f.component.subTree);if(f.shapeFlag&128)return f.suspense.next();const h=g(f.anchor||f.el),p=h&&h[kl];return p?g(p):h};let M=!1;const T=(f,h,p)=>{f==null?h._vnode&&Ne(h._vnode,null,null,!0):I(h._vnode||null,f,h,null,null,null,p),h._vnode=f,M||(M=!0,cr(),Eo(),M=!1)},F={p:I,um:Ne,m:Ye,r:Vt,mt:en,mc:Re,pc:te,pbc:Je,n:_,o:e};return{render:T,hydrate:void 0,createApp:Wl(T)}}function as({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function $t({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function da(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function ei(e,t,n=!1){const s=e.children,r=t.children;if(U(s)&&U(r))for(let o=0;o>1,e[n[l]]0&&(t[s]=n[o-1]),n[o]=s)}}for(o=n.length,i=n[o-1];o-- >0;)n[o]=i,i=t[i];return n}function ti(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:ti(t)}function xr(e){if(e)for(let t=0;te.__isSuspense;function ma(e,t){t&&t.pendingBranch?U(e)?t.effects.push(...e):t.effects.push(e):_l(e)}const Q=Symbol.for("v-fgt"),Yn=Symbol.for("v-txt"),gt=Symbol.for("v-cmt"),cs=Symbol.for("v-stc"),mn=[];let Ve=null;function y(e=!1){mn.push(Ve=e?null:[])}function ha(){mn.pop(),Ve=mn[mn.length-1]||null}let yn=1;function jn(e,t=!1){yn+=e,e<0&&Ve&&t&&(Ve.hasOnce=!0)}function si(e){return e.dynamicChildren=yn>0?Ve||qt:null,ha(),yn>0&&Ve&&Ve.push(e),e}function R(e,t,n,s,r,o){return si(d(e,t,n,s,r,o,!0))}function ie(e,t,n,s,r){return si(N(e,t,n,s,r,!0))}function xn(e){return e?e.__v_isVNode===!0:!1}function sn(e,t){return e.type===t.type&&e.key===t.key}const ri=({key:e})=>e??null,Tn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?pe(e)||Ee(e)||K(e)?{i:we,r:e,k:t,f:!!n}:e:null);function d(e,t=null,n=null,s=0,r=null,o=e===Q?0:1,i=!1,l=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ri(t),ref:t&&Tn(t),scopeId:$o,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:we};return l?(zs(a,n),o&128&&e.normalize(a)):n&&(a.shapeFlag|=pe(n)?8:16),yn>0&&!i&&Ve&&(a.patchFlag>0||o&6)&&a.patchFlag!==32&&Ve.push(a),a}const N=ga;function ga(e,t=null,n=null,s=0,r=null,o=!1){if((!e||e===Lo)&&(e=gt),xn(e)){const l=Yt(e,t,!0);return n&&zs(l,n),yn>0&&!o&&Ve&&(l.shapeFlag&6?Ve[Ve.indexOf(e)]=l:Ve.push(l)),l.patchFlag=-2,l}if(Aa(e)&&(e=e.__vccOpts),t){t=pa(t);let{class:l,style:a}=t;l&&!pe(l)&&(t.class=J(l)),de(a)&&(Us(a)&&!U(a)&&(a=$e({},a)),t.style=St(a))}const i=pe(e)?1:ni(e)?128:Rl(e)?64:de(e)?4:K(e)?2:0;return d(e,t,n,s,r,i,o,!0)}function pa(e){return e?Us(e)||zo(e)?$e({},e):e:null}function Yt(e,t,n=!1,s=!1){const{props:r,ref:o,patchFlag:i,children:l,transition:a}=e,c=t?va(r||{},t):r,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:c,key:c&&ri(c),ref:t&&t.ref?n&&o?U(o)?o.concat(Tn(t)):[o,Tn(t)]:Tn(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Q?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:a,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Yt(e.ssContent),ssFallback:e.ssFallback&&Yt(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return a&&s&&qs(u,a.clone(u)),u}function ce(e=" ",t=0){return N(Yn,null,e,t)}function q(e="",t=!1){return t?(y(),ie(gt,null,e)):N(gt,null,e)}function st(e){return e==null||typeof e=="boolean"?N(gt):U(e)?N(Q,null,e.slice()):xn(e)?kt(e):N(Yn,null,String(e))}function kt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Yt(e)}function zs(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(U(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),zs(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!zo(t)?t._ctx=we:r===3&&we&&(we.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else K(t)?(t={default:t,_ctx:we},n=32):(t=String(t),s&64?(n=16,t=[ce(t)]):n=8);e.children=t,e.shapeFlag|=n}function va(...e){const t={};for(let n=0;nAe||we;let Fn,As;{const e=Gn(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),o=>{r.length>1?r.forEach(i=>i(o)):r[0](o)}};Fn=t("__VUE_INSTANCE_SETTERS__",n=>Ae=n),As=t("__VUE_SSR_SETTERS__",n=>bn=n)}const Cn=e=>{const t=Ae;return Fn(e),e.scope.on(),()=>{e.scope.off(),Fn(t)}},br=()=>{Ae&&Ae.scope.off(),Fn(null)};function oi(e){return e.vnode.shapeFlag&4}let bn=!1;function wa(e,t=!1,n=!1){t&&As(t);const{props:s,children:r}=e.vnode,o=oi(e);sa(e,s,o,t),la(e,r,n||t);const i=o?ka(e,t):void 0;return t&&As(!1),i}function ka(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Fl);const{setup:s}=n;if(s){ft();const r=e.setupContext=s.length>1?Ca(e):null,o=Cn(e),i=Rn(s,e,0,[e.props,r]),l=Zr(i);if(mt(),o(),(l||e.sp)&&!zt(e)&&Oo(e),l){if(i.then(br,br),t)return i.then(a=>{_r(e,a)}).catch(a=>{zn(a,e,0)});e.asyncDep=i}else _r(e,i)}else ii(e)}function _r(e,t,n){K(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:de(t)&&(e.setupState=Ro(t)),ii(e)}function ii(e,t,n){const s=e.type;e.render||(e.render=s.render||rt);{const r=Cn(e);ft();try{Vl(e)}finally{mt(),r()}}}const Ra={get(e,t){return Se(e,"get",""),e[t]}};function Ca(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Ra),slots:e.slots,emit:e.emit,expose:t}}function Xn(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Ro(dl(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in dn)return dn[n](e)},has(t,n){return n in t||n in dn}})):e.proxy}function Sa(e,t=!0){return K(e)?e.displayName||e.name:e.name||t&&e.__name}function Aa(e){return K(e)&&"__vccOpts"in e}const oe=(e,t)=>pl(e,t,bn);function li(e,t,n){try{jn(-1);const s=arguments.length;return s===2?de(t)&&!U(t)?xn(t)?N(e,null,[t]):N(e,t):N(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&xn(n)&&(n=[n]),N(e,t,n))}finally{jn(1)}}const Ea="3.5.25";let Es;const wr=typeof window<"u"&&window.trustedTypes;if(wr)try{Es=wr.createPolicy("vue",{createHTML:e=>e})}catch{}const ai=Es?e=>Es.createHTML(e):e=>e,Pa="http://www.w3.org/2000/svg",$a="http://www.w3.org/1998/Math/MathML",ct=typeof document<"u"?document:null,kr=ct&&ct.createElement("template"),Ta={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?ct.createElementNS(Pa,e):t==="mathml"?ct.createElementNS($a,e):n?ct.createElement(e,{is:n}):ct.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>ct.createTextNode(e),createComment:e=>ct.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>ct.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,o){const i=n?n.previousSibling:t.lastChild;if(r&&(r===o||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===o||!(r=r.nextSibling)););else{kr.innerHTML=ai(s==="svg"?``:s==="mathml"?``:e);const l=kr.content;if(s==="svg"||s==="mathml"){const a=l.firstChild;for(;a.firstChild;)l.appendChild(a.firstChild);l.removeChild(a)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Oa=Symbol("_vtc");function Ia(e,t,n){const s=e[Oa];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Rr=Symbol("_vod"),Na=Symbol("_vsh"),Ma=Symbol(""),Da=/(?:^|;)\s*display\s*:/;function La(e,t,n){const s=e.style,r=pe(n);let o=!1;if(n&&!r){if(t)if(pe(t))for(const i of t.split(";")){const l=i.slice(0,i.indexOf(":")).trim();n[l]==null&&On(s,l,"")}else for(const i in t)n[i]==null&&On(s,i,"");for(const i in n)i==="display"&&(o=!0),On(s,i,n[i])}else if(r){if(t!==n){const i=s[Ma];i&&(n+=";"+i),s.cssText=n,o=Da.test(n)}}else t&&e.removeAttribute("style");Rr in e&&(e[Rr]=o?s.display:"",e[Na]&&(s.display="none"))}const Cr=/\s*!important$/;function On(e,t,n){if(U(n))n.forEach(s=>On(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=ja(e,t);Cr.test(n)?e.setProperty(Lt(s),n.replace(Cr,""),"important"):e[s]=n}}const Sr=["Webkit","Moz","ms"],us={};function ja(e,t){const n=us[t];if(n)return n;let s=Ge(t);if(s!=="filter"&&s in e)return us[t]=s;s=Un(s);for(let r=0;rds||(Ba.then(()=>ds=0),ds=Date.now());function Ga(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;ot(qa(s,n.value),t,5,[s])};return n.value=e,n.attached=Ua(),n}function qa(e,t){if(U(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const Or=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Wa=(e,t,n,s,r,o)=>{const i=r==="svg";t==="class"?Ia(e,s,i):t==="style"?La(e,n,s):Vn(t)?Ns(t)||Va(e,t,n,s,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Ka(e,t,s,i))?(Pr(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Er(e,t,s,i,o,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!pe(s))?Pr(e,Ge(t),s,o,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Er(e,t,s,i))};function Ka(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&Or(t)&&K(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return Or(t)&&pe(n)?!1:t in e}const Ir=e=>{const t=e.props["onUpdate:modelValue"]||!1;return U(t)?n=>$n(t,n):t},fs=Symbol("_assign"),za={deep:!0,created(e,t,n){e[fs]=Ir(n),ci(e,"change",()=>{const s=e._modelValue,r=Ja(e),o=e.checked,i=e[fs];if(U(s)){const l=ro(s,r),a=l!==-1;if(o&&!a)i(s.concat(r));else if(!o&&a){const c=[...s];c.splice(l,1),i(c)}}else if(Hn(s)){const l=new Set(s);o?l.add(r):l.delete(r),i(l)}else i(ui(e,o))})},mounted:Nr,beforeUpdate(e,t,n){e[fs]=Ir(n),Nr(e,t,n)}};function Nr(e,{value:t,oldValue:n},s){e._modelValue=t;let r;if(U(t))r=ro(t,s.props.value)>-1;else if(Hn(t))r=t.has(s.props.value);else{if(t===n)return;r=qn(t,ui(e,!0))}e.checked!==r&&(e.checked=r)}function Ja(e){return"_value"in e?e._value:e.value}function ui(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const Qa=["ctrl","shift","alt","meta"],Ya={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Qa.some(n=>e[`${n}Key`]&&!t.includes(n))},Js=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=((r,...o)=>{for(let i=0;i{const t=Za().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=nc(s);if(!r)return;const o=t._component;!K(o)&&!o.render&&!o.template&&(o.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const i=n(r,!1,tc(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),i},t});function tc(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function nc(e){return pe(e)?document.querySelector(e):e}const Gt=typeof document<"u";function di(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function sc(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&di(e.default)}const ne=Object.assign;function ms(e,t){const n={};for(const s in t){const r=t[s];n[s]=ze(r)?r.map(e):e(r)}return n}const hn=()=>{},ze=Array.isArray;function Dr(e,t){const n={};for(const s in e)n[s]=s in t?t[s]:e[s];return n}const fi=/#/g,rc=/&/g,oc=/\//g,ic=/=/g,lc=/\?/g,mi=/\+/g,ac=/%5B/g,cc=/%5D/g,hi=/%5E/g,uc=/%60/g,gi=/%7B/g,dc=/%7C/g,pi=/%7D/g,fc=/%20/g;function Qs(e){return e==null?"":encodeURI(""+e).replace(dc,"|").replace(ac,"[").replace(cc,"]")}function mc(e){return Qs(e).replace(gi,"{").replace(pi,"}").replace(hi,"^")}function Ps(e){return Qs(e).replace(mi,"%2B").replace(fc,"+").replace(fi,"%23").replace(rc,"%26").replace(uc,"`").replace(gi,"{").replace(pi,"}").replace(hi,"^")}function hc(e){return Ps(e).replace(ic,"%3D")}function gc(e){return Qs(e).replace(fi,"%23").replace(lc,"%3F")}function pc(e){return gc(e).replace(oc,"%2F")}function _n(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}const vc=/\/$/,yc=e=>e.replace(vc,"");function hs(e,t,n="/"){let s,r={},o="",i="";const l=t.indexOf("#");let a=t.indexOf("?");return a=l>=0&&a>l?-1:a,a>=0&&(s=t.slice(0,a),o=t.slice(a,l>0?l:t.length),r=e(o.slice(1))),l>=0&&(s=s||t.slice(0,l),i=t.slice(l,t.length)),s=wc(s??t,n),{fullPath:s+o+i,path:s,query:r,hash:_n(i)}}function xc(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function Lr(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function bc(e,t,n){const s=t.matched.length-1,r=n.matched.length-1;return s>-1&&s===r&&Xt(t.matched[s],n.matched[r])&&vi(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function Xt(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function vi(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!_c(e[n],t[n]))return!1;return!0}function _c(e,t){return ze(e)?jr(e,t):ze(t)?jr(t,e):e===t}function jr(e,t){return ze(t)?e.length===t.length&&e.every((n,s)=>n===t[s]):e.length===1&&e[0]===t}function wc(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),s=e.split("/"),r=s[s.length-1];(r===".."||r===".")&&s.push("");let o=n.length-1,i,l;for(i=0;i1&&o--;else break;return n.slice(0,o).join("/")+"/"+s.slice(i).join("/")}const bt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};let $s=(function(e){return e.pop="pop",e.push="push",e})({}),gs=(function(e){return e.back="back",e.forward="forward",e.unknown="",e})({});function kc(e){if(!e)if(Gt){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),yc(e)}const Rc=/^[^#]+#/;function Cc(e,t){return e.replace(Rc,"#")+t}function Sc(e,t){const n=document.documentElement.getBoundingClientRect(),s=e.getBoundingClientRect();return{behavior:t.behavior,left:s.left-n.left-(t.left||0),top:s.top-n.top-(t.top||0)}}const Zn=()=>({left:window.scrollX,top:window.scrollY});function Ac(e){let t;if("el"in e){const n=e.el,s=typeof n=="string"&&n.startsWith("#"),r=typeof n=="string"?s?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!r)return;t=Sc(r,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function Fr(e,t){return(history.state?history.state.position-t:-1)+e}const Ts=new Map;function Ec(e,t){Ts.set(e,t)}function Pc(e){const t=Ts.get(e);return Ts.delete(e),t}function $c(e){return typeof e=="string"||e&&typeof e=="object"}function yi(e){return typeof e=="string"||typeof e=="symbol"}let ge=(function(e){return e[e.MATCHER_NOT_FOUND=1]="MATCHER_NOT_FOUND",e[e.NAVIGATION_GUARD_REDIRECT=2]="NAVIGATION_GUARD_REDIRECT",e[e.NAVIGATION_ABORTED=4]="NAVIGATION_ABORTED",e[e.NAVIGATION_CANCELLED=8]="NAVIGATION_CANCELLED",e[e.NAVIGATION_DUPLICATED=16]="NAVIGATION_DUPLICATED",e})({});const xi=Symbol("");ge.MATCHER_NOT_FOUND+"",ge.NAVIGATION_GUARD_REDIRECT+"",ge.NAVIGATION_ABORTED+"",ge.NAVIGATION_CANCELLED+"",ge.NAVIGATION_DUPLICATED+"";function Zt(e,t){return ne(new Error,{type:e,[xi]:!0},t)}function at(e,t){return e instanceof Error&&xi in e&&(t==null||!!(e.type&t))}const Tc=["params","query","hash"];function Oc(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;const t={};for(const n of Tc)n in e&&(t[n]=e[n]);return JSON.stringify(t,null,2)}function Ic(e){const t={};if(e===""||e==="?")return t;const n=(e[0]==="?"?e.slice(1):e).split("&");for(let s=0;sr&&Ps(r)):[s&&Ps(s)]).forEach(r=>{r!==void 0&&(t+=(t.length?"&":"")+n,r!=null&&(t+="="+r))})}return t}function Nc(e){const t={};for(const n in e){const s=e[n];s!==void 0&&(t[n]=ze(s)?s.map(r=>r==null?null:""+r):s==null?s:""+s)}return t}const Mc=Symbol(""),Hr=Symbol(""),Ys=Symbol(""),Xs=Symbol(""),Os=Symbol("");function rn(){let e=[];function t(s){return e.push(s),()=>{const r=e.indexOf(s);r>-1&&e.splice(r,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function Rt(e,t,n,s,r,o=i=>i()){const i=s&&(s.enterCallbacks[r]=s.enterCallbacks[r]||[]);return()=>new Promise((l,a)=>{const c=g=>{g===!1?a(Zt(ge.NAVIGATION_ABORTED,{from:n,to:t})):g instanceof Error?a(g):$c(g)?a(Zt(ge.NAVIGATION_GUARD_REDIRECT,{from:t,to:g})):(i&&s.enterCallbacks[r]===i&&typeof g=="function"&&i.push(g),l())},u=o(()=>e.call(s&&s.instances[r],t,n,c));let m=Promise.resolve(u);e.length<3&&(m=m.then(c)),m.catch(g=>a(g))})}function ps(e,t,n,s,r=o=>o()){const o=[];for(const i of e)for(const l in i.components){let a=i.components[l];if(!(t!=="beforeRouteEnter"&&!i.instances[l]))if(di(a)){const c=(a.__vccOpts||a)[t];c&&o.push(Rt(c,n,s,i,l,r))}else{let c=a();o.push(()=>c.then(u=>{if(!u)throw new Error(`Couldn't resolve component "${l}" at "${i.path}"`);const m=sc(u)?u.default:u;i.mods[l]=u,i.components[l]=m;const g=(m.__vccOpts||m)[t];return g&&Rt(g,n,s,i,l,r)()}))}}return o}function Dc(e,t){const n=[],s=[],r=[],o=Math.max(t.matched.length,e.matched.length);for(let i=0;iXt(c,l))?s.push(l):n.push(l));const a=e.matched[i];a&&(t.matched.find(c=>Xt(c,a))||r.push(a))}return[n,s,r]}let Lc=()=>location.protocol+"//"+location.host;function bi(e,t){const{pathname:n,search:s,hash:r}=t,o=e.indexOf("#");if(o>-1){let i=r.includes(e.slice(o))?e.slice(o).length:1,l=r.slice(i);return l[0]!=="/"&&(l="/"+l),Lr(l,"")}return Lr(n,e)+s+r}function jc(e,t,n,s){let r=[],o=[],i=null;const l=({state:g})=>{const v=bi(e,location),S=n.value,I=t.value;let W=0;if(g){if(n.value=v,t.value=g,i&&i===S){i=null;return}W=I?g.position-I.position:0}else s(v);r.forEach(j=>{j(n.value,S,{delta:W,type:$s.pop,direction:W?W>0?gs.forward:gs.back:gs.unknown})})};function a(){i=n.value}function c(g){r.push(g);const v=()=>{const S=r.indexOf(g);S>-1&&r.splice(S,1)};return o.push(v),v}function u(){if(document.visibilityState==="hidden"){const{history:g}=window;if(!g.state)return;g.replaceState(ne({},g.state,{scroll:Zn()}),"")}}function m(){for(const g of o)g();o=[],window.removeEventListener("popstate",l),window.removeEventListener("pagehide",u),document.removeEventListener("visibilitychange",u)}return window.addEventListener("popstate",l),window.addEventListener("pagehide",u),document.addEventListener("visibilitychange",u),{pauseListeners:a,listen:c,destroy:m}}function Br(e,t,n,s=!1,r=!1){return{back:e,current:t,forward:n,replaced:s,position:window.history.length,scroll:r?Zn():null}}function Fc(e){const{history:t,location:n}=window,s={value:bi(e,n)},r={value:t.state};r.value||o(s.value,{back:null,current:s.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function o(a,c,u){const m=e.indexOf("#"),g=m>-1?(n.host&&document.querySelector("base")?e:e.slice(m))+a:Lc()+e+a;try{t[u?"replaceState":"pushState"](c,"",g),r.value=c}catch(v){console.error(v),n[u?"replace":"assign"](g)}}function i(a,c){o(a,ne({},t.state,Br(r.value.back,a,r.value.forward,!0),c,{position:r.value.position}),!0),s.value=a}function l(a,c){const u=ne({},r.value,t.state,{forward:a,scroll:Zn()});o(u.current,u,!0),o(a,ne({},Br(s.value,a,null),{position:u.position+1},c),!1),s.value=a}return{location:s,state:r,push:l,replace:i}}function Vc(e){e=kc(e);const t=Fc(e),n=jc(e,t.state,t.location,t.replace);function s(o,i=!0){i||n.pauseListeners(),history.go(o)}const r=ne({location:"",base:e,go:s,createHref:Cc.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}function Hc(e){return e=location.host?e||location.pathname+location.search:"",e.includes("#")||(e+="#"),Vc(e)}let Ot=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e})({});var ye=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e})(ye||{});const Bc={type:Ot.Static,value:""},Uc=/[a-zA-Z0-9_]/;function Gc(e){if(!e)return[[]];if(e==="/")return[[Bc]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(v){throw new Error(`ERR (${n})/"${c}": ${v}`)}let n=ye.Static,s=n;const r=[];let o;function i(){o&&r.push(o),o=[]}let l=0,a,c="",u="";function m(){c&&(n===ye.Static?o.push({type:Ot.Static,value:c}):n===ye.Param||n===ye.ParamRegExp||n===ye.ParamRegExpEnd?(o.length>1&&(a==="*"||a==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),o.push({type:Ot.Param,value:c,regexp:u,repeatable:a==="*"||a==="+",optional:a==="*"||a==="?"})):t("Invalid state to consume buffer"),c="")}function g(){c+=a}for(;lt.length?t.length===1&&t[0]===Oe.Static+Oe.Segment?1:-1:0}function _i(e,t){let n=0;const s=e.score,r=t.score;for(;n0&&t[t.length-1]<0}const Jc={strict:!1,end:!0,sensitive:!1};function Qc(e,t,n){const s=Kc(Gc(e.path),n),r=ne(s,{record:e,parent:t,children:[],alias:[]});return t&&!r.record.aliasOf==!t.record.aliasOf&&t.children.push(r),r}function Yc(e,t){const n=[],s=new Map;t=Dr(Jc,t);function r(m){return s.get(m)}function o(m,g,v){const S=!v,I=Wr(m);I.aliasOf=v&&v.record;const W=Dr(t,m),j=[I];if("alias"in m){const L=typeof m.alias=="string"?[m.alias]:m.alias;for(const ee of L)j.push(Wr(ne({},I,{components:v?v.record.components:I.components,path:ee,aliasOf:v?v.record:I})))}let D,V;for(const L of j){const{path:ee}=L;if(g&&ee[0]!=="/"){const ve=g.record.path,he=ve[ve.length-1]==="/"?"":"/";L.path=g.record.path+(ee&&he+ee)}if(D=Qc(L,g,W),v?v.alias.push(D):(V=V||D,V!==D&&V.alias.push(D),S&&m.name&&!Kr(D)&&i(m.name)),wi(D)&&a(D),I.children){const ve=I.children;for(let he=0;he{i(V)}:hn}function i(m){if(yi(m)){const g=s.get(m);g&&(s.delete(m),n.splice(n.indexOf(g),1),g.children.forEach(i),g.alias.forEach(i))}else{const g=n.indexOf(m);g>-1&&(n.splice(g,1),m.record.name&&s.delete(m.record.name),m.children.forEach(i),m.alias.forEach(i))}}function l(){return n}function a(m){const g=eu(m,n);n.splice(g,0,m),m.record.name&&!Kr(m)&&s.set(m.record.name,m)}function c(m,g){let v,S={},I,W;if("name"in m&&m.name){if(v=s.get(m.name),!v)throw Zt(ge.MATCHER_NOT_FOUND,{location:m});W=v.record.name,S=ne(qr(g.params,v.keys.filter(V=>!V.optional).concat(v.parent?v.parent.keys.filter(V=>V.optional):[]).map(V=>V.name)),m.params&&qr(m.params,v.keys.map(V=>V.name))),I=v.stringify(S)}else if(m.path!=null)I=m.path,v=n.find(V=>V.re.test(I)),v&&(S=v.parse(I),W=v.record.name);else{if(v=g.name?s.get(g.name):n.find(V=>V.re.test(g.path)),!v)throw Zt(ge.MATCHER_NOT_FOUND,{location:m,currentLocation:g});W=v.record.name,S=ne({},g.params,m.params),I=v.stringify(S)}const j=[];let D=v;for(;D;)j.unshift(D.record),D=D.parent;return{name:W,path:I,params:S,matched:j,meta:Zc(j)}}e.forEach(m=>o(m));function u(){n.length=0,s.clear()}return{addRoute:o,resolve:c,removeRoute:i,clearRoutes:u,getRoutes:l,getRecordMatcher:r}}function qr(e,t){const n={};for(const s of t)s in e&&(n[s]=e[s]);return n}function Wr(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:Xc(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function Xc(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const s in e.components)t[s]=typeof n=="object"?n[s]:n;return t}function Kr(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Zc(e){return e.reduce((t,n)=>ne(t,n.meta),{})}function eu(e,t){let n=0,s=t.length;for(;n!==s;){const o=n+s>>1;_i(e,t[o])<0?s=o:n=o+1}const r=tu(e);return r&&(s=t.lastIndexOf(r,s-1)),s}function tu(e){let t=e;for(;t=t.parent;)if(wi(t)&&_i(e,t)===0)return t}function wi({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function zr(e){const t=Pe(Ys),n=Pe(Xs),s=oe(()=>{const a=P(e.to);return t.resolve(a)}),r=oe(()=>{const{matched:a}=s.value,{length:c}=a,u=a[c-1],m=n.matched;if(!u||!m.length)return-1;const g=m.findIndex(Xt.bind(null,u));if(g>-1)return g;const v=Jr(a[c-2]);return c>1&&Jr(u)===v&&m[m.length-1].path!==v?m.findIndex(Xt.bind(null,a[c-2])):g}),o=oe(()=>r.value>-1&&ou(n.params,s.value.params)),i=oe(()=>r.value>-1&&r.value===n.matched.length-1&&vi(n.params,s.value.params));function l(a={}){if(ru(a)){const c=t[P(e.replace)?"replace":"push"](P(e.to)).catch(hn);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>c),c}return Promise.resolve()}return{route:s,href:oe(()=>s.value.href),isActive:o,isExactActive:i,navigate:l}}function nu(e){return e.length===1?e[0]:e}const su=To({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:zr,setup(e,{slots:t}){const n=Kn(zr(e)),{options:s}=Pe(Ys),r=oe(()=>({[Qr(e.activeClass,s.linkActiveClass,"router-link-active")]:n.isActive,[Qr(e.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const o=t.default&&nu(t.default(n));return e.custom?o:li("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:r.value},o)}}}),Ce=su;function ru(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function ou(e,t){for(const n in t){const s=t[n],r=e[n];if(typeof s=="string"){if(s!==r)return!1}else if(!ze(r)||r.length!==s.length||s.some((o,i)=>o!==r[i]))return!1}return!0}function Jr(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Qr=(e,t,n)=>e??t??n,iu=To({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const s=Pe(Os),r=oe(()=>e.route||s.value),o=Pe(Hr,0),i=oe(()=>{let c=P(o);const{matched:u}=r.value;let m;for(;(m=u[c])&&!m.components;)c++;return c}),l=oe(()=>r.value.matched[i.value]);fn(Hr,oe(()=>i.value+1)),fn(Mc,l),fn(Os,r);const a=ke();return Ue(()=>[a.value,l.value,e.name],([c,u,m],[g,v,S])=>{u&&(u.instances[m]=c,v&&v!==u&&c&&c===g&&(u.leaveGuards.size||(u.leaveGuards=v.leaveGuards),u.updateGuards.size||(u.updateGuards=v.updateGuards))),c&&u&&(!v||!Xt(u,v)||!g)&&(u.enterCallbacks[m]||[]).forEach(I=>I(c))},{flush:"post"}),()=>{const c=r.value,u=e.name,m=l.value,g=m&&m.components[u];if(!g)return Yr(n.default,{Component:g,route:c});const v=m.props[u],S=v?v===!0?c.params:typeof v=="function"?v(c):v:null,W=li(g,ne({},S,t,{onVnodeUnmounted:j=>{j.component.isUnmounted&&(m.instances[u]=null)},ref:a}));return Yr(n.default,{Component:W,route:c})||W}}});function Yr(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const lu=iu;function au(e){const t=Yc(e.routes,e),n=e.parseQuery||Ic,s=e.stringifyQuery||Vr,r=e.history,o=rn(),i=rn(),l=rn(),a=fl(bt);let c=bt;Gt&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=ms.bind(null,_=>""+_),m=ms.bind(null,pc),g=ms.bind(null,_n);function v(_,M){let T,F;return yi(_)?(T=t.getRecordMatcher(_),F=M):F=_,t.addRoute(F,T)}function S(_){const M=t.getRecordMatcher(_);M&&t.removeRoute(M)}function I(){return t.getRoutes().map(_=>_.record)}function W(_){return!!t.getRecordMatcher(_)}function j(_,M){if(M=ne({},M||a.value),typeof _=="string"){const p=hs(n,_,M.path),b=t.resolve({path:p.path},M),w=r.createHref(p.fullPath);return ne(p,b,{params:g(b.params),hash:_n(p.hash),redirectedFrom:void 0,href:w})}let T;if(_.path!=null)T=ne({},_,{path:hs(n,_.path,M.path).path});else{const p=ne({},_.params);for(const b in p)p[b]==null&&delete p[b];T=ne({},_,{params:m(p)}),M.params=m(M.params)}const F=t.resolve(T,M),Y=_.hash||"";F.params=u(g(F.params));const f=xc(s,ne({},_,{hash:mc(Y),path:F.path})),h=r.createHref(f);return ne({fullPath:f,hash:Y,query:s===Vr?Nc(_.query):_.query||{}},F,{redirectedFrom:void 0,href:h})}function D(_){return typeof _=="string"?hs(n,_,a.value.path):ne({},_)}function V(_,M){if(c!==_)return Zt(ge.NAVIGATION_CANCELLED,{from:M,to:_})}function L(_){return he(_)}function ee(_){return L(ne(D(_),{replace:!0}))}function ve(_,M){const T=_.matched[_.matched.length-1];if(T&&T.redirect){const{redirect:F}=T;let Y=typeof F=="function"?F(_,M):F;return typeof Y=="string"&&(Y=Y.includes("?")||Y.includes("#")?Y=D(Y):{path:Y},Y.params={}),ne({query:_.query,hash:_.hash,params:Y.path!=null?{}:_.params},Y)}}function he(_,M){const T=c=j(_),F=a.value,Y=_.state,f=_.force,h=_.replace===!0,p=ve(T,F);if(p)return he(ne(D(p),{state:typeof p=="object"?ne({},Y,p.state):Y,force:f,replace:h}),M||T);const b=T;b.redirectedFrom=M;let w;return!f&&bc(s,F,T)&&(w=Zt(ge.NAVIGATION_DUPLICATED,{to:b,from:F}),Ye(F,F,!0,!1)),(w?Promise.resolve(w):Je(b,F)).catch(x=>at(x)?at(x,ge.NAVIGATION_GUARD_REDIRECT)?x:xt(x):te(x,b,F)).then(x=>{if(x){if(at(x,ge.NAVIGATION_GUARD_REDIRECT))return he(ne({replace:h},D(x.to),{state:typeof x.to=="object"?ne({},Y,x.to.state):Y,force:f}),M||b)}else x=At(b,F,!0,h,Y);return yt(b,F,x),x})}function Re(_,M){const T=V(_,M);return T?Promise.reject(T):Promise.resolve()}function vt(_){const M=Ht.values().next().value;return M&&typeof M.runWithContext=="function"?M.runWithContext(_):_()}function Je(_,M){let T;const[F,Y,f]=Dc(_,M);T=ps(F.reverse(),"beforeRouteLeave",_,M);for(const p of F)p.leaveGuards.forEach(b=>{T.push(Rt(b,_,M))});const h=Re.bind(null,_,M);return T.push(h),He(T).then(()=>{T=[];for(const p of o.list())T.push(Rt(p,_,M));return T.push(h),He(T)}).then(()=>{T=ps(Y,"beforeRouteUpdate",_,M);for(const p of Y)p.updateGuards.forEach(b=>{T.push(Rt(b,_,M))});return T.push(h),He(T)}).then(()=>{T=[];for(const p of f)if(p.beforeEnter)if(ze(p.beforeEnter))for(const b of p.beforeEnter)T.push(Rt(b,_,M));else T.push(Rt(p.beforeEnter,_,M));return T.push(h),He(T)}).then(()=>(_.matched.forEach(p=>p.enterCallbacks={}),T=ps(f,"beforeRouteEnter",_,M,vt),T.push(h),He(T))).then(()=>{T=[];for(const p of i.list())T.push(Rt(p,_,M));return T.push(h),He(T)}).catch(p=>at(p,ge.NAVIGATION_CANCELLED)?p:Promise.reject(p))}function yt(_,M,T){l.list().forEach(F=>vt(()=>F(_,M,T)))}function At(_,M,T,F,Y){const f=V(_,M);if(f)return f;const h=M===bt,p=Gt?history.state:{};T&&(F||h?r.replace(_.fullPath,ne({scroll:h&&p&&p.scroll},Y)):r.push(_.fullPath,Y)),a.value=_,Ye(_,M,T,h),xt()}let Qe;function en(){Qe||(Qe=r.listen((_,M,T)=>{if(!Et.listening)return;const F=j(_),Y=ve(F,Et.currentRoute.value);if(Y){he(ne(Y,{replace:!0,force:!0}),F).catch(hn);return}c=F;const f=a.value;Gt&&Ec(Fr(f.fullPath,T.delta),Zn()),Je(F,f).catch(h=>at(h,ge.NAVIGATION_ABORTED|ge.NAVIGATION_CANCELLED)?h:at(h,ge.NAVIGATION_GUARD_REDIRECT)?(he(ne(D(h.to),{force:!0}),F).then(p=>{at(p,ge.NAVIGATION_ABORTED|ge.NAVIGATION_DUPLICATED)&&!T.delta&&T.type===$s.pop&&r.go(-1,!1)}).catch(hn),Promise.reject()):(T.delta&&r.go(-T.delta,!1),te(h,F,f))).then(h=>{h=h||At(F,f,!1),h&&(T.delta&&!at(h,ge.NAVIGATION_CANCELLED)?r.go(-T.delta,!1):T.type===$s.pop&&at(h,ge.NAVIGATION_ABORTED|ge.NAVIGATION_DUPLICATED)&&r.go(-1,!1)),yt(F,f,h)}).catch(hn)}))}let Ft=rn(),be=rn(),ae;function te(_,M,T){xt(_);const F=be.list();return F.length?F.forEach(Y=>Y(_,M,T)):console.error(_),Promise.reject(_)}function it(){return ae&&a.value!==bt?Promise.resolve():new Promise((_,M)=>{Ft.add([_,M])})}function xt(_){return ae||(ae=!_,en(),Ft.list().forEach(([M,T])=>_?T(_):M()),Ft.reset()),_}function Ye(_,M,T,F){const{scrollBehavior:Y}=e;if(!Gt||!Y)return Promise.resolve();const f=!T&&Pc(Fr(_.fullPath,0))||(F||!T)&&history.state&&history.state.scroll||null;return So().then(()=>Y(_,M,f)).then(h=>h&&Ac(h)).catch(h=>te(h,_,M))}const Ne=_=>r.go(_);let Vt;const Ht=new Set,Et={currentRoute:a,listening:!0,addRoute:v,removeRoute:S,clearRoutes:t.clearRoutes,hasRoute:W,getRoutes:I,resolve:j,options:e,push:L,replace:ee,go:Ne,back:()=>Ne(-1),forward:()=>Ne(1),beforeEach:o.add,beforeResolve:i.add,afterEach:l.add,onError:be.add,isReady:it,install(_){_.component("RouterLink",Ce),_.component("RouterView",lu),_.config.globalProperties.$router=Et,Object.defineProperty(_.config.globalProperties,"$route",{enumerable:!0,get:()=>P(a)}),Gt&&!Vt&&a.value===bt&&(Vt=!0,L(r.location).catch(F=>{}));const M={};for(const F in bt)Object.defineProperty(M,F,{get:()=>a.value[F],enumerable:!0});_.provide(Ys,Et),_.provide(Xs,wo(M)),_.provide(Os,a);const T=_.unmount;Ht.add(_),_.unmount=function(){Ht.delete(_),Ht.size<1&&(c=bt,Qe&&Qe(),Qe=null,a.value=bt,Vt=!1,ae=!1),T()}}};function He(_){return _.reduce((M,T)=>M.then(()=>vt(T)),Promise.resolve())}return Et}function es(e){return Pe(Xs)}const cu=["aria-label"],uu={key:0,class:"fas fa-moon text-purple-400"},du={key:1,class:"fas fa-sun text-yellow-500"},fu={__name:"ThemeToggle",setup(e){const t=ke(!1);jt(()=>{const r=localStorage.getItem("theme"),o=window.matchMedia("(prefers-color-scheme: dark)").matches;t.value=r==="dark"||!r&&o,n(),window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",i=>{localStorage.getItem("theme")||(t.value=i.matches,n())})}),Ue(t,()=>{n(),localStorage.setItem("theme",t.value?"dark":"light")});function n(){t.value?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")}function s(){t.value=!t.value}return(r,o)=>(y(),R("button",{onClick:s,class:"p-2 rounded-lg hover:bg-gray-200 dark:hover:bg-gray-700 transition","aria-label":t.value?"Switch to light mode":"Switch to dark mode"},[t.value?(y(),R("i",uu)):(y(),R("i",du))],8,cu))}},mu={class:"sticky top-0 z-50 glass shadow-modern"},hu={class:"container mx-auto px-4"},gu={class:"flex items-center justify-between h-16"},pu={class:"hidden md:flex items-center space-x-6"},vu={class:"flex items-center space-x-4"},yu={key:0,class:"md:hidden py-4 border-t border-gray-200 dark:border-gray-700"},xu={class:"flex flex-col space-y-3"},bu={__name:"Navbar",setup(e){const t=es(),n=Pe("globalData"),s=ke(!1),r=oe(()=>n.value?.Repositories||[]);return(o,i)=>(y(),R("nav",mu,[d("div",hu,[d("div",gu,[N(P(Ce),{to:"/",class:"flex items-center space-x-2"},{default:Z(()=>[...i[4]||(i[4]=[d("i",{class:"fas fa-rocket text-2xl gradient-text"},null,-1),d("span",{class:"text-xl font-bold gradient-text"},"Git Velocity",-1)])]),_:1}),d("div",pu,[N(P(Ce),{to:"/",class:J(P(t).path==="/"?"nav-link-active":"nav-link")},{default:Z(()=>[...i[5]||(i[5]=[ce(" Dashboard ",-1)])]),_:1},8,["class"]),N(P(Ce),{to:"/leaderboard",class:J(P(t).path==="/leaderboard"?"nav-link-active":"nav-link")},{default:Z(()=>[...i[6]||(i[6]=[ce(" Leaderboard ",-1)])]),_:1},8,["class"]),(y(!0),R(Q,null,xe(r.value,l=>(y(),ie(P(Ce),{key:`${l.Owner}/${l.Name}`,to:`/repos/${l.Owner}/${l.Name}`,class:J(P(t).path.includes(`/repos/${l.Owner}/${l.Name}`)?"nav-link-active":"nav-link")},{default:Z(()=>[ce(k(l.Name),1)]),_:2},1032,["to","class"]))),128))]),d("div",vu,[N(fu),d("button",{onClick:i[0]||(i[0]=l=>s.value=!s.value),class:"md:hidden p-2 rounded-lg hover:bg-gray-200 dark:hover:bg-gray-700 transition"},[...i[7]||(i[7]=[d("i",{class:"fas fa-bars text-gray-700 dark:text-gray-200"},null,-1)])])])]),s.value?(y(),R("div",yu,[d("div",xu,[N(P(Ce),{to:"/",onClick:i[1]||(i[1]=l=>s.value=!1),class:J(P(t).path==="/"?"nav-link-active":"nav-link")},{default:Z(()=>[...i[8]||(i[8]=[ce(" Dashboard ",-1)])]),_:1},8,["class"]),N(P(Ce),{to:"/leaderboard",onClick:i[2]||(i[2]=l=>s.value=!1),class:J(P(t).path==="/leaderboard"?"nav-link-active":"nav-link")},{default:Z(()=>[...i[9]||(i[9]=[ce(" Leaderboard ",-1)])]),_:1},8,["class"]),(y(!0),R(Q,null,xe(r.value,l=>(y(),ie(P(Ce),{key:`${l.Owner}/${l.Name}`,to:`/repos/${l.Owner}/${l.Name}`,onClick:i[3]||(i[3]=a=>s.value=!1),class:J(P(t).path.includes(`/repos/${l.Owner}/${l.Name}`)?"nav-link-active":"nav-link")},{default:Z(()=>[ce(k(l.Name),1)]),_:2},1032,["to","class"]))),128))])])):q("",!0)])]))}},_u={class:"py-8 px-4 mt-16 border-t border-gray-200 dark:border-gray-700"},wu={class:"container mx-auto text-center"},ku={key:0,class:"text-sm text-gray-400 dark:text-gray-500 mt-2"},Ru={__name:"Footer",setup(e){const t=Pe("globalData"),n=oe(()=>t.value?.GeneratedAt?new Date(t.value.GeneratedAt).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric"}):"");return(s,r)=>(y(),R("footer",_u,[d("div",wu,[r[0]||(r[0]=d("p",{class:"text-gray-500 dark:text-gray-400"},[ce(" Generated by "),d("a",{href:"https://github.com/lukaszraczylo/git-velocity",class:"text-primary-500 hover:text-primary-600",target:"_blank",rel:"noopener noreferrer"}," Git Velocity ")],-1)),n.value?(y(),R("p",ku,k(n.value),1)):q("",!0)])]))}},Cu={class:"min-h-screen flex flex-col"},Su={class:"flex-1"},Au={key:0,class:"flex items-center justify-center min-h-[60vh]"},Eu={key:1,class:"flex items-center justify-center min-h-[60vh]"},Pu={class:"text-center"},$u={class:"text-gray-600 dark:text-gray-400"},Tu={__name:"App",setup(e){const t=ke(null),n=ke(!0),s=ke(null);return fn("globalData",t),jt(async()=>{try{const r=await fetch("./data/global.json");if(!r.ok)throw new Error("Failed to load data");t.value=await r.json()}catch(r){s.value=r.message}finally{n.value=!1}}),(r,o)=>{const i=Ll("router-view");return y(),R("div",Cu,[N(bu),d("main",Su,[n.value?(y(),R("div",Au,[...o[0]||(o[0]=[d("div",{class:"text-center"},[d("i",{class:"fas fa-spinner fa-spin text-4xl text-primary-500 mb-4"}),d("p",{class:"text-gray-600 dark:text-gray-400"},"Loading dashboard...")],-1)])])):s.value?(y(),R("div",Eu,[d("div",Pu,[o[1]||(o[1]=d("i",{class:"fas fa-exclamation-triangle text-4xl text-red-500 mb-4"},null,-1)),d("p",$u,k(s.value),1)])])):(y(),ie(i,{key:2}))]),N(Ru)])}}};function z(e){return e==null?"0":e>=1e6?(e/1e6).toFixed(1)+"M":e>=1e3?(e/1e3).toFixed(1)+"K":String(e)}function Ou(e){return e==null?"-":e<1?Math.round(e*60)+"m":e<24?e.toFixed(1)+"h":(e/24).toFixed(1)+"d"}function vs(e){return e?new Date(e).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric"}):""}function Iu(e){return e==null?"0%":e.toFixed(1)+"%"}function ki(e){return e?e.toLowerCase().replace(/\s+/g,"-").replace(/_/g,"-").replace(/[^a-z0-9-]/g,""):""}const Nu={class:"flex items-center justify-between"},Mu={class:"text-sm text-gray-500 dark:text-gray-400 mt-1"},_e={__name:"StatCard",props:{value:{type:[Number,String],required:!0},label:{type:String,required:!0},icon:{type:String,default:""},iconColor:{type:String,default:"text-gray-500"},valueClass:{type:String,default:"gradient-text"},delay:{type:String,default:"0s"}},setup(e){return(t,n)=>(y(),R("div",{class:"card animate-fade-in-up",style:St({animationDelay:e.delay})},[d("div",Nu,[d("div",null,[d("div",{class:J(["text-3xl font-bold",e.valueClass])},k(typeof e.value=="number"?P(z)(e.value):e.value),3),d("div",Mu,k(e.label),1)]),e.icon?(y(),R("div",{key:0,class:J(["text-3xl opacity-50",e.iconColor])},[d("i",{class:J(e.icon)},null,2)],2)):q("",!0)])],4))}},Du=["src","alt"],Sn={__name:"Avatar",props:{src:{type:String,default:""},name:{type:String,required:!0},size:{type:String,default:"md"}},setup(e){const t=e,n={sm:"w-8 h-8 text-xs",md:"w-10 h-10 text-sm",lg:"w-14 h-14 text-xl",xl:"w-16 h-16 text-2xl","2xl":"w-32 h-32 text-4xl"},s=oe(()=>t.name.charAt(0).toUpperCase()),r=oe(()=>n[t.size]||n.md);return(o,i)=>e.src?(y(),R("img",{key:0,src:e.src,alt:e.name,class:J([r.value,"rounded-full"])},null,10,Du)):(y(),R("div",{key:1,class:J([r.value,"rounded-full bg-gradient-to-br from-primary-500 to-accent-500 flex items-center justify-center text-white font-bold"])},k(s.value),3))}},Ri={__name:"RankBadge",props:{rank:{type:Number,required:!0},size:{type:String,default:"md"}},setup(e){const t=e,n={sm:"w-6 h-6 text-xs",md:"w-8 h-8 text-sm"},s=oe(()=>t.rank===1?"rank-1":t.rank===2?"rank-2":t.rank===3?"rank-3":"bg-gray-200 dark:bg-gray-700 text-gray-600 dark:text-gray-300"),r=oe(()=>n[t.size]||n.md);return(o,i)=>(y(),R("span",{class:J([[r.value,s.value,{"text-white":e.rank<=3}],"inline-flex items-center justify-center rounded-full font-bold"])},k(e.rank),3))}},Lu={class:"inline-flex flex-col items-center gap-2"},ju=["title"],Fu={class:"absolute bottom-full left-1/2 -translate-x-1/2 mb-3 px-3 py-2 bg-gray-900 dark:bg-gray-800 text-white text-xs rounded-xl opacity-0 group-hover/badge:opacity-100 transition-all duration-200 pointer-events-none whitespace-nowrap z-50 shadow-xl border border-white/10"},Vu={class:"font-bold text-sm"},Hu={class:"text-gray-300 text-[11px] mt-0.5"},Bu={key:0,class:"text-[11px] font-medium text-gray-600 dark:text-gray-400 text-center leading-tight",style:{"max-width":"72px","word-wrap":"break-word"}},wn={__name:"AchievementBadge",props:{achievementId:{type:String,required:!0},size:{type:String,default:"md"},showLabel:{type:Boolean,default:!1}},setup(e){const t={1:"from-stone-400 to-stone-500",2:"from-green-400 to-emerald-500",3:"from-blue-400 to-indigo-500",4:"from-purple-400 to-violet-500",5:"from-yellow-400 to-amber-500",6:"from-orange-400 to-red-500",7:"from-red-500 to-rose-600",8:"from-pink-500 to-fuchsia-600",9:"from-cyan-400 to-teal-500",10:"from-emerald-400 to-cyan-500",11:"from-violet-500 to-purple-600"},n=l=>{const a=[1,10,25,50,100,250,500,1e3,5e3,1e4,25e3];for(let c=a.length-1;c>=0;c--)if(l>=a[c])return c+1;return 1},s=l=>{const a=l.match(/(\d+)$/);return a?parseInt(a[1],10):50},r={"commit-1":{name:"First Steps",description:"Made your first commit",icon:"fa-baby"},"commit-10":{name:"Getting Started",description:"Made 10 commits",icon:"fa-seedling"},"commit-50":{name:"Contributor",description:"Made 50 commits",icon:"fa-code"},"commit-100":{name:"Committed",description:"Made 100 commits",icon:"fa-fire"},"commit-500":{name:"Code Machine",description:"Made 500 commits",icon:"fa-robot"},"commit-1000":{name:"Code Warrior",description:"Made 1000 commits",icon:"fa-crown"},"pr-1":{name:"PR Pioneer",description:"Opened your first pull request",icon:"fa-code-pull-request"},"pr-10":{name:"PR Regular",description:"Opened 10 pull requests",icon:"fa-code-branch"},"pr-25":{name:"PR Pro",description:"Opened 25 pull requests",icon:"fa-code-compare"},"pr-50":{name:"Merge Master",description:"Opened 50 pull requests",icon:"fa-code-merge"},"pr-100":{name:"PR Champion",description:"Opened 100 pull requests",icon:"fa-trophy"},"pr-250":{name:"PR Legend",description:"Opened 250 pull requests",icon:"fa-medal"},"review-1":{name:"First Review",description:"Reviewed your first pull request",icon:"fa-magnifying-glass"},"review-10":{name:"Reviewer",description:"Reviewed 10 pull requests",icon:"fa-eye"},"review-25":{name:"Review Regular",description:"Reviewed 25 pull requests",icon:"fa-glasses"},"review-50":{name:"Review Expert",description:"Reviewed 50 pull requests",icon:"fa-user-check"},"review-100":{name:"Review Guru",description:"Reviewed 100 pull requests",icon:"fa-user-graduate"},"review-250":{name:"Review Master",description:"Reviewed 250 pull requests",icon:"fa-award"},"comment-10":{name:"Commentator",description:"Left 10 PR review comments",icon:"fa-comment"},"comment-50":{name:"Feedback Giver",description:"Left 50 PR review comments",icon:"fa-comments"},"comment-100":{name:"Code Critic",description:"Left 100 PR review comments",icon:"fa-comment-dots"},"comment-250":{name:"Feedback Expert",description:"Left 250 PR review comments",icon:"fa-message"},"comment-500":{name:"Comment Champion",description:"Left 500 PR review comments",icon:"fa-scroll"},"lines-added-100":{name:"First Hundred",description:"Added 100 lines of code",icon:"fa-plus"},"lines-added-1000":{name:"Thousand Lines",description:"Added 1000 lines of code",icon:"fa-layer-group"},"lines-added-5000":{name:"Five Thousand",description:"Added 5000 lines of code",icon:"fa-cubes"},"lines-added-10000":{name:"Ten Thousand",description:"Added 10000 lines of code",icon:"fa-mountain"},"lines-added-50000":{name:"Code Mountain",description:"Added 50000 lines of code",icon:"fa-mountain-sun"},"lines-deleted-100":{name:"Tidying Up",description:"Deleted 100 lines of code",icon:"fa-eraser"},"lines-deleted-500":{name:"Spring Cleaning",description:"Deleted 500 lines of code",icon:"fa-broom"},"lines-deleted-1000":{name:"Code Cleaner",description:"Deleted 1000 lines of code",icon:"fa-trash-can"},"lines-deleted-5000":{name:"Refactoring Hero",description:"Deleted 5000 lines of code",icon:"fa-recycle"},"lines-deleted-10000":{name:"Deletion Master",description:"Deleted 10000 lines of code",icon:"fa-dumpster-fire"},"review-time-24h":{name:"Same Day Reviewer",description:"Average review response under 24 hours",icon:"fa-clock"},"review-time-4h":{name:"Quick Responder",description:"Average review response under 4 hours",icon:"fa-stopwatch"},"review-time-1h":{name:"Speed Demon",description:"Average review response under 1 hour",icon:"fa-bolt"},"repo-2":{name:"Multi-Repo",description:"Contributed to 2 repositories",icon:"fa-folder"},"repo-5":{name:"Repo Explorer",description:"Contributed to 5 repositories",icon:"fa-folder-tree"},"repo-10":{name:"Repo Master",description:"Contributed to 10 repositories",icon:"fa-network-wired"},"reviewees-3":{name:"Helpful Colleague",description:"Reviewed PRs from 3 different contributors",icon:"fa-user-group"},"reviewees-10":{name:"Team Player",description:"Reviewed PRs from 10 different contributors",icon:"fa-people-group"},"reviewees-25":{name:"Community Pillar",description:"Reviewed PRs from 25 different contributors",icon:"fa-people-roof"},"large-pr-500":{name:"Big Change",description:"Merged a PR with 500+ lines changed",icon:"fa-expand"},"large-pr-1000":{name:"Heavy Lifter",description:"Merged a PR with 1000+ lines changed",icon:"fa-weight-hanging"},"large-pr-5000":{name:"Mega Merge",description:"Merged a PR with 5000+ lines changed",icon:"fa-dumbbell"},"small-pr-5":{name:"Small Changes",description:"Merged 5 PRs under 100 lines",icon:"fa-compress"},"small-pr-10":{name:"Small PR Advocate",description:"Merged 10 PRs under 100 lines",icon:"fa-minimize"},"small-pr-25":{name:"Atomic Commits",description:"Merged 25 PRs under 100 lines",icon:"fa-atom"},"small-pr-50":{name:"Micro PR Master",description:"Merged 50 PRs under 100 lines",icon:"fa-microchip"},"perfect-pr-1":{name:"First Try",description:"1 PR merged without changes requested",icon:"fa-check"},"perfect-pr-5":{name:"Clean Code",description:"5 PRs merged without changes requested",icon:"fa-check-double"},"perfect-pr-10":{name:"Quality Author",description:"10 PRs merged without changes requested",icon:"fa-circle-check"},"perfect-pr-25":{name:"Flawless",description:"25 PRs merged without changes requested",icon:"fa-gem"},"active-7":{name:"Week Active",description:"Active on 7 different days",icon:"fa-calendar-day"},"active-30":{name:"Month Active",description:"Active on 30 different days",icon:"fa-calendar-week"},"active-60":{name:"Consistent Contributor",description:"Active on 60 different days",icon:"fa-chart-line"},"active-100":{name:"Dedicated Developer",description:"Active on 100 different days",icon:"fa-fire-flame-curved"},"streak-3":{name:"Getting Rolling",description:"3 day contribution streak",icon:"fa-forward"},"streak-7":{name:"Week Warrior",description:"7 day contribution streak",icon:"fa-calendar-week"},"streak-14":{name:"Two Week Streak",description:"14 day contribution streak",icon:"fa-fire"},"streak-30":{name:"Month Master",description:"30 day contribution streak",icon:"fa-calendar-check"},"workweek-3":{name:"Work Week Start",description:"3 consecutive weekday streak",icon:"fa-briefcase"},"workweek-5":{name:"Full Work Week",description:"5 consecutive weekday streak",icon:"fa-building"},"workweek-10":{name:"Two Week Grind",description:"10 consecutive weekday streak",icon:"fa-business-time"},"workweek-20":{name:"Month of Mondays",description:"20 consecutive weekday streak",icon:"fa-landmark"},"earlybird-10":{name:"Early Riser",description:"10 commits before 9am",icon:"fa-mug-hot"},"earlybird-25":{name:"Morning Person",description:"25 commits before 9am",icon:"fa-cloud-sun"},"earlybird-50":{name:"Early Bird",description:"50 commits before 9am",icon:"fa-sun"},"earlybird-100":{name:"Dawn Warrior",description:"100 commits before 9am",icon:"fa-sunrise"},"nightowl-10":{name:"Late Worker",description:"10 commits after 9pm",icon:"fa-cloud-moon"},"nightowl-25":{name:"Evening Coder",description:"25 commits after 9pm",icon:"fa-moon"},"nightowl-50":{name:"Night Owl",description:"50 commits after 9pm",icon:"fa-star"},"nightowl-100":{name:"Nocturnal",description:"100 commits after 9pm",icon:"fa-star-and-crescent"},"midnight-5":{name:"Night Shift",description:"5 commits between midnight and 4am",icon:"fa-ghost"},"midnight-10":{name:"Insomniac",description:"10 commits between midnight and 4am",icon:"fa-bed"},"midnight-25":{name:"Nosferatu",description:"25 commits between midnight and 4am",icon:"fa-skull"},"midnight-50":{name:"Vampire Coder",description:"50 commits between midnight and 4am",icon:"fa-skull-crossbones"},"weekend-5":{name:"Weekend Work",description:"5 weekend commits",icon:"fa-couch"},"weekend-10":{name:"Weekend Regular",description:"10 weekend commits",icon:"fa-house-laptop"},"weekend-25":{name:"Weekend Warrior",description:"25 weekend commits",icon:"fa-gamepad"},"weekend-50":{name:"No Days Off",description:"50 weekend commits",icon:"fa-person-running"},"ooh-10":{name:"Extra Hours",description:"10 commits outside 9am-5pm",icon:"fa-clock-rotate-left"},"ooh-25":{name:"Flexible Schedule",description:"25 commits outside 9am-5pm",icon:"fa-user-clock"},"ooh-50":{name:"Off-Hours Hero",description:"50 commits outside 9am-5pm",icon:"fa-hourglass-half"},"ooh-100":{name:"Time Bender",description:"100 commits outside 9am-5pm",icon:"fa-infinity"},"docs-100":{name:"Documenter",description:"Added 100 lines of comments/docs",icon:"fa-file-lines"},"docs-500":{name:"Technical Writer",description:"Added 500 lines of comments/docs",icon:"fa-book"},"docs-1000":{name:"Documentation Hero",description:"Added 1000 lines of comments/docs",icon:"fa-book-open"},"docs-2500":{name:"Knowledge Keeper",description:"Added 2500 lines of comments/docs",icon:"fa-scroll"},"docs-5000":{name:"Code Historian",description:"Added 5000 lines of comments/docs",icon:"fa-landmark"},"docs-del-50":{name:"Comment Trimmer",description:"Removed 50 lines of outdated comments",icon:"fa-scissors"},"docs-del-200":{name:"Cleanup Crew",description:"Removed 200 lines of outdated comments",icon:"fa-broom"},"docs-del-500":{name:"Dead Code Hunter",description:"Removed 500 lines of outdated comments",icon:"fa-skull-crossbones"},"docs-del-1000":{name:"Comment Surgeon",description:"Removed 1000 lines of outdated comments",icon:"fa-user-doctor"},"docs-del-2500":{name:"Noise Eliminator",description:"Removed 2500 lines of outdated comments",icon:"fa-volume-xmark"}},o=l=>{const a=r[l]||{name:l,description:"",icon:"fa-medal"},c=s(l),u=n(c),m=t[u]||"from-gray-400 to-gray-500";return{...a,gradient:m,tier:u,threshold:c}},i={sm:{wrapper:"w-9 h-9",icon:"text-sm",radius:"rounded-lg"},md:{wrapper:"w-11 h-11",icon:"text-base",radius:"rounded-xl"},lg:{wrapper:"w-14 h-14",icon:"text-lg",radius:"rounded-xl"}};return(l,a)=>(y(),R("div",Lu,[d("div",{class:"relative group/badge",title:o(e.achievementId).name},[d("div",{class:J(["flex items-center justify-center bg-gradient-to-br shadow-lg hover:scale-105 hover:shadow-xl transition-all duration-200 cursor-pointer",[i[e.size].wrapper,i[e.size].radius,o(e.achievementId).gradient]])},[d("i",{class:J(["fas text-white drop-shadow-sm",[o(e.achievementId).icon,i[e.size].icon]])},null,2)],2),d("div",Fu,[d("div",Vu,k(o(e.achievementId).name),1),d("div",Hu,k(o(e.achievementId).description),1),a[0]||(a[0]=d("div",{class:"absolute top-full left-1/2 -translate-x-1/2 border-[6px] border-transparent border-t-gray-900 dark:border-t-gray-800"},null,-1))])],8,ju),e.showLabel?(y(),R("span",Bu,k(o(e.achievementId).name),1)):q("",!0)]))}},Uu={class:"flex items-center space-x-4"},Gu={class:"relative"},qu={class:"flex-1"},Wu={class:"font-semibold text-gray-800 dark:text-white group-hover:text-primary-500 transition-colors"},Ku={class:"text-sm text-gray-500 dark:text-gray-400"},zu={key:0,class:"text-xs text-accent-500"},Ju={class:"text-right"},Qu={class:"text-2xl font-bold gradient-text"},Yu={key:0,class:"mt-4 flex flex-wrap gap-1.5"},Xu={key:0,class:"inline-flex items-center justify-center w-8 h-8 rounded-lg bg-gray-200 dark:bg-gray-700 text-gray-600 dark:text-gray-300 text-xs font-bold"},Zu={__name:"ContributorCard",props:{contributor:{type:Object,required:!0},rank:{type:Number,default:0},showRank:{type:Boolean,default:!0},featured:{type:Boolean,default:!1}},setup(e){return(t,n)=>(y(),ie(P(Ce),{to:{name:"contributor",params:{login:e.contributor.login}},class:J(["card animate-fade-in-up block cursor-pointer hover:shadow-lg transition-shadow",e.featured&&e.rank===1?"ring-2 ring-yellow-400":""])},{default:Z(()=>[d("div",Uu,[d("div",Gu,[N(Sn,{src:e.contributor.avatar_url,name:e.contributor.login,size:e.featured?"xl":"lg"},null,8,["src","name","size"]),e.showRank&&e.rank>0?(y(),ie(Ri,{key:0,rank:e.rank,size:"sm",class:"absolute -top-1 -right-1"},null,8,["rank"])):q("",!0)]),d("div",qu,[d("h3",Wu,k(e.contributor.name||e.contributor.login),1),d("p",Ku,[d("span",{class:"hover:text-primary-500 transition-colors",onClick:n[0]||(n[0]=Js(s=>t.window.open(`https://github.com/${e.contributor.login}`,"_blank"),["stop","prevent"]))},[ce(" @"+k(e.contributor.login)+" ",1),n[1]||(n[1]=d("i",{class:"fas fa-external-link-alt text-xs ml-0.5 opacity-50"},null,-1))])]),e.contributor.team?(y(),R("p",zu,k(e.contributor.team),1)):q("",!0)]),d("div",Ju,[d("div",Qu,k(P(z)(e.contributor.score?.total||e.contributor.score||0)),1),n[2]||(n[2]=d("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"points",-1))])]),e.contributor.achievements?.length?(y(),R("div",Yu,[(y(!0),R(Q,null,xe(e.contributor.achievements.slice(0,6),s=>(y(),ie(wn,{key:s,"achievement-id":s,size:"sm"},null,8,["achievement-id"]))),128)),e.contributor.achievements.length>6?(y(),R("span",Xu," +"+k(e.contributor.achievements.length-6),1)):q("",!0)])):q("",!0)]),_:1},8,["to","class"]))}},ed={class:"flex items-center justify-between mb-4"},td={class:"font-semibold text-gray-800 dark:text-white group-hover:text-primary-500 transition"},nd={class:"text-sm text-gray-500 dark:text-gray-400 mb-4"},sd={class:"grid grid-cols-3 gap-4 text-center"},rd={class:"text-lg font-semibold text-gray-800 dark:text-white"},od={class:"text-lg font-semibold text-gray-800 dark:text-white"},id={class:"text-lg font-semibold text-gray-800 dark:text-white"},ld={__name:"RepoCard",props:{repo:{type:Object,required:!0}},setup(e){return(t,n)=>(y(),ie(P(Ce),{to:`/repos/${e.repo.owner}/${e.repo.name}`,class:"card hover:shadow-lg transition group"},{default:Z(()=>[d("div",ed,[d("h3",td,k(e.repo.name),1),n[0]||(n[0]=d("i",{class:"fas fa-arrow-right text-gray-400 group-hover:text-primary-500 transition"},null,-1))]),d("p",nd,k(e.repo.owner)+"/"+k(e.repo.name),1),d("div",sd,[d("div",null,[d("div",rd,k(P(z)(e.repo.total_commits)),1),n[1]||(n[1]=d("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"Commits",-1))]),d("div",null,[d("div",od,k(P(z)(e.repo.total_prs)),1),n[2]||(n[2]=d("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"PRs",-1))]),d("div",null,[d("div",id,k(e.repo.active_contributors),1),n[3]||(n[3]=d("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"Contributors",-1))])])]),_:1},8,["to"]))}},ad={class:"flex items-center justify-between mb-4"},cd={class:"font-semibold text-gray-800 dark:text-white group-hover:text-primary-500 transition"},ud={class:"flex items-center space-x-2 mb-4"},dd={key:0,class:"w-8 h-8 rounded-full bg-gray-200 dark:bg-gray-700 flex items-center justify-center text-gray-600 dark:text-gray-300 text-xs font-bold"},fd={class:"grid grid-cols-2 gap-4 text-center"},md={class:"text-lg font-semibold gradient-text"},hd={class:"text-lg font-semibold text-gray-800 dark:text-white"},gd={__name:"TeamCard",props:{team:{type:Object,required:!0}},setup(e){return(t,n)=>(y(),ie(P(Ce),{to:`/teams/${P(ki)(e.team.name)}`,class:"card hover:shadow-lg transition group"},{default:Z(()=>[d("div",ad,[d("h3",cd,k(e.team.name),1),d("span",{class:"w-3 h-3 rounded-full",style:St({backgroundColor:e.team.color||"#8b5cf6"})},null,4)]),d("div",ud,[(y(!0),R(Q,null,xe((e.team.members||[]).slice(0,5),(s,r)=>(y(),ie(Sn,{key:s,name:s,size:"sm"},null,8,["name"]))),128)),(e.team.members?.length||0)>5?(y(),R("span",dd," +"+k(e.team.members.length-5),1)):q("",!0)]),d("div",fd,[d("div",null,[d("div",md,k(P(z)(e.team.total_score)),1),n[0]||(n[0]=d("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"Total Score",-1))]),d("div",null,[d("div",hd,k(e.team.members?.length||0),1),n[1]||(n[1]=d("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"Members",-1))])])]),_:1},8,["to"]))}},pd={class:"text-2xl font-bold text-gray-800 dark:text-white mb-6"},It={__name:"SectionHeader",props:{title:{type:String,required:!0},icon:{type:String,default:""},iconColor:{type:String,default:"text-primary-500"}},setup(e){return(t,n)=>(y(),R("h2",pd,[e.icon?(y(),R("i",{key:0,class:J([[e.icon,e.iconColor],"mr-2"])},null,2)):q("",!0),ce(k(e.title)+" ",1),Dt(t.$slots,"suffix")]))}},vd=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},yd={key:0,class:"flex items-center justify-center h-full"},xd={__name:"VelocityChart",props:{timeline:{type:Object,required:!0},height:{type:String,default:"300px"},showScore:{type:Boolean,default:!1}},setup(e){rr.register(...Oi);const t=e,n=ke(null);let s=null;const r=oe(()=>t.timeline?.series?t.timeline.series.filter(c=>t.showScore||c.name!=="Score"):[]),o=oe(()=>!t.timeline?.labels||!r.value.length?{labels:[],datasets:[]}:{labels:t.timeline.labels,datasets:r.value.map(c=>({label:c.name,data:c.data,borderColor:c.color,backgroundColor:c.color+"20",fill:!0,tension:.4,pointRadius:3,pointHoverRadius:5}))}),i={responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{legend:{position:"top",labels:{usePointStyle:!0,padding:20,font:{size:12}}},tooltip:{backgroundColor:"rgba(0, 0, 0, 0.8)",padding:12,titleFont:{size:14},bodyFont:{size:13},callbacks:{label:c=>`${c.dataset.label}: ${c.parsed.y.toLocaleString()}`}}},scales:{x:{grid:{display:!1},ticks:{font:{size:11}}},y:{beginAtZero:!0,grid:{color:"rgba(0, 0, 0, 0.05)"},ticks:{font:{size:11},callback:c=>c>=1e3?(c/1e3).toFixed(1)+"k":c}}}};function l(){if(!n.value||!o.value.labels.length)return;s&&s.destroy();const c=n.value.getContext("2d");s=new rr(c,{type:"line",data:o.value,options:i})}function a(){s?(s.data=o.value,s.update()):l()}return jt(()=>{l()}),Ue(()=>t.timeline,()=>{a()},{deep:!0}),Ue(()=>t.showScore,()=>{a()}),(c,u)=>(y(),R("div",{class:"velocity-chart",style:St({height:e.height})},[d("canvas",{ref_key:"chartRef",ref:n},null,512),e.timeline?.labels?.length?q("",!0):(y(),R("div",yd,[...u[0]||(u[0]=[d("p",{class:"text-gray-400"},"No velocity data available",-1)])]))],4))}},bd=vd(xd,[["__scopeId","data-v-401bbb13"]]),_d={class:"py-16 px-4"},wd={class:"container mx-auto text-center animate-fade-in-up"},kd={class:"flex flex-col items-center space-y-2 mt-4 text-sm text-gray-500 dark:text-gray-400"},Rd={key:0},Cd={key:0},Sd={key:1},Ad={key:2},Ed={key:1},Pd={key:0,class:"py-8 px-4"},$d={class:"container mx-auto"},Td={class:"card"},Od={class:"flex items-center justify-between mb-6"},Id={class:"flex items-center space-x-2 text-sm text-gray-600 dark:text-gray-400 cursor-pointer"},Nd={class:"py-8 px-4"},Md={class:"container mx-auto"},Dd={class:"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-6 gap-4"},Ld={class:"py-8 px-4"},jd={class:"container mx-auto"},Fd={class:"grid md:grid-cols-3 gap-6"},Vd={class:"mt-6 text-center"},Hd={class:"py-8 px-4"},Bd={class:"container mx-auto"},Ud={class:"grid md:grid-cols-2 lg:grid-cols-3 gap-6"},Gd={key:1,class:"py-8 px-4"},qd={class:"container mx-auto"},Wd={class:"grid md:grid-cols-2 lg:grid-cols-3 gap-6"},Kd={__name:"Dashboard",setup(e){const t=Pe("globalData"),n=oe(()=>t.value||{}),s=oe(()=>n.value.leaderboard?.slice(0,3)||[]),r=oe(()=>n.value.repositories||[]),o=oe(()=>n.value.teams||[]),i=oe(()=>n.value.velocity_timeline),l=ke(!1);return(a,c)=>(y(),R("div",null,[d("header",_d,[d("div",wd,[c[4]||(c[4]=d("h1",{class:"text-4xl md:text-6xl font-bold mb-4"},[d("span",{class:"gradient-text"},"Git Velocity")],-1)),c[5]||(c[5]=d("p",{class:"text-xl text-gray-600 dark:text-gray-300 max-w-2xl mx-auto"}," Celebrate your team's achievements and contributions with beautiful insights. ",-1)),d("div",kd,[n.value.period?.start||n.value.period?.end?(y(),R("p",Rd,[c[1]||(c[1]=d("i",{class:"fas fa-calendar-alt mr-1 text-primary-500"},null,-1)),c[2]||(c[2]=d("span",{class:"font-medium"},"Period:",-1)),n.value.period.start?(y(),R("span",Cd,k(P(vs)(n.value.period.start)),1)):q("",!0),n.value.period.start&&n.value.period.end?(y(),R("span",Sd," — ")):q("",!0),n.value.period.end?(y(),R("span",Ad,k(P(vs)(n.value.period.end)),1)):q("",!0)])):q("",!0),n.value.generated_at?(y(),R("p",Ed,[c[3]||(c[3]=d("i",{class:"fas fa-clock mr-1"},null,-1)),ce(" Generated on "+k(P(vs)(n.value.generated_at)),1)])):q("",!0)])])]),i.value?(y(),R("section",Pd,[d("div",$d,[d("div",Td,[d("div",Od,[N(It,{title:"Velocity Timeline",icon:"fas fa-chart-line","icon-color":"text-primary-500"}),d("label",Id,[wl(d("input",{type:"checkbox","onUpdate:modelValue":c[0]||(c[0]=u=>l.value=u),class:"rounded border-gray-300 text-primary-500 focus:ring-primary-500"},null,512),[[za,l.value]]),c[6]||(c[6]=d("span",null,"Show Score",-1))])]),N(bd,{timeline:i.value,"show-score":l.value,height:"320px"},null,8,["timeline","show-score"])])])])):q("",!0),d("section",Nd,[d("div",Md,[d("div",Dd,[N(_e,{value:n.value.total_contributors||0,label:"Contributors",delay:"0s"},null,8,["value"]),N(_e,{value:n.value.total_commits||0,label:"Commits",delay:"0.1s"},null,8,["value"]),N(_e,{value:n.value.total_prs||0,label:"Pull Requests",delay:"0.2s"},null,8,["value"]),N(_e,{value:n.value.total_reviews||0,label:"Reviews",delay:"0.3s"},null,8,["value"]),N(_e,{value:"+"+P(z)(n.value.total_lines_added||0),label:"Lines Added","value-class":"text-green-500",delay:"0.4s"},null,8,["value"]),N(_e,{value:"-"+P(z)(n.value.total_lines_deleted||0),label:"Lines Deleted","value-class":"text-red-500",delay:"0.5s"},null,8,["value"])])])]),d("section",Ld,[d("div",jd,[N(It,{title:"Top Contributors",icon:"fas fa-trophy","icon-color":"text-yellow-500"}),d("div",Fd,[(y(!0),R(Q,null,xe(s.value,(u,m)=>(y(),ie(Zu,{key:u.login,contributor:u,rank:m+1,featured:""},null,8,["contributor","rank"]))),128))]),d("div",Vd,[N(P(Ce),{to:"/leaderboard",class:"btn-primary"},{default:Z(()=>[...c[7]||(c[7]=[ce(" View Full Leaderboard ",-1),d("i",{class:"fas fa-arrow-right ml-2"},null,-1)])]),_:1})])])]),d("section",Hd,[d("div",Bd,[N(It,{title:"Repositories",icon:"fas fa-code-branch","icon-color":"text-accent-500"}),d("div",Ud,[(y(!0),R(Q,null,xe(r.value,u=>(y(),ie(ld,{key:`${u.owner}/${u.name}`,repo:u},null,8,["repo"]))),128))])])]),o.value.length?(y(),R("section",Gd,[d("div",qd,[N(It,{title:"Teams",icon:"fas fa-users","icon-color":"text-blue-500"}),d("div",Wd,[(y(!0),R(Q,null,xe(o.value,u=>(y(),ie(gd,{key:u.name,team:u},null,8,["team"]))),128))])])])):q("",!0)]))}},zd={class:"flex items-center space-x-2 text-sm text-gray-500 dark:text-gray-400 mb-6"},Jd={key:2,class:"fas fa-chevron-right text-xs"},Qd={__name:"Breadcrumb",props:{items:{type:Array,required:!0}},setup(e){return(t,n)=>(y(),R("div",zd,[(y(!0),R(Q,null,xe(e.items,(s,r)=>(y(),R(Q,{key:r},[s.to?(y(),ie(P(Ce),{key:0,to:s.to,class:"hover:text-primary-500"},{default:Z(()=>[ce(k(s.label),1)]),_:2},1032,["to"])):(y(),R("span",{key:1,class:J(r===e.items.length-1?"text-gray-800 dark:text-white":"")},k(s.label),3)),r[]},centered:{type:Boolean,default:!1}},setup(e){return(t,n)=>(y(),R("header",Yd,[d("div",{class:J(["container mx-auto",{"text-center":e.centered}])},[e.breadcrumbs.length?(y(),ie(Qd,{key:0,items:e.breadcrumbs},null,8,["items"])):q("",!0),d("div",{class:J(["flex items-center",e.centered?"justify-center":""])},[Dt(t.$slots,"prefix"),d("h1",Xd,[e.icon?(y(),R("i",{key:0,class:J([[e.icon,e.iconColor],"mr-3"])},null,2)):q("",!0),d("span",Zd,k(e.title),1)])],2),e.subtitle||t.$slots.subtitle?(y(),R("p",ef,[Dt(t.$slots,"subtitle",{},()=>[ce(k(e.subtitle),1)])])):q("",!0),Dt(t.$slots,"extra")],2)]))}},tf={class:"card overflow-hidden p-0"},nf={class:"w-full"},sf={class:"bg-gray-50 dark:bg-gray-800/50"},rf={class:"divide-y divide-gray-200 dark:divide-gray-700"},of=["onClick"],lf={key:0,class:"text-center py-12"},af={class:"text-gray-500 dark:text-gray-400"},Ci={__name:"DataTable",props:{columns:{type:Array,required:!0},items:{type:Array,default:()=>[]},emptyIcon:{type:String,default:"fas fa-inbox"},emptyMessage:{type:String,default:"No data found"},rowClass:{type:String,default:"hover:bg-gray-50 dark:hover:bg-gray-800/30 transition"},clickableRows:{type:Boolean,default:!1}},emits:["row-click"],setup(e){const t=n=>{switch(n){case"center":return"text-center";case"right":return"text-right";default:return"text-left"}};return(n,s)=>(y(),R("div",tf,[d("table",nf,[d("thead",sf,[d("tr",null,[(y(!0),R(Q,null,xe(e.columns,r=>(y(),R("th",{key:r.key,class:J(["px-6 py-4 text-xs font-semibold text-gray-500 dark:text-gray-400 uppercase tracking-wider",t(r.align),r.headerClass])},k(r.label),3))),128))])]),d("tbody",rf,[(y(!0),R(Q,null,xe(e.items,(r,o)=>(y(),R("tr",{key:r.id||r.login||o,class:J([e.rowClass,{"cursor-pointer":e.clickableRows}]),onClick:i=>e.clickableRows&&n.$emit("row-click",r)},[(y(!0),R(Q,null,xe(e.columns,i=>(y(),R("td",{key:i.key,class:J(["px-6 py-4",t(i.align),i.class])},[Dt(n.$slots,i.key,{item:r,index:o},()=>[ce(k(r[i.key]),1)])],2))),128))],10,of))),128))])]),e.items.length?q("",!0):(y(),R("div",lf,[d("i",{class:J([e.emptyIcon,"text-4xl text-gray-300 dark:text-gray-600 mb-4"])},null,2),d("p",af,k(e.emptyMessage),1)]))]))}},cf={class:"font-medium text-gray-800 dark:text-white group-hover:text-primary-500 transition-colors"},uf={class:"text-sm"},df=["href"],ff={key:1,class:"text-gray-500 dark:text-gray-400"},Si={__name:"ContributorRow",props:{contributor:{type:Object,required:!0},showGithubLink:{type:Boolean,default:!1},columns:{type:Array,default:()=>["commits","prs","reviews","lines","score"]}},setup(e){return(t,n)=>(y(),ie(P(Ce),{to:{name:"contributor",params:{login:e.contributor.login}},class:"flex items-center space-x-3"},{default:Z(()=>[N(Sn,{src:e.contributor.avatar_url,name:e.contributor.login,class:"ring-2 ring-transparent group-hover:ring-primary-500 transition-all"},null,8,["src","name"]),d("div",null,[d("div",cf,k(e.contributor.name||e.contributor.login),1),d("div",uf,[e.showGithubLink?(y(),R("a",{key:0,href:`https://github.com/${e.contributor.login}`,target:"_blank",rel:"noopener noreferrer",class:"text-gray-500 dark:text-gray-400 hover:text-primary-500 transition-colors",onClick:n[0]||(n[0]=Js(()=>{},["stop"]))},[ce(" @"+k(e.contributor.login)+" ",1),n[1]||(n[1]=d("i",{class:"fas fa-external-link-alt text-xs ml-1 opacity-50"},null,-1))],8,df)):(y(),R("span",ff," @"+k(e.contributor.login),1))])])]),_:1},8,["to"]))}},Ai={commit:["commit-1","commit-10","commit-50","commit-100","commit-500","commit-1000"],pr:["pr-1","pr-10","pr-25","pr-50","pr-100","pr-250"],review:["review-1","review-10","review-25","review-50","review-100","review-250"],comment:["comment-10","comment-50","comment-100","comment-250","comment-500"],"lines-added":["lines-added-100","lines-added-1000","lines-added-5000","lines-added-10000","lines-added-50000"],"lines-deleted":["lines-deleted-100","lines-deleted-500","lines-deleted-1000","lines-deleted-5000","lines-deleted-10000"],"review-time":["review-time-24h","review-time-4h","review-time-1h"],repo:["repo-2","repo-5","repo-10"],reviewees:["reviewees-3","reviewees-10","reviewees-25"],"large-pr":["large-pr-500","large-pr-1000","large-pr-5000"],"small-pr":["small-pr-5","small-pr-10","small-pr-25","small-pr-50"],"perfect-pr":["perfect-pr-1","perfect-pr-5","perfect-pr-10","perfect-pr-25"],active:["active-7","active-30","active-60","active-100"],streak:["streak-3","streak-7","streak-14","streak-30"],workweek:["workweek-3","workweek-5","workweek-10","workweek-20"],earlybird:["earlybird-10","earlybird-25","earlybird-50","earlybird-100"],nightowl:["nightowl-10","nightowl-25","nightowl-50","nightowl-100"],midnight:["midnight-5","midnight-10","midnight-25","midnight-50"],weekend:["weekend-5","weekend-10","weekend-25","weekend-50"],ooh:["ooh-10","ooh-25","ooh-50","ooh-100"],docs:["docs-100","docs-500","docs-1000","docs-2500","docs-5000"],"docs-del":["docs-del-50","docs-del-200","docs-del-500","docs-del-1000","docs-del-2500"]};function Ei(e){for(const[t,n]of Object.entries(Ai))if(n.includes(e))return t;return null}function mf(e){const t=Ei(e);return t?Ai[t].indexOf(e):-1}function Pi(e){if(!e||!e.length)return[];const t={};for(const n of e){const s=Ei(n);if(!s){t[n]={id:n,tier:-1};continue}const r=mf(n);(!t[s]||r>t[s].tier)&&(t[s]={id:n,tier:r})}return Object.values(t).sort((n,s)=>s.tier-n.tier).map(n=>n.id)}const hf={class:"py-8 px-4"},gf={class:"container mx-auto max-w-5xl"},pf={class:"flex flex-wrap gap-1.5 max-w-[280px]"},vf={key:0,class:"text-gray-400 text-sm"},yf={class:"hidden md:table-cell"},xf={key:0,class:"inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-purple-100 dark:bg-purple-900/30 text-purple-800 dark:text-purple-300"},bf={key:1,class:"text-gray-400"},_f={class:"hidden sm:table-cell"},wf={key:0,class:"text-sm text-gray-600 dark:text-gray-300"},kf={key:1,class:"text-gray-400"},Rf={class:"text-lg font-bold gradient-text"},Cf={__name:"Leaderboard",setup(e){const t=Pe("globalData"),n=oe(()=>t.value?.leaderboard||[]),s=[{key:"rank",label:"Rank",align:"left"},{key:"contributor",label:"Contributor",align:"left"},{key:"achievements",label:"Achievements",align:"left"},{key:"team",label:"Team",align:"left",headerClass:"hidden md:table-cell"},{key:"category",label:"Best At",align:"left",headerClass:"hidden sm:table-cell"},{key:"score",label:"Score",align:"right"}],r=o=>({Commits:"fas fa-code-commit text-green-500",PRs:"fas fa-code-pull-request text-blue-500",Reviews:"fas fa-eye text-purple-500",Comments:"fas fa-comment text-orange-500"})[o]||"";return(o,i)=>(y(),R("div",null,[N(ts,{title:"Leaderboard",subtitle:"Top contributors ranked by their velocity score",icon:"fas fa-trophy","icon-color":"text-yellow-500",centered:""}),d("section",hf,[d("div",gf,[N(Ci,{columns:s,items:n.value,"empty-icon":"fas fa-users","empty-message":"No contributors found","row-class":"hover:bg-gray-50 dark:hover:bg-gray-800/30 transition group"},{rank:Z(({item:l})=>[N(Ri,{rank:l.rank},null,8,["rank"])]),contributor:Z(({item:l})=>[N(Si,{contributor:l,"show-github-link":""},null,8,["contributor"])]),achievements:Z(({item:l})=>[d("div",pf,[(y(!0),R(Q,null,xe(P(Pi)(l.achievements),a=>(y(),ie(wn,{key:a,"achievement-id":a,size:"sm"},null,8,["achievement-id"]))),128)),(l.achievements||[]).length?q("",!0):(y(),R("span",vf,"-"))])]),team:Z(({item:l})=>[d("td",yf,[l.team?(y(),R("span",xf,k(l.team),1)):(y(),R("span",bf,"-"))])]),category:Z(({item:l})=>[d("td",_f,[l.top_category?(y(),R("span",wf,[d("i",{class:J([r(l.top_category),"mr-1"])},null,2),ce(" "+k(l.top_category),1)])):(y(),R("span",kf,"-"))])]),score:Z(({item:l})=>[d("span",Rf,k(P(z)(l.score)),1)]),_:1},8,["items"])])])]))}},Sf={class:"flex items-center justify-center min-h-[60vh]"},Af={class:"text-center"},Ef={class:"text-gray-600 dark:text-gray-400"},Zs={__name:"LoadingState",props:{message:{type:String,default:"Loading..."}},setup(e){return(t,n)=>(y(),R("div",Sf,[d("div",Af,[n[0]||(n[0]=d("i",{class:"fas fa-spinner fa-spin text-4xl text-primary-500 mb-4"},null,-1)),d("p",Ef,k(e.message),1)])]))}},Pf={class:"flex items-center justify-center min-h-[60vh]"},$f={class:"text-center"},Tf={class:"text-gray-600 dark:text-gray-400"},er={__name:"ErrorState",props:{message:{type:String,default:"An error occurred"},icon:{type:String,default:"fas fa-exclamation-triangle"}},setup(e){return(t,n)=>(y(),R("div",Pf,[d("div",$f,[d("i",{class:J([e.icon,"text-4xl text-red-500 mb-4"])},null,2),d("p",Tf,k(e.message),1),Dt(t.$slots,"actions")])]))}},Of=["href"],If={key:0,class:"fas fa-external-link-alt text-xs ml-1 opacity-50"},$i={__name:"GithubLink",props:{url:{type:String,required:!0},label:{type:String,default:""},showIcon:{type:Boolean,default:!0}},setup(e){return(t,n)=>(y(),R("a",{href:e.url,target:"_blank",rel:"noopener noreferrer",class:"hover:text-primary-500 transition-colors",onClick:n[0]||(n[0]=Js(()=>{},["stop"]))},[Dt(t.$slots,"default",{},()=>[ce(k(e.label),1)]),e.showIcon?(y(),R("i",If)):q("",!0)],8,Of))}},Nf={class:"py-8 px-4"},Mf={class:"container mx-auto"},Df={class:"grid grid-cols-2 md:grid-cols-4 gap-4"},Lf={class:"py-8 px-4"},jf={class:"container mx-auto"},Ff={class:"text-gray-800 dark:text-white"},Vf={class:"text-gray-800 dark:text-white"},Hf={class:"text-gray-800 dark:text-white"},Bf={class:"text-green-500"},Uf={class:"text-red-500"},Gf={class:"text-lg font-bold gradient-text"},qf={__name:"Repository",setup(e){const t=es(),n=ke(null),s=ke(!0),r=ke(null),o=oe(()=>[{label:"Dashboard",to:"/"},{label:"Repositories"},{label:n.value?.name||t.params.name}]),i=[{key:"contributor",label:"Contributor",align:"left"},{key:"commits",label:"Commits",align:"center"},{key:"prs",label:"PRs",align:"center"},{key:"reviews",label:"Reviews",align:"center"},{key:"lines",label:"Lines +/-",align:"center"},{key:"score",label:"Score",align:"right"}];async function l(){s.value=!0,r.value=null;try{const a=await fetch(`./data/repos/${t.params.owner}/${t.params.name}/metrics.json`);if(!a.ok)throw new Error("Repository not found");n.value=await a.json()}catch(a){r.value=a.message}finally{s.value=!1}}return jt(l),Ue(()=>t.params,l),(a,c)=>(y(),R("div",null,[s.value?(y(),ie(Zs,{key:0,message:"Loading repository..."})):r.value?(y(),ie(er,{key:1,message:r.value},null,8,["message"])):n.value?(y(),R(Q,{key:2},[N(ts,{title:n.value.name,icon:"fas fa-code-branch","icon-color":"text-accent-500",breadcrumbs:o.value},{subtitle:Z(()=>[N($i,{url:`https://github.com/${n.value.owner}/${n.value.name}`},{default:Z(()=>[ce(k(n.value.owner)+"/"+k(n.value.name),1)]),_:1},8,["url"])]),_:1},8,["title","breadcrumbs"]),d("section",Nf,[d("div",Mf,[d("div",Df,[N(_e,{value:n.value.total_commits,label:"Commits",icon:"fas fa-code-commit","icon-color":"text-green-500"},null,8,["value"]),N(_e,{value:n.value.total_prs,label:"Pull Requests",icon:"fas fa-code-pull-request","icon-color":"text-blue-500"},null,8,["value"]),N(_e,{value:n.value.total_reviews,label:"Reviews",icon:"fas fa-eye","icon-color":"text-purple-500"},null,8,["value"]),N(_e,{value:n.value.active_contributors,label:"Contributors",icon:"fas fa-users","icon-color":"text-orange-500"},null,8,["value"])])])]),d("section",Lf,[d("div",jf,[N(It,{title:"Contributors",icon:"fas fa-users","icon-color":"text-blue-500"}),N(Ci,{columns:i,items:n.value.contributors,"empty-icon":"fas fa-users","empty-message":"No contributors found","row-class":"hover:bg-gray-50 dark:hover:bg-gray-800/30 transition group"},{contributor:Z(({item:u})=>[N(Si,{contributor:u},null,8,["contributor"])]),commits:Z(({item:u})=>[d("span",Ff,k(P(z)(u.commit_count)),1)]),prs:Z(({item:u})=>[d("span",Vf,k(P(z)(u.prs_opened)),1)]),reviews:Z(({item:u})=>[d("span",Hf,k(P(z)(u.reviews_given)),1)]),lines:Z(({item:u})=>[d("span",Bf,"+"+k(P(z)(u.lines_added)),1),c[0]||(c[0]=d("span",{class:"text-gray-400 mx-1"},"/",-1)),d("span",Uf,"-"+k(P(z)(u.lines_deleted)),1)]),score:Z(({item:u})=>[d("span",Gf,k(P(z)(u.score?.total||0)),1)]),_:1},8,["items"])])])],64)):q("",!0)]))}},Wf={class:"flex items-center space-x-4 mb-4"},Kf={class:"font-semibold text-gray-800 dark:text-white"},zf={class:"text-sm text-gray-500 dark:text-gray-400"},Jf={class:"grid grid-cols-3 gap-4 text-center mb-4"},Qf={class:"text-lg font-semibold text-gray-800 dark:text-white"},Yf={class:"text-lg font-semibold text-gray-800 dark:text-white"},Xf={class:"text-lg font-semibold text-gray-800 dark:text-white"},Zf={class:"flex items-center justify-between pt-4 border-t border-gray-200 dark:border-gray-700"},e0={class:"text-xl font-bold gradient-text"},t0={key:0,class:"mt-4 flex flex-wrap gap-2"},n0={key:0,class:"inline-flex items-center justify-center w-8 h-8 rounded-lg bg-gray-200 dark:bg-gray-700 text-gray-600 dark:text-gray-300 text-xs font-bold"},s0={__name:"MemberCard",props:{member:{type:Object,required:!0},linkToProfile:{type:Boolean,default:!0}},setup(e){return(t,n)=>(y(),ie(jl(e.linkToProfile?P(Ce):"div"),{to:e.linkToProfile?{name:"contributor",params:{login:e.member.login}}:void 0,class:J(["card block",{"hover:shadow-lg transition cursor-pointer":e.linkToProfile}])},{default:Z(()=>[d("div",Wf,[N(Sn,{src:e.member.avatar_url,name:e.member.login,size:"lg"},null,8,["src","name"]),d("div",null,[d("h3",Kf,k(e.member.name||e.member.login),1),d("p",zf,"@"+k(e.member.login),1)])]),d("div",Jf,[d("div",null,[d("div",Qf,k(P(z)(e.member.commit_count)),1),n[0]||(n[0]=d("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"Commits",-1))]),d("div",null,[d("div",Yf,k(P(z)(e.member.prs_opened)),1),n[1]||(n[1]=d("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"PRs",-1))]),d("div",null,[d("div",Xf,k(P(z)(e.member.reviews_given)),1),n[2]||(n[2]=d("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"Reviews",-1))])]),d("div",Zf,[n[3]||(n[3]=d("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"Score",-1)),d("span",e0,k(P(z)(e.member.score?.total||0)),1)]),e.member.achievements?.length?(y(),R("div",t0,[(y(!0),R(Q,null,xe(e.member.achievements.slice(0,4),s=>(y(),ie(wn,{key:s,"achievement-id":s,size:"sm"},null,8,["achievement-id"]))),128)),e.member.achievements.length>4?(y(),R("span",n0," +"+k(e.member.achievements.length-4),1)):q("",!0)])):q("",!0)]),_:1},8,["to","class"]))}},r0={class:"py-8 px-4"},o0={class:"container mx-auto"},i0={class:"grid grid-cols-2 md:grid-cols-4 gap-4"},l0={class:"py-8 px-4"},a0={class:"container mx-auto"},c0={class:"grid md:grid-cols-2 lg:grid-cols-3 gap-6"},u0={__name:"Team",setup(e){const t=es(),n=Pe("globalData"),s=ke(null),r=ke(!0),o=ke(null),i=oe(()=>[{label:"Dashboard",to:"/"},{label:"Teams"},{label:s.value?.name||t.params.slug}]);function l(){r.value=!0,o.value=null;const c=(n.value?.teams||[]).find(u=>ki(u.name)===t.params.slug);c?s.value=c:o.value="Team not found",r.value=!1}return jt(l),Ue(()=>t.params,l),Ue(n,l),(a,c)=>(y(),R("div",null,[r.value?(y(),ie(Zs,{key:0,message:"Loading team..."})):o.value?(y(),ie(er,{key:1,message:o.value},null,8,["message"])):s.value?(y(),R(Q,{key:2},[N(ts,{title:s.value.name,breadcrumbs:i.value,subtitle:`${s.value.members?.length||0} team members`},{prefix:Z(()=>[d("div",{class:"w-4 h-4 rounded-full mr-4",style:St({backgroundColor:s.value.color||"#8b5cf6"})},null,4)]),_:1},8,["title","breadcrumbs","subtitle"]),d("section",r0,[d("div",o0,[d("div",i0,[N(_e,{value:s.value.total_score,label:"Total Score",icon:"fas fa-star","icon-color":"text-yellow-500"},null,8,["value"]),N(_e,{value:s.value.aggregated_metrics?.commit_count||0,label:"Commits",icon:"fas fa-code-commit","icon-color":"text-green-500"},null,8,["value"]),N(_e,{value:s.value.aggregated_metrics?.prs_merged||0,label:"PRs Merged",icon:"fas fa-code-merge","icon-color":"text-purple-500"},null,8,["value"]),N(_e,{value:s.value.aggregated_metrics?.reviews_given||0,label:"Reviews",icon:"fas fa-eye","icon-color":"text-blue-500"},null,8,["value"])])])]),d("section",l0,[d("div",a0,[N(It,{title:"Team Members",icon:"fas fa-users","icon-color":"text-blue-500"}),d("div",c0,[(y(!0),R(Q,null,xe(s.value.member_metrics,u=>(y(),ie(s0,{key:u.login,member:u},null,8,["member"]))),128))])])])],64)):q("",!0)]))}},d0={class:"space-y-3"},f0={class:"flex items-start justify-between mb-3"},m0={class:"flex items-center space-x-3"},h0={class:"text-sm font-semibold text-gray-800 dark:text-white"},g0={class:"flex items-center space-x-2 text-xs text-gray-500 dark:text-gray-400"},p0={class:"font-medium"},v0={class:"text-right"},y0={class:"text-gray-500 dark:text-gray-400 font-medium"},x0={class:"text-xs text-gray-500 dark:text-gray-400 mt-0.5"},b0={class:"h-2.5 bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden"},_0={class:"flex items-center justify-between mt-1.5"},w0={class:"flex items-center space-x-1"},k0=["title"],R0={key:0,class:"text-[10px] text-gray-400"},C0={key:0,class:"text-center text-xs text-gray-500 dark:text-gray-400 pt-2"},S0={key:1,class:"text-center py-8 text-gray-500 dark:text-gray-400"},A0={__name:"AchievementProgress",props:{contributor:{type:Object,required:!0},showEarned:{type:Boolean,default:!1},maxDisplay:{type:Number,default:6}},setup(e){const t=e,n=[1,10,25,50,100,250,500,1e3,5e3,1e4,25e3],s={1:"from-stone-400 to-stone-500",2:"from-green-400 to-emerald-500",3:"from-blue-400 to-indigo-500",4:"from-purple-400 to-violet-500",5:"from-yellow-400 to-amber-500",6:"from-orange-400 to-red-500",7:"from-red-500 to-rose-600",8:"from-pink-500 to-fuchsia-600",9:"from-cyan-400 to-teal-500",10:"from-emerald-400 to-cyan-500",11:"from-violet-500 to-purple-600"},r={1:"bg-stone-500",2:"bg-green-500",3:"bg-blue-500",4:"bg-purple-500",5:"bg-yellow-500",6:"bg-orange-500",7:"bg-red-500",8:"bg-pink-500",9:"bg-cyan-500",10:"bg-emerald-500",11:"bg-violet-500"},o=[{category:"Commits",icon:"fa-code-commit",iconColor:"text-green-500",getValue:u=>u.commit_count||0,achievements:[{id:"first-commit",threshold:1,name:"First Steps"},{id:"commit-10",threshold:10,name:"Getting Started"},{id:"commit-25",threshold:25,name:"Warming Up"},{id:"commit-50",threshold:50,name:"On A Roll"},{id:"commit-100",threshold:100,name:"Committed"},{id:"commit-250",threshold:250,name:"Dedicated"},{id:"commit-500",threshold:500,name:"Code Machine"},{id:"commit-1000",threshold:1e3,name:"Code Warrior"},{id:"commit-5000",threshold:5e3,name:"Legendary"},{id:"commit-10000",threshold:1e4,name:"Mythical"},{id:"commit-25000",threshold:25e3,name:"Transcendent"}]},{category:"Pull Requests",icon:"fa-code-pull-request",iconColor:"text-blue-500",getValue:u=>u.prs_opened||0,achievements:[{id:"pr-opener",threshold:1,name:"PR Pioneer"},{id:"pr-10",threshold:10,name:"Pull Request Pro"},{id:"pr-25",threshold:25,name:"PR Regular"},{id:"pr-50",threshold:50,name:"Merge Master"},{id:"pr-100",threshold:100,name:"PR Champion"}]},{category:"Reviews",icon:"fa-eye",iconColor:"text-purple-500",getValue:u=>u.reviews_given||0,achievements:[{id:"reviewer",threshold:1,name:"Code Reviewer"},{id:"reviewer-10",threshold:10,name:"Review Starter"},{id:"reviewer-25",threshold:25,name:"Review Regular"},{id:"reviewer-50",threshold:50,name:"Review Expert"},{id:"reviewer-100",threshold:100,name:"Review Guru"}]},{category:"Lines Added",icon:"fa-plus",iconColor:"text-emerald-500",getValue:u=>u.lines_added||0,achievements:[{id:"lines-1000",threshold:1e3,name:"Thousand Lines"},{id:"lines-10000",threshold:1e4,name:"Ten Thousand"}]},{category:"Lines Deleted",icon:"fa-minus",iconColor:"text-red-500",getValue:u=>u.lines_deleted||0,achievements:[{id:"cleaner",threshold:1e3,name:"Code Cleaner"},{id:"refactorer",threshold:1e4,name:"Refactoring Champion"}]},{category:"Small PRs",icon:"fa-compress",iconColor:"text-cyan-500",getValue:u=>u.small_pr_count||0,achievements:[{id:"small-pr-10",threshold:10,name:"Small PR Advocate"},{id:"small-pr-50",threshold:50,name:"Atomic Commits Hero"}]},{category:"Perfect PRs",icon:"fa-gem",iconColor:"text-pink-500",getValue:u=>u.perfect_prs||0,achievements:[{id:"perfect-pr-5",threshold:5,name:"Clean Code"},{id:"perfect-pr-25",threshold:25,name:"Flawless"}]},{category:"Active Days",icon:"fa-calendar-check",iconColor:"text-orange-500",getValue:u=>u.active_days||0,achievements:[{id:"active-30",threshold:30,name:"Consistent Contributor"},{id:"active-100",threshold:100,name:"Dedicated Developer"}]},{category:"Streak",icon:"fa-fire",iconColor:"text-amber-500",getValue:u=>u.longest_streak||0,achievements:[{id:"streak-7",threshold:7,name:"Week Warrior"},{id:"streak-30",threshold:30,name:"Month Master"}]}],i=u=>{for(let m=n.length-1;m>=0;m--)if(u>=n[m])return m+1;return 1},l=u=>u.map(m=>({threshold:m.threshold,name:m.name,tier:i(m.threshold)})),a=oe(()=>{const u=new Set(t.contributor.achievements||[]),m=[];for(const g of o){const v=g.getValue(t.contributor);let S=null,I=null;const W=l(g.achievements);for(const Re of g.achievements)v>=Re.threshold?I=Re:S||(S=Re);if(!S)continue;const j=I?I.threshold:0,D=S.threshold-j,V=v-j,L=Math.min(100,Math.max(0,Math.round(V/D*100))),ee=i(S.threshold),ve=W.findIndex(Re=>Re.threshold===S.threshold),he=W.length;m.push({category:g.category,icon:g.icon,iconColor:g.iconColor,currentValue:v,target:S.threshold,name:S.name,id:S.id,progress:L,tier:ee,tierIndex:ve+1,totalTiers:he,allTiers:W,gradient:s[ee],progressColor:r[ee],isClose:L>=75,remaining:S.threshold-v,isEarned:u.has(S.id)})}return m.sort((g,v)=>v.progress-g.progress),m}),c=oe(()=>{new Set(t.contributor.achievements||[]);let u=0;for(const m of o){const g=m.getValue(t.contributor);for(const v of m.achievements)g(y(),R("div",d0,[(y(!0),R(Q,null,xe(a.value,g=>(y(),R("div",{key:g.id,class:"bg-gray-50 dark:bg-gray-800/50 rounded-xl p-4 hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors"},[d("div",f0,[d("div",m0,[d("div",{class:J(["w-10 h-10 rounded-lg bg-gradient-to-br flex items-center justify-center shadow-md",g.gradient])},[d("i",{class:J(["fas text-white text-sm",g.icon])},null,2)],2),d("div",null,[d("div",h0,k(g.name),1),d("div",g0,[d("span",null,k(g.category),1),m[0]||(m[0]=d("span",{class:"text-gray-300 dark:text-gray-600"},"•",-1)),d("span",p0,"Tier "+k(g.tierIndex)+"/"+k(g.totalTiers),1)])])]),d("div",v0,[d("div",{class:J(["text-sm font-bold",g.isClose?"text-green-500":"text-gray-700 dark:text-gray-200"])},[ce(k(P(z)(g.currentValue))+" ",1),m[1]||(m[1]=d("span",{class:"text-gray-400 dark:text-gray-500 font-normal"},"/",-1)),d("span",y0,k(P(z)(g.target)),1)],2),d("div",x0,k(g.remaining>0?`${P(z)(g.remaining)} to go`:"Ready to claim!"),1)])]),d("div",b0,[d("div",{class:J(["h-full rounded-full transition-all duration-500 ease-out",g.progressColor]),style:St({width:`${g.progress}%`})},null,6)]),d("div",_0,[d("div",w0,[(y(!0),R(Q,null,xe(g.allTiers.slice(0,5),(v,S)=>(y(),R("span",{key:v.threshold,class:J(["w-1.5 h-1.5 rounded-full",S5?(y(),R("span",R0,"+"+k(g.totalTiers-5),1)):q("",!0)]),d("span",{class:J(["text-xs font-semibold",g.isClose?"text-green-500":"text-gray-400 dark:text-gray-500"])},k(g.progress)+"% ",3)])]))),128)),c.value>0?(y(),R("div",C0," +"+k(c.value)+" more achievements to unlock ",1)):q("",!0),a.value.length?q("",!0):(y(),R("div",S0,[...m[2]||(m[2]=[d("div",{class:"w-16 h-16 mx-auto mb-3 rounded-2xl bg-gradient-to-br from-yellow-400 to-amber-500 flex items-center justify-center shadow-lg"},[d("i",{class:"fas fa-trophy text-2xl text-white"})],-1),d("p",{class:"font-medium text-gray-700 dark:text-gray-300"},"All achievements unlocked!",-1),d("p",{class:"text-sm mt-1"},"You're a legend!",-1)])]))]))}},E0={class:"py-12 px-4"},P0={class:"container mx-auto"},$0={class:"flex flex-col md:flex-row items-center md:items-start space-y-4 md:space-y-0 md:space-x-8"},T0={class:"text-center md:text-left"},O0={class:"text-4xl font-bold gradient-text"},I0={class:"text-xl text-gray-500 dark:text-gray-400 mt-1"},N0={class:"flex items-center justify-center md:justify-start space-x-4 mt-4"},M0={class:"score-card rounded-lg px-4 py-2"},D0={class:"text-2xl font-bold gradient-text ml-2"},L0={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},j0={key:0},F0={key:0,class:"mt-6 flex flex-wrap justify-center md:justify-start gap-3"},V0={class:"py-8 px-4"},H0={class:"container mx-auto"},B0={class:"grid grid-cols-2 md:grid-cols-4 gap-4"},U0={class:"py-8 px-4"},G0={class:"container mx-auto"},q0={class:"grid md:grid-cols-2 gap-6"},W0={class:"card"},K0={class:"space-y-4"},z0={class:"flex items-center justify-between"},J0={class:"text-green-500 font-semibold"},Q0={class:"flex items-center justify-between"},Y0={class:"text-red-500 font-semibold"},X0={key:0,class:"flex items-center justify-between"},Z0={class:"text-emerald-500 font-semibold"},em={key:1,class:"flex items-center justify-between"},tm={class:"text-rose-500 font-semibold"},nm={key:2,class:"flex items-center justify-between"},sm={class:"text-cyan-500 font-semibold"},rm={key:3,class:"flex items-center justify-between"},om={class:"text-amber-500 font-semibold"},im={class:"flex items-center justify-between"},lm={class:"text-gray-800 dark:text-white font-semibold"},am={key:4,class:"flex items-center justify-between"},cm={class:"text-gray-800 dark:text-white font-semibold"},um={class:"card"},dm={class:"space-y-4"},fm={class:"flex items-center justify-between"},mm={class:"text-gray-800 dark:text-white font-semibold"},hm={class:"flex items-center justify-between"},gm={class:"text-green-500 font-semibold"},pm={class:"flex items-center justify-between"},vm={class:"text-orange-500 font-semibold"},ym={class:"flex items-center justify-between"},xm={class:"text-gray-800 dark:text-white font-semibold"},bm={key:0,class:"flex items-center justify-between"},_m={class:"text-gray-800 dark:text-white font-semibold"},wm={key:0,class:"py-8 px-4"},km={class:"container mx-auto"},Rm={class:"card"},Cm={class:"grid grid-cols-2 md:grid-cols-4 lg:grid-cols-7 gap-4"},Sm={class:"text-center p-4 rounded-lg bg-gray-50 dark:bg-gray-800/50"},Am={class:"text-2xl font-bold text-green-500"},Em={class:"text-xs text-gray-400 dark:text-gray-500"},Pm={class:"text-center p-4 rounded-lg bg-gray-50 dark:bg-gray-800/50"},$m={class:"text-2xl font-bold text-blue-500"},Tm={class:"text-xs text-gray-400 dark:text-gray-500"},Om={class:"text-center p-4 rounded-lg bg-gray-50 dark:bg-gray-800/50"},Im={class:"text-2xl font-bold text-purple-500"},Nm={class:"text-xs text-gray-400 dark:text-gray-500"},Mm={class:"text-center p-4 rounded-lg bg-gray-50 dark:bg-gray-800/50"},Dm={class:"text-2xl font-bold text-pink-500"},Lm={class:"text-xs text-gray-400 dark:text-gray-500"},jm={class:"text-center p-4 rounded-lg bg-gray-50 dark:bg-gray-800/50"},Fm={class:"text-2xl font-bold text-orange-500"},Vm={class:"text-center p-4 rounded-lg bg-gray-50 dark:bg-gray-800/50"},Hm={class:"text-2xl font-bold text-yellow-500"},Bm={class:"text-center p-4 rounded-lg bg-gray-50 dark:bg-gray-800/50"},Um={class:"text-2xl font-bold text-indigo-500"},Gm={class:"text-xs text-gray-400 dark:text-gray-500"},qm={class:"py-8 px-4"},Wm={class:"container mx-auto"},Km={class:"grid md:grid-cols-2 gap-6"},zm={key:0,class:"card"},Jm={class:"flex items-center justify-between mb-6"},Qm={class:"px-2.5 py-1 rounded-full bg-gradient-to-r from-yellow-400 to-amber-500 text-white text-sm font-bold shadow-md"},Ym={class:"grid grid-cols-4 sm:grid-cols-5 gap-3"},Xm={class:"card"},Zm={key:1,class:"py-8 px-4"},eh={class:"container mx-auto"},th={class:"flex flex-wrap gap-2"},nh={__name:"Contributor",setup(e){const t=es(),n=Pe("globalData"),s=ke(null),r=ke(!0),o=ke(null),i=oe(()=>[{label:"Dashboard",to:"/"},{label:"Contributors"},{label:s.value?.login||t.params.login}]);async function l(){r.value=!0,o.value=null;const a=t.params.login;try{const c=await fetch(`./data/contributors/${a}.json`);if(c.ok){const u=await c.json(),g=(n.value?.leaderboard||[]).find(v=>v.login===a);g&&(u.score={total:g.score,rank:g.rank,breakdown:u.score?.breakdown},u.achievements=g.achievements),s.value=u}else{let m=(n.value?.leaderboard||[]).find(g=>g.login===a);if(!m){const g=n.value?.repositories||[];for(const v of g){const S=v.contributors?.find(I=>I.login===a);if(S){m=S;break}}}m?s.value=m:o.value="Contributor not found"}}catch(c){o.value=`Failed to load contributor: ${c.message}`}r.value=!1}return jt(l),Ue(()=>t.params,l),Ue(n,l),(a,c)=>(y(),R("div",null,[r.value?(y(),ie(Zs,{key:0,message:"Loading contributor..."})):o.value?(y(),ie(er,{key:1,message:o.value},null,8,["message"])):s.value?(y(),R(Q,{key:2},[d("header",E0,[d("div",P0,[N(ts,{breadcrumbs:i.value,title:""},null,8,["breadcrumbs"]),d("div",$0,[N(Sn,{src:s.value.avatar_url,name:s.value.login,size:"2xl",class:"shadow-modern"},null,8,["src","name"]),d("div",T0,[d("h1",O0,k(s.value.name||s.value.login),1),d("p",I0,[N($i,{url:`https://github.com/${s.value.login}`},{default:Z(()=>[ce(" @"+k(s.value.login),1)]),_:1},8,["url"])]),d("div",N0,[d("div",M0,[c[0]||(c[0]=d("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"Score:",-1)),d("span",D0,k(P(z)(s.value.score?.total||s.value.score||0)),1)]),s.value.score?.rank?(y(),R("div",L0,[ce(" Rank #"+k(s.value.score.rank)+" ",1),s.value.score?.percentile_rank?(y(),R("span",j0," (Top "+k(P(Iu)(s.value.score.percentile_rank))+") ",1)):q("",!0)])):q("",!0)]),s.value.achievements?.length?(y(),R("div",F0,[(y(!0),R(Q,null,xe(P(Pi)(s.value.achievements),u=>(y(),ie(wn,{key:u,"achievement-id":u,size:"lg","show-label":""},null,8,["achievement-id"]))),128))])):q("",!0)])])])]),d("section",V0,[d("div",H0,[d("div",B0,[N(_e,{value:s.value.commit_count||0,label:"Commits",icon:"fas fa-code-commit","icon-color":"text-green-500"},null,8,["value"]),N(_e,{value:s.value.prs_opened||0,label:"PRs Opened",icon:"fas fa-code-pull-request","icon-color":"text-blue-500"},null,8,["value"]),N(_e,{value:s.value.prs_merged||0,label:"PRs Merged",icon:"fas fa-code-merge","icon-color":"text-purple-500"},null,8,["value"]),N(_e,{value:s.value.reviews_given||0,label:"Reviews Given",icon:"fas fa-eye","icon-color":"text-orange-500"},null,8,["value"])])])]),d("section",U0,[d("div",G0,[d("div",q0,[d("div",W0,[c[9]||(c[9]=d("h3",{class:"text-lg font-semibold text-gray-800 dark:text-white mb-4"},[d("i",{class:"fas fa-code text-green-500 mr-2"}),ce("Code Contributions ")],-1)),d("div",K0,[d("div",z0,[c[1]||(c[1]=d("span",{class:"text-gray-600 dark:text-gray-300"},"Lines Added",-1)),d("span",J0," +"+k(P(z)(s.value.lines_added||0)),1)]),d("div",Q0,[c[2]||(c[2]=d("span",{class:"text-gray-600 dark:text-gray-300"},"Lines Deleted",-1)),d("span",Y0," -"+k(P(z)(s.value.lines_deleted||0)),1)]),s.value.meaningful_lines_added!==void 0?(y(),R("div",X0,[c[3]||(c[3]=d("span",{class:"text-gray-600 dark:text-gray-300"},"Meaningful Lines Added",-1)),d("span",Z0," +"+k(P(z)(s.value.meaningful_lines_added||0)),1)])):q("",!0),s.value.meaningful_lines_deleted!==void 0?(y(),R("div",em,[c[4]||(c[4]=d("span",{class:"text-gray-600 dark:text-gray-300"},"Meaningful Lines Deleted",-1)),d("span",tm," -"+k(P(z)(s.value.meaningful_lines_deleted||0)),1)])):q("",!0),s.value.comment_lines_added!==void 0?(y(),R("div",nm,[c[5]||(c[5]=d("span",{class:"text-gray-600 dark:text-gray-300"},"Comment Lines Added",-1)),d("span",sm," +"+k(P(z)(s.value.comment_lines_added||0)),1)])):q("",!0),s.value.comment_lines_deleted!==void 0?(y(),R("div",rm,[c[6]||(c[6]=d("span",{class:"text-gray-600 dark:text-gray-300"},"Comment Lines Deleted",-1)),d("span",om," -"+k(P(z)(s.value.comment_lines_deleted||0)),1)])):q("",!0),d("div",im,[c[7]||(c[7]=d("span",{class:"text-gray-600 dark:text-gray-300"},"Files Changed",-1)),d("span",lm,k(P(z)(s.value.files_changed||0)),1)]),s.value.avg_pr_size?(y(),R("div",am,[c[8]||(c[8]=d("span",{class:"text-gray-600 dark:text-gray-300"},"Avg PR Size",-1)),d("span",cm,k(P(z)(Math.round(s.value.avg_pr_size)))+" lines ",1)])):q("",!0)])]),d("div",um,[c[15]||(c[15]=d("h3",{class:"text-lg font-semibold text-gray-800 dark:text-white mb-4"},[d("i",{class:"fas fa-comments text-purple-500 mr-2"}),ce("Review Activity ")],-1)),d("div",dm,[d("div",fm,[c[10]||(c[10]=d("span",{class:"text-gray-600 dark:text-gray-300"},"Reviews Given",-1)),d("span",mm,k(P(z)(s.value.reviews_given||0)),1)]),d("div",hm,[c[11]||(c[11]=d("span",{class:"text-gray-600 dark:text-gray-300"},"Approvals",-1)),d("span",gm,k(P(z)(s.value.approvals_given||0)),1)]),d("div",pm,[c[12]||(c[12]=d("span",{class:"text-gray-600 dark:text-gray-300"},"Changes Requested",-1)),d("span",vm,k(P(z)(s.value.changes_requested||0)),1)]),d("div",ym,[c[13]||(c[13]=d("span",{class:"text-gray-600 dark:text-gray-300"},"Review Comments",-1)),d("span",xm,k(P(z)(s.value.review_comments||0)),1)]),s.value.avg_review_time_hours?(y(),R("div",bm,[c[14]||(c[14]=d("span",{class:"text-gray-600 dark:text-gray-300"},"Avg Review Time",-1)),d("span",_m,k(P(Ou)(s.value.avg_review_time_hours)),1)])):q("",!0)])])])])]),s.value.score?.breakdown?(y(),R("section",wm,[d("div",km,[d("div",Rm,[c[25]||(c[25]=d("h3",{class:"text-lg font-semibold text-gray-800 dark:text-white mb-4"},[d("i",{class:"fas fa-chart-pie gradient-text mr-2"}),ce("Score Breakdown ")],-1)),d("div",Cm,[d("div",Sm,[d("div",Am,k(P(z)(s.value.score.breakdown.commits||0)),1),c[16]||(c[16]=d("div",{class:"text-xs text-gray-500 dark:text-gray-400 mt-1"},"Commits",-1)),d("div",Em,k(s.value.commit_count||0)+" × 10 pts",1)]),d("div",Pm,[d("div",$m,k(P(z)(s.value.score.breakdown.prs||0)),1),c[17]||(c[17]=d("div",{class:"text-xs text-gray-500 dark:text-gray-400 mt-1"},"PRs",-1)),d("div",Tm,k(s.value.prs_opened||0)+" opened + "+k(s.value.prs_merged||0)+" merged",1)]),d("div",Om,[d("div",Im,k(P(z)(s.value.score.breakdown.reviews||0)),1),c[18]||(c[18]=d("div",{class:"text-xs text-gray-500 dark:text-gray-400 mt-1"},"Reviews",-1)),d("div",Nm,k(s.value.reviews_given||0)+" × 30 pts",1)]),d("div",Mm,[d("div",Dm,k(P(z)(s.value.score.breakdown.comments||0)),1),c[19]||(c[19]=d("div",{class:"text-xs text-gray-500 dark:text-gray-400 mt-1"},"Comments",-1)),d("div",Lm,k(s.value.review_comments||0)+" × 5 pts",1)]),d("div",jm,[d("div",Fm,k(P(z)(s.value.score.breakdown.line_changes||0)),1),c[20]||(c[20]=d("div",{class:"text-xs text-gray-500 dark:text-gray-400 mt-1"},"Line Changes",-1)),c[21]||(c[21]=d("div",{class:"text-xs text-gray-400 dark:text-gray-500"},"meaningful lines × 0.1 pts",-1))]),d("div",Vm,[d("div",Hm,k(P(z)(s.value.score.breakdown.response_bonus||0)),1),c[22]||(c[22]=d("div",{class:"text-xs text-gray-500 dark:text-gray-400 mt-1"},"Response Bonus",-1)),c[23]||(c[23]=d("div",{class:"text-xs text-gray-400 dark:text-gray-500"},"fast review bonus",-1))]),d("div",Bm,[d("div",Um,k(P(z)(s.value.score.breakdown.out_of_hours||0)),1),c[24]||(c[24]=d("div",{class:"text-xs text-gray-500 dark:text-gray-400 mt-1"},"Out of Hours",-1)),d("div",Gm,k(s.value.out_of_hours_count||0)+" × 2 pts",1)])])])])])):q("",!0),d("section",qm,[d("div",Wm,[d("div",Km,[s.value.achievements?.length?(y(),R("div",zm,[d("div",Jm,[c[26]||(c[26]=d("h3",{class:"text-lg font-semibold text-gray-800 dark:text-white"},[d("i",{class:"fas fa-award gradient-text mr-2"}),ce("Achievements Earned ")],-1)),d("span",Qm,k(s.value.achievements.length),1)]),d("div",Ym,[(y(!0),R(Q,null,xe(s.value.achievements,u=>(y(),R("div",{key:u,class:"flex flex-col items-center p-2 rounded-xl bg-gray-50 dark:bg-gray-800/50 hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors"},[N(wn,{"achievement-id":u,size:"md","show-label":""},null,8,["achievement-id"])]))),128))])])):q("",!0),d("div",Xm,[c[27]||(c[27]=d("h3",{class:"text-lg font-semibold text-gray-800 dark:text-white mb-6"},[d("i",{class:"fas fa-chart-line text-primary-500 mr-2"}),ce("Next Achievements ")],-1)),N(A0,{contributor:s.value,"max-display":6},null,8,["contributor"])])])])]),s.value.repositories_contributed?.length?(y(),R("section",Zm,[d("div",eh,[N(It,{title:`Contributed to ${s.value.repositories_contributed.length} Repositories`,icon:"fas fa-folder-tree","icon-color":"text-blue-500"},null,8,["title"]),d("div",th,[(y(!0),R(Q,null,xe(s.value.repositories_contributed,u=>(y(),ie(P(Ce),{key:u,to:`/repos/${u}`,class:"inline-flex items-center px-3 py-1.5 rounded-full text-sm bg-gray-100 dark:bg-gray-800 text-gray-700 dark:text-gray-300 hover:bg-primary-100 dark:hover:bg-primary-900/30 hover:text-primary-700 dark:hover:text-primary-300 transition-colors"},{default:Z(()=>[c[28]||(c[28]=d("i",{class:"fas fa-code-branch text-gray-400 mr-2"},null,-1)),ce(" "+k(u),1)]),_:2},1032,["to"]))),128))])])])):q("",!0)],64)):q("",!0)]))}},sh=[{path:"/",name:"dashboard",component:Kd},{path:"/leaderboard",name:"leaderboard",component:Cf},{path:"/repos/:owner/:name",name:"repository",component:qf},{path:"/teams/:slug",name:"team",component:u0},{path:"/contributors/:login",name:"contributor",component:nh}],rh=au({history:Hc(),routes:sh,scrollBehavior(){return{top:0}}}),Ti=ec(Tu);Ti.use(rh);Ti.mount("#app");
diff --git a/internal/generator/site/dist/index.html b/internal/generator/site/dist/index.html
index 0d2ea53..e21745e 100644
--- a/internal/generator/site/dist/index.html
+++ b/internal/generator/site/dist/index.html
@@ -8,9 +8,9 @@
-
+
-
+
diff --git a/internal/github/client.go b/internal/github/client.go
index f8317d0..49df5bd 100644
--- a/internal/github/client.go
+++ b/internal/github/client.go
@@ -6,6 +6,7 @@ import (
"fmt"
"net"
"net/http"
+ "strconv"
"strings"
"time"
@@ -611,6 +612,129 @@ func (c *Client) FetchIssues(ctx context.Context, owner, repo string, since, unt
return allIssues, nil
}
+// FetchIssueComments fetches comments on issues from a repository
+// Uses early termination when sorted by date - stops when items are outside date range
+func (c *Client) FetchIssueComments(ctx context.Context, owner, repo string, since, until *time.Time) ([]models.IssueComment, error) {
+ cacheKey := fmt.Sprintf("issue_comments:%s/%s:%v:%v", owner, repo, since, until)
+
+ // Check cache
+ if cached, ok := c.cache.Get(cacheKey); ok {
+ if comments, ok := cached.([]models.IssueComment); ok {
+ c.progress(" Using cached issue comments data")
+ return comments, nil
+ }
+ }
+
+ var allComments []models.IssueComment
+
+ // Sort by created date descending - newest first
+ // This allows us to stop early when we hit items older than our date range
+ opts := &github.IssueListCommentsOptions{
+ Sort: github.Ptr("created"),
+ Direction: github.Ptr("desc"),
+ ListOptions: github.ListOptions{
+ PerPage: 100,
+ },
+ }
+
+ // Set 'since' parameter if provided (GitHub filters by update time but we'll also filter manually)
+ if since != nil {
+ opts.Since = since
+ }
+
+ page := 1
+ reachedOldItems := false
+
+ for {
+ var comments []*github.IssueComment
+ var resp *github.Response
+
+ err := c.retryWithBackoff(ctx, "list issue comments", func() error {
+ var err error
+ // Passing empty issue number fetches all comments in the repo
+ comments, resp, err = c.gh.Issues.ListComments(ctx, owner, repo, 0, opts)
+ return err
+ })
+ if err != nil {
+ return nil, fmt.Errorf("failed to list issue comments: %w", err)
+ }
+
+ c.progress(fmt.Sprintf(" Fetching issue comments page %d (%d comments so far)...", page, len(allComments)))
+
+ oldItemsInPage := 0
+ totalItems := len(comments)
+
+ for _, comment := range comments {
+ createdAt := comment.GetCreatedAt().Time
+
+ // Skip items newer than our range (when until is specified)
+ if until != nil && createdAt.After(*until) {
+ continue
+ }
+
+ // If we've gone past our date range (older than since), count it
+ if since != nil && createdAt.Before(*since) {
+ oldItemsInPage++
+ continue
+ }
+
+ // Extract issue number from the issue URL
+ issueNumber := 0
+ if comment.IssueURL != nil {
+ // Issue URL format: https://api.github.com/repos/{owner}/{repo}/issues/{number}
+ parts := strings.Split(*comment.IssueURL, "/")
+ if len(parts) > 0 {
+ if num, err := strconv.Atoi(parts[len(parts)-1]); err == nil {
+ issueNumber = num
+ }
+ }
+ }
+
+ var author models.Author
+ if comment.User != nil {
+ author = models.Author{
+ Login: comment.User.GetLogin(),
+ Name: comment.User.GetName(),
+ AvatarURL: comment.User.GetAvatarURL(),
+ }
+ }
+
+ ic := models.IssueComment{
+ ID: comment.GetID(),
+ Issue: issueNumber,
+ Repository: fmt.Sprintf("%s/%s", owner, repo),
+ Author: author,
+ Body: comment.GetBody(),
+ CreatedAt: createdAt,
+ }
+ allComments = append(allComments, ic)
+ }
+
+ // If all items in this page are older than our range, we can stop
+ // (since results are sorted by created date descending)
+ if oldItemsInPage == totalItems && totalItems > 0 {
+ c.progress(fmt.Sprintf(" Reached issue comments older than date range, stopping early (page %d)", page))
+ reachedOldItems = true
+ break
+ }
+
+ if resp.NextPage == 0 {
+ break
+ }
+ opts.Page = resp.NextPage
+ page++
+ }
+
+ if !reachedOldItems && page > 1 {
+ c.progress(fmt.Sprintf(" Fetched all %d pages of issue comments", page))
+ }
+
+ // Cache results
+ c.cache.Set(cacheKey, allComments)
+
+ return allComments, nil
+}
+
// UserProfile contains GitHub user profile information useful for deduplication
type UserProfile struct {
ID int64 // GitHub user ID
diff --git a/internal/server/server_test.go b/internal/server/server_test.go
index 6f10984..299bbe1 100644
--- a/internal/server/server_test.go
+++ b/internal/server/server_test.go
@@ -39,7 +39,7 @@ func TestServer_CacheMiddleware(t *testing.T) {
// Create a test handler
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
- w.Write([]byte("OK"))
+ _, _ = w.Write([]byte("OK"))
})
// Wrap with cache middleware
@@ -87,7 +87,7 @@ func TestServer_ServesStaticFiles(t *testing.T) {
// Create a test file with a simple name
testFile := filepath.Join(tempDir, "hello.txt")
- err := os.WriteFile(testFile, []byte("Hello, World!"), 0644)
+ err := os.WriteFile(testFile, []byte("Hello, World!"), 0600)
require.NoError(t, err)
s := New(tempDir, "0")
@@ -139,7 +139,7 @@ func TestServer_ServesNestedDirectories(t *testing.T) {
// Create a file in nested directory
testFile := filepath.Join(nestedDir, "metrics.json")
- err = os.WriteFile(testFile, []byte(`{"count": 42}`), 0644)
+ err = os.WriteFile(testFile, []byte(`{"count": 42}`), 0600)
require.NoError(t, err)
absPath, _ := filepath.Abs(tempDir)
@@ -164,7 +164,7 @@ func TestServer_MiddlewareCombination(t *testing.T) {
innerHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
- w.Write([]byte("response"))
+ _, _ = w.Write([]byte("response"))
})
// Combine middlewares like in the actual server
@@ -189,7 +189,7 @@ func TestServer_ServesIndexHtml(t *testing.T) {
// Create an index.html
indexFile := filepath.Join(tempDir, "index.html")
- err := os.WriteFile(indexFile, []byte("Test Page"), 0644)
+ err := os.WriteFile(indexFile, []byte("Test Page"), 0600)
require.NoError(t, err)
absPath, _ := filepath.Abs(tempDir)
@@ -213,7 +213,7 @@ func TestServer_CreateHandler(t *testing.T) {
// Create an index.html
indexFile := filepath.Join(tempDir, "index.html")
- err := os.WriteFile(indexFile, []byte("Handler Test"), 0644)
+ err := os.WriteFile(indexFile, []byte("Handler Test"), 0600)
require.NoError(t, err)
s := New(tempDir, "8080")
@@ -281,7 +281,7 @@ func TestServer_ServesJSONWithCorrectContentType(t *testing.T) {
// Create a JSON file
jsonFile := filepath.Join(tempDir, "data.json")
- err := os.WriteFile(jsonFile, []byte(`{"status": "ok"}`), 0644)
+ err := os.WriteFile(jsonFile, []byte(`{"status": "ok"}`), 0600)
require.NoError(t, err)
s := New(tempDir, "0")
@@ -306,7 +306,7 @@ func TestServer_ServesHTMLWithCorrectContentType(t *testing.T) {
// Create an HTML file
htmlFile := filepath.Join(tempDir, "page.html")
- err := os.WriteFile(htmlFile, []byte("HTML Page"), 0644)
+ err := os.WriteFile(htmlFile, []byte("HTML Page"), 0600)
require.NoError(t, err)
s := New(tempDir, "0")
@@ -331,7 +331,7 @@ func TestServer_CORSHeaders(t *testing.T) {
// Create a test file
testFile := filepath.Join(tempDir, "test.txt")
- err := os.WriteFile(testFile, []byte("test content"), 0644)
+ err := os.WriteFile(testFile, []byte("test content"), 0600)
require.NoError(t, err)
s := New(tempDir, "0")
@@ -354,7 +354,7 @@ func TestServer_CacheDisabledHeaders(t *testing.T) {
// Create a test file
testFile := filepath.Join(tempDir, "test.txt")
- err := os.WriteFile(testFile, []byte("test content"), 0644)
+ err := os.WriteFile(testFile, []byte("test content"), 0600)
require.NoError(t, err)
s := New(tempDir, "0")
@@ -406,7 +406,7 @@ func TestServer_CacheMiddlewarePreservesResponseBody(t *testing.T) {
expectedBody := "This is the response body content"
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
- w.Write([]byte(expectedBody))
+ _, _ = w.Write([]byte(expectedBody))
})
wrapped := s.cacheMiddleware(handler)
diff --git a/web/src/components/AchievementBadge.vue b/web/src/components/AchievementBadge.vue
index 4ca8d90..5d4002e 100644
--- a/web/src/components/AchievementBadge.vue
+++ b/web/src/components/AchievementBadge.vue
@@ -176,6 +176,34 @@ const achievements = {
'docs-del-500': { name: 'Dead Code Hunter', description: 'Removed 500 lines of outdated comments', icon: 'fa-skull-crossbones' },
'docs-del-1000': { name: 'Comment Surgeon', description: 'Removed 1000 lines of outdated comments', icon: 'fa-user-doctor' },
'docs-del-2500': { name: 'Noise Eliminator', description: 'Removed 2500 lines of outdated comments', icon: 'fa-volume-xmark' },
+
+ // ===== ISSUES OPENED (Tiers: 1, 5, 10, 25, 50) =====
+ 'issue-1': { name: 'Bug Hunter', description: 'Opened your first issue', icon: 'fa-bug' },
+ 'issue-5': { name: 'Issue Reporter', description: 'Opened 5 issues', icon: 'fa-flag' },
+ 'issue-10': { name: 'Quality Advocate', description: 'Opened 10 issues', icon: 'fa-clipboard-list' },
+ 'issue-25': { name: 'Issue Expert', description: 'Opened 25 issues', icon: 'fa-list-check' },
+ 'issue-50': { name: 'Issue Champion', description: 'Opened 50 issues', icon: 'fa-bullhorn' },
+
+ // ===== ISSUES CLOSED (Tiers: 1, 5, 10, 25, 50) =====
+ 'issue-close-1': { name: 'Problem Solver', description: 'Closed your first issue', icon: 'fa-circle-check' },
+ 'issue-close-5': { name: 'Bug Squasher', description: 'Closed 5 issues', icon: 'fa-bug-slash' },
+ 'issue-close-10': { name: 'Issue Resolver', description: 'Closed 10 issues', icon: 'fa-check-double' },
+ 'issue-close-25': { name: 'Closure Expert', description: 'Closed 25 issues', icon: 'fa-square-check' },
+ 'issue-close-50': { name: 'Issue Terminator', description: 'Closed 50 issues', icon: 'fa-crosshairs' },
+
+ // ===== ISSUE COMMENTS (Tiers: 5, 10, 25, 50, 100) =====
+ 'issue-comment-5': { name: 'Issue Commenter', description: 'Left 5 issue comments', icon: 'fa-comment' },
+ 'issue-comment-10': { name: 'Discussion Starter', description: 'Left 10 issue comments', icon: 'fa-comments' },
+ 'issue-comment-25': { name: 'Issue Collaborator', description: 'Left 25 issue comments', icon: 'fa-people-arrows' },
+ 'issue-comment-50': { name: 'Community Voice', description: 'Left 50 issue comments', icon: 'fa-bullhorn' },
+ 'issue-comment-100': { name: 'Issue Guru', description: 'Left 100 issue comments', icon: 'fa-graduation-cap' },
+
+ // ===== ISSUE REFERENCES IN COMMITS (Tiers: 5, 10, 25, 50, 100) =====
+ 'issue-ref-5': { name: 'Issue Linker', description: 'Referenced issues in 5 commits', icon: 'fa-link' },
+ 'issue-ref-10': { name: 'Commit Connector', description: 'Referenced issues in 10 commits', icon: 'fa-diagram-project' },
+ 'issue-ref-25': { name: 'Traceability Pro', description: 'Referenced issues in 25 commits', icon: 'fa-sitemap' },
+ 'issue-ref-50': { name: 'Issue Tracker', description: 'Referenced issues in 50 commits', icon: 'fa-chart-gantt' },
+ 'issue-ref-100': { name: 'Traceability Master', description: 'Referenced issues in 100 commits', icon: 'fa-network-wired' },
}
const getAchievement = (id) => {
diff --git a/web/src/composables/achievements.js b/web/src/composables/achievements.js
index f28a259..3ad369a 100644
--- a/web/src/composables/achievements.js
+++ b/web/src/composables/achievements.js
@@ -46,6 +46,14 @@ const achievementCategories = {
'docs': ['docs-100', 'docs-500', 'docs-1000', 'docs-2500', 'docs-5000'],
// Documentation deleted
'docs-del': ['docs-del-50', 'docs-del-200', 'docs-del-500', 'docs-del-1000', 'docs-del-2500'],
+ // Issues opened
+ 'issue': ['issue-1', 'issue-5', 'issue-10', 'issue-25', 'issue-50'],
+ // Issues closed
+ 'issue-close': ['issue-close-1', 'issue-close-5', 'issue-close-10', 'issue-close-25', 'issue-close-50'],
+ // Issue comments
+ 'issue-comment': ['issue-comment-5', 'issue-comment-10', 'issue-comment-25', 'issue-comment-50', 'issue-comment-100'],
+ // Issue references in commits
+ 'issue-ref': ['issue-ref-5', 'issue-ref-10', 'issue-ref-25', 'issue-ref-50', 'issue-ref-100'],
}
// Get the category for an achievement ID
@@ -107,8 +115,12 @@ const categoryPriority = {
'review': 8,
'lines-added': 7,
'perfect-pr': 6,
+ 'issue': 5.5,
+ 'issue-close': 5.4,
'streak': 5,
'active': 4,
+ 'issue-ref': 3.5,
+ 'issue-comment': 3.2,
'review-time': 3,
'docs': 2,
}
diff --git a/web/src/views/Contributor.vue b/web/src/views/Contributor.vue
index d34a1d1..c381254 100644
--- a/web/src/views/Contributor.vue
+++ b/web/src/views/Contributor.vue
@@ -273,6 +273,40 @@ watch(globalData, loadContributor)
+
+
+
+
+ Issue Activity
+
+
+
+
+ Issues Opened
+
+ {{ formatNumber(contributor.issues_opened || 0) }}
+
+
+
+ Issues Closed
+
+ {{ formatNumber(contributor.issues_closed || 0) }}
+
+
+
+ Issue Comments
+
+ {{ formatNumber(contributor.issue_comments || 0) }}
+
+
+
+ Issue References in Commits
+
+ {{ formatNumber(contributor.issue_references_in_commits || 0) }}
+
+
+
+
@@ -285,7 +319,7 @@ watch(globalData, loadContributor)
Score Breakdown
-
+
{{ formatNumber(contributor.score.breakdown.commits || 0) }}
@@ -314,6 +348,13 @@ watch(globalData, loadContributor)
Comments
{{ contributor.review_comments || 0 }} × 5 pts
+
+
+ {{ formatNumber(contributor.score.breakdown.issues || 0) }}
+
+
Issues
+
opened, closed, comments, refs
+
{{ formatNumber(contributor.score.breakdown.line_changes || 0) }}