POKEDATA / index.html
SUPSINNED's picture
Can you make teh decks clickable, and when they are clicked, they take me to their own page with just the data from match records that has been entered about that specific deck? - Follow Up Deployment
3316a28 verified
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>PokéStats Pro - Pokémon TCG Match Tracker</title>
<script src="https://cdn.tailwindcss.com"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<script>
tailwind.config = {
theme: {
extend: {
colors: {
'pokemon-red': '#DC0A2D',
'pokemon-blue': '#3B4CCA',
'pokemon-yellow': '#FFCB05',
'pokemon-dark': '#2A2A2A',
'pokemon-light': '#F5F5F5',
'pokemon-gray': '#E0E0E0',
'grass': '#78C850',
'fire': '#F08030',
'water': '#6890F0',
'electric': '#F8D030',
'psychic': '#F85888',
'ice': '#98D8D8',
'dragon': '#7038F8',
'dark': '#705848',
'fairy': '#EE99AC',
'fighting': '#C03028',
'flying': '#A890F0',
'poison': '#A040A0',
'ground': '#E0C068',
'rock': '#B8A038',
'bug': '#A8B820',
'ghost': '#705898',
'steel': '#B8B8D0',
'normal': '#A8A878'
},
animation: {
'pulse-slow': 'pulse 3s cubic-bezier(0.4, 0, 0.6, 1) infinite',
'bounce-slow': 'bounce 2s infinite',
'spin-slow': 'spin 3s linear infinite',
'float': 'float 3s ease-in-out infinite',
'pulse-glow': 'pulse-glow 2s infinite',
'wiggle': 'wiggle 1s ease-in-out infinite',
'shake': 'shake 0.5s ease-in-out infinite'
},
keyframes: {
'float': {
'0%, 100%': { transform: 'translateY(0px)' },
'50%': { transform: 'translateY(-10px)' }
},
'pulse-glow': {
'0%': { 'box-shadow': '0 0 0 0 rgba(220, 10, 45, 0.7)' },
'70%': { 'box-shadow': '0 0 0 10px rgba(220, 10, 45, 0)' },
'100%': { 'box-shadow': '0 0 0 0 rgba(220, 10, 45, 0)' }
},
'wiggle': {
'0%, 100%': { transform: 'rotate(-3deg)' },
'50%': { transform: 'rotate(3deg)' }
},
'shake': {
'0%, 100%': { transform: 'translateX(0)' },
'10%, 30%, 50%, 70%, 90%': { transform: 'translateX(-5px)' },
'20%, 40%, 60%, 80%': { transform: 'translateX(5px)' }
}
}
}
}
}
</script>
<style>
@import url('https://fonts.googleapis.com/css2?family=Press+Start+2P&family=Poppins:wght@300;400;500;600;700&display=swap');
body {
font-family: 'Poppins', sans-serif;
background: linear-gradient(135deg, #f5f7fa 0%, #e4edf5 100%);
min-height: 100vh;
}
.poke-font {
font-family: 'Press Start 2P', cursive;
}
/* Pokéball Loader */
.pokeball-loader {
position: relative;
width: 60px;
height: 60px;
background: #fff;
border: 4px solid #000;
border-radius: 50%;
overflow: hidden;
box-shadow: 0 0 10px rgba(0,0,0,0.2);
animation: spin-slow 1.5s linear infinite;
}
.pokeball-loader::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 50%;
background: #DC0A2D;
}
.pokeball-loader::after {
content: '';
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 18px;
height: 18px;
background: #fff;
border: 4px solid #000;
border-radius: 50%;
z-index: 1;
}
.pokeball-loader-center {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 12px;
height: 12px;
background: #000;
border-radius: 50%;
z-index: 2;
}
/* 3D Card Effect */
.pokemon-card-3d {
transform-style: preserve-3d;
transition: all 0.5s ease;
perspective: 1000px;
}
.pokemon-card-3d:hover {
transform: rotateY(10deg) rotateX(5deg) translateY(-5px);
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.2);
}
/* Type Badges with Hover Effects */
.type-badge {
position: relative;
overflow: hidden;
padding: 4px 12px;
border-radius: 20px;
font-weight: 600;
font-size: 0.8rem;
text-transform: uppercase;
letter-spacing: 0.5px;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
transition: all 0.3s ease;
z-index: 1;
}
.type-badge::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent);
transition: all 0.5s ease;
z-index: -1;
}
.type-badge:hover {
transform: translateY(-2px);
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2);
}
.type-badge:hover::before {
left: 100%;
}
/* Animated Gradient Border */
.gradient-border {
position: relative;
border-radius: 16px;
overflow: hidden;
}
.gradient-border::before {
content: '';
position: absolute;
top: -2px;
left: -2px;
right: -2px;
bottom: -2px;
background: linear-gradient(45deg, #3B4CCA, #DC0A2D, #FFCB05);
background-size: 200% 200%;
z-index: -1;
border-radius: 18px;
animation: gradientBG 5s ease infinite;
}
@keyframes gradientBG {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
/* Floating Animation for Cards */
.floating-card {
animation: float 6s ease-in-out infinite;
}
/* Custom Scrollbar */
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-track {
background: #f1f1f1;
border-radius: 10px;
}
::-webkit-scrollbar-thumb {
background: linear-gradient(#3B4CCA, #DC0A2D);
border-radius: 10px;
}
::-webkit-scrollbar-thumb:hover {
background: linear-gradient(#2C3AA3, #A90821);
}
/* Tooltip Styles */
.tooltip {
position: relative;
display: inline-block;
}
.tooltip .tooltip-text {
visibility: hidden;
width: 120px;
background-color: #333;
color: #fff;
text-align: center;
border-radius: 6px;
padding: 5px;
position: absolute;
z-index: 1;
bottom: 125%;
left: 50%;
transform: translateX(-50%);
opacity: 0;
transition: opacity 0.3s;
}
.tooltip .tooltip-text::after {
content: "";
position: absolute;
top: 100%;
left: 50%;
margin-left: -5px;
border-width: 5px;
border-style: solid;
border-color: #333 transparent transparent transparent;
}
.tooltip:hover .tooltip-text {
visibility: visible;
opacity: 1;
}
/* Ripple Effect */
.ripple {
position: relative;
overflow: hidden;
}
.ripple:after {
content: "";
display: block;
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
pointer-events: none;
background-image: radial-gradient(circle, #fff 10%, transparent 10.01%);
background-repeat: no-repeat;
background-position: 50%;
transform: scale(10, 10);
opacity: 0;
transition: transform .5s, opacity 1s;
}
.ripple:active:after {
transform: scale(0, 0);
opacity: 0.3;
transition: 0s;
}
/* Glow Effect */
.glow-on-hover {
transition: all 0.3s ease;
}
.glow-on-hover:hover {
box-shadow: 0 0 20px rgba(220, 10, 45, 0.5);
}
/* Custom Checkbox */
.custom-checkbox {
position: relative;
display: inline-block;
width: 20px;
height: 20px;
background: #fff;
border: 2px solid #D1D5DB;
border-radius: 4px;
transition: all 0.3s;
}
.custom-checkbox:after {
content: "";
position: absolute;
display: none;
left: 6px;
top: 2px;
width: 5px;
height: 10px;
border: solid white;
border-width: 0 3px 3px 0;
transform: rotate(45deg);
}
input:checked ~ .custom-checkbox {
background: #3B4CCA;
border-color: #3B4CCA;
}
input:checked ~ .custom-checkbox:after {
display: block;
}
/* Custom Radio Button */
.custom-radio {
position: relative;
display: inline-block;
width: 20px;
height: 20px;
background: #fff;
border: 2px solid #D1D5DB;
border-radius: 50%;
transition: all 0.3s;
}
.custom-radio:after {
content: "";
position: absolute;
display: none;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 10px;
height: 10px;
background: #3B4CCA;
border-radius: 50%;
}
input:checked ~ .custom-radio {
border-color: #3B4CCA;
}
input:checked ~ .custom-radio:after {
display: block;
}
/* Custom Toggle Switch */
.toggle-switch {
position: relative;
display: inline-block;
width: 50px;
height: 24px;
}
.toggle-switch input {
opacity: 0;
width: 0;
height: 0;
}
.slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #D1D5DB;
transition: .4s;
border-radius: 24px;
}
.slider:before {
position: absolute;
content: "";
height: 16px;
width: 16px;
left: 4px;
bottom: 4px;
background-color: white;
transition: .4s;
border-radius: 50%;
}
input:checked + .slider {
background-color: #3B4CCA;
}
input:checked + .slider:before {
transform: translateX(26px);
}
/* Custom Range Slider */
.custom-range {
-webkit-appearance: none;
width: 100%;
height: 8px;
border-radius: 4px;
background: #D1D5DB;
outline: none;
}
.custom-range::-webkit-slider-thumb {
-webkit-appearance: none;
appearance: none;
width: 20px;
height: 20px;
border-radius: 50%;
background: #3B4CCA;
cursor: pointer;
transition: all 0.2s;
}
.custom-range::-webkit-slider-thumb:hover {
transform: scale(1.2);
box-shadow: 0 0 5px rgba(59, 76, 202, 0.5);
}
/* Custom Select */
.custom-select {
position: relative;
display: inline-block;
width: 100%;
}
.custom-select select {
display: none;
}
.select-selected {
background-color: white;
border: 1px solid #D1D5DB;
border-radius: 0.5rem;
padding: 0.75rem;
cursor: pointer;
user-select: none;
}
.select-selected:after {
position: absolute;
content: "";
top: 50%;
right: 15px;
width: 0;
height: 0;
border: 6px solid transparent;
border-color: #9CA3AF transparent transparent transparent;
transform: translateY(-50%);
}
.select-selected.select-arrow-active:after {
border-color: transparent transparent #9CA3AF transparent;
top: 35%;
}
.select-items div,.select-selected {
padding: 0.75rem;
border: 1px solid transparent;
border-color: transparent transparent rgba(0, 0, 0, 0.1) transparent;
cursor: pointer;
}
.select-items {
position: absolute;
background-color: white;
top: 100%;
left: 0;
right: 0;
z-index: 99;
border-radius: 0.5rem;
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
max-height: 200px;
overflow-y: auto;
}
.select-hide {
display: none;
}
.select-items div:hover, .same-as-selected {
background-color: rgba(0, 0, 0, 0.1);
}
/* Custom Tab System */
.custom-tabs {
display: flex;
border-bottom: 1px solid #E5E7EB;
}
.custom-tab {
padding: 0.75rem 1.5rem;
cursor: pointer;
position: relative;
font-weight: 600;
color: #6B7280;
transition: all 0.3s;
}
.custom-tab:after {
content: '';
position: absolute;
bottom: -1px;
left: 0;
right: 0;
height: 3px;
background: #3B4CCA;
transform: scaleX(0);
transition: transform 0.3s;
}
.custom-tab.active {
color: #3B4CCA;
}
.custom-tab.active:after {
transform: scaleX(1);
}
.custom-tab-content {
display: none;
padding: 1.5rem 0;
animation: fadeIn 0.5s;
}
.custom-tab-content.active {
display: block;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
/* Custom Accordion */
.custom-accordion {
border: 1px solid #E5E7EB;
border-radius: 0.5rem;
overflow: hidden;
}
.accordion-header {
padding: 1rem;
background: #F9FAFB;
cursor: pointer;
display: flex;
justify-content: space-between;
align-items: center;
transition: all 0.3s;
}
.accordion-header:hover {
background: #F3F4F6;
}
.accordion-content {
padding: 0;
max-height: 0;
overflow: hidden;
transition: max-height 0.3s ease-out;
}
.accordion-content-inner {
padding: 1rem;
}
.accordion-icon {
transition: transform 0.3s;
}
.accordion-active .accordion-icon {
transform: rotate(180deg);
}
/* Custom Modal */
.custom-modal {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.5);
z-index: 1000;
align-items: center;
justify-content: center;
opacity: 0;
transition: opacity 0.3s;
}
.custom-modal.active {
display: flex;
opacity: 1;
}
.modal-content {
background: white;
border-radius: 1rem;
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
max-width: 500px;
width: 90%;
max-height: 90vh;
overflow-y: auto;
transform: translateY(-20px);
transition: transform 0.3s;
}
.custom-modal.active .modal-content {
transform: translateY(0);
}
.modal-header {
padding: 1.5rem;
border-bottom: 1px solid #E5E7EB;
display: flex;
justify-content: space-between;
align-items: center;
}
.modal-title {
font-size: 1.25rem;
font-weight: 600;
color: #1F2937;
}
.modal-close {
width: 2rem;
height: 2rem;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
transition: all 0.2s;
}
.modal-close:hover {
background: #F3F4F6;
}
.modal-body {
padding: 1.5rem;
}
.modal-footer {
padding: 1.5rem;
border-top: 1px solid #E5E7EB;
display: flex;
justify-content: flex-end;
gap: 0.5rem;
}
/* Custom Notification */
.custom-notification {
position: fixed;
top: 1rem;
right: 1rem;
padding: 1rem;
border-radius: 0.5rem;
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
display: flex;
align-items: center;
z-index: 1001;
transform: translateX(150%);
transition: transform 0.3s;
}
.custom-notification.active {
transform: translateX(0);
}
.notification-icon {
margin-right: 0.75rem;
font-size: 1.25rem;
}
.notification-close {
margin-left: 1rem;
cursor: pointer;
opacity: 0.7;
transition: opacity 0.2s;
}
.notification-close:hover {
opacity: 1;
}
.notification-success {
background: #ECFDF5;
color: #065F46;
}
.notification-error {
background: #FEF2F2;
color: #B91C1C;
}
.notification-warning {
background: #FFFBEB;
color: #92400E;
}
.notification-info {
background: #EFF6FF;
color: #1E40AF;
}
/* Custom Dropdown */
.custom-dropdown {
position: relative;
display: inline-block;
}
.dropdown-toggle {
padding: 0.5rem 1rem;
background: white;
border: 1px solid #D1D5DB;
border-radius: 0.5rem;
cursor: pointer;
display: flex;
align-items: center;
justify-content: space-between;
transition: all 0.2s;
}
.dropdown-toggle:hover {
border-color: #9CA3AF;
}
.dropdown-toggle:after {
content: "";
display: inline-block;
margin-left: 0.5rem;
width: 0;
height: 0;
border-left: 5px solid transparent;
border-right: 5px solid transparent;
border-top: 5px solid #9CA3AF;
transition: transform 0.2s;
}
.dropdown-toggle.active:after {
transform: rotate(180deg);
}
.dropdown-menu {
position: absolute;
top: 100%;
left: 0;
background: white;
border: 1px solid #E5E7EB;
border-radius: 0.5rem;
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
min-width: 200px;
z-index: 100;
opacity: 0;
visibility: hidden;
transform: translateY(10px);
transition: all 0.2s;
}
.dropdown-menu.active {
opacity: 1;
visibility: visible;
transform: translateY(0);
}
.dropdown-item {
padding: 0.75rem 1rem;
cursor: pointer;
transition: all 0.2s;
}
.dropdown-item:hover {
background: #F3F4F6;
}
.dropdown-divider {
height: 1px;
background: #E5E7EB;
margin: 0.25rem 0;
}
/* Table Styles */
table {
width: 100%;
border-collapse: collapse;
}
th {
text-align: left;
padding: 12px 15px;
background-color: #f8fafc;
font-weight: 600;
color: #4a5568;
text-transform: uppercase;
letter-spacing: 0.05em;
border-bottom: 1px solid #e2e8f0;
}
td {
padding: 12px 15px;
border-bottom: 1px solid #e2e8f0;
}
tr:hover {
background-color: #f8fafc;
}
.type-badge {
display: inline-block;
padding: 2px 10px;
border-radius: 12px;
font-size: 0.75rem;
font-weight: 600;
text-transform: uppercase;
}
</style>
</head>
<body class="pokemon-bg">
<!-- Header with Gradient Background -->
<header class="header-gradient shadow-lg sticky top-0 z-50">
<div class="header-content max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="logo-container">
<div class="logo-icon">
<i class="fas fa-pokeball text-pokemon-red text-xl"></i>
</div>
<h1 class="logo-text poke-font">PokéStats Pro</h1>
</div>
<div class="user-info">
<span class="user-name">Trainer Ash</span>
<div class="logout-btn ripple">
<i class="fas fa-sign-out-alt"></i>
</div>
</div>
</div>
</header>
<!-- Main Content Area -->
<main class="main-content max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
<!-- Dashboard Header -->
<div class="dashboard-header mb-8">
<div>
<h2 class="dashboard-title text-3xl font-bold text-gray-800">Your Pokémon TCG Dashboard</h2>
<p class="dashboard-subtitle">Track your matches, analyze stats, and become a Pokémon Master!</p>
</div>
<button class="add-deck-btn ripple glow-on-hover">
<i class="fas fa-plus mr-2"></i> New Deck
</button>
</div>
<!-- Stats Overview Cards -->
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 mb-8">
<!-- Total Matches Card -->
<div class="pokemon-card bg-white rounded-xl shadow-md overflow-hidden hover:shadow-xl transition-shadow duration-300">
<div class="p-6">
<div class="flex items-center mb-4">
<div class="stat-icon bg-pokemon-blue text-white p-3 rounded-full mr-4">
<i class="fas fa-trophy"></i>
</div>
<div>
<h3 class="text-lg font-semibold text-gray-800">Total Matches</h3>
<p class="text-sm text-gray-500">All recorded matches</p>
</div>
</div>
<div class="text-3xl font-bold text-pokemon-blue mb-2">42</div>
<div class="h-2 bg-gray-200 rounded-full overflow-hidden">
<div class="h-full bg-pokemon-blue rounded-full" style="width: 100%"></div>
</div>
</div>
</div>
<!-- Win Rate Card -->
<div class="pokemon-card bg-white rounded-xl shadow-md overflow-hidden hover:shadow-xl transition-shadow duration-300">
<div class="p-6">
<div class="flex items-center mb-4">
<div class="stat-icon bg-green-500 text-white p-3 rounded-full mr-4">
<i class="fas fa-check-circle"></i>
</div>
<div>
<h3 class="text-lg font-semibold text-gray-800">Win Rate</h3>
<p class="text-sm text-gray-500">Percentage of wins</p>
</div>
</div>
<div class="text-3xl font-bold text-green-500 mb-2">71.4%</div>
<div class="h-2 bg-gray-200 rounded-full overflow-hidden">
<div class="h-full bg-green-500 rounded-full" style="width: 71.4%"></div>
</div>
</div>
</div>
<!-- Current Streak Card -->
<div class="pokemon-card bg-white rounded-xl shadow-md overflow-hidden hover:shadow-xl transition-shadow duration-300">
<div class="p-6">
<div class="flex items-center mb-4">
<div class="stat-icon bg-pokemon-red text-white p-3 rounded-full mr-4">
<i class="fas fa-fire"></i>
</div>
<div>
<h3 class="text-lg font-semibold text-gray-800">Current Streak</h3>
<p class="text-sm text-gray-500">Consecutive wins</p>
</div>
</div>
<div class="text-3xl font-bold text-pokemon-red mb-2">5</div>
<div class="h-2 bg-gray-200 rounded-full overflow-hidden">
<div class="h-full bg-pokemon-red rounded-full" style="width: 100%"></div>
</div>
</div>
</div>
</div>
<!-- Recent Matches Section -->
<section class="mb-12">
<div class="section-header mb-6">
<h2 class="section-title text-2xl font-bold text-gray-800">Recent Matches</h2>
<button class="add-btn ripple">
<i class="fas fa-plus mr-2"></i> Add Match
</button>
</div>
<div class="recent-matches grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
<!-- Match Card 1 - Win -->
<div class="match-card pokemon-card-3d rounded-lg hover:shadow-lg transition-all duration-300">
<div class="match-header">
<h3 class="match-opponent">Vs. Misty</h3>
<span class="match-date text-xs text-gray-500">2 hours ago</span>
</div>
<div class="match-details grid grid-cols-2 gap-2 mb-3">
<div class="match-detail">
<i class="fas fa-trophy text-yellow-500"></i>
<span>3 Prizes</span>
</div>
<div class="match-detail">
<i class="fas fa-clock text-blue-500"></i>
<span>15 min</span>
</div>
<div class="match-detail">
<i class="fas fa-redo text-orange-500"></i>
<span>1 Mulligan</span>
</div>
<div class="match-detail">
<i class="fas fa-flag text-purple-500"></i>
<span>Went First</span>
</div>
</div>
<div class="match-footer">
<span class="match-result match-win">Victory</span>
<span class="match-prize">+25 Rating</span>
</div>
</div>
<!-- Match Card 2 - Loss -->
<div class="match-card pokemon-card-3d rounded-lg hover:shadow-lg transition-all duration-300">
<div class="match-header">
<h3 class="match-opponent">Vs. Brock</h3>
<span class="match-date text-xs text-gray-500">1 day ago</span>
</div>
<div class="match-details grid grid-cols-2 gap-2 mb-3">
<div class="match-detail">
<i class="fas fa-trophy text-yellow-500"></i>
<span>1 Prize</span>
</div>
<div class="match-detail">
<i class="fas fa-clock text-blue-500"></i>
<span>22 min</span>
</div>
<div class="match-detail">
<i class="fas fa-redo text-orange-500"></i>
<span>2 Mulligans</span>
</div>
<div class="match-detail">
<i class="fas fa-flag text-purple-500"></i>
<span>Went Second</span>
</div>
</div>
<div class="match-footer">
<span class="match-result match-loss">Defeat</span>
<span class="match-prize">-15 Rating</span>
</div>
</div>
<!-- Match Card 3 - Win -->
<div class="match-card pokemon-card-3d rounded-lg hover:shadow-lg transition-all duration-300">
<div class="match-header">
<h3 class="match-opponent">Vs. Gary</h3>
<span class="match-date text-xs text-gray-500">3 days ago</span>
</div>
<div class="match-details grid grid-cols-2 gap-2 mb-3">
<div class="match-detail">
<i class="fas fa-trophy text-yellow-500"></i>
<span>6 Prizes</span>
</div>
<div class="match-detail">
<i class="fas fa-clock text-blue-500"></i>
<span>8 min</span>
</div>
<div class="match-detail">
<i class="fas fa-redo text-orange-500"></i>
<span>0 Mulligans</span>
</div>
<div class="match-detail">
<i class="fas fa-flag text-purple-500"></i>
<span>Went First</span>
</div>
</div>
<div class="match-footer">
<span class="match-result match-win">Victory</span>
<span class="match-prize">+30 Rating</span>
</div>
</div>
</div>
</section>
<!-- Deck Statistics Section -->
<section class="mb-12">
<div class="section-header mb-6">
<h2 class="section-title text-2xl font-bold text-gray-800">Deck Statistics</h2>
<div class="deck-type-selector">
<button class="deck-type-btn active">All Decks</button>
<button class="deck-type-btn">Standard</button>
<button class="deck-type-btn">Expanded</button>
<button class="deck-type-btn">Theme</button>
</div>
</div>
<div class="stat-grid grid grid-cols-1 md:grid-cols-2 gap-6">
<!-- Win Rate by Deck -->
<div class="stat-card-large bg-white rounded-xl shadow-md overflow-hidden hover:shadow-xl transition-shadow duration-300">
<div class="stat-card-header">
<h3 class="stat-card-title">Win Rate by Deck</h3>
<div class="flex items-center">
<span class="text-sm text-gray-500 mr-2">Last 30 days</span>
<i class="fas fa-info-circle text-gray-400"></i>
</div>
</div>
<div class="h-64 flex items-center justify-center">
<div class="text-center">
<div class="pokeball-loader mx-auto mb-4"></div>
<p class="text-gray-500">Loading chart data...</p>
</div>
</div>
</div>
<!-- Match Duration Distribution -->
<div class="stat-card-large bg-white rounded-xl shadow-md overflow-hidden hover:shadow-xl transition-shadow duration-300">
<div class="stat-card-header">
<h3 class="stat-card-title">Match Duration</h3>
<div class="flex items-center">
<span class="text-sm text-gray-500 mr-2">Average: 12.4 min</span>
<i class="fas fa-info-circle text-gray-400"></i>
</div>
</div>
<div class="h-64 flex items-center justify-center">
<div class="text-center">
<div class="pokeball-loader mx-auto mb-4"></div>
<p class="text-gray-500">Loading chart data...</p>
</div>
</div>
</div>
</div>
</section>
<!-- Your Decks Section -->
<section class="mb-12">
<div class="section-header mb-6">
<h2 class="section-title text-2xl font-bold text-gray-800">Your Decks</h2>
<div class="flex items-center">
<div class="custom-dropdown mr-4">
<div class="dropdown-toggle">
<span>Sort by: Recent</span>
</div>
<div class="dropdown-menu">
<div class="dropdown-item">Recent</div>
<div class="dropdown-item">Win Rate</div>
<div class="dropdown-item">Matches</div>
<div class="dropdown-item">Name</div>
</div>
</div>
<button class="add-btn ripple">
<i class="fas fa-plus mr-2"></i> New Deck
</button>
</div>
</div>
<!-- Deck List Table -->
<div class="bg-white rounded-lg shadow overflow-hidden mb-8">
<table class="min-w-full divide-y divide-gray-200">
<thead class="bg-gray-50">
<tr>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Deck Name</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Type</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Format</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Matches</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Win Rate</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Last Played</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Actions</th>
</tr>
</thead>
<tbody class="bg-white divide-y divide-gray-200">
<!-- Deck 1 -->
<tr class="hover:bg-gray-50">
<td class="px-6 py-4 whitespace-nowrap">
<div class="flex items-center">
<div class="flex-shrink-0 h-10 w-10">
<img class="h-10 w-10 rounded-full" src="https://images.pokemontcg.io/base1/4_hires.png" alt="Blastoise VMAX">
</div>
<div class="ml-4">
<div class="text-sm font-medium text-gray-900">Blastoise VMAX</div>
<div class="text-sm text-gray-500">Water Deck</div>
</div>
</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<span class="type-badge bg-pokemon-blue text-white">Water</span>
</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">Standard</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">20</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">
<div class="flex items-center">
<span class="mr-2">75%</span>
<div class="w-full bg-gray-200 rounded-full h-2.5">
<div class="bg-green-500 h-2.5 rounded-full" style="width: 75%"></div>
</div>
</div>
</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">2 days ago</td>
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium">
<button class="text-pokemon-blue hover:text-pokemon-red mr-3"><i class="fas fa-edit"></i></button>
<button class="text-pokemon-red hover:text-pokemon-blue"><i class="fas fa-trash"></i></button>
</td>
</tr>
<!-- Deck 2 -->
<tr class="hover:bg-gray-50">
<td class="px-6 py-4 whitespace-nowrap">
<div class="flex items-center">
<div class="flex-shrink-0 h-10 w-10">
<img class="h-10 w-10 rounded-full" src="https://images.pokemontcg.io/swsh45/154_hires.png" alt="Pikachu & Zekrom">
</div>
<div class="ml-4">
<div class="text-sm font-medium text-gray-900">Pikachu & Zekrom</div>
<div class="text-sm text-gray-500">Electric Deck</div>
</div>
</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<span class="type-badge bg-pokemon-yellow text-black">Electric</span>
</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">Expanded</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">30</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">
<div class="flex items-center">
<span class="mr-2">73%</span>
<div class="w-full bg-gray-200 rounded-full h-2.5">
<div class="bg-green-500 h-2.5 rounded-full" style="width: 73%"></div>
</div>
</div>
</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">1 week ago</td>
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium">
<button class="text-pokemon-blue hover:text-pokemon-red mr-3"><i class="fas fa-edit"></i></button>
<button class="text-pokemon-red hover:text-pokemon-blue"><i class="fas fa-trash"></i></button>
</td>
</tr>
<!-- Deck 3 -->
<tr class="hover:bg-gray-50">
<td class="px-6 py-4 whitespace-nowrap">
<div class="flex items-center">
<div class="flex-shrink-0 h-10 w-10">
<img class="h-10 w-10 rounded-full" src="https://images.pokemontcg.io/swsh9/86_hires.png" alt="Rapid Strike Urshifu">
</div>
<div class="ml-4">
<div class="text-sm font-medium text-gray-900">Rapid Strike Urshifu</div>
<div class="text-sm text-gray-500">Fighting Deck</div>
</div>
</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<span class="type-badge bg-fighting text-white">Fighting</span>
</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">Standard</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">15</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">
<div class="flex items-center">
<span class="mr-2">67%</span>
<div class="w-full bg-gray-200 rounded-full h-2.5">
<div class="bg-green-500 h-2.5 rounded-full" style="width: 67%"></div>
</div>
</div>
</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">3 days ago</td>
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium">
<button class="text-pokemon-blue hover:text-pokemon-red mr-3"><i class="fas fa-edit"></i></button>
<button class="text-pokemon-red hover:text-pokemon-blue"><i class="fas fa-trash"></i></button>
</td>
</tr>
</tbody>
</table>
</div>
<div class="decks-grid grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6">
<!-- Deck Card 1 -->
<a href="deck-detail.html?id=1" class="deck-card gradient-border hover:shadow-lg transition-all duration-300 block">
<div class="deck-image" style="background-image: url('https://images.pokemontcg.io/base1/4_hires.png');">
<div class="absolute bottom-0 left-0 p-4 w-full">
<div class="flex justify-between items-end">
<div>
<h3 class="deck-name text-white font-bold">Blastoise VMAX</h3>
<p class="deck-date text-white text-opacity-80 text-sm">Updated 2 days ago</p>
</div>
<span class="type-badge bg-pokemon-blue text-white">Water</span>
</div>
</div>
</div>
<div class="deck-content bg-white">
<div class="deck-stats grid grid-cols-3 gap-2 mb-4">
<div class="stat-item">
<div class="stat-value">15</div>
<div class="stat-label">Wins</div>
</div>
<div class="stat-item">
<div class="stat-value">5</div>
<div class="stat-label">Losses</div>
</div>
<div class="stat-item">
<div class="stat-value">75%</div>
<div class="stat-label">Win Rate</div>
</div>
</div>
<div class="deck-notes">
<i class="fas fa-sticky-note"></i>
<span>Focuses on rapid energy acceleration with Deluge Blastoise...</span>
</div>
</div>
</div>
<!-- Deck Card 2 -->
<a href="deck-detail.html?id=2" class="deck-card gradient-border hover:shadow-lg transition-all duration-300 block">
<div class="deck-image" style="background-image: url('https://images.pokemontcg.io/swsh45/154_hires.png');">
<div class="absolute bottom-0 left-0 p-4 w-full">
<div class="flex justify-between items-end">
<div>
<h3 class="deck-name text-white font-bold">Pikachu & Zekrom</h3>
<p class="deck-date text-white text-opacity-80 text-sm">Updated 1 week ago</p>
</div>
<span class="type-badge bg-pokemon-yellow text-black">Electric</span>
</div>
</div>
</div>
<div class="deck-content bg-white">
<div class="deck-stats grid grid-cols-3 gap-2 mb-4">
<div class="stat-item">
<div class="stat-value">22</div>
<div class="stat-label">Wins</div>
</div>
<div class="stat-item">
<div class="stat-value">8</div>
<div class="stat-label">Losses</div>
</div>
<div class="stat-item">
<div class="stat-value">73%</div>
<div class="stat-label">Win Rate</div>
</div>
</div>
<div class="deck-notes">
<i class="fas fa-sticky-note"></i>
<span>Tag Team powerhouse with Electropower boosts...</span>
</div>
</div>
</div>
<!-- Deck Card 3 -->
<a href="deck-detail.html?id=3" class="deck-card gradient-border hover:shadow-lg transition-all duration-300 block">
<div class="deck-image" style="background-image: url('https://images.pokemontcg.io/swsh9/86_hires.png');">
<div class="absolute bottom-0 left-0 p-4 w-full">
<div class="flex justify-between items-end">
<div>
<h3 class="deck-name text-white font-bold">Rapid Strike Urshifu</h3>
<p class="deck-date text-white text-opacity-80 text-sm">Updated 3 days ago</p>
</div>
<span class="type-badge bg-fighting text-white">Fighting</span>
</div>
</div>
</div>
<div class="deck-content bg-white">
<div class="deck-stats grid grid-cols-3 gap-2 mb-4">
<div class="stat-item">
<div class="stat-value">10</div>
<div class="stat-label">Wins</div>
</div>
<div class="stat-item">
<div class="stat-value">5</div>
<div class="stat-label">Losses</div>
</div>
<div class="stat-item">
<div class="stat-value">67%</div>
<div class="stat-label">Win Rate</div>
</div>
</div>
<div class="deck-notes">
<i class="fas fa-sticky-note"></i>
<span>Quick attacks with Octillery draw engine...</span>
</div>
</div>
</div>
</div>
</section>
</main>
<!-- New Deck Modal -->
<div class="custom-modal" id="newDeckModal">
<div class="modal-content">
<div class="modal-header">
<h3 class="modal-title">Create New Deck</h3>
<button class="modal-close" id="closeDeckModal">
<i class="fas fa-times"></i>
</button>
</div>
<div class="modal-body">
<form id="deckForm">
<div class="input-group mb-4">
<label for="deckName" class="block text-sm font-medium text-gray-700 mb-1">Deck Name</label>
<input type="text" id="deckName" class="form-input" placeholder="Enter deck name" required>
</div>
<div class="input-group mb-4">
<label class="block text-sm font-medium text-gray-700 mb-1">Primary Type</label>
<div class="grid grid-cols-3 gap-2">
<button type="button" class="type-badge grass">Grass</button>
<button type="button" class="type-badge fire">Fire</button>
<button type="button" class="type-badge water">Water</button>
<button type="button" class="type-badge electric">Electric</button>
<button type="button" class="type-badge psychic">Psychic</button>
<button type="button" class="type-badge fighting">Fighting</button>
<button type="button" class="type-badge dark">Dark</button>
<button type="button" class="type-badge fairy">Fairy</button>
<button type="button" class="type-badge dragon">Dragon</button>
</div>
</div>
<div class="input-group mb-4">
<label for="deckFormat" class="block text-sm font-medium text-gray-700 mb-1">Format</label>
<select id="deckFormat" class="form-input" required>
<option value="">Select format</option>
<option value="standard">Standard</option>
<option value="expanded">Expanded</option>
<option value="theme">Theme</option>
</select>
</div>
<div class="input-group mb-4">
<label for="deckImage" class="block text-sm font-medium text-gray-700 mb-1">Cover Image URL</label>
<input type="url" id="deckImage" class="form-input" placeholder="https://example.com/image.jpg">
</div>
<div class="input-group mb-4">
<label for="deckDescription" class="block text-sm font-medium text-gray-700 mb-1">Description</label>
<textarea id="deckDescription" class="notes-area" placeholder="Describe your deck strategy..." rows="3"></textarea>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary mr-2" id="cancelDeckModal">Cancel</button>
<button type="button" class="btn btn-primary" id="saveDeck">Create Deck</button>
</div>
</div>
</div>
<!-- Add Match Modal -->
<div class="custom-modal" id="addMatchModal">
<div class="modal-content">
<div class="modal-header">
<h3 class="modal-title">Add New Match</h3>
<button class="modal-close" id="closeMatchModal">
<i class="fas fa-times"></i>
</button>
</div>
<div class="modal-body">
<form id="matchForm">
<div class="input-group mb-4">
<label for="opponentName" class="block text-sm font-medium text-gray-700 mb-1">Opponent Name</label>
<input type="text" id="opponentName" class="form-input" placeholder="Enter opponent's name">
</div>
<div class="input-group mb-4">
<label class="block text-sm font-medium text-gray-700 mb-1">Deck Used</label>
<select class="form-input">
<option value="">Select your deck</option>
<option value="1">Blastoise VMAX</option>
<option value="2">Pikachu & Zekrom</option>
<option value="3">Rapid Strike Urshifu</option>
</select>
</div>
<div class="input-group mb-4">
<label class="block text-sm font-medium text-gray-700 mb-1">Opponent's Deck Type</label>
<div class="grid grid-cols-3 gap-2">
<button type="button" class="type-badge grass">Grass</button>
<button type="button" class="type-badge fire">Fire</button>
<button type="button" class="type-badge water">Water</button>
<button type="button" class="type-badge electric">Electric</button>
<button type="button" class="type-badge psychic">Psychic</button>
<button type="button" class="type-badge fighting">Fighting</button>
</div>
</div>
<div class="input-group mb-4">
<label class="block text-sm font-medium text-gray-700 mb-1">Match Result</label>
<div class="radio-group">
<label class="radio-option">
<input type="radio" name="result" value="win" checked>
<span class="ml-2">Win</span>
</label>
<label class="radio-option">
<input type="radio" name="result" value="loss">
<span class="ml-2">Loss</span>
</label>
</div>
</div>
<div class="grid grid-cols-2 gap-4 mb-4">
<div class="input-group">
<label for="prizesTaken" class="block text-sm font-medium text-gray-700 mb-1">Prizes Taken</label>
<input type="number" id="prizesTaken" class="form-input" min="0" max="6" value="6">
</div>
<div class="input-group">
<label for="mulligans" class="block text-sm font-medium text-gray-700 mb-1">Mulligans</label>
<input type="number" id="mulligans" class="form-input" min="0" max="5" value="0">
</div>
</div>
<div class="input-group mb-4">
<label class="block text-sm font-medium text-gray-700 mb-1">Who Went First?</label>
<div class="radio-group">
<label class="radio-option">
<input type="radio" name="first" value="me" checked>
<span class="ml-2">I did</span>
</label>
<label class="radio-option">
<input type="radio" name="first" value="opponent">
<span class="ml-2">Opponent</span>
</label>
</div>
</div>
<div class="input-group mb-4">
<label for="matchDuration" class="block text-sm font-medium text-gray-700 mb-1">Match Duration (minutes)</label>
<input type="number" id="matchDuration" class="form-input" min="1" max="60" value="15">
</div>
<div class="input-group mb-4">
<label for="matchNotes" class="block text-sm font-medium text-gray-700 mb-1">Notes</label>
<textarea id="matchNotes" class="notes-area" placeholder="Add any notes about the match..."></textarea>
</div>
</form>
</div>
<div class="modal-footer">
<button class="btn btn-secondary mr-2">Cancel</button>
<button class="btn btn-primary">Save Match</button>
</div>
</div>
</div>
<!-- Notification -->
<div class="custom-notification notification-success" id="successNotification">
<i class="notification-icon fas fa-check-circle"></i>
<div>
<h4 class="font-semibold">Success!</h4>
<p class="text-sm">Match recorded successfully.</p>
</div>
<span class="notification-close">
<i class="fas fa-times"></i>
</span>
</div>
<!-- Deck Detail Section -->
<section class="mb-12" id="deckDetailSection">
<div class="section-header mb-6">
<h2 class="section-title text-2xl font-bold text-gray-800" id="deckNameTitle">Deck Details</h2>
<button class="back-btn ripple">
<i class="fas fa-arrow-left mr-2"></i> Back to Decks
</button>
</div>
<div class="grid grid-cols-1 lg:grid-cols-3 gap-6 mb-8">
<!-- Deck Info Card -->
<div class="deck-info-card bg-white rounded-xl shadow-md overflow-hidden">
<div class="p-6">
<div class="flex items-center mb-4">
<img id="deckImage" class="h-16 w-16 rounded-full mr-4" src="" alt="Deck Image">
<div>
<h3 class="text-xl font-bold text-gray-800" id="deckName"></h3>
<div class="flex items-center mt-1">
<span class="type-badge mr-2" id="deckType"></span>
<span class="text-sm text-gray-500" id="deckFormat"></span>
</div>
</div>
</div>
<p class="text-gray-600 mb-4" id="deckDescription"></p>
<div class="grid grid-cols-3 gap-2 text-center">
<div>
<div class="text-xl font-bold text-pokemon-blue" id="totalMatches">0</div>
<div class="text-xs text-gray-500">Matches</div>
</div>
<div>
<div class="text-xl font-bold text-green-500" id="winRate">0%</div>
<div class="text-xs text-gray-500">Win Rate</div>
</div>
<div>
<div class="text-xl font-bold text-pokemon-yellow" id="avgDuration">0</div>
<div class="text-xs text-gray-500">Avg. Duration</div>
</div>
</div>
</div>
</div>
<!-- Win Rate Chart -->
<div class="deck-chart bg-white rounded-xl shadow-md overflow-hidden col-span-2">
<div class="p-6">
<h3 class="text-lg font-semibold text-gray-800 mb-4">Win Rate Over Time</h3>
<div class="h-64 flex items-center justify-center">
<div class="text-center">
<div class="pokeball-loader mx-auto mb-4"></div>
<p class="text-gray-500">Loading chart data...</p>
</div>
</div>
</div>
</div>
</div>
<!-- Deck Matches Table -->
<div class="bg-white rounded-lg shadow overflow-hidden mb-8">
<div class="px-6 py-4 border-b border-gray-200">
<h3 class="text-lg font-semibold text-gray-800">Match History</h3>
</div>
<table class="min-w-full divide-y divide-gray-200">
<thead class="bg-gray-50">
<tr>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Opponent</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Result</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Prizes</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Duration</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Date</th>
</tr>
</thead>
<tbody class="bg-white divide-y divide-gray-200" id="matchHistoryBody">
<!-- Match rows will be inserted here by JavaScript -->
</tbody>
</table>
</div>
</section>
<!-- JavaScript -->
<script>
// Get deck ID from URL
const urlParams = new URLSearchParams(window.location.search);
const deckId = urlParams.get('id');
// Sample deck data (in a real app, this would come from an API)
const decks = {
'1': {
name: 'Blastoise VMAX',
type: 'Water',
format: 'Standard',
image: 'https://images.pokemontcg.io/base1/4_hires.png',
description: 'Focuses on rapid energy acceleration with Deluge Blastoise...',
matches: 20,
winRate: 75,
avgDuration: 12
},
'2': {
name: 'Pikachu & Zekrom',
type: 'Electric',
format: 'Expanded',
image: 'https://images.pokemontcg.io/swsh45/154_hires.png',
description: 'Tag Team powerhouse with Electropower boosts...',
matches: 30,
winRate: 73,
avgDuration: 15
},
'3': {
name: 'Rapid Strike Urshifu',
type: 'Fighting',
format: 'Standard',
image: 'https://images.pokemontcg.io/swsh9/86_hires.png',
description: 'Quick attacks with Octillery draw engine...',
matches: 15,
winRate: 67,
avgDuration: 10
}
};
// Sample match data
const matches = {
'1': [
{ opponent: 'Misty', result: 'Win', prizes: 6, duration: 8, date: '3 days ago' },
{ opponent: 'Brock', result: 'Loss', prizes: 2, duration: 22, date: '1 week ago' },
{ opponent: 'Gary', result: 'Win', prizes: 6, duration: 15, date: '2 weeks ago' }
],
'2': [
{ opponent: 'Red', result: 'Win', prizes: 6, duration: 12, date: '2 days ago' },
{ opponent: 'Blue', result: 'Win', prizes: 4, duration: 18, date: '5 days ago' }
],
'3': [
{ opponent: 'Green', result: 'Loss', prizes: 1, duration: 25, date: '1 day ago' },
{ opponent: 'Yellow', result: 'Win', prizes: 6, duration: 10, date: '3 days ago' }
]
};
// Load deck data
if (deckId && decks[deckId]) {
const deck = decks[deckId];
document.getElementById('deckNameTitle').textContent = deck.name;
document.getElementById('deckName').textContent = deck.name;
document.getElementById('deckImage').src = deck.image;
document.getElementById('deckType').textContent = deck.type;
document.getElementById('deckType').className = `type-badge bg-${deck.type.toLowerCase()} ${deck.type === 'Electric' ? 'text-black' : 'text-white'}`;
document.getElementById('deckFormat').textContent = deck.format;
document.getElementById('deckDescription').textContent = deck.description;
document.getElementById('totalMatches').textContent = deck.matches;
document.getElementById('winRate').textContent = `${deck.winRate}%`;
document.getElementById('avgDuration').textContent = `${deck.avgDuration} min`;
// Load match history
const matchHistoryBody = document.getElementById('matchHistoryBody');
if (matches[deckId]) {
matches[deckId].forEach(match => {
const row = document.createElement('tr');
row.className = 'hover:bg-gray-50';
row.innerHTML = `
<td class="px-6 py-4 whitespace-nowrap">
<div class="text-sm font-medium text-gray-900">${match.opponent}</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<span class="px-2 py-1 text-sm rounded-full ${match.result === 'Win' ? 'bg-green-100 text-green-800' : 'bg-red-100 text-red-800'}">
${match.result}
</span>
</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">
${match.prizes}
</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">
${match.duration} min
</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">
${match.date}
</td>
`;
matchHistoryBody.appendChild(row);
});
}
}
// Back button functionality
document.querySelector('.back-btn').addEventListener('click', () => {
window.location.href = 'index.html';
});
// Toggle modals
document.querySelector('.add-btn').addEventListener('click', function() {
document.getElementById('addMatchModal').classList.add('active');
});
document.querySelector('.add-deck-btn').addEventListener('click', function() {
document.getElementById('newDeckModal').classList.add('active');
});
document.getElementById('closeMatchModal').addEventListener('click', function() {
document.getElementById('addMatchModal').classList.remove('active');
});
document.getElementById('closeDeckModal').addEventListener('click', function() {
document.getElementById('newDeckModal').classList.remove('active');
});
document.getElementById('cancelDeckModal').addEventListener('click', function() {
document.getElementById('newDeckModal').classList.remove('active');
});
// Save deck functionality
document.getElementById('saveDeck').addEventListener('click', function() {
const deckName = document.getElementById('deckName').value;
const deckFormat = document.getElementById('deckFormat').value;
const deckImage = document.getElementById('deckImage').value;
const deckDescription = document.getElementById('deckDescription').value;
if (!deckName || !deckFormat) {
alert('Please fill in all required fields');
return;
}
// Here you would typically send this data to your backend
console.log('New deck created:', {
name: deckName,
format: deckFormat,
image: deckImage,
description: deckDescription
});
document.getElementById('newDeckModal').classList.remove('active');
showNotification('Deck created successfully!');
// Reset form
document.getElementById('deckForm').reset();
});
// Show notification
function showNotification(message) {
const notification = document.getElementById('successNotification');
notification.querySelector('p').textContent = message;
notification.classList.add('active');
setTimeout(() => {
notification.classList.remove('active');
}, 3000);
}
// Close notification
document.querySelector('.notification-close').addEventListener('click', function() {
document.getElementById('successNotification').classList.remove('active');
});
// Dropdown functionality
document.querySelectorAll('.dropdown-toggle').forEach(toggle => {
toggle.addEventListener('click', function() {
const menu = this.nextElementSibling;
menu.classList.toggle('active');
// Close other open dropdowns
document.querySelectorAll('.dropdown-menu').forEach(otherMenu => {
if (otherMenu !== menu) {
otherMenu.classList.remove('active');
}
});
});
});
// Close dropdowns when clicking outside
document.addEventListener('click', function(e) {
if (!e.target.closest('.custom-dropdown')) {
document.querySelectorAll('.dropdown-menu').forEach(menu => {
menu.classList.remove('active');
});
}
});
// Deck type selector
document.querySelectorAll('.deck-type-btn').forEach(btn => {
btn.addEventListener('click', function() {
document.querySelectorAll('.deck-type-btn').forEach(otherBtn => {
otherBtn.classList.remove('active');
});
this.classList.add('active');
});
});
// Type badge selection
document.querySelectorAll('.type-badge').forEach(badge => {
badge.addEventListener('click', function() {
this.classList.toggle('bg-opacity-50');
});
});
// Ripple effect
document.querySelectorAll('.ripple').forEach(button => {
button.addEventListener('click', function(e) {
e.preventDefault();
const rect = this.getBoundingClientRect();
const x = e.clientX - rect.left;
const y = e.clientY - rect.top;
const ripple = document.createElement('span');
ripple.style.left = x + 'px';
ripple.style.top = y + 'px';
ripple.classList.add('ripple-effect');
this.appendChild(ripple);
setTimeout(() => {
ripple.remove();
}, 1000);
});
});
</script>
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=SUPSINNED/POKEDATA" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
</html>