{"id":2502,"date":"2025-04-14T15:26:22","date_gmt":"2025-04-14T12:26:22","guid":{"rendered":"https:\/\/wpdemo.ee\/demo2618\/?page_id=2502"},"modified":"2026-07-13T23:25:56","modified_gmt":"2026-07-13T20:25:56","slug":"programm","status":"publish","type":"page","link":"https:\/\/virufolk.ee\/en\/programm\/","title":{"rendered":"Programme"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"2502\" class=\"elementor elementor-2502\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ecdc542 e-flex e-con-boxed e-con e-parent\" data-id=\"ecdc542\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;shape_divider_bottom&quot;:&quot;wave-brush&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-shape elementor-shape-bottom\" aria-hidden=\"true\" data-negative=\"false\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 283.5 27.8\" preserveAspectRatio=\"none\">\n\t<path class=\"elementor-shape-fill\" d=\"M283.5,9.7c0,0-7.3,4.3-14,4.6c-6.8,0.3-12.6,0-20.9-1.5c-11.3-2-33.1-10.1-44.7-5.7\ts-12.1,4.6-18,7.4c-6.6,3.2-20,9.6-36.6,9.3C131.6,23.5,99.5,7.2,86.3,8c-1.4,0.1-6.6,0.8-10.5,2c-3.8,1.2-9.4,3.8-17,4.7\tc-3.2,0.4-8.3,1.1-14.2,0.9c-1.5-0.1-6.3-0.4-12-1.6c-5.7-1.2-11-3.1-15.8-3.7C6.5,9.2,0,10.8,0,10.8V0h283.5V9.7z M260.8,11.3\tc-0.7-1-2-0.4-4.3-0.4c-2.3,0-6.1-1.2-5.8-1.1c0.3,0.1,3.1,1.5,6,1.9C259.7,12.2,261.4,12.3,260.8,11.3z M242.4,8.6\tc0,0-2.4-0.2-5.6-0.9c-3.2-0.8-10.3-2.8-15.1-3.5c-8.2-1.1-15.8,0-15.1,0.1c0.8,0.1,9.6-0.6,17.6,1.1c3.3,0.7,9.3,2.2,12.4,2.7\tC239.9,8.7,242.4,8.6,242.4,8.6z M185.2,8.5c1.7-0.7-13.3,4.7-18.5,6.1c-2.1,0.6-6.2,1.6-10,2c-3.9,0.4-8.9,0.4-8.8,0.5\tc0,0.2,5.8,0.8,11.2,0c5.4-0.8,5.2-1.1,7.6-1.6C170.5,14.7,183.5,9.2,185.2,8.5z M199.1,6.9c0.2,0-0.8-0.4-4.8,1.1\tc-4,1.5-6.7,3.5-6.9,3.7c-0.2,0.1,3.5-1.8,6.6-3C197,7.5,199,6.9,199.1,6.9z M283,6c-0.1,0.1-1.9,1.1-4.8,2.5s-6.9,2.8-6.7,2.7\tc0.2,0,3.5-0.6,7.4-2.5C282.8,6.8,283.1,5.9,283,6z M31.3,11.6c0.1-0.2-1.9-0.2-4.5-1.2s-5.4-1.6-7.8-2C15,7.6,7.3,8.5,7.7,8.6\tC8,8.7,15.9,8.3,20.2,9.3c2.2,0.5,2.4,0.5,5.7,1.6S31.2,11.9,31.3,11.6z M73,9.2c0.4-0.1,3.5-1.6,8.4-2.6c4.9-1.1,8.9-0.5,8.9-0.8\tc0-0.3-1-0.9-6.2-0.3S72.6,9.3,73,9.2z M71.6,6.7C71.8,6.8,75,5.4,77.3,5c2.3-0.3,1.9-0.5,1.9-0.6c0-0.1-1.1-0.2-2.7,0.2\tC74.8,5.1,71.4,6.6,71.6,6.7z M93.6,4.4c0.1,0.2,3.5,0.8,5.6,1.8c2.1,1,1.8,0.6,1.9,0.5c0.1-0.1-0.8-0.8-2.4-1.3\tC97.1,4.8,93.5,4.2,93.6,4.4z M65.4,11.1c-0.1,0.3,0.3,0.5,1.9-0.2s2.6-1.3,2.2-1.2s-0.9,0.4-2.5,0.8C65.3,10.9,65.5,10.8,65.4,11.1\tz M34.5,12.4c-0.2,0,2.1,0.8,3.3,0.9c1.2,0.1,2,0.1,2-0.2c0-0.3-0.1-0.5-1.6-0.4C36.6,12.8,34.7,12.4,34.5,12.4z M152.2,21.1\tc-0.1,0.1-2.4-0.3-7.5-0.3c-5,0-13.6-2.4-17.2-3.5c-3.6-1.1,10,3.9,16.5,4.1C150.5,21.6,152.3,21,152.2,21.1z\"\/>\n\t<path class=\"elementor-shape-fill\" d=\"M269.6,18c-0.1-0.1-4.6,0.3-7.2,0c-7.3-0.7-17-3.2-16.6-2.9c0.4,0.3,13.7,3.1,17,3.3\tC267.7,18.8,269.7,18,269.6,18z\"\/>\n\t<path class=\"elementor-shape-fill\" d=\"M227.4,9.8c-0.2-0.1-4.5-1-9.5-1.2c-5-0.2-12.7,0.6-12.3,0.5c0.3-0.1,5.9-1.8,13.3-1.2\tS227.6,9.9,227.4,9.8z\"\/>\n\t<path class=\"elementor-shape-fill\" d=\"M204.5,13.4c-0.1-0.1,2-1,3.2-1.1c1.2-0.1,2,0,2,0.3c0,0.3-0.1,0.5-1.6,0.4\tC206.4,12.9,204.6,13.5,204.5,13.4z\"\/>\n\t<path class=\"elementor-shape-fill\" d=\"M201,10.6c0-0.1-4.4,1.2-6.3,2.2c-1.9,0.9-6.2,3.1-6.1,3.1c0.1,0.1,4.2-1.6,6.3-2.6\tS201,10.7,201,10.6z\"\/>\n\t<path class=\"elementor-shape-fill\" d=\"M154.5,26.7c-0.1-0.1-4.6,0.3-7.2,0c-7.3-0.7-17-3.2-16.6-2.9c0.4,0.3,13.7,3.1,17,3.3\tC152.6,27.5,154.6,26.8,154.5,26.7z\"\/>\n\t<path class=\"elementor-shape-fill\" d=\"M41.9,19.3c0,0,1.2-0.3,2.9-0.1c1.7,0.2,5.8,0.9,8.2,0.7c4.2-0.4,7.4-2.7,7-2.6\tc-0.4,0-4.3,2.2-8.6,1.9c-1.8-0.1-5.1-0.5-6.7-0.4S41.9,19.3,41.9,19.3z\"\/>\n\t<path class=\"elementor-shape-fill\" d=\"M75.5,12.6c0.2,0.1,2-0.8,4.3-1.1c2.3-0.2,2.1-0.3,2.1-0.5c0-0.1-1.8-0.4-3.4,0\tC76.9,11.5,75.3,12.5,75.5,12.6z\"\/>\n\t<path class=\"elementor-shape-fill\" d=\"M15.6,13.2c0-0.1,4.3,0,6.7,0.5c2.4,0.5,5,1.9,5,2c0,0.1-2.7-0.8-5.1-1.4\tC19.9,13.7,15.7,13.3,15.6,13.2z\"\/>\n<\/svg>\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-341f31e e-con-full e-flex e-con e-child\" data-id=\"341f31e\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c607c23 elementor-widget elementor-widget-heading\" data-id=\"c607c23\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Programm<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f575273 e-flex e-con-boxed e-con e-parent\" data-id=\"f575273\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e3673b4 elementor-widget elementor-widget-image\" data-id=\"e3673b4\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"724\" height=\"1024\" src=\"https:\/\/virufolk.ee\/wp-content\/uploads\/2026\/06\/VF-2026-A45mm-Juuni-Programm-724x1024.jpg\" class=\"attachment-large size-large wp-image-3386\" alt=\"\" srcset=\"https:\/\/virufolk.ee\/wp-content\/uploads\/2026\/06\/VF-2026-A45mm-Juuni-Programm-724x1024.jpg 724w, https:\/\/virufolk.ee\/wp-content\/uploads\/2026\/06\/VF-2026-A45mm-Juuni-Programm-212x300.jpg 212w, https:\/\/virufolk.ee\/wp-content\/uploads\/2026\/06\/VF-2026-A45mm-Juuni-Programm-768x1086.jpg 768w, https:\/\/virufolk.ee\/wp-content\/uploads\/2026\/06\/VF-2026-A45mm-Juuni-Programm-8x12.jpg 8w, https:\/\/virufolk.ee\/wp-content\/uploads\/2026\/06\/VF-2026-A45mm-Juuni-Programm.jpg 1000w\" sizes=\"(max-width: 724px) 100vw, 724px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4f727b9 elementor-widget__width-inherit e-transform elementor-widget elementor-widget-html\" data-id=\"4f727b9\" data-element_type=\"widget\" data-settings=\"{&quot;_transform_scale_effect&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:0.8,&quot;sizes&quot;:[]},&quot;_transform_scale_effect_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_scale_effect_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"et\" data-theme=\"light\">\r\n<head>\r\n  <meta charset=\"UTF-8\" \/>\r\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/>\r\n  <title>Viru Folgi kaardirakendus<\/title>\r\n  <link rel=\"preconnect\" href=\"https:\/\/api.fontshare.com\">\r\n  <link href=\"https:\/\/api.fontshare.com\/v2\/css?f[]=satoshi@400,500,700&f[]=boska@500,700&display=swap\" rel=\"stylesheet\">\r\n  <style>\r\n    :root, [data-theme=\"light\"] {\r\n      --text-xs: clamp(0.75rem, 0.7rem + 0.25vw, 0.875rem);\r\n      --text-sm: clamp(0.875rem, 0.8rem + 0.35vw, 1rem);\r\n      --text-base: clamp(1rem, 0.95rem + 0.25vw, 1.125rem);\r\n      --text-lg: clamp(1.125rem, 1rem + 0.75vw, 1.5rem);\r\n      --text-xl: clamp(1.5rem, 1.2rem + 1.25vw, 2.25rem);\r\n      --text-2xl: clamp(2rem, 1.2rem + 2.5vw, 3.5rem);\r\n      --space-1: 0.25rem; --space-2: 0.5rem; --space-3: 0.75rem; --space-4: 1rem; --space-5: 1.25rem; --space-6: 1.5rem; --space-8: 2rem; --space-10: 2.5rem; --space-12: 3rem;\r\n      --color-bg: #f7f6f2; --color-surface: #fbfbf9; --color-surface-2: #f1efe9; --color-border: #d4d1ca; --color-text: #28251d; --color-text-muted: #6e6b64; --color-primary: #01696f; --color-primary-hover: #0c4e54; --color-primary-highlight: #d7e8e6; --color-danger: #a13544; --shadow-md: 0 12px 32px rgba(26, 32, 28, 0.14); --radius-md: 0.75rem; --radius-lg: 1rem; --radius-full: 9999px; --font-body: 'Satoshi', 'Inter', sans-serif; --font-display: 'Boska', Georgia, serif;\r\n    }\r\n    [data-theme=\"dark\"] {\r\n      --color-bg: #171614; --color-surface: #1c1b19; --color-surface-2: #23211f; --color-border: #393836; --color-text: #efede8; --color-text-muted: #b0aca4; --color-primary: #4f98a3; --color-primary-hover: #73b0b9; --color-primary-highlight: #293739; --color-danger: #dd6974; --shadow-md: 0 12px 32px rgba(0,0,0,0.38);\r\n    }\r\n    * { box-sizing: border-box; margin: 0; padding: 0; }\r\n    html { scroll-behavior: smooth; }\r\n    body { min-height: 100vh; font-family: var(--font-body); font-size: var(--text-base); line-height: 1.6; background: linear-gradient(180deg, var(--color-bg), var(--color-surface-2)); color: var(--color-text); }\r\n    img, svg { display: block; max-width: 100%; }\r\n    button, select { font: inherit; cursor: pointer; }\r\n    button { border: 0; background: none; }\r\n    .skip-link { position: absolute; left: -9999px; top: var(--space-3); background: var(--color-primary); color: white; padding: var(--space-3) var(--space-4); border-radius: var(--radius-full); z-index: 30; }\r\n    .skip-link:focus { left: var(--space-3); }\r\n    .app-shell { max-width: 1540px; margin: 0 auto; padding: var(--space-4); display: grid; gap: var(--space-4); }\r\n    .topbar { display: flex; justify-content: space-between; gap: var(--space-4); align-items: flex-start; background: color-mix(in srgb, var(--color-surface) 92%, transparent); border: 1px solid color-mix(in srgb, var(--color-text) 12%, transparent); border-radius: var(--radius-lg); padding: var(--space-4); box-shadow: var(--shadow-md); backdrop-filter: blur(8px); }\r\n    .brand { display: grid; gap: var(--space-2); }\r\n    .logo-row { display: flex; align-items: center; gap: var(--space-3); }\r\n    .logo { width: 52px; height: 52px; color: var(--color-primary); }\r\n    h1 { font-family: var(--font-display); font-size: var(--text-2xl); line-height: 0.95; letter-spacing: 0.01em; }\r\n    .subtitle { color: var(--color-text-muted); max-width: 72ch; }\r\n    .toolbar { display: flex; flex-wrap: wrap; gap: var(--space-3); justify-content: flex-end; align-items: center; }\r\n    .chip, .theme-toggle, .select { min-height: 44px; display: inline-flex; align-items: center; gap: var(--space-2); padding: 0 var(--space-4); border-radius: var(--radius-full); border: 1px solid color-mix(in srgb, var(--color-text) 12%, transparent); background: var(--color-surface-2); color: var(--color-text); }\r\n    .chip.active { background: var(--color-primary); color: #fff; border-color: transparent; }\r\n    .layout { display: grid; grid-template-columns: minmax(0, 1.9fr) minmax(340px, 0.8fr); gap: var(--space-4); align-items: start; }\r\n    .map-panel, .info-panel { background: color-mix(in srgb, var(--color-surface) 96%, transparent); border: 1px solid color-mix(in srgb, var(--color-text) 12%, transparent); border-radius: var(--radius-lg); box-shadow: var(--shadow-md); }\r\n    .map-panel { padding: var(--space-4); }\r\n    .map-stage { position: relative; border-radius: calc(var(--radius-lg) - var(--space-2)); overflow: hidden; background: #d7e8e6; min-height: 420px; }\r\n    .map-stage img { width: 100%; height: auto; aspect-ratio: 768 \/ 1086; object-fit: contain; object-position: top center; }\r\n    .map-fallback { position: absolute; inset: 0; display: none; align-items: center; justify-content: center; padding: var(--space-8); text-align: center; color: white; background: linear-gradient(180deg, rgba(1,105,111,0.9), rgba(12,78,84,0.95)); }\r\n    .marker-layer { position: absolute; inset: 0; }\r\n    .marker { position: absolute; width: 28px; height: 28px; border-radius: var(--radius-full); border: 3px solid white; transform: translate(-50%, -50%); box-shadow: 0 8px 20px rgba(0,0,0,0.22); display: inline-flex; align-items: center; justify-content: center; color: white; font-size: 0.8rem; font-weight: 700; z-index: 2; }\r\n    .marker[data-type=\"stage\"] { background: var(--color-primary); }\r\n    .marker[data-type=\"service\"] { background: #437a22; }\r\n    .marker[data-type=\"area\"] { background: #d19900; color: #1f1700; }\r\n    .marker[data-type=\"entry\"] { background: var(--color-danger); }\r\n    .marker:focus-visible, .marker:hover { outline: none; scale: 1.08; }\r\n    .legend { display: flex; flex-wrap: wrap; gap: var(--space-3); padding-top: var(--space-4); color: var(--color-text-muted); font-size: var(--text-sm); }\r\n    .legend span { display: inline-flex; align-items: center; gap: var(--space-2); }\r\n    .legend i { width: 12px; height: 12px; border-radius: 999px; display: inline-block; }\r\n    .info-panel { padding: var(--space-4); display: grid; gap: var(--space-4); position: sticky; top: var(--space-4); }\r\n    .section-title { font-size: var(--text-lg); font-weight: 700; }\r\n    .detail-card { background: var(--color-surface-2); border: 1px solid color-mix(in srgb, var(--color-text) 10%, transparent); border-radius: var(--radius-md); padding: var(--space-4); display: grid; gap: var(--space-3); }\r\n    .detail-meta { display: flex; flex-wrap: wrap; gap: var(--space-2); }\r\n    .badge { display: inline-flex; align-items: center; min-height: 32px; padding: 0 var(--space-3); border-radius: var(--radius-full); font-size: var(--text-xs); font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; }\r\n    .badge.stage { background: var(--color-primary-highlight); color: var(--color-primary); }\r\n    .badge.service { background: #d6e5cc; color: #2f5f13; }\r\n    .badge.area { background: #f0e5b9; color: #6d4b00; }\r\n    .badge.entry { background: #f1d4d8; color: var(--color-danger); }\r\n    .events, .schedule-list, .poi-list { display: grid; gap: var(--space-3); }\r\n    .event-item, .schedule-item { border: 1px solid color-mix(in srgb, var(--color-text) 10%, transparent); border-radius: var(--radius-md); padding: var(--space-3); background: var(--color-surface); }\r\n    .event-item strong, .schedule-item strong { display: block; }\r\n    .schedule-toolbar { display: flex; gap: var(--space-3); flex-wrap: wrap; align-items: center; }\r\n    .select { padding-right: var(--space-6); }\r\n    .poi-list { max-height: 32vh; overflow: auto; padding-right: var(--space-1); }\r\n    .schedule-list { max-height: 42vh; overflow: auto; padding-right: var(--space-1); }\r\n    .poi-button { width: 100%; text-align: left; display: grid; gap: 0.15rem; padding: var(--space-3); background: var(--color-surface); border: 1px solid transparent; border-radius: var(--radius-md); }\r\n    .poi-button:hover, .poi-button[aria-pressed=\"true\"] { border-color: color-mix(in srgb, var(--color-primary) 48%, transparent); background: color-mix(in srgb, var(--color-primary-highlight) 55%, var(--color-surface)); }\r\n    .poi-button small, .helper, .schedule-time { color: var(--color-text-muted); }\r\n    .schedule-item.active { border-color: color-mix(in srgb, var(--color-primary) 45%, transparent); background: color-mix(in srgb, var(--color-primary-highlight) 45%, var(--color-surface)); }\r\n\r\n    .day-group { display: grid; gap: var(--space-2); }\r\n    .day-label { display: inline-flex; align-items: center; min-height: 28px; width: fit-content; padding: 0 var(--space-3); border-radius: var(--radius-full); background: color-mix(in srgb, var(--color-primary-highlight) 60%, var(--color-surface)); color: var(--color-primary); font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.04em; text-transform: uppercase; }\r\n\r\n    .footer-note { font-size: var(--text-sm); color: var(--color-text-muted); }\r\n    @media (max-width: 980px) {\r\n      .layout { grid-template-columns: 1fr; }\r\n      .info-panel { position: static; }\r\n      .topbar { flex-direction: column; }\r\n      .toolbar { justify-content: flex-start; }\r\n      .poi-list, .schedule-list { max-height: none; }\r\n    }\r\n  <\/style>\r\n<\/head>\r\n<body>\r\n  <a class=\"skip-link\" href=\"#sisu\">Liigu kaardile<\/a>\r\n  <div class=\"app-shell\">\r\n    <header class=\"topbar\">\r\n      <div class=\"brand\">\r\n        <div class=\"logo-row\">\r\n          <svg class=\"logo\" viewBox=\"0 0 64 64\" aria-label=\"Viru Folgi kaardi logo\" fill=\"none\">\r\n            <path d=\"M10 42C18 20 45 12 54 24C58 29 57 37 52 42C47 47 39 49 28 51L10 54V42Z\" fill=\"currentColor\" opacity=\"0.18\"><\/path>\r\n            <path d=\"M14 47C20 28 40 17 49 25C52 28 52 34 48 38C44 42 36 44 26 46L14 47Z\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linejoin=\"round\"><\/path>\r\n            <path d=\"M22 13V41\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\"><\/path>\r\n            <path d=\"M22 19C28 15 35 15 41 19\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\"><\/path>\r\n          <\/svg>\r\n          <div>\r\n            <h1>Viru Folgi kaart ja kava<\/h1>\r\n            <p class=\"subtitle\">Interaktiivne festivalikaart K\u00e4smu alaga, markeritega ning 2026. aasta programmiga 7. ja 8. augustiks.<\/p>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"toolbar\" aria-label=\"Kaardi t\u00f6\u00f6riistad\">\r\n        <button class=\"chip active\" data-filter=\"all\">K\u00f5ik<\/button>\r\n        <button class=\"chip\" data-filter=\"stage\">Lavad<\/button>\r\n        <button class=\"chip\" data-filter=\"service\">Teenused<\/button>\r\n        <button class=\"chip\" data-filter=\"area\">Alad<\/button>\r\n        <button class=\"chip\" data-filter=\"entry\">P\u00e4\u00e4s<\/button>\r\n        <button class=\"theme-toggle\" type=\"button\" data-theme-toggle aria-label=\"Muuda teemat\"><span aria-hidden=\"true\">\u25d0<\/span><span>Teema<\/span><\/button>\r\n      <\/div>\r\n    <\/header>\r\n\r\n    <main id=\"sisu\" class=\"layout\">\r\n      <section class=\"map-panel\" aria-labelledby=\"kaart-pealkiri\">\r\n        <h2 id=\"kaart-pealkiri\" class=\"section-title\">Festivali kaart<\/h2>\r\n        <div class=\"map-stage\" id=\"mapStage\">\r\n          <img decoding=\"async\" id=\"mapImage\"\r\n            src=\"https:\/\/virufolk.ee\/wp-content\/uploads\/2026\/07\/VF-2026-KasmuKaart-A4.jpg\"\r\n            alt=\"Viru Folgi kaart 2026\"><\/img>\r\n          <div class=\"map-fallback\" id=\"mapFallback\"><div><strong>Kaardipilti ei \u00f5nnestunud laadida.<\/strong><br>Fail on n\u00fc\u00fcd seotud otse rakenduse assets-kaustaga, et brauser leiaks selle usaldusv\u00e4\u00e4rsemalt.<\/div><\/div>\r\n          <div class=\"marker-layer\" id=\"markerLayer\"><\/div>\r\n        <\/div>\r\n        <div class=\"legend\" aria-label=\"Kaardilegendi selgitus\">\r\n          <span><i style=\"background: var(--color-primary);\"><\/i>Lava<\/span>\r\n          <span><i style=\"background: #437a22;\"><\/i>Teenus<\/span>\r\n          <span><i style=\"background: #d19900;\"><\/i>Ala<\/span>\r\n          <span><i style=\"background: var(--color-danger);\"><\/i>Sissep\u00e4\u00e4s<\/span>\r\n        <\/div>\r\n      <\/section>\r\n\r\n      <aside class=\"info-panel\">\r\n        <section class=\"detail-card\" aria-live=\"polite\">\r\n          <h2 class=\"section-title\">Valitud punkt<\/h2>\r\n          <div id=\"detailContent\">\r\n            <h3 id=\"poiTitle\">Pealava<\/h3>\r\n            <div class=\"detail-meta\">\r\n              <span class=\"badge stage\" id=\"poiType\">Lava<\/span>\r\n              <span class=\"badge area\" id=\"poiZone\">Keskala<\/span>\r\n            <\/div>\r\n            <p id=\"poiDescription\">Peamine kontserdiala kaardi vasakus keskosas, mugavalt toitlustuse ja joogiveepunkti l\u00e4hedal.<\/p>\r\n            <div class=\"events\" id=\"poiEvents\"><\/div>\r\n          <\/div>\r\n        <\/section>\r\n\r\n        <section class=\"detail-card\">\r\n          <h2 class=\"section-title\">Programm<\/h2>\r\n          <div class=\"schedule-toolbar\">\r\n            <label for=\"daySelect\" class=\"helper\">P\u00e4ev:<\/label>\r\n            <select id=\"daySelect\" class=\"select\" aria-label=\"Vali festivalip\u00e4ev\">\r\n              <option value=\"2026-08-07\">Reede 7.08<\/option>\r\n              <option value=\"2026-08-08\">Laup\u00e4ev 8.08<\/option>\r\n            <\/select>\r\n            <label for=\"timeSelect\" class=\"helper\">Kell:<\/label>\r\n            <select id=\"timeSelect\" class=\"select\" aria-label=\"Vali kellaaeg\">\r\n              <option value=\"now\">Praegune aeg<\/option>\r\n              <option value=\"10:00\">10:00<\/option>\r\n              <option value=\"12:00\">12:00<\/option>\r\n              <option value=\"14:00\">14:00<\/option>\r\n              <option value=\"16:00\">16:00<\/option>\r\n              <option value=\"18:00\">18:00<\/option>\r\n              <option value=\"20:00\">20:00<\/option>\r\n              <option value=\"22:00\">22:00<\/option>\r\n              <option value=\"00:30\">00:30<\/option>\r\n            <\/select>\r\n          <\/div>\r\n          <div class=\"schedule-toolbar\" role=\"group\" aria-label=\"Aja filtrid\">\r\n            <button class=\"chip active\" data-schedule-filter=\"all\">K\u00f5ik kirjed<\/button>\r\n            <button class=\"chip\" data-schedule-filter=\"live\">Toimub praegu<\/button>\r\n            <button class=\"chip\" data-schedule-filter=\"soon\">Algab varsti<\/button>\r\n          <\/div>\r\n          <p class=\"helper\" id=\"scheduleStatus\">N\u00e4itan valitud p\u00e4eva kogu programmi.<\/p>\r\n          <div class=\"schedule-list\" id=\"scheduleList\"><\/div>\r\n        <\/section>\r\n\r\n        <section class=\"detail-card\">\r\n          <h2 class=\"section-title\">Asukohad<\/h2>\r\n          <p class=\"helper\">Puuduta nimekirjas v\u00f5i markerit kaardil, et n\u00e4ha \u00fcksikasju. Kava kirje vajutamine viib vastava asukoha detaili juurde.<\/p>\r\n          <div class=\"poi-list\" id=\"poiList\"><\/div>\r\n        <\/section>\r\n      <\/aside>\r\n    <\/main>\r\n  <\/div>\r\n\r\n  <script>\r\n    const points = [\r\n      { id: 'pealava', name: 'Pealava', type: 'stage', zone: 'Keskala', x: 25.8, y: 35.5, description: 'Festivali p\u00f5hikontsertide ala majutuse ja toitlustuse l\u00e4hedal.' },\r\n      { id: 'noortelava', name: 'Captain Kombucha noortelava', type: 'stage', zone: 'Keskala', x: 36.2, y: 35.0, description: 'Nooremale publikule ja v\u00e4iksematele esinemistele m\u00f5eldud lava peaplatsi k\u00f5rval.' },\r\n      { id: 'metsalava', name: 'Metsalava', type: 'stage', zone: 'P\u00f5hjapoolne mets', x: 20.0, y: 10.8, description: 'Loodusl\u00e4hedane lava kaardi \u00fclemises vasakus nurgas, eemal peamisest melust.' },\r\n      { id: 'talvelava', name: 'Vinteri lava', type: 'stage', zone: 'Festivaliserv', x: 60.0, y: 54.7, description: 'Siseruumidele ja v\u00e4iksematele esinemistele sobiv lava rahvamaja l\u00e4heduses.' },\r\n      { id: 'merelava', name: 'Merelava', type: 'stage', zone: 'Ranna\u00e4\u00e4r', x: 76.2, y: 49.8, description: 'Mere \u00e4\u00e4res paiknev lava suurep\u00e4rase vaatega sadama suunas.' },\r\n      { id: 'rahvamaja', name: 'Rahvamaja', type: 'area', zone: 'Festivaliserv', x: 49.8, y: 57.2, description: 'Kogukonna- ja sisetegevuste koht, hea orientiir Talvelava k\u00f5rval.' },\r\n      { id: 'lasteala', name: 'Lasteala', type: 'area', zone: 'Keskala', x: 40.5, y: 38.8, description: 'Peredele suunatud ala pealava tagumises osas.' },\r\n      { id: 'toiduala', name: 'Toiduala', type: 'service', zone: 'Keskala', x: 20.0, y: 45.8, description: 'Peamine s\u00f6\u00f6giala, kus on lihtne kohtuda enne v\u00f5i p\u00e4rast kontserte.' },\r\n      { id: 'joogivesi', name: 'Joogiveepunkt', type: 'service', zone: 'Keskala', x: 30.8, y: 45.3, description: 'Veepunkt asub pressikeskuse l\u00e4histel ja teenindab pealava \u00fcmbrust.' },\r\n      { id: 'esmaabi', name: 'Meditsiinipunkt', type: 'service', zone: 'Keskala', x: 20.0, y: 28.5, description: 'Avatud \u00f6\u00f6p\u00e4ev l\u00e4bi, m\u00e4rgitud kaardil esmaabipunktina.' },\r\n      { id: 'sissepaas', name: 'Festivali p\u00e4\u00e4sla', type: 'entry', zone: 'L\u00f5unapoolne sissep\u00e4\u00e4s', x: 60.0, y: 60.5, description: 'Peamine sissep\u00e4\u00e4s alale, kust p\u00e4\u00e4seb edasi rahvamaja ja talvelava suunas.' },\r\n      { id: 'piletikeskus', name: 'Piletikeskus', type: 'service', zone: 'Idaserv', x: 68.8, y: 66.0, description: 'Piletite ja k\u00fclastajainfo punkt sadama tee \u00e4\u00e4res.' },\r\n      { id: 'akred', name: 'Akrediteerimine', type: 'service', zone: 'Idaserv', x: 80.5, y: 68.5, description: 'Esinejate ja meedia registreerimise ala piletikeskuse k\u00f5rval.' },\r\n      { id: 'kasiitoolaat', name: 'K\u00e4sit\u00f6\u00f6laat', type: 'area', zone: 'Ranna\u00e4\u00e4r', x: 59.0, y: 43.0, description: 'Viru Folgi k\u00e4sit\u00f6\u00f6liste ala rannajoone l\u00e4hedal.' },\r\n      { id: 'muuseum', name: 'Meremuuseum', type: 'area', zone: 'Ranna\u00e4\u00e4r', x: 86.2, y: 52.0, description: 'Orienteerumispunkt sadama k\u00f5rval, seotud mere\u00e4\u00e4rsete tegevustega.' },\r\n      { id: 'kirik', name: 'Kirik', type: 'area', zone: 'L\u00f5unaosa', x: 55.8, y: 70.5, description: 'Kaardil selge maam\u00e4rk bussijaama ja parkla vahelisel alal.' },\r\n      { id: 'buss', name: 'Bussijaam', type: 'service', zone: 'L\u00f5unaosa', x: 65.8, y: 80.2, description: 'Bussipeatus ja transpordi s\u00f5lmpunkt kaardi alumises osas.' },\r\n      { id: 'kaspervik', name: 'Restoran Kaspervik', type: 'area', zone: 'Laineala', x: 25.8, y: 22.4, description: 'Kasperviku ala kaardi \u00fclemises keskosas, kus toimub ka \u00f6\u00f6simman.' }\r\n    ];\r\n\r\n    const schedule = {\r\n      '2026-08-07': [\r\n        { time: '14:00\u201315:00', title: 'N\u00e4ppepildurid', location: 'talvelava', stageLabel: 'Vinteri lava' },\r\n        { time: '16:00\u201317:15', title: 'Tomas de Real (CL)', location: 'talvelava', stageLabel: 'Vinteri lava' },\r\n        { time: '17:45\u201318:00', title: 'Festivali avatseremoonia', location: 'pealava', stageLabel: 'Pealava' },\r\n        { time: '18:00\u201319:15', title: 'Untsakad & Minu isa oli ausus ise', location: 'pealava', stageLabel: 'Pealava' },\r\n        { time: '19:30\u201320:00', title: 'Humin', location: 'noortelava', stageLabel: 'Noortelava' },\r\n        { time: '19:30\u201320:45', title: 'South for Winter (NZ\/US)', location: 'talvelava', stageLabel: 'Vinteri lava' },\r\n        { time: '20:00\u201321:15', title: 'Uurikad & Robert Linna', location: 'metsalava', stageLabel: 'Metsalava' },\r\n        { time: '20:00\u201322:00', title: 'Tantsuklubi', location: 'rahvamaja', stageLabel: 'Rahvamaja' },\r\n        { time: '21:30\u201322:00', title: 'R\u00fctmikudid', location: 'noortelava', stageLabel: 'Noortelava' },\r\n        { time: '22:00\u201323:00', title: 'Sadu', location: 'pealava', stageLabel: 'Pealava' },\r\n        { time: '22:00\u201323:15', title: 'Rondellus', location: 'kirik', stageLabel: 'Kirik' },\r\n        { time: '23:45\u201301:00', title: 'V\u00e4elauud: Tom Valsberg & Co', location: 'metsalava', stageLabel: 'Metsalava' },\r\n        { time: '23:45\u201303:00', title: '\u00d6\u00f6simman: L\u00f5\u00f5tsav\u00e4gilased', location: 'kaspervik', stageLabel: 'Kaspervik' }\r\n      ],\r\n      '2026-08-08': [\r\n        { time: '11:00\u201312:30', title: 'Valdur Mikita \u2013 P\u00f5lise olemise m\u00e4rgid', location: 'rahvamaja', stageLabel: 'Rahvamaja' },\r\n        { time: '11:00\u201312:15', title: 'Piret P\u00e4\u00e4r & Kulno Malva', location: 'talvelava', stageLabel: 'Vinteri lava' },\r\n        { time: '13:00\u201314:30', title: 'Hendrik Relve \u2013 Maailma eri p\u00f5lisrahvaste p\u00e4rimuskultuur ja maailmak\u00e4sitlus', location: 'rahvamaja', stageLabel: 'Rahvamaja' },\r\n        { time: '14:00\u201315:15', title: 'Gabba (NO)', location: 'pealava', stageLabel: 'Pealava' },\r\n        { time: '14:00\u201315:15', title: 'Estlager', location: 'talvelava', stageLabel: 'Vinteri lava' },\r\n        { time: '15:30\u201316:00', title: 'Kilks & Kolks', location: 'noortelava', stageLabel: 'Noortelava' },\r\n        { time: '16:00\u201317:15', title: 'Viru-Nigula mehed', location: 'metsalava', stageLabel: 'Metsalava' },\r\n        { time: '16:00\u201317:30', title: 'Arno Kalbus \u2013 P\u00f5lisrahvaste trumme tutvustav loeng-t\u00f6\u00f6tuba', location: 'rahvamaja', stageLabel: 'Rahvamaja' },\r\n        { time: '17:00\u201318:15', title: 'Pelkk\u00e4 Poutanen (FI)', location: 'talvelava', stageLabel: 'Vinteri lava' },\r\n        { time: '17:30\u201318:00', title: 'Juhan Koppel', location: 'noortelava', stageLabel: 'Noortelava' },\r\n        { time: '18:00\u201319:15', title: 'Rohallion (\u0160oti)', location: 'pealava', stageLabel: 'Pealava' },\r\n        { time: '19:30\u201320:00', title: 'Haetus', location: 'noortelava', stageLabel: 'Noortelava' },\r\n        { time: '20:00\u201321:15', title: 'Estonia meets Amazonia \u2013 Eduardo Agni & R\u00e4ndaja', location: 'talvelava', stageLabel: 'Vinteri lava' },\r\n        { time: '20:00\u201321:15', title: 'Iberi (GE)', location: 'metsalava', stageLabel: 'Metsalava' },\r\n        { time: '21:00\u201323:00', title: 'Tantsuklubi', location: 'rahvamaja', stageLabel: 'Rahvamaja' },\r\n        { time: '22:00\u201323:15', title: 'Pantokraator', location: 'pealava', stageLabel: 'Pealava' },\r\n        { time: '23:45\u201301:00', title: 'Nordic Ballads', location: 'metsalava', stageLabel: 'Metsalava' },\r\n        { time: '23:45\u201303:00', title: '\u00d6\u00f6simman: Ahoi', location: 'kaspervik', stageLabel: 'Kaspervik' }\r\n      ]\r\n    };\r\n\r\n    const typeConfig = {\r\n      stage: { label: 'Lava', className: 'stage' },\r\n      service: { label: 'Teenus', className: 'service' },\r\n      area: { label: 'Ala', className: 'area' },\r\n      entry: { label: 'P\u00e4\u00e4s', className: 'entry' }\r\n    };\r\n\r\n    const markerLayer = document.getElementById('markerLayer');\r\n    const poiList = document.getElementById('poiList');\r\n    const poiTitle = document.getElementById('poiTitle');\r\n    const poiType = document.getElementById('poiType');\r\n    const poiZone = document.getElementById('poiZone');\r\n    const poiDescription = document.getElementById('poiDescription');\r\n    const poiEvents = document.getElementById('poiEvents');\r\n    const filterButtons = [...document.querySelectorAll('[data-filter]')];\r\n    const daySelect = document.getElementById('daySelect');\r\n    const timeSelect = document.getElementById('timeSelect');\r\n    const scheduleList = document.getElementById('scheduleList');\r\n    const scheduleStatus = document.getElementById('scheduleStatus');\r\n    const scheduleFilterButtons = [...document.querySelectorAll('[data-schedule-filter]')];\r\n    const mapImage = document.getElementById('mapImage');\r\n    const mapFallback = document.getElementById('mapFallback');\r\n    let activeFilter = 'all';\r\n    let activePoint = points[0].id;\r\n    let activeScheduleFilter = 'all';\r\n\r\n    function renderEventsForPoint(pointId) {\r\n      poiEvents.innerHTML = '';\r\n      const dayLabels = {\r\n        '2026-08-07': 'Reede 7.08',\r\n        '2026-08-08': 'Laup\u00e4ev 8.08'\r\n      };\r\n      const grouped = Object.entries(schedule)\r\n        .map(([day, events]) => ({ day, events: events.filter(item => item.location === pointId) }))\r\n        .filter(group => group.events.length);\r\n\r\n      if (!grouped.length) {\r\n        poiEvents.innerHTML = '<div class=\"event-item\"><strong>Praegu pole seotud kava kirjeid<\/strong><span class=\"helper\">Selle punkti juurde saab hiljem lisada t\u00e4psemad s\u00fcndmused v\u00f5i teenusinfo.<\/span><\/div>';\r\n        return;\r\n      }\r\n\r\n      grouped.forEach(group => {\r\n        const wrapper = document.createElement('div');\r\n        wrapper.className = 'day-group';\r\n\r\n        const label = document.createElement('div');\r\n        label.className = 'day-label';\r\n        label.textContent = dayLabels[group.day] || group.day;\r\n        wrapper.appendChild(label);\r\n\r\n        group.events.forEach(event => {\r\n          const item = document.createElement('div');\r\n          item.className = 'event-item';\r\n          item.innerHTML = `<strong>${event.title}<\/strong><span class=\"schedule-time\">${event.time} \u00b7 ${event.stageLabel}<\/span>`;\r\n          wrapper.appendChild(item);\r\n        });\r\n\r\n        poiEvents.appendChild(wrapper);\r\n      });\r\n    }\r\n\r\n    function setActivePoint(id) {\r\n      activePoint = id;\r\n      const point = points.find(p => p.id === id);\r\n      if (!point) return;\r\n      poiTitle.textContent = point.name;\r\n      poiType.textContent = typeConfig[point.type].label;\r\n      poiType.className = `badge ${typeConfig[point.type].className}`;\r\n      poiZone.textContent = point.zone;\r\n      poiZone.className = 'badge area';\r\n      poiDescription.textContent = point.description;\r\n      renderEventsForPoint(point.id);\r\n      document.querySelectorAll('.marker').forEach(marker => marker.style.outline = marker.dataset.id === id ? '3px solid rgba(255,255,255,0.95)' : 'none');\r\n      document.querySelectorAll('.poi-button').forEach(btn => btn.setAttribute('aria-pressed', btn.dataset.id === id ? 'true' : 'false'));\r\n      document.querySelectorAll('.schedule-item').forEach(item => item.classList.toggle('active', item.dataset.location === id));\r\n    }\r\n\r\n    function renderMarkers() {\r\n      markerLayer.innerHTML = '';\r\n      poiList.innerHTML = '';\r\n      const filtered = points.filter(point => activeFilter === 'all' || point.type === activeFilter);\r\n      filtered.forEach((point, index) => {\r\n        const marker = document.createElement('button');\r\n        marker.className = 'marker';\r\n        marker.dataset.type = point.type;\r\n        marker.dataset.id = point.id;\r\n        marker.style.left = `${point.x}%`;\r\n        marker.style.top = `${point.y}%`;\r\n        marker.setAttribute('aria-label', point.name);\r\n        marker.innerHTML = `<span>${index + 1}<\/span>`;\r\n        marker.addEventListener('click', () => setActivePoint(point.id));\r\n        markerLayer.appendChild(marker);\r\n\r\n        const item = document.createElement('button');\r\n        item.className = 'poi-button';\r\n        item.dataset.id = point.id;\r\n        item.setAttribute('aria-pressed', point.id === activePoint ? 'true' : 'false');\r\n        item.innerHTML = `<strong>${point.name}<\/strong><small>${typeConfig[point.type].label} \u00b7 ${point.zone}<\/small>`;\r\n        item.addEventListener('click', () => setActivePoint(point.id));\r\n        poiList.appendChild(item);\r\n      });\r\n      if (!filtered.some(point => point.id === activePoint) && filtered[0]) activePoint = filtered[0].id;\r\n      if (filtered[0]) setActivePoint(activePoint);\r\n    }\r\n\r\n    function timeToMinutes(value) {\r\n      const [hours, minutes] = value.split(':').map(Number);\r\n      return (hours * 60) + minutes;\r\n    }\r\n\r\n    function getReferenceMinutes() {\r\n      if (timeSelect.value !== 'now') return timeToMinutes(timeSelect.value);\r\n      const now = new Date();\r\n      return now.getHours() * 60 + now.getMinutes();\r\n    }\r\n\r\n    function parseEventRange(timeRange) {\r\n      const parts = timeRange.split('\u2013');\r\n      if (parts.length === 1) {\r\n        const start = timeToMinutes(parts[0]);\r\n        return { start, end: start + 60 };\r\n      }\r\n      let start = timeToMinutes(parts[0]);\r\n      let end = timeToMinutes(parts[1]);\r\n      if (end < start) end += 24 * 60;\r\n      return { start, end };\r\n    }\r\n\r\n    function getEventState(item, referenceMinutes) {\r\n      let { start, end } = parseEventRange(item.time);\r\n      let ref = referenceMinutes;\r\n      if (ref < 300 && start > 1000) ref += 24 * 60;\r\n      if (ref >= start && ref <= end) return 'live';\r\n      if (start > ref && start - ref <= 60) return 'soon';\r\n      return 'other';\r\n    }\r\n\r\n    function renderSchedule(day) {\r\n      scheduleList.innerHTML = '';\r\n      const referenceMinutes = getReferenceMinutes();\r\n      const items = (schedule[day] || []).filter(item => {\r\n        const state = getEventState(item, referenceMinutes);\r\n        return activeScheduleFilter === 'all' ? true : state === activeScheduleFilter;\r\n      });\r\n\r\n      const statusMap = {\r\n        all: 'N\u00e4itan valitud p\u00e4eva kogu programmi.',\r\n        live: 'N\u00e4itan kirjeid, mis toimuvad valitud ajal praegu.',\r\n        soon: 'N\u00e4itan kirjeid, mis algavad j\u00e4rgmise 60 minuti jooksul.'\r\n      };\r\n      scheduleStatus.textContent = items.length ? statusMap[activeScheduleFilter] : 'Selle filtri ja kellaajaga sobivaid kava kirjeid ei leitud.';\r\n\r\n      items.forEach(item => {\r\n        const row = document.createElement('button');\r\n        const state = getEventState(item, referenceMinutes);\r\n        row.className = 'schedule-item';\r\n        row.dataset.location = item.location;\r\n        row.dataset.state = state;\r\n        const stateLabel = state === 'live' ? 'Toimub praegu' : state === 'soon' ? 'Algab varsti' : 'Kavas';\r\n        row.innerHTML = `<strong>${item.title}<\/strong><div class=\"schedule-time\">${item.time}<\/div><div class=\"helper\">${item.stageLabel}<\/div><div class=\"helper\">${stateLabel}<\/div>`;\r\n        row.addEventListener('click', () => setActivePoint(item.location));\r\n        scheduleList.appendChild(row);\r\n      });\r\n      document.querySelectorAll('.schedule-item').forEach(item => item.classList.toggle('active', item.dataset.location === activePoint));\r\n    }\r\n\r\n    filterButtons.forEach(button => {\r\n      button.addEventListener('click', () => {\r\n        activeFilter = button.dataset.filter;\r\n        filterButtons.forEach(btn => btn.classList.toggle('active', btn === button));\r\n        renderMarkers();\r\n      });\r\n    });\r\n\r\n    daySelect.addEventListener('change', e => renderSchedule(e.target.value));\r\n    timeSelect.addEventListener('change', () => renderSchedule(daySelect.value));\r\n\r\n    scheduleFilterButtons.forEach(button => {\r\n      button.addEventListener('click', () => {\r\n        activeScheduleFilter = button.dataset.scheduleFilter;\r\n        scheduleFilterButtons.forEach(btn => btn.classList.toggle('active', btn === button));\r\n        renderSchedule(daySelect.value);\r\n      });\r\n    });\r\n\r\n    (function () {\r\n      const toggle = document.querySelector('[data-theme-toggle]');\r\n      const root = document.documentElement;\r\n      let mode = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\r\n      root.setAttribute('data-theme', mode);\r\n      toggle.addEventListener('click', () => {\r\n        mode = mode === 'dark' ? 'light' : 'dark';\r\n        root.setAttribute('data-theme', mode);\r\n      });\r\n    })();\r\n\r\n    mapImage.addEventListener('error', () => { mapFallback.style.display = 'flex'; });\r\n    mapImage.addEventListener('load', () => { mapFallback.style.display = 'none'; });\r\n    renderMarkers();\r\n    renderSchedule(daySelect.value);\r\n  <\/script>\r\n<\/body>\r\n<\/html>\r\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a276f2b e-flex e-con-boxed e-con e-parent\" data-id=\"a276f2b\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;shape_divider_bottom&quot;:&quot;mountains&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-shape elementor-shape-bottom\" aria-hidden=\"true\" data-negative=\"false\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 1000 100\" preserveAspectRatio=\"none\">\n\t<path class=\"elementor-shape-fill\" opacity=\"0.33\" d=\"M473,67.3c-203.9,88.3-263.1-34-320.3,0C66,119.1,0,59.7,0,59.7V0h1000v59.7 c0,0-62.1,26.1-94.9,29.3c-32.8,3.3-62.8-12.3-75.8-22.1C806,49.6,745.3,8.7,694.9,4.7S492.4,59,473,67.3z\"\/>\n\t<path class=\"elementor-shape-fill\" opacity=\"0.66\" d=\"M734,67.3c-45.5,0-77.2-23.2-129.1-39.1c-28.6-8.7-150.3-10.1-254,39.1 s-91.7-34.4-149.2,0C115.7,118.3,0,39.8,0,39.8V0h1000v36.5c0,0-28.2-18.5-92.1-18.5C810.2,18.1,775.7,67.3,734,67.3z\"\/>\n\t<path class=\"elementor-shape-fill\" d=\"M766.1,28.9c-200-57.5-266,65.5-395.1,19.5C242,1.8,242,5.4,184.8,20.6C128,35.8,132.3,44.9,89.9,52.5C28.6,63.7,0,0,0,0 h1000c0,0-9.9,40.9-83.6,48.1S829.6,47,766.1,28.9z\"\/>\n<\/svg>\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Programm Viru Folgi kaardirakendus Liigu kaardile Viru Folgi kaart ja kava Interaktiivne festivalikaart K\u00e4smu alaga, markeritega ning 2026. aasta programmiga 7. ja 8. augustiks. K\u00f5ik Lavad Teenused Alad P\u00e4\u00e4s \u25d0Teema [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"page-builder","ast-site-content-layout":"full-width-container","site-content-style":"unboxed","site-sidebar-style":"unboxed","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","theme-transparent-header-meta":"enabled","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-2502","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Programm - Viru Folk<\/title>\n<meta name=\"description\" content=\"Vaata, mis toimub Viru Folgil! Siit leiad kogu festivali programmi - kontserdid, loengud, t\u00f6\u00f6toad ja simmanid.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/virufolk.ee\/en\/programm\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Programm - Viru Folk\" \/>\n<meta property=\"og:description\" content=\"Vaata, mis toimub Viru Folgil! Siit leiad kogu festivali programmi - kontserdid, loengud, t\u00f6\u00f6toad ja simmanid.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/virufolk.ee\/en\/programm\/\" \/>\n<meta property=\"og:site_name\" content=\"Viru Folk\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-13T20:25:56+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/virufolk.ee\/wp-content\/uploads\/2026\/06\/VF-2026-A45mm-Juuni-Programm.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1000\" \/>\n\t<meta property=\"og:image:height\" content=\"1414\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/virufolk.ee\\\/programm\\\/\",\"url\":\"https:\\\/\\\/virufolk.ee\\\/programm\\\/\",\"name\":\"Programm - Viru Folk\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/virufolk.ee\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/virufolk.ee\\\/programm\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/virufolk.ee\\\/programm\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/virufolk.ee\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/VF-2026-A45mm-Juuni-Programm-724x1024.jpg\",\"datePublished\":\"2025-04-14T12:26:22+00:00\",\"dateModified\":\"2026-07-13T20:25:56+00:00\",\"description\":\"Vaata, mis toimub Viru Folgil! Siit leiad kogu festivali programmi - kontserdid, loengud, t\u00f6\u00f6toad ja simmanid.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/virufolk.ee\\\/programm\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/virufolk.ee\\\/programm\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/virufolk.ee\\\/programm\\\/#primaryimage\",\"url\":\"https:\\\/\\\/virufolk.ee\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/VF-2026-A45mm-Juuni-Programm-724x1024.jpg\",\"contentUrl\":\"https:\\\/\\\/virufolk.ee\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/VF-2026-A45mm-Juuni-Programm-724x1024.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/virufolk.ee\\\/programm\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/virufolk.ee\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Programm\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/virufolk.ee\\\/#website\",\"url\":\"https:\\\/\\\/virufolk.ee\\\/\",\"name\":\"Viru Folk\",\"description\":\"Viru Folk Festivali koduleht\",\"publisher\":{\"@id\":\"https:\\\/\\\/virufolk.ee\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/virufolk.ee\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/virufolk.ee\\\/#organization\",\"name\":\"Viru Folk\",\"url\":\"https:\\\/\\\/virufolk.ee\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/virufolk.ee\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/virufolk.ee\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/d1a8580b-9fee-4b70-94b4-393e655aec04.png\",\"contentUrl\":\"https:\\\/\\\/virufolk.ee\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/d1a8580b-9fee-4b70-94b4-393e655aec04.png\",\"width\":1654,\"height\":744,\"caption\":\"Viru Folk\"},\"image\":{\"@id\":\"https:\\\/\\\/virufolk.ee\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Programm - Viru Folk","description":"Vaata, mis toimub Viru Folgil! Siit leiad kogu festivali programmi - kontserdid, loengud, t\u00f6\u00f6toad ja simmanid.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/virufolk.ee\/en\/programm\/","og_locale":"en_GB","og_type":"article","og_title":"Programm - Viru Folk","og_description":"Vaata, mis toimub Viru Folgil! Siit leiad kogu festivali programmi - kontserdid, loengud, t\u00f6\u00f6toad ja simmanid.","og_url":"https:\/\/virufolk.ee\/en\/programm\/","og_site_name":"Viru Folk","article_modified_time":"2026-07-13T20:25:56+00:00","og_image":[{"width":1000,"height":1414,"url":"https:\/\/virufolk.ee\/wp-content\/uploads\/2026\/06\/VF-2026-A45mm-Juuni-Programm.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Estimated reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/virufolk.ee\/programm\/","url":"https:\/\/virufolk.ee\/programm\/","name":"Programm - Viru Folk","isPartOf":{"@id":"https:\/\/virufolk.ee\/#website"},"primaryImageOfPage":{"@id":"https:\/\/virufolk.ee\/programm\/#primaryimage"},"image":{"@id":"https:\/\/virufolk.ee\/programm\/#primaryimage"},"thumbnailUrl":"https:\/\/virufolk.ee\/wp-content\/uploads\/2026\/06\/VF-2026-A45mm-Juuni-Programm-724x1024.jpg","datePublished":"2025-04-14T12:26:22+00:00","dateModified":"2026-07-13T20:25:56+00:00","description":"Vaata, mis toimub Viru Folgil! Siit leiad kogu festivali programmi - kontserdid, loengud, t\u00f6\u00f6toad ja simmanid.","breadcrumb":{"@id":"https:\/\/virufolk.ee\/programm\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/virufolk.ee\/programm\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/virufolk.ee\/programm\/#primaryimage","url":"https:\/\/virufolk.ee\/wp-content\/uploads\/2026\/06\/VF-2026-A45mm-Juuni-Programm-724x1024.jpg","contentUrl":"https:\/\/virufolk.ee\/wp-content\/uploads\/2026\/06\/VF-2026-A45mm-Juuni-Programm-724x1024.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/virufolk.ee\/programm\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/virufolk.ee\/"},{"@type":"ListItem","position":2,"name":"Programm"}]},{"@type":"WebSite","@id":"https:\/\/virufolk.ee\/#website","url":"https:\/\/virufolk.ee\/","name":"Viru Folk","description":"Viru Folk Festivali koduleht","publisher":{"@id":"https:\/\/virufolk.ee\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/virufolk.ee\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/virufolk.ee\/#organization","name":"Viru Folk","url":"https:\/\/virufolk.ee\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/virufolk.ee\/#\/schema\/logo\/image\/","url":"https:\/\/virufolk.ee\/wp-content\/uploads\/2025\/06\/d1a8580b-9fee-4b70-94b4-393e655aec04.png","contentUrl":"https:\/\/virufolk.ee\/wp-content\/uploads\/2025\/06\/d1a8580b-9fee-4b70-94b4-393e655aec04.png","width":1654,"height":744,"caption":"Viru Folk"},"image":{"@id":"https:\/\/virufolk.ee\/#\/schema\/logo\/image\/"}}]}},"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/virufolk.ee\/en\/wp-json\/wp\/v2\/pages\/2502","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/virufolk.ee\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/virufolk.ee\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/virufolk.ee\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/virufolk.ee\/en\/wp-json\/wp\/v2\/comments?post=2502"}],"version-history":[{"count":24,"href":"https:\/\/virufolk.ee\/en\/wp-json\/wp\/v2\/pages\/2502\/revisions"}],"predecessor-version":[{"id":3503,"href":"https:\/\/virufolk.ee\/en\/wp-json\/wp\/v2\/pages\/2502\/revisions\/3503"}],"wp:attachment":[{"href":"https:\/\/virufolk.ee\/en\/wp-json\/wp\/v2\/media?parent=2502"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}