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 & 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 & 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 » Feed" href="https://dodorvibe.com/feed/" /> 34<link rel="alternate" type="application/rss+xml" title="DodorVibe » 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&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="{"sticky":"top","sticky_on":["desktop","tablet","mobile"],"sticky_offset":0,"sticky_effects_offset":0,"sticky_anchor_link_offset":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="{"background_background":"classic"}"> 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="{"background_background":"classic"}"> 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="{"background_background":"classic"}"> 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="{"background_background":"classic"}"> 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’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="{"background_background":"classic"}"> 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="{"background_background":"classic"}"> 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="{"background_background":"classic"}"> 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 →</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="{"background_background":"classic"}"> 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="{"background_background":"classic"}"> 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="{"background_background":"classic"}"> 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="{"background_background":"classic"}"> 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’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&t=m&z=10&output=embed&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="{"background_background":"classic"}"> 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.