{"id":16828,"date":"2026-04-28T13:42:18","date_gmt":"2026-04-28T20:42:18","guid":{"rendered":"https:\/\/torosdetijuana.com\/?page_id=16828"},"modified":"2026-04-30T08:47:51","modified_gmt":"2026-04-30T15:47:51","slug":"posiciones","status":"publish","type":"page","link":"https:\/\/torosdetijuana.com\/index.php\/posiciones\/","title":{"rendered":"posiciones"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"16828\" class=\"elementor elementor-16828\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6ca7b9d e-flex e-con-boxed e-con e-parent\" data-id=\"6ca7b9d\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d61262b elementor-widget elementor-widget-html\" data-id=\"d61262b\" 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=\"lmb-standings-widget\" class=\"lmb-widget theme-toros\">\n  <style>\n    #lmb-standings-widget {\n      --lmb-red: #b5121b;\n      --lmb-red-dark: #7c0a12;\n      --lmb-white: #ffffff;\n      --lmb-border: rgba(255, 255, 255, 0.5);\n      --lmb-soft-white: rgba(255, 255, 255, 0.16);\n      --lmb-soft-white-2: rgba(255, 255, 255, 0.08);\n      --lmb-shadow: rgba(124, 10, 18, 0.36);\n      font-family: Inter, Arial, sans-serif;\n      color: var(--lmb-white);\n      background:\n        linear-gradient(120deg, rgba(255,255,255,.14) 0 1px, transparent 1px 18px),\n        linear-gradient(135deg, #b5121b 0%, #8f0d16 48%, #65070d 100%);\n      border-radius: 28px;\n      overflow: hidden;\n      border: 1px solid var(--lmb-border);\n      max-width: 1180px;\n      margin: 0 auto;\n      box-shadow: 0 22px 54px var(--lmb-shadow);\n    }\n\n    #lmb-standings-widget * { box-sizing: border-box; }\n\n    #lmb-standings-widget .lmb-header {\n      padding: 28px;\n      background: rgba(0, 0, 0, 0.16);\n      border-bottom: 1px solid var(--lmb-border);\n    }\n\n    #lmb-standings-widget .lmb-topline {\n      display: inline-flex;\n      align-items: center;\n      gap: 8px;\n      padding: 7px 12px;\n      border-radius: 999px;\n      background: var(--lmb-white);\n      color: var(--lmb-red);\n      border: 1px solid var(--lmb-white);\n      font-size: 11px;\n      font-weight: 850;\n      text-transform: uppercase;\n      letter-spacing: 0.18em;\n      margin-bottom: 14px;\n    }\n\n    #lmb-standings-widget .lmb-title-row {\n      display: flex;\n      justify-content: space-between;\n      gap: 18px;\n      align-items: flex-end;\n      flex-wrap: wrap;\n    }\n\n    #lmb-standings-widget h2 {\n      margin: 0;\n      font-size: clamp(30px, 5vw, 54px);\n      line-height: 0.95;\n      letter-spacing: -0.045em;\n      color: inherit;\n      font-weight: 950;\n    }\n\n    #lmb-standings-widget .lmb-subtitle {\n      color: inherit;\n      opacity: 0.92;\n      margin: 14px 0 0;\n      max-width: 680px;\n      font-size: 15px;\n      line-height: 1.6;\n    }\n\n    #lmb-standings-widget .lmb-season {\n      display: inline-flex;\n      align-items: center;\n      padding: 8px 13px;\n      border-radius: 999px;\n      background: var(--lmb-white);\n      border: 1px solid var(--lmb-white);\n      color: var(--lmb-red);\n      font-size: 12px;\n      font-weight: 850;\n      white-space: nowrap;\n    }\n\n    #lmb-standings-widget .lmb-controls {\n      display: flex;\n      gap: 8px;\n      padding: 4px;\n      border-radius: 18px;\n      background: var(--lmb-soft-white-2);\n      border: 1px solid var(--lmb-border);\n      width: fit-content;\n      flex-wrap: wrap;\n      margin-top: 18px;\n    }\n\n    #lmb-standings-widget .lmb-tab {\n      border: 0;\n      border-radius: 14px;\n      padding: 10px 18px;\n      font-size: 14px;\n      font-weight: 850;\n      cursor: pointer;\n      color: inherit;\n      background: transparent;\n      transition: 0.2s ease;\n      user-select: none;\n    }\n\n    #lmb-standings-widget .lmb-tab:hover,\n    #lmb-standings-widget .lmb-tab.active {\n      background: var(--lmb-white);\n      color: var(--lmb-red);\n    }\n\n    #lmb-standings-widget .lmb-body { padding: 22px; }\n\n    #lmb-standings-widget .lmb-zone-panel { display: none; }\n    #lmb-standings-widget .lmb-zone-panel.active { display: block; }\n\n    #lmb-standings-widget .lmb-stats {\n      display: grid;\n      grid-template-columns: repeat(3, minmax(0, 1fr));\n      gap: 14px;\n      margin-bottom: 20px;\n    }\n\n    #lmb-standings-widget .lmb-stat-card {\n      border-radius: 22px;\n      padding: 18px;\n      background: var(--lmb-soft-white-2);\n      border: 1px solid var(--lmb-border);\n    }\n\n    #lmb-standings-widget .lmb-stat-card.featured {\n      background: var(--lmb-white);\n      color: var(--lmb-red);\n      border-color: var(--lmb-white);\n    }\n\n    #lmb-standings-widget .lmb-stat-label {\n      display: block;\n      color: inherit;\n      opacity: 0.78;\n      font-size: 11px;\n      font-weight: 850;\n      letter-spacing: 0.15em;\n      text-transform: uppercase;\n      margin-bottom: 10px;\n    }\n\n    #lmb-standings-widget .lmb-stat-value {\n      font-size: 25px;\n      font-weight: 950;\n      line-height: 1.05;\n    }\n\n    #lmb-standings-widget .lmb-stat-detail {\n      color: inherit;\n      opacity: 0.84;\n      margin-top: 5px;\n      font-size: 13px;\n      font-weight: 750;\n    }\n\n    #lmb-standings-widget .lmb-table-toolbar {\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      gap: 12px;\n      margin-bottom: 12px;\n      flex-wrap: wrap;\n    }\n\n    #lmb-standings-widget .lmb-zone-title {\n      margin: 0;\n      font-size: 20px;\n      font-weight: 950;\n      color: inherit;\n    }\n\n    #lmb-standings-widget .lmb-table-wrap {\n      border: 1px solid var(--lmb-border);\n      border-radius: 24px;\n      overflow-x: auto;\n      background: rgba(0, 0, 0, 0.15);\n    }\n\n    #lmb-standings-widget table {\n      width: 100%;\n      min-width: 920px;\n      border-collapse: collapse;\n    }\n\n    #lmb-standings-widget th {\n      padding: 15px 13px;\n      background: var(--lmb-white);\n      color: var(--lmb-red);\n      font-size: 11px;\n      font-weight: 900;\n      letter-spacing: 0.1em;\n      text-transform: uppercase;\n      text-align: center;\n      white-space: nowrap;\n    }\n\n    #lmb-standings-widget th:nth-child(2),\n    #lmb-standings-widget td:nth-child(2) { text-align: left; }\n\n    #lmb-standings-widget td {\n      padding: 14px 13px;\n      border-top: 1px solid var(--lmb-soft-white);\n      text-align: center;\n      font-size: 14px;\n      color: inherit;\n      white-space: nowrap;\n    }\n\n    #lmb-standings-widget tr:hover td { background: var(--lmb-soft-white-2); }\n\n    #lmb-standings-widget tr.is-featured td {\n      background: var(--lmb-white);\n      color: var(--lmb-red);\n    }\n\n    #lmb-standings-widget .lmb-rank { font-weight: 950; }\n\n    #lmb-standings-widget .lmb-team {\n      display: flex;\n      align-items: center;\n      min-width: 230px;\n    }\n\n    #lmb-standings-widget .lmb-team-name {\n      display: flex;\n      align-items: center;\n      gap: 7px;\n      color: inherit;\n      font-weight: 950;\n    }\n\n    #lmb-standings-widget .lmb-city {\n      color: inherit;\n      font-size: 12px;\n      margin-top: 2px;\n      opacity: 0.86;\n    }\n\n    #lmb-standings-widget .lmb-chip {\n      display: inline-flex;\n      align-items: center;\n      border-radius: 999px;\n      padding: 4px 8px;\n      font-size: 10px;\n      font-weight: 950;\n      text-transform: uppercase;\n      letter-spacing: 0.04em;\n      background: var(--lmb-red);\n      color: var(--lmb-white);\n      border: 1px solid var(--lmb-red);\n    }\n\n    #lmb-standings-widget .lmb-streak {\n      display: inline-flex;\n      align-items: center;\n      justify-content: center;\n      min-width: 42px;\n      border-radius: 999px;\n      padding: 5px 9px;\n      font-size: 12px;\n      font-weight: 950;\n      background: var(--lmb-white);\n      color: var(--lmb-red);\n      border: 1px solid var(--lmb-white);\n    }\n\n    #lmb-standings-widget .lmb-note,\n    #lmb-standings-widget .lmb-status {\n      margin-top: 14px;\n      border-radius: 18px;\n      background: var(--lmb-soft-white-2);\n      border: 1px solid var(--lmb-border);\n      padding: 13px 15px;\n      color: inherit;\n      opacity: 0.9;\n      font-size: 12px;\n      line-height: 1.55;\n    }\n\n    #lmb-standings-widget .lmb-status {\n      margin: 0 0 16px;\n      display: none;\n    }\n\n    #lmb-standings-widget .lmb-status.visible { display: block; }\n\n    @media (max-width: 767px) {\n      #lmb-standings-widget { border-radius: 20px; }\n      #lmb-standings-widget .lmb-header,\n      #lmb-standings-widget .lmb-body { padding: 18px; }\n      #lmb-standings-widget .lmb-stats { grid-template-columns: 1fr; }\n      #lmb-standings-widget .lmb-controls { width: 100%; }\n      #lmb-standings-widget .lmb-tab { flex: 1; text-align: center; }\n    }\n  <\/style>\n\n  <div class=\"lmb-header\">\n    \n    <div class=\"lmb-title-row\">\n      <div>\n        <h2>POSICIONES<\/h2>\n        <p class=\"lmb-subtitle\">\n\n        <\/p>\n      <\/div>\n      <div class=\"lmb-season\" id=\"lmb-season-label\">Temporada 2026<\/div>\n    <\/div>\n\n    <div class=\"lmb-controls\" aria-label=\"Seleccionar zona\">\n      <button class=\"lmb-tab active\" type=\"button\" data-zone=\"Norte\">Zona Norte<\/button>\n      <button class=\"lmb-tab\" type=\"button\" data-zone=\"Sur\">Zona Sur<\/button>\n    <\/div>\n  <\/div>\n\n  <div class=\"lmb-body\">\n    <div id=\"lmb-status\" class=\"lmb-status visible\">Cargando standings desde StatsAPI...<\/div>\n\n    <section class=\"lmb-zone-panel panel-norte active\" data-panel=\"Norte\"><\/section>\n    <section class=\"lmb-zone-panel panel-sur\" data-panel=\"Sur\"><\/section>\n\n    <div class=\"lmb-note\">\n      <strong>Glosario:<\/strong> G = ganados, P = perdidos, PCT = porcentaje de victorias, DIF = juegos detr\u00e1s del l\u00edder,\n      U10 = \u00faltimos 10 juegos, CA = carreras anotadas, CP = carreras permitidas, DIF C = diferencial de carreras.\n    <\/div>\n  <\/div>\n\n  <script>\n    (function () {\n      const widget = document.getElementById(\"lmb-standings-widget\");\n      if (!widget) return;\n\n      const season = new Date().getFullYear();\n      const apiUrl = \"https:\/\/statsapi.mlb.com\/api\/v1\/standings?leagueId=125&season=\" + season + \"&standingsTypes=regularSeason&hydrate=team\";\n\n      const status = widget.querySelector(\"#lmb-status\");\n      const seasonLabel = widget.querySelector(\"#lmb-season-label\");\n      const zoneButtons = widget.querySelectorAll(\".lmb-tab[data-zone]\");\n      const panels = widget.querySelectorAll(\".lmb-zone-panel[data-panel]\");\n\n      seasonLabel.textContent = \"Temporada \" + season;\n\n      const fallback = {\n        Norte: [\n          { team: \"Sultanes\", city: \"Monterrey\", wins: 8, losses: 2, pct: \".800\", gb: \"\u2014\", last10: \"8-2\", streak: \"W2\", rs: 75, ra: 46, diff: 29, home: \"3-1\", away: \"5-1\" },\n          { team: \"Toros\", city: \"Tijuana\", wins: 6, losses: 3, pct: \".667\", gb: \"1.5\", last10: \"6-3\", streak: \"L1\", rs: 56, ra: 39, diff: 17, home: \"2-1\", away: \"4-2\", featured: true },\n          { team: \"Charros\", city: \"Jalisco\", wins: 6, losses: 4, pct: \".600\", gb: \"2.0\", last10: \"6-4\", streak: \"W2\", rs: 48, ra: 55, diff: -7, home: \"3-3\", away: \"3-1\" },\n          { team: \"Caliente\", city: \"Durango\", wins: 5, losses: 5, pct: \".500\", gb: \"3.0\", last10: \"5-5\", streak: \"W1\", rs: 48, ra: 40, diff: 8, home: \"3-1\", away: \"2-4\" },\n          { team: \"Acereros\", city: \"Monclova\", wins: 5, losses: 5, pct: \".500\", gb: \"3.0\", last10: \"5-5\", streak: \"W1\", rs: 54, ra: 58, diff: -4, home: \"1-2\", away: \"4-3\" },\n          { team: \"Tecos\", city: \"Dos Laredos\", wins: 5, losses: 5, pct: \".500\", gb: \"3.0\", last10: \"5-5\", streak: \"L1\", rs: 48, ra: 53, diff: -5, home: \"4-2\", away: \"1-3\" },\n          { team: \"Rieleros\", city: \"Aguascalientes\", wins: 5, losses: 5, pct: \".500\", gb: \"3.0\", last10: \"5-5\", streak: \"L1\", rs: 78, ra: 88, diff: -10, home: \"4-3\", away: \"1-2\" },\n          { team: \"Dorados\", city: \"Chihuahua\", wins: 4, losses: 6, pct: \".400\", gb: \"4.0\", last10: \"4-6\", streak: \"L2\", rs: 57, ra: 53, diff: 4, home: \"1-3\", away: \"3-3\" },\n          { team: \"Algodoneros\", city: \"Uni\u00f3n Laguna\", wins: 4, losses: 6, pct: \".400\", gb: \"4.0\", last10: \"4-6\", streak: \"W1\", rs: 71, ra: 86, diff: -15, home: \"3-6\", away: \"1-0\" },\n          { team: \"Saraperos\", city: \"Saltillo\", wins: 1, losses: 8, pct: \".111\", gb: \"6.5\", last10: \"1-8\", streak: \"L6\", rs: 39, ra: 56, diff: -17, home: \"0-3\", away: \"1-5\" }\n        ],\n        Sur: [\n          { team: \"Bravos\", city: \"Le\u00f3n\", wins: 8, losses: 2, pct: \".800\", gb: \"\u2014\", last10: \"8-2\", streak: \"W3\", rs: 73, ra: 45, diff: 28, home: \"3-1\", away: \"5-1\" },\n          { team: \"Guerreros\", city: \"Oaxaca\", wins: 8, losses: 2, pct: \".800\", gb: \"\u2014\", last10: \"8-2\", streak: \"W4\", rs: 90, ra: 81, diff: 9, home: \"3-0\", away: \"5-2\" },\n          { team: \"Leones\", city: \"Yucat\u00e1n\", wins: 7, losses: 4, pct: \".636\", gb: \"1.5\", last10: \"7-3\", streak: \"W4\", rs: 51, ra: 35, diff: 16, home: \"5-4\", away: \"2-0\" },\n          { team: \"Diablos Rojos\", city: \"M\u00e9xico\", wins: 6, losses: 4, pct: \".600\", gb: \"2.0\", last10: \"6-4\", streak: \"W4\", rs: 90, ra: 59, diff: 31, home: \"2-1\", away: \"4-3\" },\n          { team: \"El \u00c1guila\", city: \"Veracruz\", wins: 5, losses: 5, pct: \".500\", gb: \"3.0\", last10: \"5-5\", streak: \"L3\", rs: 41, ra: 53, diff: -12, home: \"4-2\", away: \"1-3\" },\n          { team: \"Tigres\", city: \"Quintana Roo\", wins: 5, losses: 6, pct: \".455\", gb: \"3.5\", last10: \"4-6\", streak: \"L4\", rs: 39, ra: 59, diff: -20, home: \"1-4\", away: \"4-2\" },\n          { team: \"Piratas\", city: \"Campeche\", wins: 4, losses: 6, pct: \".400\", gb: \"4.0\", last10: \"4-6\", streak: \"L3\", rs: 59, ra: 66, diff: -7, home: \"3-4\", away: \"1-2\" },\n          { team: \"Conspiradores\", city: \"Quer\u00e9taro\", wins: 3, losses: 7, pct: \".300\", gb: \"5.0\", last10: \"3-7\", streak: \"L4\", rs: 68, ra: 94, diff: -26, home: \"0-3\", away: \"3-4\" },\n          { team: \"Pericos\", city: \"Puebla\", wins: 3, losses: 7, pct: \".300\", gb: \"5.0\", last10: \"3-7\", streak: \"L1\", rs: 66, ra: 75, diff: -9, home: \"1-6\", away: \"2-1\" },\n          { team: \"Olmecas\", city: \"Tabasco\", wins: 2, losses: 8, pct: \".200\", gb: \"6.0\", last10: \"2-8\", streak: \"W1\", rs: 62, ra: 72, diff: -10, home: \"1-3\", away: \"1-5\" }\n        ]\n      };\n\n      const teamMap = [\n        { key: \"sultanes\", team: \"Sultanes\", city: \"Monterrey\", zone: \"Norte\" },\n        { key: \"toros\", team: \"Toros\", city: \"Tijuana\", zone: \"Norte\", featured: true },\n        { key: \"tecolotes\", team: \"Tecos\", city: \"Dos Laredos\", zone: \"Norte\" },\n        { key: \"tecos\", team: \"Tecos\", city: \"Dos Laredos\", zone: \"Norte\" },\n        { key: \"rieleros\", team: \"Rieleros\", city: \"Aguascalientes\", zone: \"Norte\" },\n        { key: \"charros\", team: \"Charros\", city: \"Jalisco\", zone: \"Norte\" },\n        { key: \"dorados\", team: \"Dorados\", city: \"Chihuahua\", zone: \"Norte\" },\n        { key: \"caliente\", team: \"Caliente\", city: \"Durango\", zone: \"Norte\" },\n        { key: \"acereros\", team: \"Acereros\", city: \"Monclova\", zone: \"Norte\" },\n        { key: \"algodoneros\", team: \"Algodoneros\", city: \"Uni\u00f3n Laguna\", zone: \"Norte\" },\n        { key: \"laguna\", team: \"Algodoneros\", city: \"Uni\u00f3n Laguna\", zone: \"Norte\" },\n        { key: \"saraperos\", team: \"Saraperos\", city: \"Saltillo\", zone: \"Norte\" },\n        { key: \"bravos\", team: \"Bravos\", city: \"Le\u00f3n\", zone: \"Sur\" },\n        { key: \"guerreros\", team: \"Guerreros\", city: \"Oaxaca\", zone: \"Sur\" },\n        { key: \"leones\", team: \"Leones\", city: \"Yucat\u00e1n\", zone: \"Sur\" },\n        { key: \"diablos\", team: \"Diablos Rojos\", city: \"M\u00e9xico\", zone: \"Sur\" },\n        { key: \"aguila\", team: \"El \u00c1guila\", city: \"Veracruz\", zone: \"Sur\" },\n        { key: \"tigres\", team: \"Tigres\", city: \"Quintana Roo\", zone: \"Sur\" },\n        { key: \"piratas\", team: \"Piratas\", city: \"Campeche\", zone: \"Sur\" },\n        { key: \"conspiradores\", team: \"Conspiradores\", city: \"Quer\u00e9taro\", zone: \"Sur\" },\n        { key: \"pericos\", team: \"Pericos\", city: \"Puebla\", zone: \"Sur\" },\n        { key: \"olmecas\", team: \"Olmecas\", city: \"Tabasco\", zone: \"Sur\" }\n      ];\n\n      function normalize(text) {\n        return String(text || \"\")\n          .normalize(\"NFD\")\n          .replace(\/[\u0300-\u036f]\/g, \"\")\n          .toLowerCase();\n      }\n\n      function getTeamMeta(fullName) {\n        const normalized = normalize(fullName);\n        return teamMap.find((item) => normalized.includes(item.key));\n      }\n\n      function getRecord(records, bucket, type) {\n        const list = records && records[bucket] ? records[bucket] : [];\n        const found = list.find((item) => String(item.type || \"\").toLowerCase() === String(type).toLowerCase());\n        return found ? `${found.wins || 0}-${found.losses || 0}` : \"\u2014\";\n      }\n\n      function signed(value) {\n        const number = Number(value || 0);\n        return number > 0 ? \"+\" + number : String(number);\n      }\n\n      function esc(value) {\n        return String(value ?? \"\")\n          .replace(\/&\/g, \"&amp;\")\n          .replace(\/<\/g, \"&lt;\")\n          .replace(\/>\/g, \"&gt;\")\n          .replace(\/\"\/g, \"&quot;\")\n          .replace(\/'\/g, \"&#039;\");\n      }\n\n      function buildZonesFromApi(apiData) {\n        const zones = { Norte: [], Sur: [] };\n        const records = apiData.records || [];\n\n        records.forEach((record) => {\n          (record.teamRecords || []).forEach((teamRecord) => {\n            const fullName = teamRecord.team && teamRecord.team.name ? teamRecord.team.name : \"\";\n            const meta = getTeamMeta(fullName);\n            if (!meta) return;\n\n            const rs = Number(teamRecord.runsScored || 0);\n            const ra = Number(teamRecord.runsAllowed || 0);\n            const diff = Number(teamRecord.runDifferential ?? (rs - ra));\n            const wins = Number(teamRecord.wins ?? (teamRecord.leagueRecord && teamRecord.leagueRecord.wins) ?? 0);\n            const losses = Number(teamRecord.losses ?? (teamRecord.leagueRecord && teamRecord.leagueRecord.losses) ?? 0);\n            const pct = teamRecord.winningPercentage || (teamRecord.leagueRecord && teamRecord.leagueRecord.pct) || \"\";\n\n            zones[meta.zone].push({\n              team: meta.team,\n              city: meta.city,\n              wins,\n              losses,\n              pct,\n              gb: teamRecord.gamesBack || \"\u2014\",\n              last10: getRecord(teamRecord.records, \"overallRecords\", \"lastTen\"),\n              streak: teamRecord.streak && teamRecord.streak.streakCode ? teamRecord.streak.streakCode : \"\u2014\",\n              rs,\n              ra,\n              diff,\n              home: getRecord(teamRecord.records, \"splitRecords\", \"home\"),\n              away: getRecord(teamRecord.records, \"splitRecords\", \"away\"),\n              rank: Number(teamRecord.divisionRank || teamRecord.leagueRank || 99),\n              featured: Boolean(meta.featured)\n            });\n          });\n        });\n\n        Object.keys(zones).forEach((zone) => {\n          zones[zone].sort((a, b) => {\n            if (a.rank !== b.rank) return a.rank - b.rank;\n            if (b.wins !== a.wins) return b.wins - a.wins;\n            return a.losses - b.losses;\n          });\n        });\n\n        return zones;\n      }\n\n      function bestRunDiff(rows) {\n        return rows.slice().sort((a, b) => b.diff - a.diff)[0];\n      }\n\n      function renderStats(zone, rows) {\n        const leader = rows[0];\n        const best = bestRunDiff(rows);\n        const toros = rows.find((row) => row.team === \"Toros\");\n\n        return `\n          <div class=\"lmb-stats\">\n            <div class=\"lmb-stat-card\">\n              <span class=\"lmb-stat-label\">L\u00edder Zona ${esc(zone)}<\/span>\n              <div class=\"lmb-stat-value\">${esc(leader ? leader.team : \"\u2014\")}<\/div>\n              <div class=\"lmb-stat-detail\">${leader ? esc(`${leader.wins}-${leader.losses} \u00b7 ${leader.pct}`) : \"\u2014\"}<\/div>\n            <\/div>\n            <div class=\"lmb-stat-card\">\n              <span class=\"lmb-stat-label\">Mejor diferencial<\/span>\n              <div class=\"lmb-stat-value\">${esc(best ? best.team : \"\u2014\")}<\/div>\n              <div class=\"lmb-stat-detail\">${best ? esc(`${signed(best.diff)} carreras`) : \"\u2014\"}<\/div>\n            <\/div>\n            <div class=\"lmb-stat-card featured\">\n              <span class=\"lmb-stat-label\">${zone === \"Norte\" ? \"Toros de Tijuana\" : \"Zona Sur\"}<\/span>\n              ${zone === \"Norte\" && toros\n                ? `<div class=\"lmb-stat-value\">${esc(`${toros.wins}-${toros.losses}`)}<\/div><div class=\"lmb-stat-detail\">PCT ${esc(toros.pct)} \u00b7 DIF ${esc(toros.gb)}<\/div>`\n                : `<div class=\"lmb-stat-value\">${esc(rows.length)} equipos<\/div><div class=\"lmb-stat-detail\">Standings actualizados autom\u00e1ticamente<\/div>`\n              }\n            <\/div>\n          <\/div>\n        `;\n      }\n\n      function renderTable(zone, rows) {\n        const rowsHtml = rows.map((row, index) => `\n          <tr class=\"${row.featured ? \"is-featured\" : \"\"}\">\n            <td class=\"lmb-rank\">${index + 1}<\/td>\n            <td>\n              <div class=\"lmb-team\">\n                <div>\n                  <div class=\"lmb-team-name\">\n                    ${esc(row.team)}\n                    ${row.featured ? '<span class=\"lmb-chip\">Toros<\/span>' : \"\"}\n                  <\/div>\n                  <div class=\"lmb-city\">${esc(row.city)}<\/div>\n                <\/div>\n              <\/div>\n            <\/td>\n            <td><strong>${esc(row.wins)}<\/strong><\/td>\n            <td>${esc(row.losses)}<\/td>\n            <td><strong>${esc(row.pct)}<\/strong><\/td>\n            <td>${esc(row.gb)}<\/td>\n            <td>${esc(row.last10)}<\/td>\n            <td><span class=\"lmb-streak\">${esc(row.streak)}<\/span><\/td>\n            <td>${esc(row.rs)}<\/td>\n            <td>${esc(row.ra)}<\/td>\n            <td><strong>${esc(signed(row.diff))}<\/strong><\/td>\n            <td>${esc(row.home)}<\/td>\n            <td>${esc(row.away)}<\/td>\n          <\/tr>\n        `).join(\"\");\n\n        return `\n          <div class=\"lmb-table-toolbar\">\n            <h3 class=\"lmb-zone-title\">Zona ${esc(zone)}<\/h3>\n          <\/div>\n          <div class=\"lmb-table-wrap\">\n            <table aria-label=\"Standings LMB Zona ${esc(zone)}\">\n              <thead>\n                <tr>\n                  <th>#<\/th><th>Equipo<\/th><th>G<\/th><th>P<\/th><th>PCT<\/th><th>DIF<\/th><th>U10<\/th><th>Racha<\/th><th>CA<\/th><th>CP<\/th><th>DIF C<\/th><th>Casa<\/th><th>Visita<\/th>\n                <\/tr>\n              <\/thead>\n              <tbody>${rowsHtml}<\/tbody>\n            <\/table>\n          <\/div>\n        `;\n      }\n\n      function renderWidget(zones, sourceLabel) {\n        [\"Norte\", \"Sur\"].forEach((zone) => {\n          const panel = widget.querySelector(`.lmb-zone-panel[data-panel=\"${zone}\"]`);\n          const rows = zones[zone] || [];\n          panel.innerHTML = rows.length\n            ? renderStats(zone, rows) + renderTable(zone, rows)\n            : `<div class=\"lmb-status visible\">No hay datos disponibles para Zona ${zone}.<\/div>`;\n        });\n\n        status.textContent = sourceLabel;\n        status.classList.add(\"visible\");\n        setTimeout(() => status.classList.remove(\"visible\"), 4500);\n      }\n\n      zoneButtons.forEach((button) => {\n        button.addEventListener(\"click\", function () {\n          const zone = this.getAttribute(\"data-zone\");\n          zoneButtons.forEach((btn) => btn.classList.remove(\"active\"));\n          this.classList.add(\"active\");\n          panels.forEach((panel) => panel.classList.toggle(\"active\", panel.getAttribute(\"data-panel\") === zone));\n        });\n      });\n\n      fetch(apiUrl)\n        .then((response) => {\n          if (!response.ok) throw new Error(\"HTTP \" + response.status);\n          return response.json();\n        })\n        .then((data) => {\n          const zones = buildZonesFromApi(data);\n          if (!zones.Norte.length && !zones.Sur.length) {\n            throw new Error(\"Sin datos interpretables de LMB\");\n          }\n          renderWidget(zones, \"Standings cargados autom\u00e1ticamente desde StatsAPI.\");\n        })\n        .catch((error) => {\n          console.warn(\"No se pudo cargar StatsAPI. Usando datos de respaldo.\", error);\n          renderWidget(fallback, \"No se pudo consultar StatsAPI; se muestran datos de respaldo.\");\n        });\n    })();\n  <\/script>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>POSICIONES Temporada 2026 Zona Norte Zona Sur Cargando standings desde StatsAPI&#8230; Glosario: G = ganados, P = perdidos, PCT = porcentaje de victorias, DIF = juegos detr\u00e1s del l\u00edder, U10 = \u00faltimos 10 juegos, CA = carreras anotadas, CP = carreras permitidas, DIF C = diferencial de carreras.<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"class_list":["post-16828","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/torosdetijuana.com\/index.php\/wp-json\/wp\/v2\/pages\/16828","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/torosdetijuana.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/torosdetijuana.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/torosdetijuana.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/torosdetijuana.com\/index.php\/wp-json\/wp\/v2\/comments?post=16828"}],"version-history":[{"count":13,"href":"https:\/\/torosdetijuana.com\/index.php\/wp-json\/wp\/v2\/pages\/16828\/revisions"}],"predecessor-version":[{"id":16978,"href":"https:\/\/torosdetijuana.com\/index.php\/wp-json\/wp\/v2\/pages\/16828\/revisions\/16978"}],"wp:attachment":[{"href":"https:\/\/torosdetijuana.com\/index.php\/wp-json\/wp\/v2\/media?parent=16828"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}