Spaces:
Running
Running
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>GTA 6 Countdown</title> | |
| <link rel="preconnect" href="https://fonts.googleapis.com"> | |
| <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> | |
| <link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;600;800&family=Inter:wght@300;400;500;600;700&family=Playfair+Display:wght@500;600;700&display=swap" rel="stylesheet"> | |
| <link rel='stylesheet' href='https://use.fontawesome.com/releases/v5.3.1/css/all.css'> | |
| <style> | |
| * { | |
| margin: 0; | |
| padding: 0; | |
| box-sizing: border-box; | |
| } | |
| body { | |
| font-family: 'Montserrat', sans-serif; | |
| background-color: #000; | |
| color: #fff; | |
| overflow-x: hidden; | |
| position: relative; | |
| height: 100vh; | |
| width: 100vw; | |
| } | |
| #background { | |
| position: fixed; | |
| top: 0; | |
| left: 0; | |
| width: 100%; | |
| height: 100%; | |
| object-fit: cover; | |
| z-index: -1; | |
| filter: brightness(0.7) saturate(1.2); | |
| transition: opacity 1s ease; | |
| } | |
| .overlay { | |
| position: fixed; | |
| top: 0; | |
| left: 0; | |
| width: 100%; | |
| height: 100%; | |
| background: linear-gradient(to bottom, rgba(0, 50, 80, 0.2), rgba(0, 20, 40, 0.6)); | |
| z-index: -1; | |
| transition: background 1s ease; | |
| } | |
| .water-effect { | |
| position: fixed; | |
| top: 0; | |
| left: 0; | |
| width: 100%; | |
| height: 100%; | |
| background: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="0 0 100 100"><rect width="100" height="100" fill="none"/><path d="M0,20 Q25,40 50,20 T100,20 V100 H0 Z" fill="rgba(0,60,120,0.1)"/></svg>'); | |
| background-size: 200px; | |
| opacity: 0.3; | |
| animation: wave 10s linear infinite; | |
| z-index: -1; | |
| pointer-events: none; | |
| transition: opacity 1s ease; | |
| } | |
| @keyframes wave { | |
| 0% { background-position: 0 0; } | |
| 100% { background-position: 200px 0; } | |
| } | |
| .bubbles { | |
| position: fixed; | |
| width: 100%; | |
| height: 100%; | |
| overflow: hidden; | |
| z-index: 0; | |
| pointer-events: none; | |
| transition: opacity 1s ease; | |
| } | |
| .bubble { | |
| position: absolute; | |
| bottom: -100px; | |
| width: 40px; | |
| height: 40px; | |
| background: radial-gradient(circle at 30% 30%, rgba(255, 255, 255, 0.9), rgba(255, 255, 255, 0.3)); | |
| border-radius: 50%; | |
| opacity: 0.4; | |
| animation: rise 15s infinite ease-in; | |
| box-shadow: 0 0 5px rgba(255, 255, 255, 0.3); | |
| } | |
| .bubble:nth-child(1) { | |
| width: 20px; | |
| height: 20px; | |
| left: 20%; | |
| animation-duration: 16s; | |
| } | |
| .bubble:nth-child(2) { | |
| width: 25px; | |
| height: 25px; | |
| left: 80%; | |
| animation-duration: 18s; | |
| animation-delay: 3s; | |
| } | |
| .bubble:nth-child(3) { | |
| width: 30px; | |
| height: 30px; | |
| left: 55%; | |
| animation-duration: 17s; | |
| animation-delay: 6s; | |
| } | |
| @keyframes rise { | |
| 0% { | |
| bottom: -100px; | |
| transform: translateX(0) rotate(0); | |
| } | |
| 30% { | |
| transform: translateX(20px) rotate(10deg); | |
| } | |
| 60% { | |
| transform: translateX(-20px) rotate(-5deg); | |
| } | |
| 100% { | |
| bottom: 120%; | |
| transform: translateX(0) rotate(0); | |
| } | |
| } | |
| .container { | |
| position: relative; | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| justify-content: center; | |
| min-height: 100vh; | |
| z-index: 1; | |
| padding: 20px; | |
| overflow-y: auto; | |
| } | |
| .logo { | |
| width: 80%; | |
| max-width: 500px; | |
| margin-bottom: 30px; | |
| filter: drop-shadow(0 0 15px rgba(255, 255, 255, 0.5)); | |
| animation: underwater-logo 5s infinite ease-in-out; | |
| transform-origin: center; | |
| } | |
| @keyframes underwater-logo { | |
| 0% { | |
| transform: scale(1) translateY(0); | |
| filter: drop-shadow(0 0 10px rgba(255, 255, 255, 0.3)) brightness(1); | |
| } | |
| 25% { | |
| transform: scale(1.01) translateY(-5px); | |
| filter: drop-shadow(0 0 15px rgba(100, 200, 255, 0.6)) brightness(1.1); | |
| } | |
| 50% { | |
| transform: scale(1.02) translateY(0); | |
| filter: drop-shadow(0 0 20px rgba(255, 255, 255, 0.7)) brightness(1.2); | |
| } | |
| 75% { | |
| transform: scale(1.01) translateY(5px); | |
| filter: drop-shadow(0 0 15px rgba(100, 200, 255, 0.6)) brightness(1.1); | |
| } | |
| 100% { | |
| transform: scale(1) translateY(0); | |
| filter: drop-shadow(0 0 10px rgba(255, 255, 255, 0.3)) brightness(1); | |
| } | |
| } | |
| .nav-buttons { | |
| display: flex; | |
| gap: 20px; | |
| margin-bottom: 20px; | |
| flex-wrap: wrap; | |
| justify-content: center; | |
| width: 100%; | |
| max-width: 550px; | |
| } | |
| .tagline { | |
| font-size: 1.5rem; | |
| text-align: center; | |
| margin-bottom: 25px; | |
| font-weight: 600; | |
| color: #ffffff; | |
| text-shadow: 0 0 15px rgba(100, 200, 255, 0.8); | |
| opacity: 0.9; | |
| max-width: 800px; | |
| letter-spacing: 1px; | |
| background: linear-gradient(to right, #ffffff, #a0d8ff, #ffffff); | |
| -webkit-background-clip: text; | |
| background-clip: text; | |
| -webkit-text-fill-color: transparent; | |
| transition: text-shadow 1s ease, background 1s ease; | |
| } | |
| .forest-tagline { | |
| text-shadow: 0 0 15px rgba(142, 157, 98, 0.8); | |
| background: linear-gradient(to right, #ffffff, #6b8445, #ffffff); | |
| -webkit-background-clip: text; | |
| background-clip: text; | |
| -webkit-text-fill-color: transparent; | |
| } | |
| .countdown-container { | |
| display: flex; | |
| justify-content: center; | |
| flex-wrap: wrap; | |
| gap: 15px; | |
| margin-bottom: 30px; | |
| perspective: 1000px; | |
| } | |
| .countdown-box { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| background: rgba(0, 20, 40, 0.7); | |
| backdrop-filter: blur(10px); | |
| border-radius: 15px; | |
| padding: 20px; | |
| min-width: 120px; | |
| border: 1px solid rgba(100, 200, 255, 0.2); | |
| box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3), 0 0 15px rgba(100, 200, 255, 0.2); | |
| transition: transform 0.3s ease, box-shadow 0.3s ease, background 1s ease, border-color 1s ease; | |
| transform-style: preserve-3d; | |
| } | |
| .forest-countdown-box { | |
| background: rgba(0, 90, 5, 0.7); | |
| border: 1px solid rgba(142, 157, 98, 0.2); | |
| box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3), 0 0 15px rgba(142, 157, 98, 0.2); | |
| } | |
| .countdown-box:hover { | |
| transform: translateY(-8px) rotateX(5deg); | |
| box-shadow: 0 15px 35px rgba(0, 0, 0, 0.4), 0 0 20px rgba(100, 200, 255, 0.3); | |
| border-color: rgba(100, 200, 255, 0.4); | |
| } | |
| .forest-countdown-box:hover { | |
| box-shadow: 0 15px 35px rgba(0, 0, 0, 0.4), 0 0 20px rgba(142, 157, 98, 0.3); | |
| border-color: rgba(142, 157, 98, 0.4); | |
| } | |
| .countdown-value { | |
| font-size: 3.5rem; | |
| font-weight: 800; | |
| color: #ffffff; | |
| margin-bottom: 8px; | |
| text-shadow: 0 0 10px rgba(100, 200, 255, 0.8); | |
| background: linear-gradient(to bottom, #ffffff, #a0d8ff); | |
| -webkit-background-clip: text; | |
| background-clip: text; | |
| -webkit-text-fill-color: transparent; | |
| transition: text-shadow 1s ease, background 1s ease; | |
| } | |
| .forest-countdown-value { | |
| text-shadow: 0 0 10px rgba(142, 157, 98, 0.8); | |
| background: linear-gradient(to bottom, #ffffff, #6b8445); | |
| -webkit-background-clip: text; | |
| background-clip: text; | |
| -webkit-text-fill-color: transparent; | |
| } | |
| .countdown-label { | |
| font-size: 0.9rem; | |
| font-weight: 500; | |
| color: #a0d8ff; | |
| text-transform: uppercase; | |
| letter-spacing: 2px; | |
| transition: color 1s ease; | |
| } | |
| .forest-countdown-label { | |
| color: #8E9D62; | |
| } | |
| /* Glass Button Styles */ | |
| .button-wrap { | |
| position: relative; | |
| z-index: 2; | |
| border-radius: 999vw; | |
| background: transparent; | |
| pointer-events: none; | |
| transition: all 400ms cubic-bezier(0.25, 1, 0.5, 1); | |
| margin: 0 5px; | |
| flex-grow: 1; | |
| max-width: 250px; | |
| } | |
| .button-shadow { | |
| --shadow-cuttoff-fix: 2em; | |
| position: absolute; | |
| width: calc(100% + var(--shadow-cuttoff-fix)); | |
| height: calc(100% + var(--shadow-cuttoff-fix)); | |
| top: calc(0% - var(--shadow-cuttoff-fix) / 2); | |
| left: calc(0% - var(--shadow-cuttoff-fix) / 2); | |
| filter: blur(clamp(2px, 0.125em, 12px)); | |
| -webkit-filter: blur(clamp(2px, 0.125em, 12px)); | |
| -moz-filter: blur(clamp(2px, 0.125em, 12px)); | |
| -ms-filter: blur(clamp(2px, 0.125em, 12px)); | |
| overflow: visible; | |
| pointer-events: none; | |
| transition: all 1s ease; | |
| } | |
| .button-shadow::after { | |
| content: ""; | |
| position: absolute; | |
| z-index: 0; | |
| inset: 0; | |
| border-radius: 999vw; | |
| background: linear-gradient(180deg, rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.1)); | |
| width: calc(100% - var(--shadow-cuttoff-fix) - 0.25em); | |
| height: calc(100% - var(--shadow-cuttoff-fix) - 0.25em); | |
| top: calc(var(--shadow-cuttoff-fix) - 0.5em); | |
| left: calc(var(--shadow-cuttoff-fix) - 0.875em); | |
| padding: 0.125em; | |
| box-sizing: border-box; | |
| mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0); | |
| mask-composite: exclude; | |
| transition: all 400ms cubic-bezier(0.25, 1, 0.5, 1); | |
| overflow: visible; | |
| opacity: 1; | |
| } | |
| button { | |
| /* Basic Styling */ | |
| --border-width: clamp(1px, 0.0625em, 4px); | |
| all: unset; | |
| width: 100%; | |
| cursor: pointer; | |
| position: relative; | |
| -webkit-tap-highlight-color: rgba(0, 0, 0, 0); | |
| pointer-events: auto; | |
| z-index: 3; | |
| background: linear-gradient( | |
| -75deg, | |
| rgba(255, 255, 255, 0.03), | |
| rgba(255, 255, 255, 0.1), | |
| rgba(255, 255, 255, 0.03) | |
| ); | |
| border-radius: 999vw; | |
| box-shadow: inset 0 0.125em 0.125em rgba(0, 0, 0, 0.05), | |
| inset 0 -0.125em 0.125em rgba(255, 255, 255, 0.3), | |
| 0 0.25em 0.125em -0.125em rgba(0, 0, 0, 0.2), | |
| 0 0 0.1em 0.25em inset rgba(255, 255, 255, 0.15), | |
| 0 0 0 0 rgba(255, 255, 255, 1); | |
| backdrop-filter: blur(10px); | |
| -webkit-backdrop-filter: blur(10px); | |
| -moz-backdrop-filter: blur(10px); | |
| -ms-backdrop-filter: blur(10px); | |
| transition: all 400ms cubic-bezier(0.25, 1, 0.5, 1), color 1s ease, text-shadow 1s ease, background 1s ease; | |
| display: flex; | |
| justify-content: center; | |
| align-items: center; | |
| text-align: center; | |
| } | |
| button:hover { | |
| transform: scale(0.975); | |
| backdrop-filter: blur(12px); | |
| -webkit-backdrop-filter: blur(12px); | |
| -moz-backdrop-filter: blur(12px); | |
| -ms-backdrop-filter: blur(12px); | |
| box-shadow: inset 0 0.125em 0.125em rgba(0, 0, 0, 0.05), | |
| inset 0 -0.125em 0.125em rgba(255, 255, 255, 0.3), | |
| 0 0.15em 0.05em -0.1em rgba(0, 0, 0, 0.25), | |
| 0 0 0.05em 0.1em inset rgba(255, 255, 255, 0.4), | |
| 0 0 0 0 rgba(255, 255, 255, 1); | |
| background: linear-gradient( | |
| -75deg, | |
| rgba(255, 255, 255, 0.05), | |
| rgba(255, 255, 255, 0.15), | |
| rgba(255, 255, 255, 0.05) | |
| ); | |
| } | |
| button span { | |
| position: relative; | |
| display: block; | |
| width: 100%; | |
| user-select: none; | |
| -webkit-user-select: none; | |
| -moz-user-select: none; | |
| -ms-user-select: none; | |
| font-family: 'Montserrat', sans-serif; | |
| letter-spacing: 0.5px; | |
| font-weight: 800; /* Changed from 600 to 800 for bolder text */ | |
| font-size: 1rem; | |
| color: white; | |
| -webkit-font-smoothing: antialiased; | |
| -moz-osx-font-smoothing: grayscale; | |
| text-shadow: 0 0 8px rgba(100, 200, 255, 0.5); | |
| transition: all 400ms cubic-bezier(0.25, 1, 0.5, 1), text-shadow 1s ease, background 1s ease; | |
| padding: 0.8em 1.5em; | |
| background: linear-gradient(to bottom, #ffffff, #a0d8ff); | |
| -webkit-background-clip: text; | |
| background-clip: text; | |
| -webkit-text-fill-color: transparent; | |
| } | |
| .forest-button span { | |
| text-shadow: 0 0 8px rgba(142, 157, 98, 0.5); | |
| background: linear-gradient(to bottom, #ffffff, #6b8445); | |
| -webkit-background-clip: text; | |
| background-clip: text; | |
| -webkit-text-fill-color: transparent; | |
| } | |
| button:hover span { | |
| text-shadow: 0 0 12px rgba(100, 200, 255, 0.7); | |
| } | |
| .forest-button:hover span { | |
| text-shadow: 0 0 12px rgba(142, 157, 98, 0.7); | |
| } | |
| button span::after { | |
| content: ""; | |
| display: block; | |
| position: absolute; | |
| z-index: 1; | |
| width: calc(100% - var(--border-width)); | |
| height: calc(100% - var(--border-width)); | |
| top: calc(0% + var(--border-width) / 2); | |
| left: calc(0% + var(--border-width) / 2); | |
| box-sizing: border-box; | |
| border-radius: 999vw; | |
| overflow: clip; | |
| background: linear-gradient( | |
| -45deg, | |
| rgba(255, 255, 255, 0) 0%, | |
| rgba(255, 255, 255, 0.3) 40% 50%, | |
| rgba(255, 255, 255, 0) 55% | |
| ); | |
| z-index: 3; | |
| mix-blend-mode: screen; | |
| pointer-events: none; | |
| background-size: 200% 200%; | |
| background-position: 0% 50%; | |
| background-repeat: no-repeat; | |
| transition: background-position calc(400ms * 1.25) cubic-bezier(0.25, 1, 0.5, 1); | |
| } | |
| button:hover span::after { | |
| background-position: 25% 50%; | |
| } | |
| button:active span::after { | |
| background-position: 50% 15%; | |
| } | |
| button::after { | |
| content: ""; | |
| position: absolute; | |
| z-index: 1; | |
| inset: 0; | |
| border-radius: 999vw; | |
| width: calc(100% + var(--border-width)); | |
| height: calc(100% + var(--border-width)); | |
| top: calc(0% - var(--border-width) / 2); | |
| left: calc(0% - var(--border-width) / 2); | |
| padding: var(--border-width); | |
| box-sizing: border-box; | |
| background: conic-gradient( | |
| from -75deg at 50% 50%, | |
| rgba(0, 0, 0, 0.3), | |
| rgba(0, 0, 0, 0) 5% 40%, | |
| rgba(0, 0, 0, 0.3) 50%, | |
| rgba(0, 0, 0, 0) 60% 95%, | |
| rgba(0, 0, 0, 0.3) | |
| ), | |
| linear-gradient(180deg, rgba(255, 255, 255, 0.4), rgba(255, 255, 255, 0.4)); | |
| mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0); | |
| mask-composite: exclude; | |
| transition: all 400ms cubic-bezier(0.25, 1, 0.5, 1); | |
| box-shadow: inset 0 0 0 calc(var(--border-width) / 2) rgba(255, 255, 255, 0.4); | |
| } | |
| button:hover::after { | |
| --angle-1: -125deg; | |
| } | |
| button:active::after { | |
| --angle-1: -75deg; | |
| } | |
| .button-wrap:has(button:hover) .button-shadow { | |
| filter: blur(clamp(2px, 0.0625em, 6px)); | |
| -webkit-filter: blur(clamp(2px, 0.0625em, 6px)); | |
| -moz-filter: blur(clamp(2px, 0.0625em, 6px)); | |
| -ms-filter: blur(clamp(2px, 0.0625em, 6px)); | |
| transition: filter 400ms cubic-bezier(0.25, 1, 0.5, 1); | |
| } | |
| .button-wrap:has(button:hover) .button-shadow::after { | |
| top: calc(var(--shadow-cuttoff-fix) - 0.875em); | |
| opacity: 1; | |
| } | |
| .button-wrap:has(button:active) { | |
| transform: rotate3d(1, 0, 0, 25deg); | |
| } | |
| .button-wrap:has(button:active) button { | |
| box-shadow: inset 0 0.125em 0.125em rgba(0, 0, 0, 0.05), | |
| inset 0 -0.125em 0.125em rgba(255, 255, 255, 0.3), | |
| 0 0.125em 0.125em -0.125em rgba(0, 0, 0, 0.2), | |
| 0 0 0.1em 0.25em inset rgba(255, 255, 255, 0.15), | |
| 0 0.225em 0.05em 0 rgba(0, 0, 0, 0.05), | |
| 0 0.25em 0 0 rgba(255, 255, 255, 0.5), | |
| inset 0 0.25em 0.05em 0 rgba(0, 0, 0, 0.15); | |
| } | |
| .button-wrap:has(button:active) .button-shadow { | |
| filter: blur(clamp(2px, 0.125em, 12px)); | |
| -webkit-filter: blur(clamp(2px, 0.125em, 12px)); | |
| -moz-filter: blur(clamp(2px, 0.125em, 12px)); | |
| -ms-filter: blur(clamp(2px, 0.125em, 12px)); | |
| } | |
| .button-wrap:has(button:active) .button-shadow::after { | |
| top: calc(var(--shadow-cuttoff-fix) - 0.5em); | |
| opacity: 0.75; | |
| } | |
| .button-wrap:has(button:active) span { | |
| text-shadow: 0.025em 0.25em 0.05em rgba(0, 0, 0, 0.12); | |
| } | |
| #convert-button { | |
| margin-top: 15px; | |
| max-width: 280px; /* Increased from 200px to 280px */ | |
| } | |
| #convert-button button span { | |
| font-size: 1.2rem; /* Increased from 1rem to 1.2rem */ | |
| padding: 0.9em 1.6em; /* Slightly increased padding */ | |
| } | |
| .scene-button { | |
| position: fixed; | |
| right: 20px; | |
| top: 50%; | |
| transform: translateY(-50%); | |
| z-index: 10; | |
| width: 60px; | |
| height: 60px; | |
| border-radius: 50%; | |
| display: flex; | |
| justify-content: center; | |
| align-items: center; | |
| background: rgba(255, 255, 255, 0.1); | |
| backdrop-filter: blur(10px); | |
| -webkit-backdrop-filter: blur(10px); | |
| box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3), 0 0 15px rgba(100, 200, 255, 0.2); | |
| border: 1px solid rgba(255, 255, 255, 0.2); | |
| transition: background 0.3s ease, transform 0.3s ease; | |
| cursor: pointer; | |
| } | |
| .scene-button:hover { | |
| transform: translateY(-50%) scale(1.1); | |
| background: rgba(255, 255, 255, 0.2); | |
| } | |
| .scene-button span { | |
| font-size: 1.6rem; | |
| font-weight: 800; | |
| color: white; | |
| text-shadow: 0 0 8px rgba(100, 200, 255, 0.5); | |
| transition: text-shadow 1s ease; | |
| } | |
| .scene-button.forest-arrow span { | |
| text-shadow: 0 0 8px rgba(142, 157, 98, 0.5); | |
| } | |
| @media (max-width: 768px) { | |
| .countdown-container { | |
| gap: 12px; | |
| } | |
| .countdown-box { | |
| min-width: 90px; | |
| padding: 12px; | |
| } | |
| .countdown-value { | |
| font-size: 2.4rem; | |
| } | |
| .countdown-label { | |
| font-size: 0.7rem; | |
| } | |
| .tagline { | |
| font-size: 1.2rem; | |
| margin-bottom: 25px; | |
| } | |
| .logo { | |
| max-width: 280px; | |
| margin-bottom: 20px; | |
| } | |
| button span { | |
| font-size: 0.9rem; | |
| padding: 0.7em 1.2em; | |
| } | |
| #convert-button button span { | |
| font-size: 1.1rem; | |
| padding: 0.8em 1.4em; | |
| } | |
| .nav-buttons { | |
| gap: 12px; | |
| margin-bottom: 15px; | |
| } | |
| .scene-button { | |
| width: 50px; | |
| height: 50px; | |
| right: 10px; | |
| } | |
| .scene-button span { | |
| font-size: 1.4rem; | |
| } | |
| } | |
| @media (max-width: 480px) { | |
| .countdown-container { | |
| gap: 8px; | |
| } | |
| .countdown-box { | |
| min-width: 65px; | |
| padding: 8px; | |
| } | |
| .countdown-value { | |
| font-size: 1.9rem; | |
| } | |
| .countdown-label { | |
| font-size: 0.6rem; | |
| letter-spacing: 1px; | |
| } | |
| .tagline { | |
| font-size: 1rem; | |
| margin-bottom: 20px; | |
| } | |
| .logo { | |
| max-width: 220px; | |
| margin-bottom: 15px; | |
| } | |
| button span { | |
| font-size: 0.8rem; | |
| padding: 0.6em 1em; | |
| } | |
| #convert-button { | |
| max-width: 220px; | |
| } | |
| #convert-button button span { | |
| font-size: 1rem; | |
| padding: 0.7em 1.2em; | |
| } | |
| .nav-buttons { | |
| gap: 8px; | |
| margin-bottom: 12px; | |
| } | |
| .scene-button { | |
| width: 40px; | |
| height: 40px; | |
| right: 5px; | |
| } | |
| .scene-button span { | |
| font-size: 1.2rem; | |
| } | |
| } | |
| /* Time Converter Modal Styles */ | |
| .modal-overlay { | |
| position: fixed; | |
| top: 0; | |
| left: 0; | |
| width: 100%; | |
| height: 100%; | |
| background: rgba(0, 20, 40, 0.85); | |
| backdrop-filter: blur(8px); | |
| -webkit-backdrop-filter: blur(8px); | |
| z-index: 100; | |
| display: flex; | |
| justify-content: center; | |
| align-items: center; | |
| opacity: 0; | |
| visibility: hidden; | |
| transition: opacity 0.4s ease, visibility 0.4s ease, background 1s ease; | |
| } | |
| .forest-modal { | |
| background: rgba(0, 90, 5, 0.85); | |
| } | |
| .modal-overlay.active { | |
| opacity: 1; | |
| visibility: visible; | |
| } | |
| .time-card-container { | |
| position: relative; | |
| width: 100%; | |
| max-width: 1000px; /* Increased from 380px to 800px for wider card */ | |
| aspect-ratio: 16 / 8; /* Changed from 9/16 to 16/9 for wider card */ | |
| max-height: 90vh; | |
| transform-style: preserve-3d; | |
| transform: perspective(1000px) rotateX(0deg) rotateY(0deg) scale(0.9); | |
| transition: transform 0.6s cubic-bezier(0.23, 1, 0.32, 1); | |
| opacity: 0; | |
| } | |
| .modal-overlay.active .time-card-container { | |
| transform: perspective(1000px) rotateX(0deg) rotateY(0deg) scale(1); | |
| opacity: 1; | |
| transition: transform 0.6s cubic-bezier(0.23, 1, 0.32, 1), opacity 0.4s ease 0.2s; | |
| } | |
| .time-card { | |
| position: relative; | |
| width: 100%; | |
| height: 100%; | |
| border-radius: 1.75rem; | |
| overflow: hidden; | |
| background-size: cover; | |
| background-position: center; | |
| box-shadow: | |
| 0 0 0 2px rgba(0, 160, 255, 0.4), | |
| 0 0 25px 8px rgba(0, 160, 255, 0.2); | |
| transform-style: preserve-3d; | |
| transition: transform 0.6s cubic-bezier(0.23, 1, 0.32, 1), | |
| box-shadow 0.4s ease-out; | |
| cursor: grab; | |
| will-change: transform, box-shadow; | |
| } | |
| .forest-time-card { | |
| box-shadow: | |
| 0 0 0 2px rgba(142, 157, 98, 0.4), | |
| 0 0 25px 8px rgba(142, 157, 98, 0.2); | |
| } | |
| .card-inner-border { | |
| position: absolute; | |
| inset: 14px; | |
| border-radius: 1.375rem; | |
| pointer-events: none; | |
| z-index: 10; | |
| box-shadow: | |
| inset 0.5px 0.5px 1.5px rgba(100, 200, 255, 0.6), | |
| inset -1px -1px 1px rgba(0, 60, 120, 0.5), | |
| inset 3px 3px 6px rgba(0, 0, 0, 0.25); | |
| transform: translateZ(30px); | |
| will-change: transform; | |
| border: 1px solid rgba(100, 200, 255, 0.2); | |
| transition: box-shadow 1s ease, border-color 1s ease; | |
| } | |
| .forest-card-inner-border { | |
| box-shadow: | |
| inset 0.5px 0.5px 1.5px rgba(142, 157, 98, 0.6), | |
| inset -1px -1px 1px rgba(0, 90, 5, 0.5), | |
| inset 3px 3px 6px rgba(0, 0, 0, 0.25); | |
| border: 1px solid rgba(142, 157, 98, 0.2); | |
| } | |
| .card-content { | |
| position: absolute; | |
| inset: 14px; | |
| border-radius: 1.375rem; | |
| overflow: hidden; | |
| display: flex; | |
| flex-direction: column; | |
| z-index: 5; | |
| transform: translateZ(20px); | |
| will-change: transform; | |
| background: rgba(0, 20, 40, 0.85); | |
| padding: 20px; | |
| transition: background 1s ease; | |
| } | |
| .forest-card-content { | |
| background: rgba(0, 90, 5, 0.85); | |
| } | |
| .gradient-card-overlay { | |
| position: absolute; | |
| bottom: 0; left: 0; right: 0; | |
| height: 75%; | |
| background: linear-gradient(to top, rgba(0, 20, 40, 0.95) 0%, rgba(0, 40, 80, 0.75) 50%, rgba(0, 60, 120, 0.5) 100%); | |
| pointer-events: none; | |
| z-index: 4; | |
| transition: background 1s ease; | |
| } | |
| .forest-gradient-card-overlay { | |
| background: linear-gradient(to top, rgba(0, 90, 5, 0.95) 0%, rgba(0, 90, 5, 0.75) 50%, rgba(0, 90, 5, 0.5) 100%); | |
| } | |
| .card-title { | |
| color: #fff; | |
| font-family: 'Montserrat', sans-serif; | |
| text-align: center; | |
| font-size: 3rem; /* Increased from 1.8rem to 2.4rem */ | |
| font-weight: 800; | |
| margin-bottom: 12px; | |
| letter-spacing: 1px; | |
| transform: translateZ(40px); | |
| will-change: transform; | |
| text-shadow: 0 0 15px rgba(100, 200, 255, 0.8); | |
| background: linear-gradient(to bottom, #ffffff, #a0d8ff); | |
| -webkit-background-clip: text; | |
| background-clip: text; | |
| -webkit-text-fill-color: transparent; | |
| position: relative; | |
| z-index: 15; | |
| transition: text-shadow 1s ease, background 1s ease; | |
| } | |
| .forest-card-title { | |
| text-shadow: 0 0 15px rgba(142, 157, 98, 0.8); | |
| background: linear-gradient(to bottom, #ffffff, #6b8445); | |
| -webkit-background-clip: text; | |
| background-clip: text; | |
| -webkit-text-fill-color: transparent; | |
| } | |
| .card-subtitle { | |
| color: #a0d8ff; | |
| text-align: center; | |
| font-size: 1.5rem; /* Increased from 1.1rem to 1.3rem */ | |
| font-weight: 600; | |
| margin-bottom: 30px; | |
| transform: translateZ(35px); | |
| will-change: transform; | |
| position: relative; | |
| z-index: 15; | |
| transition: color 1s ease; | |
| } | |
| .forest-card-subtitle { | |
| color: #8E9D62; | |
| } | |
| .tabs-container { | |
| display: flex; | |
| gap: 15px; | |
| justify-content: center; | |
| margin-bottom: 20px; | |
| z-index: 15; | |
| position: relative; | |
| transform: translateZ(35px); | |
| } | |
| .tab { | |
| background: rgba(0, 40, 80, 0.6); | |
| border: 1px solid rgba(100, 200, 255, 0.3); | |
| border-radius: 15px; | |
| padding: 12px 25px; | |
| color: #fff; | |
| font-size: 1.3rem; | |
| font-weight: 600; | |
| cursor: pointer; | |
| transition: all 0.3s ease, background 1s ease, border-color 1s ease; | |
| box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2); | |
| } | |
| .forest-tab { | |
| background: rgba(0, 90, 5, 0.6); | |
| border: 1px solid rgba(142, 157, 98, 0.3); | |
| } | |
| .tab.active { | |
| background: rgba(0, 120, 210, 0.6); | |
| border-color: rgba(100, 200, 255, 0.8); | |
| box-shadow: 0 0 15px rgba(100, 200, 255, 0.5); | |
| transform: translateY(-3px); | |
| } | |
| .forest-tab.active { | |
| background: rgba(0, 90, 5, 0.6); | |
| border-color: rgba(142, 157, 98, 0.8); | |
| box-shadow: 0 0 15px rgba(142, 157, 98, 0.5); | |
| } | |
| .tab:hover:not(.active) { | |
| background: rgba(0, 80, 160, 0.6); | |
| transform: translateY(-2px); | |
| } | |
| .forest-tab:hover:not(.active) { | |
| background: rgba(0, 90, 5, 0.6); | |
| } | |
| .tab-content { | |
| display: none; | |
| z-index: 15; | |
| position: relative; | |
| transform: translateZ(25px); | |
| will-change: transform; | |
| height: 100%; | |
| } | |
| .tab-content.active { | |
| display: block; | |
| } | |
| /* Converter Tab Styles */ | |
| .unit-selector { | |
| display: flex; | |
| flex-wrap: wrap; | |
| gap: 12px; /* Increased from 8px to 12px */ | |
| justify-content: center; | |
| margin-bottom: 25px; /* Increased from 20px to 25px */ | |
| position: relative; | |
| z-index: 15; | |
| transform: translateZ(30px); | |
| will-change: transform; | |
| } | |
| .time-unit { | |
| background: rgba(0, 40, 80, 0.6); | |
| border: 1px solid rgba(100, 200, 255, 0.3); | |
| border-radius: 15px; | |
| padding: 12px 22px; /* Increased from 8px 12px to 10px 18px */ | |
| color: #fff; | |
| font-size: 1.3rem; /* Increased from 0.9rem to 1.1rem */ | |
| font-weight: 600; | |
| cursor: pointer; | |
| transition: all 0.3s ease, background 1s ease, border-color 1s ease; | |
| box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2); | |
| } | |
| .forest-time-unit { | |
| background: rgba(0, 90, 5, 0.6); | |
| border: 1px solid rgba(142, 157, 98, 0.3); | |
| } | |
| .time-unit.active { | |
| background: rgba(0, 120, 210, 0.6); | |
| border-color: rgba(100, 200, 255, 0.8); | |
| box-shadow: 0 0 15px rgba(100, 200, 255, 0.5); | |
| transform: translateY(-3px); /* Increased from -2px to -3px */ | |
| } | |
| .forest-time-unit.active { | |
| background: rgba(0, 90, 5, 0.6); | |
| border-color: rgba(142, 157, 98, 0.8); | |
| box-shadow: 0 0 15px rgba(142, 157, 98, 0.5); | |
| } | |
| .time-unit:hover:not(.active) { | |
| background: rgba(0, 80, 160, 0.6); | |
| transform: translateY(-2px); /* Increased from -1px to -2px */ | |
| } | |
| .forest-time-unit:hover:not(.active) { | |
| background: rgba(0, 90, 5, 0.6); | |
| } | |
| .time-display { | |
| background: rgba(0, 30, 60, 0.8); | |
| border-radius: 18px; /* Increased from 15px to 18px */ | |
| padding: 20px; /* Increased from 15px to 20px */ | |
| margin-bottom: 25px; /* Increased from 20px to 25px */ | |
| border: 1px solid rgba(100, 200, 255, 0.2); | |
| box-shadow: 0 8px 20px rgba(0, 0, 0, 0.3), inset 0 1px 1px rgba(255, 255, 255, 0.1); | |
| position: relative; | |
| z-index: 15; | |
| transform: translateZ(25px); | |
| will-change: transform; | |
| transition: background 1s ease, border-color 1s ease, box-shadow 1s ease; | |
| } | |
| .forest-time-display { | |
| background: rgba(0, 90, 5, 0.8); | |
| border: 1px solid rgba(142, 157, 98, 0.2); | |
| box-shadow: 0 8px 20px rgba(0, 0, 0, 0.3), inset 0 1px 1px rgba(142, 157, 98, 0.1); | |
| } | |
| .time-value { | |
| font-size: 4rem; /* Increased from 2.4rem to 3.2rem */ | |
| font-weight: 800; | |
| text-align: center; | |
| color: #fff; | |
| text-shadow: 0 0 22px rgba(100, 200, 255, 0.8); /* Increased blur from 18px to 22px */ | |
| margin-bottom: 12px; /* Increased from 5px to 8px */ | |
| background: linear-gradient(to bottom, #ffffff, #a0d8ff); | |
| -webkit-background-clip: text; | |
| background-clip: text; | |
| -webkit-text-fill-color: transparent; | |
| transition: text-shadow 1s ease, background 1s ease; | |
| } | |
| .forest-time-value { | |
| text-shadow: 0 0 22px rgba(142, 157, 98, 0.8); | |
| background: linear-gradient(to bottom, #ffffff, #6b8445); | |
| -webkit-background-clip: text; | |
| background-clip: text; | |
| -webkit-text-fill-color: transparent; | |
| } | |
| .time-label { | |
| font-size: 1.3rem; /* Increased from 0.9rem to 1.1rem */ | |
| text-align: center; | |
| color: #a0d8ff; | |
| letter-spacing: 1.2px; | |
| transition: color 1s ease; | |
| } | |
| .forest-time-label { | |
| color: #8E9D62; | |
| } | |
| .timezone-section { | |
| margin-top: 8px; /* Increased from 5px to 8px */ | |
| position: relative; | |
| z-index: 15; | |
| transform: translateZ(20px); | |
| will-change: transform; | |
| } | |
| .timezone-toggle { | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| gap: 10px; /* Increased from 8px to 10px */ | |
| margin-bottom: 12px; /* Increased from 10px to 12px */ | |
| } | |
| .toggle-switch { | |
| position: relative; | |
| width: 50px; /* Increased from 40px to 50px */ | |
| height: 24px; /* Increased from 20px to 24px */ | |
| } | |
| .toggle-switch input { | |
| opacity: 0; | |
| width: 0; | |
| height: 0; | |
| } | |
| .toggle-slider { | |
| position: absolute; | |
| cursor: pointer; | |
| top: 0; | |
| left: 0; | |
| right: 0; | |
| bottom: 0; | |
| background-color: rgba(0, 40, 80, 0.6); | |
| border: 1px solid rgba(100, 200, 255, 0.3); | |
| transition: 0.4s, background-color 1s ease, border-color 1s ease; | |
| border-radius: 30px; | |
| } | |
| .forest-toggle-slider { | |
| background-color: rgba(0, 90, 5, 0.6); | |
| border: 1px solid rgba(142, 157, 98, 0.3); | |
| } | |
| .toggle-slider:before { | |
| position: absolute; | |
| content: ""; | |
| height: 18px; /* Increased from 14px to 18px */ | |
| width: 18px; /* Increased from 14px to 18px */ | |
| left: 3px; | |
| bottom: 2px; | |
| background-color: white; | |
| transition: 0.4s; | |
| border-radius: 50%; | |
| } | |
| input:checked + .toggle-slider { | |
| background-color: rgba(0, 120, 210, 0.6); | |
| border-color: rgba(100, 200, 255, 0.8); | |
| } | |
| input:checked + .forest-toggle-slider { | |
| background-color: rgba(0, 90, 5, 0.6); | |
| border-color: rgba(142, 157, 98, 0.8); | |
| } | |
| input:checked + .toggle-slider:before { | |
| transform: translateX(25px); /* Increased from 19px to 25px */ | |
| } | |
| .toggle-label { | |
| color: #a0d8ff; | |
| font-size: 1.1rem; /* Increased from 0.9rem to 1.1rem */ | |
| font-weight: 500; | |
| transition: color 1s ease; | |
| } | |
| .forest-toggle-label { | |
| color: #8E9D62; | |
| } | |
| .timezone-info { | |
| text-align: center; | |
| color: #ffffff; | |
| font-size: 1.1rem; /* Increased from 0.9rem to 1.1rem */ | |
| background: rgba(0, 40, 80, 0.6); | |
| border-radius: 12px; /* Increased from 10px to 12px */ | |
| padding: 12px; /* Increased from 10px to 12px */ | |
| border: 1px solid rgba(100, 200, 255, 0.2); | |
| transition: background 1s ease, border-color 1s ease; | |
| } | |
| .forest-timezone-info { | |
| background: rgba(0, 90, 5, 0.6); | |
| border: 1px solid rgba(142, 157, 98, 0.2); | |
| } | |
| /* Global Release Times Tab Styles */ | |
| .countries-container { | |
| height: 350px; | |
| overflow-y: auto; | |
| padding-right: 15px; | |
| margin-bottom: 20px; | |
| background: rgba(0, 30, 60, 0.5); | |
| border-radius: 15px; | |
| border: 1px solid rgba(100, 200, 255, 0.2); | |
| box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.3); | |
| transition: background 1s ease, border-color 1s ease; | |
| } | |
| .forest-countries-container { | |
| background: rgba(0, 90, 5, 0.5); | |
| border: 1px solid rgba(142, 157, 98, 0.2); | |
| } | |
| .countries-container::-webkit-scrollbar { | |
| width: 10px; | |
| } | |
| .countries-container::-webkit-scrollbar-track { | |
| background: rgba(0, 30, 60, 0.3); | |
| border-radius: 10px; | |
| transition: background 1s ease; | |
| } | |
| .forest-countries-container::-webkit-scrollbar-track { | |
| background: rgba(0, 90, 5, 0.3); | |
| } | |
| .countries-container::-webkit-scrollbar-thumb { | |
| background: rgba(0, 120, 210, 0.6); | |
| border-radius: 10px; | |
| border: 2px solid rgba(0, 30, 60, 0.3); | |
| transition: background 1s ease, border-color 1s ease; | |
| } | |
| .forest-countries-container::-webkit-scrollbar-thumb { | |
| background: rgba(0, 90, 5, 0.6); | |
| border: 2px solid rgba(0, 90, 5, 0.3); | |
| } | |
| .countries-container::-webkit-scrollbar-thumb:hover { | |
| background: rgba(0, 160, 255, 0.7); | |
| } | |
| .forest-countries-container::-webkit-scrollbar-thumb:hover { | |
| background: rgba(0, 90, 5, 0.7); | |
| } | |
| .country-item { | |
| display: flex; | |
| justify-content: space-between; | |
| padding: 15px; | |
| border-bottom: 1px solid rgba(100, 200, 255, 0.2); | |
| transition: all 0.3s ease, border-color 1s ease, background 1s ease; | |
| } | |
| .forest-country-item { | |
| border-bottom: 1px solid rgba(142, 157, 98, 0.2); | |
| } | |
| .country-item:hover { | |
| background: rgba(0, 80, 160, 0.3); | |
| } | |
| .forest-country-item:hover { | |
| background: rgba(0, 90, 5, 0.3); | |
| } | |
| .country-item:last-child { | |
| border-bottom: none; | |
| } | |
| .country-name { | |
| font-weight: 600; | |
| color: #ffffff; | |
| font-size: 1.1rem; | |
| } | |
| .country-time { | |
| color: #a0d8ff; | |
| font-size: 1.1rem; | |
| transition: color 1s ease; | |
| } | |
| .forest-country-time { | |
| color: #8E9D62; | |
| } | |
| .release-date-header { | |
| text-align: center; | |
| color: #ffffff; | |
| font-size: 1.3rem; | |
| font-weight: 700; | |
| margin-bottom: 15px; | |
| text-shadow: 0 0 10px rgba(100, 200, 255, 0.6); | |
| transition: text-shadow 1s ease; | |
| } | |
| .forest-release-date-header { | |
| text-shadow: 0 0 10px rgba(142, 157, 98, 0.6); | |
| } | |
| .action-buttons { | |
| display: flex; | |
| justify-content: center; | |
| gap: 25px; /* Increased from 15px to 20px */ | |
| margin-top: 30px; /* Increased from 20px to 25px */ | |
| transform: translateZ(40px); | |
| will-change: transform; | |
| position: relative; | |
| z-index: 15; | |
| } | |
| .card-btn { | |
| background: linear-gradient(145deg, #0080ff, #0060c0); | |
| color: white; | |
| border: none; | |
| border-radius: 16px; /* Increased from 12px to 14px */ | |
| padding: 15px 30px; /* Increased from 10px 20px to 12px 24px */ | |
| font-size: 1.2rem; /* Added font-size */ | |
| font-weight: 600; | |
| cursor: pointer; | |
| transition: all 0.3s ease, background 1s ease; | |
| box-shadow: 0 4px 10px rgba(0, 0, 0, 0.3); | |
| } | |
| .forest-card-btn { | |
| background: linear-gradient(145deg, #006d05, #005300); | |
| } | |
| .card-btn:hover { | |
| background: linear-gradient(145deg, #00a0ff, #0080ff); | |
| transform: translateY(-3px); /* Increased from -2px to -3px */ | |
| box-shadow: 0 6px 15px rgba(0, 0, 0, 0.4); | |
| } | |
| .forest-card-btn:hover { | |
| background: linear-gradient(145deg, #008205, #006d05); | |
| } | |
| .close-btn { | |
| background: linear-gradient(145deg, #ff4060, #c03050); | |
| } | |
| .forest-close-btn { | |
| background: linear-gradient(145deg, #c03050, #902040); | |
| } | |
| .close-btn:hover { | |
| background: linear-gradient(145deg, #ff5070, #ff4060); | |
| } | |
| .forest-close-btn:hover { | |
| background: linear-gradient(145deg, #d04060, #c03050); | |
| } | |
| @media (max-width: 768px) { | |
| .time-card-container { | |
| max-width: 700px; /* Increased from 320px to 600px */ | |
| aspect-ratio: 16 / 10; /* Adjusted for tablets */ | |
| } | |
| .card-title { | |
| font-size: 2.4rem; /* Increased from 1.5rem to 2rem */ | |
| margin-bottom: 8px; | |
| } | |
| .card-subtitle { | |
| font-size: 1.3rem; /* Increased from 0.95rem to 1.1rem */ | |
| margin-bottom: 20px; | |
| } | |
| .time-unit { | |
| font-size: 1.1rem; /* Increased from 0.8rem to 0.9rem */ | |
| padding: 10px 16px; /* Increased from 7px 10px to 8px 14px */ | |
| } | |
| .time-value { | |
| font-size: 3rem; /* Increased from 2rem to 2.6rem */ | |
| } | |
| .time-label { | |
| font-size: 1.1rem; /* Increased from 0.8rem to 0.95rem */ | |
| } | |
| .tab { | |
| font-size: 1.1rem; | |
| padding: 10px 18px; | |
| } | |
| .countries-container { | |
| height: 300px; | |
| } | |
| .country-name, .country-time { | |
| font-size: 0.95rem; | |
| } | |
| } | |
| @media (max-width: 480px) { | |
| .time-card-container { | |
| max-width: 300px; /* Increased from 280px to 300px */ | |
| aspect-ratio: 10 / 16; /* Adjusted for portrait mode */ | |
| } | |
| .card-title { | |
| font-size: 1.5rem; /* Increased from 1.3rem to 1.5rem */ | |
| } | |
| .card-subtitle { | |
| font-size: 0.9rem; /* Increased from 0.85rem to 0.9rem */ | |
| margin-bottom: 15px; | |
| } | |
| .time-unit { | |
| font-size: 0.8rem; /* Increased from 0.75rem to 0.8rem */ | |
| padding: 7px 10px; /* Increased from 6px 8px to 7px 10px */ | |
| } | |
| .unit-selector { | |
| gap: 8px; /* Increased from 6px to 8px */ | |
| margin-bottom: 15px; | |
| } | |
| .time-value { | |
| font-size: 2rem; /* Increased from 1.7rem to 2rem */ | |
| } | |
| .card-btn { | |
| padding: 10px 18px; /* Increased from 8px 15px to 10px 18px */ | |
| font-size: 0.95rem; /* Increased from 0.9rem to 0.95rem */ | |
| } | |
| .tab { | |
| font-size: 0.8rem; | |
| padding: 6px 12px; | |
| } | |
| .countries-container { | |
| height: 250px; | |
| } | |
| .country-name, .country-time { | |
| font-size: 0.85rem; | |
| } | |
| .release-date-header { | |
| font-size: 1.1rem; | |
| } | |
| } | |
| /* Music Player Styles */ | |
| #music-player-toggle { | |
| position: fixed; | |
| bottom: 20px; | |
| left: 20px; | |
| background: rgba(0, 40, 80, 0.4); | |
| border-radius: 15px; | |
| padding: 10px 16px; | |
| color: #fff; | |
| font-size: 0.9rem; | |
| font-weight: 600; | |
| cursor: pointer; | |
| z-index: 99; | |
| backdrop-filter: blur(5px); | |
| border: 1px solid rgba(100, 200, 255, 0.3); | |
| box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3); | |
| transition: all 0.3s ease, background 1s ease, border-color 1s ease; | |
| font-family: 'Montserrat', sans-serif; | |
| } | |
| .forest-music-player-toggle { | |
| background: rgba(0, 90, 5, 0.4); | |
| border: 1px solid rgba(142, 157, 98, 0.3); | |
| } | |
| #music-player-toggle:hover { | |
| background: rgba(0, 80, 160, 0.5); | |
| transform: translateY(-3px); | |
| box-shadow: 0 8px 20px rgba(0, 0, 0, 0.4); | |
| } | |
| .forest-music-player-toggle:hover { | |
| background: rgba(0, 90, 5, 0.5); | |
| } | |
| #player-container { | |
| position: fixed; | |
| bottom: 20px; | |
| left: 20px; | |
| width: 400px; | |
| height: 100px; | |
| z-index: 100; | |
| transform: translateY(150px); | |
| transition: transform 0.4s ease; | |
| display: none; | |
| } | |
| #player-container.active { | |
| transform: translateY(0); | |
| display: block; | |
| } | |
| #player { | |
| position: relative; | |
| height: 100%; | |
| z-index: 3; | |
| } | |
| #player-track { | |
| position: absolute; | |
| top: 0; | |
| right: 15px; | |
| left: 15px; | |
| padding: 13px 22px 10px 184px; | |
| background-color: rgba(0, 60, 120, 0.5); | |
| border-radius: 15px 15px 0 0; | |
| transition: 0.3s ease top, background-color 1s ease; | |
| z-index: 1; | |
| backdrop-filter: blur(5px); | |
| border: 1px solid rgba(100, 200, 255, 0.3); | |
| border-bottom: none; | |
| } | |
| .forest-player-track { | |
| background-color: rgba(0, 90, 5, 0.5); | |
| border: 1px solid rgba(142, 157, 98, 0.3); | |
| } | |
| #player-track.active { | |
| top: -92px; | |
| } | |
| #album-name { | |
| color: #a0d8ff; | |
| font-size: 17px; | |
| font-weight: bold; | |
| white-space: nowrap; | |
| overflow: hidden; | |
| text-overflow: ellipsis; | |
| transition: color 1s ease; | |
| } | |
| .forest-album-name { | |
| color: #8E9D62; | |
| } | |
| #track-name { | |
| color: rgba(255, 255, 255, 0.8); | |
| font-size: 13px; | |
| margin: 2px 0 13px 0; | |
| white-space: nowrap; | |
| overflow: hidden; | |
| text-overflow: ellipsis; | |
| } | |
| #track-time { | |
| height: 12px; | |
| margin-bottom: 3px; | |
| overflow: hidden; | |
| } | |
| #current-time { | |
| float: left; | |
| } | |
| #track-length { | |
| float: right; | |
| } | |
| #current-time, | |
| #track-length { | |
| color: transparent; | |
| font-size: 11px; | |
| background-color: rgba(100, 200, 255, 0.3); | |
| border-radius: 10px; | |
| transition: 0.3s ease all, background-color 1s ease; | |
| } | |
| .forest-current-time, | |
| .forest-track-length { | |
| background-color: rgba(142, 157, 98, 0.3); | |
| } | |
| #track-time.active #current-time, | |
| #track-time.active #track-length { | |
| color: #a0d8ff; | |
| background-color: transparent; | |
| } | |
| #track-time.active .forest-current-time, | |
| #track-time.active .forest-track-length { | |
| color: #8E9D62; | |
| } | |
| #seek-bar-container, | |
| #seek-bar { | |
| position: relative; | |
| height: 4px; | |
| border-radius: 4px; | |
| } | |
| #seek-bar-container { | |
| background-color: rgba(100, 200, 255, 0.3); | |
| cursor: pointer; | |
| transition: background-color 1s ease; | |
| } | |
| .forest-seek-bar-container { | |
| background-color: rgba(142, 157, 98, 0.3); | |
| } | |
| #seek-time { | |
| position: absolute; | |
| top: -29px; | |
| color: #fff; | |
| font-size: 12px; | |
| white-space: pre; | |
| padding: 5px 6px; | |
| border-radius: 4px; | |
| display: none; | |
| } | |
| #s-hover { | |
| position: absolute; | |
| top: 0; | |
| bottom: 0; | |
| left: 0; | |
| opacity: 0.2; | |
| z-index: 2; | |
| } | |
| #seek-time, | |
| #s-hover { | |
| background-color: rgba(0, 40, 80, 0.8); | |
| transition: background-color 1s ease; | |
| } | |
| .forest-seek-time, | |
| .forest-s-hover { | |
| background-color: rgba(0, 90, 5, 0.8); | |
| } | |
| #seek-bar { | |
| content: ""; | |
| position: absolute; | |
| top: 0; | |
| bottom: 0; | |
| left: 0; | |
| width: 0; | |
| background-color: #a0d8ff; | |
| transition: 0.2s ease width, background-color 1s ease; | |
| z-index: 1; | |
| } | |
| .forest-seek-bar { | |
| background-color: #8E9D62; | |
| } | |
| #player-content { | |
| position: relative; | |
| height: 100%; | |
| background-color: rgba(0, 40, 80, 0.5); | |
| box-shadow: 0 10px 20px rgba(0, 0, 0, 0.3); | |
| border-radius: 15px; | |
| z-index: 2; | |
| backdrop-filter: blur(5px); | |
| border: 1px solid rgba(100, 200, 255, 0.3); | |
| transition: background-color 1s ease, border-color 1s ease; | |
| } | |
| .forest-player-content { | |
| background-color: rgba(0, 90, 5, 0.5); | |
| border: 1px solid rgba(142, 157, 98, 0.3); | |
| } | |
| #album-art { | |
| position: absolute; | |
| top: -40px; | |
| width: 115px; | |
| height: 115px; | |
| margin-left: 40px; | |
| transform: rotateZ(0); | |
| transition: 0.3s ease all; | |
| box-shadow: 0 0 0 6px rgba(0, 40, 80, 0.5); | |
| border-radius: 50%; | |
| overflow: hidden; | |
| } | |
| .forest-album-art { | |
| box-shadow: 0 0 0 6px rgba(0, 90, 5, 0.5); | |
| } | |
| #album-art.active { | |
| top: -60px; | |
| box-shadow: 0 0 0 4px rgba(0, 60, 120, 0.5), 0 20px 40px -10px rgba(0, 0, 0, 0.5); | |
| } | |
| .forest-album-art.active { | |
| box-shadow: 0 0 0 4px rgba(0, 90, 5, 0.5), 0 20px 40px -10px rgba(0, 0, 0, 0.5); | |
| } | |
| #album-art:before { | |
| content: ""; | |
| position: absolute; | |
| top: 50%; | |
| right: 0; | |
| left: 0; | |
| width: 20px; | |
| height: 20px; | |
| margin: -10px auto 0 auto; | |
| background-color: rgba(0, 40, 80, 0.5); | |
| border-radius: 50%; | |
| box-shadow: inset 0 0 0 2px #a0d8ff; | |
| z-index: 2; | |
| transition: background-color 1s ease, box-shadow 1s ease; | |
| } | |
| .forest-album-art:before { | |
| background-color: rgba(0, 90, 5, 0.5); | |
| box-shadow: inset 0 0 0 2px #8E9D62; | |
| } | |
| #album-art img { | |
| display: block; | |
| position: absolute; | |
| top: 0; | |
| left: 0; | |
| width: 100%; | |
| height: 100%; | |
| opacity: 0; | |
| z-index: -1; | |
| object-fit: cover; | |
| } | |
| #album-art img.active { | |
| opacity: 1; | |
| z-index: 1; | |
| } | |
| #album-art.active img.active { | |
| z-index: 1; | |
| animation: rotateAlbumArt 3s linear 0s infinite forwards; | |
| } | |
| @keyframes rotateAlbumArt { | |
| 0% { | |
| transform: rotateZ(0); | |
| } | |
| 100% { | |
| transform: rotateZ(360deg); | |
| } | |
| } | |
| #buffer-box { | |
| position: absolute; | |
| top: 50%; | |
| right: 0; | |
| left: 0; | |
| height: 13px; | |
| color: #a0d8ff; | |
| font-size: 13px; | |
| font-family: 'Montserrat', sans-serif; | |
| text-align: center; | |
| font-weight: bold; | |
| line-height: 1; | |
| padding: 6px; | |
| margin: -12px auto 0 auto; | |
| background-color: rgba(0, 30, 60, 0.6); | |
| opacity: 0; | |
| z-index: 2; | |
| border-radius: 6px; | |
| transition: color 1s ease, background-color 1s ease; | |
| } | |
| .forest-buffer-box { | |
| color: #8E9D62; | |
| background-color: rgba(0, 90, 5, 0.6); | |
| } | |
| #album-art img, | |
| #buffer-box { | |
| transition: 0.1s linear all; | |
| } | |
| #album-art.buffering img { | |
| opacity: 0.25; | |
| } | |
| #album-art.buffering img.active { | |
| opacity: 0.8; | |
| filter: blur(2px); | |
| -webkit-filter: blur(2px); | |
| } | |
| #album-art.buffering #buffer-box { | |
| opacity: 1; | |
| } | |
| #player-controls { | |
| width: 250px; | |
| height: 100%; | |
| margin: 0 5px 0 141px; | |
| float: right; | |
| overflow: hidden; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| } | |
| .control { | |
| width: 33.333%; | |
| float: left; | |
| padding: 12px 0; | |
| text-align: center; | |
| } | |
| .button { | |
| width: 26px; | |
| height: 26px; | |
| padding: 25px; | |
| background-color: rgba(0, 60, 120, 0.6); | |
| border-radius: 12px; | |
| cursor: pointer; | |
| border: 1px solid rgba(100, 200, 255, 0.3); | |
| display: inline-flex; | |
| align-items: center; | |
| justify-content: center; | |
| transition: all 0.2s ease, background-color 1s ease, border-color 1s ease; | |
| } | |
| .forest-player-button { | |
| background-color: rgba(0, 90, 5, 0.6); | |
| border: 1px solid rgba(142, 157, 98, 0.3); | |
| } | |
| .button i { | |
| display: block; | |
| color: #a0d8ff; | |
| font-size: 26px; | |
| text-align: center; | |
| line-height: 1; | |
| transition: all 0.2s ease, color 1s ease; | |
| } | |
| .forest-button i { | |
| color: #8E9D62; | |
| } | |
| .button:hover { | |
| background-color: rgba(0, 100, 180, 0.8); | |
| border-color: rgba(100, 200, 255, 0.5); | |
| } | |
| .forest-player-button:hover { | |
| background-color: rgba(0, 90, 5, 0.8); | |
| border-color: rgba(142, 157, 98, 0.5); | |
| } | |
| .button:hover i { | |
| color: #fff; | |
| } | |
| .lossless-indicator { | |
| position: absolute; | |
| top: -28px; | |
| right: 25px; | |
| background-color: rgba(100, 200, 255, 0.25); | |
| color: #a0d8ff; | |
| padding: 5px 10px; | |
| border-radius: 10px 10px 0 0; | |
| font-size: 0.9rem; | |
| font-weight: 700; | |
| letter-spacing: 1px; | |
| text-shadow: 0 0 8px rgba(100, 200, 255, 0.6); | |
| border: 1px solid rgba(100, 200, 255, 0.4); | |
| border-bottom: none; | |
| backdrop-filter: blur(4px); | |
| transition: background-color 1s ease, color 1s ease, border-color 1s ease, text-shadow 1s ease; | |
| } | |
| .forest-lossless-indicator { | |
| background-color: rgba(142, 157, 98, 0.25); | |
| color: #8E9D62; | |
| text-shadow: 0 0 8px rgba(142, 157, 98, 0.6); | |
| border: 1px solid rgba(142, 157, 98, 0.4); | |
| } | |
| @media (max-width: 768px) { | |
| #music-player-toggle { | |
| padding: 10px 16px; | |
| font-size: 0.9rem; | |
| bottom: 15px; | |
| left: 15px; | |
| } | |
| #player-container { | |
| width: 300px; | |
| height: 80px; | |
| bottom: 15px; | |
| left: 15px; | |
| } | |
| #album-art { | |
| width: 90px; | |
| height: 90px; | |
| top: -30px; | |
| margin-left: 30px; | |
| } | |
| #album-art.active { | |
| top: -45px; | |
| } | |
| #player-track { | |
| padding: 10px 15px 8px 130px; | |
| } | |
| #player-track.active { | |
| top: -75px; | |
| } | |
| #album-name { | |
| font-size: 15px; | |
| } | |
| #track-name { | |
| font-size: 12px; | |
| margin: 2px 0 10px 0; | |
| } | |
| #player-controls { | |
| width: 200px; | |
| margin: 0 5px 0 110px; | |
| } | |
| .button { | |
| width: 20px; | |
| height: 20px; | |
| padding: 20px; | |
| } | |
| .button i { | |
| font-size: 20px; | |
| } | |
| .lossless-indicator { | |
| top: -26px; | |
| right: 20px; | |
| font-size: 0.8rem; | |
| padding: 4px 8px; | |
| } | |
| } | |
| @media (max-width: 480px) { | |
| #music-player-toggle { | |
| padding: 8px 14px; | |
| font-size: 0.8rem; | |
| bottom: 10px; | |
| left: 10px; | |
| } | |
| #player-container { | |
| width: 260px; | |
| height: 70px; | |
| bottom: 10px; | |
| left: 10px; | |
| } | |
| #album-art { | |
| width: 80px; | |
| height: 80px; | |
| top: -25px; | |
| margin-left: 20px; | |
| } | |
| #album-art.active { | |
| top: -35px; | |
| } | |
| #player-track { | |
| padding: 8px 12px 6px 110px; | |
| } | |
| #player-track.active { | |
| top: -65px; | |
| } | |
| #album-name { | |
| font-size: 13px; | |
| } | |
| #track-name { | |
| font-size: 11px; | |
| margin: 2px 0 8px 0; | |
| } | |
| #player-controls { | |
| width: 160px; | |
| margin: 0 5px 0 90px; | |
| } | |
| .button { | |
| width: 18px; | |
| height: 18px; | |
| padding: 17px; | |
| } | |
| .button i { | |
| font-size: 18px; | |
| } | |
| .lossless-indicator { | |
| top: -24px; | |
| right: 15px; | |
| font-size: 0.7rem; | |
| padding: 3px 6px; | |
| } | |
| } | |
| .fade-out { | |
| opacity: 0; | |
| transition: opacity 1s ease; | |
| } | |
| .fade-in { | |
| opacity: 1; | |
| transition: opacity 1s ease; | |
| } | |
| </style> | |
| </head> | |
| <body> | |
| <!-- Main Content --> | |
| <img id="background" class="fade-in" src="https://jerrrycans-file.hf.space/rbxg/MzadFckKIzjGWUVxvy1P1vmUnvaBM0Fwak9Qk1aHPWok9Y1R/Leonida_Keys_04.ef02d8b3%20%281%29.jpg" alt="Underwater Background"> | |
| <img id="forest-background" class="fade-out" style="opacity: 0; position: fixed; top: 0; left: 0; width: 100%; height: 100%; object-fit: cover; z-index: -1; filter: brightness(0.7) saturate(1.2);" src="https://jerrrycans-file.hf.space/rbxg/MzruClHMEEzYu4gjlnLIIbvqQ6iitnTPWQUBWWvcN1H8Hu1e/Mount_Kalaga_National_Park_05.b28e1836%20%284%29.jpg" alt="Forest Background"> | |
| <div class="overlay water-overlay"></div> | |
| <div class="water-effect"></div> | |
| <div class="bubbles"> | |
| <div class="bubble"></div> | |
| <div class="bubble"></div> | |
| <div class="bubble"></div> | |
| </div> | |
| <div class="container"> | |
| <div class="nav-buttons"> | |
| <div class="button-wrap"> | |
| <button id="images-btn"> | |
| <span>Images & Videos</span> | |
| </button> | |
| <div class="button-shadow"></div> | |
| </div> | |
| <div class="button-wrap"> | |
| <button id="delays-btn"> | |
| <span>Delays</span> | |
| </button> | |
| <div class="button-shadow"></div> | |
| </div> | |
| </div> | |
| <img class="logo" src="https://jerrrycans-file.hf.space/rbxg/MzatJJFJu0m2DmFyu7wW7s6B0r6tCcCtYCndODFD9Rvm00i3/svgexport-18.svg" alt="GTA 6 Logo"> | |
| <div class="tagline">Leonida Keys scuba diving scene.</div> | |
| <div class="countdown-container"> | |
| <div class="countdown-box"> | |
| <div id="days" class="countdown-value">00</div> | |
| <div class="countdown-label">Days</div> | |
| </div> | |
| <div class="countdown-box"> | |
| <div id="hours" class="countdown-value">00</div> | |
| <div class="countdown-label">Hours</div> | |
| </div> | |
| <div class="countdown-box"> | |
| <div id="minutes" class="countdown-value">00</div> | |
| <div class="countdown-label">Minutes</div> | |
| </div> | |
| <div class="countdown-box"> | |
| <div id="seconds" class="countdown-value">00</div> | |
| <div class="countdown-label">Seconds</div> | |
| </div> | |
| </div> | |
| <div class="button-wrap" id="convert-button"> | |
| <button id="convert-btn"> | |
| <span>Convert Time</span> | |
| </button> | |
| <div class="button-shadow"></div> | |
| </div> | |
| </div> | |
| <!-- Scene Change Buttons --> | |
| <div class="scene-button" id="to-forest-btn"> | |
| <span>></span> | |
| </div> | |
| <div class="scene-button" id="to-water-btn" style="display: none;"> | |
| <span><</span> | |
| </div> | |
| <!-- Time Converter Modal --> | |
| <div class="modal-overlay" id="time-modal"> | |
| <div class="time-card-container" data-tilt data-tilt-max="10" data-tilt-speed="400" data-tilt-perspective="1800" data-tilt-glare data-tilt-max-glare="0.15" data-tilt-scale="1.03"> | |
| <div class="time-card" style="background-image: url('https://jerrrycans-file.hf.space/rbxg/Mzbc4FG5n89NqoLiBQLiG8I3gKlbbxEa9FEXFeqD8A8bz3xa/Leonida_Keys_01.1af17390%20%281%29.jpg');"> | |
| <div class="card-inner-border" data-tilt-transform-element></div> | |
| <div class="gradient-card-overlay"></div> | |
| <div class="card-content" data-tilt-transform-element> | |
| <div class="card-title" data-tilt-transform-element>GTA VI TIME CONVERTER</div> | |
| <div class="card-subtitle" data-tilt-transform-element>Find out exactly how long you'll be waiting</div> | |
| <div class="tabs-container" data-tilt-transform-element> | |
| <div class="tab active" data-tab="converter">Time Converter</div> | |
| <div class="tab" data-tab="global">Global Release</div> | |
| </div> | |
| <div class="tab-content active" id="converter-tab" data-tilt-transform-element> | |
| <div class="unit-selector" data-tilt-transform-element> | |
| <div class="time-unit active" data-unit="seconds">Seconds</div> | |
| <div class="time-unit" data-unit="minutes">Minutes</div> | |
| <div class="time-unit" data-unit="hours">Hours</div> | |
| <div class="time-unit" data-unit="days">Days</div> | |
| <div class="time-unit" data-unit="weeks">Weeks</div> | |
| <div class="time-unit" data-unit="months">Months</div> | |
| <div class="time-unit" data-unit="years">Years</div> | |
| </div> | |
| <div class="time-display" data-tilt-transform-element> | |
| <div id="converted-value" class="time-value">0</div> | |
| <div id="converted-label" class="time-label">SECONDS REMAINING</div> | |
| </div> | |
| <div class="timezone-section" data-tilt-transform-element> | |
| <div class="timezone-toggle"> | |
| <span class="toggle-label">Use Local Timezone</span> | |
| <label class="toggle-switch"> | |
| <input type="checkbox" id="timezone-toggle" checked> | |
| <span class="toggle-slider"></span> | |
| </label> | |
| </div> | |
| <div id="timezone-info" class="timezone-info"> | |
| Using your local timezone: <span id="local-timezone">America/New_York</span> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="tab-content" id="global-tab" data-tilt-transform-element> | |
| <div class="release-date-header">GTA VI Global Release - May 26, 2026</div> | |
| <div class="countries-container"> | |
| <div class="country-item"> | |
| <div class="country-name">United States (EST)</div> | |
| <div class="country-time">05/26/2026, 12:00 AM</div> | |
| </div> | |
| <div class="country-item"> | |
| <div class="country-name">United States (CST)</div> | |
| <div class="country-time">05/25/2026, 11:00 PM</div> | |
| </div> | |
| <div class="country-item"> | |
| <div class="country-name">United States (PST)</div> | |
| <div class="country-time">05/25/2026, 9:00 PM</div> | |
| </div> | |
| <div class="country-item"> | |
| <div class="country-name">Canada (Toronto)</div> | |
| <div class="country-time">05/26/2026, 12:00 AM</div> | |
| </div> | |
| <div class="country-item"> | |
| <div class="country-name">Mexico (Mexico City)</div> | |
| <div class="country-time">05/25/2026, 11:00 PM</div> | |
| </div> | |
| <div class="country-item"> | |
| <div class="country-name">United Kingdom (London)</div> | |
| <div class="country-time">05/26/2026, 5:00 AM</div> | |
| </div> | |
| <div class="country-item"> | |
| <div class="country-name">France (Paris)</div> | |
| <div class="country-time">05/26/2026, 6:00 AM</div> | |
| </div> | |
| <div class="country-item"> | |
| <div class="country-name">Germany (Berlin)</div> | |
| <div class="country-time">05/26/2026, 6:00 AM</div> | |
| </div> | |
| <div class="country-item"> | |
| <div class="country-name">Spain (Madrid)</div> | |
| <div class="country-time">05/26/2026, 6:00 AM</div> | |
| </div> | |
| <div class="country-item"> | |
| <div class="country-name">Italy (Rome)</div> | |
| <div class="country-time">05/26/2026, 6:00 AM</div> | |
| </div> | |
| <div class="country-item"> | |
| <div class="country-name">Australia (Sydney)</div> | |
| <div class="country-time">05/26/2026, 2:00 PM</div> | |
| </div> | |
| <div class="country-item"> | |
| <div class="country-name">Japan (Tokyo)</div> | |
| <div class="country-time">05/26/2026, 1:00 PM</div> | |
| </div> | |
| <div class="country-item"> | |
| <div class="country-name">China (Beijing)</div> | |
| <div class="country-time">05/26/2026, 12:00 PM</div> | |
| </div> | |
| <div class="country-item"> | |
| <div class="country-name">South Korea (Seoul)</div> | |
| <div class="country-time">05/26/2026, 1:00 PM</div> | |
| </div> | |
| <div class="country-item"> | |
| <div class="country-name">India (New Delhi)</div> | |
| <div class="country-time">05/26/2026, 9:30 AM</div> | |
| </div> | |
| <div class="country-item"> | |
| <div class="country-name">Russia (Moscow)</div> | |
| <div class="country-time">05/26/2026, 7:00 AM</div> | |
| </div> | |
| <div class="country-item"> | |
| <div class="country-name">Brazil (Sao Paulo)</div> | |
| <div class="country-time">05/26/2026, 1:00 AM</div> | |
| </div> | |
| <div class="country-item"> | |
| <div class="country-name">Argentina (Buenos Aires)</div> | |
| <div class="country-time">05/26/2026, 1:00 AM</div> | |
| </div> | |
| <div class="country-item"> | |
| <div class="country-name">South Africa (Johannesburg)</div> | |
| <div class="country-time">05/26/2026, 6:00 AM</div> | |
| </div> | |
| <div class="country-item"> | |
| <div class="country-name">United Arab Emirates (Dubai)</div> | |
| <div class="country-time">05/26/2026, 8:00 AM</div> | |
| </div> | |
| <div class="country-item"> | |
| <div class="country-name">New Zealand (Auckland)</div> | |
| <div class="country-time">05/26/2026, 4:00 PM</div> | |
| </div> | |
| <div class="country-item"> | |
| <div class="country-name">Sweden (Stockholm)</div> | |
| <div class="country-time">05/26/2026, 6:00 AM</div> | |
| </div> | |
| <div class="country-item"> | |
| <div class="country-name">Norway (Oslo)</div> | |
| <div class="country-time">05/26/2026, 6:00 AM</div> | |
| </div> | |
| <div class="country-item"> | |
| <div class="country-name">Netherlands (Amsterdam)</div> | |
| <div class="country-time">05/26/2026, 6:00 AM</div> | |
| </div> | |
| <div class="country-item"> | |
| <div class="country-name">Turkey (Istanbul)</div> | |
| <div class="country-time">05/26/2026, 7:00 AM</div> | |
| </div> | |
| <div class="country-item"> | |
| <div class="country-name">Malaysia (Kuala Lumpur)</div> | |
| <div class="country-time">05/26/2026, 12:00 PM</div> | |
| </div> | |
| <div class="country-item"> | |
| <div class="country-name">Singapore</div> | |
| <div class="country-time">05/26/2026, 12:00 PM</div> | |
| </div> | |
| <div class="country-item"> | |
| <div class="country-name">Indonesia (Jakarta)</div> | |
| <div class="country-time">05/26/2026, 11:00 AM</div> | |
| </div> | |
| <div class="country-item"> | |
| <div class="country-name">Philippines (Manila)</div> | |
| <div class="country-time">05/26/2026, 12:00 PM</div> | |
| </div> | |
| <div class="country-item"> | |
| <div class="country-name">Thailand (Bangkok)</div> | |
| <div class="country-time">05/26/2026, 11:00 AM</div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="action-buttons" data-tilt-transform-element> | |
| <button class="card-btn" id="update-btn">Update</button> | |
| <button class="card-btn close-btn" id="close-modal-btn">Close</button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Music Player Button --> | |
| <div id="music-player-toggle">GTA VI Trailer Music</div> | |
| <!-- Music Player --> | |
| <div id="player-container"> | |
| <div class="lossless-indicator">LOSSLESS</div> | |
| <div id="player"> | |
| <div id="player-track"> | |
| <div id="album-name"></div> | |
| <div id="track-name"></div> | |
| <div id="track-time"> | |
| <div id="current-time"></div> | |
| <div id="track-length"></div> | |
| </div> | |
| <div id="seek-bar-container"> | |
| <div id="seek-time"></div> | |
| <div id="s-hover"></div> | |
| <div id="seek-bar"></div> | |
| </div> | |
| </div> | |
| <div id="player-content"> | |
| <div id="album-art"> | |
| <img src="https://jerrrycans-file.hf.space/rbxg/Mzch0WlJmjSZqtQ8vAwNpFwxvdKSu3HOdqgMGP5dkFtLj6O5/image.png" class="active" id="_1" /> | |
| <img src="https://jerrrycans-file.hf.space/rbxg/MzciEyDawDjrkLpGy878iYVF2jsBZG9xTXCB9gm4BsXNlIyO/image.png" id="_2" /> | |
| <img src="https://jerrrycans-file.hf.space/rbxg/MzclLnHr9OFDN7DmdEm3dCmZ5YdqRQeQGebpNYsJw5ZDuGg1/image.png" id="_3" /> | |
| <img src="https://jerrrycans-file.hf.space/rbxg/MzcpG0L1pZ5n9omJevFN31dJcLsPQXPJIRYokIzI6JAWjmNZ/image.png" id="_4" /> | |
| <img src="https://jerrrycans-file.hf.space/rbxg/MzcqrMAof4GArgbTxcDvmWR9kkxsOUCDCBnaDtnePRNCTK3V/image.png" id="_5" /> | |
| <img src="https://jerrrycans-file.hf.space/rbxg/MzcsTmh1lO2IF0OhJXpR6zEpiVu3YB1hiufl1m0bXzxxqvLy/image.png" id="_6" /> | |
| <div id="buffer-box">Buffering ...</div> | |
| </div> | |
| <div id="player-controls"> | |
| <div class="control"> | |
| <div class="button" id="play-previous"> | |
| <i class="fas fa-backward"></i> | |
| </div> | |
| </div> | |
| <div class="control"> | |
| <div class="button" id="play-pause-button"> | |
| <i class="fas fa-play"></i> | |
| </div> | |
| </div> | |
| <div class="control"> | |
| <div class="button" id="play-next"> | |
| <i class="fas fa-forward"></i> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <script src="https://cdnjs.cloudflare.com/ajax/libs/vanilla-tilt/1.8.0/vanilla-tilt.min.js"></script> | |
| <script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js'></script> | |
| <script> | |
| document.addEventListener('DOMContentLoaded', function() { | |
| // Set the release date: May 26, 2026 | |
| const releaseDate = new Date('May 26, 2026 00:00:00').getTime(); | |
| // Create cached DOM references to avoid repeated DOM queries | |
| const daysElement = document.getElementById('days'); | |
| const hoursElement = document.getElementById('hours'); | |
| const minutesElement = document.getElementById('minutes'); | |
| const secondsElement = document.getElementById('seconds'); | |
| const taglineElement = document.querySelector('.tagline'); | |
| // Previous values to check if we need to update the DOM | |
| let prevDays = -1; | |
| let prevHours = -1; | |
| let prevMinutes = -1; | |
| let prevSeconds = -1; | |
| // Update the countdown every second | |
| const countdownInterval = setInterval(function() { | |
| // Get current date and time | |
| const now = new Date().getTime(); | |
| // Find the distance between now and the release date | |
| const distance = releaseDate - now; | |
| // Time calculations for days, hours, minutes and seconds | |
| const days = Math.floor(distance / (1000 * 60 * 60 * 24)); | |
| const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); | |
| const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60)); | |
| const seconds = Math.floor((distance % (1000 * 60)) / 1000); | |
| // Only update the DOM if values have changed | |
| if (days !== prevDays) { | |
| daysElement.textContent = days.toString().padStart(2, '0'); | |
| prevDays = days; | |
| } | |
| if (hours !== prevHours) { | |
| hoursElement.textContent = hours.toString().padStart(2, '0'); | |
| prevHours = hours; | |
| } | |
| if (minutes !== prevMinutes) { | |
| minutesElement.textContent = minutes.toString().padStart(2, '0'); | |
| prevMinutes = minutes; | |
| } | |
| if (seconds !== prevSeconds) { | |
| secondsElement.textContent = seconds.toString().padStart(2, '0'); | |
| prevSeconds = seconds; | |
| } | |
| // If the countdown is finished, display message | |
| if (distance < 0) { | |
| clearInterval(countdownInterval); | |
| daysElement.textContent = '00'; | |
| hoursElement.textContent = '00'; | |
| minutesElement.textContent = '00'; | |
| secondsElement.textContent = '00'; | |
| taglineElement.textContent = 'GTA VI IS HERE! WELCOME TO VICE CITY!'; | |
| } | |
| }, 1000); | |
| // Only create bubbles on non-mobile devices | |
| function createBubbles() { | |
| if (window.innerWidth > 768) { | |
| // Create random bubble occasionally | |
| setInterval(function() { | |
| const bubblesContainer = document.querySelector('.bubbles'); | |
| if (bubblesContainer && !bubblesContainer.classList.contains('hidden')) { | |
| const bubble = document.createElement('div'); | |
| bubble.classList.add('bubble'); | |
| // Random size between 15px and 35px | |
| const size = Math.random() * 20 + 15; | |
| bubble.style.width = `${size}px`; | |
| bubble.style.height = `${size}px`; | |
| // Random horizontal position | |
| bubble.style.left = `${Math.random() * 100}%`; | |
| // Random animation duration between 12s and 20s | |
| const duration = Math.random() * 8 + 12; | |
| bubble.style.animationDuration = `${duration}s`; | |
| bubblesContainer.appendChild(bubble); | |
| // Remove bubble after animation ends | |
| setTimeout(function() { | |
| bubble.remove(); | |
| }, duration * 1000); | |
| } | |
| }, 3000); | |
| } | |
| } | |
| // Initialize bubbles | |
| createBubbles(); | |
| // Scene switching variables and elements | |
| let currentScene = 'water'; // 'water' or 'forest' | |
| const waterBackground = document.getElementById('background'); | |
| const forestBackground = document.getElementById('forest-background'); | |
| const bubblesElement = document.querySelector('.bubbles'); | |
| const waterEffect = document.querySelector('.water-effect'); | |
| const overlay = document.querySelector('.overlay'); | |
| const toForestBtn = document.getElementById('to-forest-btn'); | |
| const toWaterBtn = document.getElementById('to-water-btn'); | |
| // Scene switching functions | |
| function switchToForest() { | |
| // Start transition | |
| currentScene = 'forest'; | |
| // Fade out water elements | |
| waterBackground.classList.add('fade-out'); | |
| waterBackground.classList.remove('fade-in'); | |
| bubblesElement.classList.add('fade-out'); | |
| waterEffect.classList.add('fade-out'); | |
| // Wait for fade out to complete before fading in forest elements | |
| setTimeout(() => { | |
| // Update overlay color | |
| overlay.style.background = 'linear-gradient(to bottom, rgba(0, 90, 5, 0.2), rgba(0, 90, 5, 0.6))'; | |
| // Fade in forest elements | |
| forestBackground.classList.add('fade-in'); | |
| forestBackground.classList.remove('fade-out'); | |
| // Update content styles | |
| taglineElement.textContent = 'Mount Kalaga National Park scene.'; | |
| taglineElement.classList.add('forest-tagline'); | |
| // Update countdown boxes | |
| document.querySelectorAll('.countdown-box').forEach(box => { | |
| box.classList.add('forest-countdown-box'); | |
| }); | |
| // Update countdown values | |
| document.querySelectorAll('.countdown-value').forEach(value => { | |
| value.classList.add('forest-countdown-value'); | |
| }); | |
| // Update countdown labels | |
| document.querySelectorAll('.countdown-label').forEach(label => { | |
| label.classList.add('forest-countdown-label'); | |
| }); | |
| // Update button styles | |
| document.querySelectorAll('button').forEach(button => { | |
| button.classList.add('forest-button'); | |
| }); | |
| // Update modal styles | |
| document.getElementById('time-modal').classList.add('forest-modal'); | |
| // Card elements | |
| document.querySelector('.time-card').classList.add('forest-time-card'); | |
| document.querySelector('.card-inner-border').classList.add('forest-card-inner-border'); | |
| document.querySelector('.card-content').classList.add('forest-card-content'); | |
| document.querySelector('.gradient-card-overlay').classList.add('forest-gradient-card-overlay'); | |
| document.querySelector('.card-title').classList.add('forest-card-title'); | |
| document.querySelector('.card-subtitle').classList.add('forest-card-subtitle'); | |
| // Tabs | |
| document.querySelectorAll('.tab').forEach(tab => { | |
| tab.classList.add('forest-tab'); | |
| }); | |
| // Time units | |
| document.querySelectorAll('.time-unit').forEach(unit => { | |
| unit.classList.add('forest-time-unit'); | |
| }); | |
| // Time display | |
| document.querySelector('.time-display').classList.add('forest-time-display'); | |
| document.querySelector('.time-value').classList.add('forest-time-value'); | |
| document.querySelector('.time-label').classList.add('forest-time-label'); | |
| // Toggle elements | |
| document.querySelector('.toggle-label').classList.add('forest-toggle-label'); | |
| document.querySelector('.toggle-slider').classList.add('forest-toggle-slider'); | |
| document.querySelector('.timezone-info').classList.add('forest-timezone-info'); | |
| // Countries container | |
| document.querySelector('.countries-container').classList.add('forest-countries-container'); | |
| document.querySelectorAll('.country-item').forEach(item => { | |
| item.classList.add('forest-country-item'); | |
| }); | |
| document.querySelectorAll('.country-time').forEach(time => { | |
| time.classList.add('forest-country-time'); | |
| }); | |
| document.querySelector('.release-date-header').classList.add('forest-release-date-header'); | |
| // Card buttons | |
| document.querySelectorAll('.card-btn').forEach(btn => { | |
| btn.classList.add('forest-card-btn'); | |
| }); | |
| document.querySelector('.close-btn').classList.add('forest-close-btn'); | |
| // Music player elements | |
| document.getElementById('music-player-toggle').classList.add('forest-music-player-toggle'); | |
| document.getElementById('player-track').classList.add('forest-player-track'); | |
| document.getElementById('album-name').classList.add('forest-album-name'); | |
| document.getElementById('current-time').classList.add('forest-current-time'); | |
| document.getElementById('track-length').classList.add('forest-track-length'); | |
| document.getElementById('seek-bar-container').classList.add('forest-seek-bar-container'); | |
| document.getElementById('seek-time').classList.add('forest-seek-time'); | |
| document.getElementById('s-hover').classList.add('forest-s-hover'); | |
| document.getElementById('seek-bar').classList.add('forest-seek-bar'); | |
| document.getElementById('player-content').classList.add('forest-player-content'); | |
| document.getElementById('album-art').classList.add('forest-album-art'); | |
| document.getElementById('buffer-box').classList.add('forest-buffer-box'); | |
| document.querySelectorAll('.button').forEach(btn => { | |
| btn.classList.add('forest-player-button'); | |
| }); | |
| document.querySelector('.lossless-indicator').classList.add('forest-lossless-indicator'); | |
| // Change scene buttons | |
| toForestBtn.style.display = 'none'; | |
| toWaterBtn.style.display = 'flex'; | |
| toWaterBtn.classList.add('forest-arrow'); | |
| }, 1000); | |
| } | |
| function switchToWater() { | |
| // Start transition | |
| currentScene = 'water'; | |
| // Fade out forest elements | |
| forestBackground.classList.add('fade-out'); | |
| forestBackground.classList.remove('fade-in'); | |
| // Wait for fade out to complete | |
| setTimeout(() => { | |
| // Update overlay color | |
| overlay.style.background = 'linear-gradient(to bottom, rgba(0, 50, 80, 0.2), rgba(0, 20, 40, 0.6))'; | |
| // Fade in water elements | |
| waterBackground.classList.add('fade-in'); | |
| waterBackground.classList.remove('fade-out'); | |
| bubblesElement.classList.remove('fade-out'); | |
| waterEffect.classList.remove('fade-out'); | |
| // Update content styles | |
| taglineElement.textContent = 'Leonida Keys scuba diving scene.'; | |
| taglineElement.classList.remove('forest-tagline'); | |
| // Update countdown boxes | |
| document.querySelectorAll('.countdown-box').forEach(box => { | |
| box.classList.remove('forest-countdown-box'); | |
| }); | |
| // Update countdown values | |
| document.querySelectorAll('.countdown-value').forEach(value => { | |
| value.classList.remove('forest-countdown-value'); | |
| }); | |
| // Update countdown labels | |
| document.querySelectorAll('.countdown-label').forEach(label => { | |
| label.classList.remove('forest-countdown-label'); | |
| }); | |
| // Update button styles | |
| document.querySelectorAll('button').forEach(button => { | |
| button.classList.remove('forest-button'); | |
| }); | |
| // Update modal styles | |
| document.getElementById('time-modal').classList.remove('forest-modal'); | |
| // Card elements | |
| document.querySelector('.time-card').classList.remove('forest-time-card'); | |
| document.querySelector('.card-inner-border').classList.remove('forest-card-inner-border'); | |
| document.querySelector('.card-content').classList.remove('forest-card-content'); | |
| document.querySelector('.gradient-card-overlay').classList.remove('forest-gradient-card-overlay'); | |
| document.querySelector('.card-title').classList.remove('forest-card-title'); | |
| document.querySelector('.card-subtitle').classList.remove('forest-card-subtitle'); | |
| // Tabs | |
| document.querySelectorAll('.tab').forEach(tab => { | |
| tab.classList.remove('forest-tab'); | |
| }); | |
| // Time units | |
| document.querySelectorAll('.time-unit').forEach(unit => { | |
| unit.classList.remove('forest-time-unit'); | |
| }); | |
| // Time display | |
| document.querySelector('.time-display').classList.remove('forest-time-display'); | |
| document.querySelector('.time-value').classList.remove('forest-time-value'); | |
| document.querySelector('.time-label').classList.remove('forest-time-label'); | |
| // Toggle elements | |
| document.querySelector('.toggle-label').classList.remove('forest-toggle-label'); | |
| document.querySelector('.toggle-slider').classList.remove('forest-toggle-slider'); | |
| document.querySelector('.timezone-info').classList.remove('forest-timezone-info'); | |
| // Countries container | |
| document.querySelector('.countries-container').classList.remove('forest-countries-container'); | |
| document.querySelectorAll('.country-item').forEach(item => { | |
| item.classList.remove('forest-country-item'); | |
| }); | |
| document.querySelectorAll('.country-time').forEach(time => { | |
| time.classList.remove('forest-country-time'); | |
| }); | |
| document.querySelector('.release-date-header').classList.remove('forest-release-date-header'); | |
| // Card buttons | |
| document.querySelectorAll('.card-btn').forEach(btn => { | |
| btn.classList.remove('forest-card-btn'); | |
| }); | |
| document.querySelector('.close-btn').classList.remove('forest-close-btn'); | |
| // Music player elements | |
| document.getElementById('music-player-toggle').classList.remove('forest-music-player-toggle'); | |
| document.getElementById('player-track').classList.remove('forest-player-track'); | |
| document.getElementById('album-name').classList.remove('forest-album-name'); | |
| document.getElementById('current-time').classList.remove('forest-current-time'); | |
| document.getElementById('track-length').classList.remove('forest-track-length'); | |
| document.getElementById('seek-bar-container').classList.remove('forest-seek-bar-container'); | |
| document.getElementById('seek-time').classList.remove('forest-seek-time'); | |
| document.getElementById('s-hover').classList.remove('forest-s-hover'); | |
| document.getElementById('seek-bar').classList.remove('forest-seek-bar'); | |
| document.getElementById('player-content').classList.remove('forest-player-content'); | |
| document.getElementById('album-art').classList.remove('forest-album-art'); | |
| document.getElementById('buffer-box').classList.remove('forest-buffer-box'); | |
| document.querySelectorAll('.button').forEach(btn => { | |
| btn.classList.remove('forest-player-button'); | |
| }); | |
| document.querySelector('.lossless-indicator').classList.remove('forest-lossless-indicator'); | |
| // Change scene buttons | |
| toWaterBtn.style.display = 'none'; | |
| toForestBtn.style.display = 'flex'; | |
| }, 1000); | |
| } | |
| // Scene button event listeners | |
| toForestBtn.addEventListener('click', switchToForest); | |
| toWaterBtn.addEventListener('click', switchToWater); | |
| // Button functionality | |
| document.getElementById('images-btn').addEventListener('click', function() { | |
| alert('Image and video gallery coming soon!'); | |
| }); | |
| document.getElementById('delays-btn').addEventListener('click', function() { | |
| alert('GTA 6 development timeline and delay history coming soon!'); | |
| }); | |
| // Initialize Time Converter Modal | |
| const modal = document.getElementById('time-modal'); | |
| const convertBtn = document.getElementById('convert-btn'); | |
| const closeModalBtn = document.getElementById('close-modal-btn'); | |
| const updateBtn = document.getElementById('update-btn'); | |
| const timeUnits = document.querySelectorAll('.time-unit'); | |
| const convertedValue = document.getElementById('converted-value'); | |
| const convertedLabel = document.getElementById('converted-label'); | |
| const timezoneToggle = document.getElementById('timezone-toggle'); | |
| const timezoneInfo = document.getElementById('timezone-info'); | |
| const localTimezoneElement = document.getElementById('local-timezone'); | |
| const tabs = document.querySelectorAll('.tab'); | |
| const tabContents = document.querySelectorAll('.tab-content'); | |
| // Detect user's timezone | |
| const userTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone; | |
| localTimezoneElement.textContent = userTimezone; | |
| // Active time unit | |
| let activeUnit = 'seconds'; | |
| // Tab switching functionality | |
| tabs.forEach(tab => { | |
| tab.addEventListener('click', function() { | |
| tabs.forEach(t => t.classList.remove('active')); | |
| this.classList.add('active'); | |
| const tabId = this.dataset.tab; | |
| tabContents.forEach(content => { | |
| content.classList.remove('active'); | |
| }); | |
| document.getElementById(`${tabId}-tab`).classList.add('active'); | |
| }); | |
| }); | |
| // Update converted time based on selected unit | |
| function updateConvertedTime() { | |
| const now = new Date().getTime(); | |
| let targetDate = new Date('May 26, 2026 00:00:00'); | |
| // If using local timezone is enabled, adjust the target date | |
| if (timezoneToggle.checked) { | |
| // No need to adjust, already using local timezone | |
| } else { | |
| // Use New York timezone (EDT/EST) | |
| const nyOptions = { timeZone: 'America/New_York' }; | |
| const nyDateStr = targetDate.toLocaleString('en-US', nyOptions); | |
| targetDate = new Date(nyDateStr); | |
| } | |
| const distance = targetDate.getTime() - now; | |
| if (distance < 0) { | |
| convertedValue.textContent = '0'; | |
| return; | |
| } | |
| let value; | |
| switch (activeUnit) { | |
| case 'seconds': | |
| value = Math.floor(distance / 1000); | |
| convertedLabel.textContent = 'SECONDS REMAINING'; | |
| break; | |
| case 'minutes': | |
| value = Math.floor(distance / (1000 * 60)); | |
| convertedLabel.textContent = 'MINUTES REMAINING'; | |
| break; | |
| case 'hours': | |
| value = Math.floor(distance / (1000 * 60 * 60)); | |
| convertedLabel.textContent = 'HOURS REMAINING'; | |
| break; | |
| case 'days': | |
| value = Math.floor(distance / (1000 * 60 * 60 * 24)); | |
| convertedLabel.textContent = 'DAYS REMAINING'; | |
| break; | |
| case 'weeks': | |
| value = Math.floor(distance / (1000 * 60 * 60 * 24 * 7)); | |
| convertedLabel.textContent = 'WEEKS REMAINING'; | |
| break; | |
| case 'months': | |
| value = Math.floor(distance / (1000 * 60 * 60 * 24 * 30.44)); | |
| convertedLabel.textContent = 'MONTHS REMAINING'; | |
| break; | |
| case 'years': | |
| value = Math.floor(distance / (1000 * 60 * 60 * 24 * 365.25)); | |
| convertedLabel.textContent = 'YEARS REMAINING'; | |
| break; | |
| } | |
| // Format large numbers with commas | |
| convertedValue.textContent = value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); | |
| } | |
| // Update timezone info display | |
| function updateTimezoneInfo() { | |
| if (timezoneToggle.checked) { | |
| timezoneInfo.innerHTML = 'Using your local timezone: <span id="local-timezone">' + userTimezone + '</span>'; | |
| } else { | |
| timezoneInfo.innerHTML = 'Using NYC timezone: <span id="local-timezone">America/New_York</span>'; | |
| } | |
| } | |
| // Time unit click handler | |
| timeUnits.forEach(unit => { | |
| unit.addEventListener('click', function() { | |
| timeUnits.forEach(u => u.classList.remove('active')); | |
| this.classList.add('active'); | |
| activeUnit = this.dataset.unit; | |
| updateConvertedTime(); | |
| }); | |
| }); | |
| // Timezone toggle handler | |
| timezoneToggle.addEventListener('change', function() { | |
| updateTimezoneInfo(); | |
| updateConvertedTime(); | |
| }); | |
| // Open modal | |
| convertBtn.addEventListener('click', function() { | |
| modal.classList.add('active'); | |
| updateConvertedTime(); | |
| // Initialize VanillaTilt after modal is visible | |
| setTimeout(() => { | |
| VanillaTilt.init(document.querySelectorAll("[data-tilt]"), { | |
| gyroscope: true, | |
| scale: 1.03, | |
| perspective: 1800 | |
| }); | |
| }, 100); | |
| }); | |
| // Close modal | |
| closeModalBtn.addEventListener('click', function() { | |
| modal.classList.remove('active'); | |
| }); | |
| // Update button | |
| updateBtn.addEventListener('click', function() { | |
| updateConvertedTime(); | |
| }); | |
| // Close modal on overlay click | |
| modal.addEventListener('click', function(e) { | |
| if (e.target === modal) { | |
| modal.classList.remove('active'); | |
| } | |
| }); | |
| // Music Player Toggle | |
| const musicPlayerToggle = document.getElementById('music-player-toggle'); | |
| const playerContainer = document.getElementById('player-container'); | |
| musicPlayerToggle.addEventListener('click', function() { | |
| playerContainer.classList.add('active'); | |
| musicPlayerToggle.style.display = 'none'; | |
| }); | |
| // Check for mobile devices to disable bubbles | |
| function checkMobile() { | |
| if (window.innerWidth <= 768) { | |
| bubblesElement.classList.add('hidden'); | |
| bubblesElement.style.display = 'none'; | |
| } else { | |
| bubblesElement.classList.remove('hidden'); | |
| bubblesElement.style.display = 'block'; | |
| } | |
| } | |
| // Initial check for mobile | |
| checkMobile(); | |
| // Listen for window resize events | |
| window.addEventListener('resize', checkMobile); | |
| }); | |
| // Music Player Script | |
| $(function () { | |
| const playerTrack = $("#player-track"); | |
| const bgArtwork = $("#player-bg-artwork"); | |
| const albumName = $("#album-name"); | |
| const trackName = $("#track-name"); | |
| const albumArt = $("#album-art"); | |
| const sArea = $("#seek-bar-container"); | |
| const seekBar = $("#seek-bar"); | |
| const trackTime = $("#track-time"); | |
| const seekTime = $("#seek-time"); | |
| const sHover = $("#s-hover"); | |
| const playPauseButton = $("#play-pause-button"); | |
| const tProgress = $("#current-time"); | |
| const tTime = $("#track-length"); | |
| const playPreviousTrackButton = $("#play-previous"); | |
| const playNextTrackButton = $("#play-next"); | |
| const albums = [ | |
| "Love Is A Long Road", | |
| "Thunder Island", | |
| "Everybody Have Fun Tonight", | |
| "Child Support", | |
| "Talkin' To Myself Again", | |
| "Hot Together" | |
| ]; | |
| const trackNames = [ | |
| "Tom Petty", | |
| "Jay Ferguson", | |
| "Wang Chung", | |
| "Zenglen", | |
| "Tammy Wynette", | |
| "The Pointer Sisters" | |
| ]; | |
| const albumArtworks = ["_1", "_2", "_3", "_4", "_5", "_6"]; | |
| const trackUrl = [ | |
| "https://jerrrycans-file.hf.space/rbxg/MzcmFe8HB1YVQzoqR35VTySs5SUG2XDH7rFb2b912Rg8h4V6/0.flac", | |
| "https://jerrrycans-file.hf.space/rbxg/MzcmdS3ThqbVRiqHizjOU3j4aT5NfU8ElgogOLna0W1Xnoxk/0%20%281%29.flac", | |
| "https://jerrrycans-file.hf.space/rbxg/MzcnFEQLYxEJJ7Qw4R7KSPRiLkkskAb3jf4sFGuzYuSJg5n5/0%20%282%29.flac", | |
| "https://jerrrycans-file.hf.space/rbxg/Mzcokf4LReUp3nVHkbwn43WL7itZJB9ARRgzTDKj1Nxgh0t4/0.flac", | |
| "https://jerrrycans-file.hf.space/rbxg/MzcqVJeevJUmmHmeUbNU3Svdes26L07EqqatMAM3MBGy1Tig/0%20%281%29.flac", | |
| "https://jerrrycans-file.hf.space/rbxg/Mzcrsx2htVCj0DSeqIO1qeQClnMkqX6aHWbys0fVHz9Si2JH/0%20%282%29.flac" | |
| ]; | |
| let bgArtworkUrl, | |
| i = playPauseButton.find("i"), | |
| seekT, seekLoc, seekBarPos, cM, ctMinutes, ctSeconds, | |
| curMinutes, curSeconds, durMinutes, durSeconds, | |
| playProgress, bTime, nTime = 0, | |
| buffInterval = null, tFlag = false, currIndex = -1; | |
| function playPause() { | |
| setTimeout(function () { | |
| if (audio.paused) { | |
| playerTrack.addClass("active"); | |
| albumArt.addClass("active"); | |
| checkBuffering(); | |
| i.attr("class", "fas fa-pause"); | |
| audio.play(); | |
| } else { | |
| playerTrack.removeClass("active"); | |
| albumArt.removeClass("active"); | |
| clearInterval(buffInterval); | |
| albumArt.removeClass("buffering"); | |
| i.attr("class", "fas fa-play"); | |
| audio.pause(); | |
| } | |
| }, 300); | |
| } | |
| function showHover(event) { | |
| seekBarPos = sArea.offset(); | |
| seekT = event.clientX - seekBarPos.left; | |
| seekLoc = audio.duration * (seekT / sArea.outerWidth()); | |
| sHover.width(seekT); | |
| cM = seekLoc / 60; | |
| ctMinutes = Math.floor(cM); | |
| ctSeconds = Math.floor(seekLoc - ctMinutes * 60); | |
| if (ctMinutes < 0 || ctSeconds < 0) return; | |
| if (ctMinutes < 10) ctMinutes = "0" + ctMinutes; | |
| if (ctSeconds < 10) ctSeconds = "0" + ctSeconds; | |
| if (isNaN(ctMinutes) || isNaN(ctSeconds)) seekTime.text("--:--"); | |
| else seekTime.text(ctMinutes + ":" + ctSeconds); | |
| seekTime.css({ left: seekT, "margin-left": "-21px" }).fadeIn(0); | |
| } | |
| function hideHover() { | |
| sHover.width(0); | |
| seekTime | |
| .text("00:00") | |
| .css({ left: "0px", "margin-left": "0px" }) | |
| .fadeOut(0); | |
| } | |
| function playFromClickedPos() { | |
| audio.currentTime = seekLoc; | |
| seekBar.width(seekT); | |
| hideHover(); | |
| } | |
| function updateCurrTime() { | |
| nTime = new Date(); | |
| nTime = nTime.getTime(); | |
| if (!tFlag) { | |
| tFlag = true; | |
| trackTime.addClass("active"); | |
| } | |
| curMinutes = Math.floor(audio.currentTime / 60); | |
| curSeconds = Math.floor(audio.currentTime - curMinutes * 60); | |
| durMinutes = Math.floor(audio.duration / 60); | |
| durSeconds = Math.floor(audio.duration - durMinutes * 60); | |
| playProgress = (audio.currentTime / audio.duration) * 100; | |
| if (curMinutes < 10) curMinutes = "0" + curMinutes; | |
| if (curSeconds < 10) curSeconds = "0" + curSeconds; | |
| if (durMinutes < 10) durMinutes = "0" + durMinutes; | |
| if (durSeconds < 10) durSeconds = "0" + durSeconds; | |
| if (isNaN(curMinutes) || isNaN(curSeconds)) tProgress.text("00:00"); | |
| else tProgress.text(curMinutes + ":" + curSeconds); | |
| if (isNaN(durMinutes) || isNaN(durSeconds)) tTime.text("00:00"); | |
| else tTime.text(durMinutes + ":" + durSeconds); | |
| if ( | |
| isNaN(curMinutes) || | |
| isNaN(curSeconds) || | |
| isNaN(durMinutes) || | |
| isNaN(durSeconds) | |
| ) | |
| trackTime.removeClass("active"); | |
| else trackTime.addClass("active"); | |
| seekBar.width(playProgress + "%"); | |
| if (playProgress == 100) { | |
| i.attr("class", "fas fa-play"); | |
| seekBar.width(0); | |
| tProgress.text("00:00"); | |
| albumArt.removeClass("buffering").removeClass("active"); | |
| clearInterval(buffInterval); | |
| selectTrack(1); // Auto advance to next track | |
| } | |
| } | |
| function checkBuffering() { | |
| clearInterval(buffInterval); | |
| buffInterval = setInterval(function () { | |
| if (nTime == 0 || bTime - nTime > 1000) albumArt.addClass("buffering"); | |
| else albumArt.removeClass("buffering"); | |
| bTime = new Date(); | |
| bTime = bTime.getTime(); | |
| }, 100); | |
| } | |
| function selectTrack(flag) { | |
| if (flag == 0 || flag == 1) ++currIndex; | |
| else --currIndex; | |
| if (currIndex > -1 && currIndex < albumArtworks.length) { | |
| if (flag == 0) i.attr("class", "fas fa-play"); | |
| else { | |
| albumArt.removeClass("buffering"); | |
| i.attr("class", "fas fa-pause"); | |
| } | |
| seekBar.width(0); | |
| trackTime.removeClass("active"); | |
| tProgress.text("00:00"); | |
| tTime.text("00:00"); | |
| currAlbum = albums[currIndex]; | |
| currTrackName = trackNames[currIndex]; | |
| currArtwork = albumArtworks[currIndex]; | |
| audio.src = trackUrl[currIndex]; | |
| nTime = 0; | |
| bTime = new Date(); | |
| bTime = bTime.getTime(); | |
| if (flag != 0) { | |
| audio.play(); | |
| playerTrack.addClass("active"); | |
| albumArt.addClass("active"); | |
| clearInterval(buffInterval); | |
| checkBuffering(); | |
| } | |
| albumName.text(currAlbum); | |
| trackName.text(currTrackName); | |
| albumArt.find("img.active").removeClass("active"); | |
| $("#" + currArtwork).addClass("active"); | |
| bgArtworkUrl = $("#" + currArtwork).attr("src"); | |
| } else { | |
| if (flag == 0 || flag == 1) --currIndex; | |
| else ++currIndex; | |
| } | |
| } | |
| function initPlayer() { | |
| audio = new Audio(); | |
| selectTrack(0); | |
| audio.loop = false; | |
| playPauseButton.on("click", playPause); | |
| sArea.mousemove(function (event) { | |
| showHover(event); | |
| }); | |
| sArea.mouseout(hideHover); | |
| sArea.on("click", playFromClickedPos); | |
| $(audio).on("timeupdate", updateCurrTime); | |
| playPreviousTrackButton.on("click", function () { | |
| selectTrack(-1); | |
| }); | |
| playNextTrackButton.on("click", function () { | |
| selectTrack(1); | |
| }); | |
| // When the player is done playing and hidden | |
| $('#player-container').on('transitionend', function() { | |
| if (!$(this).hasClass('active')) { | |
| $('#music-player-toggle').css('display', 'block'); | |
| } | |
| }); | |
| } | |
| initPlayer(); | |
| }); | |
| </script> | |
| </body> | |
| </html> |