{"id":251,"date":"2026-02-15T20:45:08","date_gmt":"2026-02-15T19:45:08","guid":{"rendered":"https:\/\/profecatala.davidibiza.com\/?page_id=251"},"modified":"2026-06-25T11:08:36","modified_gmt":"2026-06-25T09:08:36","slug":"prueba-de-nivel","status":"publish","type":"page","link":"https:\/\/profecatala.davidibiza.com\/?page_id=251","title":{"rendered":"Prueba de nivel"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"251\" class=\"elementor elementor-251\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6b3a1f9c e-con-full e-flex e-con e-parent\" data-id=\"6b3a1f9c\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7c4d2e8b elementor-widget elementor-widget-html\" data-id=\"7c4d2e8b\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div id=\"pfc-test-root\">\n\n<style>\n\/* ===== PROVA DE NIVELL \u2014 WIDGET STYLES ===== *\/\n#pfc-test-root *{box-sizing:border-box;margin:0;padding:0}\n#pfc-test-root{font-family:'Plus Jakarta Sans',Arial,sans-serif;max-width:700px;margin:0 auto;padding:40px 24px 80px}\n\n\/* INTRO *\/\n#pfc-intro{text-align:center}\n#pfc-intro h1{font-size:38px;font-weight:800;color:#1a2225;letter-spacing:-.02em;line-height:1.15;margin-bottom:14px}\n#pfc-intro p{font-size:17px;color:#555;line-height:1.65;margin-bottom:32px;max-width:520px;margin-left:auto;margin-right:auto}\n.pfc-badges{display:flex;justify-content:center;gap:10px;flex-wrap:wrap;margin-bottom:36px}\n.pfc-badge{background:#f0f4f8;border-radius:20px;padding:6px 16px;font-size:13px;font-weight:600;color:#445}\n#pfc-form{background:#fff;border:1.5px solid #e0e5ea;border-radius:18px;padding:32px;max-width:440px;margin:0 auto;text-align:left}\n#pfc-form label{display:block;font-size:13px;font-weight:700;color:#333;margin-bottom:6px;margin-top:16px}\n#pfc-form label:first-child{margin-top:0}\n#pfc-form input{width:100%;padding:13px 16px;border:1.5px solid #d0d7de;border-radius:10px;font-size:15px;font-family:inherit;color:#1a2225;outline:none;transition:border-color .2s}\n#pfc-form input:focus{border-color:#c60c30}\n#pfc-start-btn{width:100%;margin-top:24px;background:#c60c30;color:#fff;border:none;border-radius:12px;padding:16px;font-size:17px;font-weight:700;font-family:inherit;cursor:pointer;transition:transform .15s,box-shadow .15s}\n#pfc-start-btn:hover{transform:scale(1.03);box-shadow:0 8px 24px rgba(198,12,48,.3)}\n.pfc-disclaimer{margin-top:14px;font-size:12px;color:#888;text-align:center}\n\n\/* TEST SCREEN *\/\n#pfc-test{display:none}\n.pfc-progress-wrap{margin-bottom:28px}\n.pfc-progress-meta{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}\n.pfc-q-label{font-size:13px;font-weight:700;color:#888}\n.pfc-score-live{font-size:13px;font-weight:700;color:#c60c30}\n.pfc-progress-bar{height:5px;background:#e8ecf0;border-radius:99px;overflow:hidden}\n.pfc-progress-fill{height:100%;background:linear-gradient(90deg,#c60c30,#e84565);border-radius:99px;transition:width .4s ease}\n\n\/* TIMER *\/\n.pfc-timer-wrap{display:flex;justify-content:center;margin-bottom:28px}\n.pfc-timer{position:relative;width:72px;height:72px}\n.pfc-timer svg{transform:rotate(-90deg)}\n.pfc-timer circle{fill:none;stroke:#f0f0f0;stroke-width:5}\n.pfc-timer .pfc-arc{stroke:#c60c30;stroke-width:5;stroke-linecap:round;transition:stroke-dashoffset .9s linear,stroke .3s}\n.pfc-timer-num{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:20px;font-weight:800;color:#1a2225}\n.pfc-timer-num.urgent{color:#c60c30}\n\n\/* QUESTION CARD *\/\n.pfc-card{background:#fff;border:1.5px solid #e0e5ea;border-radius:18px;padding:32px;margin-bottom:20px;animation:pfc-slide-in .25s ease}\n@keyframes pfc-slide-in{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}\n.pfc-level-chip{display:inline-block;font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.08em;padding:3px 10px;border-radius:20px;margin-bottom:14px}\n.chip-A2{background:#dbeafe;color:#1d4ed8}\n.chip-B1{background:#d1fae5;color:#065f46}\n.chip-B2{background:#ede9fe;color:#6d28d9}\n.chip-C1{background:#fef3c7;color:#92400e}\n.chip-C2{background:#fee2e2;color:#991b1b}\n.pfc-question{font-size:20px;font-weight:700;color:#1a2225;line-height:1.4;margin-bottom:24px}\n.pfc-options{display:flex;flex-direction:column;gap:10px}\n.pfc-option{background:#f7f9fc;border:1.5px solid #e0e5ea;border-radius:12px;padding:14px 18px;font-size:15px;font-weight:500;color:#2d3748;cursor:pointer;text-align:left;font-family:inherit;transition:all .15s;display:flex;align-items:center;gap:12px}\n.pfc-option:hover{border-color:#c60c30;background:#fff5f7;color:#c60c30}\n.pfc-option.selected{border-color:#c60c30;background:#fff0f3;color:#c60c30;font-weight:700}\n.pfc-option.correct{border-color:#10b981;background:#f0fdf4;color:#065f46}\n.pfc-option.wrong{border-color:#ef4444;background:#fff5f5;color:#991b1b}\n.pfc-opt-letter{width:26px;height:26px;border-radius:50%;background:#e8ecf0;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:800;flex-shrink:0;transition:all .15s}\n.pfc-option.selected .pfc-opt-letter{background:#c60c30;color:#fff}\n.pfc-option.correct .pfc-opt-letter{background:#10b981;color:#fff}\n.pfc-option.wrong .pfc-opt-letter{background:#ef4444;color:#fff}\n.pfc-next-btn{width:100%;margin-top:16px;background:#1a2225;color:#fff;border:none;border-radius:12px;padding:14px;font-size:16px;font-weight:700;font-family:inherit;cursor:pointer;display:none;transition:opacity .2s}\n.pfc-next-btn:hover{opacity:.85}\n.pfc-timeout-msg{text-align:center;font-size:14px;color:#c60c30;font-weight:600;margin-top:8px;display:none}\n\n\/* RESULT SCREEN *\/\n#pfc-result{display:none;text-align:center}\n.pfc-result-badge{display:inline-flex;align-items:center;justify-content:center;width:110px;height:110px;border-radius:50%;font-size:40px;font-weight:900;color:#fff;margin-bottom:24px;animation:pfc-pop .5s cubic-bezier(.175,.885,.32,1.275)}\n@keyframes pfc-pop{from{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}\n.badge-A2{background:#3b82f6}\n.badge-B1{background:#10b981}\n.badge-B2{background:#8b5cf6}\n.badge-C1{background:#f59e0b}\n.badge-C2{background:#ef4444}\n#pfc-result h2{font-size:30px;font-weight:800;color:#1a2225;margin-bottom:10px}\n.pfc-level-name{font-size:17px;font-weight:600;color:#c60c30;margin-bottom:16px}\n.pfc-level-desc{font-size:15px;color:#555;line-height:1.7;max-width:500px;margin:0 auto 28px}\n.pfc-score-breakdown{background:#f7f9fc;border-radius:14px;padding:20px 24px;margin-bottom:28px;text-align:left;max-width:440px;margin-left:auto;margin-right:auto}\n.pfc-score-breakdown h4{font-size:13px;font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:#888;margin-bottom:12px}\n.pfc-score-row{display:flex;align-items:center;gap:10px;margin-bottom:8px}\n.pfc-score-row:last-child{margin-bottom:0}\n.pfc-score-level-chip{font-size:11px;font-weight:800;padding:2px 8px;border-radius:20px;width:34px;text-align:center}\n.pfc-score-bar-wrap{flex:1;height:8px;background:#e0e5ea;border-radius:99px;overflow:hidden}\n.pfc-score-bar{height:100%;border-radius:99px;transition:width 1s ease}\n.bar-A2{background:#3b82f6}.bar-B1{background:#10b981}.bar-B2{background:#8b5cf6}.bar-C1{background:#f59e0b}.bar-C2{background:#ef4444}\n.pfc-score-pct{font-size:12px;font-weight:700;color:#666;width:32px;text-align:right}\n.pfc-cta-btn{display:inline-block;background:#c60c30;color:#fff;border:none;border-radius:14px;padding:16px 36px;font-size:17px;font-weight:700;font-family:inherit;cursor:pointer;text-decoration:none;transition:transform .15s,box-shadow .15s;margin-bottom:12px}\n.pfc-cta-btn:hover{transform:scale(1.04);box-shadow:0 10px 28px rgba(198,12,48,.35)}\n.pfc-email-note{font-size:13px;color:#888;margin-top:8px}\n.pfc-retry{background:none;border:1.5px solid #ccc;border-radius:10px;padding:10px 24px;font-size:14px;font-weight:600;color:#666;cursor:pointer;font-family:inherit;margin-top:16px;display:block;margin-left:auto;margin-right:auto}\n.pfc-retry:hover{border-color:#c60c30;color:#c60c30}\n\n\/* LOADING *\/\n#pfc-sending{display:none;text-align:center;padding:40px 0}\n.pfc-spinner{width:40px;height:40px;border:4px solid #f0f0f0;border-top-color:#c60c30;border-radius:50%;animation:pfc-spin 1s linear infinite;margin:0 auto 16px}\n@keyframes pfc-spin{to{transform:rotate(360deg)}}\n\n@media(max-width:600px){\n  #pfc-test-root{padding:24px 16px 60px}\n  #pfc-intro h1{font-size:28px}\n  .pfc-card{padding:22px 18px}\n  .pfc-question{font-size:17px}\n}\n<\/style>\n\n<!-- INTRO SCREEN -->\n<div id=\"pfc-intro\">\n  <h1>Descobreix el teu nivell de catal\u00e0<\/h1>\n  <p>~20 preguntes \u00b7 10 minuts \u00b7 Resultat immediat al teu email<\/p>\n  <div class=\"pfc-badges\">\n    <span class=\"pfc-badge\">\ud83d\udccb Adaptatiu al teu nivell<\/span>\n    <span class=\"pfc-badge\">\u23f1 60 seg\/pregunta<\/span>\n    <span class=\"pfc-badge\">\ud83c\udfaf A2 \u2192 C2<\/span>\n  <\/div>\n  <div id=\"pfc-form\">\n    <label for=\"pfc-name\">El teu nom<\/label>\n    <input type=\"text\" id=\"pfc-name\" placeholder=\"Anna Garc\u00eda\" autocomplete=\"given-name\">\n    <label for=\"pfc-email\">El teu correu electr\u00f2nic<\/label>\n    <input type=\"email\" id=\"pfc-email\" placeholder=\"anna@exemple.com\" autocomplete=\"email\">\n    <button id=\"pfc-start-btn\" type=\"button\">Comen\u00e7a la prova \u2192<\/button>\n    <p class=\"pfc-disclaimer\">Rebr\u00e0s el resultat per email. Sense spam.<\/p>\n  <\/div>\n<\/div>\n\n<!-- TEST SCREEN -->\n<div id=\"pfc-test\">\n  <div class=\"pfc-progress-wrap\">\n    <div class=\"pfc-progress-meta\">\n      <span class=\"pfc-q-label\" id=\"pfc-q-counter\">Pregunta 1 \/ 20<\/span>\n      <span class=\"pfc-score-live\" id=\"pfc-score-live\"><\/span>\n    <\/div>\n    <div class=\"pfc-progress-bar\"><div class=\"pfc-progress-fill\" id=\"pfc-progress-fill\" style=\"width:0%\"><\/div><\/div>\n  <\/div>\n\n  <div class=\"pfc-timer-wrap\">\n    <div class=\"pfc-timer\">\n      <svg width=\"72\" height=\"72\" viewBox=\"0 0 72 72\">\n        <circle cx=\"36\" cy=\"36\" r=\"31\"\/>\n        <circle class=\"pfc-arc\" id=\"pfc-arc\" cx=\"36\" cy=\"36\" r=\"31\" stroke-dasharray=\"194.78\" stroke-dashoffset=\"0\"\/>\n      <\/svg>\n      <div class=\"pfc-timer-num\" id=\"pfc-timer-num\">60<\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"pfc-card\" id=\"pfc-card\">\n    <span class=\"pfc-level-chip\" id=\"pfc-level-chip\"><\/span>\n    <div class=\"pfc-question\" id=\"pfc-question\"><\/div>\n    <div class=\"pfc-options\" id=\"pfc-options\"><\/div>\n    <div class=\"pfc-timeout-msg\" id=\"pfc-timeout-msg\">\u23f0 Temps exhaurit \u2014 prenem nota!<\/div>\n    <button class=\"pfc-next-btn\" id=\"pfc-next-btn\">Seg\u00fcent pregunta \u2192<\/button>\n  <\/div>\n<\/div>\n\n<!-- SENDING -->\n<div id=\"pfc-sending\">\n  <div class=\"pfc-spinner\"><\/div>\n  <p style=\"color:#555;font-size:15px\">Calculant el teu nivell\u2026<\/p>\n<\/div>\n\n<!-- RESULT SCREEN -->\n<div id=\"pfc-result\">\n  <div class=\"pfc-result-badge\" id=\"pfc-result-badge\"><\/div>\n  <h2 id=\"pfc-result-title\"><\/h2>\n  <div class=\"pfc-level-name\" id=\"pfc-result-name\"><\/div>\n  <div class=\"pfc-level-desc\" id=\"pfc-result-desc\"><\/div>\n  <div class=\"pfc-score-breakdown\">\n    <h4>Puntuaci\u00f3 per nivell<\/h4>\n    <div id=\"pfc-bars\"><\/div>\n  <\/div>\n  <a href=\"#\" class=\"pfc-cta-btn\" id=\"pfc-cta-btn\">Veure el curs recomanat<\/a>\n  <p class=\"pfc-email-note\" id=\"pfc-email-note\"><\/p>\n  <button class=\"pfc-retry\" onclick=\"pfcReset()\">Tornar a fer la prova<\/button>\n<\/div>\n\n<script>\n(function(){\n'use strict';\n\n\/* ===== QUESTION BANK ===== *\/\nvar QUESTIONS = [\n  {id:\"A2_01\",level:\"A2\",skill:\"vocabulari\",q:\"Quin \u00e9s el plural de 'arbre'?\",opts:[\"arbres\",\"arbrets\",\"arbrens\",\"\u00e0rbres\"],correct:0},\n  {id:\"A2_02\",level:\"A2\",skill:\"vocabulari\",q:\"Quina paraula significa el contrari de 'gran'?\",opts:[\"llarg\",\"petit\",\"fort\",\"ample\"],correct:1},\n  {id:\"A2_03\",level:\"A2\",skill:\"vocabulari\",q:\"Quin d'aquests \u00e9s un animal?\",opts:[\"taula\",\"finestra\",\"gat\",\"llapis\"],correct:2},\n  {id:\"A2_04\",level:\"A2\",skill:\"gramatica\",q:\"Tria la forma correcta: 'Ahir _____ al cinema.'\",opts:[\"vaig anar\",\"vaig anant\",\"vaic anar\",\"vaig anat\"],correct:0},\n  {id:\"A2_05\",level:\"A2\",skill:\"gramatica\",q:\"Completa: 'La Maria i la N\u00faria _____ estudiants.'\",opts:[\"\u00e9s\",\"sou\",\"son\",\"s\u00f3n\"],correct:3},\n  {id:\"A2_06\",level:\"A2\",skill:\"gramatica\",q:\"Quina \u00e9s la forma correcta del possessiu?\",opts:[\"el meu casa\",\"la meu casa\",\"la meva casa\",\"el meva casa\"],correct:2},\n  {id:\"A2_07\",level:\"A2\",skill:\"gramatica\",q:\"Tria la preposici\u00f3 correcta: 'Vivo ___ Barcelona.'\",opts:[\"en\",\"a\",\"de\",\"per\"],correct:1},\n  {id:\"A2_08\",level:\"A2\",skill:\"comprensio\",q:\"'El nen menja una poma.' Qui menja?\",opts:[\"La poma\",\"La mare\",\"El nen\",\"El pare\"],correct:2},\n  {id:\"A2_09\",level:\"A2\",skill:\"comprensio\",q:\"'Avui fa sol per\u00f2 fa fred.' Quin temps fa?\",opts:[\"Plou i fa calor\",\"Fa sol i fred\",\"Neva i fa vent\",\"Fa n\u00favols i plou\"],correct:1},\n  {id:\"A2_10\",level:\"A2\",skill:\"comprensio\",q:\"'La botiga obre a les 9 i tanca a les 20.' A quina hora tanca?\",opts:[\"A les 9\",\"A les 12\",\"A les 18\",\"A les 20\"],correct:3},\n  {id:\"A2_11\",level:\"A2\",skill:\"us\",q:\"Vols demanar el compte en un restaurant. Qu\u00e8 dius?\",opts:[\"Gr\u00e0cies, ad\u00e9u!\",\"Em pot portar el compte, si us plau?\",\"Quant costa el men\u00fa?\",\"Tinc reserva a nom meu.\"],correct:1},\n  {id:\"A2_12\",level:\"A2\",skill:\"us\",q:\"Alg\u00fa et pregunta 'Com et dius?' Quina \u00e9s la resposta correcta?\",opts:[\"Em dic Marta.\",\"Tinc vint anys.\",\"Soc de Barcelona.\",\"Estic b\u00e9, gr\u00e0cies.\"],correct:0},\n  {id:\"A2_13\",level:\"A2\",skill:\"us\",q:\"Vols comprar al mercat. Quina frase \u00e9s m\u00e9s adequada?\",opts:[\"Dona'm aquell!\",\"Voldria un quilo de tom\u00e0quets, si us plau.\",\"Posa'm coses.\",\"Quant vals?\"],correct:1},\n  {id:\"A2_14\",level:\"A2\",skill:\"vocabulari\",q:\"Quina paraula descriu un sentiment?\",opts:[\"cadira\",\"feli\u00e7\",\"cotxe\",\"lluna\"],correct:1},\n  {id:\"B1_01\",level:\"B1\",skill:\"vocabulari\",q:\"Quin \u00e9s el significat de 'malgrat'?\",opts:[\"a causa de\",\"a pesar de\",\"gr\u00e0cies a\",\"per b\u00e9 que\"],correct:1},\n  {id:\"B1_02\",level:\"B1\",skill:\"vocabulari\",q:\"Quina paraula \u00e9s sin\u00f2nim de 'r\u00e0pid'?\",opts:[\"lent\",\"velo\u00e7\",\"curt\",\"lleuger\"],correct:1},\n  {id:\"B1_03\",level:\"B1\",skill:\"vocabulari\",q:\"Quin \u00e9s el contrari de 'encendre'?\",opts:[\"apagar\",\"obrir\",\"trencar\",\"posar\"],correct:0},\n  {id:\"B1_04\",level:\"B1\",skill:\"gramatica\",q:\"Completa: 'Si tingu\u00e9s temps, _____ a la festa.'\",opts:[\"anir\u00e9\",\"aniria\",\"an\u00e9s\",\"vagi\"],correct:1},\n  {id:\"B1_05\",level:\"B1\",skill:\"gramatica\",q:\"Tria la forma correcta del passat: 'Ahir no _____ dormir.'\",opts:[\"he pogut\",\"vaig poder\",\"pogui\",\"puc\"],correct:1},\n  {id:\"B1_06\",level:\"B1\",skill:\"gramatica\",q:\"Quin connector introdueix una conseq\u00fc\u00e8ncia?\",opts:[\"tot i que\",\"per tant\",\"ja que\",\"si b\u00e9\"],correct:1},\n  {id:\"B1_07\",level:\"B1\",skill:\"gramatica\",q:\"Tria la forma correcta: 'Vull que _____ content.'\",opts:[\"ets\",\"eras\",\"siguis\",\"ser\u00e0s\"],correct:2},\n  {id:\"B1_08\",level:\"B1\",skill:\"comprensio\",q:\"'Malgrat els obstacles, va acabar el projecte a temps.' Quin mat\u00eds expressa 'malgrat'?\",opts:[\"Causa\",\"Concessi\u00f3\",\"Finalitat\",\"Condici\u00f3\"],correct:1},\n  {id:\"B1_09\",level:\"B1\",skill:\"comprensio\",q:\"'El tren sortir\u00e0 amb retard a causa de la neu.' Per quin motiu hi ha retard?\",opts:[\"Per un accident\",\"Per la pluja\",\"Per la neu\",\"Per obres a la via\"],correct:2},\n  {id:\"B1_10\",level:\"B1\",skill:\"comprensio\",q:\"'Es pot reservar taula trucant o per correu.' Quantes opcions de reserva hi ha?\",opts:[\"Una\",\"Dues\",\"Tres\",\"Cap\"],correct:1},\n  {id:\"B1_11\",level:\"B1\",skill:\"us\",q:\"El teu cap et demana un informe urgent. Com responcs?\",opts:[\"M'\u00e9s igual.\",\"D'acord, ho tinc llest avui.\",\"Ara no puc.\",\"Per a quan el voleu, gaireb\u00e9?\"],correct:1},\n  {id:\"B1_12\",level:\"B1\",skill:\"us\",q:\"Vols expressar que no est\u00e0s d'acord de manera educada. Quina frase \u00e9s m\u00e9s adequada?\",opts:[\"No tinc ra\u00f3.\",\"Entenc el teu punt, per\u00f2 crec que...\",\"T'equivoques.\",\"B\u00e9, s\u00ed, el que vulguis.\"],correct:1},\n  {id:\"B1_13\",level:\"B1\",skill:\"us\",q:\"Quin registre \u00e9s adequat en un correu formal a una empresa?\",opts:[\"Hola, tio! Escriu-me.\",\"Benvolgut\/da, em dirigeixo a vost\u00e8 per...\",\"Ei, com esteu? Necessito ajuda.\",\"Salut! Trucau-me.\"],correct:1},\n  {id:\"B1_14\",level:\"B1\",skill:\"vocabulari\",q:\"Quina paraula pertany al camp sem\u00e0ntic de l'economia?\",opts:[\"esquelet\",\"pressupost\",\"tempesta\",\"melodia\"],correct:1},\n  {id:\"B2_01\",level:\"B2\",skill:\"vocabulari\",q:\"Quin \u00e9s el significat de 'renitent'?\",opts:[\"molt feble\",\"que s'oposa o resisteix\",\"ple d'energia\",\"molt prudent\"],correct:1},\n  {id:\"B2_02\",level:\"B2\",skill:\"vocabulari\",q:\"Quin terme \u00e9s m\u00e9s prec\u00eds per a 'cosa que no es pot canviar'?\",opts:[\"ef\u00edmer\",\"irrevocable\",\"transitori\",\"muable\"],correct:1},\n  {id:\"B2_03\",level:\"B2\",skill:\"vocabulari\",q:\"Tria el terme correcte: 'Va fer una intervenci\u00f3 _____ (plena de detalls innecessaris).'\",opts:[\"concisa\",\"prol\u00edfica\",\"prolixa\",\"precisa\"],correct:2},\n  {id:\"B2_04\",level:\"B2\",skill:\"gramatica\",q:\"Quina frase usa correctament el relatiu?\",opts:[\"El llibre que te'n vaig parlar\",\"El llibre del qual te'n vaig parlar\",\"El llibre del qual et vaig parlar\",\"El llibre que et vaig parlar-ne\"],correct:2},\n  {id:\"B2_05\",level:\"B2\",skill:\"gramatica\",q:\"Tria la forma correcta del subjuntiu imperfet: 'Volia que _____ molt.'\",opts:[\"estudies\",\"estudi\u00e9s\",\"estudia\",\"estudiar\u00e0\"],correct:1},\n  {id:\"B2_06\",level:\"B2\",skill:\"gramatica\",q:\"Quina \u00e9s la construcci\u00f3 passiva correcta?\",opts:[\"El document ha estat signat pel director.\",\"El document \u00e9s estat signat per el director.\",\"El document ha signat pel director.\",\"El document ha estat signar del director.\"],correct:0},\n  {id:\"B2_07\",level:\"B2\",skill:\"gramatica\",q:\"Quina frase cont\u00e9 un error de r\u00e8gim verbal?\",opts:[\"Confio en tu.\",\"M'oblido de tot.\",\"Penso amb la soluci\u00f3.\",\"Dep\u00e8n de la situaci\u00f3.\"],correct:2},\n  {id:\"B2_08\",level:\"B2\",skill:\"comprensio\",q:\"'La mesura, tot i ser impopular, ha redu\u00eft la sinistralitat un 30%.' La mesura \u00e9s...\",opts:[\"popular i inefica\u00e7\",\"impopular i efica\u00e7\",\"popular i efica\u00e7\",\"impopular i inefica\u00e7\"],correct:1},\n  {id:\"B2_09\",level:\"B2\",skill:\"comprensio\",q:\"'Les exportacions han caigut malgrat la millora del tipus de canvi.' Quin factor sorpr\u00e8n?\",opts:[\"Les exportacions han pujat\",\"El tipus de canvi ha empitjorat\",\"Les exportacions han baixat tot i condicions favorables\",\"No hi ha res sorprenent\"],correct:2},\n  {id:\"B2_10\",level:\"B2\",skill:\"comprensio\",q:\"'El ponent va cloure la xerrada tot remarcant la urg\u00e8ncia d'actuar.' Quin verb \u00e9s sin\u00f2nim de 'cloure' en aquest context?\",opts:[\"obrir\",\"interrompre\",\"acabar\",\"iniciar\"],correct:2},\n  {id:\"B2_11\",level:\"B2\",skill:\"us\",q:\"En un debat acad\u00e8mic, vols introduir una objecci\u00f3. Quina frase \u00e9s m\u00e9s adequada?\",opts:[\"No, t'equivoques del tot.\",\"Caldria matisar aquest punt, perqu\u00e8...\",\"S\u00ed, tens tota la ra\u00f3.\",\"Deixa-m'ho pensar.\"],correct:1},\n  {id:\"B2_12\",level:\"B2\",skill:\"us\",q:\"Quin registre \u00e9s correcte per a un article d'opini\u00f3 en un diari?\",opts:[\"Ahir me'n vaig anar a la platja i tio, quin dia!\",\"Ahir vaig acudir a la platja i vaig poder constatar...\",\"Ahir va ser un dia genial a la platja, de veres!\",\"Tio, ahir a la platja, brutal!\"],correct:1},\n  {id:\"B2_13\",level:\"B2\",skill:\"us\",q:\"Quina expressi\u00f3 \u00e9s correcta per cedir la paraula en una reuni\u00f3 formal?\",opts:[\"Ara parla tu.\",\"Calla, que vull parlar jo.\",\"Cedeixo la paraula al company.\",\"Et toca!\"],correct:2},\n  {id:\"B2_14\",level:\"B2\",skill:\"vocabulari\",q:\"Quina parella de mots forma una col\u00b7locaci\u00f3 l\u00e8xica correcta?\",opts:[\"fer una decisi\u00f3\",\"prendre una decisi\u00f3\",\"agafar una decisi\u00f3\",\"posar una decisi\u00f3\"],correct:1},\n  {id:\"C1_01\",level:\"C1\",skill:\"vocabulari\",q:\"Quin \u00e9s el significat de 'vers\u00e0til' aplicat a una persona?\",opts:[\"Molt tossuda\",\"Capa\u00e7 d'adaptar-se a situacions diverses\",\"Que parla molt\",\"Molt meticulosa\"],correct:1},\n  {id:\"C1_02\",level:\"C1\",skill:\"vocabulari\",q:\"Quina locuci\u00f3 significa 'fer veure que no passa res'?\",opts:[\"Posar fil a l'agulla\",\"Fer l'orni\",\"Ficar el nas\",\"Perdre els estreps\"],correct:1},\n  {id:\"C1_03\",level:\"C1\",skill:\"vocabulari\",q:\"Quin terme descriu un text que s'ent\u00e9n per doble sentit?\",opts:[\"ambig\u00fa\",\"redundant\",\"lac\u00f2nic\",\"efusiu\"],correct:0},\n  {id:\"C1_04\",level:\"C1\",skill:\"gramatica\",q:\"Quina \u00e9s la forma correcta del condicional passat?\",opts:[\"Hauria anat\",\"Haguera anat\",\"Hauria anat \/ Haguera anat (totes dues)\",\"Havia anat\"],correct:2},\n  {id:\"C1_05\",level:\"C1\",skill:\"gramatica\",q:\"Tria la frase amb el gerundi usat correctament:\",opts:[\"Parlant tu, acabar\u00e9 prest.\",\"Havent acabat la feina, va sortir.\",\"Corrent molt, el tren se'n va anar.\",\"Sent tard, decid\u00ed marxar ell.\"],correct:1},\n  {id:\"C1_06\",level:\"C1\",skill:\"gramatica\",q:\"Quin sintagma t\u00e9 un complement del nom correcte?\",opts:[\"el cotxe de la Maria del carrer\",\"la carta de la directora de comunicaci\u00f3\",\"el fill del director de l'empresa del barri\",\"l'informe del cap de la secci\u00f3 de recursos\"],correct:1},\n  {id:\"C1_07\",level:\"C1\",skill:\"gramatica\",q:\"Quina frase presenta un \u00fas incorrecte del cl\u00edtic?\",opts:[\"Porta-me'l.\",\"Porta-me-la.\",\"Se'ls va enviar.\",\"Li ho digueren.\"],correct:1},\n  {id:\"C1_08\",level:\"C1\",skill:\"comprensio\",q:\"'La ironia de la situaci\u00f3 rau en el fet que, defensant la llibertat, acabem per coartar-la.' Quin \u00e9s el nucli de la idea?\",opts:[\"La llibertat sempre guanya\",\"En nom de la llibertat es pot suprimir la llibertat\",\"La ironia \u00e9s positiva\",\"La coartaci\u00f3 \u00e9s necess\u00e0ria\"],correct:1},\n  {id:\"C1_09\",level:\"C1\",skill:\"comprensio\",q:\"'La mesura va ser apel\u00b7lada pels afectats, que n'impugnaren la legalitat davant el tribunal competent.' Qui impugna?\",opts:[\"El tribunal\",\"L'administraci\u00f3\",\"Els afectats\",\"El jutge\"],correct:2},\n  {id:\"C1_10\",level:\"C1\",skill:\"comprensio\",q:\"'Tot plegat, el text remet a una tradici\u00f3 liter\u00e0ria que subverteix els models can\u00f2nics.' Quin \u00e9s el significat de 'subvertir' aqu\u00ed?\",opts:[\"Reafirmar\",\"Ignorar\",\"Transformar radicalment\",\"Citar fidelment\"],correct:2},\n  {id:\"C1_11\",level:\"C1\",skill:\"us\",q:\"En un discurs institucional, quin registre \u00e9s el m\u00e9s adequat?\",opts:[\"Informal i proper, per connectar amb el p\u00fablic\",\"Formal, prec\u00eds i sense col\u00b7loquialismes\",\"T\u00e8cnic i ple d'abreviatures\",\"Expressiu i ple d'hip\u00e8rboles\"],correct:1},\n  {id:\"C1_12\",level:\"C1\",skill:\"us\",q:\"Quin verb de comunicaci\u00f3 \u00e9s m\u00e9s prec\u00eds per a 'dir quelcom p\u00fablicament de manera oficial'?\",opts:[\"comentar\",\"xopar\",\"proclamar\",\"xuclar\"],correct:2},\n  {id:\"C1_13\",level:\"C1\",skill:\"us\",q:\"En una acta de reuni\u00f3, com es referencia el que ha dit una persona?\",opts:[\"En Joan va dir que...\",\"En Joan diu que...\",\"En Joan deia que...\",\"Segons en Joan, que...\"],correct:0},\n  {id:\"C1_14\",level:\"C1\",skill:\"vocabulari\",q:\"Quin terme fa refer\u00e8ncia a la varietat d'una llengua associada a un grup social?\",opts:[\"dialecte\",\"sociolecte\",\"idiolecte\",\"registre\"],correct:1},\n  {id:\"C2_01\",level:\"C2\",skill:\"vocabulari\",q:\"Quin \u00e9s el mat\u00eds entre 'eludir' i 'evadir'?\",opts:[\"S\u00f3n sin\u00f2nims exactes sense cap distinci\u00f3\",\"'Eludir' \u00e9s esquivar amb habilitat; 'evadir' implica fuita real o legal\",\"'Evadir' \u00e9s m\u00e9s formal que 'eludir'\",\"'Eludir' s'usa nom\u00e9s en contextos legals\"],correct:1},\n  {id:\"C2_02\",level:\"C2\",skill:\"vocabulari\",q:\"Quina expressi\u00f3 t\u00e9 un sentit figurat correcte en 'T\u00e9 m\u00e0 esquerra per als negocis'?\",opts:[\"No \u00e9s h\u00e0bil en negocis\",\"T\u00e9 habilitat i tacte per tractar situacions delicades\",\"Prefereix signar amb la m\u00e0 esquerra\",\"Desconfia dels seus socis\"],correct:1},\n  {id:\"C2_03\",level:\"C2\",skill:\"vocabulari\",q:\"En quin context \u00e9s adequat el terme 'digl\u00f2ssia'?\",opts:[\"Quan es parlen dues lleng\u00fces en una comunitat amb distribuci\u00f3 funcional desigual\",\"Quan una persona parla dues lleng\u00fces a la perfecci\u00f3\",\"Quan un text t\u00e9 doble significat\",\"Quan dos dialectes entren en contacte\"],correct:0},\n  {id:\"C2_04\",level:\"C2\",skill:\"gramatica\",q:\"Quina construcci\u00f3 \u00e9s gramaticalment correcta i estil\u00edsticament adequada en prosa formal?\",opts:[\"Cal de que tots facin l'esfor\u00e7\",\"Conv\u00e9 que tothom faci l'esfor\u00e7\",\"\u00c9s necessari de que es faci l'esfor\u00e7\",\"Cal de fer-ho tots\"],correct:1},\n  {id:\"C2_05\",level:\"C2\",skill:\"gramatica\",q:\"Quina \u00e9s la difer\u00e8ncia entre 'el fet que' + indicatiu i 'el fet que' + subjuntiu?\",opts:[\"No hi ha difer\u00e8ncia\",\"Indicatiu: fet real conegut; Subjuntiu: fet hipot\u00e8tic o valorat\",\"Indicatiu: futur; Subjuntiu: passat\",\"Subjuntiu: registre formal; Indicatiu: col\u00b7loquial\"],correct:1},\n  {id:\"C2_06\",level:\"C2\",skill:\"gramatica\",q:\"Detecta l'error sint\u00e0ctic en la frase: 'Un cop resolt els problemes, podrem avan\u00e7ar.'\",opts:[\"'resolt' hauria de ser 'resolts' (concordan\u00e7a amb 'problemes')\",\"'un cop' hauria de ser 'una vegada'\",\"'podrem' hauria de ser 'podr\u00edem'\",\"No hi ha cap error\"],correct:0},\n  {id:\"C2_07\",level:\"C2\",skill:\"gramatica\",q:\"En quina frase l'\u00fas dels temps verbals \u00e9s m\u00e9s prec\u00eds estil\u00edsticament?\",opts:[\"Quan va arribar, tots marxaven.\",\"Quan va arribar, tots varen marxar.\",\"Quan havia arribat, tots marxaven.\",\"En arribar, tots marxaven ja.\"],correct:3},\n  {id:\"C2_08\",level:\"C2\",skill:\"comprensio\",q:\"'L'art, en \u00faltima inst\u00e0ncia, \u00e9s una forma de mentida consagrada per la tradici\u00f3.' Quina interpretaci\u00f3 \u00e9s m\u00e9s acurada?\",opts:[\"L'art \u00e9s sempre fals i engany\u00f3s\",\"L'art s'ha convertit en una ficci\u00f3 reconeguda socialment com a v\u00e0lida\",\"L'art \u00e9s una tradici\u00f3 que no t\u00e9 valor real\",\"L'art \u00e9s una mentida que la societat refusa\"],correct:1},\n  {id:\"C2_09\",level:\"C2\",skill:\"comprensio\",q:\"'La proposta fou acollida amb aquiesc\u00e8ncia t\u00e0cita.' Quin \u00e9s el sentit de la frase?\",opts:[\"La proposta va ser rebutjada en silenci\",\"La proposta va ser acceptada sense objecci\u00f3 expl\u00edcita\",\"La proposta va generar debat\",\"La proposta no va ser presentada\"],correct:1},\n  {id:\"C2_10\",level:\"C2\",skill:\"comprensio\",q:\"En un text jur\u00eddic: 'Resten excloses de la present convocat\u00f2ria les persones que hagin incorregut en les causes d'incompatibilitat previstes a l'article 5.' Qui no pot participar?\",opts:[\"Tothom\",\"Les persones amb incompatibilitats de l'article 5\",\"Les persones de fora de la convocat\u00f2ria\",\"Totes les persones excepte les de l'article 5\"],correct:1},\n  {id:\"C2_11\",level:\"C2\",skill:\"us\",q:\"En un assaig acad\u00e8mic, quina estrat\u00e8gia argumentativa \u00e9s m\u00e9s s\u00f2lida?\",opts:[\"Refor\u00e7ar la tesi amb exemples propis i emotius\",\"Presentar la tesi, admetre objeccions i refutar-les amb proves\",\"Citar molts autors sense analitzar-los\",\"Repetir la tesi en cada par\u00e0graf\"],correct:1},\n  {id:\"C2_12\",level:\"C2\",skill:\"us\",q:\"Quina \u00e9s la funci\u00f3 pragm\u00e0tica d'un eufemisme?\",opts:[\"Exagerar el significat d'una paraula\",\"Suavitzar un concepte considerat delicat o tab\u00fa\",\"Crear ambig\u00fcitat intencionada\",\"Especificar amb precisi\u00f3 un terme t\u00e8cnic\"],correct:1},\n  {id:\"C2_13\",level:\"C2\",skill:\"us\",q:\"En un text period\u00edstic d'opini\u00f3, l'autor escriu: 'No seria agosarat afirmar que...' Quina funci\u00f3 t\u00e9 aquesta construcci\u00f3?\",opts:[\"Expressar certesa absoluta\",\"Introduir una afirmaci\u00f3 prudent per protegir-se de cr\u00edtiques\",\"Negar el que es diu a continuaci\u00f3\",\"Citar un altre autor\"],correct:1},\n  {id:\"C2_14\",level:\"C2\",skill:\"vocabulari\",q:\"Quina difer\u00e8ncia hi ha entre 'inferir' i 'implicar' en ling\u00fc\u00edstica?\",opts:[\"S\u00f3n intercanviables en tots els contextos\",\"'Inferir' \u00e9s deduir a partir del que s'ha dit; 'implicar' \u00e9s suggerir sense dir expl\u00edcitament\",\"'Implicar' \u00e9s m\u00e9s formal que 'inferir'\",\"'Inferir' s'usa en l\u00f2gica; 'implicar' en ret\u00f2rica\"],correct:1}\n];\n\n\/* ===== LEVEL METADATA ===== *\/\nvar LEVELS = {\n  A2:{name:\"A2 \u2014 Usuari B\u00e0sic\",desc:\"Entens i uses expressions quotidianes. Pots comunicar-te en situacions simples i familiars. El pas natural \u00e9s consolidar el B1.\",cta:\"Veure curs A2\/B1\",url:\"https:\/\/profedecatala.com\/cursos\/\",color:\"#3b82f6\"},\n  B1:{name:\"B1 \u2014 Usuari Independent\",desc:\"Pots comprendre els punts principals sobre temes familiars. T'expresses amb certa flu\u00efdesa en situacions quotidianes. Prepara't per al B2!\",cta:\"Veure curs B1\/B2\",url:\"https:\/\/profedecatala.com\/cursos\/\",color:\"#10b981\"},\n  B2:{name:\"B2 \u2014 Usuari Independent Avan\u00e7at\",desc:\"Entens textos complexos i interacciones amb flu\u00efdesa. Ets capa\u00e7 d'expressar-te amb claredat sobre temes variats. Dona el salt al C1!\",cta:\"Veure curs B2\/C1\",url:\"https:\/\/profedecatala.com\/cursos\/\",color:\"#8b5cf6\"},\n  C1:{name:\"C1 \u2014 Usuari Competent\",desc:\"Tens un domini avan\u00e7at del catal\u00e0. Pots expressar-te amb flu\u00efdesa, espontane\u00eftat i precisi\u00f3 en contextos acad\u00e8mics i professionals.\",cta:\"Veure curs C1\/C2\",url:\"https:\/\/profedecatala.com\/cursos\/\",color:\"#f59e0b\"},\n  C2:{name:\"C2 \u2014 Usuari Mestre\",desc:\"Domini pr\u00e0cticament natiu del catal\u00e0. Pots comprendre i expressar-te amb total precisi\u00f3 en qualsevol context, incloent registres molt especialitzats.\",cta:\"Explorar continguts avan\u00e7ats\",url:\"https:\/\/profedecatala.com\/cursos\/\",color:\"#ef4444\"}\n};\n\n\/* ===== ADAPTIVE ALGORITHM ===== *\/\n\/* Stage 1: 6 screening questions mixing A2\/B1\/B2\n   Stage 2: 8 questions from target zone\n   Stage 3: 6 finessing questions from detected range\n   Total: ~20 questions *\/\nvar SCREENING_IDS = [\"A2_04\",\"A2_08\",\"B1_06\",\"B1_08\",\"B2_04\",\"B2_08\"];\nvar ZONE_LOW  = [\"A2_01\",\"A2_02\",\"A2_05\",\"A2_06\",\"A2_09\",\"A2_11\",\"A2_13\",\"B1_01\",\"B1_02\",\"B1_04\",\"B1_09\",\"B1_11\",\"B1_13\",\"B1_14\",\"A2_03\",\"A2_14\"];\nvar ZONE_MID  = [\"B1_03\",\"B1_05\",\"B1_07\",\"B1_12\",\"B2_01\",\"B2_02\",\"B2_05\",\"B2_06\",\"B2_09\",\"B2_11\",\"B2_12\",\"B2_13\",\"B2_14\",\"B1_10\",\"B2_03\",\"B2_07\"];\nvar ZONE_HIGH = [\"B2_10\",\"C1_01\",\"C1_02\",\"C1_04\",\"C1_05\",\"C1_08\",\"C1_09\",\"C1_11\",\"C1_12\",\"C2_01\",\"C2_02\",\"C2_04\",\"C2_08\",\"C2_09\",\"C2_11\",\"C2_12\"];\nvar FINE_LOW  = [\"A2_07\",\"A2_10\",\"A2_12\",\"B1_03\",\"B1_06\",\"B1_07\"];\nvar FINE_MID  = [\"B1_05\",\"B2_04\",\"B2_06\",\"B2_08\",\"C1_01\",\"C1_03\"];\nvar FINE_HIGH = [\"C1_04\",\"C1_07\",\"C1_10\",\"C2_03\",\"C2_06\",\"C2_07\"];\n\n\/* ===== STATE ===== *\/\nvar state = {name:'',email:'',questions:[],idx:0,answers:[],scores:{A2:0,B1:0,B2:0,C1:0,C2:0},counts:{A2:0,B1:0,B2:0,C1:0,C2:0},timerSec:60,timerInt:null,answered:false};\n\n\/* ===== UTILS ===== *\/\nvar QI = {}; QUESTIONS.forEach(function(q){QI[q.id]=q;});\nfunction getQs(ids,n){return ids.slice(0,n).map(function(id){return QI[id];}).filter(Boolean);}\nfunction shuffle(a){var b=a.slice();for(var i=b.length-1;i>0;i--){var j=Math.floor(Math.random()*(i+1));var t=b[i];b[i]=b[j];b[j]=t;}return b;}\nfunction $(id){return document.getElementById(id);}\n\n\/* ===== BUILD QUESTION SEQUENCE ===== *\/\nfunction buildSequence(){\n  var screening = getQs(shuffle(SCREENING_IDS), 6);\n  state.questions = screening;\n  state._stage = 1;\n}\n\nfunction addStage2(screenScore){\n  var zone = screenScore <= 2 ? ZONE_LOW : screenScore <= 4 ? ZONE_MID : ZONE_HIGH;\n  var s2 = getQs(shuffle(zone), 8);\n  state.questions = state.questions.concat(s2);\n  state._zone = screenScore <= 2 ? 'low' : screenScore <= 4 ? 'mid' : 'high';\n}\n\nfunction addStage3(){\n  var fine = state._zone === 'low' ? FINE_LOW : state._zone === 'mid' ? FINE_MID : FINE_HIGH;\n  var s3 = getQs(shuffle(fine), 6);\n  state.questions = state.questions.concat(s3);\n}\n\n\/* ===== TIMER ===== *\/\nvar CIRC = 194.78;\nfunction startTimer(){\n  state.timerSec = 60;\n  $('pfc-timer-num').textContent = '60';\n  $('pfc-timer-num').classList.remove('urgent');\n  $('pfc-arc').style.stroke = '#c60c30';\n  $('pfc-arc').style.strokeDashoffset = '0';\n  clearInterval(state.timerInt);\n  state.timerInt = setInterval(function(){\n    state.timerSec--;\n    var num = $('pfc-timer-num');\n    var arc = $('pfc-arc');\n    num.textContent = state.timerSec;\n    arc.style.strokeDashoffset = String(CIRC * (1 - state.timerSec\/60));\n    if(state.timerSec <= 10){ num.classList.add('urgent'); arc.style.stroke='#ef4444'; }\n    if(state.timerSec <= 0){ clearInterval(state.timerInt); onTimeout(); }\n  }, 1000);\n}\n\nfunction stopTimer(){ clearInterval(state.timerInt); }\n\nfunction onTimeout(){\n  if(state.answered) return;\n  state.answered = true;\n  $('pfc-timeout-msg').style.display = 'block';\n  $('pfc-next-btn').style.display = 'block';\n  var opts = document.querySelectorAll('.pfc-option');\n  var q = state.questions[state.idx];\n  opts[q.correct].classList.add('correct');\n}\n\n\/* ===== RENDER QUESTION ===== *\/\nfunction renderQuestion(){\n  var q = state.questions[state.idx];\n  if(!q) return;\n  state.answered = false;\n  var total = state.questions.length;\n  $('pfc-q-counter').textContent = 'Pregunta '+(state.idx+1)+' \/ '+total;\n  $('pfc-progress-fill').style.width = ((state.idx\/total)*100)+'%';\n  var chip = $('pfc-level-chip');\n  chip.textContent = q.level;\n  chip.className = 'pfc-level-chip chip-'+q.level;\n  $('pfc-question').textContent = q.q;\n  $('pfc-timeout-msg').style.display = 'none';\n  $('pfc-next-btn').style.display = 'none';\n  var letters = ['A','B','C','D'];\n  var opts = $('pfc-options');\n  opts.innerHTML = '';\n  q.opts.forEach(function(opt, i){\n    var btn = document.createElement('button');\n    btn.className = 'pfc-option';\n    btn.innerHTML = '<span class=\"pfc-opt-letter\">'+letters[i]+'<\/span><span>'+opt+'<\/span>';\n    btn.onclick = function(){ if(!state.answered) selectAnswer(i); };\n    opts.appendChild(btn);\n  });\n  startTimer();\n}\n\n\/* ===== SELECT ANSWER ===== *\/\nfunction selectAnswer(idx){\n  stopTimer();\n  state.answered = true;\n  var q = state.questions[state.idx];\n  var opts = document.querySelectorAll('.pfc-option');\n  opts[idx].classList.add(idx === q.correct ? 'correct' : 'selected');\n  if(idx !== q.correct){ opts[q.correct].classList.add('correct'); }\n  var correct = idx === q.correct ? 1 : 0;\n  state.answers.push({id:q.id, level:q.level, correct:correct});\n  state.scores[q.level] += correct;\n  state.counts[q.level]++;\n  $('pfc-next-btn').style.display = 'block';\n\n  \/\/ After screening (6 questions), add stage 2\n  if(state.idx === 5 && state._stage === 1){\n    var screenScore = state.answers.slice(0,6).reduce(function(s,a){return s+a.correct;},0);\n    addStage2(screenScore);\n    state._stage = 2;\n  }\n  \/\/ After stage 2 (idx 13), add stage 3\n  if(state.idx === 13 && state._stage === 2){\n    addStage3();\n    state._stage = 3;\n  }\n}\n\n\/* ===== NEXT QUESTION ===== *\/\n$('pfc-next-btn').onclick = function(){\n  state.idx++;\n  if(state.idx >= state.questions.length){ showResult(); }\n  else { renderQuestion(); }\n};\n\n\/* ===== CALCULATE RESULT ===== *\/\nfunction calcLevel(){\n  var order = ['C2','C1','B2','B1','A2'];\n  var pcts = {};\n  order.forEach(function(l){ pcts[l] = state.counts[l] > 0 ? state.scores[l]\/state.counts[l] : 0; });\n  \/\/ Find highest level with >= 50% correct, starting from top\n  for(var i=0;i<order.length;i++){\n    var l = order[i];\n    if(state.counts[l] >= 2 && pcts[l] >= 0.5) return l;\n  }\n  return 'A2';\n}\n\n\/* ===== SHOW RESULT ===== *\/\nfunction showResult(){\n  $('pfc-progress-fill').style.width = '100%';\n  $('pfc-test').style.display = 'none';\n  $('pfc-sending').style.display = 'block';\n\n  var level = calcLevel();\n  var ldata = LEVELS[level];\n\n  \/\/ Send to backend\n  var endpoint = (window.PFC_API_URL || '') + '\/index.php?rest_route=\/pfc\/v1\/test-result';\n  var payload = {\n    name: state.name,\n    email: state.email,\n    level: level,\n    scores: state.scores,\n    counts: state.counts,\n    total_questions: state.questions.length,\n    correct_total: state.answers.reduce(function(s,a){return s+a.correct;},0)\n  };\n\n  fetch(endpoint, {\n    method:'POST',\n    headers:{'Content-Type':'application\/json'},\n    body: JSON.stringify(payload)\n  }).catch(function(){}).finally(function(){\n    $('pfc-sending').style.display = 'none';\n    renderResult(level, ldata, payload);\n  });\n}\n\nfunction renderResult(level, ldata, payload){\n  var badge = $('pfc-result-badge');\n  badge.textContent = level;\n  badge.className = 'pfc-result-badge badge-'+level;\n  $('pfc-result-title').textContent = 'El teu nivell \u00e9s '+level+'!';\n  $('pfc-result-name').textContent = ldata.name;\n  $('pfc-result-desc').textContent = ldata.desc;\n\n  \/\/ Bars\n  var order = ['A2','B1','B2','C1','C2'];\n  var barsHtml = '';\n  order.forEach(function(l){\n    var pct = payload.counts[l] > 0 ? Math.round(payload.scores[l]\/payload.counts[l]*100) : 0;\n    barsHtml += '<div class=\"pfc-score-row\"><span class=\"pfc-score-level-chip chip-'+l+' pfc-score-level-chip\">'+l+'<\/span><div class=\"pfc-score-bar-wrap\"><div class=\"pfc-score-bar bar-'+l+'\" style=\"width:0%\" data-pct=\"'+pct+'\"><\/div><\/div><span class=\"pfc-score-pct\">'+pct+'%<\/span><\/div>';\n  });\n  $('pfc-bars').innerHTML = barsHtml;\n  setTimeout(function(){\n    document.querySelectorAll('.pfc-score-bar').forEach(function(b){\n      b.style.width = b.dataset.pct+'%';\n    });\n  }, 100);\n\n  var cta = $('pfc-cta-btn');\n  cta.textContent = ldata.cta;\n  cta.href = ldata.url;\n  if(state.email){ $('pfc-email-note').textContent = '\ud83d\udcec Hem enviat el resultat a '+state.email; }\n\n  $('pfc-result').style.display = 'block';\n  $('pfc-result').scrollIntoView({behavior:'smooth',block:'start'});\n}\n\n\/* ===== START ===== *\/\n$('pfc-start-btn').onclick = function(){\n  var name = $('pfc-name').value.trim();\n  var email = $('pfc-email').value.trim();\n  if(!name){ $('pfc-name').focus(); return; }\n  if(!email || !\/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/.test(email)){ $('pfc-email').focus(); return; }\n  state.name = name;\n  state.email = email;\n  state.questions = [];\n  state.idx = 0;\n  state.answers = [];\n  state.scores = {A2:0,B1:0,B2:0,C1:0,C2:0};\n  state.counts = {A2:0,B1:0,B2:0,C1:0,C2:0};\n  buildSequence();\n  $('pfc-intro').style.display = 'none';\n  $('pfc-test').style.display = 'block';\n  renderQuestion();\n};\n\n\/* ===== RESET ===== *\/\nwindow.pfcReset = function(){\n  stopTimer();\n  $('pfc-result').style.display = 'none';\n  $('pfc-sending').style.display = 'none';\n  $('pfc-test').style.display = 'none';\n  $('pfc-intro').style.display = 'block';\n  $('pfc-name').value = '';\n  $('pfc-email').value = '';\n  $('pfc-progress-fill').style.width = '0%';\n};\n\n})();\n<\/script>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>PRUEBA DE NIVEL DE CATAL\u00c1N GRATUITA Elige una habilidad para comenzar tu prueba adaptativa R\u00e1pida, clara y precisa. Puedes completar una habilidad o las cuatro. Los resultados son independientes para cada m\u00f3dulo. Comprensi\u00f3n lectora y uso de la lengua Gram\u00e1tica en contexto, ejercicios tipo cloze y textos cortos. Adaptativa Auto-correcci\u00f3n Iniciar m\u00f3dulo \u2192 Comprensi\u00f3n auditiva&#8230;<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"_kad_post_transparent":"","_kad_post_title":"hide","_kad_post_layout":"fullwidth","_kad_post_sidebar_id":"","_kad_post_content_style":"unboxed","_kad_post_vertical_padding":"hide","_kad_post_feature":"hide","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","_joinchat":[],"footnotes":""},"class_list":["post-251","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/profecatala.davidibiza.com\/index.php?rest_route=\/wp\/v2\/pages\/251","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/profecatala.davidibiza.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/profecatala.davidibiza.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/profecatala.davidibiza.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/profecatala.davidibiza.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=251"}],"version-history":[{"count":17,"href":"https:\/\/profecatala.davidibiza.com\/index.php?rest_route=\/wp\/v2\/pages\/251\/revisions"}],"predecessor-version":[{"id":422,"href":"https:\/\/profecatala.davidibiza.com\/index.php?rest_route=\/wp\/v2\/pages\/251\/revisions\/422"}],"wp:attachment":[{"href":"https:\/\/profecatala.davidibiza.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=251"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}