{"id":4656,"date":"2026-03-02T17:20:01","date_gmt":"2026-03-02T23:20:01","guid":{"rendered":"https:\/\/soefe.com\/?page_id=4656"},"modified":"2026-03-02T19:22:18","modified_gmt":"2026-03-03T01:22:18","slug":"pozo-padel","status":"publish","type":"page","link":"https:\/\/soefe.com\/en\/pozo-padel\/","title":{"rendered":"Pozo P\u00e1del"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"4656\" class=\"elementor elementor-4656\" data-elementor-post-type=\"page\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-35622e3 elementor-section-height-min-height elementor-section-items-bottom elementor-section-content-bottom elementor-section-boxed elementor-section-height-default\" data-id=\"35622e3\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-1ea3524\" data-id=\"1ea3524\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-81106a4\" data-id=\"81106a4\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-92f5059 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"92f5059\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-074d37f\" data-id=\"074d37f\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-725c260 elementor-widget elementor-widget-heading\" data-id=\"725c260\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><a href=\"https:\/\/soefe.com\/en\/pozo-padel\/\">Pozo P\u00e1del<\/a><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-c7ded0b\" data-id=\"c7ded0b\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-f1757c7 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"f1757c7\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-b2ad879\" data-id=\"b2ad879\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-67d4996\" data-id=\"67d4996\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-ff215a0 elementor-hidden-widescreen elementor-hidden-desktop elementor-hidden-laptop elementor-hidden-tablet_extra elementor-hidden-tablet elementor-hidden-mobile_extra elementor-hidden-mobile elementor-widget elementor-widget-shortcode\" data-id=\"ff215a0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">    <div class=\"pp-public-wrap\" id=\"ppPublicApp\">\n\n        <div class=\"pp-pub-header\">\n            <div class=\"pp-pub-header-inner\">\n                <div class=\"pp-pub-title\">\n                    <div class=\"pp-pub-icon\">\ud83c\udfbe<\/div>\n                    <div>\n                        <h2 id=\"ppPubRoundTitle\">Cargando...<\/h2>\n                        <p class=\"pp-pub-meta\">Marcador en vivo \u00b7 Pozo P\u00e1del<\/p>\n                    <\/div>\n                <\/div>\n                <div class=\"pp-pub-controls\">\n                    <select id=\"ppPubCriteria\" class=\"pp-pub-select\">\n                        <option value=\"games\">Por juegos<\/option>\n                        <option value=\"wins\">Por wins<\/option>\n                    <\/select>\n                    <button id=\"ppPubRefresh\" class=\"pp-pub-refresh\" title=\"Actualizar\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><polyline points=\"1 4 1 10 7 10\"\/><path d=\"M3.51 15a9 9 0 1 0 .49-3.93\"\/><\/svg>\n                    <\/button>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <div class=\"pp-pub-body\">\n            <div class=\"pp-pub-podium-section\">\n                <div class=\"pp-pub-section-title\">\ud83c\udfc6 Podio<\/div>\n                <div class=\"pp-pub-podium\" id=\"ppPubPodium\"><\/div>\n            <\/div>\n            <div class=\"pp-pub-courts-section\">\n                <div class=\"pp-pub-section-title\">\ud83c\udfbe Partidos<\/div>\n                <div class=\"pp-pub-courts\" id=\"ppPubCourts\"><\/div>\n            <\/div>\n            <div class=\"pp-pub-ranking-section\">\n                <div class=\"pp-pub-section-title\">\ud83d\udccb Ranking completo<\/div>\n                <div class=\"pp-pub-table-wrap\">\n                    <table class=\"pp-pub-table\">\n                        <thead><tr><th>#<\/th><th>Jugador<\/th><th>Wins<\/th><th>Juegos<\/th><th class=\"pp-pub-hide-mobile\">A favor<\/th><th class=\"pp-pub-hide-mobile\">En contra<\/th><th>Diff<\/th><\/tr><\/thead>\n                        <tbody id=\"ppPubTbody\"><\/tbody>\n                    <\/table>\n                <\/div>\n            <\/div>\n        <\/div>\n\n    <\/div>\n    <\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4f1ad4b elementor-widget elementor-widget-html\" data-id=\"4f1ad4b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div id=\"pp-app\"><\/div>\r\n\r\n<style>\r\n  \/* === Pozo P\u00e1del (Elementor HTML Widget) === *\/\r\n  #pp-app{\r\n    width:100%;\r\n    font-family: system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;\r\n    color:#0f172a;\r\n  }\r\n  #pp-app *{ box-sizing:border-box; }\r\n\r\n  :root{\r\n    --pp-bg: transparent;\r\n    --pp-card: #ffffff;\r\n    --pp-text: #0f172a;\r\n    --pp-muted: #64748b;\r\n    --pp-line: rgba(15, 23, 42, 0.10);\r\n    --pp-line-strong: rgba(15, 23, 42, 0.14);\r\n    --pp-shadow: 0 10px 30px rgba(15, 23, 42, 0.08);\r\n    --pp-shadow-soft: 0 6px 16px rgba(15, 23, 42, 0.06);\r\n    --pp-radius: 18px;\r\n    --pp-radius-sm: 14px;\r\n    --pp-btn: #111827;\r\n    --pp-btn-text: #fff;\r\n    --pp-btn2: #fff;\r\n    --pp-btn2-text: #0f172a;\r\n  }\r\n\r\n  .pp-wrap{\r\n    width:100%;\r\n    margin:0;\r\n    background:var(--pp-bg);\r\n  }\r\n\r\n  \/* Header *\/\r\n  .pp-header{\r\n    display:flex;\r\n    flex-wrap:wrap;\r\n    gap:14px;\r\n    align-items:flex-start;\r\n    justify-content:space-between;\r\n    margin-bottom:14px;\r\n  }\r\n  .pp-title{\r\n    margin:0;\r\n    font-size:28px;\r\n    font-weight:900;\r\n    letter-spacing:-0.03em;\r\n    line-height:1.1;\r\n  }\r\n  .pp-sub{\r\n    margin:6px 0 0 0;\r\n    color:var(--pp-muted);\r\n    font-size:13px;\r\n    line-height:1.4;\r\n  }\r\n  .pp-actions{\r\n    display:flex;\r\n    flex-wrap:wrap;\r\n    gap:10px;\r\n    align-items:center;\r\n  }\r\n\r\n  \/* Controls *\/\r\n  .pp-controls{\r\n    display:flex;\r\n    flex-wrap:wrap;\r\n    gap:10px;\r\n    align-items:center;\r\n    margin-bottom:14px;\r\n  }\r\n  .pp-pill{\r\n    display:flex;\r\n    gap:10px;\r\n    align-items:center;\r\n    padding:10px 12px;\r\n    border-radius:999px;\r\n    background: rgba(255,255,255,0.75);\r\n    border:1px solid var(--pp-line);\r\n    backdrop-filter: blur(6px);\r\n  }\r\n  .pp-pill label{\r\n    font-weight:900;\r\n    font-size:13px;\r\n    color:var(--pp-text);\r\n    white-space:nowrap;\r\n  }\r\n\r\n  .pp-input, .pp-select, .pp-number{\r\n    appearance:none;\r\n    border:1px solid var(--pp-line);\r\n    background:#fff;\r\n    border-radius:12px;\r\n    padding:10px 12px;\r\n    font-size:14px;\r\n    outline:none;\r\n    color:var(--pp-text);\r\n    min-height:40px;\r\n    transition: box-shadow .15s ease, border-color .15s ease;\r\n  }\r\n  .pp-input{ width:220px; }\r\n  .pp-number{ width:90px; text-align:center; }\r\n  .pp-select{ padding-right:36px; }\r\n\r\n  .pp-input:focus, .pp-select:focus, .pp-number:focus{\r\n    border-color: rgba(15, 23, 42, 0.25);\r\n    box-shadow: 0 0 0 4px rgba(15, 23, 42, 0.08);\r\n  }\r\n\r\n  .pp-select-wrap{ position:relative; display:inline-flex; align-items:center; }\r\n  .pp-select-wrap:after{\r\n    content:\"\u25be\";\r\n    position:absolute;\r\n    right:12px;\r\n    color:var(--pp-muted);\r\n    pointer-events:none;\r\n    font-weight:900;\r\n    font-size:14px;\r\n  }\r\n\r\n  \/* Buttons *\/\r\n  .pp-btn{\r\n    border:0;\r\n    border-radius:14px;\r\n    padding:11px 14px;\r\n    font-weight:900;\r\n    cursor:pointer;\r\n    background:var(--pp-btn);\r\n    color:var(--pp-btn-text);\r\n    box-shadow: var(--pp-shadow-soft);\r\n    transition: transform .06s ease, box-shadow .15s ease, opacity .15s ease;\r\n    min-height:40px;\r\n  }\r\n  .pp-btn:hover{ opacity:.96; }\r\n  .pp-btn:active{ transform: translateY(1px); box-shadow: 0 4px 10px rgba(15,23,42,.12); }\r\n\r\n  .pp-btn.pp-secondary{\r\n    background:var(--pp-btn2);\r\n    color:var(--pp-btn2-text);\r\n    border:1px solid var(--pp-line);\r\n    box-shadow:none;\r\n  }\r\n\r\n  \/* Layout cards *\/\r\n  .pp-grid{\r\n    display:grid;\r\n    grid-template-columns: 1.8fr 1fr;\r\n    gap:14px;\r\n    width:100%;\r\n  }\r\n  @media (max-width: 980px){\r\n    .pp-grid{ grid-template-columns:1fr; }\r\n  }\r\n\r\n  .pp-card{\r\n    background:var(--pp-card);\r\n    border:1px solid var(--pp-line);\r\n    border-radius: var(--pp-radius);\r\n    padding:16px;\r\n    box-shadow: var(--pp-shadow);\r\n    width:100%;\r\n  }\r\n  .pp-card h2{\r\n    margin:0 0 10px 0;\r\n    font-size:20px;\r\n    font-weight:900;\r\n    letter-spacing:-0.01em;\r\n  }\r\n  .pp-muted{ color:var(--pp-muted); font-size:13px; line-height:1.45; }\r\n\r\n  \/* Courts *\/\r\n  .pp-courts{\r\n    display:flex;\r\n    flex-direction:column;\r\n    gap:12px;\r\n    margin-top:12px;\r\n  }\r\n\r\n  .pp-court{\r\n    border:1px solid var(--pp-line);\r\n    border-radius: var(--pp-radius);\r\n    padding:12px;\r\n    display:grid;\r\n    grid-template-columns: 90px 1fr 1fr 260px;\r\n    gap:12px;\r\n    align-items:start;\r\n    background: linear-gradient(180deg, rgba(15,23,42,0.02), rgba(255,255,255,0));\r\n  }\r\n\r\n  .pp-court-title{\r\n    font-weight:900;\r\n    color:var(--pp-text);\r\n    padding-top:6px;\r\n  }\r\n\r\n  .pp-teambox{\r\n    border:1px solid var(--pp-line);\r\n    border-radius: var(--pp-radius-sm);\r\n    padding:10px;\r\n    display:flex;\r\n    flex-direction:column;\r\n    gap:8px;\r\n    background:#fff;\r\n  }\r\n  .pp-teamhead{\r\n    display:flex;\r\n    justify-content:space-between;\r\n    align-items:center;\r\n    gap:8px;\r\n  }\r\n  .pp-teamhead b{ font-size:14px; font-weight:900; }\r\n  .pp-row{\r\n    display:flex;\r\n    gap:10px;\r\n    align-items:center;\r\n  }\r\n  .pp-row span{\r\n    width:24px;\r\n    color:var(--pp-muted);\r\n    font-weight:900;\r\n  }\r\n  .pp-row input{\r\n    width:100%;\r\n  }\r\n\r\n  .pp-scorebox{\r\n    border:1px solid var(--pp-line);\r\n    border-radius: var(--pp-radius-sm);\r\n    padding:10px;\r\n    background:#fff;\r\n    display:flex;\r\n    flex-direction:column;\r\n    gap:10px;\r\n  }\r\n  .pp-scorerow{\r\n    display:flex;\r\n    align-items:center;\r\n    justify-content:space-between;\r\n    gap:10px;\r\n  }\r\n  .pp-scoreline{\r\n    display:flex;\r\n    align-items:center;\r\n    justify-content:space-between;\r\n    gap:10px;\r\n  }\r\n  .pp-dash{\r\n    font-weight:900;\r\n    color:var(--pp-muted);\r\n  }\r\n  .pp-mini{\r\n    display:flex;\r\n    gap:10px;\r\n    align-items:center;\r\n    justify-content:space-between;\r\n  }\r\n\r\n  \/* Podio *\/\r\n  .pp-top3{\r\n    display:flex;\r\n    flex-direction:column;\r\n    gap:10px;\r\n    margin-top:10px;\r\n  }\r\n  .pp-place{\r\n    border:1px solid var(--pp-line);\r\n    border-radius: var(--pp-radius);\r\n    padding:12px;\r\n    display:flex;\r\n    justify-content:space-between;\r\n    align-items:center;\r\n    gap:10px;\r\n    background:#fff;\r\n  }\r\n  .pp-left{\r\n    display:flex;\r\n    gap:10px;\r\n    align-items:center;\r\n    min-width:0;\r\n  }\r\n  .pp-badge{\r\n    width:34px; height:34px;\r\n    border-radius:12px;\r\n    display:grid;\r\n    place-items:center;\r\n    font-weight:900;\r\n    border:1px solid var(--pp-line);\r\n    background: linear-gradient(180deg, rgba(15,23,42,0.04), rgba(255,255,255,0));\r\n    flex: 0 0 auto;\r\n  }\r\n  .pp-name{\r\n    font-weight:900;\r\n    min-width:0;\r\n    white-space:nowrap;\r\n    overflow:hidden;\r\n    text-overflow:ellipsis;\r\n  }\r\n  .pp-score{\r\n    font-weight:900;\r\n    color:var(--pp-muted);\r\n    text-align:right;\r\n    flex: 0 0 auto;\r\n    white-space:nowrap;\r\n  }\r\n\r\n  \/* Table *\/\r\n  .pp-table{\r\n    width:100%;\r\n    border-collapse:collapse;\r\n    margin-top:10px;\r\n    border:1px solid var(--pp-line);\r\n    border-radius: var(--pp-radius);\r\n    overflow:hidden;\r\n    background:#fff;\r\n  }\r\n  .pp-table th, .pp-table td{\r\n    padding:10px 12px;\r\n    border-bottom:1px solid var(--pp-line);\r\n    text-align:left;\r\n    font-size:14px;\r\n  }\r\n  .pp-table th{\r\n    background: rgba(15,23,42,0.03);\r\n    font-weight:900;\r\n  }\r\n  .pp-table tr:last-child td{ border-bottom:0; }\r\n\r\n  \/* Responsive tweaks *\/\r\n  @media (max-width: 980px){\r\n    .pp-pill{ border-radius:14px; }\r\n    .pp-input{ width:100%; }\r\n  }\r\n  @media (max-width: 760px){\r\n    .pp-title{ font-size:24px; }\r\n    .pp-court{\r\n      grid-template-columns: 1fr;\r\n      gap:10px;\r\n    }\r\n    .pp-court-title{ padding-top:0; }\r\n    .pp-number{ width:100px; }\r\n  }\r\n<\/style>\r\n\r\n<script>\r\n(function(){\r\n  \/\/ NOTE (English): Avoid re-rendering the full UI on every keystroke to prevent caret reset.\r\n\r\n  const root = document.getElementById('pp-app');\r\n  if(!root) return;\r\n\r\n  const STORAGE_KEY = 'pp_pozopadel_v3';\r\n\r\n  function clampInt(v){\r\n    const n = parseInt(v, 10);\r\n    return Number.isFinite(n) && n >= 0 ? n : 0;\r\n  }\r\n  function cleanName(s){\r\n    const name = (s || '').trim();\r\n    return name.length ? name : 'Jugador sin nombre';\r\n  }\r\n  function esc(str){\r\n    return String(str)\r\n      .replaceAll('&','&amp;')\r\n      .replaceAll('<','&lt;')\r\n      .replaceAll('>','&gt;')\r\n      .replaceAll('\"','&quot;')\r\n      .replaceAll(\"'\",\"&#039;\");\r\n  }\r\n\r\n  function defaultCourt(i){\r\n    return {\r\n      label: `Cancha ${i+1}`,\r\n      a1: `A${i+1}-1`, a2: `A${i+1}-2`,\r\n      b1: `B${i+1}-1`, b2: `B${i+1}-2`,\r\n      aScore: 0, bScore: 0\r\n    };\r\n  }\r\n  function defaultState(){\r\n    return {\r\n      roundName: 'Ronda 1',\r\n      criteria: 'games',\r\n      courtCount: 8,\r\n      courts: Array.from({length: 8}, (_, i) => defaultCourt(i))\r\n    };\r\n  }\r\n\r\n  function load(){\r\n    try{\r\n      const raw = localStorage.getItem(STORAGE_KEY);\r\n      if(!raw) return defaultState();\r\n      const parsed = JSON.parse(raw);\r\n      if(!parsed || typeof parsed !== 'object' || !Array.isArray(parsed.courts)) return defaultState();\r\n\r\n      const s = defaultState();\r\n      const courtCount = Math.min(8, Math.max(1, clampInt(parsed.courtCount || 8)));\r\n\r\n      const courts = parsed.courts.slice(0, 8).map((c, i) => ({\r\n        label: c.label || `Cancha ${i+1}`,\r\n        a1: (c.a1 ?? s.courts[i].a1),\r\n        a2: (c.a2 ?? s.courts[i].a2),\r\n        b1: (c.b1 ?? s.courts[i].b1),\r\n        b2: (c.b2 ?? s.courts[i].b2),\r\n        aScore: clampInt(c.aScore),\r\n        bScore: clampInt(c.bScore),\r\n      }));\r\n      while(courts.length < 8) courts.push(defaultCourt(courts.length));\r\n\r\n      return {\r\n        roundName: parsed.roundName || 'Ronda 1',\r\n        criteria: (parsed.criteria === 'wins') ? 'wins' : 'games',\r\n        courtCount,\r\n        courts\r\n      };\r\n    }catch(e){\r\n      return defaultState();\r\n    }\r\n  }\r\n\r\n  function save(){\r\n    try{ localStorage.setItem(STORAGE_KEY, JSON.stringify(state)); }catch(e){}\r\n  }\r\n\r\n  let state = load();\r\n\r\n  \/\/ Build UI once\r\n  root.innerHTML = `\r\n    <div class=\"pp-wrap\">\r\n      <div class=\"pp-header\">\r\n        <div>\r\n          <h1 class=\"pp-title\">Pozo P\u00e1del \u2014 Marcador por Jugadores<\/h1>\r\n          <p class=\"pp-sub\">M\u00e1x 8 canchas por ronda \u00b7 Guarda en el navegador (localStorage) \u00b7 Sin llamadas al servidor<\/p>\r\n        <\/div>\r\n        <div class=\"pp-actions\">\r\n          <button class=\"pp-btn pp-secondary\" id=\"pp-demo\" type=\"button\">Demo<\/button>\r\n          <button class=\"pp-btn\" id=\"pp-reset\" type=\"button\">Reset<\/button>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"pp-controls\">\r\n        <div class=\"pp-pill\">\r\n          <label>Ronda<\/label>\r\n          <input class=\"pp-input\" type=\"text\" id=\"pp-round\" \/>\r\n        <\/div>\r\n\r\n        <div class=\"pp-pill\">\r\n          <label>Criterio<\/label>\r\n          <span class=\"pp-select-wrap\">\r\n            <select class=\"pp-select\" id=\"pp-criteria\">\r\n              <option value=\"games\">Por juegos<\/option>\r\n              <option value=\"wins\">Por wins<\/option>\r\n            <\/select>\r\n          <\/span>\r\n        <\/div>\r\n\r\n        <div class=\"pp-pill\">\r\n          <label>Canchas<\/label>\r\n          <span class=\"pp-select-wrap\">\r\n            <select class=\"pp-select\" id=\"pp-count\">\r\n              ${[1,2,3,4,5,6,7,8].map(n => `<option value=\"${n}\">${n}<\/option>`).join('')}\r\n            <\/select>\r\n          <\/span>\r\n        <\/div>\r\n\r\n        <div class=\"pp-pill\">\r\n          <span class=\"pp-muted\"><b>Wins:<\/b> gana el lado con m\u00e1s juegos en esa cancha<\/span>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"pp-grid\">\r\n        <div class=\"pp-card\">\r\n          <h2 id=\"pp-round-title\"><\/h2>\r\n          <div class=\"pp-muted\">Ingres\u00e1 jugadores y marcador (juegos). El ranking es individual.<\/div>\r\n          <div class=\"pp-courts\" id=\"pp-courts\"><\/div>\r\n        <\/div>\r\n\r\n        <div class=\"pp-card\">\r\n          <h2>Podio<\/h2>\r\n          <div class=\"pp-muted\">Top 3 individual seg\u00fan el criterio.<\/div>\r\n          <div class=\"pp-top3\" id=\"pp-podium\"><\/div>\r\n\r\n          <h2 style=\"margin-top:18px;\">Tabla completa<\/h2>\r\n          <div class=\"pp-muted\">Todos los jugadores.<\/div>\r\n          <table class=\"pp-table\">\r\n            <thead>\r\n              <tr><th>Jugador<\/th><th>Wins<\/th><th>Juegos<\/th><th>GF<\/th><th>GA<\/th><\/tr>\r\n            <\/thead>\r\n            <tbody id=\"pp-tbody\"><\/tbody>\r\n          <\/table>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n  `;\r\n\r\n  const roundInput = document.getElementById('pp-round');\r\n  const criteriaSel = document.getElementById('pp-criteria');\r\n  const countSel = document.getElementById('pp-count');\r\n  const courtsEl = document.getElementById('pp-courts');\r\n  const roundTitleEl = document.getElementById('pp-round-title');\r\n  const podiumEl = document.getElementById('pp-podium');\r\n  const tbodyEl = document.getElementById('pp-tbody');\r\n\r\n  function renderControls(){\r\n    roundInput.value = state.roundName;\r\n    criteriaSel.value = state.criteria;\r\n    countSel.value = String(state.courtCount);\r\n    roundTitleEl.textContent = state.roundName;\r\n  }\r\n\r\n  function courtTemplate(i){\r\n    const c = state.courts[i] || defaultCourt(i);\r\n    return `\r\n      <div class=\"pp-court\" data-court=\"${i}\">\r\n        <div class=\"pp-court-title\">${esc(c.label)}<\/div>\r\n\r\n        <div class=\"pp-teambox\">\r\n          <div class=\"pp-teamhead\"><b>Pareja A<\/b><span class=\"pp-muted\">Jugadores<\/span><\/div>\r\n          <div class=\"pp-row\"><span>A1<\/span><input class=\"pp-input\" type=\"text\" data-field=\"a1\" value=\"${esc(c.a1)}\"><\/div>\r\n          <div class=\"pp-row\"><span>A2<\/span><input class=\"pp-input\" type=\"text\" data-field=\"a2\" value=\"${esc(c.a2)}\"><\/div>\r\n        <\/div>\r\n\r\n        <div class=\"pp-teambox\">\r\n          <div class=\"pp-teamhead\"><b>Pareja B<\/b><span class=\"pp-muted\">Jugadores<\/span><\/div>\r\n          <div class=\"pp-row\"><span>B1<\/span><input class=\"pp-input\" type=\"text\" data-field=\"b1\" value=\"${esc(c.b1)}\"><\/div>\r\n          <div class=\"pp-row\"><span>B2<\/span><input class=\"pp-input\" type=\"text\" data-field=\"b2\" value=\"${esc(c.b2)}\"><\/div>\r\n        <\/div>\r\n\r\n        <div class=\"pp-scorebox\">\r\n          <div class=\"pp-scorerow\"><b>Marcador<\/b><span class=\"pp-muted\">Juegos<\/span><\/div>\r\n          <div class=\"pp-scoreline\">\r\n            <span class=\"pp-muted\">A<\/span>\r\n            <input class=\"pp-number\" type=\"number\" min=\"0\" step=\"1\" data-field=\"aScore\" value=\"${clampInt(c.aScore)}\">\r\n            <span class=\"pp-dash\">-<\/span>\r\n            <input class=\"pp-number\" type=\"number\" min=\"0\" step=\"1\" data-field=\"bScore\" value=\"${clampInt(c.bScore)}\">\r\n            <span class=\"pp-muted\">B<\/span>\r\n          <\/div>\r\n          <div class=\"pp-mini\">\r\n            <span class=\"pp-muted\">Win: lado con m\u00e1s juegos<\/span>\r\n            <button type=\"button\" class=\"pp-btn pp-secondary\" data-action=\"clear\">Limpiar<\/button>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n    `;\r\n  }\r\n\r\n  function renderCourts(){\r\n    courtsEl.innerHTML = Array.from({length: state.courtCount}, (_, i) => courtTemplate(i)).join('');\r\n  }\r\n\r\n  function computeRows(){\r\n    const map = new Map();\r\n\r\n    function ensure(name){\r\n      const n = cleanName(name);\r\n      if(!map.has(n)) map.set(n, { wins:0, games:0, gf:0, ga:0 });\r\n      return n;\r\n    }\r\n\r\n    for(let i=0;i<state.courtCount;i++){\r\n      const c = state.courts[i];\r\n      const a1 = ensure(c.a1), a2 = ensure(c.a2), b1 = ensure(c.b1), b2 = ensure(c.b2);\r\n      const a = clampInt(c.aScore), b = clampInt(c.bScore);\r\n\r\n      map.get(a1).games += a; map.get(a1).gf += a; map.get(a1).ga += b;\r\n      map.get(a2).games += a; map.get(a2).gf += a; map.get(a2).ga += b;\r\n      map.get(b1).games += b; map.get(b1).gf += b; map.get(b1).ga += a;\r\n      map.get(b2).games += b; map.get(b2).gf += b; map.get(b2).ga += a;\r\n\r\n      if(a > b){ map.get(a1).wins++; map.get(a2).wins++; }\r\n      else if(b > a){ map.get(b1).wins++; map.get(b2).wins++; }\r\n    }\r\n\r\n    const rows = Array.from(map.entries()).map(([name, s]) => ({\r\n      name, wins:s.wins, games:s.games, gf:s.gf, ga:s.ga, diff:(s.gf - s.ga)\r\n    }));\r\n\r\n    rows.sort((x,y) => {\r\n      if(state.criteria === 'wins'){\r\n        if(y.wins !== x.wins) return y.wins - x.wins;\r\n        if(y.diff !== x.diff) return y.diff - x.diff;\r\n        return y.games - x.games;\r\n      }\r\n      if(y.games !== x.games) return y.games - x.games;\r\n      if(y.diff !== x.diff) return y.diff - x.diff;\r\n      return y.wins - x.wins;\r\n    });\r\n\r\n    return rows;\r\n  }\r\n\r\n  function renderRanking(){\r\n    const rows = computeRows();\r\n\r\n    const top3 = [rows[0], rows[1], rows[2]];\r\n    podiumEl.innerHTML = top3.map((item, idx) => {\r\n      const place = idx + 1;\r\n      if(!item){\r\n        return `\r\n          <div class=\"pp-place\">\r\n            <div class=\"pp-left\"><div class=\"pp-badge\">${place}<\/div><div class=\"pp-name\">-<\/div><\/div>\r\n            <div class=\"pp-score\">-<\/div>\r\n          <\/div>\r\n        `;\r\n      }\r\n      const label = (state.criteria === 'wins')\r\n        ? `${item.wins} wins \u00b7 Diff ${item.diff} \u00b7 ${item.games} juegos`\r\n        : `${item.games} juegos \u00b7 Diff ${item.diff} \u00b7 ${item.wins} wins`;\r\n\r\n      return `\r\n        <div class=\"pp-place\">\r\n          <div class=\"pp-left\"><div class=\"pp-badge\">${place}<\/div><div class=\"pp-name\">${esc(item.name)}<\/div><\/div>\r\n          <div class=\"pp-score\">${esc(label)}<\/div>\r\n        <\/div>\r\n      `;\r\n    }).join('');\r\n\r\n    tbodyEl.innerHTML = rows.map(r => `\r\n      <tr>\r\n        <td><b>${esc(r.name)}<\/b><\/td>\r\n        <td>${r.wins}<\/td>\r\n        <td>${r.games}<\/td>\r\n        <td>${r.gf}<\/td>\r\n        <td>${r.ga}<\/td>\r\n      <\/tr>\r\n    `).join('');\r\n  }\r\n\r\n  \/\/ Courts: event delegation (no full rerender on typing)\r\n  courtsEl.addEventListener('input', (e) => {\r\n    const target = e.target;\r\n    if(!(target instanceof HTMLInputElement)) return;\r\n    const courtNode = target.closest('.pp-court');\r\n    if(!courtNode) return;\r\n    const i = clampInt(courtNode.getAttribute('data-court'));\r\n    const field = target.getAttribute('data-field');\r\n    if(!field || !state.courts[i]) return;\r\n\r\n    if(field === 'aScore' || field === 'bScore') state.courts[i][field] = clampInt(target.value);\r\n    else state.courts[i][field] = target.value;\r\n\r\n    save();\r\n    renderRanking();\r\n  });\r\n\r\n  courtsEl.addEventListener('click', (e) => {\r\n    const btn = e.target;\r\n    if(!(btn instanceof HTMLElement)) return;\r\n    if(btn.getAttribute('data-action') !== 'clear') return;\r\n\r\n    const courtNode = btn.closest('.pp-court');\r\n    if(!courtNode) return;\r\n    const i = clampInt(courtNode.getAttribute('data-court'));\r\n\r\n    state.courts[i] = defaultCourt(i);\r\n    save();\r\n    renderCourts();\r\n    renderRanking();\r\n  });\r\n\r\n  \/\/ Top controls\r\n  roundInput.addEventListener('input', (e) => {\r\n    state.roundName = e.target.value || 'Ronda';\r\n    roundTitleEl.textContent = state.roundName;\r\n    save();\r\n  });\r\n\r\n  criteriaSel.addEventListener('change', (e) => {\r\n    state.criteria = (e.target.value === 'wins') ? 'wins' : 'games';\r\n    save();\r\n    renderRanking();\r\n  });\r\n\r\n  countSel.addEventListener('change', (e) => {\r\n    state.courtCount = Math.min(8, Math.max(1, clampInt(e.target.value)));\r\n    save();\r\n    renderCourts();\r\n    renderRanking();\r\n  });\r\n\r\n  document.getElementById('pp-reset').addEventListener('click', () => {\r\n    state = defaultState();\r\n    save();\r\n    renderControls();\r\n    renderCourts();\r\n    renderRanking();\r\n  });\r\n\r\n  document.getElementById('pp-demo').addEventListener('click', () => {\r\n    const names = [\r\n      \"Ana\",\"Sofi\",\"Vale\",\"Mar\u00eda\",\"Laura\",\"Karla\",\"Dani\",\"Naty\",\r\n      \"Diego\",\"Pablo\",\"Luis\",\"Andr\u00e9s\",\"Javi\",\"Marco\",\"Rafa\",\"Fer\",\r\n      \"Gaby\",\"Meli\",\"Cami\",\"Isa\",\"Santi\",\"Mateo\",\"Tom\u00e1s\",\"Fede\"\r\n    ];\r\n    let p = 0;\r\n    for(let i=0;i<8;i++){\r\n      const c = state.courts[i];\r\n      c.a1 = names[p++ % names.length];\r\n      c.a2 = names[p++ % names.length];\r\n      c.b1 = names[p++ % names.length];\r\n      c.b2 = names[p++ % names.length];\r\n      c.aScore = (i % 2 === 0) ? 6 : 4;\r\n      c.bScore = (i % 2 === 0) ? 4 : 6;\r\n    }\r\n    save();\r\n    renderCourts();\r\n    renderRanking();\r\n  });\r\n\r\n  \/\/ Init\r\n  renderControls();\r\n  renderCourts();\r\n  renderRanking();\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-3a7222b\" data-id=\"3a7222b\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-4656","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Pozo P\u00e1del - Soefe<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/soefe.com\/en\/pozo-padel\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Pozo P\u00e1del - Soefe\" \/>\n<meta property=\"og:url\" content=\"https:\/\/soefe.com\/en\/pozo-padel\/\" \/>\n<meta property=\"og:site_name\" content=\"Soefe\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-03T01:22:18+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/soefe.com\/pozo-padel\/\",\"url\":\"https:\/\/soefe.com\/pozo-padel\/\",\"name\":\"Pozo P\u00e1del - Soefe\",\"isPartOf\":{\"@id\":\"https:\/\/soefe.com\/#website\"},\"datePublished\":\"2026-03-02T23:20:01+00:00\",\"dateModified\":\"2026-03-03T01:22:18+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/soefe.com\/pozo-padel\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/soefe.com\/pozo-padel\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/soefe.com\/pozo-padel\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\/\/soefe.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Pozo P\u00e1del\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/soefe.com\/#website\",\"url\":\"https:\/\/soefe.com\/\",\"name\":\"Soefe\",\"description\":\"Software solutions for your company or business, software leasing and custom development\",\"publisher\":{\"@id\":\"https:\/\/soefe.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/soefe.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/soefe.com\/#organization\",\"name\":\"Soefe\",\"url\":\"https:\/\/soefe.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/soefe.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/soefe.com\/wp-content\/uploads\/2023\/06\/logo-2.png\",\"contentUrl\":\"https:\/\/soefe.com\/wp-content\/uploads\/2023\/06\/logo-2.png\",\"width\":348,\"height\":82,\"caption\":\"Soefe\"},\"image\":{\"@id\":\"https:\/\/soefe.com\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Pozo P\u00e1del - Soefe","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:\/\/soefe.com\/en\/pozo-padel\/","og_locale":"en_US","og_type":"article","og_title":"Pozo P\u00e1del - Soefe","og_url":"https:\/\/soefe.com\/en\/pozo-padel\/","og_site_name":"Soefe","article_modified_time":"2026-03-03T01:22:18+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/soefe.com\/pozo-padel\/","url":"https:\/\/soefe.com\/pozo-padel\/","name":"Pozo P\u00e1del - Soefe","isPartOf":{"@id":"https:\/\/soefe.com\/#website"},"datePublished":"2026-03-02T23:20:01+00:00","dateModified":"2026-03-03T01:22:18+00:00","breadcrumb":{"@id":"https:\/\/soefe.com\/pozo-padel\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/soefe.com\/pozo-padel\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/soefe.com\/pozo-padel\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/soefe.com\/"},{"@type":"ListItem","position":2,"name":"Pozo P\u00e1del"}]},{"@type":"WebSite","@id":"https:\/\/soefe.com\/#website","url":"https:\/\/soefe.com\/","name":"Soefe","description":"Software solutions for your company or business, software leasing and custom development","publisher":{"@id":"https:\/\/soefe.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/soefe.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/soefe.com\/#organization","name":"Soefe","url":"https:\/\/soefe.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/soefe.com\/#\/schema\/logo\/image\/","url":"https:\/\/soefe.com\/wp-content\/uploads\/2023\/06\/logo-2.png","contentUrl":"https:\/\/soefe.com\/wp-content\/uploads\/2023\/06\/logo-2.png","width":348,"height":82,"caption":"Soefe"},"image":{"@id":"https:\/\/soefe.com\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/soefe.com\/en\/wp-json\/wp\/v2\/pages\/4656","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/soefe.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/soefe.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/soefe.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/soefe.com\/en\/wp-json\/wp\/v2\/comments?post=4656"}],"version-history":[{"count":37,"href":"https:\/\/soefe.com\/en\/wp-json\/wp\/v2\/pages\/4656\/revisions"}],"predecessor-version":[{"id":4702,"href":"https:\/\/soefe.com\/en\/wp-json\/wp\/v2\/pages\/4656\/revisions\/4702"}],"wp:attachment":[{"href":"https:\/\/soefe.com\/en\/wp-json\/wp\/v2\/media?parent=4656"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}