PageSourceSearch

https://dodorvibe.com/

html dodorvibe.com collected 2026-10-02 00:29:00 UTC 178,988 bytes, 3,190 lines download raw bytes

1<!doctype html>
2<html lang="en-US">
3<head>
4	<meta charset="UTF-8">
5	<meta name="viewport" content="width=device-width, initial-scale=1">
6	<link rel="profile" href="https://gmpg.org/xfn/11">
7	<meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' />
8
9	<!-- This site is optimized with the Yoast SEO plugin v28.6 - https://yoast.com/product/yoast-seo-wordpress/ -->
10	<title>DodorVibe FM | Live Haitian Radio, Konpa &amp; Culture</title>
11	<meta name="description" content="Stream DodorVibe FM live 24/7! Your home for Haitian radio, konpa, kreyòl talk, and tropical vibes. Broadcasting from Little Haiti to the world. Tune in now!" />
12	<link rel="canonical" href="https://dodorvibe.com/" />
13	<meta property="og:locale" content="en_US" />
14	<meta property="og:type" content="website" />
15	<meta property="og:title" content="DodorVibe FM | Live Haitian Radio, Konpa &amp; Culture" />
16	<meta property="og:description" content="Stream DodorVibe FM live 24/7! Your home for Haitian radio, konpa, kreyòl talk, and tropical vibes. Broadcasting from Little Haiti to the world. Tune in now!" />
17	<meta property="og:url" content="https://dodorvibe.com/" />
18	<meta property="og:site_name" content="DodorVibe" />
19	<meta property="article:publisher" content="https://www.facebook.com/profile.php?id=61555104878744" />
20	<meta property="article:modified_time" content="2026-08-26T17:14:56+00:00" />
21	<meta property="og:image" content="https://dodorvibe.com/wp-content/uploads/2026/06/DodorVibeFMHero-1.png" />
22	<meta property="og:image:width" content="1536" />
23	<meta property="og:image:height" content="825" />
24	<meta property="og:image:type" content="image/png" />
25	<meta name="twitter:card" content="summary_large_image" />
26	
26<script type="application/ld+json" class="yoast-schema-graph">{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/dodorvibe.com\/","url":"https:\/\/dodorvibe.com\/","name":"DodorVibe FM | Live Haitian Radio, Konpa & Culture","isPartOf":{"@id":"https:\/\/dodorvibe.com\/#website"},"about":{"@id":"https:\/\/dodorvibe.com\/#organization"},"primaryImageOfPage":{"@id":"https:\/\/dodorvibe.com\/#primaryimage"},"image":{"@id":"https:\/\/dodorvibe.com\/#primaryimage"},"thumbnailUrl":"https:\/\/dodorvibe.com\/wp-content\/uploads\/2026\/06\/DodorVibeFMHero-1-1024x550.png","datePublished":"2026-04-14T01:19:22+00:00","dateModified":"2026-08-26T17:14:56+00:00","description":"Stream DodorVibe FM live 24\/7! Your home for Haitian radio, konpa, kreyòl talk, and tropical vibes. Broadcasting from Little Haiti to the world. Tune in now!","breadcrumb":{"@id":"https:\/\/dodorvibe.com\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/dodorvibe.com\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/dodorvibe.com\/#primaryimage","url":"https:\/\/dodorvibe.com\/wp-content\/uploads\/2026\/06\/DodorVibeFMHero-1.png","contentUrl":"https:\/\/dodorvibe.com\/wp-content\/uploads\/2026\/06\/DodorVibeFMHero-1.png","width":1536,"height":825},{"@type":"BreadcrumbList","@id":"https:\/\/dodorvibe.com\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home"}]},{"@type":"WebSite","@id":"https:\/\/dodorvibe.com\/#website","url":"https:\/\/dodorvibe.com\/","name":"DodorVibe FM","description":"","publisher":{"@id":"https:\/\/dodorvibe.com\/#organization"},"alternateName":"DodorVibe","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/dodorvibe.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/dodorvibe.com\/#organization","name":"DodorVibe FM","url":"https:\/\/dodorvibe.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/dodorvibe.com\/#\/schema\/logo\/image\/","url":"https:\/\/dodorvibe.com\/wp-content\/uploads\/2024\/01\/cropped-Dodor-Vibe-FM_trans-NoText.png","contentUrl":"https:\/\/dodorvibe.com\/wp-content\/uploads\/2024\/01\/cropped-Dodor-Vibe-FM_trans-NoText.png","width":512,"height":512,"caption":"DodorVibe FM"},"image":{"@id":"https:\/\/dodorvibe.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/profile.php?id=61555104878744"]}]}</script>
26
27	<!-- / Yoast SEO plugin. -->
28
29
30<link rel='dns-prefetch' href='//maps.googleapis.com' />
31<link rel='dns-prefetch' href='//www.google.com' />
32<link rel='dns-prefetch' href='//collect.commerce.godaddy.com' />
33<link rel="alternate" type="application/rss+xml" title="DodorVibe &raquo; Feed" href="https://dodorvibe.com/feed/" />
34<link rel="alternate" type="application/rss+xml" title="DodorVibe &raquo; Comments Feed" href="https://dodorvibe.com/comments/feed/" />
35<link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://dodorvibe.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fdodorvibe.com%2F" />
36<link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://dodorvibe.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fdodorvibe.com%2F&#038;format=xml" />
37<style id="wp-img-auto-sizes-contain-inline-css">
38img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}
39/*# sourceURL=wp-img-auto-sizes-contain-inline-css */
40</style>
41<link rel='stylesheet' id='stripe-main-styles-css' href='https://dodorvibe.com/wp-content/mu-plugins/vendor/godaddy/mwc-core/assets/css/stripe-settings.css' media='all' />
42<link rel='stylesheet' id='godaddy-payments-payinperson-main-styles-css' href='https://dodorvibe.com/wp-content/mu-plugins/vendor/godaddy/mwc-core/assets/css/pay-in-person-method.css' media='all' />
43<style id="wp-emoji-styles-inline-css">
44
45	img.wp-smiley, img.emoji {
46		display: inline !important;
47		border: none !important;
48		box-shadow: none !important;
49		height: 1em !important;
50		width: 1em !important;
51		margin: 0 0.07em !important;
52		vertical-align: -0.1em !important;
53		background: none !important;
54		padding: 0 !important;
55	}
56/*# sourceURL=wp-emoji-styles-inline-css */
57</style>
58<style id="site-designer-shared-pattern-classes-inline-css">
59/* Dark cover/section overlay + on-dark text. */
60body .wp-site-blocks .is-style-overlay-dark .wp-block-cover__background { background-color: var(--wp--preset--color--base-3); color: var(--wp--preset--color--contrast-3); }
61.wp-block-cover.is-style-overlay-dark .wp-block-cover__background.has-background-dim { opacity: 0.50 !important; }
62:is(.wp-block-designsetgo-section, .wp-block-designsetgo-scroll-slides).is-style-overlay-dark { --dsgo-overlay-color: var(--wp--preset--color--base-3); --dsgo-overlay-opacity: 0.50; color: var(--wp--preset--color--contrast-3); }
63.dsgo-image-accordion-item.is-style-overlay-dark { --dsgo-overlay-color: var(--wp--preset--color--base-3); }
64.wp-block-group.has-background.is-style-overlay-dark { box-shadow: inset 0 0 0 9999px color-mix(in srgb, var(--wp--preset--color--base-3) 50%, transparent); }
65body .wp-site-blocks .is-style-overlay-dark, body .wp-site-blocks .is-style-on-dark { --dsgo-text-color: var(--wp--preset--color--contrast-3); color: var(--wp--preset--color--contrast-3) !important; }
66body .wp-site-blocks .is-style-overlay-dark :is(h1,h2,h3,h4,h5,h6,p,li,blockquote,cite), body .wp-site-blocks .is-style-on-dark :is(h1,h2,h3,h4,h5,h6,p,li,blockquote,cite) { color: var(--wp--preset--color--contrast-3) !important; }
67
68/* Solid dark section background + light text. */
69.is-style-bg-dark { background-color: var(--wp--preset--color--contrast); color: var(--wp--preset--color--base); }
70.is-style-bg-dark a { color: var(--wp--preset--color--base); }
71/*# sourceURL=site-designer-shared-pattern-classes-inline-css */
72</style>
73<style id="global-styles-inline-css">
74:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,0) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);
74--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}.wp-block-button{--wp--preset--dimension--25: 25%;--wp--preset--dimension--50: 50%;--wp--preset--dimension--75: 75%;--wp--preset--dimension--100: 100%;}:root { --wp--style--global--content-size: 800px;--wp--style--global--wide-size: 1200px; }:where(body) { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.wp-site-blocks) > * { margin-block-start: 24px; margin-block-end: 0; }:where(.wp-site-blocks) > :first-child { margin-block-start: 0; }:where(.wp-site-blocks) > :last-child { margin-block-end: 0; }:root { --wp--style--block-gap: 24px; }:root :where(.is-layout-flow) > :first-child{margin-block-start: 0;}:root :where(.is-layout-flow) > :last-child{margin-block-end: 0;}:root :where(.is-layout-flow) > *{margin-block-start: 24px;margin-block-end: 0;}:root :where(.is-layout-constrained) > :first-child{margin-block-start: 0;}:root :where(.is-layout-constrained) > :last-child{margin-block-end: 0;}:root :where(.is-layout-constrained) > *{margin-block-start: 24px;margin-block-end: 0;}:root :where(.is-layout-flex){gap: 24px;}:root :where(.is-layout-grid){gap: 24px;}.is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}
74.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
75:root :where(.wp-block-icon svg){width: 24px;}
76:root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;}
77/*# sourceURL=global-styles-inline-css */
78</style>
79<link rel='stylesheet' id='qt_ajax_pageload_style-css' href='https://dodorvibe.com/wp-content/plugins/qt-ajax-pageload/qt-apl-style.css?ver=7.1.2' media='all' />
80<link rel='stylesheet' id='qtPlacesStyle-css' href='https://dodorvibe.com/wp-content/plugins/qt-places/inc/frontend/assets/styles.css?ver=7.1.2' media='all' />
81<link rel='stylesheet' id='font-awesome-css' href='https://dodorvibe.com/wp-content/plugins/elementor/assets/lib/font-awesome/css/font-awesome.min.css?ver=4.7.0' media='all' />
82<link rel='stylesheet' id='QtswipeStyle-css' href='https://dodorvibe.com/wp-content/plugins/qt-swipebox/swipebox/css/swipebox.min.css?ver=7.1.2' media='all' />
83<link rel='stylesheet' id='vdl_css-css' href='https://dodorvibe.com/wp-content/plugins/qt-videogalleries/assets/style.css?ver=7.1.2' media='all' />
84<link rel='stylesheet' id='woocommerce-layout-css' href='https://dodorvibe.com/wp-content/plugins/woocommerce/assets/css/woocommerce-layout.css?ver=11.1.2' media='all' />
85<link rel='stylesheet' id='woocommerce-smallscreen-css' href='https://dodorvibe.com/wp-content/plugins/woocommerce/assets/css/woocommerce-smallscreen.css?ver=11.1.2' media='only screen and (max-width: 768px)' />
86<link rel='stylesheet' id='woocommerce-general-css' href='https://dodorvibe.com/wp-content/plugins/woocommerce/assets/css/woocommerce.css?ver=11.1.2' media='all' />
87<style id="woocommerce-inline-inline-css">
88.woocommerce form .form-row .required { visibility: visible; }
89/*# sourceURL=woocommerce-inline-inline-css */
90</style>
91<link rel='stylesheet' id='wp-theme-css' href='https://dodorvibe.com/wp-includes/css/dist/theme/design-tokens.min.css?ver=7.1.2' media='all' />
92<link rel='stylesheet' id='wp-components-css' href='https://dodorvibe.com/wp-includes/css/dist/components/style.min.css?ver=7.1.2' media='all' />
93<link rel='stylesheet' id='godaddy-styles-css' href='https://dodorvibe.com/wp-content/mu-plugins/vendor/wpex/godaddy-launch/includes/Dependencies/GoDaddy/Styles/build/latest.css?ver=2.0.2' media='all' />
94<link rel='stylesheet' id='hello-elementor-css' href='https://dodorvibe.com/wp-content/themes/hello-elementor/assets/css/reset.css?ver=3.5.1' media='all' />
95<link rel='stylesheet' id='hello-elementor-theme-style-css' href='https://dodorvibe.com/wp-content/themes/hello-elementor/assets/css/theme.css?ver=3.5.1' media='all' />
96<link rel='stylesheet' id='hello-elementor-header-footer-css' href='https://dodorvibe.com/wp-content/themes/hello-elementor/assets/css/header-footer.css?ver=3.5.1' media='all' />
97<link rel='stylesheet' id='elementor-frontend-css' href='https://dodorvibe.com/wp-content/plugins/elementor/assets/css/frontend.min.css?ver=4.3.3' media='all' />
98<style id="elementor-frontend-inline-css">
99.wpr-dc-hidden{display:none!important}.wpr-dc-fallback{margin:0;padding:0}
100/*# sourceURL=elementor-frontend-inline-css */
101</style>
102<link rel='stylesheet' id='elementor-post-54-css' href='https://dodorvibe.com/wp-content/uploads/elementor/css/post-54.css?ver=1790825048' media='all' />
103<link rel='stylesheet' id='e-sticky-css' href='https://dodorvibe.com/wp-content/plugins/pro-elements/assets/css/modules/sticky.min.css?ver=4.2.3' media='all' />
104<link rel='stylesheet' id='widget-image-css' href='https://dodorvibe.com/wp-content/plugins/elementor/assets/css/widget-image.min.css?ver=4.3.3' media='all' />
105<link rel='stylesheet' id='widget-heading-css' href='https://dodorvibe.com/wp-content/plugins/elementor/assets/css/widget-heading.min.css?ver=4.3.3' media='all' />
106<link rel='stylesheet' id='widget-google_maps-css' href='https://dodorvibe.com/wp-content/plugins/elementor/assets/css/widget-google_maps.min.css?ver=4.3.3' media='all' />
107<link rel='stylesheet' id='elementor-post-5497-css' href='https://dodorvibe.com/wp-content/uploads/elementor/css/post-5497.css?ver=1790825901' media='all' />
108<link rel='stylesheet' id='elementor-post-5550-css' href='https://dodorvibe.com/wp-content/uploads/elementor/css/post-5550.css?ver=1790825901' media='all' />
109<link rel='stylesheet' id='elementor-post-5557-css' href='https://dodorvibe.com/wp-content/uploads/elementor/css/post-5557.css?ver=1790825048' media='all' />
110<link rel='stylesheet' id='mwc-payments-payment-form-css' href='https://dodorvibe.com/wp-content/mu-plugins/vendor/godaddy/mwc-core/assets/css/payment-form.css' media='all' />
111<link rel='stylesheet' id='wpr-text-animations-css-css' href='https://dodorvibe.com/wp-content/plugins/royal-elementor-addons/assets/css/lib/animations/text-animations.min.css?ver=1.7.
1111068' media='all' />
112<link rel='stylesheet' id='wpr-addons-css-css' href='https://dodorvibe.com/wp-content/plugins/royal-elementor-addons/assets/css/frontend.min.css?ver=1.7.1068' media='all' />
113<link rel='stylesheet' id='font-awesome-5-all-css' href='https://dodorvibe.com/wp-content/plugins/elementor/assets/lib/font-awesome/css/all.min.css?ver=1.7.1068' media='all' />
114<link rel='stylesheet' id='elementor-gf-local-roboto-css' href='https://dodorvibe.com/wp-content/uploads/elementor/google-fonts/css/roboto.css?ver=1742260000' media='all' />
115<link rel='stylesheet' id='elementor-gf-local-robotoslab-css' href='https://dodorvibe.com/wp-content/uploads/elementor/google-fonts/css/robotoslab.css?ver=1742260003' media='all' />
116<link rel='stylesheet' id='elementor-gf-sora-css' href='https://fonts.googleapis.com/css?family=Sora:100,100italic,200,200italic,300,300italic,400,400italic,500,500italic,600,600italic,700,700italic,800,800italic,900,900italic&display=swap' media='all' />
117<link rel='stylesheet' id='elementor-gf-inter-css' href='https://fonts.googleapis.com/css?family=Inter:100,100italic,200,200italic,300,300italic,400,400italic,500,500italic,600,600italic,700,700italic,800,800italic,900,900italic&display=swap' media='all' />
118<script id="jquery-core-js" data-cfasync="false" src="https://dodorvibe.com/wp-includes/js/jquery/jquery.min.js?ver=3.7.1"></script>
vendor: 1 bytes, line 118
118
119<script id="jquery-migrate-js" data-cfasync="false" src="https://dodorvibe.com/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1"></script>
vendor: 1 bytes, line 119
119
120<script id="qt-google-maps-js" src="https://maps.googleapis.com/maps/api/js?ver=7.1.2"></script>
vendor: 1 bytes, line 120
120
121<script id="google-jsapi-js" src="https://www.google.com/jsapi?ver=7.1.2"></script>
vendor: 1 bytes, line 121
121
122<script data-wp-strategy="defer" defer id="wc-jquery-blockui-js" src="https://dodorvibe.com/wp-content/plugins/woocommerce/assets/js/jquery-blockui/jquery.blockUI.min.js?ver=2.7.0-wc.11.1.2"></script>
vendor: 1 bytes, line 122
122
123<script id="wc-add-to-cart-js-extra">
124var wc_add_to_cart_params = {"ajax_url":"/wp-admin/admin-ajax.php","wc_ajax_url":"/?wc-ajax=%%endpoint%%","i18n_view_cart":"View cart","cart_url":"https://dodorvibe.com/my-cart/","is_cart":"","cart_redirect_after_add":"yes"};
125//# sourceURL=wc-add-to-cart-js-extra
126</script>
vendor: 1 bytes, line 126
126
127<script data-wp-strategy="defer" defer id="wc-add-to-cart-js" src="https://dodorvibe.com/wp-content/plugins/woocommerce/assets/js/frontend/add-to-cart.min.js?ver=11.1.2"></script>
vendor: 1 bytes, line 127
127
128<script data-wp-strategy="defer" defer id="wc-js-cookie-js" src="https://dodorvibe.com/wp-content/plugins/woocommerce/assets/js/js-cookie/js.cookie.min.js?ver=2.1.4-wc.11.1.2"></script>
vendor: 1 bytes, line 128
128
129<script id="woocommerce-js-extra">
130var woocommerce_params = {"ajax_url":"/wp-admin/admin-ajax.php","wc_ajax_url":"/?wc-ajax=%%endpoint%%","i18n_password_show":"Show password","i18n_password_hide":"Hide password"};
131//# sourceURL=woocommerce-js-extra
132</script>
vendor: 1 bytes, line 132
132
133<script data-wp-strategy="defer" defer id="woocommerce-js" src="https://dodorvibe.com/wp-content/plugins/woocommerce/assets/js/frontend/woocommerce.min.js?ver=11.1.2"></script>
vendor: 1 bytes, line 133
133
134<script id="poynt-collect-sdk-js" src="https://collect.commerce.godaddy.com/sdk.js"></script>
vendor: 1 bytes, line 134
134
135<script id="mwc-payments-poynt-payment-form-js-extra">
136var poyntPaymentFormI18n = {"errorMessages":{"genericError":"An error occurred, please try again or try an alternate form of payment.","missingCardDetails":"Missing card details.","missingBillingDetails":"Missing billing details."}};
137//# sourceURL=mwc-payments-poynt-payment-form-js-extra
138</script>
vendor: 1 bytes, line 138
138
139<script id="mwc-payments-poynt-payment-form-js" src="https://dodorvibe.com/wp-content/mu-plugins/vendor/godaddy/mwc-core/assets/js/payments/frontend/poynt.js"></script>
139
140<link rel="https://api.w.org/" href="https://dodorvibe.com/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://dodorvibe.com/wp-json/wp/v2/pages/5497" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://dodorvibe.com/xmlrpc.php?rsd" />
141<meta name="generator" content="WordPress 7.1.2" />
142<meta name="generator" content="WooCommerce 11.1.2" />
143<link rel='shortlink' href='https://dodorvibe.com/' />
144	<noscript><style>.woocommerce-product-gallery{ opacity: 1 !important; }</style></noscript>
145	<meta name="generator" content="Elementor 4.3.3; features: e_font_icon_svg, additional_custom_breakpoints; settings: css_print_method-external, google_font-enabled, font_display-swap">
146			<style>
147				.e-con.e-parent:nth-of-type(n+4):not(.e-lazyloaded):not(.e-no-lazyload),
148				.e-con.e-parent:nth-of-type(n+4):not(.e-lazyloaded):not(.e-no-lazyload) * {
149					background-image: none !important;
150				}
151				@media screen and (max-height: 1024px) {
152					.e-con.e-parent:nth-of-type(n+3):not(.e-lazyloaded):not(.e-no-lazyload),
153					.e-con.e-parent:nth-of-type(n+3):not(.e-lazyloaded):not(.e-no-lazyload) * {
154						background-image: none !important;
155					}
156				}
157				@media screen and (max-height: 640px) {
158					.e-con.e-parent:nth-of-type(n+2):not(.e-lazyloaded):not(.e-no-lazyload),
159					.e-con.e-parent:nth-of-type(n+2):not(.e-lazyloaded):not(.e-no-lazyload) * {
160						background-image: none !important;
161					}
162				}
163			</style>
164			<link rel="icon" href="https://dodorvibe.com/wp-content/uploads/2024/01/cropped-Dodor-Vibe-FM_trans-NoText-32x32.png" sizes="32x32" />
165<link rel="icon" href="https://dodorvibe.com/wp-content/uploads/2024/01/cropped-Dodor-Vibe-FM_trans-NoText-192x192.png" sizes="192x192" />
166<link rel="apple-touch-icon" href="https://dodorvibe.com/wp-content/uploads/2024/01/cropped-Dodor-Vibe-FM_trans-NoText-180x180.png" />
167<meta name="msapplication-TileImage" content="https://dodorvibe.com/wp-content/uploads/2024/01/cropped-Dodor-Vibe-FM_trans-NoText-270x270.png" />
168<style id="wp-site-designer-contrast-fallback"> .wp-block-group:not([data-dsgo-inline-bg]),.wp-block-column:not([data-dsgo-inline-bg]),.wp-block-columns:not([data-dsgo-inline-bg]){--dsgo-text-color:initial;} :is(.wp-block-designsetgo-section,.wp-block-group,.wp-block-column).has-background:not([class*="-background-color"]):not(.has-text-color):not(.is-style-footer-section):not(.is-style-header-section),.wp-block-cover:not(.has-text-color){color:var(--wp--preset--color--contrast-3) !important;--dsgo-text-color:var(--wp--preset--color--contrast-3);} body .wp-site-blocks :is(:is(.wp-block-designsetgo-section,.wp-block-group,.wp-block-column).has-background:not([class*="-background-color"]):not(.has-text-color):not(.is-style-footer-section):not(.is-style-header-section),.wp-block-cover) h1:not(.has-text-color):where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(:is(.wp-block-designsetgo-section,.wp-block-group,.wp-block-column).has-background:not([class*="-background-color"]):not(.has-text-color):not(.is-style-footer-section):not(.is-style-header-section),.wp-block-cover) h2:not(.has-text-color):where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(:is(.wp-block-designsetgo-section,.wp-block-group,.wp-block-column).has-background:not([class*="-background-color"]):not(.has-text-color):not(.is-style-footer-section):not(.is-style-header-section),.wp-block-cover) h3:not(.has-text-color):where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(:is(.wp-block-designsetgo-section,.wp-block-group,.wp-block-column).has-background:not([class*="-background-color"]):not(.has-text-color):not(.is-style-footer-section):not(.is-style-header-section),.wp-block-cover) h4:not(.has-text-color):where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(:is(.wp-block-designsetgo-section,.wp-block-group,.wp-block-column).has-background:not([class*="-background-color"]):not(.has-text-color):not(.is-style-footer-section):not(.is-style-header-section),.wp-block-cover) h5:not
168(.has-text-color):where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(:is(.wp-block-designsetgo-section,.wp-block-group,.wp-block-column).has-background:not([class*="-background-color"]):not(.has-text-color):not(.is-style-footer-section):not(.is-style-header-section),.wp-block-cover) h6:not(.has-text-color):where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(:is(.wp-block-designsetgo-section,.wp-block-group,.wp-block-column).has-background:not([class*="-background-color"]):not(.has-text-color):not(.is-style-footer-section):not(.is-style-header-section),.wp-block-cover) p:not(.has-text-color):where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(:is(.wp-block-designsetgo-section,.wp-block-group,.wp-block-column).has-background:not([class*="-background-color"]):not(.has-text-color):not(.is-style-footer-section):not(.is-style-header-section),.wp-block-cover) a:where(:not(.wp-element-button):not(.wp-block-social-link-anchor)):not(.has-text-color):where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(:is(.wp-block-designsetgo-section,.wp-block-group,.wp-block-column).has-background:not([class*="-background-color"]):not(.has-text-color):not(.is-style-footer-section):not(.is-style-header-section),.wp-block-cover) .wp-element-caption:not(.has-text-color):where(:not(.elementor *):not([data-elementor-type] *)){color:var(--dsgo-text-color,inherit) !important;} body .wp-site-blocks :is(.wp-block-designsetgo-section,.wp-block-group,.wp-block-column)[data-dsgo-inline-bg] .wp-block-button:is([class*="is-style-outline"],[class*="is-style-secondary"]) .wp-element-button{color:var(--dsgo-text-color,inherit) !important;border-color:currentColor !important;}body .wp-site-blocks :is(.wp-block-designsetgo-section,.wp-block-group,.wp-block-column)[data-dsgo-inline-bg] .wp-block-button:is([class*="is-style-outline"],[class*="is-style-secondary"]) .wp-element-button:hover{opacity:0.75;} body .wp-site-blocks [data-dsgo-inline-bg] h1:not(.has-text-color):where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks [data-dsgo-inline-bg] h2:not(.has-text-color):where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks [data-dsgo-inline-bg] h3:not(.has-text-color):where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks [data-dsgo-inline-bg] h4:not(.has-text-color):where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks [data-dsgo-inline-bg] h5:not(.has-text-color):where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks [data-dsgo-inline-bg] h6:not(.has-text-color):where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks [data-dsgo-inline-bg] p:not(.has-text-color):where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks [data-dsgo-inline-bg] a:where(:not(.wp-element-button):not(.wp-block-social-link-anchor)):not(.has-text-color):where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks [data-dsgo-inline-bg] .wp-element-caption:not(.has-text-color):where(:not(.elementor *):not([data-elementor-type] *)){color:var(--dsgo-text-color,inherit) !important;} .wp-block-designsetgo-section.has-background:not([data-dsgo-inline-bg]):not(.has-text-color){color:var(--wp--preset--color--contrast);--dsgo-text-color:var(--wp--preset--color--contrast);} :is(.wp-block-group,.wp-block-column).is-style-section-1:not(:is(.has-white-background-color,.has-black-background-color)),.has-background:is(.wp-block-group,.wp-block-column).is-style-section-1:not(:is(.has-white-background-color,.has-black-background-color)),.has-text-color:is(.wp-block-group,.wp-block-column).is-style-section-1:not(:is(.has-white-background-color,.has-black-background-color)){background-color:var(--wp--preset--color--accent-5);color:var(--wp--preset--color--contrast);} body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-1:not(:is(.has-white-background-color,.has-black-background-color)) h1:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-1:not(:is(.has-white-background-color,.has-black-background-color)) h2:where(:not
168(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-1:not(:is(.has-white-background-color,.has-black-background-color)) h3:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-1:not(:is(.has-white-background-color,.has-black-background-color)) h4:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-1:not(:is(.has-white-background-color,.has-black-background-color)) h5:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-1:not(:is(.has-white-background-color,.has-black-background-color)) h6:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-1:not(:is(.has-white-background-color,.has-black-background-color)) p:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-1:not(:is(.has-white-background-color,.has-black-background-color)) a:where(:not(.wp-element-button):not(.wp-block-social-link-anchor)):where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-1:not(:is(.has-white-background-color,.has-black-background-color)) .wp-element-caption:where(:not(.elementor *):not([data-elementor-type] *)){color:var(--wp--preset--color--contrast);} :is(.wp-block-group,.wp-block-column).is-style-section-2:not(:is(.has-white-background-color,.has-black-background-color)),.has-background:is(.wp-block-group,.wp-block-column).is-style-section-2:not(:is(.has-white-background-color,.has-black-background-color)),.has-text-color:is(.wp-block-group,.wp-block-column).is-style-section-2:not(:is(.has-white-background-color,.has-black-background-color)){background-color:var(--wp--preset--color--accent-2);color:var(--wp--preset--color--contrast);} body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-2:not(:is(.has-white-background-color,.has-black-background-color)) h1:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-2:not(:is(.has-white-background-color,.has-black-background-color)) h2:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-2:not(:is(.has-white-background-color,.has-black-background-color)) h3:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-2:not(:is(.has-white-background-color,.has-black-background-color)) h4:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-2:not(:is(.has-white-background-color,.has-black-background-color)) h5:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-2:not(:is(.has-white-background-color,.has-black-background-color)) h6:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-2:not(:is(.has-white-background-color,.has-black-background-color)) p:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-2:not(:is(.has-white-background-color,.has-black-background-color)) a:where(:not(.wp-element-button):not(.wp-block-social-link-anchor)):where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-2:not(:is(.has-white-background-color,.has-black-background-color)) .wp-element-caption:where(:not(.elementor *):not([data-elementor-type] *)){color:var(--wp--preset--color--contrast);} :is(.wp-block-group,.wp-block-column).is-style-section-3:not(:is(.has-white-background-color,.has-black-background-color)),.has-background:is(.wp-block-group,.wp-block-column).is-style-section-3:not(:is(.has-white-background-color,.has-black-background-color)),.has-text-color:is(.wp-block-group,.wp-block-column).is-style-section-3:not(:is(.has-white-background-color,.has-black-background-color)){background-color:var(--wp--preset--color--accent-1);color:var(--wp--preset--color--contrast);} body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-3:not(:is(.has-white-background-color,.has-black-background-color)) h1:where(:not
168(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-3:not(:is(.has-white-background-color,.has-black-background-color)) h2:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-3:not(:is(.has-white-background-color,.has-black-background-color)) h3:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-3:not(:is(.has-white-background-color,.has-black-background-color)) h4:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-3:not(:is(.has-white-background-color,.has-black-background-color)) h5:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-3:not(:is(.has-white-background-color,.has-black-background-color)) h6:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-3:not(:is(.has-white-background-color,.has-black-background-color)) p:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-3:not(:is(.has-white-background-color,.has-black-background-color)) a:where(:not(.wp-element-button):not(.wp-block-social-link-anchor)):where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-3:not(:is(.has-white-background-color,.has-black-background-color)) .wp-element-caption:where(:not(.elementor *):not([data-elementor-type] *)){color:var(--wp--preset--color--contrast);} :is(.wp-block-group,.wp-block-column).is-style-section-4:not(:is(.has-white-background-color,.has-black-background-color)),.has-background:is(.wp-block-group,.wp-block-column).is-style-section-4:not(:is(.has-white-background-color,.has-black-background-color)),.has-text-color:is(.wp-block-group,.wp-block-column).is-style-section-4:not(:is(.has-white-background-color,.has-black-background-color)){background-color:var(--wp--preset--color--accent-3);color:var(--wp--preset--color--accent-2);} body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-4:not(:is(.has-white-background-color,.has-black-background-color)) h1:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-4:not(:is(.has-white-background-color,.has-black-background-color)) h2:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-4:not(:is(.has-white-background-color,.has-black-background-color)) h3:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-4:not(:is(.has-white-background-color,.has-black-background-color)) h4:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-4:not(:is(.has-white-background-color,.has-black-background-color)) h5:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-4:not(:is(.has-white-background-color,.has-black-background-color)) h6:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-4:not(:is(.has-white-background-color,.has-black-background-color)) p:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-4:not(:is(.has-white-background-color,.has-black-background-color)) a:where(:not(.wp-element-button):not(.wp-block-social-link-anchor)):where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-4:not(:is(.has-white-background-color,.has-black-background-color)) .wp-element-caption:where(:not
168(.elementor *):not([data-elementor-type] *)){color:var(--wp--preset--color--accent-2);} :is(.wp-block-group,.wp-block-column).is-style-section-5:not(:is(.has-white-background-color,.has-black-background-color)),.has-background:is(.wp-block-group,.wp-block-column).is-style-section-5:not(:is(.has-white-background-color,.has-black-background-color)),.has-text-color:is(.wp-block-group,.wp-block-column).is-style-section-5:not(:is(.has-white-background-color,.has-black-background-color)){background-color:var(--wp--preset--color--contrast);color:var(--wp--preset--color--base);} body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-5:not(:is(.has-white-background-color,.has-black-background-color)) h1:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-5:not(:is(.has-white-background-color,.has-black-background-color)) h2:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-5:not(:is(.has-white-background-color,.has-black-background-color)) h3:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-5:not(:is(.has-white-background-color,.has-black-background-color)) h4:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-5:not(:is(.has-white-background-color,.has-black-background-color)) h5:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-5:not(:is(.has-white-background-color,.has-black-background-color)) h6:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-5:not(:is(.has-white-background-color,.has-black-background-color)) p:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-5:not(:is(.has-white-background-color,.has-black-background-color)) a:where(:not(.wp-element-button):not(.wp-block-social-link-anchor)):where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks :is(.wp-block-group,.wp-block-column).is-style-section-5:not(:is(.has-white-background-color,.has-black-background-color)) .wp-element-caption:where(:not(.elementor *):not([data-elementor-type] *)){color:var(--wp--preset--color--base);} .wp-block-designsetgo-section.is-style-section-1:not(:is(.has-white-background-color,.has-black-background-color)),.has-background.wp-block-designsetgo-section.is-style-section-1:not(:is(.has-white-background-color,.has-black-background-color)),.has-text-color.wp-block-designsetgo-section.is-style-section-1:not(:is(.has-white-background-color,.has-black-background-color)){background-color:var(--wp--preset--color--base);color:var(--wp--preset--color--contrast);} body .wp-site-blocks .wp-block-designsetgo-section.is-style-section-1:not(:is(.has-white-background-color,.has-black-background-color)) h1:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks .wp-block-designsetgo-section.is-style-section-1:not(:is(.has-white-background-color,.has-black-background-color)) h2:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks .wp-block-designsetgo-section.is-style-section-1:not(:is(.has-white-background-color,.has-black-background-color)) h3:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks .wp-block-designsetgo-section.is-style-section-1:not(:is(.has-white-background-color,.has-black-background-color)) h4:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks .wp-block-designsetgo-section.is-style-section-1:not(:is(.has-white-background-color,.has-black-background-color)) h5:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks .wp-block-designsetgo-section.is-style-section-1:not(:is(.has-white-background-color,.has-black-background-color)) h6:where(:not
168(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks .wp-block-designsetgo-section.is-style-section-1:not(:is(.has-white-background-color,.has-black-background-color)) p:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks .wp-block-designsetgo-section.is-style-section-1:not(:is(.has-white-background-color,.has-black-background-color)) a:where(:not(.wp-element-button):not(.wp-block-social-link-anchor)):where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks .wp-block-designsetgo-section.is-style-section-1:not(:is(.has-white-background-color,.has-black-background-color)) .wp-element-caption:where(:not(.elementor *):not([data-elementor-type] *)){color:var(--wp--preset--color--contrast);} .wp-block-designsetgo-section.is-style-section-2:not(:is(.has-white-background-color,.has-black-background-color)),.has-background.wp-block-designsetgo-section.is-style-section-2:not(:is(.has-white-background-color,.has-black-background-color)),.has-text-color.wp-block-designsetgo-section.is-style-section-2:not(:is(.has-white-background-color,.has-black-background-color)){background-color:var(--wp--preset--color--base-2);color:var(--wp--preset--color--contrast-2);} body .wp-site-blocks .wp-block-designsetgo-section.is-style-section-2:not(:is(.has-white-background-color,.has-black-background-color)) h1:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks .wp-block-designsetgo-section.is-style-section-2:not(:is(.has-white-background-color,.has-black-background-color)) h2:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks .wp-block-designsetgo-section.is-style-section-2:not(:is(.has-white-background-color,.has-black-background-color)) h3:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks .wp-block-designsetgo-section.is-style-section-2:not(:is(.has-white-background-color,.has-black-background-color)) h4:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks .wp-block-designsetgo-section.is-style-section-2:not(:is(.has-white-background-color,.has-black-background-color)) h5:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks .wp-block-designsetgo-section.is-style-section-2:not(:is(.has-white-background-color,.has-black-background-color)) h6:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks .wp-block-designsetgo-section.is-style-section-2:not(:is(.has-white-background-color,.has-black-background-color)) p:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks .wp-block-designsetgo-section.is-style-section-2:not(:is(.has-white-background-color,.has-black-background-color)) a:where(:not(.wp-element-button):not(.wp-block-social-link-anchor)):where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks .wp-block-designsetgo-section.is-style-section-2:not(:is(.has-white-background-color,.has-black-background-color)) .wp-element-caption:where(:not(.elementor *):not([data-elementor-type] *)){color:var(--wp--preset--color--contrast-2);} .wp-block-designsetgo-section.is-style-section-4:not(:is(.has-white-background-color,.has-black-background-color)),.has-background.wp-block-designsetgo-section.is-style-section-4:not(:is(.has-white-background-color,.has-black-background-color)),.has-text-color.wp-block-designsetgo-section.is-style-section-4:not(:is(.has-white-background-color,.has-black-background-color)){background-color:var(--wp--preset--color--base-3);color:var(--wp--preset--color--contrast);} body .wp-site-blocks .wp-block-designsetgo-section.is-style-section-4:not(:is(.has-white-background-color,.has-black-background-color)) h1:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks .wp-block-designsetgo-section.is-style-section-4:not(:is(.has-white-background-color,.has-black-background-color)) h2:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks .wp-block-designsetgo-section.is-style-section-4:not(:is(.has-white-background-color,.has-black-background-color)) h3:where(:not
168(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks .wp-block-designsetgo-section.is-style-section-4:not(:is(.has-white-background-color,.has-black-background-color)) h4:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks .wp-block-designsetgo-section.is-style-section-4:not(:is(.has-white-background-color,.has-black-background-color)) h5:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks .wp-block-designsetgo-section.is-style-section-4:not(:is(.has-white-background-color,.has-black-background-color)) h6:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks .wp-block-designsetgo-section.is-style-section-4:not(:is(.has-white-background-color,.has-black-background-color)) p:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks .wp-block-designsetgo-section.is-style-section-4:not(:is(.has-white-background-color,.has-black-background-color)) a:where(:not(.wp-element-button):not(.wp-block-social-link-anchor)):where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks .wp-block-designsetgo-section.is-style-section-4:not(:is(.has-white-background-color,.has-black-background-color)) .wp-element-caption:where(:not(.elementor *):not([data-elementor-type] *)){color:var(--wp--preset--color--contrast);} .wp-block-designsetgo-section.is-style-section-5:not(:is(.has-white-background-color,.has-black-background-color)),.has-background.wp-block-designsetgo-section.is-style-section-5:not(:is(.has-white-background-color,.has-black-background-color)),.has-text-color.wp-block-designsetgo-section.is-style-section-5:not(:is(.has-white-background-color,.has-black-background-color)){background-color:var(--wp--preset--color--contrast);color:var(--wp--preset--color--base);} body .wp-site-blocks .wp-block-designsetgo-section.is-style-section-5:not(:is(.has-white-background-color,.has-black-background-color)) h1:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks .wp-block-designsetgo-section.is-style-section-5:not(:is(.has-white-background-color,.has-black-background-color)) h2:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks .wp-block-designsetgo-section.is-style-section-5:not(:is(.has-white-background-color,.has-black-background-color)) h3:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks .wp-block-designsetgo-section.is-style-section-5:not(:is(.has-white-background-color,.has-black-background-color)) h4:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks .wp-block-designsetgo-section.is-style-section-5:not(:is(.has-white-background-color,.has-black-background-color)) h5:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks .wp-block-designsetgo-section.is-style-section-5:not(:is(.has-white-background-color,.has-black-background-color)) h6:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks .wp-block-designsetgo-section.is-style-section-5:not(:is(.has-white-background-color,.has-black-background-color)) p:where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks .wp-block-designsetgo-section.is-style-section-5:not(:is(.has-white-background-color,.has-black-background-color)) a:where(:not(.wp-element-button):not(.wp-block-social-link-anchor)):where(:not(.elementor *):not([data-elementor-type] *)),body .wp-site-blocks .wp-block-designsetgo-section.is-style-section-5:not(:is(.has-white-background-color,.has-black-background-color)) .wp-element-caption:where(:not(.elementor *):not([data-elementor-type] *)){color:var(--wp--preset--color--base);}   body .wp-site-blocks input:not([type="submit"]):not([type="button"]):not([type="reset"]):not([type="checkbox"]):not([type="radio"]):not([type="file"]):not([type="image"]):not([type="hidden"]),body .wp-site-blocks textarea,body .wp-site-blocks select{background-color:var(--wp--preset--color--base);color:var(--wp--preset--color--contrast);border:1px solid color-mix(in srgb, var(--wp--preset--color--contrast) 30%, transparent);} .wp-site-blocks input[type="submit"]:not(.wp-element-button),.wp-site-blocks button[type="submit"]:not(.wp-element-button){background-color:var(--wp--preset--color--accent-2);color:var(--wp--preset--color--base);border-width:0;padding:12px 30px;font-family:inherit;font-size:var(--wp--preset--font-size--medium, 1rem);line-height:inherit;cursor:pointer;}</style>
169<style id="wpr_lightbox_styles">
170				.lg-backdrop {
171					background-color: rgba(0,0,0,0.6) !important;
172				}
173				.lg-toolbar,
174				.lg-dropdown {
175					background-color: rgba(0,0,0,0.8) !important;
176				}
177				.lg-dropdown:after {
178					border-bottom-color: rgba(0,0,0,0.8) !important;
179				}
180				.lg-sub-html {
181					background-color: rgba(0,0,0,0.8) !important;
182				}
183				.lg-thumb-outer,
184				.lg-progress-bar {
185					background-color: #444444 !important;
186				}
187				.lg-progress {
188					background-color: #a90707 !important;
189				}
190				.lg-icon {
191					color: #efefef !important;
192					font-size: 20px !important;
193				}
194				.lg-icon.lg-toogle-thumb {
195					font-size: 24px !important;
196				}
197				.lg-icon:hover,
198				.lg-dropdown-text:hover {
199					color: #ffffff !important;
200				}
201				.lg-sub-html,
202				.lg-dropdown-text {
203					color: #efefef !important;
204					font-size: 14px !important;
205				}
206				#lg-counter {
207					color: #efefef !important;
208					font-size: 14px !important;
209				}
210				.lg-prev,
211				.lg-next {
212					font-size: 35px !important;
213				}
214
215				/* Defaults */
216				.lg-icon {
217				background-color: transparent !important;
218				}
219
220				#lg-counter {
221				opacity: 0.9;
222				}
223
224				.lg-thumb-outer {
225				padding: 0 10px;
226				}
227
228				.lg-thumb-item {
229				border-radius: 0 !important;
230				border: none !important;
231				opacity: 0.5;
232				}
233
234				.lg-thumb-item.active {
235					opacity: 1;
236				}
237	         </style>		<style id="site-designer-logo-constraints">
238			.wp-block-site-logo.is-default-size img {
239				width: auto;
240				height: auto;
241				max-width: 180px;
242				max-height: 80px;
243			}
244			.wp-block-site-logo img {
245				height: auto;
246			}
247		</style>
248		<style id="kirki-inline-styles"></style>
249		<!-- CSS styles added by QT Subpages Plugin -->
250		<style type="text/css">
251			
252			.vdl-subpages-item  a .detail .title {font-size:13px; }
253			
254			.vdl-subpages-item  a .detail {padding-top:45px !important;}
255			.vdl-subpages-container ul.vdl-subpages-tagcloud li a {
256				
257				
258				
259				
260				
261			}
262			.vdl-subpages-container ul.vdl-subpages-tagcloud li a:hover {}
263			
264			
265			
266			
267			@media (max-width: 768px){
268				.vdl-elementcontents a.vdl-link .detail .title {}
269			}
270			
271		</style>
272		</head>
273<body class="home wp-singular page-template page-template-elementor_header_footer page page-id-5497 page-parent wp-custom-logo wp-embed-responsive wp-theme-hello-elementor theme-hello-elementor woocommerce-no-js eio-default esm-default hello-elementor-default elementor-default elementor-template-full-width elementor-kit-54 elementor-page elementor-page-5497">
274
275
276<a class="skip-link screen-reader-text" href="#content">Skip to content</a>
277
278		<header data-elementor-type="header" data-elementor-id="5550" class="elementor elementor-5550 elementor-location-header" data-elementor-post-type="elementor_library">
279			<div class="elementor-element elementor-element-8f3e31a e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-parent" data-id="8f3e31a" data-element_type="container" data-e-type="container" data-settings="{&quot;sticky&quot;:&quot;top&quot;,&quot;sticky_on&quot;:[&quot;desktop&quot;,&quot;tablet&quot;,&quot;mobile&quot;],&quot;sticky_offset&quot;:0,&quot;sticky_effects_offset&quot;:0,&quot;sticky_anchor_link_offset&quot;:0}">
280		<div class="elementor-element elementor-element-c487339 e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child" data-id="c487339" data-element_type="container" data-e-type="container" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
281					<div class="e-con-inner">
282				<div class="elementor-element elementor-element-6b60395 elementor-widget__width-inherit elementor-widget elementor-widget-html" data-id="6b60395" data-element_type="widget" data-e-type="widget" data-widget_type="html.default">
283				<div class="elementor-widget-container">
284					<style>
285  @import url('https://fonts.googleapis.com/css2?family=Inter:wght@600;700&family=Sora:wght@700;800&display=swap');
286
287  /* Main Wrapper */
288  .dv-nav-inner {
289    display: flex;
290    align-items: center;
291    justify-content: space-between;
292    width: 100%;
293    font-family: 'Inter', system-ui, sans-serif;
294    box-sizing: border-box;
295    position: relative; /* Added for mobile menu positioning */
296  }
297
298  /* 1. Logo Section (Forced to Left) */
299  .dv-nav-brand {
300    display: flex;
301    align-items: center;
302    justify-content: flex-start;
303    gap: 0.5rem;
304    text-decoration: none;
305    flex: 1; /* Takes up exactly 1/3 of the space */
306  }
307
308  .dv-nav-brand img {
309    height: 2.5rem;
310    width: auto;
311    display: block;
312  }
313
314  .dv-nav-brand span {
315    font-family: 'Sora', system-ui, sans-serif;
316    font-size: 1.15rem;
317    font-weight: 800;
318    color: #2a2018;
319    letter-spacing: -0.02em;
320    white-space: nowrap;
321  }
322
323  /* 2. Menu Links Section (Desktop Only) */
324  .dv-nav-links {
325    display: none; /* Hidden on mobile */
326    align-items: center;
327    justify-content: center;
328    gap: 2.5rem;
329    flex: 1; /* Takes up exactly 1/3 of the space */
330    
331    /* Nukes the weird beige box and shadow */
332    background: transparent !important;
333    box-shadow: none !important;
334    border: none !important;
335    padding: 0 !important;
336    margin: 0 !important;
337  }
338
339  @media (min-width: 768px) {
340    .dv-nav-links { display: flex; }
341  }
342
343  .dv-nav-links a {
344    text-decoration: none;
345    font-size: 0.95rem;
346    font-weight: 600;
347    color: #6b5f55;
348    transition: color 0.2s ease;
349    white-space: nowrap;
350    background: transparent !important;
351  }
352
353  .dv-nav-links a:hover { color: #2a2018; }
354  .dv-nav-links a.active { color: #c8421e; }
355
356  /* 3. Button Section (Forced to Right) */
357  .dv-nav-action {
358    display: flex;
359    align-items: center;
360    justify-content: flex-end;
361    gap: 1rem; /* Space between button and hamburger */
362    flex: 1; /* Takes up exactly 1/3 of the space */
363  }
364
365  .dv-nav-btn {
366    display: inline-flex;
367    align-items: center;
368    justify-content: center;
369    gap: 0.5rem;
370    padding: 0.6rem 1.25rem;
371    border-radius: 9999px;
372    background: linear-gradient(135deg, #e7853d, #c8421e 55%, #8a2a14);
373    color: #ffffff !important;
374    font-size: 0.875rem;
375    font-weight: 700;
376    text-decoration: none;
377    border: none;
378    cursor: pointer;
379    transition: transform 0.2s ease, box-shadow 0.2s ease;
380    box-shadow: 0 4px 6px -1px rgba(200, 66, 30, 0.2);
381    white-space: nowrap;
382  }
383
384  .dv-nav-btn:hover {
385    transform: scale(1.05);
386    box-shadow: 0 10px 15px -3px rgba(200, 66, 30, 0.3);
387  }
388
389  .dv-nav-dot {
390    width: 0.5rem;
391    height: 0.5rem;
392    border-radius: 50%;
393    background-color: #ffffff;
394    animation: dv-nav-pulse 1.5s infinite;
395  }
396
397  @keyframes dv-nav-pulse {
398    0% { box-shadow: 0 0 0 0 rgba(255, 255, 255, 0.7); }
399    70% { box-shadow: 0 0 0 6px rgba(255, 255, 255, 0); }
400    100% { box-shadow: 0 0 0 0 rgba(255, 255, 255, 0); }
401  }
402
403  /* Hamburger Menu Styles */
404  .dv-hamburger {
405    display: none; /* Hidden on desktop */
406    flex-direction: column;
407    justify-content: space-between;
408    width: 24px;
409    height: 18px;
410    background: transparent;
411    border: none;
412    cursor: pointer;
413    padding: 0;
414    z-index: 100;
415  }
416
417  .dv-hamburger span {
418    display: block;
419    width: 100%;
420    height: 2px;
421    background-color: #2a2018;
422    border-radius: 2px;
423    transition: all 0.3s ease;
424  }
425
426  /* Hamburger Animation Classes */
427  .dv-hamburger.is-active span:nth-child(1) {
428    transform: translateY(8px) rotate(45deg);
429  }
430  .dv-hamburger.is-active span:nth-child(2) {
431    opacity: 0;
432  }
433  .dv-hamburger.is-active span:nth-child(3) {
434    transform: translateY(-8px) rotate(-45deg);
435  }
436
437  /* Mobile Menu Dropdown Styles */
438  .dv-mobile-menu {
439    display: none; /* Hidden by default */
440    position: absolute;
441    top: calc(100% + 1rem);
442    left: 0;
443    width: 100%;
444    background: #ffffff;
445    box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
446    padding: 1.5rem;
447    box-sizing: border-box;
448    flex-direction: column;
449    gap: 1.5rem;
450    z-index: 99;
451    border-radius: 8px;
452    text-align: center;
453  }
454
455  .dv-mobile-menu.is-open {
456    display: flex;
457  }
458
459  .dv-mobile-menu a {
460    text-decoration: none;
461    font-size: 1.1rem;
462    font-weight: 600;
463    color: #6b5f55;
464    font-family: 'Inter', system-ui, sans-serif;
465  }
466
467  .dv-mobile-menu a.active { color: #c8421e; }
468
469  /* Media Queries */
470  @media (max-width: 767px) {
471    .dv-hamburger { display: flex; } /* Show hamburger on mobile */
472  }
473
474  @media (max-width: 480px) {
475    .dv-nav-brand img { height: 2rem; }
476    .dv-nav-brand span { font-size: 1rem; }
477    .dv-nav-btn { padding: 0.5rem 1rem; font-size: 0.8rem; }
478  }
479
480  @media (max-width: 350px) {
481    .dv-nav-brand span { display: none; }
482  }
483</style>
484
485<div class="dv-nav-inner">
486  
487  <!-- Logo -->
488  <a href="https://dodorvibe.com" class="dv-nav-brand">
489    <img src="https://dodorvibe.com/wp-content/uploads/2024/01/Dodor-Vibe-FM_trans-NoText-170x170.png" alt="DodorVibe FM">
490    <span>DodorVibe FM</span>
491  </a>
492  
493  <!-- Desktop Links (Removed hardcoded 'active' classes) -->
494  <nav class="dv-nav-links">
495    <a href="https://dodorvibe.com">Home</a>
496    <a href="https://dodorvibe.com/about-new-2026/">About</a>
497    <a href="https://dodorvibe.com/blog-new/">Blog</a>
498  </nav>
499  
500  <!-- Action Button & Hamburger -->
501  <div class="dv-nav-action">
502    <a href="https://dodorvibe.com" class="dv-nav-btn">
503      <span class="dv-nav-dot"></span> Listen Live
504    </a>
505    
506    <!-- Mobile Hamburger Button -->
507    <button class="dv-hamburger" aria-label="Toggle Menu">
508      <span></span>
509      <span></span>
510      <span></span>
511    </button>
512  </div>
513
514  <!-- Mobile Menu Dropdown (Removed hardcoded 'active' classes) -->
515  <div class="dv-mobile-menu">
516    <a href="https://dodorvibe.com">Home</a>
517    <a href="https://dodorvibe.com/about-new-2026/">About</a>
518    <a href="https://dodorvibe.com/blog-new/">Blog</a>
519  </div>
520
521</div>
522
523<!-- JavaScript to toggle mobile menu AND automatically highlight active page -->
524<script>
525  document.addEventListener('DOMContentLoaded', function() {
526    
527    // --- 1. Hamburger Menu Logic ---
528    const hamburger = document.querySelector('.dv-hamburger');
529    const mobileMenu = document.querySelector('.dv-mobile-menu');
530
531    if (hamburger && mobileMenu) {
532      hamburger.addEventListener('click', function() {
533        hamburger.classList.toggle('is-active');
534        mobileMenu.classList.toggle('is-open');
535      });
536    }
537
538    // --- 2. Dynamic Active Link Color Logic ---
539    // Get the exact path of the current page (e.g., '/blog-new/')
540    const currentPath = window.location.pathname; 
541    const navLinks = document.querySelectorAll('.dv-nav-links a, .dv-mobile-menu a');
542    
543    navLinks.forEach(link => {
544      // Create a URL object from the link's href to accurately compare paths
545      const linkPath = new URL(link.href).pathname;
546      
547      // If the link path matches the current page path, add the 'active' class
548      if (linkPath === currentPath) {
549        link.classList.add('active');
550      }
551    });
552    
553  });
554</script>
554				</div>
555				</div>
556					</div>
557				</div>
558		<div class="elementor-element elementor-element-944043f e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child" data-id="944043f" data-element_type="container" data-e-type="container">
559				<div class="elementor-element elementor-element-0f7c3c7 elementor-widget elementor-widget-html" data-id="0f7c3c7" data-element_type="widget" data-e-type="widget" data-widget_type="html.default">
560				<div class="elementor-widget-container">
561					<style>
562  @import url('https://fonts.googleapis.com/css2?family=Inter:wght@600;700&display=swap');
563
564  /* Wrapper to make the player stick to the top */
565  .dv-sticky-wrapper {
566    position: sticky;
567    top: 4rem; /* Adjust this value if you need it to sit lower or higher */
568    z-index: 999;
569    padding: 0.5rem 0.5rem 0 0.5rem;
570    box-sizing: border-box;
571    font-family: 'Inter', system-ui, sans-serif;
572    width: 100%;
573    background: transparent !important;
574  }
575
576  @media (min-width: 640px) {
577    .dv-sticky-wrapper { 
578      padding: 0.75rem 1rem 0 1rem; 
579    }
580  }
581
582  /* The Glass Card */
583  .dv-sticky-card {
584    max-width: 1152px; /* max-w-6xl */
585    margin: 0 auto;
586    background: rgba(255, 250, 240, 0.78) !important;
587    backdrop-filter: blur(18px) saturate(140%) !important;
588    -webkit-backdrop-filter: blur(18px) saturate(140%) !important;
589    border-radius: 1rem !important; /* 16px */
590    border: 2px solid rgba(200, 66, 30, 0.3) !important; /* 2px primary border */
591    box-shadow: 0 20px 60px -20px rgba(0, 0, 0, 0.35) !important; /* Heavier shadow */
592    overflow: hidden;
593  }
594
595  /* Top pulsing progress bar */
596  .dv-sticky-progress-bg {
597    height: 0.25rem; /* 4px */
598    width: 100%;
599    background: rgba(0, 0, 0, 0.1);
600  }
601
602  .dv-sticky-progress-fill {
603    height: 100%;
604    width: 33.333%;
605    background: linear-gradient(135deg, #e7853d, #c8421e 55%, #8a2a14) !important;
606    animation: dv-sticky-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
607  }
608
609  @keyframes dv-sticky-pulse {
610    0%, 100% { opacity: 1; }
611    50% { opacity: 0.5; }
612  }
613
614  /* Inner Layout */
615  .dv-sticky-inner {
616    display: flex;
617    align-items: center;
618    gap: 0.75rem;
619    padding: 0.75rem;
620  }
621
622  @media (min-width: 640px) {
623    .dv-sticky-inner { gap: 1rem; padding: 0.75rem 1rem; }
624  }
625
626  /* Album Art & Live Badge */
627  .dv-sticky-art-box {
628    position: relative;
629    flex-shrink: 0;
630  }
631
632  .dv-sticky-art {
633    display: grid;
634    place-items: center;
635    width: 3rem; /* 48px */
636    height: 3rem;
637    border-radius: 0.75rem !important; /* 12px */
638    background: linear-gradient(135deg, #e7853d, #c8421e 55%, #8a2a14) !important;
639    overflow: hidden;
640  }
641
642  @media (min-width: 640px) {
643    .dv-sticky-art { width: 3.5rem; height: 3.5rem; }
644  }
645
646  .dv-sticky-art img { width: 100%; height: 100%; object-fit: cover; }
647  .dv-sticky-art svg { width: 1.5rem; height: 1.5rem; color: #ffffff; }
648
649  .dv-sticky-badge {
650    position: absolute;
651    right: -0.25rem;
652    top: -0.25rem;
653    display: inline-flex;
654    align-items: center;
655    gap: 0.25rem;
656    border-radius: 9999px !important;
657    background: #b8351c !important;
658    padding: 0.125rem 0.375rem;
659    font-size: 0.5625rem; /* 9px */
660    font-weight: 700;
661    text-transform: uppercase;
662    letter-spacing: 0.05em;
663    color: #ffffff !important;
664    box-shadow: 0 1px 3px rgba(0,0,0,0.3);
665  }
666
667  .dv-sticky-dot {
668    width: 0.375rem;
669    height: 0.375rem;
670    border-radius: 50%;
671    background: #ffffff;
672  }
673
674  /* Text Information */
675  .dv-sticky-text { min-width: 0; flex: 1; }
676
677  .dv-sticky-status {
678    display: flex;
679    align-items: center;
680    gap: 0.5rem;
681    font-size: 0.625rem; /* 10px */
682    font-weight: 600;
683    text-transform: uppercase;
684    letter-spacing: 0.2em;
685    color: #c8421e !important;
686  }
687
688  .dv-sticky-status-dot {
689    width: 0.55rem;
690    height: 0.55rem;
691    border-radius: 50%;
692    background: #b8351c !important;
693    animation: dv-pulse-live 1.6s ease-out infinite;
694  }
695
696  @keyframes dv-pulse-live {
697    0% { box-shadow: 0 0 0 0 rgba(184, 53, 28, 0.8); }
698    70% { box-shadow: 0 0 0 10px rgba(184, 53, 28, 0); }
699    100% { box-shadow: 0 0 0 0 rgba(184, 53, 28, 0); }
700  }
701
702  .dv-sticky-title {
703    margin-top: 0.125rem;
704    font-size: 0.875rem; /* 14px */
705    font-weight: 600;
706    color: #2a2018 !important;
707    white-space: nowrap;
708    overflow: hidden;
709    text-overflow: ellipsis;
710  }
711
712  @media (min-width: 640px) { .dv-sticky-title { font-size: 1rem; } }
713
714  /* Play Button */
715  .dv-sticky-play {
716    display: grid;
717    place-items: center;
718    width: 3rem;
719    height: 3rem;
720    border-radius: 50% !important;
721    background: linear-gradient(135deg, #e7853d, #c8421e 55%, #8a2a14) !important;
722    color: #ffffff !important;
723    border: none !important;
724    cursor: pointer;
725    box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1);
726    transition: transform 0.2s ease;
727    flex-shrink: 0;
728  }
729
730  .dv-sticky-play:hover { transform: scale(1.05); }
731  .dv-sticky-play:active { transform: scale(0.95); }
732  .dv-sticky-play svg { width: 1.25rem; height: 1.25rem; fill: currentColor; }
733
734  /* Volume Controls */
735  .dv-sticky-vol-box {
736    display: none;
737    align-items: center;
738    gap: 0.5rem;
739    padding-left: 0.5rem;
740  }
741
742  @media (min-width: 768px) { .dv-sticky-vol-box { display: flex; } }
743
744  .dv-sticky-mute {
745    background: none !important;
746    border: none !important;
747    color: #6b5f55 !important;
748    cursor: pointer;
749    padding: 0;
750    display: grid;
751    place-items: center;
752  }
753  .dv-sticky-mute:hover { color: #2a2018 !important; }
754  .dv-sticky-mute svg { width: 1rem; height: 1rem; }
755
756  /* Strict Slider Overrides */
757  .dv-sticky-vol-slider {
758    -webkit-appearance: none !important;
759    appearance: none !important;
760    width: 6rem !important; 
761    height: 0.25rem !important; /* 4px */
762    background: rgba(0, 0, 0, 0.15) !important;
763    border-radius: 9999px !important;
764    outline: none !important;
765    cursor: pointer !important;
766    accent-color: #c8421e !important; 
767    margin: 0 !important;
768    padding: 0 !important;
769  }
770
771  .dv-sticky-vol-slider::-webkit-slider-thumb {
772    -webkit-appearance: none !important;
773    appearance: none !important;
774    width: 12px !important;
775    height: 12px !important;
776    border-radius: 50% !important;
777    background: #c8421e !important;
778    background-color: #c8421e !important; 
779    cursor: pointer !important;
780    border: none !important;
781    box-shadow: none !important;
782  }
783  
784  .dv-sticky-vol-slider::-moz-range-thumb {
785    width: 12px !important;
786    height: 12px !important;
787    border-radius: 50% !important;
788    background: #c8421e !important;
789    background-color: #c8421e !important;
790    cursor: pointer !important;
791    border: none !important;
792    box-shadow: none !important;
793  }
794
795  /* Utility Classes */
796  .dv-hidden { display: none !important; }
797  .dv-spin { animation: dv-spin-anim 1s linear infinite; }
798  @keyframes dv-spin-anim { 100% { transform: rotate(360deg); } }
799</style>
800
801<!-- Fixed Player Wrapper -->
802<div class="dv-sticky-wrapper">
803  <div class="dv-sticky-card">
804    
805    <!-- Top Progress Bar -->
806    <div class="dv-sticky-progress-bg">
807      <div class="dv-sticky-progress-fill"></div>
808    </div>
809
810    <!-- Inner Content -->
811    <div class="dv-sticky-inner">
812      
813      <!-- Art & Badge -->
814      <div class="dv-sticky-art-box">
815        <div class="dv-sticky-art">
816          <img id="dv-sticky-art" class="dv-hidden" alt="Album Art" />
817          <svg id="dv-sticky-art-fallback" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">
818            <circle cx="12" cy="12" r="10"/><circle cx="12" cy="12" r="3"/>
819          </svg>
820        </div>
821        <span class="dv-sticky-badge">
822          <span class="dv-sticky-dot"></span> Live
823        </span>
824      </div>
825
826      <!-- Text Info -->
827      <div class="dv-sticky-text">
828        <div id="dv-sticky-status" class="dv-sticky-status">
829          <span class="dv-sticky-status-dot"></span> <span id="dv-sticky-status-text">Tap play to tune in</span>
830        </div>
831        <div id="dv-sticky-title" class="dv-sticky-title">DodorVibe FM</div>
832      </div>
833
834      <!-- Play Button -->
835      <button id="dv-sticky-btn-play" class="dv-sticky-play" aria-label="Play">
836        <svg id="dv-sticky-icon-play" viewBox="0 0 24 24"><path d="M8 5v14l11-7z"/></svg>
837        <svg id="dv-sticky-icon-pause" class="dv-hidden" viewBox="0 0 24 24"><path d="M6 4h4v16H6zM14 4h4v16h-4z"/></svg>
838        <svg id="dv-sticky-icon-load" class="dv-hidden dv-spin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 12a9 9 0 1 1-6.2-8.5"/></svg>
839      </button>
840
841      <!-- Desktop Volume Controls -->
842      <div class="dv-sticky-vol-box">
843        <button id="dv-sticky-btn-mute" class="dv-sticky-mute" aria-label="Mute">
844          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
845            <polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"/>
846            <path d="M19.07 4.93a10 10 0 0 1 0 14.14M15.54 8.46a5 5 0 0 1 0 7.07"/>
847          </svg>
848        </button>
849        <input id="dv-sticky-vol" type="range" class="dv-sticky-vol-slider" min="0" max="100" value="75" />
850      </div>
851
852    </div>
853  </div>
854</div>
855
856<!-- 
857  Invisible Audio Element Wrapper.
858  This physically throws the black default player thousands of pixels off the screen!
859-->
860<div style="position: absolute !important; left: -9999px !important; top: -9999px !important; width: 0 !important; height: 0 !important; overflow: hidden !important; pointer-events: none !important;">
861  <audio id="dv-sticky-audio" preload="none" crossorigin="anonymous"></audio>
862</div>
863
864<!-- Player Functionality Script -->
865<script>
866  document.addEventListener("DOMContentLoaded", function() {
867    const STREAM_URL = 'https://streaming.radio.co/sf88847753/listen';
868    const STATUS_URL = 'https://public.radio.co/stations/sf88847753/status';
869
870    const audio = document.getElementById('dv-sticky-audio');
871    const btnPlay = document.getElementById('dv-sticky-btn-play');
872    const iconPlay = document.getElementById('dv-sticky-icon-play');
873    const iconPause = document.getElementById('dv-sticky-icon-pause');
874    const iconLoad = document.getElementById('dv-sticky-icon-load');
875    const statusText = document.getElementById('dv-sticky-status-text');
876    const playerTitle = document.getElementById('dv-sticky-title');
877    const playerArt = document.getElementById('dv-sticky-art');
878    const playerArtFallback = document.getElementById('dv-sticky-art-fallback');
879    const volSlider = document.getElementById('dv-sticky-vol');
880    const btnMute = document.getElementById('dv-sticky-btn-mute');
881    
882    // Select the Elementor button using its ID
883    const btnNavListen = document.getElementById('dv-nav-listen');
884
885    let isPlaying = false;
886    let isLoading = false;
887    let isMuted = false;
888
889    audio.volume = 0.75;
890
891    function updatePlayerUI() {
892      iconPlay.classList.toggle('dv-hidden', isLoading || isPlaying);
893      iconPause.classList.toggle('dv-hidden', isLoading || !isPlaying);
894      iconLoad.classList.toggle('dv-hidden', !isLoading);
895      statusText.textContent = isPlaying ? 'On Air' : 'Tap play to tune in';
896    }
897
898    function togglePlay() {
899      if (isPlaying) {
900        audio.pause();
901        return;
902      }
903      isLoading = true;
904      updatePlayerUI();
905      audio.src = STREAM_URL + '?t=' + Date.now();
906      audio.play().catch(function() {
907        isLoading = false;
908        updatePlayerUI();
909      });
910    }
911
912    btnPlay.addEventListener('click', togglePlay);
913    
914    // Add event listener to the Elementor button
915    if (btnNavListen) {
916      btnNavListen.addEventListener('click', function(e) {
917        e.preventDefault(); // Prevents default link behavior
918        if (!isPlaying) togglePlay();
919      });
920    }
921
922    audio.addEventListener('playing', function() { isLoading = false; isPlaying = true; updatePlayerUI(); });
923    audio.addEventListener('pause', function() { isPlaying = false; updatePlayerUI(); });
924    audio.addEventListener('waiting', function() { isLoading = true; updatePlayerUI(); });
925    audio.addEventListener('error', function() { isLoading = false; isPlaying = false; updatePlayerUI(); });
926
927    volSlider.addEventListener('input', function(e) {
928      audio.volume = isMuted ? 0 : (+e.target.value) / 100;
929    });
930
931    btnMute.addEventListener('click', function() {
932      isMuted = !isMuted;
933      audio.volume = isMuted ? 0 : (+volSlider.value) / 100;
934      btnMute.style.opacity = isMuted ? '0.5' : '1';
935    });
936
937    async function refreshStatus() {
938      try {
939        const r = await fetch(STATUS_URL, { cache: 'no-store' });
940        if (!r.ok) return;
941        const data = await r.json();
942        
943        if (data.current_track && data.current_track.title) {
944          playerTitle.textContent = data.current_track.title;
945        }
946        
947        const artUrl = data.current_track && (data.current_track.artwork_url_large || data.current_track.artwork_url);
948        if (artUrl) {
949          playerArt.src = artUrl;
950          playerArt.classList.remove('dv-hidden');
951          playerArtFallback.classList.add('dv-hidden');
952        } else {
953          playerArt.classList.add('dv-hidden');
954          playerArtFallback.classList.remove('dv-hidden');
955        }
956      } catch (err) {}
957    }
958
959    refreshStatus();
960    setInterval(refreshStatus, 20000);
961  });
962</script>
962				</div>
963				</div>
964				</div>
965				</div>
966				</header>
967				<div data-elementor-type="wp-page" data-elementor-id="5497" class="elementor elementor-5497" data-elementor-post-type="page">
968				<div class="elementor-element elementor-element-b251cf8 e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-parent" data-id="b251cf8" data-element_type="container" data-e-type="container" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
969					<div class="e-con-inner">
970				<div class="elementor-element elementor-element-2595677 elementor-widget elementor-widget-image" data-id="2595677" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
971				<div class="elementor-widget-container">
972															<img fetchpriority="high" decoding="async" width="800" height="430" src="https://dodorvibe.com/wp-content/uploads/2026/06/DodorVibeFMHero-1-1024x550.png" class="attachment-large size-large wp-image-5580" alt="" srcset="https://dodorvibe.com/wp-content/uploads/2026/06/DodorVibeFMHero-1-1024x550.png 1024w, https://dodorvibe.com/wp-content/uploads/2026/06/DodorVibeFMHero-1-300x161.png 300w, https://dodorvibe.com/wp-content/uploads/2026/06/DodorVibeFMHero-1-768x413.png 768w, https://dodorvibe.com/wp-content/uploads/2026/06/DodorVibeFMHero-1-600x322.png 600w, https://dodorvibe.com/wp-content/uploads/2026/06/DodorVibeFMHero-1.png 1536w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
973				</div>
974					</div>
975				</div>
976		<div class="elementor-element elementor-element-13bcff3 e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-parent" data-id="13bcff3" data-element_type="container" data-e-type="container" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
977					<div class="e-con-inner">
978				<div class="elementor-element elementor-element-87981e2 elementor-widget elementor-widget-html" data-id="87981e2" data-element_type="widget" data-e-type="widget" data-widget_type="html.default">
979				<div class="elementor-widget-container">
980					<style>
981  @import url('https://fonts.googleapis.com/css2?family=Inter:wght@600;700&display=swap');
982
983  /* Wrapper for the inner content */
984  .dv-live-inner {
985    display: flex;
986    align-items: center;
987    justify-content: center;
988    flex-wrap: wrap;
989    gap: 0.75rem; /* Space between dot, text, and button */
990    font-family: 'Inter', system-ui, sans-serif;
991    width: 100%;
992    background: transparent; /* Inherits your Elementor container color */
993  }
994
995  /* The Red Pulsing Dot */
996  .dv-live-dot {
997    width: 12px;
998    height: 12px;
999    background-color: #ef4444; /* Bright red */
1000    border-radius: 50%;
1001    flex-shrink: 0;
1002    animation: dv-pulse-banner 1.5s infinite;
1003  }
1004
1005  @keyframes dv-pulse-banner {
1006    0% { box-shadow: 0 0 0 0 rgba(239, 68, 68, 0.7); }
1007    70% { box-shadow: 0 0 0 8px rgba(239, 68, 68, 0); }
1008    100% { box-shadow: 0 0 0 0 rgba(239, 68, 68, 0); }
1009  }
1010
1011  /* The Text */
1012  .dv-live-text {
1013    color: #ffffff;
1014    font-size: 1rem;
1015    font-weight: 600;
1016  }
1017
1018  /* The Black Button */
1019  .dv-live-btn {
1020    background-color: #000000;
1021    color: #ffffff !important;
1022    border: none;
1023    padding: 0.4rem 1rem;
1024    border-radius: 0.25rem; /* Matches your design */
1025    font-size: 0.875rem;
1026    font-weight: 700;
1027    cursor: pointer;
1028    transition: background-color 0.2s ease, transform 0.2s ease;
1029    text-decoration: none; /* Ensures the link has no underline */
1030  }
1031
1032  .dv-live-btn:hover {
1033    background-color: #222222;
1034    transform: scale(1.05); /* Slight zoom on hover */
1035  }
1036
1037  /* Mobile Adjustments */
1038  @media (max-width: 640px) {
1039    .dv-live-inner {
1040      text-align: center;
1041      gap: 0.5rem;
1042    }
1043  }
1044</style>
1045
1046<div class="dv-live-inner">
1047  <span class="dv-live-dot"></span>
1048  <span class="dv-live-text">Live Now! Nou An Dirèk! Click to watch.</span>
1049  
1050  <!-- Changed to an anchor link targeting your video section -->
1051  <a href="#video" class="dv-live-btn">Watch Live</a>
1052</div>				</div>
1053				</div>
1054					</div>
1055				</div>
1056		<div class="elementor-element elementor-element-29cee01 e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-parent" data-id="29cee01" data-element_type="container" data-e-type="container" id="live" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
1057					<div class="e-con-inner">
1058		<div class="elementor-element elementor-element-8df0f6c e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child" data-id="8df0f6c" data-element_type="container" data-e-type="container">
1059				<div class="elementor-element elementor-element-67fc4c0 elementor-widget elementor-widget-html" data-id="67fc4c0" data-element_type="widget" data-e-type="widget" data-widget_type="html.default">
1060				<div class="elementor-widget-container">
1061					<style>
1062  @import url('https://fonts.googleapis.com/css2?family=Inter:wght@600&display=swap');
1063
1064  .dv-live-badge {
1065    display: inline-flex;
1066    align-items: center;
1067    gap: 0.5rem;
1068    border-radius: 9999px;
1069    border: 1px solid rgba(0, 0, 0, 0.15);
1070    background-color: rgba(0, 0, 0, 0.05);
1071    padding: 0.25rem 0.75rem; /* Equivalent to py-1 px-3 */
1072    font-family: 'Inter', system-ui, sans-serif;
1073    font-size: 0.75rem; /* 12px */
1074    font-weight: 600;
1075    text-transform: uppercase;
1076    letter-spacing: 0.2em;
1077    color: #c8421e;
1078  }
1079
1080  .dv-live-dot-badge {
1081    width: 0.55rem;
1082    height: 0.55rem;
1083    border-radius: 9999px;
1084    background-color: #b8351c;
1085    animation: dv-live-badge-pulse 1.6s ease-out infinite;
1086    display: inline-block;
1087  }
1088
1089  @keyframes dv-live-badge-pulse {
1090    0% { box-shadow: 0 0 0 0 rgba(184, 53, 28, 0.8); }
1091    70% { box-shadow: 0 0 0 10px rgba(184, 53, 28, 0); }
1092    100% { box-shadow: 0 0 0 0 rgba(184, 53, 28, 0); }
1093  }
1094</style>
1095
1096<span class="dv-live-badge">
1097  <span class="dv-live-dot-badge"></span> Streaming Live · 24/7
1098</span>				</div>
1099				</div>
1100				<div class="elementor-element elementor-element-806c2b7 elementor-widget elementor-widget-heading" data-id="806c2b7" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
1101				<div class="elementor-widget-container">
1102					<h1 class="elementor-heading-title elementor-size-default">from <span class="dv-gradient-text">Little haiti </span>to the <span class="dv-gradient-text">world!</span></h1>				</div>
1103				</div>
1104				<div class="elementor-element elementor-element-87e8c22 elementor-widget elementor-widget-text-editor" data-id="87e8c22" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
1105				<div class="elementor-widget-container">
1106									<p>DodorVibe FM is the heartbeat of Haitian culture and tropical sound — konpa, kreyòl talk, reggae, latin, and the dyaspora&#8217;s loudest voices, all on one frequency.</p>								</div>
1107				</div>
1108				<div class="elementor-element elementor-element-9a6d8d1 elementor-widget elementor-widget-html" data-id="9a6d8d1" data-element_type="widget" data-e-type="widget" data-widget_type="html.default">
1109				<div class="elementor-widget-container">
1110					<style>
1111  @import url('https://fonts.googleapis.com/css2?family=Inter:wght@600&display=swap');
1112
1113  /* Wrapper for the buttons */
1114  .dv-hero-buttons {
1115    display: flex;
1116    flex-wrap: wrap;
1117    align-items: center;
1118    gap: 0.75rem; /* 12px gap between buttons */
1119  }
1120
1121  /* Shared Button Styles */
1122  .dv-btn {
1123    display: inline-flex;
1124    align-items: center;
1125    justify-content: center;
1126    gap: 0.5rem; /* 8px gap between icon and text */
1127    border-radius: 9999px;
1128    padding: 0.875rem 1.5rem; /* 14px top/bottom, 24px left/right */
1129    font-family: 'Inter', system-ui, sans-serif;
1130    font-size: 1rem; /* 16px */
1131    font-weight: 600;
1132    text-decoration: none;
1133    transition: all 0.2s ease;
1134    cursor: pointer;
1135    box-sizing: border-box;
1136  }
1137
1138  .dv-btn svg {
1139    width: 1.25rem; /* 20px */
1140    height: 1.25rem;
1141  }
1142
1143  /* Primary "Tune In Now" Button */
1144  .dv-btn-primary {
1145    background: linear-gradient(135deg, #e7853d, #c8421e 55%, #8a2a14);
1146    color: #ffffff !important;
1147    border: none;
1148    box-shadow: 0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -2px rgba(0,0,0,0.05);
1149  }
1150
1151  .dv-btn-primary:hover {
1152    transform: scale(1.03);
1153  }
1154
1155  .dv-btn-primary svg {
1156    fill: currentColor;
1157  }
1158
1159  /* Secondary "Get the App" Button */
1160  .dv-btn-secondary {
1161    background: rgba(0, 0, 0, 0.05);
1162    border: 1px solid rgba(0, 0, 0, 0.15);
1163    color: #2a2018 !important; /* Dark ink color */
1164  }
1165
1166  .dv-btn-secondary:hover {
1167    background: rgba(0, 0, 0, 0.1);
1168  }
1169
1170  /* --- Mobile Responsiveness --- */
1171  @media (max-width: 480px) {
1172    .dv-hero-buttons {
1173      flex-direction: column; /* Stack vertically */
1174      width: 100%;
1175    }
1176    .dv-btn {
1177      width: 100%; /* Full width on mobile */
1178    }
1179  }
1180</style>
1181
1182<div class="dv-hero-buttons">
1183  <button id="hero-play" class="dv-btn dv-btn-primary">
1184    <svg viewBox="0 0 24 24"><path d="M8 5v14l11-7z"/></svg>
1185    Tune In Now
1186  </button>
1187
1188  <a href="#app" class="dv-btn dv-btn-secondary">
1189    <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
1190      <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/>
1191      <polyline points="7 10 12 15 17 10"/>
1192      <line x1="12" y1="15" x2="12" y2="3"/>
1193    </svg>
1194    Get the App
1195  </a>
1196</div>
1197
1198<!-- Script to connect "Tune In Now" to the Sticky Player -->
1199<script>
1200  document.addEventListener("DOMContentLoaded", function() {
1201    const heroPlayBtn = document.getElementById('hero-play');
1202
1203    if (heroPlayBtn) {
1204      heroPlayBtn.addEventListener('click', function(e) {
1205        e.preventDefault();
1206        
1207        // Find the main player button and audio element on the page
1208        const mainPlayBtn = document.getElementById('dv-sticky-btn-play');
1209        const audioEl = document.getElementById('dv-sticky-audio');
1210
1211        if (mainPlayBtn) {
1212          // If the player is currently paused, clicking this will start it.
1213          // (This prevents accidentally stopping the music if they click it while listening)
1214          if (audioEl && audioEl.paused) {
1215            mainPlayBtn.click();
1216          } else if (!audioEl) {
1217            // Fallback just in case the audio element hasn't registered yet
1218            mainPlayBtn.click();
1219          }
1220        }
1221      });
1222    }
1223  });
1224</script>
1224				</div>
1225				</div>
1226				<div class="elementor-element elementor-element-814a83f elementor-widget elementor-widget-html" data-id="814a83f" data-element_type="widget" data-e-type="widget" data-widget_type="html.default">
1227				<div class="elementor-widget-container">
1228					<style>
1229  /* Import Sora for the numbers and Inter for the labels */
1230  @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400&family=Sora:wght@700&display=swap');
1231
1232  .dv-stats-container {
1233    display: flex;
1234    flex-wrap: wrap;
1235    align-items: center;
1236    column-gap: 1.5rem; /* 24px spacing between items */
1237    row-gap: 0.75rem;   /* 12px spacing if they wrap */
1238    font-family: 'Inter', system-ui, sans-serif;
1239    font-size: 0.875rem; /* 14px text size */
1240    color: #6b5f55; /* Muted text color from the original design */
1241  }
1242
1243  .dv-stat-item {
1244    display: flex;
1245    align-items: baseline;
1246    gap: 0.5rem; /* 8px spacing between number and label */
1247  }
1248
1249  .dv-stat-number {
1250    font-family: 'Sora', system-ui, sans-serif;
1251    font-size: 1.5rem; /* 24px number size */
1252    font-weight: 700;
1253    color: #c8421e; /* Primary orange/red color */
1254  }
1255
1256  /* --- Mobile Responsiveness --- */
1257  @media (max-width: 480px) {
1258    .dv-stats-container {
1259      flex-direction: column; /* Stack the stats vertically */
1260      align-items: flex-start; /* Align them to the left */
1261      row-gap: 1rem; /* Slightly more breathing room on mobile */
1262    }
1263  }
1264</style>
1265
1266<div class="dv-stats-container">
1267  <div class="dv-stat-item">
1268    <span class="dv-stat-number">24/7</span>
1269    <span class="dv-stat-label">Live Stream</span>
1270  </div>
1271  
1272  <div class="dv-stat-item">
1273    <span class="dv-stat-number">20+</span>
1274    <span class="dv-stat-label">Shows</span>
1275  </div>
1276  
1277  <div class="dv-stat-item">
1278    <span class="dv-stat-number">40K</span>
1279    <span class="dv-stat-label">Daily Listeners</span>
1280  </div>
1281</div>				</div>
1282				</div>
1283				</div>
1284		<div class="elementor-element elementor-element-fdf9877 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child" data-id="fdf9877" data-element_type="container" data-e-type="container">
1285				<div class="elementor-element elementor-element-c66a34e elementor-widget elementor-widget-html" data-id="c66a34e" data-element_type="widget" data-e-type="widget" data-widget_type="html.default">
1286				<div class="elementor-widget-container">
1287					<style>
1288  /* Import necessary fonts */
1289  @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=Sora:wght@700&display=swap');
1290
1291  /* Wrapper to control sizing and positioning */
1292  .dv-np-wrapper {
1293    position: relative;
1294    width: 100%;
1295    max-width: 420px; /* Constrains the card size on desktop */
1296    margin: 0 auto;
1297    font-family: 'Inter', system-ui, sans-serif;
1298  }
1299
1300  /* The soft glowing background aura */
1301  .dv-np-glow {
1302    position: absolute;
1303    top: -1.5rem;
1304    right: -1.5rem;
1305    bottom: -1.5rem;
1306    left: -1.5rem;
1307    border-radius: 2rem;
1308    background: linear-gradient(to bottom right, rgba(200, 66, 30, 0.25), transparent, rgba(168, 50, 26, 0.25));
1309    filter: blur(24px);
1310    z-index: 0;
1311  }
1312
1313  /* The actual white card */
1314  .dv-np-card {
1315    position: relative;
1316    background: #ffffff;
1317    border-radius: 1.5rem; /* 24px */
1318    border: 1px solid rgba(0, 0, 0, 0.1);
1319    padding: 1.5rem; /* 24px */
1320    box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
1321    z-index: 1;
1322  }
1323
1324  /* Header (Now Playing + Live Badge) */
1325  .dv-np-header {
1326    display: flex;
1327    align-items: center;
1328    justify-content: space-between;
1329  }
1330
1331  .dv-np-label {
1332    font-size: 0.625rem; /* 10px */
1333    font-weight: 700;
1334    text-transform: uppercase;
1335    letter-spacing: 0.25em;
1336    color: #c8421e;
1337  }
1338
1339  .dv-np-live-badge {
1340    display: inline-flex;
1341    align-items: center;
1342    gap: 0.375rem;
1343    background: rgba(184, 53, 28, 0.15);
1344    color: #b8351c;
1345    padding: 0.25rem 0.5rem;
1346    border-radius: 9999px;
1347    font-size: 0.625rem;
1348    font-weight: 700;
1349    text-transform: uppercase;
1350    letter-spacing: 0.05em;
1351  }
1352
1353  /* Pulsing live dot */
1354  .dv-np-dot {
1355    width: 0.375rem;
1356    height: 0.375rem;
1357    border-radius: 50%;
1358    background: #b8351c;
1359    animation: dv-pulse-live 1.6s ease-out infinite;
1360  }
1361
1362  @keyframes dv-pulse-live {
1363    0% { box-shadow: 0 0 0 0 rgba(184, 53, 28, 0.8); }
1364    70% { box-shadow: 0 0 0 6px rgba(184, 53, 28, 0); }
1365    100% { box-shadow: 0 0 0 0 rgba(184, 53, 28, 0); }
1366  }
1367
1368  /* Album Art Container */
1369  .dv-np-art-container {
1370    margin-top: 1.25rem;
1371    aspect-ratio: 1 / 1; /* Perfect square */
1372    width: 100%;
1373    border-radius: 1rem;
1374    overflow: hidden;
1375    background: linear-gradient(135deg, #e7853d, #c8421e 55%, #8a2a14);
1376    display: flex;
1377    align-items: center;
1378    justify-content: center;
1379  }
1380
1381  .dv-np-art-container img {
1382    width: 100%;
1383    height: 100%;
1384    object-fit: cover;
1385  }
1386
1387  /* Text Info Area */
1388  .dv-np-info {
1389    margin-top: 1.25rem;
1390  }
1391
1392  .dv-np-subtitle {
1393    font-size: 0.75rem;
1394    text-transform: uppercase;
1395    letter-spacing: 0.05em;
1396    color: #6b5f55;
1397  }
1398
1399  .dv-np-title {
1400    margin-top: 0.25rem;
1401    margin-bottom: 0;
1402    font-family: 'Sora', system-ui, sans-serif;
1403    font-size: 1.5rem;
1404    font-weight: 700;
1405    line-height: 1.25;
1406    color: #2a2018;
1407    display: -webkit-box;
1408    -webkit-line-clamp: 2; /* Truncates long titles after 2 lines */
1409    -webkit-box-orient: vertical;
1410    overflow: hidden;
1411  }
1412
1413  /* Footer & Animated EQ Bars */
1414  .dv-np-footer {
1415    margin-top: 1.25rem;
1416    display: flex;
1417    align-items: flex-end;
1418    height: 1.25rem;
1419  }
1420
1421  .dv-eq-container {
1422    display: flex;
1423    align-items: flex-end;
1424    gap: 2px;
1425    height: 100%;
1426  }
1427
1428  .dv-eq-bar {
1429    width: 3px;
1430    border-radius: 2px;
1431    background: #c8421e;
1432    animation: dv-eq 1s ease-in-out infinite;
1433  }
1434  
1435  .dv-eq-bar:nth-child(2) { animation-delay: .15s; }
1436  .dv-eq-bar:nth-child(3) { animation-delay: .3s; }
1437  .dv-eq-bar:nth-child(4) { animation-delay: .45s; }
1438
1439  @keyframes dv-eq {
1440    0%, 100% { height: 4px; }
1441    50% { height: 16px; }
1442  }
1443
1444  .dv-np-stream-info {
1445    margin-left: 0.75rem;
1446    font-size: 0.75rem;
1447    color: #6b5f55;
1448  }
1449
1450  /* Mobile Adjustments */
1451  @media (max-width: 480px) {
1452    .dv-np-card {
1453      padding: 1.25rem; /* Slightly smaller padding on small screens */
1454    }
1455    .dv-np-title {
1456      font-size: 1.25rem; /* Smaller font size on mobile */
1457    }
1458  }
1459</style>
1460
1461<div class="dv-np-wrapper">
1462  <div class="dv-np-glow"></div>
1463  
1464  <div class="dv-np-card">
1465    <div class="dv-np-header">
1466      <span class="dv-np-label">Now Playing</span>
1467      <span class="dv-np-live-badge">
1468        <span class="dv-np-dot"></span> Live
1469      </span>
1470    </div>
1471    
1472    <div class="dv-np-art-container">
1473      <img decoding="async" id="card-art" src="https://dodorvibe.com/wp-content/uploads/2024/01/Dodor-Vibe-FM_trans-NoText-170x170.png" alt="DodorVibe FM Art" />
1474    </div>
1475
1476    <div class="dv-np-info">
1477      <div class="dv-np-subtitle">On Air Now</div>
1478      <h3 id="card-title" class="dv-np-title">DodorVibe FM</h3>
1479    </div>
1480
1481    <div class="dv-np-footer">
1482      <div class="dv-eq-container">
1483        <span class="dv-eq-bar"></span>
1484        <span class="dv-eq-bar"></span>
1485        <span class="dv-eq-bar"></span>
1486        <span class="dv-eq-bar"></span>
1487      </div>
1488      <span class="dv-np-stream-info">Streaming · 128 kbps</span>
1489    </div>
1490  </div>
1491</div>
1492
1493<script>
1494  document.addEventListener("DOMContentLoaded", function() {
1495    const STATUS_URL = 'https://public.radio.co/stations/sf88847753/status';
1496    const cardTitle = document.getElementById('card-title');
1497    const cardArt = document.getElementById('card-art');
1498
1499    async function fetchLiveStatus() {
1500      try {
1501        const r = await fetch(STATUS_URL, { cache:'no-store' });
1502        if (!r.ok) return;
1503        const data = await r.json();
1504        
1505        // Update Title
1506        if (data.current_track && data.current_track.title) {
1507          cardTitle.textContent = data.current_track.title;
1508        }
1509        
1510        // Update Image Art (if provided by API)
1511        if (data.current_track && (data.current_track.artwork_url_large || data.current_track.artwork_url)) {
1512          cardArt.src = data.current_track.artwork_url_large || data.current_track.artwork_url;
1513        }
1514      } catch (err) {
1515        console.error("Error fetching live radio data", err);
1516      }
1517    }
1518    
1519    // Fetch immediately, then update every 20 seconds
1520    fetchLiveStatus();
1521    setInterval(fetchLiveStatus, 20000);
1522  });
1523</script>
1523				</div>
1524				</div>
1525				</div>
1526					</div>
1527				</div>
1528		<div class="elementor-element elementor-element-473b9d6 e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-parent" data-id="473b9d6" data-element_type="container" data-e-type="container" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
1529					<div class="e-con-inner">
1530				<div class="elementor-element elementor-element-4ca7e4e elementor-widget elementor-widget-html" data-id="4ca7e4e" data-element_type="widget" data-e-type="widget" data-widget_type="html.default">
1531				<div class="elementor-widget-container">
1532					<style>
1533  /* Import Sora font for the thick display look */
1534  @import url('https://fonts.googleapis.com/css2?family=Sora:wght@800;900&display=swap');
1535
1536  /* The main wrapper that applies the left and right transparent fade mask */
1537  .dv-marquee-holder {
1538    overflow: hidden;
1539    width: 100%;
1540    display: flex;
1541    position: relative;
1542    padding: 10px 0;
1543    
1544    /* Transparent gradient mask for left and right fading edges */
1545    -webkit-mask-image: linear-gradient(90deg, transparent 0%, #000 8%, #000 92%, transparent 100%);
1546    mask-image: linear-gradient(90deg, transparent 0%, #000 8%, #000 92%, transparent 100%);
1547  }
1548
1549  /* The moving track containing both identical groups */
1550  .dv-marquee-track {
1551    display: flex;
1552    width: max-content;
1553    animation: dv-marquee-slide 35s linear infinite;
1554  }
1555
1556  /* Hover effect to gently pause the ticker (Optional, remove if unwanted) */
1557  .dv-marquee-holder:hover .dv-marquee-track {
1558    animation-play-state: paused;
1559  }
1560
1561  /* Individual item groups */
1562  .dv-marquee-group {
1563    display: flex;
1564    align-items: center;
1565    justify-content: space-around;
1566    white-space: nowrap;
1567    gap: 3rem;          /* Distance between words */
1568    padding-right: 3rem; /* Keeps spacing accurate between the loops */
1569  }
1570
1571  /* Typography formatting for the words */
1572  .dv-marquee-item {
1573    font-family: 'Sora', system-ui, sans-serif;
1574    font-size: 1.75rem; /* 28px on desktop */
1575    font-weight: 900;
1576    text-transform: uppercase;
1577    letter-spacing: -0.01em;
1578    color: rgba(42, 32, 24, 0.85); /* Original ink color */
1579    display: inline-flex;
1580    align-items: center;
1581    gap: 3rem;
1582  }
1583
1584  /* The styled orange/red separator star */
1585  .dv-marquee-star {
1586    color: #c8421e;
1587    font-size: 1.5rem;
1588  }
1589
1590  /* Continuous sliding animation logic */
1591  @keyframes dv-marquee-slide {
1592    0% { transform: translateX(0); }
1593    100% { transform: translateX(-50%); }
1594  }
1595
1596  /* --- Mobile & Tablet Responsiveness --- */
1597  @media (max-width: 768px) {
1598    .dv-marquee-group {
1599      gap: 1.75rem;
1600      padding-right: 1.75rem;
1601    }
1602    .dv-marquee-item {
1603      font-size: 1.25rem; /* Scales text down cleanly for mobile screens */
1604      gap: 1.75rem;
1605    }
1606    .dv-marquee-star {
1607      font-size: 1.1rem;
1608    }
1609    /* Speed up animation slightly on smaller viewports for visual rhythm */
1610    .dv-marquee-track {
1611      animation-duration: 25s; 
1612    }
1613  }
1614</style>
1615
1616<div class="dv-marquee-holder">
1617  <div class="dv-marquee-track">
1618    
1619    <div class="dv-marquee-group">
1620      <span class="dv-marquee-item">KONPA <span class="dv-marquee-star">★</span></span>
1621      <span class="dv-marquee-item">REGGAE <span class="dv-marquee-star">★</span></span>
1622      <span class="dv-marquee-item">LATIN <span class="dv-marquee-star">★</span></span>
1623      <span class="dv-marquee-item">RNB <span class="dv-marquee-star">★</span></span>
1624      <span class="dv-marquee-item">AFROBEATS <span class="dv-marquee-star">★</span></span>
1625      <span class="dv-marquee-item">KREYÒL TALK <span class="dv-marquee-star">★</span></span>
1626      <span class="dv-marquee-item">GOSPEL <span class="dv-marquee-star">★</span></span>
1627      <span class="dv-marquee-item">ZOUK <span class="dv-marquee-star">★</span></span>
1628      <span class="dv-marquee-item">SOUL <span class="dv-marquee-star">★</span></span>
1629      <span class="dv-marquee-item">DYASPORA <span class="dv-marquee-star">★</span></span>
1630    </div>
1631
1632    <div class="dv-marquee-group" aria-hidden="true">
1633      <span class="dv-marquee-item">KONPA <span class="dv-marquee-star">★</span></span>
1634      <span class="dv-marquee-item">REGGAE <span class="dv-marquee-star">★</span></span>
1635      <span class="dv-marquee-item">LATIN <span class="dv-marquee-star">★</span></span>
1636      <span class="dv-marquee-item">RNB <span class="dv-marquee-star">★</span></span>
1637      <span class="dv-marquee-item">AFROBEATS <span class="dv-marquee-star">★</span></span>
1638      <span class="dv-marquee-item">KREYÒL TALK <span class="dv-marquee-star">★</span></span>
1639      <span class="dv-marquee-item">GOSPEL <span class="dv-marquee-star">★</span></span>
1640      <span class="dv-marquee-item">ZOUK <span class="dv-marquee-star">★</span></span>
1641      <span class="dv-marquee-item">SOUL <span class="dv-marquee-star">★</span></span>
1642      <span class="dv-marquee-item">DYASPORA <span class="dv-marquee-star">★</span></span>
1643    </div>
1644    
1645  </div>
1646</div>				</div>
1647				</div>
1648					</div>
1649				</div>
1650		<div class="elementor-element elementor-element-d440063 e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-parent" data-id="d440063" data-element_type="container" data-e-type="container" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
1651					<div class="e-con-inner">
1652				<div class="elementor-element elementor-element-457b3a3 elementor-widget elementor-widget-heading" data-id="457b3a3" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
1653				<div class="elementor-widget-container">
1654					<h2 class="elementor-heading-title elementor-size-default">WATCH</h2>				</div>
1655				</div>
1656				<div class="elementor-element elementor-element-b5c6dc8 elementor-widget elementor-widget-heading" data-id="b5c6dc8" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
1657				<div class="elementor-widget-container">
1658					<h2 class="elementor-heading-title elementor-size-default">FEATURED <span class="dv-gradient-text">VIDEOS</span></h2>				</div>
1659				</div>
1660				<div class="elementor-element elementor-element-cbafaa9 elementor-widget elementor-widget-html" data-id="cbafaa9" data-element_type="widget" data-e-type="widget" id="video" data-widget_type="html.default">
1661				<div class="elementor-widget-container">
1662					<style>
1663  /* Video Container Wrapper for a clean, premium look */
1664  .dv-video-wrapper {
1665    width: 100%;
1666    box-sizing: border-box;
1667    overflow: hidden;
1668    border-radius: 1rem; /* 16px */
1669    border: 1px solid rgba(0, 0, 0, 0.1); /* Subtle border */
1670    padding: 0.5rem; /* 8px padding on mobile */
1671    /* Background color omitted so your Elementor container shows through */
1672  }
1673
1674  @media (min-width: 640px) {
1675    .dv-video-wrapper {
1676      padding: 1rem; /* 16px padding on larger screens */
1677    }
1678  }
1679</style>
1680
1681<div class="dv-video-wrapper">
1682  <!-- The EmbedVid Target Div -->
1683  <div id="embedvidio-a1ebc505-6b9a-4d6c-9f55-474175136bc9"></div>
1684</div>
1685
1686<!-- EmbedVid Script -->
1687<script src="https://www.embedvid.io/embedjs/embedvidio.js" defer></script>
1687				</div>
1688				</div>
1689					</div>
1690				</div>
1691		<div class="elementor-element elementor-element-0180ce7 e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-parent" data-id="0180ce7" data-element_type="container" data-e-type="container" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
1692					<div class="e-con-inner">
1693				<div class="elementor-element elementor-element-a562e6f elementor-widget elementor-widget-heading" data-id="a562e6f" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
1694				<div class="elementor-widget-container">
1695					<h2 class="elementor-heading-title elementor-size-default">DodoprVibe Blog</h2>				</div>
1696				</div>
1697				<div class="elementor-element elementor-element-c8234f3 elementor-widget elementor-widget-heading" data-id="c8234f3" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
1698				<div class="elementor-widget-container">
1699					<h2 class="elementor-heading-title elementor-size-default">latest <span class="dv-gradient-text">stories</span></h2>				</div>
1700				</div>
1701				<div class="elementor-element elementor-element-a69852f elementor-widget elementor-widget-html" data-id="a69852f" data-element_type="widget" data-e-type="widget" data-widget_type="html.default">
1702				<div class="elementor-widget-container">
1703					<style>
1704  @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Sora:wght@600;700;800&display=swap');
1705
1706  /* Homepage Section Wrapper */
1707  .dv-hp-blog-section {
1708    font-family: 'Inter', system-ui, sans-serif;
1709    width: 100%;
1710    max-width: 1280px;
1711    margin: 0 auto;
1712    padding: 1rem 0; /* Adjust padding in Elementor if needed */
1713    box-sizing: border-box;
1714  }
1715
1716  /* Section Header Styling (Matches Homepage Aesthetic) */
1717  .dv-hp-header {
1718    margin-bottom: 2.5rem;
1719    display: flex;
1720    flex-wrap: wrap;
1721    align-items: flex-end;
1722    justify-content: space-between;
1723    gap: 1.5rem;
1724  }
1725
1726  .dv-hp-label {
1727    font-size: 0.75rem;
1728    font-weight: 700;
1729    text-transform: uppercase;
1730    letter-spacing: 0.3em;
1731    color: #c8421e; /* DodorVibe Primary */
1732    display: block;
1733    margin-bottom: 0.75rem;
1734  }
1735
1736  .dv-hp-title {
1737    font-size: clamp(2rem, 4vw, 3rem);
1738    font-weight: 800;
1739    color: #2a2018; /* DodorVibe Ink */
1740    line-height: 1.1;
1741    letter-spacing: -0.025em;
1742    margin: 0;
1743  }
1744  
1745  .dv-hp-title span {
1746    color: #c8421e;
1747  }
1748
1749  /* 3-Column Grid */
1750  .dv-hp-grid {
1751    display: grid;
1752    grid-template-columns: 1fr;
1753    gap: 1.5rem;
1754  }
1755
1756  @media (min-width: 640px) { .dv-hp-grid { grid-template-columns: repeat(2, 1fr); } }
1757  @media (min-width: 1024px) { .dv-hp-grid { grid-template-columns: repeat(3, 1fr); } }
1758
1759  /* Premium Card Design */
1760  .dv-hp-card {
1761    background-color: #fffaf0; /* DodorVibe Surface */
1762    border: 1px solid rgba(0, 0, 0, 0.08);
1763    border-radius: 1.5rem;
1764    overflow: hidden;
1765    text-decoration: none;
1766    display: flex;
1767    flex-direction: column;
1768    transition: transform 0.3s ease, box-shadow 0.3s ease, border-color 0.3s ease;
1769  }
1770
1771  .dv-hp-card:hover {
1772    transform: translateY(-5px);
1773    box-shadow: 0 20px 40px -10px rgba(0, 0, 0, 0.1);
1774    border-color: #c8421e;
1775  }
1776
1777  .dv-hp-img-wrap {
1778    width: 100%;
1779    aspect-ratio: 4 / 3;
1780    overflow: hidden;
1781    background: rgba(0,0,0,0.05);
1782  }
1783
1784  .dv-hp-img-wrap img {
1785    width: 100%;
1786    height: 100%;
1787    object-fit: cover;
1788    transition: transform 0.5s ease;
1789  }
1790
1791  .dv-hp-card:hover .dv-hp-img-wrap img {
1792    transform: scale(1.05);
1793  }
1794
1795  /* Card Content */
1796  .dv-hp-content {
1797    padding: 1.5rem;
1798    display: flex;
1799    flex-direction: column;
1800    flex: 1;
1801  }
1802
1803  .dv-hp-cat {
1804    font-size: 0.6875rem; /* 11px */
1805    font-weight: 700;
1806    text-transform: uppercase;
1807    letter-spacing: 0.25em;
1808    color: #c8421e;
1809    margin-bottom: 0.5rem;
1810  }
1811
1812  .dv-hp-card-title {
1813    font-family: 'Sora', system-ui, sans-serif;
1814    font-size: 1.25rem;
1815    font-weight: 800;
1816    color: #2a2018;
1817    line-height: 1.3;
1818    margin: 0 0 0.75rem 0;
1819    letter-spacing: -0.01em;
1820  }
1821
1822  .dv-hp-excerpt {
1823    font-size: 0.95rem;
1824    color: #6b5f55; /* Muted Ink */
1825    line-height: 1.6;
1826    margin: 0 0 1.5rem 0;
1827    display: -webkit-box;
1828    -webkit-line-clamp: 3;
1829    -webkit-box-orient: vertical;
1830    overflow: hidden;
1831  }
1832
1833  .dv-hp-meta {
1834    margin-top: auto;
1835    display: flex;
1836    align-items: center;
1837    gap: 1rem;
1838    font-size: 0.75rem;
1839    font-weight: 700;
1840    color: #6b5f55;
1841  }
1842
1843  /* Footer & Button */
1844  .dv-hp-footer {
1845    margin-top: 3rem;
1846    display: flex;
1847    justify-content: center;
1848  }
1849
1850  .dv-hp-btn {
1851    display: inline-flex;
1852    align-items: center;
1853    gap: 0.5rem;
1854    background: rgba(0, 0, 0, 0.04);
1855    border: 1px solid rgba(0, 0, 0, 0.1);
1856    color: #2a2018 !important;
1857    padding: 0.75rem 1.75rem;
1858    border-radius: 9999px;
1859    font-weight: 700;
1860    font-size: 0.95rem;
1861    text-decoration: none;
1862    transition: all 0.2s ease;
1863  }
1864
1865  .dv-hp-btn:hover {
1866    background: rgba(0, 0, 0, 0.08);
1867    transform: translateY(-2px);
1868  }
1869
1870  /* Skeleton Loaders (For instant perceived performance) */
1871  .dv-skel {
1872    background: linear-gradient(110deg, rgba(0,0,0,0.03) 8%, rgba(0,0,0,0.06) 18%, rgba(0,0,0,0.03) 33%);
1873    border-radius: 5px;
1874    background-size: 200% 100%;
1875    animation: 1.5s dv-shine linear infinite;
1876  }
1877  @keyframes dv-shine { to { background-position-x: -200%; } }
1878</style>
1879
1880<section class="dv-hp-blog-section">
1881  
1882
1883  <div id="dv-hp-grid" class="dv-hp-grid">
1884    <div class="dv-hp-card"><div class="dv-hp-img-wrap dv-skel"></div><div class="dv-hp-content"><div class="dv-skel" style="height:120px;"></div></div></div>
1885    <div class="dv-hp-card hidden sm:flex"><div class="dv-hp-img-wrap dv-skel"></div><div class="dv-hp-content"><div class="dv-skel" style="height:120px;"></div></div></div>
1886    <div class="dv-hp-card hidden lg:flex"><div class="dv-hp-img-wrap dv-skel"></div><div class="dv-hp-content"><div class="dv-skel" style="height:120px;"></div></div></div>
1887  </div>
1888
1889  <div class="dv-hp-footer">
1890    <a href="https://dodorvibe.com/blog" class="dv-hp-btn">View All Posts &rarr;</a>
1891  </div>
1892
1893</section>
1894
1895<script>
1896document.addEventListener("DOMContentLoaded", async function() {
1897  
1898  // Fast-loading API request (Limits to 3 posts and only requests necessary fields)
1899  const wpApiUrl = 'https://dodorvibe.com/wp-json/wp/v2/posts?_embed&per_page=3&_fields=id,title,excerpt,date,link,_links,_embedded';
1900
1901  const formatDate = (dateStr) => new Date(dateStr).toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' });
1902  const stripHtml = (html) => { let tmp = document.createElement("DIV"); tmp.innerHTML = html; return tmp.textContent || tmp.innerText || ""; };
1903  
1904  // Helper to approximate read time
1905  const calcReadTime = (excerptHtml) => {
1906    // We base it on excerpt length as a proxy, or just give a standard estimate since we aren't pulling full content to save speed.
1907    return `${Math.floor(Math.random() * (6 - 3 + 1) + 3)} min read`; // Returns random 3-6 min read for visual consistency
1908  };
1909
1910  try {
1911    const response = await fetch(wpApiUrl);
1912    if (!response.ok) throw new Error('Network response failed');
1913    const posts = await response.json();
1914
1915    if (posts.length === 0) return;
1916
1917    let gridHtml = '';
1918
1919    posts.forEach(post => {
1920      // Safely grab the image or use the logo as a fallback
1921      const imgUrl = post._embedded?.['wp:featuredmedia']?.[0]?.source_url 
1922                     || 'https://dodorvibe.com/wp-content/uploads/2024/01/Dodor-Vibe-FM_trans-NoText-170x170.png';
1923      
1924      const category = post._embedded?.['wp:term']?.[0]?.[0]?.name || 'Update';
1925      
1926      gridHtml += `
1927        <a href="${post.link}" class="dv-hp-card">
1928          <div class="dv-hp-img-wrap">
1929            <img decoding="async" src="${imgUrl}" alt="${post.title.rendered}" loading="lazy" />
1930          </div>
1931          <div class="dv-hp-content">
1932            <span class="dv-hp-cat">${category}</span>
1933            <h3 class="dv-hp-card-title">${post.title.rendered}</h3>
1934            <p class="dv-hp-excerpt">${stripHtml(post.excerpt.rendered)}</p>
1935            <div class="dv-hp-meta">
1936              <span>${formatDate(post.date)}</span>
1937              <span>${calcReadTime()}</span>
1938            </div>
1939          </div>
1940        </a>
1941      `;
1942    });
1943
1944    document.getElementById('dv-hp-grid').innerHTML = gridHtml;
1945
1946  } catch (error) {
1947    console.error('Error fetching WordPress posts:', error);
1948    document.getElementById('dv-hp-grid').innerHTML = '<p style="color:#c8421e; font-weight:bold;">Unable to load recent posts.</p>';
1949  }
1950});
1951</script>
1951				</div>
1952				</div>
1953					</div>
1954				</div>
1955		<div class="elementor-element elementor-element-0e1d4b7 e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-parent" data-id="0e1d4b7" data-element_type="container" data-e-type="container" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
1956					<div class="e-con-inner">
1957		<div class="elementor-element elementor-element-61b72ed e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child" data-id="61b72ed" data-element_type="container" data-e-type="container">
1958		<div class="elementor-element elementor-element-f00392c e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child" data-id="f00392c" data-element_type="container" data-e-type="container">
1959				<div class="elementor-element elementor-element-9bbb14b elementor-widget elementor-widget-heading" data-id="9bbb14b" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
1960				<div class="elementor-widget-container">
1961					<h2 class="elementor-heading-title elementor-size-default">The Sound</h2>				</div>
1962				</div>
1963				<div class="elementor-element elementor-element-64860c7 elementor-widget elementor-widget-heading" data-id="64860c7" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
1964				<div class="elementor-widget-container">
1965					<h2 class="elementor-heading-title elementor-size-default">Radio that <span class="dv-gradient-text">moves with you.</span></h2>				</div>
1966				</div>
1967				</div>
1968		<div class="elementor-element elementor-element-1d73c31 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child" data-id="1d73c31" data-element_type="container" data-e-type="container">
1969				<div class="elementor-element elementor-element-fa198ff elementor-widget elementor-widget-text-editor" data-id="fa198ff" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
1970				<div class="elementor-widget-container">
1971									<p>From morning blessings to late-night vibes — DodorVibe is curated by humans, powered by the dyaspora, and built for the way you actually listen. No algorithms. Just selectors who know.</p>								</div>
1972				</div>
1973				</div>
1974				</div>
1975		<div class="elementor-element elementor-element-6f8d55a e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child" data-id="6f8d55a" data-element_type="container" data-e-type="container">
1976				<div class="elementor-element elementor-element-ccf95cc elementor-widget elementor-widget-html" data-id="ccf95cc" data-element_type="widget" data-e-type="widget" data-widget_type="html.default">
1977				<div class="elementor-widget-container">
1978					<style>
1979  @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;600&display=swap');
1980
1981  /* Grid layout for the cards */
1982  .dv-features-grid {
1983    display: grid;
1984    grid-template-columns: 1fr; /* Stack vertically on mobile by default */
1985    gap: 1.25rem; /* 20px spacing between cards */
1986    font-family: 'Inter', system-ui, sans-serif;
1987    width: 100%;
1988  }
1989
1990  /* Responsive rule for Tablet and Desktop */
1991  @media (min-width: 768px) {
1992    .dv-features-grid {
1993      grid-template-columns: repeat(3, 1fr); /* 3 columns side-by-side */
1994    }
1995  }
1996
1997  /* Individual Card Styling */
1998  .dv-feature-card {
1999    background: #ffffff;
2000    border: 1px solid rgba(0, 0, 0, 0.1);
2001    border-radius: 1rem; /* 16px */
2002    padding: 1.5rem; /* 24px */
2003    transition: border-color 0.3s ease, transform 0.3s ease;
2004    box-sizing: border-box;
2005  }
2006
2007  /* Subtle hover effect */
2008  .dv-feature-card:hover {
2009    border-color: rgba(200, 66, 30, 0.4); /* Faint primary color border */
2010  }
2011
2012  /* The Gradient Icon Box */
2013  .dv-feature-icon {
2014    display: grid;
2015    place-items: center;
2016    width: 2.75rem; /* 44px */
2017    height: 2.75rem; /* 44px */
2018    border-radius: 0.75rem; /* 12px */
2019    background: linear-gradient(135deg, #e7853d, #c8421e 55%, #8a2a14);
2020    color: #ffffff;
2021    margin-bottom: 1.25rem; /* Space below icon */
2022  }
2023
2024  .dv-feature-icon svg {
2025    width: 1.25rem; /* 20px */
2026    height: 1.25rem; /* 20px */
2027  }
2028
2029  /* Card Typography */
2030  .dv-feature-title {
2031    font-size: 1.25rem; /* 20px */
2032    font-weight: 600;
2033    color: #2a2018; /* Dark ink color */
2034    margin: 0 0 0.5rem 0; /* Space below title */
2035    line-height: 1.3;
2036  }
2037
2038  .dv-feature-desc {
2039    font-size: 0.875rem; /* 14px */
2040    color: rgba(42, 32, 24, 0.7); /* Muted ink text */
2041    margin: 0;
2042    line-height: 1.5;
2043  }
2044</style>
2045
2046<div class="dv-features-grid">
2047  
2048  <div class="dv-feature-card">
2049    <div class="dv-feature-icon">
2050      <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
2051        <path d="M3 12a9 9 0 0 1 18 0v7a2 2 0 0 1-2 2h-2v-8h4M3 19v-7h4v8H5a2 2 0 0 1-2-2z"/>
2052      </svg>
2053    </div>
2054    <h3 class="dv-feature-title">Live Stream</h3>
2055    <p class="dv-feature-desc">Crisp 128 kbps audio, optimized for headphones, car, and home speakers.</p>
2056  </div>
2057
2058  <div class="dv-feature-card">
2059    <div class="dv-feature-icon">
2060      <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
2061        <path d="M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z"/>
2062        <path d="M19 10v2a7 7 0 0 1-14 0v-2M12 19v4M8 23h8"/>
2063      </svg>
2064    </div>
2065    <h3 class="dv-feature-title">Voices that Matter</h3>
2066    <p class="dv-feature-desc">Hosts rooted in Haitian culture, broadcasting from Port-au-Prince, Miami, Montréal, and Brooklyn.</p>
2067  </div>
2068
2069  <div class="dv-feature-card">
2070    <div class="dv-feature-icon">
2071      <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
2072        <rect x="3" y="4" width="18" height="18" rx="2"/>
2073        <line x1="16" y1="2" x2="16" y2="6"/>
2074        <line x1="8" y1="2" x2="8" y2="6"/>
2075        <line x1="3" y1="10" x2="21" y2="10"/>
2076      </svg>
2077    </div>
2078    <h3 class="dv-feature-title">Always Programmed</h3>
2079    <p class="dv-feature-desc">A full weekly schedule of original shows — no dead air, no autoplay loops.</p>
2080  </div>
2081
2082</div>
2082				</div>
2083				</div>
2084				</div>
2085		<div class="elementor-element elementor-element-b626ae5 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child" data-id="b626ae5" data-element_type="container" data-e-type="container">
2086				<div class="elementor-element elementor-element-8c4d3f5 elementor-widget elementor-widget-html" data-id="8c4d3f5" data-element_type="widget" data-e-type="widget" data-widget_type="html.default">
2087				<div class="elementor-widget-container">
2088					<style>
2089  @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');
2090
2091  /* Main Card Wrapper */
2092  .dv-history-card {
2093    background: #ffffff;
2094    border: 1px solid rgba(0, 0, 0, 0.1);
2095    border-radius: 1.5rem; /* 24px */
2096    padding: 1.25rem 1.5rem; /* 20px 24px */
2097    font-family: 'Inter', system-ui, sans-serif;
2098    width: 100%;
2099    box-sizing: border-box;
2100  }
2101
2102  /* Header Section */
2103  .dv-history-header {
2104    display: flex;
2105    align-items: center;
2106    justify-content: space-between;
2107    margin-bottom: 1rem;
2108  }
2109
2110  .dv-history-title {
2111    font-size: 0.75rem; /* 12px */
2112    font-weight: 700;
2113    text-transform: uppercase;
2114    letter-spacing: 0.3em;
2115    color: #c8421e;
2116    margin: 0;
2117  }
2118
2119  .dv-history-subtitle {
2120    font-size: 0.75rem; /* 12px */
2121    color: #6b5f55;
2122  }
2123
2124  /* The List */
2125  .dv-history-list {
2126    list-style: none;
2127    padding: 0;
2128    margin: 0;
2129  }
2130
2131  /* Individual Track Items */
2132  .dv-history-item {
2133    display: flex;
2134    align-items: center;
2135    gap: 0.75rem; /* 12px */
2136    padding: 0.75rem 0;
2137    border-top: 1px solid rgba(0, 0, 0, 0.1);
2138  }
2139
2140  /* The little orange music icon box */
2141  .dv-history-icon-box {
2142    display: grid;
2143    place-items: center;
2144    flex-shrink: 0;
2145    width: 2.25rem; /* 36px */
2146    height: 2.25rem; /* 36px */
2147    border-radius: 0.5rem; /* 8px */
2148    background: rgba(200, 66, 30, 0.10); /* Very faint primary color */
2149    color: #c8421e;
2150  }
2151
2152  .dv-history-icon-box svg {
2153    width: 1rem; /* 16px */
2154    height: 1rem;
2155  }
2156
2157  /* Track Title */
2158  .dv-history-track-name {
2159    flex: 1;
2160    min-width: 0; /* allows truncation */
2161    font-size: 1rem; /* 16px */
2162    font-weight: 500;
2163    color: rgba(42, 32, 24, 0.9);
2164    white-space: nowrap;
2165    overflow: hidden;
2166    text-overflow: ellipsis; /* Adds '...' if title is too long */
2167  }
2168
2169  /* Time Ago */
2170  .dv-history-time {
2171    font-size: 0.75rem; /* 12px */
2172    color: #6b5f55;
2173    white-space: nowrap;
2174  }
2175
2176  /* --- Mobile Adjustments --- */
2177  @media (max-width: 480px) {
2178    .dv-history-card {
2179      padding: 1rem;
2180    }
2181    .dv-history-track-name {
2182      font-size: 0.875rem; /* 14px on small screens */
2183    }
2184  }
2185</style>
2186
2187<div class="dv-history-card">
2188  <div class="dv-history-header">
2189    <h4 class="dv-history-title">Recently Played</h4>
2190    <span class="dv-history-subtitle">live from the station</span>
2191  </div>
2192
2193  <ul id="dv-history-ul" class="dv-history-list">
2194    <li class="dv-history-item">
2195      <span class="dv-history-icon-box">
2196        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M9 18V5l12-2v13"/><circle cx="6" cy="18" r="3"/><circle cx="18" cy="16" r="3"/></svg>
2197      </span>
2198      <span class="dv-history-track-name">Loading live history...</span>
2199      <span class="dv-history-time">just now</span>
2200    </li>
2201  </ul>
2202</div>
2203
2204<script>
2205  document.addEventListener("DOMContentLoaded", function() {
2206    const STATUS_URL = 'https://public.radio.co/stations/sf88847753/status';
2207    const historyList = document.getElementById('dv-history-ul');
2208
2209    async function fetchHistory() {
2210      try {
2211        const r = await fetch(STATUS_URL, { cache: 'no-store' });
2212        if (!r.ok) return;
2213        const data = await r.json();
2214        
2215        // Grab the last 5 tracks
2216        const hist = Array.isArray(data.history) ? data.history.slice(0, 5) : [];
2217        
2218        if (hist.length > 0) {
2219          historyList.innerHTML = hist.map((track, i) => {
2220            // Calculate a fake "time ago" string like the original HTML
2221            const timeAgo = i === 0 ? 'just now' : (i * 3) + 'm ago';
2222            
2223            return `
2224              <li class="dv-history-item">
2225                <span class="dv-history-icon-box">
2226                  <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
2227                    <path d="M9 18V5l12-2v13"/><circle cx="6" cy="18" r="3"/><circle cx="18" cy="16" r="3"/>
2228                  </svg>
2229                </span>
2230                <span class="dv-history-track-name">${track.title}</span>
2231                <span class="dv-history-time">${timeAgo}</span>
2232              </li>
2233            `;
2234          }).join('');
2235        }
2236      } catch (err) {
2237        console.error("Could not fetch radio history", err);
2238      }
2239    }
2240
2241    // Fetch immediately and refresh every 30 seconds
2242    fetchHistory();
2243    setInterval(fetchHistory, 30000);
2244  });
2245</script>
2245				</div>
2246				</div>
2247				</div>
2248					</div>
2249				</div>
2250		<div class="elementor-element elementor-element-944963a e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-parent" data-id="944963a" data-element_type="container" data-e-type="container" id="schedule" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
2251					<div class="e-con-inner">
2252				<div class="elementor-element elementor-element-fbfe423 elementor-widget elementor-widget-heading" data-id="fbfe423" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
2253				<div class="elementor-widget-container">
2254					<h2 class="elementor-heading-title elementor-size-default">Today's Schedule</h2>				</div>
2255				</div>
2256				<div class="elementor-element elementor-element-216dae4 elementor-widget elementor-widget-heading" data-id="216dae4" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
2257				<div class="elementor-widget-container">
2258					<h2 class="elementor-heading-title elementor-size-default">On the air <span class="dv-gradient-text">this week</span></h2>				</div>
2259				</div>
2260				<div class="elementor-element elementor-element-58ff34c elementor-widget elementor-widget-html" data-id="58ff34c" data-element_type="widget" data-e-type="widget" data-widget_type="html.default">
2261				<div class="elementor-widget-container">
2262					<style>
2263  /* Wrapper for the Radio.co Schedule Embed */
2264  .dv-schedule-wrapper {
2265    width: 100%;
2266    box-sizing: border-box;
2267    border-radius: 1rem; /* 16px */
2268    border: 1px solid rgba(0, 0, 0, 0.1);
2269    padding: 1rem; /* 16px padding on mobile */
2270    /* Background omitted so your Elementor design shows through! */
2271  }
2272
2273  @media (min-width: 640px) {
2274    .dv-schedule-wrapper {
2275      padding: 1.5rem; /* 24px padding on tablets and desktop */
2276    }
2277  }
2278</style>
2279
2280<div class="dv-schedule-wrapper">
2281  <!-- Radio.co Official Schedule Embed Script -->
2282  
2282<script src="https://embed.radio.co/embeds/schedule/es0c7a6c7.js"></script>
2282
2283</div>				</div>
2284				</div>
2285					</div>
2286				</div>
2287		<div class="elementor-element elementor-element-c9555f7 e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-parent" data-id="c9555f7" data-element_type="container" data-e-type="container" id="team" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
2288					<div class="e-con-inner">
2289		<div class="elementor-element elementor-element-fb78f7a e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child" data-id="fb78f7a" data-element_type="container" data-e-type="container">
2290		<div class="elementor-element elementor-element-3f6cf7d e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child" data-id="3f6cf7d" data-element_type="container" data-e-type="container">
2291				<div class="elementor-element elementor-element-4568b7f elementor-widget elementor-widget-heading" data-id="4568b7f" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
2292				<div class="elementor-widget-container">
2293					<h2 class="elementor-heading-title elementor-size-default">The Voices</h2>				</div>
2294				</div>
2295				<div class="elementor-element elementor-element-7da436e elementor-widget elementor-widget-heading" data-id="7da436e" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
2296				<div class="elementor-widget-container">
2297					<h2 class="elementor-heading-title elementor-size-default">Meet our <span class="dv-gradient-text">staff.</span></h2>				</div>
2298				</div>
2299				</div>
2300		<div class="elementor-element elementor-element-4e350bc e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child" data-id="4e350bc" data-element_type="container" data-e-type="container">
2301				<div class="elementor-element elementor-element-442596c elementor-widget elementor-widget-text-editor" data-id="442596c" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
2302				<div class="elementor-widget-container">
2303									<p>The DodorVibe FM crew — owners, producers, DJs, and storytellers broadcasting culture across the diaspora.</p>								</div>
2304				</div>
2305				</div>
2306				</div>
2307		<div class="elementor-element elementor-element-03bb1fd e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child" data-id="03bb1fd" data-element_type="container" data-e-type="container">
2308				<div class="elementor-element elementor-element-dbc8cfb elementor-widget elementor-widget-html" data-id="dbc8cfb" data-element_type="widget" data-e-type="widget" data-widget_type="html.default">
2309				<div class="elementor-widget-container">
2310					<style>
2311  @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&display=swap');
2312
2313  /* The Main Grid Layout */
2314  .dv-team-grid {
2315    display: grid;
2316    grid-template-columns: repeat(1, 1fr); /* 1 column on mobile */
2317    gap: 1.25rem; /* 20px */
2318    font-family: 'Inter', system-ui, sans-serif;
2319    width: 100%;
2320  }
2321
2322  /* Tablet (2 columns) */
2323  @media (min-width: 640px) {
2324    .dv-team-grid { grid-template-columns: repeat(2, 1fr); }
2325  }
2326  /* Desktop (3 columns) */
2327  @media (min-width: 1024px) {
2328    .dv-team-grid { grid-template-columns: repeat(3, 1fr); }
2329  }
2330  /* Large Desktop (4 columns) */
2331  @media (min-width: 1280px) {
2332    .dv-team-grid { grid-template-columns: repeat(4, 1fr); }
2333  }
2334
2335  /* The Staff Card */
2336  .dv-team-card {
2337    background-color: #fffaf0; /* Matches the V2 surface color */
2338    border: 1px solid rgba(0, 0, 0, 0.1);
2339    border-radius: 1rem; /* 16px */
2340    padding: 1rem; 
2341    transition: transform 0.3s ease, border-color 0.3s ease;
2342    box-sizing: border-box;
2343  }
2344
2345  @media (min-width: 640px) {
2346    .dv-team-card { padding: 1.25rem; }
2347  }
2348
2349  /* Card Hover Animations */
2350  .dv-team-card:hover {
2351    transform: translateY(-4px);
2352    border-color: rgba(200, 66, 30, 0.4);
2353  }
2354  
2355  .dv-team-card:hover .dv-team-img {
2356    transform: scale(1.05);
2357  }
2358
2359  /* Image Container */
2360  .dv-team-img-wrap {
2361    aspect-ratio: 1 / 1;
2362    width: 100%;
2363    overflow: hidden;
2364    border-radius: 0.75rem; /* 12px */
2365    background: rgba(0, 0, 0, 0.05);
2366  }
2367
2368  .dv-team-img {
2369    width: 100%;
2370    height: 100%;
2371    object-fit: cover;
2372    transition: transform 0.5s ease;
2373  }
2374
2375  /* Text Styling */
2376  .dv-team-name {
2377    font-size: 1.125rem;
2378    font-weight: 700;
2379    color: #2a2018; /* Dark ink */
2380    margin: 1rem 0 0 0;
2381    line-height: 1.25;
2382  }
2383
2384  @media (min-width: 640px) {
2385    .dv-team-name { font-size: 1.25rem; }
2386  }
2387
2388  .dv-team-role {
2389    font-size: 0.75rem;
2390    font-weight: 600;
2391    text-transform: uppercase;
2392    letter-spacing: 0.05em;
2393    color: #c8421e; /* DodorVibe Brand Red/Orange */
2394    margin: 0.25rem 0 0.5rem 0;
2395  }
2396
2397  @media (min-width: 640px) {
2398    .dv-team-role { font-size: 0.875rem; }
2399  }
2400
2401  .dv-team-bio {
2402    font-size: 0.875rem;
2403    color: rgba(42, 32, 24, 0.7);
2404    margin: 0;
2405    /* V2 line-clamp-3 effect */
2406    display: -webkit-box;
2407    -webkit-line-clamp: 3;
2408    -webkit-box-orient: vertical;
2409    overflow: hidden;
2410  }
2411</style>
2412
2413<div class="dv-team-grid">
2414  
2415  <!-- Host 1 -->
2416  <article class="dv-team-card">
2417    <div class="dv-team-img-wrap">
2418      <img decoding="async" src="https://dodorvibe.com/wp-content/uploads/2024/01/Dolores-300x196.jpg" alt="Dolores Murat-Etienne" loading="lazy" class="dv-team-img" />
2419    </div>
2420    <h3 class="dv-team-name">Dolores Murat-Etienne</h3>
2421    <p class="dv-team-role">Owner & Host</p>
2422    <p class="dv-team-bio">Bridging communities — employment help to health fairs, broadcasting from the heart of Brooklyn.</p>
2423  </article>
2424
2425  <!-- Host 2 -->
2426  <article class="dv-team-card">
2427    <div class="dv-team-img-wrap">
2428      <img decoding="async" src="https://dodorvibe.com/wp-content/uploads/2024/01/Salvador-300x211.jpg" alt="Jean Salvador Etienne" loading="lazy" class="dv-team-img" />
2429    </div>
2430    <h3 class="dv-team-name">
2430Jean Salvador Etienne</h3>
2431    <p class="dv-team-role">Owner/Producer</p>
2432    <p class="dv-team-bio">Producer behind the station's flagship show, connecting high-profile voices of the diaspora.</p>
2433  </article>
2434
2435  <!-- Host 3 -->
2436  <article class="dv-team-card">
2437    <div class="dv-team-img-wrap">
2438      <img decoding="async" src="https://dodorvibe.com/wp-content/uploads/2024/01/Pascal02-291x300.jpg" alt="Pascal Antoine" loading="lazy" class="dv-team-img" />
2439    </div>
2440    <h3 class="dv-team-name">Pascal Antoine</h3>
2441    <p class="dv-team-role">Announcer · Comms Manager</p>
2442    <p class="dv-team-bio">Video producer turned on-air personality, juggling audio/video, web, and the mic.</p>
2443  </article>
2444
2445  <!-- Host 4 -->
2446  <article class="dv-team-card">
2447    <div class="dv-team-img-wrap">
2448      <img decoding="async" src="https://dodorvibe.com/wp-content/uploads/2024/04/Emannuel-Laurent-296x300.jpg" alt="Emmanuel Laurent" loading="lazy" class="dv-team-img" />
2449    </div>
2450    <h3 class="dv-team-name">Emmanuel Laurent</h3>
2451    <p class="dv-team-role">Producer · Music Curator</p>
2452    <p class="dv-team-bio">Lifelong music lover from Haiti, curating the sound and learning the camera as he goes.</p>
2453  </article>
2454
2455  <!-- Host 5 -->
2456  <article class="dv-team-card">
2457    <div class="dv-team-img-wrap">
2458      <img decoding="async" src="https://dodorvibe.com/wp-content/uploads/2025/04/RenelLouidor-300x195.png" alt="Renel Louidor" loading="lazy" class="dv-team-img" />
2459    </div>
2460    <h3 class="dv-team-name">Renel Louidor</h3>
2461    <p class="dv-team-role">Announcer</p>
2462    <p class="dv-team-bio">Born in Grande-Rivière du Nord. Brings northern Haiti's voice and stories to the airwaves.</p>
2463  </article>
2464
2465  <!-- Host 6 -->
2466  <article class="dv-team-card">
2467    <div class="dv-team-img-wrap">
2468      <img decoding="async" src="https://dodorvibe.com/wp-content/uploads/2025/08/Aubry-300x300.jpg" alt="Claude Aubry" loading="lazy" class="dv-team-img" />
2469    </div>
2470    <h3 class="dv-team-name">Claude Aubry</h3>
2471    <p class="dv-team-role">Newscaster · Samedi en Folie</p>
2472    <p class="dv-team-bio">From Port-au-Prince with a passion for music and soccer. Catch his Saturday night madness.</p>
2473  </article>
2474
2475</div>				</div>
2476				</div>
2477				</div>
2478		<div class="elementor-element elementor-element-5db34cf e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child" data-id="5db34cf" data-element_type="container" data-e-type="container" id="app">
2479				<div class="elementor-element elementor-element-7c97bd9 elementor-widget elementor-widget-html" data-id="7c97bd9" data-element_type="widget" data-e-type="widget" id="app" data-widget_type="html.default">
2480				<div class="elementor-widget-container">
2481					<style>
2482  @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=Sora:wght@700;800&display=swap');
2483
2484  /* Main Section Container */
2485  .dv-app-section {
2486    position: relative;
2487    width: 100%;
2488    border-radius: 2rem; /* 32px */
2489    background: linear-gradient(145deg, #1f1812 0%, #0a0806 100%);
2490    overflow: hidden;
2491    font-family: 'Inter', system-ui, sans-serif;
2492    display: grid;
2493    grid-template-columns: 1fr;
2494    gap: 2rem; /* Tighter gap for mobile */
2495    padding: 2.5rem 1.25rem; /* Better padding for tiny screens */
2496    box-sizing: border-box;
2497    box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
2498  }
2499
2500  /* Tablet Breakpoint */
2501  @media (min-width: 640px) {
2502    .dv-app-section {
2503      gap: 3rem;
2504      padding: 3rem 2rem;
2505    }
2506  }
2507
2508  /* Desktop Breakpoint */
2509  @media (min-width: 860px) {
2510    .dv-app-section {
2511      grid-template-columns: 1fr 1fr;
2512      align-items: center;
2513      padding: 5rem 4rem;
2514    }
2515  }
2516
2517  /* Ambient Glowing Orbs in Background */
2518  .dv-app-section::before,
2519  .dv-app-section::after {
2520    content: '';
2521    position: absolute;
2522    border-radius: 50%;
2523    filter: blur(80px);
2524    z-index: 0;
2525    opacity: 0.4;
2526    pointer-events: none;
2527  }
2528  
2529  .dv-app-section::before {
2530    width: 400px;
2531    height: 400px;
2532    background: #c8421e;
2533    top: -100px;
2534    right: -100px;
2535  }
2536
2537  .dv-app-section::after {
2538    width: 300px;
2539    height: 300px;
2540    background: #e7853d;
2541    bottom: -50px;
2542    left: -50px;
2543  }
2544
2545  /* Left Side: Content */
2546  .dv-app-content {
2547    position: relative;
2548    z-index: 1;
2549  }
2550
2551  .dv-app-label {
2552    font-size: 0.75rem;
2553    font-weight: 700;
2554    text-transform: uppercase;
2555    letter-spacing: 0.3em;
2556    color: #c8421e;
2557    display: block;
2558    margin-bottom: 1rem;
2559  }
2560
2561  .dv-app-title {
2562    font-family: 'Sora', system-ui, sans-serif;
2563    font-size: 2rem; /* Scaled down slightly for mobile */
2564    font-weight: 800;
2565    line-height: 1.1;
2566    color: #ffffff;
2567    margin: 0 0 1.25rem 0;
2568    letter-spacing: -0.02em;
2569  }
2570
2571  @media (min-width: 480px) { .dv-app-title { font-size: 2.5rem; } }
2572  @media (min-width: 860px) { .dv-app-title { font-size: 3.5rem; } }
2573
2574  /* Text Gradient for Dark Background */
2575  .dv-app-gradient-text {
2576    background: linear-gradient(135deg, #e7853d, #c8421e 55%, #8a2a14);
2577    -webkit-background-clip: text;
2578    background-clip: text;
2579    color: transparent;
2580  }
2581
2582  .dv-app-desc {
2583    font-size: 1rem;
2584    line-height: 1.6;
2585    color: rgba(255, 255, 255, 0.75);
2586    margin: 0 0 2rem 0;
2587    max-width: 450px;
2588  }
2589
2590  /* App Download Buttons */
2591  .dv-app-buttons {
2592    display: flex;
2593    flex-direction: column; /* Stack vertically on mobile */
2594    gap: 1rem;
2595  }
2596
2597  @media (min-width: 480px) {
2598    .dv-app-buttons {
2599      flex-direction: row; /* Side-by-side on larger screens */
2600      flex-wrap: wrap;
2601    }
2602  }
2603
2604  .dv-store-btn {
2605    display: inline-flex;
2606    align-items: center;
2607    justify-content: center; /* Center text on mobile */
2608    gap: 0.75rem;
2609    background: #ffffff;
2610    color: #0a0806;
2611    padding: 0.75rem 1.25rem;
2612    border-radius: 1rem;
2613    text-decoration: none;
2614    transition: transform 0.2s ease, box-shadow 0.2s ease;
2615    width: 100%; /* Full width on mobile */
2616    box-sizing: border-box;
2617  }
2618
2619  @media (min-width: 480px) {
2620    .dv-store-btn {
2621      width: auto; /* Auto width on larger screens */
2622      justify-content: flex-start;
2623    }
2624  }
2625
2626  .dv-store-btn:hover {
2627    transform: translateY(-3px);
2628    box-shadow: 0 10px 20px rgba(0, 0, 0, 0.3);
2629  }
2630
2631  .dv-store-btn svg {
2632    width: 28px;
2633    height: 28px;
2634    fill: currentColor;
2635    flex-shrink: 0;
2636  }
2637
2638  .dv-store-text span:first-child {
2639    display: block;
2640    font-size: 0.55rem;
2641    text-transform: uppercase;
2642    letter-spacing: 0.05em;
2643    opacity: 0.7;
2644    margin-bottom: 0.1rem;
2645  }
2646
2647  .dv-store-text span:last-child {
2648    display: block;
2649    font-family: 'Sora', system-ui, sans-serif;
2650    font-size: 1.1rem;
2651    font-weight: 700;
2652    line-height: 1;
2653  }
2654
2655  /* Right Side: Phone Mockup */
2656  .dv-app-mockup-wrapper {
2657    position: relative;
2658    z-index: 1;
2659    display: flex;
2660    justify-content: center;
2661  }
2662
2663  /* The Phone Frame with Floating Animation */
2664  .dv-phone {
2665    width: 100%;
2666    max-width: 280px;
2667    aspect-ratio: 9 / 19.5;
2668    background: #faf6ef; /* DodorVibe light beige */
2669    border: 10px solid #111111;
2670    border-radius: 2.5rem;
2671    position: relative;
2672    box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.6), inset 0 0 0 2px rgba(255,255,255,0.1);
2673    overflow: hidden;
2674    animation: dv-float 6s ease-in-out infinite;
2675  }
2676
2677  @keyframes dv-float {
2678    0%, 100% { transform: translateY(0); }
2679    50% { transform: translateY(-15px); }
2680  }
2681
2682  /* Dynamic Island / Notch */
2683  .dv-phone-notch {
2684    position: absolute;
2685    top: 10px;
2686    left: 50%;
2687    transform: translateX(-50%);
2688    width: 30%;
2689    height: 20px;
2690    background: #111111;
2691    border-radius: 10px;
2692    z-index: 10;
2693  }
2694
2695  /* Phone Screen Inner UI */
2696  .dv-phone-ui {
2697    padding: 2.5rem 1.25rem 1.5rem 1.25rem;
2698    display: flex;
2699    flex-direction: column;
2700    height: 100%;
2701    box-sizing: border-box;
2702  }
2703
2704  .dv-phone-ui-header {
2705    font-size: 0.5rem;
2706    font-weight: 700;
2707    color: #c8421e;
2708    text-transform: uppercase;
2709    letter-spacing: 0.2em;
2710    margin-bottom: 1rem;
2711  }
2712
2713  .dv-phone-art {
2714    width: 100%;
2715    aspect-ratio: 1 / 1;
2716    border-radius: 1rem;
2717    background: linear-gradient(135deg, #e7853d, #c8421e 55%, #8a2a14);
2718    box-shadow: 0 10px 20px rgba(0,0,0,0.15);
2719    overflow: hidden;
2720    margin-bottom: 1.5rem;
2721  }
2722
2723  .dv-phone-art img {
2724    width: 100%;
2725    height: 100%;
2726    object-fit: cover;
2727  }
2728
2729  .dv-phone-track {
2730    font-family: 'Sora', system-ui, sans-serif;
2731    font-size: 1rem;
2732    font-weight: 700;
2733    color: #2a2018;
2734    line-height: 1.2;
2735    display: -webkit-box;
2736    -webkit-line-clamp: 2;
2737    -webkit-box-orient: vertical;
2738    overflow: hidden;
2739    margin-bottom: 0.25rem;
2740  }
2741
2742  .dv-phone-station {
2743    font-size: 0.65rem;
2744    color: #6b5f55;
2745  }
2746
2747  /* Phone UI Player Controls */
2748  .dv-phone-controls {
2749    margin-top: auto;
2750    display: flex;
2751    align-items: center;
2752    justify-content: space-between;
2753  }
2754
2755  .dv-phone-btn-side {
2756    width: 2rem;
2757    height: 2rem;
2758    border-radius: 50%;
2759    background: rgba(0,0,0,0.05);
2760  }
2761
2762  .dv-phone-play {
2763    width: 3.5rem;
2764    height: 3.5rem;
2765    border-radius: 50%;
2766    background: linear-gradient(135deg, #e7853d, #c8421e 55%, #8a2a14);
2767    color: white;
2768    display: grid;
2769    place-items: center;
2770    box-shadow: 0 4px 10px rgba(200, 66, 30, 0.4);
2771  }
2772
2773  .dv-phone-play svg {
2774    width: 1.5rem;
2775    height: 1.5rem;
2776    fill: currentColor;
2777    margin-left: 3px;
2778  }
2779</style>
2780
2781<section class="dv-app-section">
2782  
2783  <div class="dv-app-content">
2784    <span class="dv-app-label">Mobile</span>
2785    <h2 class="dv-app-title">Take the vibe <br/> <span class="dv-app-gradient-text">everywhere.</span></h2>
2786    <p class="dv-app-desc">Download the DodorVibe app for iOS and Android. Background play, lockscreen controls, and push alerts when your favorite show goes live.</p>
2787    
2788    <div class="dv-app-buttons">
2789      <a href="https://apps.apple.com/us/app/dodorvibe-fm/id6745031255" target="_blank" rel="noopener noreferrer" class="dv-store-btn">
2790        <svg viewBox="0 0 24 24"><path d="M16.5 1.7c0 1.2-.5 2.3-1.3 3.1-.9.9-2.3 1.6-3.4 1.5-.2-1.2.4-2.4 1.2-3.2.8-.9 2.3-1.5 3.5-1.4zM20 17.5c-.5 1.2-.8 1.7-1.5 2.7-1 1.5-2.4 3.3-4.2 3.3-1.6 0-2-1-4.2-1-2.1 0-2.5 1-4.2 1-1.8 0-3.1-1.7-4.1-3.1C-.6 15.5-.9 9 2.4 6.3c1.2-1 2.7-1.6 4.2-1.6 1.8 0 2.9 1 4.4 1 1.4 0 2.3-1 4.3-1 1.4 0 3 .8 4 2.2-3.5 1.9-3 6.9.7 8.6z"/></svg>
2791        <div class="dv-store-text">
2792          <span>Download on the</span>
2793          <span>App Store</span>
2794        </div>
2795      </a>
2796      
2797      <a href="https://play.google.com/store/apps/details?id=com.c93159d9fb2f.app" target="_blank" rel="noopener noreferrer" class="dv-store-btn">
2798        <svg viewBox="0 0 24 24"><path d="M3 20.5V3.5c0-.6.3-1.1.7-1.4l9.8 9.9-9.8 9.9c-.4-.3-.7-.8-.7-1.4zm10.5-7l2.6 2.6-9.3 5.3 6.7-7.9zm0-3L6.8 2.6 16.1 7.9l-2.6 2.6zM21.4 11.2c.4.3.6.8.6 1.3s-.2 1-.6 1.3l-2.9 1.7-3-3 3-3 2.9 1.7z"/></svg>
2799        <div class="dv-store-text">
2800          <span>Get it on</span>
2801          <span>Google Play</span>
2802        </div>
2803      </a>
2804    </div>
2805  </div>
2806
2807  <div class="dv-app-mockup-wrapper">
2808    <div class="dv-phone">
2809      <div class="dv-phone-notch"></div>
2810      
2811      <div class="dv-phone-ui">
2812        <div class="dv-phone-ui-header">
2812Now Playing</div>
2813        
2814        <div class="dv-phone-art">
2815          <img decoding="async" id="dv-mockup-img" src="https://dodorvibe.com/wp-content/uploads/2024/01/Dodor-Vibe-FM_trans-NoText-170x170.png" alt="Stream Art">
2816        </div>
2817        
2818        <div id="dv-mockup-title" class="dv-phone-track">DodorVibe FM</div>
2819        <div class="dv-phone-station">Live · 24/7</div>
2820
2821        <div class="dv-phone-controls">
2822          <div class="dv-phone-btn-side"></div>
2823          <div class="dv-phone-play">
2824            <svg viewBox="0 0 24 24"><path d="M8 5v14l11-7z"/></svg>
2825          </div>
2826          <div class="dv-phone-btn-side"></div>
2827        </div>
2828      </div>
2829      
2830    </div>
2831  </div>
2832
2833</section>
2834
2835<script>
2836  document.addEventListener("DOMContentLoaded", function() {
2837    const STATUS_URL = 'https://public.radio.co/stations/sf88847753/status';
2838    const mockupTitle = document.getElementById('dv-mockup-title');
2839    const mockupImg = document.getElementById('dv-mockup-img');
2840
2841    async function fetchMockupStatus() {
2842      try {
2843        const r = await fetch(STATUS_URL, { cache: 'no-store' });
2844        if (!r.ok) return;
2845        const data = await r.json();
2846        
2847        if (data.current_track && data.current_track.title) {
2848          mockupTitle.textContent = data.current_track.title;
2849        }
2850        
2851        const artUrl = data.current_track && (data.current_track.artwork_url_large || data.current_track.artwork_url);
2852        if (artUrl) {
2853          mockupImg.src = artUrl;
2854        }
2855      } catch (err) {}
2856    }
2857
2858    // Check every 20 seconds
2859    fetchMockupStatus();
2860    setInterval(fetchMockupStatus, 20000); 
2861  });
2862</script>
2862				</div>
2863				</div>
2864				</div>
2865					</div>
2866				</div>
2867		<div class="elementor-element elementor-element-8a3221c e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-parent" data-id="8a3221c" data-element_type="container" data-e-type="container" id="contact" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
2868					<div class="e-con-inner">
2869		<div class="elementor-element elementor-element-02f685d e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child" data-id="02f685d" data-element_type="container" data-e-type="container">
2870				<div class="elementor-element elementor-element-bcbef45 elementor-widget elementor-widget-heading" data-id="bcbef45" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
2871				<div class="elementor-widget-container">
2872					<h2 class="elementor-heading-title elementor-size-default">Connect</h2>				</div>
2873				</div>
2874				<div class="elementor-element elementor-element-aed5b63 elementor-widget elementor-widget-heading" data-id="aed5b63" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
2875				<div class="elementor-widget-container">
2876					<h2 class="elementor-heading-title elementor-size-default">Slide into the <span class="dv-gradient-text">studio.</span></h2>				</div>
2877				</div>
2878				<div class="elementor-element elementor-element-ce3da1e elementor-widget elementor-widget-text-editor" data-id="ce3da1e" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
2879				<div class="elementor-widget-container">
2880									<p>Song requests, show pitches, advertising, or just to say what&#8217;s good — we read every message.</p>								</div>
2881				</div>
2882				<div class="elementor-element elementor-element-0989187 elementor-widget elementor-widget-html" data-id="0989187" data-element_type="widget" data-e-type="widget" data-widget_type="html.default">
2883				<div class="elementor-widget-container">
2884					<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
2885
2886<style>
2887  @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500&display=swap');
2888
2889  .dv-info-list {
2890    list-style: none;
2891    padding: 0;
2892    margin: 0;
2893    display: flex;
2894    flex-direction: column;
2895    gap: 1rem; /* Spacing between the two lines */
2896    font-family: 'Inter', system-ui, sans-serif;
2897  }
2898
2899  .dv-info-list li {
2900    display: flex;
2901    align-items: center;
2902    gap: 0.75rem; /* Spacing between the icon and the text */
2903    font-size: 0.875rem; /* 14px */
2904    color: #2a2018; /* Dark ink color */
2905  }
2906
2907  .dv-info-icon {
2908    color: #c8421e; /* DodorVibe Primary Orange/Red */
2909    font-size: 1.1rem; 
2910    display: inline-flex;
2911    align-items: center;
2912    justify-content: center;
2913    width: 1.25rem; /* Ensures both icons take up the exact same width so text aligns perfectly */
2914  }
2915</style>
2916
2917<ul class="dv-info-list">
2918  <li>
2919    <span class="dv-info-icon"><i class="fa-regular fa-envelope"></i></span>
2920    [email protected]
2921  </li>
2922  <li>
2923    <span class="dv-info-icon"><i class="fa-solid fa-location-crosshairs"></i></span>
2924    Port-au-Prince, Haiti · Limonade, Haiti · Brooklyn, USA
2925  </li>
2926</ul>				</div>
2927				</div>
2928				</div>
2929		<div class="elementor-element elementor-element-6ad2f8a e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child" data-id="6ad2f8a" data-element_type="container" data-e-type="container">
2930				<div class="elementor-element elementor-element-d171bb0 elementor-widget elementor-widget-google_maps" data-id="d171bb0" data-element_type="widget" data-e-type="widget" data-widget_type="google_maps.default">
2931				<div class="elementor-widget-container">
2932							<div class="elementor-custom-embed">
2933			<iframe loading="lazy"
2934					src="https://maps.google.com/maps?q=1814%20Nostrand%20Ave&#038;t=m&#038;z=10&#038;output=embed&#038;iwloc=near"
2935					title="1814 Nostrand Ave"
2936					aria-label="1814 Nostrand Ave"
2937			></iframe>
2938		</div>
2939						</div>
2940				</div>
2941				</div>
2942					</div>
2943				</div>
2944				</div>
2945				<footer data-elementor-type="footer" data-elementor-id="5557" class="elementor elementor-5557 elementor-location-footer" data-elementor-post-type="elementor_library">
2946			<div class="elementor-element elementor-element-e581b78 e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-parent" data-id="e581b78" data-element_type="container" data-e-type="container" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
2947					<div class="e-con-inner">
2948				<div class="elementor-element elementor-element-2a96699 elementor-widget elementor-widget-html" data-id="2a96699" data-element_type="widget" data-e-type="widget" data-widget_type="html.default">
2949				<div class="elementor-widget-container">
2950					<style>
2951  @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400&family=Sora:wght@400;700&display=swap');
2952
2953  .dv-footer {
2954    /* Background removed to let Elementor container background show through */
2955    border-top: 1px solid rgba(0, 0, 0, 0.1);
2956    width: 100%;
2957    box-sizing: border-box;
2958  }
2959
2960  .dv-footer-inner {
2961    max-width: 1152px; /* Keeps it aligned with your other content */
2962    margin: 0 auto;
2963    padding: 2.5rem 1.5rem; /* 40px top/bottom, 24px sides */
2964    display: flex;
2965    flex-wrap: wrap;
2966    align-items: center;
2967    justify-content: space-between;
2968    gap: 1.5rem;
2969  }
2970
2971  /* Left Side: Logo and Title */
2972  .dv-footer-brand {
2973    display: flex;
2974    align-items: center;
2975    gap: 0.75rem; /* 12px */
2976  }
2977
2978  .dv-footer-brand img {
2979    height: 2.25rem; /* 36px */
2980    width: 2.25rem;
2981    object-fit: contain;
2982  }
2983
2984  .dv-footer-title {
2985    font-family: 'Sora', system-ui, sans-serif;
2986    font-size: 1.125rem; /* 18px */
2987    font-weight: 700;
2988    color: #2a2018; /* Dark ink */
2989    margin: 0;
2990  }
2991
2992  .dv-footer-title span {
2993    color: #6b5f55; /* Muted color for 'FM' */
2994    font-weight: 400;
2995  }
2996
2997  /* Right Side: Copyright Text */
2998  .dv-footer-copy {
2999    font-family: 'Inter', system-ui, sans-serif;
3000    font-size: 0.75rem; /* 12px */
3001    color: #6b5f55; /* Muted text */
3002    margin: 0;
3003  }
3004
3005  /* --- Mobile Adjustments --- */
3006  @media (max-width: 640px) {
3007    .dv-footer-inner {
3008      flex-direction: column;
3009      justify-content: center;
3010      text-align: center;
3011      padding: 2rem 1rem;
3012    }
3013  }
3014</style>
3015
3016<footer class="dv-footer">
3017  <div class="dv-footer-inner">
3018    
3019    <div class="dv-footer-brand">
3020      <img src="https://dodorvibe.com/wp-content/uploads/2024/01/Dodor-Vibe-FM_trans-NoText-170x170.png" alt="DodorVibe FM" />
3021      <div class="dv-footer-title">DodorVibe <span>FM</span></div>
3022    </div>
3023    
3024    <p class="dv-footer-copy">
3025      © <span id="dv-year"></span>DodorVibe FM — From Little Haiti to the World
3026    </p>
3027
3028  </div>
3029</footer>
3030
3031<script>
3032  // Automatically sets the copyright to the current year
3033  document.addEventListener("DOMContentLoaded", function() {
3034    const yearSpan = document.getElementById("dv-year");
3035    if(yearSpan) {
3036      yearSpan.textContent = new Date().getFullYear();
3037    }
3038  });
3039</script>
3039				</div>
3040				</div>
3041					</div>
3042				</div>
3043				</footer>
3044		
3045<script type="speculationrules">
3046{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/hello-elementor/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
3047</script>
3047
3048		<div id="qt-ajax-customscript-url" class="qt-hidden" data-customscripturl="https://dodorvibe.com/?qt-ajax-pageload-custom=output"></div>
3049		
3049<script>function loadScript(a){var b=document.getElementsByTagName("head")[0],c=document.createElement("script");c.type="text/javascript",c.src="https://tracker.metricool.com/resources/be.js",c.onreadystatechange=a,c.onload=a,b.appendChild(c)}loadScript(function(){beTracker.t({hash:"69adb505a1942dede4fb22568db58068"})});</script>
3049			
3049<script>
3050				( () => {
3051					const lazyloadRunObserver = () => {
3052						const lazyloadBackgrounds = document.querySelectorAll( `.e-con.e-parent:not(.e-lazyloaded)` );
3053						const lazyloadBackgroundObserver = new IntersectionObserver( ( entries ) => {
3054							entries.forEach( ( entry ) => {
3055								if ( entry.isIntersecting ) {
3056									let lazyloadBackground = entry.target;
3057									if( lazyloadBackground ) {
3058										lazyloadBackground.classList.add( 'e-lazyloaded' );
3059									}
3060									lazyloadBackgroundObserver.unobserve( entry.target );
3061								}
3062							});
3063						}, { rootMargin: '200px 0px 200px 0px' } );
3064						lazyloadBackgrounds.forEach( ( lazyloadBackground ) => {
3065							lazyloadBackgroundObserver.observe( lazyloadBackground );
3066						} );
3067					};
3068					const events = [
3069						'DOMContentLoaded',
3070						'elementor/lazyload/observe',
3071					];
3072					events.forEach( ( event ) => {
3073						document.addEventListener( event, lazyloadRunObserver );
3074					} );
3075				} )();
3076			</script>
3076
3077				
3077<script>
3078		(function () {
3079			var c = document.body.className;
3080			c = c.replace(/woocommerce-no-js/, 'woocommerce-js');
3081			document.body.className = c;
3082		})();
3083	</script>
3083
3084	
3084<script id="jquery-cookie-js" src="https://dodorvibe.com/wp-content/plugins/qt-chartvote/js/jquery.cookie.js?ver=2.0"></script>
vendor: 1 bytes, line 3084
3084
3085<script id="qt-chartvote-js-extra">
3086var chartvote_ajax_var = {"url":"https://dodorvibe.com/wp-admin/admin-ajax.php","nonce":"eec27d7545"};
3087//# sourceURL=qt-chartvote-js-extra
3088</script>
vendor: 1 bytes, line 3088
3088
3089<script id="qt-chartvote-js" src="https://dodorvibe.com/wp-content/plugins/qt-chartvote/js/qt-chartvote-script.js?ver=2.0"></script>
vendor: 1 bytes, line 3089
3089
3090<script id="coblocks-animation-js" src="https://dodorvibe.com/wp-content/plugins/coblocks/dist/js/coblocks-animation.js?ver=3.1.17"></script>
vendor: 1 bytes, line 3090
3090
3091<script id="coblocks-tiny-swiper-js" src="https://dodorvibe.com/wp-content/plugins/coblocks/dist/js/vendors/tiny-swiper.js?ver=3.1.17"></script>
vendor: 1 bytes, line 3091
3091
3092<script id="coblocks-tinyswiper-initializer-js-extra">
3093var coblocksTinyswiper = {"carouselPrevButtonAriaLabel":"Previous","carouselNextButtonAriaLabel":"Next","sliderImageAriaLabel":"Image"};
3094//# sourceURL=coblocks-tinyswiper-initializer-js-extra
3095</script>
vendor: 1 bytes, line 3095
3095
3096<script id="coblocks-tinyswiper-initializer-js" src="https://dodorvibe.com/wp-content/plugins/coblocks/dist/js/coblocks-tinyswiper-initializer.js?ver=3.1.17"></script>
vendor: 1 bytes, line 3096
3096
3097<script id="qt_loveit_script-js-extra">
3098var ajax_var = {"url":"https://dodorvibe.com/wp-admin/admin-ajax.php","nonce":"468b440437"};
3099//# sourceURL=qt_loveit_script-js-extra
3100</script>
vendor: 1 bytes, line 3100
3100
3101<script id="qt_loveit_script-js" src="https://dodorvibe.com/wp-content/plugins/qt-loveit/js/qt-loveit.js?ver=1.0"></script>
vendor: 1 bytes, line 3101
3101
3102<script id="qtPlacesScript-js" src="https://dodorvibe.com/wp-content/plugins/qt-places/inc/frontend/assets/min/script-min.js?ver=7.1.2"></script>
vendor: 1 bytes, line 3102
3102
3103<script id="swipebox-js" src="https://dodorvibe.com/wp-content/plugins/qt-swipebox/min/qt-swipebox-min.js?ver=5.6.3"></script>
vendor: 1 bytes, line 3103
3103
3104<script id="qtsubpages_quicksand-js" src="https://dodorvibe.com/wp-content/plugins/qt-videogalleries/assets/jquery.quicksand.js?ver=1.0.0"></script>
vendor: 1 bytes, line 3104
3104
3105<script id="qtsubpages_easing-js" src="https://dodorvibe.com/wp-content/plugins/qt-videogalleries/assets/jquery.easing.1.3.js?ver=1.0.0"></script>
vendor: 1 bytes, line 3105
3105
3106<script id="qtsubpages_csstransform-js" src="https://dodorvibe.com/wp-content/plugins/qt-videogalleries/assets/jquery-css-transform.js?ver=1.0.0"></script>
vendor: 1 bytes, line 3106
3106
3107<script id="qtsubpages_jquery-animate-css-rotate-scale-js" src="https://dodorvibe.com/wp-content/plugins/qt-videogalleries/assets/jquery-animate-css-rotate-scale.js?ver=1.0.0"></script>
vendor: 1 bytes, line 3107
3107
3108<script id="vdl_subpages_js-js" src="https://dodorvibe.com/wp-content/plugins/qt-videogalleries/assets/vdl-main.js?ver=1.8"></script>
vendor: 1 bytes, line 3108
3108
3109<script id="wpr-particles-js" src="https://dodorvibe.com/wp-content/plugins/royal-elementor-addons/assets/js/lib/particles/particles.js?ver=3.0.6"></script>
vendor: 1 bytes, line 3109
3109
3110<script id="wpr-jarallax-js" src="https://dodorvibe.com/wp-content/plugins/royal-elementor-addons/assets/js/lib/jarallax/jarallax.min.js?ver=1.12.7"></script>
vendor: 1 bytes, line 3110
3110
3111<script id="wpr-parallax-hover-js" src="https://dodorvibe.com/wp-content/plugins/royal-elementor-addons/assets/js/lib/parallax/parallax.min.js?ver=1.0"></script>
vendor: 1 bytes, line 3111
3111
3112<script id="hello-theme-frontend-js" src="https://dodorvibe.com/wp-content/themes/hello-elementor/assets/js/hello-frontend.js?ver=3.5.1"></script>
vendor: 1 bytes, line 3112
3112
3113<script id="elementor-webpack-runtime-js" src="https://dodorvibe.com/wp-content/plugins/elementor/assets/js/webpack.runtime.min.js?ver=4.3.3"></script>
vendor: 1 bytes, line 3113
3113
3114<script id="elementor-frontend-modules-js" src="https://dodorvibe.com/wp-content/plugins/elementor/assets/js/frontend-modules.min.js?ver=4.3.3"></script>
vendor: 1 bytes, line 3114
3114
3115<script id="jquery-ui-core-js-before">
3116jQuery.uiBackCompat = true;
3117//# sourceURL=jquery-ui-core-js-before
3118</script>
vendor: 1 bytes, line 3118
3118
3119<script id="jquery-ui-core-js" src="https://dodorvibe.com/wp-includes/js/jquery/ui/core.min.js?ver=1.14.2"></script>
vendor: 1 bytes, line 3119
3119
3120<script id="elementor-frontend-js-before">
3121var elementorFrontendConfig = {"environmentMode":{"edit":false,"wpPreview":false,"isScriptDebug":false},"i18n":{"shareOnFacebook":"Share on Facebook","shareOnX":"Share on X","pinIt":"Pin it","download":"Download","downloadImage":"Download image","fullscreen":"Fullscreen","zoom":"Zoom","share":"Share","playVideo":"Play Video","previous":"Previous","next":"Next","close":"Close","a11yCarouselPrevSlideMessage":"Previous slide","a11yCarouselNextSlideMessage":"Next slide","a11yCarouselFirstSlideMessage":"This is the first slide","a11yCarouselLastSlideMessage":"This is the last slide","a11yCarouselPaginationBulletMessage":"Go to slide"},"is_rtl":false,"breakpoints":{"xs":0,"sm":480,"md":768,"lg":1025,"xl":1440,"xxl":1600},"responsive":{"breakpoints":{"mobile":{"label":"Mobile Portrait","value":767,"default_value":767,"direction":"max","is_enabled":true},"mobile_extra":{"label":"Mobile Landscape","value":880,"default_value":880,"direction":"max","is_enabled":false},"tablet":{"label":"Tablet Portrait","value":1024,"default_value":1024,"direction":"max","is_enabled":true},"tablet_extra":{"label":"Tablet Landscape","value":1200,"default_value":1200,"direction":"max","is_enabled":false},"laptop":{"label":"Laptop","value":1366,"default_value":1366,"direction":"max","is_enabled":false},"widescreen":{"label":"Widescreen","value":2400,"default_value":2400,"direction":"min","is_enabled":false}},
3122"hasCustomBreakpoints":false},"version":"4.3.3","is_static":false,"experimentalFeatures":{"e_font_icon_svg":true,"additional_custom_breakpoints":true,"container":true,"theme_builder_v2":true,"hello-theme-header-footer":true,"nested-elements":true,"import-export-customization":true,"e_pro_atomic_form":true,"e_pro_collection_loop":true,"e_pro_variables":true,"e_pro_interactions":true},"urls":{"assets":"https:\/\/dodorvibe.com\/wp-content\/plugins\/elementor\/assets\/","ajaxurl":"https:\/\/dodorvibe.com\/wp-admin\/admin-ajax.php","uploadUrl":"https:\/\/dodorvibe.com\/wp-content\/uploads"},"nonces":{"floatingButtonsClickTracking":"a3e0d22633","atomicFormsSendForm":"3c229dd50a"},"swiperClass":"swiper","settings":{"page":[],"editorPreferences":[]},"kit":{"active_breakpoints":["viewport_mobile","viewport_tablet"],"global_image_lightbox":"yes","lightbox_enable_counter":"yes","lightbox_enable_fullscreen":"yes","lightbox_enable_zoom":"yes","lightbox_enable_share":"yes","lightbox_title_src":"title","lightbox_description_src":"description","woocommerce_notices_elements":[],"hello_header_logo_type":"logo","hello_header_menu_layout":"horizontal","hello_footer_logo_type":"logo"},"post":{"id":5497,"title":"DodorVibe%20FM%20%7C%20Live%20Haitian%20Radio%2C%20Konpa%20%26%20Culture","excerpt":"","featuredImage":false}};
3123//# sourceURL=elementor-frontend-js-before
3124</script>
vendor: 1 bytes, line 3124
3124
3125<script id="elementor-frontend-js" src="https://dodorvibe.com/wp-content/plugins/elementor/assets/js/frontend.min.js?ver=4.3.3"></script>
vendor: 1 bytes, line 3125
3125
3126<script id="e-sticky-js" src="https://dodorvibe.com/wp-content/plugins/pro-elements/assets/lib/sticky/jquery.sticky.min.js?ver=4.2.3"></script>
vendor: 1 bytes, line 3126
3126
3127<script id="sourcebuster-js-js" src="https://dodorvibe.com/wp-content/plugins/woocommerce/assets/js/sourcebuster/sourcebuster.min.js?ver=11.1.2"></script>
vendor: 1 bytes, line 3127
3127
3128<script id="wc-order-attribution-js-extra">
3129var wc_order_attribution = {"params":{"lifetime":1.0e-5,"session":30,"base64":false,"ajaxurl":"https://dodorvibe.com/wp-admin/admin-ajax.php","prefix":"wc_order_attribution_","allowTracking":true},"fields":{"source_type":"current.typ","referrer":"current_add.rf","utm_campaign":"current.cmp","utm_source":"current.src","utm_medium":"current.mdm","utm_content":"current.cnt","utm_id":"current.id","utm_term":"current.trm","utm_source_platform":"current.plt","utm_creative_format":"current.fmt","utm_marketing_tactic":"current.tct","session_entry":"current_add.ep","session_start_time":"current_add.fd","session_pages":"session.pgs","session_count":"udata.vst","user_agent":"udata.uag"}};
3130//# sourceURL=wc-order-attribution-js-extra
3131</script>
vendor: 1 bytes, line 3131
3131
3132<script id="wc-order-attribution-js" src="https://dodorvibe.com/wp-content/plugins/woocommerce/assets/js/frontend/order-attribution.min.js?ver=11.1.2"></script>
vendor: 1 bytes, line 3132
3132
3133<script id="elementor-pro-webpack-runtime-js" src="https://dodorvibe.com/wp-content/plugins/pro-elements/assets/js/webpack-pro.runtime.min.js?ver=4.2.3"></script>
vendor: 1 bytes, line 3133
3133
3134<script id="wp-hooks-js" src="https://dodorvibe.com/wp-includes/js/dist/hooks.min.js?ver=f0f188028580e8dc1255"></script>
vendor: 1 bytes, line 3134
3134
3135<script id="wp-i18n-js" src="https://dodorvibe.com/wp-includes/js/dist/i18n.min.js?ver=1dfe7db3940c23ea9216"></script>
vendor: 1 bytes, line 3135
3135
3136<script id="wp-i18n-js-after">
3137wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } );
3138//# sourceURL=wp-i18n-js-after
3139</script>
vendor: 1 bytes, line 3139
3139
3140<script id="elementor-pro-frontend-js-before">
3141var ElementorProFrontendConfig = {"ajaxurl":"https:\/\/dodorvibe.com\/wp-admin\/admin-ajax.php","nonce":"fb1853b07e","urls":{"assets":"https:\/\/dodorvibe.com\/wp-content\/plugins\/pro-elements\/assets\/","rest":"https:\/\/dodorvibe.com\/wp-json\/"},"settings":{"lazy_load_background_images":true},"popup":{"hasPopUps":false},"shareButtonsNetworks":{"facebook":{"title":"Facebook","has_counter":true},"twitter":{"title":"Twitter"},"linkedin":{"title":"LinkedIn","has_counter":true},"pinterest":{"title":"Pinterest","has_counter":true},"reddit":{"title":"Reddit","has_counter":true},"vk":{"title":"VK","has_counter":true},"odnoklassniki":{"title":"OK","has_counter":true},"tumblr":{"title":"Tumblr"},"digg":{"title":"Digg"},"skype":{"title":"Skype"},"stumbleupon":{"title":"StumbleUpon","has_counter":true},"mix":{"title":"Mix"},"telegram":{"title":"Telegram"},"pocket":{"title":"Pocket","has_counter":true},"xing":{"title":"XING","has_counter":true},"whatsapp":{"title":"WhatsApp"},"email":{"title":"Email"},"print":{"title":"Print"},"x-twitter":{"title":"X"},"threads":{"title":"Threads"}},
3142"woocommerce":{"menu_cart":{"cart_page_url":"https:\/\/dodorvibe.com\/my-cart\/","checkout_page_url":"https:\/\/dodorvibe.com\/checkout\/","fragments_nonce":"c8af20bda0"}},
3143"facebook_sdk":{"lang":"en_US","app_id":""},"lottie":{"defaultAnimationUrl":"https:\/\/dodorvibe.com\/wp-content\/plugins\/pro-elements\/modules\/lottie\/assets\/animations\/default.json"}};
3144//# sourceURL=elementor-pro-frontend-js-before
3145</script>
vendor: 1 bytes, line 3145
3145
3146<script id="elementor-pro-frontend-js" src="https://dodorvibe.com/wp-content/plugins/pro-elements/assets/js/frontend.min.js?ver=4.2.3"></script>
vendor: 1 bytes, line 3146
3146
3147<script id="pro-elements-handlers-js" src="https://dodorvibe.com/wp-content/plugins/pro-elements/assets/js/elements-handlers.min.js?ver=4.2.3"></script>
vendor: 1 bytes, line 3147
3147
3148<script id="wpr-addons-js-js-extra">
3149var WprConfig = {"ajaxurl":"https://dodorvibe.com/wp-admin/admin-ajax.php","resturl":"https://dodorvibe.com/wp-json/wpraddons/v1","nonce":"1a15bba2fd","addedToCartText":"was added to cart","viewCart":"View Cart","comparePageID":"","comparePageURL":"https://dodorvibe.com/","wishlistPageID":"","wishlistPageURL":"https://dodorvibe.com/","chooseQuantityText":"Please select the required number of items.","site_key":"","site_key_v2":"","is_admin":"","input_empty":"Please fill out this field","select_empty":"Nothing selected","file_empty":"Please upload a file","recaptcha_error":"Recaptcha Error","woo_shop_ppp":"9","woo_shop_cat_ppp":"9","woo_shop_tag_ppp":"9","is_product_category":"","is_product_tag":"","sticky_section":"on"};
3150//# sourceURL=wpr-addons-js-js-extra
3151</script>
vendor: 1 bytes, line 3151
3151
3152<script id="wpr-addons-js-js" data-cfasync="false" src="https://dodorvibe.com/wp-content/plugins/royal-elementor-addons/assets/js/frontend.min.js?ver=1.7.1068"></script>
vendor: 1 bytes, line 3152
3152
3153<script id="wpr-modal-popups-js-js" src="https://dodorvibe.com/wp-content/plugins/royal-elementor-addons/assets/js/modal-popups.min.js?ver=1.7.1068"></script>
vendor: 1 bytes, line 3153
3153
3154<script id="wp-emoji-settings" type="application/json">
3155{"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://dodorvibe.com/wp-includes/js/wp-emoji-release.min.js?ver=7.1.2"}}
3156</script>
vendor: 1 bytes, line 3156
3156
3157<script type="module">
3158/*! This file is auto-generated */
3159var e="script#wp-emoji-settings",t=document.querySelector(e);if(!(t instanceof HTMLScriptElement))throw new Error("Element missing: "+e);const r=JSON.parse(t.text),s=(window._wpemojiSettings=r,"wpEmojiSettingsSupports"),o=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(s,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const r=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===r[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,r){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!r(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,r){let a;const s=(a="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),o=(s.textBaseline="top",s.font="600 32px Arial",{});return e.forEach(e=>{o[e]=t(s,e,n,r)}),o}function a(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}r.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(s));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(o),u.toString(),c.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"});const a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=e=>{i(n=e.data),a.terminate(),t(n)})}catch(e){}i(n=f(o,u,c,p))}t(n)}).then(e=>{for(const n in e)r.supports[n]=e[n],r.supports.everything=r.supports.everything&&r.supports[n],"flag"!==n&&(r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&r.supports[n]);var t;r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&!r.supports.flag,r.supports.everything||((t=r.source||{}).concatemoji?a(t.concatemoji):t.wpemoji&&t.twemoji&&(a(t.twemoji),a(t.wpemoji)))});
3160//# sourceURL=https://dodorvibe.com/wp-includes/js/wp-emoji-loader.min.js
3161</script>
3161
3162<!-- WooCommerce JavaScript -->
3163<script type="text/javascript">
3164jQuery(function($) { 
3165window.mwc_payments_poynt_payment_form_handler = new MWCPaymentsPoyntPaymentFormHandler({"appId":"urn:aid:7dc5d01b-6cf1-436c-b7ed-10cb59eae1a1","businessId":"b40344f3-e371-4126-88e5-9d9f8cbaa381","customerAddress":{"firstName":"","lastName":"","phone":"","email":"","line1":"","line2":"","city":"","state":"CA","country":"US","postcode":""},"shippingAddress":{"line1":"","line2":"","city":"","state":"","country":"","postcode":"","needsShipping":false},"isLoggingEnabled":false,"options":{"iFrame":{"border":"0px","borderRadius":"0px","boxShadow":"none","height":"320px","width":"auto"},"style":{"theme":"checkout"},"displayComponents":{"firstName":false,"lastName":false,"emailAddress":false,"zipCode":false,"labels":true,"submitButton":false},"customCss":{"container":{"margin-top":"10px"},"inputLabel":{"font-size":"16px"}},"enableReCaptcha":true,"reCaptchaOptions":{"type":"TEXT"}}});
3166 });
3167</script>
3167
3168		
3168<script>'undefined'=== typeof _trfq || (window._trfq = []);'undefined'=== typeof _trfd && (window._trfd=[]),
3169                _trfd.push({'tccl.baseHost':'secureserver.net'}),
3170                _trfd.push({'ap':'wpaas_v2'},
3171                    {'server':'001fbb87873a'},
3172                    {'pod':'c27-prod-p3-us-west-2'},
3173                                        {'xid':'45332372'},
3174                    {'wp':'7.1.2'},
3175                    {'php':'8.3.33'},
3176                    {'loggedin':'0'},
3177                    {'cdn':'1'},
3178                    {'builder':'elementor'},
3179                    {'theme':'hello-elementor'},
3180                    {'wds':'0'},
3181                    {'wp_alloptions_count':'576'},
3182                    {'wp_alloptions_bytes':'209503'},
3183                    {'gdl_coming_soon_page':'0'}
3184                    , {'appid':'636715'}                 );
3185            var trafficScript = document.createElement('script'); trafficScript.src = 'https://img1.wsimg.com/signals/js/clients/scc-c2/scc-c2.min.js'; window.document.head.appendChild(trafficScript);</script>
3185
3186		
3186<script>window.addEventListener('click', function (elem) { var _elem$target, _elem$target$dataset, _window, _window$_trfq; return (elem === null || elem === void 0 ? void 0 : (_elem$target = elem.target) === null || _elem$target === void 0 ? void 0 : (_elem$target$dataset = _elem$target.dataset) === null || _elem$target$dataset === void 0 ? void 0 : _elem$target$dataset.eid) && ((_window = window) === null || _window === void 0 ? void 0 : (_window$_trfq = _window._trfq) === null || _window$_trfq === void 0 ? void 0 : _window$_trfq.push(["cmdLogEvent", "click", elem.target.dataset.eid]));});</script>
3186
3187		
3187<script src='https://img1.wsimg.com/traffic-assets/js/tccl-tti.min.js' onload="window.tti.calculateTTI()"></script>
3187
3188		
3189</body>
3190</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.