@c15t/react 3.0.0-alpha.6 → 3.0.0-alpha.7

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/SKILL.md CHANGED
@@ -9,7 +9,7 @@ The Markdown under `./docs` matches the installed version. Read it before writin
9
9
 
10
10
  ## Before writing code
11
11
 
12
- 1. Find the framework, router, rendering mode (server, static or single-page) and host in the project.
12
+ 1. Find the framework, router, rendering mode (server, static, cached or single-page) and host in the project. Check the framework config and route files for settings that prerender or cache pages.
13
13
  2. Pick the matching row in [Choose your setup](./docs/concepts/choose-your-setup.md).
14
14
  3. Follow that guide from start to finish: [React](./docs/frameworks/react/quickstart.md).
15
15
 
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{jsx as e}from"react/jsx-runtime";import o from"@c15t/ui/styles/components/iab-consent-banner";import{forwardRef as r}from"react";import{useActiveUI as t}from"../../../hooks.js";import{useScrollLock as s}from"../../../hooks/use-scroll-lock.js";import{useTheme as n}from"../../../hooks/use-theme.js";import{useUIConfig as a}from"../../../ui-config-context.js";import{cnExt as i}from"../../../utils/cn.js";import{mergeSlotProps as m}from"../../../utils/merge-slot-props.js";let l=r(({className:r,style:l,noStyle:p,...c},f)=>{let y=t(),{disableAnimation:u,noStyle:b,scrollLock:v}=n(),{components:d}=a(),j="banner"===y,h=m(d?.["iab-banner"]?.overlay,{baseClassName:o.overlay,className:r,noStyle:b||p,style:l,...c}),k=b||p||u?void 0:`${o.overlayVisible} ${o.overlayEntering}`,B=i(h.className,k);return(s(!!(j&&v)),j&&v)?e("div",{ref:f,...h,"aria-hidden":"true",className:B,"data-testid":"iab-consent-banner-overlay"}):null});l.displayName="IABConsentBannerOverlay";export{l as IABConsentBannerOverlay};
2
+ import{jsx as e}from"react/jsx-runtime";import o from"@c15t/ui/styles/components/iab-consent-banner";import{forwardRef as r}from"react";import{useActiveUI as t}from"../../../hooks.js";import{useLateEntry as s}from"../../../hooks/use-late-entry.js";import{useScrollLock as a}from"../../../hooks/use-scroll-lock.js";import{useTheme as n}from"../../../hooks/use-theme.js";import{useUIConfig as i}from"../../../ui-config-context.js";import{cnExt as l}from"../../../utils/cn.js";import{mergeSlotProps as m}from"../../../utils/merge-slot-props.js";let p=r(({className:r,style:p,noStyle:c,...y},f)=>{let u=t(),{disableAnimation:v,noStyle:b,scrollLock:d}=n(),{components:j}=i(),h="banner"===u,k=m(j?.["iab-banner"]?.overlay,{baseClassName:o.overlay,className:r,noStyle:b||c,style:p,...y}),B=b||c||v?void 0:`${o.overlayVisible} ${o.overlayEntering}`,N=l(k.className,B);a(!!(h&&d));let g=s(!!(h&&d))&&!v;return h&&d?e("div",{ref:f,...k,"aria-hidden":"true",className:N,"data-entry":g?"late":void 0,"data-testid":"iab-consent-banner-overlay"}):null});p.displayName="IABConsentBannerOverlay";export{p as IABConsentBannerOverlay};
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{Fragment as e,jsx as o,jsxs as t}from"react/jsx-runtime";import r from"@c15t/ui/styles/components/iab-consent-banner";import{forwardRef as n,useMemo as a}from"react";import{ConsentTrackingContext as s}from"../../../context/consent-tracking-context.js";import{LocalThemeContext as i}from"../../../context/theme-context.js";import{useActiveUI as m,useModel as l,useTranslations as c}from"../../../hooks.js";import{useIABConsentManager as b}from"../../../hooks/use-iab-manager.js";import{useTextDirection as p}from"../../../hooks/use-text-direction.js";import{useUIConfig as d}from"../../../ui-config-context.js";import{mergeSlotProps as u}from"../../../utils/merge-slot-props.js";import{IABConsentBannerOverlay as f}from"./overlay.js";let h=["iab"],g=n(({children:n,className:a,style:s,className:i,disableAnimation:b,noStyle:g,models:j=h,...x},N)=>{let k=m(),{components:v}=d(),y=l(),B=c(),C=p(B?.language??"en"),$=null!==y&&"banner"===k&&j.includes(y),A=u(v?.["iab-banner"]?.root,{baseClassName:[r.root],className:a||i,noStyle:g,style:s,...x}),I=g?A.className||"":`${A.className||""} ${r.bannerVisible}${b?"":` ${r.bannerEntering}`}`;return $?t(e,{children:[o(f,{}),o("div",{ref:N,...A,className:I,"data-position":"ltr"===C?"bottom-left":"bottom-right","data-testid":"iab-consent-banner-root",dir:C,tabIndex:-1,children:n})]}):null}),j=({children:e,className:t,noStyle:r,disableAnimation:n,scrollLock:m,trapFocus:l,models:c,uiSource:p,...d})=>{let{policyBanner:u}=b({prompt:{scrollLock:m,trapFocus:l}}),f=u.blocking,h=a(()=>({disableAnimation:n,noStyle:r,scrollLock:f,trapFocus:f}),[n,r,f]),j=a(()=>({uiSource:p??"iab_banner"}),[p]);return o(s.Provider,{value:j,children:o(i.Provider,{value:h,children:o(g,{disableAnimation:n,className:t,noStyle:r,models:c,...d,children:e})})})};g.displayName="IABConsentBannerRootChildren";export{j as IABConsentBannerRoot};
2
+ import{Fragment as e,jsx as o,jsxs as t}from"react/jsx-runtime";import r from"@c15t/ui/styles/components/iab-consent-banner";import{forwardRef as n,useMemo as a}from"react";import{ConsentTrackingContext as s}from"../../../context/consent-tracking-context.js";import{LocalThemeContext as i}from"../../../context/theme-context.js";import{useActiveUI as m,useModel as l,useTranslations as c}from"../../../hooks.js";import{useIABConsentManager as d}from"../../../hooks/use-iab-manager.js";import{useLateEntry as p}from"../../../hooks/use-late-entry.js";import{useTextDirection as b}from"../../../hooks/use-text-direction.js";import{useUIConfig as u}from"../../../ui-config-context.js";import{mergeSlotProps as f}from"../../../utils/merge-slot-props.js";import{IABConsentBannerOverlay as h}from"./overlay.js";let j=["iab"],g=n(({children:n,className:a,style:s,className:i,disableAnimation:d,noStyle:g,models:x=j,...N},k)=>{let v=m(),{components:y}=u(),B=l(),C=c(),$=b(C?.language??"en"),A=null!==B&&"banner"===v&&x.includes(B),I=p(A)&&!d,P=f(y?.["iab-banner"]?.root,{baseClassName:[r.root],className:a||i,noStyle:g,style:s,...N}),R=g?P.className||"":`${P.className||""} ${r.bannerVisible}${d?"":` ${r.bannerEntering}`}`;return A?t(e,{children:[o(h,{}),o("div",{ref:k,...P,className:R,"data-position":"ltr"===$?"bottom-left":"bottom-right","data-entry":I?"late":void 0,"data-testid":"iab-consent-banner-root",dir:$,tabIndex:-1,children:n})]}):null}),x=({children:e,className:t,noStyle:r,disableAnimation:n,scrollLock:m,trapFocus:l,models:c,uiSource:p,...b})=>{let{policyBanner:u}=d({prompt:{scrollLock:m,trapFocus:l}}),f=u.blocking,h=a(()=>({disableAnimation:n,noStyle:r,scrollLock:f,trapFocus:f}),[n,r,f]),j=a(()=>({uiSource:p??"iab_banner"}),[p]);return o(s.Provider,{value:j,children:o(i.Provider,{value:h,children:o(g,{disableAnimation:n,className:t,noStyle:r,models:c,...b,children:e})})})};g.displayName="IABConsentBannerRootChildren";export{x as IABConsentBannerRoot};
@@ -1 +1 @@
1
- import{jsx as e}from"react/jsx-runtime";import r from"@c15t/ui/styles/components/consent-banner";import{forwardRef as o,isValidElement as t}from"react";import{Slot as s}from"../../shared/libs/slot.js";import{useActiveUI as n}from"../../../hooks.js";import{useScrollLock as l}from"../../../hooks/use-scroll-lock.js";import{useTheme as a}from"../../../hooks/use-theme.js";import{useUIConfig as i}from"../../../ui-config-context.js";import{cnExt as m}from"../../../utils/cn.js";import{mergeSlotProps as c}from"../../../utils/merge-slot-props.js";let p=o(({className:o,style:p,noStyle:f,asChild:y,children:d,...u},v)=>{let h=n(),{disableAnimation:j,noStyle:b,scrollLock:k}=a(),{components:N}=i(),g="banner"===h,x=c(N?.banner?.overlay,{baseClassName:r.overlay,className:o,noStyle:b||f,style:p,...u}),C=b||f||j?void 0:`${r.overlayVisible} ${r.overlayEntering}`,O=m(x.className,C);if(l(!!(g&&k)),!(g&&k))return null;let B={...x,"aria-hidden":!0,className:O,"data-testid":"consent-banner-overlay"};return y&&t(d)?e(s,{ref:v,...B,children:d}):e("div",{ref:v,...B,children:d})});p.displayName="ConsentBannerOverlay";let f=p;export{p as ConsentBannerOverlay,f as Overlay};
1
+ import{jsx as e}from"react/jsx-runtime";import r from"@c15t/ui/styles/components/consent-banner";import{forwardRef as o,isValidElement as t}from"react";import{Slot as s}from"../../shared/libs/slot.js";import{useActiveUI as n}from"../../../hooks.js";import{useLateEntry as l}from"../../../hooks/use-late-entry.js";import{useScrollLock as a}from"../../../hooks/use-scroll-lock.js";import{useTheme as i}from"../../../hooks/use-theme.js";import{useUIConfig as m}from"../../../ui-config-context.js";import{cnExt as p}from"../../../utils/cn.js";import{mergeSlotProps as c}from"../../../utils/merge-slot-props.js";let f=o(({className:o,style:f,noStyle:y,asChild:d,children:u,...v},h)=>{let j=n(),{disableAnimation:b,noStyle:k,scrollLock:N}=i(),{components:g}=m(),x="banner"===j,C=c(g?.banner?.overlay,{baseClassName:r.overlay,className:o,noStyle:k||y,style:f,...v}),O=k||y||b?void 0:`${r.overlayVisible} ${r.overlayEntering}`,B=p(C.className,O);a(!!(x&&N));let S=l(!!(x&&N))&&!b;if(!(x&&N))return null;let $={...C,"aria-hidden":!0,className:B,"data-entry":S?"late":void 0,"data-testid":"consent-banner-overlay"};return d&&t(u)?e(s,{ref:h,...$,children:u}):e("div",{ref:h,...$,children:u})});f.displayName="ConsentBannerOverlay";let y=f;export{f as ConsentBannerOverlay,y as Overlay};
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{Fragment as o,jsx as t,jsxs as e}from"react/jsx-runtime";import r from"@c15t/ui/styles/components/consent-banner";import{forwardRef as n,useMemo as i}from"react";import{useHeadlessConsentUI as a}from"../../../component-hooks/use-headless-consent-ui.js";import{ConsentTrackingContext as s}from"../../../context/consent-tracking-context.js";import{LocalThemeContext as l}from"../../../context/theme-context.js";import{useActiveUI as c,useHasConsentUI as m,useModel as p,usePolicyRule as d,useTranslations as u}from"../../../hooks.js";import{useTextDirection as f}from"../../../hooks/use-text-direction.js";import{useUIConfig as b}from"../../../ui-config-context.js";import{defaultTranslationConfig as v}from"../../../utils/default-translation-config.js";import{mergeSlotProps as g}from"../../../utils/merge-slot-props.js";import{ConsentBannerSurfaceContext as h,mirrorDefaultPosition as j,useConsentBannerSurface as k}from"../surface-context.js";import{Overlay as x}from"./overlay.js";let N=["opt-in","opt-out"],S=n(({asChild:n,children:i,className:a,style:s,className:l,disableAnimation:h,noStyle:S,models:y=N,...C},$)=>{let L=c(),{components:P}=b(),R=m(),B=p()??"opt-in",F=d(),A=k(),E=u(),V=f(E?.language??v.defaultLanguage),q=j(A.position,A.positionSource,A.variant,V),w=R&&"banner"===L&&y.includes(B),z=g(P?.banner?.root,{baseClassName:r.root,className:a||l,noStyle:S,style:s,...C}),D=S?z.className||"":`${z.className||""} ${h?"":`${r.bannerVisible} ${r.bannerEntering}`}`;return w?e(o,{children:[t(x,{}),t("div",{ref:$,...z,className:D,"data-variant":A.variant,"data-position":q,"data-blocking":A.blocking?"true":void 0,"data-prompt":F.prompt,"data-model":F.model,"data-testid":"consent-banner-root",dir:V,children:i})]}):null}),y=({children:o,className:e,noStyle:r,disableAnimation:n,scrollLock:c,trapFocus:m,models:p,uiSource:d,variant:u,position:f,blocking:b,...v})=>{let{banner:g}=a({prompt:{blocking:b,position:f,scrollLock:c,trapFocus:m,variant:u}}),j=g.scrollLock,k=g.trapFocus,x=i(()=>({disableAnimation:n,noStyle:r,scrollLock:j,trapFocus:k}),[n,r,j,k]),N=i(()=>({blocking:g.blocking,position:g.position,positionSource:g.positionSource,variant:g.variant}),[g.blocking,g.position,g.positionSource,g.variant]),y=i(()=>({uiSource:d??"banner"}),[d]);return t(s.Provider,{value:y,children:t(l.Provider,{value:x,children:t(h.Provider,{value:N,children:t(S,{disableAnimation:n,className:e,noStyle:r,models:p,...v,children:o})})})})};S.displayName="ConsentBannerRootChildren";let C=y;export{y as ConsentBannerRoot,C as Root};
2
+ import{Fragment as o,jsx as t,jsxs as e}from"react/jsx-runtime";import r from"@c15t/ui/styles/components/consent-banner";import{forwardRef as n,useMemo as i}from"react";import{useHeadlessConsentUI as a}from"../../../component-hooks/use-headless-consent-ui.js";import{ConsentTrackingContext as s}from"../../../context/consent-tracking-context.js";import{LocalThemeContext as l}from"../../../context/theme-context.js";import{useActiveUI as c,useHasConsentUI as m,useModel as p,usePolicyRule as d,useTranslations as u}from"../../../hooks.js";import{useLateEntry as f}from"../../../hooks/use-late-entry.js";import{useTextDirection as v}from"../../../hooks/use-text-direction.js";import{useUIConfig as b}from"../../../ui-config-context.js";import{defaultTranslationConfig as g}from"../../../utils/default-translation-config.js";import{mergeSlotProps as h}from"../../../utils/merge-slot-props.js";import{ConsentBannerSurfaceContext as j,mirrorDefaultPosition as k,useConsentBannerSurface as x}from"../surface-context.js";import{Overlay as N}from"./overlay.js";let y=["opt-in","opt-out"],S=n(({asChild:n,children:i,className:a,style:s,className:l,disableAnimation:j,noStyle:S,models:C=y,...$},L)=>{let P=c(),{components:R}=b(),B=m(),F=p()??"opt-in",A=d(),E=x(),V=u(),q=v(V?.language??g.defaultLanguage),w=k(E.position,E.positionSource,E.variant,q),z=B&&"banner"===P&&C.includes(F),D=f(z)&&!j,G=h(R?.banner?.root,{baseClassName:r.root,className:a||l,noStyle:S,style:s,...$}),H=S?G.className||"":`${G.className||""} ${j?"":`${r.bannerVisible} ${r.bannerEntering}`}`;return z?e(o,{children:[t(N,{}),t("div",{ref:L,...G,className:H,"data-variant":E.variant,"data-position":w,"data-blocking":E.blocking?"true":void 0,"data-prompt":A.prompt,"data-model":A.model,"data-entry":D?"late":void 0,"data-testid":"consent-banner-root",dir:q,children:i})]}):null}),C=({children:o,className:e,noStyle:r,disableAnimation:n,scrollLock:c,trapFocus:m,models:p,uiSource:d,variant:u,position:f,blocking:v,...b})=>{let{banner:g}=a({prompt:{blocking:v,position:f,scrollLock:c,trapFocus:m,variant:u}}),h=g.scrollLock,k=g.trapFocus,x=i(()=>({disableAnimation:n,noStyle:r,scrollLock:h,trapFocus:k}),[n,r,h,k]),N=i(()=>({blocking:g.blocking,position:g.position,positionSource:g.positionSource,variant:g.variant}),[g.blocking,g.position,g.positionSource,g.variant]),y=i(()=>({uiSource:d??"banner"}),[d]);return t(s.Provider,{value:y,children:t(l.Provider,{value:x,children:t(j.Provider,{value:N,children:t(S,{disableAnimation:n,className:e,noStyle:r,models:p,...b,children:o})})})})};S.displayName="ConsentBannerRootChildren";let $=C;export{C as ConsentBannerRoot,$ as Root};
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ import{isLateEntry as t}from"@c15t/ui/utils/late-entry";import{useState as e}from"react";import{useIsHydrated as r}from"./use-is-hydrated.js";let a=function(a){let l=r(),n=()=>({late:a&&l&&t(),shown:a}),[o,s]=e(n);if(o.shown!==a){let t=n();return s(t),t.late}return o.late};export{a as useLateEntry};
@@ -15,11 +15,11 @@
15
15
  @keyframes iabConsentBannerEnter{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}
16
16
  @keyframes iabConsentBannerExit{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.95)}}
17
17
  :root, :host{--c15t-iab-consent-banner-enter-animation:iabConsentBannerEnter var(--c15t-duration-fast) var(--c15t-easing);--c15t-iab-consent-banner-exit-animation:iabConsentBannerExit var(--c15t-duration-fast) var(--c15t-easing)}
18
- :root, :host{--iab-consent-banner-font-family:var(--c15t-font-family);--iab-consent-banner-line-height:var(--c15t-line-height-normal);--iab-consent-banner-text-size-adjust:100%;--iab-consent-banner-tab-size:4;--iab-consent-banner-border-radius-sm:var(--c15t-radius-sm);--iab-consent-banner-border-radius:var(--c15t-radius-lg);--iab-consent-banner-max-width:560px;--iab-consent-banner-animation-duration:var(--c15t-duration-fast);--iab-consent-banner-animation-timing:var(--c15t-easing);--iab-consent-banner-border-width:1px;--iab-consent-banner-border-width-hairline:1px;--iab-consent-banner-shadow:var(--c15t-shadow-lg);--iab-consent-banner-shadow-dark:var(--c15t-shadow-lg);--iab-consent-banner-background-color:var(--c15t-surface);--iab-consent-banner-background-color-dark:var(--c15t-surface);--iab-consent-banner-footer-background-color:var(--c15t-surface-hover);--iab-consent-banner-footer-background-color-dark:var(--c15t-surface-hover);--iab-consent-banner-text-color:var(--c15t-text);--iab-consent-banner-text-color-dark:var(--c15t-text);--iab-consent-banner-border-color:var(--c15t-border);--iab-consent-banner-border-color-dark:var(--c15t-border);--iab-consent-banner-title-color:var(--c15t-text);--iab-consent-banner-title-color-dark:var(--c15t-text);--iab-consent-banner-description-color:var(--c15t-text-muted);--iab-consent-banner-description-color-dark:var(--c15t-text-muted);--iab-consent-banner-overlay-background-color:var(--c15t-overlay);--iab-consent-banner-overlay-background-color-dark:var(--c15t-overlay);--iab-consent-banner-link-color:var(--c15t-primary);--iab-consent-banner-link-color-dark:var(--c15t-primary)}
18
+ :root, :host{--iab-consent-banner-font-family:var(--c15t-font-family);--iab-consent-banner-line-height:var(--c15t-line-height-normal);--iab-consent-banner-text-size-adjust:100%;--iab-consent-banner-tab-size:4;--iab-consent-banner-border-radius-sm:var(--c15t-radius-sm);--iab-consent-banner-border-radius:var(--c15t-radius-lg);--iab-consent-banner-max-width:560px;--iab-consent-banner-entry-duration:var(--c15t-duration-normal);--iab-consent-banner-entry-timing:var(--c15t-easing-out);--iab-consent-banner-animation-duration:var(--c15t-duration-fast);--iab-consent-banner-animation-timing:var(--c15t-easing-in);--iab-consent-banner-border-width:1px;--iab-consent-banner-border-width-hairline:1px;--iab-consent-banner-shadow:var(--c15t-shadow-lg);--iab-consent-banner-shadow-dark:var(--c15t-shadow-lg);--iab-consent-banner-background-color:var(--c15t-surface);--iab-consent-banner-background-color-dark:var(--c15t-surface);--iab-consent-banner-footer-background-color:var(--c15t-surface-hover);--iab-consent-banner-footer-background-color-dark:var(--c15t-surface-hover);--iab-consent-banner-text-color:var(--c15t-text);--iab-consent-banner-text-color-dark:var(--c15t-text);--iab-consent-banner-border-color:var(--c15t-border);--iab-consent-banner-border-color-dark:var(--c15t-border);--iab-consent-banner-title-color:var(--c15t-text);--iab-consent-banner-title-color-dark:var(--c15t-text);--iab-consent-banner-description-color:var(--c15t-text-muted);--iab-consent-banner-description-color-dark:var(--c15t-text-muted);--iab-consent-banner-overlay-background-color:var(--c15t-overlay);--iab-consent-banner-overlay-background-color-dark:var(--c15t-overlay);--iab-consent-banner-link-color:var(--c15t-primary);--iab-consent-banner-link-color-dark:var(--c15t-primary)}
19
19
  @media only screen and (resolution>=192dpi){:root, :host{--iab-consent-banner-border-width-hairline:.5px}}
20
20
 
21
21
  /* components/iab-panel */
