1+ < << << << refs / remotes / origin / main
12const targetDate = new Date ( "March 9, 2026 00:00:00" ) . getTime ( ) ;
23const daysElement = document . getElementById ( "days" ) ;
34const hoursElement = document . getElementById ( "hours" ) ;
@@ -70,6 +71,58 @@ function updateCountdown() {
7071 secondsElement . textContent = "00" ;
7172 completedMessage . style . display = "block" ;
7273 document . querySelector ( ".countdown-container" ) . style . display = "none" ;
74+ = === ===
75+ // Configuration
76+ const START_DATE = new Date ( "December 8, 2025 00:00:00" ) . getTime ( ) ;
77+ const TARGET_DATE = new Date ( "March 9, 2026 00:00:00" ) . getTime ( ) ;
78+
79+ // DOM Elements
80+ const daysElement = document . getElementById ( "days" ) ;
81+ const hoursElement = document . getElementById ( "hours" ) ;
82+ const minutesElement = document . getElementById ( "minutes" ) ;
83+ const secondsElement = document . getElementById ( "seconds" ) ;
84+ const completedMessage = document . getElementById ( "completedMessage" ) ;
85+ const percentageElement = document . getElementById ( "percentage" ) ;
86+ const progressFill = document . getElementById ( "progressFill" ) ;
87+ const progressMarker = document . getElementById ( "progressMarker" ) ;
88+ const elapsedTimeElement = document . getElementById ( "elapsedTime" ) ;
89+ const remainingTimeElement = document . getElementById ( "remainingTime" ) ;
90+
91+ let countdownInterval ;
92+
93+ // Update Progress Bar - Fixed UI Bug
94+ function updateProgressBar ( ) {
95+ const now = new Date ( ) . getTime ( ) ;
96+ const totalDuration = TARGET_DATE - START_DATE ;
97+ const elapsed = Math . max ( 0 , now - START_DATE ) ;
98+ const progressPercent = Math . min ( ( elapsed / totalDuration ) * 100 , 100 ) ;
99+
100+ // Fix progress bar overflow bug
101+ const safePercent = Math . min ( Math . max ( progressPercent , 0 ) , 100 ) ;
102+
103+ // Update progress bar
104+ progressFill . style . width = `${ safePercent } %` ;
105+ progressMarker . style . left = `${ safePercent } %` ;
106+ percentageElement . textContent = `${ safePercent . toFixed ( 5 ) } %` ;
107+
108+ // Update time stats
109+ const daysElapsed = Math . floor ( elapsed / ( 1000 * 60 * 60 * 24 ) ) ;
110+ const daysRemaining = Math . max ( 0 , Math . floor ( ( TARGET_DATE - now ) / ( 1000 * 60 * 60 * 24 ) ) ) ;
111+
112+ elapsedTimeElement . textContent = `${ daysElapsed } days passed` ;
113+ remainingTimeElement . textContent = `${ daysRemaining } days left` ;
114+
115+ return safePercent ;
116+ }
117+
118+ // Update Countdown
119+ function updateCountdown ( ) {
120+ const now = new Date ( ) . getTime ( ) ;
121+ const distance = TARGET_DATE - now ;
122+
123+ if ( distance < 0 ) {
124+ handleCountdownComplete ( ) ;
125+ > >>> >>> countdown ui update
73126 return ;
74127 }
75128
@@ -79,6 +132,7 @@ function updateCountdown() {
79132 ) ;
80133 const minutes = Math . floor ( ( distance % ( 1000 * 60 * 60 ) ) / ( 1000 * 60 ) ) ;
81134 const seconds = Math . floor ( ( distance % ( 1000 * 60 ) ) / 1000 ) ;
135+ < << << << refs / remotes / origin / main
82136
83137 // Remove animation classes first
84138 daysElement . classList . remove ( "changed" ) ;
@@ -201,3 +255,70 @@ document.addEventListener("mousemove", (e) => {
201255document . addEventListener ( "click" , ( e ) => {
202256 createSparkle ( e . clientX , e . clientY ) ;
203257} ) ;
258+ = === ===
259+
260+ updateValue ( daysElement , days ) ;
261+ updateValue ( hoursElement , hours ) ;
262+ updateValue ( minutesElement , minutes ) ;
263+ updateValue ( secondsElement , seconds ) ;
264+
265+ updateProgressBar ( ) ;
266+ }
267+
268+ function updateValue ( element , value ) {
269+ const formattedValue = value < 10 ? `0${ value } ` : value ;
270+ if ( element . textContent !== formattedValue ) {
271+ element . textContent = formattedValue ;
272+ element . classList . add ( 'changed' ) ;
273+ setTimeout ( ( ) => element . classList . remove ( 'changed' ) , 500 ) ;
274+ }
275+ }
276+
277+ function handleCountdownComplete ( ) {
278+ clearInterval ( countdownInterval ) ;
279+
280+ daysElement . textContent = "00" ;
281+ hoursElement . textContent = "00" ;
282+ minutesElement . textContent = "00" ;
283+ secondsElement . textContent = "00" ;
284+
285+ completedMessage . style . display = "block" ;
286+
287+ // Set progress to 100% with safety check
288+ progressFill . style . width = "100%" ;
289+ progressMarker . style . left = "100%" ;
290+ percentageElement . textContent = "100%" ;
291+ remainingTimeElement . textContent = "0 days left" ;
292+
293+ // Add completion animation to progress bar
294+ progressFill . style . background = "linear-gradient(90deg, #ffd700, #ffa500, #ffd700)" ;
295+ progressFill . style . backgroundSize = "200% 100%" ;
296+ progressFill . style . animation = "shimmer 1.5s infinite" ;
297+ }
298+
299+ // Initialize
300+ function init ( ) {
301+ // Check if elements exist before updating
302+ if ( progressFill && progressMarker ) {
303+ updateProgressBar ( ) ;
304+ }
305+
306+ if ( daysElement && hoursElement && minutesElement && secondsElement ) {
307+ updateCountdown ( ) ;
308+ }
309+
310+ countdownInterval = setInterval ( updateCountdown , 1000 ) ;
311+ }
312+
313+ // Start when DOM is loaded
314+ document . addEventListener ( 'DOMContentLoaded' , init ) ;
315+
316+ // Handle page visibility changes
317+ document . addEventListener ( 'visibilitychange' , function ( ) {
318+ if ( ! document . hidden ) {
319+ // Update immediately when page becomes visible again
320+ updateCountdown ( ) ;
321+ updateProgressBar ( ) ;
322+ }
323+ } ) ;
324+ > >>> >>> countdown ui update
0 commit comments