{"id":11,"date":"2023-06-08T11:17:56","date_gmt":"2023-06-08T11:17:56","guid":{"rendered":"https:\/\/carptour.pl\/?page_id=11"},"modified":"2026-06-01T07:19:37","modified_gmt":"2026-06-01T07:19:37","slug":"elementor-11","status":"publish","type":"page","link":"https:\/\/carptour.pl\/","title":{"rendered":"CarpTour 07-11.06.2023"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"11\" class=\"elementor elementor-11\">\n\t\t\t\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-f553b1b elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"f553b1b\" data-element_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-top-column elementor-element elementor-element-11b0977\" data-id=\"11b0977\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-a0f769d elementor-widget elementor-widget-html\" data-id=\"a0f769d\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<!DOCTYPE html>\n\n<html lang=\"pl\">\n<head>\n  <meta charset=\"UTF-8\" \/>\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/>\n  <title>Carp Tour 2025 \u2013 Wyniki<\/title>\n  <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/xlsx\/dist\/xlsx.full.min.js\"><\/script>\n  <style>\n    *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\n    :root {\n      --accent:    #ff6600;\n      --accent2:   #ff9233;\n      --gold:      #ffd700;\n      --gold2:     #ffb300;\n      --silver:    #c8d0e0;\n      --bronze:    #e8924a;\n      --text:      #f0f4ff;\n      --muted:     #7a8299;\n      --surface:   rgba(255,255,255,0.05);\n      --surface2:  rgba(255,255,255,0.08);\n      --border:    rgba(255,255,255,0.10);\n      --border-o:  rgba(255,102,0,0.30);\n    }\n\n    html { scroll-behavior: smooth; }\n\n    \/* \u2500\u2500 ANIMATED BACKGROUND \u2500\u2500 *\/\n    body {\n      font-family: 'Segoe UI', Arial, sans-serif;\n      color: var(--text);\n      min-height: 100vh;\n      background:\n        radial-gradient(ellipse 80% 60% at 10% -10%,  rgba(255,102,0,0.22)  0%, transparent 55%),\n        radial-gradient(ellipse 60% 50% at 90%  30%,  rgba(255,60,0,0.14)   0%, transparent 50%),\n        radial-gradient(ellipse 70% 40% at 50% 110%,  rgba(255,120,0,0.12)  0%, transparent 55%),\n        radial-gradient(ellipse 50% 60% at 0%   80%,  rgba(200,40,0,0.10)   0%, transparent 50%),\n        linear-gradient(160deg, #0c0c10 0%, #09090d 40%, #0d0b0b 100%);\n      background-attachment: fixed;\n    }\n\n    \/* subtle dot-grid overlay *\/\n    body::before {\n      content: '';\n      position: fixed; inset: 0; z-index: 0; pointer-events: none;\n      background-image: radial-gradient(circle, rgba(255,255,255,0.06) 1px, transparent 1px);\n      background-size: 28px 28px;\n    }\n\n    .app { position: relative; z-index: 1; max-width: 780px; margin: 0 auto; padding: 16px 14px 56px; }\n\n    \/* \u2500\u2500 HEADER \u2500\u2500 *\/\n    .header {\n      background: linear-gradient(135deg,\n        rgba(255,102,0,0.18) 0%,\n        rgba(255,255,255,0.04) 40%,\n        rgba(255,70,0,0.08) 100%);\n      border: 1px solid var(--border-o);\n      border-radius: 24px;\n      padding: 18px 20px;\n      margin-bottom: 10px;\n      position: relative;\n      overflow: hidden;\n      backdrop-filter: blur(20px);\n      -webkit-backdrop-filter: blur(20px);\n      box-shadow: 0 8px 40px rgba(255,102,0,0.12), inset 0 1px 0 rgba(255,255,255,0.10);\n    }\n    .header::after {\n      content: '';\n      position: absolute; top: -80px; right: -80px;\n      width: 260px; height: 260px; border-radius: 50%;\n      background: radial-gradient(circle, rgba(255,102,0,0.20), transparent 65%);\n      pointer-events: none;\n    }\n    .header-inner { display: flex; align-items: center; gap: 14px; position: relative; z-index: 1; }\n\n    .header-logo {\n      flex-shrink: 0; width: 96px; height: 96px;\n      border-radius: 18px; overflow: hidden;\n      box-shadow: 0 4px 24px rgba(255,102,0,0.40), 0 0 0 2px rgba(255,102,0,0.30);\n    }\n    .header-logo img { width: 100%; height: 100%; object-fit: cover; display: block; }\n\n    .header-text { flex: 1; min-width: 0; }\n    .header-text h1 {\n      font-size: 28px; font-weight: 900;\n      text-transform: uppercase; letter-spacing: .04em; line-height: 1.1;\n      background: linear-gradient(90deg, #ffffff 0%, #ffcca0 100%);\n      -webkit-background-clip: text; -webkit-text-fill-color: transparent;\n      background-clip: text;\n    }\n    .header-text h1 em {\n      font-style: normal;\n      background: linear-gradient(90deg, #ff6600, #ffaa44);\n      -webkit-background-clip: text; -webkit-text-fill-color: transparent;\n      background-clip: text;\n    }\n    .header-text p { font-size: 13px; color: var(--muted); margin-top: 6px; letter-spacing: .03em; }\n\n    \/* \u2500\u2500 COUNTDOWN \u2500\u2500 *\/\n    .countdown {\n      display: flex; gap: 8px; align-items: stretch;\n      margin-top: 14px; position: relative; z-index: 1;\n    }\n    .cd-item {\n      flex: 1; text-align: center;\n      background: rgba(0,0,0,0.30);\n      border: 1px solid rgba(255,102,0,0.22);\n      border-radius: 12px; padding: 8px 4px 7px;\n      backdrop-filter: blur(8px);\n    }\n    .cd-val {\n      display: block;\n      font-size: 26px; font-weight: 900; line-height: 1;\n      background: linear-gradient(135deg, #ff8833, #ffcc55);\n      -webkit-background-clip: text; -webkit-text-fill-color: transparent;\n      background-clip: text;\n    }\n    .cd-lbl {\n      display: block;\n      font-size: 9px; font-weight: 700; text-transform: uppercase;\n      letter-spacing: .10em; color: var(--muted); margin-top: 4px;\n    }\n    .cd-sep {\n      font-size: 22px; font-weight: 900; color: rgba(255,102,0,0.45);\n      align-self: center; padding-bottom: 14px;\n    }\n    .cd-done {\n      font-size: 13px; font-weight: 700; color: var(--accent2);\n      text-align: center; padding: 10px 0 0; letter-spacing: .04em;\n    }\n\n    .btn-refresh {\n      background: linear-gradient(135deg, rgba(255,102,0,0.25), rgba(255,102,0,0.10));\n      border: 1px solid var(--border-o);\n      color: var(--accent2);\n      border-radius: 12px; padding: 9px 16px;\n      font-size: 13px; font-weight: 700; cursor: pointer; white-space: nowrap;\n      transition: all .18s; flex-shrink: 0;\n      box-shadow: 0 2px 12px rgba(255,102,0,0.15);\n    }\n    .btn-refresh:hover { background: linear-gradient(135deg, rgba(255,102,0,0.40), rgba(255,102,0,0.20)); transform: translateY(-1px); }\n    .btn-refresh:disabled { opacity: .45; cursor: not-allowed; transform: none; }\n\n    \/* \u2500\u2500 STATUS \u2500\u2500 *\/\n    .status-bar {\n      font-size: 13px; padding: 10px 16px; border-radius: 12px; margin-bottom: 10px; display: none;\n    }\n    .status-bar.loading { background: rgba(255,102,0,0.10); border: 1px solid rgba(255,102,0,0.25); color: var(--accent2); }\n    .status-bar.error   { background: rgba(220,50,50,0.10);  border: 1px solid rgba(220,50,50,0.30);  color: #ff7070; }\n\n    \/* \u2500\u2500 STICKY TABS \u2500\u2500 *\/\n    .tabs-wrap { position: sticky; top: 8px; z-index: 20; padding: 8px 0; margin-bottom: 4px; }\n    .tabs {\n      display: grid; grid-template-columns: repeat(3, 1fr); gap: 5px;\n      background: rgba(10,10,14,0.88);\n      border: 1px solid rgba(255,102,0,0.22);\n      border-radius: 18px; padding: 5px;\n      backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px);\n      box-shadow: 0 4px 24px rgba(0,0,0,0.40);\n    }\n    .tab {\n      text-align: center; padding: 11px 6px; border-radius: 13px; border: none;\n      background: transparent; color: var(--muted);\n      font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: .07em;\n      cursor: pointer; transition: all .18s;\n    }\n    .tab.active {\n      background: linear-gradient(135deg, rgba(255,102,0,0.30), rgba(255,102,0,0.12));\n      color: #ffb266;\n      box-shadow: 0 2px 12px rgba(255,102,0,0.20), inset 0 1px 0 rgba(255,255,255,0.08);\n    }\n    .tab:hover:not(.active) { background: rgba(255,255,255,0.06); color: var(--text); }\n\n    \/* \u2500\u2500 PANELS \u2500\u2500 *\/\n    .panel { display: none; padding-top: 12px; }\n    .panel.active { display: block; }\n\n    .panel-title {\n      font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: .16em;\n      color: var(--muted); margin-bottom: 14px; padding-left: 4px;\n    }\n\n    \/* \u2500\u2500 TEAM CARD \u2500\u2500 *\/\n    .team-card {\n      background: var(--surface);\n      border: 1px solid var(--border);\n      border-radius: 18px; padding: 14px 16px; margin-bottom: 8px;\n      display: flex; gap: 12px; align-items: flex-start;\n      backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px);\n      transition: border-color .18s, transform .18s, box-shadow .18s;\n      box-shadow: 0 2px 12px rgba(0,0,0,0.20);\n    }\n    .team-card:hover { transform: translateY(-1px); box-shadow: 0 6px 24px rgba(0,0,0,0.30); border-color: rgba(255,255,255,0.16); }\n\n    \/* podium cards *\/\n    .team-card.rank-1 {\n      background: linear-gradient(135deg, rgba(255,215,0,0.14), rgba(255,180,0,0.05));\n      border-color: rgba(255,215,0,0.35);\n      box-shadow: 0 4px 24px rgba(255,200,0,0.15), inset 0 1px 0 rgba(255,220,0,0.12);\n    }\n    .team-card.rank-2 {\n      background: linear-gradient(135deg, rgba(200,208,224,0.10), rgba(180,190,210,0.04));\n      border-color: rgba(200,208,224,0.25);\n      box-shadow: 0 4px 20px rgba(160,170,200,0.10);\n    }\n    .team-card.rank-3 {\n      background: linear-gradient(135deg, rgba(232,146,74,0.14), rgba(200,100,40,0.05));\n      border-color: rgba(232,146,74,0.30);\n      box-shadow: 0 4px 20px rgba(200,120,50,0.12);\n    }\n\n    .rank-badge { min-width: 42px; text-align: center; flex-shrink: 0; padding-top: 2px; }\n    .rank-num   { font-size: 20px; font-weight: 900; line-height: 1; color: var(--muted); }\n    .rank-1 .rank-num { background: linear-gradient(135deg, var(--gold), var(--gold2)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; }\n    .rank-2 .rank-num { color: var(--silver); }\n    .rank-3 .rank-num { color: var(--bronze); }\n    .rank-icon  { font-size: 17px; display: block; margin-top: 3px; }\n\n    .team-body  { flex: 1; min-width: 0; }\n    .team-name  { font-size: 15px; font-weight: 700; line-height: 1.3; word-break: break-word; margin-bottom: 6px; }\n    .rank-1 .team-name { color: #ffe590; }\n\n    .team-meta  { display: flex; gap: 6px; flex-wrap: wrap; margin-bottom: 8px; }\n    .tag {\n      font-size: 11px; color: var(--muted);\n      background: rgba(255,255,255,0.06); border: 1px solid var(--border);\n      border-radius: 7px; padding: 2px 8px;\n    }\n    .fish-row   { display: flex; gap: 5px; flex-wrap: wrap; }\n    .fish-chip  {\n      font-size: 12px;\n      background: linear-gradient(135deg, rgba(255,255,255,0.07), rgba(255,255,255,0.03));\n      border: 1px solid rgba(255,255,255,0.09); border-radius: 8px; padding: 4px 9px;\n      display: flex; align-items: center; gap: 5px;\n    }\n    .fish-lbl { color: var(--muted); font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; }\n    .fish-val { font-weight: 700; font-size: 12px; }\n\n    .team-sum   { text-align: right; flex-shrink: 0; }\n    .sum-lbl    { font-size: 10px; color: var(--muted); text-transform: uppercase; letter-spacing: .07em; margin-bottom: 3px; }\n    .sum-val    { font-size: 22px; font-weight: 900; color: var(--accent2); white-space: nowrap; }\n    .rank-1 .sum-val { background: linear-gradient(135deg, var(--gold), var(--gold2)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; }\n    .rank-2 .sum-val { color: var(--silver); }\n    .rank-3 .sum-val { color: var(--bronze); }\n\n    \/* podium note (general top3 at bottom of sector) *\/\n    .team-card--podium-note {\n      opacity: 0.55; border-style: dashed; border-color: rgba(255,102,0,0.20);\n    }\n    .team-card--podium-note:hover { opacity: 0.75; }\n\n    \/* \u2500\u2500 BIG FISH \u2500\u2500 *\/\n    .bigfish-hero {\n      position: relative; overflow: hidden;\n      background: linear-gradient(135deg,\n        rgba(255,102,0,0.22) 0%,\n        rgba(255,60,0,0.10)  50%,\n        rgba(255,140,0,0.06) 100%);\n      border: 1px solid rgba(255,102,0,0.45);\n      border-radius: 22px; padding: 24px 20px 22px;\n      display: flex; align-items: center; gap: 18px; margin-bottom: 18px;\n      box-shadow: 0 8px 40px rgba(255,102,0,0.18), inset 0 1px 0 rgba(255,255,255,0.08);\n      backdrop-filter: blur(12px);\n    }\n    .bigfish-hero::before {\n      content: '';\n      position: absolute; bottom: -40px; right: -40px;\n      width: 180px; height: 180px; border-radius: 50%;\n      background: radial-gradient(circle, rgba(255,140,0,0.22), transparent 65%);\n      pointer-events: none;\n    }\n    .bfh-icon { font-size: 54px; line-height: 1; flex-shrink: 0; filter: drop-shadow(0 4px 12px rgba(255,120,0,0.40)); }\n    .bfh-info { position: relative; z-index: 1; }\n    .bfh-lbl  { font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: .16em; color: var(--accent2); margin-bottom: 5px; }\n    .bfh-w    {\n      font-size: 42px; font-weight: 900; line-height: 1; margin-bottom: 8px;\n      background: linear-gradient(90deg, #ff7700, #ffcc44);\n      -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text;\n    }\n    .bfh-name { font-size: 15px; font-weight: 700; margin-bottom: 4px; }\n    .bfh-det  { font-size: 12px; color: var(--muted); }\n\n    .topfish-hdr  {\n      font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: .14em;\n      color: var(--muted); margin-bottom: 8px; padding-left: 2px;\n    }\n    .topfish-list { display: flex; flex-direction: column; gap: 6px; }\n    .topfish-row  {\n      background: var(--surface); border: 1px solid var(--border);\n      border-radius: 13px; padding: 11px 14px;\n      display: flex; align-items: center; gap: 12px;\n      backdrop-filter: blur(8px); transition: border-color .15s;\n    }\n    .topfish-row:hover { border-color: rgba(255,255,255,0.18); }\n    .tf-pos   { font-size: 13px; font-weight: 900; color: var(--muted); min-width: 22px; }\n    .tf-name  { font-size: 13px; font-weight: 600; flex: 1; min-width: 0; word-break: break-word; }\n    .tf-sub   { font-size: 11px; color: var(--muted); }\n    .tf-w     {\n      font-size: 17px; font-weight: 900; white-space: nowrap;\n      background: linear-gradient(90deg, var(--accent), var(--accent2));\n      -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text;\n    }\n\n    \/* \u2500\u2500 SEKTORY \u2500\u2500 *\/\n    .sector-block   { margin-bottom: 20px; }\n    .sector-header  {\n      display: flex; align-items: center; gap: 10px; margin-bottom: 8px;\n      padding: 12px 16px;\n      background: linear-gradient(135deg, rgba(255,102,0,0.12), rgba(255,102,0,0.04));\n      border: 1px solid rgba(255,102,0,0.22);\n      border-radius: 14px;\n      backdrop-filter: blur(8px);\n    }\n    .sector-name  {\n      font-size: 14px; font-weight: 900; text-transform: uppercase; letter-spacing: .08em;\n      background: linear-gradient(90deg, #ff9966, #ffcc88);\n      -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text;\n    }\n    .sector-count {\n      font-size: 11px; color: var(--muted);\n      background: rgba(255,255,255,0.06); border: 1px solid var(--border);\n      border-radius: 7px; padding: 2px 9px;\n    }\n\n    \/* \u2500\u2500 EMPTY \/ ERROR \u2500\u2500 *\/\n    .empty { text-align: center; padding: 40px 20px; color: var(--muted); font-size: 14px; }\n    .err   { text-align: center; padding: 30px 20px; color: #ff7070; font-size: 14px; }\n\n    \/* \u2500\u2500 RESPONSIVE \u2500\u2500 *\/\n    @media (max-width: 520px) {\n      .header-text h1 { font-size: 24px; }\n      .header-text p  { font-size: 12px; }\n      .header-logo    { width: 80px; height: 80px; }\n      .sum-val  { font-size: 18px; }\n      .bfh-w    { font-size: 33px; }\n      .bfh-icon { font-size: 42px; }\n      .tab { font-size: 11px; padding: 10px 3px; letter-spacing: .04em; }\n      \/* Schowaj tekst \"Od\u015bwie\u017c\", zostaw tylko ikon\u0119 *\/\n      .btn-txt  { display: none; }\n      .btn-refresh { padding: 9px 13px; font-size: 16px; }\n    }\n  <\/style>\n<\/head>\n<body>\n<div class=\"app\">\n\n  <!-- HEADER -->\n  <div class=\"header\">\n    <div class=\"header-inner\">\n      <div class=\"header-logo\">\n        <img decoding=\"async\" src=\"https:\/\/carptour.pl\/wp-content\/uploads\/2023\/06\/291938410_415677110575560_3896567312785276599_n.jpeg\" alt=\"Carp Tour\" \/>\n      <\/div>\n      <div class=\"header-text\">\n        <h1><em>Zawody CarpTour<\/em><\/h1>\n        <p>Uroczysko Karpiowe &nbsp;\u00b7&nbsp; 24\u201328.06.2026<\/p>\n      <\/div>\n      <button class=\"btn-refresh\" id=\"btnRefresh\"><span class=\"btn-icon\">\u27f3<\/span><span class=\"btn-txt\"> Od\u015bwie\u017c<\/span><\/button>\n    <\/div>\n    <div id=\"countdown\" class=\"countdown\"><\/div>\n  <\/div>\n\n  <!-- STICKY TABS -->\n  <div class=\"tabs-wrap\">\n    <div class=\"tabs\">\n      <button class=\"tab active\" data-tab=\"general\">\ud83c\udfc6 kl. Generalna<\/button>\n      <button class=\"tab\"        data-tab=\"bigfish\">\ud83d\udc1f Big Fish<\/button>\n      <button class=\"tab\"        data-tab=\"sectors\">\ud83c\udfaf kl. Sektorowa<\/button>\n    <\/div>\n  <\/div>\n\n  <div class=\"status-bar\" id=\"statusBar\"><\/div>\n\n  <!-- PANELS -->\n  <div class=\"panel active\" id=\"panel-general\"><\/div>\n  <div class=\"panel\"        id=\"panel-bigfish\"><\/div>\n  <div class=\"panel\"        id=\"panel-sectors\"><\/div>\n\n<\/div>\n<script>\n\/\/ \u2500\u2500\u2500 CONFIG \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\/\/ OneDrive \u2013 oficjalny endpoint API (obs\u0142uguje CORS dla plik\u00f3w publicznych)\nconst XLSX_URL = 'https:\/\/docs.google.com\/spreadsheets\/d\/1Aju1kOZRaNtarEepyPMwqhQqGrLO3E-klkMbGMwKXQY\/export?format=csv&gid=0';\n\/\/ Fallback CSV je\u015bli OneDrive API niedost\u0119pne\nconst CSV_URL  = 'https:\/\/carptour.pl\/wp-content\/uploads\/2026\/05\/Wyniki-2025-ostateczneArkusz1-2.csv';\nconst REFRESH_MS = 60_000;\n\n\/\/ \u2500\u2500\u2500 STATE \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nlet teams   = [];\nlet loadErr = '';\n\n\/\/ \u2500\u2500\u2500 FETCH XLSX (OneDrive API) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nasync function fetchXlsx(url) {\n  const bust = url + (url.includes('?') ? '&' : '?') + '_=' + Date.now();\n  const res = await fetch(bust, { cache: 'no-store' });\n  if (!res.ok) throw new Error('HTTP ' + res.status);\n  \/\/ Google Sheets CSV jest zawsze UTF-8 \u2013 text() zachowuje polskie znaki\n  const text = await res.text();\n  const wb  = XLSX.read(text, { type: 'string' });\n  const ws  = wb.Sheets[wb.SheetNames[0]];\n  return XLSX.utils.sheet_to_json(ws, { raw: false, defval: '' });\n}\n\n\/\/ \u2500\u2500\u2500 FETCH CSV (fallback) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nasync function fetchCsv(url) {\n  const res = await fetch(url + '?_=' + Date.now(), { cache: 'no-store' });\n  if (!res.ok) throw new Error('HTTP ' + res.status);\n  const buf = await res.arrayBuffer();\n  let text;\n  try { text = new TextDecoder('utf-8', { fatal: true }).decode(buf); }\n  catch { text = new TextDecoder('windows-1250').decode(buf); }\n\n  const firstLine = text.split(\/\\r?\\n\/)[0];\n  const delim = firstLine.split(';').length >= firstLine.split(',').length ? ';' : ',';\n  const rows = []; let row = [], cell = '', inQ = false;\n  for (let i = 0; i < text.length; i++) {\n    const c = text[i], nx = text[i + 1];\n    if (c === '\"') { if (inQ && nx === '\"') { cell += '\"'; i++; } else inQ = !inQ; }\n    else if (c === delim && !inQ) { row.push(cell.trim()); cell = ''; }\n    else if (c === '\\r' && nx === '\\n' && !inQ) { i++; row.push(cell.trim()); if (row.some(v=>v)) rows.push(row); row=[]; cell=''; }\n    else if ((c === '\\n' || c === '\\r') && !inQ) { row.push(cell.trim()); if (row.some(v=>v)) rows.push(row); row=[]; cell=''; }\n    else { cell += c; }\n  }\n  if (cell || row.length) { row.push(cell.trim()); if (row.some(v=>v)) rows.push(row); }\n  if (!rows.length) return [];\n  const headers = rows[0].map(h => h.replace(\/^\\uFEFF\/,'').trim());\n  return rows.slice(1).map(cells => {\n    const o = {}; headers.forEach((h,i) => { o[h] = (cells[i]||'').trim(); }); return o;\n  });\n}\n\n\/\/ \u2500\u2500\u2500 POBIERZ DANE \u2013 XLSX z OneDrive, fallback na CSV \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nasync function fetchRows() {\n  try {\n    return await fetchXlsx(XLSX_URL);\n  } catch (e) {\n    console.warn('OneDrive XLSX niedost\u0119pny, fallback na CSV:', e.message);\n    return await fetchCsv(CSV_URL);\n  }\n}\n\n\/\/ \u2500\u2500\u2500 HELPERS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction parseKg(v) {\n  const n = parseFloat(String(v ?? '').replace(',', '.').replace(\/[^\\d.]\/g, ''));\n  return isNaN(n) ? 0 : n;\n}\nfunction fmtKg(v) {\n  const n = parseKg(v);\n  return n > 0 ? n.toFixed(2) + ' kg' : '\u2014 kg';\n}\nfunction esc(s) {\n  return String(s ?? '').replace(\/&\/g,'&amp;').replace(\/<\/g,'&lt;').replace(\/>\/g,'&gt;').replace(\/\"\/g,'&quot;');\n}\n\n\/\/ \u2500\u2500\u2500 BUILD + AUTO-RANK TEAMS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction buildTeams(rows) {\n  const out = [];\n  for (const row of rows) {\n    const name = (row['Imiona i nazwiska'] || row['Nazwa Teamu'] || '')\n      .replace(\/\\n\/g, ' ').replace(\/\\s+\/g, ' ').trim();\n    if (!name) continue;\n    const peg    = (row['Stanowisko'] || '').trim();\n    \/\/ Prawdziwe stanowisko musi zawiera\u0107 cyfr\u0119 (np. \"1\", \"14a\", \"31 +\")\n    \/\/ Wiersze podsumowa\u0144 maj\u0105 puste lub tekstowe Stanowisko \u2192 pomijamy\n    if (!peg || !\/\\d\/.test(peg)) continue;\n\n    const sector = (row['Sektor'] || '').replace(\/\\s+\/g, ' ').trim();\n    const fish   = ['I ryba','II ryba','III ryba']\n      .map((k, i) => ({ label: ['I','II','III'][i], kg: parseKg(row[k]) }))\n      .filter(f => f.kg > 0);\n    \/\/ Suma zawsze liczona z I\/II\/III ryba \u2013 nie z kolumny arkusza\n    const top3 = [...fish].sort((a, b) => b.kg - a.kg).slice(0, 3);\n    const sum = parseFloat(top3.reduce((a, f) => a + f.kg, 0).toFixed(2));\n    \/\/ Ekipy z 0kg te\u017c s\u0105 widoczne \u2013 sum zostaje 0, fish puste\n    out.push({ name, sector, peg, fish, sum });\n  }\n  \/\/ Sort: sum desc, then biggest single fish desc\n  out.sort((a, b) => {\n    if (b.sum !== a.sum) return b.sum - a.sum;\n    const aMax = a.fish.length ? Math.max(...a.fish.map(f => f.kg)) : 0;\n    const bMax = b.fish.length ? Math.max(...b.fish.map(f => f.kg)) : 0;\n    return bMax - aMax;\n  });\n  \/\/ Auto-assign ranks (ex aequo support)\n  let rank = 0, prevSum = -1, prevMax = -1;\n  for (const t of out) {\n    const tMax = t.fish.length ? Math.max(...t.fish.map(f => f.kg)) : 0;\n    if (t.sum !== prevSum || tMax !== prevMax) rank++;\n    t.rank = rank; prevSum = t.sum; prevMax = tMax;\n  }\n  return out;\n}\n\n\/\/ \u2500\u2500\u2500 CARD RENDERERS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nconst ICONS = { 1: '\ud83e\udd47', 2: '\ud83e\udd48', 3: '\ud83e\udd49' };\n\nfunction teamCardHtml(t, displayRank) {\n  const r   = displayRank ?? t.rank;\n  const cls = r <= 3 ? ` rank-${r}` : '';\n  const icon = ICONS[r] ? `<span class=\"rank-icon\">${ICONS[r]}<\/span>` : '';\n  const fishHtml = t.fish.map(f =>\n    `<div class=\"fish-chip\"><span class=\"fish-lbl\">${esc(f.label)}<\/span><span class=\"fish-val\">${fmtKg(f.kg)}<\/span><\/div>`\n  ).join('');\n  return `<div class=\"team-card${cls}\">\n    <div class=\"rank-badge\"><div class=\"rank-num\">${r <= 3 ? '' : r}<\/div>${icon}<\/div>\n    <div class=\"team-body\">\n      <div class=\"team-name\">${esc(t.name)}<\/div>\n      <div class=\"team-meta\">\n        <span class=\"tag\">\ud83d\udccd st.&nbsp;${esc(t.peg)}<\/span>\n        ${t.sector ? `<span class=\"tag\">\u2691&nbsp;${esc(t.sector)}<\/span>` : ''}\n      <\/div>\n      ${fishHtml ? `<div class=\"fish-row\">${fishHtml}<\/div>` : ''}\n    <\/div>\n    <div class=\"team-sum\">\n      <div class=\"sum-lbl\">Suma<\/div>\n      <div class=\"sum-val\">${fmtKg(t.sum)}<\/div>\n    <\/div>\n  <\/div>`;\n}\n\nfunction teamCardWithNote(t, note) {\n  const fishHtml = t.fish.map(f =>\n    `<div class=\"fish-chip\"><span class=\"fish-lbl\">${esc(f.label)}<\/span><span class=\"fish-val\">${fmtKg(f.kg)}<\/span><\/div>`\n  ).join('');\n  return `<div class=\"team-card team-card--podium-note\">\n    <div class=\"rank-badge\"><div class=\"rank-num\" style=\"font-size:10px;color:var(--accent2);white-space:nowrap;line-height:1.3;\">${esc(note)}<\/div><\/div>\n    <div class=\"team-body\">\n      <div class=\"team-name\">${esc(t.name)}<\/div>\n      <div class=\"team-meta\">\n        <span class=\"tag\">\ud83d\udccd st.&nbsp;${esc(t.peg)}<\/span>\n        ${t.sector ? `<span class=\"tag\">\u2691&nbsp;${esc(t.sector)}<\/span>` : ''}\n      <\/div>\n      ${fishHtml ? `<div class=\"fish-row\">${fishHtml}<\/div>` : ''}\n    <\/div>\n    <div class=\"team-sum\">\n      <div class=\"sum-lbl\">Suma<\/div>\n      <div class=\"sum-val\">${fmtKg(t.sum)}<\/div>\n    <\/div>\n  <\/div>`;\n}\n\n\n\/\/ \u2500\u2500\u2500 PANEL: GENERALKA \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction renderGeneral() {\n  const el = document.getElementById('panel-general');\n  if (loadErr && !teams.length) { el.innerHTML = `<div class=\"err\">\u26a0\ufe0f ${esc(loadErr)}<\/div>`; return; }\n  if (!teams.length)             { el.innerHTML = '<div class=\"empty\">Brak danych<\/div>'; return; }\n  el.innerHTML = `<div class=\"panel-title\">Klasyfikacja generalna \u2014 ${teams.length} dru\u017cyn<\/div>`\n    + teams.map(t => teamCardHtml(t)).join('');\n}\n\n\/\/ \u2500\u2500\u2500 PANEL: BIG FISH \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction renderBigFish() {\n  const el = document.getElementById('panel-bigfish');\n  if (loadErr && !teams.length) { el.innerHTML = `<div class=\"err\">\u26a0\ufe0f ${esc(loadErr)}<\/div>`; return; }\n  const all = [];\n  for (const t of teams) for (const f of t.fish)\n    if (f.kg > 0) all.push({ kg: f.kg, name: t.name, sector: t.sector, peg: t.peg });\n  all.sort((a, b) => b.kg - a.kg);\n  if (!all.length) { el.innerHTML = '<div class=\"empty\">Brak danych<\/div>'; return; }\n  const top = all[0], rest = all.slice(1, 11);\n  el.innerHTML = `\n  <div class=\"bigfish-hero\">\n    <div class=\"bfh-icon\">\ud83d\udc1f<\/div>\n    <div class=\"bfh-info\">\n      <div class=\"bfh-lbl\">Big Fish<\/div>\n      <div class=\"bfh-w\">${fmtKg(top.kg)}<\/div>\n      <div class=\"bfh-name\">${esc(top.name)}<\/div>\n      <div class=\"bfh-det\">\ud83d\udccd Stanowisko ${esc(top.peg)}&nbsp;\u00b7&nbsp;\u2691&nbsp;${esc(top.sector)}<\/div>\n    <\/div>\n  <\/div>\n  <div class=\"topfish-hdr\">Top 11 najwi\u0119kszych ryb<\/div>\n  <div class=\"topfish-list\">${rest.map((f, i) => `\n    <div class=\"topfish-row\">\n      <div class=\"tf-pos\">${i + 2}<\/div>\n      <div class=\"tf-name\">${esc(f.name)}<br><span class=\"tf-sub\">st.&nbsp;${esc(f.peg)}&nbsp;\u00b7&nbsp;${esc(f.sector)}<\/span><\/div>\n      <div class=\"tf-w\">${fmtKg(f.kg)}<\/div>\n    <\/div>`).join('')}\n  <\/div>`;\n}\n\n\/\/ \u2500\u2500\u2500 PANEL: SEKTORY \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction renderSectors() {\n  const el = document.getElementById('panel-sectors');\n  if (loadErr && !teams.length) { el.innerHTML = `<div class=\"err\">\u26a0\ufe0f ${esc(loadErr)}<\/div>`; return; }\n  if (!teams.length)             { el.innerHTML = '<div class=\"empty\">Brak danych<\/div>'; return; }\n  const generalPodium = new Set(teams.slice(0, 3).map(t => t.name));\n  const map = {};\n  for (const t of teams) {\n    const s = t.sector || 'Brak sektora';\n    if (!map[s]) map[s] = [];\n    map[s].push(t);\n  }\n  let html = `<div class=\"panel-title\">Klasyfikacja sektorowa<\/div>`;\n  for (const sName of Object.keys(map).sort()) {\n    const members       = map[sName];\n    \/\/ Sortuj wewn\u0105trz sektora niezale\u017cnie: suma malej\u0105co, przy remisie najwi\u0119ksza ryba\n    const sortBySector = (a, b) => {\n      if (b.sum !== a.sum) return b.sum - a.sum;\n      const aMax = a.fish.length ? Math.max(...a.fish.map(f => f.kg)) : 0;\n      const bMax = b.fish.length ? Math.max(...b.fish.map(f => f.kg)) : 0;\n      return bMax - aMax;\n    };\n    const sectorMembers = members.filter(t => !generalPodium.has(t.name)).sort(sortBySector);\n    const podiumMembers = members.filter(t =>  generalPodium.has(t.name)).sort(sortBySector);\n    let sRank = 0, prevS = -1, prevM = -1;\n    const cards = sectorMembers.map(t => {\n      const tMax = t.fish.length ? Math.max(...t.fish.map(f => f.kg)) : 0;\n      if (t.sum !== prevS || tMax !== prevM) sRank++;\n      prevS = t.sum; prevM = tMax;\n      return teamCardHtml(t, sRank);\n    }).join('');\n    const podiumCards = podiumMembers.map(t => teamCardWithNote(t, `${t.rank}. m. gen.`)).join('');\n    html += `<div class=\"sector-block\">\n      <div class=\"sector-header\">\n        <span class=\"sector-name\">\u2691 ${esc(sName)}<\/span>\n        <span class=\"sector-count\">${members.length} dru\u017cyn<\/span>\n      <\/div>\n      ${cards || '<div class=\"empty\">Brak dru\u017cyn.<\/div>'}\n      ${podiumCards}\n    <\/div>`;\n  }\n  el.innerHTML = html;\n}\n\nfunction renderAll() { renderGeneral(); renderBigFish(); renderSectors(); }\n\n\/\/ \u2500\u2500\u2500 STATUS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction showStatus(msg, type) {\n  const b = document.getElementById('statusBar');\n  b.textContent = msg; b.className = 'status-bar ' + type; b.style.display = 'block';\n}\nfunction hideStatus() { document.getElementById('statusBar').style.display = 'none'; }\n\n\/\/ \u2500\u2500\u2500 LOAD DATA \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nlet loading = false;\nasync function loadData() {\n  if (loading) return;\n  loading = true;\n  document.getElementById('btnRefresh').disabled = true;\n  showStatus('Pobieranie danych\u2026', 'loading');\n  try {\n    teams   = buildTeams(await fetchRows());\n    loadErr = '';\n    hideStatus();\n  } catch (err) {\n    loadErr = err.message;\n    showStatus('B\u0142\u0105d pobierania: ' + err.message, 'error');\n  } finally {\n    loading = false;\n    document.getElementById('btnRefresh').disabled = false;\n    renderAll();\n  }\n}\n\n\/\/ \u2500\u2500\u2500 TABS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\ndocument.querySelectorAll('.tab').forEach(btn => {\n  btn.addEventListener('click', () => {\n    document.querySelectorAll('.tab').forEach(t => t.classList.remove('active'));\n    document.querySelectorAll('.panel').forEach(p => p.classList.remove('active'));\n    btn.classList.add('active');\n    document.getElementById('panel-' + btn.dataset.tab).classList.add('active');\n  });\n});\ndocument.getElementById('btnRefresh').addEventListener('click', loadData);\n\n\/\/ \u2500\u2500\u2500 COUNTDOWN \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(function() {\n  const START = new Date('2026-06-24T00:00:00');\n  const END   = new Date('2026-06-28T23:59:59');\n  const el  = document.getElementById('countdown');\n\n  function pad(n) { return String(n).padStart(2, '0'); }\n\n  function tick() {\n    const now = Date.now();\n\n    let diff;\n    const started = now >= START;\n\n    if (!started) {\n      diff = START - now;   \/\/ \ud83d\udd34 do startu\n    } else {\n      diff = END - now;     \/\/ \ud83d\udfe2 do ko\u0144ca\n    }\n\n    if (diff <= 0) {\n      el.innerHTML = '<div class=\"cd-done\">\ud83c\udfc6 Zawody zako\u0144czone!<\/div>';\n      return;\n    }\n\n    const d = Math.floor(diff \/ 86400000);\n    const h = Math.floor((diff % 86400000) \/ 3600000);\n    const m = Math.floor((diff % 3600000)  \/   60000);\n    const s = Math.floor((diff %   60000)  \/    1000);\n\n    const label = started ? '\ud83c\udfa3 Zawody trwaj\u0105 \u2014 pozosta\u0142o' : '\u23f3 Start za';\n\n    el.innerHTML = `\n      <div style=\"width:100%;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.10em;color:var(--muted);margin-bottom:6px;\">${label}<\/div>\n      <div class=\"cd-item\"><span class=\"cd-val\">${d}<\/span><span class=\"cd-lbl\">Dni<\/span><\/div>\n      <div class=\"cd-sep\">:<\/div>\n      <div class=\"cd-item\"><span class=\"cd-val\">${pad(h)}<\/span><span class=\"cd-lbl\">Godz<\/span><\/div>\n      <div class=\"cd-sep\">:<\/div>\n      <div class=\"cd-item\"><span class=\"cd-val\">${pad(m)}<\/span><span class=\"cd-lbl\">Min<\/span><\/div>\n      <div class=\"cd-sep\">:<\/div>\n      <div class=\"cd-item\"><span class=\"cd-val\">${pad(s)}<\/span><span class=\"cd-lbl\">Sek<\/span><\/div>`;\n      \n    el.style.flexWrap = 'wrap';\n  }\n\n  tick();\n  setInterval(tick, 1000);\n})();\n\n\/\/ \u2500\u2500\u2500 INIT \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nloadData();\nsetInterval(loadData, REFRESH_MS);\n<\/script>\n<\/body>\n<\/html>\n\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\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Carp Tour 2025 \u2013 Wyniki Zawody CarpTour Uroczysko Karpiowe &nbsp;\u00b7&nbsp; 24\u201328.06.2026 \u27f3 Od\u015bwie\u017c \ud83c\udfc6 kl. Generalna \ud83d\udc1f Big Fish \ud83c\udfaf kl. Sektorowa<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":[],"_links":{"self":[{"href":"https:\/\/carptour.pl\/index.php\/wp-json\/wp\/v2\/pages\/11"}],"collection":[{"href":"https:\/\/carptour.pl\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/carptour.pl\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/carptour.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/carptour.pl\/index.php\/wp-json\/wp\/v2\/comments?post=11"}],"version-history":[{"count":68,"href":"https:\/\/carptour.pl\/index.php\/wp-json\/wp\/v2\/pages\/11\/revisions"}],"predecessor-version":[{"id":103,"href":"https:\/\/carptour.pl\/index.php\/wp-json\/wp\/v2\/pages\/11\/revisions\/103"}],"wp:attachment":[{"href":"https:\/\/carptour.pl\/index.php\/wp-json\/wp\/v2\/media?parent=11"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}