1document.addEventListener("DOMContentLoaded",function(){const allCountdowns=document.querySelectorAll(".realtime-countdown");allCountdowns.forEach(countdownElement=>{const targetTimestamp=parseInt(countdownElement.dataset.targetTimestamp,10)*1e3;const finishMessage=countdownElement.dataset.finishMessage;const isExtendedLayout=countdownElement.dataset.isExtended==="true";const labels={day:countdownElement.dataset.labelDay,days:countdownElement.dataset.labelDays,day_short:countdownElement.dataset.labelDayShort,hour:countdownElement.dataset.labelHour,hours:countdownElement.dataset.labelHours,minute:countdownElement.dataset.labelMinute,minutes:countdownElement.dataset.labelMinutes,second:countdownElement.dataset.labelSecond,seconds:countdownElement.dataset.labelSeconds};const daysSection=isExtendedLayout?countdownElement.querySelector(".days-section"):null;const updateAnimatedUnit=(unitElement,newValue)=>{const oldValue=unitElement.dataset.value;if(oldValue===newValue)return;unitElement.dataset.value=newValue;const oldDigits=oldValue?oldValue.split(""):[];const newDigits=newValue.split("");const digitSlots=unitElement.querySelectorAll(".digit-slot");if(newDigits.length!==digitSlots.length){let newSlots="";newDigits.forEach((digit,index)=>{const positionClass=newDigits.length===2?index===0?"left":"right":"";newSlots+=`<span class="digit-slot ${positionClass}"><span class="digit-value">${digit}</span></span>`});unitElement.innerHTML=newSlots;return}newDigits.forEach((newDigit,index)=>{if(oldDigits[index]===newDigit)return;const slot=digitSlots[index];if(!slot)return;const oldDigitSpans=slot.querySelectorAll(".digit-value");const newDigitSpan=document.createElement("span");newDigitSpan.className="digit-value";newDigitSpan.textContent=newDigit;newDigitSpan.style.transform="translateY(-100%)";slot.appendChild(newDigitSpan);newDigitSpan.offsetHeight;requestAnimationFrame(()=>{newDigitSpan.style.transform="translateY(0)";oldDigitSpans.forEach(span=>{span.style.transform="translateY(100%)"})});setTimeout(()=>{oldDigitSpans.forEach(span=>{if(span.parentNode){span.parentNode.removeChild(span)}})},400)})};const updateCountdown=()=>{const now=(new Date).getTime();const distance=targetTimestamp-now;if(distance<0){clearInterval(countdownElement.countdownInterval);countdownElement.innerHTML=finishMessage==="hide"?"":"<span>"+finishMessage+"</span>";if(finishMessage==="hide")countdownElement.style.display="none";return}const days=Math.floor(distance/(1e3*60*60*24));const hours=Math.floor(distance%(1e3*60*60*24)/(1e3*60*60));const minutes=Math.floor(distance%(1e3*60*60)/(1e3*60));const seconds=Math.floor(distance%(1e3*60)/1e3);const pad=num=>num<10?"0"+num:String(num);if(isExtendedLayout){if(daysSection){daysSection.style.display=days===0?"none":"flex"}updateAnimatedUnit(countdownElement.querySelector(".days"),String(days));updateAnimatedUnit(countdownElement.querySelector(".hours"),pad(hours));updateAnimatedUnit(countdownElement.querySelector(".minutes"),pad(minutes));updateAnimatedUnit(countdownElement.querySelector(".seconds"),pad(seconds));countdownElement.querySelector(".days").nextElementSibling.textContent=days===1?labels.day:labels.days;countdownElement.querySelector(".hours").nextElementSibling.textContent=hours===1?labels.hour:labels.hours;countdownElement.querySelector(".minutes").nextElementSibling.textContent=minutes===1?labels.minute:labels.minutes;countdownElement.querySelector(".seconds").nextElementSibling.textContent=seconds===1?labels.second:labels.seconds}else{const compactString=`<span><strong>${days}</strong>${labels.day_short}</span> `+`<span><strong>${pad(hours)}</strong>
1h </span>`+`<span><strong>${pad(minutes)}</strong>m </span>`+`<span><strong>${pad(seconds)}</strong>s</span>`;countdownElement.querySelector(".compact-countdown").innerHTML=compactString}};updateCountdown();countdownElement.countdownInterval=setInterval(updateCountdown,1e3)})});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.