fix: reframe greeting as a heartfelt birthday encore
Validate and publish Pages / pages (push) Failing after 6s

This commit is contained in:
2026-08-17 18:07:20 +00:00
parent eff9689a82
commit ad2b31f666
2 changed files with 30 additions and 30 deletions
+28 -28
View File
@@ -4,9 +4,9 @@
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ef2b2d"> <meta name="theme-color" content="#ef2b2d">
<meta name="description" content="2026 metų gimtadienio sveikinimas Donatui Šimkui – DŪMUI. Šiandien mikrofoną perduok mums!"> <meta name="description" content="Netikėtas 2026 metų gimtadienio sveikinimo bisas Donatui Šimkui – DŪMUI.">
<meta property="og:title" content="Su gimtadieniu, Donatai!"> <meta property="og:title" content="Su gimtadieniu, Donatai!">
<meta property="og:description" content="Kur DŪMAS, ten ir gera nuotaika. Šiandien visa scena – tau."> <meta property="og:description" content="Gimtadienis praėjo. Geras sveikinimas – dar ne. Bisui kviečiamas Donatas!">
<meta property="og:image" content="assets/donatas-gitara.jpg"> <meta property="og:image" content="assets/donatas-gitara.jpg">
<title>Donatas Šimkus — 2026 gimtadienio sveikinimas</title> <title>Donatas Šimkus — 2026 gimtadienio sveikinimas</title>
<link rel="preload" href="assets/donatas-hero.jpg" as="image"> <link rel="preload" href="assets/donatas-hero.jpg" as="image">
@@ -24,32 +24,32 @@
<main id="top"> <main id="top">
<section class="hero" aria-labelledby="heroTitle"> <section class="hero" aria-labelledby="heroTitle">
<div class="hero-copy"> <div class="hero-copy">
<p class="kicker">VIENAS VAKARAS / VIENAS JUBILIATAS / NULIS NUOBODULIO</p> <p class="kicker">GIMTADIENIS PRAĖJO / SVEIKINIMAS ATVYKO BISUI / NULIS NUOBODULIO</p>
<h1 id="heroTitle">DONATAI,<br><em>MIKROFONĄ</em><br>PERDUOK MUMS!</h1> <h1 id="heroTitle">DONATAI,<br>GIMTADIENIS PRAĖJO.<br><em>BISAS — NE.</em></h1>
<p class="lead">15+ metų kuri kitų žmonių šventes. Šiandien visa scena, muzika ir garsiausi aplodismentai — <strong>tau.</strong></p> <p class="lead">Kalendorius sako, kad data jau praėjo. Mes sakome: geri sveikinimai nevėluoja — jie tiesiog <strong>ateina bisui.</strong></p>
<button class="start" id="startButton" type="button"><span>DAVAI DAVAI — ŠVENČIAM!</span><b aria-hidden="true">▶</b></button> <button class="start" id="startButton" type="button"><span>ATIDARYTI SVEIKINIMO BISĄ</span><b aria-hidden="true">▶</b></button>
<small>Paspausk. Programa suderinta, tortas patvirtintas.</small> <small>Paspausk. Torto gal ir neliko, bet plojimų — sočiai.</small>
</div> </div>
<figure class="hero-photo"> <figure class="hero-photo">
<img src="assets/donatas-hero.jpg" width="1344" height="1344" alt="Donatas Šimkus – DŪMAS, pasipuošęs kostiumu"> <img src="assets/donatas-hero.jpg" width="1344" height="1344" alt="Donatas Šimkus – DŪMAS, pasipuošęs kostiumu">
<figcaption><span>VAKARO ŽVAIGŽDĖ</span><span>DONATAS ŠIMKUS</span></figcaption> <figcaption><span>ŠIO PUSLAPIO ŽVAIGŽDĖ</span><span>DONATAS ŠIMKUS</span></figcaption>
</figure> </figure>
</section> </section>
<div class="marquee" aria-label="Šventės programa"> <div class="marquee" aria-label="Šventės programa">
<div class="marquee-track"> <div class="marquee-track">
<span>KUR DŪMAS — TEN GERA NUOTAIKA</span><b>★</b><span>700+ RENGINIŲ APŠILIMAS BAIGTAS</span><b>★</b><span>PLANAS D: DONATAS</span><b>★</b><span>ŠIANDIEN SCENARIJŲ RAŠOME MES</span><b>★</b> <span>KUR DŪMAS — TEN GERA NUOTAIKA</span><b>★</b><span>700+ RENGINIŲ APŠILIMAS BAIGTAS</span><b>★</b><span>PLANAS D: DONATAS</span><b>★</b><span>GERI SVEIKINIMAI TURI BISĄ</span><b>★</b>
<span>KUR DŪMAS — TEN GERA NUOTAIKA</span><b>★</b><span>700+ RENGINIŲ APŠILIMAS BAIGTAS</span><b>★</b><span>PLANAS D: DONATAS</span><b>★</b><span>ŠIANDIEN SCENARIJŲ RAŠOME MES</span><b>★</b> <span>KUR DŪMAS — TEN GERA NUOTAIKA</span><b>★</b><span>700+ RENGINIŲ APŠILIMAS BAIGTAS</span><b>★</b><span>PLANAS D: DONATAS</span><b>★</b><span>GERI SVEIKINIMAI TURI BISĄ</span><b>★</b>
</div> </div>
</div> </div>
<section class="numbers" aria-labelledby="numbersTitle"> <section class="numbers" aria-labelledby="numbersTitle">
<div class="section-label">DONATO LIVE STATISTICS*</div> <div class="section-label">DONATO SCENINĖ MATEMATIKA*</div>
<h2 id="numbersTitle">SCENA KALBA<br>PATI UŽ SAVE.</h2> <h2 id="numbersTitle">SCENA KALBA<br>PATI UŽ SAVE.</h2>
<div class="number-grid"> <div class="number-grid">
<article><span>01</span><strong data-count="15">0</strong><b>+ METŲ</b><p>Kuriant šventės atmosferą</p></article> <article><span>01</span><strong data-count="15">0</strong><b>+ METŲ</b><p>Kuriant šventės atmosferą</p></article>
<article><span>02</span><strong data-count="700">0</strong><b>+ RENGINIŲ</b><p>Ir nė vienas nebuvo kaip šis</p></article> <article><span>02</span><strong data-count="700">0</strong><b>+ RENGINIŲ</b><p>Ir nė vienas nebuvo kaip šis</p></article>
<article><span>03</span><strong>1</strong><b>JUBILIATAS</b><p>Šiandien svarbesnis už programą</p></article> <article><span>03</span><strong>1</strong><b>DONATAS</b><p>Vertas atskiro interneto puslapio</p></article>
<article><span>04</span><strong>∞</strong><b>ENERGIJOS</b><p>Oficialiai neišmatuojama</p></article> <article><span>04</span><strong>∞</strong><b>ENERGIJOS</b><p>Oficialiai neišmatuojama</p></article>
</div> </div>
<small>* Faktai apie patirtį — iš viešo Donato profilio. Šventiniai matavimo vienetai — mūsų.</small> <small>* Faktai apie patirtį — iš viešo Donato profilio. Šventiniai matavimo vienetai — mūsų.</small>
@@ -58,24 +58,24 @@
<section class="switch" aria-labelledby="switchTitle"> <section class="switch" aria-labelledby="switchTitle">
<div class="switch-photo"><img src="assets/donatas-gitara.jpg" width="600" height="600" alt="Donatas su raudona gitara ir žvaigždės formos akiniais"></div> <div class="switch-photo"><img src="assets/donatas-gitara.jpg" width="600" height="600" alt="Donatas su raudona gitara ir žvaigždės formos akiniais"></div>
<div class="switch-copy"> <div class="switch-copy">
<p class="kicker">TONIGHT'S HEADLINER</p> <p class="kicker">THE ENCORE HEADLINER</p>
<h2 id="switchTitle">700+ RENGINIŲ.<br>ŠIANDIEN —<br><em>PAČIAM ŠVĘSTI.</em></h2> <h2 id="switchTitle">700+ RENGINIŲ.<br>DABAR —<br><em>SVEIKINIMAS TAU.</em></h2>
<p>Pagaliau renginys, kuriame vedėjui leidžiama atsisėsti. Nebent publika paprašys biso. O publika, žinoma, paprašys.</p> <p>Tiek kartų kūrei progą šypsotis kitiems, kad vieno sveikinimo dieną mums pasirodė per maža. Todėl štai — papildomas numeris programoje.</p>
<a class="video-link" href="https://www.youtube.com/watch?v=lBpCDIzYkSA" target="_blank" rel="noreferrer">PALEISTI „DAVAI DAVAI“ ↗</a> <a class="video-link" href="https://www.youtube.com/watch?v=lBpCDIzYkSA" target="_blank" rel="noreferrer">PALEISTI „DAVAI DAVAI“ ↗</a>
</div> </div>
</section> </section>
<section class="package" aria-labelledby="packageTitle"> <section class="package" aria-labelledby="packageTitle">
<div class="package-heading"> <div class="package-heading">
<p class="kicker">PREMIUM BIRTHDAY PACKAGE</p> <p class="kicker">PREMIUM GREETING ENCORE</p>
<h2 id="packageTitle">ŠIANDIENOS<br>PASLAUGOS</h2> <h2 id="packageTitle">PAVĖLUOTAS? NE.<br>PRATĘSTAS.</h2>
</div> </div>
<ol> <ol>
<li><b>01</b><span>Priimti sveikinimus</span><i>ĮSKAIČIUOTA</i></li> <li><b>01</b><span>Priimti sveikinimus</span><i>ĮSKAIČIUOTA</i></li>
<li><b>02</b><span>Nesirūpinti scenarijumi</span><i>PRIVALOMA</i></li> <li><b>02</b><span>Nesirūpinti sveikinimo data</span><i>PRIVALOMA</i></li>
<li><b>03</b><span>Patikrinti torto kokybę</span><i>NERIBOTA</i></li> <li><b>03</b><span>Patikrinti torto kokybę</span><i>NERIBOTA</i></li>
<li><b>04</b><span>Atlikti dainą tik publikos prašymu</span><i>BISAS GALIMAS</i></li> <li><b>04</b><span>Atlikti dainą tik publikos prašymu</span><i>BISAS GALIMAS</i></li>
<li><b>05</b><span>Švęsti nuo pirmos iki paskutinės minutės</span><i>100 %</i></li> <li><b>05</b><span>Priimti netikėtą sveikinimo bisą</span><i>100 %</i></li>
</ol> </ol>
</section> </section>
@@ -87,11 +87,11 @@
<section class="rap" aria-labelledby="rapTitle"> <section class="rap" aria-labelledby="rapTitle">
<div> <div>
<p class="kicker">SPECIAL BIRTHDAY FREESTYLE</p> <p class="kicker">SPECIAL BIRTHDAY FREESTYLE</p>
<h2 id="rapTitle">APIE SVEČIUS REPAVAI.<br><em>ŠIANDIEN REPAS — APIE TAVE.</em></h2> <h2 id="rapTitle">APIE SVEČIUS REPAVAI.<br><em>O DABAR REPAS — APIE TAVE.</em></h2>
</div> </div>
<blockquote id="rapText"> <blockquote id="rapText">
<span>Septyni šimtai švenčių — visur gera banga,</span> <span>Septyni šimtai švenčių — visur gera banga,</span>
<span>Bet šiandien, Donatai, svarbiausia tik viena:</span> <span>Nors data praėjo, svarbiausia tik viena:</span>
<span>Mikrofoną padėk, tegul draugai garsiai taria —</span> <span>Mikrofoną padėk, tegul draugai garsiai taria —</span>
<span>Su gimtadieniu, DŪMAI, tegu scena tau dar žaria!</span> <span>Su gimtadieniu, DŪMAI, tegu scena tau dar žaria!</span>
</blockquote> </blockquote>
@@ -99,20 +99,20 @@
</section> </section>
<section class="wish" id="sveikinimas" aria-labelledby="wishTitle"> <section class="wish" id="sveikinimas" aria-labelledby="wishTitle">
<p class="kicker">O DABAR — BE SCENARIJAUS</p> <p class="kicker">O DABAR — NUOŠIRDŽIAI, BE TELEPROMPTERIO</p>
<h2 id="wishTitle">SU GIMTADIENIU,<br><em>DONATAI!</em></h2> <h2 id="wishTitle">SU GIMTADIENIU,<br><em>DONATAI!</em></h2>
<div class="wish-grid"> <div class="wish-grid">
<p>Linkime, kad gyvenime netrūktų tos pačios šilumos, energijos ir gero humoro, kuriuos daliji kitų žmonių šventėse.</p> <p>Donatai, gimtadienis gal ir praėjo, bet geri žmonės ir geri palinkėjimai į vieną kalendoriaus langelį netelpa. Linkime, kad šiluma, energija ir humoras, kuriuos taip dosniai daliji kitiems, visada sugrįžtų su kaupu.</p>
<p>Tegul kiekviena nauja diena būna dar vienas puikus renginys — tik šįkart be būtinybės pačiam rašyti visą scenarijų.</p> <p>Tegul sveikata laiko tvirčiau už geriausią scenos konstrukciją, šalia būna žmonės, su kuriais gera ir per garsiausią vakarėlį, ir visiškoje tyloje, o darbai palieka ne tik pilnas sales, bet ir pilną širdį.</p>
<p>Daug sveikatos, stiprių žmonių šalia, garsaus juoko, geros muzikos ir istorijų, vertų ne vieno biso.</p> <p>Ir tegul gyvenimas kuo dažniau maloniai sulaužo scenarijų: atneša netikėtų kelionių, skambių dainų, gardžių rytų be žadintuvo ir progų, kuriose tau pačiam nieko nereikia vesti — tik būti, juoktis ir mėgautis.</p>
</div> </div>
<div class="signature"><strong>SU GIMTADIENIU!</strong><span>2026 / MADE WITH RESPECT + APPLAUSE</span></div> <div class="signature"><strong>SU GIMTADIENIU!</strong><span>2026 / MADE WITH RESPECT + APPLAUSE</span></div>
</section> </section>
<section class="encore" aria-label="Pakartoti sveikinimą"> <section class="encore" aria-label="Pakartoti sveikinimą">
<p>AR DONATAS VERTAS BISO?</p> <p>AR GERAS SVEIKINIMAS VERTAS BISO?</p>
<h2 id="encoreTitle">PUBLIKA SAKO:<br><em>TAIP!</em></h2> <h2 id="encoreTitle">PUBLIKA SAKO:<br><em>TAIP!</em></h2>
<button class="encore-button" id="encoreButton" type="button">DAR KARTĄ KONFETI ↗</button> <button class="encore-button" id="encoreButton" type="button">PALEISTI BISĄ DAR KARTĄ ↗</button>
</section> </section>
</main> </main>
@@ -121,7 +121,7 @@
<p>Viešų faktų ir nuotraukų šaltinis: <a href="https://vedejasdumas.lt/" rel="noreferrer">vedejasdumas.lt</a></p> <p>Viešų faktų ir nuotraukų šaltinis: <a href="https://vedejasdumas.lt/" rel="noreferrer">vedejasdumas.lt</a></p>
<p>Nuotraukų teisės priklauso jų autoriams / savininkams.</p> <p>Nuotraukų teisės priklauso jų autoriams / savininkams.</p>
</footer> </footer>
<div class="toast" id="toast" role="status" aria-live="polite">ŠVENTĖ PALEISTA — PLOJIMAI DONATUI!</div> <div class="toast" id="toast" role="status" aria-live="polite">SVEIKINIMO BISAS PARUOŠTAS</div>
<script src="script.js"></script> <script src="script.js"></script>
</body> </body>
</html> </html>
+2 -2
View File
@@ -4,7 +4,7 @@ function piece(x,y,i){const a=-Math.PI*.9+(i%50)/49*Math.PI*.8,s=7+Math.random()
function burst(x=innerWidth/2,y=innerHeight*.7){if(reduced.matches)return;for(let i=0;i<220;i++)pieces.push(piece(x,y,i));if(!frame)animate()} function burst(x=innerWidth/2,y=innerHeight*.7){if(reduced.matches)return;for(let i=0;i<220;i++)pieces.push(piece(x,y,i));if(!frame)animate()}
function animate(){ctx.clearRect(0,0,innerWidth,innerHeight);pieces=pieces.filter(p=>p.life>0&&p.y<innerHeight+90);pieces.forEach(p=>{p.vx*=p.d;p.vy=p.vy*p.d+p.g;p.x+=p.vx;p.y+=p.vy;p.r+=p.spin;p.life--;ctx.save();ctx.translate(p.x,p.y);ctx.rotate(p.r);ctx.fillStyle=p.color;ctx.strokeStyle='#080808';ctx.lineWidth=1;if(p.shape===0){ctx.fillRect(-p.size/2,-p.size/4,p.size,p.size/2);ctx.strokeRect(-p.size/2,-p.size/4,p.size,p.size/2)}else if(p.shape===1){ctx.beginPath();ctx.moveTo(0,-p.size/2);ctx.lineTo(p.size/2,p.size/2);ctx.lineTo(-p.size/2,p.size/2);ctx.closePath();ctx.fill();ctx.stroke()}else{ctx.fillRect(-p.size/3,-p.size/2,p.size*.66,p.size)}ctx.restore()});if(pieces.length)frame=requestAnimationFrame(animate);else{frame=null;ctx.clearRect(0,0,innerWidth,innerHeight)}} function animate(){ctx.clearRect(0,0,innerWidth,innerHeight);pieces=pieces.filter(p=>p.life>0&&p.y<innerHeight+90);pieces.forEach(p=>{p.vx*=p.d;p.vy=p.vy*p.d+p.g;p.x+=p.vx;p.y+=p.vy;p.r+=p.spin;p.life--;ctx.save();ctx.translate(p.x,p.y);ctx.rotate(p.r);ctx.fillStyle=p.color;ctx.strokeStyle='#080808';ctx.lineWidth=1;if(p.shape===0){ctx.fillRect(-p.size/2,-p.size/4,p.size,p.size/2);ctx.strokeRect(-p.size/2,-p.size/4,p.size,p.size/2)}else if(p.shape===1){ctx.beginPath();ctx.moveTo(0,-p.size/2);ctx.lineTo(p.size/2,p.size/2);ctx.lineTo(-p.size/2,p.size/2);ctx.closePath();ctx.fill();ctx.stroke()}else{ctx.fillRect(-p.size/3,-p.size/2,p.size*.66,p.size)}ctx.restore()});if(pieces.length)frame=requestAnimationFrame(animate);else{frame=null;ctx.clearRect(0,0,innerWidth,innerHeight)}}
function count(){document.querySelectorAll('[data-count]').forEach(el=>{const target=+el.dataset.count;if(+el.textContent===target)return;let v=0,step=Math.max(1,Math.ceil(target/55));function tick(){v=Math.min(target,v+step);el.textContent=v;if(v<target)requestAnimationFrame(tick)}tick()})} function count(){document.querySelectorAll('[data-count]').forEach(el=>{const target=+el.dataset.count;if(+el.textContent===target)return;let v=0,step=Math.max(1,Math.ceil(target/55));function tick(){v=Math.min(target,v+step);el.textContent=v;if(v<target)requestAnimationFrame(tick)}tick()})}
function showToast(text='ŠVENTĖ PALEISTA — PLOJIMAI DONATUI!'){clearTimeout(toastTimer);toast.textContent=text;toast.classList.add('visible');toastTimer=setTimeout(()=>toast.classList.remove('visible'),3200)} function showToast(text='SVEIKINIMO BISAS PALEISTAS — PLOJIMAI DONATUI!'){clearTimeout(toastTimer);toast.textContent=text;toast.classList.add('visible');toastTimer=setTimeout(()=>toast.classList.remove('visible'),3200)}
function launch(e){document.body.classList.add('started');liveText.textContent='TIESIOGINIS ETERIS';start.querySelector('span').textContent='ŠVENTĖ PALEISTA!';const r=e?.currentTarget?.getBoundingClientRect();burst(r?r.left+r.width/2:innerWidth/2,r?r.top:innerHeight*.7);count();showToast()} function launch(e){document.body.classList.add('started');liveText.textContent='BISAS PALEISTAS';start.querySelector('span').textContent='SVEIKINIMO BISAS ATIDARYTAS!';const r=e?.currentTarget?.getBoundingClientRect();burst(r?r.left+r.width/2:innerWidth/2,r?r.top:innerHeight*.7);count();showToast()}
function rap(){clearInterval(rapTimer);const lines=[...document.querySelectorAll('#rapText span')];lines.forEach(x=>x.classList.remove('active'));let i=0;const next=()=>{if(i<lines.length)lines[i++].classList.add('active');else clearInterval(rapTimer)};next();rapTimer=setInterval(next,650);showToast('REPAS DONATUI — PUBLIKA PRAŠO BISO!')} function rap(){clearInterval(rapTimer);const lines=[...document.querySelectorAll('#rapText span')];lines.forEach(x=>x.classList.remove('active'));let i=0;const next=()=>{if(i<lines.length)lines[i++].classList.add('active');else clearInterval(rapTimer)};next();rapTimer=setInterval(next,650);showToast('REPAS DONATUI — PUBLIKA PRAŠO BISO!')}
start.addEventListener('click',launch);encore.addEventListener('click',launch);rapButton.addEventListener('click',e=>{rap();const r=e.currentTarget.getBoundingClientRect();burst(r.left+r.width/2,r.top)});addEventListener('resize',resize,{passive:true});resize();const observer=new IntersectionObserver(entries=>{if(entries.some(x=>x.isIntersecting)){count();observer.disconnect()}},{threshold:.3});observer.observe(document.querySelector('.numbers'));})(); start.addEventListener('click',launch);encore.addEventListener('click',launch);rapButton.addEventListener('click',e=>{rap();const r=e.currentTarget.getBoundingClientRect();burst(r.left+r.width/2,r.top)});addEventListener('resize',resize,{passive:true});resize();const observer=new IntersectionObserver(entries=>{if(entries.some(x=>x.isIntersecting)){count();observer.disconnect()}},{threshold:.3});observer.observe(document.querySelector('.numbers'));})();