{"id":525,"date":"2026-04-13T16:46:21","date_gmt":"2026-04-13T16:46:21","guid":{"rendered":"http:\/\/www.akademianowystart.pl\/?page_id=525"},"modified":"2026-04-13T17:00:33","modified_gmt":"2026-04-13T17:00:33","slug":"audytor-profilu","status":"publish","type":"page","link":"https:\/\/www.akademianowystart.pl\/index.php\/audytor-profilu\/","title":{"rendered":"Audytor-profilu"},"content":{"rendered":"\n    <div id=\"ans-host\" style=\"display:block;width:100%;\"><\/div>\n    <script>\n    (function(){\n      const AJAX_URL = \"https:\\\/\\\/www.akademianowystart.pl\\\/wp-admin\\\/admin-ajax.php\";\n      const NONCE    = \"39f26e381f\";\n\n      const HOST   = document.getElementById('ans-host');\n      const shadow = HOST.attachShadow({ mode: 'open' });\n\n      \/* Google Font *\/\n      const fl = document.createElement('link');\n      fl.rel = 'stylesheet';\n      fl.href = 'https:\/\/fonts.googleapis.com\/css2?family=Source+Sans+3:wght@400;600;700&display=swap';\n      shadow.appendChild(fl);\n\n      \/* Styles *\/\n      const st = document.createElement('style');\n      st.textContent = `\n        *,*::before,*::after{box-sizing:border-box;margin:0;padding:0}\n        :host{display:block;width:100%}\n        #app{\n          font-family:'Source Sans 3','Helvetica Neue',Arial,sans-serif;\n          display:flex;flex-direction:column;height:780px;background:#fff;\n          border-radius:14px;overflow:hidden;border:1px solid #d0dce8;\n        }\n        \/* topbar *\/\n        #topbar{display:flex;align-items:center;padding:11px 20px;background:#fff;border-bottom:1px solid #d0dce8;gap:12px;flex-shrink:0}\n        .logo{width:36px;height:36px;border-radius:7px;flex-shrink:0;display:block}\n        #topbar-title{font-size:13px;color:#7a8592}\n        #topbar-title strong{color:#1d2226;font-weight:600}\n        #btn-reset{\n          margin-left:auto;display:flex;align-items:center;gap:6px;background:none;\n          border:1.5px solid #d0dce8;color:#434649;border-radius:20px;padding:6px 14px;\n          font-size:13px;font-weight:600;font-family:inherit;cursor:pointer;line-height:1.4;\n          transition:border-color .15s,color .15s\n        }\n        #btn-reset:hover{border-color:#0a66c2;color:#0a66c2}\n        \/* hero *\/\n        #hero{\n          flex:1;background:linear-gradient(155deg,#0a66c2 0%,#004182 100%);\n          display:flex;flex-direction:column;align-items:center;\n          justify-content:center;padding:24px;overflow-y:auto\n        }\n        #hero.hidden{display:none}\n        .eyebrow{font-size:13px;color:rgba(255,255,255,.6);letter-spacing:.4px;margin-bottom:10px;text-align:center}\n        .hero-title{font-size:clamp(22px,3.5vw,36px);font-weight:700;color:#fff;line-height:1.2;text-align:center;margin-bottom:9px}\n        .hero-title span{color:#70B5F9}\n        .hero-sub{font-size:15px;color:rgba(255,255,255,.72);text-align:center;margin-bottom:20px;max-width:440px}\n        .chips-hero{display:flex;flex-wrap:wrap;justify-content:center;gap:9px;margin-bottom:8px;max-width:560px}\n        .chip-hero{\n          background:rgba(255,255,255,.14);border:1.5px solid rgba(255,255,255,.28);\n          color:#fff;border-radius:24px;padding:7px 15px;font-size:13.5px;font-weight:500;\n          font-family:inherit;cursor:pointer;white-space:nowrap;line-height:1.4;\n          transition:background .14s,border-color .14s\n        }\n        .chip-hero:hover{background:rgba(255,255,255,.24);border-color:rgba(255,255,255,.55)}\n        .hero-hint{font-size:13px;color:rgba(255,255,255,.48);font-style:italic;margin-top:10px;text-align:center}\n        .upload-wrap{margin-top:16px;width:100%;max-width:480px}\n        .upload-zone{\n          border:2px dashed rgba(255,255,255,.32);border-radius:12px;padding:14px;\n          text-align:center;color:rgba(255,255,255,.65);font-size:13px;\n          cursor:pointer;position:relative;transition:border-color .14s,background .14s\n        }\n        .upload-zone:hover,.upload-zone.drag{border-color:rgba(255,255,255,.65);background:rgba(255,255,255,.06)}\n        .upload-zone input{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%;height:100%}\n        .upload-icon{font-size:20px;margin-bottom:3px}\n        .upload-zone p{margin:0;color:rgba(255,255,255,.65)}\n        .upload-zone p span{color:#70B5F9;font-weight:600}\n        .thumb-row{display:flex;flex-wrap:wrap;gap:8px;margin-top:9px;justify-content:center}\n        .thumb{position:relative;width:70px;height:54px;border-radius:8px;overflow:hidden;border:2px solid rgba(255,255,255,.28)}\n        .thumb img{width:100%;height:100%;object-fit:cover}\n        .thumb .rm{\n          position:absolute;top:2px;right:2px;width:18px;height:18px;border-radius:50%;\n          background:rgba(0,0,0,.55);color:#fff;font-size:11px;display:flex;\n          align-items:center;justify-content:center;cursor:pointer;border:none;line-height:1;font-family:inherit\n        }\n        .start-btn{\n          margin-top:16px;background:#fff;color:#004182;border:none;border-radius:24px;\n          padding:12px 34px;font-size:15px;font-weight:700;font-family:inherit;\n          cursor:pointer;line-height:1.4;box-shadow:0 4px 20px rgba(0,0,0,.2);\n          transition:transform .14s,box-shadow .14s\n        }\n        .start-btn:hover{transform:translateY(-1px);box-shadow:0 6px 24px rgba(0,0,0,.28)}\n        \/* chat *\/\n        #chat{flex:1;display:none;flex-direction:column;overflow:hidden}\n        #chat.visible{display:flex}\n        #messages{\n          flex:1;overflow-y:auto;padding:18px 16px;\n          display:flex;flex-direction:column;gap:13px;\n          scroll-behavior:smooth;background:#EEF3F8\n        }\n        #messages::-webkit-scrollbar{width:4px}\n        #messages::-webkit-scrollbar-thumb{background:#d0dce8;border-radius:4px}\n        .msg{display:flex;align-items:flex-end;gap:8px;animation:pop .25s ease both}\n        @keyframes pop{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}\n        .msg.bot{flex-direction:row}\n        .msg.user{flex-direction:row-reverse}\n        .av{width:30px;height:30px;border-radius:50%;flex-shrink:0;overflow:hidden;margin-bottom:2px}\n        .bubble{max-width:74%;padding:11px 15px;border-radius:14px;font-size:14.5px;line-height:1.62;font-weight:400}\n        .msg.bot .bubble{background:#fff;border:1px solid #dde6ef;border-bottom-left-radius:4px;color:#1d2226}\n        .msg.user .bubble{background:linear-gradient(135deg,#0a66c2,#004182);color:#fff;border-bottom-right-radius:4px}\n        .bubble strong{font-weight:700}\n        .bubble em{opacity:.88;font-style:italic}\n        .bubble p{margin-bottom:7px}\n        .bubble p:last-child{margin-bottom:0}\n        .bubble ul,.bubble ol{padding-left:18px;margin:5px 0}\n        .bubble li{margin-bottom:3px}\n        .bubble h3{font-size:14px;font-weight:700;color:#004182;margin:10px 0 4px;padding-bottom:3px;border-bottom:1px solid #d0dce8}\n        .bubble hr{border:none;border-top:1px solid #dde6ef;margin:9px 0}\n        .msg.user .bubble h3{color:#aad4f7;border-color:rgba(255,255,255,.2)}\n        .bimgs{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px}\n        .bimgs img{height:70px;width:auto;max-width:110px;border-radius:6px;object-fit:cover}\n        .dots-wrap{display:flex;align-items:center;gap:8px}\n        .dots{padding:10px 14px;background:#fff;border:1px solid #dde6ef;border-radius:14px;border-bottom-left-radius:4px;display:flex;gap:5px}\n        .dots span{width:7px;height:7px;border-radius:50%;background:#0a66c2;animation:dot .9s infinite}\n        .dots span:nth-child(2){animation-delay:.15s}\n        .dots span:nth-child(3){animation-delay:.30s}\n        @keyframes dot{0%,60%,100%{transform:translateY(0);opacity:.45}30%{transform:translateY(-5px);opacity:1}}\n        #input-area{background:#fff;border-top:1px solid #d0dce8;padding:10px 16px 12px;flex-shrink:0}\n        #preview-bar{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:8px}\n        #preview-bar .thumb{width:54px;height:42px;border-color:#d0dce8}\n        #preview-bar .thumb .rm{background:rgba(10,102,194,.7)}\n        .input-row{display:flex;gap:8px;align-items:flex-end}\n        .btn-upload{\n          width:42px;height:42px;border:1.5px solid #d0dce8;border-radius:10px;\n          background:#fff;color:#434649;cursor:pointer;display:flex;align-items:center;\n          justify-content:center;position:relative;flex-shrink:0;\n          transition:border-color .14s,color .14s\n        }\n        .btn-upload:hover{border-color:#0a66c2;color:#0a66c2}\n        .btn-upload input{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%;height:100%}\n        .btn-upload svg{width:18px;height:18px;pointer-events:none}\n        .file-badge{\n          font-size:10px;font-weight:700;color:#fff;background:#0a66c2;\n          border-radius:10px;padding:1px 5px;position:absolute;top:-6px;right:-6px;display:none\n        }\n        .file-badge.on{display:block}\n        textarea{\n          flex:1;resize:none;border:1.5px solid #d0dce8;border-radius:10px;\n          padding:10px 13px;font-family:inherit;font-size:14.5px;color:#1d2226;\n          line-height:1.5;min-height:42px;max-height:150px;outline:none;\n          overflow-y:auto;background:#fff;transition:border-color .16s\n        }\n        textarea:focus{border-color:#0a66c2}\n        textarea::placeholder{color:#7a8592}\n        #send-btn{\n          width:42px;height:42px;border-radius:10px;border:none;\n          background:linear-gradient(135deg,#0a66c2,#004182);color:#fff;cursor:pointer;\n          display:flex;align-items:center;justify-content:center;flex-shrink:0;\n          transition:transform .12s,opacity .12s\n        }\n        #send-btn:hover:not(:disabled){transform:scale(1.06)}\n        #send-btn:disabled{opacity:.4;cursor:default}\n        #send-btn svg{width:17px;height:17px}\n        .hint{font-size:11px;color:#7a8592;margin-top:5px;text-align:center}\n        #error-bar{background:#fff0f0;border-top:2px solid #f28b82;color:#c62828;padding:9px 18px;font-size:13px;display:none}\n        .chips-chat{display:flex;flex-wrap:wrap;gap:8px;padding:0 0 4px 38px}\n        .chip-chat{\n          background:#fff;border:1.5px solid #d0dce8;color:#004182;border-radius:20px;\n          padding:6px 14px;font-size:13px;font-weight:600;font-family:inherit;\n          cursor:pointer;line-height:1.4;transition:background .12s,border-color .12s\n        }\n        .chip-chat:hover{background:#EEF3F8;border-color:#0a66c2}\n        @media(max-width:480px){\n          .hero-title{font-size:20px}\n          .bubble{max-width:86%;font-size:14px}\n          #topbar-title{display:none}\n        }\n      `;\n      shadow.appendChild(st);\n\n      \/* HTML *\/\n      const app = document.createElement('div');\n      app.id = 'app';\n      app.innerHTML = `\n        <div id=\"topbar\">\n          <a href=\"https:\/\/www.akademianowystart.pl\" target=\"_blank\" rel=\"noopener\" style=\"display:block;flex-shrink:0\">\n            <svg class=\"logo\" viewBox=\"0 0 36 36\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n              <rect width=\"36\" height=\"36\" rx=\"7\" fill=\"#CB3B3B\"\/>\n              <circle cx=\"12.5\" cy=\"18\" r=\"6.3\" fill=\"white\"\/>\n              <text x=\"20\" y=\"24.8\" font-family=\"'Helvetica Neue',Arial,sans-serif\" font-weight=\"800\" font-size=\"18\" fill=\"white\">A<\/text>\n            <\/svg>\n          <\/a>\n          <span id=\"topbar-title\">by <strong>Anna Har\u0119\u017clak<\/strong><\/span>\n          <button id=\"btn-reset\">\n            <svg viewBox=\"0 0 24 24\" width=\"13\" height=\"13\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\"><polyline points=\"1 4 1 10 7 10\"\/><path d=\"M3.51 15a9 9 0 1 0 .49-4\"\/><\/svg>\n            Nowy audyt\n          <\/button>\n        <\/div>\n        <div id=\"hero\">\n          <p class=\"eyebrow\">Bezp\u0142atne narz\u0119dzie \u00b7 AI-powered<\/p>\n          <h2 class=\"hero-title\">Audyt Twojego profilu<br>na <span>LinkedIn<\/span><\/h2>\n          <p class=\"hero-sub\">Bezp\u0142atny audyt ka\u017cdej sekcji profilu. Konkretne propozycje zmian \u2014 bez og\u00f3lnik\u00f3w.<\/p>\n          <div class=\"chips-hero\">\n            <button class=\"chip-hero\" data-section=\"Zdj\u0119cie profilowe\">\ud83d\udcf8 Zdj\u0119cie<\/button>\n            <button class=\"chip-hero\" data-section=\"Baner\">\ud83d\uddbc Baner<\/button>\n            <button class=\"chip-hero\" data-section=\"Nag\u0142\u00f3wek\">\u270f\ufe0f Nag\u0142\u00f3wek<\/button>\n            <button class=\"chip-hero\" data-section=\"O mnie\">\ud83d\udccb O mnie<\/button>\n            <button class=\"chip-hero\" data-section=\"Featured\">\u2b50 Featured<\/button>\n            <button class=\"chip-hero\" data-section=\"Do\u015bwiadczenie\">\ud83d\udcbc Do\u015bwiadczenie<\/button>\n            <button class=\"chip-hero\" data-section=\"Umiej\u0119tno\u015bci\">\ud83c\udfaf Umiej\u0119tno\u015bci<\/button>\n            <button class=\"chip-hero\" data-section=\"Rekomendacje\">\ud83d\udcac Rekomendacje<\/button>\n          <\/div>\n          <p class=\"hero-hint\">Mo\u017cesz opisa\u0107, albo doda\u0107 screeny ze swojego profilu.<\/p>\n          <div class=\"upload-wrap\">\n            <div class=\"upload-zone\" id=\"hero-zone\">\n              <input type=\"file\" accept=\"image\/*\" multiple id=\"hero-file\">\n              <div class=\"upload-icon\">\ud83d\udcce<\/div>\n              <p>Przeci\u0105gnij screeny lub <span>wybierz pliki<\/span><\/p>\n              <p><small style=\"opacity:.7\">Do 6 zdj\u0119\u0107 \u00b7 JPG, PNG, WEBP<\/small><\/p>\n            <\/div>\n            <div class=\"thumb-row\" id=\"hero-thumbs\"><\/div>\n          <\/div>\n          <button class=\"start-btn\" id=\"start-btn\">Zacznij audyt \u2192<\/button>\n        <\/div>\n        <div id=\"chat\">\n          <div id=\"messages\"><\/div>\n          <div id=\"error-bar\"><\/div>\n          <div id=\"input-area\">\n            <div id=\"preview-bar\"><\/div>\n            <div class=\"input-row\">\n              <button class=\"btn-upload\" title=\"Dodaj screeny (max 6)\">\n                <input type=\"file\" accept=\"image\/*\" multiple id=\"chat-file\">\n                <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\">\n                  <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"\/>\n                  <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\"\/>\n                  <polyline points=\"21 15 16 10 5 21\"\/>\n                <\/svg>\n                <span class=\"file-badge\" id=\"file-badge\"><\/span>\n              <\/button>\n              <textarea id=\"textarea\" placeholder=\"Napisz tutaj lub wklej tekst sekcji\u2026\" rows=\"1\"><\/textarea>\n              <button id=\"send-btn\">\n                <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                  <line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\"\/>\n                  <polygon points=\"22 2 15 22 11 13 2 9 22 2\"\/>\n                <\/svg>\n              <\/button>\n            <\/div>\n            <div class=\"hint\">Enter = wy\u015blij \u00b7 Shift+Enter = nowa linia \u00b7 \ud83d\uddbc dodaj do 6 screen\u00f3w<\/div>\n          <\/div>\n        <\/div>\n      `;\n      shadow.appendChild(app);\n\n      \/* System prompt *\/\n      const SYSTEM = `Jeste\u015b ekspertem od LinkedIn i personal brandingu, dzia\u0142aj\u0105cym w roli do\u015bwiadczonego doradcy kariery. Przeprowadzasz szczeg\u00f3\u0142owy, \u017cyczliwy i konkretny audyt profilu LinkedIn dla os\u00f3b my\u015bl\u0105cych o zmianie pracy lub kariery.\n\nTw\u00f3j styl komunikacji: ciep\u0142y, rzeczowy, bez zb\u0119dnego marketingowego j\u0119zyka. Piszesz tak, jakby\u015b rozmawia\u0142\/a z kim\u015b przy kawie \u2014 m\u0105drze, ale po ludzku. Unikasz og\u00f3lnik\u00f3w. Ka\u017cda wskaz\u00f3wka jest konkretna i mo\u017cliwa do wdro\u017cenia od razu.\n\nSEKWENCJA: Zacznij od 3 pyta\u0144, jedno na raz:\n1. Czym si\u0119 zajmujesz i w jakim kierunku chcesz si\u0119 rozwija\u0107?\n2. Jaki jest Tw\u00f3j g\u0142\u00f3wny cel na LinkedIn?\n3. Na kt\u00f3r\u0105 cz\u0119\u015b\u0107 profilu chcesz si\u0119 skupi\u0107?\n\nFORMAT OCENY:\n**Ocena: X\/10**\n**Co dzia\u0142a dobrze:** [konkretnie]\n**Co wymaga poprawy:** [konkretnie]\n**Moja propozycja zmiany:** [gotowy tekst lub wskaz\u00f3wki]\n\nSEKCJE: 1.ZDJ\u0118CIE 2.BANER 3.NAG\u0141\u00d3WEK 4.O MNIE 5.FEATURED 6.DO\u015aWIADCZENIE 7.UMIEJ\u0118TNO\u015aCI 8.REKOMENDACJE\n\nPODSUMOWANIE:\n**OG\u00d3LNA OCENA PROFILU: X\/100**\n**TOP 3 PRIORYTETY:** 1.... 2.... 3....\n**Co ju\u017c dzia\u0142a dobrze:** [lista]\n**Jeden quick win na dzi\u015b:** [konkretna zmiana]\n\nPisz po polsku, ciep\u0142o i konkretnie.`;\n\n      \/* State *\/\n      let history = [], isLoading = false, pendingFiles = [];\n      const MAX = 6;\n      const LOGO = r => `<svg viewBox=\"0 0 36 36\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"${r}\" height=\"${r}\"><rect width=\"36\" height=\"36\" rx=\"18\" fill=\"#CB3B3B\"\/><circle cx=\"12.5\" cy=\"18\" r=\"6.3\" fill=\"white\"\/><text x=\"20\" y=\"24.8\" font-family=\"'Helvetica Neue',Arial,sans-serif\" font-weight=\"800\" font-size=\"18\" fill=\"white\">A<\/text><\/svg>`;\n\n      const $ = id => shadow.getElementById(id);\n      const hero=$('hero'),chat=$('chat'),messages=$('messages'),ta=$('textarea');\n      const sendBtn=$('send-btn'),errBar=$('error-bar'),prevBar=$('preview-bar');\n      const badge=$('file-badge'),hThumbs=$('hero-thumbs'),hZone=$('hero-zone');\n\n      \/* Files *\/\n      function addFiles(list, src) {\n        Array.from(list).filter(f=>f.type.startsWith('image\/')).slice(0,MAX-pendingFiles.length).forEach(file=>{\n          const r=new FileReader();\n          r.onload=e=>{pendingFiles.push({dataUrl:e.target.result,base64:e.target.result.split(',')[1],mimeType:file.type});renderThumbs(src);updateBadge();};\n          r.readAsDataURL(file);\n        });\n        shadow.getElementById(src==='hero'?'hero-file':'chat-file').value='';\n      }\n      function removeFile(i,src){pendingFiles.splice(i,1);renderThumbs(src);updateBadge();}\n      function renderThumbs(src){\n        const el=src==='hero'?hThumbs:prevBar; el.innerHTML='';\n        pendingFiles.forEach((f,i)=>{\n          const d=document.createElement('div'); d.className='thumb';\n          d.innerHTML=`<img decoding=\"async\" src=\"${f.dataUrl}\"><button class=\"rm\">\u00d7<\/button>`;\n          d.querySelector('.rm').onclick=()=>removeFile(i,src);\n          el.appendChild(d);\n        });\n      }\n      function updateBadge(){badge.textContent=pendingFiles.length;badge.classList.toggle('on',pendingFiles.length>0);}\n\n      \/* Drag & drop *\/\n      hZone.addEventListener('dragover',e=>{e.preventDefault();hZone.classList.add('drag');});\n      hZone.addEventListener('dragleave',()=>hZone.classList.remove('drag'));\n      hZone.addEventListener('drop',e=>{e.preventDefault();hZone.classList.remove('drag');addFiles(e.dataTransfer.files,'hero');});\n      $('hero-file').addEventListener('change',()=>addFiles($('hero-file').files,'hero'));\n      $('chat-file').addEventListener('change',()=>addFiles($('chat-file').files,'chat'));\n\n      \/* Navigation *\/\n      function toChat(){\n        hero.classList.add('hidden');chat.classList.add('visible');\n        renderThumbs('chat');updateBadge();\n        setTimeout(()=>ta.focus(),100);\n      }\n      function toHero(){\n        if(history.length&&!confirm('Zacz\u0105\u0107 audyt od pocz\u0105tku?'))return;\n        history=[];pendingFiles=[];isLoading=false;\n        messages.innerHTML='';prevBar.innerHTML='';hThumbs.innerHTML='';\n        errBar.style.display='none';ta.value='';ta.style.height='auto';\n        hero.classList.remove('hidden');chat.classList.remove('visible');\n        badge.classList.remove('on');\n      }\n      $('btn-reset').onclick=toHero;\n      $('start-btn').onclick=()=>{\n        toChat();\n        addBotMsg('Cze\u015b\u0107! Zanim zaczniemy, powiedz mi \u2014 czym si\u0119 zajmujesz i w jakim kierunku chcesz si\u0119 rozwija\u0107? Czy masz ju\u017c konkretn\u0105 bran\u017c\u0119 lub rol\u0119 na celowniku, czy jeste\u015b na etapie eksploracji?');\n        showChips(['Mam konkretn\u0105 bran\u017c\u0119 na celowniku','Jestem na etapie eksploracji','Chc\u0119 pozosta\u0107 w tej samej bran\u017cy']);\n      };\n      shadow.querySelectorAll('.chip-hero').forEach(b=>{\n        b.onclick=()=>{toChat();submit('Chc\u0119 skupi\u0107 si\u0119 na sekcji: '+b.dataset.section);};\n      });\n\n      \/* Render *\/\n      function addBotMsg(text){\n        const w=document.createElement('div');w.className='msg bot';\n        w.innerHTML=`<div class=\"av\">${LOGO(30)}<\/div><div class=\"bubble\">${md(text)}<\/div>`;\n        messages.appendChild(w);scroll();\n      }\n      function addUserMsg(text,imgs){\n        const w=document.createElement('div');w.className='msg user';\n        const ih=imgs?.length?`<div class=\"bimgs\">${imgs.map(f=>`<img decoding=\"async\" src=\"${f.dataUrl}\">`).join('')}<\/div>`:'';\n        w.innerHTML=`<div class=\"bubble\">${ih}${text?md(text):''}<\/div>`;\n        messages.appendChild(w);scroll();\n      }\n      function showChips(opts){\n        removeChips();\n        const el=document.createElement('div');el.className='chips-chat';el.id='chips';\n        opts.forEach(o=>{const b=document.createElement('button');b.className='chip-chat';b.textContent=o;b.onclick=()=>{removeChips();submit(o);};el.appendChild(b);});\n        messages.appendChild(el);scroll();\n      }\n      function removeChips(){shadow.getElementById('chips')?.remove();}\n      function showTyping(){\n        const el=document.createElement('div');el.className='msg bot';el.id='typing';\n        el.innerHTML=`<div class=\"av\">${LOGO(30)}<\/div><div class=\"dots-wrap\"><div class=\"dots\"><span><\/span><span><\/span><span><\/span><\/div><\/div>`;\n        messages.appendChild(el);scroll();\n      }\n      function hideTyping(){shadow.getElementById('typing')?.remove();}\n      function scroll(){messages.scrollTop=messages.scrollHeight;}\n\n      \/* Input *\/\n      ta.addEventListener('keydown',e=>{if(e.key==='Enter'&&!e.shiftKey){e.preventDefault();send();}});\n      ta.addEventListener('input',()=>{ta.style.height='auto';ta.style.height=Math.min(ta.scrollHeight,150)+'px';});\n      sendBtn.onclick=send;\n      function send(){\n        const text=ta.value.trim();\n        if((!text&&!pendingFiles.length)||isLoading)return;\n        ta.value='';ta.style.height='auto';submit(text);\n      }\n\n      async function submit(text){\n        removeChips();\n        const imgs=[...pendingFiles];pendingFiles=[];renderThumbs('chat');updateBadge();\n        addUserMsg(text,imgs);\n\n        \/* build messages array *\/\n        const content=[];\n        imgs.forEach(f=>content.push({type:'image',source:{type:'base64',media_type:f.mimeType,data:f.base64}}));\n        if(text)content.push({type:'text',text});\n        const msgContent = content.length===1&&content[0].type==='text' ? text : content;\n        history.push({role:'user',content:msgContent});\n\n        setLoading(true);showTyping();\n        try{\n          const reply = await callProxy();\n          hideTyping();addBotMsg(reply);\n          history.push({role:'assistant',content:reply});\n        }catch(err){\n          hideTyping();showErr('B\u0142\u0105d: '+(err.message||String(err)));\n        }finally{setLoading(false);}\n      }\n\n      function setLoading(v){isLoading=v;sendBtn.disabled=v;ta.disabled=v;}\n      function showErr(msg){errBar.textContent=msg;errBar.style.display='block';setTimeout(()=>errBar.style.display='none',8000);}\n\n      \/* Proxy call \u2014 przez WP AJAX *\/\n      async function callProxy(){\n        const form = new FormData();\n        form.append('action',   'audytor_linkedin_proxy');\n        form.append('nonce',    NONCE);\n        form.append('system',   SYSTEM);\n        form.append('messages', JSON.stringify(history));\n\n        const res  = await fetch(AJAX_URL, {method:'POST', body:form});\n        const json = await res.json();\n        if(!json.success) throw new Error(json.data || 'B\u0142\u0105d serwera');\n        return json.data?.content?.[0]?.text || '(brak odpowiedzi)';\n      }\n\n      \/* Markdown *\/\n      function md(t){\n        if(!t)return'';\n        return t\n          .replace(\/^### (.+)$\/gm,'<h3>$1<\/h3>')\n          .replace(\/\\*\\*(.+?)\\*\\*\/g,'<strong>$1<\/strong>')\n          .replace(\/\\*([^*\\n]+)\\*\/g,'<em>$1<\/em>')\n          .replace(\/^---$\/gm,'<hr>')\n          .replace(\/^[-\u2022] (.+)$\/gm,'<li>$1<\/li>')\n          .replace(\/(<li>[\\s\\S]+?<\\\/li>)\/g,m=>`<ul>${m}<\/ul>`)\n          .split(\/\\n\\n+\/).map(p=>p.trim()).filter(Boolean)\n          .map(p=>p.startsWith('<')?p:`<p>${p.replace(\/\\n\/g,'<br>')}<\/p>`).join('');\n      }\n    })();\n    <\/script>\n    \n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"saved_in_kubio":false,"footnotes":""},"class_list":["post-525","page","type-page","status-publish","hentry"],"kubio_ai_page_context":{"short_desc":"","purpose":"general"},"_links":{"self":[{"href":"https:\/\/www.akademianowystart.pl\/index.php\/wp-json\/wp\/v2\/pages\/525","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.akademianowystart.pl\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.akademianowystart.pl\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.akademianowystart.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.akademianowystart.pl\/index.php\/wp-json\/wp\/v2\/comments?post=525"}],"version-history":[{"count":4,"href":"https:\/\/www.akademianowystart.pl\/index.php\/wp-json\/wp\/v2\/pages\/525\/revisions"}],"predecessor-version":[{"id":530,"href":"https:\/\/www.akademianowystart.pl\/index.php\/wp-json\/wp\/v2\/pages\/525\/revisions\/530"}],"wp:attachment":[{"href":"https:\/\/www.akademianowystart.pl\/index.php\/wp-json\/wp\/v2\/media?parent=525"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}