@c15t/browser 3.0.0-alpha.0 → 3.0.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +3 -0
- package/CHANGELOG.md +25 -0
- package/dist/861.js +1 -1
- package/dist/925.js +21 -13
- package/dist/c15t.css +9 -112
- package/dist/c15t.devtools.js +1 -1
- package/dist/c15t.headless.js +1 -1
- package/dist/c15t.iab.css +3 -109
- package/dist/c15t.iab.js +9 -141
- package/dist/c15t.js +4 -30
- package/dist/iab.js +1 -1
- package/dist-types/auto-init.d.ts +1 -1
- package/dist-types/client.d.ts +1 -1
- package/dist-types/devtools.d.ts +1 -1
- package/dist-types/gated-scripts.d.ts +3 -2
- package/dist-types/global.d.ts +4 -4
- package/dist-types/headless.d.ts +11 -11
- package/dist-types/iab/mount.d.ts +1 -1
- package/dist-types/iab/preferences.d.ts +1 -1
- package/dist-types/iab/surface.d.ts +2 -2
- package/dist-types/iab/vendor-disclosures.d.ts +1 -1
- package/dist-types/iab.d.ts +7 -7
- package/dist-types/index.d.ts +12 -12
- package/dist-types/types.d.ts +3 -1
- package/dist-types/ui/banner.d.ts +2 -2
- package/dist-types/ui/dialog.d.ts +2 -2
- package/dist-types/ui/mount.d.ts +2 -2
- package/dist-types/ui/surface.d.ts +1 -1
- package/dist-types/ui/trigger.d.ts +2 -2
- package/dist-types/ui/widget.d.ts +1 -1
- package/dist-types/version.d.ts +1 -1
- package/docs/README.md +3 -0
- package/docs/frameworks/javascript/script-loader.md +47 -0
- package/docs/frameworks/javascript/script-tag.md +30 -6
- package/docs/integrations/building-integrations.md +5 -0
- package/docs/integrations/clear-on-revocation.md +167 -0
- package/docs/integrations/cloudflare-zaraz.md +399 -0
- package/docs/integrations/google-maps.md +20 -20
- package/docs/integrations/granular-consent.md +208 -0
- package/docs/integrations/overview.md +5 -4
- package/docs/integrations/youtube.md +26 -21
- package/package.json +7 -7
- package/readme.json +0 -44
package/dist/c15t.devtools.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{let e=new WeakMap,t=["necessary","functionality","experience","measurement","marketing"],n={bar:["top","bottom"],floating:["bottom-left","bottom-right","top-left","top-right","bottom-center","top-center"],wall:["center"],widget:["bottom-left","bottom-right","top-left","top-right"]},o={bar:"bottom",floating:"bottom-left",wall:"center",widget:"bottom-right"},s=function(e){let t=["reject","accept"].filter(t=>e.includes(t)),n=e.filter(e=>!t.includes(e));return t.length>0?[t,...n]:n},a=function(e,t,n,o){let a=new Set,r=[];for(let t of n??s(e)){let n=[];for(let s of"string"==typeof t?[t]:t)e.includes(s)?a.has(s)||(a.add(s),n.push(s)):o.push({actions:[s],code:"forbidden-action",message:`The policy does not allow ${s} on this surface.`});n.length&&r.push(n)}let i=t.filter(e=>!a.has(e));return i.length&&(r.length||r.push([]),r[0]?.push(...i),o.push({actions:i,code:"required-action-restored",message:"Required actions omitted by the layout were restored at the same interaction depth."})),r},r=function(e,t,s,a){var r,i,d;let l,c,p=s?"wall":"floating",v=s?p:e.variant??p;t&&"wall"===v&&(v="floating",a.push({actions:[],code:"invalid-variant",message:"A notice cannot use a blocking wall; using floating."})),s&&(void 0!==e.variant||void 0!==e.position)&&a.push({actions:[],code:"invalid-variant",message:"Preferences use a centered dialog; variant and position are prompt options."});let u=o[v],m=u,g="default";return s||void 0===e.position||((r=v,i=e.position,n[r].includes(i))?({position:m}=e,g="host"):a.push({actions:[],code:"invalid-position",message:`Position "${e.position}" is not valid for the ${v} variant; using "${u}".`})),{blocking:(d=v,l=!1!==e.scrollLock&&!1!==e.trapFocus&&(e.scrollLock??e.trapFocus),c=e.blocking??l??(s||"wall"===d),t&&c?(c=!1,a.push({actions:[],code:"blocking-forbidden",message:"A notice prompt is never blocking; blocking was disabled."})):s||"wall"!==d||c||(c=!0,a.push({actions:[],code:"blocking-required",message:"The wall variant is always blocking; blocking was enabled."})),c),position:m,positionSource:g,variant:v}},i=function(e){var t,n;let o="preferences"===e.surface,s={...e.presentation?.[e.surface],...Object.fromEntries(Object.entries(e.override??{}).filter(([,e])=>void 0!==e))},i=o?{allowed:["reject","accept","save"],equivalent:[["accept","reject"]],required:["reject","accept","save"]}:e.policy.actions,d=[...new Set(i.allowed)],l=[...new Set(i.required)],c=i.equivalent.map(e=>[...e]),p=[],v=a(d,l,s.layout,p),u=v.flat(),m=o?["save"]:["customize"],g=(s.primaryActions??m).filter(e=>u.includes(e));for(let t of c){let n=t.filter(e=>g.includes(e)).length,o=new Set(t.map(t=>{let n=e.actionAppearance?.[t];return`${n?.variant??(g.includes(t)?"primary":"neutral")}:${n?.mode??"stroke"}`}));(n>0&&n<t.length||o.size>1)&&p.push({actions:[...t],code:"equivalent-prominence-overridden",message:"Host presentation gives equivalent actions different prominence."})}let f=!o&&"notice"===e.policy.prompt,b=s.direction??"row",h=s.uiProfile??"compact",_=r(s,f,o,p),y=_.blocking,w=_.blocking;return{..._,actionGroups:v,allowedActions:d,diagnostics:p,direction:b,equivalentActions:c,orderedActions:u,preferenceControls:(t=e.policy.rights,n=e.policy.i18n?.messageProfile,o?[]:t.includes("opt-out")&&!u.includes("reject")?["preferences"===n?"preferences":"opt-out"]:t.includes("preferences")&&!u.includes("customize")?["preferences"]:[]),primaryActions:g,requiredActions:l,rights:e.policy.rights,scrollLock:y,shouldFillActions:"strict"===h||"balanced"===h,trapFocus:w,uiProfile:h}},d=new WeakMap,l=e=>[...d.get(e)?.loaders.values()??[]].flatMap(e=>e()),c=e=>{let t=new WeakSet;try{return JSON.stringify(e,(e,n)=>{if("bigint"==typeof n)return String(n);if(null!==n&&"object"==typeof n){if(t.has(n))return"[Circular]";t.add(n)}return n},2)??"null"}catch{return'"[Unserializable value]"'}},p=["records:cleared","choice:recorded","permissions:changed","notice:dismissed","privacy:opt-out","overrides:set","user:identified","subject:resolved","iab:set","init:applied","init:failed","save:replayed","command:init:started","command:init:completed","command:save:started","command:save:completed","command:error"];function v(e){return{activeUI:e.activeUI,effectivePermissions:e.effectivePermissions,explicitChoice:e.explicitChoice,model:e.model,noticeDismissal:e.noticeDismissal,optOutDirectives:e.optOutDirectives,privacySignals:e.privacySignals,promptRequirement:e.promptRequirement,resolution:e.resolution.status,revision:e.revision,subject:e.subject}}function u(e){return{result:JSON.parse(c(e))}}function m(e,t){let n=c(t);try{if(t instanceof Error){let e=t.message;n="string"==typeof e?e:c(e)}else"string"==typeof t&&(n=t)}catch{}return{command:e,error:n}}let g=(e,t,n)=>e?t:n,f=(e,t,n,o)=>"necessary"===n||(t[n]??e.explicitChoice?.categories[n]?.value??o?.[n]??("opt-out"===e.policyRule.model||e.policyRule.preselectedCategories.includes(n)));function b(e,t,n,o){let s=e.createElement(t);return n&&(s.className=n),void 0!==o&&(s.textContent=o),s}function h(e,t,n,o="secondary"){let s=b(e,"button",`c15t-dev-tools__button c15t-dev-tools__button--${o}`,t);return s.type="button",s.dataset.focusKey=`button:${t}`,s.addEventListener("click",n),s}function _(e,t,n){let o=b(e,"section","c15t-dev-tools__section");return o.append(b(e,"h3",void 0,t)),n&&o.append(b(e,"p","c15t-dev-tools__muted",n)),o}function y(e,t){let n=b(e,"pre","c15t-dev-tools__code");return n.textContent=c(t),n}function w(e,t,n){let o=b(e,"div","c15t-dev-tools__stat");return o.append(b(e,"dt",void 0,t),b(e,"dd",void 0,n)),o}function x(e,t,n){let o=b(e,"label","c15t-dev-tools__field");o.append(b(e,"span",void 0,t));let s=b(e,"input");return s.type="text",s.value=n,s.autocomplete="off",s.spellcheck=!1,s.dataset.focusKey=`field:${t}`,o.append(s),{field:o,input:s}}let k=(e,t,n,o,s,a)=>{let r=b(e,"label","c15t-dev-tools__check"),i=b(e,"input");return i.type="checkbox",i.setAttribute("role","switch"),i.setAttribute("aria-label",t),i.dataset.focusKey=n,i.checked=o,i.disabled=s,i.addEventListener("change",()=>a(i.checked)),r.append(b(e,"span",void 0,t.split(":")[0]),i),r},A=e=>{let t=e.createElementNS("http://www.w3.org/2000/svg","svg");t.setAttribute("viewBox","0 0 446 445"),t.setAttribute("width","24"),t.setAttribute("height","24"),t.setAttribute("aria-hidden","true"),t.setAttribute("focusable","false"),t.classList.add("c15t-dev-tools__logo");let n=e.createElementNS("http://www.w3.org/2000/svg","path");return n.setAttribute("fill","currentColor"),n.setAttribute("d","M223.178.313c39.064 0 70.732 31.668 70.732 70.732-.001 39.064-31.668 70.731-70.732 70.731-12.181 0-23.642-3.079-33.649-8.502l-55.689 55.689a70.267 70.267 0 0 1 5.574 13.441h167.531c8.695-29.217 35.762-50.523 67.804-50.523 39.064 0 70.731 31.668 70.731 70.732s-31.668 70.732-70.731 70.732c-32.042 0-59.108-21.306-67.803-50.523H139.413a70.417 70.417 0 0 1-7.888 17.396l54.046 54.046c10.893-6.851 23.786-10.815 37.605-10.815 39.064 0 70.732 31.669 70.732 70.733 0 39.064-31.668 70.731-70.732 70.731s-70.732-31.667-70.732-70.731c0-10.518 2.296-20.499 6.414-29.471l-57.78-57.78c-8.972 4.117-18.952 6.414-29.47 6.414-39.063 0-70.731-31.668-70.732-70.732 0-39.064 31.669-70.732 70.733-70.732 12.18 0 23.642 3.079 33.649 8.502l55.688-55.688c-5.423-10.007-8.502-21.469-8.502-33.65 0-39.064 31.668-70.733 70.732-70.733Zm0 343.555c-16.742 0-30.314 13.572-30.314 30.314 0 16.741 13.572 30.313 30.314 30.313s30.314-13.572 30.314-30.313c0-16.742-13.572-30.314-30.314-30.314ZM71.611 192.299c-16.742 0-30.315 13.572-30.315 30.314s13.573 30.314 30.315 30.314c16.741 0 30.313-13.572 30.313-30.314 0-16.741-13.572-30.314-30.313-30.314Zm303.138 0c-16.729 0-30.294 13.551-30.315 30.275l.001.039-.001.038c.021 16.725 13.586 30.276 30.315 30.276 16.741 0 30.313-13.572 30.313-30.314 0-16.741-13.572-30.314-30.313-30.314ZM223.178 40.73c-16.742 0-30.314 13.573-30.314 30.315s13.573 30.313 30.314 30.313c16.742 0 30.313-13.572 30.314-30.313 0-16.742-13.572-30.314-30.314-30.315Z"),t.append(n),t},S=".c15t-dev-tools {\n color-scheme: light dark;\n --c15t-dev-tools-bg: var(--c15t-surface, light-dark(white, #121212));\n --c15t-dev-tools-bg-raised: var(\n --c15t-surface-hover,\n light-dark(#fafafa, #1c1c1c)\n );\n --c15t-dev-tools-bg-muted: var(\n --c15t-surface-hover,\n light-dark(#fafafa, #1c1c1c)\n );\n --c15t-dev-tools-border: var(--c15t-border, light-dark(#e8e8e8, #303030));\n --c15t-dev-tools-text: var(--c15t-text, light-dark(#171717, #ededed));\n --c15t-dev-tools-muted: var(--c15t-text-muted, light-dark(#737373, #a3a3a3));\n --c15t-dev-tools-accent: var(--c15t-primary, light-dark(#335cff, #6685ff));\n --c15t-dev-tools-danger: light-dark(#b42318, #fda29b);\n --c15t-dev-tools-focus: var(--c15t-dev-tools-accent);\n /* Inspection controls sit above c15t's banner and dialog layers. */\n --c15t-dev-tools-z: calc(\n max(\n var(--consent-dialog-z-index, 999999999),\n var(--iab-cd-z-index, 999999999)\n ) +\n 1\n );\n\n position: fixed;\n z-index: var(--c15t-dev-tools-z);\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 0.5rem;\n box-sizing: border-box;\n color: var(--c15t-dev-tools-text);\n font-family: var(\n --c15t-font-family,\n ui-sans-serif,\n system-ui,\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif\n );\n font-size: 0.875rem;\n line-height: 1.5;\n -webkit-font-smoothing: antialiased;\n isolation: isolate;\n}\n\n.c15t-dev-tools *,\n.c15t-dev-tools *::before,\n.c15t-dev-tools *::after {\n box-sizing: border-box;\n}\n\n.c15t-dev-tools [hidden] {\n display: none;\n}\n\n.c15t-dev-tools--bottom-right {\n right: max(0.75rem, env(safe-area-inset-right));\n bottom: max(0.75rem, env(safe-area-inset-bottom));\n}\n\n.c15t-dev-tools--bottom-left {\n bottom: max(0.75rem, env(safe-area-inset-bottom));\n left: max(0.75rem, env(safe-area-inset-left));\n align-items: flex-start;\n}\n\n.c15t-dev-tools--top-right {\n top: max(0.75rem, env(safe-area-inset-top));\n right: max(0.75rem, env(safe-area-inset-right));\n flex-direction: column-reverse;\n}\n\n.c15t-dev-tools--top-left {\n top: max(0.75rem, env(safe-area-inset-top));\n left: max(0.75rem, env(safe-area-inset-left));\n flex-direction: column-reverse;\n align-items: flex-start;\n}\n\n.c15t-dev-tools--embedded {\n position: relative;\n inset: auto;\n width: 100%;\n height: 100%;\n align-items: stretch;\n gap: 0;\n}\n\n.c15t-dev-tools__panel {\n display: flex;\n flex-direction: column;\n width: min(28rem, calc(100vw - 1.5rem));\n max-height: min(40rem, calc(100dvh - 1.5rem));\n overflow: hidden;\n border: 1px solid var(--c15t-dev-tools-border);\n border-radius: var(--c15t-radius-lg, 0.75rem);\n background: var(--c15t-dev-tools-bg);\n box-shadow: var(--c15t-shadow-lg, 0 8px 32px rgb(0 0 0 / 12%));\n}\n\n.c15t-dev-tools__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.375rem 0.5rem 0.375rem 1rem;\n flex-shrink: 0;\n}\n\n.c15t-dev-tools__title {\n margin: 0;\n display: flex;\n align-items: center;\n gap: 0.75rem;\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--c15t-dev-tools-muted);\n line-height: 1.25;\n text-wrap: balance;\n}\n\n.c15t-dev-tools__tabs {\n display: flex;\n flex-wrap: wrap;\n min-width: 0;\n padding: 0 0.75rem;\n flex-shrink: 0;\n border-bottom: 1px solid var(--c15t-dev-tools-border);\n}\n\n.c15t-dev-tools__button {\n min-height: 2.75rem;\n padding: 0.625rem 0.75rem;\n touch-action: manipulation;\n border: 1px solid var(--c15t-dev-tools-border);\n border-radius: 0.5rem;\n background: transparent;\n color: var(--c15t-dev-tools-text);\n font: inherit;\n font-weight: 500;\n line-height: 1.25;\n cursor: pointer;\n transition:\n background-color 150ms ease-out,\n border-color 150ms ease-out;\n}\n\n.c15t-dev-tools__button:active {\n background: var(--c15t-dev-tools-bg-muted);\n}\n\n.c15t-dev-tools__button:focus-visible,\n.c15t-dev-tools input:focus-visible,\n.c15t-dev-tools select:focus-visible,\n.c15t-dev-tools__content:focus-visible {\n outline: 2px solid var(--c15t-dev-tools-focus);\n outline-offset: 2px;\n}\n\n.c15t-dev-tools__button:disabled {\n cursor: not-allowed;\n color: var(--c15t-dev-tools-muted);\n background: var(--c15t-dev-tools-bg-muted);\n}\n\n.c15t-dev-tools__button--primary {\n border-color: var(--c15t-dev-tools-accent);\n background: var(--c15t-dev-tools-bg);\n color: var(--c15t-dev-tools-accent);\n box-shadow: var(--c15t-shadow-sm, 0 1px 2px rgb(0 0 0 / 5%));\n}\n\n.c15t-dev-tools__button--danger {\n border-color: var(--c15t-dev-tools-danger);\n color: var(--c15t-dev-tools-danger);\n}\n\n.c15t-dev-tools__toggle {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 3rem;\n height: 3rem;\n padding: 0;\n border-radius: 50%;\n border-color: var(--c15t-dev-tools-border);\n background: var(--c15t-dev-tools-bg);\n color: var(--c15t-dev-tools-text);\n box-shadow: var(--c15t-shadow-md, 0 4px 12px rgb(0 0 0 / 10%));\n}\n\n.c15t-dev-tools__tabs .c15t-dev-tools__button {\n min-height: 2.75rem;\n min-width: 0;\n max-width: 100%;\n flex: 1 0 auto;\n padding: 0.5rem 0.375rem;\n border: 0;\n border-bottom: 2px solid transparent;\n border-radius: 0;\n color: var(--c15t-dev-tools-muted);\n font-size: 0.8125rem;\n overflow-wrap: anywhere;\n}\n\n.c15t-dev-tools__tabs .c15t-dev-tools__button[aria-selected='true'] {\n border-bottom-color: var(--c15t-dev-tools-accent);\n color: var(--c15t-dev-tools-text);\n}\n\n.c15t-dev-tools__content {\n min-height: 0;\n min-width: 0;\n overflow-x: hidden;\n overflow-y: auto;\n overflow-wrap: anywhere;\n overscroll-behavior: contain;\n padding: 1rem;\n}\n\n/* Keep inspection scrollers independent of the host page's scrollbar theme. */\n.c15t-dev-tools__content,\n.c15t-dev-tools__code {\n scrollbar-width: thin;\n scrollbar-color: var(--c15t-dev-tools-muted) transparent;\n}\n\n.c15t-dev-tools__content::-webkit-scrollbar,\n.c15t-dev-tools__code::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n background: transparent;\n}\n\n.c15t-dev-tools__content::-webkit-scrollbar-track,\n.c15t-dev-tools__code::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.c15t-dev-tools__content::-webkit-scrollbar-thumb,\n.c15t-dev-tools__code::-webkit-scrollbar-thumb {\n border: 2px solid transparent;\n border-radius: 4px;\n background: var(--c15t-dev-tools-muted);\n background-clip: padding-box;\n}\n\n.c15t-dev-tools__content::-webkit-scrollbar-corner,\n.c15t-dev-tools__code::-webkit-scrollbar-corner {\n background: transparent;\n}\n\n.c15t-dev-tools__section {\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n}\n\n.c15t-dev-tools__section + .c15t-dev-tools__section {\n margin-top: 1rem;\n padding-top: 1rem;\n border-top: 1px solid var(--c15t-dev-tools-border);\n}\n\n.c15t-dev-tools__section h3,\n.c15t-dev-tools__section p,\n.c15t-dev-tools__section dl,\n.c15t-dev-tools__section ol {\n margin: 0;\n}\n\n.c15t-dev-tools__section h3 {\n font-size: 0.875rem;\n font-weight: 600;\n line-height: 1.25;\n text-wrap: balance;\n}\n\n.c15t-dev-tools__muted,\n.c15t-dev-tools__empty {\n max-width: 65ch;\n color: var(--c15t-dev-tools-muted);\n}\n\n.c15t-dev-tools__control-list,\n.c15t-dev-tools__form,\n.c15t-dev-tools__action-grid {\n display: grid;\n gap: 0.75rem;\n}\n\n.c15t-dev-tools__action-grid {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n\n.c15t-dev-tools__check {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n min-height: 2.75rem;\n padding: 0.5rem 0.75rem;\n cursor: pointer;\n}\n\n.c15t-dev-tools__check:has(input:disabled) {\n cursor: not-allowed;\n color: var(--c15t-dev-tools-muted);\n}\n\n.c15t-dev-tools__check input {\n appearance: none;\n position: relative;\n flex: 0 0 2rem;\n width: 2rem;\n height: 1.25rem;\n min-height: 0;\n margin: 0;\n padding: 0;\n border: 1px solid var(--c15t-dev-tools-border);\n border-radius: 999px;\n background: var(--c15t-switch-track, var(--c15t-dev-tools-border));\n cursor: inherit;\n}\n\n.c15t-dev-tools__field {\n display: grid;\n min-width: 0;\n gap: 0.375rem;\n font-weight: 550;\n}\n\n.c15t-dev-tools__script-list {\n display: grid;\n gap: 0.5rem;\n}\n\n.c15t-dev-tools__script {\n border: 1px solid var(--c15t-dev-tools-border);\n border-radius: var(--c15t-radius-md, 0.5rem);\n}\n\n.c15t-dev-tools__script-summary {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n min-height: 2.75rem;\n padding: 0.625rem 0.75rem;\n cursor: pointer;\n}\n\n.c15t-dev-tools__script-summary::before {\n content: '+';\n color: var(--c15t-dev-tools-muted);\n}\n\n.c15t-dev-tools__script[open] > summary::before {\n content: '−';\n}\n\n.c15t-dev-tools__script-summary:focus-visible {\n outline: 2px solid var(--c15t-dev-tools-focus);\n outline-offset: 2px;\n}\n\n.c15t-dev-tools__script-name {\n flex: 1;\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n.c15t-dev-tools__status {\n flex-shrink: 0;\n padding: 0.125rem 0.375rem;\n border-radius: 0.25rem;\n background: var(--c15t-dev-tools-bg-muted);\n color: var(--c15t-dev-tools-muted);\n font-size: 0.75rem;\n}\n\n.c15t-dev-tools__status[data-status='error'] {\n color: var(--c15t-dev-tools-danger);\n}\n\n.c15t-dev-tools__status[data-status='loaded'] {\n color: var(--c15t-dev-tools-accent);\n}\n\n.c15t-dev-tools__script-body {\n display: grid;\n gap: 0.5rem;\n padding: 0.75rem;\n border-top: 1px solid var(--c15t-dev-tools-border);\n overflow-wrap: anywhere;\n}\n\n.c15t-dev-tools__logo {\n color: var(--c15t-dev-tools-text);\n flex: 0 0 auto;\n width: 1.5rem;\n height: 1.5rem;\n}\n\n.c15t-dev-tools__button.c15t-dev-tools__close {\n width: 2.75rem;\n padding: 0;\n border: 0;\n color: var(--c15t-dev-tools-muted);\n font-size: 1.5rem;\n}\n\n.c15t-dev-tools__control-list {\n gap: 0;\n border: 1px solid var(--c15t-dev-tools-border);\n border-radius: var(--c15t-radius-md, 0.5rem);\n overflow: hidden;\n}\n\n.c15t-dev-tools__check + .c15t-dev-tools__check {\n border-top: 1px solid var(--c15t-dev-tools-border);\n}\n\n.c15t-dev-tools__check > span:first-child {\n flex: 1;\n}\n\n.c15t-dev-tools__badge {\n color: var(--c15t-dev-tools-muted);\n font-size: 0.75rem;\n}\n\n.c15t-dev-tools__check input::before {\n content: '';\n position: absolute;\n top: 2px;\n left: 2px;\n width: 0.875rem;\n height: 0.875rem;\n border-radius: 50%;\n background: var(--c15t-switch-thumb, white);\n box-shadow: 0 1px 2px rgb(0 0 0 / 15%);\n}\n\n.c15t-dev-tools__check input:checked {\n background: var(--c15t-switch-track-active, var(--c15t-dev-tools-accent));\n border-color: transparent;\n}\n\n.c15t-dev-tools__check input:checked::before {\n transform: translateX(0.75rem);\n}\n\n.c15t-dev-tools__check input:disabled {\n opacity: 0.5;\n}\n\n.c15t-dev-tools--embedded .c15t-dev-tools__close {\n display: none;\n}\n\n.c15t-dev-tools__field input,\n.c15t-dev-tools__field select {\n width: 100%;\n min-width: 0;\n min-height: 2.75rem;\n padding: 0.625rem 0.75rem;\n touch-action: manipulation;\n border: 1px solid var(--c15t-dev-tools-border);\n border-radius: 0.5rem;\n background: var(--c15t-dev-tools-bg-muted);\n color: var(--c15t-dev-tools-text);\n font: inherit;\n font-size: 1rem;\n}\n\n.c15t-dev-tools__actions {\n display: flex;\n flex-wrap: wrap;\n gap: 0.5rem;\n}\n\n.c15t-dev-tools__stats {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 0.5rem;\n}\n\n.c15t-dev-tools__stat {\n padding: 0.75rem;\n border: 1px solid var(--c15t-dev-tools-border);\n border-radius: 0.5rem;\n background: var(--c15t-dev-tools-bg-raised);\n}\n\n.c15t-dev-tools__stat dt {\n color: var(--c15t-dev-tools-muted);\n font-size: 0.75rem;\n}\n\n.c15t-dev-tools__stat dd {\n margin: 0.25rem 0 0;\n font-variant-numeric: tabular-nums;\n font-weight: 600;\n}\n\n.c15t-dev-tools__code {\n min-width: 0;\n max-width: 100%;\n max-height: 16rem;\n margin: 0;\n overflow-x: hidden;\n overflow-y: auto;\n padding: 0.75rem;\n border-radius: 0.5rem;\n background: var(--c15t-dev-tools-bg-muted);\n color: var(--c15t-dev-tools-text);\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n font-size: 0.75rem;\n line-height: 1.5;\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n}\n\n.c15t-dev-tools__event-list {\n display: grid;\n gap: 0.75rem;\n padding: 0;\n list-style: none;\n}\n\n.c15t-dev-tools__iab-list {\n display: grid;\n gap: 0.75rem;\n}\n\n.c15t-dev-tools__iab-choice {\n min-width: 0;\n padding: 0.75rem;\n border: 1px solid var(--c15t-dev-tools-border);\n border-radius: 0.5rem;\n overflow-wrap: anywhere;\n}\n\n.c15t-dev-tools__iab-choice > strong {\n display: block;\n margin-bottom: 0.5rem;\n}\n\n.c15t-dev-tools__feedback {\n margin: 0;\n padding: 0.5rem 1rem;\n border-bottom: 1px solid var(--c15t-dev-tools-border);\n overflow-wrap: anywhere;\n}\n\n.c15t-dev-tools__feedback[data-status='error'] {\n color: var(--c15t-dev-tools-danger);\n}\n\n.c15t-dev-tools__event {\n display: grid;\n gap: 0.5rem;\n padding: 0.75rem;\n border: 1px solid var(--c15t-dev-tools-border);\n border-radius: 0.5rem;\n background: var(--c15t-dev-tools-bg-raised);\n}\n\n.c15t-dev-tools__event-header {\n display: flex;\n flex-wrap: wrap;\n justify-content: space-between;\n gap: 0.75rem;\n color: var(--c15t-dev-tools-muted);\n font-size: 0.75rem;\n font-variant-numeric: tabular-nums;\n}\n\n@media (hover: hover) and (pointer: fine) {\n .c15t-dev-tools__button:hover:not(:disabled) {\n border-color: var(--c15t-dev-tools-accent);\n background: var(--c15t-dev-tools-bg-raised);\n }\n\n .c15t-dev-tools__button--primary:hover:not(:disabled) {\n background: color-mix(\n in srgb,\n var(--c15t-dev-tools-accent) 6%,\n var(--c15t-dev-tools-bg)\n );\n }\n}\n\n@media (max-width: 28rem) {\n .c15t-dev-tools__action-grid,\n .c15t-dev-tools__stats {\n grid-template-columns: 1fr;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .c15t-dev-tools__button {\n transition: none;\n }\n\n .c15t-dev-tools__button:active {\n transform: none;\n }\n}\n\n.c15t-dev-tools--embedded .c15t-dev-tools__toggle {\n display: none;\n}\n\n.c15t-dev-tools--embedded .c15t-dev-tools__panel {\n width: 100%;\n height: 100%;\n max-height: none;\n border: 0;\n border-radius: 0;\n box-shadow: none;\n}\n\n.c15t-dev-tools--embedded .c15t-dev-tools__content {\n max-height: none;\n}\n",C=[{id:"consents",label:"Consents"},{id:"scripts",label:"Scripts"},{id:"location",label:"Location"},{id:"policy",label:"Policy"},{id:"iab",label:"IAB"},{id:"events",label:"Events"},{id:"actions",label:"Actions"}],I=0,O="c15t-dev-tools-styles",R=new Set(["consents","scripts","location","policy","iab","events","actions"]),$=new Set(["bottom-right","bottom-left","top-right","top-left"]),E=function(e){let t={};if(!e)return t;e.hasAttribute("data-open")&&(t.defaultOpen="false"!==e.getAttribute("data-open"));let n=e.getAttribute("data-tab");n&&R.has(n)&&(t.defaultTab=n);let o=e.getAttribute("data-position");return o&&$.has(o)&&(t.position=o),t}(document.currentScript),T=function(n){let o=function(n,o={}){return function(n){var o;let s,a,{kernel:r,container:c,shadow:R=!0,position:$="bottom-right",defaultOpen:E=!1,defaultTab:T="consents",maxEvents:L=100}=n,D=Number.isFinite(L)?Math.max(1,Math.trunc(L)):100,P=()=>{let{scope:e}=r.getSnapshot().policyRule,o=n.getConsentCategories?.()??["necessary",...e];return t.filter(t=>o.includes(t)&&("necessary"===t||e.includes(t)))},j=function(e){let t={activeTab:e.activeTab,draft:Object.freeze({}),draftFingerprint:null,events:[],isOpen:e.isOpen,position:e.position,scripts:[],snapshot:e.snapshot},n=!1,o=new Set;function s(e){if(n)return;let s=t;for(let n of(t={...t,...e},o))n(t,s)}return{addEvent:n=>{s({events:[n,...t.events].slice(0,e.maxEvents)})},clearEvents:()=>{t.events.length>0&&s({events:[]})},destroy:()=>{n=!0,o.clear()},getState:()=>t,setActiveTab:e=>{t.activeTab!==e&&s({activeTab:e})},setDraft:e=>s({draft:Object.freeze({...e}),draftFingerprint:Object.keys(e).length>0?t.draftFingerprint??t.snapshot.evaluationPolicy.choice.fingerprint:null}),setOpen:e=>{t.isOpen!==e&&s({isOpen:e})},setScripts:e=>s({scripts:e}),setSnapshot:e=>{if(t.snapshot!==e){let n=e.user!==t.snapshot.user;s({draft:n?Object.freeze({}):t.draft,draftFingerprint:n?null:t.draftFingerprint,snapshot:e})}},subscribe:e=>n?()=>{}:(o.add(e),()=>{o.delete(e)})}}({activeTab:T,isOpen:E,maxEvents:D,position:$,snapshot:r.getSnapshot()}),q=!1,z=0,M=!1;j.setScripts(l(r));let B=(o=e=>{e&&(z+=1,j.addEvent({data:{...e},id:String(z),message:`${e.scriptId}: ${e.message}`,timestamp:e.timestamp,type:`script:${e.action}`})),M||(M=!0,queueMicrotask(()=>{M=!1,q||j.setScripts(l(r))}))},(s=d.get(r))||(s={listeners:new Set,loaders:new Map},d.set(r,s)),(a=s).listeners.add(o),()=>{a.listeners.delete(o)}),N=r.subscribe(e=>{j.setSnapshot(e)}),F=p.map(e=>r.events.on(e,e=>{"records:cleared"===e.type&&j.setDraft({}),z+=1,j.addEvent(function(e,t,n){switch(e.type){case"records:cleared":return{id:t,message:"Stored records cleared",timestamp:n,type:e.type};case"choice:recorded":return{data:{...v(e.snapshot),actionAt:e.actionAt,confirmed:e.confirmed},id:t,message:"Explicit choice recorded",timestamp:n,type:e.type};case"permissions:changed":return{data:{...v(e.snapshot),previous:e.previous},id:t,message:"Effective permissions changed",timestamp:n,type:e.type};case"notice:dismissed":return{data:{...v(e.snapshot),dismissal:e.dismissal},id:t,message:"Local notice dismissed",timestamp:n,type:e.type};case"privacy:opt-out":return{data:{...v(e.snapshot),directive:e.directive},id:t,message:"Privacy opt-out recorded",timestamp:n,type:e.type};case"subject:resolved":return{data:v(e.snapshot),id:t,message:"Canonical subject resolved",timestamp:n,type:e.type};case"overrides:set":return{data:v(e.snapshot),id:t,message:"Location overrides changed",timestamp:n,type:e.type};case"user:identified":return{data:v(e.snapshot),id:t,message:"User identified",timestamp:n,type:e.type};case"iab:set":return{data:v(e.snapshot),id:t,message:"IAB state changed",timestamp:n,type:e.type};case"init:applied":return{data:v(e.snapshot),id:t,message:"Initialization result applied",timestamp:n,type:e.type};case"command:init:started":return{id:t,message:"Initialization started",timestamp:n,type:e.type};case"init:failed":return{data:{...m("init",e.error),attempt:e.attempt,nextRetryMs:e.nextRetryMs},id:t,message:"Initialization failed",timestamp:n,type:e.type};case"save:replayed":return{data:{ok:e.ok,subjectId:e.subjectId},id:t,message:g(e.ok,"Queued consent saved","Queued consent save failed"),timestamp:n,type:e.type};case"command:init:completed":return{data:u(e.result),id:t,message:g(e.result.ok,"Initialization completed","Initialization failed"),timestamp:n,type:e.type};case"command:save:started":return{id:t,message:"Consent save started",timestamp:n,type:e.type};case"command:save:completed":return{data:u(e.result),id:t,message:g(e.result.ok,"Consent save completed","Consent save failed"),timestamp:n,type:e.type};case"command:error":return{data:m(e.command,e.error),id:t,message:`${e.command} command failed`,timestamp:n,type:e.type}}}(e,String(z),Date.now()))})),U={clearRecords:n.clearRecords?()=>{n.clearRecords?.(),j.setDraft({})}:void 0,dismissNotice:()=>r.commands.dismissNotice(),init:()=>r.commands.init(),resetDraft:()=>j.setDraft({}),save:async e=>{let t=j.getState(),o=r.getSnapshot();if("all"!==e&&"none"!==e&&null!==t.draftFingerprint&&t.draftFingerprint!==o.evaluationPolicy.choice.fingerprint)throw Error("Policy changed. Discard the draft and review the current choices before saving.");let s=async e=>{let n=await r.commands.save(e);return n.ok&&j.getState().draft===t.draft&&j.setDraft({}),n},a=P().filter(e=>"necessary"!==e);if(("all"===e||"none"===e)&&a.length===o.policyRule.scope.length)return await s(e);let i={},d=n.getPresentation?.()?.preferences?.defaults;for(let n of a)"all"===e||"none"===e?i[n]="all"===e:void 0===e?i[n]=f(o,t.draft,n,d):Object.hasOwn(e,n)&&"boolean"==typeof e[n]&&(i[n]=e[n]);return await s(i)},setActiveUI:e=>r.set.activeUI(e),setDraft(e){let t={...j.getState().draft};for(let n of P())"necessary"!==n&&Object.hasOwn(e,n)&&"boolean"==typeof e[n]&&(t[n]=e[n]);j.setDraft(t)},setOverrides:e=>r.set.overrides(e)},K=function(n){var o,s;let a,r,d,l,c=n.container?.ownerDocument??globalThis.document;if(!c)return{destroy(){},element:null};I+=1;let p=`c15t-dev-tools-${I}`,v=`${p}-panel`,u=b(c,"div",`c15t-dev-tools ${(o=n.stateManager.getState().position,`c15t-dev-tools--${o}`)}`);u.dataset.c15tDevTools=p,u.addEventListener("keydown",e=>{"Escape"!==e.key||u.classList.contains("c15t-dev-tools--embedded")||(e.stopPropagation(),n.stateManager.setOpen(!1))});let m=n.stateManager.getState().isOpen,g={expandedScripts:new Set,iab:{group:"vendors",page:0,rawOpen:!1,search:""},scriptSearch:""},R=!1,$=(e,t,n)=>{R||r?.status==="pending"||(r={message:e,status:"pending"},L(),(async()=>{try{let e=await t();if("object"==typeof e&&null!==e&&"ok"in e&&!e.ok)throw Error("The request failed. Check the connection and retry.");r={message:n,status:"success"}}catch(e){r={message:e instanceof Error?e.message:"The request failed. Retry the action.",status:"error"}}R||L()})())};function E(e){let t=()=>{let t=u.querySelector(e);t?.focus()},n=c.defaultView;n?n.requestAnimationFrame(t):t()}function T(e,t=!1){n.stateManager.setActiveTab(e),t&&E(`[data-tab="${e}"]`)}function L(){let o=n.stateManager.getState();if(!o.isOpen&&a&&!a.isOpen){a=o;return}!function(o){let s=a?.activeTab===o.activeTab,d=s?u.querySelector(".c15t-dev-tools__content")?.scrollTop??0:0,l=new Map;if(s&&a?.snapshot.overrides===o.snapshot.overrides)for(let e of u.querySelectorAll(".c15t-dev-tools__field input, .c15t-dev-tools__field select"))e.dataset.focusKey&&l.set(e.dataset.focusKey,e.value);let{activeElement:S}=u.getRootNode(),I=S&&u.contains(S)?S.getAttribute("data-focus-key"):null;u.replaceChildren();let O=h(c,o.isOpen?"Close c15t DevTools":"Open c15t DevTools",()=>n.stateManager.setOpen(!o.isOpen),"primary");O.classList.add("c15t-dev-tools__toggle"),O.replaceChildren(A(c)),O.setAttribute("aria-label","Open c15t DevTools"),O.hidden=o.isOpen,O.setAttribute("aria-expanded",String(o.isOpen)),O.setAttribute("aria-controls",v),u.append(O);let R=b(c,"section","c15t-dev-tools__panel");R.id=v,R.hidden=!o.isOpen,R.setAttribute("aria-label","c15t consent developer tools");let L=b(c,"header","c15t-dev-tools__header"),D=b(c,"h2","c15t-dev-tools__title");D.setAttribute("aria-label","c15t DevTools"),D.append(A(c),b(c,"span",void 0,"DevTools"));let P=h(c,"Close c15t DevTools",()=>{n.stateManager.setOpen(!1)});P.textContent="×",P.setAttribute("aria-label","Close c15t DevTools"),P.classList.add("c15t-dev-tools__close"),L.append(D,P),R.append(L);let j=b(c,"div","c15t-dev-tools__tabs");j.setAttribute("role","tablist"),j.setAttribute("aria-label","DevTools views"),C.forEach((e,t)=>{let n=h(c,e.label,()=>{T(e.id)});n.dataset.tab=e.id,n.id=`${p}-tab-${e.id}`,n.setAttribute("role","tab"),n.setAttribute("aria-selected",String(e.id===o.activeTab)),n.setAttribute("aria-controls",`${p}-tabpanel`),n.tabIndex=e.id===o.activeTab?0:-1,n.addEventListener("keydown",e=>{let n=null;if("ArrowRight"===e.key?n=(t+1)%C.length:"ArrowLeft"===e.key?n=(t-1+C.length)%C.length:"Home"===e.key?n=0:"End"===e.key&&(n=C.length-1),null===n)return;e.preventDefault();let o=C[n];o&&T(o.id,!0)}),j.append(n)}),R.append(j);let q=b(c,"div","c15t-dev-tools__content");if(q.id=`${p}-tabpanel`,q.setAttribute("role","tabpanel"),q.setAttribute("aria-labelledby",`${p}-tab-${o.activeTab}`),q.tabIndex=0,o.isOpen){!function(n,o,s,a,r,d,l,c,p,v){switch(s.activeTab){case"scripts":let u,m,g,A,S,C;u=_(n,"Scripts","Inspect configured scripts and their loading status."),(m=x(n,"Filter scripts",d.scriptSearch)).input.placeholder="Search by name, category, or URL",g=b(n,"div","c15t-dev-tools__script-list"),A=()=>{g.replaceChildren();let e=d.scriptSearch.toLowerCase(),t=s.scripts.filter(t=>`${t.id} ${t.src??""} ${JSON.stringify(t.category)} ${t.status}`.toLowerCase().includes(e));for(let e of(t.length||g.append(b(n,"p","c15t-dev-tools__empty",s.scripts.length?"No scripts match your search.":"No script loader is configured for this consent provider.")),t)){let t=`${e.loaderId}:${e.id}`,o=b(n,"details","c15t-dev-tools__script");o.open=d.expandedScripts.has(t),o.addEventListener("toggle",()=>{o.isConnected&&(o.open?d.expandedScripts.add(t):d.expandedScripts.delete(t))});let s=b(n,"summary","c15t-dev-tools__script-summary"),a=b(n,"span","c15t-dev-tools__script-name",e.id),r=b(n,"span","c15t-dev-tools__status",e.status[0]?.toUpperCase()+e.status.slice(1));r.dataset.status=e.status,s.append(a,r),s.dataset.focusKey=`script:${t}`;let i=b(n,"div","c15t-dev-tools__script-body");i.append(b(n,"p","c15t-dev-tools__muted",e.src??(e.callbackOnly?"Callback-only integration":"Inline script"))),i.append(y(n,{allowedToLoad:e.eligible,alwaysLoad:e.alwaysLoad,category:e.category,consentGranted:e.hasConsent,elementId:e.elementId,persistAfterConsentRevoked:e.persistAfterConsentRevoked,vendorId:e.vendorId})),e.lastEvent&&i.append(b(n,"p","c15t-dev-tools__muted",e.lastEvent.message)),"present"===e.status&&i.append(b(n,"p","c15t-dev-tools__muted","An existing element was reused. Its network load result is unknown.")),"retained"===e.status&&i.append(b(n,"p","c15t-dev-tools__muted","Consent was revoked, but this script is configured to stay on the page.")),o.append(s,i),g.append(o)}},m.input.addEventListener("input",()=>{d.scriptSearch=m.input.value,A()}),A(),u.append(m.field,g),o.append(u),S=_(n,"External resources","Scripts and iframes currently in the page. Presence does not confirm successful loading."),C=b(n,"div","c15t-dev-tools__script-list"),S.append(h(n,"Scan page",()=>{for(let e of(C.replaceChildren(),n.querySelectorAll("script[src], iframe[src]"))){let t;try{t=new URL(e.src,n.baseURI)}catch{continue}if(!["http:","https:"].includes(t.protocol)||t.origin===n.location.origin)continue;let o="SCRIPT"===e.tagName?s.scripts.find(t=>t.elementId===e.id):void 0,a=b(n,"div","c15t-dev-tools__script-body");a.append(b(n,"strong",void 0,`${e.tagName.toLowerCase()} \xb7 ${o?o.id:"Not managed by this provider"}`),b(n,"p","c15t-dev-tools__muted",t.href)),C.append(a)}C.childElementCount||C.append(b(n,"p","c15t-dev-tools__empty","No external scripts or iframes found."))}),C),o.append(S);break;case"consents":!function(e,n,o,s,a,r,i){let d=_(e,"Consent categories","Draft selections do not change permissions. Save to record the displayed choices."),{snapshot:l,draft:c}=o;if(null!==o.draftFingerprint&&o.draftFingerprint!==l.evaluationPolicy.choice.fingerprint){let t=b(e,"p","c15t-dev-tools__muted","Policy changed. Discard the draft and review the current choices before saving.");t.setAttribute("role","alert"),d.append(t)}let p=b(e,"div","c15t-dev-tools__control-list"),v=new Set(a()),u=r?.()?.preferences?.defaults;for(let n of t.filter(e=>v.has(e))){let t=f(l,c,n,u),o=b(e,"label","c15t-dev-tools__check"),a=b(e,"input");a.type="checkbox",a.setAttribute("role","switch"),a.checked=t,a.disabled="necessary"===n,a.disabled||="iab"===l.model,a.dataset.focusKey=`consent:${n}`,a.addEventListener("change",()=>{let e={};e[n]=a.checked,s.setDraft(e)}),o.append(b(e,"span",void 0,n[0]?.toUpperCase()+n.slice(1))),"necessary"===n&&o.append(b(e,"span","c15t-dev-tools__badge","Always on")),o.append(a),o.append(b(e,"span","c15t-dev-tools__muted",`Effective: ${l.effectivePermissions[n]?"allowed":"blocked"}`)),p.append(o)}if("iab"===l.model){d.append(p,b(e,"p","c15t-dev-tools__muted","Categories are derived from IAB choices. Use the IAB tab to edit and save vendors and purposes.")),n.append(d);return}let m=b(e,"div","c15t-dev-tools__actions");m.append(h(e,"Save changes",()=>{i("Saving consent…",()=>s.save(),"Consent saved.")},"primary"),h(e,"Accept all",()=>{i("Accepting displayed consents…",()=>s.save("all"),"Displayed consents accepted.")}),h(e,"Reject optional",()=>{i("Rejecting optional consents…",()=>s.save("none"),"Optional displayed consents rejected.")}));let g=h(e,"Discard draft",s.resetDraft);g.disabled=0===Object.keys(c).length,m.append(g),d.append(p,m),n.append(d)}(n,o,s,c,l,p,v);break;case"location":!function(e,t,n,o,s){let a=_(e,"Resolved location");a.append(o.location?y(e,o.location):b(e,"p","c15t-dev-tools__empty","No location has been resolved yet."));let r=_(e,"Overrides","Test how consent changes by location, language, or privacy signal."),i=b(e,"form","c15t-dev-tools__form"),d=x(e,"Country",o.overrides.country??""),l=x(e,"Region",o.overrides.region??""),c=x(e,"Language",o.overrides.language??""),p=b(e,"label","c15t-dev-tools__field");p.append(b(e,"span",void 0,"GPC"));let v=b(e,"select");for(let[t,n]of(v.dataset.focusKey="field:GPC",[["default","Use browser signal"],["true","Enabled"],["false","Disabled"]])){let o=b(e,"option",void 0,n);o.value=t,v.append(o)}v.value=void 0===o.overrides.gpc?"default":String(o.overrides.gpc),p.append(v);let u=b(e,"div","c15t-dev-tools__actions"),m=h(e,"Apply and refresh",()=>{},"primary");m.type="submit",u.append(m,h(e,"Clear overrides",()=>{n.set.overrides({country:void 0,gpc:void 0,language:void 0,region:void 0}),s("Clearing overrides…",()=>n.commands.init(),"Overrides cleared and consent data refreshed.")})),i.addEventListener("submit",e=>{e.preventDefault();let t={country:d.input.value.trim()||void 0,gpc:"default"===v.value?void 0:"true"===v.value,language:c.input.value.trim()||void 0,region:l.input.value.trim()||void 0};n.set.overrides(t),s("Applying overrides…",()=>n.commands.init(),"Overrides applied and consent data refreshed.")}),i.append(d.field,l.field,c.field,p,u),r.append(i),t.append(a,r)}(n,o,a,s.snapshot,v);break;case"policy":!function(e,t,n,o){let s=_(e,"Policy and interaction"),a=b(e,"dl","c15t-dev-tools__stats");for(let[o,r]of(a.append(w(e,"Resolution",n.resolution.status),w(e,"Model",n.model??"Unresolved"),w(e,"Configured prompt",n.policyRule.prompt),w(e,"Required prompt",n.promptRequirement.kind),w(e,"Prompt reason","reason"in n.promptRequirement?n.promptRequirement.reason:"Not required"),w(e,"Active UI",n.activeUI??"None"),w(e,"Revision",String(n.revision)),w(e,"Explicit choice",n.explicitChoice?"Recorded":"Absent")),s.append(a),t.append(s),[["Explicit choice receipts",n.explicitChoice],["Effective permissions",n.effectivePermissions],["Restrictions",n.restrictions],["Local notice dismissal",n.noticeDismissal],["Privacy signals",n.privacySignals],["Standing privacy directives",n.optOutDirectives],["Policy resolution",n.resolution],["Active policy rule",n.policyRule],["Action constraints and persistent rights",{actions:n.policyRule.actions,rights:n.policyRule.rights}],["Fingerprints and validity",n.evaluationPolicy],["Evaluation clock",{evaluatedAt:n.evaluatedAt,nextDeadline:n.nextDeadline}],["Subject",n.subject]])){let n=_(e,o);n.append(y(e,r)),t.append(n)}let r=o?.(),d=_(e,"Presentation resolution",r?"Resolved from supplied host options. This does not verify the rendered controls.":"Resolved defaults only. Host presentation was not supplied; rendered controls are not verified.");d.append(y(e,{preferences:i({policy:n.policyRule,presentation:r,surface:"preferences"}),prompt:i({policy:n.policyRule,presentation:r,surface:"prompt"}),source:r?"host-options":"defaults"})),t.append(d)}(n,o,s.snapshot,p);break;case"iab":((t,n,o,s,a)=>{let r=o.getSnapshot(),{iab:i}=r;if(!i?.enabled||!i.gvl||"iab"!==r.model)return n.append(_(t,"IAB consent",i?.enabled?"IAB controls are available when the current policy uses IAB and its vendor list has loaded.":"IAB is not enabled for this provider. Configure IAB and refresh consent data to inspect it."));let d=e.get(o)?.controls,l=_(t,"IAB consent","Edits are unsaved selections. Save IAB consent to generate a fresh TC string and apply these choices to script access.");d||l.append(b(t,"p","c15t-dev-tools__muted","Read-only: waiting for this provider’s IAB module."));let c=b(t,"div","c15t-dev-tools__actions"),p=h(t,"Save IAB consent",()=>{d&&a("Saving IAB consent…",()=>d.save(),"IAB consent saved.")},"primary"),v=h(t,"Accept all IAB",()=>d?.acceptAll()),u=h(t,"Reject all IAB",()=>d?.rejectAll());for(let e of[p,v,u])e.disabled=!d;c.append(p,v,u),l.append(c),n.append(l);let m=x(t,"Search IAB names or IDs",s.search);m.input.type="search";let g=b(t,"label","c15t-dev-tools__field"),f=b(t,"select");for(let[e,n]of(f.dataset.focusKey="iab:group",[["vendors","Vendors"],["purposes","Purposes"],["features","Special features"]])){let o=b(t,"option",void 0,n);o.value=e,f.append(o)}f.value=s.group,g.append(b(t,"span",void 0,"IAB view"),f);let w=b(t,"div","c15t-dev-tools__iab-list"),A=_(t,"Choices");A.append(g,m.field,w),n.append(A);let S=[...Object.values(i.gvl.vendors).map(e=>({...e,custom:!1})),...i.customVendors.map(e=>({...e,custom:!0}))],C=()=>{w.replaceChildren();let e=s.search.trim().toLowerCase(),n=("vendors"===s.group?S.map(e=>({consent:e.purposes.length?i.vendorConsents[String(e.id)]??!1:void 0,custom:e.custom,id:e.id,legitimateInterest:e.legIntPurposes?.length?i.vendorLegitimateInterests[String(e.id)]??!1:void 0,name:e.name,setConsent:(t,n)=>t.setVendorConsent(e.id,n),setLegitimateInterest:(t,n)=>t.setVendorLegitimateInterest(e.id,n)})):"features"===s.group?Object.values(i.gvl?.specialFeatures??{}).map(e=>({consent:i.specialFeatureOptIns[e.id]??!1,id:e.id,name:e.name,setConsent:(t,n)=>t.setSpecialFeatureOptIn(e.id,n)})):Object.values(i.gvl?.purposes??{}).map(e=>({consent:i.purposeConsents[e.id]??!1,id:e.id,legitimateInterest:S.some(t=>t.legIntPurposes?.includes(e.id))?i.purposeLegitimateInterests[e.id]??!1:void 0,name:e.name,setConsent:(t,n)=>t.setPurposeConsent(e.id,n),setLegitimateInterest:(t,n)=>t.setPurposeLegitimateInterest(e.id,n)}))).filter(t=>`${t.id} ${t.name} ${t.custom?"custom":""}`.toLowerCase().includes(e));s.page=Math.max(0,Math.min(s.page,Math.ceil(n.length/20)-1));let o=20*s.page;if(!n.length)return void w.append(b(t,"p","c15t-dev-tools__empty",e?"No IAB choices match your search.":"No choices are configured in this group."));for(let e of(w.append(b(t,"p","c15t-dev-tools__muted",`${n.filter(e=>e.consent).length} of ${n.length} matching choices enabled`)),n.slice(o,o+20))){let n=b(t,"div","c15t-dev-tools__iab-choice");n.append(b(t,"strong",void 0,`${e.name} \xb7 ${e.id}`)),e.custom&&n.append(b(t,"span","c15t-dev-tools__badge","Custom vendor"));let o="features"===s.group?"Opt in":"Consent";void 0!==e.consent&&n.append(k(t,`${o}: ${e.name}`,`iab:${s.group}:${e.id}:consent`,e.consent,!d,t=>{d&&e.setConsent(d,t)})),void 0!==e.legitimateInterest&&n.append(k(t,`Legitimate interest: ${e.name}`,`iab:${s.group}:${e.id}:li`,e.legitimateInterest,!d,t=>{d&&e.setLegitimateInterest?.(d,t)})),w.append(n)}if(n.length>20){let e=b(t,"div","c15t-dev-tools__actions"),a=h(t,"Previous IAB page",()=>{s.page-=1,C()}),r=h(t,"Next IAB page",()=>{s.page+=1,C()});a.disabled=0===s.page,r.disabled=o+20>=n.length,e.append(a,b(t,"span",void 0,`Page ${s.page+1} of ${Math.ceil(n.length/20)}`),r),w.append(e)}};m.input.addEventListener("input",()=>{s.search=m.input.value,s.page=0,C()}),f.addEventListener("change",()=>{("vendors"===f.value||"purposes"===f.value||"features"===f.value)&&(s.group=f.value),s.page=0,C()}),C();let I=_(t,"TC string");if(I.append(b(t,"p","c15t-dev-tools__muted","Last generated string. Unsaved edits are not reflected here.")),i.tcString){let{tcString:e}=i;I.append(y(t,e),h(t,"Copy TC string",()=>{a("Copying TC string…",async()=>{let n=t.defaultView?.navigator.clipboard;if(!n)throw Error("Clipboard is unavailable in this browser. Select and copy the TC string.");await n.writeText(e)},"TC string copied.")}))}else I.append(b(t,"p","c15t-dev-tools__empty","No TC string generated yet. Save IAB consent to generate one."));let O=b(t,"details","c15t-dev-tools__script"),R=b(t,"div"),$=()=>{R.replaceChildren(...O.open?[y(t,i)]:[])};O.open=s.rawOpen,O.addEventListener("toggle",()=>{O.isConnected&&(s.rawOpen=O.open,$())}),O.append(b(t,"summary","c15t-dev-tools__script-summary","Raw IAB state"),R),$(),n.append(I,O)})(n,o,a,d.iab,v);break;case"events":!function(e,t,n,o){let s=_(e,"Consent events");if(s.append(h(e,"Clear events",o,"danger")),0===n.events.length){s.append(b(e,"p","c15t-dev-tools__empty","Consent changes and requests will appear here as they happen.")),t.append(s);return}let a=b(e,"ol","c15t-dev-tools__event-list");for(let t of n.events){let n=b(e,"li","c15t-dev-tools__event"),o=b(e,"div","c15t-dev-tools__event-header");o.append(b(e,"code",void 0,t.type),b(e,"time",void 0,new Date(t.timestamp).toLocaleTimeString())),n.append(o,b(e,"p",void 0,t.message)),t.data&&n.append(y(e,t.data)),a.append(n)}s.append(a),t.append(s)}(n,o,s,r);break;case"actions":let I,O;I=_(n,"Test consent flows","Preview the banner and preferences, or refresh consent data."),(O=b(n,"div","c15t-dev-tools__action-grid")).append(h(n,"Refresh consent data",()=>{v("Refreshing consent data…",()=>a.commands.init(),"Consent data refreshed.")},"primary"),h(n,"Show banner",()=>{a.set.activeUI("banner")}),h(n,"Open preferences",()=>{a.set.activeUI("dialog")}),h(n,"Hide consent UI",()=>{a.set.activeUI("none")})),"notice"===a.getSnapshot().promptRequirement.kind&&O.append(h(n,"Dismiss local notice",()=>{v("Dismissing notice…",c.dismissNotice,"Local notice dismissed.")})),c.clearRecords&&O.append(h(n,"Clear stored records",()=>{v("Clearing records…",()=>Promise.resolve(c.clearRecords?.()),"Stored records cleared.")},"danger")),I.append(O),o.append(I)}}(c,q,o,n.kernel,n.stateManager.clearEvents,g,n.getConsentCategories,n.actions,n.getPresentation,$);var z=r;if(z?.status==="pending")for(let e of(q.setAttribute("aria-busy","true"),q.querySelectorAll("button, input, select")))e.disabled=!0;if(z){let e=b(c,"p","c15t-dev-tools__feedback",z.message);e.setAttribute("role","error"===z.status?"alert":"status"),e.dataset.status=z.status,R.append(e)}}for(let e of(R.append(q),u.append(R),u.querySelectorAll(".c15t-dev-tools__field input, .c15t-dev-tools__field select"))){let t=e.dataset.focusKey?l.get(e.dataset.focusKey):void 0;void 0!==t&&(e.value=t)}if(q.scrollTop=d,a=o,o.isOpen!==m)E(o.isOpen?`[data-tab="${o.activeTab}"]`:".c15t-dev-tools__toggle"),m=o.isOpen;else{let e,t;I&&(e=()=>{for(let e of u.querySelectorAll("[data-focus-key]"))if(e.dataset.focusKey===I)return void e.focus({preventScroll:!0})},(t=c.defaultView)?t.requestAnimationFrame(e):e())}}(o)}let D=n.stateManager.subscribe(L),P=(s=n.kernel,(d=e.get(s))||(d={listeners:new Set},e.set(s,d)),(l=d).listeners.add(L),()=>l.listeners.delete(L)),j=n.container??c.body,q=!1===n.shadow||"function"!=typeof j.attachShadow?null:b(c,"div","c15t-dev-tools-host");if(q){q.dataset.c15tDevToolsHost=p;let e=q.attachShadow({mode:"open"});e.append(b(c,"style",void 0,S)),e.append(u),j.append(q)}else{if(!c.getElementById(O)){let e=b(c,"style",void 0,S);e.id=O,c.head.append(e)}j.append(u)}return L(),{destroy(){R=!0,P(),D(),u.remove(),q?.remove()},element:u}}({actions:U,container:c,getConsentCategories:P,getPresentation:n.getPresentation,kernel:r,shadow:R,stateManager:j});return{actions:U,clearEvents:j.clearEvents,close:()=>j.setOpen(!1),destroy(){if(!q){for(let e of(q=!0,N(),B(),F))e();K.destroy(),j.destroy()}},element:K.element,getState:j.getState,open:()=>j.setOpen(!0),setActiveTab:e=>j.setActiveTab(e),subscribe:j.subscribe,toggle:()=>{j.setOpen(!j.getState().isOpen)}}}({...o,clearRecords:o.clearRecords??n.runtime.clearRecords,getConsentCategories:()=>n.consentCategories,getPresentation:o.getPresentation??(()=>n.options.presentation),kernel:n.kernel})}(n,E),s=window.c15t;s&&!Array.isArray(s)&&(s.devtools=o)},L=window.c15t;L&&!Array.isArray(L)?L.onInit(T):window.c15t=[...L??[],["onInit",T]]})();
|
|
1
|
+
(()=>{let e=new WeakMap,t=["necessary","functionality","experience","measurement","marketing"],n=["functionality","experience","measurement","marketing"],o=function(e,t){let{basis:n}=e;return"choice-v1"===n.kind?n.fingerprint===t.choice.fingerprint:void 0===n.materialFingerprint||null===t.legacyMaterialFingerprint||n.materialFingerprint===t.legacyMaterialFingerprint},r=function(e,t,n){if(!e)return{authority:"absent",expiresAt:null};if(!o(e,t))return{authority:"policy-changed",expiresAt:null};let r=null===t.choice.maxAgeMs?null:e.confirmedAt+t.choice.maxAgeMs;return null!==r&&n>=r?{authority:"expired",expiresAt:r}:{authority:"valid",expiresAt:r}},s=function(e,t){return t?"opt-out"===e.model||"none"===e.model:"permissive"===e.scopeMode},a=function(e,t,n,o){let r=[];return t?.value===!1&&r.push("explicit-denial"),n||"strict"!==o.policy.scopeMode||r.push("strict-scope"),!0===o.gpc&&o.policy.gpcDenyCategories.includes(e)&&r.push("gpc"),o.optOuts?.some(t=>t.categories.includes(e))&&r.push("opt-out-directive"),r},i=function(e,t){let{policy:n}=t,o=t.choice?.categories[e],i=n.scope.includes(e),{authority:d,expiresAt:c}=r(o,n,t.now),l=a(e,o,i,t),p=s(n,i),u="default";return i&&o?.value===!0&&"valid"===d&&(p=!0,u="grant"),l.length>0&&(p=!1,u="restricted"),{authority:d,expiresAt:c,inScope:i,permitted:p,restrictions:l,source:u}},d=function(e,t){return{kind:e,reason:t}},c=function(e,t){return(e.choiceScope??e.scope).some(e=>t[e].restrictions.length>0)},l=function(e,t){let{policy:n}=e,o=n.choiceScope??n.scope;if(0===o.length||c(n,t))return{kind:"none"};let r=e.choice?.categories;if(!r||0===Object.keys(r).length)return d("choice","missing");let s=!1,a=!1;for(let e of o){let n=r[e],{authority:o}=t[e];if("policy-changed"===o)return d("choice","policy-changed");n?n.value&&"expired"===o&&(a=!0):s=!0}return s?d("choice","missing"):a?d("choice","expired"):{kind:"none"}},p=function(e,t){return null===t.notice.maxAgeMs?null:e.dismissedAt+t.notice.maxAgeMs},u=function(e){let t=e.noticeDismissal;if(!t)return d("notice","missing");if(t.fingerprint!==e.policy.notice.fingerprint)return d("notice","policy-changed");let n=p(t,e.policy);return null!==n&&e.now>=n?d("notice","expired"):{kind:"none"}},v=function(e,t){switch(e.policy.prompt){case"choice":return l(e,t);case"notice":return u(e);default:return{kind:"none"}}},g=function(e,t,n){let{policy:o}=e,r=[],a=o.choiceScope??o.scope,i="choice"===o.prompt&&"none"===n.kind&&!c(o,t);for(let n of o.scope){let d=t[n],c=e.choice?.categories[n],l=!s(o,!0)&&0===d.restrictions.length;c?.value===!0&&"valid"===d.authority&&null!==d.expiresAt&&(l||i&&a.includes(n))&&r.push(d.expiresAt)}let d=e.noticeDismissal;if("notice"===o.prompt&&d&&d.fingerprint===o.notice.fingerprint){let t=p(d,o);null!==t&&t>e.now&&r.push(t)}let l=r.filter(t=>t>e.now);return 0===l.length?null:Math.min(...l)},m=function(e){let t={},o={necessary:!0},r={};for(let s of n){let n=i(s,e);t[s]=n,o[s]=n.permitted,n.restrictions.length>0&&(r[s]=n.restrictions)}let s=v(e,t);return{categories:t,nextDeadline:g(e,t,s),permissions:o,promptRequirement:s,restrictions:r}},f=function(e,t){if(0===e.length)throw TypeError(`${t} condition cannot be empty`)},h=function(e,t){if(!(e in t))throw Error(`Consent category "${e}" not found in consent state`);return t[e]||!1},b=function e(t,n){if("string"==typeof t)return h(t,n);if("object"==typeof t&&null!==t){if("and"in t){let o=Array.isArray(t.and)?t.and:[t.and];return f(o,"AND"),o.every(t=>e(t,n))}if("or"in t){let o=Array.isArray(t.or)?t.or:[t.or];return f(o,"OR"),o.some(t=>e(t,n))}if("not"in t)return!e(t.not,n)}throw TypeError(`Invalid condition structure: ${JSON.stringify(t)}`)},y=function(e){let t=new Set;return!function e(n){"string"==typeof n?t.add(n):"object"==typeof n&&null!==n&&("and"in n?(Array.isArray(n.and)?n.and:[n.and]).forEach(e):"or"in n?(Array.isArray(n.or)?n.or:[n.or]).forEach(e):"not"in n&&e(n.not))}(e),Array.from(t)},_=function(e,t){if(void 0!==e.vendorId){let n=String(e.vendorId),o=(e.iabLegIntPurposes?.length??0)>0,r=!o||(e.iabPurposes?.length??0)>0;if(o&&(!Object.hasOwn(t.vendorLegitimateInterests,n)||!0!==t.vendorLegitimateInterests[n])||r&&(!Object.hasOwn(t.vendorConsents,n)||!0!==t.vendorConsents[n]))return!1}return(e.iabPurposes??[]).every(e=>Object.hasOwn(t.purposeConsents,e)&&!0===t.purposeConsents[e])&&(e.iabLegIntPurposes??[]).every(e=>Object.hasOwn(t.purposeLegitimateInterests,e)&&!0===t.purposeLegitimateInterests[e])&&(e.iabSpecialFeatures??[]).every(e=>Object.hasOwn(t.specialFeatureOptIns,e)&&!0===t.specialFeatureOptIns[e])},w=function(e){let t=e.vendorChoice?.denied;if(!t||0===t.length)return null;let n=new Set;for(let t of e.vendors?.declared??[])!0!==t.disabled&&n.add(t.id);let o=new Set;for(let e of t)n.has(e)&&o.add(e);return o.size>0?o:null},x=function(e,t=Date.now()){if(null===e.nextDeadline||t<e.nextDeadline)return e;let n=m({choice:e.explicitChoice,gpc:e.privacySignals.gpc.active,noticeDismissal:e.noticeDismissal,now:t,optOuts:e.optOutDirectives,policy:e.evaluationPolicy});return{effectivePermissions:n.permissions,restrictions:n.restrictions}},k=function(e,t){let{iab:n}=e,o=n?.authority;return!!n?.enabled&&!!o&&"matched"===e.resolution.status&&o.choiceFingerprint===e.evaluationPolicy.choice.fingerprint&&!!o.tcString&&!!Number.isSafeInteger(o.confirmedAt)&&!!Number.isSafeInteger(o.expiresAt)&&!(o.confirmedAt<0)&&!(o.confirmedAt>t)&&!(o.expiresAt<=t)&&!(o.expiresAt<=o.confirmedAt)&&!0},A=function(e,t,n=Date.now()){var o;let r=x(t,n);if(void 0!==e.vendorId||e.iabPurposes?.length||e.iabLegIntPurposes?.length||e.iabSpecialFeatures?.length){if("iab"!==t.model)return!1;let{iab:o}=t,s=o?.authority;if(!s||!k(t,n))return!1;for(let t of y(e.category))if("necessary"!==t&&r.restrictions[t]?.length)return!1;return _(e,s)}let s=b(e.category,r.effectivePermissions);return s&&void 0!==e.vendor&&"iab"!==t.model?(o=e.vendor,!w(t)?.has(o)):s},S={bar:["top","bottom"],floating:["bottom-left","bottom-right","top-left","top-right","bottom-center","top-center"],wall:["center"],widget:["bottom-left","bottom-right","top-left","top-right"]},C={bar:"bottom",floating:"bottom-left",wall:"center",widget:"bottom-right"},I=function(e){let t=["reject","accept"].filter(t=>e.includes(t)),n=e.filter(e=>!t.includes(e));return t.length>0?[t,...n]:n},O=function(e,t,n,o){let r=new Set,s=[];for(let t of n??I(e)){let n=[];for(let s of"string"==typeof t?[t]:t)e.includes(s)?r.has(s)||(r.add(s),n.push(s)):o.push({actions:[s],code:"forbidden-action",message:`The policy does not allow ${s} on this surface.`});n.length&&s.push(n)}let a=t.filter(e=>!r.has(e));return a.length&&(s.length||s.push([]),s[0]?.push(...a),o.push({actions:a,code:"required-action-restored",message:"Required actions omitted by the layout were restored at the same interaction depth."})),s},D=function(e,t,n,o){var r,s,a;let i,d,c=n?"wall":"floating",l=n?c:e.variant??c;t&&"wall"===l&&(l="floating",o.push({actions:[],code:"invalid-variant",message:"A notice cannot use a blocking wall; using floating."})),n&&(void 0!==e.variant||void 0!==e.position)&&o.push({actions:[],code:"invalid-variant",message:"Preferences use a centered dialog; variant and position are prompt options."});let p=C[l],u=p,v="default";return n||void 0===e.position||((r=l,s=e.position,S[r].includes(s))?({position:u}=e,v="host"):o.push({actions:[],code:"invalid-position",message:`Position "${e.position}" is not valid for the ${l} variant; using "${p}".`})),{blocking:(a=l,i=!1!==e.scrollLock&&!1!==e.trapFocus&&(e.scrollLock??e.trapFocus),d=e.blocking??i??(n||"wall"===a),t&&d?(d=!1,o.push({actions:[],code:"blocking-forbidden",message:"A notice prompt is never blocking; blocking was disabled."})):n||"wall"!==a||d||(d=!0,o.push({actions:[],code:"blocking-required",message:"The wall variant is always blocking; blocking was enabled."})),d),position:u,positionSource:v,variant:l}},$=function(e){var t,n;let o="preferences"===e.surface,r={...e.presentation?.[e.surface],...Object.fromEntries(Object.entries(e.override??{}).filter(([,e])=>void 0!==e))},s=o?{allowed:["reject","accept","save"],equivalent:[["accept","reject"]],required:["reject","accept","save"]}:e.policy.actions,a=[...new Set(s.allowed)],i=[...new Set(s.required)],d=s.equivalent.map(e=>[...e]),c=[],l=O(a,i,r.layout,c),p=l.flat(),u=o?["save"]:["customize"],v=(r.primaryActions??u).filter(e=>p.includes(e));for(let t of d){let n=t.filter(e=>v.includes(e)).length,o=new Set(t.map(t=>{let n=e.actionAppearance?.[t];return`${n?.variant??(v.includes(t)?"primary":"neutral")}:${n?.mode??"stroke"}`}));(n>0&&n<t.length||o.size>1)&&c.push({actions:[...t],code:"equivalent-prominence-overridden",message:"Host presentation gives equivalent actions different prominence."})}let g=!o&&"notice"===e.policy.prompt,m=r.direction??"row",f=r.uiProfile??"compact",h=D(r,g,o,c),b=h.blocking,y=h.blocking;return{...h,actionGroups:l,allowedActions:a,diagnostics:c,direction:m,equivalentActions:d,orderedActions:p,preferenceControls:(t=e.policy.rights,n=e.policy.i18n?.messageProfile,o?[]:t.includes("opt-out")&&!p.includes("reject")?["preferences"===n?"preferences":"opt-out"]:t.includes("preferences")&&!p.includes("customize")?["preferences"]:[]),primaryActions:v,requiredActions:i,rights:e.policy.rights,scrollLock:b,shouldFillActions:"strict"===f||"balanced"===f,trapFocus:y,uiProfile:f}},R=new WeakMap,E=e=>[...R.get(e)?.loaders.values()??[]].flatMap(e=>e()),L=e=>{let t=new WeakSet;try{return JSON.stringify(e,(e,n)=>{if("bigint"==typeof n)return String(n);if(null!==n&&"object"==typeof n){if(t.has(n))return"[Circular]";t.add(n)}return n},2)??"null"}catch{return'"[Unserializable value]"'}},P=["records:cleared","choice:recorded","permissions:changed","notice:dismissed","privacy:opt-out","overrides:set","user:identified","subject:resolved","iab:set","vendors:set","vendors:recorded","init:applied","init:failed","save:replayed","command:init:started","command:init:completed","command:save:started","command:save:completed","command:error"];function T(e){return{activeUI:e.activeUI,effectivePermissions:e.effectivePermissions,explicitChoice:e.explicitChoice,model:e.model,noticeDismissal:e.noticeDismissal,optOutDirectives:e.optOutDirectives,privacySignals:e.privacySignals,promptRequirement:e.promptRequirement,resolution:e.resolution.status,revision:e.revision,subject:e.subject}}function j(e){return{result:JSON.parse(L(e))}}function M(e,t){let n=L(t);try{if(t instanceof Error){let e=t.message;n="string"==typeof e?e:L(e)}else"string"==typeof t&&(n=t)}catch{}return{command:e,error:n}}let z=(e,t,n)=>e?t:n,F=(e,t,n,o)=>"necessary"===n||(t[n]??e.explicitChoice?.categories[n]?.value??o?.[n]??("opt-out"===e.policyRule.model||e.policyRule.preselectedCategories.includes(n)));function q(e,t,n,o){let r=e.createElement(t);return n&&(r.className=n),void 0!==o&&(r.textContent=o),r}function B(e,t,n,o="secondary"){let r=q(e,"button",`c15t-dev-tools__button c15t-dev-tools__button--${o}`,t);return r.type="button",r.dataset.focusKey=`button:${t}`,r.addEventListener("click",n),r}function N(e,t,n){let o=q(e,"section","c15t-dev-tools__section");return o.append(q(e,"h3",void 0,t)),n&&o.append(q(e,"p","c15t-dev-tools__muted",n)),o}function U(e,t){let n=q(e,"pre","c15t-dev-tools__code");return n.textContent=L(t),n}function K(e,t,n){let o=q(e,"div","c15t-dev-tools__stat");return o.append(q(e,"dt",void 0,t),q(e,"dd",void 0,n)),o}function V(e,t,n){let o=q(e,"label","c15t-dev-tools__field");o.append(q(e,"span",void 0,t));let r=q(e,"input");return r.type="text",r.value=n,r.autocomplete="off",r.spellcheck=!1,r.dataset.focusKey=`field:${t}`,o.append(r),{field:o,input:r}}let H=(e,t,n,o,r,s)=>{let a=q(e,"label","c15t-dev-tools__check"),i=q(e,"input");return i.type="checkbox",i.setAttribute("role","switch"),i.setAttribute("aria-label",t),i.dataset.focusKey=n,i.checked=o,i.disabled=r,i.addEventListener("change",()=>s(i.checked)),a.append(q(e,"span",void 0,t.split(":")[0]),i),a},Z=e=>{let t=e.createElementNS("http://www.w3.org/2000/svg","svg");t.setAttribute("viewBox","0 0 446 445"),t.setAttribute("width","24"),t.setAttribute("height","24"),t.setAttribute("aria-hidden","true"),t.setAttribute("focusable","false"),t.classList.add("c15t-dev-tools__logo");let n=e.createElementNS("http://www.w3.org/2000/svg","path");return n.setAttribute("fill","currentColor"),n.setAttribute("d","M223.178.313c39.064 0 70.732 31.668 70.732 70.732-.001 39.064-31.668 70.731-70.732 70.731-12.181 0-23.642-3.079-33.649-8.502l-55.689 55.689a70.267 70.267 0 0 1 5.574 13.441h167.531c8.695-29.217 35.762-50.523 67.804-50.523 39.064 0 70.731 31.668 70.731 70.732s-31.668 70.732-70.731 70.732c-32.042 0-59.108-21.306-67.803-50.523H139.413a70.417 70.417 0 0 1-7.888 17.396l54.046 54.046c10.893-6.851 23.786-10.815 37.605-10.815 39.064 0 70.732 31.669 70.732 70.733 0 39.064-31.668 70.731-70.732 70.731s-70.732-31.667-70.732-70.731c0-10.518 2.296-20.499 6.414-29.471l-57.78-57.78c-8.972 4.117-18.952 6.414-29.47 6.414-39.063 0-70.731-31.668-70.732-70.732 0-39.064 31.669-70.732 70.733-70.732 12.18 0 23.642 3.079 33.649 8.502l55.688-55.688c-5.423-10.007-8.502-21.469-8.502-33.65 0-39.064 31.668-70.733 70.732-70.733Zm0 343.555c-16.742 0-30.314 13.572-30.314 30.314 0 16.741 13.572 30.313 30.314 30.313s30.314-13.572 30.314-30.313c0-16.742-13.572-30.314-30.314-30.314ZM71.611 192.299c-16.742 0-30.315 13.572-30.315 30.314s13.573 30.314 30.315 30.314c16.741 0 30.313-13.572 30.313-30.314 0-16.741-13.572-30.314-30.313-30.314Zm303.138 0c-16.729 0-30.294 13.551-30.315 30.275l.001.039-.001.038c.021 16.725 13.586 30.276 30.315 30.276 16.741 0 30.313-13.572 30.313-30.314 0-16.741-13.572-30.314-30.313-30.314ZM223.178 40.73c-16.742 0-30.314 13.573-30.314 30.315s13.573 30.313 30.314 30.313c16.742 0 30.313-13.572 30.314-30.313 0-16.742-13.572-30.314-30.314-30.315Z"),t.append(n),t},J=".c15t-dev-tools {\n color-scheme: light dark;\n --c15t-dev-tools-bg: var(--c15t-surface, light-dark(white, #121212));\n --c15t-dev-tools-bg-raised: var(\n --c15t-surface-hover,\n light-dark(#fafafa, #1c1c1c)\n );\n --c15t-dev-tools-bg-muted: var(\n --c15t-surface-hover,\n light-dark(#fafafa, #1c1c1c)\n );\n --c15t-dev-tools-border: var(--c15t-border, light-dark(#e8e8e8, #303030));\n --c15t-dev-tools-text: var(--c15t-text, light-dark(#171717, #ededed));\n --c15t-dev-tools-muted: var(--c15t-text-muted, light-dark(#737373, #a3a3a3));\n --c15t-dev-tools-accent: var(--c15t-primary, light-dark(#335cff, #6685ff));\n --c15t-dev-tools-danger: light-dark(#b42318, #fda29b);\n --c15t-dev-tools-focus: var(--c15t-dev-tools-accent);\n /* Inspection controls sit above c15t's banner and dialog layers. */\n --c15t-dev-tools-z: calc(\n max(\n var(--consent-dialog-z-index, 999999999),\n var(--iab-cd-z-index, 999999999)\n ) +\n 1\n );\n\n position: fixed;\n z-index: var(--c15t-dev-tools-z);\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 0.5rem;\n box-sizing: border-box;\n color: var(--c15t-dev-tools-text);\n font-family: var(\n --c15t-font-family,\n ui-sans-serif,\n system-ui,\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n sans-serif\n );\n font-size: 0.875rem;\n line-height: 1.5;\n -webkit-font-smoothing: antialiased;\n isolation: isolate;\n}\n\n.c15t-dev-tools *,\n.c15t-dev-tools *::before,\n.c15t-dev-tools *::after {\n box-sizing: border-box;\n}\n\n.c15t-dev-tools [hidden] {\n display: none;\n}\n\n.c15t-dev-tools--bottom-right {\n right: max(0.75rem, env(safe-area-inset-right));\n bottom: max(0.75rem, env(safe-area-inset-bottom));\n}\n\n.c15t-dev-tools--bottom-left {\n bottom: max(0.75rem, env(safe-area-inset-bottom));\n left: max(0.75rem, env(safe-area-inset-left));\n align-items: flex-start;\n}\n\n.c15t-dev-tools--top-right {\n top: max(0.75rem, env(safe-area-inset-top));\n right: max(0.75rem, env(safe-area-inset-right));\n flex-direction: column-reverse;\n}\n\n.c15t-dev-tools--top-left {\n top: max(0.75rem, env(safe-area-inset-top));\n left: max(0.75rem, env(safe-area-inset-left));\n flex-direction: column-reverse;\n align-items: flex-start;\n}\n\n.c15t-dev-tools--embedded {\n position: relative;\n inset: auto;\n width: 100%;\n height: 100%;\n align-items: stretch;\n gap: 0;\n}\n\n.c15t-dev-tools__panel {\n display: flex;\n flex-direction: column;\n width: min(28rem, calc(100vw - 1.5rem));\n max-height: min(40rem, calc(100dvh - 1.5rem));\n overflow: hidden;\n border: 1px solid var(--c15t-dev-tools-border);\n border-radius: var(--c15t-radius-lg, 0.75rem);\n background: var(--c15t-dev-tools-bg);\n box-shadow: var(--c15t-shadow-lg, 0 8px 32px rgb(0 0 0 / 12%));\n}\n\n.c15t-dev-tools__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.375rem 0.5rem 0.375rem 1rem;\n flex-shrink: 0;\n}\n\n.c15t-dev-tools__title {\n margin: 0;\n display: flex;\n align-items: center;\n gap: 0.75rem;\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--c15t-dev-tools-muted);\n line-height: 1.25;\n text-wrap: balance;\n}\n\n.c15t-dev-tools__tabs {\n display: flex;\n flex-wrap: wrap;\n min-width: 0;\n padding: 0 0.75rem;\n flex-shrink: 0;\n border-bottom: 1px solid var(--c15t-dev-tools-border);\n}\n\n.c15t-dev-tools__button {\n min-height: 2.75rem;\n padding: 0.625rem 0.75rem;\n touch-action: manipulation;\n border: 1px solid var(--c15t-dev-tools-border);\n border-radius: 0.5rem;\n background: transparent;\n color: var(--c15t-dev-tools-text);\n font: inherit;\n font-weight: 500;\n line-height: 1.25;\n cursor: pointer;\n transition:\n background-color 150ms ease-out,\n border-color 150ms ease-out;\n}\n\n.c15t-dev-tools__button:active {\n background: var(--c15t-dev-tools-bg-muted);\n}\n\n.c15t-dev-tools__button:focus-visible,\n.c15t-dev-tools input:focus-visible,\n.c15t-dev-tools select:focus-visible,\n.c15t-dev-tools__content:focus-visible {\n outline: 2px solid var(--c15t-dev-tools-focus);\n outline-offset: 2px;\n}\n\n.c15t-dev-tools__button:disabled {\n cursor: not-allowed;\n color: var(--c15t-dev-tools-muted);\n background: var(--c15t-dev-tools-bg-muted);\n}\n\n.c15t-dev-tools__button--primary {\n border-color: var(--c15t-dev-tools-accent);\n background: var(--c15t-dev-tools-bg);\n color: var(--c15t-dev-tools-accent);\n box-shadow: var(--c15t-shadow-sm, 0 1px 2px rgb(0 0 0 / 5%));\n}\n\n.c15t-dev-tools__button--danger {\n border-color: var(--c15t-dev-tools-danger);\n color: var(--c15t-dev-tools-danger);\n}\n\n.c15t-dev-tools__toggle {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 3rem;\n height: 3rem;\n padding: 0;\n border-radius: 50%;\n border-color: var(--c15t-dev-tools-border);\n background: var(--c15t-dev-tools-bg);\n color: var(--c15t-dev-tools-text);\n box-shadow: var(--c15t-shadow-md, 0 4px 12px rgb(0 0 0 / 10%));\n}\n\n.c15t-dev-tools__tabs .c15t-dev-tools__button {\n min-height: 2.75rem;\n min-width: 0;\n max-width: 100%;\n flex: 1 0 auto;\n padding: 0.5rem 0.375rem;\n border: 0;\n border-bottom: 2px solid transparent;\n border-radius: 0;\n color: var(--c15t-dev-tools-muted);\n font-size: 0.8125rem;\n overflow-wrap: anywhere;\n}\n\n.c15t-dev-tools__tabs .c15t-dev-tools__button[aria-selected='true'] {\n border-bottom-color: var(--c15t-dev-tools-accent);\n color: var(--c15t-dev-tools-text);\n}\n\n.c15t-dev-tools__content {\n min-height: 0;\n min-width: 0;\n overflow-x: hidden;\n overflow-y: auto;\n overflow-wrap: anywhere;\n overscroll-behavior: contain;\n padding: 1rem;\n}\n\n/* Keep inspection scrollers independent of the host page's scrollbar theme. */\n.c15t-dev-tools__content,\n.c15t-dev-tools__code {\n scrollbar-width: thin;\n scrollbar-color: var(--c15t-dev-tools-muted) transparent;\n}\n\n.c15t-dev-tools__content::-webkit-scrollbar,\n.c15t-dev-tools__code::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n background: transparent;\n}\n\n.c15t-dev-tools__content::-webkit-scrollbar-track,\n.c15t-dev-tools__code::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.c15t-dev-tools__content::-webkit-scrollbar-thumb,\n.c15t-dev-tools__code::-webkit-scrollbar-thumb {\n border: 2px solid transparent;\n border-radius: 4px;\n background: var(--c15t-dev-tools-muted);\n background-clip: padding-box;\n}\n\n.c15t-dev-tools__content::-webkit-scrollbar-corner,\n.c15t-dev-tools__code::-webkit-scrollbar-corner {\n background: transparent;\n}\n\n.c15t-dev-tools__section {\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n}\n\n.c15t-dev-tools__section + .c15t-dev-tools__section {\n margin-top: 1rem;\n padding-top: 1rem;\n border-top: 1px solid var(--c15t-dev-tools-border);\n}\n\n.c15t-dev-tools__section h3,\n.c15t-dev-tools__section p,\n.c15t-dev-tools__section dl,\n.c15t-dev-tools__section ol {\n margin: 0;\n}\n\n.c15t-dev-tools__section h3 {\n font-size: 0.875rem;\n font-weight: 600;\n line-height: 1.25;\n text-wrap: balance;\n}\n\n.c15t-dev-tools__muted,\n.c15t-dev-tools__empty {\n max-width: 65ch;\n color: var(--c15t-dev-tools-muted);\n}\n\n.c15t-dev-tools__control-list,\n.c15t-dev-tools__form,\n.c15t-dev-tools__action-grid {\n display: grid;\n gap: 0.75rem;\n}\n\n.c15t-dev-tools__action-grid {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n\n.c15t-dev-tools__check {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n min-height: 2.75rem;\n padding: 0.5rem 0.75rem;\n cursor: pointer;\n}\n\n.c15t-dev-tools__check:has(input:disabled) {\n cursor: not-allowed;\n color: var(--c15t-dev-tools-muted);\n}\n\n.c15t-dev-tools__check input {\n appearance: none;\n position: relative;\n flex: 0 0 2rem;\n width: 2rem;\n height: 1.25rem;\n min-height: 0;\n margin: 0;\n padding: 0;\n border: 1px solid var(--c15t-dev-tools-border);\n border-radius: 999px;\n background: var(--c15t-switch-track, var(--c15t-dev-tools-border));\n cursor: inherit;\n}\n\n.c15t-dev-tools__field {\n display: grid;\n min-width: 0;\n gap: 0.375rem;\n font-weight: 550;\n}\n\n.c15t-dev-tools__script-list {\n display: grid;\n gap: 0.5rem;\n}\n\n.c15t-dev-tools__script {\n border: 1px solid var(--c15t-dev-tools-border);\n border-radius: var(--c15t-radius-md, 0.5rem);\n}\n\n.c15t-dev-tools__script-summary {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n min-height: 2.75rem;\n padding: 0.625rem 0.75rem;\n cursor: pointer;\n}\n\n.c15t-dev-tools__script-summary::before {\n content: '+';\n color: var(--c15t-dev-tools-muted);\n}\n\n.c15t-dev-tools__script[open] > summary::before {\n content: '−';\n}\n\n.c15t-dev-tools__script-summary:focus-visible {\n outline: 2px solid var(--c15t-dev-tools-focus);\n outline-offset: 2px;\n}\n\n.c15t-dev-tools__script-name {\n flex: 1;\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n.c15t-dev-tools__status {\n flex-shrink: 0;\n padding: 0.125rem 0.375rem;\n border-radius: 0.25rem;\n background: var(--c15t-dev-tools-bg-muted);\n color: var(--c15t-dev-tools-muted);\n font-size: 0.75rem;\n}\n\n.c15t-dev-tools__status[data-status='error'] {\n color: var(--c15t-dev-tools-danger);\n}\n\n.c15t-dev-tools__status[data-status='loaded'] {\n color: var(--c15t-dev-tools-accent);\n}\n\n.c15t-dev-tools__script-body {\n display: grid;\n gap: 0.5rem;\n padding: 0.75rem;\n border-top: 1px solid var(--c15t-dev-tools-border);\n overflow-wrap: anywhere;\n}\n\n.c15t-dev-tools__logo {\n color: var(--c15t-dev-tools-text);\n flex: 0 0 auto;\n width: 1.5rem;\n height: 1.5rem;\n}\n\n.c15t-dev-tools__button.c15t-dev-tools__close {\n width: 2.75rem;\n padding: 0;\n border: 0;\n color: var(--c15t-dev-tools-muted);\n font-size: 1.5rem;\n}\n\n.c15t-dev-tools__control-list {\n gap: 0;\n border: 1px solid var(--c15t-dev-tools-border);\n border-radius: var(--c15t-radius-md, 0.5rem);\n overflow: hidden;\n}\n\n.c15t-dev-tools__check + .c15t-dev-tools__check {\n border-top: 1px solid var(--c15t-dev-tools-border);\n}\n\n.c15t-dev-tools__check > span:first-child {\n flex: 1;\n}\n\n.c15t-dev-tools__badge {\n color: var(--c15t-dev-tools-muted);\n font-size: 0.75rem;\n}\n\n.c15t-dev-tools__check input::before {\n content: '';\n position: absolute;\n top: 2px;\n left: 2px;\n width: 0.875rem;\n height: 0.875rem;\n border-radius: 50%;\n background: var(--c15t-switch-thumb, white);\n box-shadow: 0 1px 2px rgb(0 0 0 / 15%);\n}\n\n.c15t-dev-tools__check input:checked {\n background: var(--c15t-switch-track-active, var(--c15t-dev-tools-accent));\n border-color: transparent;\n}\n\n.c15t-dev-tools__check input:checked::before {\n transform: translateX(0.75rem);\n}\n\n.c15t-dev-tools__check input:disabled {\n opacity: 0.5;\n}\n\n.c15t-dev-tools--embedded .c15t-dev-tools__close {\n display: none;\n}\n\n.c15t-dev-tools__field input,\n.c15t-dev-tools__field select {\n width: 100%;\n min-width: 0;\n min-height: 2.75rem;\n padding: 0.625rem 0.75rem;\n touch-action: manipulation;\n border: 1px solid var(--c15t-dev-tools-border);\n border-radius: 0.5rem;\n background: var(--c15t-dev-tools-bg-muted);\n color: var(--c15t-dev-tools-text);\n font: inherit;\n font-size: 1rem;\n}\n\n.c15t-dev-tools__actions {\n display: flex;\n flex-wrap: wrap;\n gap: 0.5rem;\n}\n\n.c15t-dev-tools__stats {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 0.5rem;\n}\n\n.c15t-dev-tools__stat {\n padding: 0.75rem;\n border: 1px solid var(--c15t-dev-tools-border);\n border-radius: 0.5rem;\n background: var(--c15t-dev-tools-bg-raised);\n}\n\n.c15t-dev-tools__stat dt {\n color: var(--c15t-dev-tools-muted);\n font-size: 0.75rem;\n}\n\n.c15t-dev-tools__stat dd {\n margin: 0.25rem 0 0;\n font-variant-numeric: tabular-nums;\n font-weight: 600;\n}\n\n.c15t-dev-tools__code {\n min-width: 0;\n max-width: 100%;\n max-height: 16rem;\n margin: 0;\n overflow-x: hidden;\n overflow-y: auto;\n padding: 0.75rem;\n border-radius: 0.5rem;\n background: var(--c15t-dev-tools-bg-muted);\n color: var(--c15t-dev-tools-text);\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n font-size: 0.75rem;\n line-height: 1.5;\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n}\n\n.c15t-dev-tools__event-list {\n display: grid;\n gap: 0.75rem;\n padding: 0;\n list-style: none;\n}\n\n.c15t-dev-tools__iab-list {\n display: grid;\n gap: 0.75rem;\n}\n\n.c15t-dev-tools__iab-choice {\n min-width: 0;\n padding: 0.75rem;\n border: 1px solid var(--c15t-dev-tools-border);\n border-radius: 0.5rem;\n overflow-wrap: anywhere;\n}\n\n.c15t-dev-tools__iab-choice > strong {\n display: block;\n margin-bottom: 0.5rem;\n}\n\n.c15t-dev-tools__feedback {\n margin: 0;\n padding: 0.5rem 1rem;\n border-bottom: 1px solid var(--c15t-dev-tools-border);\n overflow-wrap: anywhere;\n}\n\n.c15t-dev-tools__feedback[data-status='error'] {\n color: var(--c15t-dev-tools-danger);\n}\n\n.c15t-dev-tools__event {\n display: grid;\n gap: 0.5rem;\n padding: 0.75rem;\n border: 1px solid var(--c15t-dev-tools-border);\n border-radius: 0.5rem;\n background: var(--c15t-dev-tools-bg-raised);\n}\n\n.c15t-dev-tools__event-header {\n display: flex;\n flex-wrap: wrap;\n justify-content: space-between;\n gap: 0.75rem;\n color: var(--c15t-dev-tools-muted);\n font-size: 0.75rem;\n font-variant-numeric: tabular-nums;\n}\n\n@media (hover: hover) and (pointer: fine) {\n .c15t-dev-tools__button:hover:not(:disabled) {\n border-color: var(--c15t-dev-tools-accent);\n background: var(--c15t-dev-tools-bg-raised);\n }\n\n .c15t-dev-tools__button--primary:hover:not(:disabled) {\n background: color-mix(\n in srgb,\n var(--c15t-dev-tools-accent) 6%,\n var(--c15t-dev-tools-bg)\n );\n }\n}\n\n@media (max-width: 28rem) {\n .c15t-dev-tools__action-grid,\n .c15t-dev-tools__stats {\n grid-template-columns: 1fr;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .c15t-dev-tools__button {\n transition: none;\n }\n\n .c15t-dev-tools__button:active {\n transform: none;\n }\n}\n\n.c15t-dev-tools--embedded .c15t-dev-tools__toggle {\n display: none;\n}\n\n.c15t-dev-tools--embedded .c15t-dev-tools__panel {\n width: 100%;\n height: 100%;\n max-height: none;\n border: 0;\n border-radius: 0;\n box-shadow: none;\n}\n\n.c15t-dev-tools--embedded .c15t-dev-tools__content {\n max-height: none;\n}\n",G=[{id:"consents",label:"Consents"},{id:"scripts",label:"Scripts"},{id:"location",label:"Location"},{id:"policy",label:"Policy"},{id:"iab",label:"IAB"},{id:"events",label:"Events"},{id:"actions",label:"Actions"}],W=0,Q="c15t-dev-tools-styles",X=function(e,t,n){let o=n.vendors?.declared??[];if(0===o.length)return;let r=N(e,"Vendors",n.vendors?.listVersion?`Vendor list ${n.vendors.listVersion}. A denied vendor stays blocked inside a granted category.`:"A denied vendor stays blocked inside a granted category."),s=w(n)??new Set,a=e=>{if(s.has(e.id))return"Denied";let t=!1;try{t=A({category:e.category},n)}catch{t=!1}return t?"Allowed":"Blocked by category"},i=q(e,"div","c15t-dev-tools__control-list");for(let t of o){let n=q(e,"div","c15t-dev-tools__check");n.append(q(e,"span",void 0,t.name??t.id),q(e,"span","c15t-dev-tools__badge",t.source),q(e,"span","c15t-dev-tools__muted",a(t))),t.presentable||n.append(q(e,"span","c15t-dev-tools__muted","Slug only. Declare a name and privacy policy URL to show it.")),i.append(n)}r.append(i),t.append(r)},Y=new Set(["consents","scripts","location","policy","iab","events","actions"]),ee=new Set(["bottom-right","bottom-left","top-right","top-left"]),et=function(e){let t={};if(!e)return t;e.hasAttribute("data-open")&&(t.defaultOpen="false"!==e.getAttribute("data-open"));let n=e.getAttribute("data-tab");n&&Y.has(n)&&(t.defaultTab=n);let o=e.getAttribute("data-position");return o&&ee.has(o)&&(t.position=o),t}(document.currentScript),en=function(n){let o=function(n,o={}){return function(n){var o;let r,s,{kernel:a,container:i,shadow:d=!0,position:c="bottom-right",defaultOpen:l=!1,defaultTab:p="consents",maxEvents:u=100}=n,v=Number.isFinite(u)?Math.max(1,Math.trunc(u)):100,g=()=>{let{scope:e}=a.getSnapshot().policyRule,o=n.getConsentCategories?.()??["necessary",...e];return t.filter(t=>o.includes(t)&&("necessary"===t||e.includes(t)))},m=function(e){let t={activeTab:e.activeTab,draft:Object.freeze({}),draftFingerprint:null,events:[],isOpen:e.isOpen,position:e.position,scripts:[],snapshot:e.snapshot},n=!1,o=new Set;function r(e){if(n)return;let r=t;for(let n of(t={...t,...e},o))n(t,r)}return{addEvent:n=>{r({events:[n,...t.events].slice(0,e.maxEvents)})},clearEvents:()=>{t.events.length>0&&r({events:[]})},destroy:()=>{n=!0,o.clear()},getState:()=>t,setActiveTab:e=>{t.activeTab!==e&&r({activeTab:e})},setDraft:e=>r({draft:Object.freeze({...e}),draftFingerprint:Object.keys(e).length>0?t.draftFingerprint??t.snapshot.evaluationPolicy.choice.fingerprint:null}),setOpen:e=>{t.isOpen!==e&&r({isOpen:e})},setScripts:e=>r({scripts:e}),setSnapshot:e=>{if(t.snapshot!==e){let n=e.user!==t.snapshot.user;r({draft:n?Object.freeze({}):t.draft,draftFingerprint:n?null:t.draftFingerprint,snapshot:e})}},subscribe:e=>n?()=>{}:(o.add(e),()=>{o.delete(e)})}}({activeTab:p,isOpen:l,maxEvents:v,position:c,snapshot:a.getSnapshot()}),f=!1,h=0,b=!1;m.setScripts(E(a));let y=(o=e=>{e&&(h+=1,m.addEvent({data:{...e},id:String(h),message:`${e.scriptId}: ${e.message}`,timestamp:e.timestamp,type:`script:${e.action}`})),b||(b=!0,queueMicrotask(()=>{b=!1,f||m.setScripts(E(a))}))},(r=R.get(a))||(r={listeners:new Set,loaders:new Map},R.set(a,r)),(s=r).listeners.add(o),()=>{s.listeners.delete(o)}),_=a.subscribe(e=>{m.setSnapshot(e)}),w=P.map(e=>a.events.on(e,e=>{"records:cleared"===e.type&&m.setDraft({}),h+=1,m.addEvent(function(e,t,n){switch(e.type){case"records:cleared":return{id:t,message:"Stored records cleared",timestamp:n,type:e.type};case"choice:recorded":return{data:{...T(e.snapshot),actionAt:e.actionAt,confirmed:e.confirmed},id:t,message:"Explicit choice recorded",timestamp:n,type:e.type};case"permissions:changed":return{data:{...T(e.snapshot),previous:e.previous},id:t,message:"Effective permissions changed",timestamp:n,type:e.type};case"notice:dismissed":return{data:{...T(e.snapshot),dismissal:e.dismissal},id:t,message:"Local notice dismissed",timestamp:n,type:e.type};case"privacy:opt-out":return{data:{...T(e.snapshot),directive:e.directive},id:t,message:"Privacy opt-out recorded",timestamp:n,type:e.type};case"subject:resolved":return{data:T(e.snapshot),id:t,message:"Canonical subject resolved",timestamp:n,type:e.type};case"overrides:set":return{data:T(e.snapshot),id:t,message:"Location overrides changed",timestamp:n,type:e.type};case"user:identified":return{data:T(e.snapshot),id:t,message:"User identified",timestamp:n,type:e.type};case"iab:set":return{data:T(e.snapshot),id:t,message:"IAB state changed",timestamp:n,type:e.type};case"vendors:set":return{data:{...T(e.snapshot),vendors:e.snapshot.vendors},id:t,message:"Declared vendors changed",timestamp:n,type:e.type};case"vendors:recorded":return{data:{...T(e.snapshot),actionAt:e.actionAt,vendorChoice:e.snapshot.vendorChoice},id:t,message:"Vendor choice recorded",timestamp:n,type:e.type};case"init:applied":return{data:T(e.snapshot),id:t,message:"Initialization result applied",timestamp:n,type:e.type};case"command:init:started":return{id:t,message:"Initialization started",timestamp:n,type:e.type};case"init:failed":return{data:{...M("init",e.error),attempt:e.attempt,nextRetryMs:e.nextRetryMs},id:t,message:"Initialization failed",timestamp:n,type:e.type};case"save:replayed":return{data:{ok:e.ok,subjectId:e.subjectId},id:t,message:z(e.ok,"Queued consent saved","Queued consent save failed"),timestamp:n,type:e.type};case"command:init:completed":return{data:j(e.result),id:t,message:z(e.result.ok,"Initialization completed","Initialization failed"),timestamp:n,type:e.type};case"command:save:started":return{id:t,message:"Consent save started",timestamp:n,type:e.type};case"command:save:completed":return{data:j(e.result),id:t,message:z(e.result.ok,"Consent save completed","Consent save failed"),timestamp:n,type:e.type};case"command:error":return{data:M(e.command,e.error),id:t,message:`${e.command} command failed`,timestamp:n,type:e.type}}}(e,String(h),Date.now()))})),x={clearRecords:n.clearRecords?()=>{n.clearRecords?.(),m.setDraft({})}:void 0,dismissNotice:()=>a.commands.dismissNotice(),init:()=>a.commands.init(),resetDraft:()=>m.setDraft({}),save:async e=>{let t=m.getState(),o=a.getSnapshot();if("all"!==e&&"none"!==e&&null!==t.draftFingerprint&&t.draftFingerprint!==o.evaluationPolicy.choice.fingerprint)throw Error("Policy changed. Discard the draft and review the current choices before saving.");let r=async e=>{let n=await a.commands.save(e);return n.ok&&m.getState().draft===t.draft&&m.setDraft({}),n},s=g().filter(e=>"necessary"!==e);if(("all"===e||"none"===e)&&s.length===o.policyRule.scope.length)return await r(e);let i={},d=n.getPresentation?.()?.preferences?.defaults;for(let n of s)"all"===e||"none"===e?i[n]="all"===e:void 0===e?i[n]=F(o,t.draft,n,d):Object.hasOwn(e,n)&&"boolean"==typeof e[n]&&(i[n]=e[n]);return await r(i)},setActiveUI:e=>a.set.activeUI(e),setDraft(e){let t={...m.getState().draft};for(let n of g())"necessary"!==n&&Object.hasOwn(e,n)&&"boolean"==typeof e[n]&&(t[n]=e[n]);m.setDraft(t)},setOverrides:e=>a.set.overrides(e)},k=function(n){var o,r;let s,a,i,d,c=n.container?.ownerDocument??globalThis.document;if(!c)return{destroy(){},element:null};W+=1;let l=`c15t-dev-tools-${W}`,p=`${l}-panel`,u=q(c,"div",`c15t-dev-tools ${(o=n.stateManager.getState().position,`c15t-dev-tools--${o}`)}`);u.dataset.c15tDevTools=l,u.addEventListener("keydown",e=>{"Escape"!==e.key||u.classList.contains("c15t-dev-tools--embedded")||(e.stopPropagation(),n.stateManager.setOpen(!1))});let v=n.stateManager.getState().isOpen,g={expandedScripts:new Set,iab:{group:"vendors",page:0,rawOpen:!1,search:""},scriptSearch:""},m=!1,f=(e,t,n)=>{m||a?.status==="pending"||(a={message:e,status:"pending"},y(),(async()=>{try{let e=await t();if("object"==typeof e&&null!==e&&"ok"in e&&!e.ok)throw Error("The request failed. Check the connection and retry.");a={message:n,status:"success"}}catch(e){a={message:e instanceof Error?e.message:"The request failed. Retry the action.",status:"error"}}m||y()})())};function h(e){let t=()=>{let t=u.querySelector(e);t?.focus()},n=c.defaultView;n?n.requestAnimationFrame(t):t()}function b(e,t=!1){n.stateManager.setActiveTab(e),t&&h(`[data-tab="${e}"]`)}function y(){let o=n.stateManager.getState();if(!o.isOpen&&s&&!s.isOpen){s=o;return}!function(o){let r=s?.activeTab===o.activeTab,i=r?u.querySelector(".c15t-dev-tools__content")?.scrollTop??0:0,d=new Map;if(r&&s?.snapshot.overrides===o.snapshot.overrides)for(let e of u.querySelectorAll(".c15t-dev-tools__field input, .c15t-dev-tools__field select"))e.dataset.focusKey&&d.set(e.dataset.focusKey,e.value);let{activeElement:m}=u.getRootNode(),y=m&&u.contains(m)?m.getAttribute("data-focus-key"):null;u.replaceChildren();let _=B(c,o.isOpen?"Close c15t DevTools":"Open c15t DevTools",()=>n.stateManager.setOpen(!o.isOpen),"primary");_.classList.add("c15t-dev-tools__toggle"),_.replaceChildren(Z(c)),_.setAttribute("aria-label","Open c15t DevTools"),_.hidden=o.isOpen,_.setAttribute("aria-expanded",String(o.isOpen)),_.setAttribute("aria-controls",p),u.append(_);let w=q(c,"section","c15t-dev-tools__panel");w.id=p,w.hidden=!o.isOpen,w.setAttribute("aria-label","c15t consent developer tools");let x=q(c,"header","c15t-dev-tools__header"),k=q(c,"h2","c15t-dev-tools__title");k.setAttribute("aria-label","c15t DevTools"),k.append(Z(c),q(c,"span",void 0,"DevTools"));let A=B(c,"Close c15t DevTools",()=>{n.stateManager.setOpen(!1)});A.textContent="×",A.setAttribute("aria-label","Close c15t DevTools"),A.classList.add("c15t-dev-tools__close"),x.append(k,A),w.append(x);let S=q(c,"div","c15t-dev-tools__tabs");S.setAttribute("role","tablist"),S.setAttribute("aria-label","DevTools views"),G.forEach((e,t)=>{let n=B(c,e.label,()=>{b(e.id)});n.dataset.tab=e.id,n.id=`${l}-tab-${e.id}`,n.setAttribute("role","tab"),n.setAttribute("aria-selected",String(e.id===o.activeTab)),n.setAttribute("aria-controls",`${l}-tabpanel`),n.tabIndex=e.id===o.activeTab?0:-1,n.addEventListener("keydown",e=>{let n=null;if("ArrowRight"===e.key?n=(t+1)%G.length:"ArrowLeft"===e.key?n=(t-1+G.length)%G.length:"Home"===e.key?n=0:"End"===e.key&&(n=G.length-1),null===n)return;e.preventDefault();let o=G[n];o&&b(o.id,!0)}),S.append(n)}),w.append(S);let C=q(c,"div","c15t-dev-tools__content");if(C.id=`${l}-tabpanel`,C.setAttribute("role","tabpanel"),C.setAttribute("aria-labelledby",`${l}-tab-${o.activeTab}`),C.tabIndex=0,o.isOpen){!function(n,o,r,s,a,i,d,c,l,p){switch(r.activeTab){case"scripts":let u,v,g,m,f,h;u=N(n,"Scripts","Inspect configured scripts and their loading status."),(v=V(n,"Filter scripts",i.scriptSearch)).input.placeholder="Search by name, category, or URL",g=q(n,"div","c15t-dev-tools__script-list"),m=()=>{g.replaceChildren();let e=i.scriptSearch.toLowerCase(),t=r.scripts.filter(t=>`${t.id} ${t.src??""} ${JSON.stringify(t.category)} ${t.status}`.toLowerCase().includes(e));for(let e of(t.length||g.append(q(n,"p","c15t-dev-tools__empty",r.scripts.length?"No scripts match your search.":"No script loader is configured for this consent provider.")),t)){let t=`${e.loaderId}:${e.id}`,o=q(n,"details","c15t-dev-tools__script");o.open=i.expandedScripts.has(t),o.addEventListener("toggle",()=>{o.isConnected&&(o.open?i.expandedScripts.add(t):i.expandedScripts.delete(t))});let r=q(n,"summary","c15t-dev-tools__script-summary"),s=q(n,"span","c15t-dev-tools__script-name",e.id),a=q(n,"span","c15t-dev-tools__status",e.status[0]?.toUpperCase()+e.status.slice(1));a.dataset.status=e.status,r.append(s,a),r.dataset.focusKey=`script:${t}`;let d=q(n,"div","c15t-dev-tools__script-body");d.append(q(n,"p","c15t-dev-tools__muted",e.src??(e.callbackOnly?"Callback-only integration":"Inline script"))),d.append(U(n,{allowedToLoad:e.eligible,alwaysLoad:e.alwaysLoad,category:e.category,consentGranted:e.hasConsent,elementId:e.elementId,persistAfterConsentRevoked:e.persistAfterConsentRevoked,vendorId:e.vendorId})),e.lastEvent&&d.append(q(n,"p","c15t-dev-tools__muted",e.lastEvent.message)),"present"===e.status&&d.append(q(n,"p","c15t-dev-tools__muted","An existing element was reused. Its network load result is unknown.")),"retained"===e.status&&d.append(q(n,"p","c15t-dev-tools__muted","Consent was revoked, but this script is configured to stay on the page.")),o.append(r,d),g.append(o)}},v.input.addEventListener("input",()=>{i.scriptSearch=v.input.value,m()}),m(),u.append(v.field,g),o.append(u),f=N(n,"External resources","Scripts and iframes currently in the page. Presence does not confirm successful loading."),h=q(n,"div","c15t-dev-tools__script-list"),f.append(B(n,"Scan page",()=>{for(let e of(h.replaceChildren(),n.querySelectorAll("script[src], iframe[src]"))){let t;try{t=new URL(e.src,n.baseURI)}catch{continue}if(!["http:","https:"].includes(t.protocol)||t.origin===n.location.origin)continue;let o="SCRIPT"===e.tagName?r.scripts.find(t=>t.elementId===e.id):void 0,s=q(n,"div","c15t-dev-tools__script-body");s.append(q(n,"strong",void 0,`${e.tagName.toLowerCase()} \xb7 ${o?o.id:"Not managed by this provider"}`),q(n,"p","c15t-dev-tools__muted",t.href)),h.append(s)}h.childElementCount||h.append(q(n,"p","c15t-dev-tools__empty","No external scripts or iframes found."))}),h),o.append(f);break;case"consents":!function(e,n,o,r,s,a,i){let d=N(e,"Consent categories","Draft selections do not change permissions. Save to record the displayed choices."),{snapshot:c,draft:l}=o;if(null!==o.draftFingerprint&&o.draftFingerprint!==c.evaluationPolicy.choice.fingerprint){let t=q(e,"p","c15t-dev-tools__muted","Policy changed. Discard the draft and review the current choices before saving.");t.setAttribute("role","alert"),d.append(t)}let p=q(e,"div","c15t-dev-tools__control-list"),u=new Set(s()),v=a?.()?.preferences?.defaults;for(let n of t.filter(e=>u.has(e))){let t=F(c,l,n,v),o=q(e,"label","c15t-dev-tools__check"),s=q(e,"input");s.type="checkbox",s.setAttribute("role","switch"),s.checked=t,s.disabled="necessary"===n,s.disabled||="iab"===c.model,s.dataset.focusKey=`consent:${n}`,s.addEventListener("change",()=>{let e={};e[n]=s.checked,r.setDraft(e)}),o.append(q(e,"span",void 0,n[0]?.toUpperCase()+n.slice(1))),"necessary"===n&&o.append(q(e,"span","c15t-dev-tools__badge","Always on")),o.append(s),o.append(q(e,"span","c15t-dev-tools__muted",`Effective: ${c.effectivePermissions[n]?"allowed":"blocked"}`)),p.append(o)}if("iab"===c.model){d.append(p,q(e,"p","c15t-dev-tools__muted","Categories are derived from IAB choices. Use the IAB tab to edit and save vendors and purposes.")),n.append(d);return}let g=q(e,"div","c15t-dev-tools__actions");g.append(B(e,"Save changes",()=>{i("Saving consent…",()=>r.save(),"Consent saved.")},"primary"),B(e,"Accept all",()=>{i("Accepting displayed consents…",()=>r.save("all"),"Displayed consents accepted.")}),B(e,"Reject optional",()=>{i("Rejecting optional consents…",()=>r.save("none"),"Optional displayed consents rejected.")}));let m=B(e,"Discard draft",r.resetDraft);m.disabled=0===Object.keys(l).length,g.append(m),d.append(p,g),n.append(d),X(e,n,c)}(n,o,r,c,d,l,p);break;case"location":!function(e,t,n,o,r){let s=N(e,"Resolved location");s.append(o.location?U(e,o.location):q(e,"p","c15t-dev-tools__empty","No location has been resolved yet."));let a=N(e,"Overrides","Test how consent changes by location, language, or privacy signal."),i=q(e,"form","c15t-dev-tools__form"),d=V(e,"Country",o.overrides.country??""),c=V(e,"Region",o.overrides.region??""),l=V(e,"Language",o.overrides.language??""),p=q(e,"label","c15t-dev-tools__field");p.append(q(e,"span",void 0,"GPC"));let u=q(e,"select");for(let[t,n]of(u.dataset.focusKey="field:GPC",[["default","Use browser signal"],["true","Enabled"],["false","Disabled"]])){let o=q(e,"option",void 0,n);o.value=t,u.append(o)}u.value=void 0===o.overrides.gpc?"default":String(o.overrides.gpc),p.append(u);let v=q(e,"div","c15t-dev-tools__actions"),g=B(e,"Apply and refresh",()=>{},"primary");g.type="submit",v.append(g,B(e,"Clear overrides",()=>{n.set.overrides({country:void 0,gpc:void 0,language:void 0,region:void 0}),r("Clearing overrides…",()=>n.commands.init(),"Overrides cleared and consent data refreshed.")})),i.addEventListener("submit",e=>{e.preventDefault();let t={country:d.input.value.trim()||void 0,gpc:"default"===u.value?void 0:"true"===u.value,language:l.input.value.trim()||void 0,region:c.input.value.trim()||void 0};n.set.overrides(t),r("Applying overrides…",()=>n.commands.init(),"Overrides applied and consent data refreshed.")}),i.append(d.field,c.field,l.field,p,v),a.append(i),t.append(s,a)}(n,o,s,r.snapshot,p);break;case"policy":!function(e,t,n,o){let r=N(e,"Policy and interaction"),s=q(e,"dl","c15t-dev-tools__stats");for(let[o,a]of(s.append(K(e,"Resolution",n.resolution.status),K(e,"Model",n.model??"Unresolved"),K(e,"Configured prompt",n.policyRule.prompt),K(e,"Required prompt",n.promptRequirement.kind),K(e,"Prompt reason","reason"in n.promptRequirement?n.promptRequirement.reason:"Not required"),K(e,"Active UI",n.activeUI??"None"),K(e,"Revision",String(n.revision)),K(e,"Explicit choice",n.explicitChoice?"Recorded":"Absent")),r.append(s),t.append(r),[["Explicit choice receipts",n.explicitChoice],["Effective permissions",n.effectivePermissions],["Restrictions",n.restrictions],["Local notice dismissal",n.noticeDismissal],["Privacy signals",n.privacySignals],["Standing privacy directives",n.optOutDirectives],["Policy resolution",n.resolution],["Active policy rule",n.policyRule],["Action constraints and persistent rights",{actions:n.policyRule.actions,rights:n.policyRule.rights}],["Fingerprints and validity",n.evaluationPolicy],["Evaluation clock",{evaluatedAt:n.evaluatedAt,nextDeadline:n.nextDeadline}],["Subject",n.subject]])){let n=N(e,o);n.append(U(e,a)),t.append(n)}let a=o?.(),i=N(e,"Presentation resolution",a?"Resolved from supplied host options. This does not verify the rendered controls.":"Resolved defaults only. Host presentation was not supplied; rendered controls are not verified.");i.append(U(e,{preferences:$({policy:n.policyRule,presentation:a,surface:"preferences"}),prompt:$({policy:n.policyRule,presentation:a,surface:"prompt"}),source:a?"host-options":"defaults"})),t.append(i)}(n,o,r.snapshot,l);break;case"iab":((t,n,o,r,s)=>{let a=o.getSnapshot(),{iab:i}=a;if(!i?.enabled||!i.gvl||"iab"!==a.model)return n.append(N(t,"IAB consent",i?.enabled?"IAB controls are available when the current policy uses IAB and its vendor list has loaded.":"IAB is not enabled for this provider. Configure IAB and refresh consent data to inspect it."));let d=e.get(o)?.controls,c=N(t,"IAB consent","Edits are unsaved selections. Save IAB consent to generate a fresh TC string and apply these choices to script access.");d||c.append(q(t,"p","c15t-dev-tools__muted","Read-only: waiting for this provider’s IAB module."));let l=q(t,"div","c15t-dev-tools__actions"),p=B(t,"Save IAB consent",()=>{d&&s("Saving IAB consent…",()=>d.save(),"IAB consent saved.")},"primary"),u=B(t,"Accept all IAB",()=>d?.acceptAll()),v=B(t,"Reject all IAB",()=>d?.rejectAll());for(let e of[p,u,v])e.disabled=!d;l.append(p,u,v),c.append(l),n.append(c);let g=V(t,"Search IAB names or IDs",r.search);g.input.type="search";let m=q(t,"label","c15t-dev-tools__field"),f=q(t,"select");for(let[e,n]of(f.dataset.focusKey="iab:group",[["vendors","Vendors"],["purposes","Purposes"],["features","Special features"]])){let o=q(t,"option",void 0,n);o.value=e,f.append(o)}f.value=r.group,m.append(q(t,"span",void 0,"IAB view"),f);let h=q(t,"div","c15t-dev-tools__iab-list"),b=N(t,"Choices");b.append(m,g.field,h),n.append(b);let y=[...Object.values(i.gvl.vendors).map(e=>({...e,custom:!1})),...i.customVendors.map(e=>({...e,custom:!0}))],_=()=>{h.replaceChildren();let e=r.search.trim().toLowerCase(),n=("vendors"===r.group?y.map(e=>({consent:e.purposes.length?i.vendorConsents[String(e.id)]??!1:void 0,custom:e.custom,id:e.id,legitimateInterest:e.legIntPurposes?.length?i.vendorLegitimateInterests[String(e.id)]??!1:void 0,name:e.name,setConsent:(t,n)=>t.setVendorConsent(e.id,n),setLegitimateInterest:(t,n)=>t.setVendorLegitimateInterest(e.id,n)})):"features"===r.group?Object.values(i.gvl?.specialFeatures??{}).map(e=>({consent:i.specialFeatureOptIns[e.id]??!1,id:e.id,name:e.name,setConsent:(t,n)=>t.setSpecialFeatureOptIn(e.id,n)})):Object.values(i.gvl?.purposes??{}).map(e=>({consent:i.purposeConsents[e.id]??!1,id:e.id,legitimateInterest:y.some(t=>t.legIntPurposes?.includes(e.id))?i.purposeLegitimateInterests[e.id]??!1:void 0,name:e.name,setConsent:(t,n)=>t.setPurposeConsent(e.id,n),setLegitimateInterest:(t,n)=>t.setPurposeLegitimateInterest(e.id,n)}))).filter(t=>`${t.id} ${t.name} ${t.custom?"custom":""}`.toLowerCase().includes(e));r.page=Math.max(0,Math.min(r.page,Math.ceil(n.length/20)-1));let o=20*r.page;if(!n.length)return void h.append(q(t,"p","c15t-dev-tools__empty",e?"No IAB choices match your search.":"No choices are configured in this group."));for(let e of(h.append(q(t,"p","c15t-dev-tools__muted",`${n.filter(e=>e.consent).length} of ${n.length} matching choices enabled`)),n.slice(o,o+20))){let n=q(t,"div","c15t-dev-tools__iab-choice");n.append(q(t,"strong",void 0,`${e.name} \xb7 ${e.id}`)),e.custom&&n.append(q(t,"span","c15t-dev-tools__badge","Custom vendor"));let o="features"===r.group?"Opt in":"Consent";void 0!==e.consent&&n.append(H(t,`${o}: ${e.name}`,`iab:${r.group}:${e.id}:consent`,e.consent,!d,t=>{d&&e.setConsent(d,t)})),void 0!==e.legitimateInterest&&n.append(H(t,`Legitimate interest: ${e.name}`,`iab:${r.group}:${e.id}:li`,e.legitimateInterest,!d,t=>{d&&e.setLegitimateInterest?.(d,t)})),h.append(n)}if(n.length>20){let e=q(t,"div","c15t-dev-tools__actions"),s=B(t,"Previous IAB page",()=>{r.page-=1,_()}),a=B(t,"Next IAB page",()=>{r.page+=1,_()});s.disabled=0===r.page,a.disabled=o+20>=n.length,e.append(s,q(t,"span",void 0,`Page ${r.page+1} of ${Math.ceil(n.length/20)}`),a),h.append(e)}};g.input.addEventListener("input",()=>{r.search=g.input.value,r.page=0,_()}),f.addEventListener("change",()=>{("vendors"===f.value||"purposes"===f.value||"features"===f.value)&&(r.group=f.value),r.page=0,_()}),_();let w=N(t,"TC string");if(w.append(q(t,"p","c15t-dev-tools__muted","Last generated string. Unsaved edits are not reflected here.")),i.tcString){let{tcString:e}=i;w.append(U(t,e),B(t,"Copy TC string",()=>{s("Copying TC string…",async()=>{let n=t.defaultView?.navigator.clipboard;if(!n)throw Error("Clipboard is unavailable in this browser. Select and copy the TC string.");await n.writeText(e)},"TC string copied.")}))}else w.append(q(t,"p","c15t-dev-tools__empty","No TC string generated yet. Save IAB consent to generate one."));let x=q(t,"details","c15t-dev-tools__script"),k=q(t,"div"),A=()=>{k.replaceChildren(...x.open?[U(t,i)]:[])};x.open=r.rawOpen,x.addEventListener("toggle",()=>{x.isConnected&&(r.rawOpen=x.open,A())}),x.append(q(t,"summary","c15t-dev-tools__script-summary","Raw IAB state"),k),A(),n.append(w,x)})(n,o,s,i.iab,p);break;case"events":!function(e,t,n,o){let r=N(e,"Consent events");if(r.append(B(e,"Clear events",o,"danger")),0===n.events.length){r.append(q(e,"p","c15t-dev-tools__empty","Consent changes and requests will appear here as they happen.")),t.append(r);return}let s=q(e,"ol","c15t-dev-tools__event-list");for(let t of n.events){let n=q(e,"li","c15t-dev-tools__event"),o=q(e,"div","c15t-dev-tools__event-header");o.append(q(e,"code",void 0,t.type),q(e,"time",void 0,new Date(t.timestamp).toLocaleTimeString())),n.append(o,q(e,"p",void 0,t.message)),t.data&&n.append(U(e,t.data)),s.append(n)}r.append(s),t.append(r)}(n,o,r,a);break;case"actions":let b,y;b=N(n,"Test consent flows","Preview the banner and preferences, or refresh consent data."),(y=q(n,"div","c15t-dev-tools__action-grid")).append(B(n,"Refresh consent data",()=>{p("Refreshing consent data…",()=>s.commands.init(),"Consent data refreshed.")},"primary"),B(n,"Show banner",()=>{s.set.activeUI("banner")}),B(n,"Open preferences",()=>{s.set.activeUI("dialog")}),B(n,"Hide consent UI",()=>{s.set.activeUI("none")})),"notice"===s.getSnapshot().promptRequirement.kind&&y.append(B(n,"Dismiss local notice",()=>{p("Dismissing notice…",c.dismissNotice,"Local notice dismissed.")})),c.clearRecords&&y.append(B(n,"Clear stored records",()=>{p("Clearing records…",()=>Promise.resolve(c.clearRecords?.()),"Stored records cleared.")},"danger")),b.append(y),o.append(b)}}(c,C,o,n.kernel,n.stateManager.clearEvents,g,n.getConsentCategories,n.actions,n.getPresentation,f);var I=a;if(I?.status==="pending")for(let e of(C.setAttribute("aria-busy","true"),C.querySelectorAll("button, input, select")))e.disabled=!0;if(I){let e=q(c,"p","c15t-dev-tools__feedback",I.message);e.setAttribute("role","error"===I.status?"alert":"status"),e.dataset.status=I.status,w.append(e)}}for(let e of(w.append(C),u.append(w),u.querySelectorAll(".c15t-dev-tools__field input, .c15t-dev-tools__field select"))){let t=e.dataset.focusKey?d.get(e.dataset.focusKey):void 0;void 0!==t&&(e.value=t)}if(C.scrollTop=i,s=o,o.isOpen!==v)h(o.isOpen?`[data-tab="${o.activeTab}"]`:".c15t-dev-tools__toggle"),v=o.isOpen;else{let e,t;y&&(e=()=>{for(let e of u.querySelectorAll("[data-focus-key]"))if(e.dataset.focusKey===y)return void e.focus({preventScroll:!0})},(t=c.defaultView)?t.requestAnimationFrame(e):e())}}(o)}let _=n.stateManager.subscribe(y),w=(r=n.kernel,(i=e.get(r))||(i={listeners:new Set},e.set(r,i)),(d=i).listeners.add(y),()=>d.listeners.delete(y)),x=n.container??c.body,k=!1===n.shadow||"function"!=typeof x.attachShadow?null:q(c,"div","c15t-dev-tools-host");if(k){k.dataset.c15tDevToolsHost=l;let e=k.attachShadow({mode:"open"});e.append(q(c,"style",void 0,J)),e.append(u),x.append(k)}else{if(!c.getElementById(Q)){let e=q(c,"style",void 0,J);e.id=Q,c.head.append(e)}x.append(u)}return y(),{destroy(){m=!0,w(),_(),u.remove(),k?.remove()},element:u}}({actions:x,container:i,getConsentCategories:g,getPresentation:n.getPresentation,kernel:a,shadow:d,stateManager:m});return{actions:x,clearEvents:m.clearEvents,close:()=>m.setOpen(!1),destroy(){if(!f){for(let e of(f=!0,_(),y(),w))e();k.destroy(),m.destroy()}},element:k.element,getState:m.getState,open:()=>m.setOpen(!0),setActiveTab:e=>m.setActiveTab(e),subscribe:m.subscribe,toggle:()=>{m.setOpen(!m.getState().isOpen)}}}({...o,clearRecords:o.clearRecords??n.runtime.clearRecords,getConsentCategories:()=>n.consentCategories,getPresentation:o.getPresentation??(()=>n.options.presentation),kernel:n.kernel})}(n,et),r=window.c15t;r&&!Array.isArray(r)&&(r.devtools=o)},eo=window.c15t;eo&&!Array.isArray(eo)?eo.onInit(en):window.c15t=[...eo??[],["onInit",en]]})();
|