Menu Zavřít

Jana Chuchvalcová

Zkušená ekonomická novinářka, kmenová autorka portálu Euro.cz. V minulosti pracovala v České informační agentuře, byla šéfredaktorkou odborného měsíčníku Bankovnictví. Před přechodem do Eura působila jako šéfredaktorka specializovaných časopisů Profi Poradenství & Finance, Profi HR, Profi Makléř & Reality a Innovation.

  • E-mail:
    jana (tečka) chuchvalcova (zavináč) iinfo (tečka) cz

Nejčtenější články autora

  1. Firma BEST se vytasila s unikátním systémem přesného betonového zdiva. Chceme tak proměnit celé české stavebnictví, prohlašuje její šéf 2. 4. 2025
  2. Říká, že vyrábí „neviditelný design“. Městské lavičky Davida Karáska fascinují, produkty jeho firmy mmcité najdeme po celém světě 17. 3. 2025
  3. „Krádež větru“ v přímém přenosu. Takzvaný wake effect může větrnou farmu připravit až o desetinu její produkce a zažehnout mezinárodní spory 13. 5. 2025
  4. Českým arénám se blýská na lepší časy. Nové sportovní haly nejen v Brně a Pardubicích přinášejí špičkovou architekturu i inspiraci z NHL 24. 4. 2025
  5. Na začátku devadesátek byli jen čtyři truhláři s velkou chutí podnikat. Dnes jejich firma míří za 300milionovým obratem. A také do Afriky 22. 4. 2025
  6. Od Broker Trustu k lanýžům. Bývalý finančník Beneš učí s manželkou Čechy, jak pěstovat i vydělávat na jedné z nejdražších potravin světa 16. 4. 2025
  7. Čeká tradiční americké spojence otočka? Trumpovo kličkování v celní politice může mít nečekané důsledky, tvrdí odborníci 17. 3. 2025
  8. Obilnina budoucnosti. Čirok dokáže uživit miliony lidí, funguje však i proti půdním škůdcům či rakovině 2. 5. 2025
  9. Architektura s příchutí „terroiru“. Moderní česká vinařství nabízejí místa, kde si lze sklenku vychutnat v harmonii s okolní krajinou 21. 5. 2025
  10. Od mrkvové k pistáciové. Zmrzlinové království Crème de la Crème slaví desáté narozeniny, na řemeslné kvalitě si zakládá dodnes 9. 6. 2025

Seznam článků autora

