{"id":117351,"date":"2026-06-13T10:55:33","date_gmt":"2026-06-13T10:55:33","guid":{"rendered":"https:\/\/radiojingles24.com\/?page_id=117351"},"modified":"2026-10-13T06:56:35","modified_gmt":"2026-10-13T06:56:35","slug":"radio-studio-24","status":"publish","type":"page","link":"https:\/\/radiojingles24.com\/it\/radio-studio-24\/","title":{"rendered":"Radio Studio 24"},"content":{"rendered":"\n\t\t<div id=\"fws_6acf7eda22ee4\"  data-midnight=\"dark\"  data-bg-mobile-hidden=\"\" class=\"wpb_row vc_row-fluid vc_row top-level standard_section   \"  style=\"padding-top: 0px; padding-bottom: 0px; \"><div class=\"row-bg-wrap\" data-bg-animation=\"none\"><div class=\"inner-wrap \"><div class=\"row-bg    \"  style=\"\"><\/div><\/div><div class=\"row-bg-overlay\" ><\/div><\/div><div class=\"col span_12 dark left\">\n\t<div  class=\"vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding\"  data-t-w-inherits=\"default\" data-border-radius=\"none\" data-shadow=\"none\" data-border-animation=\"\" data-border-animation-delay=\"\" data-border-width=\"none\" data-border-style=\"solid\" data-border-color=\"\" data-bg-cover=\"\" data-padding-pos=\"all\" data-has-bg-color=\"false\" data-bg-color=\"\" data-bg-opacity=\"1\" data-hover-bg=\"\" data-hover-bg-opacity=\"1\" data-animation=\"\" data-delay=\"0\"><div class=\"column-bg-overlay\"><\/div>\n\t\t<div class=\"vc_column-inner\">\n\t\t\t<div class=\"wpb_wrapper\">\n\t\t\t\t\n\t<div class=\"wpb_raw_code wpb_content_element wpb_raw_html\" >\n\t\t<div class=\"wpb_wrapper\">\n\t\t\t<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>RadioStudio24: radio playout with an AI presenter | by Radio Jingles 24<\/title>\n<meta name=\"description\" content=\"RadioStudio24 is broadcast playout in a browser, with an AI presenter you can hear right now. Rock-solid playout measured every day, segue editing, voicetracking from your phone, local travel and weather, a cloud engine with no studio PC, and a broadcast processor built in. Try Broadcast for \u00a31 for 5 days.\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Barlow+Condensed:wght@600;700;800&family=IBM+Plex+Mono:wght@500;600&family=IBM+Plex+Sans:wght@400;500;600;700&display=swap\" rel=\"stylesheet\">\n<style>\n  \/* =====================================================================\n   * RadioStudio24 landing, redesign 2026-10-07 (\"broadcast console\").\n   * Everything is scoped under #rs24 so the WordPress theme cannot reach in.\n   * One accent (--sig, the on-air lamp). Change it there and nowhere else.\n   * The variables at the bottom of the block (--ink, --line2, --green,\n   * --sans, --pink) are read by the live pricing script's inline HTML.\n   * ===================================================================== *\/\n  html{ scrollbar-gutter: stable both-edges; }\n  #rs24{\n    --bk:#0b0b0c; --bk1:#121214; --bk2:#18181b; --bk3:#222226;\n    --rule:rgba(255,255,255,.1); --rule2:rgba(255,255,255,.2);\n    --tx:#f3f0ea; --tx2:#c3beb5; --tx3:#9a958c;\n    --sig:#ff5a3c; --sig-bt:#d6381a; --sig-pa:#a92a0f; --sig-bt2:#ea4626; --ok:#39d98a;\n    --paper:#f2eee6; --paper2:#e8e2d7; --ptx:#141313; --ptx2:#4b4740; --prule:rgba(20,19,19,.14);\n    --disp:'Barlow Condensed','Arial Narrow',Impact,sans-serif;\n    --sans:'IBM Plex Sans',system-ui,-apple-system,'Segoe UI',sans-serif;\n    --mono:'IBM Plex Mono','SFMono-Regular',Menlo,Consolas,monospace;\n    --s1:4px; --s2:8px; --s3:12px; --s4:16px; --s5:24px; --s6:32px; --s7:48px; --s8:64px; --s9:96px; --s10:128px;\n    --ink:#141313; --line2:rgba(20,19,19,.2); --green:#127a46; --pink:var(--sig-bt);\n    background:var(--bk); color:var(--tx); font-family:var(--sans); font-size:17px; line-height:1.6; font-weight:400;\n    -webkit-font-smoothing:antialiased; overflow-x:hidden; text-align:left;\n    \/* full-bleed out of the theme's boxed content column (WPBakery row is \"in_container\"), and up over the theme's\n       40 px content padding so it meets the header; measured on the live page 7 Oct at 390\/1280\/1568\/1920 px *\/\n    position:relative; width:100vw!important; max-width:none!important;\n    margin:-40px calc(50% - 50vw) 0!important;\n  }\n  #rs24 *{box-sizing:border-box; margin:0; padding:0}\n  #rs24 a{color:inherit; text-decoration:none}\n  #rs24 ul,#rs24 li{list-style:none!important}\n  #rs24 img{max-width:100%; height:auto; display:block}\n  #rs24 b,#rs24 strong{font-weight:600; color:inherit}\n  #rs24 button{font-family:inherit!important; text-transform:none!important; letter-spacing:normal!important}\n  #rs24 .wrap{max-width:1240px; margin:0 auto; padding:0 var(--s5)}\n  #rs24 :focus-visible{outline:2px solid var(--sig); outline-offset:3px}\n\n  \/* type *\/\n  #rs24 h1,#rs24 h2{font-family:var(--disp); font-weight:800; text-transform:uppercase; letter-spacing:-.005em; color:var(--tx)}\n  #rs24 h1{font-size:clamp(44px,6.6vw,96px); line-height:.9}\n  #rs24 h2{font-size:clamp(38px,5.2vw,74px); line-height:.92; max-width:14em}\n  #rs24 h3{font-family:var(--sans); font-size:19px; font-weight:600; line-height:1.3; color:var(--tx)}\n  #rs24 h1 em,#rs24 h2 em{font-style:normal; color:var(--sig)}\n  #rs24 .lede{font-size:19px; line-height:1.55; color:var(--tx2); max-width:34em; margin-top:var(--s5)}\n  #rs24 .mono{font-family:var(--mono)}\n  #rs24 .eyebrow{font-family:var(--mono); font-size:12px; font-weight:600; letter-spacing:.14em; text-transform:uppercase; color:var(--tx3)}\n\n  \/* buttons: square-shouldered, hardware feel *\/\n  #rs24 .btns{display:flex; flex-wrap:wrap; gap:var(--s3); align-items:center}\n  #rs24 .btn{display:inline-flex; align-items:center; justify-content:center; gap:10px; padding:16px 26px; border-radius:3px!important; font:600 16px\/1.1 var(--sans); cursor:pointer; border:0; transition:background .15s, transform .15s; width:auto!important; height:auto!important; min-height:0!important}\n  #rs24 .btn-sig{background:var(--sig-bt); color:#fff}\n  #rs24 .btn-sig:hover{background:var(--sig-bt2); transform:translateY(-1px)}\n  #rs24 .btn-line{background:transparent; color:var(--tx); box-shadow:inset 0 0 0 1px var(--rule2)}\n  #rs24 .btn-line:hover{box-shadow:inset 0 0 0 1px var(--tx)}\n  #rs24 .btn svg{width:14px; height:14px; fill:currentColor; flex:none}\n  #rs24 .fine{font-size:14px; color:var(--tx3); margin-top:var(--s3)}\n  #rs24 .fine b{color:var(--tx)}\n\n  \/* chapter scaffolding *\/\n  #rs24 .ch{padding:var(--s9) 0; border-top:1px solid var(--rule)}\n  #rs24 .ch-head{display:flex; align-items:center; gap:var(--s4); margin-bottom:var(--s6); font-family:var(--mono); font-size:12px; font-weight:600; letter-spacing:.14em; text-transform:uppercase; color:var(--tx3)}\n  #rs24 .ch-head .n{color:var(--sig)}\n  #rs24 .ch-head::after{content:\"\"; flex:1; height:1px; background:var(--rule)}\n  #rs24 .split{display:grid; grid-template-columns:minmax(0,5fr) minmax(0,7fr); gap:var(--s8); align-items:start}\n  #rs24 .split.flip{grid-template-columns:minmax(0,7fr) minmax(0,5fr)}\n  #rs24 .split.flip > :first-child{order:2}\n  #rs24 .points{margin-top:var(--s6); border-top:1px solid var(--rule)}\n  #rs24 .points li{display:grid; grid-template-columns:28px 1fr; gap:var(--s3); padding:14px 0; border-bottom:1px solid var(--rule); font-size:16px; line-height:1.5; color:var(--tx2)}\n  #rs24 .points li b{color:var(--tx)}\n  #rs24 .points li::before{content:\"\"; width:10px; height:10px; margin-top:8px; border:1.5px solid var(--sig); border-radius:50%}\n  #rs24 .src{display:block; margin-top:var(--s4); font-family:var(--mono); font-size:11.5px; letter-spacing:.04em; color:var(--tx3)}\n\n  \/* figures: a bezel, a caption plate *\/\n  #rs24 .fig{background:#000; border:1px solid var(--rule2); border-radius:4px; padding:6px}\n  #rs24 .fig img{border-radius:2px; width:100%}\n  #rs24 .fig figcaption{display:flex; gap:var(--s3); padding:10px 4px 2px; font-family:var(--mono); font-size:11px; font-weight:500; letter-spacing:.04em; color:var(--tx3); line-height:1.45}\n  #rs24 .fig figcaption .k{color:var(--sig); flex:none}\n  #rs24 .figs{display:grid; gap:var(--s4)}\n\n\n  \/* ===== hero ===== *\/\n  #rs24 .hero{background:\n      linear-gradient(var(--bk),rgba(11,11,12,.6) 30%,var(--bk)),\n      repeating-linear-gradient(90deg,rgba(255,255,255,.035) 0 1px,transparent 1px 80px),\n      var(--bk)}\n  #rs24 .hx{display:grid; grid-template-columns:minmax(0,5fr) minmax(0,7fr); grid-template-areas:\"copy console\" \"copy under\"; column-gap:var(--s8); padding-top:var(--s8); padding-bottom:var(--s9)}\n  #rs24 .hx-copy{grid-area:copy; padding-top:var(--s3)}\n  #rs24 .hx-console{grid-area:console; min-width:0}\n  #rs24 .hx-under{grid-area:under; margin-top:var(--s4); display:flex; flex-wrap:wrap; gap:var(--s3) var(--s5); align-items:center; font-size:15px; color:var(--tx2)}\n  #rs24 .hx-under a{color:var(--tx); font-weight:600; border-bottom:1px solid var(--sig); padding-bottom:1px}\n  #rs24 .hx .eyebrow{display:flex; align-items:center; gap:10px; margin-bottom:var(--s5)}\n  #rs24 .lamp{display:inline-block; width:9px; height:9px; border-radius:50%; background:var(--sig); box-shadow:0 0 0 3px rgba(255,90,60,.18)}\n  #rs24 .hx .price-chip{display:none}\n  #rs24 .hx .lede{font-size:18.5px}\n  #rs24 .hx .btns{margin-top:var(--s6)}\n  #rs24 .trust{display:flex; flex-direction:column; gap:6px; margin-top:var(--s5); font-size:14.5px; color:var(--tx2)}\n  #rs24 .trust li{display:flex; gap:10px; align-items:baseline}\n  #rs24 .trust li::before{content:\"\"; flex:none; width:12px; height:7px; border-left:2px solid var(--ok); border-bottom:2px solid var(--ok); transform:rotate(-45deg) translateY(-2px)}\n\n  \/* ===== the demo console ===== *\/\n  #rs24 .con{background:var(--bk1); border:1px solid var(--rule2); border-radius:6px; box-shadow:0 40px 80px -40px rgba(0,0,0,.9), inset 0 1px 0 rgba(255,255,255,.05)}\n  #rs24 .con-top{display:flex; align-items:center; gap:var(--s3); padding:12px 16px; border-bottom:1px solid var(--rule); font-family:var(--mono); font-size:11px; font-weight:600; letter-spacing:.12em; text-transform:uppercase; color:var(--tx3)}\n  #rs24 .con-top .tally{margin-left:auto; display:inline-flex; align-items:center; gap:8px; padding:4px 10px; border:1px solid var(--rule2); border-radius:3px; color:var(--tx3); transition:.2s}\n  #rs24 .con-top .tally i{width:8px; height:8px; border-radius:50%; background:#3a3a3f}\n  #rs24 .con.playing .con-top .tally{color:#fff; border-color:var(--sig); background:rgba(255,90,60,.14)}\n  #rs24 .con.playing .con-top .tally i{background:var(--sig); box-shadow:0 0 10px var(--sig)}\n  #rs24 .con-body{padding:16px}\n  #rs24 .chs{display:grid; grid-template-columns:repeat(5,minmax(0,1fr)); gap:8px}\n  #rs24 button.chp{all:unset; box-sizing:border-box; cursor:pointer; position:relative; display:flex; flex-direction:column; gap:6px; min-width:0; padding:12px 12px 12px; background:var(--bk2); border:1px solid var(--rule); border-radius:4px; color:var(--tx); transition:border-color .15s, background .15s}\n  #rs24 button.chp:hover{border-color:var(--rule2); background:var(--bk3)}\n  #rs24 button.chp[aria-pressed=\"true\"]{border-color:var(--sig); background:#1f1714}\n  #rs24 button.chp:focus-visible{outline:2px solid var(--sig); outline-offset:2px}\n  #rs24 .chp .row{display:flex; align-items:center; justify-content:space-between; gap:6px}\n  #rs24 .chp .cn{font-family:var(--mono); font-size:10px; font-weight:600; letter-spacing:.1em; color:var(--tx3)}\n  #rs24 .chp .pb{display:grid; place-items:center; width:26px; height:26px; border-radius:50%; background:var(--bk3); color:var(--tx); flex:none}\n  #rs24 .chp .pb svg{width:11px; height:11px; fill:currentColor}\n  #rs24 .chp .pb .ic-pause{display:none}\n  #rs24 button.chp[aria-pressed=\"true\"] .pb{background:var(--sig-bt); color:#fff}\n  #rs24 button.chp.playing .pb .ic-play{display:none}\n  #rs24 button.chp.playing .pb .ic-pause{display:block}\n  #rs24 .chp .nm{font-family:var(--disp); font-size:26px; font-weight:700; line-height:1; text-transform:uppercase; letter-spacing:.01em}\n  #rs24 .chp .ac{font-family:var(--mono); font-size:10.5px; font-weight:500; letter-spacing:.06em; text-transform:uppercase; color:var(--tx3)}\n  #rs24 .chp .pp{font-size:12.5px; line-height:1.35; color:var(--tx2); display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; min-height:2.7em}\n  #rs24 .kinds{display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); margin-top:12px; border:1px solid var(--rule); border-radius:4px; overflow:hidden}\n  #rs24 button.kd{all:unset; box-sizing:border-box; cursor:pointer; padding:11px 8px; text-align:center; font-size:14px; font-weight:600; line-height:1.2; color:var(--tx2); border-left:1px solid var(--rule); transition:.15s}\n  #rs24 button.kd:first-child{border-left:0}\n  #rs24 button.kd small{display:block; margin-top:3px; font-family:var(--mono); font-size:10px; font-weight:500; letter-spacing:.04em; color:var(--tx3)}\n  #rs24 button.kd:hover{color:var(--tx); background:var(--bk2)}\n  #rs24 button.kd[aria-pressed=\"true\"]{background:var(--tx); color:var(--bk)}\n  #rs24 button.kd[aria-pressed=\"true\"] small{color:#55514b}\n  #rs24 button.kd:focus-visible{outline:2px solid var(--sig); outline-offset:-2px}\n  #rs24 .deck{margin-top:12px; border:1px solid var(--rule); border-radius:4px; background:var(--bk); padding:14px}\n  #rs24 .transport{display:flex; align-items:center; gap:14px}\n  #rs24 button.big{all:unset; box-sizing:border-box; cursor:pointer; flex:none; width:68px; height:68px; border-radius:50%; display:grid; place-items:center; background:var(--sig-bt); color:#fff; box-shadow:0 0 0 6px rgba(214,56,26,.16); transition:transform .12s, background .15s}\n  #rs24 button.big:hover{background:var(--sig-bt2); transform:scale(1.04)}\n  #rs24 button.big:focus-visible{outline:3px solid #fff; outline-offset:3px}\n  #rs24 button.big svg{width:28px; height:28px; fill:currentColor}\n  #rs24 button.big .ic-pause{display:none}\n  #rs24 .con.playing button.big .ic-play{display:none}\n  #rs24 .con.playing button.big .ic-pause{display:block}\n  #rs24 .now{min-width:0; flex:1}\n  #rs24 .now .t1{font-size:17px; font-weight:600; line-height:1.25; color:var(--tx)}\n  #rs24 .now .t1 span{color:var(--sig)}\n  #rs24 .now .t2{font-size:13.5px; line-height:1.4; color:var(--tx3); margin-top:2px}\n  #rs24 .clock{flex:none; font-family:var(--mono); font-size:13px; font-weight:600; color:var(--tx2); font-variant-numeric:tabular-nums}\n  #rs24 .lanes{position:relative; margin-top:14px; cursor:pointer; touch-action:manipulation}\n  #rs24 .lane{position:relative; height:20px; margin:4px 0; background:var(--bk2); border-radius:2px}\n  #rs24 .lane b{position:absolute; top:0; bottom:0; display:flex; align-items:center; padding:0 7px; overflow:hidden; white-space:nowrap; font-family:var(--mono); font-size:10px; font-weight:600; letter-spacing:.06em; text-transform:uppercase; color:#fff; border-radius:2px}\n  #rs24 .lane.out b{background:#4a4a52}\n  #rs24 .lane.voice b{background:var(--sig-bt)}\n  #rs24 .lane.in b,#rs24 .lane.bed b{background:#1f7a57}\n  #rs24 .lane .vocal{position:absolute; top:-3px; bottom:-3px; width:2px; background:var(--ok)}\n  #rs24 .lanes .head{position:absolute; top:0; bottom:0; left:0; width:2px; background:#fff; pointer-events:none; box-shadow:0 0 6px rgba(255,255,255,.8)}\n  #rs24 .songs{margin-top:12px; display:grid; gap:4px}\n  #rs24 .songs li{display:flex; align-items:baseline; gap:10px; font-size:14px; line-height:1.4; color:var(--tx)}\n  #rs24 .songs .k{flex:none; width:52px; font-family:var(--mono); font-size:10.5px; font-weight:600; letter-spacing:.08em; text-transform:uppercase; color:var(--tx3)}\n  #rs24 .songs .s{flex:1; min-width:0}\n  #rs24 .songs .d{flex:none; font-family:var(--mono); font-size:12px; font-weight:600; color:var(--ok); font-variant-numeric:tabular-nums}\n  #rs24 .fit{margin-top:8px; font-family:var(--mono); font-size:12px; font-weight:500; color:var(--ok)}\n  #rs24 details.more{margin-top:12px; border-top:1px solid var(--rule); padding-top:10px}\n  #rs24 details.more summary{cursor:pointer; list-style:none; font-size:14px; font-weight:600; color:var(--tx)}\n  #rs24 details.more summary::-webkit-details-marker{display:none}\n  #rs24 details.more summary::before{content:\"+\"; display:inline-block; width:18px; font-family:var(--mono); color:var(--sig)}\n  #rs24 details.more[open] summary::before{content:\"\\2212\"}\n  #rs24 .script{margin-top:10px; font-size:15.5px; line-height:1.6; color:var(--tx); padding:12px 14px; border-left:2px solid var(--sig); background:var(--bk2)}\n  #rs24 .con-note{padding:12px 16px 14px; border-top:1px solid var(--rule); font-size:13px; line-height:1.5; color:var(--tx3)}\n  #rs24 .con-note b{color:var(--tx2)}\n\n\n  \/* ===== what you just heard ===== *\/\n  #rs24 .heard{background:var(--paper); color:var(--ptx); padding:var(--s9) 0}\n  #rs24 .heard h2{color:var(--ptx)}\n  #rs24 .heard .ch-head{color:#6b665d}\n  #rs24 .heard .ch-head::after{background:var(--prule)}\n  #rs24 .heard .ch-head .n{color:var(--sig-pa)}\n  #rs24 .four{display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); margin-top:var(--s7); border-top:2px solid var(--ptx)}\n  #rs24 .four > div{padding:var(--s5) var(--s5) var(--s5) 0; border-right:1px solid var(--prule); display:flex; flex-direction:column}\n  #rs24 .four > div + div{padding-left:var(--s5)}\n  #rs24 .four > div:last-child{border-right:0}\n  #rs24 .four .n{font-family:var(--disp); font-size:44px; font-weight:800; line-height:1; color:var(--sig-bt)}\n  #rs24 .four h3{color:var(--ptx); margin-top:var(--s3)}\n  #rs24 .four p{font-size:15.5px; color:var(--ptx2); margin-top:var(--s2); flex:1}\n  #rs24 .four a{margin-top:var(--s4); font-size:14.5px; font-weight:600; color:var(--ptx); border-bottom:1px solid var(--sig-bt); align-self:flex-start}\n  #rs24 .heard .btns{margin-top:var(--s7)}\n  #rs24 .heard .fine{color:var(--ptx2)}\n\n  \/* ===== rock solid ===== *\/\n  #rs24 .stats{display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); margin-top:var(--s7); border:1px solid var(--rule2); border-radius:4px; background:var(--bk1)}\n  #rs24 .stat{padding:var(--s5); border-left:1px solid var(--rule)}\n  #rs24 .stat:first-child{border-left:0}\n  #rs24 .stat .v{font-family:var(--disp); font-size:clamp(46px,5vw,68px); font-weight:800; line-height:.95; color:var(--tx); font-variant-numeric:tabular-nums}\n  #rs24 .stat .v small{font-size:.5em; color:var(--sig); margin-left:4px}\n  #rs24 .stat .l{margin-top:var(--s3); font-size:14.5px; line-height:1.45; color:var(--tx2)}\n  #rs24 .stat .w{display:block; margin-top:var(--s2); font-family:var(--mono); font-size:11px; letter-spacing:.04em; color:var(--tx3)}\n\n  \/* ===== phones ===== *\/\n  #rs24 .phones{display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:var(--s4); margin-top:var(--s7)}\n  #rs24 .phone{background:#000; border:1px solid var(--rule2); border-radius:26px; padding:8px}\n  #rs24 .phone img{border-radius:19px}\n  #rs24 .phone figcaption{padding:10px 6px 4px; font-family:var(--mono); font-size:11px; letter-spacing:.04em; color:var(--tx3); text-align:center}\n  #rs24 .event{margin-top:var(--s6); padding:var(--s5); border:1px solid var(--rule2); border-left:3px solid var(--sig); border-radius:4px; background:var(--bk1); font-size:17px; line-height:1.55; color:var(--tx2)}\n  #rs24 .event b{color:var(--tx)}\n\n  \/* ===== signal path (cloud) ===== *\/\n  #rs24 .path{display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:0; margin-top:var(--s7); border:1px solid var(--rule2); border-radius:4px; overflow:hidden}\n  #rs24 .path > div{position:relative; padding:var(--s5); background:var(--bk1); border-left:1px solid var(--rule)}\n  #rs24 .path > div:first-child{border-left:0}\n  #rs24 .path .k{font-family:var(--mono); font-size:11px; font-weight:600; letter-spacing:.12em; text-transform:uppercase; color:var(--sig)}\n  #rs24 .path h3{margin-top:var(--s2); font-size:18px}\n  #rs24 .path p{margin-top:var(--s2); font-size:14.5px; color:var(--tx2); line-height:1.5}\n  #rs24 .path > div:not(:last-child)::after{content:\"\"; position:absolute; right:-7px; top:50%; width:12px; height:12px; border-top:1px solid var(--rule2); border-right:1px solid var(--rule2); background:var(--bk1); transform:translateY(-50%) rotate(45deg); z-index:1}\n  #rs24 .chips{display:flex; flex-wrap:wrap; gap:8px; margin-top:var(--s4)}\n  #rs24 .chips span{font-family:var(--mono); font-size:12px; font-weight:500; padding:6px 10px; border:1px solid var(--rule2); border-radius:3px; color:var(--tx2)}\n\n  \/* ===== compare \/ everything else ===== *\/\n  #rs24 .checks{display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); column-gap:var(--s8); margin-top:var(--s7); border-top:1px solid var(--rule)}\n  #rs24 .checks li{display:grid; grid-template-columns:30px 1fr; gap:var(--s3); padding:16px 0; border-bottom:1px solid var(--rule); font-size:16.5px; line-height:1.45; color:var(--tx2)}\n  #rs24 .checks li b{display:block; color:var(--tx); font-size:17.5px; margin-bottom:2px}\n  #rs24 .checks svg{width:20px; height:20px; margin-top:3px; stroke:var(--ok); fill:none; stroke-width:2.4; stroke-linecap:round; stroke-linejoin:round}\n  #rs24 .more-grid{display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:1px; margin-top:var(--s8); background:var(--rule); border:1px solid var(--rule)}\n  #rs24 .more-grid > div{background:var(--bk); padding:var(--s5)}\n  #rs24 .more-grid .k{font-family:var(--mono); font-size:11px; font-weight:600; letter-spacing:.12em; text-transform:uppercase; color:var(--sig)}\n  #rs24 .more-grid h3{margin-top:var(--s2)}\n  #rs24 .more-grid p{margin-top:var(--s2); font-size:15px; line-height:1.55; color:var(--tx2)}\n  #rs24 .more-grid a{display:inline-block; margin-top:var(--s3); font-size:14.5px; font-weight:600; border-bottom:1px solid var(--sig)}\n\n  \/* ===== mid CTA ===== *\/\n  #rs24 .band{background:var(--sig-bt); color:#fff; padding:var(--s7) 0}\n  #rs24 .band .wrap{display:flex; align-items:center; justify-content:space-between; gap:var(--s5); flex-wrap:wrap}\n  #rs24 .band h2{color:#fff; font-size:clamp(32px,4vw,52px); max-width:none}\n  #rs24 .band .btn{background:#fff; color:var(--ptx)}\n  #rs24 .band .btn:hover{background:var(--paper)}\n  #rs24 .band p{font-size:15px; margin-top:6px; color:rgba(255,255,255,.92)}\n\n  \/* ===== videos (cards built by the live video script) ===== *\/\n  #rs24 #videos .vgrid{display:grid; grid-template-columns:repeat(5,minmax(0,1fr)); gap:var(--s3); margin-top:var(--s6)}\n  #rs24 #videos .vcard{position:relative; aspect-ratio:4\/5; border:1px solid var(--rule2); border-radius:4px; overflow:hidden; background:var(--bk1); cursor:pointer; transition:border-color .15s}\n  #rs24 #videos .vcard:hover{border-color:var(--sig)}\n  #rs24 #videos .vcard .vnum{position:absolute; top:10px; left:14px; font-family:var(--disp); font-size:64px; font-weight:800; line-height:1; color:var(--bk3)}\n  #rs24 #videos .vcard .vic{display:none}\n  #rs24 #videos .vcard .vgo{position:absolute; top:14px; right:14px; font-family:var(--mono); font-size:11px; font-weight:600; letter-spacing:.08em; text-transform:uppercase; color:#fff; background:var(--sig-bt); padding:5px 9px; border-radius:3px}\n  #rs24 #videos .vcard .vfoot{position:absolute; left:0; right:0; bottom:0; padding:14px}\n  #rs24 #videos .vcard .vt{font-family:var(--disp); font-size:24px; font-weight:700; text-transform:uppercase; line-height:1; color:var(--tx)}\n  #rs24 #videos .vcard .vs{margin-top:6px; font-size:13px; line-height:1.4; color:var(--tx2)}\n  #rs24 #videos .vcard iframe{position:absolute; inset:0; width:100%; height:100%; border:0}\n\n  \/* ===== pricing (ids and classes driven by the live pricing script) ===== *\/\n  #rs24 #pricing{background:var(--paper); color:var(--ptx); padding:var(--s9) 0; border-top:0}\n  #rs24 #pricing h2,#rs24 #pricing h3{color:var(--ptx)}\n  #rs24 #pricing .ch-head{color:#6b665d}\n  #rs24 #pricing .ch-head::after{background:var(--prule)}\n  #rs24 #pricing .ch-head .n{color:var(--sig-pa)}\n  #rs24 #pricing .lede{color:var(--ptx2)}\n  #rs24 #pricing .lede b{color:var(--ptx)}\n  #rs24 .trial-switch{display:flex; gap:4px; max-width:640px; margin:var(--s6) 0 var(--s2); background:var(--paper2); border:1px solid var(--prule); border-radius:4px; padding:4px}\n  #rs24 .trial-switch button{flex:1; border:0; background:transparent; cursor:pointer; border-radius:3px!important; padding:12px 14px; text-align:center; color:var(--ptx2); transition:.15s; line-height:1.25}\n  #rs24 .trial-switch .ts-t{display:block; font-size:15.5px; font-weight:600; color:var(--ptx)}\n  #rs24 .trial-switch .ts-s{display:block; font-size:12.5px; color:var(--ptx2); margin-top:2px}\n  #rs24 .trial-switch button.on{background:var(--ptx)}\n  #rs24 .trial-switch button.on .ts-t,#rs24 .trial-switch button.on .ts-s{color:#fff}\n  #rs24 .switch-note{max-width:640px; font-size:14px; color:var(--ptx2)}\n  #rs24 .switch-note b{color:var(--ptx)}\n  #rs24 .slots-banner{max-width:640px; margin-top:var(--s4); font-size:14.5px; font-weight:600; padding:12px 16px; border-radius:3px; color:var(--ptx); background:#fff; border:1px solid var(--prule); border-left:3px solid var(--sig-bt)}\n  #rs24 .slots-banner.full{border-left-color:var(--ptx2)}\n  #rs24 .slots-banner a{text-decoration:underline}\n  #rs24 .cfg-step{margin-top:var(--s7)}\n  #rs24 .cfg-step-head{display:flex; align-items:center; gap:var(--s3); margin-bottom:var(--s4); font-family:var(--mono); font-size:12px; font-weight:600; letter-spacing:.12em; text-transform:uppercase; color:#6b665d}\n  #rs24 .cfg-num{color:var(--sig-pa)}\n  #rs24 .cfg-opt{padding:2px 8px; border:1px solid var(--prule); border-radius:3px}\n  #rs24 .plan-row{display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:var(--s3)}\n  #rs24 .plan{all:unset; box-sizing:border-box; position:relative; display:flex; flex-direction:column; cursor:pointer; text-align:left; background:#fff!important; color:var(--ptx); border:1px solid var(--prule); border-radius:4px!important; padding:var(--s5); transition:border-color .15s, box-shadow .15s; width:auto!important; height:auto!important; min-height:0!important; float:none!important}\n  #rs24 .plan:hover{border-color:var(--ptx2)}\n  #rs24 .plan:focus-visible{outline:2px solid var(--sig-bt); outline-offset:2px}\n  #rs24 .plan.sel{border-color:var(--ptx); box-shadow:inset 0 0 0 1px var(--ptx), 0 24px 40px -28px rgba(0,0,0,.45)}\n  #rs24 .plan.sel::after{content:\"Selected\"; position:absolute; top:var(--s5); right:var(--s5); font-family:var(--mono); font-size:10.5px; font-weight:600; letter-spacing:.1em; text-transform:uppercase; color:#fff; background:var(--ptx); padding:3px 7px; border-radius:2px}\n  #rs24 .plan-flag{font-family:var(--mono); font-size:10.5px; font-weight:600; letter-spacing:.1em; text-transform:uppercase; color:var(--sig-pa); margin-bottom:var(--s2)}\n  #rs24 .plan-name{font-family:var(--disp); font-size:30px; font-weight:800; text-transform:uppercase; line-height:1}\n  #rs24 .plan-amt{font-family:var(--disp); font-size:58px; font-weight:800; line-height:1; margin-top:var(--s3)}\n  #rs24 .plan-amt small{font-family:var(--sans); font-size:16px; font-weight:500; color:var(--ptx2)}\n  #rs24 .plan-trial{align-self:flex-start; margin-top:var(--s3); font-size:13px; font-weight:600; color:#fff; background:var(--sig-bt); padding:4px 9px; border-radius:2px}\n  #rs24 .plan.notrial .plan-trial{display:none}\n  #rs24 .plan-desc{font-size:14.5px; line-height:1.5; color:var(--ptx2); margin:var(--s3) 0 var(--s4)}\n  #rs24 .plan ul{border-top:1px solid var(--prule)}\n  #rs24 .plan li{font-size:14px; line-height:1.45; padding:8px 0 8px 20px; position:relative; border-bottom:1px solid var(--prule); color:var(--ptx2)}\n  #rs24 .plan li::before{content:\"\"; position:absolute; left:2px; top:13px; width:8px; height:5px; border-left:2px solid var(--green); border-bottom:2px solid var(--green); transform:rotate(-45deg)}\n  #rs24 .plan li b{color:var(--ptx)}\n  #rs24 .net{margin-top:var(--s4); font-size:14.5px; color:var(--ptx2)}\n  #rs24 .net a{color:var(--ptx); font-weight:600; border-bottom:1px solid var(--sig-bt)}\n  #rs24 .stream-toggle{display:flex; align-items:flex-start; gap:var(--s4); background:#fff; border:1px solid var(--prule); border-radius:4px; padding:var(--s5); cursor:pointer; transition:.15s}\n  #rs24 .stream-toggle.on{border-color:var(--ptx); box-shadow:inset 0 0 0 1px var(--ptx)}\n  #rs24 .stream-toggle input{position:absolute; opacity:0; pointer-events:none}\n  #rs24 .stream-toggle:focus-within{outline:2px solid var(--sig-bt); outline-offset:2px}\n  #rs24 .st-box{flex:none; width:24px; height:24px; margin-top:2px; border:2px solid var(--ptx2); border-radius:3px; display:grid; place-items:center}\n  #rs24 .stream-toggle.on .st-box{background:var(--ptx); border-color:var(--ptx)}\n  #rs24 .stream-toggle.on .st-box::after{content:\"\"; width:10px; height:6px; border-left:2px solid #fff; border-bottom:2px solid #fff; transform:rotate(-45deg) translate(1px,-1px)}\n  #rs24 .st-text{flex:1; font-size:14.5px; line-height:1.55; color:var(--ptx2)}\n  #rs24 .st-text b{display:block; font-size:16.5px; color:var(--ptx); margin-bottom:4px}\n  #rs24 .st-price{flex:none; font-family:var(--disp); font-size:30px; font-weight:800; color:var(--ptx)}\n  #rs24 .st-price small{font-family:var(--sans); font-size:13px; font-weight:500; color:var(--ptx2)}\n  #rs24 #streamStep.st-disabled{opacity:.45; pointer-events:none}\n  #rs24 .stream-byo{margin-top:var(--s3); font-size:14px; color:var(--ptx2)}\n  #rs24 .cfg-total{display:flex; align-items:center; justify-content:space-between; gap:var(--s5); flex-wrap:wrap; margin-top:var(--s7); padding:var(--s5) var(--s6); background:var(--ptx); color:#fff; border-radius:4px}\n  #rs24 .ct-line{display:flex; align-items:baseline; gap:var(--s5); flex-wrap:wrap}\n  #rs24 .ct-bits{font-size:15px; color:rgba(255,255,255,.75)}\n  #rs24 .ct-bits span{color:#fff; font-weight:600}\n  #rs24 .ct-amt{display:flex; flex-direction:column}\n  #rs24 #ctToday{font-family:var(--disp); font-size:48px; font-weight:800; line-height:1; color:#fff}\n  #rs24 #ctToday small{font-family:var(--sans); font-size:14px; font-weight:500; color:rgba(255,255,255,.7)}\n  #rs24 #ctThen{font-size:14px; color:rgba(255,255,255,.78); margin-top:4px}\n  #rs24 .cfg-total .btn{margin-left:auto; background:var(--sig-bt); color:#fff}\n  #rs24 .cfg-total .btn:hover{background:var(--sig-bt2)}\n  #rs24 #cartPreview{margin-top:var(--s3); font-family:var(--mono); font-size:12px; color:var(--ptx2); text-align:right}\n  #rs24 .terms{display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:var(--s4); margin-top:var(--s7)}\n  #rs24 .terms > div{background:#fff; border:1px solid var(--prule); border-radius:4px; padding:var(--s5)}\n  #rs24 .terms .k{font-family:var(--mono); font-size:11px; font-weight:600; letter-spacing:.12em; text-transform:uppercase; color:#6b665d}\n  #rs24 .terms li{display:grid; grid-template-columns:22px 1fr; gap:6px; margin-top:10px; font-size:15px; line-height:1.45; color:var(--ptx2)}\n  #rs24 .terms li b{color:var(--ptx)}\n  #rs24 .terms .y{color:var(--green); font-weight:700}\n  #rs24 .terms .x{color:#9a2a12; font-weight:700}\n  #rs24 .aihours-fine{margin-top:var(--s5); font-size:13.5px; line-height:1.6; color:var(--ptx2); max-width:62em}\n\n  \/* ===== FAQ ===== *\/\n  #rs24 #faq{background:var(--paper2); color:var(--ptx); padding:var(--s9) 0}\n  #rs24 #faq h2{color:var(--ptx)}\n  #rs24 #faq .ch-head{color:#6b665d}\n  #rs24 #faq .ch-head::after{background:var(--prule)}\n  #rs24 #faq .ch-head .n{color:var(--sig-pa)}\n  #rs24 .qa{margin-top:var(--s6); border-top:2px solid var(--ptx); max-width:900px}\n  #rs24 .qa details{border-bottom:1px solid var(--prule)}\n  #rs24 .qa summary{cursor:pointer; list-style:none; display:flex; justify-content:space-between; gap:var(--s4); padding:18px 0; font-size:18px; font-weight:600; color:var(--ptx)}\n  #rs24 .qa summary::-webkit-details-marker{display:none}\n  #rs24 .qa summary::after{content:\"+\"; flex:none; font-family:var(--mono); font-size:20px; color:var(--sig-pa); line-height:1.2}\n  #rs24 .qa details[open] summary::after{content:\"\\2212\"}\n  #rs24 .qa p{padding:0 0 20px; font-size:16px; line-height:1.6; color:var(--ptx2); max-width:44em}\n  #rs24 .qa p b{color:var(--ptx)}\n\n  \/* ===== final + footer ===== *\/\n  #rs24 .final{padding:var(--s10) 0; text-align:left; border-top:1px solid var(--rule)}\n  #rs24 .final h2{font-size:clamp(46px,7vw,104px); max-width:12em}\n  #rs24 .final .btns{margin-top:var(--s6)}\n  #rs24 .foot{padding:var(--s6) 0; border-top:1px solid var(--rule); font-size:13.5px; color:var(--tx3)}\n  #rs24 .foot .wrap{display:flex; justify-content:space-between; gap:var(--s4); flex-wrap:wrap}\n  #rs24 .foot a{color:var(--tx2); border-bottom:1px solid var(--rule2)}\n\n  \/* ===== sticky phone bar ===== *\/\n  #rs24 .sticky{display:none}\n  @media(max-width:760px){\n    #rs24 .sticky{display:flex; position:fixed; left:0; right:0; bottom:0; z-index:9990; gap:8px; padding:10px 12px calc(10px + env(safe-area-inset-bottom)); background:rgba(11,11,12,.96); border-top:1px solid var(--rule2); transform:translateY(110%); transition:transform .2s; visibility:hidden}\n    #rs24 .sticky.on{transform:none; visibility:visible}\n    #rs24 .sticky a{flex:1; display:flex; align-items:center; justify-content:center; gap:8px; padding:14px 10px; border-radius:3px; font-size:15.5px; font-weight:600; line-height:1.1}\n    #rs24 .sticky .s1{color:var(--tx); box-shadow:inset 0 0 0 1px var(--rule2)}\n    #rs24 .sticky .s1 svg{width:12px; height:12px; fill:currentColor}\n    #rs24 .sticky .s2{background:var(--sig-bt); color:#fff}\n    #rs24 .foot{padding-bottom:96px}\n  }\n\n  \/* ===== responsive ===== *\/\n  @media(max-width:1080px){\n    #rs24 .hx{grid-template-columns:1fr; grid-template-areas:\"copy\" \"console\" \"under\"; padding-top:var(--s7); padding-bottom:var(--s8)}\n    #rs24 .hx-copy{max-width:760px}\n    #rs24 .split,#rs24 .split.flip{grid-template-columns:1fr; gap:var(--s6)}\n    #rs24 .split.flip > :first-child{order:0}\n    #rs24 .split .tx{display:contents}\n    #rs24 .split{gap:var(--s5)}\n    #rs24 .split .tx > h2{order:1}\n    #rs24 .split .tx > .lede{order:2; margin-top:0}\n    #rs24 .split > .fig,#rs24 .split > .figs{order:3}\n    #rs24 .split .tx > .points,#rs24 .split .tx > .src{order:4}\n    #rs24 .split > .points{order:4}\n    #rs24 .stats{grid-template-columns:repeat(2,minmax(0,1fr))}\n    #rs24 .stat:nth-child(3){border-left:0}\n    #rs24 .stat:nth-child(n+3){border-top:1px solid var(--rule)}\n    #rs24 .four{grid-template-columns:repeat(2,minmax(0,1fr))}\n    #rs24 .four > div:nth-child(2){border-right:0}\n    #rs24 .four > div:nth-child(3){padding-left:0}\n    #rs24 .four > div:nth-child(n+3){border-top:1px solid var(--prule)}\n    #rs24 .plan-row{grid-template-columns:repeat(2,minmax(0,1fr))}\n    #rs24 .path{grid-template-columns:repeat(2,minmax(0,1fr))}\n    #rs24 .path > div:nth-child(3){border-left:0}\n    #rs24 .path > div:nth-child(n+3){border-top:1px solid var(--rule)}\n    #rs24 .path > div:nth-child(2)::after{display:none}\n    #rs24 .more-grid{grid-template-columns:repeat(2,minmax(0,1fr))}\n    #rs24 #videos .vgrid{grid-template-columns:repeat(3,minmax(0,1fr))}\n  }\n  @media(max-width:760px){\n    #rs24{font-size:16px}\n    #rs24 .wrap{padding:0 var(--s4)}\n    #rs24 .ch,#rs24 .heard,#rs24 #pricing,#rs24 #faq{padding:var(--s8) 0}\n    #rs24 .lede{font-size:17px}\n    #rs24 .hx{padding-top:var(--s5); padding-bottom:var(--s7)}\n    #rs24 .hx .eyebrow{margin-bottom:var(--s3); font-size:11px}\n    #rs24 .hx h1{font-size:44px}\n    #rs24 .hx .price-chip{display:flex; align-items:center; justify-content:space-between; gap:var(--s3); margin-top:var(--s4); font-size:14.5px; line-height:1.35; color:var(--tx2)}\n    #rs24 .hx .price-chip .btn{flex:none; padding:12px 16px; font-size:15px}\n    #rs24 .hx .fine,#rs24 .hx-under > span:first-of-type,#rs24 .now .t2{display:none}\n    #rs24 .kinds{grid-template-columns:1.35fr 1.15fr .8fr .9fr}\n    #rs24 button.kd{white-space:nowrap}\n    #rs24 .hx .price-chip b{color:var(--tx)}\n    #rs24 .hx .lede,#rs24 .hx .btns,#rs24 .hx .trust{display:none}\n    #rs24 .hx-console{margin-top:var(--s4)}\n    #rs24 .hx-under{flex-direction:column; align-items:stretch; gap:var(--s3)}\n    #rs24 .hx-under .btn{width:100%!important}\n    #rs24 .hx-under .m-only{display:block}\n    #rs24 .con-top{padding:9px 12px; font-size:10px}\n    #rs24 .con-body{padding:10px}\n    #rs24 .chs{gap:5px}\n    #rs24 button.chp{padding:8px 6px; gap:4px; align-items:center; text-align:center}\n    #rs24 .chp .row{flex-direction:column-reverse; gap:6px}\n    #rs24 .chp .cn,#rs24 .chp .pp{display:none}\n    #rs24 .chp .ac{font-size:9px; letter-spacing:.02em}\n    #rs24 .chp .nm{font-size:19px}\n    #rs24 .chp .pb{width:30px; height:30px}\n    #rs24 .kinds{margin-top:8px}\n    #rs24 button.kd{padding:10px 2px; font-size:13px}\n    #rs24 button.kd small{display:none}\n    #rs24 .deck{margin-top:8px; padding:10px}\n    #rs24 button.big{width:58px; height:58px}\n    #rs24 button.big svg{width:24px; height:24px}\n    #rs24 .now .t1{font-size:15.5px}\n    #rs24 .now .t2{font-size:12.5px}\n    #rs24 .clock{font-size:11.5px}\n    #rs24 .lanes{margin-top:10px}\n    #rs24 .lane{height:16px; margin:3px 0}\n    #rs24 .lane b{font-size:9px}\n    #rs24 .songs li{font-size:13px}\n    #rs24 .songs .k{width:44px}\n    #rs24 .con-note{padding:10px 12px; font-size:12px}\n    #rs24 .four{grid-template-columns:1fr}\n    #rs24 .four > div,#rs24 .four > div + div{padding:var(--s5) 0; border-right:0}\n    #rs24 .four > div + div{border-top:1px solid var(--prule)}\n    #rs24 .stats{grid-template-columns:1fr 1fr}\n    #rs24 .stat{padding:var(--s4)}\n    #rs24 .phones{display:flex; overflow-x:auto; scroll-snap-type:x mandatory; gap:var(--s3); margin-left:calc(-1 * var(--s4)); margin-right:calc(-1 * var(--s4)); padding:0 var(--s4) var(--s2)}\n    #rs24 .phone{flex:0 0 62%; scroll-snap-align:center}\n    #rs24 .path,#rs24 .checks,#rs24 .more-grid,#rs24 .terms{grid-template-columns:1fr}\n    #rs24 .path > div{border-left:0; border-top:1px solid var(--rule)}\n    #rs24 .path > div:first-child{border-top:0}\n    #rs24 .path > div::after{display:none}\n    #rs24 .plan-row{grid-template-columns:1fr}\n    #rs24 .cfg-total{padding:var(--s5)}\n    #rs24 .cfg-total .btn{margin-left:0; width:100%!important}\n    #rs24 #cartPreview{text-align:left}\n    #rs24 #videos .vgrid{grid-template-columns:1fr 1fr}\n    #rs24 #videos .vcard{aspect-ratio:1\/1}\n    #rs24 .band .btn{width:100%!important}\n    #rs24 .final{padding:var(--s9) 0}\n  }\n  \/* ===== intro hero (the whole system) ===== *\/\n  #rs24 .intro{display:grid; grid-template-columns:minmax(0,6fr) minmax(0,6fr); grid-template-areas:\"head shot\" \"copy shot\" \"price shot\"; column-gap:var(--s8); padding-top:var(--s8); padding-bottom:var(--s9); align-items:start}\n  #rs24 .in-head{grid-area:head}\n  #rs24 .in-head .eyebrow{display:flex; align-items:center; gap:10px; margin-bottom:var(--s5)}\n  #rs24 .intro h1{font-size:clamp(46px,6.2vw,92px)}\n  #rs24 .in-copy{grid-area:copy}\n  #rs24 .in-shot{grid-area:shot; display:grid; gap:var(--s4); align-self:start; margin-top:var(--s7)}\n  #rs24 .in-price{grid-area:price; display:none}\n  #rs24 .proof{margin-top:var(--s5); border-top:1px solid var(--rule)}\n  #rs24 .proof li{display:grid; grid-template-columns:22px 1fr; gap:var(--s3); padding:12px 0; border-bottom:1px solid var(--rule); font-size:16px; line-height:1.45; color:var(--tx2)}\n  #rs24 .proof li::before{content:\"\"; width:12px; height:7px; margin-top:6px; border-left:2px solid var(--ok); border-bottom:2px solid var(--ok); transform:rotate(-45deg)}\n  #rs24 .proof li b{color:var(--tx)}\n  #rs24 .proof a{color:var(--tx); font-weight:600; border-bottom:1px solid var(--sig)}\n  #rs24 .intro .btns{margin-top:var(--s5)}\n\n  \/* ===== chapter nav: in flow after the hero, pinned under the theme header once scrolled to ===== *\/\n  #rs24 .cnav-ph{height:52px}\n  #rs24 .cnav{height:52px; background:var(--bk); border-top:1px solid var(--rule); border-bottom:1px solid var(--rule); z-index:9000}\n  #rs24 .cnav.pinned{position:fixed; box-shadow:0 12px 24px -16px rgba(0,0,0,.8)}\n  #rs24 .cnav-in{display:flex; align-items:center; gap:4px; height:100%; overflow-x:auto; scrollbar-width:none; -webkit-overflow-scrolling:touch}\n  #rs24 .cnav-in::-webkit-scrollbar{display:none}\n  #rs24 .cnav a{flex:none; padding:8px 12px; border-radius:3px; font-family:var(--mono); font-size:12px; font-weight:600; letter-spacing:.08em; text-transform:uppercase; color:var(--tx2); white-space:nowrap}\n  #rs24 .cnav a:hover{color:var(--tx); background:var(--bk2)}\n  #rs24 .cnav a.on{color:var(--tx); box-shadow:inset 0 -2px 0 var(--sig)}\n  #rs24 .cnav a.go{margin-left:auto; background:var(--sig-bt); color:#fff}\n\n  \/* ===== 01 hear it ===== *\/\n  #rs24 .hear .hx{display:grid; grid-template-columns:minmax(0,5fr) minmax(0,7fr); grid-template-areas:\"copy console\" \"copy under\"; column-gap:var(--s8)}\n  #rs24 .hear .hx-copy{grid-area:copy}\n  #rs24 .hear .hx-under{display:flex; flex-wrap:wrap; gap:var(--s3) var(--s5); align-items:center}\n  #rs24 .chs{grid-template-columns:repeat(4,minmax(0,1fr))}\n  #rs24 button.kd[hidden]{display:none}\n\n  @media(max-width:1080px){\n    #rs24 .intro{grid-template-columns:1fr; grid-template-areas:\"head\" \"price\" \"shot\" \"copy\"; padding-top:var(--s6); padding-bottom:var(--s8)}\n    #rs24 .in-price{display:flex; align-items:center; justify-content:space-between; gap:var(--s3); margin-top:var(--s4); font-size:15px; line-height:1.35; color:var(--tx2)}\n    #rs24 .in-price b{color:var(--tx)}\n    #rs24 .in-price .btn{flex:none}\n    #rs24 .in-shot{margin-top:var(--s4)}\n    #rs24 .in-copy{margin-top:var(--s5)}\n    #rs24 .in-copy .lede{margin-top:0}\n    #rs24 .hear .hx{grid-template-columns:1fr; grid-template-areas:\"copy\" \"console\" \"under\"}\n    #rs24 .hear .hx-console{margin-top:var(--s5)}\n  }\n  @media(max-width:760px){\n    #rs24 .intro{padding-top:var(--s5); padding-bottom:var(--s7)}\n    #rs24 .in-head .eyebrow{margin-bottom:var(--s3); font-size:11px}\n    #rs24 .intro h1{font-size:44px}\n    #rs24 .in-price .btn{padding:13px 16px; font-size:15px}\n    #rs24 .in-log,#rs24 .intro .fine{display:none}\n    #rs24 .cnav-ph,#rs24 .cnav{height:46px}\n    #rs24 .cnav a{padding:7px 9px; font-size:11px}\n    #rs24 .cnav a.go{display:none}\n    #rs24 .hear .hx-under{flex-direction:column; align-items:stretch}\n    #rs24 .hear .hx-under .btn{width:100%!important}\n    #rs24 .hear .trust{display:none}\n  }\n  #rs24 .hear .hx{padding-top:0; padding-bottom:0}\n  #rs24 .pick{margin-top:var(--s5); padding:var(--s4) var(--s5); border:1px solid var(--rule2); border-left:3px solid var(--sig); border-radius:4px; background:var(--bk1)}\n  #rs24 .pick .k{font-family:var(--mono); font-size:11px; font-weight:600; letter-spacing:.12em; text-transform:uppercase; color:var(--sig)}\n  #rs24 .pick p{margin-top:6px; font-size:15px; line-height:1.55; color:var(--tx2)}\n  #rs24 .pick b{color:var(--tx)}\n  \/* ===== theme-proofing (measured on the live Manrox theme 7 Oct): it styles em\/i (its own font, 16px\/22px italic), b\/strong (another font),\n     and forces rounded corners on buttons with !important. Reset them here so nothing inherits from the theme. ===== *\/\n  #rs24 em,#rs24 i{font-family:inherit; font-size:inherit; font-weight:inherit; font-style:normal; line-height:inherit; letter-spacing:inherit; text-transform:inherit}\n  #rs24 b,#rs24 strong{font-family:inherit; line-height:inherit; letter-spacing:inherit; text-transform:inherit}\n  #rs24 small{font-family:inherit; line-height:inherit}\n  #rs24 h1,#rs24 h2,#rs24 h3{margin:0; padding:0; text-wrap:balance}\n  #rs24 p,#rs24 li,#rs24 figcaption,#rs24 .l,#rs24 summary{text-wrap:pretty}\n  #rs24 button.kd{border-radius:0!important}\n  #rs24 button.chp{border-radius:4px!important}\n  #rs24 button.big{border-radius:50%!important}\n  #rs24 .trial-switch button{border-radius:3px!important}\n  #rs24 .checks li > svg{grid-column:1; grid-row:1; position:static!important; float:none!important; display:block}\n  #rs24 .checks li > span{grid-column:2; grid-row:1; min-width:0}\n  #rs24 .points li > span,#rs24 .proof li > span{grid-column:2; min-width:0}\n  #rs24 .m-only{display:none}\n  @media(prefers-reduced-motion:reduce){#rs24 *{animation:none!important; transition:none!important}}\n<\/style>\n<\/head>\n<body>\n<div id=\"rs24\">\n\n<!-- ===== hero: the whole system ===== -->\n<header class=\"hero\" id=\"top\">\n  <div class=\"wrap intro\">\n    <div class=\"in-head\">\n      <div class=\"eyebrow\"><span class=\"lamp\" aria-hidden=\"true\"><\/span> RadioStudio24 \u00b7 broadcast&nbsp;playout<\/div>\n      <h1>Professional radio playout. <em>In a&nbsp;browser.<\/em><\/h1>\n    <\/div>\n    <p class=\"in-price\"><span><b>\u00a31 for 5 days<\/b> on Broadcast,<br>then&nbsp;\u00a359\/mo<\/span><a href=\"#pricing\" class=\"btn btn-sig\">Start your \u00a31&nbsp;trial<\/a><\/p>\n    <div class=\"in-shot\">\n      <figure class=\"fig\">\n        <img src=\"https:\/\/radiojingles24.com\/wp-content\/uploads\/2026\/10\/rs24-lp-dashboard.webp\" width=\"747\" height=\"389\" fetchpriority=\"high\" decoding=\"async\" alt=\"The RadioStudio24 On Air dashboard in automation: the clock, the song on air with three minutes left, and the next item\">\n        <figcaption><span class=\"k\">FIG.&nbsp;01<\/span><span>The On Air desk, driving the hour in&nbsp;automation.<\/span><\/figcaption>\n      <\/figure>\n      <figure class=\"fig in-log\">\n        <img src=\"https:\/\/radiojingles24.com\/wp-content\/uploads\/2026\/10\/rs24-lp-log-ai.webp\" srcset=\"https:\/\/radiojingles24.com\/wp-content\/uploads\/2026\/10\/rs24-lp-log-ai-800.webp 800w, https:\/\/radiojingles24.com\/wp-content\/uploads\/2026\/10\/rs24-lp-log-ai.webp 1122w\" sizes=\"auto, 640px\" width=\"1122\" height=\"300\" loading=\"lazy\" decoding=\"async\" alt=\"The log: songs with an AI link between them, voiced by the presenter Sam\">\n        <figcaption><span class=\"k\">FIG.&nbsp;02<\/span><span>The log. Riverside FM, a made-up&nbsp;station.<\/span><\/figcaption>\n      <\/figure>\n    <\/div>\n    <div class=\"in-copy\">\n      <p class=\"lede\">RadioStudio24 runs a real station from a browser tab: the On Air desk, a cloud engine that keeps you on air 24\/7 with no studio PC, the Planner, segue editing, voicetracking from your phone, an AI presenter, and local travel and weather. And we measure it every day, so it stays on&nbsp;air.<\/p>\n      <div class=\"btns\">\n        <a href=\"#pricing\" class=\"btn btn-sig\">Start your \u00a31 trial <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><path d=\"M6 3l5 5-5 5-1.4-1.4L8.2 8 4.6 4.4z\"\/><\/svg><\/a>\n        <a href=\"#hear\" class=\"btn btn-line\">Hear the AI presenter <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><path d=\"M6 3l5 5-5 5-1.4-1.4L8.2 8 4.6 4.4z\"\/><\/svg><\/a>\n      <\/div>\n      <p class=\"fine\">Already a station? <a href=\"https:\/\/app.radiostudio24.com\/\">Log in to your studio<\/a><\/p>\n      <p class=\"fine\"><b>\u00a31 for 5 days on Broadcast<\/b> \u00b7 then \u00a359\/mo \u00b7 Studio \u00a329\/mo \u00b7 cancel before day 5 and you're not charged anything&nbsp;more<\/p>\n      <ul class=\"proof\">\n        <li><span><b>On air 24\/7 from our servers.<\/b> Close the laptop, it keeps playing. Broadcast and&nbsp;above.<\/span><\/li>\n        <li><span><b>5 ms<\/b> worst hard-time error across four stations, measured 6-7 October&nbsp;2026.<\/span><\/li>\n                <li><span><b>An AI presenter<\/b> that writes from the songs either side. <a href=\"#hear\">Hear&nbsp;it<\/a><\/span><\/li>\n        <li><span><b>Or do it yourself in the voicetrack editor:<\/b> at the desk, or from your&nbsp;phone.<\/span><\/li>\n        <li><span><b>Runs in Chrome.<\/b> Nothing to&nbsp;install.<\/span><\/li>\n      <\/ul>\n    <\/div>\n  <\/div>\n<\/header>\n\n<!-- ===== in-page chapter nav: pinned under the theme's fixed header by the script below ===== -->\n<div class=\"cnav-ph\" id=\"cnavPh\">\n  <nav class=\"cnav\" id=\"cnav\" aria-label=\"On this page\">\n    <div class=\"wrap cnav-in\">\n      <a href=\"#hear\">Hear&nbsp;it<\/a><a href=\"#rock\">Rock-solid<\/a><a href=\"#playout\">Live<\/a><a href=\"#voicetrack\">Segues<\/a><a href=\"#vtphone\">Phone<\/a><a href=\"#ai\">AI&nbsp;presenter<\/a><a href=\"#travel\">Travel<\/a><a href=\"#scheduling\">Planner<\/a><a href=\"#cloud\">Cloud<\/a><a href=\"#faq\">FAQ<\/a><a href=\"#pricing\" class=\"go\">\u00a31&nbsp;trial<\/a>\n    <\/div>\n  <\/nav>\n<\/div>\n\n<!-- ===== 01 hear it: the AI presenter demo desk ===== -->\n<section class=\"ch hear\" id=\"hear\">\n  <span id=\"demos\"><\/span>\n  <div class=\"wrap\">\n    <div class=\"ch-head\"><span class=\"n\">01<\/span><span>Hear&nbsp;it<\/span><\/div>\n    <div class=\"hx\">\n      <div class=\"hx-copy\">\n        <h2>Press play. Hear your <em>AI&nbsp;presenter.<\/em><\/h2>\n        <p class=\"lede\">Four presenters on Riverside FM, a made-up station. Each link was written by the AI from the songs either side and the station's notes, voiced, and mixed into the next record by the desk's own segue rules. The travel and weather were recorded from live data on 7 October&nbsp;2026.<\/p>\n        <div class=\"pick\">\n          <span class=\"k\">Four of a whole&nbsp;library<\/span>\n          <p>These four are a selection. The voice chooser browses <b>a library of professional voices by country<\/b>: the UK, the USA, Australia, Ireland, Canada, India and South Africa in English, plus Spanish, German, French and Italian voices in their own languages. Give each one a name, a show and a personality in plain&nbsp;words.<\/p>\n        <\/div>\n        <ul class=\"trust\">\n          <li>No card needed to hear the&nbsp;demos<\/li>\n          <li>Every link is a draft until you approve it, unless you switch on&nbsp;auto-approve<\/li>\n        <\/ul>\n      <\/div>\n      <div class=\"hx-console\">\n        <div class=\"con\" id=\"desk\">\n          <div class=\"con-top\"><span>Riverside FM \u00b7 demo&nbsp;desk<\/span><span class=\"tally\" aria-hidden=\"true\"><i><\/i>On&nbsp;air<\/span><\/div>\n          <div class=\"con-body\">\n            <div class=\"chs\" role=\"group\" aria-label=\"Choose a presenter\">\n              <button type=\"button\" class=\"chp\" data-v=\"mark\" aria-pressed=\"true\" aria-label=\"Play Mark, British presenter\"><span class=\"row\"><span class=\"cn\">CH1<\/span><span class=\"pb\"><svg class=\"ic-play\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M8 5.5v13l11-6.5z\"\/><\/svg><svg class=\"ic-pause\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M7 5h3.6v14H7zM13.4 5H17v14h-3.6z\"\/><\/svg><\/span><\/span><span class=\"nm\">Mark<\/span><span class=\"ac\">British<\/span><span class=\"pp\">Warm and upbeat, with a dry&nbsp;line<\/span><\/button>\n              <button type=\"button\" class=\"chp\" data-v=\"lucy\" aria-pressed=\"false\" aria-label=\"Play Lucy, British presenter\"><span class=\"row\"><span class=\"cn\">CH2<\/span><span class=\"pb\"><svg class=\"ic-play\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M8 5.5v13l11-6.5z\"\/><\/svg><svg class=\"ic-pause\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M7 5h3.6v14H7zM13.4 5H17v14h-3.6z\"\/><\/svg><\/span><\/span><span class=\"nm\">Lucy<\/span><span class=\"ac\">British<\/span><span class=\"pp\">Warm afternoon&nbsp;company<\/span><\/button>\n              <button type=\"button\" class=\"chp\" data-v=\"guy\" aria-pressed=\"false\" aria-label=\"Play Guy, British presenter\"><span class=\"row\"><span class=\"cn\">CH3<\/span><span class=\"pb\"><svg class=\"ic-play\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M8 5.5v13l11-6.5z\"\/><\/svg><svg class=\"ic-pause\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M7 5h3.6v14H7zM13.4 5H17v14h-3.6z\"\/><\/svg><\/span><\/span><span class=\"nm\">Guy<\/span><span class=\"ac\">British<\/span><span class=\"pp\">Relaxed, dry and knows his&nbsp;records<\/span><\/button>\n              <button type=\"button\" class=\"chp\" data-v=\"crofty\" aria-pressed=\"false\" aria-label=\"Play Crofty, Scottish presenter\"><span class=\"row\"><span class=\"cn\">CH4<\/span><span class=\"pb\"><svg class=\"ic-play\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M8 5.5v13l11-6.5z\"\/><\/svg><svg class=\"ic-pause\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M7 5h3.6v14H7zM13.4 5H17v14h-3.6z\"\/><\/svg><\/span><\/span><span class=\"nm\">Crofty<\/span><span class=\"ac\">Scottish<\/span><span class=\"pp\">High energy, straight to the&nbsp;point<\/span><\/button>\n            <\/div>\n            <div class=\"kinds\" role=\"group\" aria-label=\"Choose what they say\">\n              <button type=\"button\" class=\"kd\" data-k=\"backannounce-segue\" aria-pressed=\"false\">Back-announce<small>into the next song<\/small><\/button>\n              <button type=\"button\" class=\"kd\" data-k=\"personality-segue\" aria-pressed=\"false\">Personality<small>a station link<\/small><\/button>\n              <button type=\"button\" class=\"kd\" data-k=\"travel-over-bed\" aria-pressed=\"false\">Travel<small>live, local<\/small><\/button>\n              <button type=\"button\" class=\"kd\" data-k=\"weather-over-bed\" aria-pressed=\"false\">Weather<small>Met Office<\/small><\/button>\n            <\/div>\n            <div class=\"deck\">\n              <div class=\"transport\">\n                <button type=\"button\" class=\"big\" id=\"hwBig\" aria-label=\"Play\">\n                  <svg class=\"ic-play\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M8 5.5v13l11-6.5z\"\/><\/svg>\n                  <svg class=\"ic-pause\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M7 5h3.6v14H7zM13.4 5H17v14h-3.6z\"\/><\/svg>\n                <\/button>\n                <div class=\"now\" aria-live=\"polite\"><div class=\"t1\" id=\"hwNow\">Mark<\/div><div class=\"t2\" id=\"hwDesc\"><\/div><\/div>\n                <div class=\"clock\" id=\"hwTime\">0:00<\/div>\n              <\/div>\n              <div class=\"lanes\" id=\"hwTl\" aria-hidden=\"true\"><\/div>\n              <ul class=\"songs\" id=\"hwSongs\"><\/ul>\n              <div class=\"fit\" id=\"hwFit\"><\/div>\n              <details class=\"more\"><summary id=\"hwScriptSum\">Read what was&nbsp;said<\/summary><p class=\"script\" id=\"hwScript\"><\/p><\/details>\n            <\/div>\n          <\/div>\n          <p class=\"con-note\"><b>Riverside FM is a made-up station.<\/b> Travel and weather were recorded from live data on 7 October 2026: real roads around Wakefield and Leeds, and the Met Office forecast for Wakefield. Mixed by the same segue rules the desk uses on air, with the station's audio processor switched&nbsp;off.<\/p>\n          <audio id=\"hwAudio\" preload=\"none\" playsinline><\/audio>\n        <\/div>\n      <\/div>\n      <div class=\"hx-under\">\n        <a href=\"#pricing\" class=\"btn btn-sig\">Start your \u00a31&nbsp;trial<\/a>\n        <span class=\"mono\" style=\"font-size:13px;color:var(--tx3)\">\u00a31 for 5 days on Broadcast \u00b7 then&nbsp;\u00a359\/mo<\/span>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- ===== what you just heard ===== -->\n<section class=\"heard\" id=\"heard\">\n  <div class=\"wrap\">\n    <div class=\"ch-head\"><span class=\"n\">01<\/span><span>What you just&nbsp;heard<\/span><\/div>\n    <h2>How your AI presenter made those&nbsp;links.<\/h2>\n    <div class=\"four\">\n      <div><span class=\"n\">1<\/span><h3>Written from the songs either&nbsp;side<\/h3><p>Each link is written from the song that just played, the one coming up and your station notes, using talking points for every song. The AI does not invent&nbsp;facts.<\/p><a href=\"#ai\">How the presenter&nbsp;works<\/a><\/div>\n      <div><span class=\"n\">2<\/span><h3>A draft until you approve&nbsp;it<\/h3><p>Every voiced link lands as a draft. Nothing airs until someone approves it, unless you switch on auto-approve for the hours nobody is around. Broadcast includes 300 AI links a&nbsp;month.<\/p><a href=\"#ai\">Drafts and&nbsp;approval<\/a><\/div>\n      <div><span class=\"n\">3<\/span><h3>Travel and weather for your&nbsp;area<\/h3><p>Set your area once. Travel comes from live incident data, major incidents and closures only. Weather for UK stations comes from the Met Office. Voiced over a bed if you want&nbsp;one.<\/p><a href=\"#travel\">Travel and&nbsp;weather<\/a><\/div>\n      <div><span class=\"n\">4<\/span><h3>Or do it yourself in the voicetrack&nbsp;editor<\/h3><p>At the desk, or from your phone. Record your links over the real song tails; on a phone it's one big button and no app to&nbsp;install.<\/p><a href=\"#voicetrack\">The voicetrack&nbsp;editor<\/a><\/div>\n    <\/div>\n    <div class=\"btns\">\n      <a href=\"#pricing\" class=\"btn btn-sig\">Start your \u00a31&nbsp;trial<\/a>\n    <\/div>\n    <p class=\"fine\">Try Broadcast for \u00a31 for 5 days, with about 25 AI links to test. Then&nbsp;\u00a359\/mo.<\/p>\n  <\/div>\n<\/section>\n\n<!-- ===== 01 rock-solid playout ===== -->\n<section class=\"ch\" id=\"rock\">\n  <div class=\"wrap\">\n    <div class=\"ch-head\"><span class=\"n\">02<\/span><span>Rock-solid&nbsp;playout<\/span><\/div>\n    <div class=\"split\">\n      <div class=\"tx\">\n        <h2>Built to stay on air. <em>Measured<\/em>, not&nbsp;promised.<\/h2>\n        <p class=\"lede\">A playout system has one job before any other: stay on air and land on time. So we measure it on real stations, every day, and fix what the numbers&nbsp;show.<\/p>\n      <\/div>\n      <figure class=\"fig\">\n        <img src=\"https:\/\/radiojingles24.com\/wp-content\/uploads\/2026\/10\/rs24-lp-dashboard.webp\" width=\"747\" height=\"389\" loading=\"lazy\" decoding=\"async\" alt=\"The On Air dashboard in automation with the clock, the song on air, time remaining and the next item\">\n        <figcaption><span class=\"k\">FIG.&nbsp;03<\/span><span>Automation driving the hour: on air, time left, what is&nbsp;next.<\/span><\/figcaption>\n      <\/figure>\n    <\/div>\n    <div class=\"stats\">\n      <div class=\"stat\"><div class=\"v\">5<small>ms<\/small><\/div><div class=\"l\">Worst hard-time error across four stations&nbsp;overnight.<\/div><span class=\"w\">Measured 6-7 October&nbsp;2026<\/span><\/div>\n      <div class=\"stat\"><div class=\"v\">Daily<\/div><div class=\"l\">Every hour's junctions measured and&nbsp;graded.<\/div><span class=\"w\">Real stations, real&nbsp;air<\/span><\/div>\n      <div class=\"stat\"><div class=\"v\">Weekly<\/div><div class=\"l\">Release rhythm. Every release runs on a test rig before it goes near&nbsp;air.<\/div><span class=\"w\">Tested, then&nbsp;shipped<\/span><\/div>\n      <div class=\"stat\"><div class=\"v\">24\/7<\/div><div class=\"l\">The cloud engine plays from our servers. No studio PC to leave&nbsp;on.<\/div><span class=\"w\">Broadcast and&nbsp;above<\/span><\/div>\n    <\/div>\n    <ul class=\"points\" style=\"max-width:900px\">\n      <li><span><b>A safety playlist on the stream.<\/b> If an engine ever drops, your listeners hear your own music, not&nbsp;silence.<\/span><\/li>\n      <li><span><b>Changeovers measured where listeners hear them.<\/b> Engine changeovers are measured on the stream itself, not only in the&nbsp;logs.<\/span><\/li>\n      <li><span><b>News on its second.<\/b> A hard-time marker pins the bulletin, and the music before it stretches or shaves to&nbsp;fit.<\/span><\/li>\n      <li><span><b>Imaging plays as produced.<\/b> Only songs are ever faded, shaved or dropped to make the time. Jingles, adverts and news play in&nbsp;full.<\/span><\/li>\n      <li><span><b>One source on air.<\/b> The desk and the cloud never talk over each other. Failed items are retried, logged and stepped over, and an emergency fallback is always&nbsp;armed.<\/span><\/li>\n      <li><span><b>An email if the stream goes quiet.<\/b> Switch on silence monitoring and we sample your live stream about once a&nbsp;minute.<\/span><\/li>\n    <\/ul>\n  <\/div>\n<\/section>\n\n<!-- ===== 03 live, like a normal playout (the On Air desk) ===== -->\n<section class=\"ch\" id=\"playout\">\n  <div class=\"wrap\">\n    <div class=\"ch-head\"><span class=\"n\">03<\/span><span>Live, like a normal&nbsp;playout<\/span><\/div>\n    <div class=\"split\">\n      <div class=\"tx\">\n        <h2>A live desk. <em>Or left to run&nbsp;itself.<\/em><\/h2>\n        <p class=\"lede\">Under the AI and the automation is a full live playout desk. Drive the show yourself, fire jingles off the cart wall, talk over intros, and hand the air back to automation when you're&nbsp;done.<\/p>\n        <ul class=\"points\">\n          <li><span><b>Auto, Assist or Manual.<\/b> Automation drives the segues, backtiming, hard times and the next hour. In Assist or Manual you fire each item&nbsp;yourself.<\/span><\/li>\n          <li><span><b>Play next, stop, jump.<\/b> Space plays the next item, S stops after this one, and \"now\" on any row jumps straight to&nbsp;it.<\/span><\/li>\n          <li><span><b>Mic and talk-over.<\/b> The mic is one button (or M). Talk over intros and segue when it feels&nbsp;right.<\/span><\/li>\n          <li><span><b>Edit the log while it plays.<\/b> Drag rows to re-order the hour (never the item on air), and right-click to drop in travel or weather on the&nbsp;fly.<\/span><\/li>\n          <li><span><b>Take the air, hand it back.<\/b> Take at junction lets the playing item finish first; Take now fades in 1.5 seconds. Release air hands back to automation or the cloud engine. Only one source is ever on&nbsp;air.<\/span><\/li>\n          <li><span><b>Hard times.<\/b> Pin the news or an ad break to the second, and the music before it stretches or shaves to land&nbsp;it.<\/span><\/li>\n          <li><span><b>Imaging plays as produced.<\/b> Jingles, sweepers, IDs and adverts each have their own type and always play in&nbsp;full.<\/span><\/li>\n        <\/ul>\n      <\/div>\n      <div class=\"figs\">\n        <figure class=\"fig\">\n          <img src=\"https:\/\/radiojingles24.com\/wp-content\/uploads\/2026\/10\/rs24-lp-cartwall.webp\" width=\"630\" height=\"258\" loading=\"lazy\" decoding=\"async\" alt=\"The cart wall: a grid of instant-play station IDs, sweepers and jingles, each with its length\">\n          <figcaption><span class=\"k\">FIG.&nbsp;04<\/span><span>The cart wall: one click or keys 1 to 9 fires a cart. Density and colours are set per&nbsp;station.<\/span><\/figcaption>\n        <\/figure>\n        <figure class=\"fig\">\n          <img src=\"https:\/\/radiojingles24.com\/wp-content\/uploads\/2026\/10\/rs24-lp-deck.webp\" srcset=\"https:\/\/radiojingles24.com\/wp-content\/uploads\/2026\/10\/rs24-lp-deck-800.webp 800w, https:\/\/radiojingles24.com\/wp-content\/uploads\/2026\/10\/rs24-lp-deck.webp 1600w\" sizes=\"auto, (max-width:1080px) 100vw, 720px\" width=\"1600\" height=\"143\" loading=\"lazy\" decoding=\"async\" alt=\"The deck strip: last played, now playing, next and next plus one, each with talking points for the song\">\n          <figcaption><span class=\"k\">FIG.&nbsp;05<\/span><span>The deck bar: last played, now, next and next +1, each with its talking points for the&nbsp;back-announce.<\/span><\/figcaption>\n        <\/figure>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- ===== 02 segue editing ===== -->\n<section class=\"ch\" id=\"voicetrack\">\n  <div class=\"wrap\">\n    <div class=\"ch-head\"><span class=\"n\">04<\/span><span>Segue&nbsp;editing<\/span><\/div>\n    <div class=\"split flip\">\n      <div class=\"tx\">\n        <h2>Every junction, <em>edited by&nbsp;ear.<\/em><\/h2>\n        <p class=\"lede\">Open any junction and you get three lanes: the outgoing song, your voice and the incoming song. Play, talk, bring the next one in under you, exactly as it will&nbsp;air.<\/p>\n        <ul class=\"points\">\n          <li><span><b>Mix points found on upload.<\/b> Trim in, intro, extro and trim out, with loudness measured. No manual&nbsp;marking.<\/span><\/li>\n          <li><span><b>The talk-up marker is where the vocal starts.<\/b> The amber band in the segue editor shows how long you can&nbsp;talk.<\/span><\/li>\n          <li><span><b>Record over the real song tails.<\/b> The bed ducks under you, and Play next brings the next song in under your&nbsp;voice.<\/span><\/li>\n          <li><span><b>Your take ends on your last word.<\/b> Room silence at the end is trimmed off for&nbsp;you.<\/span><\/li>\n          <li><span><b>Change one hour or every play.<\/b> Edit a segue on a log row and only that hour changes. Set it on the library track and every future play&nbsp;follows.<\/span><\/li>\n          <li><span><b>Saved through the broadcast chain.<\/b> On save it drops into the log, ready to&nbsp;play.<\/span><\/li>\n        <\/ul>\n      <\/div>\n      <figure class=\"fig\">\n        <img src=\"https:\/\/radiojingles24.com\/wp-content\/uploads\/2026\/10\/rs24-lp-segue-editor.webp\" srcset=\"https:\/\/radiojingles24.com\/wp-content\/uploads\/2026\/10\/rs24-lp-segue-editor-800.webp 800w, https:\/\/radiojingles24.com\/wp-content\/uploads\/2026\/10\/rs24-lp-segue-editor.webp 1600w\" sizes=\"auto, (max-width:1080px) 100vw, 720px\" width=\"1600\" height=\"805\" loading=\"lazy\" decoding=\"async\" alt=\"The segue editor: the outgoing song, your voice and the incoming song on three lanes, with volume envelopes and the talk-over time\">\n        <figcaption><span class=\"k\">FIG.&nbsp;06<\/span><span>The segue editor: the outgoing song, your voice and the incoming song on three&nbsp;lanes.<\/span><\/figcaption>\n      <\/figure>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- ===== 03 phone voicetracking for events ===== -->\n<section class=\"ch\" id=\"vtphone\">\n  <div class=\"wrap\">\n    <div class=\"ch-head\"><span class=\"n\">05<\/span><span>Voicetrack from your&nbsp;phone<\/span><\/div>\n    <h2>Out at an event? <em>Voice the&nbsp;show<\/em> from your&nbsp;phone.<\/h2>\n    <p class=\"lede\">Open app.radiostudio24.com\/voicetrack in your phone's browser, sign in, and your show is there waiting for your links. There's no app to install, and one big button walks you through every&nbsp;link.<\/p>\n    <p class=\"event\"><b>Record your links from the fete, the match or the gig<\/b>, and they are in the show before you get&nbsp;home.<\/p>\n    <div class=\"phones\">\n      <figure class=\"phone\"><img src=\"https:\/\/radiojingles24.com\/wp-content\/uploads\/2026\/10\/rs24-lp-phone-show.webp\" width=\"585\" height=\"1266\" loading=\"lazy\" decoding=\"async\" alt=\"The voicetrack page on a phone: the whole show as one running order, with a bar at each hour and a line saying the hour fits\"><figcaption>Your whole&nbsp;show<\/figcaption><\/figure>\n      <figure class=\"phone\"><img src=\"https:\/\/radiojingles24.com\/wp-content\/uploads\/2026\/10\/rs24-lp-phone-record.webp\" width=\"585\" height=\"1266\" loading=\"lazy\" decoding=\"async\" alt=\"Recording a link on a phone with one big Record button, the outgoing song playing underneath\"><figcaption>One big&nbsp;button<\/figcaption><\/figure>\n      <figure class=\"phone\"><img src=\"https:\/\/radiojingles24.com\/wp-content\/uploads\/2026\/10\/rs24-lp-phone-kept.webp\" width=\"585\" height=\"1266\" loading=\"lazy\" decoding=\"async\" alt=\"A take kept on the phone after an interruption, with Use it and Discard buttons\"><figcaption>A take survives a&nbsp;call<\/figcaption><\/figure>\n      <figure class=\"phone\"><img src=\"https:\/\/radiojingles24.com\/wp-content\/uploads\/2026\/10\/rs24-lp-phone-saved.webp\" width=\"585\" height=\"1266\" loading=\"lazy\" decoding=\"async\" alt=\"A saved link in the running order, showing its length and an Edit button\"><figcaption>Saved, with&nbsp;Edit<\/figcaption><\/figure>\n    <\/div>\n    <ul class=\"checks\" style=\"margin-top:var(--s6)\">\n      <li><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5 12.5l4.5 4.5L19 7.5\"\/><\/svg><span><b>One big button<\/b>Play, Record, Play next, Stop,&nbsp;Save.<\/span><\/li>\n      <li><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5 12.5l4.5 4.5L19 7.5\"\/><\/svg><span><b>The whole show as one running order<\/b>With a bar at each hour and a line telling you if the hour&nbsp;fits.<\/span><\/li>\n      <li><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5 12.5l4.5 4.5L19 7.5\"\/><\/svg><span><b>A call won't lose a take<\/b>A phone call, a screen lock or a bad signal keeps the take on your phone, ready to Use it or&nbsp;Discard.<\/span><\/li>\n      <li><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5 12.5l4.5 4.5L19 7.5\"\/><\/svg><span><b>Saved means saved<\/b>It only says Saved when the station really has your link, and keeps trying on a weak&nbsp;signal.<\/span><\/li>\n      <li><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5 12.5l4.5 4.5L19 7.5\"\/><\/svg><span><b>Edit and record again<\/b>A saved link shows its length. Press Edit to do it&nbsp;again.<\/span><\/li>\n      <li><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5 12.5l4.5 4.5L19 7.5\"\/><\/svg><span><b>No headphones?<\/b>Choose Record dry. If your links make the hour too long, it tells you which song would be&nbsp;dropped.<\/span><\/li>\n    <\/ul>\n  <\/div>\n<\/section>\n\n<div class=\"band\">\n  <div class=\"wrap\">\n    <div><h2>Hear it on your own&nbsp;station.<\/h2><p>\u00a31 for 5 days on Broadcast, then \u00a359\/mo. Cancel before day 5 and \u00a31 is all you&nbsp;pay.<\/p><\/div>\n    <a href=\"#pricing\" class=\"btn\">Start your \u00a31&nbsp;trial<\/a>\n  <\/div>\n<\/div>\n\n<!-- ===== 04 the AI presenter ===== -->\n<section class=\"ch\" id=\"ai\">\n  <div class=\"wrap\">\n    <div class=\"ch-head\"><span class=\"n\">06<\/span><span>The AI&nbsp;presenter<\/span><\/div>\n    <div class=\"split\">\n      <div class=\"tx\">\n        <h2>A presenter with <em>your station's&nbsp;brain.<\/em><\/h2>\n        <p class=\"lede\">Give each presenter a name, a voice and a personality, and assign one to each show. Feed the station its notes: your area, your events, your features. The presenter back-announces the last song and talks up the next&nbsp;one.<\/p>\n        <ul class=\"points\">\n          <li><span><b>Talking points for every song.<\/b> One pass over your library writes the year, the chart run, the writer and the style. Edit any of&nbsp;them.<\/span><\/li>\n          <li><span><b>Drafts until approved.<\/b> Every voiced link lands as a draft. Nothing airs until someone approves it, unless you switch on&nbsp;auto-approve.<\/span><\/li>\n          <li><span><b>Your words, if you want them.<\/b> Open any script and rewrite it. It is voiced exactly as you&nbsp;type.<\/span><\/li>\n          <li><span><b>This hour, today, this week or everything scheduled.<\/b> Voice as much or as little as you like in one&nbsp;go.<\/span><\/li>\n          <li><span><b>Choose from a library of professional voices.<\/b> Browse by country: British, American, Australian, Irish, Canadian, Indian and South African English, or Spanish, German, French and Italian voices in their own&nbsp;languages.<\/span><\/li>\n          <li><span><b>300 AI links a month on Broadcast.<\/b> On Studio the AI presenter is pay as you&nbsp;go.<\/span><\/li>\n        <\/ul>\n      <\/div>\n      <div class=\"figs\">\n        <figure class=\"fig\">\n          <img src=\"https:\/\/radiojingles24.com\/wp-content\/uploads\/2026\/10\/rs24-lp-presenters.webp\" srcset=\"https:\/\/radiojingles24.com\/wp-content\/uploads\/2026\/10\/rs24-lp-presenters-800.webp 800w, https:\/\/radiojingles24.com\/wp-content\/uploads\/2026\/10\/rs24-lp-presenters.webp 1600w\" sizes=\"auto, (max-width:1080px) 100vw, 720px\" width=\"1600\" height=\"532\" loading=\"lazy\" decoding=\"async\" alt=\"The AI presenter settings: the presenter roster, station notes and the rules for the AI\">\n          <figcaption><span class=\"k\">FIG.&nbsp;07<\/span><span>The roster, the station notes and the rules the AI&nbsp;follows.<\/span><\/figcaption>\n        <\/figure>\n        <div class=\"figs\" style=\"grid-template-columns:1fr 1fr\">\n          <figure class=\"fig\">\n            <img src=\"https:\/\/radiojingles24.com\/wp-content\/uploads\/2026\/10\/rs24-lp-link-script.webp\" width=\"696\" height=\"433\" loading=\"lazy\" decoding=\"async\" alt=\"An AI link script open for editing, with a Save and voice button\">\n            <figcaption><span class=\"k\">FIG.&nbsp;08<\/span><span>Edit the words, or type your&nbsp;own.<\/span><\/figcaption>\n          <\/figure>\n          <figure class=\"fig\">\n            <img src=\"https:\/\/radiojingles24.com\/wp-content\/uploads\/2026\/10\/rs24-lp-voice-links.webp\" width=\"776\" height=\"431\" loading=\"lazy\" decoding=\"async\" alt=\"Write and voice your links: this hour, everything today, this week or all scheduled, each landing as an AI draft\">\n            <figcaption><span class=\"k\">FIG.&nbsp;09<\/span><span>Voice an hour, a day, a week. Each lands as a&nbsp;draft.<\/span><\/figcaption>\n          <\/figure>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- ===== 05 travel and weather ===== -->\n<section class=\"ch\" id=\"travel\">\n  <div class=\"wrap\">\n    <div class=\"ch-head\"><span class=\"n\">07<\/span><span>Travel and&nbsp;weather<\/span><\/div>\n    <div class=\"split flip\">\n      <div class=\"tx\">\n        <h2>Local travel and weather, <em>voiced for&nbsp;you.<\/em><\/h2>\n        <p class=\"lede\">Live travel and the real forecast for your area, written and voiced as a bulletin, and dropped into your&nbsp;log.<\/p>\n        <ul class=\"points\">\n          <li><span><b>Travel from live incident data.<\/b> Major incidents and closures only, read in under 80&nbsp;words.<\/span><\/li>\n          <li><span><b>Weather from the Met Office<\/b> for UK stations, in the voice you choose, over a music bed if you want&nbsp;one.<\/span><\/li>\n          <li><span><b>Current when it airs.<\/b> Put travel on auto and it is checked and voiced close to the time it&nbsp;plays.<\/span><\/li>\n          <li><span><b>Nothing made up.<\/b> If there is nothing to report, it is not&nbsp;mentioned.<\/span><\/li>\n        <\/ul>\n        <p class=\"src\">You heard it in the demos: Wakefield and Leeds roads and the Wakefield forecast, recorded from live data on 7 October&nbsp;2026.<\/p>\n      <\/div>\n      <figure class=\"fig\">\n        <img src=\"https:\/\/radiojingles24.com\/wp-content\/uploads\/2026\/10\/rs24-lp-weather-travel.webp\" srcset=\"https:\/\/radiojingles24.com\/wp-content\/uploads\/2026\/10\/rs24-lp-weather-travel-800.webp 800w, https:\/\/radiojingles24.com\/wp-content\/uploads\/2026\/10\/rs24-lp-weather-travel.webp 1600w\" sizes=\"auto, (max-width:1080px) 100vw, 720px\" width=\"1600\" height=\"785\" loading=\"lazy\" decoding=\"async\" alt=\"Weather and travel settings: area West Yorkshire, spoken place name Wakefield, the voice, the bed and a Preview bulletin button\">\n        <figcaption><span class=\"k\">FIG.&nbsp;10<\/span><span>Set your area once: West Yorkshire, spoken as&nbsp;Wakefield.<\/span><\/figcaption>\n      <\/figure>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- ===== 06 the planner ===== -->\n<section class=\"ch\" id=\"scheduling\">\n  <div class=\"wrap\">\n    <div class=\"ch-head\"><span class=\"n\">08<\/span><span>The&nbsp;Planner<\/span><\/div>\n    <h2>Your whole week, <em>at a&nbsp;glance.<\/em><\/h2>\n    <p class=\"lede\">Build your clocks, paint them across the week, and see the state of every hour: On air, Ready, Needs links, Not built. Switch on keep building and the server tops up future hours from your schedule, from a day to four weeks&nbsp;ahead.<\/p>\n    <figure class=\"fig\" style=\"margin-top:var(--s7)\">\n      <img src=\"https:\/\/radiojingles24.com\/wp-content\/uploads\/2026\/10\/rs24-lp-planner.webp\" srcset=\"https:\/\/radiojingles24.com\/wp-content\/uploads\/2026\/10\/rs24-lp-planner-800.webp 800w, https:\/\/radiojingles24.com\/wp-content\/uploads\/2026\/10\/rs24-lp-planner.webp 1600w\" sizes=\"auto, (max-width:1080px) 100vw, 1200px\" width=\"1600\" height=\"900\" loading=\"lazy\" decoding=\"async\" alt=\"The Planner week grid from Monday to Sunday, every hour showing its show, clock and status\">\n      <figcaption><span class=\"k\">FIG.&nbsp;11<\/span><span>The Planner week. Every hour shows its show and its state. The weekend reads Not built because keep building is off in this&nbsp;capture.<\/span><\/figcaption>\n    <\/figure>\n    <ul class=\"checks\">\n      <li><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5 12.5l4.5 4.5L19 7.5\"\/><\/svg><span><b>A visual clock wheel<\/b>See the whole hour, with live guide times from your own library as you&nbsp;build.<\/span><\/li>\n      <li><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5 12.5l4.5 4.5L19 7.5\"\/><\/svg><span><b>Real rotation rules<\/b>Artist and title separation, plus era, gender, tempo and genre&nbsp;coding.<\/span><\/li>\n      <li><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5 12.5l4.5 4.5L19 7.5\"\/><\/svg><span><b>Hard, soft and reset markers<\/b>Pin news to the second, aim for a time without chopping a song, or&nbsp;re-anchor.<\/span><\/li>\n      <li><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5 12.5l4.5 4.5L19 7.5\"\/><\/svg><span><b>A month ahead on Broadcast<\/b>Build a run of hours in one go. Hours already built or on air are never&nbsp;touched.<\/span><\/li>\n    <\/ul>\n  <\/div>\n<\/section>\n\n\n<!-- ===== 08 the cloud engine ===== -->\n<section class=\"ch\" id=\"cloud\">\n  <div class=\"wrap\">\n    <div class=\"ch-head\"><span class=\"n\">09<\/span><span>The cloud&nbsp;engine<\/span><\/div>\n    <h2>On air 24\/7. <em>No studio&nbsp;PC.<\/em><\/h2>\n    <p class=\"lede\">Your station plays from our servers around the clock. Close the laptop, switch off the PC, it keeps playing. When a presenter wants to go live, they take the air at the next song. Press release at the end of the show and the cloud picks straight back&nbsp;up.<\/p>\n    <div class=\"path\">\n      <div><span class=\"k\">Your&nbsp;library<\/span><h3>Music, imaging,&nbsp;logs<\/h3><p>Uploaded once, analysed, scheduled from your&nbsp;clocks.<\/p><\/div>\n      <div><span class=\"k\">Cloud&nbsp;engine<\/span><h3>Plays on our&nbsp;servers<\/h3><p>Runs the log 24\/7 with nothing left on at your&nbsp;end.<\/p><\/div>\n      <div><span class=\"k\">Your&nbsp;stream<\/span><h3>Icecast or&nbsp;SHOUTcast<\/h3><p>Streams to the server you already use. Your stats, players and apps stay&nbsp;put.<\/p><\/div>\n      <div><span class=\"k\">Going&nbsp;live<\/span><h3>Take at&nbsp;junction<\/h3><p>A presenter takes the air at the next song and releases it at the&nbsp;end.<\/p><\/div>\n    <\/div>\n    <div class=\"chips\" aria-label=\"Works with\"><span>Icecast<\/span><span>SHOUTcast<\/span><span>AzuraCast<\/span><span>Radio.co<\/span><span>Live365<\/span><span>any Icecast or SHOUTcast&nbsp;host<\/span><\/div>\n    <p class=\"src\">The cloud engine comes with Broadcast (\u00a359\/mo) and above. It is not part of the \u00a31 trial: it switches on with your first&nbsp;payment.<\/p>\n  <\/div>\n<\/section>\n\n<!-- ===== 09 what most playout systems can't do ===== -->\n<section class=\"ch\" id=\"compare\">\n  <div class=\"wrap\">\n    <div class=\"ch-head\"><span class=\"n\">10<\/span><span>Capabilities<\/span><\/div>\n    <h2>The <em>difference.<\/em><\/h2>\n    <ul class=\"checks\">\n      <li><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5 12.5l4.5 4.5L19 7.5\"\/><\/svg><span><b>An AI presenter that knows the playlist<\/b>Links written from the songs either side and your notes, in a voice you&nbsp;pick.<\/span><\/li>\n      <li><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5 12.5l4.5 4.5L19 7.5\"\/><\/svg><span><b>Talking points for every song<\/b>On the deck as it plays, for the AI or for you&nbsp;live.<\/span><\/li>\n      <li><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5 12.5l4.5 4.5L19 7.5\"\/><\/svg><span><b>Local travel and weather, voiced<\/b>Live incident data and the Met Office, written and read as a&nbsp;bulletin.<\/span><\/li>\n      <li><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5 12.5l4.5 4.5L19 7.5\"\/><\/svg><span><b>Voicetracking from a phone<\/b>In the browser, no app, built to survive a call or a bad&nbsp;signal.<\/span><\/li>\n      <li><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5 12.5l4.5 4.5L19 7.5\"\/><\/svg><span><b>A cloud engine with no studio PC<\/b>On air from our servers, streaming to your own&nbsp;server.<\/span><\/li>\n      <li><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5 12.5l4.5 4.5L19 7.5\"\/><\/svg><span><b>A broadcast processor built in<\/b>AGC, five-band compression, clipping and true-peak limiting on your&nbsp;output.<\/span><\/li>\n      <li><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5 12.5l4.5 4.5L19 7.5\"\/><\/svg><span><b>Every hour's state for the week<\/b>On air, Ready, Needs links, Not built, on one&nbsp;screen.<\/span><\/li>\n      <li><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5 12.5l4.5 4.5L19 7.5\"\/><\/svg><span><b>Runs in Chrome<\/b>Nothing to install, no servers to run, no licence to&nbsp;move.<\/span><\/li>\n    <\/ul>\n\n    <div class=\"more-grid\">\n      <div id=\"library\"><span class=\"k\">Library<\/span><h3>Upload thousands of&nbsp;tracks<\/h3><p>Every song is coded for genre, era, tempo and energy, rated for how big a hit it was, and given talking points, so your separation rules just&nbsp;work.<\/p><\/div>\n      <div id=\"traffic\"><span class=\"k\">Adverts<\/span><h3>Traffic and&nbsp;proof-of-play<\/h3><p>Campaigns with dates, plays per day and dayparts book themselves into the log. Export scheduled against actual air time for the&nbsp;client.<\/p><\/div>\n      <div id=\"reports\"><span class=\"k\">Reports<\/span><h3>Returns in one&nbsp;click<\/h3><p>PRS\/PPL music returns, the full as-aired record and a printable log for the studio, as&nbsp;CSV.<\/p><\/div>\n      <div id=\"processor\"><span class=\"k\">eDSP<\/span><h3>A processor on your&nbsp;output<\/h3><p>Pick a format preset and ride one LESS to MORE knob. Gated AGC, a five-band compressor, true-peak limiting and mono-safe width&nbsp;underneath.<\/p><\/div>\n      <div id=\"newshub\"><span class=\"k\">News<\/span><h3>Radio News Hub,&nbsp;connected<\/h3><p>Connect Dropbox once and bulletins arrive and drop into your hour. A stale bulletin is skipped, so yesterday's news never airs. FTP works&nbsp;too.<\/p><\/div>\n      <div id=\"streaming\"><span class=\"k\">Streaming<\/span><h3>Hosted, or your&nbsp;own<\/h3><p>Add hosted streaming at checkout for \u00a310\/mo, with a listen link and a now-playing widget for any website. Or plug in the stream you already&nbsp;have.<\/p><a href=\"https:\/\/radiojingles24.com\/ai-studio\/\" id=\"bundle\">AI Studio imaging goes straight into your&nbsp;library<\/a><\/div>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- ===== 10 watch it work (cards built by the live video script) ===== -->\n<section class=\"ch\" id=\"videos\">\n  <div class=\"wrap\">\n    <div class=\"ch-head\"><span class=\"n\">11<\/span><span>Watch it&nbsp;work<\/span><\/div>\n    <h2>Five short&nbsp;walkthroughs.<\/h2>\n    <div class=\"vgrid\">\n      <div class=\"vcard\" data-video=\"https:\/\/www.youtube.com\/embed\/AQyiDcbctac\" data-n=\"1\" data-icon=\"\" data-title=\"The Library\" data-sub=\"Upload, tag and AI-code your music\"><\/div>\n      <div class=\"vcard\" data-video=\"https:\/\/www.youtube.com\/embed\/FBacZoH5-Ss\" data-n=\"2\" data-icon=\"\" data-title=\"The Planner\" data-sub=\"Build your clocks and the week\"><\/div>\n      <div class=\"vcard\" data-video=\"https:\/\/www.youtube.com\/embed\/Jh6KohvhhSI\" data-n=\"3\" data-icon=\"\" data-title=\"The desk\" data-sub=\"Go live on the On Air desk\"><\/div>\n      <div class=\"vcard\" data-video=\"https:\/\/www.youtube.com\/embed\/jppZbOHsoJI\" data-n=\"4\" data-icon=\"\" data-title=\"Adverts\" data-sub=\"Traffic, breaks and sponsors\"><\/div>\n      <div class=\"vcard\" data-video=\"https:\/\/www.youtube.com\/embed\/4FkZ7hYczTs\" data-n=\"5\" data-icon=\"\" data-title=\"Settings\" data-sub=\"Streaming, AI presenters and more\"><\/div>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- ===== pricing (ids and data-* attributes are read by the live pricing script: do not rename) ===== -->\n<section id=\"pricing\" class=\"config\">\n  <div class=\"wrap\">\n    <div class=\"ch-head\"><span class=\"n\">12<\/span><span>Pricing<\/span><\/div>\n    <h2>Start for \u00a31. Keep it if it earns its&nbsp;place.<\/h2>\n    <p class=\"lede\">Try Broadcast for <b>\u00a31 for 5 days<\/b>, or skip the trial and have everything from day one. Pick a plan, add hosted streaming if you want it, and the total updates as you&nbsp;go.<\/p>\n\n    <div class=\"trial-switch\" id=\"trialSwitch\" role=\"tablist\">\n      <button id=\"tsTrial\" class=\"on\" type=\"button\"><span class=\"ts-t\">Start for&nbsp;\u00a31<\/span><span class=\"ts-s\">5-day trial \u00b7 cancel any&nbsp;time<\/span><\/button>\n      <button id=\"tsNow\" type=\"button\"><span class=\"ts-t\">Start now, no&nbsp;trial<\/span><span class=\"ts-s\">everything live from day&nbsp;one<\/span><\/button>\n    <\/div>\n    <p class=\"switch-note\" id=\"switchNote\"><b>\u00a31 for 5 days<\/b> to test the whole system. The 24\/7 cloud engine, your full AI allowance and voice clones switch on at your first payment on day&nbsp;5.<\/p>\n    <div id=\"slotsBanner\" class=\"slots-banner\" style=\"display:none\"><\/div>\n\n    <div class=\"cfg-step\">\n      <div class=\"cfg-step-head\"><span class=\"cfg-num\">1<\/span> Choose your&nbsp;plan<\/div>\n      <div class=\"plan-row\" id=\"planRow\">\n        <button class=\"plan\" data-plan=\"studio\" data-price=\"29\" data-pid=\"117999\" data-trial=\"0\" data-cloud=\"0\">\n          <div class=\"plan-name\">Studio<\/div>\n          <div class=\"plan-amt\">\u00a329<small>\/mo<\/small><\/div>\n          <div class=\"plan-desc\">The full playout system, streamed live from your&nbsp;browser.<\/div>\n          <ul>\n            <li>Full desk and music&nbsp;scheduler<\/li>\n            <li>Voice tracking, traffic and&nbsp;proof-of-play<\/li>\n            <li>Radio Studio eDSP&nbsp;processor<\/li>\n            <li>Stream from the&nbsp;desk<\/li>\n            <li>25GB storage \u00b7 3&nbsp;seats<\/li>\n            <li>AI presenter, pay as you&nbsp;go<\/li>\n          <\/ul>\n        <\/button>\n        <button class=\"plan sel\" data-plan=\"broadcast\" data-price=\"59\" data-pid=\"117998\" data-pid-notrial=\"118000\" data-trial=\"1\" data-cloud=\"1\">\n          <div class=\"plan-flag\">Recommended<\/div>\n          <div class=\"plan-name\">Broadcast<\/div>\n          <div class=\"plan-amt\">\u00a359<small>\/mo<\/small><\/div>\n          <div class=\"plan-trial\">\u00a31 for 5&nbsp;days<\/div>\n          <div class=\"plan-desc\">Adds the cloud engine: on air 24\/7, no browser&nbsp;needed.<\/div>\n          <ul>\n            <li>Everything in&nbsp;Studio<\/li>\n            <li><b>Cloud engine, 24\/7<\/b><\/li>\n            <li>Desk and cloud&nbsp;handover<\/li>\n            <li>100GB storage \u00b7 unlimited&nbsp;seats<\/li>\n            <li><b>300 AI links a month<\/b> (2 AI hours a&nbsp;day)<\/li>\n            <li>1 custom voice&nbsp;clone<\/li>\n          <\/ul>\n        <\/button>\n        <button class=\"plan\" data-plan=\"pro\" data-price=\"99\" data-pid=\"118002\" data-pid-notrial=\"118006\" data-trial=\"1\" data-cloud=\"1\">\n          <div class=\"plan-name\">Broadcast&nbsp;Pro<\/div>\n          <div class=\"plan-amt\">\u00a399<small>\/mo<\/small><\/div>\n          <div class=\"plan-trial\">\u00a31 for 5&nbsp;days<\/div>\n          <div class=\"plan-desc\">More AI presenting, for a station that talks all&nbsp;day.<\/div>\n          <ul>\n            <li>Everything in&nbsp;Broadcast<\/li>\n            <li><b>About 900 AI links a month<\/b> (6 AI hours a&nbsp;day)<\/li>\n            <li>2 custom voice&nbsp;clones<\/li>\n            <li>Priority&nbsp;support<\/li>\n          <\/ul>\n        <\/button>\n        <button class=\"plan\" data-plan=\"ultra\" data-price=\"149\" data-pid=\"118007\" data-pid-notrial=\"118008\" data-trial=\"1\" data-cloud=\"1\">\n          <div class=\"plan-name\">Broadcast&nbsp;Ultra<\/div>\n          <div class=\"plan-amt\">\u00a3149<small>\/mo<\/small><\/div>\n          <div class=\"plan-trial\">\u00a31 for 5&nbsp;days<\/div>\n          <div class=\"plan-desc\">Near round-the-clock AI&nbsp;presenting.<\/div>\n          <ul>\n            <li>Everything in&nbsp;Pro<\/li>\n            <li><b>About 1,800 AI links a month<\/b> (12 AI hours a&nbsp;day)<\/li>\n            <li>4 custom voice&nbsp;clones<\/li>\n            <li>Priority&nbsp;support<\/li>\n          <\/ul>\n        <\/button>\n      <\/div>\n      <p class=\"net\">Running several stations? <a href=\"https:\/\/radiojingles24.com\/contact-us\/\">Network pricing, let's&nbsp;talk<\/a><\/p>\n    <\/div>\n\n    <div class=\"cfg-step\" id=\"streamStep\">\n      <div class=\"cfg-step-head\"><span class=\"cfg-num\">2<\/span> Add hosted streaming? <span class=\"cfg-opt\">optional<\/span><\/div>\n      <label class=\"stream-toggle\" id=\"streamToggle\">\n        <input type=\"checkbox\" id=\"streamChk\">\n        <span class=\"st-box\"><\/span>\n        <span class=\"st-text\"><b>We host your stream, +\u00a310\/mo<\/b>A share-anywhere listen link, a live web player, and a now-playing widget for your own website with cover art and your AI presenter's song facts. No stream of your own&nbsp;needed.<\/span>\n        <span class=\"st-price\">+\u00a310<small>\/mo<\/small><\/span>\n      <\/label>\n      <p class=\"stream-byo\">Already have a stream (Icecast, SHOUTcast, AzuraCast, Radio.co)? <b>Leave this off.<\/b> Every cloud plan streams to your existing server, with no&nbsp;lock-in.<\/p>\n    <\/div>\n\n    <div class=\"cfg-total\" id=\"cfgTotal\">\n      <div class=\"ct-line\">\n        <div class=\"ct-bits\"><span id=\"ctPlanName\">Broadcast<\/span><span id=\"ctStreamBit\" style=\"display:none\"> + hosted&nbsp;streaming<\/span><\/div>\n        <div class=\"ct-amt\">\n          <span id=\"ctToday\">\u00a31 <small>due today<\/small><\/span>\n          <span id=\"ctThen\">then \u00a359\/mo after your 5-day&nbsp;trial<\/span>\n        <\/div>\n      <\/div>\n      <a href=\"https:\/\/radiojingles24.com\/cart\/?add-to-cart=117998\" class=\"btn\" id=\"ctCta\">Start your \u00a31 trial \u2192<\/a>\n    <\/div>\n    <p id=\"cartPreview\"><\/p>\n      <p style=\"color:#3d3934; font-size:15px; margin-top:14px;\">Already a station? <a href=\"https:\/\/app.radiostudio24.com\/\" style=\"color:#a62a11; font-weight:600;\">Log in to your studio<\/a><\/p>\n\n    <div class=\"terms\" id=\"trial\">\n      <div>\n        <span class=\"k\">During your 5-day&nbsp;trial<\/span>\n        <ul>\n          <li><span class=\"y\">\u2713<\/span><span>The full desk: scheduler, traffic, voice tracking and the eDSP&nbsp;processor<\/span><\/li>\n          <li><span class=\"y\">\u2713<\/span><span>About <b>25 AI presenter links<\/b> to&nbsp;try<\/span><\/li>\n          <li><span class=\"x\">\u2717<\/span><span>Not yet: the cloud engine, voice clones or the full AI&nbsp;allowance<\/span><\/li>\n        <\/ul>\n      <\/div>\n      <div>\n        <span class=\"k\">Switches on at your first payment, day&nbsp;5<\/span>\n        <ul>\n          <li><span class=\"y\">\u2713<\/span><span>The always-on <b>cloud engine, 24\/7<\/b><\/span><\/li>\n          <li><span class=\"y\">\u2713<\/span><span>Your <b>full monthly AI allowance<\/b><\/span><\/li>\n          <li><span class=\"y\">\u2713<\/span><span><b>Custom voice clones<\/b>, switched on for&nbsp;you<\/span><\/li>\n        <\/ul>\n      <\/div>\n    <\/div>\n    <p class=\"aihours-fine\">Every plan is the full playout system. Broadcast, Pro and Ultra start with a \u00a31, 5-day trial, then the monthly price; Studio is billed today. Cancel any time in your members area before your first bill and \u00a31 is all you pay. AI presenter allowances refill each month, and you can top up AI credits from inside the app. Hosted streaming is an optional \u00a310\/mo&nbsp;add-on.<\/p>\n  <\/div>\n<\/section>\n\n<!-- ===== FAQ ===== -->\n<section id=\"faq\">\n  <div class=\"wrap\">\n    <div class=\"ch-head\"><span class=\"n\">13<\/span><span>Questions<\/span><\/div>\n    <h2>Straight&nbsp;answers.<\/h2>\n    <div class=\"qa\">\n      <details><summary>Will the AI make things&nbsp;up?<\/summary><p>No. Weather and travel come from real, verified feeds, and if there is no data it simply isn't mentioned. Times and numbers are locked by a hard gate. Nothing airs until you approve it: every link lands as a draft you can approve, re-take or rewrite, unless you switch on&nbsp;auto-approve.<\/p><\/details>\n      <details><summary>Can I edit what the AI&nbsp;says?<\/summary><p>Always. Open a draft, read the script and rewrite it. It is voiced exactly as you&nbsp;type.<\/p><\/details>\n      <details><summary>Can I voicetrack on my&nbsp;phone?<\/summary><p>Yes. Open <b>app.radiostudio24.com\/voicetrack<\/b> in your phone's browser and sign in. There's no app to install. Your whole show opens as one running order, and one big button walks you through each link: Play, Record, Play next, Stop, Save. If a call comes in, the screen locks or the signal drops, your take is kept on the phone and offered back, and it only says Saved once the station has&nbsp;it.<\/p><\/details>\n      <details><summary>If I close my laptop, does the station&nbsp;stop?<\/summary><p>Not with the cloud engine on: it runs on our servers, independent of your computer. Without it, streaming from the desk stops when you close the tab. The cloud engine comes with Broadcast and&nbsp;above.<\/p><\/details>\n      <details><summary>Will I know if my station goes off&nbsp;air?<\/summary><p>Yes. Turn on silence monitoring and we sample your live stream about once a minute and email you if it is silent or unreachable for a few&nbsp;minutes.<\/p><\/details>\n      <details><summary>Do I need to install&nbsp;anything?<\/summary><p>No. RadioStudio24 runs in your web browser; use Google Chrome. Any reasonably modern PC or Mac and a stable internet connection will&nbsp;do.<\/p><\/details>\n      <details><summary>How does the \u00a31 trial&nbsp;work?<\/summary><p>Broadcast, Pro and Ultra start with a \u00a31, 5-day trial. \u00a31 today gets you the full desk for 5 days with a sample of AI links; after that it is the plan's monthly price. Cancel any time before day 5. The cloud engine switches on when you become a paying&nbsp;customer.<\/p><\/details>\n      <details><summary>\u00a359 is more than I need. Can I pay&nbsp;less?<\/summary><p>Yes. Studio is \u00a329\/mo: the full desk, streamed from your browser, without the 24\/7 cloud engine. Ask and we'll switch you before you're&nbsp;charged.<\/p><\/details>\n      <details><summary>Can more than one person use&nbsp;it?<\/summary><p>Yes. Create presenter logins under Settings, Your team. Studio includes 3 seats; Broadcast is&nbsp;unlimited.<\/p><\/details>\n      <details><summary>Who makes&nbsp;it?<\/summary><p>RadioStudio24 is made by RadioJingles24, the team that has produced jingles and imaging for radio stations since&nbsp;2014.<\/p><\/details>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- ===== final ===== -->\n<section class=\"final\">\n  <div class=\"wrap\">\n    <div class=\"ch-head\"><span class=\"n\">ON&nbsp;AIR<\/span><span>Ready when you&nbsp;are<\/span><\/div>\n    <h2>Your station. <em>On&nbsp;air<\/em> around the&nbsp;clock.<\/h2>\n    <div class=\"btns\">\n      <a href=\"#pricing\" class=\"btn btn-sig\">Start your \u00a31&nbsp;trial<\/a>\n      <a href=\"#hear\" class=\"btn btn-line\">Hear the presenters&nbsp;again<\/a>\n    <\/div>\n    <p class=\"fine\">\u00a31 for 5 days on Broadcast \u00b7 then \u00a359\/mo \u00b7 cancel before day 5 and \u00a31 is all you&nbsp;pay<\/p>\n  <\/div>\n<\/section>\n<footer class=\"foot\"><div class=\"wrap\"><span>RadioStudio24 by <a href=\"https:\/\/radiojingles24.com\">RadioJingles24<\/a><\/span><span>Screens show Riverside FM, a made-up&nbsp;station.<\/span><\/div><\/footer>\n\n<div class=\"sticky\" id=\"hearSticky\" aria-hidden=\"true\">\n  <a href=\"#hear\" class=\"s1\" tabindex=\"-1\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M8 5.5v13l11-6.5z\"\/><\/svg>Hear the&nbsp;demos<\/a>\n  <a href=\"#pricing\" class=\"s2\" tabindex=\"-1\">\u00a31&nbsp;trial<\/a>\n<\/div>\n\n<\/div><!-- \/#rs24 -->\n\n<script type=\"application\/json\" id=\"hearData\">{\"folders\":{\"backannounce-segue\":\"https:\/\/app.radiostudio24.com\/media\/demos\/presenters-20261007c\/\",\"personality-segue\":\"https:\/\/app.radiostudio24.com\/media\/demos\/presenters-20261007b\/\",\"travel-over-bed\":\"https:\/\/app.radiostudio24.com\/media\/demos\/presenters-20261007\/\",\"weather-over-bed\":\"https:\/\/app.radiostudio24.com\/media\/demos\/presenters-20261007\/\"},\"voices\":[{\"id\":\"mark\",\"name\":\"Mark\",\"accent\":\"British\",\"persona\":\"Warm and upbeat, with a dry line\",\"clips\":{\"backannounce-segue\":{\"file\":\"mark-backannounce-segue.mp3\",\"ok\":true,\"duration\":20.09,\"script\":\"Right Said Fred with a bit of cheeky confidence there \u2014 I'm Too Sexy. It's just gone quarter past eight, and next up something altogether more tender: Jewel with You Were Meant for Me, here on Riverside FM.\",\"songs\":[{\"name\":\"Right Said Fred \u2014 I'm Too Sexy\",\"from_s\":154.96,\"to_s\":167.35,\"seconds\":12.39},{\"name\":\"Jewel \u2014 You Were Meant for Me\",\"from_s\":0.45,\"to_s\":8.15,\"seconds\":7.7}],\"plan\":{\"t_voice\":3.5,\"voice_s\":10.99,\"t_b\":12.39,\"t_vocal\":14.64,\"t_end\":20.09}},\"personality-segue\":{\"file\":\"mark-personality-segue.mp3\",\"ok\":true,\"duration\":20.099,\"script\":\"I'm Mark, here through to half ten. And if your weekend needs a lift, Riverside FM's Weekend Feel-Good Classics is on every Saturday and Sunday from nine \u2014 two days of proper dancefloor gold.\",\"songs\":[{\"name\":\"Shabba Ranks with Chevelle Franklin \u2014 Mr. Loverman\",\"from_s\":198.25,\"to_s\":209.099,\"seconds\":10.85},{\"name\":\"P!nk \u2014 So What\",\"from_s\":0.35,\"to_s\":9.6,\"seconds\":9.25}],\"plan\":{\"t_voice\":3.5,\"voice_s\":10.999,\"t_b\":10.849,\"t_vocal\":14.649,\"t_end\":20.099}},\"travel-over-bed\":{\"file\":\"mark-travel-over-bed.mp3\",\"ok\":true,\"duration\":14.767,\"script\":\"A couple of things to watch out for on the roads around Wakefield and Leeds. There's roadworks on the M1 near junction 44 at Leeds South, and also on Wetherby Road in the Leeds Ringroad at Shadwell. That's the latest travel.\",\"songs\":[{\"name\":\"Des'ree \u2014 You Gotta Be\",\"from_s\":0.2,\"to_s\":14.967,\"seconds\":14.767,\"part\":\"instrumental intro\"}]},\"weather-over-bed\":{\"file\":\"mark-weather-over-bed.mp3\",\"ok\":true,\"duration\":11.595,\"script\":\"Cloud's going to stick around Wakefield through Wednesday, with highs reaching about thirteen degrees. As we head into Wednesday evening it'll turn quite chilly, dropping down to around seven degrees overnight.\",\"songs\":[{\"name\":\"Des'ree \u2014 You Gotta Be\",\"from_s\":0.2,\"to_s\":11.795,\"seconds\":11.595,\"part\":\"instrumental intro\"}]}}},{\"id\":\"lucy\",\"name\":\"Lucy\",\"accent\":\"British\",\"persona\":\"Warm afternoon company\",\"clips\":{\"backannounce-segue\":{\"file\":\"lucy-backannounce-segue.mp3\",\"ok\":true,\"duration\":25.452,\"script\":\"Right Said Fred with one that made everyone lose their minds on the dancefloor \u2014 I'm Too Sexy. Coming up after that, Jewel with something altogether softer: You Were Meant for Me. It's just gone twenty to three, here on Riverside FM.\",\"songs\":[{\"name\":\"Right Said Fred \u2014 I'm Too Sexy\",\"from_s\":149.598,\"to_s\":167.35,\"seconds\":17.75},{\"name\":\"Jewel \u2014 You Were Meant for Me\",\"from_s\":0.45,\"to_s\":8.15,\"seconds\":7.7}],\"plan\":{\"t_voice\":3.5,\"voice_s\":16.352,\"t_b\":17.752,\"t_vocal\":20.002,\"t_end\":25.452}},\"personality-segue\":{\"file\":\"lucy-personality-segue.mp3\",\"ok\":true,\"duration\":19.615,\"script\":\"I'm Lucy, and it's twenty to three here on Riverside FM. Don't forget \u2014 this Saturday and Sunday from nine, we've got the Weekend Feel-Good Classics: two days of pure dancefloor gold.\",\"songs\":[{\"name\":\"Stereophonics \u2014 Just Looking\",\"from_s\":238.1,\"to_s\":249.265,\"seconds\":11.16},{\"name\":\"Deep Blue Something \u2014 Breakfast at Tiffany's\",\"from_s\":0.05,\"to_s\":8.5,\"seconds\":8.45}],\"plan\":{\"t_voice\":3.5,\"voice_s\":10.515,\"t_b\":11.165,\"t_vocal\":14.165,\"t_end\":19.615}},\"travel-over-bed\":{\"file\":\"lucy-travel-over-bed.mp3\",\"ok\":true,\"duration\":14.883,\"script\":\"A couple of things to watch out for on the roads around Wakefield and Leeds. There's roadworks on the M1 near junction 44 at Leeds South, and also on Wetherby Road in the Leeds Ringroad at Shadwell. That's the latest travel.\",\"songs\":[{\"name\":\"Des'ree \u2014 You Gotta Be\",\"from_s\":0.2,\"to_s\":15.083,\"seconds\":14.883,\"part\":\"instrumental intro\"}]},\"weather-over-bed\":{\"file\":\"lucy-weather-over-bed.mp3\",\"ok\":true,\"duration\":12.405,\"script\":\"Cloud's going to stick around Wakefield through Wednesday, with highs reaching about thirteen degrees. As we head into Wednesday evening it'll turn quite chilly, dropping down to around seven degrees overnight.\",\"songs\":[{\"name\":\"Des'ree \u2014 You Gotta Be\",\"from_s\":0.2,\"to_s\":12.605,\"seconds\":12.405,\"part\":\"instrumental intro\"}]}}},{\"id\":\"guy\",\"name\":\"Guy\",\"accent\":\"British\",\"persona\":\"Relaxed, dry and knows his records\",\"clips\":{\"backannounce-segue\":{\"file\":\"guy-backannounce-segue.mp3\",\"ok\":true,\"duration\":22.262,\"script\":\"That was Right Said Fred with one of the nineties' most ridiculous earworms. Coming up to twenty past eight here, and next we've got Jewel with something altogether softer \u2014 You Were Meant for Me on Riverside FM.\",\"songs\":[{\"name\":\"Right Said Fred \u2014 I'm Too Sexy\",\"from_s\":152.788,\"to_s\":167.35,\"seconds\":14.56},{\"name\":\"Jewel \u2014 You Were Meant for Me\",\"from_s\":0.45,\"to_s\":8.15,\"seconds\":7.7}],\"plan\":{\"t_voice\":3.5,\"voice_s\":13.162,\"t_b\":14.562,\"t_vocal\":16.812,\"t_end\":22.262}},\"personality-segue\":{\"file\":\"guy-personality-segue.mp3\",\"ok\":true,\"duration\":20.436,\"script\":\"I'm Guy with you on Riverside FM. Quick heads up: our Weekend Feel-Good Classics starts Saturday and Sunday mornings at nine \u2014 two days of the tracks that got you moving. Worth setting the alarm for.\",\"songs\":[{\"name\":\"Sin\u00e9ad O'Connor \u2014 Nothing Compares 2 U\",\"from_s\":277.55,\"to_s\":288.636,\"seconds\":11.09},{\"name\":\"Rozalla \u2014 Everybody's Free (To Feel Good)\",\"from_s\":0.1,\"to_s\":9.45,\"seconds\":9.35}],\"plan\":{\"t_voice\":3.5,\"voice_s\":11.336,\"t_b\":11.086,\"t_vocal\":14.986,\"t_end\":20.436}},\"travel-over-bed\":{\"file\":\"guy-travel-over-bed.mp3\",\"ok\":true,\"duration\":13.102,\"script\":\"A couple of things to watch out for on the roads around Wakefield and Leeds. There's roadworks on the M1 near junction 44 at Leeds South, and also on Wetherby Road in the Leeds Ringroad at Shadwell. That's the latest travel.\",\"songs\":[{\"name\":\"Des'ree \u2014 You Gotta Be\",\"from_s\":0.2,\"to_s\":13.302,\"seconds\":13.102,\"part\":\"instrumental intro\"}]},\"weather-over-bed\":{\"file\":\"guy-weather-over-bed.mp3\",\"ok\":true,\"duration\":13.017,\"script\":\"Cloud's going to stick around Wakefield through Wednesday, with highs reaching about thirteen degrees. As we head into Wednesday evening it'll turn quite chilly, dropping down to around seven degrees overnight.\",\"songs\":[{\"name\":\"Des'ree \u2014 You Gotta Be\",\"from_s\":0.2,\"to_s\":13.217,\"seconds\":13.017,\"part\":\"instrumental intro\"}]}}},{\"id\":\"crofty\",\"name\":\"Crofty\",\"accent\":\"Scottish\",\"persona\":\"High energy, straight to the point\",\"clips\":{\"backannounce-segue\":{\"file\":\"crofty-backannounce-segue.mp3\",\"ok\":true,\"duration\":17.042,\"script\":\"That was Timbaland and OneRepublic with Apologize. It's just gone twenty past ten, and Kelly Marie's coming up next with Feels Like I'm in Love, here on Riverside FM.\",\"songs\":[{\"name\":\"Timbaland with OneRepublic \u2014 Apologize\",\"from_s\":168.208,\"to_s\":176.8,\"seconds\":8.59},{\"name\":\"Kelly Marie \u2014 Feels Like I'm in Love\",\"from_s\":0.45,\"to_s\":8.9,\"seconds\":8.45}],\"plan\":{\"t_voice\":3.5,\"voice_s\":7.942,\"t_b\":8.592,\"t_vocal\":11.592,\"t_end\":17.042}},\"personality-segue\":{\"file\":\"crofty-personality-segue.mp3\",\"ok\":true,\"duration\":19.211,\"script\":\"I'm Crofty, and you're with me through till one o'clock. Don't forget \u2014 Riverside FM's Weekend Feel-Good Classics kicks off Saturday and Sunday from nine. Two days of proper dancefloor gold.\",\"songs\":[{\"name\":\"Bloodhound Gang \u2014 The Bad Touch\",\"from_s\":240.8,\"to_s\":251.511,\"seconds\":10.71},{\"name\":\"Kim Wilde \u2014 You Came\",\"from_s\":0.35,\"to_s\":8.85,\"seconds\":8.5}],\"plan\":{\"t_voice\":3.5,\"voice_s\":10.111,\"t_b\":10.711,\"t_vocal\":13.761,\"t_end\":19.211}},\"travel-over-bed\":{\"file\":\"crofty-travel-over-bed.mp3\",\"ok\":true,\"duration\":12.531,\"script\":\"A couple of things to watch out for on the roads around Wakefield and Leeds. There's roadworks on the M1 near junction 44 at Leeds South, and also on Wetherby Road in the Leeds Ringroad at Shadwell. That's the latest travel.\",\"songs\":[{\"name\":\"Des'ree \u2014 You Gotta Be\",\"from_s\":0.2,\"to_s\":12.731,\"seconds\":12.531,\"part\":\"instrumental intro\"}]},\"weather-over-bed\":{\"file\":\"crofty-weather-over-bed.mp3\",\"ok\":true,\"duration\":11.993,\"script\":\"Cloud's going to stick around Wakefield through Wednesday, with highs reaching about thirteen degrees. As we head into Wednesday evening it'll turn quite chilly, dropping down to around seven degrees overnight.\",\"songs\":[{\"name\":\"Des'ree \u2014 You Gotta Be\",\"from_s\":0.2,\"to_s\":12.193,\"seconds\":11.993,\"part\":\"instrumental intro\"}]}}}]}<\/script>\n<script>\n\/* AI presenter demo console (2026-10-07). One audio element, one sound at a time.\n   Folders are per clip type (hearData.folders). A clip whose file is not there (HEAD not 200) is hidden for that presenter. *\/\n(function(){\n  var root = document.getElementById('desk'); if(!root) return;\n  var D; try { D = JSON.parse(document.getElementById('hearData').textContent); } catch(e){ return; }\n  var ORDER = ['backannounce-segue', 'personality-segue', 'travel-over-bed', 'weather-over-bed'];\n  var KIND = {\n    'backannounce-segue': {name:'Back-announce', long:'Back-announces the song that just played, gives the time and talks up the next one over its intro.'},\n    'personality-segue':  {name:'Personality link', long:'A link from the station notes, between two songs.'},\n    'travel-over-bed':    {name:'Travel', long:'Live travel for Wakefield and Leeds, over a music bed.'},\n    'weather-over-bed':   {name:'Weather', long:'The Met Office forecast for Wakefield, over a music bed.'}\n  };\n  var audio = document.getElementById('hwAudio'), big = document.getElementById('hwBig');\n  var elNow = document.getElementById('hwNow'), elDesc = document.getElementById('hwDesc'), elTime = document.getElementById('hwTime');\n  var tl = document.getElementById('hwTl'), elSongs = document.getElementById('hwSongs'), elFit = document.getElementById('hwFit');\n  var elScript = document.getElementById('hwScript'), elSum = document.getElementById('hwScriptSum');\n  var pBtns = root.querySelectorAll('button.chp'), kBtns = root.querySelectorAll('button.kd');\n  var cur = {v: D.voices[0].id, k: null}, head = null, loaded = '';\n\n  function voice(id){ for(var i=0;i<D.voices.length;i++) if(D.voices[i].id===id) return D.voices[i]; return D.voices[0]; }\n  function has(v, k){ var c = (voice(v).clips || {})[k]; return !!(c && c.ok); }\n  function kindsFor(v){ return ORDER.filter(function(k){ return has(v, k); }); }\n  function clip(){ return cur.k ? (voice(cur.v).clips || {})[cur.k] : null; }\n  function src(c){ return D.folders[cur.k] + c.file; }\n  function key(){ return cur.v + '|' + cur.k; }\n  function fmt(s){ s = Math.max(0, Math.round(s||0)); return Math.floor(s\/60) + ':' + ('0' + s%60).slice(-2); }\n  function clean(t){ return String(t||'').replace(\/\\s*[\u2014\u2013]\\s*\/g, ', '); }\n  function song(n){ var p = String(n||'').split(\/\\s+[\u2014\u2013-]\\s+\/); return p.length > 1 ? p[0] + ', ' + p.slice(1).join(' ') : String(n||''); }\n  function mk(tag, cls, txt){ var e = document.createElement(tag); if(cls) e.className = cls; if(txt != null) e.textContent = txt; return e; }\n  function lane(cls, label, a, b, dur){\n    var l = mk('div', 'lane ' + cls), bar = mk('b', '', label);\n    bar.style.left = (100*a\/dur) + '%'; bar.style.width = Math.max(1.5, 100*(b-a)\/dur) + '%';\n    l.appendChild(bar); return l;\n  }\n  function row(k, s, d){ var li = mk('li'); li.appendChild(mk('span', 'k', k)); li.appendChild(mk('span', 's', s)); li.appendChild(mk('span', 'd', d)); elSongs.appendChild(li); }\n  function fixKind(){ var ks = kindsFor(cur.v); if(ks.indexOf(cur.k) < 0) cur.k = ks[0] || null; }\n  function render(){\n    fixKind();\n    var v = voice(cur.v), c = clip(), ks = kindsFor(cur.v);\n    pBtns.forEach(function(b){ var id = b.getAttribute('data-v'); b.setAttribute('aria-pressed', id === cur.v ? 'true' : 'false'); b.hidden = !kindsFor(id).length; });\n    kBtns.forEach(function(b){ var k = b.getAttribute('data-k'); b.setAttribute('aria-pressed', k === cur.k ? 'true' : 'false'); b.hidden = ks.indexOf(k) < 0; });\n    root.querySelector('.kinds').style.gridTemplateColumns = 'repeat(' + Math.max(1, ks.length) + ',minmax(0,1fr))';\n    elNow.textContent = v.name + ' '; tl.innerHTML = ''; elSongs.innerHTML = ''; elFit.textContent = ''; elScript.textContent = '';\n    if(!c){ elDesc.textContent = ''; return; }\n    var k = KIND[cur.k];\n    elNow.appendChild(mk('span', '', '\u00b7 ' + k.name));\n    elDesc.textContent = k.long;\n    elSum.textContent = 'Read what ' + v.name + ' said';\n    elScript.textContent = '\u201c' + clean(c.script) + '\u201d';\n    var dur = c.duration || 1, s = c.songs || [];\n    if(c.plan && s.length === 2){\n      var p = c.plan, vEnd = p.t_voice + p.voice_s;\n      tl.appendChild(lane('out', 'Last song', 0, s[0].seconds, dur));\n      tl.appendChild(lane('voice', v.name, p.t_voice, vEnd, dur));\n      var inl = lane('in', 'Next song', p.t_b, p.t_end, dur); tl.appendChild(inl);\n      var mark = mk('i', 'vocal'); mark.style.left = (100*(p.t_vocal - p.t_b)\/(p.t_end - p.t_b)) + '%'; inl.firstChild.appendChild(mark);\n      var gap = p.t_vocal - vEnd;\n      if(gap >= 0 && gap <= 0.5) elFit.textContent = 'Last word, then the vocal ' + gap.toFixed(2) + ' s later.';\n      row('Out of', song(s[0].name), 'last ' + s[0].seconds.toFixed(1) + ' s');\n      row('Into', song(s[1].name), 'first ' + s[1].seconds.toFixed(1) + ' s');\n    } else if(s.length){\n      tl.appendChild(lane('bed', 'Music bed', 0, s[0].seconds, dur));\n      row('Bed', song(s[0].name) + (s[0].part ? ' (' + s[0].part + ')' : ''), s[0].seconds.toFixed(1) + ' s');\n    }\n    head = mk('i', 'head'); tl.appendChild(head);\n    tick();\n  }\n  function setPlaying(on){\n    root.classList.toggle('playing', on);\n    big.setAttribute('aria-label', on ? 'Pause' : 'Play');\n    pBtns.forEach(function(b){ b.classList.toggle('playing', on && b.getAttribute('data-v') === cur.v); });\n  }\n  function play(){\n    var c = clip(); if(!c) return;\n    if(loaded !== key()){ audio.src = src(c); loaded = key(); }\n    var pr = audio.play(); if(pr && pr.catch) pr.catch(function(){ setPlaying(false); });\n  }\n  function choose(v, k){\n    if(v === cur.v && k === cur.k){ if(audio.paused) play(); else audio.pause(); return; }\n    audio.pause(); cur.v = v; cur.k = k; render(); play();\n  }\n  pBtns.forEach(function(b){ b.addEventListener('click', function(){ choose(b.getAttribute('data-v'), cur.k); }); });\n  kBtns.forEach(function(b){ b.addEventListener('click', function(){ choose(cur.v, b.getAttribute('data-k')); }); });\n  big.addEventListener('click', function(){ if(audio.paused) play(); else audio.pause(); });\n  audio.addEventListener('play', function(){ setPlaying(true); });\n  audio.addEventListener('pause', function(){ setPlaying(false); });\n  audio.addEventListener('ended', function(){ setPlaying(false); tick(); });\n  audio.addEventListener('error', function(){\n    \/\/ the file went missing after the page loaded: hide that clip for this presenter\n    var c = clip(); if(c){ c.ok = false; } audio.removeAttribute('src'); loaded = ''; setPlaying(false); render();\n  });\n  \/\/ one sound at a time on the whole page: if any other audio or video starts, this one stops\n  document.addEventListener('play', function(e){ if(e.target !== audio && !audio.paused) audio.pause(); }, true);\n  function tick(){\n    var c = clip(), d = (audio.duration && isFinite(audio.duration)) ? audio.duration : (c ? c.duration : 0);\n    var t = loaded === key() ? audio.currentTime : 0;\n    if(head) head.style.left = d ? Math.min(100, 100*t\/d) + '%' : '0';\n    elTime.textContent = fmt(t) + ' \/ ' + fmt(d);\n  }\n  (function loop(){ if(!audio.paused) tick(); requestAnimationFrame(loop); })();\n  tl.addEventListener('click', function(e){\n    var c = clip(); if(!c) return; var r = tl.getBoundingClientRect(), f = Math.min(1, Math.max(0, (e.clientX - r.left) \/ r.width));\n    if(loaded !== key() || audio.paused) play();\n    var go = function(){ var d = (audio.duration && isFinite(audio.duration)) ? audio.duration : c.duration; audio.currentTime = f * d; tick(); };\n    if(audio.readyState >= 1) go(); else audio.addEventListener('loadedmetadata', go, {once:true});\n  });\n  render();\n\n  \/\/ at load: HEAD every clip in its folder (a clip type appears the moment its file is up, and hides if it is gone),\n  \/\/ and refresh scripts, songs and timings from each folder's own manifest\n  if(window.fetch && window.Promise){\n    var checks = [];\n    D.voices.forEach(function(v){ ORDER.forEach(function(k){ var c = v.clips[k]; if(!c) return;\n      checks.push(fetch(D.folders[k] + c.file, {method:'HEAD', credentials:'omit', cache:'no-store'}).then(function(r){ c.ok = r.ok; }).catch(function(){})); }); });\n    var folders = {}; ORDER.forEach(function(k){ (folders[D.folders[k]] = folders[D.folders[k]] || []).push(k); });\n    Object.keys(folders).forEach(function(f){\n      checks.push(fetch(f + 'demo-manifest.json', {credentials:'omit'}).then(function(r){ if(!r.ok) throw 0; return r.json(); }).then(function(m){\n        (m.clips || []).forEach(function(c){ if(folders[f].indexOf(c.kind) < 0) return; D.voices.forEach(function(v){ var x = v.clips[c.kind];\n          if(x && x.file === c.file){ ['script','duration','songs','plan'].forEach(function(n){ if(c[n] != null) x[n] = c[n]; }); } }); });\n      }).catch(function(){}));\n    });\n    Promise.all(checks).then(function(){ if(audio.paused) render(); });\n  }\n\n  \/\/ phones: a sticky \"Hear the demos \/ \u00a31 trial\" bar once the console is off screen, hidden over pricing\n  var bar = document.getElementById('hearSticky'), pricing = document.getElementById('pricing');\n  if(bar && 'IntersectionObserver' in window){\n    var conVis = true, priceVis = false;\n    var upd = function(){\n      var on = !conVis && !priceVis;\n      bar.classList.toggle('on', on); bar.setAttribute('aria-hidden', on ? 'false' : 'true');\n      bar.querySelectorAll('a').forEach(function(a){ a.tabIndex = on ? 0 : -1; });\n      var ck = document.getElementById('cookie-law-info-bar');\n      bar.style.bottom = (ck && ck.offsetHeight && getComputedStyle(ck).display !== 'none') ? ck.offsetHeight + 'px' : '0';\n    };\n    new IntersectionObserver(function(es){ es.forEach(function(e){ conVis = e.isIntersecting; }); upd(); }).observe(document.querySelector('#rs24 .intro'));\n    if(pricing) new IntersectionObserver(function(es){ es.forEach(function(e){ priceVis = e.isIntersecting; }); upd(); }).observe(pricing);\n  }\n})();\n\n\/* Chapter nav: pinned directly under whatever the WordPress theme keeps fixed at the top (its header, the admin bar),\n   re-measured every frame it matters, so the two never overlap even when the theme header hides on scroll. *\/\n(function(){\n  var rs = document.getElementById('rs24'), ph = document.getElementById('cnavPh'), nav = document.getElementById('cnav');\n  if(!rs || !ph || !nav) return;\n  var links = [].slice.call(nav.querySelectorAll('a[href^=\"#\"]')), maxHead = 0, ticking = false;\n  function fixedTop(){\n    \/\/ bottom edge of fixed\/sticky things the theme pins to the top of the window (never anything inside #rs24)\n    var b = 0, seen = [], xs = [8, innerWidth \/ 2, innerWidth - 8];\n    var named = [].slice.call(document.querySelectorAll('#header-outer,#wpadminbar,#masthead,.site-header,body > header'));\n    xs.forEach(function(x){ (document.elementsFromPoint ? document.elementsFromPoint(x, 1) : []).forEach(function(el){ named.push(el); }); });\n    named.forEach(function(el){\n      for(var n = el; n && n !== document.body && n !== document.documentElement; n = n.parentElement){\n        if(rs.contains(n) || seen.indexOf(n) >= 0) continue; seen.push(n);\n        var cs = getComputedStyle(n);\n        if((cs.position === 'fixed' || cs.position === 'sticky') && cs.display !== 'none' && cs.visibility !== 'hidden'){\n          var r = n.getBoundingClientRect();\n          if(r.top <= 1 && r.bottom > b && r.height < innerHeight \/ 2) b = r.bottom;\n        }\n      }\n    });\n    return Math.max(0, Math.round(b));\n  }\n  function update(){\n    ticking = false;\n    var top = fixedTop(), p = ph.getBoundingClientRect(), r = rs.getBoundingClientRect(), h = ph.offsetHeight;\n    if(top > maxHead) maxHead = top;\n    var pin = p.top < top && r.bottom > top + h;\n    nav.classList.toggle('pinned', pin);\n    \/\/ the visible page box (excludes scrollbar gutters), and the offset fixed boxes get from them\n    var hb = document.documentElement.getBoundingClientRect(), L = Math.max(r.left, hb.left), R = Math.min(r.right, hb.right);\n    nav.style.top = pin ? top + 'px' : ''; nav.style.width = pin ? (R - L) + 'px' : '';\n    if(pin){ nav.style.left = L + 'px'; var d = nav.getBoundingClientRect().left - L; if(d) nav.style.left = (L - d) + 'px'; } else nav.style.left = '';\n    \/\/ highlight the chapter in view\n    var line = top + h + 40, on = null;\n    links.forEach(function(a){ var t = document.getElementById(a.getAttribute('href').slice(1)); if(t && t.getBoundingClientRect().top <= line) on = a; });\n    links.forEach(function(a){ a.classList.toggle('on', a === on && !a.classList.contains('go')); });\n  }\n  function req(){ if(!ticking){ ticking = true; requestAnimationFrame(update); } }\n  addEventListener('scroll', req, {passive:true}); addEventListener('resize', req); addEventListener('load', req); update();\n  \/\/ in-page links: land the chapter below the theme header and this nav (the theme's own anchor animation does not know about the nav)\n  rs.addEventListener('click', function(e){\n    var a = e.target.closest ? e.target.closest('a[href^=\"#\"]') : null; if(!a) return;\n    var id = a.getAttribute('href').slice(1), t = id && document.getElementById(id); if(!t || !rs.contains(t)) return;\n    e.preventDefault(); e.stopPropagation();\n    var off = Math.max(maxHead, fixedTop()) + ph.offsetHeight + 12;\n    var reduce = window.matchMedia && matchMedia('(prefers-reduced-motion: reduce)').matches;\n    scrollTo({top: t.getBoundingClientRect().top + pageYOffset - off, behavior: reduce ? 'auto' : 'smooth'});\n    if(history.replaceState) history.replaceState(null, '', '#' + id);\n  });\n})();\n<\/script>\n<script>\n(function(){\n  \/\/ Build a robust YouTube embed: privacy-mode host + YouTube's full permissions\n  \/\/ list (encrypted-media is REQUIRED for playback \u2014 leaving it out causes the\n  \/\/ \"player configuration error 153\"). Accepts a watch\/embed\/youtu.be URL or a bare id.\n  function ytFrame(url){\n    var m = (url||'').match(\/(?:embed\\\/|v=|youtu\\.be\\\/)([A-Za-z0-9_-]{6,})\/);\n    var id = m ? m[1] : url;\n    var src = 'https:\/\/www.youtube-nocookie.com\/embed\/'+id+'?autoplay=1&rel=0&playsinline=1&modestbranding=1';\n    return '<iframe src=\"'+src+'\" title=\"RadioStudio24 video\" frameborder=\"0\" '\n      + 'allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" '\n      + 'allowfullscreen><\/iframe>';\n  }\n  document.querySelectorAll('#videos .vcard').forEach(function(c){\n    var url=c.getAttribute('data-video');\n    c.innerHTML = '<span class=\"vnum\">'+(c.getAttribute('data-n')||'')+'<\/span>'\n      + '<span class=\"vic\">'+(c.getAttribute('data-icon')||'')+'<\/span>'\n      + '<span class=\"vgo\">&#9654; Watch<\/span>'\n      + '<div class=\"vfoot\"><div class=\"vt\">'+(c.getAttribute('data-title')||'')+'<\/div><div class=\"vs\">'+(c.getAttribute('data-sub')||'')+'<\/div><\/div>';\n    if(!url) return;\n    c.addEventListener('click', function(){ c.innerHTML = ytFrame(url); });\n  });\n  \/\/ hero tour video (top of the page): click to play; shows \"Coming soon\" until a URL is set\n  document.querySelectorAll('.hero-video .vhero').forEach(function(c){\n    var url=c.getAttribute('data-video');\n    c.innerHTML = '<div class=\"vlabel\">'+(c.getAttribute('data-title')||'')+'<\/div>';\n    if(!url){ c.classList.add('noembed'); return; }\n    c.addEventListener('click', function(){\n      c.classList.add('playing');   \/\/ hide the \u25b6 overlay once it's playing\n      \/\/ a direct video file plays inline; anything else is treated as a YouTube embed\n      c.innerHTML = \/\\.(mp4|webm|mov)(\\?|#|$)\/i.test(url)\n        ? '<video src=\"'+url+'\" controls autoplay playsinline preload=\"metadata\"><\/video>'\n        : ytFrame(url);\n    });\n  });\n})();\n<\/script>\n<script>\n(function(){\n  \/\/ \u25b6\u25b6 FILL THESE with the demo audio URLs (host the MP3s on the site). The\n  \/\/    section shows itself automatically as soon as any URL is set.\n  var DEMOS = {\n    dj: [\n      { label:\"Breakfast link\", url:\"\" },\n      { label:\"Song intro\", url:\"\" },\n      { label:\"Back-announce\", url:\"\" },\n      { label:\"Weather read\", url:\"\" }\n    ],\n    travel: [\n      { label:\"Travel \u2014 motorway\", url:\"\" },\n      { label:\"Travel \u2014 local roads\", url:\"\" }\n    ]\n  };\n  var audio = new Audio(), cur = null;\n  audio.addEventListener(\"ended\", function(){ if(cur){ reset(cur); cur=null; } });\n  function reset(b){ b.innerHTML = \"\u25b6  \" + b.dataset.label; b.style.background=\"var(--panel)\"; b.style.color=\"var(--ink)\"; b.style.borderColor=\"var(--line2)\"; }\n  function mk(d){\n    var b=document.createElement(\"button\"); b.type=\"button\"; b.dataset.label=d.label;\n    b.style.cssText=\"cursor:pointer;border:1px solid var(--line2);background:var(--panel);color:var(--ink);padding:12px 20px;border-radius:999px;font-size:15px;font-weight:600;box-shadow:0 1px 3px rgba(0,0,0,.06)\";\n    b.innerHTML=\"\u25b6  \"+d.label;\n    b.onclick=function(){\n      if(cur===b){ audio.pause(); reset(b); cur=null; return; }\n      if(cur) reset(cur);\n      audio.src=d.url; audio.play().catch(function(){});\n      b.innerHTML=\"\u2759\u2759  \"+d.label; b.style.background=\"var(--pink)\"; b.style.color=\"#fff\"; b.style.borderColor=\"var(--pink)\";\n      cur=b;\n    };\n    return b;\n  }\n  var dj=DEMOS.dj.filter(function(d){return d.url;}), tv=DEMOS.travel.filter(function(d){return d.url;});\n  if(!dj.length && !tv.length) return;   \/\/ nothing wired yet \u2192 stay hidden\n  dj.forEach(function(d){ document.getElementById(\"demoDJ\").appendChild(mk(d)); });\n  tv.forEach(function(d){ document.getElementById(\"demoTravel\").appendChild(mk(d)); });\n  document.getElementById(\"demos\").style.display=\"\";\n})();\n<\/script>\n<script>\n(function(){\n  var planRow = document.getElementById('planRow');\n  if(!planRow) return;\n  var STREAM_ID = '118009', STREAM_PRICE = 10;\n  var CART = 'https:\/\/radiojingles24.com\/cart\/?add-to-cart=';\n  var SLOTS = { open:true, cap:0, remaining:null };   \/\/ founding-cohort availability\n  \/\/ WooCommerce product IDs live on each plan button (data-pid). Streaming is a\n  \/\/ separate add-on product added as a second cart line when toggled on.\n  var TRIAL = true;   \/\/ slider: true = \u00a31 5-day trial, false = pay full price today (no-trial products)\n  var plan = { key:'broadcast', name:'Broadcast', price:59, cloud:true, canTrial:true,\n               pidTrial:'117998', pidNoTrial:'118000' };\n  var streaming = false;\n  function effTrial(){ return TRIAL && plan.canTrial; }         \/\/ Studio never trials\n  function effPid(){ return effTrial() ? plan.pidTrial : plan.pidNoTrial; }\n  function checkoutURL(){\n    var pid = effPid();\n    if(!pid) return CART;\n    if(streaming && plan.cloud) return CART + pid + ',' + STREAM_ID + '&quantity=1,1';\n    return CART + pid;\n  }\n  function render(){\n    var isTrial = effTrial();\n    var streamAdd = (streaming && plan.cloud) ? STREAM_PRICE : 0;\n    document.getElementById('streamToggle').classList.toggle('on', streamAdd>0);\n    document.getElementById('streamStep').classList.toggle('st-disabled', !plan.cloud);\n    document.getElementById('ctPlanName').textContent = plan.name;\n    document.getElementById('ctStreamBit').style.display = streamAdd ? '' : 'none';\n    \/\/ slider active state + hide the \"\u00a31 for 5 days\" plan badges when no-trial\n    var tt = document.getElementById('tsTrial'), tn = document.getElementById('tsNow');\n    if(tt) tt.classList.toggle('on', TRIAL);\n    if(tn) tn.classList.toggle('on', !TRIAL);\n    document.querySelectorAll('#rs24 .plan').forEach(function(p){\n      if(p.dataset.trial === '1') p.classList.toggle('notrial', !TRIAL);\n    });\n    var sn = document.getElementById('switchNote');\n    if(sn){\n      if(!plan.canTrial)\n        sn.innerHTML = '<b>Studio starts today \u2014 no trial.<\/b> The \u00a31 trial option is on Broadcast, Pro &amp; Ultra (they add the 24\/7 cloud engine).';\n      else if(TRIAL)\n        sn.innerHTML = '<b>\u00a31 for 5 days<\/b>, fully functional to test the whole system &mdash; the <b>24\/7 cloud engine<\/b>, your full AI allowance and voice clones switch on at your first payment on day 5. Want them from <b>day one<\/b>? Flip to <b>no trial<\/b>.';\n      else\n        sn.innerHTML = '<b>No trial \u2014 everything from day one.<\/b> Your first month is billed today and the <b>24\/7 cloud engine<\/b>, full AI allowance and voice clones are live immediately. Cancel any time.';\n    }\n    var cta = document.getElementById('ctCta'),\n        ctToday = document.getElementById('ctToday'), ctThen = document.getElementById('ctThen');\n    cta.href = checkoutURL();\n    \/\/ cart preview \u2014 show exactly what the button drops into the basket\n    var cp = document.getElementById('cartPreview');\n    var bits = [plan.name + (isTrial ? \" (\u00a31 trial)\" : \"\")];\n    if(streamAdd) bits.push(\"Hosted streaming\");\n    cp.textContent = \"\ud83d\uded2 Adds to cart:  \" + bits.join(\"   +   \");\n    if(isTrial){\n      ctToday.innerHTML = \"\u00a3\"+(1 + streamAdd)+\" <small>due today<\/small>\";\n      ctThen.textContent = \"then \u00a3\"+(plan.price + streamAdd)+\"\/mo after your 5-day trial\";\n      cta.textContent = \"Start your \u00a31 trial \u2192\";\n    } else {\n      ctToday.innerHTML = \"\u00a3\"+(plan.price + streamAdd)+\" <small>due today<\/small>\";\n      ctThen.textContent = plan.canTrial\n        ? \"everything live from day one \u00b7 then \u00a3\"+(plan.price + streamAdd)+\"\/mo \u00b7 cancel any time\"\n        : \"then \u00a3\"+(plan.price + streamAdd)+\"\/mo \u00b7 cancel any time\";\n      cta.textContent = plan.canTrial ? \"Start now \u2014 no trial \u2192\" : \"Get started \u2192\";\n    }\n    \/\/ founding-cohort gate \u2014 close the button once the group is full\n    if(!SLOTS.open){\n      cta.textContent = \"Founding places full\";\n      cta.removeAttribute('href'); cta.style.opacity = \".55\"; cta.style.pointerEvents = \"none\";\n    } else { cta.style.opacity = \"\"; cta.style.pointerEvents = \"\"; }\n  }\n  document.querySelectorAll('#rs24 .plan').forEach(function(b){\n    b.addEventListener('click', function(){\n      document.querySelectorAll('#rs24 .plan').forEach(function(x){x.classList.remove('sel');});\n      b.classList.add('sel');\n      plan.key = b.dataset.plan; plan.name = b.querySelector('.plan-name').textContent;\n      plan.price = +b.dataset.price; plan.canTrial = b.dataset.trial === '1';\n      plan.cloud = b.dataset.cloud === '1';\n      plan.pidTrial = b.dataset.pid; plan.pidNoTrial = b.dataset.pidNotrial || b.dataset.pid;\n      if(!plan.cloud){ streaming = false; var c = document.getElementById('streamChk'); if(c) c.checked = false; }\n      render();\n    });\n  });\n  \/\/ trial \/ no-trial slider\n  var tsTrial = document.getElementById('tsTrial'), tsNow = document.getElementById('tsNow');\n  if(tsTrial) tsTrial.addEventListener('click', function(){ TRIAL = true; render(); });\n  if(tsNow) tsNow.addEventListener('click', function(){ TRIAL = false; render(); });\n  var chk = document.getElementById('streamChk');\n  if(chk) chk.addEventListener('change', function(){\n    if(!plan.cloud){ chk.checked = false; return; }\n    streaming = chk.checked; render();\n  });\n  render();\n\n  \/\/ founding-cohort availability \u2014 read live from the app (cross-origin)\n  fetch('https:\/\/app.radiostudio24.com\/api\/v1\/slots').then(function(r){ return r.json(); }).then(function(d){\n    if(!d) return;\n    SLOTS = d;\n    var b = document.getElementById('slotsBanner');\n    if(b && d.cap > 0){\n      b.style.display = '';\n      if(d.open){ b.className = 'slots-banner'; b.innerHTML = '\ud83d\udd25 Founding launch \u2014 only <b>' + d.remaining + '<\/b> place' + (d.remaining===1?'':'s') + ' left'; }\n      else {\n        b.className = 'slots-banner full';\n        b.innerHTML = 'Founding places are full for now \u2014 join the waitlist and we\u2019ll email you the moment one opens:'\n          + '<form id=\"wlForm\" style=\"display:flex;gap:8px;max-width:430px;margin:12px auto 0;flex-wrap:wrap;justify-content:center\">'\n          + '<input id=\"wlEmail\" type=\"email\" required placeholder=\"you@yourstation.com\" style=\"flex:1;min-width:210px;padding:11px 15px;border-radius:999px;border:1px solid var(--line2);font:800 14px var(--sans);color:var(--ink);outline:none\">'\n          + '<button class=\"btn btn-pri\" type=\"submit\" style=\"padding:11px 20px\">Join the waitlist<\/button>'\n          + '<\/form><div id=\"wlMsg\" style=\"margin-top:9px;font-weight:800\"><\/div>';\n        var wf = document.getElementById('wlForm');\n        if(wf) wf.addEventListener('submit', async function(e){\n          e.preventDefault();\n          var em = document.getElementById('wlEmail').value.trim(), wm = document.getElementById('wlMsg');\n          if(!em) return;\n          try{\n            var rr = await fetch('https:\/\/app.radiostudio24.com\/api\/v1\/leads', {method:'POST',\n              headers:{'Content-Type':'application\/json'}, body: JSON.stringify({ email: em, source: 'waitlist' })});\n            if(!rr.ok) throw 0;\n            wf.style.display = 'none';\n            wm.textContent = '\u2713 You\u2019re on the list \u2014 we\u2019ll be in touch the moment a place opens.'; wm.style.color = 'var(--green)';\n          }catch(_){ wm.innerHTML = 'Hmm, that didn\u2019t send. <a href=\"mailto:info@radiojingles24.com?subject=RadioStudio24%20waitlist\">email us to join \u2192<\/a>'; }\n        });\n      }\n    }\n    render();\n  }).catch(function(){});\n})();\n\n\/\/ ===== hero AI ticker: now playing -> AI back-announce =====\n(function(){\n  var say = document.getElementById('adSay'), np = document.getElementById('adNp'), tags = document.getElementById('adTags');\n  if(!say) return;\n  var demos = [\n    { np:\"Roll Away the Stone \u00b7 Mott the Hoople\",\n      say:\"That was Mott the Hoople \u2014 written by Ian Hunter, number two back in '73. Proper glam-rock swagger to carry us toward the half hour\u2026\",\n      tags:[\"song facts\",\"the year\",\"chart run\"] },\n    { np:\"Cruel Summer \u00b7 Taylor Swift\",\n      say:\"Taylor Swift there, Cruel Summer. Bright and 14 degrees out there in Wakefield right now \u2014 gorgeous. More music in a moment\u2026\",\n      tags:[\"now playing\",\"live weather\",\"your town\"] },\n    { np:\"Dancing Queen \u00b7 ABBA\",\n      say:\"ABBA and Dancing Queen! Quick one before we carry on \u2014 it's slow on the M62 westbound near junction 40, so leave yourself a minute\u2026\",\n      tags:[\"live travel\",\"M62 \u00b7 junction 40\",\"into the log\"] },\n    { np:\"Mr. Brightside \u00b7 The Killers\",\n      say:\"The Killers, on the station that never sleeps. Just gone midnight \u2014 you're with me right through till six. Nice and easy from here\u2026\",\n      tags:[\"the hour\",\"the ident\",\"your slogan\"] }\n  ];\n  var reduce = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n  var di = -1;\n  function chips(d){ return d.tags.map(function(t){ return \"<span>\"+t+\"<\/span>\"; }).join(\"\"); }\n  function next(){ di = (di+1) % demos.length; run(); }\n  function run(){\n    var d = demos[di];\n    np.innerHTML = \"Now playing \u2014 <b>\" + d.np + \"<\/b>\";\n    if(reduce){\n      say.textContent = d.say; tags.innerHTML = chips(d);\n      setTimeout(next, 5200); return;\n    }\n    tags.innerHTML = \"\";\n    var full = d.say, i = 0;\n    (function step(){\n      i++;\n      say.innerHTML = full.slice(0,i) + '<span class=\"cur\"><\/span>';\n      if(i < full.length){ setTimeout(step, 20 + Math.random()*34); }\n      else { tags.innerHTML = chips(d); setTimeout(next, 3600); }\n    })();\n  }\n  setTimeout(next, 500);\n})();\n\n\/\/ ===== iframe auto-resize =====\n\/\/ If embedded in an <iframe> on the WordPress site, tell the parent how tall we\n\/\/ are so the frame grows to fit (no inner scrollbar). Harmless as a normal page.\n(function(){\n  function reportHeight(){\n    try{\n      var el = document.getElementById('rs24') || document.body;\n      var h = Math.max(el.scrollHeight, document.body.scrollHeight, document.documentElement.scrollHeight);\n      parent.postMessage({ rs24height: h }, \"*\");\n    }catch(e){}\n  }\n  window.addEventListener(\"load\", reportHeight);\n  window.addEventListener(\"resize\", reportHeight);\n  document.querySelectorAll(\"#rs24 img\").forEach(function(im){ im.addEventListener(\"load\", reportHeight); });\n  setInterval(reportHeight, 1000);\n})();\n<\/script>\n<\/body>\n<\/html>\n\n\t\t<\/div>\n\t<\/div>\n\n\t\t\t<\/div> \n\t\t<\/div>\n\t<\/div> \n<\/div><\/div>\n","protected":false},"excerpt":{"rendered":"RadioStudio24: radio playout with an AI presenter | by Radio Jingles 24 \/* ===================================================================== * RadioStudio24 landing, redesign 2026-10-07 (\"broadcast console\"). * Everything is scoped under #rs24 so the WordPress...","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-117351","page","type-page","status-publish"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Radio Jingles 24: Radio Jingles | DJ Drops | Podcast Intros | Sung Jingles<\/title>\n<meta name=\"description\" content=\"Radio Jingles, Sung Jingles, DJ Drops, and Podcast Intros for commercial, community and internet radio stations. UK Based. Prices from \u00a310. Order online.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/radiojingles24.com\/it\/radio-studio-24\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Radio Jingles 24: Radio Jingles | DJ Drops | Podcast Intros | Sung Jingles\" \/>\n<meta property=\"og:description\" content=\"Radio Jingles, Sung Jingles, DJ Drops, and Podcast Intros for commercial, community and internet radio stations. UK Based. Prices from \u00a310. Order online.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/radiojingles24.com\/it\/radio-studio-24\/\" \/>\n<meta property=\"og:site_name\" content=\"Radio Jingles 24: Radio Jingles | DJ Drops | Podcast Intros | Sung Jingles\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/radiojingles24\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-13T06:56:35+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@radiojingles24\" \/>\n<meta name=\"twitter:label1\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data1\" content=\"98 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/radiojingles24.com\\\/radio-studio-24\\\/\",\"url\":\"https:\\\/\\\/radiojingles24.com\\\/radio-studio-24\\\/\",\"name\":\"Radio Jingles 24: Radio Jingles | DJ Drops | Podcast Intros | Sung Jingles\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/radiojingles24.com\\\/#website\"},\"datePublished\":\"2026-06-13T10:55:33+00:00\",\"dateModified\":\"2026-10-13T06:56:35+00:00\",\"description\":\"Radio Jingles, Sung Jingles, DJ Drops, and Podcast Intros for commercial, community and internet radio stations. UK Based. Prices from \u00a310. Order online.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/radiojingles24.com\\\/radio-studio-24\\\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/radiojingles24.com\\\/radio-studio-24\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/radiojingles24.com\\\/radio-studio-24\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/radiojingles24.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Radio Studio 24\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/radiojingles24.com\\\/#website\",\"url\":\"https:\\\/\\\/radiojingles24.com\\\/\",\"name\":\"Radio Jingles 24: Radio Jingles | DJ Drops | Podcast Intros | Sung Jingles\",\"description\":\"Radio Jingles, Sung Jingles, DJ Drops, and Podcast Intros for commercial, community and internet radio stations. UK based, real voices. Prices from \u00a310. Order online, delivered in 24 hours.\",\"publisher\":{\"@id\":\"https:\\\/\\\/radiojingles24.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/radiojingles24.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/radiojingles24.com\\\/#organization\",\"name\":\"Radio Jingles 24\",\"url\":\"https:\\\/\\\/radiojingles24.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/radiojingles24.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/radiojingles24.com\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/RadioJingle1-1.jpg\",\"contentUrl\":\"https:\\\/\\\/radiojingles24.com\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/RadioJingle1-1.jpg\",\"width\":512,\"height\":158,\"caption\":\"Radio Jingles 24\"},\"image\":{\"@id\":\"https:\\\/\\\/radiojingles24.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/radiojingles24\\\/\",\"https:\\\/\\\/x.com\\\/radiojingles24\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Radio Jingles 24: Radio Jingles | DJ Drops | Introduzione ai podcast | Jingles cantati","description":"Radio Jingles, Sung Jingles, DJ Drops, and Podcast Intros for commercial, community and internet radio stations. UK Based. Prices from \u00a310. Order online.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/radiojingles24.com\/it\/radio-studio-24\/","og_locale":"it_IT","og_type":"article","og_title":"Radio Jingles 24: Radio Jingles | DJ Drops | Podcast Intros | Sung Jingles","og_description":"Radio Jingles, Sung Jingles, DJ Drops, and Podcast Intros for commercial, community and internet radio stations. UK Based. Prices from \u00a310. Order online.","og_url":"https:\/\/radiojingles24.com\/it\/radio-studio-24\/","og_site_name":"Radio Jingles 24: Radio Jingles | DJ Drops | Podcast Intros | Sung Jingles","article_publisher":"https:\/\/www.facebook.com\/radiojingles24\/","article_modified_time":"2026-10-13T06:56:35+00:00","twitter_card":"summary_large_image","twitter_site":"@radiojingles24","twitter_misc":{"Tempo di lettura stimato":"98 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/radiojingles24.com\/radio-studio-24\/","url":"https:\/\/radiojingles24.com\/radio-studio-24\/","name":"Radio Jingles 24: Radio Jingles | DJ Drops | Introduzione ai podcast | Jingles cantati","isPartOf":{"@id":"https:\/\/radiojingles24.com\/#website"},"datePublished":"2026-06-13T10:55:33+00:00","dateModified":"2026-10-13T06:56:35+00:00","description":"Radio Jingles, Sung Jingles, DJ Drops, and Podcast Intros for commercial, community and internet radio stations. UK Based. Prices from \u00a310. Order online.","breadcrumb":{"@id":"https:\/\/radiojingles24.com\/radio-studio-24\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/radiojingles24.com\/radio-studio-24\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/radiojingles24.com\/radio-studio-24\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/radiojingles24.com\/"},{"@type":"ListItem","position":2,"name":"Radio Studio 24"}]},{"@type":"WebSite","@id":"https:\/\/radiojingles24.com\/#website","url":"https:\/\/radiojingles24.com\/","name":"Radio Jingles 24: Radio Jingles | DJ Drops | Introduzione ai podcast | Jingles cantati","description":"Radio Jingles, Sung Jingles, DJ Drops, and Podcast Intros for commercial, community and internet radio stations. UK based, real voices. Prices from \u00a310. Order online, delivered in 24 hours.","publisher":{"@id":"https:\/\/radiojingles24.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/radiojingles24.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/radiojingles24.com\/#organization","name":"Jingle radio 24","url":"https:\/\/radiojingles24.com\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/radiojingles24.com\/#\/schema\/logo\/image\/","url":"https:\/\/radiojingles24.com\/wp-content\/uploads\/2019\/11\/RadioJingle1-1.jpg","contentUrl":"https:\/\/radiojingles24.com\/wp-content\/uploads\/2019\/11\/RadioJingle1-1.jpg","width":512,"height":158,"caption":"Radio Jingles 24"},"image":{"@id":"https:\/\/radiojingles24.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/radiojingles24\/","https:\/\/x.com\/radiojingles24"]}]}},"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/radiojingles24.com\/it\/wp-json\/wp\/v2\/pages\/117351","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/radiojingles24.com\/it\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/radiojingles24.com\/it\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/radiojingles24.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/radiojingles24.com\/it\/wp-json\/wp\/v2\/comments?post=117351"}],"version-history":[{"count":5,"href":"https:\/\/radiojingles24.com\/it\/wp-json\/wp\/v2\/pages\/117351\/revisions"}],"predecessor-version":[{"id":119210,"href":"https:\/\/radiojingles24.com\/it\/wp-json\/wp\/v2\/pages\/117351\/revisions\/119210"}],"wp:attachment":[{"href":"https:\/\/radiojingles24.com\/it\/wp-json\/wp\/v2\/media?parent=117351"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}