{"id":1079,"date":"2026-03-07T16:01:21","date_gmt":"2026-03-07T16:01:21","guid":{"rendered":"https:\/\/rheumanext.pl\/?page_id=1079"},"modified":"2026-03-28T17:21:09","modified_gmt":"2026-03-28T17:21:09","slug":"rheumacheck","status":"publish","type":"page","link":"https:\/\/rheumanext.pl\/pl\/rheumacheck\/","title":{"rendered":"RheumaCheck"},"content":{"rendered":"\n<!-- \u25a0\u25a0\u25a0 RheumaCheck \u2014 modu\u0142 pacjenta \/ RZS \/ wersja intro + krok po kroku \u25a0\u25a0\u25a0 -->\n<div id=\"rheumacheck-ra-app\">\n  <style>\n    #rheumacheck-ra-app{\n      --rc-bg:#f7f9fc;\n      --rc-card:#ffffff;\n      --rc-line:#d9e2ec;\n      --rc-text:#16212f;\n      --rc-muted:#5b6b7f;\n      --rc-primary:#123c7a;\n      --rc-primary-2:#0e3267;\n      --rc-soft:#eef4ff;\n      --rc-success:#eaf7ef;\n      --rc-success-border:#b8dfc2;\n      --rc-warn:#fff7e8;\n      --rc-warn-border:#efd39b;\n      --rc-danger:#fff0f0;\n      --rc-danger-border:#efb3b3;\n      --rc-shadow:0 10px 28px rgba(18,40,76,.08);\n      max-width: 920px;\n      margin: 0 auto;\n      color: var(--rc-text);\n      font-family: inherit;\n      line-height: 1.55;\n    }\n\n    #rheumacheck-ra-app *{box-sizing:border-box}\n\n    #rheumacheck-ra-app .rc-card{\n      background:var(--rc-card);\n      border:1px solid var(--rc-line);\n      border-radius:20px;\n      box-shadow:var(--rc-shadow);\n      padding:28px;\n      margin:18px 0;\n    }\n\n    #rheumacheck-ra-app .rc-badge{\n      display:inline-block;\n      padding:6px 10px;\n      border-radius:999px;\n      background:var(--rc-soft);\n      color:var(--rc-primary);\n      font-size:13px;\n      font-weight:700;\n      margin-bottom:14px;\n    }\n\n    #rheumacheck-ra-app h2,\n    #rheumacheck-ra-app h3,\n    #rheumacheck-ra-app h4{\n      margin:0 0 12px 0;\n      line-height:1.25;\n    }\n\n    #rheumacheck-ra-app p{\n      margin:0 0 12px 0;\n    }\n\n    #rheumacheck-ra-app .rc-lead{\n      font-size:18px;\n      color:var(--rc-text);\n      max-width:760px;\n    }\n\n    #rheumacheck-ra-app .rc-muted{\n      color:var(--rc-muted);\n    }\n\n    #rheumacheck-ra-app .rc-grid{\n      display:grid;\n      grid-template-columns:repeat(3,1fr);\n      gap:14px;\n      margin:20px 0 18px;\n    }\n\n    #rheumacheck-ra-app .rc-info{\n      background:var(--rc-bg);\n      border:1px solid var(--rc-line);\n      border-radius:16px;\n      padding:16px;\n    }\n\n    #rheumacheck-ra-app .rc-info strong{\n      display:block;\n      margin-bottom:6px;\n      font-size:15px;\n    }\n\n    #rheumacheck-ra-app .rc-disclaimer{\n      background:#fbfcfe;\n      border:1px dashed #c9d5e4;\n      border-radius:14px;\n      padding:14px 16px;\n      color:var(--rc-muted);\n      font-size:14px;\n      margin-top:18px;\n    }\n\n    #rheumacheck-ra-app .rc-btn-row{\n      display:flex;\n      gap:12px;\n      flex-wrap:wrap;\n      margin-top:22px;\n    }\n\n    #rheumacheck-ra-app .rc-btn{\n      appearance:none;\n      border:none;\n      cursor:pointer;\n      border-radius:14px;\n      padding:14px 20px;\n      font-size:15px;\n      font-weight:700;\n      transition:.2s ease;\n      text-decoration:none;\n      display:inline-flex;\n      align-items:center;\n      justify-content:center;\n      min-height:48px;\n    }\n\n    #rheumacheck-ra-app .rc-btn-primary{\n      background:var(--rc-primary);\n      color:#fff;\n    }\n\n    #rheumacheck-ra-app .rc-btn-primary:hover{\n      background:var(--rc-primary-2);\n    }\n\n    #rheumacheck-ra-app .rc-btn-secondary{\n      background:#fff;\n      color:var(--rc-primary);\n      border:1px solid var(--rc-line);\n    }\n\n    #rheumacheck-ra-app .rc-btn-secondary:hover{\n      background:#f8fbff;\n    }\n\n    #rheumacheck-ra-app .rc-btn:disabled{\n      opacity:.45;\n      cursor:not-allowed;\n    }\n\n    #rheumacheck-ra-app .rc-progress-wrap{\n      margin-bottom:18px;\n    }\n\n    #rheumacheck-ra-app .rc-progress-meta{\n      display:flex;\n      justify-content:space-between;\n      align-items:center;\n      gap:10px;\n      margin-bottom:10px;\n      font-size:14px;\n      color:var(--rc-muted);\n    }\n\n    #rheumacheck-ra-app .rc-link{\n      background:none;\n      border:none;\n      color:var(--rc-primary);\n      font-weight:700;\n      cursor:pointer;\n      padding:0;\n      font-size:14px;\n    }\n\n    #rheumacheck-ra-app .rc-progress{\n      width:100%;\n      height:10px;\n      background:#edf2f7;\n      border-radius:999px;\n      overflow:hidden;\n    }\n\n    #rheumacheck-ra-app .rc-progress-bar{\n      height:100%;\n      width:0%;\n      background:linear-gradient(90deg, #1b4f9c 0%, #3f7ed8 100%);\n      transition:width .25s ease;\n    }\n\n    #rheumacheck-ra-app .rc-help{\n      color:var(--rc-muted);\n      margin-bottom:18px;\n    }\n\n    #rheumacheck-ra-app .rc-options{\n      display:grid;\n      grid-template-columns:1fr 1fr;\n      gap:12px;\n      margin-bottom:22px;\n    }\n\n    #rheumacheck-ra-app .rc-option{\n      width:100%;\n      text-align:left;\n      border:1px solid var(--rc-line);\n      border-radius:16px;\n      background:#fff;\n      padding:16px;\n      cursor:pointer;\n      transition:.2s ease;\n      min-height:78px;\n    }\n\n    #rheumacheck-ra-app .rc-option:hover{\n      border-color:#9ab3d6;\n      background:#f9fbff;\n      transform:translateY(-1px);\n    }\n\n    #rheumacheck-ra-app .rc-option.is-selected{\n      border-color:var(--rc-primary);\n      background:var(--rc-soft);\n      box-shadow:0 0 0 2px rgba(18,60,122,.08) inset;\n    }\n\n    #rheumacheck-ra-app .rc-option-title{\n      display:block;\n      font-weight:700;\n      margin-bottom:4px;\n      color:var(--rc-text);\n    }\n\n    #rheumacheck-ra-app .rc-option-desc{\n      display:block;\n      font-size:14px;\n      color:var(--rc-muted);\n    }\n\n    #rheumacheck-ra-app .rc-actions{\n      display:flex;\n      gap:12px;\n      flex-wrap:wrap;\n    }\n\n    #rheumacheck-ra-app .rc-result-box{\n      border-radius:18px;\n      padding:18px;\n      margin-bottom:18px;\n      border:1px solid var(--rc-line);\n      background:#fff;\n    }\n\n    #rheumacheck-ra-app .rc-tone-high{\n      background:var(--rc-success);\n      border-color:var(--rc-success-border);\n    }\n\n    #rheumacheck-ra-app .rc-tone-mid{\n      background:var(--rc-warn);\n      border-color:var(--rc-warn-border);\n    }\n\n    #rheumacheck-ra-app .rc-tone-low{\n      background:#f4f7fb;\n      border-color:#d9e2ec;\n    }\n\n    #rheumacheck-ra-app .rc-tone-urgent{\n      background:var(--rc-danger);\n      border-color:var(--rc-danger-border);\n    }\n\n    #rheumacheck-ra-app .rc-score{\n      margin-top:12px;\n      padding:12px 14px;\n      border-radius:12px;\n      background:rgba(255,255,255,.75);\n      font-size:14px;\n    }\n\n    #rheumacheck-ra-app .rc-columns{\n      display:grid;\n      grid-template-columns:1fr 1fr;\n      gap:18px;\n      margin:18px 0 4px;\n    }\n\n    #rheumacheck-ra-app ul{\n      margin:0;\n      padding-left:18px;\n    }\n\n    #rheumacheck-ra-app li{\n      margin:0 0 8px 0;\n    }\n\n    #rheumacheck-ra-app .rc-footnote{\n      font-size:13px;\n      color:var(--rc-muted);\n      margin-top:16px;\n    }\n\n    @media (max-width: 760px){\n      #rheumacheck-ra-app .rc-grid,\n      #rheumacheck-ra-app .rc-options,\n      #rheumacheck-ra-app .rc-columns{\n        grid-template-columns:1fr;\n      }\n\n      #rheumacheck-ra-app .rc-card{\n        padding:20px;\n      }\n\n      #rheumacheck-ra-app .rc-lead{\n        font-size:17px;\n      }\n    }\n  <\/style>\n\n    <!-- EKRAN 1: informacja o narz\u0119dziu -->\n  <section class=\"rc-card\" id=\"rcIntro\">\n    <span class=\"rc-badge\" id=\"rcBadge\">RheumaCheck \u2022 modu\u0142 pacjenta \u2022 kierunek RZS<\/span>\n    <h2 id=\"rcIntroTitle\">Czy Twoje objawy mog\u0105 wymaga\u0107 konsultacji reumatologicznej w kierunku RZS?<\/h2>\n    <p class=\"rc-lead\" id=\"rcIntroLead\">\n      To kr\u00f3tkie narz\u0119dzie porz\u0105dkuje objawy i podstawowe informacje o badaniach.\n      Na ko\u0144cu otrzymasz wynik, kt\u00f3ry pomo\u017ce oceni\u0107, czy warto skonsultowa\u0107 si\u0119 z reumatologiem.\n    <\/p>\n\n    <div class=\"rc-grid\">\n      <div class=\"rc-info\">\n        <strong id=\"rcInfo1Title\">2\u20134 minuty<\/strong>\n        <span id=\"rcInfo1Text\">Odpowiadasz, klikaj\u0105c gotowe odpowiedzi.<\/span>\n      <\/div>\n      <div class=\"rc-info\">\n        <strong id=\"rcInfo2Title\">Prosty wynik<\/strong>\n        <span id=\"rcInfo2Text\">Otrzymasz sugesti\u0119 dalszego kroku, a nie diagnoz\u0119.<\/span>\n      <\/div>\n      <div class=\"rc-info\">\n        <strong id=\"rcInfo3Title\">Logika zgodna z praktyk\u0105<\/strong>\n        <span id=\"rcInfo3Text\">Ocena uwzgl\u0119dnia m.in. czas objaw\u00f3w, zaj\u0119cie staw\u00f3w, RF \/ anty-CCP i CRP \/ OB.<\/span>\n      <\/div>\n    <\/div>\n\n    <p class=\"rc-muted\" id=\"rcIntroNote\">\n      Ten modu\u0142 dotyczy przede wszystkim obrazu mog\u0105cego odpowiada\u0107 zapalnej chorobie staw\u00f3w,\n      w tym reumatoidalnemu zapaleniu staw\u00f3w.\n    <\/p>\n\n    <div class=\"rc-disclaimer\" id=\"rcDisclaimer\">\n      To narz\u0119dzie ma charakter informacyjny i nie zast\u0119puje konsultacji lekarskiej.\n      Wynik nie jest rozpoznaniem. Formalna ocena RZS wymaga badania lekarskiego,\n      potwierdzenia zapalenia stawu oraz wykluczenia innych przyczyn dolegliwo\u015bci.\n    <\/div>\n\n    <div class=\"rc-btn-row\">\n      <button type=\"button\" class=\"rc-btn rc-btn-primary\" id=\"rcStartBtn\">Rozpocznij ocen\u0119 objaw\u00f3w<\/button>\n    <\/div>\n  <\/section>\n\n  <!-- EKRAN 2: narz\u0119dzie -->\n  <section class=\"rc-card\" id=\"rcWizard\" hidden>\n    <div class=\"rc-progress-wrap\">\n      <div class=\"rc-progress-meta\">\n        <span id=\"rcStepMeta\">Krok 1 z 8<\/span>\n        <button type=\"button\" class=\"rc-link\" id=\"rcCloseBtn\">Zamknij<\/button>\n      <\/div>\n      <div class=\"rc-progress\">\n        <div class=\"rc-progress-bar\" id=\"rcProgressBar\"><\/div>\n      <\/div>\n    <\/div>\n\n    <h3 id=\"rcQuestion\">Pytanie<\/h3>\n    <p class=\"rc-help\" id=\"rcHelp\"><\/p>\n\n    <div class=\"rc-options\" id=\"rcOptions\"><\/div>\n\n    <div class=\"rc-actions\">\n      <button type=\"button\" class=\"rc-btn rc-btn-secondary\" id=\"rcPrevBtn\">Wstecz<\/button>\n      <button type=\"button\" class=\"rc-btn rc-btn-primary\" id=\"rcNextBtn\" disabled>Dalej<\/button>\n    <\/div>\n  <\/section>\n\n  <!-- EKRAN 3: wynik -->\n  <section class=\"rc-card\" id=\"rcResult\" hidden>\n    <div class=\"rc-result-box\" id=\"rcResultBox\">\n      <h3 id=\"rcResultTitle\">Wynik<\/h3>\n      <p id=\"rcResultLead\"><\/p>\n\n      <div class=\"rc-score\">\n        <strong id=\"rcApproxScoreLabel\">Wynik orientacyjny:<\/strong> <span id=\"rcScoreText\"><\/span><br>\n        <span class=\"rc-muted\" id=\"rcScoreNote\">\n          Logika inspirowana klasyfikacj\u0105 ACR\/EULAR 2010 dla RZS.\n          To nie jest rozpoznanie i nie zast\u0119puje badania lekarskiego.\n        <\/span>\n      <\/div>\n    <\/div>\n\n    <div class=\"rc-columns\">\n      <div>\n        <h4 id=\"rcWhatAffectedTitle\">Co wp\u0142yn\u0119\u0142o na wynik<\/h4>\n        <ul id=\"rcDrivers\"><\/ul>\n      <\/div>\n      <div>\n        <h4 id=\"rcWhatNextTitle\">Co dalej<\/h4>\n        <ul id=\"rcNextSteps\"><\/ul>\n      <\/div>\n    <\/div>\n\n    <p class=\"rc-footnote\" id=\"rcFootnote\">\n      W praktyce lekarz ocenia nie tylko odpowiedzi z wywiadu, ale te\u017c badanie staw\u00f3w,\n      mo\u017cliwe inne przyczyny dolegliwo\u015bci oraz wyniki bada\u0144 laboratoryjnych i obrazowych.\n    <\/p>\n\n    <div class=\"rc-btn-row\">\n      <button type=\"button\" class=\"rc-btn rc-btn-secondary\" id=\"rcRestartBtn\">Wype\u0142nij ponownie<\/button>\n    <\/div>\n  <\/section>\n\n  <script>\n    (function () {\n      const app = document.getElementById(\"rheumacheck-ra-app\");\n      if (!app) return;\n\n      const currentLang =\n        ((document.documentElement.lang || \"\").toLowerCase().startsWith(\"en\")) ||\n        window.location.pathname.includes(\"\/en\/\")\n          ? \"en\"\n          : \"pl\";\n\n      const I18N = {\n        pl: {\n          static: {\n            badge: \"RheumaCheck \u2022 modu\u0142 pacjenta \u2022 kierunek RZS\",\n            introTitle: \"Czy Twoje objawy mog\u0105 wymaga\u0107 konsultacji reumatologicznej w kierunku RZS?\",\n            introLead: \"To kr\u00f3tkie narz\u0119dzie porz\u0105dkuje objawy i podstawowe informacje o badaniach. Na ko\u0144cu otrzymasz wynik, kt\u00f3ry pomo\u017ce oceni\u0107, czy warto skonsultowa\u0107 si\u0119 z reumatologiem.\",\n            info1Title: \"2\u20134 minuty\",\n            info1Text: \"Odpowiadasz, klikaj\u0105c gotowe odpowiedzi.\",\n            info2Title: \"Prosty wynik\",\n            info2Text: \"Otrzymasz sugesti\u0119 dalszego kroku, a nie diagnoz\u0119.\",\n            info3Title: \"Logika zgodna z praktyk\u0105\",\n            info3Text: \"Ocena uwzgl\u0119dnia m.in. czas objaw\u00f3w, zaj\u0119cie staw\u00f3w, RF \/ anty-CCP i CRP \/ OB.\",\n            introNote: \"Ten modu\u0142 dotyczy przede wszystkim obrazu mog\u0105cego odpowiada\u0107 zapalnej chorobie staw\u00f3w, w tym reumatoidalnemu zapaleniu staw\u00f3w.\",\n            disclaimer: \"To narz\u0119dzie ma charakter informacyjny i nie zast\u0119puje konsultacji lekarskiej. Wynik nie jest rozpoznaniem. Formalna ocena RZS wymaga badania lekarskiego, potwierdzenia zapalenia stawu oraz wykluczenia innych przyczyn dolegliwo\u015bci.\",\n            startAssessment: \"Rozpocznij ocen\u0119 objaw\u00f3w\",\n            close: \"Zamknij\",\n            prev: \"Wstecz\",\n            next: \"Dalej\",\n            showResult: \"Poka\u017c wynik\",\n            step: \"Krok\",\n            of: \"z\",\n            approxScore: \"Wynik orientacyjny:\",\n            scoreNote: \"Logika inspirowana klasyfikacj\u0105 ACR\/EULAR 2010 dla RZS. To nie jest rozpoznanie i nie zast\u0119puje badania lekarskiego.\",\n            whatAffected: \"Co wp\u0142yn\u0119\u0142o na wynik\",\n            whatNext: \"Co dalej\",\n            restart: \"Wype\u0142nij ponownie\",\n            footnote: \"W praktyce lekarz ocenia nie tylko odpowiedzi z wywiadu, ale te\u017c badanie staw\u00f3w, mo\u017cliwe inne przyczyny dolegliwo\u015bci oraz wyniki bada\u0144 laboratoryjnych i obrazowych.\"\n          },\n          steps: [\n            {\n              id: \"redFlags\",\n              question: \"Czy wyst\u0119puje kt\u00f3rykolwiek z sygna\u0142\u00f3w alarmowych?\",\n              help: \"Zaznacz \u201etak\u201d, je\u015bli masz np. bardzo bolesny i gor\u0105cy staw z zaczerwienieniem, gor\u0105czk\u0119 \u226538\u00b0C bez jasnej przyczyny, duszno\u015b\u0107, b\u00f3l w klatce piersiowej lub szybkie pogorszenie stanu.\",\n              options: [\n                { value: \"yes\", label: \"Tak\", desc: \"Wyst\u0119puje co najmniej jeden sygna\u0142 alarmowy\" },\n                { value: \"no\", label: \"Nie\", desc: \"Nie obserwuj\u0119 takich objaw\u00f3w\" },\n                { value: \"unsure\", label: \"Nie wiem\", desc: \"Nie mam pewno\u015bci\" }\n              ]\n            },\n            {\n              id: \"synovitis\",\n              question: \"Czy wyst\u0119powa\u0142 wyra\u017any obrz\u0119k co najmniej jednego stawu albo lekarz m\u00f3wi\u0142 o zapaleniu stawu?\",\n              help: \"W kryteriach ACR\/EULAR to wa\u017cny warunek wst\u0119pny. Online nie da si\u0119 go potwierdzi\u0107 w pe\u0142ni, dlatego pytamy o objaw pacjenta lub wcze\u015bniejsz\u0105 informacj\u0119 od lekarza.\",\n              options: [\n                { value: \"yes\", label: \"Tak\", desc: \"By\u0142 wyra\u017any obrz\u0119k \/ lekarz m\u00f3wi\u0142 o zapaleniu\" },\n                { value: \"no\", label: \"Nie\", desc: \"B\u00f3l jest bez obrz\u0119ku lub nie by\u0142o mowy o zapaleniu\" },\n                { value: \"unsure\", label: \"Nie wiem\", desc: \"Nie mam pewno\u015bci\" }\n              ]\n            },\n            {\n              id: \"joints\",\n              question: \"Kt\u00f3ry opis najlepiej pasuje do zaj\u0119cia staw\u00f3w?\",\n              help: \"Du\u017ce stawy: bark, \u0142okie\u0107, biodro, kolano, skokowy. Ma\u0142e stawy: nadgarstek, stawy palc\u00f3w r\u0105k i st\u00f3p.\",\n              options: [\n                { value: \"1large\", label: \"1 du\u017cy staw\", desc: \"Np. tylko jedno kolano\" },\n                { value: \"2to10large\", label: \"2\u201310 du\u017cych staw\u00f3w\", desc: \"Np. oba kolana lub kolana + barki\" },\n                { value: \"1to3small\", label: \"1\u20133 ma\u0142e stawy\", desc: \"Np. nadgarstek lub kilka staw\u00f3w palc\u00f3w\" },\n                { value: \"4to10small\", label: \"4\u201310 ma\u0142ych staw\u00f3w\", desc: \"Kilka staw\u00f3w d\u0142oni \/ st\u00f3p\" },\n                { value: \"gt10inclsmall\", label: \">10 staw\u00f3w, w tym co najmniej 1 ma\u0142y\", desc: \"Rozsiane zaj\u0119cie wielu staw\u00f3w\" },\n                { value: \"unknown\", label: \"Nie wiem\", desc: \"Nie umiem tego oceni\u0107\" }\n              ]\n            },\n            {\n              id: \"duration\",\n              question: \"Jak d\u0142ugo trwaj\u0105 objawy ze staw\u00f3w?\",\n              help: \"W kryteriach ACR\/EULAR granica 6 tygodni ma znaczenie punktowe.\",\n              options: [\n                { value: \"lt6\", label: \"Kr\u00f3cej ni\u017c 6 tygodni\", desc: \"Objawy trwaj\u0105 stosunkowo kr\u00f3tko\" },\n                { value: \"gte6\", label: \"6 tygodni lub d\u0142u\u017cej\", desc: \"Objawy utrzymuj\u0105 si\u0119 \/ nawracaj\u0105 od co najmniej 6 tygodni\" },\n                { value: \"unknown\", label: \"Nie wiem\", desc: \"Nie mam pewno\u015bci\" }\n              ]\n            },\n            {\n              id: \"morning\",\n              question: \"Jak wygl\u0105da sztywno\u015b\u0107 poranna?\",\n              help: \"To nie jest osobny element punktacji ACR\/EULAR, ale mo\u017ce wspiera\u0107 ocen\u0119 zapalnego charakteru dolegliwo\u015bci.\",\n              options: [\n                { value: \"none\", label: \"Brak\", desc: \"Nie odczuwam porannej sztywno\u015bci\" },\n                { value: \"lt30\", label: \"< 30 minut\", desc: \"Kr\u00f3tka sztywno\u015b\u0107 po nocy\" },\n                { value: \"30to60\", label: \"30\u201360 minut\", desc: \"Wyra\u017ana, ale ograniczona w czasie\" },\n                { value: \"gte60\", label: \"\u2265 60 minut\", desc: \"Potrzebuj\u0119 d\u0142u\u017cszego \u201erozruszania si\u0119\u201d\" }\n              ]\n            },\n            {\n              id: \"serology\",\n              question: \"Czy masz wynik RF lub anty-CCP (ACPA \/ anty-CCP)?\",\n              help: \"Je\u015bli nie masz bada\u0144 albo nie znasz miana, wybierz najbli\u017csz\u0105 odpowied\u017a. W formalnej klasyfikacji znaczenie ma dodatni wynik i jego nasilenie.\",\n              options: [\n                { value: \"notdone\", label: \"Nie mam tych bada\u0144\", desc: \"Brak RF \/ anty-CCP\" },\n                { value: \"negative\", label: \"Oba ujemne\", desc: \"RF i anty-CCP ujemne\" },\n                { value: \"lowpos\", label: \"Co najmniej jedno dodatnie, ale bez informacji o wysokim mianie\", desc: \"Niski \/ nieokre\u015blony dodatni wynik\" },\n                { value: \"highpos\", label: \"Co najmniej jedno dodatnie w wysokim mianie\", desc: \"Wyra\u017anie dodatni wynik\" },\n                { value: \"unknown\", label: \"Nie wiem\", desc: \"Mam badania, ale nie znam wyniku\" }\n              ]\n            },\n            {\n              id: \"inflammation\",\n              question: \"Czy CRP lub OB by\u0142y podwy\u017cszone?\",\n              help: \"W klasyfikacji ACR\/EULAR podwy\u017cszone CRP lub OB daje 1 punkt.\",\n              options: [\n                { value: \"high\", label: \"Tak\", desc: \"CRP i\/lub OB by\u0142y podwy\u017cszone\" },\n                { value: \"normal\", label: \"Nie\", desc: \"CRP i OB by\u0142y prawid\u0142owe\" },\n                { value: \"notdone\", label: \"Nie mam tych bada\u0144\", desc: \"Brak CRP \/ OB\" },\n                { value: \"unknown\", label: \"Nie wiem\", desc: \"Nie pami\u0119tam wyniku\" }\n              ]\n            },\n            {\n              id: \"symmetry\",\n              question: \"Czy objawy dotycz\u0105 podobnych staw\u00f3w po obu stronach cia\u0142a?\",\n              help: \"To nie jest formalny punkt ACR\/EULAR, ale symetryczne zaj\u0119cie drobnych staw\u00f3w bywa pomocne w ocenie klinicznej.\",\n              options: [\n                { value: \"yes\", label: \"Tak\", desc: \"Np. podobne stawy obu d\u0142oni \/ obu st\u00f3p\" },\n                { value: \"no\", label: \"Nie\", desc: \"Objawy s\u0105 raczej jednostronne lub niesymetryczne\" },\n                { value: \"unknown\", label: \"Nie wiem\", desc: \"Nie umiem tego oceni\u0107\" }\n              ]\n            }\n          ],\n          drivers: {\n            synovitisYes: \"Obrz\u0119k lub wcze\u015bniejsza informacja o zapaleniu co najmniej jednego stawu.\",\n            synovitisUnsure: \"Brak pewno\u015bci, czy rzeczywi\u015bcie wyst\u0119puje zapalenie stawu.\",\n            synovitisNo: \"Brak danych o obrz\u0119ku \/ zapaleniu stawu, co ogranicza pe\u0142n\u0105 ocen\u0119.\",\n            joints1to3small: \"Zaj\u0119cie 1\u20133 ma\u0142ych staw\u00f3w.\",\n            joints4to10small: \"Zaj\u0119cie 4\u201310 ma\u0142ych staw\u00f3w.\",\n            jointsGt10: \"Zaj\u0119cie >10 staw\u00f3w, w tym co najmniej jednego ma\u0142ego.\",\n            joints2to10large: \"Zaj\u0119cie kilku du\u017cych staw\u00f3w.\",\n            durationGte6: \"Objawy trwaj\u0105 co najmniej 6 tygodni.\",\n            morningGte60: \"Sztywno\u015b\u0107 poranna trwa 60 minut lub d\u0142u\u017cej.\",\n            morning30to60: \"Sztywno\u015b\u0107 poranna trwa 30\u201360 minut.\",\n            serologyLow: \"Dodatni RF lub anty-CCP bez informacji o wysokim mianie.\",\n            serologyHigh: \"Wysoko dodatni RF lub anty-CCP.\",\n            inflammationHigh: \"Podwy\u017cszone CRP i\/lub OB.\",\n            symmetryYes: \"Objawy dotycz\u0105 podobnych staw\u00f3w po obu stronach cia\u0142a.\",\n            redFlagsYes: \"Wyst\u0119puje co najmniej jeden sygna\u0142 alarmowy.\",\n            insufficient: \"Za ma\u0142o danych do orientacyjnej oceny.\"\n          },\n          results: {\n            urgent: {\n              title: \"Nie odk\u0142adaj pilnej konsultacji.\",\n              lead: \"W odpowiedziach pojawi\u0142y si\u0119 sygna\u0142y alarmowe. Taki obraz wymaga pilnej oceny lekarskiej i nie powinien by\u0107 interpretowany wy\u0142\u0105cznie przez narz\u0119dzie online.\",\n              scoreText: \"priorytet pilnej oceny lekarskiej\",\n              nextSteps: [\n                \"Je\u015bli masz bardzo bolesny, gor\u0105cy lub zaczerwieniony staw albo gor\u0105czk\u0119 \u2014 skontaktuj si\u0119 pilnie z lekarzem, nocn\u0105 i \u015bwi\u0105teczn\u0105 opiek\u0105 lub SOR, zale\u017cnie od nasilenia objaw\u00f3w.\",\n                \"Nie opieraj decyzji wy\u0142\u0105cznie na tym wyniku.\",\n                \"Przygotuj list\u0119 objaw\u00f3w, lek\u00f3w i ostatnich wynik\u00f3w bada\u0144.\"\n              ]\n            },\n            high: {\n              title: \"Konsultacja reumatologiczna jest zasadna.\",\n              lead: \"Uk\u0142ad odpowiedzi jest zgodny z obrazem zapalnego zaj\u0119cia staw\u00f3w, kt\u00f3re wymaga oceny lekarskiej pod k\u0105tem RZS lub innej zapalnej choroby staw\u00f3w.\",\n              nextSteps: [\n                \"Um\u00f3w konsultacj\u0119 reumatologiczn\u0105 lub om\u00f3w wynik z lekarzem POZ w celu przyspieszenia dalszej diagnostyki.\",\n                \"Na wizyt\u0119 przygotuj informacj\u0119: od kiedy trwaj\u0105 objawy, kt\u00f3re stawy s\u0105 zaj\u0119te, czy wyst\u0119puje obrz\u0119k i jak d\u0142ugo trwa sztywno\u015b\u0107 poranna.\",\n                \"Je\u015bli masz wyniki CRP, OB, RF, anty-CCP lub USG staw\u00f3w \u2014 miej je pod r\u0119k\u0105.\"\n              ]\n            },\n            mid: {\n              title: \"Warto skonsultowa\u0107 objawy.\",\n              lead: \"Cz\u0119\u015b\u0107 odpowiedzi przemawia za mo\u017cliwym zapalnym charakterem dolegliwo\u015bci, ale obraz nie jest jednoznaczny. Warto om\u00f3wi\u0107 objawy z lekarzem.\",\n              nextSteps: [\n                \"Je\u015bli objawy utrzymuj\u0105 si\u0119, wracaj\u0105 lub pojawia si\u0119 obrz\u0119k staw\u00f3w \u2014 um\u00f3w konsultacj\u0119 z lekarzem POZ lub reumatologiem.\",\n                \"Je\u017celi nie masz podstawowych bada\u0144, om\u00f3w z lekarzem potrzeb\u0119 CRP, OB, RF i anty-CCP.\",\n                \"Je\u015bli pojawi si\u0119 szybkie pogorszenie, gor\u0105czka lub wyra\u017any obrz\u0119k \u2014 nie odk\u0142adaj konsultacji.\"\n              ]\n            },\n            low: {\n              title: \"Typowy obraz RZS jest mniej prawdopodobny.\",\n              lead: \"Na podstawie zaznaczonych odpowiedzi obraz mniej pasuje do klasycznego pocz\u0105tku RZS. To jednak nie wyklucza innych przyczyn b\u00f3lu staw\u00f3w ani nie zast\u0119puje badania lekarskiego.\",\n              nextSteps: [\n                \"Je\u015bli objawy trwaj\u0105 ponad 6 tygodni, pojawi si\u0119 obrz\u0119k lub zaj\u0119cie drobnych staw\u00f3w d\u0142oni \/ st\u00f3p \u2014 skonsultuj si\u0119 z lekarzem.\",\n                \"Je\u017celi dolegliwo\u015bci s\u0105 nowe, po urazie lub dotycz\u0105 pojedynczego stawu, r\u00f3wnie\u017c om\u00f3w je z lekarzem \u2014 przyczyna mo\u017ce by\u0107 inna ni\u017c RZS.\",\n                \"Mo\u017cesz wr\u00f3ci\u0107 do narz\u0119dzia, je\u015bli pojawi\u0105 si\u0119 nowe objawy lub wyniki bada\u0144.\"\n              ]\n            },\n            scoreSuffix: \"\/10 w logice ACR\/EULAR (orientacyjnie)\",\n            scoreInsufficient: \"za ma\u0142o danych do pe\u0142nej oceny\",\n            scoreNoPrecondition: \"brak warunku wst\u0119pnego do pe\u0142nej oceny (brak danych o zapaleniu stawu)\"\n          }\n        },\n\n        en: {\n          static: {\n            badge: \"RheumaCheck \u2022 patient module \u2022 RA pathway\",\n            introTitle: \"Could your symptoms require a rheumatology consultation for possible RA?\",\n            introLead: \"This short tool helps organize symptoms and basic information about test results. At the end, you will receive a result that may help assess whether a rheumatology consultation is worth considering.\",\n            info1Title: \"2\u20134 minutes\",\n            info1Text: \"You answer by clicking ready-made options.\",\n            info2Title: \"Simple result\",\n            info2Text: \"You receive a suggestion for the next step, not a diagnosis.\",\n            info3Title: \"Practice-aligned logic\",\n            info3Text: \"The assessment considers symptom duration, joint involvement, RF \/ anti-CCP, and CRP \/ ESR.\",\n            introNote: \"This module mainly concerns a pattern that may correspond to inflammatory joint disease, including rheumatoid arthritis.\",\n            disclaimer: \"This tool is for informational purposes only and does not replace medical consultation. The result is not a diagnosis. Formal RA assessment requires medical examination, confirmation of joint inflammation, and exclusion of other possible causes.\",\n            startAssessment: \"Start Symptom Assessment\",\n            close: \"Close\",\n            prev: \"Back\",\n            next: \"Next\",\n            showResult: \"Show Result\",\n            step: \"Step\",\n            of: \"of\",\n            approxScore: \"Approximate score:\",\n            scoreNote: \"Logic inspired by the 2010 ACR\/EULAR RA classification. This is not a diagnosis and does not replace medical examination.\",\n            whatAffected: \"What influenced the result\",\n            whatNext: \"What next\",\n            restart: \"Start Again\",\n            footnote: \"In practice, the clinician evaluates not only questionnaire answers, but also joint examination, other possible causes of symptoms, and laboratory and imaging results.\"\n          },\n          steps: [\n            {\n              id: \"redFlags\",\n              question: \"Are any red flag symptoms present?\",\n              help: \"Select \u201cyes\u201d if you have, for example, a very painful hot red joint, fever \u226538\u00b0C without a clear cause, shortness of breath, chest pain, or rapid worsening of your condition.\",\n              options: [\n                { value: \"yes\", label: \"Yes\", desc: \"At least one red flag symptom is present\" },\n                { value: \"no\", label: \"No\", desc: \"I do not observe such symptoms\" },\n                { value: \"unsure\", label: \"Not sure\", desc: \"I am not certain\" }\n              ]\n            },\n            {\n              id: \"synovitis\",\n              question: \"Have you had clear swelling of at least one joint, or has a doctor told you there was joint inflammation?\",\n              help: \"In the ACR\/EULAR criteria, this is an important entry requirement. It cannot be fully confirmed online, so we ask about the patient\u2019s observation or a previous medical statement.\",\n              options: [\n                { value: \"yes\", label: \"Yes\", desc: \"There was clear swelling \/ a doctor mentioned inflammation\" },\n                { value: \"no\", label: \"No\", desc: \"There is pain without swelling or no mention of inflammation\" },\n                { value: \"unsure\", label: \"Not sure\", desc: \"I am not certain\" }\n              ]\n            },\n            {\n              id: \"joints\",\n              question: \"Which description best fits the pattern of joint involvement?\",\n              help: \"Large joints: shoulder, elbow, hip, knee, ankle. Small joints: wrist, finger joints, toe joints.\",\n              options: [\n                { value: \"1large\", label: \"1 large joint\", desc: \"For example, only one knee\" },\n                { value: \"2to10large\", label: \"2\u201310 large joints\", desc: \"For example, both knees or knees + shoulders\" },\n                { value: \"1to3small\", label: \"1\u20133 small joints\", desc: \"For example, a wrist or a few finger joints\" },\n                { value: \"4to10small\", label: \"4\u201310 small joints\", desc: \"Several joints in the hands \/ feet\" },\n                { value: \"gt10inclsmall\", label: \">10 joints, including at least 1 small joint\", desc: \"Widespread involvement of many joints\" },\n                { value: \"unknown\", label: \"Not sure\", desc: \"I cannot assess this\" }\n              ]\n            },\n            {\n              id: \"duration\",\n              question: \"How long have your joint symptoms been present?\",\n              help: \"In the ACR\/EULAR criteria, the 6-week threshold has scoring significance.\",\n              options: [\n                { value: \"lt6\", label: \"Less than 6 weeks\", desc: \"Symptoms have been present for a relatively short time\" },\n                { value: \"gte6\", label: \"6 weeks or longer\", desc: \"Symptoms have persisted \/ recurred for at least 6 weeks\" },\n                { value: \"unknown\", label: \"Not sure\", desc: \"I am not certain\" }\n              ]\n            },\n            {\n              id: \"morning\",\n              question: \"What is your morning stiffness like?\",\n              help: \"This is not a separate ACR\/EULAR scoring item, but it may support the assessment of inflammatory symptoms.\",\n              options: [\n                { value: \"none\", label: \"None\", desc: \"I do not feel morning stiffness\" },\n                { value: \"lt30\", label: \"< 30 minutes\", desc: \"Short stiffness after the night\" },\n                { value: \"30to60\", label: \"30\u201360 minutes\", desc: \"Noticeable but limited in duration\" },\n                { value: \"gte60\", label: \"\u2265 60 minutes\", desc: \"I need longer to \u201cloosen up\u201d\" }\n              ]\n            },\n            {\n              id: \"serology\",\n              question: \"Do you have an RF or anti-CCP (ACPA \/ anti-CCP) result?\",\n              help: \"If you have not had these tests or do not know the titer, choose the closest answer. In formal classification, a positive result and its level matter.\",\n              options: [\n                { value: \"notdone\", label: \"I have not had these tests\", desc: \"No RF \/ anti-CCP results\" },\n                { value: \"negative\", label: \"Both negative\", desc: \"RF and anti-CCP are negative\" },\n                { value: \"lowpos\", label: \"At least one positive, but no information about high titer\", desc: \"Low \/ unspecified positive result\" },\n                { value: \"highpos\", label: \"At least one positive at high titer\", desc: \"Clearly positive result\" },\n                { value: \"unknown\", label: \"I don\u2019t know\", desc: \"I have the tests, but I do not know the result\" }\n              ]\n            },\n            {\n              id: \"inflammation\",\n              question: \"Were CRP or ESR elevated?\",\n              help: \"In the ACR\/EULAR classification, elevated CRP or ESR gives 1 point.\",\n              options: [\n                { value: \"high\", label: \"Yes\", desc: \"CRP and\/or ESR were elevated\" },\n                { value: \"normal\", label: \"No\", desc: \"CRP and ESR were normal\" },\n                { value: \"notdone\", label: \"I have not had these tests\", desc: \"No CRP \/ ESR results\" },\n                { value: \"unknown\", label: \"I don\u2019t know\", desc: \"I do not remember the result\" }\n              ]\n            },\n            {\n              id: \"symmetry\",\n              question: \"Do the symptoms affect similar joints on both sides of the body?\",\n              help: \"This is not a formal ACR\/EULAR item, but symmetrical small-joint involvement can be helpful in clinical assessment.\",\n              options: [\n                { value: \"yes\", label: \"Yes\", desc: \"For example, similar joints in both hands \/ both feet\" },\n                { value: \"no\", label: \"No\", desc: \"Symptoms are rather one-sided or asymmetrical\" },\n                { value: \"unknown\", label: \"Not sure\", desc: \"I cannot assess this\" }\n              ]\n            }\n          ],\n          drivers: {\n            synovitisYes: \"Swelling or previous information about inflammation in at least one joint.\",\n            synovitisUnsure: \"Uncertainty as to whether true joint inflammation is present.\",\n            synovitisNo: \"No evidence of swelling \/ joint inflammation, which limits full assessment.\",\n            joints1to3small: \"Involvement of 1\u20133 small joints.\",\n            joints4to10small: \"Involvement of 4\u201310 small joints.\",\n            jointsGt10: \"Involvement of >10 joints, including at least one small joint.\",\n            joints2to10large: \"Involvement of several large joints.\",\n            durationGte6: \"Symptoms have been present for at least 6 weeks.\",\n            morningGte60: \"Morning stiffness lasts 60 minutes or longer.\",\n            morning30to60: \"Morning stiffness lasts 30\u201360 minutes.\",\n            serologyLow: \"Positive RF or anti-CCP without information about high titer.\",\n            serologyHigh: \"High-positive RF or anti-CCP.\",\n            inflammationHigh: \"Elevated CRP and\/or ESR.\",\n            symmetryYes: \"Symptoms affect similar joints on both sides of the body.\",\n            redFlagsYes: \"At least one red flag symptom is present.\",\n            insufficient: \"Too little data for an approximate assessment.\"\n          },\n          results: {\n            urgent: {\n              title: \"Do not delay urgent medical evaluation.\",\n              lead: \"Your answers include red flag symptoms. This pattern requires urgent medical assessment and should not be interpreted only through an online tool.\",\n              scoreText: \"priority for urgent medical evaluation\",\n              nextSteps: [\n                \"If you have a very painful, hot, or red joint, or fever, seek urgent medical advice, out-of-hours care, or emergency care depending on symptom severity.\",\n                \"Do not base decisions solely on this result.\",\n                \"Prepare a list of symptoms, medications, and recent test results.\"\n              ]\n            },\n            high: {\n              title: \"A rheumatology consultation is appropriate.\",\n              lead: \"Your answer pattern is consistent with inflammatory joint involvement that requires medical assessment for RA or another inflammatory joint disease.\",\n              nextSteps: [\n                \"Arrange a rheumatology consultation or discuss the result with your primary care physician to accelerate further evaluation.\",\n                \"Prepare information about symptom duration, which joints are affected, whether swelling is present, and how long morning stiffness lasts.\",\n                \"If you have CRP, ESR, RF, anti-CCP, or joint ultrasound results, keep them available.\"\n              ]\n            },\n            mid: {\n              title: \"Your symptoms are worth discussing with a clinician.\",\n              lead: \"Some of your answers may suggest an inflammatory pattern, but the picture is not clear-cut. It is worth discussing the symptoms with a clinician.\",\n              nextSteps: [\n                \"If symptoms persist, recur, or joint swelling appears, arrange a consultation with a primary care physician or rheumatologist.\",\n                \"If you do not have basic tests, discuss CRP, ESR, RF, and anti-CCP with your clinician.\",\n                \"If rapid worsening, fever, or clear joint swelling appears, do not delay consultation.\"\n              ]\n            },\n            low: {\n              title: \"A typical RA pattern is less likely.\",\n              lead: \"Based on your answers, the pattern fits less well with a typical RA onset. However, this does not exclude other causes of joint pain and does not replace medical evaluation.\",\n              nextSteps: [\n                \"If symptoms last longer than 6 weeks, swelling appears, or small joints of the hands \/ feet become involved, consult a clinician.\",\n                \"If symptoms are new, follow trauma, or concern a single joint, discuss them with a clinician as the cause may be different from RA.\",\n                \"You can return to the tool if new symptoms or test results appear.\"\n              ]\n            },\n            scoreSuffix: \"\/10 in ACR\/EULAR-style logic (approximate)\",\n            scoreInsufficient: \"too little data for a full assessment\",\n            scoreNoPrecondition: \"no entry requirement for full assessment met (no evidence of joint inflammation)\"\n          }\n        }\n      };\n\n      const TXT = I18N[currentLang];\n\n      const introEl = document.getElementById(\"rcIntro\");\n      const wizardEl = document.getElementById(\"rcWizard\");\n      const resultEl = document.getElementById(\"rcResult\");\n\n      const startBtn = document.getElementById(\"rcStartBtn\");\n      const closeBtn = document.getElementById(\"rcCloseBtn\");\n      const prevBtn = document.getElementById(\"rcPrevBtn\");\n      const nextBtn = document.getElementById(\"rcNextBtn\");\n      const restartBtn = document.getElementById(\"rcRestartBtn\");\n\n      const stepMetaEl = document.getElementById(\"rcStepMeta\");\n      const progressBarEl = document.getElementById(\"rcProgressBar\");\n      const questionEl = document.getElementById(\"rcQuestion\");\n      const helpEl = document.getElementById(\"rcHelp\");\n      const optionsEl = document.getElementById(\"rcOptions\");\n\n      const resultBoxEl = document.getElementById(\"rcResultBox\");\n      const resultTitleEl = document.getElementById(\"rcResultTitle\");\n      const resultLeadEl = document.getElementById(\"rcResultLead\");\n      const scoreTextEl = document.getElementById(\"rcScoreText\");\n      const driversEl = document.getElementById(\"rcDrivers\");\n      const nextStepsEl = document.getElementById(\"rcNextSteps\");\n\n      const steps = TXT.steps;\n      const answers = {};\n      let currentStep = 0;\n\n      const points = {\n        joints: {\n          \"1large\": 0,\n          \"2to10large\": 1,\n          \"1to3small\": 2,\n          \"4to10small\": 3,\n          \"gt10inclsmall\": 5,\n          \"unknown\": 0\n        },\n        duration: {\n          \"lt6\": 0,\n          \"gte6\": 1,\n          \"unknown\": 0\n        },\n        serology: {\n          \"notdone\": 0,\n          \"negative\": 0,\n          \"lowpos\": 2,\n          \"highpos\": 3,\n          \"unknown\": 0\n        },\n        inflammation: {\n          \"high\": 1,\n          \"normal\": 0,\n          \"notdone\": 0,\n          \"unknown\": 0\n        }\n      };\n\n      function applyStaticTexts() {\n        document.getElementById(\"rcBadge\").textContent = TXT.static.badge;\n        document.getElementById(\"rcIntroTitle\").textContent = TXT.static.introTitle;\n        document.getElementById(\"rcIntroLead\").textContent = TXT.static.introLead;\n        document.getElementById(\"rcInfo1Title\").textContent = TXT.static.info1Title;\n        document.getElementById(\"rcInfo1Text\").textContent = TXT.static.info1Text;\n        document.getElementById(\"rcInfo2Title\").textContent = TXT.static.info2Title;\n        document.getElementById(\"rcInfo2Text\").textContent = TXT.static.info2Text;\n        document.getElementById(\"rcInfo3Title\").textContent = TXT.static.info3Title;\n        document.getElementById(\"rcInfo3Text\").textContent = TXT.static.info3Text;\n        document.getElementById(\"rcIntroNote\").textContent = TXT.static.introNote;\n        document.getElementById(\"rcDisclaimer\").textContent = TXT.static.disclaimer;\n        document.getElementById(\"rcStartBtn\").textContent = TXT.static.startAssessment;\n        document.getElementById(\"rcCloseBtn\").textContent = TXT.static.close;\n        document.getElementById(\"rcPrevBtn\").textContent = TXT.static.prev;\n        document.getElementById(\"rcApproxScoreLabel\").textContent = TXT.static.approxScore;\n        document.getElementById(\"rcScoreNote\").textContent = TXT.static.scoreNote;\n        document.getElementById(\"rcWhatAffectedTitle\").textContent = TXT.static.whatAffected;\n        document.getElementById(\"rcWhatNextTitle\").textContent = TXT.static.whatNext;\n        document.getElementById(\"rcFootnote\").textContent = TXT.static.footnote;\n        document.getElementById(\"rcRestartBtn\").textContent = TXT.static.restart;\n      }\n\n      function scrollToBlock(el) {\n        if (!el) return;\n        setTimeout(function () {\n          el.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n        }, 40);\n      }\n\n      function resetApp() {\n        Object.keys(answers).forEach(function (key) {\n          delete answers[key];\n        });\n        currentStep = 0;\n        introEl.hidden = false;\n        wizardEl.hidden = true;\n        resultEl.hidden = true;\n        renderStep();\n        scrollToBlock(app);\n      }\n\n      function renderStep() {\n        const step = steps[currentStep];\n        stepMetaEl.textContent = TXT.static.step + \" \" + (currentStep + 1) + \" \" + TXT.static.of + \" \" + steps.length;\n        progressBarEl.style.width = (((currentStep + 1) \/ steps.length) * 100) + \"%\";\n        questionEl.textContent = step.question;\n        helpEl.textContent = step.help || \"\";\n\n        optionsEl.innerHTML = \"\";\n\n        step.options.forEach(function (opt) {\n          const btn = document.createElement(\"button\");\n          btn.type = \"button\";\n          btn.className = \"rc-option\" + (answers[step.id] === opt.value ? \" is-selected\" : \"\");\n          btn.innerHTML =\n            '<span class=\"rc-option-title\">' + opt.label + '<\/span>' +\n            '<span class=\"rc-option-desc\">' + opt.desc + '<\/span>';\n\n          btn.addEventListener(\"click\", function () {\n            answers[step.id] = opt.value;\n            renderStep();\n          });\n\n          optionsEl.appendChild(btn);\n        });\n\n        prevBtn.style.display = currentStep === 0 ? \"none\" : \"inline-flex\";\n        nextBtn.textContent = currentStep === steps.length - 1 ? TXT.static.showResult : TXT.static.next;\n        nextBtn.disabled = !answers[step.id];\n      }\n\n      function buildDrivers(a, score) {\n        const D = TXT.drivers;\n        const drivers = [];\n\n        if (a.synovitis === \"yes\") {\n          drivers.push(D.synovitisYes);\n        } else if (a.synovitis === \"unsure\") {\n          drivers.push(D.synovitisUnsure);\n        } else {\n          drivers.push(D.synovitisNo);\n        }\n\n        if (a.joints === \"1to3small\") drivers.push(D.joints1to3small);\n        if (a.joints === \"4to10small\") drivers.push(D.joints4to10small);\n        if (a.joints === \"gt10inclsmall\") drivers.push(D.jointsGt10);\n        if (a.joints === \"2to10large\") drivers.push(D.joints2to10large);\n        if (a.duration === \"gte6\") drivers.push(D.durationGte6);\n        if (a.morning === \"gte60\") drivers.push(D.morningGte60);\n        if (a.morning === \"30to60\") drivers.push(D.morning30to60);\n        if (a.serology === \"lowpos\") drivers.push(D.serologyLow);\n        if (a.serology === \"highpos\") drivers.push(D.serologyHigh);\n        if (a.inflammation === \"high\") drivers.push(D.inflammationHigh);\n        if (a.symmetry === \"yes\") drivers.push(D.symmetryYes);\n        if (a.redFlags === \"yes\") drivers.push(D.redFlagsYes);\n\n        if (!drivers.length && score === 0) {\n          drivers.push(D.insufficient);\n        }\n\n        return drivers;\n      }\n\n      function buildResult() {\n        const a = answers;\n        const R = TXT.results;\n\n        const jointScore = points.joints[a.joints] || 0;\n        const durationScore = points.duration[a.duration] || 0;\n        const serologyScore = points.serology[a.serology] || 0;\n        const inflammationScore = points.inflammation[a.inflammation] || 0;\n        const score = jointScore + durationScore + serologyScore + inflammationScore;\n\n        const supportiveCount =\n          (a.morning === \"gte60\" ? 1 : 0) +\n          (a.symmetry === \"yes\" ? 1 : 0) +\n          (a.morning === \"30to60\" ? 1 : 0);\n\n        const hasSynovitisSignal = a.synovitis === \"yes\";\n        const synovitisUnclear = a.synovitis === \"unsure\";\n        const urgent = a.redFlags === \"yes\";\n\n        const drivers = buildDrivers(a, score);\n\n        let tone = \"rc-tone-low\";\n        let title = \"\";\n        let lead = \"\";\n        let scoreText = \"\";\n        let nextSteps = [];\n\n        if (urgent) {\n          tone = \"rc-tone-urgent\";\n          title = R.urgent.title;\n          lead = R.urgent.lead;\n          scoreText = R.urgent.scoreText;\n          nextSteps = R.urgent.nextSteps;\n        } else if (hasSynovitisSignal && score >= 6) {\n          tone = \"rc-tone-high\";\n          title = R.high.title;\n          lead = R.high.lead;\n          scoreText = score + R.scoreSuffix;\n          nextSteps = R.high.nextSteps;\n        } else if ((hasSynovitisSignal && score >= 4) || (synovitisUnclear && (score >= 4 || supportiveCount >= 2))) {\n          tone = \"rc-tone-mid\";\n          title = R.mid.title;\n          lead = R.mid.lead;\n          scoreText = score > 0 ? (score + R.scoreSuffix) : R.scoreInsufficient;\n          nextSteps = R.mid.nextSteps;\n        } else {\n          tone = \"rc-tone-low\";\n          title = R.low.title;\n          lead = R.low.lead;\n          scoreText = hasSynovitisSignal ? (score + R.scoreSuffix) : R.scoreNoPrecondition;\n          nextSteps = R.low.nextSteps;\n        }\n\n        return { tone, title, lead, scoreText, drivers, nextSteps };\n      }\n\n      function renderResult() {\n        const data = buildResult();\n\n        resultBoxEl.className = \"rc-result-box \" + data.tone;\n        resultTitleEl.textContent = data.title;\n        resultLeadEl.textContent = data.lead;\n        scoreTextEl.textContent = data.scoreText;\n\n        driversEl.innerHTML = \"\";\n        data.drivers.forEach(function (item) {\n          const li = document.createElement(\"li\");\n          li.textContent = item;\n          driversEl.appendChild(li);\n        });\n\n        nextStepsEl.innerHTML = \"\";\n        data.nextSteps.forEach(function (item) {\n          const li = document.createElement(\"li\");\n          li.textContent = item;\n          nextStepsEl.appendChild(li);\n        });\n\n        introEl.hidden = true;\n        wizardEl.hidden = true;\n        resultEl.hidden = false;\n        scrollToBlock(resultEl);\n      }\n\n      startBtn.addEventListener(\"click\", function () {\n        introEl.hidden = true;\n        resultEl.hidden = true;\n        wizardEl.hidden = false;\n        renderStep();\n        scrollToBlock(wizardEl);\n      });\n\n      closeBtn.addEventListener(\"click\", function () {\n        wizardEl.hidden = true;\n        introEl.hidden = false;\n        scrollToBlock(introEl);\n      });\n\n      prevBtn.addEventListener(\"click\", function () {\n        if (currentStep > 0) {\n          currentStep--;\n          renderStep();\n        }\n      });\n\n      nextBtn.addEventListener(\"click\", function () {\n        const step = steps[currentStep];\n        if (!answers[step.id]) return;\n\n        if (currentStep < steps.length - 1) {\n          currentStep++;\n          renderStep();\n          scrollToBlock(wizardEl);\n        } else {\n          renderResult();\n        }\n      });\n\n      restartBtn.addEventListener(\"click\", function () {\n        resetApp();\n      });\n\n      applyStaticTexts();\n      renderStep();\n    })();\n  <\/script>\n<\/div>\n<!-- \u25a0\u25a0\u25a0 KONIEC RheumaCheck \u2014 modu\u0142 pacjenta \/ RZS \u25a0\u25a0\u25a0 -->\n","protected":false},"excerpt":{"rendered":"<p>RheumaCheck \u2022 modu\u0142 pacjenta \u2022 kierunek RZS Czy Twoje objawy mog\u0105 wymaga\u0107 konsultacji reumatologicznej w kierunku RZS? To kr\u00f3tkie narz\u0119dzie porz\u0105dkuje objawy i podstawowe informacje o badaniach. Na ko\u0144cu otrzymasz wynik, kt\u00f3ry pomo\u017ce oceni\u0107, czy warto skonsultowa\u0107 si\u0119 z reumatologiem. 2\u20134 minuty Odpowiadasz, klikaj\u0105c gotowe odpowiedzi. Prosty wynik Otrzymasz sugesti\u0119 dalszego kroku, a nie diagnoz\u0119&#8230;.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"_kadence_starter_templates_imported_post":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"class_list":["post-1079","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/rheumanext.pl\/pl\/wp-json\/wp\/v2\/pages\/1079","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rheumanext.pl\/pl\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/rheumanext.pl\/pl\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/rheumanext.pl\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rheumanext.pl\/pl\/wp-json\/wp\/v2\/comments?post=1079"}],"version-history":[{"count":2,"href":"https:\/\/rheumanext.pl\/pl\/wp-json\/wp\/v2\/pages\/1079\/revisions"}],"predecessor-version":[{"id":1250,"href":"https:\/\/rheumanext.pl\/pl\/wp-json\/wp\/v2\/pages\/1079\/revisions\/1250"}],"wp:attachment":[{"href":"https:\/\/rheumanext.pl\/pl\/wp-json\/wp\/v2\/media?parent=1079"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}