diff --git a/src/dict/a-dict/lens-boot.c7fac8b7.js b/src/dict/a-dict/lens-boot.c7fac8b7.js new file mode 100644 index 000000000..84ff2b950 --- /dev/null +++ b/src/dict/a-dict/lens-boot.c7fac8b7.js @@ -0,0 +1,2 @@ +/*! minified at deploy - readable source: /lens-boot.src.js */ +(function(){"use strict";var e=null,t=!1,n=!1;function r(){return e||=import(`/a/lens.a9ee703b.js`).then(function(){t=!0},function(t){throw e=null,t}),e}function i(){var e=new URLSearchParams(location.search);if([`url`,`vs`,`view`,`lens`,`cf`].some(function(t){return e.has(t)}))return!0;try{var t=localStorage.getItem(`lx-mode`);return!!t&&t!==`both`}catch{return!1}}function a(e){return e.target&&e.target.closest&&e.target.closest(`button,input,select,textarea`)}function o(e){a(e)&&r().catch(function(){})}function s(e){var i=e.target&&e.target.closest&&e.target.closest(`button`);if(!(!i||t||n)){e.preventDefault(),e.stopImmediatePropagation();var a=function(){n=!0,i.click(),n=!1};r().then(a,a)}}function c(e){if(!(t||n)){e.preventDefault(),e.stopImmediatePropagation();var i=e.target,a=e.submitter,o=function(){n=!0,i.requestSubmit(a||void 0),n=!1};r().then(o,o)}}var l=document.getElementById(`lx-form`),u=l&&(l.closest(`.content`)||l.parentNode);u&&(u.addEventListener(`pointerover`,o,{passive:!0}),u.addEventListener(`focusin`,o,{passive:!0}),u.addEventListener(`click`,s,!0),u.addEventListener(`submit`,c,!0),i()&&r().catch(function(){}))})(); \ No newline at end of file diff --git a/src/dict/a-dict/lens-browser.1ec1cc2c.js b/src/dict/a-dict/lens-browser.1ec1cc2c.js deleted file mode 100644 index d09a55f3e..000000000 --- a/src/dict/a-dict/lens-browser.1ec1cc2c.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! minified at deploy - readable source: /lens-browser.src.js */ -(function(){"use strict";function e(e){return String(e??``).replace(/&/g,`&`).replace(//g,`>`).replace(/"/g,`"`)}function t(e){return e==null?`?`:e<1024?e+` B`:e<1048576?(e/1024).toFixed(1)+` KB`:(e/1048576).toFixed(2)+` MB`}function n(t,n,r,i){var a=n?` `+e(n.text)+``:``,o=r?`
`+e(r)+`
`:``;return`
`+e(t)+a+`
`+o+(i||``)+`
`}function r(t){var n=Object.keys(t).filter(function(e){return t[e]!=null&&t[e]!==``});return n.length?``+n.map(function(n){return``}).join(``)+`
`+e(n)+``+e(t[n])+`
`:`
none
`}function i(t){return`
`+e(t)+`
`}function a(e){var t=0;return(function e(n){!n||typeof n!=`object`||(t++,(n.children||[]).forEach(e))})(e),t}function o(t,r){t||={};var i=t.status===`available`?{text:`runtime tools`,kind:`ok`}:t.status===`lab-required`?{text:`lab required`,kind:`warn`}:t.status===`error`?{text:`probe error`,kind:`warn`}:{text:`not observed`,kind:`off`},a=`
The HTTP scan found `+(r.agent&&r.agent.webmcp&&r.agent.webmcp.found?`a source marker`:`no source marker`)+`. Browser Run runtime discovery is a separate observation.
`;if(t.status===`available`){var o=Array.isArray(t.tools)?t.tools:[];a+=o.length?`
`+o.map(function(t){return``+e(t.name||`unnamed tool`)+``}).join(``)+`
`:`
The runtime API answered, but listed no tools.
`,a+=`
Discovery only. Lens does not call WebMCP tools.
`}else a+=`
`+e(t.detail||`No runtime WebMCP tools were observed.`)+`
`,a+=`
Use node scripts/lens-webmcp.mjs `+e(r.finalUrl||r.url)+` on the current machine for a Chrome-beta lab probe.
`;return n(`Runtime WebMCP`,i,`What a browser session can discover after the page runs.`,a)}function s(n,r){var i=r&&r.anatomy;if(!i||i.rawBytes==null)return``;var a=(n.content||``).length;if(n.contentTruncated)return`
HTTP vs rendered: `+e(t(i.rawBytes))+` → ≥`+e(t(a))+` (the rendered body hit the capture cap). A word-level comparison needs the full body, so Lens leaves it uncounted.
`;var o=i.wordCount||0,s=(n.content||``).replace(/<(script|style|noscript|template|svg)[\s\S]*?<\/\1>/gi,` `).replace(/<[^>]+>/g,` `).split(/\s+/).filter(Boolean).length,c=Math.abs(s-o)<=Math.max(10,o*.15)?`The HTTP fetch already carries this page; JavaScript changes little a reader needs.`:s>Math.max(o*3,o+150)?`This page is thin until JavaScript runs: a plain fetch gets `+o+` of the `+s+` words a browser ends up with.`:`JavaScript reshapes this page: the rendered copy disagrees with the HTTP fetch.`;return`
HTTP vs rendered: `+e(t(i.rawBytes))+` → `+e(t(a))+(n.contentTruncated?`+`:``)+` · `+o+` → `+s+` words. `+e(c)+`
`}function c(c,l){var u=c.accessibilityTree,d={status:c.status==null?`unknown`:c.status,title:c.title||`(untitled)`,"final URL":c.finalUrl||c.url,"rendered HTML":t((c.content||``).length)+(c.contentTruncated?` (capped)`:``),"rendered Markdown":t((c.markdown||``).length),"accessibility nodes":u?a(u):`not returned`,observation:c.cached?`KV cache`:`fresh Browser Run`,elapsed:(c.elapsedMs||0)+` ms`},f=s(c,l);return f+=n(`Browser facts`,{text:c.status==null?`rendered`:String(c.status),kind:`ok`},`A rendered observation after page JavaScript. It is not folded into the AadharshBot HTTP readiness score.`,r(d)),c.screenshot&&(f+=n(`Rendered screenshot`,{text:`PNG`,kind:`ok`},`The viewport after the Browser Run page load.`,`Browser Run screenshot of `+e(c.finalUrl||c.url)+``)),f+=o(c.webmcp,l),f+=n(`Rendered HTML`,{text:t((c.content||``).length)},`The DOM returned after Browser Run executed the page. This is source evidence, shown escaped.`,i(c.content||`(no content)`)),f+=n(`Rendered Markdown`,{text:t((c.markdown||``).length)},`The browser's clean text representation, separate from Lens's dependency-free HTTP reconstruction.`,i(c.markdown||`(no Markdown)`)),u&&(f+=n(`Accessibility tree`,{text:a(u)+` nodes`,kind:`ok`},`The browser's structured view of roles, names, states, and hierarchy.`,i(JSON.stringify(u,null,2)))),f}function l(e,t,n,r){if(!t){e.innerHTML=`
Paste a URL above, then ask Browser Run to render it here.
`;return}if(n){e.innerHTML=c(n,t);return}e.innerHTML=`
Third surface: the rendered browser. This is separate from the HTTP Machine view and the Human view in your own browser.
It runs page JavaScript and returns rendered HTML, a screenshot, Markdown, an accessibility tree, and a runtime WebMCP result when the browser exposes one. It does not execute site tools.
`;var i=document.getElementById(`lx-browser-run`);i&&i.addEventListener(`click`,r)}function u(t,n,r,i,a){t.innerHTML=`
Cloudflare Browser Run is opening a rendered session…
`,fetch(`/lens/browser?url=`+encodeURIComponent(n.finalUrl||n.url)).then(function(e){return e.json().then(function(t){if(!e.ok||!t||!t.ok)throw Error(t&&t.error||`Browser Run returned `+e.status);return t})}).then(r).catch(function(n){t.innerHTML=`
Browser Run could not render this URL: `+e(n&&n.message||n)+`
`;var r=document.getElementById(`lx-browser-run`);r&&r.addEventListener(`click`,a),i(n)})}window.LensBrowser={mount:l,run:u}})(); \ No newline at end of file diff --git a/src/dict/a-dict/lens-browser.62f8bf05.js b/src/dict/a-dict/lens-browser.62f8bf05.js new file mode 100644 index 000000000..16d4516c7 --- /dev/null +++ b/src/dict/a-dict/lens-browser.62f8bf05.js @@ -0,0 +1,2 @@ +/*! minified at deploy - readable source: /lens-browser.src.js */ +(function(){"use strict";function e(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:null}function t(e){return String(e??``).replace(/&/g,`&`).replace(//g,`>`).replace(/"/g,`"`)}function n(e){return e==null?`?`:e<1024?e+` B`:e<1048576?(e/1024).toFixed(1)+` KB`:(e/1048576).toFixed(2)+` MB`}function r(e){return e==null?`?`:e>=1e6?(e/1e6).toFixed(1)+`M`:e>=1e3?(e/1e3).toFixed(1)+`k`:String(e)}function i(e,n,r,i){var a=n?` `+t(n.text)+``:``,o=r?`
`+t(r)+`
`:``;return`
`+t(e)+a+`
`+o+(i||``)+`
`}function a(e){var n=Object.keys(e).filter(function(t){return e[t]!=null&&e[t]!==``});return n.length?``+n.map(function(n){return``}).join(``)+`
`+t(n)+``+t(e[n])+`
`:`
none
`}function o(e){return`
`+t(e)+`
`}function s(t){var n=0;return(function t(r){e(r)&&(n++,(r.children||[]).forEach(t))})(t),n}function c(e,n){e||={};var r=e.status===`available`?{text:`runtime tools`,kind:`ok`}:e.status===`lab-required`?{text:`lab required`,kind:`warn`}:e.status===`error`?{text:`probe error`,kind:`warn`}:{text:`not observed`,kind:`off`},a=`
The HTTP scan found `+(n.agent&&n.agent.webmcp&&n.agent.webmcp.found?`a source marker`:`no source marker`)+`. Browser Run runtime discovery is a separate observation.
`;if(e.status===`available`){var o=Array.isArray(e.tools)?e.tools:[];a+=o.length?`
`+o.map(function(e){return``+t(e.name||`unnamed tool`)+``}).join(``)+`
`:`
The runtime API answered, but listed no tools.
`,a+=`
Discovery only. Lens does not call WebMCP tools.
`}else a+=`
`+t(e.detail||`No runtime WebMCP tools were observed.`)+`
`,a+=`
Use node tools/lens-webmcp.mjs `+t(n.finalUrl||n.url)+` on the current machine for a Chrome-beta lab probe.
`;return i(`Runtime WebMCP`,r,`What a browser session can discover after the page runs.`,a)}function l(e,t){return t?Math.min(100,Math.round(e/t*100)):null}function u(e,t){var n=[];return e.jsonld!=null&&n.push([e.jsonld,`JSON-LD block`]),e.headings!=null&&n.push([e.headings,`heading`]),e.links!=null&&n.push([e.links,`link`]),n.map(function(e){return e[0]+` `+e[1]+(e[0]===1?``:`s`)}).join(` · `)}function d(e,r){var i=r&&r.anatomy;if(!i||i.rawBytes==null)return``;var a=(e.content||``).length,o=i.wordCount||0,s=e.tally;if(!s){if(e.contentTruncated)return`
HTTP vs rendered: `+t(n(i.rawBytes))+` → ≥`+t(n(a))+` (the rendered body hit the capture cap). A word-level comparison needs the full body, so Lens leaves it uncounted.
`;s={words:(e.content||``).replace(/<(script|style|noscript|template|svg)[\s\S]*?<\/\1>/gi,` `).replace(/<[^>]+>/g,` `).split(/\s+/).filter(Boolean).length}}var c=s.words||0,d=l(o,c),f=d===null?`The render returned no readable text, so there is nothing to compare against the HTTP fetch.`:Math.abs(c-o)<=Math.max(10,o*.15)?`A crawler that never runs JavaScript sees essentially all of this page.`:c`+d+`% of this page: `+o+` of the `+c+` words a browser ends up with.`,p=u(s,i);return`
HTTP vs rendered: `+f+`
`+t(n(i.rawBytes))+` → `+t(n(a))+(e.contentTruncated?`+`:``)+` · `+o+` → `+c+` words`+(p?` · after render: `+p:``)+(e.engine?` · engine: `+t(e.engine):``)+`
`}var f=[{id:`expand`,label:`Open collapsed sections`,claim:`Opens every
disclosure widget, then re-reads the page.`},{id:`consent`,label:`Remove the consent overlay`,claim:`Removes large fixed overlays worded like a consent or newsletter wall. Presses nothing.`}];function p(){return`
After interaction:
Lens runs one fixed, published script in its own copy of the page, then re-reads it. Each click spends one of your three renders a minute.
`+f.map(function(e){return``}).join(``)+`
`}function m(e,n,r){var i=e.interaction;if(!i)return``;var a;if(i.note===`no-receipt`){var o=r&&r.headers&&(r.headers[`content-security-policy`]||r.headers[`Content-Security-Policy`])||``;a=/script-src/i.test(o)?`The injected script never ran. This page's Content-Security-Policy refuses inline script, so Lens could not interact with it — which is itself something a machine learns about this page.`:`The injected script did not run, and the HTTP response carried no policy that explains it. Lens does not know why.`}else if(i.note===`forged-receipt`)a=`This page returned a forged result marker for a script Lens did not run. Lens discarded it. That is worth knowing on its own.`;else if(i.note===`threw`)a=`The script ran and threw inside this page, so Lens is not claiming it changed anything.`;else if(!i.acted)a=`Nothing to do here. Lens examined `+(i.scanned||0)+` candidate`+(i.scanned===1?``:`s`)+` and none matched.`;else{var s=i.acted,c=s+` element`+(s===1?``:`s`),l=e.tally&&e.tally.words||0,u=n&&n.tally?n.tally.words:i.before?i.before.words:null;if(u==null)a=``+c+` changed. Lens has no plain snapshot to measure this against, so it is not claiming a delta.`;else if(l<=u)a=``+c+` changed and the page did not grow. The wall was cosmetic — the text was already there for a machine.`;else{var d=Math.min(100,Math.round((l-u)/l*100));a=``+c+` changed, and the page went from `+u+` to `+l+` words: `+d+`% of what a machine can now read was behind something it cannot click.`}}var f=[];return i.scanned&&f.push(i.scanned+` candidate`+(i.scanned===1?``:`s`)+` examined`),e.engine&&f.push(`engine: `+t(e.engine)),f.push(e.cached?`KV cache`:`fresh Browser Run`),`
After “`+t(i.label)+`”: `+a+`
`+f.join(` · `)+`
`+(i.id===`consent`&&i.acted?`
Lens removed the overlay from its own copy of the page. It did not accept, refuse, or record any consent choice. If this was a paywall, you are looking at a page the publisher did not intend to show you, and Lens will not fetch anything further.
`:``)+`
What exactly ran — the script is published verbatim.
`}function h(e,n){return!e||!e.screenshot||!n.screenshot?``:i(`Before and after`,{text:`PNG`,kind:`ok`},`The same page, rendered twice: once as delivered, once after the script ran.`,`
Before the interaction
as delivered
After the interaction
after the script
`)}function g(e,o){var s=e&&e.message||String(e||`unknown`),c=`
`+t(/rate-limit|budget/i.test(s)?`No rendered snapshot right now: the shared Browser Run budget is spent. Everything below came from the HTTP fetch and is unaffected.`:`Browser Run could not render this URL: `+s)+`
`;if(!o)return c;var l=o.anatomy||{},u=o.structured||{},d=o.cost&&o.cost.tiers&&o.cost.tiers[0];return c+=i(`What a render would add`,{text:`not run`,kind:`warn`},`Rendered HTML after the page's JavaScript, a screenshot, the browser's own Markdown, and its accessibility tree. The gap between that and the HTTP response is this pane's whole point, and measuring it needs the render.`,``),c+=i(`What the HTTP fetch already got`,{text:`observed`,kind:`ok`},`None of this needed a browser. It is the same response every machine lens on this page is reading.`,a({status:o.status==null?`unknown`:o.status,title:u.title||`(untitled)`,"final URL":o.finalUrl||o.url,"content type":o.contentType||`(none)`,"HTTP payload":n(l.rawBytes)+(o.truncated?` (capped)`:``),"readable text":l.wordCount==null?n((l.text||``).length):l.wordCount+` words`,headings:l.headings?l.headings.length:0,"links in head":u.relLinks?u.relLinks.length:0,"cost to read":d?`~`+r(d.tokens)+` tokens of `+d.label:`not modelled`})),c}function _(e,r){var l=e.accessibilityTree,u={status:e.status==null?`unknown`:e.status,title:e.title||`(untitled)`,"final URL":e.finalUrl||e.url,"rendered HTML":n((e.content||``).length)+(e.contentTruncated?` (capped)`:``),"rendered Markdown":n((e.markdown||``).length),"accessibility nodes":l?s(l):`not returned`,observation:e.cached?`KV cache`:`fresh Browser Run`,elapsed:(e.elapsedMs||0)+` ms`},f=d(e,r);return f+=i(`Browser facts`,{text:e.status==null?`rendered`:String(e.status),kind:`ok`},`A rendered observation after page JavaScript. It is not folded into the AadharshBot HTTP readiness score.`,a(u)),e.screenshot?f+=i(`Rendered screenshot`,{text:`PNG`,kind:`ok`},`The viewport after the Browser Run page load.`,`Browser Run screenshot of `+t(e.finalUrl||e.url)+``):e.screenshotDropped&&(f+=i(`Rendered screenshot`,{text:`too large`,kind:`warn`},`Browser Run captured the page, and the full-page PNG came back at `+n(e.screenshotDropped)+` — past what this endpoint will return inline, so it was dropped. The rest of the snapshot is unaffected.`,``)),f+=c(e.webmcp,r),f+=i(`Rendered HTML`,{text:n((e.content||``).length)},`The DOM returned after Browser Run executed the page. This is source evidence, shown escaped.`,o(e.content||`(no content)`)),f+=i(`Rendered Markdown`,{text:n((e.markdown||``).length)},`The browser's clean text representation, separate from Lens's dependency-free HTTP reconstruction.`,o(e.markdown||`(no Markdown)`)),l&&(f+=i(`Accessibility tree`,{text:s(l)+` nodes`,kind:`ok`},`The browser's structured view of roles, names, states, and hierarchy.`,o(JSON.stringify(l,null,2)))),f}function v(e,t){for(var n=e.querySelectorAll(`.lx-do-chip`),r=0;rPaste a URL above, then ask Browser Run to render it here.`;return}if(n){e.innerHTML=(i?m(i,n,t):``)+p()+(i?h(n,i):``)+_(n,t),v(e,r);return}e.innerHTML=`
Third surface: the rendered browser. This is separate from the HTTP Machine view and the Human view in your own browser.
It runs page JavaScript and returns rendered HTML, a screenshot, Markdown, an accessibility tree, and a runtime WebMCP result when the browser exposes one. It does not execute site tools.
`;var a=document.getElementById(`lx-browser-run`);a&&a.addEventListener(`click`,r)}function b(e,t,n,r,i,a){e.innerHTML=`
Cloudflare Browser Run is opening a rendered session`+(a?` and running the published script`:``)+`…
`,fetch(`/lens/browser?url=`+encodeURIComponent(t.finalUrl||t.url)+(a?`&do=`+encodeURIComponent(a):``)).then(function(e){return e.text().then(function(t){var n=null;try{n=JSON.parse(t)}catch{}if(!n)throw Error(`the server answered with `+(e.headers.get(`content-type`)||`an unknown body`)+` instead of a snapshot (HTTP `+e.status+`). That is the edge or the runtime failing the route, not the target page.`);if(!e.ok||!n.ok)throw Error(n.error||`Browser Run returned `+e.status);return n})}).then(n).catch(function(n){e.innerHTML=g(n,t);var a=document.getElementById(`lx-browser-run`);a&&a.addEventListener(`click`,i),r(n)})}window.LensBrowser={mount:y,run:b}})(); \ No newline at end of file diff --git a/src/dict/a-dict/lens.32b705b8.js b/src/dict/a-dict/lens.a9ee703b.js similarity index 99% rename from src/dict/a-dict/lens.32b705b8.js rename to src/dict/a-dict/lens.a9ee703b.js index a4679eef4..7b28e5b78 100644 --- a/src/dict/a-dict/lens.32b705b8.js +++ b/src/dict/a-dict/lens.a9ee703b.js @@ -1,5 +1,5 @@ /*! minified at deploy - readable source: /lens.src.js */ -(function(){"use strict";function e(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:null}function t(e){return typeof e==`string`&&e!==``?e:null}var n=document.getElementById(`lx-form`);if(!n)return;var r=document.getElementById(`lx-url`),i=document.getElementById(`lx-panes`),a=document.getElementById(`lx-human-body`),o=document.getElementById(`lx-machine-body`),s=document.getElementById(`lx-machine-top`),c=document.getElementById(`lx-machine-scroll`),l=document.getElementById(`lx-browser-body`),u=document.getElementById(`lx-machine-h`),d=document.getElementById(`lx-human-h`),f=document.getElementById(`lx-mode-note`),p=document.getElementById(`lx-status`),m=document.getElementById(`lx-toolbar`),h=document.getElementById(`lx-addr-vs`),g=document.getElementById(`lx-url-vs`),_=document.getElementById(`lx-vs-toggle`),ee=document.getElementById(`lx-vs-close`),v=document.getElementById(`lx-vs`),y=null,b=null,x=null,S=`both`,C=`anatomy`,w={markdown:!1,semantic:!1,contract:!1,authority:!1,receipt:!1,dictionary:!1,ech:!1},T=!1,E=!1,D=!1,O=!1,te=null,ne={readiness:`Agent-ready?`,anatomy:`Raw response`,reader:`Reader's guess`,wire:`What it costs`,structured:`What it claims`,ai:`Model cost`,terms:`Who's allowed`,discovery:`Agent doors`,tools:`What it accepts`},k=null,A=!1,j=null,M=!1,re=null,N=!1,P=null,F=!1;function I(e){return String(e??``).replace(/&/g,`&`).replace(//g,`>`).replace(/"/g,`"`)}var ie=(function(){try{return JSON.parse(document.getElementById(`lx-glossary`).textContent)}catch{return{}}})(),ae=[];Object.keys(ie).forEach(function(e){[ie[e].label].concat(ie[e].alt||[]).forEach(function(t){ae.push([e,t])})}),ae.sort(function(e,t){return t[1].length-e[1].length});var oe=!1;function se(e,t){var n=ie[e];return n?``+I(t)+``:I(t)}function L(e,t){for(var n=String(e),r={},i=``,a=0;;){for(var o=null,s=0;s`+o.text+``,a=o.at+o.text.length}return i+n.slice(a)}window.matchMedia&&(matchMedia(`(hover: none)`).matches||matchMedia(`(pointer: coarse)`).matches)||import(`/a/hoist.d9081560.js`).then(function(e){var t=document.getElementById(`lx-tip`);if(t){e.createHoist({node:t,anchorName:`--lx-tip`,findTarget:function(e){return e&&e.closest?e.closest(`.lx-term`):null},contentFor:function(e){var t=ie[e.getAttribute(`data-t`)];return t?``+I(t.label)+``+I(t.plain)+(t.more?``+I(t.more)+``:``):``}}),oe=!0;for(var n=document.querySelectorAll(`.lx-term[title]`),r=0;r=1e6?(e/1e6).toFixed(1)+`M`:e>=1e3?(e/1e3).toFixed(1)+`k`:String(e)}function B(e){return e>=.1?`$`+e.toFixed(2):e>=5e-4?`$`+e.toFixed(4):e>0?`<$0.0005`:`$0`}function ce(t){return e(t)!==null&&Object.keys(t).length>0}function le(){var e=y&&y.cost,t=y&&y.readiness,n=t&&t.field,r=n&&n.overall!=null?``:``;if(!e||!e.tiers||e.tiers.length<2)return r?`
`+r+`Lens observed `+I(n.overall)+`/100 field access. The independent Cloudflare and Readability inputs sit under Agent-ready?.
`:``;var i=e.rates&&e.rates[0]||{usdPerMtok:3},a=e.tiers[0],o=e.tiers.filter(function(e){return e.key===`markdown`})[0]||e.tiers.filter(function(e){return e.key===`text`})[0]||e.tiers[e.tiers.length-1],s=a.tokens/1e6*i.usdPerMtok,c=s*1e3,l=o&&o.tokens&&o!==a?Math.round(a.tokens/o.tokens):0,u=`A person reads this page for free. A machine pays `+B(s)+` for the same words, because it chews through `+z(a.tokens)+` `+se(`token`,`tokens`)+` of raw HTML`+(l>1?`. As clean text it would cost ×`+l+` less`:``)+`. At 1,000 reads that is `+B(c)+` of inference, and the publisher collects $0.00.`;return`
`+r+u+`
`}var ue={markdownNegotiation:`Read mostly by coding agents; answer engines still scrape HTML.`,robotsTxtAiRules:`Honored by the major AI crawlers that identify themselves.`,contentSignals:`~3.8M domains publish it; Google says it changes nothing.`,webBotAuth:`Required for pay-per-crawl; almost no verifiers exist yet.`,dnsAid:`A 2026 Linux Foundation proposal; near-zero deployment.`,mcpServerCard:`MCP is the one surface here with a real consumer ecosystem.`,a2aAgentCard:`A2A discovery is early: 50+ orgs, nowhere near MCP's scale.`,apiCatalog:`An IETF linkset standard; discovery clients stay thin.`,llmsTxt:`~6% of top sites publish it; Google won't read it.`};function de(){var e=document.getElementById(`lx-initial-data`);if(!e)return null;try{return JSON.parse(e.textContent||`null`)}catch{return null}}var V=de(),fe={both:`Compare puts Human, HTTP Machine, and Browser Run side by side. Predict the machine pane; the miss is the lesson.`,human:`Human is the page as a person receives it. Every other view subtracts the person.`,machine:`Machine is an evidence-first briefing. Read claims first, then check each against its evidence.`,browser:`Browser Run renders after JavaScript beside HTTP. Disagreement reveals a JS dependency.`,delta:`Delta toggles hypothetical infrastructure. Predict, flip, check.`};function pe(){return S===`both`?`Compare`:S.charAt(0).toUpperCase()+S.slice(1)}function me(){var e=new URLSearchParams(location.search),t=[`both`,`human`,`machine`,`browser`,`delta`],n=Object.keys(ne),r={markdown:!1,semantic:!1,contract:!1,authority:!1,receipt:!1,dictionary:!1,ech:!1};return(e.get(`cf`)||``).split(`,`).forEach(function(e){Object.prototype.hasOwnProperty.call(r,e)&&(r[e]=!0)}),{url:e.get(`url`)||``,vs:e.get(`vs`)||``,view:t.indexOf(e.get(`view`))>=0?e.get(`view`):`both`,lens:n.indexOf(e.get(`lens`))>=0?e.get(`lens`):`anatomy`,counterfactuals:r}}function H(e){var t;try{t=new URL(location.href)}catch{return}t.pathname=`/lens`,[`url`,`vs`,`view`,`lens`,`cf`].forEach(function(e){t.searchParams.delete(e)});var n=r.value.trim();if(n&&t.searchParams.set(`url`,n),D&&g&&g.value.trim())t.searchParams.set(`vs`,g.value.trim());else{S!==`both`&&t.searchParams.set(`view`,S),C!==`anatomy`&&t.searchParams.set(`lens`,C);var i=Object.keys(w).filter(function(e){return w[e]});i.length&&t.searchParams.set(`cf`,i.join(`,`))}var a=t.pathname+(t.search||``)+(t.hash||``);if(a!==location.pathname+location.search+location.hash)try{(e?history.pushState:history.replaceState).call(history,null,``,a)}catch{}}function he(){var e=document.getElementById(`lx-sow-dialog`);if(e&&!e.open&&e.showModal)try{e.showModal()}catch{}}function ge(e){var t=e&&e.error||`Something went wrong.`;y=null,b=null,x=null,k=null,P=null,j=null,A=!1,F=!1,M=!1,o.innerHTML=`
`+I(t)+`
`,s&&(s.innerHTML=``),a.innerHTML=`
No page to show.
`,W(),p.innerHTML=`Failed: `+I(t)+``}function _e(e){if(!T){if(e=(e||``).trim(),!e){r.focus();return}D&&Ce(!1),T=!0,b=null,x=null,k=null,P=null,j=null,A=!1,F=!1,M=!1,r.value=e,y&&(y.finalUrl||y.url)!==e&&(w={markdown:!1,semantic:!1,contract:!1,authority:!1,receipt:!1,dictionary:!1,ech:!1},mt()),H(!1),a.innerHTML=`
Fetching as AadharshBot…
`,o.innerHTML=`
Reading the markup…
`,W(),p.innerHTML=`Fetching `+I(e)+` server-side…`;var t=function(t){return fetch(`/lens/fetch?url=`+encodeURIComponent(e)+(t?`&phases=`+t:``)).then(function(e){if((e.headers.get(`content-type`)||``).indexOf(`json`)<0)throw Error(`The lens engine returned an unexpected response.`);return e.json()})};t(`page`).then(function(e){!e||!e.ok||(y=e,Ee(),X(),o.innerHTML=`
Read the page. Checking agent surfaces…
`)}).catch(function(){}).then(function(){return t()}).then(function(e){if(T=!1,!e||!e.ok){ge(e);return}y=e,Ee(),Y(),W(),X(),ke()}).catch(function(e){T=!1,o.innerHTML=`
Network error: `+I(e&&e.message||e)+`
`,p.innerHTML=`Network error.`})}}var ve=[[`llms`,`llms.txt`],[`markdown`,`markdown negotiation`],[`mcp`,`MCP`],[`agentCard`,`an agent card`],[`apiCatalog`,`an API catalog`]];function U(e){try{return new URL(e).hostname.replace(/^www\./,``)}catch{return String(e||``)}}function ye(e){var t=U(e.finalUrl||e.url),n=e.level>=5?`ok`:e.level>=3?``:`warn`,r=ve.filter(function(t){return e.surfaces&&e.surfaces[t[0]]}).map(function(e){return``+I(e[1])+``}).join(``),i=e.cost?`~`+z(e.cost.tokens)+` `+se(`token`,`tokens`)+` · `+B(e.cost.usdPerRead)+`/read`:`no cost model (non-HTML)`,a=[[`response`,I((e.status==null?`?`:e.status)+` `+Z(e.status||0))],[`terms`,I(e.tier||`unknown`)],[`agent doors`,I(String(e.doors||0))],[`one model read`,i],[`payload`,I(R(e.bytes))],[`words`,I(String(e.wordCount||0))]].map(function(e){return``+I(e[0])+``+e[1]+``}).join(``);return`
`+(e.readiness==null?`?`:I(e.readiness))+`/100`+J(`Level `+(e.level==null?`?`:e.level),n,e.levelNote||``)+``+I(e.levelName||``)+`
`+a+`
`+(r||`no machine surfaces published`)+`
`}function be(e){if(!e||!e.ok){v.innerHTML=`
`+I(e&&e.error||`The comparison did not run.`)+`
`;return}var t=e.left,n=e.right,r=``;if(t&&n&&t.readiness!=null&&n.readiness!=null){var i=t.readiness>=n.readiness?t:n,a=i===t?n:t,o=ve.filter(function(e){return i.surfaces&&i.surfaces[e[0]]&&!(a.surfaces&&a.surfaces[e[0]])}).map(function(e){return e[1]});r=`
`+(i.readiness===a.readiness?``+I(i.readiness)+` apiece. Same score, one rubric.`:``+I(U(i.finalUrl||i.url))+` `+I(i.readiness)+`, `+I(U(a.finalUrl||a.url))+` `+I(a.readiness)+`.`)+(o.length?` The gap is published surfaces: `+I(o.join(`, `))+`.`:` Both publish the same surfaces; the gap sits in the individual checks.`)+`
`}v.innerHTML=`
Two sites, one rubric, same evidence rules. Every number here links back to a full scan.
`+ye(t||{})+ye(n||{})+`
`+r}function xe(e){D=!!e,[m,f,i].forEach(function(e){e&&e.classList.toggle(`lx-off`,D)}),v&&v.classList.toggle(`lx-off`,!D),h&&h.classList.toggle(`lx-off`,!D&&!(g&&g.value.trim())),_&&_.setAttribute(`aria-expanded`,h&&!h.classList.contains(`lx-off`)?`true`:`false`)}function Se(e,t,n){O||(e=(e||``).trim(),t=(t||``).trim(),!(!e||!t)&&(O=!0,r.value=e,g&&(g.value=t),h&&h.classList.remove(`lx-off`),xe(!0),H(n!==!1),v.innerHTML=`
Scanning both sites as AadharshBot…
`,p.innerHTML=`Comparing `+I(U(e))+` and `+I(U(t))+` server-side…`,fetch(`/lens/compare.json?left=`+encodeURIComponent(e)+`&right=`+encodeURIComponent(t)).then(function(e){return e.json()}).then(function(n){O=!1,be(n),p.innerHTML=n&&n.ok?`Head-to-head`+I(U(e))+` vs `+I(U(t))+`both fetched server-side as AadharshBot`:`Comparison failed: `+I(n&&n.error||`unknown error`)+``}).catch(function(e){O=!1,v.innerHTML=`
Network error: `+I(e&&e.message||e)+`
`,p.innerHTML=`Network error.`})))}function Ce(e){g&&(g.value=``),xe(!1),e!==!1&&H(!0),y?X():p.innerHTML=`Idle. Nothing is fetched until you ask, and then just once, server-side, with no logging.`}function we(e,t){var n=document.getElementById(`lx-human-h`);n&&(n.innerHTML=`Human view `+I(e)+` `+I(t)+``)}function Te(e){a.classList.toggle(`is-bleed`,!!e)}function Ee(){if(y.framable){Te(!0),we(`Live`,`loaded by your browser, like a real tab`),a.innerHTML=``;return}Oe()}function De(e,t){return e&&e.reason===`budget_spent`||t===429?null:e&&e.error&&!/^Browser Run (returned|request failed)/.test(e.error)?e.error:`A rendered snapshot needs a real headless Chrome, and this one did not come back (upstream said `+(t||`no status`)+`)`}function Oe(){var e=y.finalUrl;je(null,`Asking for a rendered snapshot as well`),fetch(`/lens/shot?url=`+encodeURIComponent(e)).then(function(t){var n=t.headers.get(`content-type`)||``;return t.ok&&n.indexOf(`image/`)===0?!y||(y.finalUrl||y.url)!==e?void 0:(Te(!0),we(`Refused`,(y.frameReason?`framing refused (`+y.frameReason+`)`:`this site refuses to be framed`)+`; a machine's render stands in`),t.blob().then(function(t){if(!(!y||(y.finalUrl||y.url)!==e)){te&&=(URL.revokeObjectURL(te),null);var n=URL.createObjectURL(t);te=n;var r=new Image;r.className=`lx-shot`,r.alt=`Rendered snapshot of `+e,r.onload=function(){te===n&&(URL.revokeObjectURL(n),te=null)},r.src=n,a.innerHTML=``,a.appendChild(r)}})):t.json().then(function(e){je(De(e,t.status)||e&&e.error||`snapshot failed (`+t.status+`)`)}).catch(function(){je(De(null,t.status)||`snapshot failed (`+t.status+`)`)})}).catch(function(){je(`The snapshot request did not go through`)})}function W(){if(!y){l.innerHTML=`
Scan a URL first.Then this pane fetches it with a real Chrome, so the site's JavaScript runs. Many pages look empty until it does.
`;return}if(!window.LensBrowser){l.innerHTML=`
Browser Run: rendered HTML, screenshot, Markdown, and accessibility tree.
`;var e=document.getElementById(`lx-browser-run`);e&&e.addEventListener(`click`,Ae);return}window.LensBrowser.mount(l,y,b,Ae,x)}function ke(){if(!(b||E||!y)&&(S===`both`||S===`browser`)){try{if(matchMedia(`(hover: none)`).matches||matchMedia(`(pointer: coarse)`).matches)return}catch{}Ae()}}function Ae(e){if(E||!y)return;t(e)===null&&(e=``),E=!0;function n(){if(!window.LensBrowser){E=!1,W();return}window.LensBrowser.run(l,y,function(t){E=!1,e?x=t:b=t,W(),X()},function(e){E=!1},Ae,e)}if(window.LensBrowser){n();return}var r=document.createElement(`script`);r.src=`/a/lens-browser.821aa61e.js`,r.onload=n,r.onerror=function(){E=!1,W()},document.head.appendChild(r)}function je(e,t){Te(!1),we(`Reader`,t?`embedding blocked, so here is the readable text while a snapshot is fetched`:`embedding blocked, no snapshot, so here is the readable text`);var n=y.anatomy,r=``;if(t?r=`
`+I(t)+`…
`:e&&(r=`
`+I(String(e).replace(/\.\s*$/,``))+`. Showing the readable text instead.
`),!n){a.innerHTML=r+`
No readable text either.
`;return}var i=y.structured&&y.structured.title||``;if(i&&(r+=`
`+I(i)+`
`),n.headings&&n.headings.length){r+=`
Document outline
`;for(var o=0;oh`+s.level+` `+I(s.text)+`
`}r+=``}r+=`
`+I(n.text||`(no extractable text)`)+`
`,a.innerHTML=r}function G(e,t,n,r){var i=t?` `+I(t.text)+``:``,a=n?`
`+L(I(n))+`
`:``;return`
`+I(e)+i+`
`+a+r+`
`}function K(e,t){var n=t?t.filter(function(t){return e[t]!=null&&e[t]!==``}):Object.keys(e);return n.length?``+n.map(function(t){return``}).join(``)+`
`+I(t)+``+I(e[t])+`
`:`
none
`}function Me(e){return!e||!e.length?`
none found
`:`
`+e.map(function(e){return``+I(e)+``}).join(``)+`
`}function q(e,t){return`
`+I(e)+`
`}function J(e,t,n){return``+I(e)+``}function Ne(e){return``+e.map(function(e){return``}).join(``)+`
surfacewhat a machine can establishstate
`+I(e[0])+``+I(e[1])+``+J(e[2],e[3])+`
`}function Pe(){var e=y.anatomy||{},t=y.structured||{},n=y.agent||{},r=n.strategy||{},i=y.discovery||{},a=y.terms||{},o=t.jsonld?t.jsonld.length:0,s=t.microdata&&t.microdata.itemtypes?t.microdata.itemtypes.length:0,c=t.rdfa&&t.rdfa.typeof?t.rdfa.typeof.length:0,l=t.microformats?t.microformats.length:0,u=[];(t.jsonld||[]).forEach(function(e){(e.types||[]).forEach(function(e){u.indexOf(e)<0&&u.push(e)})});var d,f,p,m,h=``;if(C===`readiness`){var g=y.readiness||{},_=g.field||{},ee=g.nextActions&&g.nextActions[0];d=`Field evidence focus`,f={text:_.overall==null?`unknown`:_.overall+`/100`,kind:_.overall>=75?`ok`:`warn`},p=`This is what Lens observed itself; external standards and Readability recovery join it only in Agent-ready?.`,m={"identified fetch":y.status==null?`unknown`:y.status,"bot samples":g.botViews?g.botViews.length:0,"machine door":y.agent&&y.agent.strategy?y.agent.strategy.verdict:`unknown`,"next standards gap":ee?He(ee).label:`none observed`}}else if(C===`anatomy`){var v=e.imgTotal?e.imgTotal-e.imgNoAlt+` / `+e.imgTotal+` images have alt`:`no images found`;d=`Anatomy focus`,f={text:y.status+` `+Z(y.status),kind:y.status>=200&&y.status<400?`ok`:`warn`},p=`Can a machine get a usable reading surface before it knows what the page means?`,m={response:(y.contentType||`(none)`)+` · `+R(e.rawBytes),shape:(e.headings?e.headings.length:0)+` headings · `+(e.wordCount||0)+` words`,accessibility:v,headers:Object.keys(y.headers||{}).length+` received`}}else if(C===`reader`){var b=k,x=b&&b.ok&&b.dropped?b.dropped.pct:null;d=`Reader focus`,f={text:b==null?`not run`:b.ok?x==null?`n/a`:x+`% dropped`:`failed`,kind:b==null?``:b.ok?x>=50?`warn`:`ok`:`warn`},p=`How much of this page survives a reader-mode extractor, and how much of what survives is not prose.`,m=b&&b.ok?{"as served":(b.source?b.source.words:`?`)+` words`,"extractor kept":(b.kept?b.kept.words:`?`)+` words`,"control labels kept":b.controls?b.controls.kept+` of `+b.controls.total:`not counted`,extractor:b.extractor?b.extractor.name+` `+b.extractor.version:`readability`}:{status:b==null?`not run — this lens costs a second fetch`:`extraction failed`,"what it is":`a third-party extractor's opinion, not the served bytes`,engine:`readability (Apache-2.0), in its own Worker`}}else if(C===`wire`){var S=j,w=S&&S.ok?S.thirdParty.bytesPct:null;d=`Wire focus`,f={text:S==null?`not run`:S.ok?w+`% third-party`:`failed`,kind:S==null?``:S.ok?w>=60?`warn`:w>=30?``:`ok`:`warn`},p=`What loading this page actually spends, and how much of it goes to somebody who wrote none of it.`,m=S&&S.ok?{requests:S.requests+` to `+S.hostTotal+` host`+(S.hostTotal===1?``:`s`),transferred:R(S.bytes),"third-party":S.thirdParty.requests+` requests · `+R(S.thirdParty.bytes),load:S.loadFired?S.navMs+` ms`:`load event never fired`}:{status:S==null?`not run — this lens costs a whole browser instance`:`the trace failed`,"what it is":`one cold load recorded over CDP, as a declared bot`,"why it is opt-in":`ten browser-minutes a day, shared with every other browser lens`}}else if(C===`structured`)d=`Structured focus`,f={text:o||s||c||l?`signals found`:`mostly untyped`,kind:o||s||c||l?`ok`:`off`},p=`What entities and relationships can be lifted from the markup without guessing?`,m={title:t.title||`(untitled)`,schema:o+` JSON-LD · `+s+` microdata · `+c+` RDFa`,microformats:l+` class signal`+(l===1?``:`s`),preview:ce(t.og)?`Open Graph card present`:`no Open Graph card`},u.length&&(h=Me(u.slice(0,18)));else if(C===`ai`){var T=n.mdNegotiation&&n.mdNegotiation.supported?`negotiated text/markdown`:`HTML only`,E=(y.cost&&y.cost.tiers||[]).filter(function(e){return e.key===`markdown`})[0],D=y.ai&&y.ai.directives||{};d=`AI view focus`,f={text:E?`~`+z(E.tokens)+` tok`:T,kind:E?`ok`:`warn`},p=`What a model can ingest, how much context it costs, and whether the site offers a cleaner representation.`,m={representation:T+` · `+R((y.ai&&y.ai.markdown||``).length),directives:D.metaRobots||D.xRobotsTag||D.namesAiCrawlers?`crawler signals published`:`no AI-specific signal`,curation:y.ai&&y.ai.llmsTxtPresent?`llms.txt present`:`no llms.txt`,"cheapest shortcut":E?`markdown is the selected compact read`:`none observed`}}else if(C===`terms`){var O=a.spectrum&&a.spectrum.tier||`unknown`,te=(a.scoreboard||[]).filter(function(e){return e.verdict===`block`}).length,ne=a.enforcement&&(a.enforcement.challenged?`bot challenge`:a.enforcement.blocked?`fetch refused`:`fetch passed`);d=`Terms focus`,f={text:O,kind:O===`open`?`ok`:`warn`},p=`Is reading open, merely requested, actively enforced, or priced? Published policy and observed behavior stay separate.`,m={spectrum:O,robots:a.robotsUnknown?`unknown / unreachable`:a.robotsPresent?te+` of `+(a.scoreboard||[]).length+` bots blocked`:`no robots.txt`,enforcement:ne||`not observed`,price:a.paid&&a.paid.http402?`402 Payment Required`:`no payment signal`}}else{var A=[n.mcp,n.nlweb,n.webmcp,n.agentCard,n.openapi,n.apiCatalog].filter(function(e){return e&&(e.verdict===`yes`||e.verdict===`likely`||e.verdict===`maybe`||e.present||e.found)}).length,M=(i.llmsTxt&&i.llmsTxt.ok?1:0)+(i.sitemapXml&&i.sitemapXml.ok?1:0);d=`Discovery focus`,f={text:r.verdict||`unknown`,kind:r.verdict===`agent-native`?`ok`:r.verdict===`agent-readable`?``:`warn`},p=`What can an agent discover before it has to drive the human page?`,m={strategy:r.note||r.verdict||`unknown`,"site maps":M+` of 2 found · llms.txt / sitemap.xml`,"agent doors":A+` declared or probable`,feeds:(i.feeds||[]).length+` advertised`}}return`
`+G(d,f,p,K(m)+h)+`
`}function Fe(){var e=y.anatomy||{},t=y.structured||{},n=y.discovery||{},r=y.agent||{},i=r.strategy||{},a=y.cost&&y.cost.tiers&&y.cost.tiers[0],o=y.cost&&y.cost.rates&&y.cost.rates[0]||{usdPerMtok:3},s=[];function c(e,t){s.push({kind:e,text:t})}var l=a?` (~`+z(a.tokens)+` tok, `+B(a.tokens/1e6*o.usdPerMtok)+` at `+(o.model||`Sonnet`)+` rates)`:``;c(`ok`,`GET `+(y.finalUrl||y.url)+` as an agent → `+y.status+` `+I(Z(y.status))+`, `+(y.contentType||`?`)+`, `+R(e.rawBytes)+l+`.`);var u=r.mdNegotiation;u&&u.supported?c(`ok`,`Asked for text/markdown → the site served a clean machine copy. No HTML tax.`):c(`warn`,`Asked for text/markdown → still HTML. Paying the token tax to read markup meant for a browser.`);var d=(t.jsonld||[]).length;if(d){var f=[];(t.jsonld||[]).forEach(function(e){(e.types||[]).forEach(function(e){f.indexOf(e)<0&&f.push(e)})}),c(`ok`,`Parsed structured data → `+d+` JSON-LD block`+(d===1?``:`s`)+(f.length?` (`+f.slice(0,4).join(`, `)+`)`:``)+`. Entities without guessing.`)}else c(`warn`,`Looked for a typed entity graph → none. Any structure must be inferred from the prose.`);var p=i.action&&i.action.length;p?c(`ok`,`Probed for an action surface → `+i.action.join(`, `)+`. It can call, not just read.`):c(`warn`,`Probed for a callable contract (MCP, OpenAPI, agent-card)`+(n.agentsMd&&n.agentsMd.present?` (an AGENTS.md exists, but that's instructions, not a callable endpoint)`:``)+` → none. To do anything it must drive the human page and guess at side effects.`);var m=n.oauthProtectedResource&&n.oauthProtectedResource.ok||n.oauthDiscovery&&(n.oauthDiscovery.openidConfiguration&&n.oauthDiscovery.openidConfiguration.ok||n.oauthDiscovery.oauthAuthorizationServer&&n.oauthDiscovery.oauthAuthorizationServer.ok);m?c(`ok`,`Checked for a delegated-authority boundary → OAuth discovery present. A user could grant scoped access.`):c(`warn`,`Checked for a consent boundary → none. No scoped, revocable way to act on a user's behalf.`);var h,g;p&&m?(h=`ACT: this site was built for agents. A task with side effects can run against a real contract.`,g=`ok`):p?(h=`ACT (unsafe): an action surface exists, but with no consent boundary an agent acts without scoped permission.`,g=`warn`):(h=`BLOCKED: a task needing action can't complete. An agent can read this page, but not do anything here without a human driving a browser.`,g=`no`),c(g,`task verdict → `+h);var _=s.map(function(e){var t=e.kind===`ok`?`✓`:e.kind===`no`?`✗`:`•`;return`
`+t+``+L(I(e.text).replace(/&times;/g,`×`))+`
`}).join(``);return G(`Agent trace`,{text:`what an agent would do`,kind:g===`no`?`warn`:g},`One agent's attempt at a task on this URL, narrated only from evidence Lens already gathered. No model was called.`,`
`+_+`
`)}function Ie(){var e=y.anatomy||{},t=y.structured||{},n=y.discovery||{},r=y.agent||{},i=r.strategy||{},a=y.terms||{},o=t.jsonld?t.jsonld.length:0,s=t.microdata&&t.microdata.itemtypes?t.microdata.itemtypes.length:0,c=t.rdfa&&t.rdfa.typeof?t.rdfa.typeof.length:0,l=t.relLinks?t.relLinks.length:0,u=t.title||`(untitled)`,d=n.robotsTxt&&n.robotsTxt.ok?`robots.txt answered`:n.robotsTxt&&n.robotsTxt.error?`robots.txt unknown`:`no robots.txt`,f=a.spectrum&&a.spectrum.tier?a.spectrum.tier:`unknown`,p={url:y.finalUrl,title:u,response:y.status+` `+Z(y.status),"content-type":y.contentType||`(none)`,payload:R(e.rawBytes)+(y.truncated?` (capped)`:``),headings:e.headings?e.headings.length:0,"links in head":l,"fetched as":y.fetchedBy||`identified bot`},m=`
Machine briefing. This is a reconstruction from the response and the probes Lens actually ran. It describes available evidence; it does not claim that a site has agreed to a new interface.
`;m+=G(`Observed document`,{text:`observed`,kind:`ok`},`The minimum contract a machine can recover from this response.`,K(p)),m+=G(`Machine affordances`,{text:i.verdict||`unknown`,kind:i.verdict===`agent-native`?`ok`:i.verdict===`agent-readable`?``:`warn`},`A readable page, a declared action surface, and permission are separate signals.`,Ne([[`read`,(y.contentType||`response`)+`, `+R(e.rawBytes),`observed`,`ok`],[`structure`,o+` JSON-LD, `+s+` microdata, `+c+` RDFa type(s)`,o||s||c?`found`:`absent`,o||s||c?`ok`:`off`],[`discover`,(n.llmsTxt&&n.llmsTxt.ok?`llms.txt`:``)+(n.sitemapXml&&n.sitemapXml.ok?` + sitemap`:``)||`site files not found`,n.llmsTxt&&n.llmsTxt.ok||n.sitemapXml&&n.sitemapXml.ok?`found`:`absent`,n.llmsTxt&&n.llmsTxt.ok||n.sitemapXml&&n.sitemapXml.ok?`ok`:`off`],[`action`,i.action&&i.action.length?i.action.join(`, `):`no declared action surface`,i.action&&i.action.length?`found`:`absent`,i.action&&i.action.length?`ok`:`off`],[`policy`,d+`; spectrum: `+f,d===`robots.txt answered`?`observed`:`unknown`,d===`robots.txt answered`?``:`warn`],[`markdown`,r.mdNegotiation&&r.mdNegotiation.supported?`same URL serves text/markdown`:`HTML response stays HTML`,r.mdNegotiation&&r.mdNegotiation.supported?`supported`:`absent`,r.mdNegotiation&&r.mdNegotiation.supported?`ok`:`off`]]));var h=`# observed +(function(){"use strict";function e(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:null}function t(e){return typeof e==`string`&&e!==``?e:null}var n=document.getElementById(`lx-form`);if(!n)return;var r=document.getElementById(`lx-url`),i=document.getElementById(`lx-panes`),a=document.getElementById(`lx-human-body`),o=document.getElementById(`lx-machine-body`),s=document.getElementById(`lx-machine-top`),c=document.getElementById(`lx-machine-scroll`),l=document.getElementById(`lx-browser-body`),u=document.getElementById(`lx-machine-h`),d=document.getElementById(`lx-human-h`),f=document.getElementById(`lx-mode-note`),p=document.getElementById(`lx-status`),m=document.getElementById(`lx-toolbar`),h=document.getElementById(`lx-addr-vs`),g=document.getElementById(`lx-url-vs`),_=document.getElementById(`lx-vs-toggle`),ee=document.getElementById(`lx-vs-close`),v=document.getElementById(`lx-vs`),y=null,b=null,x=null,S=`both`,C=`anatomy`,w={markdown:!1,semantic:!1,contract:!1,authority:!1,receipt:!1,dictionary:!1,ech:!1},T=!1,E=!1,D=!1,O=!1,te=null,ne={readiness:`Agent-ready?`,anatomy:`Raw response`,reader:`Reader's guess`,wire:`What it costs`,structured:`What it claims`,ai:`Model cost`,terms:`Who's allowed`,discovery:`Agent doors`,tools:`What it accepts`},k=null,A=!1,j=null,M=!1,re=null,N=!1,P=null,F=!1;function I(e){return String(e??``).replace(/&/g,`&`).replace(//g,`>`).replace(/"/g,`"`)}var ie=(function(){try{return JSON.parse(document.getElementById(`lx-glossary`).textContent)}catch{return{}}})(),ae=[];Object.keys(ie).forEach(function(e){[ie[e].label].concat(ie[e].alt||[]).forEach(function(t){ae.push([e,t])})}),ae.sort(function(e,t){return t[1].length-e[1].length});var oe=!1;function se(e,t){var n=ie[e];return n?``+I(t)+``:I(t)}function L(e,t){for(var n=String(e),r={},i=``,a=0;;){for(var o=null,s=0;s`+o.text+``,a=o.at+o.text.length}return i+n.slice(a)}window.matchMedia&&(matchMedia(`(hover: none)`).matches||matchMedia(`(pointer: coarse)`).matches)||import(`/a/hoist.d9081560.js`).then(function(e){var t=document.getElementById(`lx-tip`);if(t){e.createHoist({node:t,anchorName:`--lx-tip`,findTarget:function(e){return e&&e.closest?e.closest(`.lx-term`):null},contentFor:function(e){var t=ie[e.getAttribute(`data-t`)];return t?``+I(t.label)+``+I(t.plain)+(t.more?``+I(t.more)+``:``):``}}),oe=!0;for(var n=document.querySelectorAll(`.lx-term[title]`),r=0;r=1e6?(e/1e6).toFixed(1)+`M`:e>=1e3?(e/1e3).toFixed(1)+`k`:String(e)}function B(e){return e>=.1?`$`+e.toFixed(2):e>=5e-4?`$`+e.toFixed(4):e>0?`<$0.0005`:`$0`}function ce(t){return e(t)!==null&&Object.keys(t).length>0}function le(){var e=y&&y.cost,t=y&&y.readiness,n=t&&t.field,r=n&&n.overall!=null?``:``;if(!e||!e.tiers||e.tiers.length<2)return r?`
`+r+`Lens observed `+I(n.overall)+`/100 field access. The independent Cloudflare and Readability inputs sit under Agent-ready?.
`:``;var i=e.rates&&e.rates[0]||{usdPerMtok:3},a=e.tiers[0],o=e.tiers.filter(function(e){return e.key===`markdown`})[0]||e.tiers.filter(function(e){return e.key===`text`})[0]||e.tiers[e.tiers.length-1],s=a.tokens/1e6*i.usdPerMtok,c=s*1e3,l=o&&o.tokens&&o!==a?Math.round(a.tokens/o.tokens):0,u=`A person reads this page for free. A machine pays `+B(s)+` for the same words, because it chews through `+z(a.tokens)+` `+se(`token`,`tokens`)+` of raw HTML`+(l>1?`. As clean text it would cost ×`+l+` less`:``)+`. At 1,000 reads that is `+B(c)+` of inference, and the publisher collects $0.00.`;return`
`+r+u+`
`}var ue={markdownNegotiation:`Read mostly by coding agents; answer engines still scrape HTML.`,robotsTxtAiRules:`Honored by the major AI crawlers that identify themselves.`,contentSignals:`~3.8M domains publish it; Google says it changes nothing.`,webBotAuth:`Required for pay-per-crawl; almost no verifiers exist yet.`,dnsAid:`A 2026 Linux Foundation proposal; near-zero deployment.`,mcpServerCard:`MCP is the one surface here with a real consumer ecosystem.`,a2aAgentCard:`A2A discovery is early: 50+ orgs, nowhere near MCP's scale.`,apiCatalog:`An IETF linkset standard; discovery clients stay thin.`,llmsTxt:`~6% of top sites publish it; Google won't read it.`};function de(){var e=document.getElementById(`lx-initial-data`);if(!e)return null;try{return JSON.parse(e.textContent||`null`)}catch{return null}}var V=de(),fe={both:`Compare puts Human, HTTP Machine, and Browser Run side by side. Predict the machine pane; the miss is the lesson.`,human:`Human is the page as a person receives it. Every other view subtracts the person.`,machine:`Machine is an evidence-first briefing. Read claims first, then check each against its evidence.`,browser:`Browser Run renders after JavaScript beside HTTP. Disagreement reveals a JS dependency.`,delta:`Delta toggles hypothetical infrastructure. Predict, flip, check.`};function pe(){return S===`both`?`Compare`:S.charAt(0).toUpperCase()+S.slice(1)}function me(){var e=new URLSearchParams(location.search),t=[`both`,`human`,`machine`,`browser`,`delta`],n=Object.keys(ne),r={markdown:!1,semantic:!1,contract:!1,authority:!1,receipt:!1,dictionary:!1,ech:!1};return(e.get(`cf`)||``).split(`,`).forEach(function(e){Object.prototype.hasOwnProperty.call(r,e)&&(r[e]=!0)}),{url:e.get(`url`)||``,vs:e.get(`vs`)||``,view:t.indexOf(e.get(`view`))>=0?e.get(`view`):`both`,lens:n.indexOf(e.get(`lens`))>=0?e.get(`lens`):`anatomy`,counterfactuals:r}}function H(e){var t;try{t=new URL(location.href)}catch{return}t.pathname=`/lens`,[`url`,`vs`,`view`,`lens`,`cf`].forEach(function(e){t.searchParams.delete(e)});var n=r.value.trim();if(n&&t.searchParams.set(`url`,n),D&&g&&g.value.trim())t.searchParams.set(`vs`,g.value.trim());else{S!==`both`&&t.searchParams.set(`view`,S),C!==`anatomy`&&t.searchParams.set(`lens`,C);var i=Object.keys(w).filter(function(e){return w[e]});i.length&&t.searchParams.set(`cf`,i.join(`,`))}var a=t.pathname+(t.search||``)+(t.hash||``);if(a!==location.pathname+location.search+location.hash)try{(e?history.pushState:history.replaceState).call(history,null,``,a)}catch{}}function he(){var e=document.getElementById(`lx-sow-dialog`);if(e&&!e.open&&e.showModal)try{e.showModal()}catch{}}function ge(e){var t=e&&e.error||`Something went wrong.`;y=null,b=null,x=null,k=null,P=null,j=null,A=!1,F=!1,M=!1,o.innerHTML=`
`+I(t)+`
`,s&&(s.innerHTML=``),a.innerHTML=`
No page to show.
`,W(),p.innerHTML=`Failed: `+I(t)+``}function _e(e){if(!T){if(e=(e||``).trim(),!e){r.focus();return}D&&Ce(!1),T=!0,b=null,x=null,k=null,P=null,j=null,A=!1,F=!1,M=!1,r.value=e,y&&(y.finalUrl||y.url)!==e&&(w={markdown:!1,semantic:!1,contract:!1,authority:!1,receipt:!1,dictionary:!1,ech:!1},mt()),H(!1),a.innerHTML=`
Fetching as AadharshBot…
`,o.innerHTML=`
Reading the markup…
`,W(),p.innerHTML=`Fetching `+I(e)+` server-side…`;var t=function(t){return fetch(`/lens/fetch?url=`+encodeURIComponent(e)+(t?`&phases=`+t:``)).then(function(e){if((e.headers.get(`content-type`)||``).indexOf(`json`)<0)throw Error(`The lens engine returned an unexpected response.`);return e.json()})};t(`page`).then(function(e){!e||!e.ok||(y=e,Ee(),X(),o.innerHTML=`
Read the page. Checking agent surfaces…
`)}).catch(function(){}).then(function(){return t()}).then(function(e){if(T=!1,!e||!e.ok){ge(e);return}y=e,Ee(),Y(),W(),X(),ke()}).catch(function(e){T=!1,o.innerHTML=`
Network error: `+I(e&&e.message||e)+`
`,p.innerHTML=`Network error.`})}}var ve=[[`llms`,`llms.txt`],[`markdown`,`markdown negotiation`],[`mcp`,`MCP`],[`agentCard`,`an agent card`],[`apiCatalog`,`an API catalog`]];function U(e){try{return new URL(e).hostname.replace(/^www\./,``)}catch{return String(e||``)}}function ye(e){var t=U(e.finalUrl||e.url),n=e.level>=5?`ok`:e.level>=3?``:`warn`,r=ve.filter(function(t){return e.surfaces&&e.surfaces[t[0]]}).map(function(e){return``+I(e[1])+``}).join(``),i=e.cost?`~`+z(e.cost.tokens)+` `+se(`token`,`tokens`)+` · `+B(e.cost.usdPerRead)+`/read`:`no cost model (non-HTML)`,a=[[`response`,I((e.status==null?`?`:e.status)+` `+Z(e.status||0))],[`terms`,I(e.tier||`unknown`)],[`agent doors`,I(String(e.doors||0))],[`one model read`,i],[`payload`,I(R(e.bytes))],[`words`,I(String(e.wordCount||0))]].map(function(e){return``+I(e[0])+``+e[1]+``}).join(``);return`
`+(e.readiness==null?`?`:I(e.readiness))+`/100`+J(`Level `+(e.level==null?`?`:e.level),n,e.levelNote||``)+``+I(e.levelName||``)+`
`+a+`
`+(r||`no machine surfaces published`)+`
`}function be(e){if(!e||!e.ok){v.innerHTML=`
`+I(e&&e.error||`The comparison did not run.`)+`
`;return}var t=e.left,n=e.right,r=``;if(t&&n&&t.readiness!=null&&n.readiness!=null){var i=t.readiness>=n.readiness?t:n,a=i===t?n:t,o=ve.filter(function(e){return i.surfaces&&i.surfaces[e[0]]&&!(a.surfaces&&a.surfaces[e[0]])}).map(function(e){return e[1]});r=`
`+(i.readiness===a.readiness?``+I(i.readiness)+` apiece. Same score, one rubric.`:``+I(U(i.finalUrl||i.url))+` `+I(i.readiness)+`, `+I(U(a.finalUrl||a.url))+` `+I(a.readiness)+`.`)+(o.length?` The gap is published surfaces: `+I(o.join(`, `))+`.`:` Both publish the same surfaces; the gap sits in the individual checks.`)+`
`}v.innerHTML=`
Two sites, one rubric, same evidence rules. Every number here links back to a full scan.
`+ye(t||{})+ye(n||{})+`
`+r}function xe(e){D=!!e,[m,f,i].forEach(function(e){e&&e.classList.toggle(`lx-off`,D)}),v&&v.classList.toggle(`lx-off`,!D),h&&h.classList.toggle(`lx-off`,!D&&!(g&&g.value.trim())),_&&_.setAttribute(`aria-expanded`,h&&!h.classList.contains(`lx-off`)?`true`:`false`)}function Se(e,t,n){O||(e=(e||``).trim(),t=(t||``).trim(),!(!e||!t)&&(O=!0,r.value=e,g&&(g.value=t),h&&h.classList.remove(`lx-off`),xe(!0),H(n!==!1),v.innerHTML=`
Scanning both sites as AadharshBot…
`,p.innerHTML=`Comparing `+I(U(e))+` and `+I(U(t))+` server-side…`,fetch(`/lens/compare.json?left=`+encodeURIComponent(e)+`&right=`+encodeURIComponent(t)).then(function(e){return e.json()}).then(function(n){O=!1,be(n),p.innerHTML=n&&n.ok?`Head-to-head`+I(U(e))+` vs `+I(U(t))+`both fetched server-side as AadharshBot`:`Comparison failed: `+I(n&&n.error||`unknown error`)+``}).catch(function(e){O=!1,v.innerHTML=`
Network error: `+I(e&&e.message||e)+`
`,p.innerHTML=`Network error.`})))}function Ce(e){g&&(g.value=``),xe(!1),e!==!1&&H(!0),y?X():p.innerHTML=`Idle. Nothing is fetched until you ask, and then just once, server-side, with no logging.`}function we(e,t){var n=document.getElementById(`lx-human-h`);n&&(n.innerHTML=`Human view `+I(e)+` `+I(t)+``)}function Te(e){a.classList.toggle(`is-bleed`,!!e)}function Ee(){if(y.framable){Te(!0),we(`Live`,`loaded by your browser, like a real tab`),a.innerHTML=``;return}Oe()}function De(e,t){return e&&e.reason===`budget_spent`||t===429?null:e&&e.error&&!/^Browser Run (returned|request failed)/.test(e.error)?e.error:`A rendered snapshot needs a real headless Chrome, and this one did not come back (upstream said `+(t||`no status`)+`)`}function Oe(){var e=y.finalUrl;je(null,`Asking for a rendered snapshot as well`),fetch(`/lens/shot?url=`+encodeURIComponent(e)).then(function(t){var n=t.headers.get(`content-type`)||``;return t.ok&&n.indexOf(`image/`)===0?!y||(y.finalUrl||y.url)!==e?void 0:(Te(!0),we(`Refused`,(y.frameReason?`framing refused (`+y.frameReason+`)`:`this site refuses to be framed`)+`; a machine's render stands in`),t.blob().then(function(t){if(!(!y||(y.finalUrl||y.url)!==e)){te&&=(URL.revokeObjectURL(te),null);var n=URL.createObjectURL(t);te=n;var r=new Image;r.className=`lx-shot`,r.alt=`Rendered snapshot of `+e,r.onload=function(){te===n&&(URL.revokeObjectURL(n),te=null)},r.src=n,a.innerHTML=``,a.appendChild(r)}})):t.json().then(function(e){je(De(e,t.status)||e&&e.error||`snapshot failed (`+t.status+`)`)}).catch(function(){je(De(null,t.status)||`snapshot failed (`+t.status+`)`)})}).catch(function(){je(`The snapshot request did not go through`)})}function W(){if(!y){l.innerHTML=`
Scan a URL first.Then this pane fetches it with a real Chrome, so the site's JavaScript runs. Many pages look empty until it does.
`;return}if(!window.LensBrowser){l.innerHTML=`
Browser Run: rendered HTML, screenshot, Markdown, and accessibility tree.
`;var e=document.getElementById(`lx-browser-run`);e&&e.addEventListener(`click`,Ae);return}window.LensBrowser.mount(l,y,b,Ae,x)}function ke(){if(!(b||E||!y)&&(S===`both`||S===`browser`)){try{if(matchMedia(`(hover: none)`).matches||matchMedia(`(pointer: coarse)`).matches)return}catch{}Ae()}}function Ae(e){if(E||!y)return;t(e)===null&&(e=``),E=!0;function n(){if(!window.LensBrowser){E=!1,W();return}window.LensBrowser.run(l,y,function(t){E=!1,e?x=t:b=t,W(),X()},function(e){E=!1},Ae,e)}if(window.LensBrowser){n();return}var r=document.createElement(`script`);r.src=`/a/lens-browser.62f8bf05.js`,r.onload=n,r.onerror=function(){E=!1,W()},document.head.appendChild(r)}function je(e,t){Te(!1),we(`Reader`,t?`embedding blocked, so here is the readable text while a snapshot is fetched`:`embedding blocked, no snapshot, so here is the readable text`);var n=y.anatomy,r=``;if(t?r=`
`+I(t)+`…
`:e&&(r=`
`+I(String(e).replace(/\.\s*$/,``))+`. Showing the readable text instead.
`),!n){a.innerHTML=r+`
No readable text either.
`;return}var i=y.structured&&y.structured.title||``;if(i&&(r+=`
`+I(i)+`
`),n.headings&&n.headings.length){r+=`
Document outline
`;for(var o=0;oh`+s.level+` `+I(s.text)+`
`}r+=``}r+=`
`+I(n.text||`(no extractable text)`)+`
`,a.innerHTML=r}function G(e,t,n,r){var i=t?` `+I(t.text)+``:``,a=n?`
`+L(I(n))+`
`:``;return`
`+I(e)+i+`
`+a+r+`
`}function K(e,t){var n=t?t.filter(function(t){return e[t]!=null&&e[t]!==``}):Object.keys(e);return n.length?``+n.map(function(t){return``}).join(``)+`
`+I(t)+``+I(e[t])+`
`:`
none
`}function Me(e){return!e||!e.length?`
none found
`:`
`+e.map(function(e){return``+I(e)+``}).join(``)+`
`}function q(e,t){return`
`+I(e)+`
`}function J(e,t,n){return``+I(e)+``}function Ne(e){return``+e.map(function(e){return``}).join(``)+`
surfacewhat a machine can establishstate
`+I(e[0])+``+I(e[1])+``+J(e[2],e[3])+`
`}function Pe(){var e=y.anatomy||{},t=y.structured||{},n=y.agent||{},r=n.strategy||{},i=y.discovery||{},a=y.terms||{},o=t.jsonld?t.jsonld.length:0,s=t.microdata&&t.microdata.itemtypes?t.microdata.itemtypes.length:0,c=t.rdfa&&t.rdfa.typeof?t.rdfa.typeof.length:0,l=t.microformats?t.microformats.length:0,u=[];(t.jsonld||[]).forEach(function(e){(e.types||[]).forEach(function(e){u.indexOf(e)<0&&u.push(e)})});var d,f,p,m,h=``;if(C===`readiness`){var g=y.readiness||{},_=g.field||{},ee=g.nextActions&&g.nextActions[0];d=`Field evidence focus`,f={text:_.overall==null?`unknown`:_.overall+`/100`,kind:_.overall>=75?`ok`:`warn`},p=`This is what Lens observed itself; external standards and Readability recovery join it only in Agent-ready?.`,m={"identified fetch":y.status==null?`unknown`:y.status,"bot samples":g.botViews?g.botViews.length:0,"machine door":y.agent&&y.agent.strategy?y.agent.strategy.verdict:`unknown`,"next standards gap":ee?He(ee).label:`none observed`}}else if(C===`anatomy`){var v=e.imgTotal?e.imgTotal-e.imgNoAlt+` / `+e.imgTotal+` images have alt`:`no images found`;d=`Anatomy focus`,f={text:y.status+` `+Z(y.status),kind:y.status>=200&&y.status<400?`ok`:`warn`},p=`Can a machine get a usable reading surface before it knows what the page means?`,m={response:(y.contentType||`(none)`)+` · `+R(e.rawBytes),shape:(e.headings?e.headings.length:0)+` headings · `+(e.wordCount||0)+` words`,accessibility:v,headers:Object.keys(y.headers||{}).length+` received`}}else if(C===`reader`){var b=k,x=b&&b.ok&&b.dropped?b.dropped.pct:null;d=`Reader focus`,f={text:b==null?`not run`:b.ok?x==null?`n/a`:x+`% dropped`:`failed`,kind:b==null?``:b.ok?x>=50?`warn`:`ok`:`warn`},p=`How much of this page survives a reader-mode extractor, and how much of what survives is not prose.`,m=b&&b.ok?{"as served":(b.source?b.source.words:`?`)+` words`,"extractor kept":(b.kept?b.kept.words:`?`)+` words`,"control labels kept":b.controls?b.controls.kept+` of `+b.controls.total:`not counted`,extractor:b.extractor?b.extractor.name+` `+b.extractor.version:`readability`}:{status:b==null?`not run — this lens costs a second fetch`:`extraction failed`,"what it is":`a third-party extractor's opinion, not the served bytes`,engine:`readability (Apache-2.0), in its own Worker`}}else if(C===`wire`){var S=j,w=S&&S.ok?S.thirdParty.bytesPct:null;d=`Wire focus`,f={text:S==null?`not run`:S.ok?w+`% third-party`:`failed`,kind:S==null?``:S.ok?w>=60?`warn`:w>=30?``:`ok`:`warn`},p=`What loading this page actually spends, and how much of it goes to somebody who wrote none of it.`,m=S&&S.ok?{requests:S.requests+` to `+S.hostTotal+` host`+(S.hostTotal===1?``:`s`),transferred:R(S.bytes),"third-party":S.thirdParty.requests+` requests · `+R(S.thirdParty.bytes),load:S.loadFired?S.navMs+` ms`:`load event never fired`}:{status:S==null?`not run — this lens costs a whole browser instance`:`the trace failed`,"what it is":`one cold load recorded over CDP, as a declared bot`,"why it is opt-in":`ten browser-minutes a day, shared with every other browser lens`}}else if(C===`structured`)d=`Structured focus`,f={text:o||s||c||l?`signals found`:`mostly untyped`,kind:o||s||c||l?`ok`:`off`},p=`What entities and relationships can be lifted from the markup without guessing?`,m={title:t.title||`(untitled)`,schema:o+` JSON-LD · `+s+` microdata · `+c+` RDFa`,microformats:l+` class signal`+(l===1?``:`s`),preview:ce(t.og)?`Open Graph card present`:`no Open Graph card`},u.length&&(h=Me(u.slice(0,18)));else if(C===`ai`){var T=n.mdNegotiation&&n.mdNegotiation.supported?`negotiated text/markdown`:`HTML only`,E=(y.cost&&y.cost.tiers||[]).filter(function(e){return e.key===`markdown`})[0],D=y.ai&&y.ai.directives||{};d=`AI view focus`,f={text:E?`~`+z(E.tokens)+` tok`:T,kind:E?`ok`:`warn`},p=`What a model can ingest, how much context it costs, and whether the site offers a cleaner representation.`,m={representation:T+` · `+R((y.ai&&y.ai.markdown||``).length),directives:D.metaRobots||D.xRobotsTag||D.namesAiCrawlers?`crawler signals published`:`no AI-specific signal`,curation:y.ai&&y.ai.llmsTxtPresent?`llms.txt present`:`no llms.txt`,"cheapest shortcut":E?`markdown is the selected compact read`:`none observed`}}else if(C===`terms`){var O=a.spectrum&&a.spectrum.tier||`unknown`,te=(a.scoreboard||[]).filter(function(e){return e.verdict===`block`}).length,ne=a.enforcement&&(a.enforcement.challenged?`bot challenge`:a.enforcement.blocked?`fetch refused`:`fetch passed`);d=`Terms focus`,f={text:O,kind:O===`open`?`ok`:`warn`},p=`Is reading open, merely requested, actively enforced, or priced? Published policy and observed behavior stay separate.`,m={spectrum:O,robots:a.robotsUnknown?`unknown / unreachable`:a.robotsPresent?te+` of `+(a.scoreboard||[]).length+` bots blocked`:`no robots.txt`,enforcement:ne||`not observed`,price:a.paid&&a.paid.http402?`402 Payment Required`:`no payment signal`}}else{var A=[n.mcp,n.nlweb,n.webmcp,n.agentCard,n.openapi,n.apiCatalog].filter(function(e){return e&&(e.verdict===`yes`||e.verdict===`likely`||e.verdict===`maybe`||e.present||e.found)}).length,M=(i.llmsTxt&&i.llmsTxt.ok?1:0)+(i.sitemapXml&&i.sitemapXml.ok?1:0);d=`Discovery focus`,f={text:r.verdict||`unknown`,kind:r.verdict===`agent-native`?`ok`:r.verdict===`agent-readable`?``:`warn`},p=`What can an agent discover before it has to drive the human page?`,m={strategy:r.note||r.verdict||`unknown`,"site maps":M+` of 2 found · llms.txt / sitemap.xml`,"agent doors":A+` declared or probable`,feeds:(i.feeds||[]).length+` advertised`}}return`
`+G(d,f,p,K(m)+h)+`
`}function Fe(){var e=y.anatomy||{},t=y.structured||{},n=y.discovery||{},r=y.agent||{},i=r.strategy||{},a=y.cost&&y.cost.tiers&&y.cost.tiers[0],o=y.cost&&y.cost.rates&&y.cost.rates[0]||{usdPerMtok:3},s=[];function c(e,t){s.push({kind:e,text:t})}var l=a?` (~`+z(a.tokens)+` tok, `+B(a.tokens/1e6*o.usdPerMtok)+` at `+(o.model||`Sonnet`)+` rates)`:``;c(`ok`,`GET `+(y.finalUrl||y.url)+` as an agent → `+y.status+` `+I(Z(y.status))+`, `+(y.contentType||`?`)+`, `+R(e.rawBytes)+l+`.`);var u=r.mdNegotiation;u&&u.supported?c(`ok`,`Asked for text/markdown → the site served a clean machine copy. No HTML tax.`):c(`warn`,`Asked for text/markdown → still HTML. Paying the token tax to read markup meant for a browser.`);var d=(t.jsonld||[]).length;if(d){var f=[];(t.jsonld||[]).forEach(function(e){(e.types||[]).forEach(function(e){f.indexOf(e)<0&&f.push(e)})}),c(`ok`,`Parsed structured data → `+d+` JSON-LD block`+(d===1?``:`s`)+(f.length?` (`+f.slice(0,4).join(`, `)+`)`:``)+`. Entities without guessing.`)}else c(`warn`,`Looked for a typed entity graph → none. Any structure must be inferred from the prose.`);var p=i.action&&i.action.length;p?c(`ok`,`Probed for an action surface → `+i.action.join(`, `)+`. It can call, not just read.`):c(`warn`,`Probed for a callable contract (MCP, OpenAPI, agent-card)`+(n.agentsMd&&n.agentsMd.present?` (an AGENTS.md exists, but that's instructions, not a callable endpoint)`:``)+` → none. To do anything it must drive the human page and guess at side effects.`);var m=n.oauthProtectedResource&&n.oauthProtectedResource.ok||n.oauthDiscovery&&(n.oauthDiscovery.openidConfiguration&&n.oauthDiscovery.openidConfiguration.ok||n.oauthDiscovery.oauthAuthorizationServer&&n.oauthDiscovery.oauthAuthorizationServer.ok);m?c(`ok`,`Checked for a delegated-authority boundary → OAuth discovery present. A user could grant scoped access.`):c(`warn`,`Checked for a consent boundary → none. No scoped, revocable way to act on a user's behalf.`);var h,g;p&&m?(h=`ACT: this site was built for agents. A task with side effects can run against a real contract.`,g=`ok`):p?(h=`ACT (unsafe): an action surface exists, but with no consent boundary an agent acts without scoped permission.`,g=`warn`):(h=`BLOCKED: a task needing action can't complete. An agent can read this page, but not do anything here without a human driving a browser.`,g=`no`),c(g,`task verdict → `+h);var _=s.map(function(e){var t=e.kind===`ok`?`✓`:e.kind===`no`?`✗`:`•`;return`
`+t+``+L(I(e.text).replace(/&times;/g,`×`))+`
`}).join(``);return G(`Agent trace`,{text:`what an agent would do`,kind:g===`no`?`warn`:g},`One agent's attempt at a task on this URL, narrated only from evidence Lens already gathered. No model was called.`,`
`+_+`
`)}function Ie(){var e=y.anatomy||{},t=y.structured||{},n=y.discovery||{},r=y.agent||{},i=r.strategy||{},a=y.terms||{},o=t.jsonld?t.jsonld.length:0,s=t.microdata&&t.microdata.itemtypes?t.microdata.itemtypes.length:0,c=t.rdfa&&t.rdfa.typeof?t.rdfa.typeof.length:0,l=t.relLinks?t.relLinks.length:0,u=t.title||`(untitled)`,d=n.robotsTxt&&n.robotsTxt.ok?`robots.txt answered`:n.robotsTxt&&n.robotsTxt.error?`robots.txt unknown`:`no robots.txt`,f=a.spectrum&&a.spectrum.tier?a.spectrum.tier:`unknown`,p={url:y.finalUrl,title:u,response:y.status+` `+Z(y.status),"content-type":y.contentType||`(none)`,payload:R(e.rawBytes)+(y.truncated?` (capped)`:``),headings:e.headings?e.headings.length:0,"links in head":l,"fetched as":y.fetchedBy||`identified bot`},m=`
Machine briefing. This is a reconstruction from the response and the probes Lens actually ran. It describes available evidence; it does not claim that a site has agreed to a new interface.
`;m+=G(`Observed document`,{text:`observed`,kind:`ok`},`The minimum contract a machine can recover from this response.`,K(p)),m+=G(`Machine affordances`,{text:i.verdict||`unknown`,kind:i.verdict===`agent-native`?`ok`:i.verdict===`agent-readable`?``:`warn`},`A readable page, a declared action surface, and permission are separate signals.`,Ne([[`read`,(y.contentType||`response`)+`, `+R(e.rawBytes),`observed`,`ok`],[`structure`,o+` JSON-LD, `+s+` microdata, `+c+` RDFa type(s)`,o||s||c?`found`:`absent`,o||s||c?`ok`:`off`],[`discover`,(n.llmsTxt&&n.llmsTxt.ok?`llms.txt`:``)+(n.sitemapXml&&n.sitemapXml.ok?` + sitemap`:``)||`site files not found`,n.llmsTxt&&n.llmsTxt.ok||n.sitemapXml&&n.sitemapXml.ok?`found`:`absent`,n.llmsTxt&&n.llmsTxt.ok||n.sitemapXml&&n.sitemapXml.ok?`ok`:`off`],[`action`,i.action&&i.action.length?i.action.join(`, `):`no declared action surface`,i.action&&i.action.length?`found`:`absent`,i.action&&i.action.length?`ok`:`off`],[`policy`,d+`; spectrum: `+f,d===`robots.txt answered`?`observed`:`unknown`,d===`robots.txt answered`?``:`warn`],[`markdown`,r.mdNegotiation&&r.mdNegotiation.supported?`same URL serves text/markdown`:`HTML response stays HTML`,r.mdNegotiation&&r.mdNegotiation.supported?`supported`:`absent`,r.mdNegotiation&&r.mdNegotiation.supported?`ok`:`off`]]));var h=`# observed url `+y.finalUrl+` title `+u+` response `+y.status+` `+Z(y.status)+` @@ -20,7 +20,7 @@ sidefx Lens inspected; it submitted no forms or tools`;return m+=G(`Copyable `+(E||`(no switches on)`),!0))+`
Papert’s micro-world: flip, predict, check. After Geoffrey Litt’s “Understanding is the new bottleneck”.
`}function Be(){[].forEach.call(o.querySelectorAll(`.lx-cf-toggle`),function(e){e.addEventListener(`click`,function(){var t=e.getAttribute(`data-cf`);Object.prototype.hasOwnProperty.call(w,t)&&(w[t]=!w[t],H(!0),Y())})})}var Ve={robotsTxt:`Publish a valid /robots.txt with explicit User-agent rules and a Sitemap directive.`,sitemap:`Publish /sitemap.xml and reference it from robots.txt.`,linkHeaders:`Add RFC 8288 Link relations for your sitemap, docs, API catalog, or alternate machine representation.`,dnsAid:`Publish a DNSSEC-signed _index._agents. SVCB/HTTPS record for machine discovery.`,markdownNegotiation:`Return text/markdown when a client sends Accept: text/markdown, while keeping HTML for browsers.`,robotsTxtAiRules:`Declare explicit GPTBot, ClaudeBot, CCBot, and other AI crawler rules in robots.txt.`,contentSignals:`Add Content-Signal directives for ai-train, ai-input, and search to robots.txt.`,webBotAuth:`Publish a valid JWKS at /.well-known/http-message-signatures-directory.`,apiCatalog:`Publish /.well-known/api-catalog as application/linkset+json with service-desc and service-doc links.`,oauthDiscovery:`Publish OAuth/OIDC discovery metadata with issuer and token endpoints.`,oauthProtectedResource:`Publish /.well-known/oauth-protected-resource with authorization_servers and scopes_supported.`,authMd:`Publish /auth.md with agent registration instructions and link it to your OAuth metadata.`,mcpServerCard:`Publish /.well-known/mcp/server-card.json with serverInfo, transport, and capabilities.`,a2aAgentCard:`Publish /.well-known/agent-card.json describing the agent's interfaces, capabilities, and skills.`,agentSkills:`Publish /.well-known/agent-skills/index.json with skills, URLs, and digests.`,webMcp:`Expose safe browser actions with navigator.modelContext and JSON Schemas.`,x402:`Return a machine-readable HTTP 402 payment requirement for payable routes.`,mpp:`Describe payable OpenAPI operations with x-payment-info and MPP settlement metadata.`,ucp:`Publish /.well-known/ucp with protocol version, services, capabilities, and endpoints.`,acp:`Publish /.well-known/acp.json so agents can discover commerce services and transports.`,ap2:`Publish the AP2 discovery metadata when your commerce flow supports it.`};function He(e){var n=t(e)===null?e&&e.key:e;return{label:e&&e.label||n||`check`,fix:Ve[n]||`Inspect this surface and publish the expected machine-readable contract.`}}function Ue(e){return e.status===`pass`?{text:`pass`,kind:`ok`}:e.status===`neutral`?{text:`optional`,kind:`off`}:e.status===`unknown`?{text:`unknown`,kind:`warn`}:{text:`fix`,kind:`warn`}}function We(e){return(y.terms&&y.terms.scoreboard||[]).filter(function(t){return t.ua===e.key})[0]||null}function Ge(e){return e.error?{text:`unknown`,kind:`warn`}:e.challenge?{text:`challenge`,kind:`warn`}:e.blocked?{text:(e.status||`blocked`)+` blocked`,kind:`warn`}:e.status>=200&&e.status<400?{text:e.status+` `+(e.contentType||`readable`),kind:`ok`}:{text:e.status||`unknown`,kind:`warn`}}function Ke(e){var t=e.checks||{},n=[{key:`markdown`,label:`Clean machine text`},{key:`contract`,label:`Action contract`},{key:`authority`,label:`Delegated authority`}].filter(function(e){return w[e.key]&&!Re(e.key,t)});if(!n.length)return null;var r=e.passed,i=e.counted;return n.forEach(function(e){var n=t[Le[e.key].checks[0]];n&&n.countInScore&&r++}),{score:i?Math.round(r/i*100):e.overall,labels:n.map(function(e){return e.label})}}function qe(e,t){var n=function(){if(t){var e=t.textContent;t.textContent=`Copied`,setTimeout(function(){t.textContent=e},1400)}};if(navigator.clipboard&&navigator.clipboard.writeText)navigator.clipboard.writeText(e).then(n).catch(function(){});else{var r=document.createElement(`textarea`);r.value=e,r.style.position=`fixed`,r.style.opacity=`0`,document.body.appendChild(r),r.select();try{document.execCommand(`copy`),n()}catch{}r.remove()}}function Je(){[].forEach.call(o.querySelectorAll(`.lx-copy-fix`),function(e){e.addEventListener(`click`,function(){qe(e.getAttribute(`data-fix`)||``,e)})});var e=o.querySelector(`.lx-copy-all`);e&&e.addEventListener(`click`,function(){var t=[].map.call(o.querySelectorAll(`.lx-readiness-check[data-status='fail']`),function(e){return`- `+e.getAttribute(`data-label`)+`: `+e.getAttribute(`data-fix`)});qe(`Lens readiness fixes for `+(y.finalUrl||y.url)+` `+t.join(` -`),e)})}function Ye(e,t,n,r,i,a){return`
0`+e+``+t+``+n+`
`+r+`
`+(i&&i.length?`
    `+i.map(function(e){return`
  • `+e+`
  • `}).join(``)+`
`:``)+`
`}function Xe(e){var t=e.field||{},n=Number.isFinite(t.overall)?t.overall:null,r=P&&P.available&&Number.isFinite(P.score)?P.score:null,i=k&&k.ok&&k.recovery,a=i&&Number.isFinite(i.overall)?i.overall:null,o=r!=null&&n!=null&&a!=null,s=o?Math.round((r+n+a)/3):null,c=F?`checking…`:r==null?`—`:I(r)+`/100`,l=F?`Asking Cloudflare's public scanner for its independent standards level.`:r==null?I(P&&P.error||`Cloudflare's independent score is unavailable.`):`Cloudflare Agent Readiness · Level `+I(P.level)+`/5`+(P.levelName?` · `+I(P.levelName):``),u=(t.components||[]).map(function(e){return``+I(e.label)+`: `+(Number.isFinite(e.score)?I(e.score)+`/100`:`unknown`)}),d=i?(i.checks||[]).map(function(e){return(e.pass?`✓ `:`✕ `)+I(e.label)}):[],f=`
`+Ye(1,`Cloudflare standards`,c,l,[],F?`is-waiting`:r==null?`is-missing`:`is-ready`)+Ye(2,`Lens field evidence`,n==null?`—`:I(n)+`/100`,`Observed here: an identified fetch, six named bot samples, a usable body, and a machine door.`,u,n==null?`is-missing`:`is-ready`)+Ye(3,`Readability content recovery`,A?`extracting…`:a==null?`—`:I(a)+`/100`,A?`Readability is re-reading the page in the separate Reader Worker.`:a==null?I(k&&k.error||`The extraction result is unavailable.`):`Lens’s transparent checks over Readability output; Readability does not publish this score.`,d,A?`is-waiting`:a==null?`is-missing`:`is-ready`)+`
`,p=`
`+(r==null?`?`:I(r))+` + `+(n==null?`?`:I(n))+` + `+(a==null?`?`:I(a))+` ÷ 3 = `+(s==null?`unfinished`:I(s)+`/100`)+`
`;return`
`+(s==null?`—`:I(s))+`/100
Composite agent access
`+(o?`Three independent views agree to make this number.`:`Waiting for all three independent views.`)+`
Equal thirds. If one source fails, the aggregate stays unfinished instead of moving the goalposts.
`+f+p}function Ze(){var e=y.readiness;if(!e)return`
Readiness checks were unavailable for this origin.
`;var t=e.level>=5?`ok`:e.level>=3?``:`warn`,n=Ke(e),r=Xe(e),i=`
`+(e.categories||[]).map(function(e){var t=e.total===0&&e.checkCount>0;return`
`+I(e.label)+``+(e.countInScore?e.passed+`/`+e.total:`optional`)+`
`+(t?`—`:e.score)+`
`}).join(``)+`
`,a=`
`+Object.keys(e.checks||{}).map(function(t){return e.checks[t]}).map(function(e){var t=Ue(e),n=He(e),r=n.fix,i=ue[e.key]?`
Who reads it: `+L(I(ue[e.key]))+`
`:``;return`
`+L(I(n.label))+``+J(t.text,t.kind)+`
`+L(I(e.detail||``))+`
`+i+(e.status===`fail`?`
`+L(I(r))+`
`:``)+`
`}).join(``)+`
`,o=e.botViews||[],s=o.length?``+o.map(function(e){var t=We(e),n=Ge(e),r=e.blocked?`This identity may not retrieve the route.`:t&&t.verdict===`block`?`Robots asks it not to read; the sampled response is not enforcement.`:e.status>=200&&e.status<400?`It can retrieve this response; parsing and action are separate.`:`Access is uncertain from this sample.`;return``}).join(``)+`
bot identityrobots policysampled GETwhat this enables
`+I(e.label)+`
`+I(e.owner)+`
`+J(t?t.verdict:`not scored`,t&&t.verdict===`allow`?`ok`:`warn`)+``+J(n.text,n.kind)+``+I(r)+`
`:`
Bot identity samples were unavailable.
`,c=[],l=e.checks||{};l.markdownNegotiation&&l.markdownNegotiation.status!==`pass`&&c.push(`Agents pay the HTML/token tax because this URL does not negotiate a clean machine representation.`),y.structured&&!(y.structured.jsonld||[]).length&&l.apiCatalog&&l.apiCatalog.status!==`pass`&&c.push(`A machine can read the page, but it has no stable entity graph or declared action catalog to validate.`),y.agent&&y.agent.strategy&&!y.agent.strategy.action.length&&c.push(`Reading is possible; acting is not declared. An agent must drive the human page and guess at side effects.`),c.length||c.push(`The main access surfaces are published. Inspect the individual checks for the remaining edge cases and bot-specific policy.`);var u=`
    `+c.map(function(e){return`
  • `+I(e)+`
  • `}).join(``)+`
`,d=(e.nextActions||[]).length?`
`+e.nextActions.map(function(e){var t=He(e);return`
`+I(t.label)+``+I(t.fix)+`
`}).join(``)+`
`:`
No scored fixes are waiting.
`,f=e.levelNote?`
`+I(e.levelNote)+`
`:``,p=`
`+I(e.overall)+`/100 `+J(`Level `+e.level,t)+` `+I(e.levelName)+`
`+f+i;return n&&(p+=`
Local standards projection: `+I(n.score+`/100 if you add `+n.labels.join(`, `)+`.`)+` illustrative; the origin has not changed.
`),r+G(`Local standards mirror`,null,`The detailed checklist mirrors Cloudflare's public rubric for inspection and fixes. It is not counted again in the composite.`,p)+G(`The access gap`,{text:`human vs bot`},`A browser can render a page even when an agent cannot establish what it may read or do.`,u)+G(`Bot views`,{text:o.length+` sampled`},`Six representative, read-only GETs show observed response behavior. Robots policy and enforcement are deliberately separate.`,s)+G(`Checks and fixes`,null,`Every failed check has a concrete next move. Copy the complete implementation brief into your coding agent.`,``+d+a)}function Y(){if(u.innerHTML=S===`delta`?`Delta view · What changes`:`Machine view`,mt(),s&&(s.innerHTML=y&&S===`machine`?le()+Fe()+Ie():``),y){var e=Object.create(null);e.readiness=Ze,e.anatomy=ot,e.reader=Qe,e.wire=et,e.structured=st,e.ai=lt,e.terms=ut,e.discovery=ft,e.tools=nt;var t=Object.prototype.hasOwnProperty.call(e,C)?e[C]:null,n=typeof t==`function`?t:ot,r=S===`machine`?Pe()+n():S===`delta`?ze():n();S!==`delta`&&S!==`machine`&&(r=le()+r),o.innerHTML=r,c&&(c.scrollTop=0),S===`delta`&&Be(),C===`readiness`&&Je();var i=o.querySelector(`#lx-reader-run`);i&&i.addEventListener(`click`,$e);var a=o.querySelector(`#lx-wire-run`);a&&a.addEventListener(`click`,tt);var l=o.querySelector(`#lx-tools-run`);l&&l.addEventListener(`click`,rt),C===`tools`&&window.LensTools&&window.LensTools.bind(o,re,Y);var d=o.querySelector(`.lx-verdict-score`)||s&&s.querySelector(`.lx-verdict-score`);d&&d.addEventListener(`click`,function(){_t(`readiness`)}),C===`readiness`&&S!==`delta`&&setTimeout(at,0)}}function Qe(){return window.LensReader?window.LensReader.mount(k,A,y):G(`Reader's guess`,{text:`not run`},`A third-party extractor's opinion of this page, from its own Worker.`,`
Readability (Apache-2.0, mozilla/readability) guesses which part of the document is the article and throws the rest away. The Raw response tab is what the server actually sent. The interesting number is the gap.
`)}function $e(){if(A||!y)return;var e=y.finalUrl||y.url;A=!0,Y();function t(){if(!(!y||(y.finalUrl||y.url)!==e)){if(!window.LensReader){A=!1,Y();return}window.LensReader.run(y,function(t){!y||(y.finalUrl||y.url)!==e||(A=!1,k=t,Y(),X())},function(){!y||(y.finalUrl||y.url)!==e||(A=!1,Y())})}}if(window.LensReader){t();return}var n=document.createElement(`script`);n.src=`/a/lens-reader.20b46457.js`,n.onload=t,n.onerror=function(){!y||(y.finalUrl||y.url)!==e||(A=!1,Y())},document.head.appendChild(n)}function et(){return window.LensWire?window.LensWire.mount(j,M,y):G(`What it costs`,{text:`not run`},`Every request the page actually makes, and who receives them.`,`
Every other lens reads the document. This one records the load: each request the page fires, its bytes on the wire, and which host got it.
`)}function tt(){if(M||!y)return;var e=y.finalUrl||y.url;M=!0,Y();function t(){if(!(!y||(y.finalUrl||y.url)!==e)){if(!window.LensWire){M=!1,Y();return}window.LensWire.run(y,function(t){!y||(y.finalUrl||y.url)!==e||(M=!1,j=t,Y(),X())},function(){!y||(y.finalUrl||y.url)!==e||(M=!1,Y())})}}if(window.LensWire){t();return}var n=document.createElement(`script`);n.src=`/a/lens-wire.d234a22d.js`,n.onload=t,n.onerror=function(){!y||(y.finalUrl||y.url)!==e||(M=!1,Y())},document.head.appendChild(n)}function nt(){return window.LensTools?window.LensTools.render(N?{pending:!0}:re):G(`What it accepts`,{text:`not run`},`Reads this origin's MCP catalogue and draws a form for every tool, from the argument schema the server publishes.`,`
An MCP tool list is an ABI. A block explorer turns one into a form you can fill in, and inputSchema is the same artefact under another name.
`)}function rt(){if(N||!y)return;var e=y.finalUrl||y.url;N=!0,Y();function t(){if(!(!y||(y.finalUrl||y.url)!==e)){if(!window.LensTools){N=!1,Y();return}window.LensTools.run(e,function(t){!y||(y.finalUrl||y.url)!==e||(N=!1,re=t,Y())},function(){!y||(y.finalUrl||y.url)!==e||(N=!1,re={ok:!1,unreadable:!0,error:`the catalogue request did not complete`},Y())})}}if(window.LensTools){t();return}var n=document.createElement(`script`);n.src=`/a/lens-tools.ef810cf3.js`,n.onload=t,n.onerror=function(){!y||(y.finalUrl||y.url)!==e||(N=!1,Y())},document.head.appendChild(n)}function it(){if(!(F||!y)){var e=y.finalUrl||y.url;F=!0,Y(),fetch(`/lens/fetch?mode=cloudflare&url=`+encodeURIComponent(e)).then(function(e){return e.json()}).then(function(t){!y||(y.finalUrl||y.url)!==e||(F=!1,P=t&&t.ok?t:{available:!1,error:t&&t.error||`Cloudflare's scanner is unavailable.`},Y())}).catch(function(){!y||(y.finalUrl||y.url)!==e||(F=!1,P={available:!1,error:`Cloudflare's scanner is unavailable.`},Y())})}}function at(){!y||C!==`readiness`||S===`delta`||(!F&&!P&&it(),!A&&!k&&$e())}function ot(){var e=y.anatomy,t=``,n={status:y.status,"content-type":y.contentType||`(none)`,size:R(e?e.rawBytes:0)+(y.truncated?` (capped)`:``),words:e?e.wordCount:0,"img alt coverage":e?e.imgTotal?e.imgTotal-e.imgNoAlt+` / `+e.imgTotal+` have alt text`:`no images`:`?`};if(S===`both`){var r=y.cost&&y.cost.tiers&&y.cost.tiers[0],i=y.cost&&y.cost.rates&&y.cost.rates[0]||{usdPerMtok:3};r&&(n[`model read`]=`~`+z(r.tokens)+` tok · `+B(r.tokens/1e6*i.usdPerMtok)),t+=G(`What the bot received`,{text:y.status+` `+Z(y.status),kind:y.status>=200&&y.status<400?`ok`:`warn`},`The response before any browser touched it.`,K(n));var a=y.ai&&y.ai.markdown||``;return a?t+=G(`The scraper's diet`,{text:R(a.length)},`The first slice of the markdown a basic LLM scraper ingests.`,q(a.slice(0,1400)+(a.length>1400?` +`),e)})}function Ye(e,t,n,r,i,a){return`
0`+e+``+t+``+n+`
`+r+`
`+(i&&i.length?`
    `+i.map(function(e){return`
  • `+e+`
  • `}).join(``)+`
`:``)+`
`}function Xe(e){var t=e.field||{},n=Number.isFinite(t.overall)?t.overall:null,r=P&&P.available&&Number.isFinite(P.score)?P.score:null,i=k&&k.ok&&k.recovery,a=i&&Number.isFinite(i.overall)?i.overall:null,o=r!=null&&n!=null&&a!=null,s=o?Math.round((r+n+a)/3):null,c=F?`checking…`:r==null?`—`:I(r)+`/100`,l=F?`Asking Cloudflare's public scanner for its independent standards level.`:r==null?I(P&&P.error||`Cloudflare's independent score is unavailable.`):`Cloudflare Agent Readiness · Level `+I(P.level)+`/5`+(P.levelName?` · `+I(P.levelName):``),u=(t.components||[]).map(function(e){return``+I(e.label)+`: `+(Number.isFinite(e.score)?I(e.score)+`/100`:`unknown`)}),d=i?(i.checks||[]).map(function(e){return(e.pass?`✓ `:`✕ `)+I(e.label)}):[],f=`
`+Ye(1,`Cloudflare standards`,c,l,[],F?`is-waiting`:r==null?`is-missing`:`is-ready`)+Ye(2,`Lens field evidence`,n==null?`—`:I(n)+`/100`,`Observed here: an identified fetch, six named bot samples, a usable body, and a machine door.`,u,n==null?`is-missing`:`is-ready`)+Ye(3,`Readability content recovery`,A?`extracting…`:a==null?`—`:I(a)+`/100`,A?`Readability is re-reading the page in the separate Reader Worker.`:a==null?I(k&&k.error||`The extraction result is unavailable.`):`Lens’s transparent checks over Readability output; Readability does not publish this score.`,d,A?`is-waiting`:a==null?`is-missing`:`is-ready`)+`
`,p=`
`+(r==null?`?`:I(r))+` + `+(n==null?`?`:I(n))+` + `+(a==null?`?`:I(a))+` ÷ 3 = `+(s==null?`unfinished`:I(s)+`/100`)+`
`;return`
`+(s==null?`—`:I(s))+`/100
Composite agent access
`+(o?`Three independent views agree to make this number.`:`Waiting for all three independent views.`)+`
Equal thirds. If one source fails, the aggregate stays unfinished instead of moving the goalposts.
`+f+p}function Ze(){var e=y.readiness;if(!e)return`
Readiness checks were unavailable for this origin.
`;var t=e.level>=5?`ok`:e.level>=3?``:`warn`,n=Ke(e),r=Xe(e),i=`
`+(e.categories||[]).map(function(e){var t=e.total===0&&e.checkCount>0;return`
`+I(e.label)+``+(e.countInScore?e.passed+`/`+e.total:`optional`)+`
`+(t?`—`:e.score)+`
`}).join(``)+`
`,a=`
`+Object.keys(e.checks||{}).map(function(t){return e.checks[t]}).map(function(e){var t=Ue(e),n=He(e),r=n.fix,i=ue[e.key]?`
Who reads it: `+L(I(ue[e.key]))+`
`:``;return`
`+L(I(n.label))+``+J(t.text,t.kind)+`
`+L(I(e.detail||``))+`
`+i+(e.status===`fail`?`
`+L(I(r))+`
`:``)+`
`}).join(``)+`
`,o=e.botViews||[],s=o.length?``+o.map(function(e){var t=We(e),n=Ge(e),r=e.blocked?`This identity may not retrieve the route.`:t&&t.verdict===`block`?`Robots asks it not to read; the sampled response is not enforcement.`:e.status>=200&&e.status<400?`It can retrieve this response; parsing and action are separate.`:`Access is uncertain from this sample.`;return``}).join(``)+`
bot identityrobots policysampled GETwhat this enables
`+I(e.label)+`
`+I(e.owner)+`
`+J(t?t.verdict:`not scored`,t&&t.verdict===`allow`?`ok`:`warn`)+``+J(n.text,n.kind)+``+I(r)+`
`:`
Bot identity samples were unavailable.
`,c=[],l=e.checks||{};l.markdownNegotiation&&l.markdownNegotiation.status!==`pass`&&c.push(`Agents pay the HTML/token tax because this URL does not negotiate a clean machine representation.`),y.structured&&!(y.structured.jsonld||[]).length&&l.apiCatalog&&l.apiCatalog.status!==`pass`&&c.push(`A machine can read the page, but it has no stable entity graph or declared action catalog to validate.`),y.agent&&y.agent.strategy&&!y.agent.strategy.action.length&&c.push(`Reading is possible; acting is not declared. An agent must drive the human page and guess at side effects.`),c.length||c.push(`The main access surfaces are published. Inspect the individual checks for the remaining edge cases and bot-specific policy.`);var u=`
    `+c.map(function(e){return`
  • `+I(e)+`
  • `}).join(``)+`
`,d=(e.nextActions||[]).length?`
`+e.nextActions.map(function(e){var t=He(e);return`
`+I(t.label)+``+I(t.fix)+`
`}).join(``)+`
`:`
No scored fixes are waiting.
`,f=e.levelNote?`
`+I(e.levelNote)+`
`:``,p=`
`+I(e.overall)+`/100 `+J(`Level `+e.level,t)+` `+I(e.levelName)+`
`+f+i;return n&&(p+=`
Local standards projection: `+I(n.score+`/100 if you add `+n.labels.join(`, `)+`.`)+` illustrative; the origin has not changed.
`),r+G(`Local standards mirror`,null,`The detailed checklist mirrors Cloudflare's public rubric for inspection and fixes. It is not counted again in the composite.`,p)+G(`The access gap`,{text:`human vs bot`},`A browser can render a page even when an agent cannot establish what it may read or do.`,u)+G(`Bot views`,{text:o.length+` sampled`},`Six representative, read-only GETs show observed response behavior. Robots policy and enforcement are deliberately separate.`,s)+G(`Checks and fixes`,null,`Every failed check has a concrete next move. Copy the complete implementation brief into your coding agent.`,``+d+a)}function Y(){if(u.innerHTML=S===`delta`?`Delta view · What changes`:`Machine view`,mt(),s&&(s.innerHTML=y&&S===`machine`?le()+Fe()+Ie():``),y){var e=Object.create(null);e.readiness=Ze,e.anatomy=ot,e.reader=Qe,e.wire=et,e.structured=st,e.ai=lt,e.terms=ut,e.discovery=ft,e.tools=nt;var t=Object.prototype.hasOwnProperty.call(e,C)?e[C]:null,n=typeof t==`function`?t:ot,r=S===`machine`?Pe()+n():S===`delta`?ze():n();S!==`delta`&&S!==`machine`&&(r=le()+r),o.innerHTML=r,c&&(c.scrollTop=0),S===`delta`&&Be(),C===`readiness`&&Je();var i=o.querySelector(`#lx-reader-run`);i&&i.addEventListener(`click`,$e);var a=o.querySelector(`#lx-wire-run`);a&&a.addEventListener(`click`,tt);var l=o.querySelector(`#lx-tools-run`);l&&l.addEventListener(`click`,rt),C===`tools`&&window.LensTools&&window.LensTools.bind(o,re,Y);var d=o.querySelector(`.lx-verdict-score`)||s&&s.querySelector(`.lx-verdict-score`);d&&d.addEventListener(`click`,function(){_t(`readiness`)}),C===`readiness`&&S!==`delta`&&setTimeout(at,0)}}function Qe(){return window.LensReader?window.LensReader.mount(k,A,y):G(`Reader's guess`,{text:`not run`},`A third-party extractor's opinion of this page, from its own Worker.`,`
Readability (Apache-2.0, mozilla/readability) guesses which part of the document is the article and throws the rest away. The Raw response tab is what the server actually sent. The interesting number is the gap.
`)}function $e(){if(A||!y)return;var e=y.finalUrl||y.url;A=!0,Y();function t(){if(!(!y||(y.finalUrl||y.url)!==e)){if(!window.LensReader){A=!1,Y();return}window.LensReader.run(y,function(t){!y||(y.finalUrl||y.url)!==e||(A=!1,k=t,Y(),X())},function(){!y||(y.finalUrl||y.url)!==e||(A=!1,Y())})}}if(window.LensReader){t();return}var n=document.createElement(`script`);n.src=`/a/lens-reader.3c1fec9b.js`,n.onload=t,n.onerror=function(){!y||(y.finalUrl||y.url)!==e||(A=!1,Y())},document.head.appendChild(n)}function et(){return window.LensWire?window.LensWire.mount(j,M,y):G(`What it costs`,{text:`not run`},`Every request the page actually makes, and who receives them.`,`
Every other lens reads the document. This one records the load: each request the page fires, its bytes on the wire, and which host got it.
`)}function tt(){if(M||!y)return;var e=y.finalUrl||y.url;M=!0,Y();function t(){if(!(!y||(y.finalUrl||y.url)!==e)){if(!window.LensWire){M=!1,Y();return}window.LensWire.run(y,function(t){!y||(y.finalUrl||y.url)!==e||(M=!1,j=t,Y(),X())},function(){!y||(y.finalUrl||y.url)!==e||(M=!1,Y())})}}if(window.LensWire){t();return}var n=document.createElement(`script`);n.src=`/a/lens-wire.d234a22d.js`,n.onload=t,n.onerror=function(){!y||(y.finalUrl||y.url)!==e||(M=!1,Y())},document.head.appendChild(n)}function nt(){return window.LensTools?window.LensTools.render(N?{pending:!0}:re):G(`What it accepts`,{text:`not run`},`Reads this origin's MCP catalogue and draws a form for every tool, from the argument schema the server publishes.`,`
An MCP tool list is an ABI. A block explorer turns one into a form you can fill in, and inputSchema is the same artefact under another name.
`)}function rt(){if(N||!y)return;var e=y.finalUrl||y.url;N=!0,Y();function t(){if(!(!y||(y.finalUrl||y.url)!==e)){if(!window.LensTools){N=!1,Y();return}window.LensTools.run(e,function(t){!y||(y.finalUrl||y.url)!==e||(N=!1,re=t,Y())},function(){!y||(y.finalUrl||y.url)!==e||(N=!1,re={ok:!1,unreadable:!0,error:`the catalogue request did not complete`},Y())})}}if(window.LensTools){t();return}var n=document.createElement(`script`);n.src=`/a/lens-tools.ef810cf3.js`,n.onload=t,n.onerror=function(){!y||(y.finalUrl||y.url)!==e||(N=!1,Y())},document.head.appendChild(n)}function it(){if(!(F||!y)){var e=y.finalUrl||y.url;F=!0,Y(),fetch(`/lens/fetch?mode=cloudflare&url=`+encodeURIComponent(e)).then(function(e){return e.json()}).then(function(t){!y||(y.finalUrl||y.url)!==e||(F=!1,P=t&&t.ok?t:{available:!1,error:t&&t.error||`Cloudflare's scanner is unavailable.`},Y())}).catch(function(){!y||(y.finalUrl||y.url)!==e||(F=!1,P={available:!1,error:`Cloudflare's scanner is unavailable.`},Y())})}}function at(){!y||C!==`readiness`||S===`delta`||(!F&&!P&&it(),!A&&!k&&$e())}function ot(){var e=y.anatomy,t=``,n={status:y.status,"content-type":y.contentType||`(none)`,size:R(e?e.rawBytes:0)+(y.truncated?` (capped)`:``),words:e?e.wordCount:0,"img alt coverage":e?e.imgTotal?e.imgTotal-e.imgNoAlt+` / `+e.imgTotal+` have alt text`:`no images`:`?`};if(S===`both`){var r=y.cost&&y.cost.tiers&&y.cost.tiers[0],i=y.cost&&y.cost.rates&&y.cost.rates[0]||{usdPerMtok:3};r&&(n[`model read`]=`~`+z(r.tokens)+` tok · `+B(r.tokens/1e6*i.usdPerMtok)),t+=G(`What the bot received`,{text:y.status+` `+Z(y.status),kind:y.status>=200&&y.status<400?`ok`:`warn`},`The response before any browser touched it.`,K(n));var a=y.ai&&y.ai.markdown||``;return a?t+=G(`The scraper's diet`,{text:R(a.length)},`The first slice of the markdown a basic LLM scraper ingests.`,q(a.slice(0,1400)+(a.length>1400?` [… `+R(a.length)+` total]`:``),!0)):e&&e.rawHtml&&(t+=G(`Raw body, first slice`,{text:R(e.rawBytes)},`Served as-is; already machine-shaped.`,q(e.rawHtml.slice(0,1400)+(e.rawBytes>1400?` diff --git a/src/dict/a-dict/tooltip.274aab8b.js b/src/dict/a-dict/tooltip.274aab8b.js new file mode 100644 index 000000000..a00ea9126 --- /dev/null +++ b/src/dict/a-dict/tooltip.274aab8b.js @@ -0,0 +1,2 @@ +/*! minified at deploy - readable source: /tooltip.src.js */ +import{createHoist,hoverCapable,ANCHOR_OK}from"/a/hoist.d9081560.js";function asNumber(e){return typeof e==`number`&&isFinite(e)?e:null}function asRecord(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:null}export function start(a){let o=document.getElementById(`xp-tooltip`);if(!o||!hoverCapable())return;let s=e=>{if(!e)return``;let t=Number(e);return t<1024?`${t} B`:t<1048576?`${(t/1024).toFixed(1)} KB`:t<1024**3?`${(t/1024/1024).toFixed(1)} MB`:`${(t/1024**3).toFixed(2)} GB`},c=e=>{if(!e)return``;let t=String(e).trim().replace(/^(\d{4}):(\d{2}):(\d{2})/,`$1-$2-$3`).replace(` `,`T`),n=e=>String(e).padStart(2,`0`);if(/[zZ]|[+-]\d{2}:?\d{2}$/.test(t)){try{if(typeof Temporal<`u`){let e=Temporal.Instant.from(t).toZonedDateTimeISO(Temporal.Now.timeZoneId());return`${n(e.month)}-${n(e.day)}-${e.year}, ${n(e.hour)}:${n(e.minute)}`}}catch{}let e=new Date(t);return isNaN(e.getTime())?``:`${n(e.getMonth()+1)}-${n(e.getDate())}-${e.getFullYear()}, ${n(e.getHours())}:${n(e.getMinutes())}`}try{if(typeof Temporal<`u`){let e=Temporal.PlainDateTime.from(t);return`${n(e.month)}-${n(e.day)}-${e.year}, ${n(e.hour)}:${n(e.minute)}`}}catch{}let r=t.match(/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})/);return r?`${r[2]}-${r[3]}-${r[1]}, ${r[4]}:${r[5]}`:``},l=e=>String(e??``).replace(/&/g,`&`).replace(//g,`>`).replace(/"/g,`"`).replace(/'/g,`'`),u=e=>e?String(e).replace(/\s+mm$/i,` mm`)+` FF`:``,d=e=>e&&/\bFired\b|\bOn\b/i.test(e)?``:``,f=e=>{if(!e||!Array.isArray(e.l)||!e.l.length)return``;let t=e=>(32-Math.max(0,Math.min(100,e))*30/100).toFixed(1),n=e=>e.map((e,n)=>`${n},${t(e)}`).join(` `),r=e.l.length,i=``,a=Array.isArray(e.r)?``:``,o=Array.isArray(e.g)?``:``,s=Array.isArray(e.b)?``:``;return`${i}${a}${o}${s}`},p=e=>{if(!e||e.length!==256)return null;let t={l:[],r:[],g:[],b:[]},n=[`l`,`r`,`g`,`b`];for(let r=0;r<4;r++)for(let i=0;i<64;i++){let a=e.charCodeAt(r*64+i)-63;if(a<0||a>=64)return null;t[n[r]].push(Math.round(a*100/63))}return t},m=Object.create(null),h=(e,t)=>{if(e in m)return m[e];let n=t&&t.dataset&&t.dataset.hist;return m[e]=n?p(n):null,m[e]},g=(e,t)=>h(e,t)||_[e]&&_[e].hi||null,_=Object.create(null),v=new Set,y=`mv=7`,b=(e,t)=>{let n=_[e];n&&n.hi||v.has(e)||(v.add(e),fetch(`/images/meta/${encodeURIComponent(e)}.json?${y}`,t?{priority:t}:void 0).then(e=>{if(!e.ok||!(e.headers.get(`content-type`)||``).includes(`json`))throw 0;return e.json()}).then(t=>{if(!asRecord(t))throw 0;_[e]=t;let n=F.active();n&&n.matches?.(`.photos a`)&&(n.dataset.full||``).replace(/\.[^.]+$/,``)===e&&F.show(n)}).catch(()=>{}).finally(()=>{v.delete(e)}))},x=!1,S=()=>{x||(x=!0,fetch(`/images/exif.json?${y}`,{priority:`low`}).then(e=>{if(!e.ok||!(e.headers.get(`content-type`)||``).includes(`json`))throw 0;return e.json()}).then(e=>{if(!asRecord(e))throw 0;for(let t of Object.keys(e))_[t]||(_[t]=e[t]);let t=F.active();t&&t.matches?.(`.photos a`)&&F.show(t)}).catch(()=>{x=!1}))},C=e=>(e.dataset.full||decodeURIComponent((e.href||``).split(`/`).pop())).replace(/\.[^.]+$/,``),w=()=>{document.querySelector(`.photos a[data-full]`)&&S()},T=!1,E=()=>{if(T)return;T=!0;let e=()=>{T=!1,w()},t=()=>{typeof window.requestIdleCallback==`function`?window.requestIdleCallback(e,{timeout:2e3}):setTimeout(e,0)};document.readyState===`complete`?setTimeout(t,750):window.addEventListener(`load`,()=>setTimeout(t,750),{once:!0})},D=document.querySelector(`section.photos`);D&&new MutationObserver(()=>E()).observe(D,{childList:!0}),E();let O=e=>e?.closest?.(`.np-artist-link, .photos a, .np-list li[data-track-title], .car-link`)||null;function k(e){return e.matches(`.car-link`)?A(e):e.matches(`.np-artist-link`)?N(e):e.matches(`.photos a`)?j(e):e.matches(`.np-list li`)?P(e):``}function A(e){let t=e.dataset.carAvif||``,n=e.dataset.carJpg||``;if(!t&&!n)return``;let r=e.dataset.carCaption||``,i=e.dataset.carCredit||``;return`
`+(t?``:``)+``+(r||i?`
`+(r?l(r):``)+(i?`${l(i)}`:``)+`
`:``)+`
`}function j(e){let t=C(e);(!h(t,e)||!_[t])&&b(t);let n=_[t]||{},i=n.ap?String(n.ap).startsWith(`f/`)?n.ap:`f/`+n.ap:``,a=[n.sp,i,n.is?`ISO `+n.is:``].filter(Boolean).join(` `),o=n.w,p=n.h,m=o&&p?`${o} × ${p}`:``,v=[asNumber(n.ev)!==null&&n.ev!==0?(n.ev>0?`+`:``)+n.ev+` EV`:``,m,e.dataset.size?s(e.dataset.size):``].filter(Boolean).join(` · `),y=e=>e&&!/^off$/i.test(String(e)),x=e=>e&&e!==`0 (normal)`?e.replace(/\s*\(.*\)$/,``):``,S=[];y(n.cc)&&S.push(n.cc),y(n.cb)&&S.push(`blue `+n.cb);let w=y(n.gr)?n.gr+(y(n.gs)?` `+n.gs:``):``,T=x(n.ht)||x(n.st)?`H ${x(n.ht)||`0`} S ${x(n.st)||`0`}`:``,E=!!n.sa&&/\b(acros|monochrome|b\s*&\s*w|bw|sepia)\b/i.test(String(n.sa)),D=n.fm||(E?n.sa:``),O=E?``:x(n.sa),k=[[`Body`,n.cm],[`Lens`,[n.ln,u(n.fl)].filter(Boolean).join(` · `)],[`Film`,D],[`Dyn range`,n.dr],[`White bal`,n.wb===`Kelvin`&&n.ct?n.ct+`K`:n.wb],[`Chrome FX`,S.join(` · `)],[`Grain`,w],[`Tones`,T],[`Color`,O]].filter(([,e])=>e&&e!==`undefined`).map(([e,t])=>`
${l(e)}
${l(t)}
`).join(``),A=g(t,e),j=A?f(A):``,M=c(n.dt)||(e.dataset.uploaded?`up `+c(e.dataset.uploaded):``);return`
${l(t)}.jpg${d(n.fs)}
${j}
`+(a?`
${l(a)}
`:``)+(v?`
${l(v)}
`:``)+(k?`
${k}
`:``)+`
`}let M=e=>`
`;function N(e){let t=e.dataset.artistImage||``;return t?M(t):``}function P(e){let t=e.dataset.trackImage||``;if(t)return M(t);let n=e.dataset.trackTitle||``,r=e.dataset.trackArtists||``,i=e.dataset.trackDuration||``,a=e.dataset.trackExplicit===`1`;if(!n&&!r)return``;let o=[];return r&&o.push(r),i?o.push(i+(a?` · explicit`:``)):a&&o.push(`explicit`),`
${l(n)}
`+o.map(e=>`
${l(e)}
`).join(``)}let F=createHoist({node:o,findTarget:O,contentFor:k});a&&a.focus&&ANCHOR_OK?F.showAnchored(a.target):a&&a.target&&F.show(a.target,a)} \ No newline at end of file diff --git a/src/dict/a-dict/tooltip.77f0f08c.js b/src/dict/a-dict/tooltip.77f0f08c.js deleted file mode 100644 index 733235dda..000000000 --- a/src/dict/a-dict/tooltip.77f0f08c.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! minified at deploy - readable source: /tooltip.src.js */ -import{createHoist,hoverCapable,ANCHOR_OK}from"/a/hoist.d9081560.js";export function start(r){let i=document.getElementById(`xp-tooltip`);if(!i||!hoverCapable())return;let a=e=>{if(!e)return``;let t=Number(e);return t<1024?`${t} B`:t<1048576?`${(t/1024).toFixed(1)} KB`:t<1024**3?`${(t/1024/1024).toFixed(1)} MB`:`${(t/1024**3).toFixed(2)} GB`},o=e=>{if(!e)return``;let t=String(e).trim().replace(/^(\d{4}):(\d{2}):(\d{2})/,`$1-$2-$3`).replace(` `,`T`),n=e=>String(e).padStart(2,`0`);if(/[zZ]|[+-]\d{2}:?\d{2}$/.test(t)){try{if(typeof Temporal<`u`){let e=Temporal.Instant.from(t).toZonedDateTimeISO(Temporal.Now.timeZoneId());return`${n(e.month)}-${n(e.day)}-${e.year}, ${n(e.hour)}:${n(e.minute)}`}}catch{}let e=new Date(t);return isNaN(e.getTime())?``:`${n(e.getMonth()+1)}-${n(e.getDate())}-${e.getFullYear()}, ${n(e.getHours())}:${n(e.getMinutes())}`}try{if(typeof Temporal<`u`){let e=Temporal.PlainDateTime.from(t);return`${n(e.month)}-${n(e.day)}-${e.year}, ${n(e.hour)}:${n(e.minute)}`}}catch{}let r=t.match(/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})/);return r?`${r[2]}-${r[3]}-${r[1]}, ${r[4]}:${r[5]}`:``},s=e=>String(e??``).replace(/&/g,`&`).replace(//g,`>`).replace(/"/g,`"`).replace(/'/g,`'`),c=e=>e?String(e).replace(/\s+mm$/i,` mm`)+` FF`:``,l=e=>e&&/\bFired\b|\bOn\b/i.test(e)?``:``,u=e=>{if(!e||!Array.isArray(e.l)||!e.l.length)return``;let t=e=>(32-Math.max(0,Math.min(100,e))*30/100).toFixed(1),n=e=>e.map((e,n)=>`${n},${t(e)}`).join(` `),r=e.l.length,i=``,a=Array.isArray(e.r)?``:``,o=Array.isArray(e.g)?``:``,s=Array.isArray(e.b)?``:``;return`${i}${a}${o}${s}`},d=e=>f[e]&&f[e].hi||null,f=Object.create(null),p=new Set,m=`mv=6`,h=(e,t)=>{let n=f[e];n&&n.hi||p.has(e)||(p.add(e),fetch(`/images/meta/${encodeURIComponent(e)}.json?${m}`,t?{priority:t}:void 0).then(e=>{if(!e.ok||!(e.headers.get(`content-type`)||``).includes(`json`))throw 0;return e.json()}).then(t=>{if(!t||typeof t!=`object`)throw 0;f[e]=t;let n=A.active();n&&n.matches?.(`.photos a`)&&(n.dataset.full||``).replace(/\.[^.]+$/,``)===e&&A.show(n)}).catch(()=>{}).finally(()=>{p.delete(e)}))},g=!1,_=()=>{g||(g=!0,fetch(`/images/exif.json?${m}`,{priority:`low`}).then(e=>{if(!e.ok||!(e.headers.get(`content-type`)||``).includes(`json`))throw 0;return e.json()}).then(e=>{if(!e||typeof e!=`object`)throw 0;for(let t of Object.keys(e))f[t]||(f[t]=e[t]);let t=A.active();t&&t.matches?.(`.photos a`)&&A.show(t)}).catch(()=>{g=!1}))},v=e=>(e.dataset.full||decodeURIComponent((e.href||``).split(`/`).pop())).replace(/\.[^.]+$/,``),y=()=>{document.querySelector(`.photos a[data-full]`)&&_()},b=!1,x=()=>{if(b)return;b=!0;let e=()=>{b=!1,y()},t=()=>{typeof window.requestIdleCallback==`function`?window.requestIdleCallback(e,{timeout:2e3}):setTimeout(e,0)};document.readyState===`complete`?setTimeout(t,750):window.addEventListener(`load`,()=>setTimeout(t,750),{once:!0})},S=document.querySelector(`section.photos`);S&&new MutationObserver(()=>x()).observe(S,{childList:!0}),x();let C=e=>e?.closest?.(`.np-artist-link, .photos a, .np-list li[data-track-title], .car-link`)||null;function w(e){return e.matches(`.car-link`)?T(e):e.matches(`.np-artist-link`)?O(e):e.matches(`.photos a`)?E(e):e.matches(`.np-list li`)?k(e):``}function T(e){let t=e.dataset.carAvif||``,n=e.dataset.carJpg||``;if(!t&&!n)return``;let r=e.dataset.carCaption||``,i=e.dataset.carCredit||``;return`
`+(t?``:``)+``+(r||i?`
`+(r?s(r):``)+(i?`${s(i)}`:``)+`
`:``)+`
`}function E(e){let t=v(e);e.querySelector(`img`),h(t);let n=f[t]||{},r=n.ap?String(n.ap).startsWith(`f/`)?n.ap:`f/`+n.ap:``,i=[n.sp,r,n.is?`ISO `+n.is:``].filter(Boolean).join(` `),p=n.w,m=n.h,g=p&&m?`${p} × ${m}`:``,_=[typeof n.ev==`number`&&n.ev!==0?(n.ev>0?`+`:``)+n.ev+` EV`:``,g,e.dataset.size?a(e.dataset.size):``].filter(Boolean).join(` · `),y=e=>e&&!/^off$/i.test(String(e)),b=e=>e&&e!==`0 (normal)`?e.replace(/\s*\(.*\)$/,``):``,x=[];y(n.cc)&&x.push(n.cc),y(n.cb)&&x.push(`blue `+n.cb);let S=y(n.gr)?n.gr+(y(n.gs)?` `+n.gs:``):``,C=b(n.ht)||b(n.st)?`H ${b(n.ht)||`0`} S ${b(n.st)||`0`}`:``,w=!!n.sa&&/\b(acros|monochrome|b\s*&\s*w|bw|sepia)\b/i.test(String(n.sa)),T=n.fm||(w?n.sa:``),E=w?``:b(n.sa),D=[[`Body`,n.cm],[`Lens`,[n.ln,c(n.fl)].filter(Boolean).join(` · `)],[`Film`,T],[`Dyn range`,n.dr],[`White bal`,n.wb===`Kelvin`&&n.ct?n.ct+`K`:n.wb],[`Chrome FX`,x.join(` · `)],[`Grain`,S],[`Tones`,C],[`Color`,E]].filter(([,e])=>e&&e!==`undefined`).map(([e,t])=>`
${s(e)}
${s(t)}
`).join(``),O=d(t),k=O?u(O):``,A=o(n.dt)||(e.dataset.uploaded?`up `+o(e.dataset.uploaded):``);return`
${s(t)}.jpg${l(n.fs)}
${k}
`+(i?`
${s(i)}
`:``)+(_?`
${s(_)}
`:``)+(D?`
${D}
`:``)+`
`}let D=e=>`
`;function O(e){let t=e.dataset.artistImage||``;return t?D(t):``}function k(e){let t=e.dataset.trackImage||``;if(t)return D(t);let n=e.dataset.trackTitle||``,r=e.dataset.trackArtists||``,i=e.dataset.trackDuration||``,a=e.dataset.trackExplicit===`1`;if(!n&&!r)return``;let o=[];return r&&o.push(r),i?o.push(i+(a?` · explicit`:``)):a&&o.push(`explicit`),`
${s(n)}
`+o.map(e=>`
${s(e)}
`).join(``)}let A=createHoist({node:i,findTarget:C,contentFor:w});r&&r.focus&&ANCHOR_OK?A.showAnchored(r.target):r&&r.target&&A.show(r.target,r)} \ No newline at end of file diff --git a/src/dict/p-dict/access__index.424bbbb42ac63c89.html.br b/src/dict/p-dict/access__index.424bbbb42ac63c89.html.br deleted file mode 100644 index f33758bdb..000000000 Binary files a/src/dict/p-dict/access__index.424bbbb42ac63c89.html.br and /dev/null differ diff --git a/src/dict/p-dict/access__index.7cee08078d37335f.html.br b/src/dict/p-dict/access__index.7cee08078d37335f.html.br new file mode 100644 index 000000000..ca87bcc8a Binary files /dev/null and b/src/dict/p-dict/access__index.7cee08078d37335f.html.br differ diff --git a/src/dict/p-dict/bot.2b40dab6c7904502.html.br b/src/dict/p-dict/bot.2b40dab6c7904502.html.br deleted file mode 100644 index 3a0ecd45b..000000000 Binary files a/src/dict/p-dict/bot.2b40dab6c7904502.html.br and /dev/null differ diff --git a/src/dict/p-dict/bot.979e7e03b13f7c5d.html.br b/src/dict/p-dict/bot.979e7e03b13f7c5d.html.br new file mode 100644 index 000000000..d543a6c21 Binary files /dev/null and b/src/dict/p-dict/bot.979e7e03b13f7c5d.html.br differ diff --git a/src/dict/p-dict/garage__blueprint.48b59ef957a14fa4.html.br b/src/dict/p-dict/garage__blueprint.48b59ef957a14fa4.html.br deleted file mode 100644 index 3095b8a94..000000000 Binary files a/src/dict/p-dict/garage__blueprint.48b59ef957a14fa4.html.br and /dev/null differ diff --git a/src/dict/p-dict/garage__blueprint.4bfa638865c78990.html.br b/src/dict/p-dict/garage__blueprint.4bfa638865c78990.html.br new file mode 100644 index 000000000..36f4bfb3b Binary files /dev/null and b/src/dict/p-dict/garage__blueprint.4bfa638865c78990.html.br differ diff --git a/src/dict/p-dict/garage__chunks.505b6a046ce4024c.html.br b/src/dict/p-dict/garage__chunks.505b6a046ce4024c.html.br new file mode 100644 index 000000000..65aa28908 Binary files /dev/null and b/src/dict/p-dict/garage__chunks.505b6a046ce4024c.html.br differ diff --git a/src/dict/p-dict/garage__chunks.d3130f6db15a2830.html.br b/src/dict/p-dict/garage__chunks.d3130f6db15a2830.html.br deleted file mode 100644 index ec859dae7..000000000 Binary files a/src/dict/p-dict/garage__chunks.d3130f6db15a2830.html.br and /dev/null differ diff --git a/src/dict/p-dict/garage__cloudflare.41d6747e48b4b045.html.br b/src/dict/p-dict/garage__cloudflare.41d6747e48b4b045.html.br deleted file mode 100644 index f327fc38b..000000000 Binary files a/src/dict/p-dict/garage__cloudflare.41d6747e48b4b045.html.br and /dev/null differ diff --git a/src/dict/p-dict/garage__cloudflare.f700e30cc1b1d892.html.br b/src/dict/p-dict/garage__cloudflare.f700e30cc1b1d892.html.br new file mode 100644 index 000000000..d18332c5f Binary files /dev/null and b/src/dict/p-dict/garage__cloudflare.f700e30cc1b1d892.html.br differ diff --git a/src/dict/p-dict/garage__compression.472985441f15cab5.html.br b/src/dict/p-dict/garage__compression.472985441f15cab5.html.br deleted file mode 100644 index 4a6ee6508..000000000 Binary files a/src/dict/p-dict/garage__compression.472985441f15cab5.html.br and /dev/null differ diff --git a/src/dict/p-dict/garage__compression.b191649ec81498a2.html.br b/src/dict/p-dict/garage__compression.b191649ec81498a2.html.br new file mode 100644 index 000000000..6ffcf0075 Binary files /dev/null and b/src/dict/p-dict/garage__compression.b191649ec81498a2.html.br differ diff --git a/src/dict/p-dict/garage__encoding.4a0b568fb147e4a7.html.br b/src/dict/p-dict/garage__encoding.4a0b568fb147e4a7.html.br new file mode 100644 index 000000000..32f0614f4 Binary files /dev/null and b/src/dict/p-dict/garage__encoding.4a0b568fb147e4a7.html.br differ diff --git a/src/dict/p-dict/garage__encoding.74c9fe61c864ac42.html.br b/src/dict/p-dict/garage__encoding.74c9fe61c864ac42.html.br deleted file mode 100644 index 1fba66da4..000000000 Binary files a/src/dict/p-dict/garage__encoding.74c9fe61c864ac42.html.br and /dev/null differ diff --git a/src/dict/p-dict/garage__gpt56.13bb05b1c25c611f.html.br b/src/dict/p-dict/garage__gpt56.13bb05b1c25c611f.html.br deleted file mode 100644 index eb9a837a8..000000000 Binary files a/src/dict/p-dict/garage__gpt56.13bb05b1c25c611f.html.br and /dev/null differ diff --git a/src/dict/p-dict/garage__gpt56.6e1aa5bf4fad3c05.html.br b/src/dict/p-dict/garage__gpt56.6e1aa5bf4fad3c05.html.br new file mode 100644 index 000000000..7c4af5532 Binary files /dev/null and b/src/dict/p-dict/garage__gpt56.6e1aa5bf4fad3c05.html.br differ diff --git a/src/dict/p-dict/garage__horizon.b1a11c90a7cd8672.html.br b/src/dict/p-dict/garage__horizon.b1a11c90a7cd8672.html.br new file mode 100644 index 000000000..1ce42de2e Binary files /dev/null and b/src/dict/p-dict/garage__horizon.b1a11c90a7cd8672.html.br differ diff --git a/src/dict/p-dict/garage__horizon.bf8a511394fdf959.html.br b/src/dict/p-dict/garage__horizon.bf8a511394fdf959.html.br deleted file mode 100644 index 3ed18f715..000000000 Binary files a/src/dict/p-dict/garage__horizon.bf8a511394fdf959.html.br and /dev/null differ diff --git a/src/dict/p-dict/garage__index.2ca0d2cafea54b14.html.br b/src/dict/p-dict/garage__index.2ca0d2cafea54b14.html.br new file mode 100644 index 000000000..887eb5215 Binary files /dev/null and b/src/dict/p-dict/garage__index.2ca0d2cafea54b14.html.br differ diff --git a/src/dict/p-dict/garage__index.4d183cb1888735cd.html.br b/src/dict/p-dict/garage__index.4d183cb1888735cd.html.br deleted file mode 100644 index da72532d1..000000000 Binary files a/src/dict/p-dict/garage__index.4d183cb1888735cd.html.br and /dev/null differ diff --git a/src/dict/p-dict/garage__iroh.219e25d49e1f3187.html.br b/src/dict/p-dict/garage__iroh.219e25d49e1f3187.html.br deleted file mode 100644 index 857fd3121..000000000 Binary files a/src/dict/p-dict/garage__iroh.219e25d49e1f3187.html.br and /dev/null differ diff --git a/src/dict/p-dict/garage__iroh.444982a84a2e01e6.html.br b/src/dict/p-dict/garage__iroh.444982a84a2e01e6.html.br new file mode 100644 index 000000000..10be0a584 Binary files /dev/null and b/src/dict/p-dict/garage__iroh.444982a84a2e01e6.html.br differ diff --git a/src/dict/p-dict/garage__masonry.534aa1361fca91af.html.br b/src/dict/p-dict/garage__masonry.534aa1361fca91af.html.br deleted file mode 100644 index 65c00d247..000000000 Binary files a/src/dict/p-dict/garage__masonry.534aa1361fca91af.html.br and /dev/null differ diff --git a/src/dict/p-dict/garage__masonry.63a0d76c517bd869.html.br b/src/dict/p-dict/garage__masonry.63a0d76c517bd869.html.br new file mode 100644 index 000000000..52426857e Binary files /dev/null and b/src/dict/p-dict/garage__masonry.63a0d76c517bd869.html.br differ diff --git a/src/dict/p-dict/garage__octane.21ff9493ca88759a.html.br b/src/dict/p-dict/garage__octane.21ff9493ca88759a.html.br new file mode 100644 index 000000000..6d9186d39 Binary files /dev/null and b/src/dict/p-dict/garage__octane.21ff9493ca88759a.html.br differ diff --git a/src/dict/p-dict/garage__octane.53f1027d5107b441.html.br b/src/dict/p-dict/garage__octane.53f1027d5107b441.html.br deleted file mode 100644 index d95365970..000000000 Binary files a/src/dict/p-dict/garage__octane.53f1027d5107b441.html.br and /dev/null differ diff --git a/src/dict/p-dict/garage__pqc.34a49bfdd3387899.html.br b/src/dict/p-dict/garage__pqc.34a49bfdd3387899.html.br deleted file mode 100644 index 6bac5a1c7..000000000 Binary files a/src/dict/p-dict/garage__pqc.34a49bfdd3387899.html.br and /dev/null differ diff --git a/src/dict/p-dict/garage__pqc.b5fc6f8c596a59cb.html.br b/src/dict/p-dict/garage__pqc.b5fc6f8c596a59cb.html.br new file mode 100644 index 000000000..0389ef7ad Binary files /dev/null and b/src/dict/p-dict/garage__pqc.b5fc6f8c596a59cb.html.br differ diff --git a/src/dict/p-dict/garage__pretext.1b30854330df783c.html.br b/src/dict/p-dict/garage__pretext.1b30854330df783c.html.br deleted file mode 100644 index b0d06db37..000000000 Binary files a/src/dict/p-dict/garage__pretext.1b30854330df783c.html.br and /dev/null differ diff --git a/src/dict/p-dict/garage__pretext.a9f66a2230a34546.html.br b/src/dict/p-dict/garage__pretext.a9f66a2230a34546.html.br new file mode 100644 index 000000000..745972392 Binary files /dev/null and b/src/dict/p-dict/garage__pretext.a9f66a2230a34546.html.br differ diff --git a/src/dict/p-dict/garage__safari27.146fe8a759e1ab9f.html.br b/src/dict/p-dict/garage__safari27.146fe8a759e1ab9f.html.br deleted file mode 100644 index 8e07bcc22..000000000 Binary files a/src/dict/p-dict/garage__safari27.146fe8a759e1ab9f.html.br and /dev/null differ diff --git a/src/dict/p-dict/garage__safari27.b8915f3ceca632fe.html.br b/src/dict/p-dict/garage__safari27.b8915f3ceca632fe.html.br new file mode 100644 index 000000000..843b651e7 Binary files /dev/null and b/src/dict/p-dict/garage__safari27.b8915f3ceca632fe.html.br differ diff --git a/src/dict/p-dict/garage__scroll.6e3a87eded010edf.html.br b/src/dict/p-dict/garage__scroll.6e3a87eded010edf.html.br deleted file mode 100644 index 4f9ab23e5..000000000 Binary files a/src/dict/p-dict/garage__scroll.6e3a87eded010edf.html.br and /dev/null differ diff --git a/src/dict/p-dict/garage__scroll.e8285c98e220782c.html.br b/src/dict/p-dict/garage__scroll.e8285c98e220782c.html.br new file mode 100644 index 000000000..fb869e72a Binary files /dev/null and b/src/dict/p-dict/garage__scroll.e8285c98e220782c.html.br differ diff --git a/src/dict/p-dict/garage__teardown.2a60f4de3d102437.html.br b/src/dict/p-dict/garage__teardown.2a60f4de3d102437.html.br new file mode 100644 index 000000000..94f32d4f9 Binary files /dev/null and b/src/dict/p-dict/garage__teardown.2a60f4de3d102437.html.br differ diff --git a/src/dict/p-dict/garage__teardown.55cb7b2eaa3af4a5.html.br b/src/dict/p-dict/garage__teardown.55cb7b2eaa3af4a5.html.br deleted file mode 100644 index d6e9d85c7..000000000 Binary files a/src/dict/p-dict/garage__teardown.55cb7b2eaa3af4a5.html.br and /dev/null differ diff --git a/src/dict/p-dict/garage__tooltips.5c371291eddc3c42.html.br b/src/dict/p-dict/garage__tooltips.5c371291eddc3c42.html.br new file mode 100644 index 000000000..51ecb0d6e Binary files /dev/null and b/src/dict/p-dict/garage__tooltips.5c371291eddc3c42.html.br differ diff --git a/src/dict/p-dict/garage__tooltips.88105fbdab8d9153.html.br b/src/dict/p-dict/garage__tooltips.88105fbdab8d9153.html.br deleted file mode 100644 index b2eb528ba..000000000 Binary files a/src/dict/p-dict/garage__tooltips.88105fbdab8d9153.html.br and /dev/null differ diff --git a/src/dict/p-dict/garage__wire.03b919d03140a023.html.br b/src/dict/p-dict/garage__wire.03b919d03140a023.html.br new file mode 100644 index 000000000..4310a946d Binary files /dev/null and b/src/dict/p-dict/garage__wire.03b919d03140a023.html.br differ diff --git a/src/dict/p-dict/garage__wire.a848ec17d02995ac.html.br b/src/dict/p-dict/garage__wire.a848ec17d02995ac.html.br deleted file mode 100644 index 1909f49d2..000000000 Binary files a/src/dict/p-dict/garage__wire.a848ec17d02995ac.html.br and /dev/null differ diff --git a/src/dict/p-dict/garage__workers.b0544694a5144182.html.br b/src/dict/p-dict/garage__workers.b0544694a5144182.html.br new file mode 100644 index 000000000..6d5efff17 Binary files /dev/null and b/src/dict/p-dict/garage__workers.b0544694a5144182.html.br differ diff --git a/src/dict/p-dict/garage__workers.bdc151819aad988c.html.br b/src/dict/p-dict/garage__workers.bdc151819aad988c.html.br deleted file mode 100644 index ad836f6d7..000000000 Binary files a/src/dict/p-dict/garage__workers.bdc151819aad988c.html.br and /dev/null differ diff --git a/src/dict/p-dict/index.1fb781a02b3b5c5b.html.br b/src/dict/p-dict/index.1fb781a02b3b5c5b.html.br deleted file mode 100644 index eb020ff68..000000000 Binary files a/src/dict/p-dict/index.1fb781a02b3b5c5b.html.br and /dev/null differ diff --git a/src/dict/p-dict/index.910cd211ae984c56.html.br b/src/dict/p-dict/index.910cd211ae984c56.html.br new file mode 100644 index 000000000..c9f6ecb7e Binary files /dev/null and b/src/dict/p-dict/index.910cd211ae984c56.html.br differ diff --git a/src/dict/p-dict/lens.3d5b8e61e0937f65.html.br b/src/dict/p-dict/lens.3d5b8e61e0937f65.html.br deleted file mode 100644 index c93bd4ae7..000000000 Binary files a/src/dict/p-dict/lens.3d5b8e61e0937f65.html.br and /dev/null differ diff --git a/src/dict/p-dict/lens.ca689be55450a55a.html.br b/src/dict/p-dict/lens.ca689be55450a55a.html.br new file mode 100644 index 000000000..e44f8a070 Binary files /dev/null and b/src/dict/p-dict/lens.ca689be55450a55a.html.br differ diff --git a/src/dict/p-dict/lwe__dac.9776b2aff9bcd7fc.html.br b/src/dict/p-dict/lwe__dac.9776b2aff9bcd7fc.html.br deleted file mode 100644 index 0649ed6fb..000000000 Binary files a/src/dict/p-dict/lwe__dac.9776b2aff9bcd7fc.html.br and /dev/null differ diff --git a/src/dict/p-dict/lwe__dac.fe66a56f31fccd31.html.br b/src/dict/p-dict/lwe__dac.fe66a56f31fccd31.html.br new file mode 100644 index 000000000..1dab2518c Binary files /dev/null and b/src/dict/p-dict/lwe__dac.fe66a56f31fccd31.html.br differ diff --git a/src/dict/p-dict/lwe__drivers.75776add1ab1a6eb.html.br b/src/dict/p-dict/lwe__drivers.75776add1ab1a6eb.html.br deleted file mode 100644 index d3e6b1746..000000000 Binary files a/src/dict/p-dict/lwe__drivers.75776add1ab1a6eb.html.br and /dev/null differ diff --git a/src/dict/p-dict/lwe__drivers.79ef801d4bb64ddc.html.br b/src/dict/p-dict/lwe__drivers.79ef801d4bb64ddc.html.br new file mode 100644 index 000000000..aee981abf Binary files /dev/null and b/src/dict/p-dict/lwe__drivers.79ef801d4bb64ddc.html.br differ diff --git a/src/dict/p-dict/lwe__encoding.9e90276d8af35fe1.html.br b/src/dict/p-dict/lwe__encoding.9e90276d8af35fe1.html.br deleted file mode 100644 index 0e4dca3a2..000000000 Binary files a/src/dict/p-dict/lwe__encoding.9e90276d8af35fe1.html.br and /dev/null differ diff --git a/src/dict/p-dict/lwe__encoding.d92bd21614750744.html.br b/src/dict/p-dict/lwe__encoding.d92bd21614750744.html.br new file mode 100644 index 000000000..4d11a0064 Binary files /dev/null and b/src/dict/p-dict/lwe__encoding.d92bd21614750744.html.br differ diff --git a/src/dict/p-dict/lwe__fhe.280a691fb35fb620.html.br b/src/dict/p-dict/lwe__fhe.280a691fb35fb620.html.br deleted file mode 100644 index f70449b7e..000000000 Binary files a/src/dict/p-dict/lwe__fhe.280a691fb35fb620.html.br and /dev/null differ diff --git a/src/dict/p-dict/lwe__fhe.59460391580d2cb2.html.br b/src/dict/p-dict/lwe__fhe.59460391580d2cb2.html.br new file mode 100644 index 000000000..47bd3e1d0 Binary files /dev/null and b/src/dict/p-dict/lwe__fhe.59460391580d2cb2.html.br differ diff --git a/src/dict/p-dict/lwe__index.8b51a8c66aab4abd.html.br b/src/dict/p-dict/lwe__index.8b51a8c66aab4abd.html.br deleted file mode 100644 index ea6c904c2..000000000 Binary files a/src/dict/p-dict/lwe__index.8b51a8c66aab4abd.html.br and /dev/null differ diff --git a/src/dict/p-dict/lwe__index.cc1388a4770f8ac9.html.br b/src/dict/p-dict/lwe__index.cc1388a4770f8ac9.html.br new file mode 100644 index 000000000..e8af7f16c Binary files /dev/null and b/src/dict/p-dict/lwe__index.cc1388a4770f8ac9.html.br differ diff --git a/src/dict/p-dict/lwe__knots.732692f7c86fbe17.html.br b/src/dict/p-dict/lwe__knots.732692f7c86fbe17.html.br deleted file mode 100644 index e1dd1a8d9..000000000 Binary files a/src/dict/p-dict/lwe__knots.732692f7c86fbe17.html.br and /dev/null differ diff --git a/src/dict/p-dict/lwe__knots.dc81e4b83b4be398.html.br b/src/dict/p-dict/lwe__knots.dc81e4b83b4be398.html.br new file mode 100644 index 000000000..de8d94e8c Binary files /dev/null and b/src/dict/p-dict/lwe__knots.dc81e4b83b4be398.html.br differ diff --git a/src/dict/p-dict/lwe__lean.01461f410c394d91.html.br b/src/dict/p-dict/lwe__lean.01461f410c394d91.html.br new file mode 100644 index 000000000..df52e560c Binary files /dev/null and b/src/dict/p-dict/lwe__lean.01461f410c394d91.html.br differ diff --git a/src/dict/p-dict/lwe__lean.44a13e6715076f95.html.br b/src/dict/p-dict/lwe__lean.44a13e6715076f95.html.br deleted file mode 100644 index a7a960bff..000000000 Binary files a/src/dict/p-dict/lwe__lean.44a13e6715076f95.html.br and /dev/null differ diff --git a/src/dict/p-dict/lwe__mpc.7e59a664cad5a489.html.br b/src/dict/p-dict/lwe__mpc.7e59a664cad5a489.html.br new file mode 100644 index 000000000..3f70c43fc Binary files /dev/null and b/src/dict/p-dict/lwe__mpc.7e59a664cad5a489.html.br differ diff --git a/src/dict/p-dict/lwe__mpc.8eb0d60ec51e0596.html.br b/src/dict/p-dict/lwe__mpc.8eb0d60ec51e0596.html.br deleted file mode 100644 index 6ce775f2a..000000000 Binary files a/src/dict/p-dict/lwe__mpc.8eb0d60ec51e0596.html.br and /dev/null differ diff --git a/src/dict/p-dict/lwe__pcrypto.5b139786562ab4a4.html.br b/src/dict/p-dict/lwe__pcrypto.5b139786562ab4a4.html.br deleted file mode 100644 index 718928a2b..000000000 Binary files a/src/dict/p-dict/lwe__pcrypto.5b139786562ab4a4.html.br and /dev/null differ diff --git a/src/dict/p-dict/lwe__pcrypto.ce146a22969d60e7.html.br b/src/dict/p-dict/lwe__pcrypto.ce146a22969d60e7.html.br new file mode 100644 index 000000000..ed2157cc0 Binary files /dev/null and b/src/dict/p-dict/lwe__pcrypto.ce146a22969d60e7.html.br differ diff --git a/src/dict/p-dict/lwe__tee.68b4ba1a86699349.html.br b/src/dict/p-dict/lwe__tee.9975e7e980cfff60.html.br similarity index 70% rename from src/dict/p-dict/lwe__tee.68b4ba1a86699349.html.br rename to src/dict/p-dict/lwe__tee.9975e7e980cfff60.html.br index 60be0a6c0..98d3f13b2 100644 Binary files a/src/dict/p-dict/lwe__tee.68b4ba1a86699349.html.br and b/src/dict/p-dict/lwe__tee.9975e7e980cfff60.html.br differ diff --git a/src/dict/p-dict/lwe__utf8.10fc8eb4a5f97309.html.br b/src/dict/p-dict/lwe__utf8.10fc8eb4a5f97309.html.br deleted file mode 100644 index 6abf0a47c..000000000 Binary files a/src/dict/p-dict/lwe__utf8.10fc8eb4a5f97309.html.br and /dev/null differ diff --git a/src/dict/p-dict/lwe__utf8.c6cef040cd9a1858.html.br b/src/dict/p-dict/lwe__utf8.c6cef040cd9a1858.html.br new file mode 100644 index 000000000..c87d571bb Binary files /dev/null and b/src/dict/p-dict/lwe__utf8.c6cef040cd9a1858.html.br differ diff --git a/src/dict/p-dict/lwe__vigenere.767da68de46959e8.html.br b/src/dict/p-dict/lwe__vigenere.767da68de46959e8.html.br deleted file mode 100644 index 5a3e57daf..000000000 Binary files a/src/dict/p-dict/lwe__vigenere.767da68de46959e8.html.br and /dev/null differ diff --git a/src/dict/p-dict/lwe__vigenere.e34824a6b007dd4b.html.br b/src/dict/p-dict/lwe__vigenere.e34824a6b007dd4b.html.br new file mode 100644 index 000000000..0d0346897 Binary files /dev/null and b/src/dict/p-dict/lwe__vigenere.e34824a6b007dd4b.html.br differ diff --git a/src/dict/p-dict/photos.71e38ff0b9e847c4.html.br b/src/dict/p-dict/photos.71e38ff0b9e847c4.html.br deleted file mode 100644 index 8af1dbb53..000000000 Binary files a/src/dict/p-dict/photos.71e38ff0b9e847c4.html.br and /dev/null differ diff --git a/src/dict/p-dict/photos.e8698ce43351a8d3.html.br b/src/dict/p-dict/photos.e8698ce43351a8d3.html.br new file mode 100644 index 000000000..5cb80d5eb Binary files /dev/null and b/src/dict/p-dict/photos.e8698ce43351a8d3.html.br differ diff --git a/src/dict/p-dict/pixel-peeper__index.1508db70f8347b30.html.br b/src/dict/p-dict/pixel-peeper__index.1508db70f8347b30.html.br deleted file mode 100644 index a5090aa17..000000000 Binary files a/src/dict/p-dict/pixel-peeper__index.1508db70f8347b30.html.br and /dev/null differ diff --git a/src/dict/p-dict/pixel-peeper__index.3f7bdb4eecedcb07.html.br b/src/dict/p-dict/pixel-peeper__index.3f7bdb4eecedcb07.html.br new file mode 100644 index 000000000..ce78f89f9 Binary files /dev/null and b/src/dict/p-dict/pixel-peeper__index.3f7bdb4eecedcb07.html.br differ diff --git a/src/dict/p-dict/restore.0bb1f02dbe81a9f2.html.br b/src/dict/p-dict/restore.0bb1f02dbe81a9f2.html.br deleted file mode 100644 index f09de08fb..000000000 Binary files a/src/dict/p-dict/restore.0bb1f02dbe81a9f2.html.br and /dev/null differ diff --git a/src/dict/p-dict/restore.c676195b2791803a.html.br b/src/dict/p-dict/restore.c676195b2791803a.html.br new file mode 100644 index 000000000..96522f14f Binary files /dev/null and b/src/dict/p-dict/restore.c676195b2791803a.html.br differ diff --git a/src/dict/p-dict/run.3b30fec7c6832a75.html.br b/src/dict/p-dict/run.3b30fec7c6832a75.html.br deleted file mode 100644 index 3a7841b76..000000000 Binary files a/src/dict/p-dict/run.3b30fec7c6832a75.html.br and /dev/null differ diff --git a/src/dict/p-dict/run.c59c95998e323ea4.html.br b/src/dict/p-dict/run.c59c95998e323ea4.html.br new file mode 100644 index 000000000..d4fe28333 Binary files /dev/null and b/src/dict/p-dict/run.c59c95998e323ea4.html.br differ diff --git a/src/dict/p-dict/search.47f250713ff3c579.html.br b/src/dict/p-dict/search.47f250713ff3c579.html.br deleted file mode 100644 index 9a89ef0e8..000000000 Binary files a/src/dict/p-dict/search.47f250713ff3c579.html.br and /dev/null differ diff --git a/src/dict/p-dict/search.c8868d6f5cb306f5.html.br b/src/dict/p-dict/search.c8868d6f5cb306f5.html.br new file mode 100644 index 000000000..f3bfc0c8f Binary files /dev/null and b/src/dict/p-dict/search.c8868d6f5cb306f5.html.br differ diff --git a/src/dict/p-dict/updates.24db3da86349af7d.html.br b/src/dict/p-dict/updates.24db3da86349af7d.html.br new file mode 100644 index 000000000..be061073c Binary files /dev/null and b/src/dict/p-dict/updates.24db3da86349af7d.html.br differ diff --git a/src/dict/p-dict/updates.40214fbd39637c33.html.br b/src/dict/p-dict/updates.40214fbd39637c33.html.br deleted file mode 100644 index 12db63f3c..000000000 Binary files a/src/dict/p-dict/updates.40214fbd39637c33.html.br and /dev/null differ diff --git a/src/dict/p-dict/writing__big-screens-and-small-screens.275e4febcf125f6e.html.br b/src/dict/p-dict/writing__big-screens-and-small-screens.275e4febcf125f6e.html.br deleted file mode 100644 index 88f7f2fd1..000000000 Binary files a/src/dict/p-dict/writing__big-screens-and-small-screens.275e4febcf125f6e.html.br and /dev/null differ diff --git a/src/dict/p-dict/writing__big-screens-and-small-screens.af81cd9b0031f0d0.html.br b/src/dict/p-dict/writing__big-screens-and-small-screens.af81cd9b0031f0d0.html.br new file mode 100644 index 000000000..0dc74d484 Binary files /dev/null and b/src/dict/p-dict/writing__big-screens-and-small-screens.af81cd9b0031f0d0.html.br differ diff --git a/src/dict/p-dict/writing__colophon.3f221241b324914d.html.br b/src/dict/p-dict/writing__colophon.3f221241b324914d.html.br deleted file mode 100644 index 0aae19c6e..000000000 Binary files a/src/dict/p-dict/writing__colophon.3f221241b324914d.html.br and /dev/null differ diff --git a/src/dict/p-dict/writing__colophon.efbc040a5a34e465.html.br b/src/dict/p-dict/writing__colophon.efbc040a5a34e465.html.br new file mode 100644 index 000000000..e290988e9 Binary files /dev/null and b/src/dict/p-dict/writing__colophon.efbc040a5a34e465.html.br differ diff --git a/src/dict/p-dict/writing__education-in-tech.54f075a4f33745cb.html.br b/src/dict/p-dict/writing__education-in-tech.54f075a4f33745cb.html.br new file mode 100644 index 000000000..42dff7c2e Binary files /dev/null and b/src/dict/p-dict/writing__education-in-tech.54f075a4f33745cb.html.br differ diff --git a/src/dict/p-dict/writing__education-in-tech.576b8be3aab602ae.html.br b/src/dict/p-dict/writing__education-in-tech.576b8be3aab602ae.html.br deleted file mode 100644 index 68c9ed769..000000000 Binary files a/src/dict/p-dict/writing__education-in-tech.576b8be3aab602ae.html.br and /dev/null differ diff --git a/src/dict/p-dict/writing__in-flux.43f5ec2647da70ea.html.br b/src/dict/p-dict/writing__in-flux.43f5ec2647da70ea.html.br deleted file mode 100644 index c88b2f0ca..000000000 Binary files a/src/dict/p-dict/writing__in-flux.43f5ec2647da70ea.html.br and /dev/null differ diff --git a/src/dict/p-dict/writing__in-flux.abafd246733fe661.html.br b/src/dict/p-dict/writing__in-flux.abafd246733fe661.html.br new file mode 100644 index 000000000..a19dc4578 Binary files /dev/null and b/src/dict/p-dict/writing__in-flux.abafd246733fe661.html.br differ diff --git a/src/dict/p-dict/writing__index.7d13f0d6fa5c0c73.html.br b/src/dict/p-dict/writing__index.7d13f0d6fa5c0c73.html.br deleted file mode 100644 index f81b9dd34..000000000 Binary files a/src/dict/p-dict/writing__index.7d13f0d6fa5c0c73.html.br and /dev/null differ diff --git a/src/dict/p-dict/writing__index.b1896021c2a2fe6c.html.br b/src/dict/p-dict/writing__index.b1896021c2a2fe6c.html.br new file mode 100644 index 000000000..6490f430e Binary files /dev/null and b/src/dict/p-dict/writing__index.b1896021c2a2fe6c.html.br differ