Spaces:
Running
Running
<html lang="en"> | |
<head> | |
<meta charset="UTF-8"> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
<title>Deck Doctor</title> | |
<meta name="description" content="Advanced MTG card database with similarity search and market prices"> | |
<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"> | |
<style> | |
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Space+Grotesk:wght@600;700&display=swap'); | |
:root { | |
--glass-bg: rgba(0, 0, 0, 0.4); | |
--glass-bg-dark: rgba(0, 0, 0, 0.6); | |
--glass-border: rgba(255, 255, 255, 0.08); | |
--text-primary: rgba(255, 255, 255, 0.9); | |
--text-secondary: rgba(255, 255, 255, 0.6); | |
--text-muted: rgba(255, 255, 255, 0.4); | |
--accent-blue: rgba(102, 126, 234, 0.5); | |
--border-radius: 16px; | |
--transition-fast: 0.2s cubic-bezier(0.4, 0, 0.2, 1); | |
--transition-normal: 0.3s cubic-bezier(0.4, 0, 0.2, 1); | |
} | |
* { | |
margin: 0; | |
padding: 0; | |
box-sizing: border-box; | |
} | |
body { | |
font-family: 'Inter', sans-serif; | |
background: #0a0a0a; | |
background-size: cover; | |
background-position: center; | |
background-repeat: no-repeat; | |
min-height: 100vh; | |
position: relative; | |
overflow-x: hidden; | |
overscroll-behavior-y: contain; | |
touch-action: pan-y; | |
} | |
/* Glass overlay panel */ | |
.background-overlay { | |
position: fixed; | |
inset: 0; | |
background: rgba(0, 0, 0, 0.6); | |
backdrop-filter: blur(5px); | |
-webkit-backdrop-filter: blur(5px); | |
z-index: 0; | |
} | |
/* Optimized background effects */ | |
body::before { | |
content: ''; | |
position: fixed; | |
inset: 0; | |
background-size: cover; | |
background-position: center; | |
background-repeat: no-repeat; | |
filter: blur(20px) brightness(0.5); | |
z-index: -1; | |
opacity: 0.3; | |
transform: scale(1.1); | |
will-change: transform; | |
} | |
/* Single orb for performance */ | |
.orb { | |
position: fixed; | |
width: min(400px, 40vw); | |
height: min(400px, 40vw); | |
border-radius: 50%; | |
background: radial-gradient(circle, rgba(102, 126, 234, 0.4) 0%, transparent 70%); | |
filter: blur(60px); | |
opacity: 0.3; | |
top: 50%; | |
left: 50%; | |
transform: translate(-50%, -50%); | |
pointer-events: none; | |
animation: float 20s infinite ease-in-out; | |
z-index: 1; | |
} | |
@keyframes float { | |
0%, 100% { transform: translate(-50%, -50%) scale(1); } | |
50% { transform: translate(-30%, -60%) scale(1.2); } | |
} | |
/* Disable complex animations on mobile */ | |
@media (max-width: 768px) { | |
.orb { animation: none; opacity: 0.2; } | |
} | |
.container { | |
position: relative; | |
z-index: 20; | |
} | |
/* Consolidated glass styles */ | |
.glass { | |
background: var(--glass-bg); | |
backdrop-filter: blur(20px); | |
-webkit-backdrop-filter: blur(20px); | |
border: 1px solid var(--glass-border); | |
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3); | |
transition: var(--transition-normal); | |
} | |
.glass-card { | |
background: linear-gradient(135deg, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.6)); | |
backdrop-filter: blur(30px); | |
-webkit-backdrop-filter: blur(30px); | |
border: 1px solid var(--glass-border); | |
border-radius: var(--border-radius); | |
box-shadow: 0 20px 40px -15px rgba(0, 0, 0, 0.5); | |
overflow: hidden; | |
} | |
/* Optimized search */ | |
.search-container { | |
position: relative; | |
max-width: 500px; | |
margin: 0 auto; | |
} | |
.search-input { | |
width: 100%; | |
background: var(--glass-bg-dark); | |
backdrop-filter: blur(20px); | |
border: 1px solid var(--glass-border); | |
border-radius: var(--border-radius); | |
padding: 16px 20px 16px 50px; | |
color: white; | |
font-size: 16px; | |
transition: var(--transition-fast); | |
outline: none; | |
position: relative; | |
z-index: 5; | |
min-height: 50px; | |
} | |
.search-input::placeholder { | |
color: var(--text-muted); | |
} | |
.search-input:focus { | |
border-color: var(--accent-blue); | |
box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1); | |
} | |
.search-icon { | |
position: absolute; | |
left: 16px; | |
top: 50%; | |
transform: translateY(-50%); | |
color: var(--text-muted); | |
pointer-events: none; | |
font-size: 16px; | |
z-index: 10; | |
} | |
.search-clear { | |
position: absolute; | |
right: 14px; | |
top: 50%; | |
transform: translateY(-50%); | |
background: none; | |
border: none; | |
color: var(--text-muted); | |
cursor: pointer; | |
padding: 4px; | |
border-radius: 50%; | |
transition: var(--transition-fast); | |
display: none; | |
} | |
.search-clear.visible { | |
display: block; | |
} | |
.search-clear:hover { | |
color: var(--text-primary); | |
background: rgba(255, 255, 255, 0.1); | |
} | |
/* Gallery Header with Filters */ | |
.gallery-header { | |
display: flex; | |
align-items: center; | |
justify-content: space-between; | |
margin-bottom: 24px; | |
flex-wrap: wrap; | |
gap: 16px; | |
} | |
.gallery-title { | |
font-size: 1.5rem; | |
font-weight: 600; | |
color: white; | |
display: flex; | |
align-items: center; | |
gap: 12px; | |
} | |
/* Color Filters - Redesigned for gallery section */ | |
.color-filters-inline { | |
display: flex; | |
align-items: center; | |
gap: 8px; | |
} | |
.color-filter-label { | |
font-size: 0.875rem; | |
font-weight: 500; | |
color: var(--text-secondary); | |
margin-right: 4px; | |
} | |
.color-filter-btn { | |
width: 36px; | |
height: 36px; | |
border-radius: 50%; | |
border: 2px solid transparent; | |
cursor: pointer; | |
transition: var(--transition-fast); | |
display: flex; | |
align-items: center; | |
justify-content: center; | |
font-weight: bold; | |
font-size: 13px; | |
position: relative; | |
background: none; | |
outline: none; | |
} | |
.color-filter-btn:hover { | |
transform: scale(1.15); | |
box-shadow: 0 0 20px rgba(255, 255, 255, 0.3); | |
} | |
.color-filter-btn.active { | |
border-color: rgba(255, 255, 255, 0.9); | |
box-shadow: 0 0 20px rgba(255, 255, 255, 0.5); | |
transform: scale(1.15); | |
} | |
.color-filter-btn::after { | |
content: ''; | |
position: absolute; | |
inset: 2px; | |
border-radius: 50%; | |
transition: var(--transition-fast); | |
} | |
/* Clear filters button */ | |
.clear-filters-btn { | |
background: rgba(239, 68, 68, 0.2); | |
border: 1px solid rgba(239, 68, 68, 0.4); | |
color: rgb(248, 113, 113); | |
padding: 6px 12px; | |
border-radius: 8px; | |
font-size: 0.75rem; | |
cursor: pointer; | |
transition: var(--transition-fast); | |
display: none; | |
} | |
.clear-filters-btn.visible { | |
display: inline-flex; | |
align-items: center; | |
gap: 4px; | |
} | |
.clear-filters-btn:hover { | |
background: rgba(239, 68, 68, 0.3); | |
border-color: rgba(239, 68, 68, 0.6); | |
} | |
/* Simplified autocomplete */ | |
.autocomplete-dropdown { | |
position: absolute; | |
top: calc(100% + 8px); | |
left: 0; | |
right: 0; | |
background: var(--glass-bg-dark); | |
backdrop-filter: blur(20px); | |
border: 1px solid var(--glass-border); | |
border-radius: 12px; | |
max-height: 300px; | |
overflow-y: auto; | |
z-index: 1000; | |
opacity: 0; | |
visibility: hidden; | |
transform: translateY(-10px); | |
transition: var(--transition-fast); | |
} | |
.autocomplete-dropdown.visible { | |
opacity: 1; | |
visibility: visible; | |
transform: translateY(0); | |
} | |
.autocomplete-item { | |
padding: 12px 16px; | |
color: var(--text-secondary); | |
cursor: pointer; | |
border-bottom: 1px solid rgba(255, 255, 255, 0.05); | |
transition: var(--transition-fast); | |
display: flex; | |
align-items: center; | |
} | |
.autocomplete-item:hover, | |
.autocomplete-item.selected { | |
background: rgba(102, 126, 234, 0.2); | |
color: white; | |
} | |
.autocomplete-loading, | |
.autocomplete-empty { | |
padding: 16px; | |
text-align: center; | |
color: var(--text-muted); | |
font-size: 14px; | |
} | |
.autocomplete-hint { | |
padding: 12px 16px; | |
background: rgba(102, 126, 234, 0.1); | |
border-top: 1px solid rgba(255, 255, 255, 0.1); | |
color: var(--text-secondary); | |
font-size: 13px; | |
display: flex; | |
align-items: center; | |
gap: 8px; | |
} | |
/* Headers */ | |
.header-text { | |
font-family: 'Space Grotesk', sans-serif; | |
font-weight: 700; | |
background: linear-gradient(135deg, #fff 0%, rgba(255, 255, 255, 0.7) 100%); | |
-webkit-background-clip: text; | |
-webkit-text-fill-color: transparent; | |
background-clip: text; | |
font-size: clamp(2.5rem, 10vw, 6rem); | |
letter-spacing: -1px; | |
line-height: 1; | |
} | |
.subheader-text { | |
color: var(--text-secondary); | |
font-weight: 300; | |
letter-spacing: 2px; | |
text-transform: uppercase; | |
font-size: clamp(0.75rem, 2vw, 0.875rem); | |
} | |
/* Search Results Header */ | |
.search-results-header { | |
background: var(--glass-bg-dark); | |
backdrop-filter: blur(20px); | |
border: 1px solid var(--glass-border); | |
border-radius: 12px; | |
padding: 16px 20px; | |
margin-bottom: 24px; | |
display: flex; | |
align-items: center; | |
justify-content: space-between; | |
flex-wrap: wrap; | |
gap: 12px; | |
} | |
.search-results-title { | |
font-size: 1.25rem; | |
font-weight: 600; | |
color: white; | |
display: flex; | |
align-items: center; | |
gap: 12px; | |
} | |
.search-query { | |
color: rgba(102, 126, 234, 1); | |
font-weight: 400; | |
} | |
.results-count { | |
color: var(--text-muted); | |
font-size: 0.875rem; | |
} | |
/* Search Results Filters */ | |
.search-results-filters { | |
display: flex; | |
align-items: center; | |
gap: 8px; | |
} | |
/* Optimized buttons */ | |
.glass-button { | |
background: var(--glass-bg); | |
backdrop-filter: blur(10px); | |
border: 1px solid var(--glass-border); | |
color: var(--text-primary); | |
padding: 12px 24px; | |
border-radius: 12px; | |
font-weight: 500; | |
transition: var(--transition-fast); | |
cursor: pointer; | |
font-size: 0.9rem; | |
white-space: nowrap; | |
min-height: 44px; | |
display: inline-flex; | |
align-items: center; | |
justify-content: center; | |
} | |
.glass-button:hover:not(:disabled) { | |
background: rgba(0, 0, 0, 0.5); | |
border-color: rgba(255, 255, 255, 0.2); | |
transform: translateY(-2px); | |
} | |
.glass-button:disabled { | |
opacity: 0.6; | |
cursor: not-allowed; | |
} | |
.glass-button-small { | |
padding: 6px 12px; | |
font-size: 0.8rem; | |
min-height: 32px; | |
} | |
/* Oracle text search buttons */ | |
.oracle-search-btn { | |
background: rgba(102, 126, 234, 0.2); | |
border: 1px solid rgba(102, 126, 234, 0.4); | |
color: rgba(102, 126, 234, 1); | |
padding: 12px 16px; | |
border-radius: 12px; | |
font-size: 0.85rem; | |
cursor: pointer; | |
transition: var(--transition-fast); | |
display: block; | |
margin: 8px 0; | |
text-align: left; | |
width: 100%; | |
word-wrap: break-word; | |
line-height: 1.5; | |
white-space: normal; | |
overflow-wrap: break-word; | |
word-break: break-word; | |
} | |
.oracle-search-btn:hover { | |
background: rgba(102, 126, 234, 0.3); | |
border-color: rgba(102, 126, 234, 0.6); | |
color: white; | |
transform: translateY(-1px); | |
} | |
.oracle-search-btn i { | |
margin-right: 8px; | |
flex-shrink: 0; | |
} | |
/* Mobile optimization for oracle search buttons */ | |
@media (max-width: 768px) { | |
.oracle-search-btn { | |
font-size: 0.8rem; | |
padding: 10px 14px; | |
margin: 6px 0; | |
line-height: 1.4; | |
display: flex; | |
align-items: flex-start; | |
} | |
.oracle-search-btn i { | |
margin-right: 8px; | |
font-size: 0.8rem; | |
margin-top: 0.1em; | |
} | |
} | |
@media (max-width: 480px) { | |
.oracle-search-btn { | |
font-size: 0.75rem; | |
padding: 10px 12px; | |
margin: 5px 0; | |
line-height: 1.4; | |
border-radius: 10px; | |
} | |
.oracle-search-btn i { | |
margin-right: 6px; | |
font-size: 0.75rem; | |
} | |
} | |
@media (max-width: 360px) { | |
.oracle-search-btn { | |
font-size: 0.7rem; | |
padding: 8px 10px; | |
margin: 4px 0; | |
} | |
} | |
/* Card container */ | |
.card-3d-container { | |
perspective: 2000px; | |
width: 100%; | |
max-width: min(420px, 90vw); | |
margin: 0 auto; | |
position: relative; | |
user-select: none; | |
} | |
.card-3d { | |
width: 100%; | |
aspect-ratio: 0.72; | |
transition: transform 0.8s cubic-bezier(0.4, 0, 0.2, 1); | |
transform-style: preserve-3d; | |
position: relative; | |
} | |
.card-face { | |
position: absolute; | |
width: 100%; | |
height: 100%; | |
backface-visibility: hidden; | |
border-radius: 18px; | |
overflow: hidden; | |
box-shadow: 0 20px 60px -20px rgba(0, 0, 0, 0.5); | |
} | |
.card-face-back { | |
transform: rotateY(180deg); | |
} | |
/* Responsive grids */ | |
.responsive-grid { | |
display: grid; | |
gap: 1.5rem; | |
grid-template-columns: 1fr; | |
} | |
@media (min-width: 1024px) { | |
.responsive-grid { | |
grid-template-columns: 1fr 1fr; | |
} | |
} | |
.stats-grid { | |
display: grid; | |
grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); | |
gap: 0.75rem; | |
} | |
.stat-box { | |
background: var(--glass-bg-dark); | |
border: 1px solid var(--glass-border); | |
border-radius: 12px; | |
padding: 1rem; | |
transition: var(--transition-fast); | |
} | |
.stat-box:hover { | |
transform: translateY(-2px); | |
} | |
/* Info styles */ | |
.info-label { | |
font-size: 0.75rem; | |
font-weight: 600; | |
text-transform: uppercase; | |
letter-spacing: 0.05em; | |
color: var(--text-muted); | |
margin-bottom: 0.5rem; | |
} | |
.info-value { | |
color: var(--text-primary); | |
font-weight: 500; | |
font-size: 1.1rem; | |
} | |
/* Price section */ | |
.price-section { | |
background: var(--glass-bg-dark); | |
border: 1px solid var(--glass-border); | |
border-radius: 12px; | |
padding: 1rem; | |
margin-bottom: 1rem; | |
} | |
.price-grid { | |
display: grid; | |
grid-template-columns: repeat(auto-fit, minmax(100px, 1fr)); | |
gap: 0.75rem; | |
margin-top: 0.75rem; | |
} | |
.price-item { | |
text-align: center; | |
} | |
.price-value { | |
font-size: 1.25rem; | |
font-weight: 600; | |
color: var(--text-primary); | |
} | |
.price-label { | |
font-size: 0.75rem; | |
color: var(--text-muted); | |
text-transform: uppercase; | |
margin-top: 0.25rem; | |
} | |
/* Legality badges */ | |
.legality-badge { | |
padding: 6px 12px; | |
border-radius: 8px; | |
font-size: 0.75rem; | |
font-weight: 500; | |
text-transform: uppercase; | |
display: inline-flex; | |
align-items: center; | |
gap: 4px; | |
} | |
.legality-legal { | |
background: rgba(16, 185, 129, 0.2); | |
border: 1px solid rgba(16, 185, 129, 0.4); | |
color: rgb(52, 211, 153); | |
} | |
.legality-not-legal { | |
background: rgba(148, 163, 184, 0.2); | |
border: 1px solid rgba(148, 163, 184, 0.4); | |
color: rgb(148, 163, 184); | |
} | |
.legality-banned { | |
background: rgba(239, 68, 68, 0.2); | |
border: 1px solid rgba(239, 68, 68, 0.4); | |
color: rgb(248, 113, 113); | |
} | |
/* Enhanced Gallery */ | |
.gallery-grid { | |
display: grid; | |
grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); | |
gap: 1.5rem; | |
} | |
@media (max-width: 768px) { | |
.gallery-grid { | |
grid-template-columns: repeat(2, 1fr); | |
gap: 1rem; | |
} | |
.gallery-header { | |
flex-direction: column; | |
align-items: flex-start; | |
} | |
} | |
@media (max-width: 480px) { | |
.gallery-grid { | |
grid-template-columns: 1fr; | |
gap: 1rem; | |
} | |
} | |
.gallery-item { | |
position: relative; | |
border-radius: 12px; | |
overflow: hidden; | |
transition: var(--transition-fast); | |
background: var(--glass-bg); | |
border: 1px solid var(--glass-border); | |
} | |
.gallery-item:hover { | |
transform: translateY(-4px) scale(1.02); | |
} | |
/* Enhanced gallery overlay */ | |
.gallery-overlay { | |
position: absolute; | |
inset: 0; | |
background: linear-gradient(to top, rgba(0, 0, 0, 0.95) 0%, rgba(0, 0, 0, 0.7) 50%, transparent 100%); | |
opacity: 0; | |
transition: var(--transition-fast); | |
padding: 1rem; | |
display: flex; | |
flex-direction: column; | |
justify-content: flex-end; | |
} | |
.gallery-item:hover .gallery-overlay { | |
opacity: 1; | |
} | |
.gallery-overlay-content { | |
space-y: 1rem; | |
} | |
.gallery-mana-cost { | |
display: flex; | |
align-items: center; | |
gap: 4px; | |
margin-bottom: 8px; | |
} | |
.mana-symbol { | |
width: 16px; | |
height: 16px; | |
border-radius: 50%; | |
display: inline-flex; | |
align-items: center; | |
justify-content: center; | |
font-size: 10px; | |
font-weight: bold; | |
color: white; | |
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5); | |
} | |
.gallery-actions { | |
display: flex; | |
gap: 8px; | |
margin-top: 12px; | |
} | |
.gallery-btn { | |
background: rgba(0, 0, 0, 0.8); | |
border: 1px solid rgba(255, 255, 255, 0.2); | |
color: white; | |
padding: 6px 12px; | |
border-radius: 6px; | |
font-size: 0.75rem; | |
cursor: pointer; | |
transition: var(--transition-fast); | |
text-decoration: none; | |
display: inline-flex; | |
align-items: center; | |
gap: 4px; | |
} | |
.gallery-btn:hover { | |
background: rgba(102, 126, 234, 0.8); | |
border-color: rgba(102, 126, 234, 1); | |
} | |
.gallery-btn-view { | |
background: rgba(102, 126, 234, 0.8); | |
} | |
.gallery-btn-view:hover { | |
background: rgba(102, 126, 234, 1); | |
transform: translateY(-1px); | |
} | |
/* Loading */ | |
.loading-ring { | |
width: 48px; | |
height: 48px; | |
border: 3px solid rgba(255, 255, 255, 0.1); | |
border-top-color: rgba(102, 126, 234, 0.8); | |
border-radius: 50%; | |
animation: spin 1s linear infinite; | |
} | |
@keyframes spin { | |
to { transform: rotate(360deg); } | |
} | |
/* Toast */ | |
.toast { | |
position: fixed; | |
top: 20px; | |
right: 20px; | |
z-index: 1100; | |
padding: 12px 16px; | |
border-radius: 8px; | |
font-size: 14px; | |
transition: var(--transition-fast); | |
transform: translateX(400px); | |
} | |
.toast.show { | |
transform: translateX(0); | |
} | |
.toast.error { | |
background: rgba(239, 68, 68, 0.9); | |
color: white; | |
} | |
.toast.success { | |
background: rgba(16, 185, 129, 0.9); | |
color: white; | |
} | |
/* Price tag */ | |
.price-tag { | |
background: linear-gradient(135deg, rgba(16, 185, 129, 0.9), rgba(5, 150, 105, 0.9)); | |
color: white; | |
padding: 6px 12px; | |
border-radius: 8px; | |
font-weight: 600; | |
font-size: 0.875rem; | |
} | |
/* Scrollbar */ | |
::-webkit-scrollbar { | |
width: 8px; | |
height: 8px; | |
} | |
::-webkit-scrollbar-track { | |
background: rgba(0, 0, 0, 0.3); | |
} | |
::-webkit-scrollbar-thumb { | |
background: rgba(255, 255, 255, 0.2); | |
border-radius: 4px; | |
} | |
::-webkit-scrollbar-thumb:hover { | |
background: rgba(255, 255, 255, 0.3); | |
} | |
/* Utilities */ | |
.hidden { display: none ; } | |
.line-clamp-2 { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } | |
.line-clamp-3 { display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; } | |
/* Focus styles */ | |
:focus-visible { | |
outline: 2px solid var(--accent-blue); | |
outline-offset: 2px; | |
} | |
/* Selection */ | |
::selection { | |
background: rgba(102, 126, 234, 0.3); | |
color: white; | |
} | |
/* Reduced motion */ | |
@media (prefers-reduced-motion: reduce) { | |
* { | |
animation-duration: 0.01ms ; | |
transition-duration: 0.01ms ; | |
} | |
} | |
</style> | |
</head> | |
<body> | |
<!-- Background elements --> | |
<div class="background-overlay"></div> | |
<div class="orb" aria-hidden="true"></div> | |
<!-- Toast notifications --> | |
<div id="toast" class="toast"></div> | |
<div class="container mx-auto py-4 md:py-8 px-4"> | |
<!-- Header --> | |
<header class="text-center mb-8 md:mb-12"> | |
<h1 class="header-text text-4xl md:text-6xl lg:text-8xl mb-4 md:mb-6"> | |
Deck Doctor | |
</h1> | |
<div class="flex justify-center gap-5 md:gap-8 text-xs md:text-sm flex-wrap"> | |
<span class="text-white/40"><i class="fas fa-shield-alt mr-2"></i>Card Search</span> | |
<span class="text-white/40"><i class="fas fa-chart-line mr-2"></i>Deck Analysis</span> | |
<span class="text-white/40"><i class="fas fa-search mr-2"></i>Smart Discovery</span> | |
</div> | |
<!-- Search --> | |
<div class="search-container mt-8"> | |
<i class="fas fa-search search-icon"></i> | |
<textarea | |
id="search-input" | |
class="search-input" | |
placeholder="Search for cards, terms or paste a deck..." | |
autocomplete="off" | |
rows="1" | |
oninput="autoResize(this)" | |
></textarea> | |
<button class="search-clear" id="search-clear" aria-label="Clear"> | |
<i class="fas fa-times"></i> | |
</button> | |
<div class="autocomplete-dropdown" id="autocomplete"></div> | |
</div> | |
</header> | |
<!-- Main Card Display --> | |
<div id="main-card-section" class="responsive-grid max-w-7xl mx-auto"> | |
<!-- Card Display --> | |
<div class="flex flex-col items-center"> | |
<div class="card-3d-container mb-4"> | |
<div class="card-3d" id="card-3d"> | |
<div class="card-face"> | |
<div id="card-image" class="w-full h-full bg-gray-900 flex items-center justify-center"> | |
<div class="text-center glass-card p-8"> | |
<i class="fas fa-cube text-5xl text-white/30 mb-4"></i> | |
<p class="text-white/60">Initializing...</p> | |
</div> | |
</div> | |
<div id="face-indicator" class="absolute top-4 right-4 price-tag hidden">Face 1/2</div> | |
</div> | |
</div> | |
</div> | |
<!-- Controls --> | |
<div class="flex gap-2 mb-4"> | |
<button id="random-btn" class="glass-button"> | |
<i class="fas fa-shuffle mr-2"></i>Random | |
</button> | |
</div> | |
<!-- Face Navigation --> | |
<div id="face-nav" class="hidden glass-card px-4 py-2 flex items-center gap-4"> | |
<button onclick="switchFace(-1)" class="text-white/60 hover:text-white"> | |
<i class="fas fa-chevron-left"></i> | |
</button> | |
<span id="face-counter" class="text-white font-medium">1/2</span> | |
<button onclick="switchFace(1)" class="text-white/60 hover:text-white"> | |
<i class="fas fa-chevron-right"></i> | |
</button> | |
</div> | |
</div> | |
<!-- Info Panel --> | |
<div id="info-panel" class="space-y-4"> | |
<div class="glass-card p-4 md:p-5"> | |
<h2 id="card-name" class="text-2xl font-semibold text-white mb-1">No Card Selected</h2> | |
<div id="card-type" class="text-white/60 mb-4"></div> | |
<!-- Oracle Text Search Section --> | |
<div id="oracle-search-section" class="mb-4"> | |
<h3 class="info-label">Search Card Mechanics</h3> | |
<div id="oracle-search-buttons" class="space-y-2"></div> | |
</div> | |
<!-- Legalities --> | |
<div class="mb-4"> | |
<h3 class="info-label mb-2">Format Legality</h3> | |
<div id="legalities" class="flex flex-wrap gap-1"></div> | |
</div> | |
<!-- Rankings --> | |
<div class="stat-box mb-4"> | |
<p class="info-label">Rankings</p> | |
<div id="rankings" class="info-value">—</div> | |
</div> | |
<!-- Prices --> | |
<div class="price-section"> | |
<h3 class="info-label">Market Prices</h3> | |
<div id="prices" class="price-grid"></div> | |
</div> | |
<!-- Links --> | |
<div> | |
<h3 class="info-label mb-2">Purchase & Resources</h3> | |
<div id="links" class="flex flex-wrap gap-2"></div> | |
</div> | |
</div> | |
</div> | |
</div> | |
<!-- Gallery Section with Filters --> | |
<div id="gallery-section" class="mt-12 hidden"> | |
<div class="gallery-header max-w-7xl mx-auto"> | |
<h2 id="gallery-header" class="gallery-title">Similar Cards</h2> | |
<div class="color-filters-inline"> | |
<span class="color-filter-label">Filter:</span> | |
<div id="gallery-color-filters" class="flex gap-2"></div> | |
<button id="clear-gallery-filters" class="clear-filters-btn" onclick="clearGalleryFilters()"> | |
<i class="fas fa-times"></i> | |
Clear | |
</button> | |
</div> | |
</div> | |
<div id="gallery" class="gallery-grid max-w-7xl mx-auto"></div> | |
</div> | |
<!-- Search Results Section (Initially Hidden) --> | |
<div id="search-results-section" class="hidden"> | |
<div class="search-results-header max-w-7xl mx-auto"> | |
<div class="search-results-title"> | |
<i class="fas fa-search"></i> | |
<span>Search: <span class="search-query" id="search-query-text"></span></span> | |
</div> | |
<div class="flex items-center gap-4"> | |
<div class="results-count" id="results-count"></div> | |
<div class="search-results-filters"> | |
<div id="search-color-filters" class="flex gap-2"></div> | |
<button id="clear-search-filters" class="clear-filters-btn" onclick="clearSearchFilters()"> | |
<i class="fas fa-times"></i> | |
Clear | |
</button> | |
</div> | |
</div> | |
</div> | |
<div id="search-results" class="gallery-grid max-w-7xl mx-auto"></div> | |
</div> | |
<!-- Loading --> | |
<div id="loading" class="fixed inset-0 bg-black/60 backdrop-blur-sm flex items-center justify-center hidden z-50"> | |
<div class="glass-card p-6 text-center"> | |
<div class="loading-ring mx-auto mb-3"></div> | |
<p class="text-white/60">Loading...</p> | |
</div> | |
</div> | |
</div> | |
<script> | |
</script> | |
</body> | |
</html> |