22
22
  .c15t-ui-root-pWvoN{box-sizing:border-box;isolation:isolate;font-family:var(--iab-cd-font-family);line-height:var(--iab-cd-line-height);-webkit-text-size-adjust:100%;tab-size:4;padding:var(--iab-cd-padding);z-index:var(--iab-cd-z-index);background:0 0;border:0;justify-content:center;align-items:center;margin:0;display:flex;position:fixed;inset:0}.c15t-ui-dialogVisible-ZcQux{opacity:1;transition:opacity var(--iab-cd-animation-duration) var(--iab-cd-animation-timing)}.c15t-ui-dialogHidden-QOLab{opacity:0;transition:opacity var(--iab-cd-animation-duration) var(--iab-cd-animation-timing)}.c15t-ui-contentVisible-oIYEE{opacity:1;transition:opacity var(--iab-cd-animation-duration) var(--iab-cd-animation-timing), transform var(--iab-cd-animation-duration) var(--c15t-easing-spring);transform:scale(1)}.c15t-ui-contentHidden-dppgu{opacity:0;transition:opacity var(--iab-cd-animation-duration) var(--iab-cd-animation-timing), transform var(--iab-cd-animation-duration) var(--iab-cd-animation-timing);transform:scale(.95)}.c15t-ui-overlay-LyBwJ{background-color:var(--iab-cd-overlay-background);z-index:var(--iab-cd-overlay-z-index);position:fixed;inset:0}.c15t-ui-overlayVisible-HyYf_{opacity:1;transition:opacity var(--iab-cd-animation-duration) var(--iab-cd-animation-timing)}.c15t-ui-overlayHidden-G8kpl{opacity:0;transition:opacity var(--iab-cd-animation-duration) var(--iab-cd-animation-timing)}@starting-style{.c15t-ui-overlayEntering-hcqOQ{opacity:0}}.c15t-dark .c15t-ui-overlay-LyBwJ{background-color:var(--iab-cd-overlay-background-dark)}.c15t-ui-card-DTFr5{width:min(100%, var(--iab-cd-max-width));max-height:var(--iab-cd-max-height);border-radius:var(--iab-cd-border-radius);border:1px solid var(--iab-cd-border-color);background-color:var(--iab-cd-background-color);min-height:0;box-shadow:var(--iab-cd-shadow);flex-direction:column;display:flex;position:relative;overflow:visible}.c15t-dark .c15t-ui-card-DTFr5{background-color:var(--iab-cd-background-color-dark);border-color:var(--iab-cd-border-color-dark)}.c15t-ui-header-wVNlq{border-bottom:1px solid var(--iab-cd-border-color);flex-shrink:0;justify-content:space-between;align-items:center;padding:.75rem 1rem;display:flex}.c15t-dark .c15t-ui-header-wVNlq{border-color:var(--iab-cd-border-color-dark)}@media (width>=768px){.c15t-ui-header-wVNlq{padding:1rem}}.c15t-ui-headerContent-djclo{flex:1}.c15t-ui-title-PNS3O{font-size:var(--iab-cd-title-font-size);font-weight:var(--iab-cd-title-font-weight);color:var(--iab-cd-text-color);margin:0;line-height:1.25}.c15t-dark .c15t-ui-title-PNS3O{color:var(--iab-cd-text-color-dark)}.c15t-ui-description-kGL5G{font-size:var(--iab-cd-description-font-size);color:var(--iab-cd-text-muted-color);line-height:var(--iab-cd-description-line-height);margin:.25rem 0 0}.c15t-dark .c15t-ui-description-kGL5G{color:var(--iab-cd-text-muted-color-dark)}.c15t-ui-closeButton-LDT86{border-radius:var(--c15t-radius-md);cursor:pointer;color:var(--iab-cd-text-muted-color);background:0 0;border:none;justify-content:center;align-items:center;padding:.375rem;transition:background-color .15s;display:flex}.c15t-ui-closeButton-LDT86:hover{background-color:var(--iab-cd-surface-hover)}.c15t-dark .c15t-ui-closeButton-LDT86{color:var(--iab-cd-text-muted-color-dark)}.c15t-dark .c15t-ui-closeButton-LDT86:hover{background-color:var(--iab-cd-surface-hover-dark)}.c15t-ui-body-IFzVC{flex-direction:column;flex:auto;min-height:0;display:flex;overflow:hidden}.c15t-ui-tabsContainer-CGMHA{flex-shrink:0;padding:.75rem .75rem 0}@media (width>=768px){.c15t-ui-tabsContainer-CGMHA{padding:1rem 1rem 0}}.c15t-ui-tabsList-w5OMX{isolation:isolate;border-radius:var(--c15t-radius-lg,.625rem);background-color:var(--iab-cd-surface-hover);grid-auto-columns:1fr;grid-auto-flow:column;gap:.25rem;padding:.25rem;display:grid;position:relative}.c15t-dark .c15t-ui-tabsList-w5OMX{background-color:var(--iab-cd-surface-hover-dark)}.c15t-ui-tabButton-TaxQK{z-index:10;white-space:nowrap;border-radius:var(--c15t-radius-md,.375rem);height:2rem;color:var(--iab-cd-text-muted-color);cursor:pointer;background:0 0;border:none;outline:none;justify-content:center;align-items:center;gap:.375rem;padding:0 .75rem;font-size:.8125rem;font-weight:500;transition:color .15s cubic-bezier(.33,1,.68,1),background-color .15s cubic-bezier(.33,1,.68,1);display:flex;position:relative}.c15t-ui-tabButton-TaxQK:hover{color:var(--iab-cd-text-color)}.c15t-ui-tabButton-TaxQK:focus-visible{outline:2px solid var(--iab-cd-primary-color);outline-offset:2px}.c15t-ui-tabButton-TaxQK[data-state=active]{color:var(--iab-cd-text-color)}.c15t-dark .c15t-ui-tabButton-TaxQK{color:var(--iab-cd-text-muted-color-dark)}.c15t-dark .c15t-ui-tabButton-TaxQK:hover,.c15t-dark .c15t-ui-tabButton-TaxQK[data-state=active]{color:var(--iab-cd-text-color-dark)}.c15t-ui-tabIndicator-ipeu4{z-index:0;border-radius:var(--c15t-radius-md,.375rem);background-color:var(--iab-cd-background-color);transition:transform var(--c15t-duration-slow) cubic-bezier(.33, 1, .68, 1), width var(--c15t-duration-slow) cubic-bezier(.33, 1, .68, 1);position:absolute;inset-block:.25rem;box-shadow:0 1px 2px #0000000f,0 1px 3px #0000001a}.c15t-dark .c15t-ui-tabIndicator-ipeu4{background-color:var(--iab-cd-background-color-dark);box-shadow:0 1px 2px #0003,0 1px 3px #0000004d}.c15t-ui-tabIndicator-ipeu4[data-active-tab=purposes]{width:calc(50% - .125rem);left:.25rem;transform:translate(0)}.c15t-ui-tabIndicator-ipeu4[data-active-tab=vendors]{width:calc(50% - .125rem);left:.125rem;transform:translate(100%)}.c15t-ui-content-tpKyG{flex:auto;min-height:0;padding:.75rem;overflow:hidden auto}@media (width>=768px){.c15t-ui-content-tpKyG{padding:1rem}}.c15t-ui-purposeItem-ycHg8{border-radius:var(--c15t-radius-md);border:1px solid var(--iab-cd-border-color);background-color:var(--iab-cd-background-color);margin-bottom:.5rem}.c15t-dark .c15t-ui-purposeItem-ycHg8{border-color:var(--iab-cd-border-color-dark);background-color:var(--iab-cd-background-color-dark)}.c15t-ui-purposeHeader-dtjf3{justify-content:space-between;align-items:flex-start;gap:.75rem;padding:.75rem;display:flex}.c15t-ui-purposeTrigger-RYEFG{text-align:left;cursor:pointer;background:0 0;border:none;flex:1;align-items:center;gap:.5rem;min-width:0;padding:0;display:flex}.c15t-ui-purposeArrow-O8n8H{width:1rem;height:1rem;color:var(--iab-cd-text-muted-color);flex-shrink:0}.c15t-dark .c15t-ui-purposeArrow-O8n8H{color:var(--iab-cd-text-muted-color-dark)}.c15t-ui-purposeInfo-wahTP{flex:1;min-width:0}.c15t-ui-purposeName-QJMF_{color:var(--iab-cd-text-color);align-items:center;gap:.5rem;margin:0;font-size:.875rem;font-weight:500;display:flex}.c15t-dark .c15t-ui-purposeName-QJMF_{color:var(--iab-cd-text-color-dark)}.c15t-ui-lockIcon-i8SD3{width:.75rem;height:.75rem;color:var(--iab-cd-text-muted-color)}.c15t-dark .c15t-ui-lockIcon-i8SD3{color:var(--iab-cd-text-muted-color-dark)}.c15t-ui-purposeMeta-OC9IY{color:var(--iab-cd-text-muted-color);margin:.125rem 0 0;font-size:.75rem}.c15t-dark .c15t-ui-purposeMeta-OC9IY{color:var(--iab-cd-text-muted-color-dark)}.c15t-ui-legitimateInterestBadge-t0cqx{color:var(--iab-cd-text-muted-color);align-items:center;gap:.25rem;margin-top:.25rem;font-size:.625rem;font-weight:500;display:inline-flex}.c15t-ui-legitimateInterestIcon-Pvt34{width:.75rem;height:.75rem}.c15t-ui-srOnly-n1PBG{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.c15t-ui-purposeContent-teoEc{border-top:1px solid var(--iab-cd-border-color);margin-top:.75rem;padding:.75rem}.c15t-dark .c15t-ui-purposeContent-teoEc{border-color:var(--iab-cd-border-color-dark)}.c15t-ui-purposeDescription-eLaj6{color:var(--iab-cd-text-muted-color);margin:0;font-size:.75rem;line-height:1.5}.c15t-dark .c15t-ui-purposeDescription-eLaj6{color:var(--iab-cd-text-muted-color-dark)}.c15t-ui-examplesToggle-UKJ4l{color:var(--iab-cd-text-color);cursor:pointer;background:0 0;border:none;align-items:center;gap:.25rem;margin-top:.75rem;padding:0;font-size:.75rem;font-weight:500;display:flex}.c15t-ui-examplesToggle-UKJ4l:hover{color:var(--iab-cd-primary-color)}.c15t-dark .c15t-ui-examplesToggle-UKJ4l{color:var(--iab-cd-text-color-dark)}.c15t-dark .c15t-ui-examplesToggle-UKJ4l:hover{color:var(--iab-cd-primary-color-dark)}.c15t-ui-examplesList-Jgu0V{margin:.375rem 0 0;padding-left:1rem;list-style-type:disc}.c15t-ui-examplesList-Jgu0V li{color:var(--iab-cd-text-muted-color);font-size:.75rem;line-height:1.5}.c15t-dark .c15t-ui-examplesList-Jgu0V li{color:var(--iab-cd-text-muted-color-dark)}.c15t-ui-vendorsToggle-iiROe{color:var(--iab-cd-text-color);cursor:pointer;background:0 0;border:none;align-items:center;gap:.25rem;margin-top:.75rem;padding:0;font-size:.75rem;font-weight:500;display:flex}.c15t-ui-vendorsToggle-iiROe:hover{color:var(--iab-cd-primary-color)}.c15t-dark .c15t-ui-vendorsToggle-iiROe{color:var(--iab-cd-text-color-dark)}.c15t-ui-vendorSection-Xotxt{z-index:1;margin-top:.375rem;position:relative}.c15t-ui-vendorSectionTitle-fDzFC{color:var(--iab-cd-text-muted-color);text-transform:uppercase;letter-spacing:.05em;margin:.5rem 0 .375rem;font-size:.625rem;font-weight:500}.c15t-dark .c15t-ui-vendorSectionTitle-fDzFC{color:var(--iab-cd-text-muted-color-dark)}.c15t-ui-vendorSectionTitleLi-_EU2B{color:var(--iab-cd-text-muted-color);align-items:center;gap:.25rem;display:flex}.c15t-ui-vendorRow-MdJwv{border-radius:var(--c15t-radius-sm);background-color:var(--iab-cd-surface-hover);justify-content:space-between;align-items:center;gap:.5rem;margin-bottom:.375rem;padding:.5rem;display:flex}.c15t-dark .c15t-ui-vendorRow-MdJwv{background-color:var(--iab-cd-surface-hover-dark)}.c15t-ui-vendorRowLi-TR3to{background-color:var(--iab-cd-surface-hover);border:1px solid var(--iab-cd-border-color)}.c15t-ui-vendorInfo-cLXjo{flex:1;min-width:0}.c15t-ui-vendorName-U5tbA{color:var(--iab-cd-text-color);cursor:pointer;text-align:left;background:0 0;border:none;align-items:center;gap:.375rem;padding:0;font-size:.75rem;font-weight:500;display:flex}.c15t-ui-vendorName-U5tbA:hover{color:var(--iab-cd-primary-color)}.c15t-dark .c15t-ui-vendorName-U5tbA{color:var(--iab-cd-text-color-dark)}.c15t-ui-customVendorIcon-xE8uf{width:.75rem;height:.75rem;color:var(--iab-cd-primary-color)}.c15t-dark .c15t-ui-customVendorIcon-xE8uf{color:var(--iab-cd-primary-color-dark)}.c15t-ui-vendorDetails-nJLMH{flex-wrap:wrap;gap:.5rem;margin-top:.125rem;display:flex}.c15t-ui-vendorDetail-qWyPR{color:var(--iab-cd-text-muted-color);font-size:.625rem}.c15t-dark .c15t-ui-vendorDetail-qWyPR{color:var(--iab-cd-text-muted-color-dark)}.c15t-ui-vendorDetailLi-HiywZ{color:var(--iab-cd-text-muted-color);font-weight:500}.c15t-ui-stackItem-Z6dCC{border-radius:var(--c15t-radius-md);border:1px solid var(--iab-cd-border-color);background-color:var(--iab-cd-background-color);margin-bottom:.5rem}.c15t-dark .c15t-ui-stackItem-Z6dCC{border-color:var(--iab-cd-border-color-dark);background-color:var(--iab-cd-background-color-dark)}.c15t-ui-stackHeader-TkNdL{justify-content:space-between;align-items:flex-start;gap:.75rem;padding:.75rem;display:flex}.c15t-ui-stackTrigger-Kqeyy{text-align:left;cursor:pointer;background:0 0;border:none;flex:1;align-items:center;gap:.5rem;min-width:0;padding:0;display:flex}.c15t-ui-stackInfo-JH0ue{flex:1;min-width:0}.c15t-ui-stackName-yNHhd{color:var(--iab-cd-text-color);margin:0;font-size:.875rem;font-weight:500;line-height:1.25}.c15t-dark .c15t-ui-stackName-yNHhd{color:var(--iab-cd-text-color-dark)}.c15t-ui-stackMeta-Il_rX{color:var(--iab-cd-text-muted-color);margin:.25rem 0 0;font-size:.75rem}.c15t-dark .c15t-ui-stackMeta-Il_rX{color:var(--iab-cd-text-muted-color-dark)}.c15t-ui-stackControls-kBZON{flex-shrink:0;align-items:center;gap:.5rem;display:flex}.c15t-ui-partialIndicator-U9dt6{background-color:var(--iab-cd-primary-color);border-radius:50%;width:.375rem;height:.375rem}.c15t-ui-stackDescription-occgV{color:var(--iab-cd-text-muted-color);margin:0 0 0 1.5rem;padding-bottom:.75rem;font-size:.75rem}.c15t-ui-stackDescription-occgV p{margin:0}.c15t-ui-stackDescription-occgV p+p{margin-top:.25rem}.c15t-dark .c15t-ui-stackDescription-occgV{color:var(--iab-cd-text-muted-color-dark)}.c15t-ui-stackContent-wu6FF{border-top:1px solid var(--iab-cd-border-color);background-color:var(--iab-cd-surface-hover);padding:.5rem}.c15t-dark .c15t-ui-stackContent-wu6FF{border-color:var(--iab-cd-border-color-dark);background-color:var(--iab-cd-surface-hover-dark)}.c15t-ui-specialPurposesSection-y9Pqu{border-radius:var(--c15t-radius-md);border:1px solid var(--iab-cd-border-color);background-color:var(--iab-cd-background-color);margin-bottom:.5rem}.c15t-dark .c15t-ui-specialPurposesSection-y9Pqu{border-color:var(--iab-cd-border-color-dark);background-color:var(--iab-cd-background-color-dark)}.c15t-ui-specialPurposesHeader-Rq1Tg{justify-content:space-between;align-items:flex-start;gap:.75rem;padding:.75rem;display:flex}.c15t-ui-specialPurposesTitle-tcftu{color:var(--iab-cd-text-color);align-items:center;gap:.5rem;margin:0;font-size:.875rem;font-weight:500;display:flex}.c15t-dark .c15t-ui-specialPurposesTitle-tcftu{color:var(--iab-cd-text-color-dark)}.c15t-ui-featuresSection-TmXU3{border-radius:var(--c15t-radius-md);border:1px solid var(--iab-cd-border-color);background-color:var(--iab-cd-background-color);margin-bottom:var(--c15t-space-sm)}.c15t-dark .c15t-ui-featuresSection-TmXU3{border-color:var(--iab-cd-border-color-dark);background-color:var(--iab-cd-background-color-dark)}.c15t-ui-featuresHeader-VSBo2{padding:calc(var(--c15t-space-md) * .75)}.c15t-ui-featuresTitle-BpbiP{font-size:var(--c15t-font-size-sm);font-weight:var(--c15t-font-weight-medium);color:var(--iab-cd-text-color);margin:0}.c15t-dark .c15t-ui-featuresTitle-BpbiP{color:var(--iab-cd-text-color-dark)}.c15t-ui-featuresDescription-QfBHO{font-size:calc(var(--c15t-font-size-base) * .75);line-height:var(--c15t-line-height-normal);color:var(--iab-cd-text-muted-color);margin:var(--c15t-space-xs) 0 0}.c15t-dark .c15t-ui-featuresDescription-QfBHO{color:var(--iab-cd-text-muted-color-dark)}.c15t-ui-featuresList-Y5lNt{padding:0 calc(var(--c15t-space-md) * .75) calc(var(--c15t-space-md) * .75)}.c15t-ui-infoIcon-Egw87{width:.875rem;height:.875rem;color:var(--iab-cd-text-muted-color);cursor:help}.c15t-dark .c15t-ui-infoIcon-Egw87{color:var(--iab-cd-text-muted-color-dark)}.c15t-ui-tooltip-XjaZq{background-color:var(--iab-cd-background-color);border:1px solid var(--iab-cd-border-color);border-radius:var(--c15t-radius-md);width:16rem;box-shadow:var(--c15t-shadow-lg);color:var(--iab-cd-text-color);z-index:10;opacity:0;visibility:hidden;padding:.5rem;font-size:.75rem;transition:opacity .15s,visibility .15s;position:absolute;top:1.5rem;right:0}.c15t-ui-tooltipVisible-saaoQ{opacity:1;visibility:visible}.c15t-dark .c15t-ui-tooltip-XjaZq{background-color:var(--iab-cd-background-color-dark);border-color:var(--iab-cd-border-color-dark);color:var(--iab-cd-text-color-dark)}.c15t-ui-vendorListHeader-Hfxxu{background-color:var(--iab-cd-background-color);z-index:10;margin-top:0;padding-top:0;padding-bottom:.375rem;position:sticky;top:0}@media (width>=768px){.c15t-ui-vendorListHeader-Hfxxu{margin-top:0;padding-top:0;top:0}}.c15t-dark .c15t-ui-vendorListHeader-Hfxxu{background-color:var(--iab-cd-background-color-dark)}.c15t-ui-searchContainer-uyKJB{position:relative}.c15t-ui-searchIcon-NhyW4{width:.875rem;height:.875rem;color:var(--iab-cd-text-muted-color);position:absolute;top:50%;left:.625rem;transform:translateY(-50%)}.c15t-dark .c15t-ui-searchIcon-NhyW4{color:var(--iab-cd-text-muted-color-dark)}.c15t-ui-searchInput-cLLuO{border-radius:var(--c15t-radius-md);border:1px solid var(--iab-cd-border-color);background-color:var(--iab-cd-background-color);width:100%;color:var(--iab-cd-text-color);padding:.5rem .75rem .5rem 2rem;font-size:.875rem}.c15t-ui-searchInput-cLLuO:focus{border-color:var(--iab-cd-primary-color);box-shadow:0 0 0 2px color-mix(in srgb, var(--iab-cd-primary-color) 20%, transparent);outline:none}.c15t-dark .c15t-ui-searchInput-cLLuO{background-color:var(--iab-cd-background-color-dark);border-color:var(--iab-cd-border-color-dark);color:var(--iab-cd-text-color-dark)}.c15t-ui-vendorCount-s4d6i{color:var(--iab-cd-text-muted-color);margin-top:.25rem;font-size:.75rem}.c15t-dark .c15t-ui-vendorCount-s4d6i{color:var(--iab-cd-text-muted-color-dark)}.c15t-ui-selectedVendorBanner-S6KCv{background-color:color-mix(in srgb, var(--iab-cd-primary-color) 14%, var(--c15t-surface));border:1px solid color-mix(in srgb, var(--iab-cd-primary-color) 30%, transparent);border-radius:var(--c15t-radius-md);z-index:100;isolation:isolate;box-shadow:var(--c15t-shadow-sm);align-items:center;gap:.5rem;margin-bottom:.5rem;padding:.5rem .625rem;display:flex;position:sticky;top:0}.c15t-ui-selectedVendorText-jjIQi{color:var(--iab-cd-primary-color);flex:1;font-size:.75rem}.c15t-ui-clearSelectionButton-yz3Zx{color:var(--iab-cd-primary-color);cursor:pointer;background:0 0;border:none;align-items:center;gap:.25rem;padding:0;font-size:.75rem;display:flex}.c15t-ui-clearSelectionButton-yz3Zx:hover{opacity:.8}.c15t-ui-clearIcon-sTZC2{width:.75rem;height:.75rem}.c15t-ui-vendorListItem-NwBiX{z-index:1;border:1px solid var(--iab-cd-border-color);border-radius:var(--c15t-radius-md);margin-bottom:.375rem;scroll-margin-top:6rem;position:relative;overflow:hidden}.c15t-dark .c15t-ui-vendorListItem-NwBiX{border-color:var(--iab-cd-border-color-dark)}.c15t-ui-vendorListItemHeader-fBe_O{align-items:center;gap:.5rem;padding:.625rem;display:flex}.c15t-ui-vendorConsentControl-VC70A{border-radius:var(--c15t-radius-sm);flex-shrink:0;justify-content:center;align-items:center;min-width:2.25rem;min-height:2.25rem;padding:.375rem;display:inline-flex}.c15t-ui-vendorConsentControl-VC70A:hover{background-color:var(--iab-cd-surface-hover)}.c15t-dark .c15t-ui-vendorConsentControl-VC70A:hover{background-color:var(--iab-cd-surface-hover-dark)}.c15t-ui-vendorConsentSwitch-wEFf8{flex-shrink:0;display:block}.c15t-ui-vendorListTrigger-TG_0F{text-align:left;cursor:pointer;background:0 0;border:none;flex:1;justify-content:space-between;align-items:center;min-width:0;padding:0;display:flex}.c15t-ui-vendorListTrigger-TG_0F:hover{color:var(--iab-cd-primary-color)}.c15t-ui-vendorListInfo-BSgBB{flex:1;min-width:0}.c15t-ui-vendorListName-II_BV{color:var(--iab-cd-text-color);align-items:center;gap:.5rem;margin:0;font-size:.875rem;font-weight:500;display:flex}.c15t-dark .c15t-ui-vendorListName-II_BV{color:var(--iab-cd-text-color-dark)}.c15t-ui-vendorListMeta-wa6UC{flex-wrap:wrap;align-items:center;gap:.375rem;margin-top:.125rem;display:flex}.c15t-ui-vendorListMetaText-MS_cF{color:var(--iab-cd-text-muted-color);font-size:.75rem}.c15t-dark .c15t-ui-vendorListMetaText-MS_cF{color:var(--iab-cd-text-muted-color-dark)}.c15t-ui-vendorListLiBadge-_Uq0L{color:var(--iab-cd-text-muted-color);align-items:center;gap:.125rem;font-size:.625rem;font-weight:500;display:inline-flex}.c15t-ui-vendorListContent-CtRTw{border-top:1px solid var(--iab-cd-border-color);background-color:var(--iab-cd-surface-hover);padding:0 .625rem .625rem}.c15t-dark .c15t-ui-vendorListContent-CtRTw{border-color:var(--iab-cd-border-color-dark);background-color:var(--iab-cd-surface-hover-dark)}.c15t-ui-vendorLinks-pxq9Z{padding-top:.5rem}.c15t-ui-tabPanel-PJKhk{min-width:0;overflow-x:hidden}.c15t-ui-vendorLink-htHQn{color:var(--iab-cd-primary-color);align-items:center;gap:.25rem;margin-right:.75rem;font-size:.75rem;text-decoration:none;display:inline-flex}.c15t-ui-vendorLink-htHQn:hover{text-decoration:underline}.c15t-ui-vendorLinkIcon-UjIy5{width:.75rem;height:.75rem}.c15t-ui-vendorBadges-SED5E{flex-wrap:wrap;gap:.5rem;margin-top:.375rem;display:flex}.c15t-ui-vendorBadge-Pu0Hs{border-radius:var(--c15t-radius-sm);background-color:var(--iab-cd-surface-hover);color:var(--iab-cd-text-muted-color);padding:.125rem .375rem;font-size:.625rem}.c15t-dark .c15t-ui-vendorBadge-Pu0Hs{background-color:var(--iab-cd-surface-hover-dark);color:var(--iab-cd-text-muted-color-dark)}.c15t-ui-vendorPurposesList-CtEFC{margin-top:.5rem}.c15t-ui-vendorPurposesTitle-2hGY4{color:var(--iab-cd-text-color);align-items:center;gap:.5rem;margin:0 0 .25rem;font-size:.75rem;font-weight:500;display:flex}.c15t-dark .c15t-ui-vendorPurposesTitle-2hGY4{color:var(--iab-cd-text-color-dark)}.c15t-ui-vendorPurposesItems-VKo31{margin:0;padding:0;list-style:none}.c15t-ui-vendorPurposeItem-TmnWw{color:var(--iab-cd-text-muted-color);border-left:2px solid var(--iab-cd-border-color);justify-content:space-between;align-items:center;gap:.5rem;margin-bottom:.125rem;padding-left:.5rem;font-size:.75rem;display:flex}.c15t-dark .c15t-ui-vendorPurposeItem-TmnWw{color:var(--iab-cd-text-muted-color-dark);border-color:var(--iab-cd-border-color-dark)}.c15t-ui-vendorPurposeItemLi-rO_6B{border-color:var(--iab-cd-text-muted-color);color:var(--iab-cd-text-muted-color)}.c15t-ui-vendorRetention-TTJ2U{opacity:.7;font-size:.625rem}.c15t-ui-footer-YF32K{border-top:1px solid var(--iab-cd-border-color);background-color:var(--iab-cd-surface-hover);flex-shrink:0;justify-content:space-between;align-items:center;padding:.75rem 1rem;display:flex}.c15t-dark .c15t-ui-footer-YF32K{border-color:var(--iab-cd-border-color-dark);background-color:var(--iab-cd-surface-hover-dark)}.c15t-ui-consentNotice-PEEG3{text-align:center;padding-top:1.5rem}.c15t-dark .c15t-ui-consentNotice-PEEG3{border-color:var(--iab-cd-border-color-dark)}.c15t-ui-consentNoticeText-MhMCM{color:var(--iab-cd-text-muted-color);margin-block:0;font-size:.625rem}.c15t-dark .c15t-ui-consentNoticeText-MhMCM{color:var(--iab-cd-text-muted-color-dark)}.c15t-ui-loadingContainer-iW124{flex-direction:column;justify-content:center;align-items:center;gap:.75rem;height:100%;display:flex}.c15t-ui-loadingSpinner-W8iiY{border:2px solid var(--iab-cd-border-color);border-top-color:var(--iab-cd-primary-color);width:1.75rem;height:1.75rem;animation:var(--c15t-spin-animation);border-radius:50%}.c15t-ui-loadingText-o2XqJ{color:var(--iab-cd-text-muted-color);font-size:.875rem}.c15t-dark .c15t-ui-loadingText-o2XqJ{color:var(--iab-cd-text-muted-color-dark)}.c15t-ui-emptyState-nmTzy{text-align:center;padding:var(--c15t-space-xl)}.c15t-ui-emptyStateText-HuJtF{color:var(--iab-cd-text-muted-color);margin:0;font-size:.875rem}.c15t-dark .c15t-ui-emptyStateText-HuJtF{color:var(--iab-cd-text-muted-color-dark)}.c15t-ui-vendorSection-Xotxt{z-index:1;margin-top:.25rem;margin-bottom:1rem;position:relative}.c15t-ui-vendorSectionHeading-s4i73{text-transform:uppercase;letter-spacing:.05em;color:var(--iab-cd-text-muted-color);background:var(--iab-cd-surface-hover-color);border-bottom:1px solid var(--iab-cd-border-color);align-items:center;gap:.5rem;margin:0;padding:.375rem 0 .25rem;font-size:.75rem;font-weight:600;display:flex}.c15t-dark .c15t-ui-vendorSectionHeading-s4i73{color:var(--iab-cd-text-muted-color-dark);background:var(--iab-cd-surface-hover-color-dark);border-color:var(--iab-cd-border-color-dark)}.c15t-ui-vendorSectionIcon-Cc99v{flex-shrink:0;width:1rem;height:1rem}.c15t-ui-iabVendorSectionHeader-YsNA5{background-color:var(--iab-cd-background-color);border-bottom:1px solid var(--iab-cd-border-color);z-index:10;padding:.25rem 0;position:relative}.c15t-dark .c15t-ui-iabVendorSectionHeader-YsNA5{border-color:var(--iab-cd-border-color-dark);background-color:var(--iab-cd-background-color-dark)}.c15t-ui-iabVendorSectionHeader-YsNA5 .c15t-ui-vendorSectionHeading-s4i73{border-bottom:none;padding-bottom:.25rem}.c15t-ui-iabVendorNotice-WnMMx{color:var(--iab-cd-text-muted-color);margin:0;font-size:.6875rem}.c15t-dark .c15t-ui-iabVendorNotice-WnMMx{color:var(--iab-cd-text-muted-color-dark)}.c15t-ui-customVendorSectionHeader-Sy8yM{background-color:var(--iab-cd-background-color);border-bottom:1px solid var(--iab-cd-border-color);z-index:10;padding:.5rem 0;position:relative}.c15t-dark .c15t-ui-customVendorSectionHeader-Sy8yM{border-color:var(--iab-cd-border-color-dark);background-color:var(--iab-cd-background-color-dark)}.c15t-ui-customVendorSectionHeader-Sy8yM .c15t-ui-vendorSectionHeading-s4i73{background:0 0;border-bottom:none;padding-bottom:.25rem}.c15t-ui-customVendorNotice-NgBsE{color:var(--iab-cd-text-muted-color);margin:0;padding:.25rem 0 1rem;font-size:.6875rem}.c15t-dark .c15t-ui-customVendorNotice-NgBsE{color:var(--iab-cd-text-muted-color-dark)}.c15t-ui-customVendorItem-QF5C7{border-left:3px solid var(--iab-cd-primary-color)}.c15t-dark .c15t-ui-customVendorItem-QF5C7{border-left-color:var(--iab-cd-primary-color-dark)}.c15t-ui-customVendorPurposeSection-zFEUM{border-top:1px solid var(--iab-cd-border-color);margin-top:.75rem;padding-top:.75rem}.c15t-dark .c15t-ui-customVendorPurposeSection-zFEUM{border-color:var(--iab-cd-border-color-dark)}.c15t-ui-vendorSectionTitleCustom-JjHzO{text-transform:uppercase;letter-spacing:.05em;color:var(--iab-cd-primary-color);align-items:center;gap:.375rem;margin:0 0 .5rem;font-size:.625rem;font-weight:600;display:flex}.c15t-dark .c15t-ui-vendorSectionTitleCustom-JjHzO{color:var(--iab-cd-primary-color-dark)}.c15t-ui-objectButton-S0x1H{border-radius:var(--c15t-radius-sm);border:1px solid var(--iab-cd-border-color);color:var(--iab-cd-text-muted-color);cursor:pointer;white-space:nowrap;background-color:#0000;padding:.25rem .5rem;font-size:.6875rem;font-weight:500;transition:background-color .15s,border-color .15s,color .15s}.c15t-ui-objectButton-S0x1H:hover{border-color:var(--iab-cd-text-muted-color);color:var(--iab-cd-text-color)}.c15t-ui-objectButton-S0x1H[data-active],.c15t-ui-objectButtonActive-AlNLv{background-color:var(--iab-cd-text-muted-color);border-color:var(--iab-cd-text-muted-color);color:var(--iab-cd-background-color)}.c15t-ui-objectButton-S0x1H[data-active]:hover,.c15t-ui-objectButtonActive-AlNLv:hover{opacity:.9}.c15t-dark .c15t-ui-objectButton-S0x1H{border-color:var(--iab-cd-border-color-dark);color:var(--iab-cd-text-muted-color-dark)}.c15t-dark .c15t-ui-objectButton-S0x1H:hover{border-color:var(--iab-cd-text-muted-color-dark);color:var(--iab-cd-text-color-dark)}.c15t-dark .c15t-ui-objectButton-S0x1H[data-active],.c15t-dark .c15t-ui-objectButtonActive-AlNLv{background-color:var(--iab-cd-text-muted-color-dark);border-color:var(--iab-cd-text-muted-color-dark);color:var(--iab-cd-background-color-dark)}.c15t-ui-liExplanation-_r6Zx{color:var(--iab-cd-text-muted-color);background-color:var(--iab-cd-surface-hover);font-size:.6875rem;font-style:italic}.c15t-dark .c15t-ui-liExplanation-_r6Zx{color:var(--iab-cd-text-muted-color-dark);background-color:var(--iab-cd-surface-hover-dark);border-color:var(--iab-cd-text-muted-color-dark)}.c15t-ui-vendorLiSection-sqzvi{border-top:1px solid var(--iab-cd-border-color);margin-top:.75rem;padding-top:.75rem}.c15t-dark .c15t-ui-vendorLiSection-sqzvi{border-color:var(--iab-cd-border-color-dark)}.c15t-ui-vendorLiSectionHeader-fsKUh{justify-content:space-between;align-items:center;gap:.5rem;margin-bottom:.375rem;display:flex}.c15t-ui-vendorLiSectionHeader-fsKUh .c15t-ui-vendorPurposesTitle-2hGY4{align-items:center;margin:0;display:flex}.c15t-ui-purposeLiSection-YbwuC{background-color:var(--iab-cd-surface-hover);border-radius:var(--c15t-radius-sm);border:1px solid var(--iab-cd-border-color);margin:.75rem 0;padding:.75rem}.c15t-dark .c15t-ui-purposeLiSection-YbwuC{background-color:var(--iab-cd-surface-hover-dark);border-color:var(--iab-cd-border-color-dark)}.c15t-ui-purposeLiSectionHeader-cSbP3{justify-content:space-between;align-items:center;gap:.75rem;margin-bottom:.5rem;display:flex}.c15t-ui-purposeLiInfo-Rpryr{color:var(--iab-cd-text-color);align-items:center;gap:.375rem;font-size:.75rem;font-weight:500;display:flex}.c15t-dark .c15t-ui-purposeLiInfo-Rpryr{color:var(--iab-cd-text-color-dark)}.c15t-ui-purposeLiInfo-Rpryr .c15t-ui-legitimateInterestIcon-Pvt34{flex-shrink:0}@media (prefers-reduced-motion:reduce){.c15t-ui-dialogVisible-ZcQux,.c15t-ui-dialogHidden-QOLab,.c15t-ui-contentVisible-oIYEE,.c15t-ui-contentHidden-dppgu,.c15t-ui-overlayVisible-HyYf_,.c15t-ui-overlayHidden-G8kpl,.c15t-ui-closeButton-LDT86,.c15t-ui-tabButton-TaxQK,.c15t-ui-tooltip-XjaZq,.c15t-ui-objectButton-S0x1H,.c15t-ui-tabIndicator-ipeu4{transition:none}.c15t-ui-loadingSpinner-W8iiY{animation:none}}@media (hover:none){.c15t-ui-closeButton-LDT86:hover{background-color:#0000}.c15t-ui-tabButton-TaxQK:hover{color:var(--iab-cd-text-muted-color)}.c15t-ui-objectButton-S0x1H:hover{border-color:var(--iab-cd-border-color);color:var(--iab-cd-text-muted-color)}}
23
23
 
24
24
  /* components/iab-prompt */
25
- .c15t-ui-root-wCtZ2{box-sizing:border-box;z-index:999998;font-family:var(--iab-consent-banner-font-family);line-height:var(--iab-consent-banner-line-height);-webkit-text-size-adjust:var(--iab-consent-banner-text-size-adjust);-webkit-font-smoothing:antialiased;tab-size:var(--iab-consent-banner-tab-size);justify-content:center;align-items:center;padding:1rem;display:flex;position:fixed;inset:0}.c15t-ui-bannerVisible-uqQdb{opacity:1;transition:opacity var(--iab-consent-banner-animation-duration) var(--iab-consent-banner-animation-timing), transform var(--iab-consent-banner-animation-duration) var(--c15t-easing-spring);transform:scale(1)}.c15t-ui-bannerHidden-KVkXf{opacity:0;transition:opacity var(--iab-consent-banner-animation-duration) var(--iab-consent-banner-animation-timing), transform var(--iab-consent-banner-animation-duration) var(--iab-consent-banner-animation-timing);transform:scale(.95)}@starting-style{.c15t-ui-bannerEntering-Rn_SM{opacity:0;transform:scale(.95)}}@media (width>=640px){.c15t-ui-root-wCtZ2{padding:1.5rem}}.c15t-ui-cardShell-pmM71{width:min(100%, var(--iab-consent-banner-max-width));flex-direction:column;display:flex}.c15t-ui-card-lJZdN{border-radius:var(--iab-consent-banner-border-radius);border-width:var(--iab-consent-banner-border-width);border-style:solid;border-color:var(--iab-consent-banner-border-color);background-color:var(--iab-consent-banner-background-color);width:100%;box-shadow:var(--iab-consent-banner-shadow);position:relative;overflow:hidden}.c15t-dark .c15t-ui-card-lJZdN{background-color:var(--iab-consent-banner-background-color-dark);border-color:var(--iab-consent-banner-border-color-dark);box-shadow:var(--iab-consent-banner-shadow-dark)}.c15t-ui-card-lJZdN>:not([hidden])~:not([hidden]){border-top-width:var(--iab-consent-banner-border-width);border-top-style:solid;border-color:var(--iab-consent-banner-border-color)}.c15t-dark .c15t-ui-card-lJZdN>:not([hidden])~:not([hidden]){border-color:var(--iab-consent-banner-border-color-dark)}.c15t-ui-card-lJZdN:not(.headless):focus{outline:none}.c15t-ui-header-WMRYy{color:var(--iab-consent-banner-text-color);flex-direction:column;gap:.5rem;padding:1.25rem;display:flex}.c15t-dark .c15t-ui-header-WMRYy{color:var(--iab-consent-banner-text-color-dark)}@media (width>=640px){.c15t-ui-header-WMRYy{padding:1.5rem}}.c15t-ui-title-iMdl2{font-size:var(--c15t-font-size-lg);letter-spacing:-.011em;color:var(--iab-consent-banner-title-color);margin:0;font-weight:600;line-height:1.5rem}.c15t-dark .c15t-ui-title-iMdl2{color:var(--iab-consent-banner-title-color-dark)}.c15t-ui-description-_ZLiC{letter-spacing:-.006em;color:var(--iab-consent-banner-description-color);margin:0;font-size:.875rem;font-weight:400;line-height:1.5}.c15t-dark .c15t-ui-description-_ZLiC{color:var(--iab-consent-banner-description-color-dark)}.c15t-ui-partnersLink-yKsgB{color:var(--iab-consent-banner-link-color);cursor:pointer;font-weight:500;font-size:inherit;background:0 0;border:none;padding:0;text-decoration:none}.c15t-ui-partnersLink-yKsgB:hover{text-decoration:underline}.c15t-dark .c15t-ui-partnersLink-yKsgB{color:var(--iab-consent-banner-link-color-dark)}.c15t-ui-purposeList-Qz2Eo{color:var(--iab-consent-banner-description-color);margin:.5rem 0 0;padding-left:1.25rem;font-size:.875rem;line-height:1.5;list-style-type:disc}.c15t-ui-purposeList-Qz2Eo li{margin-bottom:.25rem}.c15t-ui-purposeMore-aANSf{opacity:.8;font-style:italic;list-style-type:none}.c15t-dark .c15t-ui-purposeList-Qz2Eo{color:var(--iab-consent-banner-description-color-dark)}.c15t-ui-legitimateInterestNotice-QtcwV{color:var(--iab-consent-banner-description-color);margin-top:.25rem;font-size:.8125rem;line-height:1.5}.c15t-dark .c15t-ui-legitimateInterestNotice-QtcwV{color:var(--iab-consent-banner-description-color-dark)}.c15t-ui-privacyLink-RYh_l{color:var(--iab-consent-banner-link-color);cursor:pointer;font-size:inherit;background:0 0;border:none;padding:0;text-decoration:none}.c15t-ui-privacyLink-RYh_l:hover{text-decoration:underline}.c15t-dark .c15t-ui-privacyLink-RYh_l{color:var(--iab-consent-banner-link-color-dark)}.c15t-ui-footer-danOO{background-color:var(--iab-consent-banner-footer-background-color);flex-direction:column;justify-content:space-between;gap:.5rem;padding:.75rem 1rem;display:flex}.c15t-dark .c15t-ui-footer-danOO{background-color:var(--iab-consent-banner-footer-background-color-dark)}@media (width>=640px){.c15t-ui-footer-danOO{flex-direction:row;padding:1rem}}.c15t-ui-overlay-OPamO{background-color:var(--iab-consent-banner-overlay-background-color);z-index:999997;position:fixed;inset:0}.c15t-ui-overlayVisible-JAO1l{opacity:1;transition:opacity var(--iab-consent-banner-animation-duration) var(--iab-consent-banner-animation-timing)}.c15t-ui-overlayHidden-zfbJA{opacity:0;transition:opacity var(--iab-consent-banner-animation-duration) var(--iab-consent-banner-animation-timing)}@starting-style{.c15t-ui-overlayEntering-MQWHm{opacity:0}}.c15t-dark .c15t-ui-overlay-OPamO{background-color:var(--iab-consent-banner-overlay-background-color-dark)}@media (prefers-reduced-motion:reduce){.c15t-ui-bannerVisible-uqQdb,.c15t-ui-bannerHidden-KVkXf,.c15t-ui-overlayVisible-JAO1l,.c15t-ui-overlayHidden-zfbJA{transition:none}}
25
+ .c15t-ui-root-wCtZ2{box-sizing:border-box;z-index:999998;font-family:var(--iab-consent-banner-font-family);line-height:var(--iab-consent-banner-line-height);-webkit-text-size-adjust:var(--iab-consent-banner-text-size-adjust);-webkit-font-smoothing:antialiased;tab-size:var(--iab-consent-banner-tab-size);justify-content:center;align-items:center;padding:1rem;display:flex;position:fixed;inset:0}.c15t-ui-bannerEntering-Rn_SM,.c15t-ui-bannerVisible-uqQdb{opacity:1}.c15t-ui-bannerEntering-Rn_SM[data-entry=late]:not(.c15t-ui-bannerHidden-KVkXf){transition:opacity var(--iab-consent-banner-entry-duration) var(--iab-consent-banner-entry-timing)}@starting-style{.c15t-ui-bannerEntering-Rn_SM[data-entry=late]{opacity:0}}.c15t-ui-bannerHidden-KVkXf{opacity:0;transition:opacity var(--iab-consent-banner-animation-duration) var(--iab-consent-banner-animation-timing)}@media (width>=640px){.c15t-ui-root-wCtZ2{padding:1.5rem}}.c15t-ui-cardShell-pmM71{width:min(100%, var(--iab-consent-banner-max-width));flex-direction:column;display:flex}.c15t-ui-card-lJZdN{border-radius:var(--iab-consent-banner-border-radius);border-width:var(--iab-consent-banner-border-width);border-style:solid;border-color:var(--iab-consent-banner-border-color);background-color:var(--iab-consent-banner-background-color);width:100%;box-shadow:var(--iab-consent-banner-shadow);position:relative;overflow:hidden}.c15t-dark .c15t-ui-card-lJZdN{background-color:var(--iab-consent-banner-background-color-dark);border-color:var(--iab-consent-banner-border-color-dark);box-shadow:var(--iab-consent-banner-shadow-dark)}.c15t-ui-card-lJZdN>:not([hidden])~:not([hidden]){border-top-width:var(--iab-consent-banner-border-width);border-top-style:solid;border-color:var(--iab-consent-banner-border-color)}.c15t-dark .c15t-ui-card-lJZdN>:not([hidden])~:not([hidden]){border-color:var(--iab-consent-banner-border-color-dark)}.c15t-ui-card-lJZdN:not(.headless):focus{outline:none}.c15t-ui-header-WMRYy{color:var(--iab-consent-banner-text-color);flex-direction:column;gap:.5rem;padding:1.25rem;display:flex}.c15t-dark .c15t-ui-header-WMRYy{color:var(--iab-consent-banner-text-color-dark)}@media (width>=640px){.c15t-ui-header-WMRYy{padding:1.5rem}}.c15t-ui-title-iMdl2{font-size:var(--c15t-font-size-lg);letter-spacing:-.011em;color:var(--iab-consent-banner-title-color);margin:0;font-weight:600;line-height:1.5rem}.c15t-dark .c15t-ui-title-iMdl2{color:var(--iab-consent-banner-title-color-dark)}.c15t-ui-description-_ZLiC{letter-spacing:-.006em;color:var(--iab-consent-banner-description-color);margin:0;font-size:.875rem;font-weight:400;line-height:1.5}.c15t-dark .c15t-ui-description-_ZLiC{color:var(--iab-consent-banner-description-color-dark)}.c15t-ui-partnersLink-yKsgB{color:var(--iab-consent-banner-link-color);cursor:pointer;font-weight:500;font-size:inherit;background:0 0;border:none;padding:0;text-decoration:none}.c15t-ui-partnersLink-yKsgB:hover{text-decoration:underline}.c15t-dark .c15t-ui-partnersLink-yKsgB{color:var(--iab-consent-banner-link-color-dark)}.c15t-ui-purposeList-Qz2Eo{color:var(--iab-consent-banner-description-color);margin:.5rem 0 0;padding-left:1.25rem;font-size:.875rem;line-height:1.5;list-style-type:disc}.c15t-ui-purposeList-Qz2Eo li{margin-bottom:.25rem}.c15t-ui-purposeMore-aANSf{opacity:.8;font-style:italic;list-style-type:none}.c15t-dark .c15t-ui-purposeList-Qz2Eo{color:var(--iab-consent-banner-description-color-dark)}.c15t-ui-legitimateInterestNotice-QtcwV{color:var(--iab-consent-banner-description-color);margin-top:.25rem;font-size:.8125rem;line-height:1.5}.c15t-dark .c15t-ui-legitimateInterestNotice-QtcwV{color:var(--iab-consent-banner-description-color-dark)}.c15t-ui-privacyLink-RYh_l{color:var(--iab-consent-banner-link-color);cursor:pointer;font-size:inherit;background:0 0;border:none;padding:0;text-decoration:none}.c15t-ui-privacyLink-RYh_l:hover{text-decoration:underline}.c15t-dark .c15t-ui-privacyLink-RYh_l{color:var(--iab-consent-banner-link-color-dark)}.c15t-ui-footer-danOO{background-color:var(--iab-consent-banner-footer-background-color);flex-direction:column;justify-content:space-between;gap:.5rem;padding:.75rem 1rem;display:flex}.c15t-dark .c15t-ui-footer-danOO{background-color:var(--iab-consent-banner-footer-background-color-dark)}@media (width>=640px){.c15t-ui-footer-danOO{flex-direction:row;padding:1rem}}.c15t-ui-overlay-OPamO{background-color:var(--iab-consent-banner-overlay-background-color);z-index:999997;position:fixed;inset:0}.c15t-ui-overlayEntering-MQWHm,.c15t-ui-overlayVisible-JAO1l{opacity:1}.c15t-ui-overlayEntering-MQWHm[data-entry=late]:not(.c15t-ui-overlayHidden-zfbJA){transition:opacity var(--iab-consent-banner-entry-duration) var(--iab-consent-banner-entry-timing)}@starting-style{.c15t-ui-overlayEntering-MQWHm[data-entry=late]{opacity:0}}.c15t-ui-overlayHidden-zfbJA{opacity:0;transition:opacity var(--iab-consent-banner-animation-duration) var(--iab-consent-banner-animation-timing)}.c15t-dark .c15t-ui-overlay-OPamO{background-color:var(--iab-consent-banner-overlay-background-color-dark)}@media (prefers-reduced-motion:reduce){.c15t-ui-bannerEntering-Rn_SM[data-entry=late]:not(.c15t-ui-bannerHidden-KVkXf),.c15t-ui-overlayEntering-MQWHm[data-entry=late]:not(.c15t-ui-overlayHidden-zfbJA),.c15t-ui-bannerHidden-KVkXf,.c15t-ui-overlayHidden-zfbJA{transition:none}}
package/dist/provider.js CHANGED
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- let e,t;import{jsx as o,jsxs as r}from"react/jsx-runtime";import{applyExperimentAssignment as n,applyExperimentTheme as i,hostExperiment as c,watchRevocationReload as s}from"@c15t/core";import{createPersistence as l}from"@c15t/core/modules/persistence";import{createWindowDebug as a}from"@c15t/core/modules/window-debug";import{createConsentProviderRuntime as m,hostedModes as u,lazyRuntimeModule as d,lazyStreamPrefetch as p,streamPrefetchWith as h}from"@c15t/core/runtime/provider";import{applyThemeSlots as f}from"@c15t/ui/utils";import{useCallback as g,useEffect as y,useLayoutEffect as k,useMemo as v,useReducer as S,useState as b,useSyncExternalStore as w}from"react";import{KernelContext as C,ProviderServicesContext as x}from"./context.js";import{ExternalIABProvider as L}from"./external-iab-context.js";import{useColorScheme as N}from"./hooks/use-color-scheme.js";import{useIsHydrated as O}from"./hooks/use-is-hydrated.js";import{createIframeBlockerOnDemand as j}from"./module-hooks/iframe-blocker.js";import{UNCOMMITTED_HOLD_MS as P}from"./module-hooks/network-hold.js";import{V3ThemeProvider as D}from"./theme-provider.js";let R=(e,t)=>{let o,r=!1;return(async()=>{try{let{connectConsentSource:n}=await import("@c15t/core/runtime/controls");r||(o=n(e,t))}catch{}})(),()=>{r=!0,o?.()}},_=async()=>(await import("@c15t/core/modules/script-loader")).createScriptLoader,E=function(e){let t=e.__resolveStreamedInit;return{connectConsentSource:R,createClearOnRevocation:d(async()=>(await import("@c15t/core/modules/clear-on-revocation")).createClearOnRevocation),createIframeBlocker:j,createNetworkBlocker:d(async()=>(await import("@c15t/core/modules/network-blocker")).createNetworkBlocker),createPersistence:l,createScriptLoader:d(_),createWindowDebug:a,preloadScriptLoader:e.__preloadScriptLoader?.(_),streamPrefetch:t?h(t):p,watchRevocationReload:s}},T=new WeakMap,J=new Set,q=(e,t)=>e.fetch===t.fetch&&e.initialData===t.initialData&&JSON.stringify(e)===JSON.stringify(t),B=function(o){if("function"!=typeof o)return o;let r=T.get(o);return r||(r=Object.assign(r=>e=(t=()=>o(Object.create(r,{iabEnabled:{value:void 0}})))(),{kind:o.kind}),T.set(o,r)),r},K=function(e){return{...e,mode:B(e.mode),pkg:e.__debugPkg??"@c15t/react"}},A=new Set,F=0,I=function(o,r){let n,i,c,{mode:s,networkBlocker:l}=o,a=m(K(o),E(o)),d=o,p=!1,h=!1,f=0,g=e;F+=1;let y={expire(){J.delete(c),A.delete(y),clearTimeout(n),p=!0,a.dispose()},holdKey:!1!==o.enabled&&l&&!1!==l.enabled?JSON.stringify(l.rules):null,sequence:F};if("u"<typeof window)h=!0;else{A.add(y),n=setTimeout(y.expire,P);let e=a.kernel.getSnapshot(),l=u.get(s),m=l&&{...l,fetch:l.fetch??globalThis.fetch};if(r&&m&&e.policyPending&&!(o.prefetch||o.experiment)){let o={overrides:e.overrides,user:e.user},r=JSON.stringify(o);for(let e of J)e.key===r&&q(e.options,m)&&(i=e);if(!i){let e=t(),n=e.init,s=n(o);s.catch(()=>void 0);let l=!1;e.init=e=>{let t=!l&&JSON.stringify(e)===r;return l=!0,t?s:n(e)},i=c={key:r,options:m,transport:e},J.add(c)}}}let k=function(){if(p)return!1;if(h)return!0;if(h=!0,J.delete(i)&&Object.assign(g,i?.transport),A.delete(y),clearTimeout(n),null!==y.holdKey)for(let e of A)e.sequence<y.sequence&&e.holdKey===y.holdKey&&e.expire();return!0};return{apply(e){e!==d&&(d=e,a.update(K(e)).catch(()=>void 0))},mount(){if(!k())return null;let e=f+=1;return a.start(),()=>{queueMicrotask(()=>{f===e&&a.dispose()})}},runtime:a}},M=function(){let e=null;return{get:(t,o)=>e??=I(t,o),reset(){e=null}}},V=e=>e+1,W=()=>()=>void 0,z=function(e){let[t]=b(M),[,o]=S(V,0),r=O(),n=g(()=>{t.reset(),o()},[t]);return e?{entry:t.get(e,r),rebuild:n}:void 0},G="u"<typeof document?y:k,H=({entry:e,options:t,rebuild:o})=>(G(()=>e.apply(t),[e,t]),y(()=>{let t=e.mount();return t||void o()},[e,o]),null),Q=e=>{let{children:t}=e,s=e.options??{},[l]=b(()=>e.runtime),a=z(l?void 0:s),m=a?.entry.runtime,u=l?e.runtime??l:void 0,d=m??u,p=w(m?m.subscribe:W,()=>d.kernel,()=>d.kernel),[h]=b(()=>{var e;return l?l.experiment??c(s.experiment,(e=s.prefetch,"function"==typeof e?.then)?void 0:s.prefetch):void 0}),g=m?m.experiment:h,k=u?s.consentCategories:void 0;y(()=>{u&&void 0!==k&&u.setConsentCategories(k)},[u,k]);let{presentation:S}=s,O=v(()=>({clearRecords:()=>d.clearRecords(),getConsentCategories:()=>d.consentCategories,getPresentation:()=>n(S,g,p.getSnapshot().experiment),setLanguage:e=>d.setLanguage(e)}),[g,p,S,d]),j=!!u&&void 0!==s.callbacks;y(()=>{"production"!==process.env.NODE_ENV&&j&&console.warn("c15t ConsentProvider: `options.callbacks` is ignored when you pass `runtime`. Pass them to createConsentRuntime({ callbacks }) instead.")},[j]);let P=w(e=>p.subscribe(e),()=>p.getSnapshot().experiment,()=>p.getServerSnapshot().experiment),R=v(()=>i(s.theme,g,P),[s.theme,g,P]);y(()=>{"production"===process.env.NODE_ENV||!R||!["colors","dark","motion","radius","shadows","spacing","typography"].some(e=>e in R)||document.getElementById("c15t-theme")||console.warn("c15t: `theme` tokens are no longer turned into CSS in the browser. Render <ConsentTheme theme={theme} /> on the server, or put the CSS from generateThemeCSS() in your stylesheet. See https://c15t.com/docs/frameworks/react/customize")},[R]);let _=v(()=>({colorScheme:s.colorScheme,disableAnimation:s.disableAnimation,noStyle:s.noStyle,scrollLock:s.scrollLock,theme:R,trapFocus:s.trapFocus}),[R,s.noStyle,s.disableAnimation,s.scrollLock,s.trapFocus,s.colorScheme]),E=v(()=>({components:f(R?.slots,s.components,"className"),experiment:g,legalLinks:s.legalLinks,preloadDialog:s.preloadDialog,presentation:s.presentation,theme:s.theme}),[R?.slots,s.components,g,s.legalLinks,s.preloadDialog,s.presentation,s.theme]);return N(s.colorScheme),o(C.Provider,{value:p,children:o(x.Provider,{value:O,children:r(D,{themeConfig:_,uiConfig:E,children:[a?o(H,{entry:a.entry,options:s,rebuild:a.rebuild}):null,u?o(L,{runtime:u,children:t}):t]})})})};export{Q as ConsentProvider};
2
+ let e,t;import{jsx as o,jsxs as r}from"react/jsx-runtime";import{applyExperimentAssignment as n,applyExperimentTheme as i,hostExperiment as s,watchRevocationReload as c}from"@c15t/core";import{createPersistence as l,readStoredRecords as a}from"@c15t/core/modules/persistence";import{createWindowDebug as u}from"@c15t/core/modules/window-debug";import{claimEarlyJourney as d,createConsentProviderRuntime as m,hostedModes as p,lazyRuntimeModule as f,lazyStreamPrefetch as h,streamPrefetchWith as g}from"@c15t/core/runtime/provider";import{applyThemeSlots as y}from"@c15t/ui/utils";import{useCallback as v,useEffect as k,useLayoutEffect as S,useMemo as b,useReducer as w,useState as C,useSyncExternalStore as x}from"react";import{KernelContext as j,ProviderServicesContext as L}from"./context.js";import{ExternalIABProvider as N}from"./external-iab-context.js";import{useColorScheme as O}from"./hooks/use-color-scheme.js";import{useIsHydrated as D}from"./hooks/use-is-hydrated.js";import{createIframeBlockerOnDemand as P}from"./module-hooks/iframe-blocker.js";import{UNCOMMITTED_HOLD_MS as R}from"./module-hooks/network-hold.js";import{V3ThemeProvider as _}from"./theme-provider.js";let E=(e,t)=>{let o,r=!1;return(async()=>{try{let{connectConsentSource:n}=await import("@c15t/core/runtime/controls");r||(o=n(e,t))}catch{}})(),()=>{r=!0,o?.()}},T=async()=>(await import("@c15t/core/modules/script-loader")).createScriptLoader,q=function(e){let t=e.__resolveStreamedInit;return{connectConsentSource:E,createClearOnRevocation:f(async()=>(await import("@c15t/core/modules/clear-on-revocation")).createClearOnRevocation),createIframeBlocker:P,createNetworkBlocker:f(async()=>(await import("@c15t/core/modules/network-blocker")).createNetworkBlocker),createPersistence:l,createScriptLoader:f(T),createWindowDebug:u,preloadScriptLoader:e.__preloadScriptLoader?.(T),streamPrefetch:t?g(t):h,watchRevocationReload:c}},B=new WeakMap,J=new Set,K=(e,t)=>e.fetch===t.fetch&&e.initialData===t.initialData&&JSON.stringify(e)===JSON.stringify(t),A=function(o){if("function"!=typeof o)return o;let r=B.get(o);return r||(r=Object.assign(r=>e=(t=()=>o(Object.create(r,{iabEnabled:{value:void 0}})))(),{kind:o.kind}),B.set(o,r)),r},F=function(e){return{...e,mode:A(e.mode),pkg:e.__debugPkg??"@c15t/react"}},I=function(e){let{persistence:t}=e;if(!1===t||e.consentSource)return!1;let o="object"==typeof t?t:{};if(o.skipHydration)return!1;let r=o.now?o.now():Date.now(),{records:n}=a(o.storageConfig??e.storageConfig,r);return!!(n.choice||n.noticeDismissal)},M=function(e){let{journey:t}=e;return JSON.stringify({journey:t?[t.id,t.scope,t.storedChoice]:null,overrides:e.overrides,user:e.user})},V=new Set,W=0,z=function(o,r){let n,i,s,{mode:c,networkBlocker:l}=o,a=m(F(o),q(o)),u=o,f=!1,h=!1,g=0,y=e;W+=1;let v={expire(){J.delete(s),V.delete(v),clearTimeout(n),f=!0,a.dispose()},holdKey:!1!==o.enabled&&l&&!1!==l.enabled?JSON.stringify(l.rules):null,sequence:W};if("u"<typeof window)h=!0;else{V.add(v),n=setTimeout(v.expire,R);let e=a.kernel.getSnapshot(),l=p.get(c),u=l&&{...l,fetch:l.fetch??globalThis.fetch};if(r&&u&&e.policyPending&&!(o.prefetch||o.experiment)){let r=d({option:o.journey,storedChoice:I(o)}),n=r?{journey:r,overrides:e.overrides,user:e.user}:{overrides:e.overrides,user:e.user},c=M(n);for(let e of J)e.key===c&&K(e.options,u)&&(i=e);if(!i){let e=t(),o=e.init,r=o(n);r.catch(()=>void 0);let l=!1;e.init=e=>{let t=!l&&M(e)===c;return l=!0,t?r:o(e)},i=s={key:c,options:u,transport:e},J.add(s)}}}let k=function(){if(f)return!1;if(h)return!0;if(h=!0,J.delete(i)&&Object.assign(y,i?.transport),V.delete(v),clearTimeout(n),null!==v.holdKey)for(let e of V)e.sequence<v.sequence&&e.holdKey===v.holdKey&&e.expire();return!0};return{apply(e){e!==u&&(u=e,a.update(F(e)).catch(()=>void 0))},mount(){if(!k())return null;let e=g+=1;return a.start(),()=>{queueMicrotask(()=>{g===e&&a.dispose()})}},runtime:a}},H=function(){let e=null;return{get:(t,o)=>e??=z(t,o),reset(){e=null}}},G=e=>e+1,Q=()=>()=>void 0,U=function(e){let[t]=C(H),[,o]=w(G,0),r=D(),n=v(()=>{t.reset(),o()},[t]);return e?{entry:t.get(e,r),rebuild:n}:void 0},X="u"<typeof document?k:S,Y=({entry:e,options:t,rebuild:o})=>(X(()=>e.apply(t),[e,t]),k(()=>{let t=e.mount();return t||void o()},[e,o]),null),Z=e=>{let{children:t}=e,c=e.options??{},[l]=C(()=>e.runtime),a=U(l?void 0:c),u=a?.entry.runtime,d=l?e.runtime??l:void 0,m=u??d,p=x(u?u.subscribe:Q,()=>m.kernel,()=>m.kernel),[f]=C(()=>{var e;return l?l.experiment??s(c.experiment,(e=c.prefetch,"function"==typeof e?.then)?void 0:c.prefetch):void 0}),h=u?u.experiment:f,g=d?c.consentCategories:void 0;k(()=>{d&&void 0!==g&&d.setConsentCategories(g)},[d,g]);let{presentation:v}=c,S=b(()=>({clearRecords:()=>m.clearRecords(),getConsentCategories:()=>m.consentCategories,getPresentation:()=>n(v,h,p.getSnapshot().experiment),setLanguage:e=>m.setLanguage(e)}),[h,p,v,m]),w=!!d&&void 0!==c.callbacks;k(()=>{"production"!==process.env.NODE_ENV&&w&&console.warn("c15t ConsentProvider: `options.callbacks` is ignored when you pass `runtime`. Pass them to createConsentRuntime({ callbacks }) instead.")},[w]);let D=x(e=>p.subscribe(e),()=>p.getSnapshot().experiment,()=>p.getServerSnapshot().experiment),P=b(()=>i(c.theme,h,D),[c.theme,h,D]);k(()=>{"production"===process.env.NODE_ENV||!P||!["colors","dark","motion","radius","shadows","spacing","typography"].some(e=>e in P)||document.getElementById("c15t-theme")||console.warn("c15t: `theme` tokens are no longer turned into CSS in the browser. Render <ConsentTheme theme={theme} /> on the server, or put the CSS from generateThemeCSS() in your stylesheet. See https://c15t.com/docs/frameworks/react/customize")},[P]);let R=b(()=>({colorScheme:c.colorScheme,disableAnimation:c.disableAnimation,noStyle:c.noStyle,scrollLock:c.scrollLock,theme:P,trapFocus:c.trapFocus}),[P,c.noStyle,c.disableAnimation,c.scrollLock,c.trapFocus,c.colorScheme]),E=b(()=>({components:y(P?.slots,c.components,"className"),experiment:h,legalLinks:c.legalLinks,preloadDialog:c.preloadDialog,presentation:c.presentation,theme:c.theme}),[P?.slots,c.components,h,c.legalLinks,c.preloadDialog,c.presentation,c.theme]);return O(c.colorScheme),o(j.Provider,{value:p,children:o(L.Provider,{value:S,children:r(_,{themeConfig:R,uiConfig:E,children:[a?o(Y,{entry:a.entry,options:c,rebuild:a.rebuild}):null,d?o(N,{runtime:d,children:t}):t]})})})};export{Z as ConsentProvider};
@@ -5,9 +5,9 @@
5
5
  * nested package CSS imports still include the complete stylesheet.
6
6
  */
7
7
  /* default theme tokens (generated from defaultTheme) */
8
- :root,:host,.c15t-theme-root{--c15t-border: hsl(0, 0%, 90%);--c15t-border-hover: hsl(0, 0%, 85%);--c15t-duration-fast: 80ms;--c15t-duration-normal: 150ms;--c15t-duration-slow: 200ms;--c15t-easing: cubic-bezier(0.4, 0, 0.2, 1);--c15t-easing-in-out: cubic-bezier(0.645, 0.045, 0.355, 1);--c15t-easing-out: cubic-bezier(0.215, 0.61, 0.355, 1);--c15t-easing-spring: cubic-bezier(0.34, 1.56, 0.64, 1);--c15t-font-family: system-ui, -apple-system, sans-serif;--c15t-font-size-base: 1rem;--c15t-font-size-lg: 1.125rem;--c15t-font-size-sm: 0.875rem;--c15t-font-weight-medium: 500;--c15t-font-weight-normal: 400;--c15t-font-weight-semibold: 600;--c15t-line-height-normal: 1.5;--c15t-line-height-relaxed: 1.75;--c15t-line-height-tight: 1.25;--c15t-overlay: hsla(0, 0%, 0%, 0.5);--c15t-primary: hsl(228, 100%, 60%);--c15t-primary-hover: hsl(228, 100%, 55%);--c15t-radius-full: 9999px;--c15t-radius-lg: 0.75rem;--c15t-radius-md: 0.5rem;--c15t-radius-sm: 0.25rem;--c15t-shadow-lg: 0 8px 24px hsla(0, 0%, 0%, 0.12);--c15t-shadow-md: 0 4px 12px hsla(0, 0%, 0%, 0.08);--c15t-shadow-sm: 0 1px 2px hsla(0, 0%, 0%, 0.05);--c15t-space-lg: 1.5rem;--c15t-space-md: 1rem;--c15t-space-sm: 0.5rem;--c15t-space-xl: 2rem;--c15t-space-xs: 0.25rem;--c15t-surface: hsl(0, 0%, 100%);--c15t-surface-hover: hsl(0, 0%, 98%);--c15t-switch-thumb: hsl(0, 0%, 100%);--c15t-switch-track: hsl(0, 0%, 85%);--c15t-switch-track-active: var(--c15t-primary);--c15t-text: hsl(0, 0%, 10%);--c15t-text-muted: hsl(0, 0%, 40%);--c15t-text-on-primary: hsl(0, 0%, 100%);}
8
+ :root,:host,.c15t-theme-root{--c15t-border: hsl(0, 0%, 90%);--c15t-border-hover: hsl(0, 0%, 85%);--c15t-duration-fast: 80ms;--c15t-duration-normal: 150ms;--c15t-duration-slow: 200ms;--c15t-easing: cubic-bezier(0.4, 0, 0.2, 1);--c15t-easing-in: cubic-bezier(0.55, 0.055, 0.675, 0.19);--c15t-easing-in-out: cubic-bezier(0.645, 0.045, 0.355, 1);--c15t-easing-out: cubic-bezier(0.215, 0.61, 0.355, 1);--c15t-easing-spring: cubic-bezier(0.34, 1.56, 0.64, 1);--c15t-font-family: system-ui, -apple-system, sans-serif;--c15t-font-size-base: 1rem;--c15t-font-size-lg: 1.125rem;--c15t-font-size-sm: 0.875rem;--c15t-font-weight-medium: 500;--c15t-font-weight-normal: 400;--c15t-font-weight-semibold: 600;--c15t-line-height-normal: 1.5;--c15t-line-height-relaxed: 1.75;--c15t-line-height-tight: 1.25;--c15t-overlay: hsla(0, 0%, 0%, 0.5);--c15t-primary: hsl(228, 100%, 60%);--c15t-primary-hover: hsl(228, 100%, 55%);--c15t-radius-full: 9999px;--c15t-radius-lg: 0.75rem;--c15t-radius-md: 0.5rem;--c15t-radius-sm: 0.25rem;--c15t-shadow-lg: 0 8px 24px hsla(0, 0%, 0%, 0.12);--c15t-shadow-md: 0 4px 12px hsla(0, 0%, 0%, 0.08);--c15t-shadow-sm: 0 1px 2px hsla(0, 0%, 0%, 0.05);--c15t-space-lg: 1.5rem;--c15t-space-md: 1rem;--c15t-space-sm: 0.5rem;--c15t-space-xl: 2rem;--c15t-space-xs: 0.25rem;--c15t-surface: hsl(0, 0%, 100%);--c15t-surface-hover: hsl(0, 0%, 98%);--c15t-switch-thumb: hsl(0, 0%, 100%);--c15t-switch-track: hsl(0, 0%, 85%);--c15t-switch-track-active: var(--c15t-primary);--c15t-text: hsl(0, 0%, 10%);--c15t-text-muted: hsl(0, 0%, 40%);--c15t-text-on-primary: hsl(0, 0%, 100%);}
9
9
 
10
- :root.dark,:host(.dark),.dark .c15t-theme-root,:root.c15t-dark,:host(.c15t-dark),.c15t-dark .c15t-theme-root{--c15t-border: hsl(0, 0%, 20%);--c15t-border-hover: hsl(0, 0%, 25%);--c15t-duration-fast: 80ms;--c15t-duration-normal: 150ms;--c15t-duration-slow: 200ms;--c15t-easing: cubic-bezier(0.4, 0, 0.2, 1);--c15t-easing-in-out: cubic-bezier(0.645, 0.045, 0.355, 1);--c15t-easing-out: cubic-bezier(0.215, 0.61, 0.355, 1);--c15t-easing-spring: cubic-bezier(0.34, 1.56, 0.64, 1);--c15t-font-family: system-ui, -apple-system, sans-serif;--c15t-font-size-base: 1rem;--c15t-font-size-lg: 1.125rem;--c15t-font-size-sm: 0.875rem;--c15t-font-weight-medium: 500;--c15t-font-weight-normal: 400;--c15t-font-weight-semibold: 600;--c15t-line-height-normal: 1.5;--c15t-line-height-relaxed: 1.75;--c15t-line-height-tight: 1.25;--c15t-overlay: hsla(0, 0%, 0%, 0.7);--c15t-primary: hsl(228, 100%, 70%);--c15t-primary-hover: hsl(228, 100%, 65%);--c15t-radius-full: 9999px;--c15t-radius-lg: 0.75rem;--c15t-radius-md: 0.5rem;--c15t-radius-sm: 0.25rem;--c15t-shadow-lg: 0 8px 24px hsla(0, 0%, 0%, 0.12);--c15t-shadow-md: 0 4px 12px hsla(0, 0%, 0%, 0.08);--c15t-shadow-sm: 0 1px 2px hsla(0, 0%, 0%, 0.05);--c15t-space-lg: 1.5rem;--c15t-space-md: 1rem;--c15t-space-sm: 0.5rem;--c15t-space-xl: 2rem;--c15t-space-xs: 0.25rem;--c15t-surface: hsl(0, 0%, 7%);--c15t-surface-hover: hsl(0, 0%, 10%);--c15t-switch-thumb: hsl(0, 0%, 93%);--c15t-switch-track: hsl(0, 0%, 25%);--c15t-switch-track-active: var(--c15t-primary);--c15t-text: hsl(0, 0%, 93%);--c15t-text-muted: hsl(0, 0%, 60%);--c15t-text-on-primary: hsl(0, 0%, 100%);}
10
+ :root.dark,:host(.dark),.dark .c15t-theme-root,:root.c15t-dark,:host(.c15t-dark),.c15t-dark .c15t-theme-root{--c15t-border: hsl(0, 0%, 20%);--c15t-border-hover: hsl(0, 0%, 25%);--c15t-duration-fast: 80ms;--c15t-duration-normal: 150ms;--c15t-duration-slow: 200ms;--c15t-easing: cubic-bezier(0.4, 0, 0.2, 1);--c15t-easing-in: cubic-bezier(0.55, 0.055, 0.675, 0.19);--c15t-easing-in-out: cubic-bezier(0.645, 0.045, 0.355, 1);--c15t-easing-out: cubic-bezier(0.215, 0.61, 0.355, 1);--c15t-easing-spring: cubic-bezier(0.34, 1.56, 0.64, 1);--c15t-font-family: system-ui, -apple-system, sans-serif;--c15t-font-size-base: 1rem;--c15t-font-size-lg: 1.125rem;--c15t-font-size-sm: 0.875rem;--c15t-font-weight-medium: 500;--c15t-font-weight-normal: 400;--c15t-font-weight-semibold: 600;--c15t-line-height-normal: 1.5;--c15t-line-height-relaxed: 1.75;--c15t-line-height-tight: 1.25;--c15t-overlay: hsla(0, 0%, 0%, 0.7);--c15t-primary: hsl(228, 100%, 70%);--c15t-primary-hover: hsl(228, 100%, 65%);--c15t-radius-full: 9999px;--c15t-radius-lg: 0.75rem;--c15t-radius-md: 0.5rem;--c15t-radius-sm: 0.25rem;--c15t-shadow-lg: 0 8px 24px hsla(0, 0%, 0%, 0.12);--c15t-shadow-md: 0 4px 12px hsla(0, 0%, 0%, 0.08);--c15t-shadow-sm: 0 1px 2px hsla(0, 0%, 0%, 0.05);--c15t-space-lg: 1.5rem;--c15t-space-md: 1rem;--c15t-space-sm: 0.5rem;--c15t-space-xl: 2rem;--c15t-space-xs: 0.25rem;--c15t-surface: hsl(0, 0%, 7%);--c15t-surface-hover: hsl(0, 0%, 10%);--c15t-switch-thumb: hsl(0, 0%, 93%);--c15t-switch-track: hsl(0, 0%, 25%);--c15t-switch-track-active: var(--c15t-primary);--c15t-text: hsl(0, 0%, 93%);--c15t-text-muted: hsl(0, 0%, 60%);--c15t-text-on-primary: hsl(0, 0%, 100%);}
11
11
  .c15t-no-transitions,.c15t-no-transitions *,.c15t-no-transitions *::before,.c15t-no-transitions *::after{transition: none !important;animation: none !important;}
12
12
 
13
13
  /* primitives/button vars */
@@ -44,7 +44,7 @@
44
44
  @media only screen and (resolution>=192dpi){:root, :host{--consent-dialog-border-width-hairline:.5px}}
45
45
 
46
46
  /* components/prompt vars */
47
- :root, :host{--consent-banner-font-family:var(--c15t-font-family);--consent-banner-line-height:var(--c15t-line-height-normal);--consent-banner-text-size-adjust:100%;--consent-banner-tab-size:4;--consent-banner-border-radius-sm:var(--c15t-radius-sm);--consent-banner-border-radius:var(--c15t-radius-lg);--consent-banner-max-width:440px;--consent-banner-widget-max-width:20rem;--consent-banner-wall-max-width:30rem;--consent-banner-branding-tag-offset:2rem;--consent-banner-animation-duration:var(--c15t-duration-fast);--consent-banner-animation-timing:var(--c15t-easing);--consent-banner-border-width:1px;--consent-banner-border-width-hairline:1px;--consent-banner-shadow:var(--c15t-shadow-lg);--consent-banner-shadow-dark:var(--c15t-shadow-lg);--consent-banner-background-color:var(--c15t-surface);--consent-banner-background-color-dark:var(--c15t-surface);--consent-banner-footer-background-color:var(--c15t-surface-hover);--consent-banner-footer-background-color-dark:var(--c15t-surface-hover);--consent-banner-text-color:var(--c15t-text);--consent-banner-text-color-dark:var(--c15t-text);--consent-banner-border-color:var(--c15t-border);--consent-banner-border-color-dark:var(--c15t-border);--consent-banner-title-color:var(--c15t-text);--consent-banner-title-color-dark:var(--c15t-text);--consent-banner-description-color:var(--c15t-text-muted);--consent-banner-description-color-dark:var(--c15t-text-muted);--consent-banner-overlay-background-color:var(--c15t-overlay);--consent-banner-overlay-background-color-dark:var(--c15t-overlay)}
47
+ :root, :host{--consent-banner-font-family:var(--c15t-font-family);--consent-banner-line-height:var(--c15t-line-height-normal);--consent-banner-text-size-adjust:100%;--consent-banner-tab-size:4;--consent-banner-border-radius-sm:var(--c15t-radius-sm);--consent-banner-border-radius:var(--c15t-radius-lg);--consent-banner-max-width:440px;--consent-banner-widget-max-width:20rem;--consent-banner-wall-max-width:30rem;--consent-banner-branding-tag-offset:2rem;--consent-banner-entry-duration:var(--c15t-duration-normal);--consent-banner-entry-timing:var(--c15t-easing-out);--consent-banner-animation-duration:var(--c15t-duration-fast);--consent-banner-animation-timing:var(--c15t-easing-in);--consent-banner-border-width:1px;--consent-banner-border-width-hairline:1px;--consent-banner-shadow:var(--c15t-shadow-lg);--consent-banner-shadow-dark:var(--c15t-shadow-lg);--consent-banner-background-color:var(--c15t-surface);--consent-banner-background-color-dark:var(--c15t-surface);--consent-banner-footer-background-color:var(--c15t-surface-hover);--consent-banner-footer-background-color-dark:var(--c15t-surface-hover);--consent-banner-text-color:var(--c15t-text);--consent-banner-text-color-dark:var(--c15t-text);--consent-banner-border-color:var(--c15t-border);--consent-banner-border-color-dark:var(--c15t-border);--consent-banner-title-color:var(--c15t-text);--consent-banner-title-color-dark:var(--c15t-text);--consent-banner-description-color:var(--c15t-text-muted);--consent-banner-description-color-dark:var(--c15t-text-muted);--consent-banner-overlay-background-color:var(--c15t-overlay);--consent-banner-overlay-background-color-dark:var(--c15t-overlay)}
48
48
  @media only screen and (resolution>=192dpi){:root, :host{--consent-banner-border-width-hairline:.5px}}
49
49
 
50
50
  /* components/branding */
@@ -66,7 +66,7 @@
66
66
  .c15t-ui-trigger-Hjg5y{--cdt-size-sm:32px;--cdt-size-md:40px;--cdt-size-lg:48px;--cdt-bg:var(--c15t-surface,#fff);--cdt-bg-hover:var(--c15t-surface-hover,var(--cdt-bg));--cdt-border:var(--c15t-border,#e5e5e5);--cdt-shadow:var(--c15t-shadow-lg,0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a);--cdt-shadow-hover:var(--c15t-shadow-xl,0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a);--cdt-radius:var(--c15t-radius-full,9999px);--cdt-offset:var(--c15t-space-md,20px);--cdt-transition-duration:var(--c15t-duration-slow);--cdt-transition-easing:var(--c15t-easing-out);--cdt-snap-duration:var(--c15t-duration-slow);--cdt-snap-easing:var(--c15t-easing-in-out);--cdt-icon-color:var(--c15t-text,#171717);--cdt-focus-ring:var(--c15t-primary,#3b82f6);z-index:9999;width:var(--cdt-size-md);height:var(--cdt-size-md);border:1px solid var(--cdt-border);border-radius:var(--cdt-radius);background:var(--cdt-bg);box-shadow:var(--cdt-shadow);cursor:grab;transition:transform var(--cdt-transition-duration) var(--cdt-transition-easing), box-shadow var(--cdt-transition-duration) var(--cdt-transition-easing), background var(--cdt-transition-duration) var(--cdt-transition-easing);touch-action:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;will-change:transform;justify-content:center;align-items:center;margin:0;padding:0;display:flex;position:fixed}@media (hover:hover) and (pointer:fine){.c15t-ui-trigger-Hjg5y:hover{background:var(--cdt-bg-hover);box-shadow:var(--cdt-shadow-hover)}}.c15t-ui-trigger-Hjg5y:active,.c15t-ui-trigger-Hjg5y.c15t-ui-dragging-R4Cm2,.c15t-ui-trigger-Hjg5y[data-dragging]{cursor:grabbing;transform:scale(1.02)}.c15t-ui-trigger-Hjg5y:focus{outline:none}.c15t-ui-trigger-Hjg5y:focus-visible{outline:2px solid var(--cdt-focus-ring);outline-offset:2px}.c15t-ui-trigger-Hjg5y[data-size=sm],.c15t-ui-sm-sud0y{width:var(--cdt-size-sm);height:var(--cdt-size-sm)}.c15t-ui-trigger-Hjg5y[data-size=md],.c15t-ui-md-CZrWA{width:var(--cdt-size-md);height:var(--cdt-size-md)}.c15t-ui-trigger-Hjg5y[data-size=lg],.c15t-ui-lg-fGzix{width:var(--cdt-size-lg);height:var(--cdt-size-lg)}.c15t-ui-icon-dD5R6{width:50%;height:50%;color:var(--cdt-icon-color);pointer-events:none;flex-shrink:0;justify-content:center;align-items:center;display:flex}.c15t-ui-icon-dD5R6 svg{width:100%;height:100%}.c15t-ui-text-Garil{margin-left:var(--c15t-space-xs,6px);font-family:var(--c15t-font-family,system-ui, sans-serif);font-size:var(--c15t-font-size-sm,14px);font-weight:var(--c15t-font-weight-medium,500);color:var(--cdt-icon-color);white-space:nowrap;pointer-events:none;line-height:1}.c15t-ui-trigger-Hjg5y:has(.c15t-ui-text-Garil){width:auto;height:auto;padding:var(--c15t-space-sm,8px) var(--c15t-space-md,16px);border-radius:var(--c15t-radius-lg,12px);gap:var(--c15t-space-xs,6px)}.c15t-ui-trigger-Hjg5y:has(.c15t-ui-text-Garil) .c15t-ui-icon-dD5R6{width:16px;height:16px}.c15t-ui-trigger-Hjg5y:has(.c15t-ui-text-Garil)[data-size=sm],.c15t-ui-trigger-Hjg5y:has(.c15t-ui-text-Garil).c15t-ui-sm-sud0y{padding:var(--c15t-space-xs,6px) var(--c15t-space-sm,10px)}.c15t-ui-trigger-Hjg5y:has(.c15t-ui-text-Garil)[data-size=sm] .c15t-ui-icon-dD5R6,.c15t-ui-trigger-Hjg5y:has(.c15t-ui-text-Garil).c15t-ui-sm-sud0y .c15t-ui-icon-dD5R6{width:14px;height:14px}.c15t-ui-trigger-Hjg5y:has(.c15t-ui-text-Garil)[data-size=sm] .c15t-ui-text-Garil,.c15t-ui-trigger-Hjg5y:has(.c15t-ui-text-Garil).c15t-ui-sm-sud0y .c15t-ui-text-Garil{font-size:var(--c15t-font-size-xs,12px)}.c15t-ui-trigger-Hjg5y:has(.c15t-ui-text-Garil)[data-size=lg],.c15t-ui-trigger-Hjg5y:has(.c15t-ui-text-Garil).c15t-ui-lg-fGzix{padding:var(--c15t-space-md,12px) var(--c15t-space-lg,20px)}.c15t-ui-trigger-Hjg5y:has(.c15t-ui-text-Garil)[data-size=lg] .c15t-ui-icon-dD5R6,.c15t-ui-trigger-Hjg5y:has(.c15t-ui-text-Garil).c15t-ui-lg-fGzix .c15t-ui-icon-dD5R6{width:20px;height:20px}.c15t-ui-trigger-Hjg5y:has(.c15t-ui-text-Garil)[data-size=lg] .c15t-ui-text-Garil,.c15t-ui-trigger-Hjg5y:has(.c15t-ui-text-Garil).c15t-ui-lg-fGzix .c15t-ui-text-Garil{font-size:var(--c15t-font-size-md,16px)}.c15t-ui-bottomRight-RqjMF{right:var(--cdt-offset);bottom:var(--cdt-offset)}.c15t-ui-bottomLeft-J3DsX{bottom:var(--cdt-offset);left:var(--cdt-offset)}.c15t-ui-topRight-Ln04J{top:var(--cdt-offset);right:var(--cdt-offset)}.c15t-ui-topLeft-tpeaf{top:var(--cdt-offset);left:var(--cdt-offset)}.c15t-ui-snapping-YupfG{transition:top var(--cdt-snap-duration) var(--cdt-snap-easing), right var(--cdt-snap-duration) var(--cdt-snap-easing), bottom var(--cdt-snap-duration) var(--cdt-snap-easing), left var(--cdt-snap-duration) var(--cdt-snap-easing), transform var(--cdt-snap-duration) var(--cdt-snap-easing)}.c15t-ui-hidden-tV2GK{display:none}.c15t-dark .c15t-ui-trigger-Hjg5y{--cdt-bg:var(--c15t-surface,#262626);--cdt-bg-hover:var(--c15t-surface-hover,#404040);--cdt-border:var(--c15t-border,#404040);--cdt-icon-color:var(--c15t-text,#fafafa);--cdt-shadow:0 10px 15px -3px #0000004d, 0 4px 6px -4px #0000004d;--cdt-shadow-hover:0 20px 25px -5px #0006, 0 8px 10px -6px #0006}.c15t-ui-toolbar-gCKkL{--cdtt-size-sm:32px;--cdtt-size-md:40px;--cdtt-size-lg:48px;--cdtt-bg:var(--c15t-surface,#fff);--cdtt-bg-hover:var(--c15t-surface-hover,#f5f5f5);--cdtt-border:var(--c15t-border,#d4d4d4);--cdtt-primary:var(--c15t-primary,#16a779);--cdtt-primary-hover:var(--c15t-primary-hover,#128866);--cdtt-primary-text:var(--c15t-text-on-primary,#fff);--cdtt-icon-color:var(--c15t-text,#262626);--cdtt-focus-ring:var(--c15t-primary,#16a779);--cdtt-offset:var(--c15t-space-md,20px);--cdtt-transition-duration:var(--c15t-duration-fast,.16s);--cdtt-transition-easing:var(--c15t-easing-out,ease-out);--cdtt-shadow:var(--c15t-shadow-md,0 4px 10px #00000014, 0 1px 2px #0000000f);z-index:9999;width:max-content;color:var(--cdtt-icon-color);background:var(--cdtt-bg);border:1px solid var(--cdtt-border);border-radius:var(--c15t-radius-md,6px);box-shadow:var(--cdtt-shadow);cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;will-change:transform;transition:transform var(--cdtt-transition-duration) var(--cdtt-transition-easing), box-shadow var(--cdtt-transition-duration) var(--cdtt-transition-easing), background var(--cdtt-transition-duration) var(--cdtt-transition-easing);align-items:stretch;margin:0;padding:0;display:inline-flex;position:fixed;overflow:hidden}.c15t-ui-toolbar-gCKkL.c15t-ui-bottomRight-RqjMF{right:max(var(--cdtt-offset), env(safe-area-inset-right,0px));bottom:max(var(--cdtt-offset), env(safe-area-inset-bottom,0px))}.c15t-ui-toolbar-gCKkL.c15t-ui-bottomLeft-J3DsX{bottom:max(var(--cdtt-offset), env(safe-area-inset-bottom,0px));left:max(var(--cdtt-offset), env(safe-area-inset-left,0px))}.c15t-ui-toolbar-gCKkL.c15t-ui-topRight-Ln04J{top:max(var(--cdtt-offset), env(safe-area-inset-top,0px));right:max(var(--cdtt-offset), env(safe-area-inset-right,0px))}.c15t-ui-toolbar-gCKkL.c15t-ui-topLeft-tpeaf{top:max(var(--cdtt-offset), env(safe-area-inset-top,0px));left:max(var(--cdtt-offset), env(safe-area-inset-left,0px))}.c15t-ui-toolbar-gCKkL.c15t-ui-dragging-R4Cm2{cursor:grabbing;box-shadow:var(--c15t-shadow-lg,0 10px 20px #00000024, 0 3px 6px #00000014)}.c15t-ui-toolbarVertical-MQ8bT{flex-direction:column}.c15t-ui-toolbarItem-OO8Dy{width:var(--cdtt-size-md);height:var(--cdtt-size-md);color:var(--cdtt-icon-color);border:0;border-inline-start:1px solid var(--cdtt-border);cursor:inherit;transition:color var(--cdtt-transition-duration) var(--cdtt-transition-easing), background var(--cdtt-transition-duration) var(--cdtt-transition-easing);background:0 0;border-radius:0;flex:none;justify-content:center;align-items:center;margin:0;padding:0;display:flex;position:relative}.c15t-ui-toolbarItem-OO8Dy:first-child{border-inline-start:0}.c15t-ui-toolbarVertical-MQ8bT .c15t-ui-toolbarItem-OO8Dy{border-top:1px solid var(--cdtt-border);border-inline-start:0}.c15t-ui-toolbarVertical-MQ8bT .c15t-ui-toolbarItem-OO8Dy:first-child{border-top:0}.c15t-ui-toolbar-gCKkL .c15t-ui-toolbarItem-OO8Dy.c15t-ui-sm-sud0y{width:var(--cdtt-size-sm);height:var(--cdtt-size-sm)}.c15t-ui-toolbar-gCKkL .c15t-ui-toolbarItem-OO8Dy.c15t-ui-md-CZrWA{width:var(--cdtt-size-md);height:var(--cdtt-size-md)}.c15t-ui-toolbar-gCKkL .c15t-ui-toolbarItem-OO8Dy.c15t-ui-lg-fGzix{width:var(--cdtt-size-lg);height:var(--cdtt-size-lg)}.c15t-ui-toolbarItem-OO8Dy[data-c15t-trigger-action=preferences]{color:var(--cdtt-primary-text);background:var(--cdtt-primary)}.c15t-ui-toolbarItem-OO8Dy[data-c15t-trigger-action=devtools][aria-expanded=true]{color:var(--cdtt-primary);background:var(--cdtt-bg-hover)}.c15t-ui-toolbarItem-OO8Dy:focus{outline:none}.c15t-ui-toolbarItem-OO8Dy:focus-visible{z-index:1;outline:2px solid var(--cdtt-focus-ring);outline-offset:-3px}.c15t-ui-toolbarItem-OO8Dy:disabled{cursor:not-allowed;opacity:.45}.c15t-ui-toolbarIcon-FpHKR{pointer-events:none;flex-shrink:0;justify-content:center;align-items:center;width:50%;height:50%;display:flex}.c15t-ui-toolbarIcon-FpHKR>span,.c15t-ui-toolbarIcon-FpHKR svg{width:100%;height:100%;display:flex}@media (hover:hover) and (pointer:fine){.c15t-ui-toolbarItem-OO8Dy:hover:not(:disabled){background:var(--cdtt-bg-hover)}.c15t-ui-toolbarItem-OO8Dy[data-c15t-trigger-action=preferences]:hover:not(:disabled){background:var(--cdtt-primary-hover)}}.c15t-ui-toolbarItem-OO8Dy:active:not(:disabled){box-shadow:inset 0 1px 3px #00000029}:is(.c15t-dark .c15t-ui-toolbar-gCKkL,.dark .c15t-ui-toolbar-gCKkL){--cdtt-bg:var(--c15t-surface,#262626);--cdtt-bg-hover:var(--c15t-surface-hover,#343434);--cdtt-border:var(--c15t-border,#525252);--cdtt-icon-color:var(--c15t-text,#fafafa);--cdtt-shadow:0 8px 18px #00000052, 0 2px 5px #00000038}.c15t-ui-trigger-Hjg5y[data-disable-animation],.c15t-ui-trigger-Hjg5y[data-disable-animation].c15t-ui-snapping-YupfG,.c15t-ui-toolbar-gCKkL[data-disable-animation],.c15t-ui-toolbar-gCKkL[data-disable-animation].c15t-ui-snapping-YupfG,.c15t-ui-toolbar-gCKkL[data-disable-animation] .c15t-ui-toolbarItem-OO8Dy{transition:none}@media (prefers-reduced-motion:reduce){.c15t-ui-trigger-Hjg5y,.c15t-ui-toolbar-gCKkL,.c15t-ui-toolbarItem-OO8Dy,.c15t-ui-snapping-YupfG{transition:none}}
67
67
 
68
68
  /* components/prompt */
69
- .c15t-ui-root-p7SV0:not(.headless){box-sizing:border-box;z-index:999998;width:100%;font-family:var(--consent-banner-font-family);line-height:var(--consent-banner-line-height);-webkit-text-size-adjust:var(--consent-banner-text-size-adjust);-webkit-font-smoothing:antialiased;tab-size:var(--consent-banner-tab-size);flex-direction:column;padding:1rem;display:flex;position:fixed}.c15t-ui-bannerEnterActive-IytGL:not(.headless){transition:opacity var(--consent-banner-animation-duration) var(--consent-banner-animation-timing), transform var(--consent-banner-animation-duration) var(--c15t-easing-spring)}.c15t-ui-bannerLeaveActive-C7qrk:not(.headless){transition:opacity var(--consent-banner-animation-duration) var(--consent-banner-animation-timing), transform var(--consent-banner-animation-duration) var(--consent-banner-animation-timing)}:is(.c15t-ui-bannerEnterFrom-BJMc7:not(.headless),.c15t-ui-bannerLeaveTo-dXNcB:not(.headless)){opacity:0;transform:translateY(50px)}:is(.c15t-ui-bannerEnterTo-yatsy:not(.headless),.c15t-ui-bannerLeaveFrom-RVGoD:not(.headless)){opacity:1;transform:translateY(0)}.c15t-ui-bannerVisible-AFth0:not(.headless){opacity:1;transition:opacity var(--consent-banner-animation-duration) var(--consent-banner-animation-timing), transform var(--consent-banner-animation-duration) var(--c15t-easing-spring);transform:translateY(0)}.c15t-ui-bannerHidden-R0_3M:not(.headless){opacity:0;transition:opacity var(--consent-banner-animation-duration) var(--consent-banner-animation-timing), transform var(--consent-banner-animation-duration) var(--consent-banner-animation-timing);transform:translateY(50px)}@starting-style{.c15t-ui-bannerEntering-Cqrwl:not(.headless){opacity:0;transform:translateY(50px)}}@media (width>=640px){.c15t-ui-root-p7SV0:not(.headless){width:auto;padding:1.5rem}}.c15t-ui-root-p7SV0[data-position=bottom-left]:not(.headless){bottom:0;left:0}.c15t-ui-root-p7SV0[data-position=bottom-right]:not(.headless){bottom:0;right:0}.c15t-ui-root-p7SV0[data-position=top-left]:not(.headless){top:0;left:0}.c15t-ui-root-p7SV0[data-position=top-right]:not(.headless){top:0;right:0}.c15t-ui-root-p7SV0[data-variant=floating][data-position=bottom-center]:not(.headless){inset-inline:0;width:fit-content;margin-inline:auto;bottom:0}.c15t-ui-root-p7SV0[data-variant=floating][data-position=top-center]:not(.headless){inset-inline:0;width:fit-content;margin-inline:auto;top:0}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless){width:100%;padding:0;left:0;right:0}.c15t-ui-root-p7SV0[data-variant=bar][data-position=bottom]:not(.headless){top:auto;bottom:0}.c15t-ui-root-p7SV0[data-variant=bar][data-position=top]:not(.headless){top:0;bottom:auto}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-cardShell-djyPy{width:100%;max-width:none}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-card-lgjVq{box-shadow:var(--consent-banner-shadow);border-width:0;border-radius:0}.c15t-ui-root-p7SV0[data-variant=bar][data-position=bottom]:not(.headless) .c15t-ui-card-lgjVq{border-top-width:var(--consent-banner-border-width);padding-bottom:env(safe-area-inset-bottom);border-top-style:solid}.c15t-ui-root-p7SV0[data-variant=bar][data-position=top]:not(.headless) .c15t-ui-card-lgjVq{border-bottom-width:var(--consent-banner-border-width);border-bottom-style:solid}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-cardShell-djyPy>[data-variant=banner-tag]{margin-inline-end:1.5rem}.c15t-ui-root-p7SV0[data-variant=bar][data-position=top]:not(.headless) .c15t-ui-cardShell-djyPy>[data-variant=banner-tag]{border-top-width:0;border-bottom-width:1px;border-radius:0 0 .75rem .75rem;order:1;margin-block:-1px 0}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-footer-JhJAe{flex-direction:column;align-items:stretch;gap:.75rem}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-footer-JhJAe .c15t-ui-rights-wZg5K{flex-direction:column;align-items:flex-start}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-footer-JhJAe button[data-action]:not(.c15t-ui-rightLink-IXsSJ){flex:auto;width:100%;min-width:0}@media (width>=640px){.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-footer-JhJAe{flex-direction:row;justify-content:space-between;align-items:center}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-footer-JhJAe .c15t-ui-rights-wZg5K{flex-flow:wrap;align-items:center;margin-inline-end:auto}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-footer-JhJAe>*{width:auto}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-footer-JhJAe button[data-action]:not(.c15t-ui-rightLink-IXsSJ){flex:none;width:auto}}@media (width>=1024px){.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-card-lgjVq{flex-direction:row;align-items:center;display:flex}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-header-S6GiJ{flex:auto;min-width:0}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-footer-JhJAe{background-color:#0000;width:auto;min-width:0}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-card-lgjVq>:not([hidden])~:not([hidden]){border-top-width:0}}:is(.c15t-ui-root-p7SV0[data-variant=floating][data-position$=-right]:not(.headless) .c15t-ui-cardShell-djyPy,.c15t-ui-root-p7SV0[data-variant=widget][data-position$=-right]:not(.headless) .c15t-ui-cardShell-djyPy){margin-left:auto;margin-right:0}:is(.c15t-ui-root-p7SV0[data-variant=floating][data-position$=-left]:not(.headless) .c15t-ui-cardShell-djyPy,.c15t-ui-root-p7SV0[data-variant=widget][data-position$=-left]:not(.headless) .c15t-ui-cardShell-djyPy){margin-left:0;margin-right:auto}.c15t-ui-root-p7SV0[data-variant=floating][data-position$=-center]:not(.headless) .c15t-ui-cardShell-djyPy{margin-left:auto;margin-right:auto}.c15t-ui-root-p7SV0[data-variant=widget]:not(.headless){padding:.75rem}@media (width>=640px){.c15t-ui-root-p7SV0[data-variant=widget]:not(.headless){padding:1rem}}.c15t-ui-root-p7SV0[data-variant=widget]:not(.headless) .c15t-ui-cardShell-djyPy{width:min(calc(100vw - 1.5rem), var(--consent-banner-widget-max-width))}.c15t-ui-root-p7SV0[data-variant=widget]:not(.headless) .c15t-ui-header-S6GiJ{padding:.75rem}.c15t-ui-root-p7SV0[data-variant=widget]:not(.headless) .c15t-ui-title-vm8nL{font-size:.875rem;line-height:1.25rem}.c15t-ui-root-p7SV0[data-variant=widget]:not(.headless) .c15t-ui-description-s8Qhg{font-size:.8125rem;line-height:1.125rem}.c15t-ui-root-p7SV0[data-variant=widget]:not(.headless) .c15t-ui-footer-JhJAe{gap:.5rem;padding:.75rem}.c15t-ui-root-p7SV0[data-variant=widget]:not(.headless) .c15t-ui-footer-JhJAe button[data-action]:not(.c15t-ui-rightLink-IXsSJ){padding:.5rem .75rem}.c15t-ui-root-p7SV0[data-variant=widget]:not(.headless) .c15t-ui-footer-JhJAe .c15t-ui-rightLink-IXsSJ{font-size:.8125rem;line-height:1.125rem}.c15t-ui-root-p7SV0[data-variant=wall]:not(.headless){place-items:center;width:auto;padding:1rem;display:grid;inset:0}.c15t-ui-root-p7SV0[data-variant=wall]:not(.headless) .c15t-ui-cardShell-djyPy{width:min(calc(100vw - 2rem), var(--consent-banner-wall-max-width))}.c15t-ui-card-lgjVq:not(.headless){border-radius:var(--consent-banner-border-radius);border-width:var(--consent-banner-border-width);border-style:solid;border-color:var(--consent-banner-border-color);background-color:var(--consent-banner-background-color);width:100%;box-shadow:var(--consent-banner-shadow);position:relative;overflow:hidden}.c15t-ui-cardShell-djyPy:not(.headless){width:min(calc(100vw - 2rem), var(--consent-banner-max-width));flex-direction:column;display:flex;container:c15t-banner/inline-size}@media (width>=640px){.c15t-ui-cardShell-djyPy:not(.headless){width:min(calc(100vw - 3rem), var(--consent-banner-max-width))}}.c15t-dark .c15t-ui-card-lgjVq:not(.headless){background-color:var(--consent-banner-background-color-dark);border-color:var(--consent-banner-border-color-dark);box-shadow:var(--consent-banner-shadow-dark)}.c15t-dark .c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-card-lgjVq{box-shadow:var(--consent-banner-shadow-dark)}.c15t-ui-card-lgjVq:not(.headless)>:not([hidden])~:not([hidden]){border-top-width:var(--consent-banner-border-width);border-top-style:solid;border-color:var(--consent-banner-border-color)}.c15t-dark .c15t-ui-card-lgjVq:not(.headless)>:not([hidden])~:not([hidden]){border-color:var(--consent-banner-border-color-dark)}.c15t-ui-card-lgjVq:not(.headless):focus{outline:none}.c15t-ui-header-S6GiJ:not(.headless){color:var(--consent-banner-text-color);flex-direction:column;padding:1rem;display:flex}.c15t-dark .c15t-ui-header-S6GiJ:not(.headless){color:var(--consent-banner-text-color-dark)}@media (width>=640px){.c15t-ui-header-S6GiJ:not(.headless){padding:1.5rem}}.c15t-ui-header-S6GiJ:not(.headless)>:not([hidden])~:not([hidden]){--consent-banner-space-y-reverse:0;margin-top:calc(.5rem * calc(1 - var(--consent-banner-space-y-reverse)));margin-bottom:calc(.5rem * var(--consent-banner-space-y-reverse))}.c15t-ui-footer-JhJAe:not(.headless){background-color:var(--consent-banner-footer-background-color);flex-direction:column;justify-content:space-between;gap:.75rem;padding:1rem 1.25rem;display:flex}.c15t-dark .c15t-ui-footer-JhJAe:not(.headless){background-color:var(--consent-banner-footer-background-color-dark)}@media (width>=640px){.c15t-ui-footer-JhJAe:not(.headless){flex-direction:row}}.c15t-ui-rights-wZg5K:not(.headless){flex-flow:wrap;align-items:center;gap:.75rem;min-width:0;display:flex}.c15t-ui-rightLink-IXsSJ:not(.headless){width:auto;font:inherit;font-family:var(--consent-banner-font-family);letter-spacing:-.006em;color:var(--consent-banner-description-color);text-underline-offset:.15em;text-align:start;cursor:pointer;border-radius:var(--consent-banner-border-radius-sm);touch-action:manipulation;background:0 0;border:0;flex:none;align-self:center;margin:0;padding:0;font-size:.875rem;font-weight:400;line-height:1.25rem;text-decoration:underline;display:inline-block}.c15t-ui-rightLink-IXsSJ:not(.headless):hover{color:var(--consent-banner-text-color)}.c15t-ui-rightLink-IXsSJ:not(.headless):focus-visible{box-shadow:var(--button-shadow-primary-focus,0 0 0 2px var(--c15t-primary));outline:none}.c15t-dark .c15t-ui-rightLink-IXsSJ:not(.headless){color:var(--consent-banner-description-color-dark)}.c15t-dark .c15t-ui-rightLink-IXsSJ:not(.headless):hover{color:var(--consent-banner-text-color-dark)}.c15t-dark .c15t-ui-rightLink-IXsSJ:not(.headless):focus-visible{box-shadow:var(--button-shadow-primary-focus-dark,0 0 0 2px var(--c15t-primary))}.c15t-ui-root-p7SV0[data-prompt=notice]:not(.headless) .c15t-ui-footer-JhJAe{flex-direction:column;align-items:stretch;gap:.75rem}.c15t-ui-root-p7SV0[data-prompt=notice]:not(.headless) .c15t-ui-footer-JhJAe .c15t-ui-rights-wZg5K{flex-direction:column;align-items:flex-start;gap:.5rem}.c15t-ui-root-p7SV0[data-prompt=notice]:not(.headless) .c15t-ui-footer-JhJAe button[data-action]:not(.c15t-ui-rightLink-IXsSJ){flex:auto;width:100%;min-width:0}.c15t-ui-root-p7SV0[data-prompt=notice]:not(.headless) .c15t-ui-footer-JhJAe .c15t-ui-rightLink-IXsSJ{flex:none;align-self:flex-start;width:auto}@media (width>=640px){.c15t-ui-root-p7SV0[data-prompt=notice]:not(.headless) .c15t-ui-footer-JhJAe{flex-direction:row;justify-content:space-between;align-items:center;gap:.75rem}.c15t-ui-root-p7SV0[data-prompt=notice]:not(.headless) .c15t-ui-footer-JhJAe .c15t-ui-rights-wZg5K{flex-flow:wrap;flex:auto;align-items:center;gap:.75rem;min-width:0}.c15t-ui-root-p7SV0[data-prompt=notice]:not(.headless) .c15t-ui-footer-JhJAe>*{width:auto}.c15t-ui-root-p7SV0[data-prompt=notice]:not(.headless) .c15t-ui-footer-JhJAe button[data-action]:not(.c15t-ui-rightLink-IXsSJ){flex:none;width:auto}.c15t-ui-root-p7SV0[data-prompt=notice]:not(.headless) .c15t-ui-footer-JhJAe .c15t-ui-rightLink-IXsSJ{align-self:center}}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-header-S6GiJ,.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-footer-JhJAe{padding:.75rem 1rem}@media (width>=640px){.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-header-S6GiJ{padding:1rem 1.5rem}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-footer-JhJAe{padding:.75rem 1.5rem}}@media (width>=1024px){.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-header-S6GiJ{padding:.75rem 1.5rem}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-header-S6GiJ>:not([hidden])~:not([hidden]){margin-top:.25rem}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-title-vm8nL{line-height:1.25rem}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-footer-JhJAe{flex:none;gap:.75rem}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-footer-JhJAe .c15t-ui-rights-wZg5K{flex-flow:row;flex:none;align-items:center;gap:.75rem;margin-inline-end:0}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-footer-JhJAe .c15t-ui-rightLink-IXsSJ{white-space:nowrap;font-size:.8125rem;line-height:1.125rem}}.c15t-ui-description-s8Qhg:not(.headless){letter-spacing:-.006em;color:var(--consent-banner-description-color);font-size:.875rem;font-weight:400;line-height:1.25rem}.c15t-dark .c15t-ui-description-s8Qhg:not(.headless){color:var(--consent-banner-description-color-dark)}.c15t-ui-description-s8Qhg[data-context=banner]:not(.headless){letter-spacing:-.006em;color:var(--consent-banner-description-color);font-size:.875rem;font-weight:400;line-height:1.25rem}.c15t-dark .c15t-ui-description-s8Qhg[data-context=banner]:not(.headless){color:var(--consent-banner-description-color-dark)}.c15t-ui-description-s8Qhg[data-context=dialog]:not(.headless){color:var(--consent-dialog-muted-color);font-size:var(--consent-dialog-description-font-size);font-weight:var(--consent-dialog-description-font-weight);line-height:var(--consent-dialog-description-line-height)}.c15t-dark .c15t-ui-description-s8Qhg[data-context=dialog]:not(.headless){color:var(--consent-dialog-muted-color-dark)}.c15t-ui-description-s8Qhg[data-context=manager]:not(.headless){color:var(--consent-manager-text-muted-color)}.c15t-dark .c15t-ui-description-s8Qhg[data-context=manager]:not(.headless){color:var(--consent-manager-text-muted-color-dark)}.c15t-ui-title-vm8nL:not(.headless){letter-spacing:-.011em;color:var(--consent-banner-title-color);margin:0;font-size:1rem;font-weight:500;line-height:1.5rem}.c15t-dark .c15t-ui-title-vm8nL:not(.headless){color:var(--consent-banner-title-color-dark)}.c15t-ui-overlay-DoHh4:not(.headless){background-color:var(--consent-banner-overlay-background-color);z-index:999997;position:fixed;inset:0}:is(.c15t-ui-overlayEnterActive-YGn_8:not(.headless),.c15t-ui-overlayLeaveActive-FvP5W:not(.headless)){transition:opacity var(--consent-banner-animation-duration) var(--consent-banner-animation-timing)}:is(.c15t-ui-overlayEnterFrom-OtDqj:not(.headless),.c15t-ui-overlayLeaveTo-V7aI7:not(.headless)){opacity:0}:is(.c15t-ui-overlayEnterTo-jcvNq:not(.headless),.c15t-ui-overlayLeaveFrom-EYTMT:not(.headless)){opacity:1}.c15t-ui-overlayVisible-ywHQp:not(.headless){opacity:1;transition:opacity var(--consent-banner-animation-duration) var(--consent-banner-animation-timing)}.c15t-ui-overlayHidden-WgrJC:not(.headless){opacity:0;transition:opacity var(--consent-banner-animation-duration) var(--consent-banner-animation-timing)}@starting-style{.c15t-ui-overlayEntering-p5Z3U:not(.headless){opacity:0}}.c15t-dark .c15t-ui-overlay-DoHh4:not(.headless){background-color:var(--consent-banner-overlay-background-color-dark)}@media (prefers-reduced-motion:reduce){:is(.c15t-ui-bannerEnterActive-IytGL:not(.headless),.c15t-ui-bannerLeaveActive-C7qrk:not(.headless),.c15t-ui-bannerVisible-AFth0:not(.headless),.c15t-ui-bannerHidden-R0_3M:not(.headless),.c15t-ui-overlayEnterActive-YGn_8:not(.headless),.c15t-ui-overlayLeaveActive-FvP5W:not(.headless),.c15t-ui-overlayVisible-ywHQp:not(.headless),.c15t-ui-overlayHidden-WgrJC:not(.headless)){transition:none;animation:none}}
69
+ .c15t-ui-root-p7SV0:not(.headless){box-sizing:border-box;z-index:999998;width:100%;font-family:var(--consent-banner-font-family);line-height:var(--consent-banner-line-height);-webkit-text-size-adjust:var(--consent-banner-text-size-adjust);-webkit-font-smoothing:antialiased;tab-size:var(--consent-banner-tab-size);flex-direction:column;padding:1rem;display:flex;position:fixed}:is(.c15t-ui-bannerEnterActive-IytGL:not(.headless),.c15t-ui-bannerEnterFrom-BJMc7:not(.headless),.c15t-ui-bannerEnterTo-yatsy:not(.headless),.c15t-ui-bannerEntering-Cqrwl:not(.headless),.c15t-ui-bannerLeaveFrom-RVGoD:not(.headless),.c15t-ui-bannerVisible-AFth0:not(.headless)){opacity:1}.c15t-ui-bannerEntering-Cqrwl[data-entry=late]:not(.c15t-ui-bannerHidden-R0_3M):not(.headless){transition:opacity var(--consent-banner-entry-duration) var(--consent-banner-entry-timing)}@starting-style{.c15t-ui-bannerEntering-Cqrwl[data-entry=late]:not(.headless){opacity:0}}.c15t-ui-bannerLeaveActive-C7qrk:not(.headless){transition:opacity var(--consent-banner-animation-duration) var(--consent-banner-animation-timing)}.c15t-ui-bannerLeaveTo-dXNcB:not(.headless){opacity:0}.c15t-ui-bannerHidden-R0_3M:not(.headless){opacity:0;transition:opacity var(--consent-banner-animation-duration) var(--consent-banner-animation-timing)}@media (width>=640px){.c15t-ui-root-p7SV0:not(.headless){width:auto;padding:1.5rem}}.c15t-ui-root-p7SV0[data-position=bottom-left]:not(.headless){bottom:0;left:0}.c15t-ui-root-p7SV0[data-position=bottom-right]:not(.headless){bottom:0;right:0}.c15t-ui-root-p7SV0[data-position=top-left]:not(.headless){top:0;left:0}.c15t-ui-root-p7SV0[data-position=top-right]:not(.headless){top:0;right:0}.c15t-ui-root-p7SV0[data-variant=floating][data-position=bottom-center]:not(.headless){inset-inline:0;width:fit-content;margin-inline:auto;bottom:0}.c15t-ui-root-p7SV0[data-variant=floating][data-position=top-center]:not(.headless){inset-inline:0;width:fit-content;margin-inline:auto;top:0}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless){width:100%;padding:0;left:0;right:0}.c15t-ui-root-p7SV0[data-variant=bar][data-position=bottom]:not(.headless){top:auto;bottom:0}.c15t-ui-root-p7SV0[data-variant=bar][data-position=top]:not(.headless){top:0;bottom:auto}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-cardShell-djyPy{width:100%;max-width:none}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-card-lgjVq{box-shadow:var(--consent-banner-shadow);border-width:0;border-radius:0}.c15t-ui-root-p7SV0[data-variant=bar][data-position=bottom]:not(.headless) .c15t-ui-card-lgjVq{border-top-width:var(--consent-banner-border-width);padding-bottom:env(safe-area-inset-bottom);border-top-style:solid}.c15t-ui-root-p7SV0[data-variant=bar][data-position=top]:not(.headless) .c15t-ui-card-lgjVq{border-bottom-width:var(--consent-banner-border-width);border-bottom-style:solid}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-cardShell-djyPy>[data-variant=banner-tag]{margin-inline-end:1.5rem}.c15t-ui-root-p7SV0[data-variant=bar][data-position=top]:not(.headless) .c15t-ui-cardShell-djyPy>[data-variant=banner-tag]{border-top-width:0;border-bottom-width:1px;border-radius:0 0 .75rem .75rem;order:1;margin-block:-1px 0}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-footer-JhJAe{flex-direction:column;align-items:stretch;gap:.75rem}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-footer-JhJAe .c15t-ui-rights-wZg5K{flex-direction:column;align-items:flex-start}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-footer-JhJAe button[data-action]:not(.c15t-ui-rightLink-IXsSJ){flex:auto;width:100%;min-width:0}@media (width>=640px){.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-footer-JhJAe{flex-direction:row;justify-content:space-between;align-items:center}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-footer-JhJAe .c15t-ui-rights-wZg5K{flex-flow:wrap;align-items:center;margin-inline-end:auto}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-footer-JhJAe>*{width:auto}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-footer-JhJAe button[data-action]:not(.c15t-ui-rightLink-IXsSJ){flex:none;width:auto}}@media (width>=1024px){.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-card-lgjVq{flex-direction:row;align-items:center;display:flex}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-header-S6GiJ{flex:auto;min-width:0}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-footer-JhJAe{background-color:#0000;width:auto;min-width:0}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-card-lgjVq>:not([hidden])~:not([hidden]){border-top-width:0}}:is(.c15t-ui-root-p7SV0[data-variant=floating][data-position$=-right]:not(.headless) .c15t-ui-cardShell-djyPy,.c15t-ui-root-p7SV0[data-variant=widget][data-position$=-right]:not(.headless) .c15t-ui-cardShell-djyPy){margin-left:auto;margin-right:0}:is(.c15t-ui-root-p7SV0[data-variant=floating][data-position$=-left]:not(.headless) .c15t-ui-cardShell-djyPy,.c15t-ui-root-p7SV0[data-variant=widget][data-position$=-left]:not(.headless) .c15t-ui-cardShell-djyPy){margin-left:0;margin-right:auto}.c15t-ui-root-p7SV0[data-variant=floating][data-position$=-center]:not(.headless) .c15t-ui-cardShell-djyPy{margin-left:auto;margin-right:auto}.c15t-ui-root-p7SV0[data-variant=widget]:not(.headless){padding:.75rem}@media (width>=640px){.c15t-ui-root-p7SV0[data-variant=widget]:not(.headless){padding:1rem}}.c15t-ui-root-p7SV0[data-variant=widget]:not(.headless) .c15t-ui-cardShell-djyPy{width:min(calc(100vw - 1.5rem), var(--consent-banner-widget-max-width))}.c15t-ui-root-p7SV0[data-variant=widget]:not(.headless) .c15t-ui-header-S6GiJ{padding:.75rem}.c15t-ui-root-p7SV0[data-variant=widget]:not(.headless) .c15t-ui-title-vm8nL{font-size:.875rem;line-height:1.25rem}.c15t-ui-root-p7SV0[data-variant=widget]:not(.headless) .c15t-ui-description-s8Qhg{font-size:.8125rem;line-height:1.125rem}.c15t-ui-root-p7SV0[data-variant=widget]:not(.headless) .c15t-ui-footer-JhJAe{gap:.5rem;padding:.75rem}.c15t-ui-root-p7SV0[data-variant=widget]:not(.headless) .c15t-ui-footer-JhJAe button[data-action]:not(.c15t-ui-rightLink-IXsSJ){padding:.5rem .75rem}.c15t-ui-root-p7SV0[data-variant=widget]:not(.headless) .c15t-ui-footer-JhJAe .c15t-ui-rightLink-IXsSJ{font-size:.8125rem;line-height:1.125rem}.c15t-ui-root-p7SV0[data-variant=wall]:not(.headless){place-items:center;width:auto;padding:1rem;display:grid;inset:0}.c15t-ui-root-p7SV0[data-variant=wall]:not(.headless) .c15t-ui-cardShell-djyPy{width:min(calc(100vw - 2rem), var(--consent-banner-wall-max-width))}.c15t-ui-card-lgjVq:not(.headless){border-radius:var(--consent-banner-border-radius);border-width:var(--consent-banner-border-width);border-style:solid;border-color:var(--consent-banner-border-color);background-color:var(--consent-banner-background-color);width:100%;box-shadow:var(--consent-banner-shadow);position:relative;overflow:hidden}.c15t-ui-cardShell-djyPy:not(.headless){width:min(calc(100vw - 2rem), var(--consent-banner-max-width));flex-direction:column;display:flex;container:c15t-banner/inline-size}@media (width>=640px){.c15t-ui-cardShell-djyPy:not(.headless){width:min(calc(100vw - 3rem), var(--consent-banner-max-width))}}.c15t-dark .c15t-ui-card-lgjVq:not(.headless){background-color:var(--consent-banner-background-color-dark);border-color:var(--consent-banner-border-color-dark);box-shadow:var(--consent-banner-shadow-dark)}.c15t-dark .c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-card-lgjVq{box-shadow:var(--consent-banner-shadow-dark)}.c15t-ui-card-lgjVq:not(.headless)>:not([hidden])~:not([hidden]){border-top-width:var(--consent-banner-border-width);border-top-style:solid;border-color:var(--consent-banner-border-color)}.c15t-dark .c15t-ui-card-lgjVq:not(.headless)>:not([hidden])~:not([hidden]){border-color:var(--consent-banner-border-color-dark)}.c15t-ui-card-lgjVq:not(.headless):focus{outline:none}.c15t-ui-header-S6GiJ:not(.headless){color:var(--consent-banner-text-color);flex-direction:column;padding:1rem;display:flex}.c15t-dark .c15t-ui-header-S6GiJ:not(.headless){color:var(--consent-banner-text-color-dark)}@media (width>=640px){.c15t-ui-header-S6GiJ:not(.headless){padding:1.5rem}}.c15t-ui-header-S6GiJ:not(.headless)>:not([hidden])~:not([hidden]){--consent-banner-space-y-reverse:0;margin-top:calc(.5rem * calc(1 - var(--consent-banner-space-y-reverse)));margin-bottom:calc(.5rem * var(--consent-banner-space-y-reverse))}.c15t-ui-footer-JhJAe:not(.headless){background-color:var(--consent-banner-footer-background-color);flex-direction:column;justify-content:space-between;gap:.75rem;padding:1rem 1.25rem;display:flex}.c15t-dark .c15t-ui-footer-JhJAe:not(.headless){background-color:var(--consent-banner-footer-background-color-dark)}@media (width>=640px){.c15t-ui-footer-JhJAe:not(.headless){flex-direction:row}}.c15t-ui-rights-wZg5K:not(.headless){flex-flow:wrap;align-items:center;gap:.75rem;min-width:0;display:flex}.c15t-ui-rightLink-IXsSJ:not(.headless){width:auto;font:inherit;font-family:var(--consent-banner-font-family);letter-spacing:-.006em;color:var(--consent-banner-description-color);text-underline-offset:.15em;text-align:start;cursor:pointer;border-radius:var(--consent-banner-border-radius-sm);touch-action:manipulation;background:0 0;border:0;flex:none;align-self:center;margin:0;padding:0;font-size:.875rem;font-weight:400;line-height:1.25rem;text-decoration:underline;display:inline-block}.c15t-ui-rightLink-IXsSJ:not(.headless):hover{color:var(--consent-banner-text-color)}.c15t-ui-rightLink-IXsSJ:not(.headless):focus-visible{box-shadow:var(--button-shadow-primary-focus,0 0 0 2px var(--c15t-primary));outline:none}.c15t-dark .c15t-ui-rightLink-IXsSJ:not(.headless){color:var(--consent-banner-description-color-dark)}.c15t-dark .c15t-ui-rightLink-IXsSJ:not(.headless):hover{color:var(--consent-banner-text-color-dark)}.c15t-dark .c15t-ui-rightLink-IXsSJ:not(.headless):focus-visible{box-shadow:var(--button-shadow-primary-focus-dark,0 0 0 2px var(--c15t-primary))}.c15t-ui-root-p7SV0[data-prompt=notice]:not(.headless) .c15t-ui-footer-JhJAe{flex-direction:column;align-items:stretch;gap:.75rem}.c15t-ui-root-p7SV0[data-prompt=notice]:not(.headless) .c15t-ui-footer-JhJAe .c15t-ui-rights-wZg5K{flex-direction:column;align-items:flex-start;gap:.5rem}.c15t-ui-root-p7SV0[data-prompt=notice]:not(.headless) .c15t-ui-footer-JhJAe button[data-action]:not(.c15t-ui-rightLink-IXsSJ){flex:auto;width:100%;min-width:0}.c15t-ui-root-p7SV0[data-prompt=notice]:not(.headless) .c15t-ui-footer-JhJAe .c15t-ui-rightLink-IXsSJ{flex:none;align-self:flex-start;width:auto}@media (width>=640px){.c15t-ui-root-p7SV0[data-prompt=notice]:not(.headless) .c15t-ui-footer-JhJAe{flex-direction:row;justify-content:space-between;align-items:center;gap:.75rem}.c15t-ui-root-p7SV0[data-prompt=notice]:not(.headless) .c15t-ui-footer-JhJAe .c15t-ui-rights-wZg5K{flex-flow:wrap;flex:auto;align-items:center;gap:.75rem;min-width:0}.c15t-ui-root-p7SV0[data-prompt=notice]:not(.headless) .c15t-ui-footer-JhJAe>*{width:auto}.c15t-ui-root-p7SV0[data-prompt=notice]:not(.headless) .c15t-ui-footer-JhJAe button[data-action]:not(.c15t-ui-rightLink-IXsSJ){flex:none;width:auto}.c15t-ui-root-p7SV0[data-prompt=notice]:not(.headless) .c15t-ui-footer-JhJAe .c15t-ui-rightLink-IXsSJ{align-self:center}}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-header-S6GiJ,.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-footer-JhJAe{padding:.75rem 1rem}@media (width>=640px){.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-header-S6GiJ{padding:1rem 1.5rem}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-footer-JhJAe{padding:.75rem 1.5rem}}@media (width>=1024px){.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-header-S6GiJ{padding:.75rem 1.5rem}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-header-S6GiJ>:not([hidden])~:not([hidden]){margin-top:.25rem}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-title-vm8nL{line-height:1.25rem}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-footer-JhJAe{flex:none;gap:.75rem}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-footer-JhJAe .c15t-ui-rights-wZg5K{flex-flow:row;flex:none;align-items:center;gap:.75rem;margin-inline-end:0}.c15t-ui-root-p7SV0[data-variant=bar]:not(.headless) .c15t-ui-footer-JhJAe .c15t-ui-rightLink-IXsSJ{white-space:nowrap;font-size:.8125rem;line-height:1.125rem}}.c15t-ui-description-s8Qhg:not(.headless){letter-spacing:-.006em;color:var(--consent-banner-description-color);font-size:.875rem;font-weight:400;line-height:1.25rem}.c15t-dark .c15t-ui-description-s8Qhg:not(.headless){color:var(--consent-banner-description-color-dark)}.c15t-ui-description-s8Qhg[data-context=banner]:not(.headless){letter-spacing:-.006em;color:var(--consent-banner-description-color);font-size:.875rem;font-weight:400;line-height:1.25rem}.c15t-dark .c15t-ui-description-s8Qhg[data-context=banner]:not(.headless){color:var(--consent-banner-description-color-dark)}.c15t-ui-description-s8Qhg[data-context=dialog]:not(.headless){color:var(--consent-dialog-muted-color);font-size:var(--consent-dialog-description-font-size);font-weight:var(--consent-dialog-description-font-weight);line-height:var(--consent-dialog-description-line-height)}.c15t-dark .c15t-ui-description-s8Qhg[data-context=dialog]:not(.headless){color:var(--consent-dialog-muted-color-dark)}.c15t-ui-description-s8Qhg[data-context=manager]:not(.headless){color:var(--consent-manager-text-muted-color)}.c15t-dark .c15t-ui-description-s8Qhg[data-context=manager]:not(.headless){color:var(--consent-manager-text-muted-color-dark)}.c15t-ui-title-vm8nL:not(.headless){letter-spacing:-.011em;color:var(--consent-banner-title-color);margin:0;font-size:1rem;font-weight:500;line-height:1.5rem}.c15t-dark .c15t-ui-title-vm8nL:not(.headless){color:var(--consent-banner-title-color-dark)}.c15t-ui-overlay-DoHh4:not(.headless){background-color:var(--consent-banner-overlay-background-color);z-index:999997;position:fixed;inset:0}:is(.c15t-ui-overlayEnterActive-YGn_8:not(.headless),.c15t-ui-overlayEnterFrom-OtDqj:not(.headless),.c15t-ui-overlayEnterTo-jcvNq:not(.headless),.c15t-ui-overlayEntering-p5Z3U:not(.headless),.c15t-ui-overlayLeaveFrom-EYTMT:not(.headless),.c15t-ui-overlayVisible-ywHQp:not(.headless)){opacity:1}.c15t-ui-overlayEntering-p5Z3U[data-entry=late]:not(.c15t-ui-overlayHidden-WgrJC):not(.headless){transition:opacity var(--consent-banner-entry-duration) var(--consent-banner-entry-timing)}@starting-style{.c15t-ui-overlayEntering-p5Z3U[data-entry=late]:not(.headless){opacity:0}}.c15t-ui-overlayLeaveActive-FvP5W:not(.headless){transition:opacity var(--consent-banner-animation-duration) var(--consent-banner-animation-timing)}.c15t-ui-overlayLeaveTo-V7aI7:not(.headless){opacity:0}.c15t-ui-overlayHidden-WgrJC:not(.headless){opacity:0;transition:opacity var(--consent-banner-animation-duration) var(--consent-banner-animation-timing)}.c15t-dark .c15t-ui-overlay-DoHh4:not(.headless){background-color:var(--consent-banner-overlay-background-color-dark)}@media (prefers-reduced-motion:reduce){.c15t-ui-bannerEntering-Cqrwl[data-entry=late]:not(.c15t-ui-bannerHidden-R0_3M):not(.headless),.c15t-ui-overlayEntering-p5Z3U[data-entry=late]:not(.c15t-ui-overlayHidden-WgrJC):not(.headless),.c15t-ui-bannerLeaveActive-C7qrk:not(.headless),.c15t-ui-bannerHidden-R0_3M:not(.headless),.c15t-ui-overlayLeaveActive-FvP5W:not(.headless),.c15t-ui-overlayHidden-WgrJC:not(.headless){transition:none;animation:none}}
70
70
 
71
71
  /* components/accordion */
72
72
  .c15t-ui-list-T3EU0:not(.headless){gap:var(--accordion-stack-gap,.75rem);display:grid}.c15t-ui-item-Jgm_X:not(.headless){border:1px solid var(--accordion-border-color,var(--c15t-border));border-radius:var(--accordion-radius,var(--c15t-radius-md));box-shadow:none;background-color:var(--accordion-background-color,var(--c15t-surface));padding:0;display:grid;overflow:visible}.c15t-dark .c15t-ui-item-Jgm_X:not(.headless){border-color:var(--accordion-border-color-dark,var(--c15t-border));background-color:var(--accordion-background-color-dark,var(--c15t-surface))}.c15t-ui-triggerRow-xXdTH:not(.headless){align-items:center;gap:var(--accordion-gap,var(--c15t-space-xs));box-sizing:border-box;width:100%;padding:var(--accordion-padding,var(--c15t-space-sm));border-radius:var(--accordion-radius,var(--c15t-radius-md));color:var(--accordion-text-color,var(--c15t-text));transition:background-color var(--accordion-duration,var(--c15t-duration-normal)) var(--accordion-ease,var(--c15t-easing));background-color:#0000;border:0;grid-column:1/-1;grid-template-columns:minmax(0,1fr) auto;margin:0;display:grid}.c15t-ui-triggerRow-xXdTH:not(.headless):hover{background-color:var(--accordion-background-hover,var(--c15t-surface-hover))}.c15t-dark .c15t-ui-triggerRow-xXdTH:not(.headless){color:var(--accordion-text-color-dark,var(--c15t-text))}.c15t-dark .c15t-ui-triggerRow-xXdTH:not(.headless):hover{background-color:var(--accordion-background-hover-dark,var(--c15t-surface-hover))}.c15t-ui-item-Jgm_X:not(.headless):has(.c15t-ui-trigger-KT5J_:focus-visible){outline:2px solid var(--accordion-focus-ring,var(--c15t-primary));outline-offset:-2px}.c15t-dark .c15t-ui-item-Jgm_X:not(.headless):has(.c15t-ui-trigger-KT5J_:focus-visible){outline-color:var(--accordion-focus-ring-dark,var(--c15t-primary))}.c15t-ui-trigger-KT5J_:not(.headless):focus-visible{outline:none}.c15t-ui-item-Jgm_X:not(.headless)>.c15t-ui-content-qdPhy{grid-column:1/-1}.c15t-ui-trigger-KT5J_:not(.headless){appearance:none;align-items:center;gap:var(--accordion-gap,var(--c15t-space-xs));min-width:0;min-height:calc(var(--accordion-icon-size,1.25rem) + .25rem);font-family:inherit;font-size:var(--accordion-title-size,var(--c15t-font-size-sm));line-height:var(--c15t-line-height-tight);letter-spacing:inherit;font-weight:var(--c15t-font-weight-normal);border-radius:var(--accordion-radius,var(--c15t-radius-md));width:100%;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;flex:auto;align-self:stretch;padding:0;display:flex;position:relative}.c15t-ui-arrow-JFKgd:not(.headless){color:var(--accordion-arrow-color,color-mix(in srgb, var(--c15t-text-muted) 60%, var(--c15t-surface)));width:var(--accordion-icon-size,1.25rem);height:var(--accordion-icon-size,1.25rem);transition:transform var(--accordion-duration,var(--c15t-duration-normal)) var(--accordion-ease,var(--c15t-easing));flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.c15t-ui-arrow-JFKgd:not(.headless) svg{width:100%;height:100%;display:block}.c15t-dark .c15t-ui-arrow-JFKgd:not(.headless){color:var(--accordion-arrow-color-dark,color-mix(in srgb, var(--c15t-text-muted) 40%, var(--c15t-text)))}.c15t-ui-header-ogZie:not(.headless){flex-direction:column;flex:1;min-width:0;display:flex}.c15t-ui-title-vmC1f:not(.headless){font:inherit;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0}.c15t-ui-control-dy7nh:not(.headless){flex-shrink:0;align-self:center;position:relative;top:-1px}.c15t-ui-restriction-bXiI7:not(.headless){padding:0 var(--accordion-row-padding-x,var(--c15t-space-md)) .75rem;color:var(--accordion-restriction-color,var(--c15t-text-muted));font-size:var(--c15t-font-size-sm);line-height:var(--c15t-line-height-normal);grid-column:1/-1;margin:0;display:block}.c15t-ui-content-qdPhy:not(.headless){color:var(--accordion-content-color,color-mix(in srgb, var(--c15t-text-muted) 87%, var(--c15t-text)));letter-spacing:inherit;transition:grid-template-rows var(--accordion-duration,var(--c15t-duration-normal)) var(--accordion-ease,var(--c15t-easing));grid-template-rows:0fr;padding:0;font-size:.875rem;line-height:1.5;display:grid;overflow:hidden}.c15t-ui-content-qdPhy:not(.headless)[data-state=open]{grid-template-rows:1fr}.c15t-ui-content-qdPhy:not(.headless)[data-state=closed]{pointer-events:none}.c15t-ui-contentViewport-O2Kny:not(.headless){min-height:0;padding-top:0;padding-inline:calc(var(--accordion-icon-size,1.25rem) + var(--accordion-gap,var(--c15t-space-xs)));overflow:hidden}.c15t-ui-contentInner-b3ykf:not(.headless){opacity:1;transition:opacity calc(var(--accordion-duration,var(--c15t-duration-normal)) * .35) var(--c15t-easing-out);padding-top:0}.c15t-ui-content-qdPhy[data-state=open] .c15t-ui-contentViewport-O2Kny:not(.headless){padding-bottom:var(--accordion-padding,var(--c15t-space-sm))}.c15t-ui-content-qdPhy[data-state=closed] .c15t-ui-contentViewport-O2Kny:not(.headless){padding-bottom:0}.c15t-ui-content-qdPhy[data-state=closed] .c15t-ui-contentInner-b3ykf:not(.headless){opacity:0}.c15t-dark .c15t-ui-content-qdPhy:not(.headless){color:var(--accordion-content-color-dark,var(--c15t-text-muted))}:is([data-disable-animation] .c15t-ui-content-qdPhy:not(.headless),.disable-animation .c15t-ui-content-qdPhy:not(.headless)),:is([data-disable-animation] .c15t-ui-contentInner-b3ykf:not(.headless),.disable-animation .c15t-ui-contentInner-b3ykf:not(.headless)),:is([data-disable-animation] .c15t-ui-arrow-JFKgd:not(.headless),.disable-animation .c15t-ui-arrow-JFKgd:not(.headless)){transition:none}@media (prefers-reduced-motion:reduce){.c15t-ui-triggerRow-xXdTH:not(.headless),.c15t-ui-arrow-JFKgd:not(.headless),.c15t-ui-content-qdPhy:not(.headless),.c15t-ui-contentInner-b3ykf:not(.headless){transition:none}}
package/dist/version.js CHANGED
@@ -1 +1 @@
1
- let e="3.0.0-alpha.6";export{e as version};
1
+ let e="3.0.0-alpha.7";export{e as version};
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Whether a banner that shows now arrives after the page has painted.
3
+ *
4
+ * Decided once each time `shown` turns on, and held while it stays on, so a
5
+ * re-render never restarts the entry. A banner hydrated from server HTML is
6
+ * part of the first paint: the hook answers `false` while hydrating, which
7
+ * also keeps the markup matching the server's.
8
+ *
9
+ * @param shown - Whether the banner is rendered.
10
+ * @returns Whether to mark the mount `data-entry="late"`.
11
+ *
12
+ * @internal
13
+ */
14
+ export declare const useLateEntry: (shown: boolean) => boolean;
@@ -1,4 +1,4 @@
1
- import type { AllConsentNames, Callbacks, ClearOnRevocationConfig, ConsentExperiment, ConsentPresentation, ExperimentState, I18nConfig, KernelConfig, KernelOverrides, KernelUser, LegalLinks, ProviderTransportFactory, StorageConfig, User, Vendor } from '@c15t/core';
1
+ import type { AllConsentNames, Callbacks, ClearOnRevocationConfig, ConsentExperiment, ConsentJourneyOption, ConsentPresentation, ExperimentState, JourneyState, I18nConfig, KernelConfig, KernelOverrides, KernelUser, LegalLinks, ProviderTransportFactory, StorageConfig, User, Vendor } from '@c15t/core';
2
2
  import type { Script } from '@c15t/core/modules/script-loader';
3
3
  import type { ConsentControlOptions } from '@c15t/core/runtime';
4
4
  import type { ConsentRuntime, ConsentRuntimeModules, ResolveStreamedInit } from '@c15t/core/runtime/provider';
@@ -13,9 +13,10 @@ export type ConsentProviderCallbacks = Pick<Callbacks, 'onChoiceRecorded' | 'onP
13
13
  /**
14
14
  * Prepared policy and records; legacy consent projections are not provider
15
15
  * inputs. An `experiment` a server helper resolved runs instead of
16
- * `options.experiment`.
16
+ * `options.experiment`, and a `journey` it started is the one the provider
17
+ * continues.
17
18
  */
18
- export type ConsentProviderPrefetch = Omit<KernelConfig, 'initialDraft' | 'transport'> & ExperimentState;
19
+ export type ConsentProviderPrefetch = Omit<KernelConfig, 'initialDraft' | 'transport'> & ExperimentState & JourneyState;
19
20
  export interface ConsentProviderOptions extends ConsentControlOptions, Pick<ReactUIOptions, 'colorScheme' | 'disableAnimation' | 'noStyle' | 'scrollLock' | 'theme' | 'trapFocus'> {
20
21
  enabled?: boolean;
21
22
  presentation?: ConsentPresentation;
@@ -26,6 +27,13 @@ export interface ConsentProviderOptions extends ConsentControlOptions, Pick<Reac
26
27
  * provider to change the experiment.
27
28
  */
28
29
  experiment?: ConsentExperiment;
30
+ /**
31
+ * Random journey id that links each `/init` to the save that follows:
32
+ * `'page'`, `'tab'` or `false`. Initial-only.
33
+ *
34
+ * @default 'page'
35
+ */
36
+ journey?: ConsentJourneyOption;
29
37
  /**
30
38
  * Content Security Policy nonce applied to DOM nodes c15t injects.
31
39
  *
@@ -1 +1 @@
1
- export declare const version = "3.0.0-alpha.6";
1
+ export declare const version = "3.0.0-alpha.7";
@@ -14,7 +14,7 @@ to the alternatives it rules out.
14
14
  | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
15
15
  | Next.js App Router with a Next.js server | Server resolves consent from a build-time manifest and streams it to the page | [App Router](https://c15t.com/docs/frameworks/next/quickstart) |
16
16
  | Next.js App Router, banner must be in the first HTML | Await consent inside `Suspense` | [Stream or await](https://c15t.com/docs/frameworks/next/rendering#stream-or-await-consent-in-the-app-router) |
17
- | Next.js with static, ISR or `'use cache'` pages | Browser resolves consent on those pages | [Static, ISR and cached pages](https://c15t.com/docs/frameworks/next/rendering#render-static-isr-and-cached-pages) |
17
+ | Next.js with static, ISR, `'use cache'` or `ensureStatic = 'navigation'` pages | Browser resolves consent on those pages | [Static, ISR and cached pages](https://c15t.com/docs/frameworks/next/rendering#render-static-isr-and-cached-pages) |
18
18
  | Next.js Pages Router | Resolve consent in `getServerSideProps` | [Pages Router](https://c15t.com/docs/frameworks/next/rendering#pick-your-rendering-path) |
19
19
  | Next.js with `output: 'export'` | Browser resolves consent | [Static export](https://c15t.com/docs/frameworks/next/static-export) |
20
20
  | TanStack Start with a server | Root loader resolves consent on the server | [TanStack Start](https://c15t.com/docs/frameworks/tanstack-start/quickstart) |
@@ -99,6 +99,12 @@ backend that signs policy snapshot tokens rejects a replay made after the
99
99
  token expires, which is 30 minutes by default for the self-hosted backend. A
100
100
  save still queued by then is recorded only in the browser.
101
101
 
102
+ A replay that fails and stays queued emits `save:replayed` with `ok: false` but
103
+ not `command:error`, since the save already reported its first failure. A save
104
+ that leaves the queue without the backend recording it, because it ran out of
105
+ attempts, waited more than 7 days or was refused, emits `command:error` once.
106
+ Development builds also log a `[c15t]` console warning for each of these.
107
+
102
108
  IAB surfaces close in the click task too, but an IAB choice is recorded only
103
109
  after its TC string is encoded, which can wait for the TCF library to load.
104
110
  If that local step records nothing, for example because the vendor list
@@ -68,6 +68,40 @@ no identity; the visitor's IP address and user agent are forwarded under the
68
68
  backend's usual IP handling. Static output resolves in the browser and sends
69
69
  no report. Set `reportSessions: false` on an adapter to turn it off.
70
70
 
71
+ ## Link an init to the save that follows
72
+
73
+ Each page load gets a journey id, a random UUID sent on requests c15t already
74
+ makes:
75
+
76
+ | Request | Query parameters |
77
+ | ---------------- | ------------------------------------------------------------------------------------------------ |
78
+ | `GET /init` | `c15tJourney`, `c15tJourneyScope`, `c15tStored` (`1` if a choice or notice dismissal was stored) |
79
+ | `POST /subjects` | `c15tJourney`, `c15tJourneyScope` |
80
+
81
+ Session reports carry it as `journey: { id, scope, storedChoice, prompt, domain }`.
82
+ A report and a save with the same `id` belong to one page load. `prompt` is
83
+ `due`, `stored` or `not-required`; a page that falls back to the default opt-in
84
+ banner counts as `due` or `stored`. A stored answer counts as `stored` even if a
85
+ policy change makes c15t ask again.
86
+
87
+ The id is random, is never the subject id and is never written to a cookie.
88
+ Every save that carries one follows an `/init` or report with the same id.
89
+ Saves replayed after going offline carry none.
90
+
91
+ | `journey` | Behavior |
92
+ | ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
93
+ | `'page'` (default) | One id per page load, in memory. |
94
+ | `'tab'` | Kept in `sessionStorage` while a prompt is due, and removed once the visitor chooses or no prompt is due. Only when the browser resolves init; server-rendered pages use `'page'`. |
95
+ | `false` | No journey. |
96
+
97
+ Set it on the runtime or provider. In Next.js use `defineConsentConfig({ journey })`;
98
+ in TanStack Start pass the same value to `resolveConsent` and `ConsentRoot`; with
99
+ the inline prefetch script, pass it to `buildPrefetchScript`. Vue, Svelte, Astro
100
+ and the script tag use `'page'`. A manifest that resolves locally in the
101
+ browser reports no init, so it sends no journey.
102
+
103
+ If you pass `hosted()` a `fetch`, match on the path: URLs now carry a query string.
104
+
71
105
  ## What does regular `/init` do?
72
106
 
73
107
  `hosted({ url })` uses `${url}/init` for initialization and `${url}/subjects` for
@@ -8,20 +8,21 @@ group: customization
8
8
 
9
9
  ## Change the speed with motion tokens
10
10
 
11
- c15t animates its surfaces with three durations and four easing curves. Set
11
+ c15t animates its surfaces with three durations and five easing curves. Set
12
12
  them in the theme's `motion` object, or as CSS variables:
13
13
 
14
- | CSS variable | Theme key | Default | Used by |
15
- | ------------------------ | ------------------------ | -------------------------------------- | ----------------------------------------------- |
16
- | `--c15t-duration-fast` | `motion.duration.fast` | `80ms` | Banner, buttons, tabs |
17
- | `--c15t-duration-normal` | `motion.duration.normal` | `150ms` | Preference dialog, switches, accordions |
18
- | `--c15t-duration-slow` | `motion.duration.slow` | `200ms` | Legal links, floating trigger |
19
- | `--c15t-easing` | `motion.easing` | `cubic-bezier(0.4, 0, 0.2, 1)` | Banner fade, switches, accordions |
20
- | `--c15t-easing-out` | `motion.easingOut` | `cubic-bezier(0.215, 0.61, 0.355, 1)` | Preference dialog, floating trigger hover |
21
- | `--c15t-easing-in-out` | `motion.easingInOut` | `cubic-bezier(0.645, 0.045, 0.355, 1)` | Floating trigger snapping to a corner |
22
- | `--c15t-easing-spring` | `motion.easingSpring` | `cubic-bezier(0.34, 1.56, 0.64, 1)` | The banner's slide in and the dialog's scale in |
14
+ | CSS variable | Theme key | Default | Used by |
15
+ | ------------------------ | ------------------------ | ---------------------------------------- | -------------------------------------------------------------- |
16
+ | `--c15t-duration-fast` | `motion.duration.fast` | `80ms` | Banner fade out, buttons, tabs |
17
+ | `--c15t-duration-normal` | `motion.duration.normal` | `150ms` | Preference dialog, late banner fade in, switches, accordions |
18
+ | `--c15t-duration-slow` | `motion.duration.slow` | `200ms` | Legal links, floating trigger |
19
+ | `--c15t-easing` | `motion.easing` | `cubic-bezier(0.4, 0, 0.2, 1)` | Switches, accordions |
20
+ | `--c15t-easing-out` | `motion.easingOut` | `cubic-bezier(0.215, 0.61, 0.355, 1)` | Preference dialog, late banner fade in, floating trigger hover |
21
+ | `--c15t-easing-in` | `motion.easingIn` | `cubic-bezier(0.55, 0.055, 0.675, 0.19)` | Banner fade out |
22
+ | `--c15t-easing-in-out` | `motion.easingInOut` | `cubic-bezier(0.645, 0.045, 0.355, 1)` | Floating trigger snapping to a corner |
23
+ | `--c15t-easing-spring` | `motion.easingSpring` | `cubic-bezier(0.34, 1.56, 0.64, 1)` | The dialog's scale in |
23
24
 
24
- This theme slows the dialog down and removes the banner's overshoot:
25
+ This theme slows the dialog down and removes its overshoot:
25
26
 
26
27
  ```ts title="consent-theme.ts"
27
28
  export const theme = {
@@ -32,6 +33,14 @@ export const theme = {
32
33
  };
33
34
  ```
34
35
 
36
+ The banner never slides in. When it shows with the page, it is part of the
37
+ first paint and appears on its first frame. When it arrives more than 100ms
38
+ after the page first painted, such as after a slow script or a client-side
39
+ init, it fades in over `--c15t-duration-normal` instead, and its root and
40
+ backdrop carry `data-entry="late"`. A banner rendered on the server always
41
+ shows at once. When it hides, Vue, Svelte and the script tag fade it out over
42
+ `--c15t-duration-fast`.
43
+
35
44
  The theme goes where your framework's other tokens go. See
36
45
  [theme tokens](./tokens.md) and your framework's customize page.
37
46
  In Vue and Nuxt, set `tokens` with the variable name without the leading
@@ -39,8 +48,8 @@ In Vue and Nuxt, set `tokens` with the variable name without the leading
39
48
 
40
49
  ## Turn animations off
41
50
 
42
- `disableAnimation` removes the enter and exit transitions of the banner and
43
- dialogs, and the hover and snap transitions of the floating
51
+ `disableAnimation` removes the banner's fades, the enter and exit
52
+ transitions of the dialogs, and the hover and snap transitions of the floating
44
53
  `ConsentDialogTrigger`. Set it once for every surface, then override it for one
45
54
  surface where your framework allows:
46
55
 
@@ -130,6 +130,7 @@ easing tokens.
130
130
  | `--c15t-duration-slow` | `motion.duration.slow` | `200ms` |
131
131
  | `--c15t-easing` | `motion.easing` | `cubic-bezier(0.4, 0, 0.2, 1)` |
132
132
  | `--c15t-easing-out` | `motion.easingOut` | `cubic-bezier(0.215, 0.61, 0.355, 1)` |
133
+ | `--c15t-easing-in` | `motion.easingIn` | `cubic-bezier(0.55, 0.055, 0.675, 0.19)` |
133
134
  | `--c15t-easing-in-out` | `motion.easingInOut` | `cubic-bezier(0.645, 0.045, 0.355, 1)` |
134
135
  | `--c15t-easing-spring` | `motion.easingSpring` | `cubic-bezier(0.34, 1.56, 0.64, 1)` |
135
136
 
@@ -56,34 +56,35 @@ the provider to change them. `scripts`, `vendors`, `networkBlocker`,
56
56
  `iframeBlocker`, `consentCategories`, `overrides`, `user`, `callbacks` and
57
57
  `enabled` apply when they change.
58
58
 
59
- | Option | Purpose |
60
- | ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
61
- | `mode` | Required. `hosted({ url })` for a backend, `offline()` for local policies, or `custom()` for your own transport |
62
- | `prefetch` | Server-resolved state, or a promise of it, from a framework adapter's server helper |
63
- | `scripts` | Consent-gated vendor scripts. See [scripts and embeds](../scripts.md) |
64
- | `vendors` | Vendors listed under their category with their own switch. See [vendor consent](../vendor-consent.md) |
65
- | `scriptLoader` | Options for the script loader module |
66
- | `networkBlocker` | Rules that hold `fetch` and `XMLHttpRequest` calls until their category is allowed, or `false` |
67
- | `iframeBlocker` | Gates DOM iframes that carry `data-category`. On by default; `false` turns it off |
68
- | `persistence` | Stores the visitor's choice in a cookie and localStorage. On by default |
69
- | `storageConfig` | Storage key and cookie settings for the stored choice |
70
- | `clearOnRevocation` | Cookies and storage keys to delete when a category is denied |
71
- | `reloadOnConsentRevoked` | Reload the page after the visitor turns off a granted category or vendor. Defaults to `true` |
72
- | `consentCategories` | Categories the preference dialog offers alongside those your scripts use, within the policy's scope |
73
- | `overrides` | Force the country, region or language the policy is resolved for, for testing |
74
- | `user` | Link consent records to a signed-in user |
75
- | `callbacks` | Choice, permission and error events |
76
- | `i18n` | Languages and message overrides |
77
- | `legalLinks` | Privacy policy and other links shown in the banner and dialog |
78
- | `theme` | `consentActions` and slot styles. Tokens go through `ConsentTheme`; see [customize](../customize.md) |
79
- | `components` | Slot attributes per component part |
80
- | `presentation` | Banner and dialog shape, position and blocking |
81
- | `experiment` | A/B test of `presentation`, read once at mount. See [banner experiments](../../../guides/banner-experiments.md) |
82
- | `colorScheme` | `'light'`, `'dark'`, `'system'`, or `null` to leave the `c15t-dark` class alone |
83
- | `noStyle`, `disableAnimation` | Drop the built-in styles, or turn off animations |
84
- | `preloadDialog` | When the deferred `ConsentDialog` starts loading: `'idle'` (default) or `'intent'`; see [ConsentDialog](./consent-dialog.md#behavior) |
85
- | `nonce` | Content Security Policy nonce for script elements c15t inserts |
86
- | `enabled` | Set `false` only when you deliberately bypass consent enforcement |
59
+ | Option | Purpose |
60
+ | ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
61
+ | `mode` | Required. `hosted({ url })` for a backend, `offline()` for local policies, or `custom()` for your own transport |
62
+ | `prefetch` | Server-resolved state, or a promise of it, from a framework adapter's server helper |
63
+ | `scripts` | Consent-gated vendor scripts. See [scripts and embeds](../scripts.md) |
64
+ | `vendors` | Vendors listed under their category with their own switch. See [vendor consent](../vendor-consent.md) |
65
+ | `scriptLoader` | Options for the script loader module |
66
+ | `networkBlocker` | Rules that hold `fetch` and `XMLHttpRequest` calls until their category is allowed, or `false` |
67
+ | `iframeBlocker` | Gates DOM iframes that carry `data-category`. On by default; `false` turns it off |
68
+ | `persistence` | Stores the visitor's choice in a cookie and localStorage. On by default |
69
+ | `storageConfig` | Storage key and cookie settings for the stored choice |
70
+ | `clearOnRevocation` | Cookies and storage keys to delete when a category is denied |
71
+ | `reloadOnConsentRevoked` | Reload the page after the visitor turns off a granted category or vendor. Defaults to `true` |
72
+ | `consentCategories` | Categories the preference dialog offers alongside those your scripts use, within the policy's scope |
73
+ | `overrides` | Force the country, region or language the policy is resolved for, for testing |
74
+ | `user` | Link consent records to a signed-in user |
75
+ | `callbacks` | Choice, permission and error events |
76
+ | `i18n` | Languages and message overrides |
77
+ | `legalLinks` | Privacy policy and other links shown in the banner and dialog |
78
+ | `theme` | `consentActions` and slot styles. Tokens go through `ConsentTheme`; see [customize](../customize.md) |
79
+ | `components` | Slot attributes per component part |
80
+ | `presentation` | Banner and dialog shape, position and blocking |
81
+ | `experiment` | A/B test of `presentation`, read once at mount. See [banner experiments](../../../guides/banner-experiments.md) |
82
+ | `journey` | Random id that links each `/init` to the save that follows. See [session reports](../../../concepts/data-fetching.md#link-an-init-to-the-save-that-follows) |
83
+ | `colorScheme` | `'light'`, `'dark'`, `'system'`, or `null` to leave the `c15t-dark` class alone |
84
+ | `noStyle`, `disableAnimation` | Drop the built-in styles, or turn off animations |
85
+ | `preloadDialog` | When the deferred `ConsentDialog` starts loading: `'idle'` (default) or `'intent'`; see [ConsentDialog](./consent-dialog.md#behavior) |
86
+ | `nonce` | Content Security Policy nonce for script elements c15t inserts |
87
+ | `enabled` | Set `false` only when you deliberately bypass consent enforcement |
87
88
 
88
89
  `enabled: false` grants categories and allows gated loading while suppressing
89
90
  consent UI. It is not a way to fix failed initialization or hide a banner in
@@ -381,7 +381,7 @@ if (result.ok) {
381
381
  | `createSubject(input)` | `subjects.create(input)`. `givenAt` also takes a `Date`. |
382
382
  | `patchSubject(id, input)`, `subjects.patch(id, input)` | `subjects.identify(id, { externalId, identityProvider })` |
383
383
  | `listSubjects({ externalId })`, `subjects.list({ externalId })` | `subjects.list({ externalId })`, on a client with `apiKey` |
384
- | `checkConsent(query)`, `consent.check({ externalId, type: 'a,b' })` | `consents.check({ externalId, types: ['a', 'b'] })` |
384
+ | `checkConsent(query)`, `consent.check({ externalId, type: 'a,b' })` | `consents.check({ externalId, types: ['a', 'b'] })`, on a client with `apiKey` |
385
385
  | `ResponseContext` with `data: T \|null` | `{ ok: true, data } \|{ ok: false, error }`. Check `ok` first. |
386
386
  | `unwrap()`, `expect()` on the response | `unwrap(result)`, imported from `@c15t/node-sdk` |
387
387
  | `unwrapOr()`, `map()` on the response | Check `result.ok` |
@@ -399,6 +399,10 @@ if (result.ok) {
399
399
  responses, such as `givenAt` and `createdAt`, are now `Date` objects rather
400
400
  than strings.
401
401
 
402
+ `consents.check` and `subjects.list` count only verified links. Links made by
403
+ v2 don't count until you relink them with `subjects.identify` on a keyed
404
+ client, or [with an identity token](https://c15t.com/docs/self-host/api/node-sdk#verify-a-link-made-in-the-browser) on the user's next sign-in.
405
+
402
406
  The `node-sdk-to-v3` codemod renames the factory, client options, methods,
403
407
  types and errors in files that create a client. It turns `type` strings into
404
408
  `types` arrays, and leaves a `TODO(c15t v3)` comment at each call, because
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@c15t/react",
3
- "version": "3.0.0-alpha.6",
3
+ "version": "3.0.0-alpha.7",
4
4
  "description": "React cookie banner, consent manager, preference center, and headless CMP components with IAB TCF and Consent Mode support.",
5
5
  "keywords": [
6
6
  "ccpa",
@@ -254,16 +254,16 @@
254
254
  "test:watch": "bun prebuild && vitest"
255
255
  },
256
256
  "dependencies": {
257
- "@c15t/core": "3.0.0-alpha.6",
258
- "@c15t/dev-tools": "3.0.0-alpha.6",
259
- "@c15t/iab": "3.0.0-alpha.6",
260
- "@c15t/schema": "3.0.0-alpha.5",
257
+ "@c15t/core": "3.0.0-alpha.7",
258
+ "@c15t/dev-tools": "3.0.0-alpha.7",
259
+ "@c15t/iab": "3.0.0-alpha.7",
260
+ "@c15t/schema": "3.0.0-alpha.6",
261
261
  "@c15t/translations": "3.0.0-alpha.6",
262
- "@c15t/ui": "3.0.0-alpha.6",
262
+ "@c15t/ui": "3.0.0-alpha.7",
263
263
  "@types/google.maps": "3.65.3"
264
264
  },
265
265
  "devDependencies": {
266
- "@c15t/backend": "3.0.0-alpha.6",
266
+ "@c15t/backend": "3.0.0-alpha.7",
267
267
  "@c15t/conformance": "0.0.1",
268
268
  "@c15t/typescript-config": "0.0.1",
269
269
  "@c15t/vitest-config": "1.0.0",