* { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; } body { display: flex; justify-content: center; align-items: center; height: 100vh; background-color: transparent; perspective: 1500px; } #binder-container { width: 80vw; height: 80vh; /* Reduced from 85vh to 80vh */ position: relative; box-shadow: 0 0 30px rgba(0, 0, 0, 0.5); transform: perspective(1500px) rotateX(5deg); display: flex; flex-direction: column; border-radius: 8px; overflow: hidden; } .binder-overlay { position: absolute; top: 0; left: 0; right: 0; bottom: 0; z-index: 20; pointer-events: none; } .left-page-corner, .right-page-corner { position: absolute; bottom: 0; width: 100px; height: 100px; cursor: pointer; pointer-events: all; z-index: 30; display: flex; justify-content: center; align-items: center; } .left-page-corner { left: 0; } .right-page-corner { right: 0; } .corner-indicator { opacity: 1; background-color: rgba(30, 30, 60, 0.7); color: white; padding: 8px 12px; border-radius: 5px; transition: opacity 0.3s; } /* .left-page-corner:hover .corner-indicator, .right-page-corner:hover .corner-indicator { opacity: 1; } */ .close-button { position: absolute; top: 10px; right: 10px; background-color: #aa3333; color: white; border: none; padding: 8px 15px; border-radius: 5px; cursor: pointer; transition: background-color 0.3s; pointer-events: all; z-index: 30; } .close-button:hover { background-color: #cc3333; } .binder-open { flex: 1; display: flex; position: relative; overflow: hidden; background-color: #000; } .binder-spine { width: 30px; height: 100%; background-color: #222; background-image: linear-gradient(to right, #111, #333, #111); position: absolute; left: 50%; transform: translateX(-50%); z-index: 1; box-shadow: 0 0 10px rgba(0, 0, 0, 0.8); } .binder-page { flex: 1; height: 100%; position: relative; padding: 10px 20px 15px 10px; /* Increased right padding to shift content */ background-color: #000; display: flex; flex-direction: column; align-items: center; /* Center the content horizontally */ overflow: hidden; box-shadow: inset 0 0 20px rgba(0, 0, 0, 0.2); transform-origin: center center; z-index: 2; } .right-page { transform: perspective(1500px) rotateY(-1deg); margin-left: 15px; padding-right: 25px; /* Add additional padding on the right page */ } .left-page { transform: perspective(1500px) rotateY(1deg); margin-right: 15px; padding-right: 25px; /* Add additional padding on the left page too */ } /* Card grid setup with fixed row heights */ .card-grid { display: grid; grid-template-columns: repeat(3, 1fr); grid-template-rows: repeat(3, 32%); /* Reduced from 33.333% to 32% */ top : 10px; gap: 30px; height: 95%; /* Reduced from 100% to 95% */ width: 85%; padding: 5px; margin-bottom: 10px; /* Added bottom margin */ margin-top: 30px; /* Added bottom margin */ } /* Ensure card slots have proper sizing with fixed height */ .card-slot { background-color: rgba(30, 30, 30, 0.8); border: 2px solid #333; border-radius: 5px; box-shadow: 0 0 5px rgba(0, 0, 0, 0.5); display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 5px; transition: transform 0.3s, box-shadow 0.3s; cursor: pointer; position: relative; overflow: hidden; height: 100%; max-height: 100%; width: 100%; } .card-slot.empty { opacity: 0.7; cursor: default; position: relative; } .card-slot.empty .card-image { filter: grayscale(100%); } .card-slot.empty .card-name, .card-slot.empty .card-rarity { filter: none; } .card-slot:not(.empty):hover { transform: scale(1.05); box-shadow: 0 0 15px rgba(255, 255, 255, 0.2); z-index: 10; } /* Card image sizing */ .card-image { max-width: 70% !important; max-height: 70% !important; width: auto !important; height: auto !important; object-fit: contain !important; margin-bottom: 25px !important; } .card-name { width: 100%; background-color: rgba(0, 0, 0, 0.7); color: white; text-align: center; padding: 5px 0; font-size: 0.8rem; position: absolute; bottom: 0; left: 0; } .card-rarity { position: absolute; top: 5px; right: 5px; font-size: 0.7rem; background-color: rgba(0, 0, 0, 0.7); padding: 2px 5px; border-radius: 3px; } .rarity-Common { color: #ccc; } .rarity-Uncommon { color: #62cf65; } .rarity-Rare { color: #5e9dff; } .rarity-Epic { color: #b85eff; } .rarity-Legendary { color: #ffc74d; text-shadow: 0 0 3px rgba(255, 215, 0, 0.7); } .rarity-Landmark { color: #ff5ecd; text-shadow: 0 0 3px rgba(255, 105, 180, 0.7); } .rarity-UNIQUE { color: #ffffff; text-shadow: 0 0 3px rgba(255, 115, 0, 0.7); } .hidden { display: none !important; } #card-details { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background-color: rgba(0, 0, 0, 0.8); display: flex; justify-content: center; align-items: center; z-index: 100; } .card-detail-content { background-color: #111; border: 1px solid #444; border-radius: 10px; box-shadow: 0 0 20px rgba(0, 0, 0, 0.8); display: flex; width: 70%; max-width: 800px; max-height: 80%; overflow: hidden; color: white; } .card-image-large { width: 80%; padding: 15px; display: flex; align-items: center; justify-content: center; background-color: #000; border-right: 1px solid #333; } #detail-card-image { width: calc(60vh * 0.7143) !important; /* Using the same dimensions as preview */ height: 60vh !important; max-width: 100%; max-height: 60vh; object-fit: contain; } .card-info { width: 60%; padding: 5px; display: flex; flex-direction: column; } .card-info h2 { margin-bottom: 15px; font-size: 1.8rem; color: #fff; border-bottom: 1px solid #444; padding-bottom: 5px; } .card-info p { margin-bottom: 10px; line-height: 1.6; } #detail-card-description { flex: 1; color: #ddd; } #detail-card-rarity { font-weight: bold; } .card-info .action-button { margin-top: 10px; background-color: #333; color: white; border: none; padding: 8px 15px; border-radius: 5px; cursor: pointer; transition: background-color 0.3s; } .card-info .action-button:hover { background-color: #444; } #remove-card { background-color: #662222; } #remove-card:hover { background-color: #993333; } .disabled { opacity: 0.5; cursor: not-allowed !important; } #card-preview { position: fixed; top: 50%; right: 4vw; transform: translateY(-50%); background: rgba(0, 0, 0, 0); } .card-preview-content { background: transparent; padding: 0; border: none; box-shadow: none; display: flex; align-items: center; justify-content: center; } .card-preview-content img { height: 60vh !important; /* Fixed height by viewport */ width: calc(60vh * 0.7143) !important; /* Width calculated from height using 5:7 ratio */ object-fit: contain !important; /* Ensures the image fits inside the dimensions */ box-shadow: 0 0 20px rgba(255, 255, 255, 0.2); } /* Media queries for different resolutions */ @media screen and (max-width: 1920px) { .card-grid { gap: 5px; } .binder-page { padding: 8px; } .card-image { max-width: 90% !important; max-height: 90% !important; } } @media screen and (min-width: 1921px) { .card-grid { gap: 12px; } .binder-page { padding: 15px; } .card-image { max-width: 90% !important; max-height: 90% !important; } } .hidden { display: none; } /* Updated Card Pack Animation Styles */ #card-pack-container { position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; display: none; z-index: 1000; overflow: hidden; perspective: 2000px; /* Added perspective to container */ } .pack-background { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: radial-gradient(circle at 30% 30%, rgba(74, 144, 226, 0.1) 0%, transparent 50%), radial-gradient(circle at 70% 70%, rgba(46, 204, 113, 0.1) 0%, transparent 50%); animation: backgroundPulse 3s ease-in-out infinite alternate; } #card-stack { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 230px; height: 322px; perspective: 1000px; /* Added perspective to stack also */ } #pack-instruction { position: absolute; top: 70%; left: 50%; transform: translateX(-50%); color: #4a90e2; font-size: 18px; font-weight: bold; text-align: center; display: none; animation: textPulse 2s ease-in-out infinite; } /* Updated Card Back Styles */ .card-back { position: absolute; width: 230px; height: 322px; border-radius: 15px; transform-style: preserve-3d; transition: transform 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275); /* More dynamic easing */ cursor: pointer; box-shadow: 0 8px 16px rgba(0,0,0,0.3); } .card-back-face, .card-front-face { position: absolute; top: 0; left: 0; width: 100%; height: 100%; -webkit-backface-visibility: hidden; /* Safari compatibility fix */ backface-visibility: hidden; border-radius: 15px; overflow: hidden; } .card-back-face { background: linear-gradient(135deg, #1a1a2e, #16213e); z-index: 2; transform: rotateY(0deg); /* Explicit setting */ } .card-front-face { background: white; transform: rotateY(180deg); z-index: 1; } .card-back.flipped { transform: rotateY(180deg) scale(1.05); /* Add scale for extra effect */ box-shadow: 0 12px 24px rgba(0,0,0,0.4); z-index: 10 !important; } .card-back-image { width: 100%; height: 100%; object-fit: cover; } /* Enhanced Animation Keyframes */ @keyframes cardEntry { 0% { opacity: 0; transform: translateY(-150px) scale(0.8) rotate(var(--rotation, 0deg)); } 70% { opacity: 1; transform: translateY(var(--translateY, 0px)) translateX(var(--translateX, 0px)) scale(1.05) rotate(var(--rotation, 0deg)); } 100% { opacity: 1; transform: translateY(var(--translateY, 0px)) translateX(var(--translateX, 0px)) scale(1) rotate(var(--rotation, 0deg)); } } @keyframes cardShift { 0% { transform: rotate(var(--rotation)) translateY(var(--translateY)) translateX(var(--translateX)); } 50% { transform: rotate(calc(var(--rotation) * 1.2)) translateY(calc(var(--translateY) * 1.1)) translateX(calc(var(--translateX) * 1.1)); } 100% { transform: rotate(var(--rotation)) translateY(var(--translateY)) translateX(var(--translateX)); } } @keyframes cardFlipEffect { 0% { transform: rotateY(0) scale(1); box-shadow: 0 8px 16px rgba(0,0,0,0.3); z-index: var(--zIndex); } 50% { transform: rotateY(90deg) scale(1.1); box-shadow: 0 16px 32px rgba(0,0,0,0.4); z-index: 100; } 100% { transform: rotateY(180deg) scale(1.05); box-shadow: 0 12px 24px rgba(0,0,0,0.4); z-index: 100; } } @keyframes backgroundPulse { 0% { opacity: 0.3; } 100% { opacity: 0.7; } } @keyframes textPulse { 0%, 100% { opacity: 0.7; transform: translateX(-50%) scale(1); } 50% { opacity: 1; transform: translateX(-50%) scale(1.05); } } /* Updated Card Pack Animation Styles */ #card-pack-container { position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; display: none; z-index: 1000; overflow: hidden; perspective: 2000px; /* Added perspective to container */ } .pack-background { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: radial-gradient(circle at 30% 30%, rgba(74, 144, 226, 0.1) 0%, transparent 50%), radial-gradient(circle at 70% 70%, rgba(46, 204, 113, 0.1) 0%, transparent 50%); animation: backgroundPulse 3s ease-in-out infinite alternate; } #card-stack { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 230px; height: 322px; perspective: 1000px; /* Added perspective to stack also */ } #pack-instruction { position: absolute; top: 70%; left: 50%; transform: translateX(-50%); color: #4a90e2; font-size: 18px; font-weight: bold; text-align: center; display: none; animation: textPulse 2s ease-in-out infinite; } /* Updated Card Back Styles */ .card-back { position: absolute; width: 230px; height: 322px; border-radius: 15px; transform-style: preserve-3d; transition: transform 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275); /* More dynamic easing */ cursor: pointer; box-shadow: 0 8px 16px rgba(0,0,0,0.3); } .card-back-face, .card-front-face { position: absolute; top: 0; left: 0; width: 100%; height: 100%; -webkit-backface-visibility: hidden; /* Safari compatibility fix */ backface-visibility: hidden; border-radius: 15px; overflow: hidden; } .card-back-face { background: linear-gradient(135deg, #1a1a2e, #16213e); z-index: 2; transform: rotateY(0deg); /* Explicit setting */ } .card-front-face { background: white; transform: rotateY(180deg); z-index: 1; } .card-back.flipped { transform: rotateY(180deg) scale(1.05); /* Add scale for extra effect */ box-shadow: 0 12px 24px rgba(0,0,0,0.4); z-index: 10 !important; } .card-back-image { width: 100%; height: 100%; object-fit: center; } /* Enhanced Animation Keyframes */ @keyframes cardEntry { 0% { opacity: 0; transform: translateY(-150px) scale(0.8) rotate(var(--rotation, 0deg)); } 70% { opacity: 1; transform: translateY(var(--translateY, 0px)) translateX(var(--translateX, 0px)) scale(1.05) rotate(var(--rotation, 0deg)); } 100% { opacity: 1; transform: translateY(var(--translateY, 0px)) translateX(var(--translateX, 0px)) scale(1) rotate(var(--rotation, 0deg)); } } @keyframes cardShift { 0% { transform: rotate(var(--rotation)) translateY(var(--translateY)) translateX(var(--translateX)); } 50% { transform: rotate(calc(var(--rotation) * 1.2)) translateY(calc(var(--translateY) * 1.1)) translateX(calc(var(--translateX) * 1.1)); } 100% { transform: rotate(var(--rotation)) translateY(var(--translateY)) translateX(var(--translateX)); } } @keyframes cardFlipEffect { 0% { transform: rotateY(0) scale(1); box-shadow: 0 8px 16px rgba(0,0,0,0.3); z-index: var(--zIndex); } 50% { transform: rotateY(90deg) scale(1.1); box-shadow: 0 16px 32px rgba(0,0,0,0.4); z-index: 100; } 100% { transform: rotateY(180deg) scale(1.05); box-shadow: 0 12px 24px rgba(0,0,0,0.4); z-index: 100; } } @keyframes backgroundPulse { 0% { opacity: 0.3; } 100% { opacity: 0.7; } } @keyframes textPulse { 0%, 100% { opacity: 0.7; transform: translateX(-50%) scale(1); } 50% { opacity: 1; transform: translateX(-50%) scale(1.05); } } .pack-card-content { width: 100%; height: 100%; /* background: white; */ border-radius: 12px; overflow: hidden; position: relative; box-shadow: inset 0 0 0 3px var(--rarity-color, #ccc); } .pack-card-content img { width: 100%; height: 100%; object-fit: center; } .pack-card-content .pack-card-info { display: none !important; } .pack-card-content .pack-card-name { display: none !important; } .pack-card-content .pack-card-rarity { display: none !important; } /* Fix for card front face always showing after flip */ .card-back.flipped .card-back-face { /* Hide the back face when card is flipped */ display: none; } .card-back.flipped .card-front-face { /* Keep the front face visible and prevent it from flipping back */ transform: rotateY(0deg); z-index: 2; }