1<!DOCTYPE html> 2<html prefix="og: http://ogp.me/ns#"> 3<head> 4
4<script src="/js/google-consent.js?v=42X433GKRAp6Ovy95Nby-qA-nUUpx-2vNJJDTgQ5YN4"></script>
4 5 6 <!-- Google tag (gtag.js) -->
vendor: 65 bytes, lines 6-7
6 7 <script async src="https://www.googletagmanager.com/gtag/js?id=
7G-5KTF9VQQV0
vendor: 13 bytes, lines 7-8
7"></script> 8
8<script> 9 gtag('js', new Date()); 10 11 gtag('config', 'G-5KTF9VQQV0'); 12 </script>
12 13 14 <!-- Google AdSense --> 15
15<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1914100961537914" 16 crossorigin="anonymous"></script>
16 17 18
18<script> 19 if (localStorage.getItem('darkmode') === '1') { 20 document.documentElement.classList.add('darkmode'); 21 } 22 </script>
22 23 24 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 25 <meta http-equiv="content-language" content="cs" /> 26 27 <meta name="keywords" content="plzen, plzeň, zprávy, aktuality, novinky, události, kultura, sport, region, informace, město plzeň, plzenský kraj, dění" /> 28 29 <meta name="description" content="Aktuální zprávy a novinky z Plzně a okolí. Sleduj události, kulturu, sport i dění ve městě na jednom místě na Plzen.cz" /> 30 31 <meta name="robots" content="index, follow" /> 32 <meta name="googlebot-news" content="index, follow" /> 33 34 <meta charset="utf-8" /> 35 <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 36 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 37 <meta property="og:site_name" content="zak.tv" /> 38 <meta property="og:locale" content="cs_cz" /> 39 40 <meta name="theme-color" content="#c70005" /> 41 <meta name="msapplication-navbutton-color" content="#c70005" /> 42 <meta name="mobile-web-app-capable" content="yes" /> 43 <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" /> 44 45 <link rel="icon" type="image/x-icon" href="/favicon.ico"> 46 47 <title>Karlovarský kraj | ZAK.TV</title> 48 49 50 51 <link rel="canonical" href="https://www.zak.tv/karlovarsky-kraj" /> 52 <link rel="alternate" type="application/rss+xml" title="ZAK.tv â RSS" href="/rss/karlovarsky-kraj" /> 53 54 55
55<script type="application/ld+json"> 56 {"@context":"https://schema.org","@type":"NewsMediaOrganization","@id":"https://www.zak.tv/#organization","name":"ZAK.tv","url":"https://www.zak.tv","logo":{"@type":"ImageObject","url":"https://www.zak.tv/images/zak-tv-logo.png","width":512,"height":512},"areaServed":{"@type":"AdministrativeArea","name":"Západnà Äechy"},"publishingPrinciples":"https://www.zak.tv/redakce","sameAs":["https://www.wikidata.org/wiki/Q138637938","https://www.facebook.com/tvzak","https://www.youtube.com/televizezak"]} 57 </script>
57 58 59 60 61 <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900,100i,300i,400i,500i,700i,900i&display=swap&subset=latin-ext"> 62 <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Google+Sans:100,300,400,500,700,900,100i,300i,400i,500i,700i,900i&subset=latin-ext"> 63 64
64<script type='text/javascript' src='https://platform-api.sharethis.com/js/sharethis.js#property=63fc60b1b0cf820012575ac1&product=sop' async='async'></script>
64 65 66 <link href="/css/app.min.css?v=8Cd51oHP3JBpf1ntRZIuvvB4gTpj_ggHnjqY7uw_OT4" rel="stylesheet"> 67 <link href="/css/fancybox.css" rel="stylesheet"> 68 <link href="https://vjs.zencdn.net/8.0.4/video-js.css" rel="stylesheet" /> 69 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/sweetalert2.min.css"> 70 <link href="/webfonts/fontawesome-6.5.1/css/all.min.css" rel="stylesheet"> 71 72 <link href="/css/zaktv.min.css?v=bO0Bpi8CPboOT9M8zya5cSUdoKTpRjBbAEk4crEnEDw" rel="stylesheet"> 73 74
74<script src="/js/jquery.min.js"></script>
74 75 76
76<script src="https://ssp.seznam.cz/static/js/ssp.js"></script>
76 77 78<link rel="stylesheet" href="/css/political-advertising.css?v=bS5N0CTmjGpijiNjdX0uCxcPH0z1YJaSYfjbWquQNcA" /> 79 <link href="/css/privacy-settings.css?v=0KKXOcLl3ZsRFOSH24DxPuSkVnMz2Iv3p2OVYCIpPeY" rel="stylesheet"> 80</head> 81 82<body> 83 <div class="d-flex justify-content-center branding desktop-only" id="branding-rotation" 84 data-campaign-id=""> 85 <div class="brand-w2k"></div> 86</div>
87<script src="/js/branding.js?v=nw-zTH-fAm9jhqcRhUyA3D79cIEmdziLVSu6w-YPM-E" defer></script>
87 88 89 90<header class="header-area"> 91 92 <div class="header-navbar-bottom pt-2 pt-lg-0"> 93 94 <div class="themeix-menu-selector px12"> 95 96 <nav class="navbar navbar-expand-lg"> 97 <div class="collapse navbar-collapse" id="main_nav" style="display: block;"> 98 99 <a href="/"> 100 <img class="nav-brand-logo" src="/images/zaktv-wlogo-w.svg"> 101 <img class="nav-brand-logo-mobile" src="/images/zaktv-logo.svg"> 102 </a> 103 <img class="desktop-only my-auto nav-tube" src="/images/tube.svg"> 104 105 <div class="desktop-nav"> 106 107 <ul class="navbar-nav me-auto"> 108 <li class="nav-item hl noselect dropdown"> 109 <a class="nav-link dropdown-toggle hand" href="/zpravodajstvi">ZpravodajstvÃ</a> 110 <div class="dropped-nav"> 111 <div class="region-select"> 112 <a class="dropdown-item" href="/plzensky-kraj" alt="">PlzeÅský kraj</a> 113 <a class="dropdown-item" href="/karlovarsky-kraj" alt="">Karlovarský kraj</a> 114 </div> 115 </div> 116 </li> 117 <li class="nav-item"> 118 <a class="nav-link nav-link-static" href="/aktualne" alt="AktuálnÄ">AktuálnÄ</a> 119 </li> 120 <li class="nav-item"> 121 <a class="nav-link nav-link-static" href="/krimi" alt="Krimi západ"> Krimi západ</a> 122 </li> 123 <li class="nav-item"> 124 <a class="nav-link nav-link-static" href="/kultura" alt="Kultura"> Kultura</a> 125 </li> 126 <li class="nav-item"> 127 <a class="nav-link nav-link-static" href="/sport" alt="Sport"> Sport</a> 128 </li> 129 <li class="nav-item"> 130 <a class="nav-link nav-link-static" href="/doprava" alt="Doprava"> Doprava</a> 131 </li> 132 <li class="nav-item"> 133 <a class="nav-link nav-link-static" href="/lifestyle" alt="Lifestyle">Lifestyle</a> 134 </li> 135 <li class="nav-item"> 136 <a class="nav-link nav-link-static" href="/webkamera" alt="Webkamera">Webkamera</a> 137 </li> 138 </ul> 139 </div> 140 </div> 141 <div class="social"> 142 <a href="https://www.facebook.com/tvzak" target="_blank"><img src="/images/facebook-ico.svg" /></a> 143 <a href="https://www.youtube.com/televizezak" target="_blank"><img src="/images/youtube-ico.svg" /></a> 144 <a href="https://www.instagram.com/zak_televize/" target="_blank"><img src="/images/instagram-ico.svg" /></a> 145 </div> 146 <div class="my-auto desktop-bio noselect white desktop-only"> 147 148 <span> 149 pátek 9. října 2026 150 <br />Svátek má Štefan a Sára 151 </span> 152 </div> 153 <img class="desktop-only my-auto nav-tube" src="/images/tube.svg" /> 154 <div class="search-modal" data-bs-toggle="modal" data-bs-target="#search-modal"> 155 <a class="nav-link"><i class="fas fa-search"></i></a> 156 </div> 157 <div class="mobile-nav"> 158 <label for="mobile-nav" class="hand"><i class="nav-link fa fa-bars"></i></label> 159 <input type="checkbox" id="mobile-nav" class="visually-hidden"> 160 <div class="dropped-mobile-nav"> 161 162 <div class="dn-bio"> 163 <p>Je <b>pátek 9. října 2026</b> <i>(týden 41., lichý)</i></p> 164 <p>Svátek má <b>Štefan a Sára</b></p> 165 </div> 166 167 <div class="dn-categories"> 168 <div class="d-flex"> 169 <div class="ruby"> 170 <a href="/zpravodajstvi">ZpravodajstvÃ</a> 171 <a href="/aktualne" alt="AktuálnÄ">AktuálnÄ</a> 172 <a href="/plzensky-kraj" alt="PlzeÅský kraj">PlzeÅský kraj</a> 173 <a href="/karlovarsky-kraj" alt="Karlovarský kraj">Karlovarský kraj</a> 174 <a href="/lifestyle" alt="Krimi západ">Krimi západ</a> 175 <a href="/kultura" alt="Kultura">Kultura</a> 176 <a href="/sport" alt="Sport">Sport</a> 177 <a href="/doprava" alt="Doprava">Doprava</a> 178 <a href="/webkamera" alt="Webkamera">Webkamera</a> 179 </div> 180 <div><a class="dropdown-item right" href="/"><span class="fa fa-home" alt="Ãvod"></span></a></div> 181 </div> 182 </div> 183 184 <div class="forecast-wideget-dn"> 185 <div class="d-flex no-wrap text-center forecast"> 186 <div class="forecast-day"> 187 <img src="/images/weather/12.png" width="38" height="38" alt="Oblačno, odpoledne ojedinělý déšť. Teploty 9/20 °C." title="Oblačno, odpoledne ojedinělý déšť. Teploty 9/20 °C." /><br /> 188 <small>9°C / 20°C</small><br /> 189 Dnes 190 </div> 191 <div class="forecast-day"> 192 <img src="/images/weather/7.png" width="38" height="38" alt="Oblačno, odpoledne a večer více oblačnosti. Teplota klesne na 14 °C. Odpoledne vítr z JZ." title="Oblačno, odpoledne a večer více oblačnosti. Teplota klesne na 14 °C. Odpoledne vítr z JZ." /><br /> 193 <small>5°C / 14°C</small><br /> 194 Zítra 195 </div> 196 <div class="forecast-day"> 197 <img src="/images/weather/12.png" width="38" height="38" alt="Ojedinělý déšť, odpoledne zataženo. Teploty 9/13 °C." title="Ojedinělý déšť, odpoledne zataženo. Teploty 9/13 °C." /><br /> 198 <small>9°C / 13°C</small><br /> 199 Sobota 200 </div> 201 </div> 202 <div class="small forecast-today-text"> 203 <p>Oblačno, odpoledne ojedinělý déšť. Teploty 9/20 °C.</p> 204 </div> 205 <div class="meteocentrum text-muted"> 206 <a href="https://www.meteocentrum.cz/" title="Data poÄasà poskytuje Meteocentrum" target="_blank" class="small text-secondary">PoÄasÃ: meteocentrum.cz</a> 207 </div> 208 </div> 209 210 <switch class="d-flex flex-nowrap mobile-only"> 211 <div class="day small"><span>SvÄtlý motiv</span></div> 212 <div class="night small"><span>Tmavý motiv</span></div> 213 <div><button id="darkToggle" class="darkmode" title="darkmode switch"></button></div> 214 </switch> 215 216 </div>
217 </div> 218 </nav> 219 220 <div class="modal fade" id="search-modal" data-bs-backdrop="static"> 221 <button type="button" class="btn-close" data-bs-dismiss="modal" id="search-modal-close"></button> 222 <div class="modal-dialog"> 223 <div class="modal-content"> 224 <div class="modal-body"> 225 <form class="forms" id="gh-search-input" method="get" action="/"> 226 <div class="input-group"> 227 <span class="input-group-text"> 228 <i class="fas fa-search"></i> 229 </span> 230 <input type="search" class="search-input form-control" placeholder="Vyhledat.." id="search-input" name="q" minlength="2" required> 231 <button class="btn btn-primary" type="submit" id="search-btn"> 232 <span class="search-btn-text">Hledat</span> 233 <span class="spinner-border spinner-border-sm search-spinner d-none ms-2" role="status"> 234 <span class="visually-hidden">HledánÃ...</span> 235 </span> 236 </button> 237 </div> 238 <small class="text-danger d-none" id="search-error"></small> 239 </form> 240 </div> 241 </div> 242 </div> 243 </div> 244 </div> 245 </div> 246 247</header> 248 249 250 251 <div class="container branded body-movein"> 252 253 254<div class="blog-area-static pt-2"> 255 <div class="container"> 256 257 <div class="my-1 pl-14"> 258 <h1>Karlovarský kraj</h1> 259 </div> 260 <div class="row"> 261 <div class="col-md-7 col-lg-8 pt-2 pl-12"> 262 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 263 <div class="feature-image"> 264 <div class="image-frame image-hover-style-1"> 265 <a href="/naciste_zatkli_behem_jedine_noci_1_500_sokolu_jejich_pamatku_uctil_i_karlovarsky_kraj" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/fbb4b5e11e/slavnostni_otevreni_google_discover.jpg.medium.jpg" alt="Nacisté zatkli během jediné noci 1 500 sokolů. Jejich památku uctil i Karlovarský kraj"></a> 266 </div> 267 </div> 268 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 269 <div class="card-flex-content w-100"> 270 <h6> 271 <a href="/naciste_zatkli_behem_jedine_noci_1_500_sokolu_jejich_pamatku_uctil_i_karlovarsky_kraj" target="">Nacisté zatkli během jediné noci 1 500 sokolů. Jejich památku uctil i Karlovarský kraj</a> 272 </h6> 273 <div class="desktop-only"> 274 <p>TisÃce sokolů a sokolek položily život v boji proti nacismu. Jejich odvahu a obÄti pÅipomÃná Památný den sokolstva, který pÅipadá na 8. ÅÃjna. Karlovarský kraj pÅi této pÅÃležitosti vyvÄsil pÅed budovou krajského úÅadu sokolskou vlajku. Pietnà vzpomÃnka se uskuteÄnà také v Karlových Varech-RybáÅÃch.</p> 275 </div> 276 </div> 277 </div> 278 </article> 279 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 280 <div class="feature-image"> 281 <div class="image-frame image-hover-style-1"> 282 <a href="/uprchly_vezen_zraneni_airsoftovou_zbrani_i_zachrana_srny_assti_straznici_meli_napilno" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/e2db4f93df/Cq4v3XqvIWmuHUgsIRNz.jpeg.medium.jpg" alt="Uprchlý vězeň, zranění airsoftovou zbraní i záchrana srny. Ašští strážníci měli napilno"></a> 283 </div> 284 </div> 285 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 286 <div class="card-flex-content w-100"> 287 <h6> 288 <a href="/uprchly_vezen_zraneni_airsoftovou_zbrani_i_zachrana_srny_assti_straznici_meli_napilno" target="">Uprchlý vězeň, zranění airsoftovou zbraní i záchrana srny. Ašští strážníci měli napilno</a> 289 </h6> 290 <div class="desktop-only"> 291 <p>Pátránà po uprchlém vÄzni, domácà konflikty, zranÄnà airsoftovou zbranà nebo srna uvÄznÄná za plotem. Ašštà strážnÃci se v poslednÃch týdnech rozhodnÄ nenudili. Vedle bÄžných dopravnÃch pÅestupků ÅeÅ¡ili také pÅÃpady ohroženà zdravÃ, pomáhali záchranáÅům a zasahovali kvůli opakovanému zneužÃvánà tÃsÅových linek.</p> 292 </div> 293 </div> 294 </div> 295 </article> 296 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 297 <div class="feature-image"> 298 <div class="image-frame image-hover-style-1"> 299 <a href="/od_200_metru_az_po_35_kilometru_na_goethovu_vyhlidku_se_vraci_oblibeny_bezecky_zavod" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/678c64d598/vybeh_google_discover.jpg.medium.jpg" alt="Od 200 metrů až po 3,5 kilometru. Na Goethovu vyhlídku se vrací oblíbený běžecký závod"></a> 300 </div> 301 </div> 302 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 303 <div class="card-flex-content w-100"> 304 <h6> 305 <a href="/od_200_metru_az_po_35_kilometru_na_goethovu_vyhlidku_se_vraci_oblibeny_bezecky_zavod" target="">Od 200 metrů až po 3,5 kilometru. Na Goethovu vyhlídku se vrací oblíbený běžecký závod</a> 306 </h6> 307 <div class="desktop-only"> 308 <p>Obout bÄžecké boty a vyrazit do podzimnÃch lázeÅských lesů. V nedÄli 11. ÅÃjna se v Karlových Varech uskuteÄnà tÅetà roÄnÃk VýbÄhu na Goethovu vyhlÃdku. Závod nabÃdne tratÄ pro nejmenšà dÄti, zkuÅ¡enÄjšà bÄžce i Å¡irokou veÅejnost. Ti nejodvážnÄjšà se mohou pustit do trasy dlouhé 3,5 kilometru.</p> 309 </div> 310 </div> 311 </div> 312 </article> 313 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 314 <div class="feature-image"> 315 <div class="image-frame image-hover-style-1"> 316 <a href="/z_historickych_lazni_mestske_byty_frantiskovy_lazne_planuji_promenu_vyznamne_budovy" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/efd4cab187/nahled_google_discover.jpg.medium.jpg" alt="Z historických lázní městské byty. Františkovy Lázně plánují proměnu významné budovy"></a> 317 </div> 318 </div> 319 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 320 <div class="card-flex-content w-100"> 321 <h6> 322 <a href="/z_historickych_lazni_mestske_byty_frantiskovy_lazne_planuji_promenu_vyznamne_budovy" target="">Z historických lázní městské byty. Františkovy Lázně plánují proměnu významné budovy</a> 323 </h6> 324 <div class="desktop-only"> 325 <p>Historická budova Luisiných láznà ve FrantiÅ¡kových LáznÃch by mohla zÃskat nové využitÃ. MÄsto pÅipravilo projekt jejà rekonstrukce, který poÄÃtá se vznikem menÅ¡Ãch i vÄtÅ¡Ãch nájemnÃch bytů pro mÃstnà obyvatele. SouÄástà plánované promÄny má být také spoleÄná zahrada s posezenÃm a altánem.</p> 326 </div> 327 </div> 328 </div> 329 </article> 330 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 331 <div class="feature-image"> 332 <div class="image-frame image-hover-style-1"> 333 <a href="/robotika_3d_tisk_i_digitalni_dovednosti_chodov_da_300_tisic_na_nove_pocitace" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/ffca3f25d0/deti_lego_google_discover.jpg.medium.jpg" alt="Robotika, 3D tisk i digitální dovednosti. Chodov dá 300 tisíc na nové počítače"></a> 334 </div> 335 </div> 336 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 337 <div class="card-flex-content w-100"> 338 <h6> 339 <a href="/robotika_3d_tisk_i_digitalni_dovednosti_chodov_da_300_tisic_na_nove_pocitace" target="">Robotika, 3D tisk i digitální dovednosti. Chodov dá 300 tisíc na nové počítače</a> 340 </h6> 341 <div class="desktop-only"> 342 <p>Kroužky 3D tisku, robotika nebo rozvoj digitálnÃch dovednostà dostanou v chodovském DDM BludiÅ¡tÄ nové vybavenÃ. Dvanáct zastaralých poÄÃtaÄů už svými parametry nestaÄà a nenà možné je pÅevést na novÄjšà podporovanou verzi operaÄnÃho systému. Na modernizaci mÄsto vyÄlenilo 300 tisÃc korun.</p> 343 </div> 344 </div> 345 </div> 346 </article> 347 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 348 <div class="feature-image"> 349 <div class="image-frame image-hover-style-1"> 350 <a href="/ve_veznici_vypukl_pozar_a_chybeli_dva_odsouzeni_nastesti_slo_jen_o_cviceni" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/0e2721e78d/hasici_veznice_google_discover.jpg.medium.jpg" alt="Ve věznici vypukl požár a chyběli dva odsouzení. Naštěstí šlo jen o cvičení"></a> 351 </div> 352 </div> 353 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 354 <div class="card-flex-content w-100"> 355 <h6> 356 <a href="/ve_veznici_vypukl_pozar_a_chybeli_dva_odsouzeni_nastesti_slo_jen_o_cviceni" target="">Ve věznici vypukl požár a chyběli dva odsouzení. Naštěstí šlo jen o cvičení</a> 357 </h6> 358 <div class="desktop-only"> 359 <p>Požár zachvátil dvÄ cely a pÅi evakuaci se zjistilo, že chybÄjà dva odsouzenÃ. Takový scénáŠÄekal na hasiÄe a zamÄstnance VÄznice Hornà Slavkov bÄhem taktického cviÄenÃ. Do areálu postupnÄ dorazily jednotky z nÄkolika mÃst Karlovarského kraje.</p> 360 </div> 361 </div> 362 </div> 363 </article> 364 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 365 <div class="feature-image"> 366 <div class="image-frame image-hover-style-1"> 367 <a href="/sokolov_ma_nove_pietni_misto" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/a408fb3579/Bez_nazvu.png.medium.jpg" alt="Sokolov má nové pietní místo"></a> 368 </div> 369 </div> 370 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 371 <div class="card-flex-content w-100"> 372 <h6> 373 <a href="/sokolov_ma_nove_pietni_misto" target="">Sokolov má nové pietní místo</a> 374 </h6> 375 <div class="desktop-only"> 376 <p>
376DesÃtky let zůstával jejich pÅÃbÄh ukrytý v archivech a vzpomÃnkách pamÄtnÃků. Nynà majà ženy vÄznÄné v nacistickém táboÅe ve SvatavÄ své vlastnà pietnà mÃsto, které vzniklo na sokolovském hÅbitovÄ.</p> 377 </div> 378 </div> 379 </div> 380 </article> 381 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 382 <div class="feature-image"> 383 <div class="image-frame image-hover-style-1"> 384 <a href="/barokni_kulisa_ostrovskeho_zamku_ma_za_sebou_opravu_pohledova_zed_dostala_novy_kabat" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/1d96a5a14a/zahrada_google_discover_1200x900.jpg.medium.jpg" alt="Barokní kulisa ostrovského zámku má za sebou opravu. Pohledová zeď dostala nový kabát"></a> 385 </div> 386 </div> 387 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 388 <div class="card-flex-content w-100"> 389 <h6> 390 <a href="/barokni_kulisa_ostrovskeho_zamku_ma_za_sebou_opravu_pohledova_zed_dostala_novy_kabat" target="">Barokní kulisa ostrovského zámku má za sebou opravu. Pohledová zeď dostala nový kabát</a> 391 </h6> 392 <div class="desktop-only"> 393 <p>Pohledová zeÄ u ostrovského zámku má za sebou dalšà opravu. ÅemeslnÃci obnovili poÅ¡kozené omÃtky a zdivo, opravili stÅechu i vyhlÃdkovou ploÅ¡inu. Ãprav se doÄkala také pÅilehlá Zahrada vůnà a barev.</p> 394 </div> 395 </div> 396 </div> 397 </article> 398 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 399 <div class="feature-image"> 400 <div class="image-frame image-hover-style-1"> 401 <a href="/frantiskovy_lazne_chystaji_sit_dobijecich_stanic_vzniknout_ma_kolem_20_stanic" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/0ef4c0ecd7/60ae95f1-53de-4e4b-94c0-30b9cd5d7df4.png.medium.jpg" alt="Františkovy Lázně chystají síť dobíjecích stanic. Vzniknout má kolem dvaceti míst"></a> 402 </div> 403 </div> 404 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 405 <div class="card-flex-content w-100"> 406 <h6> 407 <a href="/frantiskovy_lazne_chystaji_sit_dobijecich_stanic_vzniknout_ma_kolem_20_stanic" target="">Františkovy Lázně chystají síť dobíjecích stanic. Vzniknout má kolem dvaceti míst</a> 408 </h6> 409 <div class="desktop-only"> 410 <p>ÅidiÄi elektromobilů by mohli ve FrantiÅ¡kových LáznÃch zÃskat vÃce možnostÃ, kde doplnit energii. MÄsto pÅipravuje sÃÅ¥ pÅibližnÄ 20 dobÃjecÃch mÃst, která majà vzniknout napÅÃklad na sÃdliÅ¡ti nebo záchytných parkoviÅ¡tÃch. Projekt je zatÃm ve fázi pÅÃprav.</p> 411 </div> 412 </div> 413 </div> 414 </article> 415 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 416 <div class="feature-image"> 417 <div class="image-frame image-hover-style-1"> 418 <a href="/obyvatele_chodova_rozhodli_mesto_pristi_rok_uskutecni_sedm_jejich_napadu" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/4cad7e86ff/sportoviste_google_discover_1200x900.jpg.medium.jpg" alt="Obyvatelé Chodova rozhodli. Město příští rok uskuteční sedm jejich nápadů"></a> 419 </div> 420 </div> 421 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 422 <div class="card-flex-content w-100"> 423 <h6> 424 <a href="/obyvatele_chodova_rozhodli_mesto_pristi_rok_uskutecni_sedm_jejich_napadu" target="">Obyvatelé Chodova rozhodli. Město příští rok uskuteční sedm jejich nápadů</a> 425 </h6> 426 <div class="desktop-only"> 427 <p>PÃtko s mlhoviÅ¡tÄm, malá letnà scéna nebo komunitnà nahrávacà studio. Obyvatelé Chodova rozhodli, které návrhy z participativnÃho rozpoÄtu se uskuteÄnà v roce 2027. MÄsto poÄÃtá s realizacà sedmi projektů za celkem 1,9 milionu korun.</p> 428 </div> 429 </div> 430 </div> 431 </article> 432 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 433 <div class="feature-image"> 434 <div class="image-frame image-hover-style-1">
435 <a href="/as_opravila_klecove_hriste_po_bazenu_jde_o_dalsi_promenu_sportovniho_zazemi" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/a94c6519a1/hriste_google_discover_1200x900.jpg.medium.jpg" alt="Aš opravila klecové hřiště. Po bazénu jde o další proměnu sportovního zázemí"></a> 436 </div> 437 </div> 438 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 439 <div class="card-flex-content w-100"> 440 <h6> 441 <a href="/as_opravila_klecove_hriste_po_bazenu_jde_o_dalsi_promenu_sportovniho_zazemi" target="">Aš opravila klecové hřiště. Po bazénu jde o další proměnu sportovního zázemí</a> 442 </h6> 443 <div class="desktop-only"> 444 <p>Klecové hÅiÅ¡tÄ ve vnitrobloku mezi ulicemi TÅebÃzského, Dlouhá a NemocniÄnà v AÅ¡i je po celkové opravÄ znovu pÅÃstupné veÅejnosti. SportoviÅ¡tÄ dostalo nový umÄlý povrch a navazuje na dalšà investice mÄsta do sportovnÃho zázemÃ. Nedávno skonÄila rekonstrukce krytého bazénu a pÅipravuje se také nový volnoÄasový areál mÃsto dosluhujÃcÃho skateparku.</p> 445 </div> 446 </div> 447 </div> 448 </article> 449 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 450 <div class="feature-image"> 451 <div class="image-frame image-hover-style-1"> 452 <a href="/hasici_bojovali_o_pohar_hejtmana_u_globusu_pomerily_sily_deti_i_dospeli" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/49f42f8a6a/hasici_deti_google_discover_1200x900.jpg.medium.jpg" alt="Hasiči bojovali o pohár hejtmana. U Globusu poměřily síly děti i dospělí"></a> 453 </div> 454 </div> 455 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 456 <div class="card-flex-content w-100"> 457 <h6> 458 <a href="/hasici_bojovali_o_pohar_hejtmana_u_globusu_pomerily_sily_deti_i_dospeli" target="">Hasiči bojovali o pohár hejtmana. U Globusu poměřily síly děti i dospělí</a> 459 </h6> 460 <div class="desktop-only"> 461 <p>Hadice, proudnice a boj o každou vteÅinu. U Globusu se v sobotu 3. ÅÃjna uskuteÄnil dalšà roÄnÃk soutÄže O pohár hejtmana Karlovarského kraje. V požárnÃm útoku pomÄÅili sÃly mladà hasiÄi, dorostenci i dospÄlà závodnÃci.</p> 462 </div> 463 </div> 464 </div> 465 </article> 466 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 467 <div class="feature-image"> 468 <div class="image-frame image-hover-style-1"> 469 <a href="/misto_zchatraleho_pivovaru_nova_ctvrt_v_rybarich_vyroste_temer_200_bytu" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/b650cf7481/bydleni_google_discover_1200x900.jpg.medium.jpg" alt="Místo zchátralého pivovaru nová čtvrť. V Rybářích vyroste téměř 200 bytů"></a> 470 </div> 471 </div> 472 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 473 <div class="card-flex-content w-100"> 474 <h6> 475 <a href="/misto_zchatraleho_pivovaru_nova_ctvrt_v_rybarich_vyroste_temer_200_bytu" target="">Místo zchátralého pivovaru nová čtvrť. V Rybářích vyroste téměř 200 bytů</a> 476 </h6> 477 <div class="desktop-only"> 478 <p>MÃsto zchátralého a dlouhá léta uzavÅeného areálu nová Äást mÄsta s bydlenÃm, obchody, službami i parkem. V pondÄlà byl v RybáÅÃch slavnostnÄ položen základnà kámen nové Ätvrti, která vznikne na mÃstÄ bývalého pivovaru. Prvnà etapa má být dokonÄena v roce 2028.</p> 479 </div> 480 </div> 481 </div> 482 </article> 483 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 484 <div class="feature-image"> 485 <div class="image-frame image-hover-style-1"> 486 <a href="/straznici_pomahali_seniorum_jednoho_zvedli_na_nohy_druheho_doprovodili_domu" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/fc800e7423/senior_google_discover.jpg.medium.jpg" alt="Strážníci pomáhali seniorům. Jednoho zvedli na nohy, druhého doprovodili domů"></a> 487 </div> 488 </div> 489 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 490 <div class="card-flex-content w-100"> 491 <h6> 492 <a href="/straznici_pomahali_seniorum_jednoho_zvedli_na_nohy_druheho_doprovodili_domu" target="">Strážníci pomáhali seniorům. Jednoho zvedli na nohy, druhého doprovodili domů</a> 493 </h6> 494 <div class="desktop-only"> 495 <p>Dva senioÅi potÅebovali bÄhem nedÄle pomoc karlovarských strážnÃků. Devadesátiletý muž se nedokázal sám postavit na nohy, dalšà senior trpÃcà Parkinsonovou nemocà opakovanÄ padal pÅi chůzi. Oba pÅÃpady se naÅ¡tÄstà obeÅ¡ly bez zranÄnÃ.</p> 496 </div> 497 </div> 498 </div> 499 </article> 500 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 501 <div class="feature-image"> 502 <div class="image-frame image-hover-style-1"> 503 <a href="/veterinarni_pohotovost_ma_v_karlovarskem_kraji_napilno_za_jednu_sluzbu_osetri_kolem_20_zvirat" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/aed5db4465/veterina_google_discover.jpg.medium.jpg" alt="Veterinární pohotovost má v Karlovarském kraji napilno. Za jednu službu ošetří kolem 20 zvířat"></a> 504 </div> 505 </div> 506 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 507 <div class="card-flex-content w-100"> 508 <h6> 509 <a href="/veterinarni_pohotovost_ma_v_karlovarskem_kraji_napilno_za_jednu_sluzbu_osetri_kolem_20_zvirat" target="">Veterinární pohotovost má v Karlovarském kraji napilno. Za jednu službu ošetří kolem 20 zvířat</a> 510 </h6> 511 <div class="desktop-only"> 512 <p>
512Kolem dvaceti zvÃÅecÃch pacientů bÄhem jediné služby, nÄkdy i vÃce. Veterinárnà služba prvnà pomoci v Karlovarském kraji zůstává podle zkuÅ¡enostà zapojených lékaÅů hojnÄ využÃvaná i po otevÅenà nové veterinárnà kliniky v Karlových Varech. O vÃkendech a svátcÃch ji nynà zajišťuje 11 ordinacÃ.</p> 513 </div> 514 </div> 515 </div> 516 </article> 517 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 518 <div class="feature-image"> 519 <div class="image-frame image-hover-style-1"> 520 <a href="/nocni_pozar_v_lubech_na_chebsku_hasici_zachranili_z_bytoveho_domu_14_lidi" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/494bd70192/hasici_nocni_zasah_google_discover.jpg.medium.jpg" alt="Noční požár v Lubech na Chebsku. Hasiči zachránili z bytového domu 14 lidí"></a> 521 </div> 522 </div> 523 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 524 <div class="card-flex-content w-100"> 525 <h6> 526 <a href="/nocni_pozar_v_lubech_na_chebsku_hasici_zachranili_z_bytoveho_domu_14_lidi" target="">Noční požár v Lubech na Chebsku. Hasiči zachránili z bytového domu 14 lidí</a> 527 </h6> 528 <div class="desktop-only"> 529 <p>Ätrnáct zachránÄných a dalÅ¡Ãch sedm evakuovaných lidà si vyžádal noÄnà požár bytového domu v Lubech. HoÅet zaÄalo v sobotu krátce po druhé hodinÄ rannà ve sklepnà kóji a kouÅ následnÄ zaplnil spoleÄné prostory. Jednoho ÄlovÄka si pÅevzali záchranáÅi.</p> 530 </div> 531 </div> 532 </div> 533 </article> 534 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 535 <div class="feature-image"> 536 <div class="image-frame image-hover-style-1"> 537 <a href="/nove_ucebny_interaktivni_tabule_i_pestry_program_skola_ve_frantiskovych_laznich_nezahali" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/2fb035e083/skola_google_discover.jpg.medium.jpg" alt="Nové učebny, interaktivní tabule i pestrý program. Škola ve Františkových Lázních nezahálí"></a> 538 </div> 539 </div> 540 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 541 <div class="card-flex-content w-100"> 542 <h6> 543 <a href="/nove_ucebny_interaktivni_tabule_i_pestry_program_skola_ve_frantiskovych_laznich_nezahali" target="">Nové učebny, interaktivní tabule i pestrý program. Škola ve Františkových Lázních nezahálí</a> 544 </h6> 545 <div class="desktop-only"> 546 <p>ZatÃmco dÄti mÄly letnà prázdniny, ve Å¡kole ve FrantiÅ¡kových LáznÃch se pracovalo. Rekonstrukcà proÅ¡lo sedm uÄeben, nové vybavenà dostala také družina a zmÄny se dotkly chodeb i Å¡aten. Do budoucna se poÄÃtá také s modernÃm Å¡kolnÃm hÅiÅ¡tÄm.</p> 547 </div> 548 </div> 549 </div> 550 </article> 551 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 552 <div class="feature-image"> 553 <div class="image-frame image-hover-style-1"> 554 <a href="/u_sokolovskeho_hrbitova_vzniklo_pietni_misto_pro_zeny_ze_svatavy" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/911091c967/26aacf5acf002aba.jpg.webp.medium.jpg" alt="U sokolovského hřbitova vzniklo pietní místo pro ženy ze Svatavy"></a> 555 </div> 556 </div> 557 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 558 <div class="card-flex-content w-100"> 559 <h6> 560 <a href="/u_sokolovskeho_hrbitova_vzniklo_pietni_misto_pro_zeny_ze_svatavy" target="">U sokolovského hřbitova vzniklo pietní místo pro ženy ze Svatavy</a> 561 </h6> 562 <div class="desktop-only"> 563 <p>Nové pietnà mÃsto u sokolovského hÅbitova pÅipomÃná osudy žen vÄznÄných za druhé svÄtové války ve svatavském koncentraÄnÃm táboÅe. SouÄástà prostoru je také pamÄtnà kniha Rodinné album, která prostÅednictvÃm fotografià a vzpomÃnek pÅibližuje jejich tragické pÅÃbÄhy. Vybudovánà mÃsta stálo pÅibližnÄ 1,5 milionu korun.</p> 564 </div> 565 </div> 566 </div> 567 </article> 568 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 569 <div class="feature-image"> 570 <div class="image-frame image-hover-style-1"> 571 <a href="/za_jachymovskym_tolarem_vyrazi_turiste_uz_po_petadvacate_pripomenou_otce_hornictva" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/ee9724b4a1/turistika_google_discover.jpg.medium.jpg" alt="Za jáchymovským tolarem vyrazí turisté už po pětadvacáté. Připomenou „otce hornictva“"></a> 572 </div> 573 </div> 574 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 575 <div class="card-flex-content w-100"> 576 <h6> 577 <a href="/za_jachymovskym_tolarem_vyrazi_turiste_uz_po_petadvacate_pripomenou_otce_hornictva" target="">Za jáchymovským tolarem vyrazí turisté už po pětadvacáté. Připomenou „otce hornictva“</a> 578 </h6> 579 <div class="desktop-only"> 580 <p>Od krátké procházky s dÄtmi až po osmnáctikilometrovou túru pÅes KruÅ¡né hory. V sobotu 10. ÅÃjna se uskuteÄnà 25. roÄnÃk pochodu O jáchymovský tolar. LetoÅ¡nà roÄnÃk pÅipomene Josefa Å tÄpa, významnou osobnost zdejÅ¡Ãho hornictvÃ, od jehož smrti letos uplynulo 100 let.</p> 581 </div> 582 </div> 583 </div> 584 </article> 585 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 586 <div class="feature-image"> 587 <div class="image-frame image-hover-style-1"> 588 <a href="/sledujte_predvolebni_debatu_kandidatu_na_primatora_plzne_na_zak_tv" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/c0fc35c573/Bez_nazvu.png.medium.jpg" alt="Sledujte předvolební debatu kandidátů na primátora Plzně na ZAK TV"></a> 589 </div> 590 </div> 591 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 592 <div class="card-flex-content w-100"> 593 <h6> 594 <a href="/sledujte_predvolebni_debatu_kandidatu_na_primatora_plzne_na_zak_tv" target="">Sledujte předvolební debatu kandidátů na primátora Plzně na ZAK TV</a> 595 </h6> 596 <div class="desktop-only"> 597 <p>
597Od pondÄlà 5. ÅÃjna vždy po hlavnÃch zprávách, které startujà v 17:00, bude v TV ZAK k vidÄnà prvnà Äást tÅÃdÃlné pÅedvolebnà debaty, kterou televize uspoÅádala minulý Ätvrtek na malé scénÄ Divadla J. K. Tyla v Plzni.</p> 598 </div> 599 </div> 600 </div> 601 </article> 602 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 603 <div class="feature-image"> 604 <div class="image-frame image-hover-style-1"> 605 <a href="/na_skolni_obedy_pro_deti_v_nouzi_pujde_temer_12_milionu_korun" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/bf45bebc80/obedy_do_skol_google_discover.jpg.medium.jpg" alt="Na školní obědy pro děti v nouzi půjde téměř 12 milionů korun"></a> 606 </div> 607 </div> 608 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 609 <div class="card-flex-content w-100"> 610 <h6> 611 <a href="/na_skolni_obedy_pro_deti_v_nouzi_pujde_temer_12_milionu_korun" target="">Na školní obědy pro děti v nouzi půjde téměř 12 milionů korun</a> 612 </h6> 613 <div class="desktop-only"> 614 <p>DÄti a mladà lidé ze sociálnÄ slabých rodin mohou i v tomto Å¡kolnÃm roce zÃskat pÅÃspÄvek na stravovánÃ. Karlovarský kraj znovu vyhlaÅ¡uje program ObÄdy do Å¡kol, na který pro Å¡kolnà rok 2026/2027 vyÄlenil témÄÅ 12,2 milionu korun. Podpora je urÄena dÄtem a žákům ve vÄku od 2 do 26 let.</p> 615 </div> 616 </div> 617 </div> 618 </article> 619 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 620 <div class="feature-image"> 621 <div class="image-frame image-hover-style-1"> 622 <a href="/ostrov_bude_patrit_filmu_festival_oty_hofmana_privita_sveraka_freimanovou_i_zilkovou" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/7282ac3e47/festival_oty_hofmana_google_discover.jpg.medium.jpg" alt="Ostrov bude patřit filmu. Festival Oty Hofmana přivítá Svěráka, Freimanovou i Žilkovou"></a> 623 </div> 624 </div> 625 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 626 <div class="card-flex-content w-100"> 627 <h6> 628 <a href="/ostrov_bude_patrit_filmu_festival_oty_hofmana_privita_sveraka_freimanovou_i_zilkovou" target="">Ostrov bude patřit filmu. Festival Oty Hofmana přivítá Svěráka, Freimanovou i Žilkovou</a> 629 </h6> 630 <div class="desktop-only"> 631 <p>Ostrov se v ÅÃjnu znovu promÄnà v centrum filmové a televiznà tvorby pro dÄti a mládež. Od 11. do 16. ÅÃjna se uskuteÄnà 58. roÄnÃk Festivalu Oty Hofmana, který nabÃdne vÃce než ÄtyÅicet snÃmků, pÅedpremiéry, výstavy i setkánà se známými osobnostmi. Dorazà napÅÃklad ZdenÄk SvÄrák, Veronika Freimanová, Veronika Žilková nebo Josef DvoÅák.</p> 632 </div> 633 </div> 634 </div> 635 </article> 636 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 637 <div class="feature-image"> 638 <div class="image-frame image-hover-style-1"> 639 <a href="/nehoda_a_skupina_lidi_mirici_k_hranici_u_ase_cvicily_desitky_policistu_hasicu_i_dobrovolniku" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/5e056cb237/nehoda_hasici_google_discover_1200x900.jpg.medium.jpg" alt="Nehoda a skupina lidí mířící k hranici. U Aše cvičily desítky policistů, hasičů i dobrovolníků"></a> 640 </div> 641 </div> 642 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 643 <div class="card-flex-content w-100"> 644 <h6> 645 <a href="/nehoda_a_skupina_lidi_mirici_k_hranici_u_ase_cvicily_desitky_policistu_hasicu_i_dobrovolniku" target="">Nehoda a skupina lidí mířící k hranici. U Aše cvičily desítky policistů, hasičů i dobrovolníků</a> 646 </h6> 647 <div class="desktop-only"> 648 <p>Dopravnà nehoda dvou aut, zranÄnà lidé a skupina osob, která zamÃÅila lesem ke státnà hranici. Takový byl scénáŠrozsáhlého takticko-provÄÅovacÃho cviÄenÃ, které se v sobotu 26. záÅà uskuteÄnilo poblÞ AÅ¡e. Do nÄkolikahodinové akce se zapojily desÃtky policistů, hasiÄů, dobrovolnÃků i studentů.</p> 649 </div> 650 </div> 651 </div> 652 </article> 653 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 654 <div class="feature-image"> 655 <div class="image-frame image-hover-style-1"> 656 <a href="/muz_u_panelaku_podezrele_cichal_k_omitce_straznici_odhalili_zahadu_degustatora_fasady" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/ce39d4df00/pozarna_fasada_google_discover_1200x900.jpg.medium.jpg" alt="Muž u paneláku podezřele čichal k omítce. Strážníci odhalili záhadu „degustátora fasády“"></a> 657 </div> 658 </div> 659 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 660 <div class="card-flex-content w-100"> 661 <h6> 662 <a href="/muz_u_panelaku_podezrele_cichal_k_omitce_straznici_odhalili_zahadu_degustatora_fasady" target="">Muž u paneláku podezřele čichal k omítce. Strážníci odhalili záhadu „degustátora fasády“</a> 663 </h6> 664 <div class="desktop-only"> 665 <p>Loupe omÃtku z paneláku, sype ji do pytlÃÄku a jeÅ¡tÄ k nà podezÅele Äichá. Takové oznámenà pÅijali v úterý krátce po poledni strážnÃci kvůli muži v Západnà ulici. Na mÃstÄ skuteÄnÄ naÅ¡li horlivého âomÃtkáÅeâ, vysvÄtlenà ale bylo mnohem prostÅ¡Ã.</p> 666 </div> 667 </div> 668 </div> 669 </article> 670 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 671 <div class="feature-image"> 672 <div class="image-frame image-hover-style-1"> 673 <a href="/za_erbem_ostrovske_kaple_objevili_tajnou_schranku_ukryji_do_ni_vzkaz_pro_budouci_generace" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/c945a295d7/kaple_google_discover_1200x900.jpg.medium.jpg" alt="Za erbem ostrovské kaple objevili tajnou schránku. Ukryjí do ní vzkaz pro budoucí generace"></a> 674 </div> 675 </div> 676 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 677 <div class="card-flex-content w-100"> 678 <h6> 679 <a href="/za_erbem_ostrovske_kaple_objevili_tajnou_schranku_ukryji_do_ni_vzkaz_pro_budouci_generace" target="">Za erbem ostrovské kaple objevili tajnou schránku. Ukryjí do ní vzkaz pro budoucí generace</a> 680 </h6> 681 <div class="desktop-only"> 682 <p>NeÄekaný objev pÅinesla letoÅ¡nà obnova kaple Panny Marie Einsiedelnské v OstrovÄ. RestaurátoÅi za alianÄnÃm erbem narazili na tajnou schránku, která nynà dostane nový úÄel. Ve stÅedu 7. ÅÃjna do nà bude slavnostnÄ uloženo pamÄtnà pouzdro s poselstvÃm pro budoucà generace.</p> 683 </div> 684 </div> 685 </div> 686 </article> 687 688 <div class="text-center"> 689 690 691<div class="ad-list"> 692 <div class="ad-title-wrap mb-0 d-flex justify-content-end">
693 <span class="ad-title">Reklama</span> 694</div> 695 <a href="https://www.serikovka.cz/" class="banner-link" data-banner-id="163" target="_blank" title="Turbo v Šeříkovce"><img src="https://zaktv.b-cdn.net/upload/Banner/d7a475b68b/2026-12-30_Turbo_728x90px_plzencz_(3).jpg" /></a> 696</div> 697 </div> 698 699 </div> 700 <div class="col-lg-4 col-md-5 desktop-only"> 701 <div class="sticky-top sticky-sidebar"> 702 703 704 705<div class="static-ads"> 706 707 <div class="mb-2 ad-sidebar"> 708 <div data-sidebar-ad-title hidden> 709 <div class="ad-title-wrap mb-0 d-flex justify-content-end"> 710 <span class="ad-title">Reklama</span> 711</div> 712 </div> 713 <!-- ZAK-Sidebar --> 714 <ins class="sidebar-adsense" 715 style="display:block" 716 data-ad-client="ca-pub-1914100961537914" 717 data-ad-slot="2460148899" 718 data-ad-format="auto" 719 data-full-width-responsive="true"></ins> 720
720<script> 721 (function () { 722 const ad = document.currentScript.previousElementSibling; 723 const title = ad.parentElement.querySelector('[data-sidebar-ad-title]'); 724 function updateTitle() { 725 title.hidden = ad.getAttribute('data-ad-status') !== 'filled'; 726 } 727 const statusObserver = new MutationObserver(updateTitle); 728 statusObserver.observe(ad, { attributes: true, attributeFilter: ['data-ad-status'] }); 729 updateTitle(); 730 let initialized = false; 731 const observer = new ResizeObserver(initialize); 732 function initialize() { 733 if (initialized || ad.getBoundingClientRect().width <= 0) return; 734 initialized = true; 735 observer.disconnect(); 736 ad.classList.add('adsbygoogle'); 737 (window.adsbygoogle = window.adsbygoogle || []).push({}); 738 } 739 observer.observe(ad); 740 initialize(); 741 })(); 742 </script>
742 743 </div> 744 745</div> 746 747 748<div class="static-ads"> 749 750 <div class="mb-2 ad-sidebar"> 751 <div data-sidebar-ad-title hidden> 752 <div class="ad-title-wrap mb-0 d-flex justify-content-end"> 753 <span class="ad-title">Reklama</span> 754</div> 755 </div> 756 <!-- ZAK-Sidebar --> 757 <ins class="sidebar-adsense" 758 style="display:block" 759 data-ad-client="ca-pub-1914100961537914" 760 data-ad-slot="2460148899" 761 data-ad-format="auto" 762 data-full-width-responsive="true"></ins> 763
763<script> 764 (function () { 765 const ad = document.currentScript.previousElementSibling; 766 const title = ad.parentElement.querySelector('[data-sidebar-ad-title]'); 767 function updateTitle() { 768 title.hidden = ad.getAttribute('data-ad-status') !== 'filled'; 769 } 770 const statusObserver = new MutationObserver(updateTitle); 771 statusObserver.observe(ad, { attributes: true, attributeFilter: ['data-ad-status'] }); 772 updateTitle(); 773 let initialized = false; 774 const observer = new ResizeObserver(initialize); 775 function initialize() { 776 if (initialized || ad.getBoundingClientRect().width <= 0) return; 777 initialized = true; 778 observer.disconnect(); 779 ad.classList.add('adsbygoogle'); 780 (window.adsbygoogle = window.adsbygoogle || []).push({}); 781 } 782 observer.observe(ad); 783 initialize(); 784 })(); 785 </script>
785 786 </div> 787 788</div> 789 790 </div> 791 </div> 792 </div> 793 794 795 <div class="row"> 796 <div class="col-md-7 col-lg-8 pl-12"> 797 798 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 799 <div class="feature-image"> 800 <div class="image-frame image-hover-style-1"> 801 <a href="/z_rodinneho_domu_zmizely_sperky_i_dron_za_170_tisic_policie_patra_po_cloveku_z_videa" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/bd98adebbd/policie_velitel_google_discover_1200x900.jpg.medium.jpg" alt="Z rodinného domu zmizely šperky i dron za 170 tisíc. Policie pátrá po člověku z videa"></a> 802 </div> 803 </div> 804 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 805 <div class="card-flex-content w-100"> 806 <h6> 807 <a href="/z_rodinneho_domu_zmizely_sperky_i_dron_za_170_tisic_policie_patra_po_cloveku_z_videa" target="">Z rodinného domu zmizely šperky i dron za 170 tisíc. Policie pátrá po člověku z videa</a> 808 </h6> 809 <div class="desktop-only"> 810 <p>Prsteny, témÄÅ dvanáct ÅetÃzků nebo dron s pÅÃsluÅ¡enstvÃm zmizely v srpnu z rodinného domu v menšà obci na Karlovarsku. Å koda dosáhla pÅibližnÄ 170 tisÃc korun. Kriminalisté nynà pátrajà po osobÄ, kterou v dobÄ krádeže zachytil kamerový systém.</p> 811 </div> 812 </div> 813 </div> 814 </article> 815 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 816 <div class="feature-image"> 817 <div class="image-frame image-hover-style-1"> 818 <a href="/ledove_jamy_se_vyjimecne_otevrou_verejnosti_blatensky_vrch_nabidne_den_s_lesniky" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/1bd3d16cf2/liska_google_discover_1200x900.jpg.medium.jpg" alt="Ledové jámy se výjimečně otevřou veřejnosti. Blatenský vrch nabídne den s lesníky"></a> 819 </div> 820 </div> 821 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 822 <div class="card-flex-content w-100"> 823 <h6> 824 <a href="/ledove_jamy_se_vyjimecne_otevrou_verejnosti_blatensky_vrch_nabidne_den_s_lesniky" target="">Ledové jámy se výjimečně otevřou veřejnosti. Blatenský vrch nabídne den s lesníky</a> 825 </h6> 826 <div class="desktop-only"> 827 <p>BÄžnÄ nepÅÃstupné Ledové jámy, výstup zdarma na rozhlednu nebo ukázky práce lesnÃků. Blatenský vrch nabÃdne den vÄnovaný lesnictvÃ, pÅÃrodÄ i historii KruÅ¡ných hor. NávÅ¡tÄvnÃky Äeká 2,5 kilometru dlouhá okružnà trasa s Åadou stanovišť.</p> 828 </div> 829 </div> 830 </div> 831 </article> 832 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 833 <div class="feature-image"> 834 <div class="image-frame image-hover-style-1"> 835 <a href="/ridic_prosvistel_kolem_policejniho_vozu_rychlosti_183_kmh_prisel_o_ridicak" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/4daa7d348e/rychlost_183_google_discover.jpg.medium.jpg" alt="Řidič prosvištěl kolem policejního vozu rychlostí 183 km/h. Přišel o řidičák"></a> 836 </div> 837 </div> 838 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 839 <div class="card-flex-content w-100"> 840 <h6> 841 <a href="/ridic_prosvistel_kolem_policejniho_vozu_rychlosti_183_kmh_prisel_o_ridicak" target="">Řidič prosvištěl kolem policejního vozu rychlostí 183 km/h. Přišel o řidičák</a> 842 </h6> 843 <div class="desktop-only"> 844 <p>
844Na poÅádný problém si zadÄlal Å¡estatÅicetiletý ÅidiÄ na silnici I/6 u VeruÅ¡iÄek. V mÃstÄ s povolenou devadesátkou jel rychlostà 183 kilometrů v hodinÄ a pÅi své jÃzdÄ pÅedjel pÅÃmo policejnà vůz. Policisté ho následnÄ zastavili a zadrželi mu ÅidiÄský průkaz.</p> 845 </div> 846 </div> 847 </div> 848 </article> 849 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 850 <div class="feature-image"> 851 <div class="image-frame image-hover-style-1"> 852 <a href="/karlovarsky_kraj_laka_lekare_na_milionovy_prispevek_hleda_onkology_a_radiology" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/aae664e523/261002-radiolog-screening-mamograf.png.medium.jpg" alt="Karlovarský kraj láká lékaře na milionový příspěvek. Hledá onkology a radiology"></a> 853 </div> 854 </div> 855 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 856 <div class="card-flex-content w-100"> 857 <h6> 858 <a href="/karlovarsky_kraj_laka_lekare_na_milionovy_prispevek_hleda_onkology_a_radiology" target="">Karlovarský kraj láká lékaře na milionový příspěvek. Hledá onkology a radiology</a> 859 </h6> 860 <div class="desktop-only"> 861 <p>Karlovarský kraj chce zÃskat dalšà lékaÅe pro nemocnice v Karlových Varech, Chebu a SokolovÄ. Klinickým onkologům, radiologům a specialistům na mamárnà diagnostiku novÄ nabÃdne náborový pÅÃspÄvek až jeden milion korun. PosÃlenà personálu má mimo jiné umožnit rozÅ¡ÃÅenà provozu onkologického centra.</p> 862 </div> 863 </div> 864 </div> 865 </article> 866 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 867 <div class="feature-image"> 868 <div class="image-frame image-hover-style-1"> 869 <a href="/chebsti_hasici_maji_novy_velitelsky_vuz_zvladne_i_tezko_pristupny_teren" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/ead829c729/hasici_cheb_google_discover_1200x900.jpg.medium.jpg" alt="Chebští hasiči mají nový velitelský vůz. Zvládne i těžko přístupný terén"></a> 870 </div> 871 </div> 872 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 873 <div class="card-flex-content w-100"> 874 <h6> 875 <a href="/chebsti_hasici_maji_novy_velitelsky_vuz_zvladne_i_tezko_pristupny_teren" target="">Chebští hasiči mají nový velitelský vůz. Zvládne i těžko přístupný terén</a> 876 </h6> 877 <div class="desktop-only"> 878 <p>Profesionálnà hasiÄi v Chebu majà k dispozici nový velitelský automobil Toyota Hilux. Vůz za vÃce než 1,7 milionu korun poÅÃdilo mÄsto Cheb a ve Ätvrtek 1. ÅÃjna jej pÅedalo hasiÄům. DÃky pohonu vÅ¡ech kol může zasahovat také v nároÄném a hůÅe pÅÃstupném terénu.</p> 879 </div> 880 </div> 881 </div> 882 </article> 883 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 884 <div class="feature-image"> 885 <div class="image-frame image-hover-style-1"> 886 <a href="/cheb_rozsiruje_stomatologickou_peci_o_deti_slozitejsi_zakroky_zvladnou_v_celkove_anestezii" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/ce92233cef/detsky_zubar_google_discover_1200x900.jpg.medium.jpg" alt="Cheb rozšiřuje stomatologickou péči o děti. Složitější zákroky zvládnou v celkové anestezii"></a> 887 </div> 888 </div> 889 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 890 <div class="card-flex-content w-100"> 891 <h6> 892 <a href="/cheb_rozsiruje_stomatologickou_peci_o_deti_slozitejsi_zakroky_zvladnou_v_celkove_anestezii" target="">Cheb rozšiřuje stomatologickou péči o děti. Složitější zákroky zvládnou v celkové anestezii</a> 893 </h6> 894 <div class="desktop-only"> 895 <p>DÄti, u kterých nenà možné potÅebné zubnà oÅ¡etÅenà bezpeÄnÄ provést bÄžnÄ v ordinaci, zÃskávajà v Chebu novou možnost. Stomatologické centrum FITDENT ve spolupráci s Nemocnicà Cheb zaÄÃná od 1. ÅÃjna provádÄt zákroky u dÄtských pacientů v celkové anestezii. Prvnà dvÄ dÄti podstoupà oÅ¡etÅenà hned ve Ätvrtek.</p> 896 </div> 897 </div> 898 </div> 899 </article> 900 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 901 <div class="feature-image"> 902 <div class="image-frame image-hover-style-1"> 903 <a href="/perninsky_kros_prilakal_120_zavodniku_pernink_chysta_dalsi_rozvoj_arealu" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/e688aa0b6b/cross_4.jpg.medium.jpg" alt="Perninský kros přilákal 120 závodníků. Pernink chystá další rozvoj areálu"></a> 904 </div> 905 </div> 906 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 907 <div class="card-flex-content w-100"> 908 <h6> 909 <a href="/perninsky_kros_prilakal_120_zavodniku_pernink_chysta_dalsi_rozvoj_arealu" target="">Perninský kros přilákal 120 závodníků. Pernink chystá další rozvoj areálu</a> 910 </h6> 911 <div class="desktop-only"> 912 <p>V Perninku se v sobotu 26. záÅà uskuteÄnil Perninský kros â Memoriál Jirky Holého. Na start se postavili závodnÃci vÅ¡ech vÄkových kategorià od minižáků až po veterány. NároÄná traÅ¥ vedla také do sjezdovky Velký link a závodu se zúÄastnilo zhruba 120 bÄžců. 913</p> 914 </div> 915 </div> 916 </div> 917 </article> 918 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 919 <div class="feature-image"> 920 <div class="image-frame image-hover-style-1"> 921 <a href="/ostrov_obnovi_zelen_u_domu_kultury_v_listopadu_zde_odhali_pamatnik_politickym_veznum" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/0b9b65273e/budova_google_discover_1200x900.jpg.medium.jpg" alt="Ostrov obnoví zeleň u Domu kultury. V listopadu zde odhalí památník politickým vězňům"></a> 922 </div> 923 </div> 924 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 925 <div class="card-flex-content w-100"> 926 <h6> 927 <a href="/ostrov_obnovi_zelen_u_domu_kultury_v_listopadu_zde_odhali_pamatnik_politickym_veznum" target="">Ostrov obnoví zeleň u Domu kultury. V listopadu zde odhalí památník politickým vězňům</a> 928 </h6> 929 <div class="desktop-only"> 930 <p>Okolà Domu kultury v OstrovÄ Äeká dalšà promÄna. PÅestárlé keÅe nahradà nová výsadba navazujÃcà na podobu prostoru ze 60. let a dokonÄena už byla také oprava scho
930dišť pÅed Äelnà fasádou. Významnou novinkou bude PamátnÃk svÄdomà pÅipomÃnajÃcà politické vÄznÄ, kteÅà se na stavbÄ kulturnÃho domu podÃleli.</p> 931 </div> 932 </div> 933 </div> 934 </article> 935 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 936 <div class="feature-image"> 937 <div class="image-frame image-hover-style-1"> 938 <a href="/misto_referenda_rozhodli_zastupitele_as_odkoupi_nevyuzivany_hotel_goethe" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/64325a2a33/hotel_google_discover_1200x900.jpg.medium.jpg" alt="Místo referenda rozhodli zastupitelé. Aš odkoupí nevyužívaný hotel Goethe"></a> 939 </div> 940 </div> 941 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 942 <div class="card-flex-content w-100"> 943 <h6> 944 <a href="/misto_referenda_rozhodli_zastupitele_as_odkoupi_nevyuzivany_hotel_goethe" target="">Místo referenda rozhodli zastupitelé. Aš odkoupí nevyužívaný hotel Goethe</a> 945 </h6> 946 <div class="desktop-only"> 947 <p>NevyužÃvaný hotel Goethe na rohu Äapkovy a Nádražnà ulice pÅejde do majetku AÅ¡e. Zastupitelé schválili jeho odkoupenà za 17 milionů korun. MÄsto chce zÃskánÃm objektu ovlivnit jeho dalšà využità a pÅedejÃt tomu, aby se z bývalého hotelu stala dalšà ubytovna.</p> 948 </div> 949 </div> 950 </div> 951 </article> 952 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 953 <div class="feature-image"> 954 <div class="image-frame image-hover-style-1"> 955 <a href="/od_proutenych_kabelek_k_prumyslovym_pecim_karlovarsky_kraj_vybral_firmu_a_zivnostnika_roku" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/c145cb3520/foto_google_discover_1200x900.jpg.medium.jpg" alt="Od proutěných kabelek k průmyslovým pecím. Karlovarský kraj vybral Firmu a Živnostníka roku"></a> 956 </div> 957 </div> 958 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 959 <div class="card-flex-content w-100"> 960 <h6> 961 <a href="/od_proutenych_kabelek_k_prumyslovym_pecim_karlovarsky_kraj_vybral_firmu_a_zivnostnika_roku" target="">Od proutěných kabelek k průmyslovým pecím. Karlovarský kraj vybral Firmu a Živnostníka roku</a> 962 </h6> 963 <div class="desktop-only"> 964 <p>Krajské finále 21. roÄnÃku soutÄžà Firma roku a ŽivnostnÃk roku zná své vÃtÄze. V prostorách Hotelu Imperial uspÄla mezi spoleÄnostmi karlovarská firma REALISTIC, která vyvÃjà a vyrábà průmyslové pece a technologická zaÅÃzenà pro tepelné zpracovánà materiálů. Mezi živnostnÃky porota vybrala Andreu Holzknechtovou z Nejdku, která vyrábà proutÄné kabelky doplnÄné o kožené prvky.</p> 965 </div> 966 </div> 967 </div> 968 </article> 969 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 970 <div class="feature-image"> 971 <div class="image-frame image-hover-style-1"> 972 <a href="/tri_vyrazene_sanitky_dostanou_druhou_sanci_jedna_bude_zachranovat_i_zvirata" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/fc65169075/241212-sanita.jpg.medium.jpg" alt="Tři vyřazené sanitky dostanou druhou šanci. Jedna bude zachraňovat i zvířata"></a> 973 </div> 974 </div> 975 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 976 <div class="card-flex-content w-100"> 977 <h6> 978 <a href="/tri_vyrazene_sanitky_dostanou_druhou_sanci_jedna_bude_zachranovat_i_zvirata" target="">Tři vyřazené sanitky dostanou druhou šanci. Jedna bude zachraňovat i zvířata</a> 979 </h6> 980 <div class="desktop-only"> 981 <p>TÅi sanitky, které po letech konÄà u Zdravotnické záchranné služby Karlovarského kraje, jeÅ¡tÄ do důchodu nemÃÅÃ. Kraj je bezplatnÄ pÅevede tÅem spolkům. Vozy budou novÄ pomáhat pÅi záchranÄ volnÄ Å¾ijÃcÃch zvÃÅat, na motoristických a hasiÄských akcÃch nebo pÅi vzdÄlávánà veÅejnosti.</p> 982 </div> 983 </div> 984 </div> 985 </article> 986 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 987 <div class="feature-image"> 988 <div class="image-frame image-hover-style-1"> 989 <a href="/ridic_na_parkovisti_prehledl_lampu_souboj_s_naraznikem_vyhral_stozar" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/88f8aa0d87/nehoda_google_discover_1200x900.jpg.medium.jpg" alt="Řidič na parkovišti přehlédl lampu. Souboj s nárazníkem vyhrál stožár"></a> 990 </div> 991 </div> 992 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 993 <div class="card-flex-content w-100"> 994 <h6> 995 <a href="/ridic_na_parkovisti_prehledl_lampu_souboj_s_naraznikem_vyhral_stozar" target="">Řidič na parkovišti přehlédl lampu. Souboj s nárazníkem vyhrál stožár</a> 996 </h6> 997 <div class="desktop-only"> 998 <p>NedÄlnà noc ve Dvorech naruÅ¡ila krátce pÅed půlnocà poÅádná rána. StrážnÃci u obchodnÃho domu Albert objevili nabourané auto a pouliÄnà lampu, které si podle ÅidiÄe jednoduÅ¡e nevÅ¡iml. Alkohol za nehodou nebyl.</p> 999 </div> 1000 </div> 1001 </div> 1002 </article> 1003 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 1004 <div class="feature-image"> 1005 <div class="image-frame image-hover-style-1"> 1006 <a href="/tridit_odpad_pujde_i_pri_cekani_na_autobus_ostrov_zkousi_nove_trojkose" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/0b2606d77a/tridene_kose_google_discover.jpg.medium.jpg" alt="Třídit odpad půjde i při čekání na autobus. Ostrov zkouší nové trojkoše"></a> 1007 </div> 1008 </div> 1009 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 1010 <div class="card-flex-content w-100"> 1011 <h6> 1012 <a href="/tridit_odpad_pujde_i_pri_cekani_na_autobus_ostrov_zkousi_nove_trojkose" target="">Třídit odpad půjde i při čekání na autobus. Ostrov zkouší nové trojkoše</a> 1013 </h6> 1014 <div class="desktop-only"> 1015 <p>KelÃmek, obal od svaÄiny nebo jiný drobný odpad nemusà pÅi Äekánà na autobus automaticky skonÄit ve smÄsném koÅ¡i. Ostrov zaÄal na vybraných mÃstech testovat nové trojkoÅ¡e na tÅÃdÄný odpad. Pokud se osvÄdÄÃ, majà postupnÄ pÅibývat i na dalÅ¡Ãch zastávkách.</p> 1016 </div> 1017 </div> 1018 </div> 1019 </article> 1020 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 1021 <div class="feature-image"> 1022 <div class="image-frame image-hover-style-1"> 1023 <a href="/troufnete_si_do_hororoveho_domu_kokorovsky_dvur_nabidne_strasidelny_program" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/2fff7a73a1/stazeny_soubor.jpeg.medium.jpg" alt="Troufnete si do hororového domu? Kokořovský dvůr nabídne strašidelný program"></a> 1024 </div> 1025 </div> 1026 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 1027 <div class="card-flex-content w-100"> 1028 <h6> 1029 <a href="/troufnete_si_do_hororoveho_domu_kokorovsky_dvur_nabidne_strasidelny_program" target="">Troufnete si do hororového domu? Kokořovský dvůr nabídne strašidelný program</a> 1030 </h6> 1031 <div class="desktop-only"> 1032 <p>StraÅ¡idla, ÄarodÄjnická sluj, dlabánà dýnÃ, ohnivá show a pro odvážnÄjšà také hororový dům. KokoÅovský dvůr ve ŽluticÃch se v sobotu 3. ÅÃjna promÄnà v kouzelnÄ straÅ¡idelné mÃsto. Na své si pÅijdou dÄti i dospÄlà a kostýmy jsou vÃtány.</p> 1033 </div> 1034 </div> 1035 </div> 1036 </article> 1037 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 1038 <div class="feature-image"> 1039 <div class="image-frame image-hover-style-1"> 1040 <a href="/aby_lide_nemuseli_pro_kazdy_nakup_jinam_kraj_podpori_14_venkovskych_prodejen" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/c1ef73694f/prodejna_google_discover_4x3.jpg.medium.jpg" alt="Aby lidé nemuseli pro každý nákup jinam. Kraj podpoří 14 venkovských prodejen"></a> 1041 </div> 1042 </div> 1043 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 1044 <div class="card-flex-content w-100"> 1045 <h6> 1046 <a href="/aby_lide_nemuseli_pro_kazdy_nakup_jinam_kraj_podpori_14_venkovskych_prodejen" target="">Aby lidé nemuseli pro každý nákup jinam. Kraj podpoří 14 venkovských prodejen</a> 1047 </h6> 1048 <div class="desktop-only"> 1049 <p>Pro rohlÃky, mléko nebo dalšà základnà zbožà nemusejà lidé z menÅ¡Ãch obcà vždy cestovat nÄkolik kilometrů. Aby mÃstnà obchody zůstaly v provozu i tam, kde majà ménÄ zákaznÃků, rozdÄlà Karlovarský kraj mezi 14 žadatelů témÄÅ 1,7 milionu korun.</p> 1050 </div> 1051 </div> 1052 </div> 1053 </article> 1054 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 1055 <div class="feature-image"> 1056 <div class="image-frame image-hover-style-1"> 1057 <a href="/mezi_veselovem_a_zluticemi_se_znovu_pojede_primo_cast_obchvatu_se_otevira_ridicum" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/c58782c8e9/sil
1057nice_nahled_google_discover_1200.jpg.medium.jpg" alt="Mezi Veselovem a Žluticemi se znovu pojede přímo. Část obchvatu se otevírá řidičům"></a> 1058 </div> 1059 </div> 1060 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 1061 <div class="card-flex-content w-100"> 1062 <h6> 1063 <a href="/mezi_veselovem_a_zluticemi_se_znovu_pojede_primo_cast_obchvatu_se_otevira_ridicum" target="">Mezi Veselovem a Žluticemi se znovu pojede přímo. Část obchvatu se otevírá řidičům</a> 1064 </h6> 1065 <div class="desktop-only"> 1066 <p>TémÄÅ pÄt mÄsÃců museli ÅidiÄi mezi Veselovem a Žluticemi využÃvat objÃzdnou trasu pÅes ChyÅ¡i a BoÅ¡ov. Od úterý 29. záÅà se situace mÄnÃ. Prvnà Äást budovaného obchvatu Veselova se otevÃrá v režimu pÅedÄasného užÃvánà a doprava se vracà na silnici II/205.</p> 1067 </div> 1068 </div> 1069 </div> 1070 </article> 1071 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 1072 <div class="feature-image"> 1073 <div class="image-frame image-hover-style-1"> 1074 <a href="/jazz_propoji_plzen_senegal_izrael_i_svycarsko_karlovarska_galerie_zve_na_dvojkoncert" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/26663b14c7/jazz_google_discover.jpg.medium.jpg" alt="Jazz propojí Plzeň, Senegal, Izrael i Švýcarsko. Karlovarská galerie zve na dvojkoncert"></a> 1075 </div> 1076 </div> 1077 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 1078 <div class="card-flex-content w-100"> 1079 <h6> 1080 <a href="/jazz_propoji_plzen_senegal_izrael_i_svycarsko_karlovarska_galerie_zve_na_dvojkoncert" target="">Jazz propojí Plzeň, Senegal, Izrael i Švýcarsko. Karlovarská galerie zve na dvojkoncert</a> 1081 </h6> 1082 <div class="desktop-only"> 1083 <p>MilovnÃci jazzu se mohou v nedÄli 4. ÅÃjna vydat do Galerie umÄnà Karlovy Vary. V rámci 43. roÄnÃku festivalu poÅádaného Jazzovým kruhem Milana KrajÃce zde vystoupà plzeÅská skupina Zo-o-ya s trumpetistou FrantiÅ¡kem KuÄerou a mezinárodnà trio JMO.</p> 1084 </div> 1085 </div> 1086 </div> 1087 </article> 1088 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 1089 <div class="feature-image"> 1090 <div class="image-frame image-hover-style-1"> 1091 <a href="/oprava_strechy_alzbetinych_lazni_pokracuje_hotovo_ma_byt_v_roce_2028" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/848f7ad74a/alzbetiny_lazne.jpg.medium.jpg" alt="Oprava střechy Alžbětiných lázní pokračuje, hotovo má být v roce 2028"></a> 1092 </div> 1093 </div> 1094 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 1095 <div class="card-flex-content w-100"> 1096 <h6> 1097 <a href="/oprava_strechy_alzbetinych_lazni_pokracuje_hotovo_ma_byt_v_roce_2028" target="">Oprava střechy Alžbětiných lázní pokračuje, hotovo má být v roce 2028</a> 1098 </h6> 1099 <div class="desktop-only"> 1100 <p>AlžbÄtiny láznÄ v Karlových Varech procházejà dalšà etapou obnovy. Po výmÄnÄ oken pÅiÅ¡la na Åadu stÅecha historické budovy, která je ve Å¡patném stavu a mÃsty do objektu zatéká. Práce budou pokraÄovat i v dalÅ¡Ãch sezónách, dokonÄenà je plánované na rok 2028.</p> 1101 </div> 1102 </div> 1103 </div> 1104 </article> 1105 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 1106 <div class="feature-image"> 1107 <div class="image-frame image-hover-style-1"> 1108 <a href="/vino_cimbalovka_i_rodeo_na_lahvi_na_loket_se_vraci_svatovaclavske_vinobrani" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/3e79fde835/loket_06.png.medium.jpg" alt="Víno, cimbálovka i rodeo na lahvi. Na Loket se vrací Svatováclavské vinobraní"></a> 1109 </div> 1110 </div> 1111 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 1112 <div class="card-flex-content w-100"> 1113 <h6> 1114 <a href="/vino_cimbalovka_i_rodeo_na_lahvi_na_loket_se_vraci_svatovaclavske_vinobrani" target="">Víno, cimbálovka i rodeo na lahvi. Na Loket se vrací Svatováclavské vinobraní</a> 1115 </h6> 1116 <div class="desktop-only"> 1117 <p>Prvnà ÅÃjnový vÃkend bude na hradÄ Loket patÅit vÃnu, hudbÄ a podzimnà atmosféÅe. V sobotu 3. a v nedÄli 4. ÅÃjna se uskuteÄnà už 19. roÄnÃk Svatováclavského vinobranÃ. NávÅ¡tÄvnÃkům nabÃdne vÃna od 27 vinaÅů z celé republiky, živou hudbu i doprovodný program.</p> 1118 </div> 1119 </div> 1120 </div> 1121 </article> 1122 <article data-aos="fade-up" class="blog-style2 card mb-2 aos-init aos-animate xdf6g51 d-flex flex-nowrap"> 1123 <div class="feature-image"> 1124 <div class="image-frame image-hover-style-1"> 1125 <a href="/hledaji_se_studenti_se_zajmem_o_it_a_data_v_chebu_je_ceka_24hodinova_vyzva" target=""> <img class=" ls-is-cached lazyloaded" src="https://zaktv.b-cdn.net/upload/News/9dfb2cab0f/hackathon_google_discover.jpg.medium.jpg" alt="Hledají se studenti se zájmem o IT a data. V Chebu je čeká 24hodinová výzva"></a> 1126 </div> 1127 </div> 1128 <div data-aos="fade-in" class="d546s my-auto card-body d-md-flex align-items-center aos-init aos-animate"> 1129 <div class="card-flex-content w-100"> 1130 <h6> 1131 <a href="/hledaji_se_studenti_se_zajmem_o_it_a_data_v_chebu_je_ceka_24hodinova_vyzva" target="">Hledají se studenti se zájmem o IT a data. V Chebu je čeká 24hodinová výzva</a> 1132 </h6> 1133 <div class="desktop-only"> 1134 <p>Máte doma stÅedoÅ¡koláka, vysokoÅ¡koláka nebo studenta VOÅ , kterého bavà programovánÃ, data, grafika Äi vymýšlenà nových ÅeÅ¡enÃ? Prvnà Hackathon otevÅených dat Karlovarského kraje hledá studentské týmy, které dostanou 24 hodin na vytvoÅenà vlastnÃho digitálnÃho projektu. PÅihlásit se mohou do 4. ÅÃjna nebo do naplnÄnà kapacity.</p> 1135 </div> 1136 </div> 1137 </div> 1138 </article> 1139 1140 <div class="text-center"> 1141 1142 1143<div class="ad-list"> 1144 <div class="ad-title-wrap mb-0 d-flex justify-content-end">
1145 <span class="ad-title">Reklama</span> 1146</div> 1147 <a href="https://www.serikovka.cz/" class="banner-link" data-banner-id="145" target="_blank" title="Harlej v Šeříkovce"><img src="https://zaktv.b-cdn.net/upload/Banner/f7b00a3e74/2026-10-15_Harlej_728x90px_plzencz.jpg" /></a> 1148</div> 1149 </div> 1150 </div> 1151 <div class="col-lg-4 col-md-5 desktop-only"> 1152 <div class="sticky-top sticky-sidebar"> 1153 1154 1155 1156<div class="static-ads"> 1157 1158 <div class="mb-2 ad-sidebar"> 1159 <div data-sidebar-ad-title hidden> 1160 <div class="ad-title-wrap mb-0 d-flex justify-content-end"> 1161 <span class="ad-title">Reklama</span> 1162</div> 1163 </div> 1164 <!-- ZAK-Sidebar --> 1165 <ins class="sidebar-adsense" 1166 style="display:block" 1167 data-ad-client="ca-pub-1914100961537914" 1168 data-ad-slot="2460148899" 1169 data-ad-format="auto" 1170 data-full-width-responsive="true"></ins> 1171
1171<script> 1172 (function () { 1173 const ad = document.currentScript.previousElementSibling; 1174 const title = ad.parentElement.querySelector('[data-sidebar-ad-title]'); 1175 function updateTitle() { 1176 title.hidden = ad.getAttribute('data-ad-status') !== 'filled'; 1177 } 1178 const statusObserver = new MutationObserver(updateTitle); 1179 statusObserver.observe(ad, { attributes: true, attributeFilter: ['data-ad-status'] }); 1180 updateTitle(); 1181 let initialized = false; 1182 const observer = new ResizeObserver(initialize); 1183 function initialize() { 1184 if (initialized || ad.getBoundingClientRect().width <= 0) return; 1185 initialized = true; 1186 observer.disconnect(); 1187 ad.classList.add('adsbygoogle'); 1188 (window.adsbygoogle = window.adsbygoogle || []).push({}); 1189 } 1190 observer.observe(ad); 1191 initialize(); 1192 })(); 1193 </script>
1193 1194 </div> 1195 1196</div> 1197 1198 1199<div class="static-ads"> 1200 1201 <div class="mb-2 ad-sidebar"> 1202 <div data-sidebar-ad-title hidden> 1203 <div class="ad-title-wrap mb-0 d-flex justify-content-end"> 1204 <span class="ad-title">Reklama</span> 1205</div> 1206 </div> 1207 <!-- ZAK-Sidebar --> 1208 <ins class="sidebar-adsense" 1209 style="display:block" 1210 data-ad-client="ca-pub-1914100961537914" 1211 data-ad-slot="2460148899" 1212 data-ad-format="auto" 1213 data-full-width-responsive="true"></ins> 1214
1214<script> 1215 (function () { 1216 const ad = document.currentScript.previousElementSibling; 1217 const title = ad.parentElement.querySelector('[data-sidebar-ad-title]'); 1218 function updateTitle() { 1219 title.hidden = ad.getAttribute('data-ad-status') !== 'filled'; 1220 } 1221 const statusObserver = new MutationObserver(updateTitle); 1222 statusObserver.observe(ad, { attributes: true, attributeFilter: ['data-ad-status'] }); 1223 updateTitle(); 1224 let initialized = false; 1225 const observer = new ResizeObserver(initialize); 1226 function initialize() { 1227 if (initialized || ad.getBoundingClientRect().width <= 0) return; 1228 initialized = true; 1229 observer.disconnect(); 1230 ad.classList.add('adsbygoogle'); 1231 (window.adsbygoogle = window.adsbygoogle || []).push({}); 1232 } 1233 observer.observe(ad); 1234 initialize(); 1235 })(); 1236 </script>
1236 1237 </div> 1238 1239</div> 1240 1241 </div> 1242 </div> 1243 </div> 1244 1245 <div class="row"> 1246 <div class="col-md-7 col-lg-8 pl-12"> 1247 1248 <div class="d-flex justify-content-center"> 1249 <ul class="pagination"> 1250 <li class="page-item disabled" data-duration="0.3" data-opacity="0.2"> 1251 <a class="btn has-ripple page-link" href="#">â NovÄjÅ¡Ã</a> 1252 </li> 1253 <li class="page-item" data-duration="0.3" data-opacity="0.2"> 1254 <a href="/karlovarsky-kraj?page=2" class="btn has-ripple page-link">Staršà â</a> 1255 </li> 1256 </ul> 1257 </div> 1258 1259 </div> 1260 <div class="col-lg-4 col-md-5 pt-4 px-3 desktop-only"> 1261 </div> 1262 </div> 1263 1264 </div> 1265</div> 1266 </div> 1267 1268 <footer class="footer-area pb-2"> 1269 <div class="container"> 1270 <div class="row col-lg-12"> 1271 <div class="col-lg-8 footer-links"> 1272 <div class="footer-widget footer-nav small-res-center"> 1273 <div class="row"> 1274 <div class="col-lg-4 small"> 1275 <ul class="footer-nav list-inline text-center"> 1276 <li><a href="/redakce" alt="Redakce">Redakce</a></li> 1277 <li><a href="/reklama">Reklama</a></li> 1278 <li><a href="/rss/karlovarsky-kraj">RSS</a></li> 1279 </ul> 1280 </div> 1281 <div class="col-lg-4 small"> 1282 <ul class="footer-nav list-inline text-center"> 1283 <li><a href="/eticky-kodex">Etický kodex</a></li> 1284 <li><a href="/ochrana_osobnich_udaju" alt="Ochrana osobnÃch údajů">Ochrana osobnÃch údajů</a></li> 1285 </ul> 1286 </div> 1287 <div class="col-lg-4 small"> 1288 <ul class="footer-nav list-inline text-center"> 1289 <li><a href="/zpracovani_osobnich_udaju" alt="Zpracovánà osobnÃch údajů">Zpracovánà osobnÃch údajů</a></li> 1290 <li><a href="#nastaveni-cookies" data-google-consent-settings>Nastavenà cookies</a></li> 1291 </ul> 1292 </div> 1293 </div> 1294 </div> 1295 <hr /> 1296 <div class="row"> 1297 <div class="col-lg-4 small text-center"> 1298 <a href="https://www.euronovagroup.com/" target="_blank"><i class="fa fa-copyright"></i> <b>Euronova Group</b></a> 1299 </div> 1300 </div> 1301 </div> 1302 <div class="col-lg-4 small my-auto"> 1303 <div class="footer-logo"> 1304 <img src="/images/zaktv-wlogo-w.svg" /> 1305 </div> 1306 </div> 1307 </div> 1308 1309 </div> 1310</footer> 1311 1312 <div id="da_regiotv1_sticky" class="mobile-only"></div> 1313 1314 <a id="back-to-top" class="btn btn-primary shadow30 btn-lg back-to-top footer-back" role="button" alt="ZpÄt na zaÄátek"><span><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="bi bi-caret-up-fill" fill="white" id="caret-up-fill" style="width: 16px;height: 16px;margin-bottom: 6px;"><path d="M7.247 4.86l-4.796 5.481c-.566.647-.106 1.659.753 1.659h9.592a1 1 0 00.753-1.659l-4.796-5.48a1 1 0 00-1.506 0z"></path></svg></span></a> 1315 1316
1316<script src="/js/fancybox.umd.js"></script>
1316 1317
1317<script src="/js/back-to-top.js"></script>
1317 1318
1318<script src="/js/build.min.js?=build530"></script>
1318 1319
1319<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/sweetalert2.all.min.js"></script>
1319 1320
1320<script src="https://vjs.zencdn.net/7.17.0/video.min.js"></script>
1320 1321
1321<script src="https://cdnjs.cloudflare.com/ajax/libs/videojs-youtube/2.6.1/Youtube.min.js"></script>
1321 1322
1322<script src="/js/util.js?v=XyRxxB7t5yv3ww_YUrBnZBVurxuZeSBI134GKUMJM_I"></script>
1322 1323 1324
1325<script> 1326 const activeCooldownTimers = new Map(); // surveyId â { intervalId, endTime } 1327 1328 const formatTime = (secs) => { 1329 const m = Math.floor(secs / 60); 1330 const s = secs % 60; 1331 return `${m}:${s.toString().padStart(2, '0')}`; 1332 }; 1333 1334 document.addEventListener('DOMContentLoaded', function() { 1335 // Find all survey placeholders in page content 1336 const surveyEmbeds = document.querySelectorAll('div.survey-embed[data-survey-id]'); 1337 1338 surveyEmbeds.forEach(placeholder => { 1339 const surveyId = parseInt(placeholder.dataset.surveyId); 1340 if (isNaN(surveyId)) return; 1341 1342 // Replace placeholder with loading container 1343 const container = document.createElement('div'); 1344 container.id = `survey-container-${surveyId}`; 1345 container.className = 'survey-container'; 1346 container.innerHTML = '<div class="survey-loading">NaÄÃtánà ankety...</div>'; 1347 1348 placeholder.replaceWith(container); 1349 1350 // Load and render survey 1351 loadSurvey(surveyId, container); 1352 }); 1353 }); 1354 1355 document.addEventListener('visibilitychange', async () => { 1356 if (document.visibilityState !== 'visible') return; 1357 if (activeCooldownTimers.size === 0) return; 1358 1359 for (const [surveyId, timerData] of Array.from(activeCooldownTimers.entries())) { 1360 // Zkontroluj lokálnÄ â bez server roundtrip (klÃÄové pro hibernaci) 1361 if (Date.now() >= timerData.endTime) { 1362 clearInterval(timerData.intervalId); 1363 activeCooldownTimers.delete(surveyId); 1364 1365 const container = document.getElementById(`survey-container-${surveyId}`); 1366 if (container) { 1367 const form = container.querySelector(`#survey-form-${surveyId}`); 1368 const submitBtn = form?.querySelector('button[type="submit"]'); 1369 if (submitBtn) { 1370 submitBtn.textContent = 'Hlasovat v anketÄ'; 1371 submitBtn.disabled = false; 1372 submitBtn.style.opacity = '1'; 1373 submitBtn.style.cursor = 'pointer'; 1374 } 1375 if (form) { 1376 form.querySelectorAll('input').forEach(el => el.disabled = false); 1377 } 1378 container.querySelectorAll('.survey-gdpr-toggle').forEach(btn => btn.disabled = false); 1379 } 1380 continue; 1381 } 1382 1383 // Timer stále bÄžà â re-sync se serverem pro pÅesnost 1384 // NejdÅÃv okamžitÄ oprav zmrazený text (eliminuje viditelný skok) 1385 const container = document.getElementById(`survey-container-${surveyId}`); 1386 if (container) { 1387 const localRemaining = Math.max(0, Math.floor((timerData.endTime - Date.now()) / 1000)); 1388 const form = container.querySelector(`#survey-form-${surveyId}`); 1389 const submitBtn = form?.querySelector('button[type="submit"]'); 1390 if (submitBtn && localRemaining > 0) { 1391 submitBtn.textContent = `â±ï¸ Hlasovat můžete znovu za ${formatTime(localRemaining)}`; 1392 } 1393 } 1394 1395 try { 1396 const response = await fetch(`/api/survey/get/${surveyId}`, { cache: 'no-store' }); 1397 if (!response.ok) continue; 1398 if (!activeCooldownTimers.has(surveyId)) continue; // expiroval bÄhem fetch 1399 1400 const survey = await response.json(); 1401 const container = document.getElementById(`survey-container-${surveyId}`); 1402 if (!container) continue; 1403 1404 if (survey.secondsRemainingBeforeCooldownExpires > 0) { 1405 startCooldownTimer(container, surveyId, survey.secondsRemainingBeforeCooldownExpires); 1406 } else { 1407 clearInterval(activeCooldownTimers.get(surveyId).intervalId); 1408 activeCooldownTimers.delete(surveyId); 1409 1410 const form = container.querySelector(`#survey-form-${surveyId}`); 1411 const submitBtn = form?.querySelector('button[type="submit"]'); 1412 if (submitBtn) { 1413 submitBtn.textContent = 'Hlasovat v anketÄ'; 1414 submitBtn.disabled = false; 1415 submitBtn.style.opacity = '1'; 1416 submitBtn.style.cursor = 'pointer'; 1417 } 1418 if (form) { 1419 form.querySelectorAll('input').forEach(el => el.disabled = false); 1420 } 1421 container.querySelectorAll('.survey-gdpr-toggle').forEach(btn => btn.disabled = false); 1422 } 1423 } catch (e) { 1424 console.error(`Survey re-sync error for survey ${surveyId}:`, e); 1425 } 1426 } 1427 }); 1428 1429 async function loadSurvey(surveyId, container) { 1430 try { 1431 const response = await fetch(`/api/survey/get/${surveyId}`, { cache: 'no-store' }); 1432 1433 if (!response.ok) { 1434 const error = await response.json(); 1435 container.innerHTML = `<div class="survey-error">${escapeHtml(error.error || 'NepodaÅilo se naÄÃst anketu')}</div>`; 1436 return; 1437 } 1438 1439 const survey = await response.json(); 1440 renderSurveyForm(survey, container); 1441 } catch (error) { 1442 console.error('Survey load error:', error); 1443 container.innerHTML = '<div class="survey-error">NepodaÅilo se naÄÃst anketu. Zkuste prosÃm pozdÄji.</div>'; 1444 } 1445 } 1446
1447 function renderSurveyForm(survey, container) { 1448 let html = ` 1449 <div class="survey mt-2 mb-2 pt-1 pb-1 radius"> 1450 <div class="px-3"> 1451 `; 1452 1453 survey.questions.forEach(question => { 1454 html += ` 1455 <div class="small gdpr"> 1456 Hlasovánà v anketÄ je anonymnà â nezjišťujeme vaÅ¡e jméno, e-mail ani polohu. PoužÃváme pouze jednoduchý technický identifikátor k zajiÅ¡tÄnà férových výsledků. <a href="/ochrana_osobnich_udaju">VÃce informacÃ</a>. 1457 <hr /> 1458 </div> 1459 <div class="survey-question-header mb-2"> 1460 <button type="button" class="survey-gdpr-toggle" aria-label="GDPR informace"><i class="fa-regular fa-circle-info"></i></button> 1461 <h4 class="mb-2">${escapeHtml(question.questionText)}</h4> 1462 </div> 1463 1464 <div class="survey-options"> 1465 `; 1466 1467 question.answers.forEach(answer => { 1468 html += ` 1469 <div class="survey-option mb-2"> 1470 <div class="d-flex justify-content-between align-items-center mb-1"> 1471 <label class="mb-0"> 1472 <input type="radio" name="question-${question.questionId}" value="${answer.answerId}" class="me-2" required> 1473 <span>${escapeHtml(answer.answerText)}</span> 1474 </label> 1475 <span class="badge bg-secondary" data-answer-percent="${answer.answerId}">${answer.votePercentage}%</span> 1476 </div> 1477 <div class="progress mb-1" style="height: 7px;"> 1478 <div class="progress-bar bg-plzen" role="progressbar" data-answer-bar="${answer.answerId}" style="width: ${answer.votePercentage}%;"></div> 1479 </div> 1480 </div> 1481 `; 1482 }); 1483 1484 html += ` 1485 </div> 1486 `; 1487 }); 1488 1489 html += ` 1490 <div class="text-center mt-3"> 1491 <button class="btn btn-secondary btn-sm" type="submit" data-survey-id="${survey.surveyId}">Hlasovat v anketÄ</button> 1492 <div id="survey-message-${survey.surveyId}" class="d-none"> 1493 <div class="alert alert-success mb-0" role="alert"> 1494 <strong>DÄkujeme!</strong> Váš hlas byl zaregistrován. 1495 </div> 1496 </div> 1497 </div> 1498 </div> 1499 </div> 1500 `; 1501 1502 container.innerHTML = `<form id="survey-form-${survey.surveyId}">${html}</form>`; 1503 1504 // Attach GDPR toggle handlers 1505 container.querySelectorAll('.survey-gdpr-toggle').forEach(btn => { 1506 btn.addEventListener('click', () => { 1507 const notice = btn.closest('.survey-question-header').previousElementSibling; 1508 if (notice) notice.classList.toggle('gdpr-open'); 1509 }); 1510 }); 1511 1512 // Attach form submission handler 1513 const form = container.querySelector(`#survey-form-${survey.surveyId}`); 1514 form.addEventListener('submit', (e) => handleSurveySubmit(e, survey)); 1515 1516 // Typ 0) - anketa po termÃnu 1517 if (survey.isExpired) { 1518 disableSurveyForm(container, survey.surveyId); 1519 const submitBtn = form.querySelector('button[type="submit"]'); 1520 if (submitBtn) { 1521 submitBtn.style.display = 'none'; 1522 } 1523 const messageDiv = container.querySelector(`#survey-message-${survey.surveyId}`); 1524 if (messageDiv) { 1525 messageDiv.classList.remove('d-none'); 1526 messageDiv.innerHTML = ` 1527 <div class="alert alert-secondary mb-0" role="alert"> 1528 Anketa již skonÄila a nenà možné znovu hlasovat. 1529 </div> 1530 `; 1531 } 1532 return; 1533 } 1534 1535 // Typ a) - bez opakovánà hlasovánà - uživatel už hlasoval 1536 if (!survey.allowMultipleSubmissions && survey.userHasAlreadyVoted) { 1537 disableSurveyForm(container, survey.surveyId); 1538 // Schovat tlaÄÃtko a zobrazit success message 1539 const submitBtn = form.querySelector('button[type="submit"]'); 1540 if (submitBtn) { 1541 submitBtn.style.display = 'none'; 1542 } 1543 const messageDiv = container.querySelector(`#survey-message-${survey.surveyId}`); 1544 if (messageDiv) { 1545 messageDiv.classList.remove('d-none'); 1546 messageDiv.innerHTML = ` 1547 <div class="alert alert-info mb-0" role="alert"> 1548 <strong>DÄkujeme!</strong> Váš hlas byl zaznamenán. 1549 </div> 1550 `; 1551 } 1552 } 1553 // Typ b) - s opakovánÃm hlasovánà - cooldown aktivnà 1554 else if (survey.allowMultipleSubmissions && survey.secondsRemainingBeforeCooldownExpires > 0) { 1555 disableSurveyForm(container, survey.surveyId); 1556 startCooldownTimer(container, survey.surveyId, survey.secondsRemainingBeforeCooldownExpires); 1557 } 1558 // VÅ¡echny ostatnà pÅÃpady - ovÄÅ eligibilitu 1559 else { 1560 checkVotingEligibility(survey, container); 1561 } 1562 } 1563 1564 async function checkVotingEligibility(survey, container) { 1565 try { 1566 const response = await fetch('/api/survey/can-vote', { 1567 method: 'POST', 1568 headers: { 1569 'Content-Type': 'application/json' 1570 }, 1571 body: JSON.stringify({ surveyId: survey.surveyId }) 1572 }); 1573 1574 if (!response.ok) return; 1575 1576 const data = await response.json(); 1577 if (!data.canVote) { 1578 const messageDiv = container.querySelector(`#survey-message-${survey.surveyId}`); 1579 1580 // Pokud tam nenà už success alert, zobraz error message 1581 if (messageDiv && !messageDiv.innerHTML.includes('DÄkujeme')) { 1582 disableSurveyForm(container, survey.surveyId, data.reason); 1583 } 1584 1585 // Show cooldown countdown if applicable 1586 if (data.secondsRemaining > 0) { 1587 startCooldownTimer(container, survey.surveyId, data.secondsRemaining); 1588 } 1589 } 1590 } catch (error) { 1591 console.error('Eligibility check error:', error); 1592 } 1593 } 1594 1595 async function handleSurveySubmit(event, survey) { 1596 event.preventDefault(); 1597 1598 const form = event.target; 1599 const container = form.closest('.survey-container') ?? form.parentElement; 1600 const messageDiv = container.querySelector(`#survey-message-${survey.surveyId}`); 1601 1602 // Gather answers 1603 const answers = []; 1604 survey.questions.forEach(question => { 1605 const selected = form.querySelector(`input[name="question-${question.questionId}"]:checked`); 1606 if (selected) { 1607 answers.push({ 1608 questionId: question.questionId, 1609 answerId: parseInt(selected.value) 1610 }); 1611 } 1612 }); 1613 1614 if (answers.length !== survey.questions.length) { 1615 if (messageDiv) { 1616 messageDiv.classList.remove('d-none'); 1617 messageDiv.innerHTML = ` 1618 <div class="alert alert-danger mb-0" role="alert"> 1619 ProsÃm odpovÄzte na vÅ¡echny otázky 1620 </div> 1621 `; 1622 } 1623 return; 1624 } 1625 1626 // Disable form during submission 1627 form.querySelectorAll('input, button').forEach(el => el.disabled = true); 1628 1629 try { 1630 const response = await fetch('/api/survey/submit', { 1631 method: 'POST', 1632 headers: { 1633 'Content-Type': 'application/json' 1634 }, 1635 body: JSON.stringify({ 1636 surveyId: survey.surveyId, 1637 answers: answers 1638 }) 1639 }); 1640 1641 const result = await response.json(); 1642 1643 if (!response.ok) { 1644 if (messageDiv) { 1645 messageDiv.classList.remove('d-none'); 1646 messageDiv.innerHTML = ` 1647 <div class="alert alert-danger mb-0" role="alert"> 1648 ${escapeHtml(result.error || 'Hlasovánà se nezdaÅilo')} 1649 </div> 1650 `; 1651 } 1652 form.querySelectorAll('input, button').forEach(el => el.disabled = false); 1653 1654 if (result.secondsRemaining > 0) { 1655 startCooldownTimer(container, survey.surveyId, result.secondsRemaining); 1656 } 1657 return; 1658 } 1659 1660 // Success: Update results and disable form 1661 if (messageDiv) { 1662 messageDiv.classList.remove('d-none'); 1663 messageDiv.innerHTML = ` 1664 <div class="alert alert-success mb-0" role="alert"> 1665 <strong>DÄkujeme!</strong> Váš hlas byl zaregistrován. 1666 </div> 1667 `; 1668 } 1669 disableSurveyForm(container, survey.surveyId); 1670 updateSurveyResults(container, result.results); 1671 container.querySelectorAll('.survey-gdpr-toggle').forEach(btn => btn.disabled = false); 1672 1673 // Typ a) - bez opakovánà - schovat tlaÄÃtko po hlasovánà 1674 if (!survey.allowMultipleSubmissions) { 1675 const submitBtn = form.querySelector('button[type="submit"]'); 1676 if (submitBtn) { 1677 submitBtn.style.display = 'none'; 1678 } 1679 } else if (result.secondsRemainingBeforeCooldownExpires > 0) { 1680 // Typ b) - s opakovánÃm - spusÅ¥ countdown pÅÃmo z dat odpovÄdi 1681 startCooldownTimer(container, survey.surveyId, result.secondsRemainingBeforeCooldownExpires); 1682 } 1683 } catch (error) { 1684 console.error('Submission error:', error); 1685 if (messageDiv) { 1686 messageDiv.classList.remove('d-none'); 1687 messageDiv.innerHTML = ` 1688 <div class="alert alert-danger mb-0" role="alert"> 1689 NepodaÅilo se odeslat váš hlas. Zkuste prosÃm znovu. 1690 </div> 1691 `; 1692 } 1693 form.querySelectorAll('input, button').forEach(el => el.disabled = false); 1694 } 1695 } 1696 1697 function disableSurveyForm(container, surveyId, message) { 1698 const form = container.querySelector(`#survey-form-${surveyId}`); 1699 if (form) { 1700 form.querySelectorAll('input').forEach(el => el.disabled = true); 1701 const submitBtn = form.querySelector('button[type="submit"]'); 1702 if (submitBtn) { 1703 submitBtn.disabled = true; 1704 // Pokud nenà zpráva, je to po úspÄÅ¡ném hlasovánà - nechej tlaÄÃtko viditelné s textem "Hlasovat" 1705 if (!message) { 1706 submitBtn.textContent = 'HlasovánÃ'; 1707 submitBtn.style.opacity = '0.6'; 1708 submitBtn.style.cursor = 'not-allowed'; 1709 } 1710 } 1711 } 1712 1713 const messageDiv = container.querySelector(`#survey-message-${surveyId}`); 1714 if (message && messageDiv) { 1715 messageDiv.classList.remove('d-none'); 1716 messageDiv.innerHTML = ` 1717 <div class="alert alert-info mb-0" role="alert"> 1718 ${escapeHtml(message)} 1719 </div> 1720 `; 1721 } 1722 } 1723 1724 function updateSurveyResults(container, results) {
1725 results.forEach(result => { 1726 const percentBadge = container.querySelector(`[data-answer-percent="${result.answerId}"]`); 1727 const progressBar = container.querySelector(`[data-answer-bar="${result.answerId}"]`); 1728 1729 if (percentBadge) percentBadge.textContent = `${Math.round(result.votePercentage)}%`; 1730 if (progressBar) progressBar.style.width = `${Math.round(result.votePercentage)}%`; 1731 }); 1732 } 1733 1734 function startCooldownTimer(container, surveyId, secondsRemaining) { 1735 // VyÄisti starý timer pro tuto anketu, pokud existuje 1736 if (activeCooldownTimers.has(surveyId)) { 1737 clearInterval(activeCooldownTimers.get(surveyId).intervalId); 1738 } 1739 1740 const endTime = Date.now() + (secondsRemaining * 1000); 1741 const messageDiv = container.querySelector(`#survey-message-${surveyId}`); 1742 const form = container.querySelector(`#survey-form-${surveyId}`); 1743 const submitBtn = form ? form.querySelector('button[type="submit"]') : null; 1744 1745 // Skryj messageDiv bÄhem countdownu - countdown jde do tlaÄÃtka 1746 if (messageDiv) { 1747 messageDiv.classList.add('d-none'); 1748 } 1749 1750 // Zobraz Äas okamžitÄ (bez Äekánà na prvnà tick) 1751 if (submitBtn) { 1752 submitBtn.textContent = `â±ï¸ Hlasovat můžete znovu za ${formatTime(secondsRemaining)}`; 1753 submitBtn.disabled = true; 1754 submitBtn.style.opacity = '0.7'; 1755 submitBtn.style.cursor = 'not-allowed'; 1756 } 1757 1758 const intervalId = setInterval(() => { 1759 const remaining = Math.max(0, Math.floor((endTime - Date.now()) / 1000)); 1760 1761 if (submitBtn) { 1762 submitBtn.textContent = `â±ï¸ Hlasovat můžete znovu za ${formatTime(remaining)}`; 1763 submitBtn.disabled = true; 1764 submitBtn.style.opacity = '0.7'; 1765 submitBtn.style.cursor = 'not-allowed'; 1766 } 1767 1768 if (remaining <= 0) { 1769 clearInterval(intervalId); 1770 activeCooldownTimers.delete(surveyId); 1771 1772 if (submitBtn) { 1773 submitBtn.textContent = 'Hlasovat v anketÄ'; 1774 submitBtn.disabled = false; 1775 submitBtn.style.opacity = '1'; 1776 submitBtn.style.cursor = 'pointer'; 1777 } 1778 if (form) { 1779 form.querySelectorAll('input').forEach(el => el.disabled = false); 1780 } 1781 container.querySelectorAll('.survey-gdpr-toggle').forEach(btn => btn.disabled = false); 1782 } 1783 }, 1000); 1784 1785 activeCooldownTimers.set(surveyId, { intervalId, endTime }); 1786 } 1787 1788 function escapeHtml(text) { 1789 if (!text) return ''; 1790 const div = document.createElement('div'); 1791 div.textContent = text; 1792 return div.innerHTML; 1793 } 1794</script>
1794 1795 1796 <noscript><style>div.quiz-embed[data-quiz-id]::after { content: ' Pro vyplnÄnà kvÃzu zapnÄte JavaScript.'; }</style></noscript>
1797<script> 1798(() => { 1799 const element = (tag, className, text) => { 1800 const node = document.createElement(tag); 1801 node.className = className || ''; 1802 if (text !== undefined) node.textContent = text; 1803 return node; 1804 }; 1805 // All instances share token loading to avoid competing first-request antiforgery cookies. 1806 let tokenRequest; 1807 async function json(url, options) { 1808 const response = await fetch(url, { credentials: 'same-origin', cache: 'no-store', ...options }); 1809 const data = await response.json().catch(() => ({})); 1810 if (!response.ok) throw new Error(data.error || (response.status === 400 1811 ? 'Odeslánà se nezdaÅilo. Zkontrolujte odpovÄdi a povolenà cookies.' 1812 : 'KvÃz se nepodaÅilo naÄÃst nebo odeslat. Zkuste to prosÃm pozdÄji.')); 1813 return data; 1814 } 1815 const token = () => tokenRequest || (tokenRequest = json('/api/quiz/token').catch(error => { 1816 tokenRequest = null; 1817 throw error; 1818 })); 1819 function preservePosition(container, change) { 1820 const x = window.scrollX, y = window.scrollY; 1821 change(); 1822 window.scrollTo({ left: x, top: y, behavior: 'instant' }); 1823 } 1824 function start() { 1825 document.querySelectorAll('div.quiz-embed[data-quiz-id]').forEach((placeholder, index) => { 1826 const id = Number(placeholder.dataset.quizId); 1827 const container = element('div', 'quiz survey mt-2 mb-2 pt-1 pb-1 radius'); 1828 container.id = `quiz-instance-${index}`; 1829 const body = element('div', 'quiz-body'); 1830 container.append(body); 1831 placeholder.replaceWith(container); 1832 async function load() { 1833 body.replaceChildren(element('p', '', 'NaÄÃtánà kvÃzuâ¦')); 1834 try { 1835 if (!Number.isSafeInteger(id) || id <= 0) throw new Error('KvÃz nenà dostupný.'); 1836 const quiz = await json(`/api/quiz/get/${id}`); 1837 if (!quiz.questions.length || quiz.questions.length > 100 || quiz.questions.some(q => !q.answers.length)) 1838 throw new Error('Tento kvÃz nynà nelze vyplnit.'); 1839 preservePosition(container, () => render(quiz)); 1840 } catch (error) { 1841 preservePosition(container, () => { 1842 const message = element('p', 'alert alert-info', error.message); 1843 message.setAttribute('role', 'alert'); 1844 const retry = element('button', 'btn btn-secondary btn-sm', 'NaÄÃst znovu'); 1845 retry.type = 'button'; 1846 retry.addEventListener('click', load); 1847 body.replaceChildren(message, retry); 1848 }); 1849 } 1850 } 1851 function render(quiz) { 1852 const header = element('div', 'quiz-header'); 1853 const counter = element('span', 'quiz-counter'); 1854 const info = element('button', 'survey-gdpr-toggle quiz-info'); 1855 info.type = 'button'; 1856 info.setAttribute('aria-label', 'Informace o zpracovánà osobnÃch údajů'); 1857 info.setAttribute('aria-expanded', 'false'); 1858 info.setAttribute('aria-controls', `${container.id}-privacy`); 1859 const icon = element('i', 'fa-regular fa-circle-info'); 1860 icon.setAttribute('aria-hidden', 'true'); 1861 info.append(icon); 1862 const meta = element('div', 'quiz-meta'); 1863 meta.append(counter, info); 1864 header.append(element('h4', 'quiz-title mb-2', quiz.title), meta); 1865 const privacy = element('div', 'small gdpr quiz-privacy'); 1866 privacy.id = `${container.id}-privacy`; 1867 privacy.setAttribute('inert', ''); 1868 privacy.append(document.createTextNode('Pro vyplnÄnà kvÃzu nezadáváte jméno ani e-mail. Ukládáme vaÅ¡e odpovÄdi, Äas odevzdánÃ, stránku a technický identifikátor v cookie pro vyhodnocenà a statistiku. ')); 1869 const privacyLink = element('a', '', 'VÃce informacà o ochranÄ osobnÃch údajů.'); 1870 privacyLink.href = '/ochrana_osobnich_udaju';
1871 privacy.append(privacyLink, element('hr')); 1872 info.addEventListener('click', () => preservePosition(container, () => { 1873 const open = privacy.classList.toggle('gdpr-open'); 1874 privacy.toggleAttribute('inert', !open); 1875 info.setAttribute('aria-expanded', String(open)); 1876 })); 1877 body.replaceChildren(privacy, header); 1878 if (quiz.description) body.append(element('p', 'quiz-description', quiz.description)); 1879 const form = element('form'); 1880 form.noValidate = true; 1881 const fields = new Map(); 1882 quiz.questions.forEach((question, questionIndex) => { 1883 const field = element('fieldset', 'quiz-question'); 1884 field.hidden = questionIndex !== 0; 1885 const legend = element('legend', 'quiz-legend', question.questionText); 1886 legend.tabIndex = -1; 1887 field.append(legend); 1888 question.answers.forEach(answer => { 1889 const label = element('label', 'quiz-option'); 1890 const input = element('input', 'me-2'); 1891 input.type = 'radio'; 1892 input.name = `${container.id}-question-${question.questionId}`; 1893 input.value = answer.answerId; 1894 input.required = true; 1895 label.append(input, element('span', '', answer.answerText)); 1896 field.append(label); 1897 }); 1898 fields.set(question.questionId, { field }); 1899 form.append(field); 1900 }); 1901 const message = element('div', 'quiz-message'); 1902 message.setAttribute('aria-live', 'polite'); 1903 message.setAttribute('aria-atomic', 'true'); 1904 const controls = element('div', 'quiz-controls'); 1905 const submit = element('button', 'btn btn-secondary btn-sm', 'HodnocenÃ'); 1906 submit.type = 'submit'; 1907 const retry = element('button', 'btn btn-secondary btn-sm', 'Zkusit znovu'); 1908 retry.type = 'button'; 1909 retry.hidden = true; 1910 retry.addEventListener('click', () => preservePosition(container, () => { 1911 render(quiz); 1912 body.querySelector('legend').focus({ preventScroll: true }); 1913 })); 1914 controls.append(submit, retry); 1915 form.append(controls, message); 1916 body.append(form); 1917 let current = 0; 1918 let busy = false, complete = false; 1919 function updateSubmitState() { 1920 submit.disabled = busy || complete || !fields.get(quiz.questions[current].questionId).field.querySelector('input:checked'); 1921 } 1922 form.addEventListener('change', updateSubmitState); 1923 function showQuestion(focus) { 1924 fields.forEach(({ field }, questionId) => field.hidden = questionId !== quiz.questions[current].questionId); 1925 counter.textContent = `${current + 1}/${quiz.questions.length}`; 1926 counter.setAttribute('aria-label', `Otázka ${current + 1} z ${quiz.questions.length}`); 1927 submit.textContent = current === quiz.questions.length - 1 ? 'HodnocenÃ' : 'Dalšà otázka'; 1928 message.textContent = ''; 1929 updateSubmitState(); 1930 if (focus) { 1931 const nextField = fields.get(quiz.questions[current].questionId).field; 1932 nextField.classList.add('quiz-enter'); 1933 nextField.querySelector('legend').focus({ preventScroll: true }); 1934 } 1935 } 1936 showQuestion(false); 1937 form.addEventListener('submit', async event => { 1938 event.preventDefault(); 1939 if (busy || complete) return; 1940 const activeField = fields.get(quiz.questions[current].questionId).field; 1941 if (!activeField.querySelector('input:checked')) { 1942 activeField.setAttribute('aria-invalid', 'true'); 1943 message.textContent = 'Vyberte prosÃm odpovÄÄ.'; 1944 return; 1945 } 1946 activeField.removeAttribute('aria-invalid'); 1947 if (current < quiz.questions.length - 1) { 1948 preservePosition(container, () => { current++; showQuestion(true); }); 1949 return; 1950 } 1951 const answers = []; 1952 fields.forEach(({ field }, questionId) => { 1953 const checked = field.querySelector('input:checked'); 1954 field.setAttribute('aria-invalid', checked ? 'false' : 'true'); 1955 if (checked) answers.push({ questionId, answerId: Number(checked.value) }); 1956 }); 1957 if (answers.length !== quiz.questions.length) { 1958 message.textContent = 'OdpovÄzte prosÃm na vÅ¡echny otázky.'; 1959 return; 1960 } 1961 busy = true; 1962 submit.disabled = true; 1963 form.setAttribute('aria-busy', 'true'); 1964 form.querySelectorAll('input').forEach(input => input.disabled = true); 1965 message.textContent = 'VyhodnocovánÃâ¦'; 1966 try { 1967 const csrf = await token(); 1968 const result = await json('/api/quiz/submit', { 1969 method: 'POST', 1970 headers: { 'Content-Type': 'application/json', [csrf.headerName]: csrf.token }, 1971 body: JSON.stringify({ quizId: id, answers }) 1972 }); 1973 preservePosition(container, () => { 1974 const summary = element('div', 'quiz-summary quiz-enter'); 1975 const score = element('p', 'quiz-score', `Výsledek: ${result.correctCount} z ${result.questionCount}
1975 (${result.scorePercentage.toLocaleString('cs-CZ')} %)`); 1976 score.tabIndex = -1; 1977 summary.append(score); 1978 const details = element('details', 'quiz-results'); 1979 details.append(element('summary', '', 'Zobrazit odpovÄdi')); 1980 result.questions.forEach(answer => { 1981 const question = quiz.questions.find(q => q.questionId === answer.questionId); 1982 const row = element('div', `quiz-result ${answer.isCorrect ? 'quiz-correct' : 'quiz-incorrect'}`); 1983 row.append( 1984 element('strong', '', question.questionText), 1985 element('div', 'quiz-result-status', answer.isCorrect ? 'VaÅ¡e odpovÄÄ: správná' : 'VaÅ¡e odpovÄÄ: nesprávná') 1986 ); 1987 if (answer.answerStatistics?.length) { 1988 const comparison = element('div', 'quiz-comparison'); 1989 comparison.append(element('div', 'quiz-comparison-title', 'Jak se odpovÃdalo')); 1990 answer.answerStatistics.forEach(stat => { 1991 const option = question.answers.find(a => a.answerId === stat.answerId); 1992 if (!option) return; 1993 const line = element('div', 'quiz-stat'); 1994 const caption = element('span', 'quiz-stat-label'); 1995 const answerText = element('span', '', option.answerText); 1996 const isSelected = stat.answerId === answer.selectedAnswerId; 1997 const isCorrect = answer.correctAnswerIds.includes(stat.answerId); 1998 if (isSelected) line.classList.add('quiz-stat-user-choice'); 1999 const annotation = isSelected 2000 ? 'vaÅ¡e volba' 2001 : (isCorrect ? 'správná odpovÄÄ' : ''); 2002 const statusIcon = element('span', 'quiz-result-icon', isCorrect ? 'â' : 'â'); 2003 statusIcon.setAttribute('role', 'img'); 2004 statusIcon.setAttribute('aria-label', isCorrect ? 'SprávnÄ' : 'Å patnÄ'); 2005 statusIcon.title = isCorrect ? 'SprávnÄ' : 'Å patnÄ'; 2006 caption.append(statusIcon); 2007 if (annotation) answerText.append(element('span', 'quiz-stat-selected', ` (${annotation})`)); 2008 caption.append(answerText); 2009 const track = element('span', 'quiz-stat-track'); 2010 track.setAttribute('aria-hidden', 'true'); 2011 const bar = element('span', 'quiz-stat-bar'); 2012 bar.style.width = `${Math.max(0, Math.min(100, stat.percentage))}%`; 2013 track.append(bar); 2014 line.append(caption, track, element('span', 'quiz-stat-value', `${stat.percentage.toLocaleString('cs-CZ')} %`)); 2015 comparison.append(line); 2016 }); 2017 row.append(comparison); 2018 } 2019 details.append(row); 2020 });
2021 summary.append(details); 2022 counter.textContent = `${quiz.questions.length}/${quiz.questions.length}`; 2023 counter.setAttribute('aria-label', 'KvÃz dokonÄen'); 2024 body.querySelector('.quiz-description')?.remove(); 2025 form.replaceChildren(summary, controls); 2026 complete = true; 2027 submit.hidden = true; 2028 retry.hidden = false; 2029 score.focus({ preventScroll: true }); 2030 }); 2031 } catch (error) { 2032 tokenRequest = null; 2033 message.textContent = error.message; 2034 form.querySelectorAll('input').forEach(input => input.disabled = false); 2035 submit.disabled = false; 2036 } finally { 2037 busy = false; 2038 updateSubmitState(); 2039 form.removeAttribute('aria-busy'); 2040 } 2041 }); 2042 } 2043 load(); 2044 }); 2045 } 2046 if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', start); 2047 else start(); 2048})(); 2049</script>
2049 2050 2051 2052 <div class="modal" id="political-advertising-modal" tabindex="-1" aria-labelledby="political-advertising-title"> 2053 <div class="modal-dialog modal-lg modal-dialog-scrollable"><div class="modal-content"> 2054 <div class="modal-header"><h2 class="modal-title fs-5" id="political-advertising-title">Politická reklama</h2><button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="ZavÅÃt"></button></div> 2055 <div class="modal-body" aria-live="polite"></div> 2056 </div></div> 2057</div> 2058
2058<script src="/js/political-advertising.js?v=5C3fvhKmEPrAeimJc0dsTAGn4Dp-R5r-spjYBqIQfAQ"></script>
2058 2059 2060 2061</body> 2062</html>
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.