PageSourceSearch

https://markage360.com/knowledge.js?v=20260724-blogs-redesign-1

js markage360.com collected 2026-10-07 19:06:40 UTC 27,144 bytes, 70 lines download raw bytes

1(()=>{if(document.body.getAttribute("data-page")!=="knowledge")return;const ft=window.matchMedia("(prefers-reduced-motion: reduce)").matches,z=document.querySelector("[data-kn-today]");if(z)try{z.textContent=new Date().toLocaleDateString(void 0,{year:"numeric",month:"short",day:"2-digit"})}catch{}const K=(t,a)=>{if(!t)return;const e=t.querySelector('input[type="email"]'),r=t.querySelector('button[type="submit"]');let o=t.querySelector("[data-newsletter-status]");o||(o=document.createElement("p"),o.dataset.newsletterStatus="true",o.className="newsletter-form-status",t.append(o)),t.addEventListener("submit",async n=>{n.preventDefault();const i=String(e?.value||"").trim();if(!i){o.textContent="Enter your email address.";return}const l=r?.textContent||"Subscribe";r&&(r.disabled=!0,r.textContent="Subscribing..."),o.textContent="";try{const s=await fetch("/api/newsletter-subscriptions",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:i,sourcePage:window.location.pathname,sourceUrl:window.location.href,sourceTitle:(document.title||"").trim(),sourceContext:a})}),d=await s.json().catch(()=>({}));if(!s.ok)throw new Error(d.error||"Could not subscribe right now.");e&&(e.value=""),o.textContent=d.created?"Subscribed.":"You are already on the list."}catch(s){o.textContent=s.message||"Could not subscribe right now."}finally{r&&(r.disabled=!1,r.textContent=l)}})};K(document.querySelector(".le-newsletter-form"),"knowledge_newsletter"),K(document.querySelector(".hb-newsletter-form"),"weekly_newsletter");const h=t=>String(t||"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;"),kt=(t,a=!1)=>{const e=String(t||"").trim();if(!e)return"";try{const r=new URL(e,window.location.origin),o=r.hostname.replace(/^www\./,"");let n="";if(o==="youtu.be"?n=r.pathname.replace(/^\/+/,"").split("/")[0]:o.endsWith("youtube.com")&&(n=r.searchParams.get("v")||"",!n&&r.pathname.includes("/shorts/")&&(n=r.pathname.split("/shorts/")[1]?.split("/")[0]||""),!n&&r.pathname.includes("/embed/")&&(n=r.pathname.split("/embed/")[1]?.split("/")[0]||"")),n)return`https://www.youtube.com/embed/${encodeURIComponent(n)}?rel=0&playsinline=1${a?"&autoplay=1":""}`;if(o.endsWith("vimeo.com")&&(n=r.pathname.split("/").filter(Boolean).pop()||"",n))return`https://player.vimeo.com/video/${encodeURIComponent(n)}?title=0&byline=0&portrait=0${a?"&autoplay=1":""}`}catch{}return""},Ht=t=>/\.(mp4|webm|mov|m4v)(?:[?#]|$)/i.test(String(t||"")),D=t=>{if(!t)return;const a=t.querySelector("[data-blog-video-player-slot]"),e=a?.querySelector("video");e&&e.pause(),a&&(a.innerHTML=""),t.hidden=!0,document.body.classList.remove("kn-video-player-open")},R=(t,a)=>{if(!t||!a)return;const e=!!(a.muted||a.volume===0);t.textContent=e?"Unmute":"Mute",t.setAttribute("aria-label",e?"Unmute video":"Mute video"),t.setAttribute("aria-pressed",String(!e))},vt=t=>{if(!t?.videoUrl)return;let a=document.querySelector("[data-blog-video-player]");a||(a=document.createElement("div"),a.className="kn-video-player",a.setAttribute("data-blog-video-player",""),a.hidden=!0,a.innerHTML=`
2        <div class="kn-video-player-dialog" data-blog-video-dialog role="dialog" aria-modal="true" aria-label="Video player">
3          <button class="kn-video-player-close" type="button" data-blog-video-close aria-label="Close video">\xD7</button>
4          <div class="kn-video-player-slot" data-blog-video-player-slot></div>
5          <button class="kn-video-player-sound" type="button" data-blog-video-sound aria-pressed="true" hidden>Mute</button>
6          <div class="kn-video-player-copy">
7            <strong data-blog-video-player-title></strong>
8            <span data-blog-video-player-meta></span>
9          </div>
10        </div>
11      `,document.body.append(a),a.querySelector("[data-blog-video-close]")?.addEventListener("click",l=>{l.preventDefault(),l.stopPropagation(),D(a)}),a.querySelector("[data-blog-video-dialog]")?.addEventListener("click",l=>{l.stopPropagation()}),a.querySelector("[data-blog-video-sound]")?.addEventListener("click",l=>{l.preventDefault(),l.stopPropagation();const s=a.querySelector("[data-blog-video-player-slot] video");s&&(s.muted=!s.muted,!s.muted&&s.volume===0&&(s.volume=.8),R(l.currentTarget,s))}),a.addEventListener("click",l=>{l.target===a&&D(a)}),document.addEventListener("keydown",l=>{l.key==="Escape"&&!a.hidden&&D(a)}));const e=a.querySelector("[data-blog-video-player-slot]"),r=a.querySelector("[data-blog-video-player-title]"),o=a.querySelector("[data-blog-video-player-meta]"),n=a.querySelector("[data-blog-video-sound]"),i=kt(t.videoUrl,!0);if(i)e.innerHTML=`<iframe src="${h(i)}" title="${h(t.title||"360Lens video")}" allow="autoplay; encrypted-media; picture-in-picture; fullscreen" allowfullscreen></iframe>`,n&&(n.hidden=!0);else{const l=t.posterUrl?` poster="${h(t.posterUrl)}"`:"";e.innerHTML=`<video controls autoplay playsinline preload="metadata"${l}><source src="${h(t.videoUrl)}" /></video>`;const s=e.querySelector("video");s&&n&&(n.hidden=!1,R(n,s),s.addEventListener("volumechange",()=>R(n,s)))}r&&(r.textContent=t.title||"360Lens video"),o&&(o.textContent=[t.category,t.duration].filter(
11Boolean).join(" \xB7 ")),a.hidden=!1,document.body.classList.add("kn-video-player-open")};(async()=>{const t=document.querySelector("[data-blog-video-library-section]"),a=document.querySelector("[data-blog-video-grid]");if(!(!t||!a))try{const e=await fetch("/api/blog-video-library",{credentials:"same-origin"}),r=await e.json().catch(()=>({}));if(!e.ok)throw new Error(r.error||"Could not load video library.");const o=Array.isArray(r.videos)?r.videos.filter(s=>s&&s.videoUrl):[];if(!o.length){t.hidden=!0;return}const n=o.length>3;a.classList.toggle("is-carousel",n),a.innerHTML=o.map((s,d)=>{const u=s.posterUrl?` style="background-image: linear-gradient(180deg, rgba(8, 13, 24, 0.06), rgba(8, 13, 24, 0.2)), url('${h(s.posterUrl)}');"`:"",f=s.duration?`<span class="le-video-len">${h(s.duration)}</span>`:"",_=s.category?`<span class="le-video-category">${h(s.category)}</span>`:"";return`
12          <button class="le-video" type="button" data-blog-video-open="${d}" aria-label="Play ${h(s.title||"360Lens video")}">
13            <figure class="le-video-art le-art-${["clay","sand","sage"][d%3]}"${u}>
14              ${f}
15              <span class="le-video-play" aria-hidden="true">\u25B6</span>
16            </figure>
17            ${_}
18            <h3>${h(s.title||"Untitled video")}</h3>
19          </button>
20        `}).join(""),t.hidden=!1,a.addEventListener("click",s=>{const d=s.target.closest("[data-blog-video-open]");if(!d)return;const u=o[Number(d.getAttribute("data-blog-video-open"))];vt(u)});const i=document.querySelector("[data-blog-video-prev]"),l=document.querySelector("[data-blog-video-next]");if(i&&l){i.hidden=!n,l.hidden=!n;const s=d=>{const u=a.querySelector(".le-video"),f=u?u.getBoundingClientRect().width+32:a.clientWidth*.9;a.scrollBy({left:d*f,behavior:"smooth"})};i.addEventListener("click",()=>s(-1)),l.addEventListener("click",()=>s(1))}}catch(e){console.error(e),t.hidden=!0}})();const J="kn-prefs-v1",S=(()=>{try{return JSON.parse(localStorage.getItem(J))||{}}catch{return{}}})(),X=()=>{try{localStorage.setItem(J,JSON.stringify(S))}catch{}},x=["night","paper"],G=(t,a)=>{x.includes(t)&&(document.body.setAttribute("data-kn-theme",t),document.documentElement.setAttribute("data-kn-theme",t),S.theme=t,X(),document.querySelectorAll("button[data-kn-theme]").forEach(e=>{const r=e.getAttribute("data-kn-theme");x.includes(r)&&(e.setAttribute("aria-pressed",String(r===t)),e.classList.toggle("is-active",r===t))}),a&&y(t==="paper"?"Mode \xB7 Light":"Mode \xB7 Dark"))};G(x.includes(S.theme)?S.theme:"night"),document.querySelectorAll("button[data-kn-theme]").forEach(t=>{const a=t.getAttribute("data-kn-theme");x.includes(a)&&t.addEventListener("click",e=>{e.stopPropagation(),G(a,!0)})});let k=typeof S.textScale=="number"?S.textScale:1;const St=.85,wt=1.35,Y=.1,Z=t=>{k=Math.min(wt,Math.max(St,k));const a=document.querySelector(".kn-main");a&&a.style.setProperty("--kn-text-scale",String(k)),S.textScale=k,X(),t&&y("Text \xB7 "+Math.round(k*100)+"%")};Z(),document.querySelectorAll("button[data-kn-text]").forEach(t=>{t.addEventListener("click",a=>{a.stopPropagation();const e=t.getAttribute("data-kn-text");e==="inc"?k+=Y:e==="dec"?k-=Y:k=1,Z(!0)})});const Q=document.querySelector("[data-kn-progress] span");if(Q){const t=()=>{const a=document.documentElement,e=a.scrollHeight-a.clientHeight||1,r=Math.min(100,Math.max(0,a.scrollTop/e*100));Q.style.width=r+"%"};document.addEventListener("scroll",t,{passive:!0}),window.addEventListener("resize",t),t()}const tt="kn-saved-v1",Lt=()=>{try{return new Set(JSON.parse(localStorage.getItem(tt))||[])}catch{return new Set}},Et=t=>{try{localStorage.setItem(tt,JSON.stringify([...t]))}catch{}},m=Lt(),et=document.querySelector("[data-kn-saved-count]"),O=()=>{et&&(et.textContent=String(m.size)),document.querySelectorAll("[data-kn-bookmark]").forEach(t=>{const a=t.getAttribute("data-kn-bookmark"),e=m.has(a);t.classList.toggle("is-saved",e),t.setAttribute("aria-pressed",String(e)),t.classList.contains("kn-row-save")?t.textContent=e?"\u2713":"\uFF0B":t.classList.contains("kn-bookmark")&&(t.textContent=e?"\u2713 Saved":"\uFF0B Save")})};document.querySelectorAll("[data-kn-bookmark]").forEach(t=>{t.addEventListener("click",a=>{a.preventDefault();const e=t.getAttribute("data-kn-bookmark");e&&(m.has(e)?(m.delete(e),y("Removed from list")):(m.add(e),y("Saved \xB7 "+m.size+" in list")),Et(m),O())})}),O();const at=document.querySelector("[data-kn-open-saved]");at&&at.addEventListener("click",()=>{if(!m.size){y("Reading list is empty \u2014 tap \uFF0B on any story");return}I("saved:")});let L=String(document.querySelector('meta[name="blog-category"]')?.content||"all").trim().toLowerCase()||"all";window.knCurrentKnowledgeFilter=L;const B=t=>{L=String(t||"all").toLowerCase(),window.knCurrentKnowledgeFilter=L,p&&!p.hidden&&U(g?.value||"")};window.knApplyKnowledgeFilter=B;const E=document.querySelector("[data-kn-sort]"),v=document.querySelector("[data-kn-rows]");let nt=v?[...v.children]:[];E&&v&&E.addEventListener("change",()=>{const t=E.value,a=[...v.children],e=(n,i)=>{const s=(n.querySelector(i)?.textContent||"").match(/(\d+)/);return s?parseInt(s[1],10):0},r=n=>{const i=n.querySelector(".kn-row-date")?.textContent||"";return Date.parse(i)||0};let o;t==="latest"?o=nt.slice():t==="popular"?o=a.slice().sort(()=>Math.random()-.5):t==="long"?o=a.slice().sort((n,i)=>e(i,".kn-row-time")-e(n,".kn-row-time")):t==="short"?o=a.slice().sort((n,i)=>e(n,".kn-row-time")-e(i,".kn-row-time")):o=a.slice().sort((n,i)=>r(i)-r(n)),o.forEach(n=>v.appendChild(n)),y("Sorted \xB7 "+(E.options[E.selectedIndex]?.textContent||t))});const q={brand:"Brand",web:"Web",growth:"Growth",ai:"AI",creative:"Creative",reports:"Reports"},c=t=>String(t??"").replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;").replaceAll("'","&#39;"),rt=t=>{if(!t)return"";const a=new Date(t);return Number.isNaN(a.getTime())?"":a.toLocaleDateString(void 0,{month:"short",day:"numeric",year:"numeric"})},ot=t=>{const a=String(t?.imageUrl||"").trim();if(a)return a;const e=String(t?.seo?.ogImage||"").trim();return e&&!/\/assets\/black\.png(?:$|\?)/i.test(e)?e:""}
20,st=(t,a="card")=>{const e=c((t.title||"M").charAt(0).toUpperCase()),r=ot(t),o=c(t.imageAlt||t.title||"360Lens article"),n=a==="feature"?"hb-feature-art":"hb-card-art";if(r)return`<figure class="${n} has-image"><img src="${c(r)}" alt="${o}" loading="lazy" /></figure>`;const i=t.category==="growth"||t.category==="web"?"kn-art-aurora-cyan":"kn-art-aurora-violet";return`<figure class="${n} ${i}"><span class="hb-art-mark">${e}</span>${a==="feature"?'<span class="hb-art-stamp">360Lens</span>':""}</figure>`},qt=(t,a)=>{const e=t.category||"brand",r=q[e]||e,o=t.url||"#";return`
21      <article class="hb-card reveal" data-kn-id="${c(t.id||`cms-${a}`)}" data-kn-cat="${c(e)}">
22        <a class="hb-card-link" href="${c(o)}">
23          ${st(t,"card")}
24          <div class="hb-card-body">
25            <span class="hb-tag hb-tag-${c(e)}">${c(r)}</span>
26            <h3 class="hb-card-title">${c(t.title)}</h3>
27            <p class="hb-card-excerpt">${c(t.excerpt||"")}</p>
28            <div class="hb-card-foot">
29              <span class="hb-avatar hb-avatar-sm">${c(t.authorInitials||"M360")}</span>
30              <span>${c(t.authorName||"MarkAge360 Team")}</span>
31              <span class="hb-card-time kn-row-time">${c(String(t.readMinutes||1))} min read</span>
32            </div>
33          </div>
34        </a>
35      </article>
36    `},$t=async()=>{if(v)try{const t=await fetch("/api/blog-posts/public",{headers:{Accept:"application/json"}});if(!t.ok)return;const a=await t.json(),e=Array.isArray(a.posts)?a.posts:[];if(!e.length)return;const r=e.find(d=>d.isFeatured)||e[0],o=r.category||"brand",n=q[o]||o,i=document.querySelector(".hb-feature");i&&(i.setAttribute("data-kn-id",r.id||"cms-feature"),i.setAttribute("data-kn-cat",o),i.innerHTML=`
37          <a class="hb-feature-link" href="${c(r.url||"#")}">
38            ${st(r,"feature")}
39            <div class="hb-feature-body">
40              <span class="hb-tag hb-tag-${c(o)}">${c(n)}</span>
41              <h2 class="hb-feature-title">${c(r.title)}</h2>
42              <p class="hb-feature-deck">${c(r.excerpt||"")}</p>
43              <div class="hb-byline">
44                <span class="hb-avatar">${c(r.authorInitials||"M360")}</span>
45                <strong>${c(r.authorName||"MarkAge360 Team")}</strong>
46                <span class="hb-byline-dot">\xB7</span>
47                <span>${c(rt(r.publishedAt))}</span>
48                <span class="hb-byline-dot">\xB7</span>
49                <span>${c(String(r.readMinutes||1))} min read</span>
50              </div>
51            </div>
52          </a>
53        `);const l=document.querySelector(".hb-featured-items");l&&(l.innerHTML=e.slice(0,5).map(d=>{const u=d.category||"brand";return`
54            <li>
55              <a href="${c(d.url||"#")}" data-kn-cat="${c(u)}">
56                <span class="hb-tag hb-tag-${c(u)}">${c(q[u]||u)}</span>
57                <strong>${c(d.title)}</strong>
58                <span class="hb-featured-meta">${c(d.authorName||"MarkAge360 Team")} \xB7 ${c(rt(d.publishedAt))}</span>
59              </a>
60            </li>
61          `}).join("")),v.innerHTML=e.map(qt).join(""),nt=[...v.children];const s=document.querySelector(".hb-popular-list");s&&(s.innerHTML=e.slice(0,5).map((d,u)=>{const f=d.category||"brand";return`
62            <li class="hb-popular-row reveal">
63              <span class="hb-popular-num">${String(u+1).padStart(2,"0")}</span>
64              <div>
65                <span class="hb-tag hb-tag-${c(f)}">${c(q[f]||f)}</span>
66                <a class="hb-popular-title" href="${c(d.url||"#")}">${c(d.title)}</a>
67                <span class="hb-popular-meta">${c(String(d.readMinutes||1))} min \xB7 CMS article</span>
68              </div>
69            </li>
70          `}).join("")),lt(e),B(L),O()}catch(t){console.warn("CMS blog posts unavailable",t)}},it=document.querySelector("[data-kn-load-more]");it&&it.addEventListener("click",()=>y("Full archive ships with the CMS in Issue 25"));const p=document.querySelector("[data-kn-palette]"),g=document.querySelector("[data-kn-palette-input]"),w=document.querySelector("[data-kn-palette-results]"),A=t=>q[String(t||"").toLowerCase()]||t||"",Ct=t=>[t.title,t.excerpt,t.category,t.categoryLabel,t.authorName,t.readMinutes?`${t.readMinutes} min read`:"",Array.isArray(t.tags)?t.tags.join(" "):t.tags].filter(
70Boolean).join(" ").toLowerCase(),Mt=t=>t.url||(t.slug?`/blog/${t.slug}.html`:"#");let H=[];const xt=(t,a)=>{const e=String(t.category||"brand").toLowerCase();return{id:String(t.id||t.slug||`post-${a}`),cat:e,title:String(t.title||"Untitled article"),blurb:String(t.excerpt||""),kind:"Story",href:Mt(t),image:ot(t),meta:[A(e),t.authorName||"MarkAge360",t.readMinutes?`${t.readMinutes} min`:""].filter(Boolean).join(" \xB7 "),search:Ct(t)}},lt=t=>{H=Array.isArray(t)?t.map(xt):[],T=ct(),p&&!p.hidden&&U(g?.value||"")};document.addEventListener("knowledge:posts-ready",t=>{lt(t.detail?.posts||[]),B(L)});const ct=()=>{if(H.length)return[...H,{id:"tool-audit",title:"AI visibility audit",kind:"Tool",href:"/tools/ai-visibility-audit",cat:"ai",search:"ai visibility audit ai tool"},{id:"tool-roi",title:"Marketing ROI calculator",kind:"Tool",href:"/tools/marketing-roi-calculator",cat:"growth",search:"marketing roi calculator growth tool"},{id:"tool-readtime",title:"Read-time estimator",kind:"Utility",href:"#kn-tools",cat:"creative",search:"read time estimator creative utility"},{id:"tool-headline",title:"Headline scorer",kind:"Utility",href:"#kn-tools",cat:"creative",search:"headline scorer creative utility"},{id:"tool-utm",title:"UTM builder",kind:"Utility",href:"#kn-tools",cat:"growth",search:"utm builder growth utility"},{id:"tool-slug",title:"Slug generator",kind:"Utility",href:"#kn-tools",cat:"web",search:"slug generator web utility"}];const t=[],a=new Set;return document.querySelectorAll("[data-kn-id]").forEach(e=>{const r=e.getAttribute("data-kn-id");if(!r||a.has(r))return;a.add(r);const o=e.getAttribute("data-kn-cat")||"",n=(e.querySelector(".kn-row-title, h3, h2")?.textContent||"").trim(),i=(e.querySelector("p")?.textContent||"").trim(),l=e.querySelector("img")?.getAttribute("src")||"";n&&t.push({id:r,cat:o,title:n,blurb:i,kind:e.classList.contains("kn-row")?"Index":"Story",node:e,href:e.matches("a")?e.getAttribute("href"):e.querySelector("a")?.getAttribute("href"),image:l,meta:[A(o),e.querySelector(".le-byline, .hb-byline, .hb-card-foot")?.textContent?.trim()].filter(Boolean).join(" \xB7 "),search:(n+" "+i+" "+o).toLowerCase()})}),[{id:"tool-audit",title:"AI visibility audit",kind:"Tool",href:"/tools/ai-visibility-audit",cat:"ai"},{id:"tool-roi",title:"Marketing ROI calculator",kind:"Tool",href:"/tools/marketing-roi-calculator",cat:"growth"},{id:"tool-readtime",title:"Read-time estimator",kind:"Utility",href:"#kn-tools",cat:"creative"},{id:"tool-headline",title:"Headline scorer",kind:"Utility",href:"#kn-tools",cat:"creative"},{id:"tool-utm",title:"UTM builder",kind:"Utility",href:"#kn-tools",cat:"growth"},{id:"tool-slug",title:"Slug generator",kind:"Utility",href:"#kn-tools",cat:"web"}].forEach(e=>t.push(e)),t};let T=ct();$t();const U=t=>{if(!w)return;t=(t||"").toLowerCase().trim();const a=L||"all";let e=T.filter(n=>a==="all"||n.cat===a),r="Suggestions";t.startsWith("saved:")?(e=T.filter(n=>m.has(n.id)),r=`Reading list (${e.length})`):t?(e=e.filter(n=>(n.search||(n.title+" "+(n.blurb||"")+" "+n.cat+" "+n.kind).toLowerCase()).includes(t)),r=`Results \xB7 ${e.length}`):a!=="all"&&(r=`${A(a)||a} \xB7 ${e.length}`),e=e.slice(0,14),w.innerHTML="";const o=document.createElement("p");if(o.className="kn-palette-hint",o.textContent=r+" \xB7 \u2191 \u2193 to move, \u21B5 to open",w.appendChild(o),!e.length){const n=document.createElement("div");n.className="kn-palette-empty",n.textContent=t.startsWith("saved:")?"Nothing saved yet. Tap \uFF0B on any story.":"No matches.",w.appendChild(n);return}e.forEach((n,i)=>{const l=document.createElement("div");l.className="kn-palette-result"+(i===0?" is-active":""),l.setAttribute("data-id",n.id);const s=n.kind==="Tool"?"T":n.kind==="Utility"?"U":n.kind==="Index"?"01":"\u2605";l.innerHTML=(n.image?'<span class="kn-palette-result-thumb"><img src="'+c(n.image)+'" alt="" loading="lazy" /></span>':'<span class="kn-palette-result-icon">'+s+"</span>")+'<div class="kn-palette-result-body"><strong></strong><span></span></div><kbd>\u21B5</kbd>',l.querySelector("strong").textContent=n.title,l.querySelector(".kn-palette-result-body span").textContent=(n.meta||n.kind+(n.cat?" \xB7 "+A(n.cat):"")).toUpperCase(),l.addEventListener("mousemove",()=>{w.querySelectorAll(".kn-palette-result.is-active").forEach(d=>d.classList.remove("is-active")),l.classList.add("is-active")}),l.addEventListener("click",()=>dt(n)),w.appendChild(l)})},dt=t=>{if(t){if(t.href){t.href.startsWith("#")?($(),document.querySelector(t.href)?.scrollIntoView({behavior:"smooth",block:"start"})):window.location.href=t.href;return}$(),t.node&&(t.node.scrollIntoView({behavior:"smooth",block:"center"}
70),t.node.style.transition="box-shadow .6s ease",t.node.style.boxShadow="0 0 0 2px rgba(99, 169, 255, 0.55)",setTimeout(()=>{t.node.style.boxShadow=""},1600))}};function I(t){p&&(p.hidden=!1,g&&(g.value=t||"",g.focus(),U(g.value)))}function $(){p&&(p.hidden=!0)}document.querySelectorAll("[data-kn-open-palette]").forEach(t=>t.addEventListener("click",()=>I())),document.querySelectorAll("[data-kn-close-palette]").forEach(t=>t.addEventListener("click",$)),g&&g.addEventListener("input",()=>U(g.value)),document.addEventListener("keydown",t=>{if((t.metaKey||t.ctrlKey)&&t.key.toLowerCase()==="k"){t.preventDefault(),p&&p.hidden?I():$();return}if(t.key==="Escape"&&p&&!p.hidden){$();return}const e=document.activeElement?.tagName;if(t.key==="/"&&e!=="INPUT"&&e!=="TEXTAREA"&&e!=="SELECT"){t.preventDefault(),I();return}if(p&&!p.hidden&&(t.key==="ArrowDown"||t.key==="ArrowUp"||t.key==="Enter")){const r=[...w.querySelectorAll(".kn-palette-result")];if(!r.length)return;const o=r.findIndex(i=>i.classList.contains("is-active"));if(t.key==="Enter"){t.preventDefault();const i=r[o>=0?o:0],l=T.find(s=>s.id===i.getAttribute("data-id"));dt(l);return}t.preventDefault();const n=t.key==="ArrowDown"?Math.min(r.length-1,o+1):Math.max(0,o-1);r.forEach(i=>i.classList.remove("is-active")),r[n].classList.add("is-active"),r[n].scrollIntoView({block:"nearest"})}});let ut;const P=document.querySelector("[data-kn-toast]");function y(t){P&&(P.textContent=t,P.hidden=!1,clearTimeout(ut),ut=setTimeout(()=>{P.hidden=!0},2400))}const b=(t,a)=>{t&&(t.innerHTML=a)},pt=document.querySelector("[data-kn-readtime-form]"),ht=document.querySelector("[data-kn-readtime-input]"),j=document.querySelector("[data-kn-readtime-out]"),Vt=t=>(t.trim().match(/\b[\w'-]+\b/g)||[]).length,At=t=>(t.match(/[.!?]+(\s|$)/g)||[]).length||1,Tt=t=>(t=t.toLowerCase().replace(/[^a-z]/g,""),t?t.length<=3?1:(t=t.replace(/(?:[^laeiouy]es|ed|[^laeiouy]e)$/,""),t=t.replace(/^y/,""),Math.max(1,(t.match(/[aeiouy]{1,2}/g)||[]).length)):0),Ut=(t,a,e)=>{const r=a.length;if(!r)return 0;const o=a.reduce((i,l)=>i+Tt(l),0),n=.39*(r/e)+11.8*(o/r)-15.59;return Math.max(1,Math.min(18,Math.round(n*10)/10))};pt&&ht&&j&&pt.addEventListener("submit",t=>{t.preventDefault();const a=ht.value.trim();if(!a){b(j,'<span class="kn-tool-out-empty">\u2014 enter text to begin</span>');return}const e=a.match(/\b[\w'-]+\b/g)||[],r=e.length,o=At(a),n=r/230,i=Math.max(1,Math.round(n)),l=Ut(a,e,o),s=a.length;b(j,'<span class="kn-stat"><b>'+r.toLocaleString()+'</b><span>words</span></span><span class="kn-stat"><b>'+i+'</b><span>min read</span></span><span class="kn-stat"><b>'+o+'</b><span>sentences</span></span><span class="kn-stat"><b>'+s.toLocaleString()+'</b><span>chars</span></span><span class="kn-stat"><b>'+l+"</b><span>grade level</span></span>")});const mt=document.querySelector("[data-kn-headline-form]"),gt=document.querySelector("[data-kn-headline-input]"),F=document.querySelector("[data-kn-headline-out]"),It=["free","new","now","secret","instantly","proven","stop","start","fast","quiet","quietly","best","worst","never","always","why","how","what","most","least","real","truth","hidden","actually","actually","unlock","reveal","kill","death","tax","quietly","compounding","premium","slow"],Pt=["the","a","an","of","and","to","in","on","for","with","is","are","was","were","this","that","by","from","as","at","be","or"];mt&&gt&&F&&mt.addEventListener("submit",t=>{t.preventDefault();const a=gt.value.trim();if(!a){b(F,'<span class="kn-tool-out-empty">\u2014 enter a headline to score</span>');return}const e=a.split(/\s+/).filter(Boolean),r=a.length,o=e.length,n=Math.max(0,100-Math.abs(60-r)*2),i=Math.max(0,100-Math.abs(8-o)*8),s=e.filter(W=>Pt.includes(W.toLowerCase())).length/Math.max(1,o),d=Math.max(0,100-s*180),u=e.filter(W=>It.includes(W.toLowerCase().replace(/[^a-z]/g,""))).length,f=Math.min(100,40+u*22),_=/^[A-Z]/.test(a),Ot=/[.!?]$/.test(a)?-8:0,M=Math.round(n*.25+i*.2+d*.2+f*.3+(_?5:0)+Ot),Bt=M>=80?"Strong":M>=60?"Solid":M>=40?"Workable":"Weak";b(F,'<span class="kn-stat"><b>'+Math.max(0,Math.min(100,M))+"</b><span>/100 \xB7 "+Bt+'</span></span><span class="kn-stat"><b>'+o+'</b><span>words</span></span><span class="kn-stat"><b>'+r+'</b><span>chars</span></span><span class="kn-stat"><b>'+u+'</b><span>power words</span></span><span class="kn-stat"><b>'+Math.round(s*100)+'%</b><span>stop-words</span></span><div class="kn-tool-bar"><i style="width:'+Math.max(0,Math.min(100,M))+'%"></i></div>')});const V=document.querySelector("[data-kn-utm-form]"),C=document.querySelector("[data-kn-utm-out]");V&&C&&V.addEventListener("submit",t=>{t.preventDefault();const a=i=>V.querySelector('[data-kn-utm="'+i+'"]')?.value.trim(),e=a("url");
70if(!e){b(C,'<span class="kn-tool-out-empty">\u2014 enter a destination URL</span>');return}let r;try{r=new URL(/^https?:/i.test(e)?e:"https://"+e)}catch{b(C,'<span class="kn-tool-out-empty">\u2014 that does not look like a valid URL</span>');return}const o=r.searchParams;["source","medium","campaign","content","term"].forEach(i=>{const l=a(i);l&&o.set("utm_"+i,l.toLowerCase().replace(/\s+/g,"_"))}),r.search=o.toString();const n=r.toString();b(C,'<a href="'+n+'" target="_blank" rel="noreferrer noopener">'+n+'</a><button type="button" class="kn-tool-copy" data-kn-copy>copy</button>'),C.querySelector("[data-kn-copy]")?.addEventListener("click",()=>{navigator.clipboard?.writeText(n),y("URL copied")})});const yt=document.querySelector("[data-kn-slug-form]"),bt=document.querySelector("[data-kn-slug-input]"),Nt=document.querySelector("[data-kn-slug-strip]"),N=document.querySelector("[data-kn-slug-out]"),Dt=new Set(["the","a","an","of","and","or","to","in","on","for","with","is","are","be","at","by","from","as"]),Rt=(t,a)=>{let e=(t||"").normalize("NFD").replace(/[\u0300-\u036f]/g,"");return e=e.toLowerCase().trim(),a&&(e=e.split(/\s+/).filter(r=>!Dt.has(r)).join(" ")),e=e.replace(/&/g," and "),e=e.replace(/[^a-z0-9\s-]/g,""),e=e.replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,""),e};if(yt&&bt&&N&&yt.addEventListener("submit",t=>{t.preventDefault();const a=Rt(bt.value,Nt?.checked);if(!a){b(N,'<span class="kn-tool-out-empty">\u2014 enter a title to generate</span>');return}b(N,'<span class="kn-stat"><b>/'+a+"</b><span>"+a.length+' chars</span></span><button type="button" class="kn-tool-copy" data-kn-copy>copy</button>'),N.querySelector("[data-kn-copy]")?.addEventListener("click",()=>{navigator.clipboard?.writeText(a),y("Slug copied")})}),!ft&&"IntersectionObserver"in window){const t=new IntersectionObserver(a=>{a.forEach(e=>{e.isIntersecting&&(e.target.classList.add("is-visible"),t.unobserve(e.target))})},{threshold:.12});document.querySelectorAll(".kn-main .reveal:not(.is-visible)").forEach(a=>t.observe(a))}else document.querySelectorAll(".kn-main .reveal").forEach(t=>t.classList.add("is-visible"))})();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.