1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <title>RADIOSATELLITE - Home</title> 6 <meta name="description" content="RADIOSATELLITE INTERNET RADIO 24/7 LIVE"> 7 <meta name="keywords" content="[{"value":"webradio"},{"value":"radio"},{"value":"music"},{"value":"musique"},{"value":"google"},{"value":"country"},{"value":"video"},{"value":"vidéo"},{"value":"travel"},{"value":"voyages"},{"value":"france"},{"value":"radio on line"},{"value":"internet radio"},{"value":"netflix"},{"value":"europe"},{"value":"middle east"},{"value":"usa"},{"value":"lebanon"},{"value":"paris"},{"value":"satellite"},{"value":"jazz"},{"value":"actor"},{"value":"food"},{"value":"instrumental"},{"value":"love"},{"value":"écouter la radio"},{"value":"listen to radio"},{"value":"hotel"},{"value":"vacances"},{"value":"holidays"},{"value":"christmas"},{"value":"noël"},{"value":"bing"},{"value":"yandex"},{"value":"radios en ligne"},{"value":"radios on line"},{"value":"country music"},{"value":"cars"},{"value":"AI"},{"value":"IA"},{"value":"streaming"},{"value":"deezer"},{"value":"spotify"},{"value":"trump"},{"value":"pape"},{"value":"leon 14"},{"value":"pope leo"},{"value":"movies"},{"value":"peace"}]"> 8 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 9 <link rel="shortcut icon" type="image/png" href="/favicon.ico" /> 10 <link rel="icon" type="image/png" href="https://radiosatellite.eu/uploads/691479b079384/site/1766447886_68fcc02246bb95a44cb0.jpg"> 11 <link rel="preconnect" href="https://fonts.googleapis.com"> 12 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 13 <link href="https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100..900;1,100..900&family=Roboto+Condensed:ital,wght@0,100..900;1,100..900&display=swap" rel="stylesheet"> 14 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.6.0/css/all.min.css" integrity="sha512-Kc323vGBEqzTmouAECnVceyQqyqdsSiqLQISBL29aUW4U/M7pSPA/gEUZQqv1cwx4OnYxTxve5UMg5GT6L4JJg==" crossorigin="anonymous" referrerpolicy="no-referrer" /> 15 <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> 16 <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous"> 17 <link rel="stylesheet" type="text/css" href="https://radiosatellite.eu/assets/css/playerBar.css" /> 18 <link rel="stylesheet" type="text/css" href="https://radiosatellite.eu/assets/css/app.css" /> 19 <link rel="stylesheet" type="text/css" href="https://radiosatellite.eu/assets/css/glider.min.css" /> 20 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Glide.js/3.2.0/css/glide.core.min.css" integrity="sha512-YQlbvfX5C6Ym6fTUSZ9GZpyB3F92hmQAZTO5YjciedwAaGRI9ccNs4iw2QTCJiSPheUQZomZKHQtuwbHkA9lgw==" crossorigin="anonymous" referrerpolicy="no-referrer" /> 21
21<script src="https://cdn.jsdelivr.net/npm/@glidejs/[email protected]/dist/glide.min.js"></script>
21 22 <style> 23 body.navbar-open { 24 overflow: hidden; 25 touch-action: none; 26 } 27 28 #requests .container { 29 display: flex !important; 30 flex-wrap: wrap !important; 31 align-items: stretch !important; 32 justify-content: center !important; 33 } 34 35 #requests .action_row { 36 margin: 0 !important; 37 } 38 39 #requests .act_search { 40 width: 100% !important; 41 } 42 43 #requests input { 44 font-family: 'Montserrat', sans-serif !important; 45 height: 42px !important; 46 width: 250px !important; 47 background-color: #F9F9F9 !important; 48 border: 0px solid transparent !important; 49 border-color: #F9F9F9 !important; 50 color: #4B5675 !important; 51 padding: 0.75rem 1rem !important; 52 font-size: 14px !important; 53 font-weight: 600 !important; 54 line-height: 1.5 !important; 55 box-sizing: border-box !important; 56 border-radius: 12px !important; 57 } 58 59 #requests input::placeholder { 60 color: #a1a5c4 !important; 61 } 62 63 #requests input:focus { 64 background-color: #f1f1f2 !important; 65 } 66 67 #requests .track { 68 display: flex !important; 69 flex-direction: column !important; 70 } 71 72 #requests .track img { 73 margin-bottom: 22px !important; 74 border-radius: 8px !important; 75 } 76 77 #requests .track .meta { 78 height: auto !important; 79 font-size: 18px !important; 80 font-weight: 700 !important; 81 line-height: 1.25 !important; 82 text-align: left !important; 83 color: var(--heading-text) !important; 84 margin-bottom: 10px !important; 85 display: -webkit-box !important; 86 -webkit-line-clamp: 2 !important; 87 -webkit-box-orient: vertical !important; 88 overflow: hidden !important; 89 flex: 1 !important; 90 flex-direction: column !important; 91 justify-content: center !important; 92 } 93 94 #requests a { 95 height: 40px !important; 96 width: 40px !important; 97 background-color: #fff !important; 98 color: var(--primary-text) !important; 99 font-size: 18px !important; 100 font-weight: 400 !important; 101 text-align: center !important; 102 line-height: 38px !important; 103 padding: 0 !important; 104 border-radius: 8px !important; 105 border: 1px solid transparent !important; 106 border-color: var(--primary-text) !important; 107 margin: 0 10px !important; 108 margin-top: 25px !important; 109 transition: all 300ms ease!important; 110 } 111 112 #requests a:hover { 113 background-color: var(--play-btn-hover-bg) !important; 114 color: var(--play-btn-color) !important; 115 border-color: var(--play-btn-hover-bg) Im !important; 116 } 117 118 #requests a.active { 119 background-color: var(--play-btn-bg) !important; 120 color: var(--play-btn-color) !important; 121 border-color: var(--play-btn-bg) !important; 122 } 123 124 #requests a.button { 125 all: unset !important; 126 cursor: pointer !important; 127 } 128 129 #requests .modal-mask { 130 position: fixed !important; 131 top: 0 !important; 132 left: 0 !important; 133 z-index: 1050 !important; 134 width: 100vw !important; 135 height: 100vh !important; 136 background-color: rgba(0,0,0, .5) !important; 137 } 138 139 #requests .modal-container { 140 font-family: 'Montserrat', sans-serif !important; 141 width: auto !important; 142 max-width: 800px !important; 143 background-color: var(--highglight-block-bg) !important; 144 color: var(--highglight-block-color) !important; 145 padding: 0 !important; 146 border-radius: 3px !important; 147 } 148 149 #requests .modal-header { 150 font-size: 20px !important; 151 font-weight: 700 !important; 152 text-transform: uppercase !important; 153 margin-bottom: 0 !important; 154 line-height: 1.5 !important; 155 border: 0 !important; 156 } 157 158 #requests .modal-body { 159 font-size: 15px !important; 160 font-weight: 400 !important; 161 padding: 0 6px !important; 162 margin: 0 !important; 163 } 164 165 #requests .modal-body label { 166 font-weight: 700 !important; 167 } 168 169 #requests .modal-body input { 170 display: block !important; 171 width: 100% !important; 172 height: auto !important; 173 background-color: #fff !important; 174 background-clip: padding-box !important; 175 color: #232323 !important; 176 font-size: 14px !important; 177 font-weight: 400 !important; 178 line-height: 1.5 !important; 179 padding: .375rem .75rem !important; 180 margin-top: 8px !important; 181 margin-bottom: 19px !important; 182 border-radius: 4px !important; 183 } 184 185 #requests .modal-body textarea { 186 color: #232323 !important; 187 font-size: 14px !important; 188 font-weight: 400 !important; 189 padding: .375rem .75rem !important; 190 margin-top: 8px !important; 191 border-radius: 4px !important; 192 border: 1px solid transparent !important; 193 } 194 195 #requests .modal-footer { 196 border: 0 !important; 197 margin: 0 !important; 198 } 199 200 #requests .modal-footer .button { 201 font-family: 'Montserrat', sanf-serif; 202 width: 100% !important; 203 background-color: var(--highglight-block-primary-btn-bg) !important; 204 color: var(--highglight-block-primary-btn-color) !important; 205 font-weight: 700 !important; 206 padding: 2px .75rem !important; 207 font-size: 1rem !important; 208 border-radius: .25rem !important; 209 } 210 211 #requests .modal-footer .button:nth-of-type(2) { 212 background-color: rgba(255,255,255, .35) !important; 213 color: rgba(255,255,255, 1) !important; 214 margin-top: 6px !important; 215 } 216 217 #requests .track .button { 218 background-color: var(--primary-btn-bg)!important; 219 color: var(--primary-btn-color)!important; 220 font-size: 16px!important; 221 font-weight: 500!important; 222 font-style: normal; 223 padding: 8px 45px 8px!important; 224 margin-top: 6px !important; 225 border: 1px solid transparent !important; 226 border-radius: 8px!important; 227 transition: all 300ms ease!important; 228 cursor: pointer !important; 229 } 230 231 #requests .track .button:hover { 232 background-color: var(--primary-btn-color) !important; 233 color: var(--primary-btn-bg) !important; 234 border-color: var(--primary-btn-bg) !important; 235 } 236 237 #requests .spinner { 238 position: absolute !important; 239 top: 50% !important; 240 left: 50% !important; 241 transform: translateX(-50%) translateY(-50%) !important; 242 margin: 0 !important; 243 z-index: 999 !important; 244 } 245 246 247 .error-404 { 248 font-family: 'Montserrat', sans-serif; 249 padding-top: 150px; 250 padding-bottom: 0px; 251 } 252 253 .error-404 svg { 254 width: 100%; 255 visibility: hidden; 256 } 257 258 .error-404 h1 { 259 font-size: 6em; 260 margin: 15px 0px; 261 font-weight: 600; 262 } 263 264 .error-404 p { 265 color: #232323; 266 font-size: 14px; 267 font-weight: 500; 268 } 269 270 .btn-404 { 271 z-index: 1; 272 overflow: hidden; 273 background: transparent; 274 position: relative; 275 padding: 8px 50px; 276 border-radius: 12px; 277 cursor: pointer; 278 font-size: 1em; 279 letter-spacing: 2px; 280 transition: 0.2s ease; 281 font-weight: bold; 282 margin: 5px 0px; 283 } 284 285 .btn-404 { 286 border: 2px solid var(--heading-text); 287 color: #232323; 288 } 289 290 .btn-404:before { 291 content: ""; 292 position: absolute; 293 left: 0; 294 top: 0; 295 width: 0%; 296 height: 100%; 297 background: var(--heading-text); 298 z-index: -1; 299 transition: 0.2s ease; 300 } 301 302 .btn-404:hover { 303 color: #fff; 304 background: var(--heading-text); 305 transition: 0.2s ease; 306 } 307 308 .btn-404:hover:before { 309 width: 100%; 310 } 311
312 .invalid-feedback { 313 display: block !important; 314 } 315 316 .form-floating .form-control:focus { 317 border-color: var(--page-title) !important; 318 box-shadow: none; 319 } 320 321 .logo-top { 322 max-height: 60px; 323 } 324 325 .logo-footer { 326 max-height: 80px; 327 } 328 329 .mobile-logo { 330 max-height: 60px; 331 } 332 333 .glide__arrow { 334 position: absolute; 335 top: 72px; 336 height: 77px; 337 width: 77px; 338 appearance: none; 339 cursor: pointer; 340 outline: none; 341 background: none; 342 border-width: 0px; 343 border-style: initial; 344 border-color: initial; 345 border-image: initial; 346 border-radius: 50%; 347 } 348 349 .glide__arrow.sponsors { 350 top: 28px; 351 } 352 353 .glide__arrow::before { 354 position: absolute; 355 top: 50%; 356 left: 50%; 357 height: 75px; 358 width: 75px; 359 content: ""; 360 z-index: 0; 361 transform: translate(-50%, -50%) scale(0.75); 362 background-color: rgb(255, 255, 255); 363 transition: transform 0.3s cubic-bezier(0.165, 0.84, 0.44, 1), -webkit-transform 0.3s cubic-bezier(0.165, 0.84, 0.44, 1); 364 border-radius: 50%; 365 } 366 367 .glide__arrow::before { 368 background-color: var(--play-btn-bg); 369 } 370 371 .glide__arrow::after { 372 position: absolute; 373 top: 50%; 374 left: 50%; 375 height: 75px; 376 width: 75px; 377 content: ""; 378 z-index: 1; 379 transform: translate(-50%, -50%); 380 transition: transform 0.3s cubic-bezier(0.165, 0.84, 0.44, 1), border-color 0.3s cubic-bezier(0.165, 0.84, 0.44, 1), -webkit-transform 0.3s cubic-bezier(0.165, 0.84, 0.44, 1); 381 border-width: 2px; 382 border-style: solid; 383 border-color: white; 384 border-image: initial; 385 border-radius: 50%; 386 } 387 388 .glide__arrow::after { 389 border-color: var(--play-btn-bg); 390 } 391 392 .glide__arrow:hover:before { 393 -webkit-transform: translate(-50%, -50%) scale(0.99); 394 transform: translate(-50%, -50%) scale(0.99); 395 background-color: var(--play-btn-hover-bg); 396 } 397 398 .glide__arrow:hover:after { 399 border-color: #fff; 400 -webkit-transform: translate(-50%, -50%) scale(0.75); 401 transform: translate(-50%, -50%) scale(0.75); 402 } 403 404 .glide__arrow i { 405 position: absolute; 406 top: 50%; 407 left: 50%; 408 z-index: 2; 409 color: #fff; 410 font-size: 18px; 411 -webkit-transform: translate(-50%, -50%); 412 transform: translate(-50%, -50%); 413 } 414 415 .glide__arrow--left { 416 left: -25px; 417 } 418 419 .glide__arrow--right { 420 right: -25px; 421 } 422 423 .glide__arrows { 424 width: 100%; 425 position: absolute; 426 top: 0; 427 z-index: 5; 428 } 429 430 .glide__arrow--left { 431 display: none; 432 } 433 434 .glide__arrow--left.show { 435 display: block; 436 } 437 438 .glide__arrow--right.hidden { 439 display: none; 440 } 441 442 ul li { 443 list-style: none; 444 padding: 0; 445 } 446 447 .dc-bar-wpr { 448 font-family: "Montserrat", sans-serif; 449 width: 100%; 450 height: 40px; 451 background-color: var(--dedications-bar-bg); 452 padding: 0; 453 position: fixed; 454 top: 66px; 455 z-index: 999; 456 } 457 458 .dc-bar-wpr { 459 font-family: "Montserrat", sans-serif; 460 width: 100%; 461 height: 40px; 462 background-color: var(--dedications-bar-bg); 463 padding: 0; 464 position: fixed; 465 top: 66px; 466 z-index: 999; 467 } 468 469 .dc-bar-wpr .title { 470 color: var(--dedications-bar-label); 471 font-size: 20px; 472 font-weight: 900; 473 line-height: 40px; 474 text-transform: uppercase; 475 position: absolute; 476 bottom: 0; 477 left: 25px; 478 } 479 480 .dc-bar-wpr .dedicationBtn { 481 color: var(--dedications-bar-msg); 482 font-size: 24px; 483 font-weight: 900; 484 line-height: 40px; 485 text-transform: uppercase; 486 position: absolute; 487 bottom: 0; 488 left: 31px; 489 visibility: hidden; 490 opacity: 1; 491 pointer-events: none; 492 } 493 .dc-bar-wpr .dedicationBtn.material-icons, 494 .dc-bar-wpr .dedicationBtn .material-icons { 495 font-family: 'Material Icons' !important; 496 font-weight: normal !important; 497 font-style: normal; 498 letter-spacing: normal; 499 text-transform: none; 500 display: inline-flex; 501 align-items: center; 502 line-height: 38px; 503 border: 0; 504 background: transparent; 505 } 506 507 .dc-bar-wpr .scroll-container { 508 width: auto; 509 height: 40px; 510 color: var(--dedications-bar-msg); 511 font-size: 16px; 512 line-height: 40px; 513 overflow: hidden; 514 white-space: nowrap; 515 position: absolute; 516 right: 25px; 517 left: 150px; 518 } 519 520 .dc-bar-wpr .scroll-container::before { 521 content: ""; 522 width: 50px; 523 height: 40px; 524 background: #22C1C3; 525 background: linear-gradient(90deg,var(--dedications-bar-bg) 0%, rgba(253, 187, 45, 0) 100%); 526 position: absolute; 527 left: 0; 528 z-index: 10; 529 } 530 531 .dc-bar-wpr .scroll-container::after { 532 content: ""; 533 width: 50px; 534 height: 40px; 535 background: #22C1C3; 536 background: linear-gradient(-90deg,var(--dedications-bar-bg) 0%, rgba(253, 187, 45, 0) 100%); 537 position: absolute; 538 right: 0; 539 z-index: 10; 540 } 541 542 .dc-bar-wpr .scroll-text { 543 position: absolute; 544 display: inline-block; 545 white-space: nowrap; 546 will-change: transform; 547 animation: scroll linear infinite; 548 z-index: 5; 549 } 550 551 .dc-bar-wpr .name { 552 font-weight: 700; 553 } 554 555 .dc-bar-wpr .msg { 556 font-weight: 400; 557 } 558 559 .dedication-emoji-label { 560 display: block; 561 margin-top: 10px; 562 margin-bottom: 7px; 563 font-size: 13px; 564 font-weight: 700; 565 } 566 567 .dedication-emoji-picker { 568 display: flex; 569 flex-wrap: wrap; 570 gap: 7px; 571 } 572 573 .dedication-emoji-button { 574 display: inline-grid; 575 width: 40px; 576 height: 40px; 577 padding: 0; 578 place-items: center; 579 background: rgba(255, 255, 255, .14); 580 border: 1px solid rgba(255, 255, 255, .24); 581 border-radius: 10px; 582 color: inherit; 583 font-size: 21px; 584 line-height: 1; 585 cursor: pointer; 586 transition: background-color 160ms ease, border-color 160ms ease, transform 160ms ease; 587 } 588 589 .dedication-emoji-button:hover, 590 .dedication-emoji-button:focus-visible { 591 background: rgba(255, 255, 255, .24); 592 border-color: rgba(255, 255, 255, .42); 593 outline: none; 594 transform: translateY(-1px); 595 } 596 597 @keyframes scroll { 598 0% { 599 left: 100%; 600 } 601 100% { 602 left: -100%; 603 } 604 } 605 606 .dropdown-menu.show { 607 background-color: var(--header-bg); 608 padding-top: 0 !important; 609 padding-bottom: 0 !important; 610 margin-top: 11px !important; 611 border-radius: 0 0 8px 8px; 612 opacity: .87; 613 614 } 615 .dropdown-menu.show .dropdown-item { 616 min-height: 40px; 617 color: var(--header-links); 618 font-size: 18px; 619 font-weight: 700; 620 display: flex; 621 align-items: center; 622 padding-top: 0; 623 padding-bottom: 0; 624 } 625 626 .dropdown-menu.show .dropdown-item:hover, 627 .dropdown-menu.show .dropdown-item:focus { 628 background-color: var(--header-bg); 629 color: var(--header-links); 630 } 631 632 .navbar .dropdown-toggle::after { 633 content: "expand_more"; 634 font-family: "Material Icons"; 635 font-size: 20px; 636 border: 0; 637 margin-left: 6px; 638 vertical-align: middle; 639 line-height: 1; 640 } 641 642 :root { 643 --address-bar-height: ''; 644 --header-bg: #9053FC; 645 --header-mobile-links-bg: #7141C4; 646 --header-links: #FFFFFF; 647 --header-social-icons: #FFFFFF; 648 --header-btn-bg: #7141C4; 649 --header-btn-color: #F6FF1D; 650 --header-loadbar: #B48AFF; 651 652 --dedications-bar-bg: #fff; 653 --dedications-bar-msg: #000; 654 --dedications-bar-label: #000; 655 656 657 --page-title: #9053FC; 658 --primary-text: #7141C4; 659 --lecture-text: #232323; 660 --heading-text: #9053FC; 661 --highlight-text: #B48AFF; 662 --primary-btn-bg: #3C4FFF; 663 --primary-btn-color: #FFFFFF; 664 --secondary-btn-bg: #9053FC; 665 --secondary-btn-color: #FFFFFF; 666 --play-btn-bg: #7141C4; 667 --play-btn-hover-bg: #7141C4; 668 --play-btn-color: #FFFFFF; 669 --highglight-block-bg: #9053FC; 670 --highglight-block-secondary-bg: #7141C4; 671 --highglight-block-color: #FFFFFF; 672 --highglight-block-primary-btn-bg: #000000; 673 --highglight-block-primary-btn-color: #FFFFFF; 674 --highglight-block-secondary-btn-bg: #FFFFFF; 675 --highglight-block-secondary-btn-color: #9053FC; 676 677 678 --player-bar-bg: #7141C4; 679 --player-bar-songtitle: #FFFFFF; 680 --player-bar-artist: #FFFFFF; 681 --player-bar-icons: #FFFFFF; 682 --player-bar-play-btn-bg: #FFFFFF; 683 --player-bar-play-btn-color: #9053FC; 684 --player-bar-seekbar-bg: #B48AFF; 685 --player-bar-seekbar-fill: #B48AFF; 686 687 --footer-bg: #9053FC; 688 --footer-heading-text: #FFFFFF; 689 --footer-links: #FFFFFF; 690 --footer-social-icons: #FFFFFF; 691 } 692 693 .home-image-slider { 694 margin-top: 50px; 695 } 696 697 .home-top-played-header { 698 color: #fff; 699 font-size: 18px; 700 font-weight: 700; 701 margin-bottom: 10px; 702 text-transform: uppercase; 703 } 704 705 .home-top-played { 706 min-width: 300px; 707 width: 350px; 708 max-height: 380px; 709 display: none; 710 position: absolute; 711 right: 0; 712 top: 50%; 713 transform: translateY(-50%); 714 overflow: hidden; 715 z-index: 10; 716 } 717 718 .home-top-played .element { 719 background-color: rgba(255, 255, 255, .2); 720 padding: 10px; 721 margin-bottom: 10px; 722 border-radius: 10px; 723 } 724 725 .home-top-played .details-ctr { 726 width: 100%; 727 display: flex; 728 align-items: center; 729 } 730
731 .home-top-played-details { 732 width: 100%; 733 display: flex; 734 align-items: center; 735 justify-content: space-between; 736 } 737 738 .home-top-played-metadata { 739 padding: 0 50px 0 10px; 740 } 741 742 .home-top-played-artist { 743 color: #fff; 744 font-size: 14px; 745 font-weight: 400; 746 line-height: 18px; 747 text-transform: none; 748 display: -webkit-box; 749 -webkit-line-clamp: 1; 750 -webkit-box-orient: vertical; 751 overflow: hidden; 752 } 753 754 .home-top-played-title { 755 color: #fff; 756 font-size: 14px; 757 font-weight: 600; 758 line-height: 18px; 759 text-transform: none; 760 display: -webkit-box; 761 -webkit-line-clamp: 1; 762 -webkit-box-orient: vertical; 763 overflow: hidden; 764 } 765 766 .home-top-played-artwork { 767 min-height: 40px; 768 min-width: 40px; 769 height: 40px; 770 width: 40px; 771 border: 0; 772 border-radius: 5px; 773 } 774 775 .home-top-played-time { 776 color: #fff; 777 font-size: 12px; 778 font-weight: 400; 779 } 780 781 782 783 @media (max-width: 767.98px) { 784 .home-top-played { 785 display: none; 786 } 787 .dc-bar-wpr .title { 788 display: none; 789 font-size: 22px; 790 } 791 .dc-bar-wpr .dedicationBtn { 792 visibility: visible; 793 opacity: 1; 794 pointer-events: auto; 795 } 796 797 .dc-bar-wpr .scroll-container { 798 font-size: 14px; 799 height: 38px; 800 right: 0px; 801 left: 62px; 802 } 803 804 .dc-bar-wpr .scroll-container::before { 805 width: 25px; 806 height: 38px; 807 left: 0; 808 } 809 810 .dc-bar-wpr .scroll-container::after { 811 width: 25px; 812 height: 38px; 813 right: 0; 814 } 815 816 .dropdown-menu.show { 817 background-color: var(--header-mobile-links-bg); 818 padding-top: 0 !important; 819 padding-bottom: 0 !important; 820 margin-top: 0px !important; 821 border-radius: 0; 822 border: 0;; 823 opacity: 1; 824 825 } 826 .dropdown-menu.show .dropdown-item { 827 min-height: 40px; 828 color: var(--header-links); 829 font-size: 22px; 830 font-weight: 700; 831 border-bottom: 1px solid rgba(255, 255, 255, 0.1); 832 padding: 12px inherit; 833 } 834 835 .dropdown-menu.show .dropdown-item:hover, 836 .dropdown-menu.show .dropdown-item:focus { 837 background-color: var(--header-mobile-links-bg); 838 color: var(--header-links); 839 } 840 841 .navbar .dropdown-toggle::after { 842 content: "expand_more"; 843 font-family: "Material Icons"; 844 font-size: 20px; 845 border: 0; 846 margin-left: 6px; 847 vertical-align: middle; 848 line-height: 1; 849 } 850 } 851 852 .ck-content .image { 853 display: table; 854 margin-left: auto; 855 margin-right: auto; 856 } 857 858 .ck-content .image img { 859 width: 100%; 860 height: auto; 861 display: block; 862 } 863 864 .ck-content .image.image_resized { 865 max-width: 100%; 866 } 867 </style> 868 </head> 869 870<body class="vibe-site page-home"> 871 <div class="header fixed-top"> 872 <nav class="navbar navbar-expand-md navbar-dark"> 873 <div class='container-fluid navbar-padding'> 874 <div class="d-flex d-md-none w-100 align-items-center justify-content-between"> 875 <div class="d-flex"> 876 <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse"
877 aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation"> 878 <span class="material-icons toggle-icon notes-icon">notes</span> 879 <span class="material-icons toggle-icon close-icon">close</span> 880 </button> 881 </div> 882 883 <a href="https://radiosatellite.eu" class="navbar-brand mx-auto"> 884 <img src="https://radiosatellite.eu/uploads/691479b079384/site/1766447886_68fcc02246bb95a44cb0.jpg" class="mobile-logo" alt="RADIOSATELLITE" /> 885 </a> 886 887 <div class="d-flex"> 888 <div class="header-btn header-ppBtn material-icons" onclick="window.p1.playStream(this)" data-title="RADIOSATELLITE" data-url="https://manager10.streamradio.fr:1775" data-mp="stream" data-platform="ic" data-json="https://manager10.streamradio.fr:1760" data-server-id="1" data-json-history="0" data-panel="evc" data-stream-id="691479b079546" data-custom="0" data-search-api="everestcast" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Play radio">play_arrow</div> 889 </div> 890 </div> 891 892 <a href="https://radiosatellite.eu" class="navbar-brand d-none d-md-block"> 893 <img src="https://radiosatellite.eu/uploads/691479b079384/site/1766447886_68fcc02246bb95a44cb0.jpg" class="logo-top" alt="RADIOSATELLITE" /> 894 </a> 895 896 <div class="collapse navbar-collapse" id="navbarCollapse"> 897 <ul class="navbar-nav me-auto"> 898 <li class="nav-item"> 899 <a class="nav-link" href="https://radiosatellite.eu/news">News</a> 900 </li> 901 <li class="nav-item"> 902 <a class="nav-link" href="https://radiosatellite.eu/programs">Programs</a> 903 </li> 904 <li class="nav-item"> 905 <a class="nav-link" href="https://radiosatellite.eu/events">Events</a> 906 </li> 907 908 <li class="nav-item"> 909 <a class="nav-link" href="https://radiosatellite.eu/artists">Artists</a> 910 </li> 911 912 913 <li class="nav-item dropdown"> 914 <a class="nav-link dropdown-toggle" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">Medias</a> 915 <ul class="dropdown-menu" aria-labelledby="navbarDropdown"> 916 <li> 917 <a class="dropdown-item" href="https://radiosatellite.eu/music">Music</a> 918 </li> 919 <li> 920 <a class="dropdown-item" href="https://radiosatellite.eu/videos">Videos</a> 921 </li> 922 <li> 923 <a class="dropdown-item" href="https://radiosatellite.eu/podcasts">Podcasts</a> 924 </li> 925 </ul> 926 </li> 927 </ul> 928 <div class="follow-us">Follow us on social media</div> 929 <ul class="navbar-nav sm-icons"> 930 <li class="nav-item"> 931 <a class="nav-link" href="https://www.facebook.com/radiosatellite.live" target="_blank" rel="noopener noreferrer"> 932 <i class="fa-brands fa-square-facebook"></i> 933 </a> 934 </li> 935 <li class="nav-item"> 936 <a class="nav-link" href="https://twitter.com/RADIOSATELLITE2" target="_blank" rel="noopener noreferrer"> 937 <i class="fa-brands fa-x-twitter"></i> 938 </a> 939 </li> 940 <li class="nav-item"> 941 <a class="nav-link" href="https://www.instagram.com/radiosatellite2/" target="_blank" rel="noopener noreferrer"> 942 <i class="fa-brands fa-instagram"></i> 943 </a> 944 </li> 945 <li class="nav-item"> 946 <a class="nav-link" href="https://www.youtube.com/@webradioradiosatellite3961" target="_blank" rel="noopener noreferrer"> 947 <i class="fa-brands fa-youtube"></i> 948 </a> 949 </li> 950 <li class="nav-item"> 951 <a class="nav-link" href="https://www.tiktok.com/@radiosatellite" target="_blank" rel="noopener noreferrer"> 952 <i class="fa-brands fa-tiktok"></i> 953 </a> 954 </li> 955 <li class="mobile-hide"> 956 <div class="header-btn header-ppBtn material-icons" onclick="window.p1.playStream(this)" data-title="RADIOSATELLITE" data-url="https://manager10.streamradio.fr:1775" data-mp="stream" data-platform="ic" data-json="https://manager10.streamradio.fr:1760" data-server-id="1" data-json-history="0" data-panel="evc" data-stream-id="691479b079546" data-custom="0" data-search-api="everestcast" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Play radio">play_arrow</div> 957 </li> 958 </ul> 959 </div> 960 </div> 961 </nav> 962 </div> 963 964 965 <div id="main"> 966 <h1 class="d-none">RADIOSATELLITE</h1> 967 968 969 <div class="vibe-home-blocks" data-home-duel-order="2"> 970 971 972 973 <div class="vibe-home-block vibe-home-block--default" data-home-block="news" style="order: 5"> 974 <div class="container"> 975 <div class="row"> 976 <div class="col-md-12"> 977 <div class="block-header"> 978 <div class="block-header-title">Latest news</div> 979 </div> 980 </div> 981 </div> 982 </div> 983 984 <div class="container-fluid highlight-block home-news-featured"> 985 <div class="container"> 986 <div class="row justify-content-center"> 987 <div class="col-md-4"> 988 <div class="element-list videos"> 989 <div class="subtitle">In the news</div> 990 <a href="https://radiosatellite.eu/news/stars/clint-eastwood-214"> 991 <div class="img-wpr"> 992 <img src="https://radiosatellite.eu/uploads/691479b079384/news/thumb_1764879528_0278d199a93441c27477.png" class="img" alt="CLINT EASTWOOD"> 993 </div> 994 <div class="category">STARS</div> 995 <div class="title">CLINT EASTWOOD</div> 996 <div class="date">Posted on Dec 04, 2025</div> 997 </a> 998 </div> 999 </div> 1000 1001 <div class="col-md-4"> 1002 <div class="element-list videos"> 1003 <div class="subtitle">Most recent</div> 1004 <a href="https://radiosatellite.eu/news/radio/ecouter-listen-846"> 1005 <div class="img-wpr"> 1006 <img src="https://radiosatellite.eu/uploads/691479b079384/news/thumb_1775726947_59fc376ecc8fa0564ddd.png" class="img" alt="ECOUTER / LISTEN"> 1007 </div> 1008 <div class="category">RADIO</div> 1009 <div class="title">ECOUTER / LISTEN</div> 1010 <div class="date">Posted on Apr 09, 2026</div> 1011 </a> 1012 </div> 1013 </div> 1014 1015 1016 <div class="col-md-4"> 1017 <div class="element-list videos"> 1018 <div class="subtitle">Video of the week</div> 1019 <a href="https://radiosatellite.eu/videos/videos/radiosatellite-joie-dans-lair-672"> 1020 <div class="img-wpr"> 1021 <img src="https://i.ytimg.com/vi/UqYaCDSgCw0/maxresdefault.jpg" class="img" alt="RADIOSATELLITE JOIE DANS L'AIR"> 1022 </div> 1023 <div class="category">VIDEOS </div> 1024 <div class="title">RADIOSATELLITE JOIE DANS L'AIR</div> 1025 <div class="date">Posted on Jun 02, 2026</div> 1026 </a> 1027 </div> 1028 </div> 1029 </div> 1030 </div> 1031 </div> 1032 1033 <div class="container home-news-grid"> 1034 <div class="row pt-50"> 1035 <div class="col-md-3"> 1036 <div class="element-list"> 1037 <a href="https://radiosatellite.eu/news/radio/happy-new-year-233"> 1038 <div class="img-wpr"> 1039 <img src=" https://radiosatellite.eu/uploads/691479b079384/news/thumb_1766930465_91aa744e63efea1f5abf.png" class="img" alt="HAPPY NEW YEAR"> 1040 </div> 1041 <div class="details"> 1042 <div class="category">RADIO</div> 1043 <div class="title">HAPPY NEW YEAR</div> 1044 <div class="date">Posted on Dec 28, 2025</div> 1045 </div> 1046 </a> 1047 </div> 1048 </div> 1049 <div class="col-md-3"> 1050 <div class="element-list"> 1051 <a href="https://radiosatellite.eu/news/radio/radiosatellite-ne
1051w-look-230"> 1052 <div class="img-wpr"> 1053 <img src=" https://radiosatellite.eu/uploads/691479b079384/news/thumb_1766503906_0d142f456439d39c9109.png" class="img" alt="RADIOSATELLITE NEW LOOK "> 1054 </div> 1055 <div class="details"> 1056 <div class="category">RADIO</div> 1057 <div class="title">RADIOSATELLITE NEW LOOK </div> 1058 <div class="date">Posted on Dec 23, 2025</div> 1059 </div> 1060 </a> 1061 </div> 1062 </div> 1063 <div class="col-md-3"> 1064 <div class="element-list"> 1065 <a href="https://radiosatellite.eu/news/radio/radiosatellite-a-multilingual-radio-station-226"> 1066 <div class="img-wpr"> 1067 <img src=" https://radiosatellite.eu/uploads/691479b079384/news/thumb_1766261286_c4cadfb342613f73d8d8.jpg" class="img" alt="RADIOSATELLITE : A MULTILINGUAL RADIO STATION"> 1068 </div> 1069 <div class="details"> 1070 <div class="category">RADIO</div> 1071 <div class="title">RADIOSATELLITE : A MULTILINGUAL RADIO STATION</div> 1072 <div class="date">Posted on Dec 20, 2025</div> 1073 </div> 1074 </a> 1075 </div> 1076 </div> 1077 <div class="col-md-3"> 1078 <div class="element-list"> 1079 <a href="https://radiosatellite.eu/news/stars/clint-eastwood-214"> 1080 <div class="img-wpr"> 1081 <img src=" https://radiosatellite.eu/uploads/691479b079384/news/thumb_1764879528_0278d199a93441c27477.png" class="img" alt="CLINT EASTWOOD"> 1082 </div> 1083 <div class="details"> 1084 <div class="category">STARS</div> 1085 <div class="title">CLINT EASTWOOD</div> 1086 <div class="date">Posted on Dec 04, 2025</div> 1087 </div> 1088 </a> 1089 </div> 1090 </div> 1091 <div class="col-md-3"> 1092 <div class="element-list"> 1093 <a href="https://radiosatellite.eu/news/radio/radio-satellites-team-charlie-210"> 1094 <div class="img-wpr"> 1095 <img src=" https://radiosatellite.eu/uploads/691479b079384/news/thumb_1764634660_93374ce4f4e45458c456.png" class="img" alt="RADIO SATELLITE'S TEAM. CHARLIE "> 1096 </div> 1097 <div class="details"> 1098 <div class="category">RADIO</div> 1099 <div class="title">RADIO SATELLITE'S TEAM. CHARLIE </div> 1100 <div class="date">Posted on Dec 02, 2025</div> 1101 </div> 1102 </a> 1103 </div> 1104 </div> 1105 <div class="col-md-3"> 1106 <div class="element-list"> 1107 <a href="https://radiosatellite.eu/news/radio/radiosatellites-team-jessica-209"> 1108 <div class="img-wpr"> 1109 <img src=" https://radiosatellite.eu/uploads/691479b079384/news/thumb_1764633888_78cbb4a18b4ab4ae6125.png" class="img" alt="RADIOSATELLITE'S TEAM JESSICA "> 1110 </div> 1111 <div class="details"> 1112 <div class="category">RADIO</div> 1113 <div class="title">RADIOSATELLITE'S TEAM JESSICA </div> 1114 <div class="date">Posted on Dec 02, 2025</div> 1115 </div> 1116 </a> 1117 </div> 1118 </div> 1119 <div class="col-md-3"> 1120 <div class="element-list"> 1121 <a href="https://radiosatellite.eu/news/music/inger-lise-stulien-202"> 1122 <div class="img-wpr"> 1123 <img src=" https://radiosatellite.eu/uploads/691479b079384/news/thumb_1764422710_cdbf7f949ae5929a09fd.png" class="img" alt="INGER LISE STULIEN "> 1124 </div> 1125 <div class="details"> 1126 <div class="category">MUSIC</div> 1127 <div class="title">INGER LISE STULIEN </div> 1128 <div class="date">Posted on Nov 29, 2025</div> 1129 </div> 1130 </a> 1131 </div> 1132 </div> 1133 <div class="col-md-3"> 1134 <div class="element-list"> 1135 <a href="https://radiosatellite.eu/news/radio/christmas-soon-189"> 1136 <div class="img-wpr"> 1137 <img src=" https://radiosatellite.eu/uploads/691479b079384/news/thumb_1763505243_bd7c84965cbb84be1ebe.png" class="img" alt="CHRISTMAS SOON"> 1138 </div> 1139 <div class="details"> 1140 <div class="category">RADIO</div> 1141 <div class="title">CHRISTMAS SOON</div> 1142 <div class="date">Posted on Nov 18, 2025</div> 1143 </div> 1144 </a> 1145 </div> 1146 </div> 1147 </div> 1148 1149 <div class="row"> 1150 <div class="col-md-12 text-center"> 1151 <a class='btn-action' href="https://radiosatellite.eu/news">All the news</a> 1152 </div> 1153 </div> 1154 </div> 1155 </div> 1156 1157 <div class="vibe-home-block vibe-home-block--default" data-home-block="programs" style="order: 6"> 1158 <div class="container"> 1159 <div class="row"> 1160 <div class="col-md-12"> 1161 <div class="page-header page-header-block"> 1162 <div class="d-flex justify-content-between align-items-center"> 1163 <div class="title">Next programs</div> 1164 </div> 1165 </div> 1166 </div> 1167 </div> 1168 1169 <div class="row"> 1170 <div class="col-md-4"> 1171 <div class="element-list videos"> 1172 <div class="img-wpr"> 1173 <img src="https://radiosatellite.eu/uploads/691479b079384/programs/1767865380_799eedd144f19b271b13.png" class="img" alt="OLDIES AND INSTRUMENTAL"> 1174 </div> 1175 <div class="title">20h00</div> 1176 <div class="venue">OLDIES AND INSTRUMENTAL</div> 1177 <div class="date"></div> 1178 </div> 1179 </div> 1180 <div class="col-md-4"> 1181 <div class="element-list videos"> 1182 <div class="img-wpr"> 1183 <img src="https://radiosatellite.eu/uploads/691479b079384/programs/1763036084_f00e01cecb4c0919a8f7.png" class="img" alt="JUST JAZZ by STEVE HART"> 1184 </div> 1185 <div class="title">21h00</div> 1186 <div class="venue">JUST JAZZ by STEVE HART</div> 1187 <div class="date"><h2>Just Jazz est une émission proposée et présentée par STEVE HART sur RADIOSATELLITE<br><br> </h2><p>Tous les soirs entre 21h00 et 22h00</p></div> 1188 </div> 1189 </div> 1190 </div> 1191 1192 <div class="row"> 1193 <div class="col-md-12 text-center"> 1194 <a class='btn-action' href="https://radiosatellite.eu/programs">All the programs</a> 1195 </div> 1196 </div> 1197 </div> 1198 </div> 1199 1200 <div class="vibe-home-block vibe-home-block--default" data-home-block="videos" style="order: 7"> 1201 <div class="container-fluid highlight-block pb-50 mt-50"> 1202 <div class="container"> 1203 <div class="row"> 1204 <div class="col-md-12"> 1205 <div class="page-header page-header-block"> 1206 <div class="d-flex justify-content-between align-items-center"> 1207 <div class="title">Latest videos</div> 1208 </div> 1209 </div> 1210 </div> 1211 </div> 1212 1213 <div class="row"> 1214 <div class="col-md-7"> 1215 <div class="row"> 1216 <div class="col-md-12"> 1217 <a href="https://radiosatellite.eu/videos/videos/radiosatellite-joie-dans-lair-672" class="home-latest-videos-list first"> 1218 <div class="img-wpr"> 1219 <img src="https://i.ytimg.com/vi/UqYaCDSgCw0/maxresdefault.jpg" class="img" alt="RADIOSATELLITE JOIE DANS L'AIR"> 1220 <div class="play-btn play material-icons"></div> 1221 </div> 1222 <div> 1223 <div class="title">RADIOSATELLITE JOIE DANS L'AIR</div> 1224 <div class="date">Jun 02, 2026</div> 1225 </div> 1226 </a> 1227 </div> 1228 </div> 1229 </div> 1230 1231 <div class="col-md-5"> 1232 <div class="row"> 1233 <div class="col-md-12"> 1234 <a href="https://radiosatellite.eu/videos/videos/wassim-670" class="home-latest-videos-list"> 1235 <div class="img-wpr"> 1236 <img src="https://i.ytimg.com/vi/DQ5xmuj_g-U/maxresdefault.jpg" class="img" alt="WASSIM"> 1237 <div class="play-btn play material-icons"></div> 1238 </div> 1239 1240 <div> 1241 <div class="title">WASSIM</div> 1242 <div class="date">May 30, 2026</div> 1243 </div> 1244 </a> 1245 </div> 1246 <div class="col-md-12"> 1247 <a href="https://radiosatellite.eu/videos/videos/the-cowboys-life-669" class="home-latest-videos-list"> 1248 <div class="img-wpr"> 1249 <img src="https://i.ytimg.com/vi/aFL1EBowvso/maxresdefault.jpg" class="img" alt="THE COWBOY'S LIFE"> 1250 <div class="play-btn play material-icons"></div> 1251 </div> 1252 1253 <div> 1254 <div class="title">THE COWBOY'S LIFE</div> 1255 <div class="date">May 27, 2026</div> 1256 </div> 1257 </a> 1258 </div> 1259
1259 <div class="col-md-12"> 1260 <a href="https://radiosatellite.eu/videos/videos/jingle-chante-radiosatellite-667" class="home-latest-videos-list"> 1261 <div class="img-wpr"> 1262 <img src="https://i.ytimg.com/vi/FwcimHJf58o/maxresdefault.jpg" class="img" alt="JINGLE CHANTÃ RADIOSATELLITE "> 1263 <div class="play-btn play material-icons"></div> 1264 </div> 1265 1266 <div> 1267 <div class="title">JINGLE CHANTÃ RADIOSATELLITE </div> 1268 <div class="date">May 22, 2026</div> 1269 </div> 1270 </a> 1271 </div> 1272 <div class="col-md-12"> 1273 <a href="https://radiosatellite.eu/videos/videos/chanson-on-oublie-tout-666" class="home-latest-videos-list"> 1274 <div class="img-wpr"> 1275 <img src="https://i.ytimg.com/vi/SJfuhAWNtKo/maxresdefault.jpg" class="img" alt="CHANSON "ON OUBLIE TOUT"> 1276 <div class="play-btn play material-icons"></div> 1277 </div> 1278 1279 <div> 1280 <div class="title">CHANSON "ON OUBLIE TOUT</div> 1281 <div class="date">May 22, 2026</div> 1282 </div> 1283 </a> 1284 </div> 1285 </div> 1286 </div> 1287 </div> 1288 1289 <div class="row"> 1290 <div class="col-md-12 text-center mt-20"> 1291 <a href="https://radiosatellite.eu/videos" class="btn-action contrast">More videos</a> 1292 </div> 1293 </div> 1294 </div> 1295 </div> 1296 </div> 1297 1298 <div class="vibe-home-block vibe-home-block--default" data-home-block="podcasts" style="order: 8"> 1299 <div class="container"> 1300 <div class="row"> 1301 <div class="col-md-12"> 1302 <div class="page-header page-header-block"> 1303 <div class="d-flex justify-content-between align-items-center"> 1304 <div class="title">Latest podcasts</div> 1305 </div> 1306 </div> 1307 </div> 1308 </div> 1309 1310 <div class="row"> 1311 <div class="col-md-12"> 1312 <div class="glide home-podcasts-slider"> 1313 <div class="glide__track" data-glide-el="track"> 1314 <ul class="glide__slides home-podcast-list"> 1315 1316 <li class="glide__slide"> 1317 <div class="item"> 1318 <div class="top"> 1319 <img src="https://radiosatellite.eu/uploads/691479b079384/podcasts/1765927839_d152e5dc8b4d95531c17.jpg"> 1320 <div 1321 class="podcast-ppBtn material-icons" 1322 id="home_podcast_ppBtn_0" 1323 onclick="window.p1.playPodcast('https://ia601707.us.archive.org/33/items/the-country-mile-393/The%20Country%20Mile%20-%20393.mp3', this)" 1324 data-loaded="false" 1325 data-title="THE COUNTRY MILE" 1326 data-img="1765927839_d152e5dc8b4d95531c17.jpg" 1327 data-date="Dec 17, 2025" 1328 data-playing="false" 1329 data-program="THE COUNTRY MILE by DAVE WATKINS" 1330 > 1331 play_arrow</div> 1332 </div> 1333 <div class="program">THE COUNTRY MILE by DAVE WATKINS</div> 1334 <div class="title">THE COUNTRY MILE</div> 1335 <div class="date">Posted on Dec 17, 2025</div> 1336 </div> 1337 </li> 1338 <li class="glide__slide"> 1339 <div class="item"> 1340 <div class="top"> 1341 <img src="https://radiosatellite.eu/uploads/691479b079384/podcasts/1763035965_7b48060be42de842e048.png"> 1342 <div 1343 class="podcast-ppBtn material-icons" 1344 id="home_podcast_ppBtn_1" 1345 onclick="window.p1.playPodcast('https://ia802901.us.archive.org/34/items/051-just-jazz/051-JustJazz.mp3', this)" 1346 data-loaded="false" 1347 data-title="JUST JAZZ" 1348 data-img="1763035965_7b48060be42de842e048.png" 1349 data-date="Nov 13, 2025" 1350 data-playing="false" 1351 data-program="JUST JAZZ by STEVE HART" 1352 > 1353 play_arrow</div> 1354 </div> 1355 <div class="program">JUST JAZZ by STEVE HART</div> 1356 <div class="title">JUST JAZZ</div> 1357 <div class="date">Posted on Nov 13, 2025</div> 1358 </div> 1359 </li> 1360 <li class="glide__slide"> 1361 <div class="item"> 1362 <div class="top"> 1363 <img src="https://radiosatellite.eu/uploads/691479b079384/podcasts/1765926995_1d6bea5e2f87f0e431e1.jpg"> 1364 <div 1365 class="podcast-ppBtn material-icons" 1366 id="home_podcast_ppBtn_2" 1367 onclick="window.p1.playPodcast('http://jcurtmanshow.weebly.com/uploads/9/0/8/5/908502/jc_show_11052016_b.mp3', this)" 1368 data-loaded="false" 1369 data-title="THE JASON CURTMAN SHOW " 1370 data-img="1765926995_1d6bea5e2f87f0e431e1.jpg" 1371 data-date="Nov 13, 2025" 1372 data-playing="false" 1373 > 1374 play_arrow</div> 1375 </div> 1376
1376 <div class="title">THE JASON CURTMAN SHOW </div> 1377 <div class="date">Posted on Nov 13, 2025</div> 1378 </div> 1379 </li> 1380 1381 1382 </ul> 1383 </div> 1384 </div> 1385 </div> 1386 </div> 1387 1388 <div class="row"> 1389 <div class="col-md-12 text-center"> 1390 <a class='btn-action' href="https://radiosatellite.eu/podcasts">All the podcasts</a> 1391 </div> 1392 </div> 1393 </div> 1394 </div> 1395 1396 1397 <div class="vibe-home-block vibe-home-block--default" data-home-block="sponsors" style="order: 10"> 1398 <div class="container"> 1399 <div class="row"> 1400 <div class="col-md-12"> 1401 <div class="page-header page-header-block"> 1402 <div class="d-flex justify-content-between align-items-center"> 1403 <div class="title">Sponsors</div> 1404 </div> 1405 </div> 1406 </div> 1407 </div> 1408 1409 <div class="row"> 1410 <div class="col-md-12"> 1411 <div class="glide home-sponsors-slider"> 1412 <div class="glide__track" data-glide-el="track"> 1413 <ul class="glide__slides"> 1414 <li class="glide__slide home-sponsors-list"> 1415 1416 <div class="item"> 1417 <div class="img-wpr"> 1418 <a href="https://www.annuairedelaradio.fr/radio-satellite-2/" target="_blank"> 1419 <img src="https://radiosatellite.eu/uploads/691479b079384/sponsors/1763298570_2a17c9824a6bfc96f5a0.png" alt="ANNUAIRE DE LA RADIO "> 1420 </a> 1421 </div> 1422 <div class='name'>ANNUAIRE DE LA RADIO </div> 1423 </div> 1424 1425 </li> 1426 <li class="glide__slide home-sponsors-list"> 1427 1428 <div class="item"> 1429 <div class="img-wpr"> 1430 <a href="https://clover.fm/46564-radiosatellite.html" target="_blank"> 1431 <img src="https://radiosatellite.eu/uploads/691479b079384/sponsors/1764145643_a931b03dfaedffa85b53.png" alt="CLOVER.FM"> 1432 </a> 1433 </div> 1434 <div class='name'>CLOVER.FM</div> 1435 </div> 1436 1437 </li> 1438 <li class="glide__slide home-sponsors-list"> 1439 1440 <div class="item"> 1441 <div class="img-wpr"> 1442 <a href="https://onlineradiobox.com/fr/satellite/?cs=fr.satellite" target="_blank"> 1443 <img src="https://radiosatellite.eu/uploads/691479b079384/sponsors/1763293579_6c95230b1016501fd4ea.jpg" alt="ON LINE RADIO BOX "> 1444 </a> 1445 </div> 1446 <div class='name'>ON LINE RADIO BOX </div> 1447 </div> 1448 1449 </li> 1450 <li class="glide__slide home-sp
1450onsors-list"> 1451 1452 <div class="item"> 1453 <div class="img-wpr"> 1454 <a href="https://www.ontoplist.com/" target="_blank"> 1455 <img src="https://radiosatellite.eu/uploads/691479b079384/sponsors/1764893163_f31cf9e1957e53a5b803.png" alt="ON TOP LIST"> 1456 </a> 1457 </div> 1458 <div class='name'>ON TOP LIST</div> 1459 </div> 1460 1461 </li> 1462 <li class="glide__slide home-sponsors-list"> 1463 1464 <div class="item"> 1465 <div class="img-wpr"> 1466 <a href="https://q-radio.ru/stations/radio-satellite/" target="_blank"> 1467 <img src="https://radiosatellite.eu/uploads/691479b079384/sponsors/1782998640_38ffad8671d8e3455821.png" alt="Q-RADIO"> 1468 </a> 1469 </div> 1470 <div class='name'>Q-RADIO</div> 1471 </div> 1472 1473 </li> 1474 <li class="glide__slide home-sponsors-list"> 1475 1476 <div class="item"> 1477 <div class="img-wpr"> 1478 <a href="https://raddio.net/381514-radiosatellite/" target="_blank"> 1479 <img src="https://radiosatellite.eu/uploads/691479b079384/sponsors/1763321153_342486650f95f3299a57.png" alt="RADDIO.NET"> 1480 </a> 1481 </div> 1482 <div class='name'>RADDIO.NET</div> 1483 </div> 1484 1485 </li> 1486 <li class="glide__slide home-sponsors-list"> 1487 1488 <div class="item"> 1489 <div class="img-wpr"> 1490 <a href="https://radioabc.com/station/satellite" target="_blank"> 1491 <img src="https://radiosatellite.eu/uploads/691479b079384/sponsors/1765240733_e3af0ad00e0554f58b4f.png" alt="RADIO ABC"> 1492 </a> 1493 </div> 1494 <div class='name'>RADIO ABC</div> 1495 </div> 1496 1497 </li> 1498 <li class="glide__slide home-sponsors-list"> 1499 1500 <div class="item"> 1501 <div class="img-wpr"> 1502 <a href="https://www.radio-en-ligne.fr/radio-satellite" target="_blank"> 1503 <img src="https://radiosatellite.eu/uploads/691479b079384/sponsors/1764083548_6e8f0844eadf971fcb54.png" alt="RADIO EN LIGNE "> 1504 </a> 1505 </div> 1506 <div class='name'>RADIO EN LIGNE </div> 1507 </div> 1508 1509 </li> 1510 <li class="glide__slide home-sp
1510onsors-list"> 1511 1512 <div class="item"> 1513 <div class="img-wpr"> 1514 <a href="https://www.radioplug.co.uk/search-results" target="_blank"> 1515 <img src="https://radiosatellite.eu/uploads/691479b079384/sponsors/1765051559_58abc8a1e1a078555f03.png" alt="RADIO PLUG"> 1516 </a> 1517 </div> 1518 <div class='name'>RADIO PLUG</div> 1519 </div> 1520 1521 </li> 1522 <li class="glide__slide home-sponsors-list"> 1523 1524 <div class="item"> 1525 <div class="img-wpr"> 1526 <a href="https://radioregistry.com/station/radio-satellite/" target="_blank"> 1527 <img src="https://radiosatellite.eu/uploads/691479b079384/sponsors/1765632024_9e04ca28f3f13c051388.jpg" alt="RADIO REGISTRY "> 1528 </a> 1529 </div> 1530 <div class='name'>RADIO REGISTRY </div> 1531 </div> 1532 1533 </li> 1534 <li class="glide__slide home-sponsors-list"> 1535 1536 <div class="item"> 1537 <div class="img-wpr"> 1538 <a href="https://www.radio.de/s/satellite" target="_blank"> 1539 <img src="https://radiosatellite.eu/uploads/691479b079384/sponsors/1763399353_d5cbd4242113e89ca707.png" alt="RADIO.NET"> 1540 </a> 1541 </div> 1542 <div class='name'>RADIO.NET</div> 1543 </div> 1544 1545 </li> 1546 <li class="glide__slide home-sponsors-list"> 1547 1548 <div class="item"> 1549 <div class="img-wpr"> 1550 <a href="https://www.radioline.co/fr/radios/radiosatellite" target="_blank"> 1551 <img src="https://radiosatellite.eu/uploads/691479b079384/sponsors/1764013418_45e1d719f7ad7ea802e8.png" alt="RADIOLINE"> 1552 </a> 1553 </div> 1554 <div class='name'>RADIOLINE</div> 1555 </div> 1556 1557 </li> 1558 <li class="glide__slide home-sponsors-list"> 1559 1560 <div class="item"> 1561 <div class="img-wpr"> 1562 <a href="https://www.radios.com.br/aovivo/radio-satellite/29878" target="_blank"> 1563 <img src="https://radiosatellite.eu/uploads/691479b079384/sponsors/1763328226_645d320a36b858875a97.png" alt="RADIOSNET"> 1564 </a> 1565 </div> 1566 <div class='name'>RADIOSNET</div> 1567 </div> 1568 1569 </li> 1570 <li class="glide__slide home-sp
1570onsors-list"> 1571 <div class="item"> 1572 <div class="img-wpr"> 1573 <img src="https://radiosatellite.eu/uploads/691479b079384/sponsors/1763399032_e80402e7af02a1f88527.png" alt="SACEM"> 1574 </div> 1575 <div class='name'>SACEM</div> 1576 </div> 1577 1578 </li> 1579 <li class="glide__slide home-sponsors-list"> 1580 1581 <div class="item"> 1582 <div class="img-wpr"> 1583 <a href="https://top-webradios.de/eintrag/radiosatellite/" target="_blank"> 1584 <img src="https://radiosatellite.eu/uploads/691479b079384/sponsors/1763997378_233f5ebb0fa5bfffd47e.png" alt="TOP RADIO.DE"> 1585 </a> 1586 </div> 1587 <div class='name'>TOP RADIO.DE</div> 1588 </div> 1589 1590 </li> 1591 <li class="glide__slide home-sponsors-list"> 1592 1593 <div class="item"> 1594 <div class="img-wpr"> 1595 <a href="https://topradio.me/satellite " target="_blank"> 1596 <img src="https://radiosatellite.eu/uploads/691479b079384/sponsors/1764591499_bd43a97d22c56bbd5649.png" alt="TOP RADIO.ME"> 1597 </a> 1598 </div> 1599 <div class='name'>TOP RADIO.ME</div> 1600 </div> 1601 1602 </li> 1603 </ul> 1604 </div> 1605 1606 <div class="glide__arrows" data-glide-el="controls"> 1607 <button class="glide__arrow sponsors glide__arrow--left" data-glide-dir="<"><i class="fas fa-chevron-left"></i></button> 1608 <button class="glide__arrow sponsors glide__arrow--right" data-glide-dir=">"><i class="fas fa-chevron-right"></i></button> 1609 </div> 1610 </div> 1611 </div> 1612 </div> 1613 </div> 1614 </div> 1615 </div> 1616</div> 1617
1618<script> 1619 addEventListener("DOMContentLoaded", (event) => { 1620 const imageSliderEle = document.querySelector('.home-image-slider'); 1621 const sponsorsSliderEle = document.querySelector('.home-sponsors-slider'); 1622 const podcastsSliderEle = document.querySelector('.home-podcasts-slider'); 1623 const playedSliderEle = document.querySelector('.home-played-slider'); 1624 1625 if (imageSliderEle) { 1626 homeImageSlider('.home-image-slider'); 1627 } 1628 1629 if (sponsorsSliderEle) { 1630 homeSponsorsSlider('.home-sponsors-slider'); 1631 } 1632 if (podcastsSliderEle) { 1633 homePodcastsSlider(); 1634 } 1635 }); 1636</script>
1636 1637 1638 <div class="footer"> 1639 <div class="container"> 1640 <div class="row"> 1641 <div class="col-md-3"> 1642 <a href="https://radiosatellite.eu"> 1643 <img src="https://radiosatellite.eu/uploads/691479b079384/site/1766447886_68fcc02246bb95a44cb0.jpg" class="logo-footer" alt="RADIOSATELLITE" /> 1644 </a> 1645 </div> 1646 <div class="col-md-9"> 1647 <div class="row"> 1648 <div class="col-md-3"> 1649 <div class="title">Radio</div> 1650 <ul> 1651 <li><a href="https://radiosatellite.eu/news">News</a></li> 1652 <li><a href="https://radiosatellite.eu/programs">Programs</a></li> 1653 <li><a href="https://radiosatellite.eu/events">Events</a></li> 1654 <li><a href="https://radiosatellite.eu/artists">Artists</a></li> 1655 <li><a href="https://radiosatellite.eu/contact">Contact</a></li> 1656 </ul> 1657 </div> 1658 <div class="col-md-3"> 1659 <div class="title">Media</div> 1660 <ul> 1661 <li><a href="https://radiosatellite.eu/music">Music</a></li> 1662 <li><a href="https://radiosatellite.eu/videos">Videos</a></li> 1663 <li><a href="https://radiosatellite.eu/podcasts">Podcasts</a></li> 1664 1665 </ul> 1666 </div> 1667 <div class="col-md-6"> 1668 <div class="title-2">Follow us on social media</div> 1669 <ul class="social"> 1670 <li> 1671 <a href="https://www.facebook.com/radiosatellite.live" target="_blank" rel="noopener noreferrer"> 1672 <i class="fa-brands fa-square-facebook"></i> 1673 </a> 1674 </li> 1675 <li> 1676 <a href="https://twitter.com/RADIOSATELLITE2" target="_blank" rel="noopener noreferrer"> 1677 <i class="fa-brands fa-x-twitter"></i> 1678 </a> 1679 </li> 1680 <li> 1681 <a href="https://www.instagram.com/radiosatellite2/" target="_blank" rel="noopener noreferrer"> 1682 <i class="fa-brands fa-instagram"></i> 1683 </a> 1684 </li> 1685 <li> 1686 <a href="https://www.youtube.com/@webradioradiosatellite3961" target="_blank" rel="noopener noreferrer"> 1687 <i class="fa-brands fa-youtube"></i> 1688 </a> 1689 </li> 1690 <li> 1691 <a href="https://www.tiktok.com/@radiosatellite" target="_blank" rel="noopener noreferrer"> 1692 <i class="fa-brands fa-tiktok"></i> 1693 </a> 1694 </li> 1695 </ul> 1696 </div> 1697 </div> 1698 </div> 1699 </div> 1700 </div> 1701 </div> 1702 <div class="subfooter"> 1703 <div class="container"> 1704 <div class="row"> 1705 <div class="col-md-12"> 1706 © 2026 RADIOSATELLITE | <a href="https://radiosatellite.eu/legal">Legal Mentions</a> - Propulsé par <a href="https://streamradio.fr" target="_blank">Stream Radio</a> </div> 1707 </div> 1708 </div> 1709 </div> 1710 1711 1712 <div id="p1"></div> 1713 <div class="modal fade" id="formModal" tabindex="-1" aria-labelledby="formModalLabel" aria-hidden="true"> 1714 <div class="modal-dialog modal-dialog-centered dedication-dialog"> 1715 <div class="modal-content dedication-box"> 1716 <div class="modal-header border-0"> 1717 <div class="dedication-heading">
1718 <span class="dedication-kicker"><i aria-hidden="true"></i> RADIOSATELLITE en direct</span> 1719 <h5 class="modal-title" id="formModalLabel">Send Dedication</h5> 1720 <h6 class="modal-title">React to live broadcasts, your messages will be broadcast!</h6> 1721 </div> 1722 <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal" aria-label="Fermer"></button> 1723 </div> 1724 <form id="exampleForm"> 1725 <div class="modal-body"> 1726 <div class="mb-3 dedication-field"> 1727 <label for="nameInput" class="form-label">Name</label> 1728 <input type="text" class="form-control" id="nameInput" name="name" maxlength="50" autocomplete="name" placeholder="Votre prénom" required> 1729 <input type="hidden" class="form-control" id="siteId" name="site_id" value="691479b079384"> 1730 </div> 1731 <div class="mb-3 dedication-field"> 1732 <div class="dedication-message-label"> 1733 <label for="messageInput" class="form-label">Message</label> 1734 <span id="dedicationCharacterCount" aria-live="polite">0 / 240</span> 1735 </div> 1736 <textarea class="form-control" id="messageInput" name="message" rows="4" maxlength="240" placeholder="Votre message pour Vibeâ¦" required></textarea> 1737 <span class="dedication-emoji-label">Ajoutez une réaction</span> 1738 <div class="dedication-emoji-picker" role="group" aria-label="Ajouter un émoji à la dédicace"> 1739 <button class="dedication-emoji-button" type="button" data-emoji="â¤ï¸" aria-label="CÅur">â¤ï¸</button> 1740 <button class="dedication-emoji-button" type="button" data-emoji="ð" aria-label="Visage amoureux">ð</button> 1741 <button class="dedication-emoji-button" type="button" data-emoji="ð" aria-label="Visage qui rit">ð</button> 1742 <button class="dedication-emoji-button" type="button" data-emoji="ð¥" aria-label="Feu">ð¥</button> 1743 <button class="dedication-emoji-button" type="button" data-emoji="ð¶" aria-label="Musique">ð¶</button> 1744 <button class="dedication-emoji-button" type="button" data-emoji="ð" aria-label="Fête">ð</button> 1745 <button class="dedication-emoji-button" type="button" data-emoji="ð" aria-label="Applaudissements">ð</button> 1746 <button class="dedication-emoji-button" type="button" data-emoji="ð" aria-label="Pouce levé">ð</button> 1747 </div> 1748 </div> 1749 </div> 1750 <div class="modal-footer border-0"> 1751 <button type="submit" class="btn w-100 dedication-submit"> 1752 <span class="material-icons" aria-hidden="true">send</span> 1753 <strong>Submit</strong> 1754 </button> 1755 <small>Votre message sera diffusé après validation.</small> 1756 </div> 1757 </form> 1758 </div> 1759 </div> 1760 </div> 1761 1762
1762<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>
1762 1763
1763<script src="https://radiosatellite.eu/assets/js/pjax.js"></script>
1763 1764
1764<script src="https://radiosatellite.eu/assets/js/glider.min.js"></script>
1764 1765
1765<script src="https://radiosatellite.eu/assets/js/topbar.min.js"></script>
1765 1766
1766<script src="https://radiosatellite.eu/assets/js/playerBar.js?version=metadata-direct-20260916"></script>
1766 1767
1767<script> 1768 const baseUrl = "https://siteradio.pro/"; 1769 const domain = "https://radiosatellite.eu"; 1770 const hostName = window.location.origin; 1771 const currentSlug = ""; 1772 const siteId = "691479b079384"; 1773 const lastPlayedText = "Latest played"; 1774 const imageSlider = 1; 1775 const siteType = 1; 1776 const imageSliderEnabled = 0; 1777 1778 const txtLastPlayed = "Last Played"; 1779 const txtCopyUrl = "Copy URL"; 1780 const txtUrlCopied = "URL copied!"; 1781 const txtLive = "Live"; 1782 const txtListening = "Listening"; 1783 const txtPlayRadio = "Play radio"; 1784 const txtStopRadio = "Stop radio"; 1785 const txtSelectStream = "Seleact a Stream"; 1786 </script>
1786 1787 1788
1788<script> 1789 function getXHR(url, method = "GET", data = null) { 1790 return new Promise((resolve, reject) => { 1791 const xhr = new XMLHttpRequest(); 1792 xhr.open(method, url, true); 1793 1794 xhr.onload = function () { 1795 if (xhr.status >= 200 && xhr.status < 300) { 1796 resolve(xhr.responseText); 1797 } else { 1798 reject({ 1799 status: xhr.status, 1800 statusText: xhr.statusText, 1801 response: xhr.responseText 1802 }); 1803 } 1804 }; 1805 1806 xhr.onerror = function () { 1807 reject({ status: xhr.status, statusText: "Network Error" }); 1808 }; 1809 1810 if (data instanceof FormData) { 1811 xhr.send(data); 1812 } else if (data) { 1813 xhr.setRequestHeader("Content-Type", "application/json"); 1814 xhr.send(JSON.stringify(data)); 1815 } else { 1816 xhr.send(); 1817 } 1818 }); 1819 } 1820 1821 function getLikedSongs() { 1822 const stored = localStorage.getItem("likedSongs"); 1823 if (!stored) return []; 1824 try { 1825 const parsed = JSON.parse(stored); 1826 return Array.isArray(parsed) ? parsed : []; 1827 } catch (err) { 1828 console.warn("Failed to parse likedSongs", err); 1829 return []; 1830 } 1831 } 1832 1833 function isSongLiked(songKey) { 1834 return getLikedSongs().some(s => s.key === songKey); 1835 } 1836 1837 function applyLikeIconState(icon, isLiked) { 1838 if (isLiked) { 1839 icon.setAttribute("data-action", "dislike"); 1840 icon.style.color = "#ef0000"; 1841 } else { 1842 icon.setAttribute("data-action", "like"); 1843 icon.style.color = ""; 1844 } 1845 } 1846 1847 function updateLocalStorageForSong(songKey, rel, siteId, shouldLike, songData = {}) { 1848 let likedSongs = getLikedSongs(); 1849 1850 if (shouldLike) { 1851 const existsIndex = likedSongs.findIndex(s => s.key === songKey); 1852 const entry = { 1853 key: songKey, 1854 rel: rel.trim(), 1855 siteId: siteId, 1856 artist: songData.artist?.trim() || "Undefined", 1857 title: songData.title?.trim() || "Undefined", 1858 album: songData.album || "Undefined", 1859 artwork: songData.artwork || "", 1860 preview: songData.preview || "", 1861 likedAt: Date.now() 1862 }; 1863 1864 if (existsIndex === -1) { 1865 likedSongs.push(entry); 1866 } else { 1867 likedSongs[existsIndex] = entry; 1868 } 1869 } else { 1870 likedSongs = likedSongs.filter(s => s.key !== songKey); 1871 } 1872 1873 localStorage.setItem("likedSongs", JSON.stringify(likedSongs)); 1874 } 1875 1876 1877 async function likeSong(likeIcon) { 1878 if (!likeIcon) return; 1879 1880 const hostName = window.location.origin; 1881 const songId = likeIcon.dataset.songId; 1882 const siteId = likeIcon.dataset.siteId; 1883 const rel = likeIcon.dataset.rel?.trim(); 1884 1885 if (!songId || !siteId || !rel) { 1886 console.error("Missing required attributes: data-song-id, data-site-id, or data-rel"); 1887 return; 1888 } 1889 1890 const songKey = `${rel}|||${siteId}`; 1891 const getSongUrl = `${hostName}/api/getsong/${songId}`; 1892 const likeSongUrl = `${hostName}/api/likesong`; 1893 1894 const action = likeIcon.getAttribute("data-action"); 1895 const shouldLike = action === "like"; 1896 1897 const wasLikedBeforeClick = isSongLiked(songKey); 1898 1899 applyLikeIconState(likeIcon, shouldLike); 1900 1901 try { 1902 const res = await fetch(getSongUrl); 1903 if (!res.ok) throw new Error(`getSong failed: ${res.status}`); 1904 1905 const song = await res.json(); 1906 if (!song || song.error) throw new Error("Song not found"); 1907 1908 updateLocalStorageForSong(songKey, rel, siteId, shouldLike, song); 1909 1910 const formData = new FormData(); 1911 formData.append("artist", song.artist || "Undefined"); 1912 formData.append("title", song.title || "Undefined"); 1913 formData.append("album", song.album || "Undefined"); 1914 formData.append("artwork", song.artwork || ""); 1915 formData.append("preview", song.preview || ""); 1916 formData.append("siteId", song.site_id || siteId); 1917 formData.append("rel", rel); 1918 formData.append("action", action); 1919 1920 await getXHR(likeSongUrl, "POST", formData); 1921 1922 syncAllLikeButtonsWithStorage(); 1923 1924 } catch (err) { 1925 console.error("likeSong failed:", err); 1926 applyLikeIconState(likeIcon, wasLikedBeforeClick); 1927 } 1928 } 1929 1930 function syncAllLikeButtonsWithStorage() { 1931 const likeButtons = document.querySelectorAll( 1932 'div.like.material-icons.icon-like[data-song-id][data-site-id][data-rel][data-action]' 1933 ); 1934 1935 if (likeButtons.length === 0) { 1936 console.log("syncAllLikeButtonsWithStorage: No matching like buttons found"); 1937 return; 1938 } 1939 1940 const likedSongs = getLikedSongs(); 1941 1942 likeButtons.forEach(button => { 1943 const rel = button.dataset.rel?.trim(); 1944 const siteId = button.dataset.siteId; 1945 1946 if (!rel || !siteId) { 1947 console.warn("Button missing rel or site-id:", button.outerHTML); 1948 applyLikeIconState(button, false); 1949 return; 1950 } 1951 1952 const songKey = `${rel}|||${siteId}`; 1953 const isLiked = likedSongs.some(s => s.key === songKey); 1954 1955 applyLikeIconState(button, isLiked); 1956 }); 1957 } 1958 1959 1960 function injectNewsMetaTags() { 1961 const isNewsPage = 1962 window.location.pathname.startsWith('/news/') || 1963 window.location.pathname.startsWith('/article/') || 1964 document.body.classList.contains('news-post') || 1965 document.querySelector('.news-article, article.post-type-news') || 1966 window.newsPostData !== undefined; 1967 1968 if (!isNewsPage || !window.newsPostData) return; 1969 1970 const head = document.head; 1971 const data = window.newsPostData; 1972 1973 const existingMeta = head.querySelectorAll( 1974 'meta[property^="og:"], meta[property^="article:"], meta[name^="twitter:"]' 1975 ); 1976 existingMeta.forEach(el => el.remove()); 1977 1978 const url = window.location.href.split('#')[0].split('?')[0]; 1979 1980 const tags = [ 1981 { property: "og:title", content: data.title }, 1982 { property: "og:description", content: data.description }, 1983 { property: "og:image", content: data.image.startsWith('http') ? data.image : window.location.origin + data.image }, 1984 { property: "og:url", content: url }, 1985 { property: "og:type", content: "article" }, 1986 { property: "og:site_name", content: "Your Site Name" }, 1987 { property: "article:published_time", content: new Date().toISOString() }, 1988 { name: "twitter:card", content: "summary_large_image" }, 1989 { name: "twitter:title", content: data.title }, 1990 { name: "twitter:description", content: data.description }, 1991 { name: "twitter:image", content: data.image.startsWith('http') ? data.image : window.location.origin + data.image } 1992 ]; 1993
1994 tags.forEach(tag => { 1995 const meta = document.createElement('meta'); 1996 if (tag.property) meta.setAttribute('property', tag.property); 1997 if (tag.name) meta.setAttribute('name', tag.name); 1998 meta.setAttribute('content', tag.content); 1999 head.appendChild(meta); 2000 }); 2001 } 2002 2003 let previousCount = 0; 2004 2005 function decodeHtmlEntities(str) { 2006 const txt = document.createElement('textarea'); 2007 txt.innerHTML = str; 2008 return txt.value; 2009 } 2010 2011 async function fetchAndScrollDedications(siteId, containerClass, speed = 75) { 2012 const originalUrl = `https://siteradio.pro/api/dedications/${siteId}`; 2013 const url = `${window.location.origin}/api/dedications/${siteId}`; 2014 2015 try { 2016 const response = await fetch(url); 2017 if (!response.ok) { 2018 throw new Error(`HTTP error! Status: ${response.status}`); 2019 } 2020 2021 const json = await response.json(); 2022 const data = Array.isArray(json.data) ? json.data : []; 2023 2024 const container = document.querySelector(`.${containerClass}`); 2025 if (!container) return null; 2026 2027 container.innerHTML = ''; 2028 2029 const wrapper = document.createElement('div'); 2030 wrapper.className = 'scroll-text'; 2031 2032 data.forEach((item) => { 2033 const dedicationItem = document.createElement('span'); 2034 dedicationItem.className = 'dedication-item'; 2035 2036 const nameSpan = document.createElement('span'); 2037 nameSpan.className = 'name'; 2038 nameSpan.textContent = decodeHtmlEntities(item.name || 'Anonyme'); 2039 2040 const msgSpan = document.createElement('span'); 2041 msgSpan.className = 'msg'; 2042 msgSpan.textContent = decodeHtmlEntities(item.message || ''); 2043 2044 dedicationItem.appendChild(nameSpan); 2045 dedicationItem.appendChild(msgSpan); 2046 wrapper.appendChild(dedicationItem); 2047 }); 2048 2049 if (!wrapper.innerHTML.trim()) { 2050 const emptyState = document.createElement('span'); 2051 emptyState.className = 'dedication-empty'; 2052 emptyState.textContent = 'Soyez le premier à envoyer une dédicace'; 2053 container.appendChild(emptyState); 2054 return null; 2055 } 2056 2057 wrapper.innerHTML += wrapper.innerHTML; 2058 2059 container.appendChild(wrapper); 2060 2061 await document.fonts.ready; 2062 await new Promise(requestAnimationFrame); 2063 2064 const containerWidth = container.clientWidth; 2065 const textWidth = wrapper.scrollWidth / 2; 2066 2067 let position = containerWidth; 2068 let lastTime = null; 2069 let isPaused = false; 2070 let isHovered = false; 2071 let isFocused = false; 2072 const bar = container.closest('.dc-bar-wpr'); 2073 2074 const updatePauseState = () => { 2075 const shouldPause = isHovered || isFocused; 2076 if (isPaused === shouldPause) return; 2077 isPaused = shouldPause; 2078 bar?.classList.toggle('is-paused', isPaused); 2079 container.classList.toggle('is-paused', isPaused); 2080 container.setAttribute('aria-label', isPaused 2081 ? 'Dédicaces en pause. Appuyez pour écrire un message.' 2082 : 'Lire les dédicaces et écrire un message'); 2083 if (!isPaused) lastTime = null; 2084 }; 2085 2086 container.addEventListener('mouseenter', () => { 2087 isHovered = true; 2088 updatePauseState(); 2089 }); 2090 container.addEventListener('mouseleave', () => { 2091 isHovered = false; 2092 updatePauseState(); 2093 }); 2094 container.addEventListener('focusin', () => { 2095 isFocused = true; 2096 updatePauseState(); 2097 }); 2098 container.addEventListener('focusout', () => { 2099 isFocused = false;
2100 updatePauseState(); 2101 }); 2102 container.addEventListener('click', () => openDedicationModal()); 2103 container.addEventListener('keydown', (event) => { 2104 if (event.key !== 'Enter' && event.key !== ' ') return; 2105 event.preventDefault(); 2106 openDedicationModal(); 2107 }); 2108 2109 function animate(timestamp) { 2110 if (!lastTime) lastTime = timestamp; 2111 2112 const delta = (timestamp - lastTime) / 1000; 2113 lastTime = timestamp; 2114 2115 if (isPaused) { 2116 requestAnimationFrame(animate); 2117 return; 2118 } 2119 2120 position -= speed * delta; 2121 2122 if (position <= -textWidth) { 2123 position += textWidth; 2124 } 2125 2126 wrapper.style.transform = `translateX(${position}px)`; 2127 requestAnimationFrame(animate); 2128 } 2129 2130 requestAnimationFrame(animate); 2131 2132 return data; 2133 2134 } catch (error) { 2135 console.error('Error fetching dedications:', error); 2136 return null; 2137 } 2138 } 2139 2140 fetchAndScrollDedications(siteId, 'scroll-container', 75); 2141 2142 const dedicationMessageInput = document.getElementById('messageInput'); 2143 const dedicationCharacterCount = document.getElementById('dedicationCharacterCount'); 2144 const updateDedicationCharacterCount = () => { 2145 if (!dedicationMessageInput || !dedicationCharacterCount) return; 2146 dedicationCharacterCount.textContent = `${dedicationMessageInput.value.length} / ${dedicationMessageInput.maxLength}`; 2147 }; 2148 2149 dedicationMessageInput?.addEventListener('input', updateDedicationCharacterCount); 2150 document.getElementById('exampleForm')?.addEventListener('reset', () => { 2151 window.setTimeout(updateDedicationCharacterCount, 0); 2152 }); 2153 2154 document.querySelectorAll('.dedication-emoji-button').forEach((button) => { 2155 button.addEventListener('click', () => { 2156 const messageInput = dedicationMessageInput; 2157 if (!messageInput) return; 2158 2159 const emoji = button.dataset.emoji || ''; 2160 const start = messageInput.selectionStart ?? messageInput.value.length; 2161 const end = messageInput.selectionEnd ?? start; 2162 const nextLength = messageInput.value.length - (end - start) + emoji.length; 2163 if (messageInput.maxLength > 0 && nextLength > messageInput.maxLength) return; 2164 2165 messageInput.setRangeText(emoji, start, end, 'end'); 2166 messageInput.dispatchEvent(new Event('input', { bubbles: true })); 2167 messageInput.focus({ preventScroll: true }); 2168 }); 2169 }); 2170 2171 updateDedicationCharacterCount(); 2172 </script>
2172 2173 2174
2174<script> 2175 document.querySelectorAll('.element-post a').forEach(link => { 2176 link.setAttribute('target', '_blank'); 2177 link.setAttribute('rel', 'noopener noreferrer'); 2178 }); 2179 2180 function copyCurrentUrl() { 2181 const url = window.location.href; 2182 const newsCopyBtn = document.getElementById("copyUrl"); 2183 const tooltip = bootstrap.Tooltip.getInstance(newsCopyBtn); 2184 2185 navigator.clipboard.writeText(url) 2186 .then(() => { 2187 newsCopyBtn.setAttribute("title", txtUrlCopied); 2188 newsCopyBtn.setAttribute("data-bs-original-title", txtUrlCopied); 2189 2190 if (tooltip) { 2191 tooltip.setContent({ 2192 '.tooltip-inner': txtUrlCopied 2193 }); 2194 tooltip.show(); 2195 } 2196 2197 setTimeout(() => { 2198 newsCopyBtn.setAttribute("title", txtCopyUrl); 2199 newsCopyBtn.setAttribute("data-bs-original-title", txtCopyUrl); 2200 if (tooltip) tooltip.setContent({ 2201 '.tooltip-inner': txtCopyUrl 2202 }); 2203 }, 2000); 2204 2205 }) 2206 .catch(err => console.error("Failed to copy: ", err)); 2207 } 2208 2209 document.addEventListener("DOMContentLoaded", function() { 2210 const newsCopyBtn = document.getElementById("copyUrl"); 2211 if (newsCopyBtn) { 2212 new bootstrap.Tooltip(newsCopyBtn, { 2213 trigger: 'manual' 2214 }); 2215 } 2216 }); 2217 2218 if (!('ontouchstart' in document.documentElement)) { 2219 const tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')); 2220 tooltipTriggerList.map(el => new bootstrap.Tooltip(el)); 2221 } 2222 2223 function openDedicationModal({ 2224 openBtn, 2225 modalId = "formModal", 2226 formId = "exampleForm", 2227 apiUrl = domain + "/api/insertdedication" 2228 } = {}) { 2229 2230 const modalElement = document.getElementById(modalId); 2231 const form = document.getElementById(formId); 2232 2233 if (!modalElement || !form) { 2234 console.warn("Dedication modal: required elements not found"); 2235 return; 2236 } 2237 2238 const modal = new bootstrap.Modal(modalElement); 2239 const modalBody = modalElement.querySelector(".modal-body"); 2240 2241 let alertContainer = document.getElementById("formAlert"); 2242 if (!alertContainer) { 2243 alertContainer = document.createElement("div"); 2244 alertContainer.id = "formAlert"; 2245 alertContainer.className = "dedication-alert d-none"; 2246 alertContainer.setAttribute("role", "status"); 2247 alertContainer.setAttribute("aria-live", "polite"); 2248 modalBody.prepend(alertContainer); 2249 } 2250 2251 modalElement.addEventListener('shown.bs.modal', () => { 2252 document.getElementById('nameInput')?.focus({ preventScroll: true }); 2253 }, { once: true }); 2254 modal.show(); 2255 alertContainer.className = "dedication-alert d-none"; 2256 2257 if (!form.dataset.bound) { 2258 form.dataset.bound = "1"; 2259 2260 form.addEventListener("submit", async (e) => { 2261 e.preventDefault(); 2262 alertContainer.className = "dedication-alert d-none"; 2263 2264 const formData = new FormData(form); 2265 2266 try { 2267 const response = await fetch(apiUrl, { 2268 method: "POST", 2269 body: formData 2270 }); 2271 2272 const resultText = await response.text(); 2273 2274 if (response.status === 400) { 2275 alertContainer.textContent = resultText; 2276 alertContainer.className = "dedication-alert is-error"; 2277 return; 2278 } 2279 2280 if (response.status === 200) { 2281 alertContainer.textContent = resultText; 2282 alertContainer.className = "dedication-alert is-success"; 2283 2284 setTimeout(() => { 2285 modal.hide(); 2286 form.reset(); 2287 alertContainer.classList.add("d-none"); 2288 }, 3000); 2289 } 2290 2291 } catch (err) { 2292 console.error("API Error:", err); 2293 alertContainer.textContent = "An unexpected error occurred.";
2294 alertContainer.className = "dedication-alert is-error"; 2295 } 2296 }); 2297 } 2298 } 2299 2300 </script>
2300 2301
2301<script> 2302 const 2303 pjax = new Pjax({ 2304 cacheBust: false, 2305 selectors: ["title", "#main"] 2306 }); 2307 2308 var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')) 2309 var tooltipList = tooltipTriggerList.map(function(tooltipTriggerEl) { 2310 return new bootstrap.Tooltip(tooltipTriggerEl) 2311 }) 2312 </script>
2312 2313 2314 2315
2315<script> 2316 var p1 = new playerBar({ target: "#p1", cors: siteId === "68e0c75498256" ? "/vibe-metadata.php?url=" : "/api/radio-metadata?url=" }); 2317 2318 window.p1.getStreamDataInterval('https://manager10.streamradio.fr:1775', 'stream', 'ic', 'https://manager10.streamradio.fr:1760', '1', '0', 'evc', '691479b079546', '0', 'everestcast'); 2319 2320 console.log( 2321 "Liked songs from localStorage:", 2322 JSON.parse(localStorage.getItem("likedSongs") || "[]") 2323); 2324 </script>
2324 2325 2326
2326<script> 2327 document.addEventListener('submit', function(e) { 2328 // Only run for #contactForm 2329 if (e.target && e.target.id === 'contactForm') { 2330 e.preventDefault(); 2331 e.stopImmediatePropagation(); 2332 2333 const form = e.target; 2334 const formData = new FormData(form); 2335 2336 fetch(form.action, { 2337 method: 'POST', 2338 body: formData 2339 }) 2340 .then(res => res.json()) 2341 .then(data => { 2342 const successEl = document.getElementById('email-success'); 2343 const fields = ['name', 'email', 'subject', 'message']; 2344 2345 fields.forEach(f => { 2346 const el = document.getElementById('error-' + f); 2347 if (el) el.textContent = data.errors && data.errors[f] ? data.errors[f] : ''; 2348 }); 2349 2350 if (data.status === 'success') { 2351 if (successEl) successEl.classList.remove('d-none'); 2352 form.reset(); 2353 } else if (data.status === 'error') { 2354 if (successEl) successEl.classList.add('d-none'); 2355 } 2356 }); 2357 } 2358 }, true); 2359 2360 function loadTurnstile() { 2361 if (typeof turnstile !== 'undefined') { 2362 2363 const container = document.querySelector('#turnstile-container'); 2364 2365 if (container) { 2366 container.innerHTML = ''; 2367 2368 turnstile.render(container, { 2369 sitekey: container.dataset.sitekey 2370 }); 2371 } 2372 } 2373 } 2374 2375 function homePodcastsSlider() { 2376 const glide = new Glide('.home-podcasts-slider', { 2377 type: 'slider', 2378 startAt: 0, 2379 perView: 5, 2380 bound: true, 2381 gap: 25, 2382 breakpoints: { 2383 800: { 2384 perView: 2 2385 }, 2386 600: { 2387 perView: 2 2388 } 2389 } 2390 }); 2391 2392 glide.mount(); 2393 } 2394 2395 function homeImageSlider() { 2396 const sliderEl = document.querySelector('.home-image-slider'); 2397 const totalSlides = sliderEl.querySelectorAll('.glide__slide').length; 2398 2399 const leftArrow = sliderEl.querySelector('.glide__arrow--left'); 2400 const rightArrow = sliderEl.querySelector('.glide__arrow--right'); 2401 2402 const glide = new Glide('.home-image-slider', { 2403 type: 'slider', 2404 startAt: 0, 2405 perView: 3, 2406 bound: true, 2407 gap: 25, 2408 breakpoints: { 2409 800: { 2410 perView: 2 2411 }, 2412 600: { 2413 perView: 1 2414 } 2415 } 2416 }); 2417 2418 glide.mount(); 2419 2420 let rightArrowClicked = false; 2421 2422 rightArrow.addEventListener('click', () => { 2423 rightArrowClicked = true; 2424 if (!leftArrow.classList.contains('show')) { 2425 leftArrow.classList.add('show'); 2426 } 2427 }); 2428 2429 glide.on('run.after', () => { 2430 // Handle left arrow visibility 2431 if (glide.index === 0) { 2432 leftArrow.classList.remove('show'); 2433 rightArrowClicked = false; 2434 } else if (!leftArrow.classList.contains('show')) { 2435 leftArrow.classList.add('show'); 2436 } 2437 2438 // Handle right arrow visibility 2439 const perView = glide.settings.perView; // Get current perView value 2440 if (glide.index >= totalSlides - perView) { 2441 rightArrow.classList.add('hidden'); 2442 } else { 2443 rightArrow.classList.remove('hidden'); 2444 } 2445 }); 2446 } 2447 2448 function homeSponsorsSlider() { 2449 const sliderEl = document.querySelector('.home-sponsors-slider'); 2450 const totalSlides = sliderEl.querySelectorAll('.glide__slide').length; 2451 2452 const leftArrow = sliderEl.querySelector('.glide__arrow--left'); 2453 const rightArrow = sliderEl.querySelector('.glide__arrow--right'); 2454 2455 if (totalSlides <= 5) { 2456 if (leftArrow) leftArrow.style.display = 'none'; 2457 if (rightArrow) rightArrow.style.display = 'none'; 2458 } 2459 2460 if (totalSlides <= 1) return; 2461 2462 const glide = new Glide(sliderEl, { 2463 type: 'slider', 2464 startAt: 0, 2465 perView: 5, 2466 gap: 25, 2467 bound: true, 2468 breakpoints: { 2469 800: { 2470 perView: 2 2471 }, 2472 600: { 2473 perView: 2 2474 } 2475 } 2476 }); 2477 2478 glide.mount(); 2479 2480 if (totalSlides > 5) { 2481 rightArrow.addEventListener('click', () => { 2482 if (!leftArrow.classList.contains('show')) leftArrow.classList.add('show'); 2483 }); 2484 2485 glide.on('run.after', () => { 2486 const perView = glide.settings.perView; 2487 2488 if (glide.index === 0) { 2489 leftArrow.classList.remove('show'); 2490 } else { 2491 leftArrow.classList.add('show'); 2492 } 2493 2494 if (glide.index >= totalSlides - perView) { 2495 rightArrow.classList.remove('show'); 2496 } else { 2497 rightArrow.classList.add('show'); 2498 } 2499 }); 2500 } 2501 } 2502 2503 document.addEventListener('pjax:send', () => { 2504 topbar.config({ 2505 autoRun: true, 2506 barThickness: 3, 2507 barColors: { 2508 '0': '#B48AFF', 2509 '.3': '#B48AFF', 2510 '1.0': '#B48AFF' 2511 }, 2512 shadowBlur: 3, 2513 shadowColor: 'rgba(0, 0, 0, .2)', 2514 className: 'topbar', 2515 }) 2516 topbar.show(); 2517 }); 2518 2519 document.addEventListener('pjax:complete', () => { 2520 topbar.hide(); 2521 2522 const path = window.location.pathname; 2523 const cleanPath = path.replace(/\/$/, ''); 2524 const pb = document.querySelector('.playerBar'); 2525 const homeWidgetsWpr = document.querySelector('.home-widgets-wpr'); 2526 const homeImageSliderEle = document.querySelector('.home-image-slider'); 2527 const podcastsSliderEle = document.querySelector('.home-podcasts-slider'); 2528 const sponsorsSliderEle = document.querySelector('.home-sponsors-slider'); 2529 2530 if (!pb || !homeWidgetsWpr) return; 2531
2532 const bodyPpBtnId = pb.getAttribute('data-body-ppbtn'); 2533 2534 if (cleanPath.startsWith('/news/') && cleanPath !== '/news') { 2535 injectNewsMetaTags(); 2536 } 2537 2538 if (cleanPath.startsWith('/contact')) { 2539 loadTurnstile(); 2540 } 2541 2542 if (cleanPath.startsWith('/music')) { 2543 syncAllLikeButtonsWithStorage(); 2544 } 2545 2546 if (path === '/') { 2547 homeWidgetsWpr.classList.remove('dn'); 2548 if (sponsorsSliderEle) { 2549 homeSponsorsSlider('.home-sponsors-slider'); 2550 } 2551 if (podcastsSliderEle) { 2552 homePodcastsSlider(); 2553 } 2554 if (homeImageSliderEle) { 2555 homeImageSlider(); 2556 } 2557 } else { 2558 homeWidgetsWpr.classList.add('dn'); 2559 if (bodyPpBtnId) { 2560 const bodyPpBtn = document.querySelector(`#${bodyPpBtnId}`); 2561 if (bodyPpBtn) { 2562 bodyPpBtn.dataset.loaded = 'true'; 2563 bodyPpBtn.dataset.playing = 'true'; 2564 bodyPpBtn.textContent = 'pause'; 2565 } 2566 } 2567 } 2568 }); 2569 </script>
2569 2570 2571
2571<script> 2572 function customSelectHandle() { 2573 const elements = document.querySelectorAll('.custom-select-wpr, .custom-select-links, .custom-select-selected'); 2574 elements.forEach(el => el.classList.toggle('open')); 2575 } 2576 2577 document.addEventListener("DOMContentLoaded", function () { 2578 const toggler = document.querySelector(".navbar-toggler"); 2579 const navbarCollapse = document.getElementById("navbarCollapse"); 2580 2581 if (toggler && navbarCollapse) { 2582 2583 navbarCollapse.addEventListener("show.bs.collapse", function () { 2584 toggler.classList.add("open"); 2585 document.body.classList.add("navbar-open"); // ð lock scroll 2586 }); 2587 2588 navbarCollapse.addEventListener("hide.bs.collapse", function () { 2589 toggler.classList.remove("open"); 2590 document.body.classList.remove("navbar-open"); // ð unlock scroll 2591 }); 2592 } 2593 2594 document 2595 .querySelectorAll('.navbar-collapse .nav-link, .navbar-collapse .dropdown-item') 2596 .forEach(link => { 2597 link.addEventListener('click', function () { 2598 2599 // Ignore dropdown toggle 2600 if (this.matches('[data-bs-toggle="dropdown"]')) return; 2601 2602 const bsCollapse = bootstrap.Collapse.getInstance(navbarCollapse); 2603 if (bsCollapse) { 2604 bsCollapse.hide(); 2605 } 2606 }); 2607 }); 2608 }); 2609 2610 function updateAddressBarHeight() { 2611 const barHeight = window.visualViewport 2612 ? window.innerHeight - window.visualViewport.height 2613 : 0; 2614 2615 document.documentElement.style.setProperty( 2616 '--address-bar-height', 2617 `${barHeight}px` 2618 ); 2619 } 2620 2621 updateAddressBarHeight(); 2622 2623 window.addEventListener('resize', updateAddressBarHeight); 2624 window.visualViewport?.addEventListener('resize', updateAddressBarHeight); 2625 window.visualViewport?.addEventListener('scroll', updateAddressBarHeight); 2626 2627 </script>
2627 2628 2629
2629<script src="/assets/js/vibe-language-menu.js?version=2.2.0-mobile-menu"></script>
2629</body> 2630 2631</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.