{"id":514,"date":"2026-07-29T07:16:45","date_gmt":"2026-07-29T07:16:45","guid":{"rendered":"https:\/\/wheelnames.org\/?page_id=514"},"modified":"2026-09-21T11:08:38","modified_gmt":"2026-09-21T11:08:38","slug":"ruleta-aleatoria","status":"publish","type":"page","link":"https:\/\/wheelnames.org\/es\/","title":{"rendered":"Ruleta Aleatoria"},"content":{"rendered":"\n<section aria-labelledby=\"ruleta-title\" style=\"width:100vw;margin:0 0 0 calc(50% - 50vw);padding:34px 20px 28px;text-align:center;background:#07101d;color:#e8eefc\"><div style=\"max-width:1180px;margin:0 auto\"><span style=\"display:inline-flex;padding:7px 12px;border-radius:999px;background:#111b2e;color:#c7d2fe;font-weight:800\">Selector de nombres gratis y ruleta online<\/span><h1 id=\"ruleta-title\" style=\"font-size:clamp(2.65rem,6vw,5.15rem);line-height:1.02;letter-spacing:-.055em;margin:16px 0 12px;color:#f8fafc\">Ruleta de Nombres Aleatoria Gratis<\/h1><p style=\"max-width:830px;margin:0 auto;color:#cbd5e1;font-size:clamp(1.05rem,2vw,1.25rem);line-height:1.7\"><strong style=\"color:#fff\">Ruleta Aleatoria<\/strong> es una ruleta de nombres gratuita y editable. A\u00f1ade nombres, n\u00fameros u opciones, personaliza los colores y pulsa <strong style=\"color:#fff\">Girar la ruleta<\/strong> para obtener un resultado al azar al instante.<\/p><div style=\"display:flex;flex-wrap:wrap;justify-content:center;gap:10px;margin-top:18px\"><span style=\"padding:8px 13px;border-radius:999px;background:#111b2e\">a\u00f1adir o pegar opciones<\/span><span style=\"padding:8px 13px;border-radius:999px;background:#111b2e\">evitar ganadores repetidos<\/span><span style=\"padding:8px 13px;border-radius:999px;background:#111b2e\">selecci\u00f3n ponderada<\/span><span style=\"padding:8px 13px;border-radius:999px;background:#111b2e\">varios ganadores<\/span><\/div><div class=\"wnx-config\" data-title=\"Gira la ruleta aleatoria\" data-mode=\"standard\" data-items=\"Ana~Carlos~Luc\u00eda~Diego~Sof\u00eda~Mateo\" data-palette=\"#6366f1,#8b5cf6,#ec4899,#f97316,#14b8a6,#3b82f6\" data-count=\"1\" hidden><\/div><\/div><\/section>\n\n\n<section class=\"wnx-spinner\" aria-label=\"Interactive spinning wheel\">\n  <div class=\"wnx-toolbar\">\n    <div class=\"wnx-actions\">\n      <button class=\"wnx-btn wnx-share\" type=\"button\">Share<\/button>\n      <button class=\"wnx-btn wnx-export wnx-wide\" type=\"button\">Export CSV<\/button>\n      <button class=\"wnx-btn wnx-fullscreen\" type=\"button\">Fullscreen<\/button>\n      <button class=\"wnx-btn wnx-hide-panel\" type=\"button\">Hide Panel<\/button>\n    <\/div>\n  <\/div>\n\n  <div class=\"wnx-layout\">\n    <section class=\"wnx-stage\">\n      <h2 class=\"wnx-title\">Wheel of Names<\/h2>\n      <div class=\"wnx-wheelbox\">\n        <div class=\"wnx-pointer\" aria-hidden=\"true\"><\/div>\n        <canvas class=\"wnx-canvas\" width=\"900\" height=\"900\" role=\"img\" aria-label=\"Spinning wheel\"><\/canvas>\n      <\/div>\n      <button class=\"wnx-spin\" type=\"button\">SPIN THE WHEEL<\/button>\n      <div class=\"wnx-badges\">\n        <span class=\"wnx-badge wnx-badge-elimination\">Elimination: OFF<\/span>\n        <span class=\"wnx-badge wnx-badge-accumulation\">Accumulation: OFF<\/span>\n        <span class=\"wnx-badge wnx-badge-auto\">Auto-Spin: OFF<\/span>\n        <span class=\"wnx-badge wnx-badge-smart\">Fair Rotation: OFF<\/span>\n      <\/div>\n      <div class=\"wnx-result\" aria-live=\"polite\">Add entries and spin the wheel.<\/div>\n    <\/section>\n\n    <aside class=\"wnx-panel\">\n      <div class=\"wnx-tabs\">\n        <button class=\"wnx-tab is-active\" type=\"button\" data-tab=\"entries\">Entries<\/button>\n        <button class=\"wnx-tab\" type=\"button\" data-tab=\"design\">Design<\/button>\n        <button class=\"wnx-tab wnx-tab-images\" type=\"button\" data-tab=\"images\">Images<\/button>\n        <button class=\"wnx-tab wnx-tab-smart\" type=\"button\" data-tab=\"smart\">Smart \u2726<\/button>\n        <button class=\"wnx-tab\" type=\"button\" data-tab=\"history\">History<\/button>\n      <\/div>\n\n      <section class=\"wnx-pane is-active\" data-pane=\"entries\">\n        <div class=\"wnx-add\">\n          <input class=\"wnx-input wnx-new-entry\" type=\"text\" placeholder=\"Add an entry\" aria-label=\"New wheel entry\">\n          <button class=\"wnx-btn wnx-add-button\" type=\"button\">+<\/button>\n        <\/div>\n        <div class=\"wnx-tools\">\n          <button class=\"wnx-btn wnx-undo\" type=\"button\">Undo<\/button>\n          <button class=\"wnx-btn wnx-redo\" type=\"button\">Redo<\/button>\n          <button class=\"wnx-btn wnx-shuffle\" type=\"button\">Shuffle<\/button>\n          <button class=\"wnx-btn wnx-clear\" type=\"button\">Clear<\/button>\n          <label class=\"wnx-upload\">Upload CSV<input class=\"wnx-file\" type=\"file\" accept=\".csv,text\/csv,text\/plain\"><\/label>\n        <\/div>\n        <textarea class=\"wnx-bulk\"><\/textarea>\n        <button class=\"wnx-btn wnx-apply\" type=\"button\">Apply List<\/button>\n        <ul class=\"wnx-list\"><\/ul>\n      <\/section>\n\n      <section class=\"wnx-pane\" data-pane=\"design\">\n        <div class=\"wnx-field\"><label>Color palette<\/label><div class=\"wnx-palettes\"><\/div><\/div>\n        <div class=\"wnx-field\"><label>Spin duration: <span class=\"wnx-duration-text\">4<\/span> seconds<\/label><input class=\"wnx-duration\" type=\"range\" min=\"1\" max=\"15\" step=\"1\" value=\"15\"><\/div>\n        <div class=\"wnx-checks\">\n          <label><input class=\"wnx-elimination\" type=\"checkbox\"> Elimination mode<\/label>\n          <label><input class=\"wnx-accumulation\" type=\"checkbox\"> Accumulation mode<\/label>\n          <label><input class=\"wnx-auto\" type=\"checkbox\"> Auto-spin<\/label>\n        <\/div>\n        <div class=\"wnx-field wnx-multi-field\"><label>Unique winners<\/label><input class=\"wnx-number wnx-winner-count\" type=\"number\" min=\"1\" max=\"20\" value=\"1\"><\/div>\n      <\/section>\n\n      <section class=\"wnx-pane\" data-pane=\"images\">\n        <div class=\"wnx-image-card\">\n          <h3>Wheel background image<\/h3>\n          <p>Add one image as your spinning wheel background.<\/p>\n          <label class=\"wnx-upload wnx-image-upload\">Choose background<input class=\"wnx-bg-file\" type=\"file\" accept=\"image\/*\"><\/label>\n          <div class=\"wnx-image-row\"><label>Image visibility<\/label><input class=\"wnx-bg-opacity\" type=\"range\" min=\"0\" max=\"100\" value=\"90\"><\/div>\n          <div class=\"wnx-image-actions\"><button class=\"wnx-btn wnx-remove-bg\" type=\"button\" disabled>Reset to normal<\/button><span class=\"wnx-bg-status\">No image selected<\/span><\/div>\n        <\/div>\n\n        <div class=\"wnx-image-card\">\n          <h3>Center image or logo<\/h3>\n          <p>Place a logo, icon, or photo inside the center hub.<\/p>\n          <label class=\"wnx-upload wnx-image-upload\">Choose center image<input class=\"wnx-center-file\" type=\"file\" accept=\"image\/*\"><\/label>\n          <div class=\"wnx-image-row\"><label>Center image size<\/label><input class=\"wnx-center-size\" type=\"range\" min=\"35\" max=\"150\" value=\"62\"><\/div>\n          <div class=\"wnx-image-actions\"><button class=\"wnx-btn wnx-remove-center\" type=\"button\" disabled>Remove center image<\/button><span class=\"wnx-center-status\">No image selected<\/span><\/div>\n        <\/div>\n\n        <div class=\"wnx-image-card\">\n          <h3>Image as a wheel entry<\/h3>\n          <p>Add an image-backed slice with an editable text label.<\/p>\n          <input class=\"wnx-input wnx-image-entry-name\" type=\"text\" placeholder=\"Entry label\" aria-label=\"Image entry label\">\n          <label class=\"wnx-upload wnx-image-upload\">Choose entry image<input class=\"wnx-entry-image-file\" type=\"file\" accept=\"image\/*\"><\/label>\n          <div class=\"wnx-entry-image-preview\" hidden><img alt=\"Selected entry image preview\"><span><\/span><\/div>\n          <button class=\"wnx-btn wnx-add-image-entry\" type=\"button\" disabled>Add image entry<\/button>\n        <\/div>\n\n        <button class=\"wnx-btn wnx-reset-images\" type=\"button\">Reset all images<\/button>\n        <p class=\"wnx-image-note\">Images are optimized and kept in this browser session. They are not included in shared URLs or CSV exports.<\/p>\n      <\/section>\n\n      <section class=\"wnx-pane\" data-pane=\"smart\">\n        <div class=\"wnx-smart-card\">\n          <h3>Smart Fair Rotation<\/h3>\n          <label class=\"wnx-smart-toggle\"><input class=\"wnx-smart-balance\" type=\"checkbox\"> Prioritize least-selected entries<\/label>\n          <div class=\"wnx-smart-row\"><label>Winner cooldown<\/label><select class=\"wnx-input wnx-smart-cooldown\"><option value=\"0\">Off<\/option><option value=\"1\">1 spin<\/option><option value=\"2\">2 spins<\/option><option value=\"3\">3 spins<\/option><option value=\"4\">4 spins<\/option><option value=\"5\">5 spins<\/option><\/select><\/div>\n          <p class=\"wnx-smart-status\">Pure random mode is active.<\/p>\n          <div class=\"wnx-smart-metrics\"><div><b class=\"wnx-balance-score\">100%<\/b><span>balance score<\/span><\/div><div><b class=\"wnx-smart-spins\">0<\/b><span>tracked spins<\/span><\/div><\/div>\n          <div class=\"wnx-smart-counts\"><\/div>\n          <button class=\"wnx-btn wnx-smart-reset\" type=\"button\">Reset Smart Stats<\/button>\n        <\/div>\n        <div class=\"wnx-smart-card\">\n          <h3>Cryptographic Draw Receipt<\/h3>\n          <p>Creates a tamper-evident record of the result, timestamp, entries and active modes.<\/p>\n          <code class=\"wnx-receipt-id\">No receipt yet<\/code>\n          <div class=\"wnx-smart-buttons\"><button class=\"wnx-btn wnx-copy-receipt\" type=\"button\" disabled>Copy Receipt<\/button><button class=\"wnx-btn wnx-download-receipt\" type=\"button\" disabled>Download JSON<\/button><\/div>\n        <\/div>\n      <\/section>\n\n      <section class=\"wnx-pane\" data-pane=\"history\"><ol class=\"wnx-history\"><\/ol><p class=\"wnx-empty\">No spins yet.<\/p><\/section>\n    <\/aside>\n  <\/div>\n\n\n<script>\n(()=>{\n  const r=(document.currentScript&&document.currentScript.closest('.wnx-spinner'))||document.querySelector('.wnx-spinner');\n  if(!r||r.dataset.ready)return;\n  r.dataset.ready='1';\n\n  const $=s=>r.querySelector(s),$$=s=>[...r.querySelectorAll(s)];\n  const params=new URLSearchParams(location.search),cfg=document.querySelector('.wnx-config');\n  const mode=cfg?.dataset.mode||r.dataset.mode||'standard';\n  const title=cfg?.dataset.title||r.dataset.title||document.querySelector('.wn-page h1')?.textContent||'Wheel of Names';\n  const raw=params.get('wnitems')||cfg?.dataset.items||r.dataset.items||'Alice~Bob~Charlie~David~Eve~Frank';\n  const isHomepage=document.body.classList.contains('page-id-10')||location.pathname==='\/';\n  const rawPalette=((cfg?.dataset.palette)||r.dataset.palette||'').split(',').filter(Boolean);\n  const storedPalette=r.querySelector('.wnx-canvas')?._wnxDefaultColors;\n  const configuredPalette=(!isHomepage&&rawPalette.some(c=>\/^#01[0-9a-f]{4}$\/i.test(c))&&Array.isArray(storedPalette)&&storedPalette.length>2)?storedPalette:rawPalette;\n  const hslHex=(h,s,l)=>{s\/=100;l\/=100;const k=n=>(n+h\/30)%12,a=s*Math.min(l,1-l),f=n=>l-a*Math.max(-1,Math.min(k(n)-3,Math.min(9-k(n),1)));return '#'+[f(0),f(8),f(4)].map(v=>Math.round(v*255).toString(16).padStart(2,'0')).join('')};\n  const themeSeed=[...location.pathname].reduce((a,c)=>(a*31+c.charCodeAt(0))>>>0,7);\n  const autoPalette=[0,47,94,141,188,235].map((d,i)=>hslHex((themeSeed%360+d)%360,72-(i%2)*8,50+(i%3)*4));\n  const classicPalette=['#ff2448','#f400a8','#00c96b','#087dff','#7500ec','#ff243f'];\n  const palettes=(isHomepage?[configuredPalette,classicPalette,['#ef476f','#f78c6b','#ffd166','#06d6a0','#118ab2','#7353ba'],['#22c55e','#06b6d4','#3b82f6','#8b5cf6','#ec4899','#f59e0b']]:[configuredPalette.length>2?configuredPalette:autoPalette,autoPalette,classicPalette,['#ef476f','#f78c6b','#ffd166','#06d6a0','#118ab2','#7353ba'],['#22c55e','#06b6d4','#3b82f6','#8b5cf6','#ec4899','#f59e0b']]).filter(x=>x.length>2);\n\n  let colors=palettes[0];\n  let entries=raw.split('~').map(v=>{try{return decodeURIComponent(v)}catch(e){return v}}).filter(Boolean).map(v=>{\n    const p=v.split('|');\n    const weight=mode==='weighted'?Math.max(1,Number(p.pop())||1):1;\n    return{name:p.join('|'),weight,count:0,last:-999,image:''};\n  });\n  let angle=0,busy=false,history=[],undo=[],redo=[],spinNumber=0,lastReceipt=null,preSpin=[];\n  let backgroundImage='',centerImage='',backgroundOpacity=.9,centerRadius=62,pendingEntryImage='',pendingEntryFilename='';\n  const imageCache=new Map();\n\n  const canvas=$('.wnx-canvas'),ctx=canvas.getContext('2d'),spin=$('.wnx-spin'),result=$('.wnx-result'),list=$('.wnx-list');\n  if(!isHomepage){canvas.width=720;canvas.height=720;r.dataset.lightweight='1';}\n  const elimination=$('.wnx-elimination'),accumulation=$('.wnx-accumulation'),auto=$('.wnx-auto'),winnerCount=$('.wnx-winner-count'),duration=$('.wnx-duration');\n  const balance=$('.wnx-smart-balance'),cooldown=$('.wnx-smart-cooldown');\n\n  $('.wnx-title').textContent=title;\n  elimination.checked=mode==='norepeat'||params.get('wnremove')==='1';\n  winnerCount.value=mode==='multi'?Math.max(1,Number(cfg?.dataset.count||r.dataset.count)||3):1;\n  $('.wnx-multi-field').classList.toggle('wnx-hidden',mode!=='multi');\n\n  const escapeHtml=s=>String(s).replace(\/[&<>\"']\/g,m=>({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#039;'}[m]));\n  const snapshot=()=>JSON.stringify(entries);\n  const save=()=>{undo.push(snapshot());if(undo.length>25)undo.shift();redo=[];};\n  const randomInt=n=>{if(n<=1)return 0;const limit=Math.floor(0x100000000\/n)*n,a=new Uint32Array(1);do{crypto.getRandomValues(a)}while(a[0]>=limit);return a[0]%n;};\n\n  function getImage(src){\n    if(!src)return null;\n    if(imageCache.has(src))return imageCache.get(src);\n    const img=new Image();\n    img.onload=draw;\n    img.src=src;\n    imageCache.set(src,img);\n    return img;\n  }\n\n  function drawCover(img,x,y,w,h){\n    if(!img||!img.complete||!img.naturalWidth)return;\n    const scale=Math.max(w\/img.naturalWidth,h\/img.naturalHeight);\n    const dw=img.naturalWidth*scale,dh=img.naturalHeight*scale;\n    ctx.drawImage(img,x+(w-dw)\/2,y+(h-dh)\/2,dw,dh);\n  }\n\n  function drawContain(img,x,y,w,h){\n    if(!img||!img.complete||!img.naturalWidth)return;\n    const scale=Math.min(w\/img.naturalWidth,h\/img.naturalHeight);\n    const dw=img.naturalWidth*scale,dh=img.naturalHeight*scale;\n    ctx.drawImage(img,x+(w-dw)\/2,y+(h-dh)\/2,dw,dh);\n  }\n\n  function readOptimizedImage(file,maxSize=1000){\n    return new Promise((resolve,reject)=>{\n      if(!file||!file.type.startsWith('image\/')){reject(new Error('Please choose an image file.'));return;}\n      const reader=new FileReader();\n      reader.onerror=()=>reject(new Error('The image could not be read.'));\n      reader.onload=()=>{\n        const img=new Image();\n        img.onerror=()=>reject(new Error('The image format is not supported.'));\n        img.onload=()=>{\n          const scale=Math.min(1,maxSize\/Math.max(img.naturalWidth,img.naturalHeight));\n          const w=Math.max(1,Math.round(img.naturalWidth*scale)),h=Math.max(1,Math.round(img.naturalHeight*scale));\n          const temp=document.createElement('canvas');temp.width=w;temp.height=h;\n          const t=temp.getContext('2d');t.drawImage(img,0,0,w,h);\n          const type=file.type==='image\/png'?'image\/png':'image\/jpeg';\n          resolve(temp.toDataURL(type,type==='image\/jpeg'?.86:undefined));\n        };\n        img.src=String(reader.result||'');\n      };\n      reader.readAsDataURL(file);\n    });\n  }\n\n  const smartOn=()=>!elimination.checked&&(balance.checked||Number(cooldown.value)>0);\n  function eligibleEntries(){\n    let pool=[...entries];\n    if(!smartOn())return pool;\n    const cd=Number(cooldown.value);\n    if(cd>0){const cooled=pool.filter(e=>spinNumber-e.last>=cd);if(cooled.length)pool=cooled;}\n    if(balance.checked&&pool.length){const min=Math.min(...pool.map(e=>e.count));pool=pool.filter(e=>e.count===min);}\n    return pool.length?pool:[...entries];\n  }\n\n  function segments(){\n    const total=entries.reduce((s,e)=>s+e.weight,0)||1;\n    let used=0;\n    return entries.map(entry=>{const start=used\/total*Math.PI*2;used+=entry.weight;return{entry,start,end:used\/total*Math.PI*2};});\n  }\n\n  function sliceGradient(color,mid,center,radius){\n    const hex=color.replace('#',''),n=parseInt(hex,16),r=(n>>16)&255,g=(n>>8)&255,b=n&255;\n    const tone=k=>'rgb('+Math.max(0,Math.min(255,r+k))+','+Math.max(0,Math.min(255,g+k))+','+Math.max(0,Math.min(255,b+k))+')';\n    const grad=ctx.createLinearGradient(center,center,center+Math.cos(mid)*radius,center+Math.sin(mid)*radius);\n    grad.addColorStop(0,tone(40));grad.addColorStop(.52,color);grad.addColorStop(1,tone(-38));return grad;\n  }\n\n  function draw(){\n    const size=canvas.width,center=size\/2,radius=size*(418\/900),segs=segments(),allowed=new Set(eligibleEntries());\n    ctx.clearRect(0,0,size,size);\n\n    if(backgroundImage){\n      const img=getImage(backgroundImage);\n      ctx.save();ctx.beginPath();ctx.arc(center,center,radius,0,Math.PI*2);ctx.clip();ctx.globalAlpha=backgroundOpacity;ctx.translate(center,center);ctx.rotate(angle);drawContain(img,-radius,-radius,radius*2,radius*2);ctx.restore();\n    }\n\n    if(!segs.length){\n      ctx.beginPath();ctx.arc(center,center,radius,0,Math.PI*2);ctx.fillStyle='#0b1628';ctx.fill();ctx.strokeStyle='rgba(129,140,248,.24)';ctx.lineWidth=6;ctx.stroke();ctx.fillStyle='#94a3b8';ctx.font='800 34px system-ui';ctx.textAlign='center';ctx.fillText('Add entries',center,center);return;\n    }\n\n    segs.forEach((seg,index)=>{\n      const dim=smartOn()&&!allowed.has(seg.entry);\n      const start=seg.start+angle,end=seg.end+angle;\n      ctx.save();\n      ctx.globalAlpha=dim?.2:1;\n      ctx.beginPath();ctx.moveTo(center,center);ctx.arc(center,center,radius,start,end);ctx.closePath();\n\n      if(seg.entry.image){\n        ctx.save();ctx.clip();drawCover(getImage(seg.entry.image),center-radius,center-radius,radius*2,radius*2);ctx.restore();\n        ctx.globalAlpha=dim?.12:.22;ctx.fillStyle=colors[index%colors.length];ctx.fill();ctx.globalAlpha=dim?.2:1;\n      }else{\n        ctx.fillStyle=isHomepage?sliceGradient(colors[index%colors.length],(start+end)\/2,center,radius):colors[index%colors.length];\n        if(backgroundImage)ctx.globalAlpha=0;\n        ctx.fill();ctx.globalAlpha=dim?.2:1;\n      }\n\n      ctx.strokeStyle='rgba(255,255,255,.82)';ctx.lineWidth=5;ctx.stroke();\n      const mid=(seg.start+seg.end)\/2+angle;\n      ctx.translate(center,center);ctx.rotate(mid);ctx.textAlign='right';ctx.fillStyle='#fff';ctx.shadowColor='rgba(0,0,0,.55)';ctx.shadowBlur=isHomepage?8:3;\n      ctx.font=`850 ${Math.max(20,Math.min(38,390\/entries.length+18))}px system-ui`;\n      const label=seg.entry.name.length>22?seg.entry.name.slice(0,20)+'\u2026':seg.entry.name;\n      ctx.fillText(label,radius-34,10);ctx.restore();\n    });\n\n    ctx.beginPath();ctx.arc(center,center,radius+4,0,Math.PI*2);ctx.strokeStyle='#f6a600';ctx.lineWidth=15;ctx.stroke();\n    ctx.beginPath();ctx.arc(center,center,radius+4,0,Math.PI*2);ctx.strokeStyle='rgba(255,244,180,.92)';ctx.lineWidth=3;ctx.stroke();\n\n    const hub=centerRadius*size\/900;\n    ctx.save();ctx.beginPath();ctx.arc(center,center,hub,0,Math.PI*2);ctx.clip();\n    if(centerImage){drawCover(getImage(centerImage),center-hub,center-hub,hub*2,hub*2);}else{ctx.fillStyle='#0b1628';ctx.fillRect(center-hub,center-hub,hub*2,hub*2);}\n    ctx.restore();ctx.beginPath();ctx.arc(center,center,hub,0,Math.PI*2);ctx.strokeStyle='#f6a600';ctx.lineWidth=10*size\/900;ctx.stroke();ctx.beginPath();ctx.arc(center,center,hub,0,Math.PI*2);ctx.strokeStyle='rgba(255,244,180,.9)';ctx.lineWidth=2*size\/900;ctx.stroke();\n  }\n\n  function updateBadges(){\n    [[ $('.wnx-badge-elimination'),elimination,'Elimination'],[$('.wnx-badge-accumulation'),accumulation,'Accumulation'],[$('.wnx-badge-auto'),auto,'Auto-Spin'],[$('.wnx-badge-smart'),{checked:smartOn()},'Fair Rotation']].forEach(([el,input,label])=>{el.textContent=`${label}: ${input.checked?'ON':'OFF'}`;el.classList.toggle('is-on',input.checked);});\n  }\n\n  function balanceScore(){\n    if(!entries.length)return 100;\n    const total=entries.reduce((s,e)=>s+e.count,0),mean=total\/entries.length;\n    if(!mean)return 100;\n    const deviation=entries.reduce((s,e)=>s+Math.abs(e.count-mean),0)\/entries.length;\n    return Math.max(0,Math.round(100-deviation\/mean*100));\n  }\n\n  function updateDashboard(){\n    $('.wnx-balance-score').textContent=balanceScore()+'%';$('.wnx-smart-spins').textContent=String(spinNumber);\n    $('.wnx-smart-counts').innerHTML=[...entries].sort((a,b)=>a.count-b.count||a.name.localeCompare(b.name)).map(e=>`<div class=\"wnx-smart-count\"><span>${escapeHtml(e.name)}<\/span><b>${e.count}<\/b><\/div>`).join('')||'<p>No entries yet.<\/p>';\n    const status=$('.wnx-smart-status');\n    if(elimination.checked&&(balance.checked||Number(cooldown.value)>0))status.textContent='Smart Fair Rotation is paused while Elimination mode is active.';\n    else if(!smartOn())status.textContent='Pure random mode is active.';\n    else{const parts=[];if(balance.checked)parts.push('least-selected priority');if(Number(cooldown.value)>0)parts.push(`${cooldown.value}-spin cooldown`);status.textContent=`Smart mode active: ${parts.join(' + ')}. Dimmed slices are temporarily ineligible.`;}\n  }\n\n  function render(){\n    list.innerHTML=entries.map((entry,index)=>'<li class=\"wnx-entry\"><span class=\"wnx-grip\">\u22ee\u22ee<\/span><div class=\"wnx-entry-main\">'+(entry.image?'<span class=\"wnx-entry-thumb\"><img decoding=\"async\" src=\"'+entry.image+'\" alt=\"\"><\/span>':'')+'<input class=\"wnx-entry-name\" value=\"'+escapeHtml(entry.name)+'\" data-edit=\"'+index+'\" aria-label=\"Entry '+(index+1)+'\"><\/div><div class=\"wnx-weight\"><button class=\"wnx-mini\" data-act=\"minus\" data-i=\"'+index+'\">\u2212<\/button><span>'+entry.weight+'<\/span><button class=\"wnx-mini\" data-act=\"plus\" data-i=\"'+index+'\">+<\/button><\/div><button class=\"wnx-mini wnx-remove\" data-act=\"remove\" data-i=\"'+index+'\" aria-label=\"Remove '+escapeHtml(entry.name)+'\">\u00d7<\/button><\/li>').join('');\n    $('.wnx-undo').disabled=!undo.length;$('.wnx-redo').disabled=!redo.length;draw();updateBadges();updateDashboard();\n  }\n\n  function choose(pool){const total=pool.reduce((s,e)=>s+e.weight,0);let n=randomInt(total),used=0;for(let i=0;i<pool.length;i++){used+=pool[i].weight;if(n<used)return i;}return pool.length-1;}\n  async function sha256(text){const bytes=new TextEncoder().encode(text),hash=await crypto.subtle.digest('SHA-256',bytes);return[...new Uint8Array(hash)].map(v=>v.toString(16).padStart(2,'0')).join('');}\n  async function createReceipt(selected){\n    const payload={version:2,site:location.origin,page:location.pathname,timestamp:new Date().toISOString(),spinNumber,result:selected.map(e=>e.name),entries:preSpin,entryImages:selected.map(e=>({name:e.name,hasImage:Boolean(e.image)})),backgroundImage:Boolean(backgroundImage),centerImage:Boolean(centerImage),smartFairRotation:balance.checked,cooldownSpins:Number(cooldown.value),elimination:elimination.checked,accumulation:accumulation.checked,autoSpin:auto.checked};\n    const hash=await sha256(JSON.stringify(payload));lastReceipt={...payload,sha256:hash,receiptId:'WNR-'+hash.slice(0,16).toUpperCase()};\n    $('.wnx-receipt-id').textContent=lastReceipt.receiptId;$('.wnx-copy-receipt').disabled=false;$('.wnx-download-receipt').disabled=false;\n  }\n\n  function finish(selected){\n    spinNumber++;selected.forEach(e=>{e.count++;e.last=spinNumber;});\n    const time=new Date().toLocaleTimeString();history.unshift(`${time} \u2014 ${selected.map(e=>e.name).join(', ')}`);\n    $('.wnx-history').innerHTML=history.map(v=>`<li>${escapeHtml(v)}<\/li>`).join('');$('.wnx-empty').classList.toggle('wnx-hidden',history.length>0);\n    result.textContent=(selected.length>1?'Winners: ':'Winner: ')+selected.map(e=>e.name+(accumulation.checked?` (${e.count})`:'')).join(', ');\n    createReceipt(selected);\n    if(elimination.checked){save();const set=new Set(selected);entries=entries.filter(e=>!set.has(e));render();}else{draw();updateDashboard();updateBadges();}\n    busy=false;spin.disabled=false;if(auto.checked&&entries.length)setTimeout(startSpin,1200);\n  }\n\n  function startSpin(){if(busy||!entries.length){if(!entries.length)result.textContent='Add at least one entry.';return;}busy=true;spin.disabled=true;preSpin=entries.map(e=>({name:e.name,weight:e.weight,hasImage:Boolean(e.image)}));let base=eligibleEntries();if(mode==='multi'&&base.length<Math.max(1,Number(winnerCount.value)||1))base=[...entries];const pool=[...base],selected=[],wanted=Math.min(pool.length,Math.max(1,Number(winnerCount.value)||1));for(let i=0;i<wanted;i++){const index=choose(pool);selected.push(pool[index]);pool.splice(index,1);}const segs=segments(),targetIndex=entries.indexOf(selected[0]),middle=(segs[targetIndex].start+segs[targetIndex].end)\/2,target=-Math.PI\/2-middle,start=angle,reverseTurns=2+randomInt(2),forwardTurns=5+randomInt(3),ms=Math.max(1,Number(duration.value)||15)*1000,reverseMs=Math.min(ms*.28,4200),startTime=performance.now(),reverseEnd=start-reverseTurns*Math.PI*2,forwardDelta=((target-reverseEnd)%(Math.PI*2)+Math.PI*2)%(Math.PI*2)+forwardTurns*Math.PI*2;let lastPaint=0;function frame(now){const elapsed=now-startTime,progress=Math.min(1,elapsed\/ms);let nextAngle;if(elapsed<reverseMs){const p=Math.min(1,elapsed\/reverseMs),ease=1-Math.pow(1-p,3);nextAngle=start-reverseTurns*Math.PI*2*ease;}else{const p=Math.min(1,(elapsed-reverseMs)\/Math.max(1,ms-reverseMs)),ease=1-Math.pow(1-p,5);nextAngle=reverseEnd+forwardDelta*ease;}if(isHomepage||progress>=1||now-lastPaint>=22){angle=nextAngle;draw();lastPaint=now;}if(progress<1)requestAnimationFrame(frame);else{angle=target;draw();finish(selected);}}requestAnimationFrame(frame);}\n  spin.onclick=startSpin;canvas.onclick=startSpin;canvas.tabIndex=0;canvas.onkeydown=e=>{if(e.key==='Enter'||e.key===' '){e.preventDefault();startSpin();}};\n  $('.wnx-add-button').onclick=()=>{const input=$('.wnx-new-entry'),value=input.value.trim();if(!value)return;save();entries.push({name:value,weight:1,count:0,last:-999,image:''});input.value='';render();};\n  $('.wnx-new-entry').onkeydown=e=>{if(e.key==='Enter')$('.wnx-add-button').click();};\n  $('.wnx-apply').onclick=()=>{const values=$('.wnx-bulk').value.split(\/\\n|,\/).map(v=>v.trim()).filter(Boolean);if(!values.length)return;save();entries=values.map(name=>({name,weight:1,count:0,last:-999,image:''}));spinNumber=0;render();};\n  $('.wnx-file').onchange=e=>{const file=e.target.files?.[0];if(!file)return;const reader=new FileReader();reader.onload=()=>{$('.wnx-bulk').value=String(reader.result||'').replace(\/,\/g,'\\n');};reader.readAsText(file);};\n  $('.wnx-shuffle').onclick=()=>{save();for(let i=entries.length-1;i>0;i--){const j=randomInt(i+1);[entries[i],entries[j]]=[entries[j],entries[i]];}render();};\n  $('.wnx-clear').onclick=()=>{save();entries=[];spinNumber=0;render();};\n  $('.wnx-undo').onclick=()=>{if(!undo.length)return;redo.push(snapshot());entries=JSON.parse(undo.pop());render();};\n  $('.wnx-redo').onclick=()=>{if(!redo.length)return;undo.push(snapshot());entries=JSON.parse(redo.pop());render();};\n\n  list.onclick=e=>{const button=e.target.closest('[data-act]');if(!button)return;save();const index=Number(button.dataset.i),action=button.dataset.act;if(action==='remove')entries.splice(index,1);if(action==='plus')entries[index].weight++;if(action==='minus')entries[index].weight=Math.max(1,entries[index].weight-1);render();};\n  list.onchange=e=>{if(!e.target.matches('[data-edit]'))return;save();entries[Number(e.target.dataset.edit)].name=e.target.value.trim()||'Untitled';render();};\n\n  $('.wnx-bg-file').onchange=async e=>{const file=e.target.files?.[0];if(!file)return;try{backgroundImage=await readOptimizedImage(file,1200);$('.wnx-bg-status').textContent=file.name;$('.wnx-remove-bg').disabled=false;draw();}catch(err){$('.wnx-bg-status').textContent=err.message;}};\n  $('.wnx-bg-opacity').oninput=e=>{backgroundOpacity=Number(e.target.value)\/100;draw();};\n  $('.wnx-remove-bg').onclick=()=>{backgroundImage='';backgroundOpacity=.9;$('.wnx-bg-opacity').value='90';$('.wnx-bg-file').value='';$('.wnx-bg-status').textContent='No image selected';$('.wnx-remove-bg').disabled=true;draw();};\n\n  $('.wnx-center-file').onchange=async e=>{const file=e.target.files?.[0];if(!file)return;try{centerImage=await readOptimizedImage(file,600);$('.wnx-center-status').textContent=file.name;$('.wnx-remove-center').disabled=false;draw();}catch(err){$('.wnx-center-status').textContent=err.message;}};\n  $('.wnx-center-size').oninput=e=>{centerRadius=Number(e.target.value);draw();};\n  $('.wnx-remove-center').onclick=()=>{centerImage='';$('.wnx-center-file').value='';$('.wnx-center-status').textContent='No image selected';$('.wnx-remove-center').disabled=true;draw();};\n\n  $('.wnx-entry-image-file').onchange=async e=>{const file=e.target.files?.[0];if(!file)return;try{pendingEntryImage=await readOptimizedImage(file,650);pendingEntryFilename=file.name.replace(\/.[^.]+$\/,'');const preview=$('.wnx-entry-image-preview');preview.querySelector('img').src=pendingEntryImage;preview.querySelector('span').textContent=file.name;preview.hidden=false;$('.wnx-add-image-entry').disabled=false;}catch(err){result.textContent=err.message;}};\n  $('.wnx-add-image-entry').onclick=()=>{if(!pendingEntryImage)return;const label=$('.wnx-image-entry-name').value.trim()||pendingEntryFilename||'Image entry';save();entries.push({name:label,weight:1,count:0,last:-999,image:pendingEntryImage});pendingEntryImage='';pendingEntryFilename='';$('.wnx-image-entry-name').value='';$('.wnx-entry-image-file').value='';$('.wnx-entry-image-preview').hidden=true;$('.wnx-add-image-entry').disabled=true;render();};\n  $('.wnx-reset-images').onclick=()=>{backgroundImage='';centerImage='';pendingEntryImage='';entries.forEach(e=>e.image='');$('.wnx-bg-file').value='';$('.wnx-center-file').value='';$('.wnx-entry-image-file').value='';$('.wnx-bg-status').textContent='No image selected';$('.wnx-center-status').textContent='No image selected';$('.wnx-remove-bg').disabled=true;$('.wnx-remove-center').disabled=true;$('.wnx-add-image-entry').disabled=true;$('.wnx-entry-image-preview').hidden=true;render();};\n\n  duration.oninput=()=>{$('.wnx-duration-text').textContent=duration.value;};\n  [elimination,accumulation,auto,balance,cooldown].forEach(control=>control.onchange=()=>{updateBadges();updateDashboard();draw();});\n  $('.wnx-smart-reset').onclick=()=>{entries.forEach(e=>{e.count=0;e.last=-999;});spinNumber=0;lastReceipt=null;$('.wnx-receipt-id').textContent='No receipt yet';$('.wnx-copy-receipt').disabled=true;$('.wnx-download-receipt').disabled=true;render();};\n\n  $('.wnx-hide-panel').onclick=()=>{const panel=$('.wnx-panel');panel.classList.toggle('wnx-hidden');$('.wnx-hide-panel').textContent=panel.classList.contains('wnx-hidden')?'Show Panel':'Hide Panel';};\n  $('.wnx-fullscreen').onclick=()=>r.requestFullscreen?.();\n  $('.wnx-export').onclick=()=>{const csv='entry,weight,count,has_image\\n'+entries.map(e=>`\"${e.name.replace(\/\"\/g,'\"\"')}\",${e.weight},${e.count},${e.image?'yes':'no'}`).join('\\n'),a=document.createElement('a');a.href=URL.createObjectURL(new Blob([csv],{type:'text\/csv'}));a.download='wheel-entries.csv';a.click();setTimeout(()=>URL.revokeObjectURL(a.href),1000);};\n  $('.wnx-share').onclick=async()=>{const url=new URL(location.href);url.searchParams.set('wnitems',entries.map(e=>encodeURIComponent(e.name)+(e.weight>1?'|'+e.weight:'')).join('~'));elimination.checked?url.searchParams.set('wnremove','1'):url.searchParams.delete('wnremove');try{await navigator.clipboard.writeText(url);result.textContent=entries.some(e=>e.image)||backgroundImage||centerImage?'Share link copied. Images stay in this browser session.':'Share link copied.';}catch(e){result.textContent=url;}};\n\n  $('.wnx-copy-receipt').onclick=async()=>{if(!lastReceipt)return;const text=`${lastReceipt.receiptId}\\nWinner: ${lastReceipt.result.join(', ')}\\nTime: ${lastReceipt.timestamp}\\nSHA-256: ${lastReceipt.sha256}`;try{await navigator.clipboard.writeText(text);$('.wnx-copy-receipt').textContent='Copied';setTimeout(()=>$('.wnx-copy-receipt').textContent='Copy Receipt',1200);}catch(e){$('.wnx-receipt-id').textContent=text;}};\n  $('.wnx-download-receipt').onclick=()=>{if(!lastReceipt)return;const report={receipt:lastReceipt,balanceScore:balanceScore()+'%',selectionCounts:Object.fromEntries(entries.map(e=>[e.name,e.count]))},a=document.createElement('a');a.href=URL.createObjectURL(new Blob([JSON.stringify(report,null,2)],{type:'application\/json'}));a.download=lastReceipt.receiptId+'.json';a.click();setTimeout(()=>URL.revokeObjectURL(a.href),1000);};\n\n  const activateTab=button=>{const pane=$(`.wnx-pane[data-pane=\"${button.dataset.tab}\"]`);if(!pane)return;$$('.wnx-tab').forEach(x=>x.classList.remove('is-active'));$$('.wnx-pane').forEach(x=>x.classList.remove('is-active'));button.classList.add('is-active');pane.classList.add('is-active');if(button.dataset.tab==='smart')updateDashboard();};\n  if(isHomepage){$$('.wnx-tab').forEach(button=>button.onclick=()=>activateTab(button));}\n  else{\n    const nativeTabs=new Set(['entries','design','images','smart','history']),tabBar=$('.wnx-tabs');\n    tabBar.addEventListener('click',event=>{const button=event.target.closest('.wnx-tab');if(!button||!nativeTabs.has(button.dataset.tab))return;event.preventDefault();event.stopImmediatePropagation();activateTab(button);},{capture:true,passive:false});\n  }\n  const paletteNames=isHomepage?['Original palette','Classic palette','Sunset palette','Ocean palette']:['Tool theme','Unique theme','Classic palette','Sunset palette','Ocean palette'];\n  palettes.forEach((palette,index)=>{const button=document.createElement('button');button.type='button';button.className='wnx-palette'+(index?'':' is-active');button.style.background=`linear-gradient(135deg,${palette.join(',')})`;button.setAttribute('aria-label',paletteNames[index]||`Palette ${index+1}`);button.setAttribute('aria-pressed',String(index===0));button.onclick=()=>{colors=palette.slice();$$('.wnx-palette').forEach(x=>{x.classList.remove('is-active');x.setAttribute('aria-pressed','false')});button.classList.add('is-active');button.setAttribute('aria-pressed','true');draw();result.textContent='Palette applied.';};$('.wnx-palettes').append(button);});\n\n  render();\n})();\n<\/script>\n<\/section>\n<script id=\"wnx-tab-recovery-v1\">\n(function () {\n  if (document.body.classList.contains('page-id-10') || location.pathname === '\/') return;\n  if (window.__wnxTabRecoveryV1) return;\n  window.__wnxTabRecoveryV1 = true;\n\n  document.addEventListener('click', function (event) {\n    var button = event.target.closest && event.target.closest('.wnx-spinner .wnx-tab');\n    if (!button) return;\n\n    var panel = button.closest('.wnx-panel');\n    var key = button.getAttribute('data-tab');\n    if (!panel || !key) return;\n\n    var panes = Array.prototype.slice.call(panel.querySelectorAll('.wnx-pane'));\n    var pane = panes.find(function (item) { return item.getAttribute('data-pane') === key; });\n    if (!pane) return;\n\n    Array.prototype.forEach.call(panel.querySelectorAll('.wnx-tab'), function (tab) {\n      var active = tab === button;\n      tab.classList.toggle('is-active', active);\n      tab.setAttribute('aria-selected', active ? 'true' : 'false');\n    });\n    panes.forEach(function (item) {\n      item.classList.toggle('is-active', item === pane);\n    });\n  }, true);\n}());\n<\/script>\n\n\n<div class=\"wn-page\"><section class=\"wn-section\" id=\"respuesta\"><h2>\u00bfQu\u00e9 es una ruleta aleatoria?<\/h2><p><strong>Una ruleta aleatoria es una herramienta online que elige al azar un nombre, n\u00famero, premio, tarea o cualquier otra opci\u00f3n de una lista.<\/strong> Cada elemento aparece como un segmento visible de la rueda. Al girarla, el selector utiliza valores aleatorios generados por el navegador, reduce gradualmente la velocidad y muestra un resultado claro.<\/p><p>Esta ruleta de nombres funciona directamente en tel\u00e9fonos, tabletas y ordenadores. No necesitas crear una cuenta: escribe o pega tus opciones y empieza a girar.<\/p><\/section>\n\n<section class=\"wn-section\"><nav class=\"wn-toc\" aria-label=\"Contenido de la gu\u00eda\"><strong>Gu\u00eda de la ruleta aleatoria<\/strong><ol><li><a href=\"#como-usar\">C\u00f3mo usar la ruleta<\/a><\/li><li><a href=\"#funciones\">Funciones principales<\/a><\/li><li><a href=\"#probabilidad\">C\u00f3mo funciona la probabilidad<\/a><\/li><li><a href=\"#usos\">Usos populares<\/a><\/li><li><a href=\"#modos\">Modos de selecci\u00f3n<\/a><\/li><li><a href=\"#privacidad\">Imparcialidad y privacidad<\/a><\/li><li><a href=\"#preguntas\">Preguntas frecuentes<\/a><\/li><\/ol><\/nav><\/section>\n\n<section class=\"wn-section\" id=\"como-usar\"><h2>C\u00f3mo usar la Ruleta Aleatoria<\/h2><div class=\"wn-steps\"><div class=\"wn-step\"><h3>1. A\u00f1ade nombres u opciones<\/h3><p>Escribe cada opci\u00f3n por separado, pega una lista completa o sube un archivo CSV o TXT. Revisa la lista y elimina entradas duplicadas o no v\u00e1lidas.<\/p><\/div><div class=\"wn-step\"><h3>2. Personaliza la ruleta online<\/h3><p>Cambia los colores y la duraci\u00f3n del giro. Activa el modo eliminaci\u00f3n, acumulaci\u00f3n o giro autom\u00e1tico cuando sea adecuado para tu actividad.<\/p><\/div><div class=\"wn-step\"><h3>3. Gira y confirma el resultado<\/h3><p>Pulsa <strong>Girar la ruleta<\/strong>. La rueda se detendr\u00e1 en una opci\u00f3n y guardar\u00e1 el resultado en el historial.<\/p><\/div><\/div><\/section>\n\n<section class=\"wn-section\" id=\"funciones\"><h2>Funciones de la ruleta de nombres<\/h2><div class=\"wn-grid\"><article class=\"wn-card\"><h3>Lista completamente editable<\/h3><p>A\u00f1ade, cambia, elimina, mezcla o pega muchas opciones sin recargar la p\u00e1gina.<\/p><\/article><article class=\"wn-card\"><h3>Modo sin repeticiones<\/h3><p>Elimina autom\u00e1ticamente cada resultado seleccionado para crear un orden \u00fanico o elegir varios ganadores distintos.<\/p><\/article><article class=\"wn-card\"><h3>Colores y duraci\u00f3n<\/h3><p>Personaliza la apariencia y la velocidad manteniendo las etiquetas legibles en cualquier pantalla.<\/p><\/article><article class=\"wn-card\"><h3>Historial y exportaci\u00f3n<\/h3><p>Consulta giros anteriores y exporta las opciones para conservar un registro sencillo.<\/p><\/article><article class=\"wn-card\"><h3>Compartir y pantalla completa<\/h3><p>Comparte tu configuraci\u00f3n o abre la ruleta en pantalla completa para clases, reuniones y eventos.<\/p><\/article><article class=\"wn-card\"><h3>Selecci\u00f3n flexible<\/h3><p>Elige entre selecci\u00f3n est\u00e1ndar, ponderada, eliminaci\u00f3n, acumulaci\u00f3n y m\u00faltiples ganadores.<\/p><\/article><\/div><\/section>\n\n<section class=\"wn-section\" id=\"probabilidad\"><h2>C\u00f3mo funciona la selecci\u00f3n aleatoria<\/h2><p>En el modo est\u00e1ndar, todas las opciones activas tienen la misma probabilidad. Si hay seis nombres, cada uno tiene una posibilidad de 1 entre 6 en ese giro. En una ruleta ponderada, la probabilidad de una opci\u00f3n equivale a su peso dividido por el peso total. Cuando se elimina un resultado, las probabilidades se recalculan antes del siguiente giro.<\/p><div class=\"wn-grid\"><article class=\"wn-card\"><h3>Selecci\u00f3n est\u00e1ndar<\/h3><p><strong>Probabilidad = 1 \u00f7 n\u00famero de opciones activas.<\/strong><\/p><\/article><article class=\"wn-card\"><h3>Selecci\u00f3n ponderada<\/h3><p><strong>Probabilidad = peso de la opci\u00f3n \u00f7 peso total.<\/strong><\/p><\/article><article class=\"wn-card\"><h3>Selecci\u00f3n sin repetici\u00f3n<\/h3><p>El resultado se retira y la siguiente elecci\u00f3n se realiza entre las opciones restantes.<\/p><\/article><\/div><\/section>\n\n<section class=\"wn-section\" id=\"usos\"><h2>\u00bfPara qu\u00e9 sirve una ruleta aleatoria?<\/h2><div class=\"wn-grid\"><article class=\"wn-card wide\"><h3>Clases y educaci\u00f3n<\/h3><p>Selecciona estudiantes, turnos de lectura, preguntas, tareas, equipos u orden de presentaciones.<\/p><\/article><article class=\"wn-card wide\"><h3>Sorteos y premios<\/h3><p>Introduce una lista verificada de participantes, explica las reglas y elige un ganador visible.<\/p><\/article><article class=\"wn-card wide\"><h3>Reuniones y equipos<\/h3><p>Elige moderadores, portavoces, responsables de notas o capitanes de equipo.<\/p><\/article><article class=\"wn-card wide\"><h3>Juegos y decisiones<\/h3><p>Decide una pel\u00edcula, comida, restaurante, actividad, destino, reto o tarea dom\u00e9stica.<\/p><\/article><\/div><\/section>\n\n<section class=\"wn-section\" id=\"modos\"><h2>Modos de la ruleta online<\/h2><table class=\"wn-table\"><thead><tr><th>Modo<\/th><th>Uso recomendado<\/th><th>Qu\u00e9 cambia<\/th><\/tr><\/thead><tbody><tr><td><strong>Est\u00e1ndar<\/strong><\/td><td>Un resultado independiente<\/td><td>Todas las opciones permanecen disponibles.<\/td><\/tr><tr><td><strong>Eliminaci\u00f3n<\/strong><\/td><td>Turnos o ganadores sin repetir<\/td><td>La opci\u00f3n seleccionada se elimina.<\/td><\/tr><tr><td><strong>Ponderado<\/strong><\/td><td>Probabilidades diferentes<\/td><td>Los pesos m\u00e1s altos aumentan la posibilidad.<\/td><\/tr><tr><td><strong>Varios ganadores<\/strong><\/td><td>M\u00e1s de un resultado<\/td><td>La herramienta devuelve varias opciones \u00fanicas.<\/td><\/tr><tr><td><strong>Acumulaci\u00f3n<\/strong><\/td><td>Contar resultados repetidos<\/td><td>Registra cu\u00e1ntas veces aparece cada opci\u00f3n.<\/td><\/tr><\/tbody><\/table><\/section>\n\n<section class=\"wn-section\" id=\"privacidad\"><h2>\u00bfLa ruleta aleatoria es justa y privada?<\/h2><p>El selector utiliza <code>crypto.getRandomValues()<\/code> del navegador como fuente aleatoria y relaciona el valor generado con las opciones activas. Para sorteos importantes, revisa la lista, comunica las reglas y conserva el historial o un comprobante del resultado.<\/p><p>Evita introducir contrase\u00f1as, datos m\u00e9dicos, direcciones u otra informaci\u00f3n sensible. Una ruleta online no debe sustituir controles de seguridad, criterios profesionales, ajustes de accesibilidad ni requisitos legales.<\/p><p class=\"wn-source\">Referencia t\u00e9cnica: <a href=\"https:\/\/developer.mozilla.org\/es\/docs\/Web\/API\/Crypto\/getRandomValues\">MDN Web Docs: Crypto.getRandomValues()<\/a>.<\/p><\/section>\n\n<section class=\"wn-section\"><h2>C\u00f3mo funciona la rueda de nombres: selecci\u00f3n 100% justa y aleatoria<\/h2><p>La rueda de nombres elige ganadores con un generador de n\u00fameros aleatorios (RNG) que se ejecuta en tu propio navegador. La animaci\u00f3n del giro es solo un efecto visual: el resultado ya est\u00e1 decidido antes de que la ruleta empiece a moverse, as\u00ed que nadie puede predecirlo ni manipularlo. Adem\u00e1s, tus nombres nunca salen de tu dispositivo: no necesitas crear una cuenta, no se guardan en ning\u00fan servidor y no compartimos datos con terceros. Todo lo que escribas en la lista permanece en tu sesi\u00f3n local, lo que convierte a nuestra ruleta de nombres en una opci\u00f3n segura para aulas, sorteos entre amigos y concursos profesionales donde la privacidad importa tanto como la imparcialidad.<\/p><\/section>\n\n<section class=\"wn-section\"><h2>Rueda de nombres con modo eliminaci\u00f3n y pantalla completa<\/h2><p>\u00bfNecesitas elegir varios ganadores sin repetir? Activa el modo eliminaci\u00f3n: cada vez que la rueda de nombres selecciona un ganador, ese nombre desaparece autom\u00e1ticamente de la lista, garantizando resultados \u00fanicos en cada giro. Es ideal para rifas con m\u00faltiples premios, sorteos de equipos o din\u00e1micas de clase donde cada participante solo puede ganar una vez. Adem\u00e1s, la ruleta incluye un modo de pantalla completa perfecto para presentaciones en el aula, eventos en vivo o transmisiones por streaming: proyecta la rueda a gran tama\u00f1o para que todos vean el giro en tiempo real y el resultado sea transparente y emocionante para la audiencia.<\/p><\/section>\n\n<section class=\"wn-section\"><h2>Personaliza tu ruleta: sonidos, duraci\u00f3n e im\u00e1genes<\/h2><p>Cada ruleta es tuya y puedes adaptarla a tu estilo. Ajusta la duraci\u00f3n del giro, activa o desactiva los efectos de sonido y la m\u00fasica de fondo, cambia los colores y el tema de la rueda, e incluso a\u00f1ade im\u00e1genes a cada opci\u00f3n para sorteos visuales, como premios o fotos de participantes. Puedes nombrar tu ruleta, ordenar o mezclar las entradas y configurar cu\u00e1ntas veces se puede girar. Todas estas opciones est\u00e1n disponibles gratis y sin registro, directamente en tu navegador, para que la ruleta de nombres se sienta tan \u00fanica como tu sorteo.<\/p><\/section>\n\n<section class=\"wn-section\"><h2>Sorteos en Instagram, TikTok y transmisiones en vivo<\/h2><p>Nuestra ruleta es perfecta para sorteos en redes sociales: re\u00fane los nombres de los participantes de tus comentarios de Instagram o TikTok, p\u00e9galos en la lista y gira la rueda de nombres en directo frente a tu audiencia. El modo de pantalla completa y la animaci\u00f3n llamativa mantienen la tensi\u00f3n hasta el \u00faltimo segundo, y como el resultado es completamente aleatorio e imposible de manipular, tus seguidores conf\u00edan en la transparencia del sorteo. Tambi\u00e9n funciona de maravilla en directos de YouTube, Twitch o webinars: comparte tu pantalla, gira y anuncia al ganador al instante, sin descargar nada ni pagar licencias.<\/p><\/section>\n\n<section class=\"wn-section\" id=\"preguntas\"><h2>Preguntas frecuentes sobre la Ruleta Aleatoria<\/h2><div class=\"wn-faq\"><details><summary>\u00bfLa ruleta aleatoria es gratis?<\/summary><p>S\u00ed. Puedes usarla gratis sin registrarte ni crear una cuenta.<\/p><\/details><details><summary>\u00bfC\u00f3mo a\u00f1ado muchos nombres a la vez?<\/summary><p>Pega una opci\u00f3n por l\u00ednea en el cuadro de entrada masiva o sube un archivo CSV o TXT.<\/p><\/details><details><summary>\u00bfPuedo evitar que una persona gane dos veces?<\/summary><p>S\u00ed. Activa el modo eliminaci\u00f3n para retirar autom\u00e1ticamente cada opci\u00f3n seleccionada.<\/p><\/details><details><summary>\u00bfPuedo dar probabilidades diferentes?<\/summary><p>S\u00ed. Utiliza el modo ponderado y asigna un peso mayor o menor a cada opci\u00f3n.<\/p><\/details><details><summary>\u00bfPuede elegir varios ganadores?<\/summary><p>S\u00ed. Selecciona el n\u00famero de resultados \u00fanicos antes de girar.<\/p><\/details><details><summary>\u00bfFunciona en el m\u00f3vil?<\/summary><p>S\u00ed. La ruleta se adapta a tel\u00e9fonos, tabletas, port\u00e1tiles y ordenadores.<\/p><\/details><details><summary>\u00bfQu\u00e9 puedo escribir en la ruleta?<\/summary><p>Nombres, n\u00fameros, estudiantes, premios, tareas, comidas, colores, preguntas o cualquier opci\u00f3n de texto apropiada.<\/p><\/details><details><summary>\u00bfRuleta aleatoria y ruleta de nombres significan lo mismo?<\/summary><p>Una ruleta de nombres es un tipo de ruleta aleatoria. La misma herramienta tambi\u00e9n puede elegir n\u00fameros, premios, actividades y otras opciones.<\/p><\/details><details><summary>\u00bfPuedo guardar mi ruleta de nombres y compartirla con un enlace?<\/summary><p>S\u00ed. Puedes guardar la configuraci\u00f3n de tu rueda de nombres y compartirla mediante un enlace \u00fanico. Quien abra el enlace ver\u00e1 la misma lista de participantes y el mismo dise\u00f1o, listo para girar. Es ideal para enviar el sorteo a colegas, alumnos o colaboradores antes de un evento, o para reutilizar la misma ruleta en varias sesiones sin tener que volver a escribir los nombres.<\/p><\/details><details><summary>\u00bfCu\u00e1ntos nombres puedo a\u00f1adir a la ruleta?<\/summary><p>La ruleta de nombres admite listas largas, de cientos e incluso miles de entradas, sin coste adicional. Con listas muy extensas, te recomendamos usar nombres cortos para que cada segmento de la rueda siga siendo legible durante el giro. Si la lista es enorme, el modo de pantalla completa ayuda a que la audiencia siga el resultado con claridad.<\/p><\/details><details><summary>\u00bfPuedo usar la ruleta de nombres con PowerPoint o Google Sheets?<\/summary><p>Por supuesto. Muchos docentes copian su lista de alumnos desde Google Sheets o Excel y la pegan directamente en la ruleta de nombres. Tambi\u00e9n puedes insertar la rueda en tus presentaciones: abre la ruleta en el navegador, act\u00edvala en pantalla completa y alterna con tu PowerPoint durante la clase. Funciona en aulas virtuales como Zoom o Google Meet compartiendo tu pantalla.<\/p><\/details><details><summary>\u00bfLa ruleta de nombres es realmente gratis? \u00bfHay l\u00edmites ocultos?<\/summary><p>Es 100% gratis y sin l\u00edmites ocultos: giros ilimitados, listas del tama\u00f1o que necesites y todas las opciones de personalizaci\u00f3n incluidas. No pedimos tarjeta ni registro. La ruleta de nombres se mantiene gratuita porque funciona directamente en tu navegador, sin costosos servidores procesando tus sorteos.<\/p><\/details><details><summary>\u00bfFunciona la ruleta en el m\u00f3vil?<\/summary><p>S\u00ed, la rueda de nombres est\u00e1 optimizada para m\u00f3viles y tabletas, tanto en Android como en iPhone. La interfaz t\u00e1ctil permite a\u00f1adir nombres, girar y ver al ganador con total fluidez desde el navegador, sin instalar ninguna aplicaci\u00f3n. Es perfecta para sorteos improvisados en clase, en eventos o entre amigos, est\u00e9s donde est\u00e9s.<\/p><\/details><\/div><\/section><\/div>\n\n\n<!-- wn-es-locale-start -->\n<script>\n(function init(){\n  if (!document.documentElement.lang.toLowerCase().startsWith('es')) return;\n  const root = document.querySelector('.wnx-spinner');\n  if (!root || root.dataset.ready !== '1') { setTimeout(init,100); return; }\n  const exact = {\n    'Interactive spinning wheel':'Ruleta giratoria interactiva','Share':'Compartir','Export CSV':'Exportar CSV','Fullscreen':'Pantalla completa',\n    'Hide Panel':'Ocultar panel','Show Panel':'Mostrar panel','SPIN THE WHEEL':'GIRAR LA RULETA','Entries':'Opciones','Design':'Dise\u00f1o',\n    'Skins':'Apariencias','Images':'Im\u00e1genes','Smart \u2726':'Inteligente \u2726','History':'Historial','Undo':'Deshacer','Redo':'Rehacer',\n    'Shuffle':'Mezclar','Clear':'Borrar','Upload CSV':'Subir CSV','Apply List':'Aplicar lista','Color palette':'Paleta de colores',\n    'Spin duration:':'Duraci\u00f3n del giro:','seconds':'segundos','Elimination mode':'Modo de eliminaci\u00f3n',\n    'Accumulation mode':'Modo de acumulaci\u00f3n','Auto-spin':'Giro autom\u00e1tico','Unique winners':'Ganadores \u00fanicos',\n    'Wheel skins':'Apariencias de la ruleta','Choose a ready-made texture and apply it instantly.':'Elige una textura preparada y apl\u00edcala al instante.',\n    'Use the arrows or swipe sideways to browse all 20 skins. Choose Classic to return to the standard colored wheel.':'Usa las flechas o desliza hacia los lados para ver las 20 apariencias. Elige Cl\u00e1sica para volver a la rueda de colores est\u00e1ndar.',\n    'Wheel background image':'Imagen de fondo de la ruleta','Add one image behind the colored wheel slices.':'A\u00f1ade una imagen detr\u00e1s de los segmentos de colores de la ruleta.',\n    'Choose background':'Elegir fondo','Image visibility':'Visibilidad de la imagen','Remove background':'Eliminar fondo',\n    'Center image or logo':'Imagen central o logotipo','Place a logo, icon, or photo inside the center hub.':'Coloca un logotipo, icono o foto en el centro de la ruleta.',\n    'Choose center image':'Elegir imagen central','Center image size':'Tama\u00f1o de la imagen central','Remove center image':'Eliminar imagen central',\n    'Image as a wheel entry':'Imagen como opci\u00f3n de la ruleta','Add an image-backed slice with an editable text label.':'A\u00f1ade un segmento con imagen y una etiqueta de texto editable.',\n    'Choose entry image':'Elegir imagen de opci\u00f3n','Add image entry':'A\u00f1adir opci\u00f3n con imagen','Reset all images':'Restablecer todas las im\u00e1genes',\n    'Images are optimized and kept in this browser session. They are not included in shared URLs or CSV exports.':'Las im\u00e1genes se optimizan y se conservan durante esta sesi\u00f3n del navegador. No se incluyen en enlaces compartidos ni exportaciones CSV.',\n    'Smart Fair Rotation':'Rotaci\u00f3n inteligente y equilibrada','Prioritize least-selected entries':'Dar prioridad a las opciones menos seleccionadas',\n    'Winner cooldown':'Espera del ganador','Off':'Desactivada','1 spin':'1 giro','2 spins':'2 giros','3 spins':'3 giros','4 spins':'4 giros','5 spins':'5 giros',\n    'Pure random mode is active.':'El modo completamente aleatorio est\u00e1 activo.','balance score':'\u00edndice de equilibrio','tracked spins':'giros registrados',\n    'Reset Smart Stats':'Restablecer estad\u00edsticas','Cryptographic Draw Receipt':'Comprobante criptogr\u00e1fico del sorteo',\n    'Creates a tamper-evident record of the result, timestamp, entries and active modes.':'Crea un registro verificable del resultado, la fecha y hora, las opciones y los modos activos.',\n    'No receipt yet':'A\u00fan no hay comprobante','Copy Receipt':'Copiar comprobante','Download JSON':'Descargar JSON','No spins yet.':'A\u00fan no hay giros.',\n    'No image selected':'Ninguna imagen seleccionada','No entries yet.':'A\u00fan no hay opciones.','Add entries and spin the wheel.':'A\u00f1ade opciones y gira la ruleta.',\n    'Add at least one entry.':'A\u00f1ade al menos una opci\u00f3n.','Share link copied.':'Enlace copiado.',\n    'Share link copied. Images stay in this browser session.':'Enlace copiado. Las im\u00e1genes permanecen en esta sesi\u00f3n del navegador.',\n    'Copied':'Copiado','Classic':'Cl\u00e1sica','Beach Ball':'Pelota de playa','Autumn Leaves':'Hojas de oto\u00f1o','Galaxy':'Galaxia',\n    'Blue Frost':'Escarcha azul','Blue Vortex':'V\u00f3rtice azul','Cookie':'Galleta','Disco Ball':'Bola de discoteca',\n    'Green Grass':'C\u00e9sped verde','Green Leaves':'Hojas verdes','Moon':'Luna','Orange Slice':'Rodaja de naranja',\n    'Rainbow':'Arco\u00edris','Soccer Ball':'Bal\u00f3n de f\u00fatbol','Spiral Nebula':'Nebulosa espiral','Water Pool':'Piscina',\n    'Water Swirl':'Remolino de agua','Wood':'Madera','Tiger':'Tigre'\n  };\n  const translateTextNodes = () => {\n    const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);\n    let node;\n    while ((node = walker.nextNode())) {\n      if (node.parentElement && \/^(SCRIPT|STYLE)$\/.test(node.parentElement.tagName)) continue;\n      const raw = node.nodeValue || '', key = raw.trim();\n      if (exact[key] && exact[key] !== key) node.nodeValue = raw.replace(key, exact[key]);\n    }\n  };\n  const badge = (selector, label) => {\n    const el = root.querySelector(selector);\n    if (!el) return;\n    const on = \/bONb|ACTIVAD[OA]\/i.test(el.textContent);\n    el.textContent = label + ': ' + (on ? 'ACTIVADA' : 'DESACTIVADA');\n  };\n  const apply = () => {\n    root.setAttribute('aria-label','Ruleta giratoria interactiva');\n    translateTextNodes();\n    badge('.wnx-badge-elimination','Eliminaci\u00f3n'); badge('.wnx-badge-accumulation','Acumulaci\u00f3n');\n    badge('.wnx-badge-auto','Giro autom\u00e1tico'); badge('.wnx-badge-smart','Rotaci\u00f3n equilibrada');\n    const fields = [\n      ['.wnx-new-entry','placeholder','Escribe un nombre y pulsa Intro'],['.wnx-new-entry','aria-label','Nueva opci\u00f3n de la ruleta'],\n      ['.wnx-bulk','placeholder','Pega una opci\u00f3n por l\u00ednea'],['.wnx-canvas','aria-label','Girar la ruleta'],\n      ['.wnx-entry-image-name','placeholder','Etiqueta de la imagen']\n    ];\n    fields.forEach(([selector,attr,value]) => { const el=root.querySelector(selector); if (el) el.setAttribute(attr,value); });\n    root.querySelectorAll('[data-edit]').forEach((el,i)=>el.setAttribute('aria-label','Editar opci\u00f3n '+(i+1)));\n    const result=root.querySelector('.wnx-result');\n    if (result) result.textContent=result.textContent.replace(\/^Winner:s*\/,'Resultado: ').replace(\/^Winners:s*\/,'Resultados: ')\n      .replace(\/^Add at least one entry.$\/,'A\u00f1ade al menos una opci\u00f3n.').replace(\/^Share link copied.$\/,'Enlace copiado.')\n      .replace(\/^Share link copied. Images stay in this browser session.$\/,'Enlace copiado. Las im\u00e1genes permanecen en esta sesi\u00f3n del navegador.');\n    const status=root.querySelector('.wnx-smart-status');\n    if (status) status.textContent=status.textContent\n      .replace('Smart Fair Rotation is paused while Elimination mode is active.','La rotaci\u00f3n inteligente est\u00e1 pausada mientras el modo de eliminaci\u00f3n est\u00e1 activo.')\n      .replace('Pure random mode is active.','El modo completamente aleatorio est\u00e1 activo.').replace(\/^Smart mode active:\/,'Modo inteligente activo:')\n      .replace('least-selected priority','prioridad para las opciones menos seleccionadas').replace(\/(d+)-spin cooldown\/,'espera de $1 giros')\n      .replace('Dimmed slices are temporarily ineligible.','Los segmentos atenuados no son elegibles temporalmente.');\n  };\n  let queued=false;\n  const queue=()=>{if(queued)return;queued=true;requestAnimationFrame(()=>{queued=false;apply();});};\n  apply();\n  new MutationObserver(queue).observe(root,{subtree:true,childList:true,characterData:true,attributes:true,attributeFilter:['disabled']});\n})();\n<\/script>\n<!-- wn-es-locale-end -->\n\n<!-- wn-es-schema-start -->\n\n<script type=\"application\/ld+json\">\n{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/wheelnames.org\/es\/#sitio\",\"url\":\"https:\/\/wheelnames.org\/es\/\",\"name\":\"Wheel Names en Espa\u00f1ol\",\"inLanguage\":\"es\"},{\"@type\":\"WebApplication\",\"@id\":\"https:\/\/wheelnames.org\/es\/#aplicacion\",\"name\":\"Ruleta Aleatoria\",\"url\":\"https:\/\/wheelnames.org\/es\/\",\"description\":\"Ruleta aleatoria gratuita para elegir nombres, n\u00fameros, premios, tareas u opciones desde el navegador.\",\"applicationCategory\":\"UtilitiesApplication\",\"operatingSystem\":\"Any\",\"browserRequirements\":\"JavaScript y un navegador moderno\",\"inLanguage\":\"es\",\"isAccessibleForFree\":true,\"offers\":{\"@type\":\"Offer\",\"price\":\"0\",\"priceCurrency\":\"USD\"}},{\"@type\":\"FAQPage\",\"@id\":\"https:\/\/wheelnames.org\/es\/#preguntas\",\"inLanguage\":\"es\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"\u00bfLa ruleta aleatoria es gratis?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"S\u00ed. Puedes usarla gratis sin registrarte ni crear una cuenta.\"}},{\"@type\":\"Question\",\"name\":\"\u00bfC\u00f3mo a\u00f1ado muchos nombres a la vez?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Pega una opci\u00f3n por l\u00ednea en el cuadro de entrada masiva o sube un archivo CSV o TXT.\"}},{\"@type\":\"Question\",\"name\":\"\u00bfPuedo evitar que una persona gane dos veces?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"S\u00ed. Activa el modo eliminaci\u00f3n para retirar autom\u00e1ticamente cada opci\u00f3n seleccionada.\"}},{\"@type\":\"Question\",\"name\":\"\u00bfFunciona en el m\u00f3vil?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"S\u00ed. La ruleta se adapta a tel\u00e9fonos, tabletas, port\u00e1tiles y ordenadores.\"}},{\"@type\":\"Question\",\"name\":\"\u00bfPuedo guardar mi ruleta de nombres y compartirla con un enlace?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"S\u00ed. Puedes guardar la configuraci\u00f3n de tu rueda de nombres y compartirla mediante un enlace \u00fanico. Quien abra el enlace ver\u00e1 la misma lista de participantes y el mismo dise\u00f1o, listo para girar. Es ideal para enviar el sorteo a colegas, alumnos o colaboradores antes de un evento, o para reutilizar la misma ruleta en varias sesiones sin tener que volver a escribir los nombres.\"}},{\"@type\":\"Question\",\"name\":\"\u00bfCu\u00e1ntos nombres puedo a\u00f1adir a la ruleta?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"La ruleta de nombres admite listas largas, de cientos e incluso miles de entradas, sin coste adicional. Con listas muy extensas, te recomendamos usar nombres cortos para que cada segmento de la rueda siga siendo legible durante el giro. Si la lista es enorme, el modo de pantalla completa ayuda a que la audiencia siga el resultado con claridad.\"}},{\"@type\":\"Question\",\"name\":\"\u00bfPuedo usar la ruleta de nombres con PowerPoint o Google Sheets?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Por supuesto. Muchos docentes copian su lista de alumnos desde Google Sheets o Excel y la pegan directamente en la ruleta de nombres. Tambi\u00e9n puedes insertar la rueda en tus presentaciones: abre la ruleta en el navegador, act\u00edvala en pantalla completa y alterna con tu PowerPoint durante la clase. Funciona en aulas virtuales como Zoom o Google Meet compartiendo tu pantalla.\"}},{\"@type\":\"Question\",\"name\":\"\u00bfLa ruleta de nombres es realmente gratis? \u00bfHay l\u00edmites ocultos?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Es 100% gratis y sin l\u00edmites ocultos: giros ilimitados, listas del tama\u00f1o que necesites y todas las opciones de personalizaci\u00f3n incluidas. No pedimos tarjeta ni registro. La ruleta de nombres se mantiene gratuita porque funciona directamente en tu navegador, sin costosos servidores procesando tus sorteos.\"}},{\"@type\":\"Question\",\"name\":\"\u00bfFunciona la ruleta en el m\u00f3vil?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"S\u00ed, la rueda de nombres est\u00e1 optimizada para m\u00f3viles y tabletas, tanto en Android como en iPhone. La interfaz t\u00e1ctil permite a\u00f1adir nombres, girar y ver al ganador con total fluidez desde el navegador, sin instalar ninguna aplicaci\u00f3n. Es perfecta para sorteos improvisados en clase, en eventos o entre amigos, est\u00e9s donde est\u00e9s.\"}}]}]}\n<\/script>\n\n<!-- wn-es-schema-end -->\n<script>\n(function(){if(window.__wnxPageTabRecovery)return;window.__wnxPageTabRecovery=true;document.addEventListener('click',function(event){var button=event.target.closest&&event.target.closest('.wnx-spinner .wnx-tab');if(!button)return;var panel=button.closest('.wnx-panel'),key=button.getAttribute('data-tab');if(!panel||!key)return;var panes=Array.prototype.slice.call(panel.querySelectorAll('.wnx-pane')),pane=panes.find(function(item){return item.getAttribute('data-pane')===key;});if(!pane)return;Array.prototype.forEach.call(panel.querySelectorAll('.wnx-tab'),function(tab){var active=tab===button;tab.classList.toggle('is-active',active);tab.setAttribute('aria-selected',active?'true':'false');});panes.forEach(function(item){item.classList.toggle('is-active',item===pane);});},true);}());\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Ruleta aleatoria gratis para elegir nombres, n\u00fameros, premios, tareas u opciones online. Personaliza la rueda y obt\u00e9n un resultado al instante.<\/p>\n","protected":false},"author":1,"featured_media":537,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_kad_blocks_custom_css":"","_kad_blocks_head_custom_js":"","_kad_blocks_body_custom_js":"","_kad_blocks_footer_custom_js":"","_kad_post_transparent":"","_kad_post_title":"hide","_kad_post_layout":"fullwidth","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"class_list":["post-514","page","type-page","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v22.3 (Yoast SEO v28.7) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Rueda de Nombres y Ruleta Aleatoria Gratis Online<\/title>\n<meta name=\"description\" content=\"Gira la rueda de nombres gratis: ruleta aleatoria para elegir ganadores, premios y equipos. Sin registro, personalizable y 100% justa.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wheelnames.org\/es\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ruleta Aleatoria \u2013 Selector de Nombres Gratis\" \/>\n<meta property=\"og:description\" content=\"A\u00f1ade nombres u opciones y gira una ruleta aleatoria gratis desde m\u00f3vil u ordenador.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wheelnames.org\/es\/\" \/>\n<meta property=\"og:site_name\" content=\"Wheel of Names\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-21T11:08:38+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wheelnames.org\/wp-content\/uploads\/2026\/08\/ruleta-aleatoria-wheel-names.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Ruleta Aleatoria\" \/>\n<meta name=\"twitter:label1\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data1\" content=\"24 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/wheelnames.org\\\/es\\\/\",\"url\":\"https:\\\/\\\/wheelnames.org\\\/es\\\/\",\"name\":\"Rueda de Nombres y Ruleta Aleatoria Gratis Online\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wheelnames.org\\\/es\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/wheelnames.org\\\/es\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/wheelnames.org\\\/es\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/wheelnames.org\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/ruleta-aleatoria-wheel-names.png\",\"datePublished\":\"2026-07-29T07:16:45+00:00\",\"dateModified\":\"2026-09-21T11:08:38+00:00\",\"description\":\"Gira la rueda de nombres gratis: ruleta aleatoria para elegir ganadores, premios y equipos. Sin registro, personalizable y 100% justa.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/wheelnames.org\\\/es\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/wheelnames.org\\\/es\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/wheelnames.org\\\/es\\\/#primaryimage\",\"url\":\"https:\\\/\\\/wheelnames.org\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/ruleta-aleatoria-wheel-names.png\",\"contentUrl\":\"https:\\\/\\\/wheelnames.org\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/ruleta-aleatoria-wheel-names.png\",\"width\":1672,\"height\":941,\"caption\":\"Ruleta aleatoria visual para seleccionar nombres y opciones.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/wheelnames.org\\\/es\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/wheelnames.org\\\/es\\\/ruleta-aleatoria\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ruleta Aleatoria\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/wheelnames.org\\\/es\\\/#website\",\"url\":\"https:\\\/\\\/wheelnames.org\\\/es\\\/\",\"name\":\"Wheel of Names\",\"description\":\"Free Random Name Picker &amp; Spinner\",\"publisher\":{\"@id\":\"https:\\\/\\\/wheelnames.org\\\/es\\\/#organization\"},\"alternateName\":\"Wheel Names Picker\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/wheelnames.org\\\/es\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/wheelnames.org\\\/es\\\/#organization\",\"name\":\"Wheel of Names\",\"alternateName\":\"Wheel Names Picker\",\"url\":\"https:\\\/\\\/wheelnames.org\\\/es\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/wheelnames.org\\\/es\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/wheelnames.org\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/Wheel-of-Names.png\",\"contentUrl\":\"https:\\\/\\\/wheelnames.org\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/Wheel-of-Names.png\",\"width\":400,\"height\":180,\"caption\":\"Wheel of Names\"},\"image\":{\"@id\":\"https:\\\/\\\/wheelnames.org\\\/es\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.youtube.com\\\/@wheelsname\"]}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Rueda de Nombres y Ruleta Aleatoria Gratis Online","description":"Gira la rueda de nombres gratis: ruleta aleatoria para elegir ganadores, premios y equipos. Sin registro, personalizable y 100% justa.","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:\/\/wheelnames.org\/es\/","og_locale":"es_ES","og_type":"article","og_title":"Ruleta Aleatoria \u2013 Selector de Nombres Gratis","og_description":"A\u00f1ade nombres u opciones y gira una ruleta aleatoria gratis desde m\u00f3vil u ordenador.","og_url":"https:\/\/wheelnames.org\/es\/","og_site_name":"Wheel of Names","article_modified_time":"2026-09-21T11:08:38+00:00","og_image":[{"url":"https:\/\/wheelnames.org\/wp-content\/uploads\/2026\/08\/ruleta-aleatoria-wheel-names.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_title":"Ruleta Aleatoria","twitter_misc":{"Tiempo de lectura":"24 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/wheelnames.org\/es\/","url":"https:\/\/wheelnames.org\/es\/","name":"Rueda de Nombres y Ruleta Aleatoria Gratis Online","isPartOf":{"@id":"https:\/\/wheelnames.org\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/wheelnames.org\/es\/#primaryimage"},"image":{"@id":"https:\/\/wheelnames.org\/es\/#primaryimage"},"thumbnailUrl":"https:\/\/wheelnames.org\/wp-content\/uploads\/2026\/08\/ruleta-aleatoria-wheel-names.png","datePublished":"2026-07-29T07:16:45+00:00","dateModified":"2026-09-21T11:08:38+00:00","description":"Gira la rueda de nombres gratis: ruleta aleatoria para elegir ganadores, premios y equipos. Sin registro, personalizable y 100% justa.","breadcrumb":{"@id":"https:\/\/wheelnames.org\/es\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wheelnames.org\/es\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/wheelnames.org\/es\/#primaryimage","url":"https:\/\/wheelnames.org\/wp-content\/uploads\/2026\/08\/ruleta-aleatoria-wheel-names.png","contentUrl":"https:\/\/wheelnames.org\/wp-content\/uploads\/2026\/08\/ruleta-aleatoria-wheel-names.png","width":1672,"height":941,"caption":"Ruleta aleatoria visual para seleccionar nombres y opciones."},{"@type":"BreadcrumbList","@id":"https:\/\/wheelnames.org\/es\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/wheelnames.org\/es\/ruleta-aleatoria\/"},{"@type":"ListItem","position":2,"name":"Ruleta Aleatoria"}]},{"@type":"WebSite","@id":"https:\/\/wheelnames.org\/es\/#website","url":"https:\/\/wheelnames.org\/es\/","name":"Wheel of Names","description":"Free Random Name Picker &amp; Spinner","publisher":{"@id":"https:\/\/wheelnames.org\/es\/#organization"},"alternateName":"Wheel Names Picker","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wheelnames.org\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/wheelnames.org\/es\/#organization","name":"Wheel of Names","alternateName":"Wheel Names Picker","url":"https:\/\/wheelnames.org\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/wheelnames.org\/es\/#\/schema\/logo\/image\/","url":"https:\/\/wheelnames.org\/wp-content\/uploads\/2026\/07\/Wheel-of-Names.png","contentUrl":"https:\/\/wheelnames.org\/wp-content\/uploads\/2026\/07\/Wheel-of-Names.png","width":400,"height":180,"caption":"Wheel of Names"},"image":{"@id":"https:\/\/wheelnames.org\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.youtube.com\/@wheelsname"]}]}},"taxonomy_info":[],"featured_image_src_large":["https:\/\/wheelnames.org\/wp-content\/uploads\/2026\/08\/ruleta-aleatoria-wheel-names-1024x576.png",1024,576,true],"author_info":{"display_name":"Johan","author_link":"https:\/\/wheelnames.org\/es\/author\/talhamehmalgmail-com\/"},"comment_info":0,"_links":{"self":[{"href":"https:\/\/wheelnames.org\/es\/wp-json\/wp\/v2\/pages\/514","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wheelnames.org\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/wheelnames.org\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/wheelnames.org\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wheelnames.org\/es\/wp-json\/wp\/v2\/comments?post=514"}],"version-history":[{"count":4,"href":"https:\/\/wheelnames.org\/es\/wp-json\/wp\/v2\/pages\/514\/revisions"}],"predecessor-version":[{"id":995,"href":"https:\/\/wheelnames.org\/es\/wp-json\/wp\/v2\/pages\/514\/revisions\/995"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wheelnames.org\/es\/wp-json\/wp\/v2\/media\/537"}],"wp:attachment":[{"href":"https:\/\/wheelnames.org\/es\/wp-json\/wp\/v2\/media?parent=514"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}