Autosave: 20260812-043906
This commit is contained in:
parent
01f5038a7b
commit
2271637c50
BIN
assets/pasted-20260812-042718-a4bb91be.png
Normal file
BIN
assets/pasted-20260812-042718-a4bb91be.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 21 KiB |
File diff suppressed because it is too large
Load Diff
@ -24,8 +24,7 @@
|
||||
'Consultanță ESG pentru companii, finanțări și relația cu partenerii': 'ESG consulting for companies, financing, and partner relationships',
|
||||
'Transformăm cerințele ESG în procese clare, informații organizate și avantaje competitive.': 'We turn ESG requirements into clear processes, organized information, and competitive advantages.',
|
||||
'Avangarde Bright Concepts ajută companiile să înțeleagă, să colecteze și să gestioneze datele ESG necesare pentru finanțare, parteneriate, DNSH și conformitate — fără jargon și fără documente de dragul documentelor.': 'Avangarde Bright Concepts helps companies understand, collect, and manage the ESG data needed for financing, partnerships, DNSH, and compliance — without jargon and without paperwork for its own sake.',
|
||||
'Promisiunea noastră': 'Our promise',
|
||||
'Build Brightness in Your Business': 'Build Brightness in Your Business',
|
||||
'we build brightness in your business': 'we build brightness in your business',
|
||||
'Solicită o discuție': 'Request a conversation',
|
||||
'Începe evaluarea ESG': 'Start the ESG assessment',
|
||||
'30+ ani': '30+ years',
|
||||
@ -83,6 +82,67 @@
|
||||
'Primul pas: clarificăm ce cerințe ESG vi se aplică.': 'First step: we clarify which ESG requirements apply to you.',
|
||||
'Trimiteți câteva detalii și revenim cu o discuție orientată spre soluții practice.': 'Send a few details and we will come back with a discussion focused on practical solutions.',
|
||||
|
||||
|
||||
'Consultanță ESG pentru solicitările pe care le primiți din piață': 'ESG consulting for the requests you receive from the market',
|
||||
'Primești cerințe ESG de la bancă, investitor sau client?': 'Received ESG requirements from a bank, investor, or client?',
|
||||
'Te ajutăm să înțelegi ce ți se cere, să identifici informațiile necesare și să răspunzi clar, credibil și actualizabil.': 'We help you understand what is being requested, identify the necessary information, and respond clearly, credibly, and in a way that can be updated.',
|
||||
'Primul pas: clarificăm cerințele ESG': 'First step: we clarify the ESG requirements',
|
||||
'Start evaluation': 'Start evaluation',
|
||||
'Bănci / investitori / clienți': 'Banks / investors / clients',
|
||||
'solicitări ESG': 'ESG requests',
|
||||
'Finanțări & DNSH': 'Financing & DNSH',
|
||||
'documentație suport': 'supporting documentation',
|
||||
'Actualizare periodică': 'Periodic updating',
|
||||
'informații pregătite': 'prepared information',
|
||||
'Clădire modernă de birouri cu spații verzi și cer deschis': 'Modern office building with green areas and open sky',
|
||||
'Primul pas': 'First step',
|
||||
'ce solicitare ați primit': 'what request you received',
|
||||
'ce informații sunt necesare': 'what information is needed',
|
||||
'ce pași urmează': 'what steps follow',
|
||||
'Rezultat: știți exact ce aveți de făcut.': 'Outcome: you know exactly what needs to be done.',
|
||||
'Cerințele ESG ajung tot mai des la companii.': 'ESG requirements are reaching companies more and more often.',
|
||||
'ESG nu mai este doar pentru marile companii. Băncile, investitorii, programele de finanțare, clienții mari și partenerii cer informații despre energie, emisii, deșeuri, reciclare, politici interne și guvernanță.': 'ESG is no longer only for large companies. Banks, investors, funding programs, large clients, and partners request information about energy, emissions, waste, recycling, internal policies, and governance.',
|
||||
'Vi se cer date pentru finanțare?': 'Are you being asked for data for financing?',
|
||||
'Clientul cere informații de sustenabilitate?': 'Is a client requesting sustainability information?',
|
||||
'Trebuie să actualizați periodic răspunsurile?': 'Do you need to update responses periodically?',
|
||||
'Ce se vinde de fapt': 'What is actually being sold',
|
||||
'Nu rapoarte. Capacitatea companiei de a răspunde cerințelor ESG.': 'Not reports. The company’s ability to respond to ESG requirements.',
|
||||
'Ajutăm companiile să treacă de la „nu știm ce ni se cere” la un set de informații organizate, documentate și ușor de actualizat.': 'We help companies move from “we do not know what is being requested” to organized, documented, and easy-to-update information.',
|
||||
'Înțelegeți cerința': 'Understand the requirement',
|
||||
'Clarificăm cine solicită informațiile, ce termen există și ce nivel de detaliu este necesar.': 'We clarify who is requesting the information, the timeline, and the necessary level of detail.',
|
||||
'Identificați datele': 'Identify the data',
|
||||
'Stabilim ce informații trebuie colectate: energie, emisii, deșeuri, reciclare, politici, proceduri.': 'We establish what information must be collected: energy, emissions, waste, recycling, policies, and procedures.',
|
||||
'Organizați răspunsul': 'Organize the response',
|
||||
'Structurăm datele și documentele astfel încât răspunsul să fie coerent, credibil și reutilizabil.': 'We structure data and documents so the response is coherent, credible, and reusable.',
|
||||
'Actualizați periodic': 'Update periodically',
|
||||
'Creăm un mod simplu de a menține informațiile ESG pregătite pentru solicitări viitoare.': 'We create a simple way to keep ESG information ready for future requests.',
|
||||
'Cum te ajutăm rapid': 'How we help quickly',
|
||||
'Servicii orientate spre rezultat, nu spre birocrație.': 'Services focused on outcomes, not bureaucracy.',
|
||||
'Primul pas este să clarificăm ce cerințe ESG se aplică. Apoi organizăm datele și pregătim răspunsul pe care îl puteți folosi în relația cu banca, investitorul, clientul sau programul de finanțare.': 'The first step is to clarify which ESG requirements apply. Then we organize the data and prepare the response you can use with the bank, investor, client, or funding program.',
|
||||
'Clarificare cerințe ESG': 'Clarification of ESG requirements',
|
||||
'Analizăm solicitarea primită de la bancă, investitor, client, partener sau program de finanțare.': 'We analyze the request received from a bank, investor, client, partner, or funding program.',
|
||||
'Rezultat: știți ce vi se aplică.': 'Outcome: you know what applies to you.',
|
||||
'Organizăm informațiile și documentele într-o structură pe care compania o poate actualiza.': 'We organize information and documents in a structure the company can update.',
|
||||
'Rezultat: datele nu mai sunt împrăștiate.': 'Outcome: the data is no longer scattered.',
|
||||
'Răspuns ESG asistat': 'Assisted ESG response',
|
||||
'Pregătim răspunsuri clare și documentate pentru solicitările primite din piață.': 'We prepare clear and documented responses for requests received from the market.',
|
||||
'Rezultat: încredere și timp câștigat.': 'Outcome: confidence and time saved.',
|
||||
'Înțelegem atât cerințele ESG, cât și logica finanțatorilor.': 'We understand both ESG requirements and the logic of financiers.',
|
||||
'Experiența în banking, risc, analiză financiară, finanțări și DNSH ne ajută să traducem ESG în pași practici pentru companie.': 'Experience in banking, risk, financial analysis, financing, and DNSH helps us translate ESG into practical steps for the company.',
|
||||
'30+ ani banking, risc și finanțări': '30+ years in banking, risk, and financing',
|
||||
'Auditor de Mediu și Expert DNSH': 'Environmental Auditor and DNSH Expert',
|
||||
'Abordare practică, actualizabilă': 'Practical, update-ready approach',
|
||||
'Dacă ați primit o solicitare ESG sau pregătiți o finanțare, începem cu o evaluare scurtă: ce se cere, ce aveți deja și ce lipsește.': 'If you received an ESG request or are preparing financing, we start with a short assessment: what is requested, what you already have, and what is missing.',
|
||||
'Începe evaluarea': 'Start the assessment',
|
||||
|
||||
'Ați primit un chestionar ESG?': 'Have you received an ESG questionnaire?',
|
||||
'știți ce vi se aplică.': 'you know what applies to you.',
|
||||
'datele nu mai sunt împrăștiate.': 'the data is no longer scattered.',
|
||||
'încredere și timp câștigat.': 'confidence and time saved.',
|
||||
'Primul pas: clarificăm ce cerințe ESG se aplică.': 'First step: we clarify which ESG requirements apply.',
|
||||
|
||||
'Discutați cu noi': 'Talk to us',
|
||||
|
||||
'Discutați cu noi despre cerințele ESG ale companiei.': 'Talk to us about your company’s ESG requirements.',
|
||||
'Completați formularul și vom reveni pentru a clarifica nevoia, termenul și pașii practici.': 'Complete the form and we will follow up to clarify the need, timeline, and practical steps.',
|
||||
'[abc_contact_form]': '[abc_contact_form]',
|
||||
|
||||
@ -15,7 +15,6 @@
|
||||
const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)');
|
||||
const hero = document.querySelector('.abc-hero');
|
||||
const grid = hero?.querySelector('.abc-hero-grid');
|
||||
const copyColumn = grid?.querySelector('.abc-hero-copy-column');
|
||||
const snapshotColumn = grid?.querySelector('.abc-snapshot-column');
|
||||
const card = snapshotColumn?.querySelector('.abc-hero-card');
|
||||
const gallery = document.querySelector('.abc-nature-story__gallery');
|
||||
@ -36,15 +35,85 @@
|
||||
}
|
||||
}
|
||||
|
||||
if (!hero || !grid || !copyColumn || !snapshotColumn || !card || reducedMotion.matches || window.innerWidth < 901 || !card.animate) {
|
||||
if (!hero || !grid || !snapshotColumn || !card || reducedMotion.matches || window.innerWidth < 901 || !card.animate) {
|
||||
return;
|
||||
}
|
||||
|
||||
const runCinematic = async () => {
|
||||
// Keep the resting card fully visible long enough to be read before the focus sequence.
|
||||
await delay(7000);
|
||||
// Hide the resting card on desktop so the opening impression is the large message first,
|
||||
// not a small block that later grows. The real card is revealed only after the cinematic copy shrinks back.
|
||||
document.body.classList.add('abc-card-intro-pending');
|
||||
|
||||
if (reducedMotion.matches || window.scrollY > hero.offsetHeight * 0.7) {
|
||||
const restoreRestingCard = () => {
|
||||
document.querySelectorAll('.abc-snapshot-cinematic').forEach((element) => element.remove());
|
||||
document.body.classList.remove('abc-cinematic-active', 'abc-card-intro-pending');
|
||||
card.style.opacity = '';
|
||||
card.style.visibility = '';
|
||||
card.classList.add('abc-snapshot-restored');
|
||||
};
|
||||
|
||||
const getRestingTextMetrics = () => {
|
||||
const metrics = new Map();
|
||||
card.querySelectorAll('h3, li, .abc-card-label, .abc-card-note').forEach((element, index) => {
|
||||
const computed = window.getComputedStyle(element);
|
||||
metrics.set(index, {
|
||||
fontSize: Number.parseFloat(computed.fontSize) || 16,
|
||||
letterSpacing: computed.letterSpacing,
|
||||
lineHeight: computed.lineHeight,
|
||||
});
|
||||
});
|
||||
return metrics;
|
||||
};
|
||||
|
||||
const applyIntroTextScale = (clone, metrics) => {
|
||||
clone.querySelectorAll('h3, li, .abc-card-label, .abc-card-note').forEach((element, index) => {
|
||||
const metric = metrics.get(index);
|
||||
if (!metric) {
|
||||
return;
|
||||
}
|
||||
|
||||
const isHeading = element.matches('h3');
|
||||
const isLabel = element.matches('.abc-card-label');
|
||||
const multiplier = isHeading ? 1.42 : isLabel ? 1.08 : 1.14;
|
||||
const maxSize = isHeading ? 56 : isLabel ? 13 : 20;
|
||||
const introSize = Math.min(metric.fontSize * multiplier, maxSize);
|
||||
|
||||
element.dataset.abcRestFontSize = `${metric.fontSize}`;
|
||||
element.dataset.abcRestLetterSpacing = metric.letterSpacing;
|
||||
element.style.fontSize = `${introSize}px`;
|
||||
if (isHeading) {
|
||||
element.style.letterSpacing = '-0.045em';
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
const animateTextBackToRest = (clone) => Array.from(clone.querySelectorAll('h3, li, .abc-card-label, .abc-card-note')).map((element) => {
|
||||
const targetSize = Number.parseFloat(element.dataset.abcRestFontSize || '');
|
||||
if (!targetSize || !element.animate) {
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
const currentSize = Number.parseFloat(window.getComputedStyle(element).fontSize) || targetSize;
|
||||
const targetLetterSpacing = element.dataset.abcRestLetterSpacing || window.getComputedStyle(element).letterSpacing;
|
||||
const currentLetterSpacing = window.getComputedStyle(element).letterSpacing;
|
||||
|
||||
const animation = element.animate([
|
||||
{ fontSize: `${currentSize}px`, letterSpacing: currentLetterSpacing, transform: 'translate3d(0,0,0)' },
|
||||
{ fontSize: `${targetSize}px`, letterSpacing: targetLetterSpacing, transform: 'translate3d(0,0,0)' },
|
||||
], {
|
||||
duration: 1250,
|
||||
easing: 'cubic-bezier(.16,1,.3,1)',
|
||||
fill: 'forwards',
|
||||
});
|
||||
|
||||
return animation.finished.catch(() => undefined);
|
||||
});
|
||||
|
||||
const runCinematic = async () => {
|
||||
// First: let the large hero text be the opening moment.
|
||||
await delay(1050);
|
||||
|
||||
if (reducedMotion.matches || window.scrollY > hero.offsetHeight * 0.65) {
|
||||
restoreRestingCard();
|
||||
return;
|
||||
}
|
||||
|
||||
@ -52,122 +121,87 @@
|
||||
const heroRect = hero.getBoundingClientRect();
|
||||
const gridRect = grid.getBoundingClientRect();
|
||||
const documentTop = window.scrollY;
|
||||
const targetWidth = Math.min(gridRect.width * 0.78, 1040);
|
||||
const targetLeft = gridRect.left + Math.max(0, (gridRect.width - targetWidth) * 0.08);
|
||||
const targetTop = heroRect.top + documentTop + Math.max(90, heroRect.height * 0.105);
|
||||
const targetWidth = Math.min(Math.max(gridRect.width * 0.44, 520), 640);
|
||||
const targetLeft = Math.min(
|
||||
gridRect.right - targetWidth - 18,
|
||||
Math.max(gridRect.left + gridRect.width * 0.48, source.left - 118)
|
||||
);
|
||||
const targetTop = heroRect.top + documentTop + Math.max(116, heroRect.height * 0.18);
|
||||
const sourceLeft = source.left;
|
||||
const sourceTop = source.top + documentTop;
|
||||
const metrics = getRestingTextMetrics();
|
||||
|
||||
const clone = card.cloneNode(true);
|
||||
clone.classList.add('abc-snapshot-cinematic');
|
||||
clone.classList.remove('abc-snapshot-restored');
|
||||
clone.classList.add('abc-snapshot-cinematic', 'abc-snapshot-cinematic--intro');
|
||||
clone.classList.remove('abc-hero-card', 'abc-snapshot-restored');
|
||||
clone.setAttribute('aria-hidden', 'true');
|
||||
Object.assign(clone.style, {
|
||||
left: `${sourceLeft}px`,
|
||||
top: `${sourceTop}px`,
|
||||
width: `${source.width}px`,
|
||||
height: `${source.height}px`,
|
||||
opacity: '1',
|
||||
visibility: 'visible',
|
||||
});
|
||||
document.body.appendChild(clone);
|
||||
applyIntroTextScale(clone, metrics);
|
||||
|
||||
const targetProbe = clone.cloneNode(true);
|
||||
Object.assign(targetProbe.style, {
|
||||
visibility: 'hidden',
|
||||
Object.assign(clone.style, {
|
||||
left: `${targetLeft}px`,
|
||||
top: `${targetTop}px`,
|
||||
width: `${targetWidth}px`,
|
||||
height: 'auto',
|
||||
opacity: '0',
|
||||
visibility: 'hidden',
|
||||
transform: 'translate3d(0,26px,0) scale(.985)',
|
||||
});
|
||||
document.body.appendChild(clone);
|
||||
|
||||
const targetHeight = Math.max(clone.scrollHeight, source.height * 1.26, 350);
|
||||
Object.assign(clone.style, {
|
||||
height: `${targetHeight}px`,
|
||||
visibility: 'visible',
|
||||
});
|
||||
document.body.appendChild(targetProbe);
|
||||
const targetHeight = Math.max(targetProbe.scrollHeight, 430);
|
||||
targetProbe.remove();
|
||||
|
||||
document.body.classList.add('abc-cinematic-active');
|
||||
card.style.opacity = '0';
|
||||
|
||||
const copyFade = copyColumn.animate([
|
||||
{ opacity: 1, transform: 'translate3d(0,0,0) scale(1)', filter: 'blur(0)' },
|
||||
{ opacity: .12, transform: 'translate3d(-92px,18px,0) scale(.955)', filter: 'blur(3px)' },
|
||||
], {
|
||||
duration: 1250,
|
||||
easing: 'cubic-bezier(.45,.05,.2,1)',
|
||||
fill: 'forwards',
|
||||
});
|
||||
|
||||
const expansion = clone.animate([
|
||||
// Second: the block appears as a separate, readable card. It does not grow out of the small card.
|
||||
const reveal = clone.animate([
|
||||
{
|
||||
left: `${sourceLeft}px`,
|
||||
top: `${sourceTop}px`,
|
||||
width: `${source.width}px`,
|
||||
height: `${source.height}px`,
|
||||
transform: 'rotate(0deg)',
|
||||
borderRadius: '8px',
|
||||
boxShadow: '0 36px 90px rgba(20,30,26,.25)',
|
||||
opacity: 0,
|
||||
transform: 'translate3d(0,28px,0) scale(.975)',
|
||||
filter: 'blur(7px)',
|
||||
boxShadow: '0 24px 70px rgba(12,22,18,.20)',
|
||||
},
|
||||
{
|
||||
left: `${targetLeft - 18}px`,
|
||||
top: `${targetTop + 8}px`,
|
||||
width: `${targetWidth + 24}px`,
|
||||
height: `${targetHeight + 12}px`,
|
||||
transform: 'rotate(-.45deg)',
|
||||
borderRadius: '4px',
|
||||
boxShadow: '0 58px 150px rgba(12,22,18,.46)',
|
||||
offset: .82,
|
||||
},
|
||||
{
|
||||
left: `${targetLeft}px`,
|
||||
top: `${targetTop}px`,
|
||||
width: `${targetWidth}px`,
|
||||
height: `${targetHeight}px`,
|
||||
transform: 'rotate(0deg)',
|
||||
borderRadius: '4px',
|
||||
boxShadow: '0 52px 140px rgba(12,22,18,.42)',
|
||||
opacity: 1,
|
||||
transform: 'translate3d(0,0,0) scale(1)',
|
||||
filter: 'blur(0)',
|
||||
boxShadow: '0 54px 138px rgba(12,22,18,.40)',
|
||||
},
|
||||
], {
|
||||
duration: 1750,
|
||||
duration: 860,
|
||||
easing: 'cubic-bezier(.16,1,.3,1)',
|
||||
fill: 'forwards',
|
||||
});
|
||||
|
||||
const textElements = clone.querySelectorAll('h3, li, .abc-card-label, .abc-card-note');
|
||||
const textExpansions = Array.from(textElements).map((element) => {
|
||||
const computed = window.getComputedStyle(element);
|
||||
const startSize = Number.parseFloat(computed.fontSize);
|
||||
const isHeading = element.matches('h3');
|
||||
const isLabel = element.matches('.abc-card-label');
|
||||
const targetSize = isHeading ? Math.min(startSize * 1.45, 58) : isLabel ? Math.min(startSize * 1.15, 14) : Math.min(startSize * 1.22, 22);
|
||||
return element.animate([
|
||||
{ fontSize: `${startSize}px`, letterSpacing: computed.letterSpacing },
|
||||
{ fontSize: `${targetSize}px`, letterSpacing: isHeading ? '-0.04em' : computed.letterSpacing },
|
||||
], {
|
||||
duration: 1550,
|
||||
delay: 90,
|
||||
easing: 'cubic-bezier(.16,1,.3,1)',
|
||||
fill: 'forwards',
|
||||
});
|
||||
});
|
||||
await reveal.finished;
|
||||
await delay(1150);
|
||||
|
||||
await Promise.all([expansion.finished, copyFade.finished, ...textExpansions.map((animation) => animation.finished)]);
|
||||
await delay(3000);
|
||||
const textReturns = animateTextBackToRest(clone);
|
||||
|
||||
const returnMotion = clone.animate([
|
||||
// Third: the separate card becomes the small resting card on the right.
|
||||
const shrink = clone.animate([
|
||||
{
|
||||
left: `${targetLeft}px`,
|
||||
top: `${targetTop}px`,
|
||||
width: `${targetWidth}px`,
|
||||
height: `${targetHeight}px`,
|
||||
transform: 'rotate(0deg)',
|
||||
borderRadius: '4px',
|
||||
opacity: 1,
|
||||
transform: 'translate3d(0,0,0) scale(1)',
|
||||
borderRadius: '20px',
|
||||
boxShadow: '0 54px 138px rgba(12,22,18,.40)',
|
||||
},
|
||||
{
|
||||
left: `${sourceLeft + 12}px`,
|
||||
top: `${sourceTop - 5}px`,
|
||||
width: `${source.width - 8}px`,
|
||||
left: `${sourceLeft + 8}px`,
|
||||
top: `${sourceTop - 8}px`,
|
||||
width: `${Math.max(source.width - 6, 260)}px`,
|
||||
height: `${source.height + 5}px`,
|
||||
transform: 'rotate(.35deg)',
|
||||
borderRadius: '8px',
|
||||
opacity: 1,
|
||||
transform: 'rotate(.25deg)',
|
||||
borderRadius: '20px',
|
||||
boxShadow: '0 34px 84px rgba(20,30,26,.30)',
|
||||
offset: .82,
|
||||
},
|
||||
{
|
||||
@ -175,57 +209,32 @@
|
||||
top: `${sourceTop}px`,
|
||||
width: `${source.width}px`,
|
||||
height: `${source.height}px`,
|
||||
opacity: 1,
|
||||
transform: 'rotate(0deg)',
|
||||
borderRadius: '8px',
|
||||
borderRadius: '20px',
|
||||
boxShadow: '0 30px 74px rgba(20,30,26,.28)',
|
||||
},
|
||||
], {
|
||||
duration: 1650,
|
||||
duration: 1450,
|
||||
easing: 'cubic-bezier(.16,1,.3,1)',
|
||||
fill: 'forwards',
|
||||
});
|
||||
|
||||
const copyReturn = copyColumn.animate([
|
||||
{ opacity: .12, transform: 'translate3d(-92px,18px,0) scale(.955)', filter: 'blur(3px)' },
|
||||
{ opacity: 1, transform: 'translate3d(0,0,0) scale(1)', filter: 'blur(0)' },
|
||||
], {
|
||||
duration: 1400,
|
||||
delay: 180,
|
||||
easing: 'cubic-bezier(.16,1,.3,1)',
|
||||
fill: 'forwards',
|
||||
});
|
||||
await Promise.all([shrink.finished, ...textReturns]);
|
||||
|
||||
const textReturns = Array.from(textElements).map((element) => {
|
||||
const animation = element.getAnimations().find((item) => item.fill === 'forwards');
|
||||
if (animation) {
|
||||
animation.cancel();
|
||||
}
|
||||
return element.animate([
|
||||
{ transform: 'translate3d(0,0,0)', opacity: 1 },
|
||||
{ transform: 'translate3d(14px,0,0)', opacity: .96, offset: .52 },
|
||||
{ transform: 'translate3d(0,0,0)', opacity: 1 },
|
||||
], {
|
||||
duration: 1200,
|
||||
easing: 'cubic-bezier(.16,1,.3,1)',
|
||||
});
|
||||
});
|
||||
|
||||
await Promise.all([returnMotion.finished, copyReturn.finished, ...textReturns.map((animation) => animation.finished)]);
|
||||
|
||||
// Reveal the resting card before removing the animated copy so there is no blank frame.
|
||||
// Reveal the real small card underneath before removing the animated copy.
|
||||
document.body.classList.remove('abc-card-intro-pending');
|
||||
card.style.opacity = '';
|
||||
card.style.visibility = '';
|
||||
card.classList.add('abc-snapshot-restored');
|
||||
await delay(80);
|
||||
document.body.classList.remove('abc-cinematic-active');
|
||||
clone.remove();
|
||||
};
|
||||
|
||||
window.addEventListener('load', () => {
|
||||
runCinematic().catch(() => {
|
||||
// Never leave the real card or hero copy hidden if an animation is interrupted.
|
||||
document.querySelectorAll('.abc-snapshot-cinematic').forEach((element) => element.remove());
|
||||
copyColumn.getAnimations().forEach((animation) => animation.cancel());
|
||||
card.style.opacity = '';
|
||||
card.classList.add('abc-snapshot-restored');
|
||||
document.body.classList.remove('abc-cinematic-active');
|
||||
restoreRestingCard();
|
||||
});
|
||||
}, { once: true });
|
||||
});
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
<div class="wp-block-group abc-site-footer"><!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:heading {"level":3} --><h3 class="wp-block-heading">Avangarde Bright Concepts</h3><!-- /wp:heading --><!-- wp:group {"className":"abc-footer-brand","layout":{"type":"flex","flexWrap":"nowrap"}} -->
|
||||
<div class="wp-block-group abc-footer-brand"><!-- wp:paragraph {"className":"abc-footer-tagline"} --><p class="abc-footer-tagline"><span>Build Brightness</span><span>in Your Business</span></p><!-- /wp:paragraph --></div>
|
||||
<div class="wp-block-group abc-footer-brand"><!-- wp:paragraph {"className":"abc-footer-tagline"} --><p class="abc-footer-tagline"><span>we build brightness in your business</span></p><!-- /wp:paragraph --></div>
|
||||
<!-- /wp:group --><!-- wp:paragraph --><p>Consultanță ESG pentru companii, finanțări, DNSH și procese interne.</p><!-- /wp:paragraph --></div>
|
||||
<!-- /wp:column -->
|
||||
<!-- wp:column -->
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user