Článek Rubrika Datum vydání Počet názorů
Byty místo věna? Rodiče sahají do úspor a pořizují potomkům startovní bydlení jako investici i záchranu, trend nabírá na obrátkách Byznys Včera -
Od mrkvové k pistáciové. Zmrzlinové království Crème de la Crème slaví desáté narozeniny, na řemeslné kvalitě si zakládá dodnes Byznys 9. 6. 2025 -
Magnet na technologické investice. V Brně vzniká nové high-tech centrum o velikosti čtyř fotbalových hřišť a s parametry jak z kosmické mise Byznys 6. 6. 2025 -
Ve stínu gigantů. Evropa v globálním technologickém závodě zaostává za USA i Čínou, chybí jí odvaha a chuť riskovat, píše WSJ Byznys 5. 6. 2025 -
Inovace, jež mění svět k lepšímu. Soulmates Ventures rozdají startupům s udržitelnou vizí skrze svoji novou akademii až 100 milionů korun Byznys 4. 6. 2025 -
„E-tetování“ pozná, kdy už máte dost. Nová technologie může pomoci se sledováním duševní zátěže u lidí s náročným povoláním Tech 3. 6. 2025 -
V Česku roste beauty impérium. Bezvavlasy míří k miliardě, expandují do dalších zemí a finišují fúzi s firmou Hair Servis Byznys 3. 6. 2025 -
Producenti rumu na suchu. Cukrová krize na Kubě dopadá i na globální hráče jako LVMH či Pernod Richard Byznys 2. 6. 2025 -
Diamanty ztrácí glanc. Tradiční byznys dusí Trumpova cla, ekonomická nejistota a boom levných „fejků“ z laboratoře Byznys 29. 5. 2025 -
Češi podpořili ukrajinský startup, který dal hlas Skywalkerovi či Presleymu. Respeecher boduje v Hollywoodu a míří do her i armády Byznys 29. 5. 2025 -
Superzrak je na dosah. Revoluční čočky přibližují infračervené vidění, mohou pomoci lidem s barvoslepostí, ale také při špionáži Věda 28. 5. 2025 -
AI vs. Trump. Umělá inteligence pomáhá firmám v boji s nepředvídatelnými otočkami v prezidentově celní politice Byznys 27. 5. 2025 -
Musk a spol. bohatnou o miliardu denně. Trumpova daňová reforma by je navíc mohla ještě více zvýhodnit Miliardáři 26. 5. 2025 -
Začínala jako stážistka ve fintechu Dateio, dnes Kateřina Linhartová pomáhá bankám sledovat v aplikaci uhlíkovou stopu Byznys 23. 5. 2025 -
„Čokoládová krize“ EU na obzoru. Klimatické změny a ztráta biodiverzity vážně ohrožují pěstování kakaových bobů, varují odborníci Byznys 22. 5. 2025 -
Trumpova posedlost cennými kovy tentokrát cílí na dna oceánů. Ambiciózní plán podmořské těžby ale může mít i vážné geopolitické dopady Ekonomika 22. 5. 2025 -
Architektura s příchutí „terroiru“. Moderní česká vinařství nabízejí místa, kde si lze sklenku vychutnat v harmonii s okolní krajinou Architektura 21. 5. 2025 -
Trhy snížení ratingu USA přehlížejí. Šéf JP Morgan naopak varuje před stagflací a přehnaným optimismem Ekonomika 21. 5. 2025 -
Zapomeňte na humanoidy. Na MIT vzniká nová generace robotů inspirovaná přírodou, připomínají želvy i červy Tech 20. 5. 2025 -
S podnikáním začali v USA, teprve pak šli do Česka. Ultimátním cílem bratrů Samkových je zdigitalizovat s Rouvy celý cyklistický svět Byznys 20. 5. 2025 -
Místo, kde se historie potkává s budoucností. Developer Star Group dokončil hrubou stavbu pražských Nových Chaber, byty jdou na dračku Architektura 19. 5. 2025 -
Vývoz léků akceleroval růst dánské ekonomiky, v příštích letech ale značně zpomalí. Dle MMF za to může Trumpův tlak na snižování jejich cen Byznys 19. 5. 2025 -
Airbnb představilo v upravené aplikaci řadu novinek, lidé si mohou objednat osobního šéfkuchaře i zahrát plážový volejbal s olympioničkou Byznys 16. 5. 2025 -
Apple se pouští do „čtení myšlenek“. Nová technologie umožní ovládat iPhony pomocí signálů z mozku a pomůže lidem s omezenou hybností rukou Tech 16. 5. 2025 -
Čeká nás budoucnost bez banánů? Klimatická krize ohrožuje nejoblíbenější ovoce na světě i živobytí milionů lidí Light 15. 5. 2025 -
České Karo Leather investovalo do dvou závodů půl miliardy. Nyní míří do segmentu armádní obuvi a plánuje logistické centrum v Polsku Byznys 15. 5. 2025 -
Z Číny do USA nevyplula po dobu 12 hodin ani jedna loď. Dočasné obchodní příměří firmy vítají, volají však po dlouhodobé dohodě Byznys 14. 5. 2025 -
Nejdřív si pořídil čokoládovnu a pak i pekárnu, na které prodělal majlant. Dnes míří podnikatel Teplý se svou Ajalou k 25milionovému obratu Byznys 14. 5. 2025 -
„Krádež větru“ v přímém přenosu. Takzvaný wake effect může větrnou farmu připravit až o desetinu její produkce a zažehnout mezinárodní spory Energetika 13. 5. 2025 -
Eva Le Peutrec stavěla v Číně „katedrály 21. století“, teď se uznávaná architektka mrakodrapů vrací do Česka s cílem získat Pritzkerovu cenu Architektura 12. 5. 2025 -
Neřešte na začátku kariéry jen svoji výplatu. Důležitější jsou lidé kolem vás a smysluplná práce, radí Warren Buffett Byznys 8. 5. 2025 -
Česku chybí více lidí s hladovou vizí, tvrdí šéfka SAP ČR Součková. Věří generaci Z, má ráda AI a zdůrazňuje celoživotní vzdělávání Byznys 7. 5. 2025 -
Existuje jen jeden Warren Buffett. Proč nemá nikdo šanci uspět jako legendární „věštec z Omahy“? Byznys 5. 5. 2025 -
Trump se přepočítal. Svými kroky nechtěně pomáhá Evropě v boji proti inflaci Ekonomika 5. 5. 2025 -
Obilnina budoucnosti. Čirok dokáže uživit miliony lidí, funguje však i proti půdním škůdcům či rakovině Light 2. 5. 2025 -
Na prahu budoucnosti. AGC Glass Europe investuje do dekarbonizace téměř miliardu, sklízí úspěch na Expo a s fasádami ze skla míří do světa Byznys 2. 5. 2025 -
Trhy zažívají „zlatou horečku“. Kdo na současnou vlnu nestihl naskočit, může zkusit štěstí se stříbrem, radí ekonomové Byznys 30. 4. 2025 -
Kýžený restart? V Číně začali pracovat na dokončení nejvyššího nedostavěného mrakodrapu, rýsují se i další megastavby Architektura 29. 4. 2025 -
Vývoj kurzu může Čechům „zlevnit“ dovolenou v USA, v Turecku ji naopak prodraží inflace. S výměnou peněz by lidé dle ekonomů neměli otálet Cestování 28. 4. 2025 -
Akademická svoboda v USA je v ohrožení. Norsko proto láká špičkové výzkumníky z amerických univerzit prostřednictvím nového programu Věda 25. 4. 2025 -
140 / 82
První strana Předchozí strana 1 2 3
'; document.getElementById('outstream-iframe').onload = function () { setupIframe(); } replayScreen = document.getElementById('iinfoOutstreamReplay'); iinfoOutstreamPosition = document.getElementById('iinfoOutstreamPosition'); outstreamContainer = document.getElementsByClassName('outstream-container')[0]; setupReplayScreen(); } function setupIframe() { outstreamDocument = document.getElementById('outstream-iframe').contentWindow.document; let el = outstreamDocument.createElement('style'); outstreamDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:-5px;right:25px}"; videoContent = outstreamDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; if ( location.href.indexOf('rejstriky.finance.cz') !== -1 || location.href.indexOf('finance-rejstrik') !== -1 || location.href.indexOf('firmy.euro.cz') !== -1 || location.href.indexOf('euro-rejstrik') !== -1 || location.href.indexOf('/rejstrik/') !== -1 || location.href.indexOf('/rejstrik-firem/') !== -1) { outstreamDirectPlayed = true; soundAllowed = true; iinfoVastUrlIndex = 0; } if (!outstreamDirectPlayed) { console.log('OUTSTREAM direct'); setUpIMA(true); } else { if (soundAllowed) { const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('OUTSTREAM sound allowed'); setUpIMA(false); }).catch(function () { console.log('OUTSTREAM sound forbidden'); renderBanner(); }); } } else { renderBanner(); } } } function getWrapper() { let articleWrapper = document.querySelector('.rs-outstream-placeholder'); // Outstream Placeholder from RedSys manipulation if (articleWrapper && articleWrapper.style.display !== 'block') { articleWrapper.innerHTML = ""; articleWrapper.style.display = 'block'; } // Don't render OutStream on homepages if (articleWrapper === null) { if (document.querySelector('body.p-index')) { return null; } } if (articleWrapper === null) { articleWrapper = document.getElementById('iinfo-outstream'); } if (articleWrapper === null) { articleWrapper = document.querySelector('.layout-main__content .detail__article p:nth-of-type(6)'); } if (articleWrapper === null) { // Euro, Autobible, Zdravi articleWrapper = document.querySelector('.o-article .o-article__text p:nth-of-type(6)'); } if (articleWrapper === null) { articleWrapper = document.getElementById('sidebar'); } if (!articleWrapper) { console.error("Outstream wrapper of article was not found."); } return articleWrapper; } function setupDimensions() { outstreamWidth = Math.min(iinfoOutstreamPosition.offsetWidth, 480); outstreamHeight = Math.min(iinfoOutstreamPosition.offsetHeight, 320); } /** * Sets up IMA ad display container, ads loader, and makes an ad request. */ function setUpIMA(direct) { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); if (direct) { adsRequest.adTagUrl = directVast; console.log('Outstream DIRECT CAMPAING advert: ' + directVast); videoContent.muted = true; videoContent.volume = 0; outstreamDirectPlayed = true; } else { adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Outstream advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; } // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = outstreamWidth; // adsRequest.linearAdSlotHeight = outstreamHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function setupReplayScreen() { replayScreen.addEventListener('click', function () { iinfoOutstreamPosition.remove(); iinfoVastUrlIndex = 0; outstreamInit(); }); } /** * Sets the 'adContainer' div as the IMA ad display container. */ function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. outstreamDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( outstreamDocument.getElementById('adContainer'), videoContent); } function unmuteAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); outstreamDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); outstreamDocument.getElementById('adMuteBtn').innerHTML = ''; } } /** * Loads the video content and initializes IMA ad playback. */ function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(outstreamWidth, outstreamHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } /** * Handles the ad manager loading and sets ad event listeners. * @param { !google.ima.AdsManagerLoadedEvent } adsManagerLoadedEvent */ function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } /** * Handles actions taken in response to ad events. * @param { !google.ima.AdEvent } adEvent */ function onAdEvent(adEvent) { // Retrieve the ad from the event. Some events (for example, // ALL_ADS_COMPLETED) don't have ad object associated. const ad = adEvent.getAd(); console.log('Outstream event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: // This is the first event sent for an ad - it is possible to // determine whether the ad is a video ad or an overlay. if (!ad.isLinear()) { // Position AdDisplayContainer correctly for overlay. // Use ad.width and ad.height. videoContent.play(); } outstreamDocument.getElementById('adContainer').style.width = '100%'; outstreamDocument.getElementById('adContainer').style.maxWidth = '640px'; outstreamDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); // This event indicates the ad has started - the video player // can adjust the UI, for example display a pause button and // remaining time. if (ad.isLinear()) { // For a linear ad, a timer can be started to poll for // the remaining time. intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } outstreamDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (outstreamLastError === 303) { if (isBanner) { renderBanner(); } else { replayScreen.style.display = 'flex'; } } break; case google.ima.AdEvent.Type.COMPLETE: // This event indicates the ad has finished - the video player // can perform appropriate UI actions, such as removing the timer for // remaining time detection. if (ad.isLinear()) { clearInterval(intervalTimer); } if (isBanner) { renderBanner(); } else { replayScreen.style.display = 'flex'; } break; } } /** * Handles ad errors. * @param { !google.ima.AdErrorEvent } adErrorEvent */ function onAdError(adErrorEvent) { // Handle the error logging. console.log(adErrorEvent.getError()); outstreamLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { renderBanner(); } } function renderBanner() { if (isBanner) { console.log('Outstream: Render Banner'); iinfoOutstreamPosition.innerHTML = ""; iinfoOutstreamPosition.style.height = "330px"; iinfoOutstreamPosition.appendChild(bannerDiv); } else { console.log('Outstream: Banner is not set'); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoOutstreamPosition.remove(); outstreamInit(); } else { return false; } adVolume = 1; return true; } /** * Pauses video content and sets up ad UI. */ function onContentPauseRequested() { videoContent.pause(); // This function is where you should setup UI for showing ads (for example, // display ad timer countdown, disable seeking and more.) // setupUIForAds(); } /** * Resumes video content and removes ad UI. */ function onContentResumeRequested() { videoContent.play(); // This function is where you should ensure that your UI is ready // to play content. It is the responsibility of the Publisher to // implement this function when necessary. // setupUIForContent(); } function onActiveView() { if (outstreamContainer) { const containerOffset = outstreamContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (outstreamPaused) { adsManager.resume(); outstreamPaused = false; } return true; } else { if (!outstreamPaused) { adsManager.pause(); outstreamPaused = true; } } } return false; } let outstreamInitInterval; if (typeof cpexPackage !== "undefined") { outstreamInitInterval = setInterval(tryToInitializeOutstream, 100); } else { const wrapper = getWrapper(); if (wrapper) { let outstreamInitialized = false; window.addEventListener('scroll', () => { if (!outstreamInitialized) { const containerOffset = wrapper.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { outstreamInit(); outstreamInitialized = true; } } }); } } function tryToInitializeOutstream() { const wrapper = getWrapper(); if (wrapper) { const containerOffset = wrapper.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { if (cpexPackage.adserver.displayed) { clearInterval(outstreamInitInterval); outstreamInit(); } } } else { clearInterval(outstreamInitInterval); } } }