1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5705],{5379:(e,t,r)=>{"use strict";r.d(t,{D:()=>i,N:()=>d});var o=r(12115),s=["light","dark"],n="(prefers-color-scheme: dark)",a=o.createContext(void 0),l={setTheme:e=>{},themes:[]},i=()=>{var e;return null!=(e=o.useContext(a))?e:l},d=e=>o.useContext(a)?e.children:o.createElement(p,{...e}),c=["light","dark"],p=e=>{let{forcedTheme:t,disableTransitionOnChange:r=!1,enableSystem:l=!0,enableColorScheme:i=!0,storageKey:d="theme",themes:p=c,defaultTheme:f=l?"system":"light",attribute:w="data-theme",value:b,children:v,nonce:y}=e,[x,k]=o.useState(()=>m(d,f)),[$,N]=o.useState(()=>m(d)),j=b?Object.values(b):p,S=o.useCallback(e=>{let t=e;if(!t)return;"system"===e&&l&&(t=g());let o=b?b[t]:t,n=r?h():null,a=document.documentElement;if("class"===w?(a.classList.remove(...j),o&&a.classList.add(o)):o?a.setAttribute(w,o):a.removeAttribute(w),i){let e=s.includes(f)?f:null,r=s.includes(t)?t:e;a.style.colorScheme=r}null==n||n()},[]),C=o.useCallback(e=>{let t="function"==typeof e?e(e):e;k(t);try{localStorage.setItem(d,t)}catch(e){}},[t]),M=o.useCallback(e=>{N(g(e)),"system"===x&&l&&!t&&S("system")},[x,t]);o.useEffect(()=>{let e=window.matchMedia(n);return e.addListener(M),M(e),()=>e.removeListener(M)},[M]),o.useEffect(()=>{let e=e=>{e.key===d&&C(e.newValue||f)};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[C]),o.useEffect(()=>{S(null!=t?t:x)},[t,x]);let R=o.useMemo(()=>({theme:x,setTheme:C,forcedTheme:t,resolvedTheme:"system"===x?$:x,themes:l?[...p,"system"]:p,systemTheme:l?$:void 0}),[x,C,t,$,l,p]);return o.createElement(a.Provider,{value:R},o.createElement(u,{forcedTheme:t,disableTransitionOnChange:r,enableSystem:l,enableColorScheme:i,storageKey:d,themes:p,defaultTheme:f,attribute:w,value:b,children:v,attrs:j,nonce:y}),v)},u=o.memo(e=>{let{forcedTheme:t,storageKey:r,attribute:a,enableSystem:l,enableColorScheme:i,defaultTheme:d,value:c,attrs:p,nonce:u}=e,m="system"===d,h="class"===a?`var d=document.documentElement,c=d.classList;c.remove(${p.map(e=>`'${e}'`).join(",")});`:`var d=document.documentElement,n='${a}',s='setAttribute';`,g=i?(s.includes(d)?d:null)?`if(e==='light'||e==='dark'||!e)d.style.colorScheme=e||'${d}'`:"if(e==='light'||e==='dark')d.style.colorScheme=e":"",f=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=!(arguments.length>2)||void 0===arguments[2]||arguments[2],o=c?c[e]:e,n=t?e+"|| ''":`'${o}'`,l="";return i&&r&&!t&&s.includes(e)&&(l+=`d.style.colorScheme = '${e}';`),"class"===a?t||o?l+=`c.add(${n})`:l+="null":o&&(l+=`d[s](n,${n})`),l},w=t?`!function(){${h}${f(t)}}()`:l?`!function(){try{${h}var e=localStorage.getItem('${r}');if('system'===e||(!e&&${m})){var t='${n}',m=window.matchMedia(t);if(m.media!==t||m.matches){${f("dark")}}else{${f("light")}}}else if(e){${c?`var x=${JSON.stringify(c)};`:""}${f(c?"x[e]":"e",!0)}}${m?"":"else{"+f(d,!1,!1)+"}"}${g}}catch(e){}}()`:`!function(){try{${h}var e=localStorage.getItem('${r}');if(e){${c?`var x=${JSON.stringify(c)};`:""}${f(c?"x[e]":"e",!0)}}else{${f(d,!1,!1)};}${g}}catch(t){}}();`;return o.createElement("script",{nonce:u,dangerouslySetInnerHTML:{__html:w}})}),m=(e,t)=>{let r;try{r=localStorage.getItem(e)||void 0}catch(e){}return r||t},h=()=>{let e=document.createElement("style");return e.appendChild(document.createTextNode("*{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),document.head.appendChild(e),()=>{window.getComputedStyle(document.body),setTimeout(()=>{document.head.removeChild(e)},1)}},g=e=>(e||(e=window.matchMedia(n)),e.matches?"dark":"light")},25016:(e,t,r)=>{"use strict";r.d(t,{Ay:()=>a,I5:()=>i,cn:()=>n,vF:()=>l});var o=r(2821),s=r(75889);function n(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return(0,s.QP)((0,o.$)(t))}function a(e){return e?e.replace(/^\s*(universal|general)\s+/i,"").replace(/\bAnalyzer\b/g,"Analysis").trim():e}let l={log:function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r]},warn:function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r]},error:function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r]},info:function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r]},debug:function(e){for(var t=arguments.length,r=Array(t>1?t-1:0),o=1;o<t;o++)r[o-1]=arguments[o]}};function i(e){return e?e.replace(/\n[^\n]*\b(?:SHARE\s*CARD\s*[:.]|submit_share_card|here(?:'s| is) the share c
1ard)[\s\S]*$/i,"").replace(/\n+\s*[*_#>\s-]*Headline\s*[:*][\s\S]*?\bHero\s*[:*][\s\S]*$/i,"").replace(/(?:\n+\s*\{[^{}]*\blabel\b[^{}]*\}\s*)+$/i,"").replace(/\n+[^\n]*\{[\s\S]*?"(?:headline|verdict|hero)"[\s\S]*?"rows"\s*:[\s\S]*$/i,"").replace(/\n+[^\n]*\bshareable\s+(?:format|card|version|summary)\b[^\n]*$/i,"").trimEnd():e}},28171:(e,t,r)=>{"use strict";r.d(t,{d:()=>n,o:()=>s});var o=r(18720);let s=Object.assign(function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{title:t,description:r,variant:s,action:n,duration:a}=e,l=t??r??"",i={description:t?r:void 0,action:n,duration:a},d="destructive"===s?o.oR.error(l,i):(0,o.oR)(l,i);return{id:d,dismiss:()=>o.oR.dismiss(d),update:()=>{}}},{success:o.oR.success,error:o.oR.error,warning:o.oR.warning,info:o.oR.info,message:o.oR.message,loading:o.oR.loading,dismiss:o.oR.dismiss});function n(){return{toast:s,dismiss:o.oR.dismiss,toasts:[]}}},47957:(e,t,r)=>{var o=0/0,s=/^\s+|\s+$/g,n=/^[-+]0x[0-9a-f]+$/i,a=/^0b[01]+$/i,l=/^0o[0-7]+$/i,i=parseInt,d="object"==typeof r.g&&r.g&&r.g.Object===Object&&r.g,c="object"==typeof self&&self&&self.Object===Object&&self,p=d||c||Function("return this")(),u=Object.prototype.toString,m=Math.max,h=Math.min,g=function(){return p.Date.now()};function f(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function w(e){if("number"==typeof e)return e;if("symbol"==typeof(t=e)||t&&"object"==typeof t&&"[object Symbol]"==u.call(t))return o;if(f(e)){var t,r="function"==typeof e.valueOf?e.valueOf():e;e=f(r)?r+"":r}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(s,"");var d=a.test(e);return d||l.test(e)?i(e.slice(2),d?2:8):n.test(e)?o:+e}e.exports=function(e,t,r){var o,s,n,a,l,i,d=0,c=!1,p=!1,u=!0;if("function"!=typeof e)throw TypeError("Expected a function");function b(t){var r=o,n=s;return o=s=void 0,d=t,a=e.apply(n,r)}function v(e){var r=e-i,o=e-d;return void 0===i||r>=t||r<0||p&&o>=n}function y(){var e,r,o,s=g();if(v(s))return x(s);l=setTimeout(y,(e=s-i,r=s-d,o=t-e,p?h(o,n-r):o))}function x(e){return(l=void 0,u&&o)?b(e):(o=s=void 0,a)}function k(){var e,r=g(),n=v(r);if(o=arguments,s=this,i=r,n){if(void 0===l)return d=e=i,l=setTimeout(y,t),c?b(e):a;if(p)return l=setTimeout(y,t),b(i)}return void 0===l&&(l=setTimeout(y,t)),a}return t=w(t)||0,f(r)&&(c=!!r.leading,n=(p="maxWait"in r)?m(w(r.maxWait)||0,t):n,u="trailing"in r?!!r.trailing:u),k.cancel=function(){void 0!==l&&clearTimeout(l),d=0,o=i=s=l=void 0},k.flush=function(){return void 0===l?a:x(g())},k}},76654:(e,t,r)=>{"use strict";function o(){if(document.querySelector("link[data-typography-css]"))return;let e=` 2 /* Typography plugin styles */ 3 .prose { 4 color: var(--tw-prose-body); 5 max-width: 65ch; 6 } 7 8 .prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)) { 9 margin-top: 1.25em; 10 margin-bottom: 1.25em; 11 } 12 13 .prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)) { 14 color: var(--tw-prose-lead); 15 font-size: 1.25em; 16 line-height: 1.6; 17 margin-top: 1.2em; 18 margin-bottom: 1.2em; 19 } 20 21 .prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)) { 22 color: var(--tw-prose-links); 23 text-decoration: underline; 24 font-weight: 500; 25 } 26 27 .prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)) { 28 color: var(--tw-prose-bold); 29 font-weight: 600; 30 } 31 32 .prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)) { 33 list-style-type: decimal; 34 margin-top: 1.25em; 35 margin-bottom: 1.25em; 36 padding-inline-start: 1.625em; 37 } 38 39 .prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)) { 40 list-style-type: disc; 41 margin-top: 1.25em; 42 margin-bottom: 1.25em; 43 padding-inline-start: 1.625em; 44 } 45 46 .prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)) { 47 color: var(--tw-prose-headings); 48 font-weight: 800; 49 font-size: 2.25em; 50 margin-top: 0; 51 margin-bottom: 0.8888889em; 52 line-height: 1.1111111; 53 } 54 55 .prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)) { 56 color: var(--tw-prose-headings); 57 font-weight: 700; 58 font-size: 1.5em; 59 margin-top: 2em; 60 margin-bottom: 1em; 61 line-height: 1.3333333; 62 } 63 64 .prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)) { 65 color: var(--tw-prose-headings); 66 font-weight: 600; 67 font-size: 1.25em; 68 margin-top: 1.6em; 69 margin-bottom: 0.6em; 70 line-height: 1.6; 71 } 72 73 .prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)) { 74 color: var(--tw-prose-code); 75 font-weight: 600; 76 font-size: 0.875em; 77 } 78 79 .prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before { 80 content: "\`"; 81 } 82 83 .prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after { 84 content: "\`"; 85 } 86 87 .prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)) { 88 color: var(--tw-prose-pre-code); 89 background-color: var(--tw-prose-pre-bg); 90 overflow-x: auto; 91 font-weight: 400; 92 font-size: 0.875em; 93 line-height: 1.7142857; 94 margin-top: 1.7142857em; 95 margin-bottom: 1.7142857em; 96 border-radius: 0.375rem; 97 padding-top: 0.8571429em; 98 padding-inline-end: 1.1428571em; 99 padding-bottom: 0.8571429em; 100 padding-inline-start: 1.1428571em; 101 } 102 103 .prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)) { 104 background-color: initial; 105 border-width: 0; 106 border-radius: 0; 107 padding: 0; 108 font-weight: inherit; 109 color: inherit; 110 font-size: inherit; 111 font-family: inherit; 112 line-height: inherit; 113 } 114 115 .prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before { 116 content: none; 117 } 118 119 .prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after { 120 content: none; 121 } 122 123 .prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)) { 124 font-weight: 500; 125 font-style: italic; 126 color: var(--tw-prose-quotes); 127 border-inline-start-width: 0.25rem; 128 border-inline-start-color: var(--tw-prose-quote-borders); 129 quotes: "\\201C" "\\201D" "\\2018" "\\2019"; 130 margin-top: 1.6em; 131 margin-bottom: 1.6em; 132 padding-inline-start: 1em; 133 } 134 135 .prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before { 136 content: open-quote; 137 } 138 139 .prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after { 140 content: close-quote; 141 } 142 143 .prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)) { 144 width: 100%; 145 table-layout: auto; 146 margin-top: 2em; 147 margin-bottom: 2em; 148 font-size: 0.875em; 149 line-height: 1.7142857; 150 } 151 152 .prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)) { 153 border-bottom-width: 1px; 154 border-bottom-color: var(--tw-prose-th-borders); 155 } 156 157 .prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)) { 158 color: var(--tw-prose-headings); 159 font-weight: 600; 160 vertical-align: bottom; 161 padding-inline-end: 0.5714286em; 162 padding-bottom: 0.5714286em; 163 padding-inline-start: 0.5714286em; 164 } 165 166 .prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)) { 167 border-bottom-width: 1px; 168 border-bottom-color: var(--tw-prose-td-borders); 169 } 170 171 .prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)) { 172 border-bottom-width: 0; 173 } 174 175 .prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)) { 176 vertical-align: initial; 177 } 178 179 .prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)) { 180 border-top-width: 1px; 181 border-top-color: var(--tw-prose-th-borders); 182 } 183 184 .prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)) { 185 vertical-align: top; 186 } 187 188 .prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)) { 189 text-align: start; 190 } 191 192 .prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)) { 193 margin-top: 0; 194 margin-bottom: 0; 195 } 196 197 .prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)) { 198 color: var(--tw-prose-captions); 199 font-size: 0.875em; 200 line-height: 1.4285714; 201 margin-top: 0.8571429em; 202 } 203 204 .prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)) { 205 border-color: var(--tw-prose-hr); 206 border-top-width: 1px; 207 margin-top: 3em; 208 margin-bottom: 3em; 209 } 210 211 .prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)) { 212 margin-top: 0; 213 } 214 215 .prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)) { 216 margin-top: 0; 217 } 218
219 .prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)) { 220 margin-top: 0; 221 } 222 223 .prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)) { 224 margin-top: 0; 225 } 226 227 .prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)) { 228 margin-top: 0.5em; 229 margin-bottom: 0.5em; 230 } 231 232 .prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)) { 233 padding-inline-start: 0.375em; 234 } 235 236 .prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)) { 237 padding-inline-start: 0.375em; 238 } 239 240 .prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)) { 241 margin-top: 0.75em; 242 margin-bottom: 0.75em; 243 } 244 245 .prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)) { 246 margin-top: 1.25em; 247 margin-bottom: 1.25em; 248 } 249 250 .prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)) { 251 color: var(--tw-prose-headings); 252 font-weight: 600; 253 margin-top: 1.25em; 254 } 255 256 .prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)) { 257 margin-top: 0.5em; 258 padding-inline-start: 1.625em; 259 } 260 261 .prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)) { 262 margin-top: 2em; 263 margin-bottom: 2em; 264 } 265 266 .prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)) { 267 margin-top: 0; 268 margin-bottom: 0; 269 } 270 271 .prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)) { 272 margin-top: 2em; 273 margin-bottom: 2em; 274 } 275 276 .prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)) { 277 margin-top: 2em; 278 margin-bottom: 2em; 279 } 280 281 .prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)) { 282 font-weight: 500; 283 font-family: inherit; 284 color: var(--tw-prose-kbd); 285 box-shadow: 0 0 0 1px rgb(var(--tw-prose-kbd-shadows)/10%), 0 3px 0 rgb(var(--tw-prose-kbd-shadows)/10%); 286 font-size: 0.875em; 287 border-radius: 0.3125rem; 288 padding-top: 0.1875em; 289 padding-inline-end: 0.375em; 290 padding-bottom: 0.1875em; 291 padding-inline-start: 0.375em; 292 } 293 294 .prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)) { 295 color: inherit; 296 } 297 298 .prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)) { 299 color: inherit; 300 } 301 302 .prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)) { 303 color: inherit; 304 font-size: 0.875em; 305 } 306 307 .prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)) { 308 color: inherit; 309 font-size: 0.9em; 310 } 311 312 .prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)) { 313 color: inherit; 314 } 315 316 .prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)) { 317 color: inherit; 318 } 319 320 .prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)) { 321 color: inherit; 322 } 323 324 .prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)) { 325 color: inherit; 326 } 327 328 .prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)) { 329 color: inherit; 330 } 331 332 .prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)) { 333 color: inherit; 334 } 335 336 .prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker { 337 font-weight: 400; 338 color: var(--tw-prose-counters); 339 } 340 341 .prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker { 342 color: var(--tw-prose-bullets); 343 } 344 345 .prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)) { 346 padding-inline-start: 0; 347 } 348 349 .prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)) { 350 padding-inline-end: 0; 351 } 352 353 .prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)) { 354 padding-top: 0.5714286em; 355 padding-inline-end: 0.5714286em; 356 padding-bottom: 0.5714286em; 357 padding-inline-start: 0.5714286em; 358 } 359 360 .prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)) { 361 padding-inline-start: 0; 362 } 363 364 .prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)) { 365 padding-inline-end: 0; 366 } 367 368 .prose :where(>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)) { 369 margin-top: 0; 370 } 371 372 .prose :where(>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)) { 373 margin-bottom: 0; 374 } 375 376 .prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)) { 377 margin-top: 1.25em; 378 } 379 380 .prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)) { 381 margin-bottom: 1.25em; 382 } 383 384 .prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)) { 385 margin-top: 1.25em; 386 } 387 388 .prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)) { 389 margin-bottom: 1.25em; 390 } 391 392 .prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)) { 393 margin-top: 0.75em; 394 margin-bottom: 0.75em; 395 } 396 397 .prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)) { 398 margin-top: 0.75em; 399 margin-bottom: 0.75em; 400 } 401 402 .prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)) { 403 margin-top: 0.75em; 404 margin-bottom: 0.75em; 405 } 406 407 .prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)) { 408 margin-top: 0.75em; 409 margin-bottom: 0.75em; 410 } 411 412 /* Dark mode prose styles */ 413 .dark .prose { 414 --tw-prose-body: #d1d5db; 415 --tw-prose-headings: #fff; 416 --tw-prose-lead: #9ca3af; 417 --tw-prose-links: #fff; 418 --tw-prose-bold: #fff; 419 --tw-prose-counters: #9ca3af; 420 --tw-prose-bullets: #4b5563; 421 --tw-prose-hr: #374151; 422 --tw-prose-quotes: #f3f4f6; 423 --tw-prose-quote-borders: #374151; 424 --tw-prose-captions: #9ca3af; 425 --tw-prose-kbd: #fff; 426 --tw-prose-kbd-shadows: 255 255 255; 427 --tw-prose-code: #fff; 428 --tw-prose-pre-code: #d1d5db; 429 --tw-prose-pre-bg: rgb(0 0 0/50%); 430 --tw-prose-th-borders: #4b5563; 431 --tw-prose-td-borders: #374151; 432 } 433 434 .prose-invert { 435 --tw-prose-body: var(--tw-prose-invert-body); 436 --tw-prose-headings: var(--tw-prose-invert-headings); 437 --tw-prose-lead: var(--tw-prose-invert-lead); 438 --tw-prose-links: var(--tw-prose-invert-links); 439 --tw-prose-bold: var(--tw-prose-invert-bold); 440 --tw-prose-counters: var(--tw-prose-invert-counters); 441 --tw-prose-bullets: var(--tw-prose-invert-bullets); 442 --tw-prose-hr: var(--tw-prose-invert-hr); 443 --tw-prose-quotes: var(--tw-prose-invert-quotes); 444 --tw-prose-quote-borders: var(--tw-prose-invert-quote-borders); 445 --tw-prose-captions: var(--tw-prose-invert-captions); 446 --tw-prose-kbd: var(--tw-prose-invert-kbd); 447 --tw-prose-kbd-shadows: var(--tw-prose-invert-kbd-shadows); 448 --tw-prose-code: var(--tw-prose-invert-code); 449 --tw-prose-pre-code: var(--tw-prose-invert-pre-code); 450 --tw-prose-pre-bg: var(--tw-prose-invert-pre-bg); 451 --tw-prose-th-borders: var(--tw-prose-invert-th-borders); 452 --tw-prose-td-borders: var(--tw-prose-invert-td-borders); 453 } 454 455 /* CSS variables for prose colors */ 456 :root { 457 --tw-prose-body: #374151; 458 --tw-prose-headings: #111827; 459 --tw-prose-lead: #4b5563; 460 --tw-prose-links: #111827; 461 --tw-prose-bold: #111827; 462 --tw-prose-counters: #6b7280; 463 --tw-prose-bullets: #d1d5db; 464 --tw-prose-hr: #e5e7eb; 465 --tw-prose-quotes: #111827; 466 --tw-prose-quote-borders: #e5e7eb; 467 --tw-prose-captions: #6b7280; 468 --tw-prose-kbd: #111827; 469 --tw-prose-kbd-shadows: 17 24 39; 470 --tw-prose-code: #111827; 471 --tw-prose-pre-code: #e5e7eb; 472 --tw-prose-pre-bg: #1f2937; 473 --tw-prose-th-borders: #d1d5db; 474 --tw-prose-td-borders: #e5e7eb; 475 --tw-prose-invert-body: #d1d5db; 476 --tw-prose-invert-headings: #fff; 477 --tw-prose-invert-lead: #9ca3af; 478 --tw-prose-invert-links: #fff; 479 --tw-prose-invert-bold: #fff; 480 --tw-prose-invert-counters: #9ca3af; 481 --tw-prose-invert-bullets: #4b5563; 482 --tw-prose-invert-hr: #374151; 483 --tw-prose-invert-quotes: #f3f4f6; 484 --tw-prose-invert-quote-borders: #374151; 485 --tw-prose-invert-captions: #9ca3af; 486 --tw-prose-invert-kbd: #fff; 487 --tw-prose-invert-kbd-shadows: 255 255 255; 488 --tw-prose-invert-code: #fff; 489 --tw-prose-invert-pre-code: #d1d5db; 490 --tw-prose-invert-pre-bg: rgb(0 0 0/50%); 491 --tw-prose-invert-th-borders: #4b5563; 492 --tw-prose-invert-td-borders: #374151; 493 } 494 `,t=document.createElement("style");t.setAttribute("data-typography-css","true"),t.textContent=e,document.head.appendChild(t),document.body.classList.add("typography-loaded")}function s(){if(document.querySelector("link[data-mapbox-css]"))return;let e=document.createElement("link");e.rel="stylesheet",e.href="https://api.mapbox.com/mapbox-gl-js/v2.15.0/mapbox-gl.css",e.setAttribute("data-mapbox-css","true"),document.head.appendChild(e)}r.d(t,{J:()=>
494o,t:()=>s})},83101:(e,t,r)=>{"use strict";r.d(t,{F:()=>a});var o=r(2821);let s=e=>"boolean"==typeof e?`${e}`:0===e?"0":e,n=o.$,a=(e,t)=>r=>{var o;if((null==t?void 0:t.variants)==null)return n(e,null==r?void 0:r.class,null==r?void 0:r.className);let{variants:a,defaultVariants:l}=t,i=Object.keys(a).map(e=>{let t=null==r?void 0:r[e],o=null==l?void 0:l[e];if(null===t)return null;let n=s(t)||s(o);return a[e][n]}),d=r&&Object.entries(r).reduce((e,t)=>{let[r,o]=t;return void 0===o||(e[r]=o),e},{});return n(e,i,null==t||null==(o=t.compoundVariants)?void 0:o.reduce((e,t)=>{let{class:r,className:o,...s}=t;return Object.entries(s).every(e=>{let[t,r]=e;return Array.isArray(r)?r.includes({...l,...d}[t]):({...l,...d})[t]===r})?[...e,r,o]:e},[]),null==r?void 0:r.class,null==r?void 0:r.className)}},83209:(e,t,r)=>{"use strict";r.d(t,{BT:()=>d,Wu:()=>c,ZB:()=>i,Zp:()=>a,aR:()=>l,wL:()=>p});var o=r(95155),s=r(12115),n=r(25016);let a=s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,o.jsx)("div",{ref:t,className:(0,n.cn)("rounded-lg border bg-card text-card-foreground shadow-sm",r),...s})});a.displayName="Card";let l=s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,o.jsx)("div",{ref:t,className:(0,n.cn)("flex flex-col space-y-1.5 p-6",r),...s})});l.displayName="CardHeader";let i=s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,o.jsx)("h3",{ref:t,className:(0,n.cn)("text-2xl font-semibold leading-none tracking-tight",r),...s})});i.displayName="CardTitle";let d=s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,o.jsx)("p",{ref:t,className:(0,n.cn)("text-sm text-muted-foreground",r),...s})});d.displayName="CardDescription";let c=s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,o.jsx)("div",{ref:t,className:(0,n.cn)("p-6 pt-0",r),...s})});c.displayName="CardContent";let p=s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,o.jsx)("div",{ref:t,className:(0,n.cn)("flex items-center p-6 pt-0",r),...s})});p.displayName="CardFooter"},85705:(e,t,r)=>{"use strict";r.r(t),r.d(t,{RadioClient:()=>k});var o=r(95155),s=r(12115),n=r(81368),a=r(35299),l=r(53511),i=r(85921),d=r(43152),c=r(97003),p=r(83209),u=r(5379),m=r(67909),h=r(47957),g=r.n(h),f=r(28171),w=r(76654),b=r(25016);let v=(0,m.default)(()=>r.e(1626).then(r.bind(r,49353)).then(e=>e.Marker),{loadableGenerated:{webpack:()=>[49353]},ssr:!1}),y=(0,m.default)(()=>r.e(1626).then(r.bind(r,49353)).then(e=>e.Popup),{loadableGenerated:{webpack:()=>[49353]},ssr:!1});function x(e){let{initialStations:t}=e,{resolvedTheme:m}=(0,u.D)();s.useEffect(()=>{(0,w.t)()},[]);let[h,x]=s.useState({latitude:30,longitude:10,zoom:1.5,pitch:0,bearing:0}),[k,$]=s.useState(t),[N,j]=s.useState(null),[S,C]=s.useState(!1),[M,R]=s.useState("idle"),A=s.useRef(null),E=s.useRef(null),{toast:T}=(0,f.d)(),[z,I]=s.useState(null),[F,O]=s.useState(!1),[D,L]=s.useState("All"),[P,q]=s.useState(t),[U,Z]=s.useState(!1),H=s.useMemo(()=>{let e=["All","Pop","Rock","Hip Hop","Electronic","Dance","Techno","House","Jazz","Classical","Country","Folk","Blues","R&B","Reggae","Punk","Metal","Alternative","Indie","Lo-Fi","Ambient","Trance","Dubstep","Funk","Soul","Gospel","Latin","World","News","Talk","Sports"].filter(e=>{if("All"===e)return!0;let t=k.some(t=>{var r;return null==(r=t.genre)?void 0:r.toLowerCase().includes(e.toLowerCase())});if(t){let t=k.filter(t=>{var r;return null==(r=t.genre)?void 0:r.toLowerCase().includes(e.toLowerCase())}).length;b.vF.debug("Radio",`Genre "${e}" has ${t} stations`)}return t});return b.vF.debug("Radio","Available genres:",e),b.vF.debug("Radio","Sample station genres:",k.slice(0,5).map(e=>({name:e.name,genre:e.genre}))),e},[k]);s.useEffect(()=>{if("All"===D)q(k);else{let e=k.filter(e=>{var t;return null==(t=e.genre)?void 0:t.toLowerCase().includes(D.toLowerCase())});b.vF.debug("Radio",`Selected genre: ${D}, Found ${e.length} stations out of ${k.length} total`),e.length>0&&b.vF.debug("Radio","Sample filtered stations:",e.slice(0,3).map(e=>({name:e.name,genre:e.genre}))),q(e)}},[k,D]);let W=s.useRef(Math.random().toString(36).substring(2,7)),G=s.useCallback((e,t)=>{b.vF.debug("Radio",`Map Styling: ${e}`,t||"")},[]);s.useEffect(()=>{},[]);let B=s.useCallback((e,t)=>{G(`Audio error for station ${t.name}:`,e);let r="This station is currently unavailable.";e&&"message"in e&&(G(`Error message: ${e.message}`),e.message.includes("CORS")?r="CORS policy prevents playing this station.":e.message.includes("format")&&(r="Audio format not supported by your browser.")),T({title:"Station Unavailable",description:r,variant:"destructive"}),(null==N?void 0:N.id)===t.id?(R("error"),C(!1)):G(`Error for non-selected station ${t.name}, not changing global loading/playing state.`)},[G,T,N]),_=s.useRef({}),Q=s.useCallback((e,t)=>{var r;null==(r=E.current)||r.flyTo({center:[t,e],zoom:4,duration:2e3,essential:!0})},[]),J=s.useMemo(()=>g()(async e=>{var t;let r=Math.random().toString(36).substring(2,7),o=W.current;b.vF.debug("Radio",`[${o} | Click ${r}] Click for station: ${e.name}. Current audioRef src:`,null==(t=A.current)?void 0:t.src);try{let t=A.current;t?(b.vF.debug("Radio",`[${o} | Click ${r}] Pausing and clearing previousAudioElement src:`,t.src),t.pause(),t.src=""):b.vF.debug("Radio",`[${o} | Click ${r}] No previousAudioElement to cleanup`),C(!1),R("loading"),j(e),Q(e.latitude,e.longitude);let s=new Audio;s.crossOrigin="anonymous",s.onerror=()=>{G(`[Radio ${o} | Click ${r}] newAudioElement.onerror event triggered for station: ${e.name}`,s.error),B(s.error,e)},s.addEventListener("error",t=>{G(`[Radio ${o} | Click ${r}] newAudioElement general error event for station: ${e.name}`,t),B(t,e)}),s.src=e.url,await s.load(),b.vF.debug("Radio",`[${o} | Click ${r}] New audio element created for ${e.name}. Attempting to play src:`,s.src);let n=s.play();void 0!==n?(await n,b.vF.debug("Radio",`[${o} | Click ${r}] Play promise resolved for ${e.name}. Setting audioRef to new element`),A.current=s,C(!0),R("playing")):(R("error"),C(!1)),G(`Playing station: ${e.name} (${e.url})`)}catch(e){T({title:"Station Error",description:"Unable to play this station. Please try another one.",variant:"destructive"}),R("error"),C(!1)}},500),[Q,G,B,T]),X=s.useMemo(()=>{let e={};for(let t of(G("Recalculating stationGrid..."),_.current={},G("Cleared marker cache due to stationGrid change"),P)){let r=Math.floor(t.latitude/5),o=Math.floor(t.longitude/5),s=`${r},${o}`;e[s]||(e[s]=[]),e[s].push(t)}return e},[P,G]),V=s.useMemo(()=>
494{if(G(`Recalculating visibleMarkers... stationGrid has ${Object.keys(X).length} cells`),0===Object.keys(X).length)return G("stationGrid is empty, returning empty markers array"),[];let e=h.zoom,t=Math.max(2,10-2*e),r=`${Math.round(2*h.latitude)/2},${Math.round(2*h.longitude)/2},${e}`;if(_.current[r])return _.current[r];Object.keys(_.current).length>50&&(_.current={});let s=Math.floor((h.latitude-t)/5),n=Math.floor((h.latitude+t)/5),a=Math.floor((h.longitude-t)/5),l=Math.floor((h.longitude+t)/5),i=new Set;for(let e=s;e<=n;e++)for(let t=a;t<=l;t++){let r=`${e},${t}`;if(X[r])for(let e of X[r])i.add(e)}let d=Array.from(i).map(e=>(0,o.jsx)(v,{latitude:e.latitude,longitude:e.longitude,children:(0,o.jsxs)("button",{type:"button",className:"relative group cursor-pointer p-0 bg-transparent border-none block",onMouseEnter:()=>I(e),onMouseLeave:()=>I(null),onClick:()=>J(e),"aria-label":`Play station ${e.name}`,children:[(0,o.jsx)("div",{className:"absolute -inset-3 rounded-full"}),(0,o.jsx)("div",{className:`w-2 h-2 rounded-full relative ${(null==N?void 0:N.id)===e.id?"bg-primary animate-pulse shadow-sm shadow-primary/50":"bg-primary/60 group-hover:bg-primary/80"}`})]})},`marker-${e.id}`));return G(`Created ${d.length} visible markers from ${i.size} unique stations`),_.current[r]=d,d},[h.latitude,h.longitude,h.zoom,X,null==N?void 0:N.id,G,J]),K=async()=>{let e=W.current;if(!N||!A.current)return void b.vF.debug("Radio",`[${e} | TogglePlay] Aborted: no selectedStation or audioRef.current`);b.vF.debug("Radio",`[${e} | TogglePlay] Toggling. Current state: ${S?"playing":"paused"}. Station: ${N.name}`);try{if(S)A.current.pause(),A.current.src="",C(!1),R("idle");else{R("loading");let e=new Audio;e.crossOrigin="anonymous",e.src=N.url,await e.load();let t=e.play();void 0!==t&&(await t,A.current=e,C(!0),R("playing"))}}catch(e){T({title:"Playback Error",description:"Unable to play this station. Please try again.",variant:"destructive"}),C(!1),R("error")}},Y=s.useCallback(()=>{let e;if(0!==P.length){if(1===P.length)e=P[0];else do{let t=Math.floor(Math.random()*P.length);e=P[t]}while(e.id===(null==N?void 0:N.id)&&P.length>1);J(e)}},[P,null==N?void 0:N.id,J]),ee=s.useMemo(()=>g()(e=>{x(e)},8),[]);s.useEffect(()=>{let e=W.current;return b.vF.debug("Radio",`[${e}] Component instance MOUNTED`),()=>{b.vF.debug("Radio",`[${e}] Component instance UNMOUNTING. Cleaning up audioRef:`,A.current),A.current&&(b.vF.debug("Radio",`[${e}] Unmount: Pausing and clearing src for:`,A.current.src),A.current.pause(),A.current.src="",A.current=null),b.vF.debug("Radio",`[${e}] Unmount: Cancelling debouncedStationClick`),J.cancel(),b.vF.debug("Radio",`[${e}] Unmount: Cancelling debouncedSetViewState`),ee.cancel(),b.vF.debug("Radio",`[${e}] Component instance UNMOUNTED and cleaned up`)}},[J,ee]);let[et,er]=s.useState(null);s.useEffect(()=>{r.e(1626).then(r.bind(r,49353)).then(e=>{let t=e.Map||e.default;t&&er(()=>t)}).catch(e=>{})},[]),s.useEffect(()=>{let e=async()=>{try{O(!0);let e=await fetch("/api/stations");if(!e.ok)throw Error(`API request failed: ${e.statusText} (status: ${e.status})`);let t=await e.json();t&&t.length>0&&($(t),G(`Loaded ${t.length} stations from API via /api/stations`))}catch(e){G("Failed to fetch stations via /api/stations:",e),T({title:"Limited Stations Available",description:"The radio station database is temporarily unavailable. We've provided a few stations to enjoy while we work to restore full service.",variant:"default"})}finally{O(!1)}};t.length<=5&&e()},[T,t.length,G]);let eo=s.useCallback(()=>{if(!E.current)return void G("Map ref not available, cannot apply style changes.");let e=E.current.getMap();if(!e)return void G("Map instance not available, cannot apply style changes.");let t=e.getStyle();if(!t||!t.layers)return void G("Map style or layers not available for modification.");G("All available layer IDs in current style:",t.layers.map(e=>e.id));try{e.getTerrain()?(e.setTerrain(null),G("Terrain disabled.")):G("Terrain not active or not supported by style, no change made.")}catch(e){G("Error attempting to disable terrain:",e)}let r="light"===m?"#FFFFFF":"#000000",o="light"===m?"white":"black";G(`Applying land color: ${o} for ${m} theme.`);let s=!1;for(let t of["land","landcover","background","earth"]){let n=e.getLayer(t);if(n)try{let a="background"===n.type?"background-color":"fill-color";"fill"===n.type||"background"===n.type?(e.setPaintProperty(t,a,r),G(`SUCCESS: Set '${a}' of layer '${t}' (type: ${n.type}) to ${o}.`),s=!0):G(`INFO: Layer '${t}' found, but it's type '${n.type}', not 'fill' or 'background'. No color change applied.`)}catch(e){G(`ERROR setting color for layer '${t}':`,e)}}s||G(`WARNING: No suitable land/background layer found from candidates to change color for ${m} theme.`);
494let n=["road","bridge","tunnel","highway","street","transit","place-town","place-village","place-hamlet","place-suburb","place-neighbourhood","settlement-minor-label","settlement-subdivision-label","state-label","capital","poi-label","airport-label"],a=0;for(let r of t.layers){let t=!1;for(let e of n)if("string"==typeof e&&r.id.includes(e)){t=!0;break}if(t)try{e.getLayer(r.id)&&(e.setLayoutProperty(r.id,"visibility","none"),G(`SUCCESS: Hid label layer '${r.id}'.`),a++)}catch(e){G(`ERROR hiding label layer '${r.id}':`,e)}}0===a?G("INFO: No label layers were hidden based on current patterns. Check 'All available layer IDs' and refine 'labelLayerPatternsToHide'."):G(`Total label layers hidden: ${a}`)},[G,m]);return(0,o.jsxs)("div",{className:"fixed inset-0 bg-background overflow-hidden",style:{width:"100vw !important",height:"100vh !important",margin:"0 !important",padding:"0 !important",position:"fixed",top:0,left:0,right:0,bottom:0,zIndex:10},children:[(0,o.jsx)("div",{className:"absolute inset-0 w-full h-full",children:(0,o.jsx)("div",{className:"absolute inset-0 w-full h-full",children:et?(0,o.jsxs)(et,{ref:E,...h,onMove:e=>ee(e.viewState),onLoad:()=>{G("Map loaded (onLoad event), applying custom styles."),eo()},onStyleData:()=>{var e;let t=null==(e=E.current)?void 0:e.getMap();(null==t?void 0:t.isStyleLoaded())?(G("Map style data changed and loaded, applying custom styles."),eo()):t&&t.once("styledata",()=>{G("Map style data fully loaded (deferred), applying custom styles."),eo()})},mapStyle:"dark"===m?"mapbox://styles/mapbox/dark-v11?optimize=true":"mapbox://styles/mapbox/light-v11?optimize=true",mapboxAccessToken:"pk.eyJ1IjoiMHhyYXNpdCIsImEiOiJjbTNtYXZsbXkwdTFiMnFxejVoeXdpeXk4In0.FTO1zNw-ox_vNsybUWnzKw",style:{position:"absolute",inset:0,width:"100vw",height:"100vh",filter:"dark"===m?"brightness(85%)":"grayscale(100%) brightness(105%)"},attributionControl:!1,projection:{name:"globe"},fog:{"horizon-blend":.1,"star-intensity":.15,"space-color":"dark"===m?"#000000":"#ffffff",range:[.1,3],"high-color":"dark"===m?"#000000":"#ffffff"},dragRotate:!1,dragPan:!0,scrollZoom:!0,keyboard:!0,minZoom:1,maxZoom:18,reuseMaps:!0,renderWorldCopies:!1,maxBounds:[[-180,-85],[180,85]],trackResize:!1,antialias:!1,preserveDrawingBuffer:!1,children:[V,z&&(0,o.jsx)(y,{latitude:z.latitude,longitude:z.longitude,closeButton:!1,closeOnClick:!1,anchor:"left",offset:10,className:"bg-white shadow-lg rounded-xl z-30 p-0 border-none",children:(0,o.jsxs)("div",{className:"flex items-center gap-3 p-3 min-w-[200px]",children:[(0,o.jsx)("div",{className:"bg-gray-100 rounded-lg p-2 flex-shrink-0",children:(0,o.jsx)("div",{className:"w-4 h-4 rounded-full bg-gray-400"})}),(0,o.jsxs)("div",{className:"flex-1",children:[(0,o.jsx)("p",{className:"font-semibold text-black",children:z.name}),(0,o.jsx)("p",{className:"text-sm text-gray-500",children:z.country})]})]})})]}):(0,o.jsx)("div",{className:"flex items-center justify-center w-full h-full",children:(0,o.jsx)(a.A,{className:"h-12 w-12 animate-spin text-primary"})})})}),(0,o.jsx)("div",{className:"absolute top-8 md:left-1/2 md:-translate-x-1/2 z-50 w-full md:px-4 md:w-auto",children:(0,o.jsx)(p.Zp,{className:"bg-background/95 backdrop-blur-sm border-none shadow-lg rounded-3xl max-w-[90vw] md:min-w-[300px] mx-auto",children:(0,o.jsxs)(p.Wu,{className:"flex flex-col items-center py-4 px-6",children:[(0,o.jsx)("p",{className:"text-lg text-foreground",children:"Radio"}),(0,o.jsx)("p",{className:"text-sm text-muted-foreground text-center",children:"Click on stations to tune in and discover radio from around the globe"}),F&&(0,o.jsxs)("div",{className:"flex items-center mt-2 text-xs text-muted-foreground",children:[(0,o.jsx)(a.A,{className:"h-3 w-3 mr-1 animate-spin"}),(0,o.jsx)("span",{children:"Loading more stations..."})]})]})})}),(0,o.jsx)("div",{className:"absolute bottom-32 md:bottom-24 left-1/2 -translate-x-1/2 z-50 w-full md:px-4 md:w-auto",children:(0,o.jsx)(p.Zp,{className:"bg-background/95 backdrop-blur-sm border-none shadow-lg rounded-3xl max-w-[80vw] md:max-w-[400px] mx-auto",children:(0,o.jsxs)(p.Wu,{className:"flex flex-col gap-3 py-4 px-6",children:[(0,o.jsx)("div",{className:"w-full overflow-hidden",children:(0,o.jsx)("div",{className:"flex items-center gap-0.5 overflow-x-auto scrollbar-hide pb-1 -mx-3 px-3",style:{scrollbarWidth:"none",msOverflowStyle:"none"},children:H.map(e=>(0,o.jsx)(c.$,{variant:D===e?"default":"ghost",size:"sm",onClick:()=>L(e),className:`flex-shrink-0 h-6 px-1.5 text-xs rounded-full whitespace-nowrap min-w-0 ${D===e?"bg-foreground text-background hover:bg-foreground
494/90":"hover:bg-foreground/10"}`,children:"All"===e?(0,o.jsx)(n.A,{className:"h-3 w-3"}):(0,o.jsx)("span",{className:"text-xs",children:e})},e))})}),(0,o.jsxs)("div",{className:"flex items-center gap-3",children:[N?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("div",{className:"bg-gray-100 rounded-lg p-2 flex-shrink-0",children:N.favicon?(0,o.jsx)("img",{src:function(e){if(e)return e.replace(/^http:\/\//i,"https://")}(N.favicon),alt:N.name,className:"w-4 h-4 object-contain",onError:e=>{e.target.src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTIgMTVDMTMuNjU2OSAxNSAxNSAxMy42NTY5IDE1IDEyQzE1IDEwLjM0MzEgMTMuNjU2OSA5IDEyIDlDMTAuMzQzMSA5IDkgMTAuMzQzMSA5IDEyQzkgMTMuNjU2OSAxMC4zNDMxIDE1IDEyIDE1WiIgZmlsbD0iIzY0NzQ4QiIvPjwvc3ZnPg=="}}):(0,o.jsx)("div",{className:"w-4 h-4 rounded-full bg-gray-400"})}),(0,o.jsxs)("div",{className:"flex-1",children:[(0,o.jsx)("p",{className:"font-medium text-sm",children:N.name}),(0,o.jsx)("p",{className:"text-xs text-muted-foreground",children:N.country})]})]}):(0,o.jsx)("div",{className:"flex-1",children:(0,o.jsx)("p",{className:"text-sm text-muted-foreground",children:"Select a station"})}),(0,o.jsxs)("div",{className:"flex items-center gap-1",children:[(0,o.jsx)(c.$,{variant:"ghost",size:"icon",onClick:Y,disabled:0===P.length,className:"hover:bg-transparent flex-shrink-0",title:"Random station",children:(0,o.jsx)(d.A,{className:"h-4 w-4"})}),(0,o.jsx)(c.$,{variant:"ghost",size:"icon",onClick:K,disabled:!N,className:"hover:bg-transparent flex-shrink-0",children:"loading"===M?(0,o.jsx)(a.A,{className:"h-5 w-5 animate-spin"}):S?(0,o.jsx)(l.A,{className:"h-5 w-5"}):(0,o.jsx)(i.A,{className:"h-5 w-5"})})]})]})]})})}),(0,o.jsx)("audio",{ref:A,className:"hidden",children:(0,o.jsx)("track",{kind:"captions"})})]})}let k=s.memo(function(e){let{initialStations:t}=e;return(0,o.jsx)(x,{initialStations:t})})},97003:(e,t,r)=>{"use strict";r.d(t,{$:()=>d,r:()=>i});var o=r(95155),s=r(12115),n=r(32467),a=r(83101),l=r(25016);let i=(0,a.F)("inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-[color,background-color,border-color,transform] duration-150 ease-out-strong active:scale-[0.97] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3",lg:"h-11 rounded-md px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),d=s.forwardRef((e,t)=>{let{className:r,variant:s,size:a,asChild:d=!1,...c}=e,p=d?n.DX:"button";return(0,o.jsx)(p,{className:(0,l.cn)(i({variant:s,size:a,className:r})),ref:t,...c})});d.displayName="Button"}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.