@monetize.software/sdk-extension 3.0.0-alpha.15 → 3.0.0-alpha.17

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/dist/content.js CHANGED
@@ -1,12 +1,12 @@
1
- import { P as O, B as Re, E as De, c as ze, A as ce, w as Ne, a as X, r as qe, b as Fe } from "./chunks/chrome-port-KYVwww_u.js";
2
- import { render as J, h as ue, createContext as $e } from "preact";
3
- import { jsx as o, jsxs as u, Fragment as se } from "preact/jsx-runtime";
4
- import { useState as b, useEffect as P, useContext as Ve, useRef as R, useMemo as He, useLayoutEffect as Ge } from "preact/hooks";
5
- import { P as We } from "./chunks/port-name-ervLBWAQ.js";
6
- function Ze(r) {
1
+ import { P as L, B as Re, E as ze, c as qe, A as ue, w as Ne, a as J, r as Fe, b as $e } from "./chunks/chrome-port-DKsnkWLb.js";
2
+ import { render as Q, h as de, createContext as Ve } from "preact";
3
+ import { jsx as o, jsxs as u, Fragment as ae } from "preact/jsx-runtime";
4
+ import { useState as k, useEffect as P, useContext as He, useRef as D, useMemo as Ge, useLayoutEffect as We } from "preact/hooks";
5
+ import { P as Ze } from "./chunks/port-name-ervLBWAQ.js";
6
+ function Ye(r) {
7
7
  return `pw-offer-${r}-start`;
8
8
  }
9
- function $(r, e) {
9
+ function N(r, e) {
10
10
  if (!r || r.length === 0) return null;
11
11
  const t = r.find(
12
12
  (i) => i.price_id === e && (i.discount_percent ?? 0) > 0
@@ -15,13 +15,13 @@ function $(r, e) {
15
15
  (i) => i.price_id == null && (i.discount_percent ?? 0) > 0
16
16
  ) ?? null);
17
17
  }
18
- function Ye(r, e = {}) {
18
+ function Ke(r, e = {}) {
19
19
  const t = r.discount_percent ?? 0;
20
20
  if (t <= 0) return null;
21
- const n = e.now ?? Date.now(), i = Ke(r, e.readStart), s = Xe(r, i), a = i !== null ? Math.max(0, i - n) : null;
21
+ const n = e.now ?? Date.now(), i = Xe(r, e.readStart), s = Je(r, i), a = i !== null ? Math.max(0, i - n) : null;
22
22
  return i !== null && i <= n ? null : { offer: r, discountPercent: t, remainingMs: a, totalMs: s, expiresAt: i };
23
23
  }
24
- function Ke(r, e) {
24
+ function Xe(r, e) {
25
25
  if (r.expires_at) {
26
26
  const t = Date.parse(r.expires_at);
27
27
  return Number.isFinite(t) ? t : null;
@@ -34,25 +34,25 @@ function Ke(r, e) {
34
34
  }
35
35
  return null;
36
36
  }
37
- function Xe(r, e) {
37
+ function Je(r, e) {
38
38
  return r.duration_minutes && r.duration_minutes > 0 ? r.duration_minutes * 6e4 : e !== null ? e - Date.now() : null;
39
39
  }
40
- function Je(r) {
40
+ function Qe(r) {
41
41
  if (typeof window > "u") return null;
42
42
  try {
43
- return window.localStorage.getItem(Ze(r));
43
+ return window.localStorage.getItem(Ye(r));
44
44
  } catch {
45
45
  return null;
46
46
  }
47
47
  }
48
- const _e = '@layer theme,base,components,utilities;@layer theme{@theme default{ --font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; --color-red-50: oklch(97.1% .013 17.38); --color-red-100: oklch(93.6% .032 17.717); --color-red-200: oklch(88.5% .062 18.334); --color-red-300: oklch(80.8% .114 19.571); --color-red-400: oklch(70.4% .191 22.216); --color-red-500: oklch(63.7% .237 25.331); --color-red-600: oklch(57.7% .245 27.325); --color-red-700: oklch(50.5% .213 27.518); --color-red-800: oklch(44.4% .177 26.899); --color-red-900: oklch(39.6% .141 25.723); --color-red-950: oklch(25.8% .092 26.042); --color-orange-50: oklch(98% .016 73.684); --color-orange-100: oklch(95.4% .038 75.164); --color-orange-200: oklch(90.1% .076 70.697); --color-orange-300: oklch(83.7% .128 66.29); --color-orange-400: oklch(75% .183 55.934); --color-orange-500: oklch(70.5% .213 47.604); --color-orange-600: oklch(64.6% .222 41.116); --color-orange-700: oklch(55.3% .195 38.402); --color-orange-800: oklch(47% .157 37.304); --color-orange-900: oklch(40.8% .123 38.172); --color-orange-950: oklch(26.6% .079 36.259); --color-amber-50: oklch(98.7% .022 95.277); --color-amber-100: oklch(96.2% .059 95.617); --color-amber-200: oklch(92.4% .12 95.746); --color-amber-300: oklch(87.9% .169 91.605); --color-amber-400: oklch(82.8% .189 84.429); --color-amber-500: oklch(76.9% .188 70.08); --color-amber-600: oklch(66.6% .179 58.318); --color-amber-700: oklch(55.5% .163 48.998); --color-amber-800: oklch(47.3% .137 46.201); --color-amber-900: oklch(41.4% .112 45.904); --color-amber-950: oklch(27.9% .077 45.635); --color-yellow-50: oklch(98.7% .026 102.212); --color-yellow-100: oklch(97.3% .071 103.193); --color-yellow-200: oklch(94.5% .129 101.54); --color-yellow-300: oklch(90.5% .182 98.111); --color-yellow-400: oklch(85.2% .199 91.936); --color-yellow-500: oklch(79.5% .184 86.047); --color-yellow-600: oklch(68.1% .162 75.834); --color-yellow-700: oklch(55.4% .135 66.442); --color-yellow-800: oklch(47.6% .114 61.907); --color-yellow-900: oklch(42.1% .095 57.708); --color-yellow-950: oklch(28.6% .066 53.813); --color-lime-50: oklch(98.6% .031 120.757); --color-lime-100: oklch(96.7% .067 122.328); --color-lime-200: oklch(93.8% .127 124.321); --color-lime-300: oklch(89.7% .196 126.665); --color-lime-400: oklch(84.1% .238 128.85); --color-lime-500: oklch(76.8% .233 130.85); --color-lime-600: oklch(64.8% .2 131.684); --color-lime-700: oklch(53.2% .157 131.589); --color-lime-800: oklch(45.3% .124 130.933); --color-lime-900: oklch(40.5% .101 131.063); --color-lime-950: oklch(27.4% .072 132.109); --color-green-50: oklch(98.2% .018 155.826); --color-green-100: oklch(96.2% .044 156.743); --color-green-200: oklch(92.5% .084 155.995); --color-green-300: oklch(87.1% .15 154.449); --color-green-400: oklch(79.2% .209 151.711); --color-green-500: oklch(72.3% .219 149.579); --color-green-600: oklch(62.7% .194 149.214); --color-green-700: oklch(52.7% .154 150.069); --color-green-800: oklch(44.8% .119 151.328); --color-green-900: oklch(39.3% .095 152.535); --color-green-950: oklch(26.6% .065 152.934); --color-emerald-50: oklch(97.9% .021 166.113); --color-emerald-100: oklch(95% .052 163.051); --color-emerald-200: oklch(90.5% .093 164.15); --color-emerald-300: oklch(84.5% .143 164.978); --color-emerald-400: oklch(76.5% .177 163.223); --color-emerald-500: oklch(69.6% .17 162.48); --color-emerald-600: oklch(59.6% .145 163.225); --color-emerald-700: oklch(50.8% .118 165.612); --color-emerald-800: oklch(43.2% .095 166.913); --color-emerald-900: oklch(37.8% .077 168.94); --color-emerald-950: oklch(26.2% .051 172.552); --color-teal-50: oklch(98.4% .014 180.72); --color-teal-100: oklch(95.3% .051 180.801); --color-teal-200: oklch(91% .096 180.426); --color-teal-300: oklch(85.5% .138 181.071); --color-teal-400: oklch(77.7% .152 181.912); --color-teal-500: oklch(70.4% .14 182.503); --color-teal-600: oklch(60% .118 184.704); --color-teal-700: oklch(51.1% .096 186.391); --color-teal-800: oklch(43.7% .078 188.216); --color-teal-900: oklch(38.6% .063 188.416); --color-teal-950: oklch(27.7% .046 192.524); --color-cyan-50: oklch(98.4% .019 200.873); --color-cyan-100: oklch(95.6% .045 203.388); --color-cyan-200: oklch(91.7% .08 205.041); --color-cyan-300: oklch(86.5% .127 207.078); --color-cyan-400: oklch(78.9% .154 211.53); --color-cyan-500: oklch(71.5% .143 215.221); --color-cyan-600: oklch(60.9% .126 221.723); --color-cyan-700: oklch(52% .105 223.128); --color-cyan-800: oklch(45% .085 224.283); --color-cyan-900: oklch(39.8% .07 227.392); --color-cyan-950: oklch(30.2% .056 229.695); --color-sky-50: oklch(97.7% .013 236.62); --color-sky-100: oklch(95.1% .026 236.824); --color-sky-200: oklch(90.1% .058 230.902); --color-sky-300: oklch(82.8% .111 230.318); --color-sky-400: oklch(74.6% .16 232.661); --color-sky-500: oklch(68.5% .169 237.323); --color-sky-600: oklch(58.8% .158 241.966); --color-sky-700: oklch(50% .134 242.749); --color-sky-800: oklch(44.3% .11 240.79); --color-sky-900: oklch(39.1% .09 240.876); --color-sky-950: oklch(29.3% .066 243.157); --color-blue-50: oklch(97% .014 254.604); --color-blue-100: oklch(93.2% .032 255.585); --color-blue-200: oklch(88.2% .059 254.128); --color-blue-300: oklch(80.9% .105 251.813); --color-blue-400: oklch(70.7% .165 254.624); --color-blue-500: oklch(62.3% .214 259.815); --color-blue-600: oklch(54.6% .245 262.881); --color-blue-700: oklch(48.8% .243 264.376); --color-blue-800: oklch(42.4% .199 265.638); --color-blue-900: oklch(37.9% .146 265.522); --color-blue-950: oklch(28.2% .091 267.935); --color-indigo-50: oklch(96.2% .018 272.314); --color-indigo-100: oklch(93% .034 272.788); --color-indigo-200: oklch(87% .065 274.039); --color-indigo-300: oklch(78.5% .115 274.713); --color-indigo-400: oklch(67.3% .182 276.935); --color-indigo-500: oklch(58.5% .233 277.117); --color-indigo-600: oklch(51.1% .262 276.966); --color-indigo-700: oklch(45.7% .24 277.023); --color-indigo-800: oklch(39.8% .195 277.366); --color-indigo-900: oklch(35.9% .144 278.697); --color-indigo-950: oklch(25.7% .09 281.288); --color-violet-50: oklch(96.9% .016 293.756); --color-violet-100: oklch(94.3% .029 294.588); --color-violet-200: oklch(89.4% .057 293.283); --color-violet-300: oklch(81.1% .111 293.571); --color-violet-400: oklch(70.2% .183 293.541); --color-violet-500: oklch(60.6% .25 292.717); --color-violet-600: oklch(54.1% .281 293.009); --color-violet-700: oklch(49.1% .27 292.581); --color-violet-800: oklch(43.2% .232 292.759); --color-violet-900: oklch(38% .189 293.745); --color-violet-950: oklch(28.3% .141 291.089); --color-purple-50: oklch(97.7% .014 308.299); --color-purple-100: oklch(94.6% .033 307.174); --color-purple-200: oklch(90.2% .063 306.703); --color-purple-300: oklch(82.7% .119 306.383); --color-purple-400: oklch(71.4% .203 305.504); --color-purple-500: oklch(62.7% .265 303.9); --color-purple-600: oklch(55.8% .288 302.321); --color-purple-700: oklch(49.6% .265 301.924); --color-purple-800: oklch(43.8% .218 303.724); --color-purple-900: oklch(38.1% .176 304.987); --color-purple-950: oklch(29.1% .149 302.717); --color-fuchsia-50: oklch(97.7% .017 320.058); --color-fuchsia-100: oklch(95.2% .037 318.852); --color-fuchsia-200: oklch(90.3% .076 319.62); --color-fuchsia-300: oklch(83.3% .145 321.434); --color-fuchsia-400: oklch(74% .238 322.16); --color-fuchsia-500: oklch(66.7% .295 322.15); --color-fuchsia-600: oklch(59.1% .293 322.896); --color-fuchsia-700: oklch(51.8% .253 323.949); --color-fuchsia-800: oklch(45.2% .211 324.591); --color-fuchsia-900: oklch(40.1% .17 325.612); --color-fuchsia-950: oklch(29.3% .136 325.661); --color-pink-50: oklch(97.1% .014 343.198); --color-pink-100: oklch(94.8% .028 342.258); --color-pink-200: oklch(89.9% .061 343.231); --color-pink-300: oklch(82.3% .12 346.018); --color-pink-400: oklch(71.8% .202 349.761); --color-pink-500: oklch(65.6% .241 354.308); --color-pink-600: oklch(59.2% .249 .584); --color-pink-700: oklch(52.5% .223 3.958); --color-pink-800: oklch(45.9% .187 3.815); --color-pink-900: oklch(40.8% .153 2.432); --color-pink-950: oklch(28.4% .109 3.907); --color-rose-50: oklch(96.9% .015 12.422); --color-rose-100: oklch(94.1% .03 12.58); --color-rose-200: oklch(89.2% .058 10.001); --color-rose-300: oklch(81% .117 11.638); --color-rose-400: oklch(71.2% .194 13.428); --color-rose-500: oklch(64.5% .246 16.439); --color-rose-600: oklch(58.6% .253 17.585); --color-rose-700: oklch(51.4% .222 16.935); --color-rose-800: oklch(45.5% .188 13.697); --color-rose-900: oklch(41% .159 10.272); --color-rose-950: oklch(27.1% .105 12.094); --color-slate-50: oklch(98.4% .003 247.858); --color-slate-100: oklch(96.8% .007 247.896); --color-slate-200: oklch(92.9% .013 255.508); --color-slate-300: oklch(86.9% .022 252.894); --color-slate-400: oklch(70.4% .04 256.788); --color-slate-500: oklch(55.4% .046 257.417); --color-slate-600: oklch(44.6% .043 257.281); --color-slate-700: oklch(37.2% .044 257.287); --color-slate-800: oklch(27.9% .041 260.031); --color-slate-900: oklch(20.8% .042 265.755); --color-slate-950: oklch(12.9% .042 264.695); --color-gray-50: oklch(98.5% .002 247.839); --color-gray-100: oklch(96.7% .003 264.542); --color-gray-200: oklch(92.8% .006 264.531); --color-gray-300: oklch(87.2% .01 258.338); --color-gray-400: oklch(70.7% .022 261.325); --color-gray-500: oklch(55.1% .027 264.364); --color-gray-600: oklch(44.6% .03 256.802); --color-gray-700: oklch(37.3% .034 259.733); --color-gray-800: oklch(27.8% .033 256.848); --color-gray-900: oklch(21% .034 264.665); --color-gray-950: oklch(13% .028 261.692); --color-zinc-50: oklch(98.5% 0 0); --color-zinc-100: oklch(96.7% .001 286.375); --color-zinc-200: oklch(92% .004 286.32); --color-zinc-300: oklch(87.1% .006 286.286); --color-zinc-400: oklch(70.5% .015 286.067); --color-zinc-500: oklch(55.2% .016 285.938); --color-zinc-600: oklch(44.2% .017 285.786); --color-zinc-700: oklch(37% .013 285.805); --color-zinc-800: oklch(27.4% .006 286.033); --color-zinc-900: oklch(21% .006 285.885); --color-zinc-950: oklch(14.1% .005 285.823); --color-neutral-50: oklch(98.5% 0 0); --color-neutral-100: oklch(97% 0 0); --color-neutral-200: oklch(92.2% 0 0); --color-neutral-300: oklch(87% 0 0); --color-neutral-400: oklch(70.8% 0 0); --color-neutral-500: oklch(55.6% 0 0); --color-neutral-600: oklch(43.9% 0 0); --color-neutral-700: oklch(37.1% 0 0); --color-neutral-800: oklch(26.9% 0 0); --color-neutral-900: oklch(20.5% 0 0); --color-neutral-950: oklch(14.5% 0 0); --color-stone-50: oklch(98.5% .001 106.423); --color-stone-100: oklch(97% .001 106.424); --color-stone-200: oklch(92.3% .003 48.717); --color-stone-300: oklch(86.9% .005 56.366); --color-stone-400: oklch(70.9% .01 56.259); --color-stone-500: oklch(55.3% .013 58.071); --color-stone-600: oklch(44.4% .011 73.639); --color-stone-700: oklch(37.4% .01 67.558); --color-stone-800: oklch(26.8% .007 34.298); --color-stone-900: oklch(21.6% .006 56.043); --color-stone-950: oklch(14.7% .004 49.25); --color-mauve-50: oklch(98.5% 0 0); --color-mauve-100: oklch(96% .003 325.6); --color-mauve-200: oklch(92.2% .005 325.62); --color-mauve-300: oklch(86.5% .012 325.68); --color-mauve-400: oklch(71.1% .019 323.02); --color-mauve-500: oklch(54.2% .034 322.5); --color-mauve-600: oklch(43.5% .029 321.78); --color-mauve-700: oklch(36.4% .029 323.89); --color-mauve-800: oklch(26.3% .024 320.12); --color-mauve-900: oklch(21.2% .019 322.12); --color-mauve-950: oklch(14.5% .008 326); --color-olive-50: oklch(98.8% .003 106.5); --color-olive-100: oklch(96.6% .005 106.5); --color-olive-200: oklch(93% .007 106.5); --color-olive-300: oklch(88% .011 106.6); --color-olive-400: oklch(73.7% .021 106.9); --color-olive-500: oklch(58% .031 107.3); --color-olive-600: oklch(46.6% .025 107.3); --color-olive-700: oklch(39.4% .023 107.4); --color-olive-800: oklch(28.6% .016 107.4); --color-olive-900: oklch(22.8% .013 107.4); --color-olive-950: oklch(15.3% .006 107.1); --color-mist-50: oklch(98.7% .002 197.1); --color-mist-100: oklch(96.3% .002 197.1); --color-mist-200: oklch(92.5% .005 214.3); --color-mist-300: oklch(87.2% .007 219.6); --color-mist-400: oklch(72.3% .014 214.4); --color-mist-500: oklch(56% .021 213.5); --color-mist-600: oklch(45% .017 213.2); --color-mist-700: oklch(37.8% .015 216); --color-mist-800: oklch(27.5% .011 216.9); --color-mist-900: oklch(21.8% .008 223.9); --color-mist-950: oklch(14.8% .004 228.8); --color-taupe-50: oklch(98.6% .002 67.8); --color-taupe-100: oklch(96% .002 17.2); --color-taupe-200: oklch(92.2% .005 34.3); --color-taupe-300: oklch(86.8% .007 39.5); --color-taupe-400: oklch(71.4% .014 41.2); --color-taupe-500: oklch(54.7% .021 43.1); --color-taupe-600: oklch(43.8% .017 39.3); --color-taupe-700: oklch(36.7% .016 35.7); --color-taupe-800: oklch(26.8% .011 36.5); --color-taupe-900: oklch(21.4% .009 43.1); --color-taupe-950: oklch(14.7% .004 49.3); --color-black: #000; --color-white: #fff; --spacing: .25rem; --breakpoint-sm: 40rem; --breakpoint-md: 48rem; --breakpoint-lg: 64rem; --breakpoint-xl: 80rem; --breakpoint-2xl: 96rem; --container-3xs: 16rem; --container-2xs: 18rem; --container-xs: 20rem; --container-sm: 24rem; --container-md: 28rem; --container-lg: 32rem; --container-xl: 36rem; --container-2xl: 42rem; --container-3xl: 48rem; --container-4xl: 56rem; --container-5xl: 64rem; --container-6xl: 72rem; --container-7xl: 80rem; --text-xs: .75rem; --text-xs--line-height: calc(1 / .75); --text-sm: .875rem; --text-sm--line-height: calc(1.25 / .875); --text-base: 1rem; --text-base--line-height: 1.5 ; --text-lg: 1.125rem; --text-lg--line-height: calc(1.75 / 1.125); --text-xl: 1.25rem; --text-xl--line-height: calc(1.75 / 1.25); --text-2xl: 1.5rem; --text-2xl--line-height: calc(2 / 1.5); --text-3xl: 1.875rem; --text-3xl--line-height: 1.2 ; --text-4xl: 2.25rem; --text-4xl--line-height: calc(2.5 / 2.25); --text-5xl: 3rem; --text-5xl--line-height: 1; --text-6xl: 3.75rem; --text-6xl--line-height: 1; --text-7xl: 4.5rem; --text-7xl--line-height: 1; --text-8xl: 6rem; --text-8xl--line-height: 1; --text-9xl: 8rem; --text-9xl--line-height: 1; --font-weight-thin: 100; --font-weight-extralight: 200; --font-weight-light: 300; --font-weight-normal: 400; --font-weight-medium: 500; --font-weight-semibold: 600; --font-weight-bold: 700; --font-weight-extrabold: 800; --font-weight-black: 900; --tracking-tighter: -.05em; --tracking-tight: -.025em; --tracking-normal: 0em; --tracking-wide: .025em; --tracking-wider: .05em; --tracking-widest: .1em; --leading-tight: 1.25; --leading-snug: 1.375; --leading-normal: 1.5; --leading-relaxed: 1.625; --leading-loose: 2; --radius-xs: .125rem; --radius-sm: .25rem; --radius-md: .375rem; --radius-lg: .5rem; --radius-xl: .75rem; --radius-2xl: 1rem; --radius-3xl: 1.5rem; --radius-4xl: 2rem; --shadow-2xs: 0 1px rgb(0 0 0 / .05); --shadow-xs: 0 1px 2px 0 rgb(0 0 0 / .05); --shadow-sm: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1); --shadow-md: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1); --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1); --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1); --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / .25); --inset-shadow-2xs: inset 0 1px rgb(0 0 0 / .05); --inset-shadow-xs: inset 0 1px 1px rgb(0 0 0 / .05); --inset-shadow-sm: inset 0 2px 4px rgb(0 0 0 / .05); --drop-shadow-xs: 0 1px 1px rgb(0 0 0 / .05); --drop-shadow-sm: 0 1px 2px rgb(0 0 0 / .15); --drop-shadow-md: 0 3px 3px rgb(0 0 0 / .12); --drop-shadow-lg: 0 4px 4px rgb(0 0 0 / .15); --drop-shadow-xl: 0 9px 7px rgb(0 0 0 / .1); --drop-shadow-2xl: 0 25px 25px rgb(0 0 0 / .15); --text-shadow-2xs: 0px 1px 0px rgb(0 0 0 / .15); --text-shadow-xs: 0px 1px 1px rgb(0 0 0 / .2); --text-shadow-sm: 0px 1px 0px rgb(0 0 0 / .075), 0px 1px 1px rgb(0 0 0 / .075), 0px 2px 2px rgb(0 0 0 / .075); --text-shadow-md: 0px 1px 1px rgb(0 0 0 / .1), 0px 1px 2px rgb(0 0 0 / .1), 0px 2px 4px rgb(0 0 0 / .1); --text-shadow-lg: 0px 1px 2px rgb(0 0 0 / .1), 0px 3px 2px rgb(0 0 0 / .1), 0px 4px 8px rgb(0 0 0 / .1); --ease-in: cubic-bezier(.4, 0, 1, 1); --ease-out: cubic-bezier(0, 0, .2, 1); --ease-in-out: cubic-bezier(.4, 0, .2, 1); --animate-spin: spin 1s linear infinite; --animate-ping: ping 1s cubic-bezier(0, 0, .2, 1) infinite; --animate-pulse: pulse 2s cubic-bezier(.4, 0, .6, 1) infinite; --animate-bounce: bounce 1s infinite; @keyframes spin { to { transform: rotate(360deg); } } @keyframes ping { 75%, 100% { transform: scale(2); opacity: 0; } } @keyframes pulse { 50% { opacity: .5; } } @keyframes bounce { 0%, 100% { transform: translateY(-25%); animation-timing-function: cubic-bezier(.8, 0, 1, 1); } 50% { transform: none; animation-timing-function: cubic-bezier(0, 0, .2, 1); } } --blur-xs: 4px; --blur-sm: 8px; --blur-md: 12px; --blur-lg: 16px; --blur-xl: 24px; --blur-2xl: 40px; --blur-3xl: 64px; --perspective-dramatic: 100px; --perspective-near: 300px; --perspective-normal: 500px; --perspective-midrange: 800px; --perspective-distant: 1200px; --aspect-video: 16 / 9; --default-transition-duration: .15s; --default-transition-timing-function: cubic-bezier(.4, 0, .2, 1); --default-font-family: --theme(--font-sans, initial); --default-font-feature-settings: --theme( --font-sans--font-feature-settings, initial ); --default-font-variation-settings: --theme( --font-sans--font-variation-settings, initial ); --default-mono-font-family: --theme(--font-mono, initial); --default-mono-font-feature-settings: --theme( --font-mono--font-feature-settings, initial ); --default-mono-font-variation-settings: --theme( --font-mono--font-variation-settings, initial ); }@theme default inline reference{ --blur: 8px; --shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1); --shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / .05); --drop-shadow: 0 1px 2px rgb(0 0 0 / .1), 0 1px 1px rgb(0 0 0 / .06); --radius: .25rem; --max-width-prose: 65ch; }}@layer base{*,:after,:before,::backdrop,::file-selector-button{box-sizing:border-box;margin:0;padding:0;border:0 solid}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;tab-size:4;font-family:--theme(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:--theme(--default-font-feature-settings,normal);font-variation-settings:--theme(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:--theme(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:--theme(--default-mono-font-feature-settings,normal);font-variation-settings:--theme(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea,::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;border-radius:0;background-color:transparent;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]),::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer utilities{@tailwind utilities;}@source "../**/*.{ts,tsx,js,jsx}";@layer base{:host{all:initial;color-scheme:light;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}*,*:before,*:after{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*,*:before,*:after{box-sizing:border-box}button{font-family:inherit;cursor:pointer}button:disabled{cursor:not-allowed}[role=button],[role=radio]{cursor:pointer}}.pw-cta-shimmer:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.35) 50%,transparent);animation:pw-cta-shimmer 3s infinite;z-index:1}@keyframes pw-cta-shimmer{0%{left:-100%}to{left:100%}}';
49
- let de = !1;
50
- function Qe() {
51
- if (de || (de = !0, typeof CSS > "u" || typeof CSS.registerProperty != "function")) return;
48
+ const Se = '@layer theme,base,components,utilities;@layer theme{@theme default{ --font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; --color-red-50: oklch(97.1% .013 17.38); --color-red-100: oklch(93.6% .032 17.717); --color-red-200: oklch(88.5% .062 18.334); --color-red-300: oklch(80.8% .114 19.571); --color-red-400: oklch(70.4% .191 22.216); --color-red-500: oklch(63.7% .237 25.331); --color-red-600: oklch(57.7% .245 27.325); --color-red-700: oklch(50.5% .213 27.518); --color-red-800: oklch(44.4% .177 26.899); --color-red-900: oklch(39.6% .141 25.723); --color-red-950: oklch(25.8% .092 26.042); --color-orange-50: oklch(98% .016 73.684); --color-orange-100: oklch(95.4% .038 75.164); --color-orange-200: oklch(90.1% .076 70.697); --color-orange-300: oklch(83.7% .128 66.29); --color-orange-400: oklch(75% .183 55.934); --color-orange-500: oklch(70.5% .213 47.604); --color-orange-600: oklch(64.6% .222 41.116); --color-orange-700: oklch(55.3% .195 38.402); --color-orange-800: oklch(47% .157 37.304); --color-orange-900: oklch(40.8% .123 38.172); --color-orange-950: oklch(26.6% .079 36.259); --color-amber-50: oklch(98.7% .022 95.277); --color-amber-100: oklch(96.2% .059 95.617); --color-amber-200: oklch(92.4% .12 95.746); --color-amber-300: oklch(87.9% .169 91.605); --color-amber-400: oklch(82.8% .189 84.429); --color-amber-500: oklch(76.9% .188 70.08); --color-amber-600: oklch(66.6% .179 58.318); --color-amber-700: oklch(55.5% .163 48.998); --color-amber-800: oklch(47.3% .137 46.201); --color-amber-900: oklch(41.4% .112 45.904); --color-amber-950: oklch(27.9% .077 45.635); --color-yellow-50: oklch(98.7% .026 102.212); --color-yellow-100: oklch(97.3% .071 103.193); --color-yellow-200: oklch(94.5% .129 101.54); --color-yellow-300: oklch(90.5% .182 98.111); --color-yellow-400: oklch(85.2% .199 91.936); --color-yellow-500: oklch(79.5% .184 86.047); --color-yellow-600: oklch(68.1% .162 75.834); --color-yellow-700: oklch(55.4% .135 66.442); --color-yellow-800: oklch(47.6% .114 61.907); --color-yellow-900: oklch(42.1% .095 57.708); --color-yellow-950: oklch(28.6% .066 53.813); --color-lime-50: oklch(98.6% .031 120.757); --color-lime-100: oklch(96.7% .067 122.328); --color-lime-200: oklch(93.8% .127 124.321); --color-lime-300: oklch(89.7% .196 126.665); --color-lime-400: oklch(84.1% .238 128.85); --color-lime-500: oklch(76.8% .233 130.85); --color-lime-600: oklch(64.8% .2 131.684); --color-lime-700: oklch(53.2% .157 131.589); --color-lime-800: oklch(45.3% .124 130.933); --color-lime-900: oklch(40.5% .101 131.063); --color-lime-950: oklch(27.4% .072 132.109); --color-green-50: oklch(98.2% .018 155.826); --color-green-100: oklch(96.2% .044 156.743); --color-green-200: oklch(92.5% .084 155.995); --color-green-300: oklch(87.1% .15 154.449); --color-green-400: oklch(79.2% .209 151.711); --color-green-500: oklch(72.3% .219 149.579); --color-green-600: oklch(62.7% .194 149.214); --color-green-700: oklch(52.7% .154 150.069); --color-green-800: oklch(44.8% .119 151.328); --color-green-900: oklch(39.3% .095 152.535); --color-green-950: oklch(26.6% .065 152.934); --color-emerald-50: oklch(97.9% .021 166.113); --color-emerald-100: oklch(95% .052 163.051); --color-emerald-200: oklch(90.5% .093 164.15); --color-emerald-300: oklch(84.5% .143 164.978); --color-emerald-400: oklch(76.5% .177 163.223); --color-emerald-500: oklch(69.6% .17 162.48); --color-emerald-600: oklch(59.6% .145 163.225); --color-emerald-700: oklch(50.8% .118 165.612); --color-emerald-800: oklch(43.2% .095 166.913); --color-emerald-900: oklch(37.8% .077 168.94); --color-emerald-950: oklch(26.2% .051 172.552); --color-teal-50: oklch(98.4% .014 180.72); --color-teal-100: oklch(95.3% .051 180.801); --color-teal-200: oklch(91% .096 180.426); --color-teal-300: oklch(85.5% .138 181.071); --color-teal-400: oklch(77.7% .152 181.912); --color-teal-500: oklch(70.4% .14 182.503); --color-teal-600: oklch(60% .118 184.704); --color-teal-700: oklch(51.1% .096 186.391); --color-teal-800: oklch(43.7% .078 188.216); --color-teal-900: oklch(38.6% .063 188.416); --color-teal-950: oklch(27.7% .046 192.524); --color-cyan-50: oklch(98.4% .019 200.873); --color-cyan-100: oklch(95.6% .045 203.388); --color-cyan-200: oklch(91.7% .08 205.041); --color-cyan-300: oklch(86.5% .127 207.078); --color-cyan-400: oklch(78.9% .154 211.53); --color-cyan-500: oklch(71.5% .143 215.221); --color-cyan-600: oklch(60.9% .126 221.723); --color-cyan-700: oklch(52% .105 223.128); --color-cyan-800: oklch(45% .085 224.283); --color-cyan-900: oklch(39.8% .07 227.392); --color-cyan-950: oklch(30.2% .056 229.695); --color-sky-50: oklch(97.7% .013 236.62); --color-sky-100: oklch(95.1% .026 236.824); --color-sky-200: oklch(90.1% .058 230.902); --color-sky-300: oklch(82.8% .111 230.318); --color-sky-400: oklch(74.6% .16 232.661); --color-sky-500: oklch(68.5% .169 237.323); --color-sky-600: oklch(58.8% .158 241.966); --color-sky-700: oklch(50% .134 242.749); --color-sky-800: oklch(44.3% .11 240.79); --color-sky-900: oklch(39.1% .09 240.876); --color-sky-950: oklch(29.3% .066 243.157); --color-blue-50: oklch(97% .014 254.604); --color-blue-100: oklch(93.2% .032 255.585); --color-blue-200: oklch(88.2% .059 254.128); --color-blue-300: oklch(80.9% .105 251.813); --color-blue-400: oklch(70.7% .165 254.624); --color-blue-500: oklch(62.3% .214 259.815); --color-blue-600: oklch(54.6% .245 262.881); --color-blue-700: oklch(48.8% .243 264.376); --color-blue-800: oklch(42.4% .199 265.638); --color-blue-900: oklch(37.9% .146 265.522); --color-blue-950: oklch(28.2% .091 267.935); --color-indigo-50: oklch(96.2% .018 272.314); --color-indigo-100: oklch(93% .034 272.788); --color-indigo-200: oklch(87% .065 274.039); --color-indigo-300: oklch(78.5% .115 274.713); --color-indigo-400: oklch(67.3% .182 276.935); --color-indigo-500: oklch(58.5% .233 277.117); --color-indigo-600: oklch(51.1% .262 276.966); --color-indigo-700: oklch(45.7% .24 277.023); --color-indigo-800: oklch(39.8% .195 277.366); --color-indigo-900: oklch(35.9% .144 278.697); --color-indigo-950: oklch(25.7% .09 281.288); --color-violet-50: oklch(96.9% .016 293.756); --color-violet-100: oklch(94.3% .029 294.588); --color-violet-200: oklch(89.4% .057 293.283); --color-violet-300: oklch(81.1% .111 293.571); --color-violet-400: oklch(70.2% .183 293.541); --color-violet-500: oklch(60.6% .25 292.717); --color-violet-600: oklch(54.1% .281 293.009); --color-violet-700: oklch(49.1% .27 292.581); --color-violet-800: oklch(43.2% .232 292.759); --color-violet-900: oklch(38% .189 293.745); --color-violet-950: oklch(28.3% .141 291.089); --color-purple-50: oklch(97.7% .014 308.299); --color-purple-100: oklch(94.6% .033 307.174); --color-purple-200: oklch(90.2% .063 306.703); --color-purple-300: oklch(82.7% .119 306.383); --color-purple-400: oklch(71.4% .203 305.504); --color-purple-500: oklch(62.7% .265 303.9); --color-purple-600: oklch(55.8% .288 302.321); --color-purple-700: oklch(49.6% .265 301.924); --color-purple-800: oklch(43.8% .218 303.724); --color-purple-900: oklch(38.1% .176 304.987); --color-purple-950: oklch(29.1% .149 302.717); --color-fuchsia-50: oklch(97.7% .017 320.058); --color-fuchsia-100: oklch(95.2% .037 318.852); --color-fuchsia-200: oklch(90.3% .076 319.62); --color-fuchsia-300: oklch(83.3% .145 321.434); --color-fuchsia-400: oklch(74% .238 322.16); --color-fuchsia-500: oklch(66.7% .295 322.15); --color-fuchsia-600: oklch(59.1% .293 322.896); --color-fuchsia-700: oklch(51.8% .253 323.949); --color-fuchsia-800: oklch(45.2% .211 324.591); --color-fuchsia-900: oklch(40.1% .17 325.612); --color-fuchsia-950: oklch(29.3% .136 325.661); --color-pink-50: oklch(97.1% .014 343.198); --color-pink-100: oklch(94.8% .028 342.258); --color-pink-200: oklch(89.9% .061 343.231); --color-pink-300: oklch(82.3% .12 346.018); --color-pink-400: oklch(71.8% .202 349.761); --color-pink-500: oklch(65.6% .241 354.308); --color-pink-600: oklch(59.2% .249 .584); --color-pink-700: oklch(52.5% .223 3.958); --color-pink-800: oklch(45.9% .187 3.815); --color-pink-900: oklch(40.8% .153 2.432); --color-pink-950: oklch(28.4% .109 3.907); --color-rose-50: oklch(96.9% .015 12.422); --color-rose-100: oklch(94.1% .03 12.58); --color-rose-200: oklch(89.2% .058 10.001); --color-rose-300: oklch(81% .117 11.638); --color-rose-400: oklch(71.2% .194 13.428); --color-rose-500: oklch(64.5% .246 16.439); --color-rose-600: oklch(58.6% .253 17.585); --color-rose-700: oklch(51.4% .222 16.935); --color-rose-800: oklch(45.5% .188 13.697); --color-rose-900: oklch(41% .159 10.272); --color-rose-950: oklch(27.1% .105 12.094); --color-slate-50: oklch(98.4% .003 247.858); --color-slate-100: oklch(96.8% .007 247.896); --color-slate-200: oklch(92.9% .013 255.508); --color-slate-300: oklch(86.9% .022 252.894); --color-slate-400: oklch(70.4% .04 256.788); --color-slate-500: oklch(55.4% .046 257.417); --color-slate-600: oklch(44.6% .043 257.281); --color-slate-700: oklch(37.2% .044 257.287); --color-slate-800: oklch(27.9% .041 260.031); --color-slate-900: oklch(20.8% .042 265.755); --color-slate-950: oklch(12.9% .042 264.695); --color-gray-50: oklch(98.5% .002 247.839); --color-gray-100: oklch(96.7% .003 264.542); --color-gray-200: oklch(92.8% .006 264.531); --color-gray-300: oklch(87.2% .01 258.338); --color-gray-400: oklch(70.7% .022 261.325); --color-gray-500: oklch(55.1% .027 264.364); --color-gray-600: oklch(44.6% .03 256.802); --color-gray-700: oklch(37.3% .034 259.733); --color-gray-800: oklch(27.8% .033 256.848); --color-gray-900: oklch(21% .034 264.665); --color-gray-950: oklch(13% .028 261.692); --color-zinc-50: oklch(98.5% 0 0); --color-zinc-100: oklch(96.7% .001 286.375); --color-zinc-200: oklch(92% .004 286.32); --color-zinc-300: oklch(87.1% .006 286.286); --color-zinc-400: oklch(70.5% .015 286.067); --color-zinc-500: oklch(55.2% .016 285.938); --color-zinc-600: oklch(44.2% .017 285.786); --color-zinc-700: oklch(37% .013 285.805); --color-zinc-800: oklch(27.4% .006 286.033); --color-zinc-900: oklch(21% .006 285.885); --color-zinc-950: oklch(14.1% .005 285.823); --color-neutral-50: oklch(98.5% 0 0); --color-neutral-100: oklch(97% 0 0); --color-neutral-200: oklch(92.2% 0 0); --color-neutral-300: oklch(87% 0 0); --color-neutral-400: oklch(70.8% 0 0); --color-neutral-500: oklch(55.6% 0 0); --color-neutral-600: oklch(43.9% 0 0); --color-neutral-700: oklch(37.1% 0 0); --color-neutral-800: oklch(26.9% 0 0); --color-neutral-900: oklch(20.5% 0 0); --color-neutral-950: oklch(14.5% 0 0); --color-stone-50: oklch(98.5% .001 106.423); --color-stone-100: oklch(97% .001 106.424); --color-stone-200: oklch(92.3% .003 48.717); --color-stone-300: oklch(86.9% .005 56.366); --color-stone-400: oklch(70.9% .01 56.259); --color-stone-500: oklch(55.3% .013 58.071); --color-stone-600: oklch(44.4% .011 73.639); --color-stone-700: oklch(37.4% .01 67.558); --color-stone-800: oklch(26.8% .007 34.298); --color-stone-900: oklch(21.6% .006 56.043); --color-stone-950: oklch(14.7% .004 49.25); --color-mauve-50: oklch(98.5% 0 0); --color-mauve-100: oklch(96% .003 325.6); --color-mauve-200: oklch(92.2% .005 325.62); --color-mauve-300: oklch(86.5% .012 325.68); --color-mauve-400: oklch(71.1% .019 323.02); --color-mauve-500: oklch(54.2% .034 322.5); --color-mauve-600: oklch(43.5% .029 321.78); --color-mauve-700: oklch(36.4% .029 323.89); --color-mauve-800: oklch(26.3% .024 320.12); --color-mauve-900: oklch(21.2% .019 322.12); --color-mauve-950: oklch(14.5% .008 326); --color-olive-50: oklch(98.8% .003 106.5); --color-olive-100: oklch(96.6% .005 106.5); --color-olive-200: oklch(93% .007 106.5); --color-olive-300: oklch(88% .011 106.6); --color-olive-400: oklch(73.7% .021 106.9); --color-olive-500: oklch(58% .031 107.3); --color-olive-600: oklch(46.6% .025 107.3); --color-olive-700: oklch(39.4% .023 107.4); --color-olive-800: oklch(28.6% .016 107.4); --color-olive-900: oklch(22.8% .013 107.4); --color-olive-950: oklch(15.3% .006 107.1); --color-mist-50: oklch(98.7% .002 197.1); --color-mist-100: oklch(96.3% .002 197.1); --color-mist-200: oklch(92.5% .005 214.3); --color-mist-300: oklch(87.2% .007 219.6); --color-mist-400: oklch(72.3% .014 214.4); --color-mist-500: oklch(56% .021 213.5); --color-mist-600: oklch(45% .017 213.2); --color-mist-700: oklch(37.8% .015 216); --color-mist-800: oklch(27.5% .011 216.9); --color-mist-900: oklch(21.8% .008 223.9); --color-mist-950: oklch(14.8% .004 228.8); --color-taupe-50: oklch(98.6% .002 67.8); --color-taupe-100: oklch(96% .002 17.2); --color-taupe-200: oklch(92.2% .005 34.3); --color-taupe-300: oklch(86.8% .007 39.5); --color-taupe-400: oklch(71.4% .014 41.2); --color-taupe-500: oklch(54.7% .021 43.1); --color-taupe-600: oklch(43.8% .017 39.3); --color-taupe-700: oklch(36.7% .016 35.7); --color-taupe-800: oklch(26.8% .011 36.5); --color-taupe-900: oklch(21.4% .009 43.1); --color-taupe-950: oklch(14.7% .004 49.3); --color-black: #000; --color-white: #fff; --spacing: .25rem; --breakpoint-sm: 40rem; --breakpoint-md: 48rem; --breakpoint-lg: 64rem; --breakpoint-xl: 80rem; --breakpoint-2xl: 96rem; --container-3xs: 16rem; --container-2xs: 18rem; --container-xs: 20rem; --container-sm: 24rem; --container-md: 28rem; --container-lg: 32rem; --container-xl: 36rem; --container-2xl: 42rem; --container-3xl: 48rem; --container-4xl: 56rem; --container-5xl: 64rem; --container-6xl: 72rem; --container-7xl: 80rem; --text-xs: .75rem; --text-xs--line-height: calc(1 / .75); --text-sm: .875rem; --text-sm--line-height: calc(1.25 / .875); --text-base: 1rem; --text-base--line-height: 1.5 ; --text-lg: 1.125rem; --text-lg--line-height: calc(1.75 / 1.125); --text-xl: 1.25rem; --text-xl--line-height: calc(1.75 / 1.25); --text-2xl: 1.5rem; --text-2xl--line-height: calc(2 / 1.5); --text-3xl: 1.875rem; --text-3xl--line-height: 1.2 ; --text-4xl: 2.25rem; --text-4xl--line-height: calc(2.5 / 2.25); --text-5xl: 3rem; --text-5xl--line-height: 1; --text-6xl: 3.75rem; --text-6xl--line-height: 1; --text-7xl: 4.5rem; --text-7xl--line-height: 1; --text-8xl: 6rem; --text-8xl--line-height: 1; --text-9xl: 8rem; --text-9xl--line-height: 1; --font-weight-thin: 100; --font-weight-extralight: 200; --font-weight-light: 300; --font-weight-normal: 400; --font-weight-medium: 500; --font-weight-semibold: 600; --font-weight-bold: 700; --font-weight-extrabold: 800; --font-weight-black: 900; --tracking-tighter: -.05em; --tracking-tight: -.025em; --tracking-normal: 0em; --tracking-wide: .025em; --tracking-wider: .05em; --tracking-widest: .1em; --leading-tight: 1.25; --leading-snug: 1.375; --leading-normal: 1.5; --leading-relaxed: 1.625; --leading-loose: 2; --radius-xs: .125rem; --radius-sm: .25rem; --radius-md: .375rem; --radius-lg: .5rem; --radius-xl: .75rem; --radius-2xl: 1rem; --radius-3xl: 1.5rem; --radius-4xl: 2rem; --shadow-2xs: 0 1px rgb(0 0 0 / .05); --shadow-xs: 0 1px 2px 0 rgb(0 0 0 / .05); --shadow-sm: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1); --shadow-md: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1); --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1); --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1); --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / .25); --inset-shadow-2xs: inset 0 1px rgb(0 0 0 / .05); --inset-shadow-xs: inset 0 1px 1px rgb(0 0 0 / .05); --inset-shadow-sm: inset 0 2px 4px rgb(0 0 0 / .05); --drop-shadow-xs: 0 1px 1px rgb(0 0 0 / .05); --drop-shadow-sm: 0 1px 2px rgb(0 0 0 / .15); --drop-shadow-md: 0 3px 3px rgb(0 0 0 / .12); --drop-shadow-lg: 0 4px 4px rgb(0 0 0 / .15); --drop-shadow-xl: 0 9px 7px rgb(0 0 0 / .1); --drop-shadow-2xl: 0 25px 25px rgb(0 0 0 / .15); --text-shadow-2xs: 0px 1px 0px rgb(0 0 0 / .15); --text-shadow-xs: 0px 1px 1px rgb(0 0 0 / .2); --text-shadow-sm: 0px 1px 0px rgb(0 0 0 / .075), 0px 1px 1px rgb(0 0 0 / .075), 0px 2px 2px rgb(0 0 0 / .075); --text-shadow-md: 0px 1px 1px rgb(0 0 0 / .1), 0px 1px 2px rgb(0 0 0 / .1), 0px 2px 4px rgb(0 0 0 / .1); --text-shadow-lg: 0px 1px 2px rgb(0 0 0 / .1), 0px 3px 2px rgb(0 0 0 / .1), 0px 4px 8px rgb(0 0 0 / .1); --ease-in: cubic-bezier(.4, 0, 1, 1); --ease-out: cubic-bezier(0, 0, .2, 1); --ease-in-out: cubic-bezier(.4, 0, .2, 1); --animate-spin: spin 1s linear infinite; --animate-ping: ping 1s cubic-bezier(0, 0, .2, 1) infinite; --animate-pulse: pulse 2s cubic-bezier(.4, 0, .6, 1) infinite; --animate-bounce: bounce 1s infinite; @keyframes spin { to { transform: rotate(360deg); } } @keyframes ping { 75%, 100% { transform: scale(2); opacity: 0; } } @keyframes pulse { 50% { opacity: .5; } } @keyframes bounce { 0%, 100% { transform: translateY(-25%); animation-timing-function: cubic-bezier(.8, 0, 1, 1); } 50% { transform: none; animation-timing-function: cubic-bezier(0, 0, .2, 1); } } --blur-xs: 4px; --blur-sm: 8px; --blur-md: 12px; --blur-lg: 16px; --blur-xl: 24px; --blur-2xl: 40px; --blur-3xl: 64px; --perspective-dramatic: 100px; --perspective-near: 300px; --perspective-normal: 500px; --perspective-midrange: 800px; --perspective-distant: 1200px; --aspect-video: 16 / 9; --default-transition-duration: .15s; --default-transition-timing-function: cubic-bezier(.4, 0, .2, 1); --default-font-family: --theme(--font-sans, initial); --default-font-feature-settings: --theme( --font-sans--font-feature-settings, initial ); --default-font-variation-settings: --theme( --font-sans--font-variation-settings, initial ); --default-mono-font-family: --theme(--font-mono, initial); --default-mono-font-feature-settings: --theme( --font-mono--font-feature-settings, initial ); --default-mono-font-variation-settings: --theme( --font-mono--font-variation-settings, initial ); }@theme default inline reference{ --blur: 8px; --shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1); --shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / .05); --drop-shadow: 0 1px 2px rgb(0 0 0 / .1), 0 1px 1px rgb(0 0 0 / .06); --radius: .25rem; --max-width-prose: 65ch; }}@layer base{*,:after,:before,::backdrop,::file-selector-button{box-sizing:border-box;margin:0;padding:0;border:0 solid}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;tab-size:4;font-family:--theme(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:--theme(--default-font-feature-settings,normal);font-variation-settings:--theme(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:--theme(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:--theme(--default-mono-font-feature-settings,normal);font-variation-settings:--theme(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea,::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;border-radius:0;background-color:transparent;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]),::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer utilities{@tailwind utilities;}@source "../**/*.{ts,tsx,js,jsx}";@layer base{:host{all:initial;color-scheme:light;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}*,*:before,*:after{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*,*:before,*:after{box-sizing:border-box}button{font-family:inherit;cursor:pointer}button:disabled{cursor:not-allowed}[role=button],[role=radio]{cursor:pointer}}.pw-cta-shimmer:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.35) 50%,transparent);animation:pw-cta-shimmer 3s infinite;z-index:1}@keyframes pw-cta-shimmer{0%{left:-100%}to{left:100%}}';
49
+ let he = !1;
50
+ function et() {
51
+ if (he || (he = !0, typeof CSS > "u" || typeof CSS.registerProperty != "function")) return;
52
52
  let r;
53
53
  try {
54
54
  const e = new CSSStyleSheet();
55
- e.replaceSync(_e), r = e.cssRules;
55
+ e.replaceSync(Se), r = e.cssRules;
56
56
  } catch {
57
57
  return;
58
58
  }
@@ -70,10 +70,10 @@ function Qe() {
70
70
  }
71
71
  }
72
72
  }
73
- function et(r, e, t = {}) {
73
+ function tt(r, e, t = {}) {
74
74
  if (typeof document > "u")
75
75
  throw new Error("mountShadow called in non-DOM environment");
76
- Qe();
76
+ et();
77
77
  const n = t.host ?? document.createElement("div");
78
78
  n.setAttribute("data-paywall-host", ""), n.style.cssText = t.inline ? "all: initial; position: absolute; inset: 0; z-index: 1; pointer-events: none;" : "all: initial; position: fixed; inset: 0; z-index: 2147483647; pointer-events: none;", !n.isConnected && !t.inline && document.body.appendChild(n);
79
79
  const i = n.attachShadow({ mode: t.shadowMode ?? "closed" }), s = `
@@ -95,21 +95,21 @@ function et(r, e, t = {}) {
95
95
  visibility: visible !important;
96
96
  }
97
97
  `, a = document.createElement("style");
98
- a.textContent = s + _e + (t.injectCss ?? ""), i.appendChild(a);
98
+ a.textContent = s + Se + (t.injectCss ?? ""), i.appendChild(a);
99
99
  const c = document.createElement("div");
100
100
  c.style.pointerEvents = "auto", i.appendChild(c);
101
101
  let l = e;
102
- return J(ue(r, l), c), {
102
+ return Q(de(r, l), c), {
103
103
  shadowRoot: i,
104
- update(p) {
105
- l = { ...l, ...p }, J(ue(r, l), c);
104
+ update(h) {
105
+ l = { ...l, ...h }, Q(de(r, l), c);
106
106
  },
107
107
  unmount() {
108
- J(null, c), n.remove();
108
+ Q(null, c), n.remove();
109
109
  }
110
110
  };
111
111
  }
112
- const tt = (r, e, t) => {
112
+ const rt = (r, e, t) => {
113
113
  const n = r[e];
114
114
  return n ? typeof n == "function" ? n() : Promise.resolve(n) : new Promise((i, s) => {
115
115
  (typeof queueMicrotask == "function" ? queueMicrotask : setTimeout)(
@@ -121,7 +121,7 @@ const tt = (r, e, t) => {
121
121
  )
122
122
  );
123
123
  });
124
- }, rt = [
124
+ }, nt = [
125
125
  "ru",
126
126
  "uk",
127
127
  "de",
@@ -149,19 +149,19 @@ const tt = (r, e, t) => {
149
149
  "th",
150
150
  "vi",
151
151
  "he"
152
- ], Se = (r, e, t) => Ie(e, t), Ce = $e({ t: Se, locale: "en" });
153
- function Ie(r, e) {
152
+ ], Ce = (r, e, t) => Ae(e, t), Ie = Ve({ t: Ce, locale: "en" });
153
+ function Ae(r, e) {
154
154
  if (!e) return r;
155
155
  let t = r;
156
156
  for (const [n, i] of Object.entries(e))
157
157
  t = t.split(`{${n}}`).join(String(i));
158
158
  return t;
159
159
  }
160
- const Q = /* @__PURE__ */ new Map(), ee = /* @__PURE__ */ new Map();
161
- function Ae(r) {
162
- return rt.includes(r);
160
+ const ee = /* @__PURE__ */ new Map(), te = /* @__PURE__ */ new Map();
161
+ function Le(r) {
162
+ return nt.includes(r);
163
163
  }
164
- function nt(r) {
164
+ function it(r) {
165
165
  const e = [];
166
166
  if (typeof navigator < "u" && navigator.language) {
167
167
  e.push(navigator.language);
@@ -175,60 +175,60 @@ function nt(r) {
175
175
  n && n !== t && e.push(n);
176
176
  }
177
177
  for (const n of e)
178
- if (Ae(n)) return n;
178
+ if (Le(n)) return n;
179
179
  return null;
180
180
  }
181
- function it(r, e) {
181
+ function ot(r, e) {
182
182
  return !!r.locales && r.locales[e] !== void 0;
183
183
  }
184
- async function ot(r) {
185
- const e = Q.get(r);
184
+ async function st(r) {
185
+ const e = ee.get(r);
186
186
  if (e) return e;
187
- const t = ee.get(r);
187
+ const t = te.get(r);
188
188
  if (t) return t;
189
- const n = tt(/* @__PURE__ */ Object.assign({ "./locales/ar.ts": () => import("./chunks/ar-B2Wg_IrC.js"), "./locales/cs.ts": () => import("./chunks/cs-BNo9Dx0Q.js"), "./locales/da.ts": () => import("./chunks/da-Do9Lq6En.js"), "./locales/de.ts": () => import("./chunks/de-C8pDZNvx.js"), "./locales/el.ts": () => import("./chunks/el-DzMNX-_P.js"), "./locales/es.ts": () => import("./chunks/es-YrKt-q4w.js"), "./locales/fi.ts": () => import("./chunks/fi-Bh44pwZ4.js"), "./locales/fr.ts": () => import("./chunks/fr-Bc0pw4ws.js"), "./locales/he.ts": () => import("./chunks/he-Bfm-bhe3.js"), "./locales/hi.ts": () => import("./chunks/hi-D-O-B9Dn.js"), "./locales/hu.ts": () => import("./chunks/hu-CmIuAbLL.js"), "./locales/id.ts": () => import("./chunks/id-DN7IES-A.js"), "./locales/it.ts": () => import("./chunks/it-Cz5Nmqx5.js"), "./locales/ja.ts": () => import("./chunks/ja-BH9BlBh2.js"), "./locales/ko.ts": () => import("./chunks/ko-CYV9QuYs.js"), "./locales/nl.ts": () => import("./chunks/nl-BvkB900D.js"), "./locales/no.ts": () => import("./chunks/no-3s9_ormb.js"), "./locales/pl.ts": () => import("./chunks/pl-C9WTGQtb.js"), "./locales/pt.ts": () => import("./chunks/pt-uFVUv_Op.js"), "./locales/ro.ts": () => import("./chunks/ro-BrqQ8Au-.js"), "./locales/ru.ts": () => import("./chunks/ru-DK594dA8.js"), "./locales/sv.ts": () => import("./chunks/sv-CHNH8-mq.js"), "./locales/th.ts": () => import("./chunks/th-l24Pm5q-.js"), "./locales/tr.ts": () => import("./chunks/tr-ADpigSY5.js"), "./locales/uk.ts": () => import("./chunks/uk-CGqo4jek.js"), "./locales/vi.ts": () => import("./chunks/vi-Dk9bTu6f.js"), "./locales/zh.ts": () => import("./chunks/zh-LDkEV2D9.js") }), `./locales/${r}.ts`, 3).then((i) => {
189
+ const n = rt(/* @__PURE__ */ Object.assign({ "./locales/ar.ts": () => import("./chunks/ar-B2Wg_IrC.js"), "./locales/cs.ts": () => import("./chunks/cs-BNo9Dx0Q.js"), "./locales/da.ts": () => import("./chunks/da-Do9Lq6En.js"), "./locales/de.ts": () => import("./chunks/de-C8pDZNvx.js"), "./locales/el.ts": () => import("./chunks/el-DzMNX-_P.js"), "./locales/es.ts": () => import("./chunks/es-YrKt-q4w.js"), "./locales/fi.ts": () => import("./chunks/fi-Bh44pwZ4.js"), "./locales/fr.ts": () => import("./chunks/fr-Bc0pw4ws.js"), "./locales/he.ts": () => import("./chunks/he-Bfm-bhe3.js"), "./locales/hi.ts": () => import("./chunks/hi-D-O-B9Dn.js"), "./locales/hu.ts": () => import("./chunks/hu-CmIuAbLL.js"), "./locales/id.ts": () => import("./chunks/id-DN7IES-A.js"), "./locales/it.ts": () => import("./chunks/it-Cz5Nmqx5.js"), "./locales/ja.ts": () => import("./chunks/ja-BH9BlBh2.js"), "./locales/ko.ts": () => import("./chunks/ko-CYV9QuYs.js"), "./locales/nl.ts": () => import("./chunks/nl-BvkB900D.js"), "./locales/no.ts": () => import("./chunks/no-3s9_ormb.js"), "./locales/pl.ts": () => import("./chunks/pl-C9WTGQtb.js"), "./locales/pt.ts": () => import("./chunks/pt-uFVUv_Op.js"), "./locales/ro.ts": () => import("./chunks/ro-BrqQ8Au-.js"), "./locales/ru.ts": () => import("./chunks/ru-DK594dA8.js"), "./locales/sv.ts": () => import("./chunks/sv-CHNH8-mq.js"), "./locales/th.ts": () => import("./chunks/th-l24Pm5q-.js"), "./locales/tr.ts": () => import("./chunks/tr-ADpigSY5.js"), "./locales/uk.ts": () => import("./chunks/uk-CGqo4jek.js"), "./locales/vi.ts": () => import("./chunks/vi-Dk9bTu6f.js"), "./locales/zh.ts": () => import("./chunks/zh-LDkEV2D9.js") }), `./locales/${r}.ts`, 3).then((i) => {
190
190
  const s = i.default ?? {};
191
- return Q.set(r, s), s;
191
+ return ee.set(r, s), s;
192
192
  }).catch((i) => {
193
193
  console.warn(`[paywall] failed to load locale chunk "${r}"`, i);
194
194
  const s = {};
195
- return Q.set(r, s), s;
195
+ return ee.set(r, s), s;
196
196
  }).finally(() => {
197
- ee.delete(r);
197
+ te.delete(r);
198
198
  });
199
- return ee.set(r, n), n;
199
+ return te.set(r, n), n;
200
200
  }
201
- function st({ bootstrap: r, forceLocale: e, children: t }) {
202
- const [n, i] = b("en"), [s, a] = b(null);
201
+ function at({ bootstrap: r, forceLocale: e, children: t }) {
202
+ const [n, i] = k("en"), [s, a] = k(null);
203
203
  P(() => {
204
- const p = (e && Ae(e) ? e : null) ?? (() => {
204
+ const h = (e && Le(e) ? e : null) ?? (() => {
205
205
  if (!r) return null;
206
- const f = nt(r);
207
- return !f || !it(r, f) ? null : f;
206
+ const g = it(r);
207
+ return !g || !ot(r, g) ? null : g;
208
208
  })();
209
- if (!p) {
209
+ if (!h) {
210
210
  (s !== null || n !== "en") && (i("en"), a(null));
211
211
  return;
212
212
  }
213
- if (p === n && s) return;
213
+ if (h === n && s) return;
214
214
  let d = !1;
215
- return ot(p).then((f) => {
216
- d || (i(p), a(f));
215
+ return st(h).then((g) => {
216
+ d || (i(h), a(g));
217
217
  }), () => {
218
218
  d = !0;
219
219
  };
220
220
  }, [r, e]);
221
221
  const c = {
222
222
  locale: n,
223
- t: s ? (l, p, d) => Ie(s[l] ?? p, d) : Se
223
+ t: s ? (l, h, d) => Ae(s[l] ?? h, d) : Ce
224
224
  };
225
- return /* @__PURE__ */ o(Ce.Provider, { value: c, children: t });
225
+ return /* @__PURE__ */ o(Ie.Provider, { value: c, children: t });
226
226
  }
227
- function v() {
228
- return Ve(Ce);
227
+ function S() {
228
+ return He(Ie);
229
229
  }
230
- const he = 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])';
231
- function at({
230
+ const pe = 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])';
231
+ function lt({
232
232
  open: r,
233
233
  onClose: e,
234
234
  labelledBy: t,
@@ -239,40 +239,40 @@ function at({
239
239
  inline: c = !1,
240
240
  children: l
241
241
  }) {
242
- const { t: p } = v(), d = R(null), f = R(null);
242
+ const { t: h } = S(), d = D(null), g = D(null);
243
243
  return P(() => {
244
244
  if (!r) return;
245
- f.current = document.activeElement ?? null;
246
- const S = d.current;
247
- S && (S.querySelector(he) ?? S).focus({ preventScroll: !0 });
248
- const g = (C) => {
249
- if (C.key === "Escape") {
245
+ g.current = document.activeElement ?? null;
246
+ const m = d.current;
247
+ m && (m.querySelector(pe) ?? m).focus({ preventScroll: !0 });
248
+ const A = (y) => {
249
+ if (y.key === "Escape") {
250
250
  if (!s) return;
251
- C.stopPropagation(), e();
251
+ y.stopPropagation(), e();
252
252
  return;
253
253
  }
254
- if (C.key !== "Tab" || !d.current) return;
255
- const I = Array.from(
256
- d.current.querySelectorAll(he)
257
- ).filter((U) => !U.hasAttribute("disabled") && U.tabIndex !== -1);
258
- if (I.length === 0) {
259
- C.preventDefault();
254
+ if (y.key !== "Tab" || !d.current) return;
255
+ const C = Array.from(
256
+ d.current.querySelectorAll(pe)
257
+ ).filter((O) => !O.hasAttribute("disabled") && O.tabIndex !== -1);
258
+ if (C.length === 0) {
259
+ y.preventDefault();
260
260
  return;
261
261
  }
262
- const A = I[0], T = I[I.length - 1], E = document.activeElement;
263
- C.shiftKey && E === A ? (C.preventDefault(), T.focus()) : !C.shiftKey && E === T && (C.preventDefault(), A.focus());
262
+ const I = C[0], U = C[C.length - 1], M = document.activeElement;
263
+ y.shiftKey && M === I ? (y.preventDefault(), U.focus()) : !y.shiftKey && M === U && (y.preventDefault(), I.focus());
264
264
  };
265
- document.addEventListener("keydown", g, !0);
266
- const k = document.body.style.overflow;
265
+ document.addEventListener("keydown", A, !0);
266
+ const b = document.body.style.overflow;
267
267
  return c || (document.body.style.overflow = "hidden"), () => {
268
- document.removeEventListener("keydown", g, !0), c || (document.body.style.overflow = k), f.current?.focus?.({ preventScroll: !0 });
268
+ document.removeEventListener("keydown", A, !0), c || (document.body.style.overflow = b), g.current?.focus?.({ preventScroll: !0 });
269
269
  };
270
270
  }, [r, e, s, c]), r ? /* @__PURE__ */ u(
271
271
  "div",
272
272
  {
273
273
  class: `${c ? "absolute z-[1]" : "fixed z-[2147483647]"} inset-0 flex items-center justify-center bg-slate-950/50 p-2 sm:p-4 backdrop-blur-md animate-[pw-fade-in_180ms_ease-out]`,
274
- onClick: (S) => {
275
- s && S.target === S.currentTarget && e();
274
+ onClick: (m) => {
275
+ s && m.target === m.currentTarget && e();
276
276
  },
277
277
  "data-pw-root": !0,
278
278
  children: [
@@ -302,7 +302,7 @@ function at({
302
302
  {
303
303
  type: "button",
304
304
  onClick: e,
305
- "aria-label": p("modal.close_aria", "Close"),
305
+ "aria-label": h("modal.close_aria", "Close"),
306
306
  class: "absolute right-3 top-3 z-10 flex h-8 w-8 items-center justify-center rounded-full bg-white/80 text-gray-500 backdrop-blur-sm transition-colors hover:bg-gray-100 hover:text-gray-900 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--pw-accent)]",
307
307
  children: /* @__PURE__ */ o("svg", { width: "14", height: "14", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ o(
308
308
  "path",
@@ -332,7 +332,7 @@ function at({
332
332
  }
333
333
  ) : null;
334
334
  }
335
- function lt(r, e) {
335
+ function ct(r, e) {
336
336
  switch (r) {
337
337
  case "google":
338
338
  return e("auth.continue_with_google", "Continue with Google");
@@ -344,9 +344,9 @@ function lt(r, e) {
344
344
  return e("auth.continue_with_facebook", "Continue with Facebook");
345
345
  }
346
346
  }
347
- function pe(r, e, t) {
347
+ function fe(r, e, t) {
348
348
  const n = e === "signup" ? t("auth.signup_failed", "Sign-up failed") : t("auth.signin_failed", "Sign-in failed");
349
- if (!(r instanceof O)) return n;
349
+ if (!(r instanceof L)) return n;
350
350
  switch (r.code) {
351
351
  case "invalid_credentials":
352
352
  return t("auth.invalid_credentials", "Invalid email or password");
@@ -378,14 +378,14 @@ function pe(r, e, t) {
378
378
  return n;
379
379
  }
380
380
  }
381
- function Le({ block: r, ctx: e }) {
381
+ function Me({ block: r, ctx: e }) {
382
382
  const t = e.auth, n = e.authSession, i = r.allow_signup !== !1, s = r.allow_password_reset !== !1, a = r.hide_when_authenticated !== !1;
383
383
  if (!t)
384
384
  return typeof console < "u" && console.warn("[paywall] auth_panel rendered without AuthClient — pass `auth: true` to PaywallUI"), null;
385
385
  const c = n && !n.user.is_anonymous ? n : null;
386
- return c && a ? null : c ? /* @__PURE__ */ o(ct, { email: c.user.email ?? "", onSignOut: () => t.signOut().catch(() => {
386
+ return c && a ? null : c ? /* @__PURE__ */ o(ut, { email: c.user.email ?? "", onSignOut: () => t.signOut().catch(() => {
387
387
  }) }) : /* @__PURE__ */ o(
388
- ut,
388
+ dt,
389
389
  {
390
390
  block: r,
391
391
  allowSignup: i,
@@ -394,8 +394,8 @@ function Le({ block: r, ctx: e }) {
394
394
  }
395
395
  );
396
396
  }
397
- function ct({ email: r, onSignOut: e }) {
398
- const { t } = v();
397
+ function ut({ email: r, onSignOut: e }) {
398
+ const { t } = S();
399
399
  return /* @__PURE__ */ u("div", { class: "flex items-center justify-between gap-3 rounded-2xl bg-gray-100 px-4 py-3", children: [
400
400
  /* @__PURE__ */ u("div", { class: "flex flex-col", children: [
401
401
  /* @__PURE__ */ o("span", { class: "text-[10px] font-semibold uppercase tracking-wider text-gray-500", children: t("auth.signed_in", "Signed in") }),
@@ -412,182 +412,182 @@ function ct({ email: r, onSignOut: e }) {
412
412
  )
413
413
  ] });
414
414
  }
415
- function ut({ block: r, allowSignup: e, allowReset: t, ctx: n }) {
416
- const { t: i } = v(), s = n.auth, a = r.providers ?? [], c = n.initialAuthMode === "signup" && e ? "signup" : "signin", [l, p] = b(c), [d, f] = b(""), [h, _] = b(""), [w, S] = b(""), [g, k] = b(""), [C, I] = b(null), A = R(!1), [T, E] = b(null), [U, j] = b(null), [D, B] = b(!1), [L, N] = b(null);
415
+ function dt({ block: r, allowSignup: e, allowReset: t, ctx: n }) {
416
+ const { t: i } = S(), s = n.auth, a = r.providers ?? [], c = n.initialAuthMode === "signup" && e ? "signup" : "signin", [l, h] = k(c), [d, g] = k(""), [_, p] = k(""), [v, m] = k(""), [A, b] = k(""), [y, C] = k(null), I = D(!1), [U, M] = k(null), [O, j] = k(null), [R, T] = k(!1), [E, z] = k(null);
417
417
  P(() => {
418
418
  if (typeof s.getLastLogin != "function") return;
419
- let y = !1;
419
+ let f = !1;
420
420
  return s.getLastLogin().then(
421
- (M) => {
422
- y || !M || (N(M), M.email && f((q) => q === "" ? M.email : q));
421
+ (w) => {
422
+ f || !w || (z(w), w.email && g((B) => B === "" ? w.email : B));
423
423
  },
424
424
  () => {
425
425
  }
426
426
  ), () => {
427
- y = !0;
427
+ f = !0;
428
428
  };
429
429
  }, [s]);
430
- const z = (y) => {
431
- p(y), E(null), j(null), B(!1);
432
- }, V = async (y) => {
433
- if (y.preventDefault(), !(A.current || C)) {
434
- A.current = !0;
430
+ const q = (f) => {
431
+ h(f), M(null), j(null), T(!1);
432
+ }, Y = async (f) => {
433
+ if (f.preventDefault(), !(I.current || y)) {
434
+ I.current = !0;
435
435
  try {
436
- if (E(null), j(null), l === "signup" && !D) {
436
+ if (M(null), j(null), l === "signup" && !R) {
437
437
  if (!d.trim()) return;
438
- B(!0);
438
+ T(!0);
439
439
  return;
440
440
  }
441
- if (l === "signup" && h !== w) {
442
- E(i("auth.passwords_mismatch", "Passwords don't match"));
441
+ if (l === "signup" && _ !== v) {
442
+ M(i("auth.passwords_mismatch", "Passwords don't match"));
443
443
  return;
444
444
  }
445
- I("email");
445
+ C("email");
446
446
  try {
447
- l === "signin" ? await s.signInWithEmail({ email: d, password: h }) : l === "signup" ? (await s.signUp({ email: d, password: h })).kind === "confirmation_required" && (_(""), p("signup_verify"), j(i("auth.check_email_message", "Check your email for a confirmation code."))) : l === "forgot" ? (await s.requestPasswordReset({ email: d }), p("reset_sent"), j(
447
+ l === "signin" ? await s.signInWithEmail({ email: d, password: _ }) : l === "signup" ? (await s.signUp({ email: d, password: _ })).kind === "confirmation_required" && (p(""), h("signup_verify"), j(i("auth.check_email_message", "Check your email for a confirmation code."))) : l === "forgot" ? (await s.requestPasswordReset({ email: d }), h("reset_sent"), j(
448
448
  i("auth.reset_sent_message", "If that email exists, a reset code has been sent.")
449
- )) : l === "signup_verify" ? await s.verifyOtp({ email: d, token: g, type: "email" }) : l === "reset_verify" && (await s.verifyOtp({
449
+ )) : l === "signup_verify" ? await s.verifyOtp({ email: d, token: A, type: "email" }) : l === "reset_verify" && (await s.verifyOtp({
450
450
  email: d,
451
- token: g,
452
- type: h ? "recovery" : "email"
453
- }), h && await s.updatePassword({ password: h }));
454
- } catch (M) {
455
- E(pe(M, l === "signup" ? "signup" : l === "signup_verify" || l === "reset_verify" ? "otp" : l === "forgot" ? "reset" : "signin", i));
451
+ token: A,
452
+ type: _ ? "recovery" : "email"
453
+ }), _ && await s.updatePassword({ password: _ }));
454
+ } catch (w) {
455
+ M(fe(w, l === "signup" ? "signup" : l === "signup_verify" || l === "reset_verify" ? "otp" : l === "forgot" ? "reset" : "signin", i));
456
456
  } finally {
457
- I(null);
457
+ C(null);
458
458
  }
459
459
  } finally {
460
- A.current = !1;
460
+ I.current = !1;
461
461
  }
462
462
  }
463
- }, Y = async (y) => {
464
- if (!(A.current || C)) {
465
- A.current = !0, I(y), E(null), j(null);
463
+ }, V = async (f) => {
464
+ if (!(I.current || y)) {
465
+ I.current = !0, C(f), M(null), j(null);
466
466
  try {
467
467
  await s.signInWithOAuth({
468
- provider: y,
469
- onPopupOpened: () => I(null)
468
+ provider: f,
469
+ onPopupOpened: () => C(null)
470
470
  });
471
- } catch (M) {
472
- if (M instanceof O && (M.code === "oauth_cancelled" || M.code === "oauth_timeout"))
471
+ } catch (w) {
472
+ if (w instanceof L && (w.code === "oauth_cancelled" || w.code === "oauth_timeout"))
473
473
  return;
474
- E(pe(M, "signin", i));
474
+ M(fe(w, "signin", i));
475
475
  } finally {
476
- A.current = !1, I(null);
476
+ I.current = !1, C(null);
477
477
  }
478
478
  }
479
- }, K = a.length > 0 && (l === "signin" || l === "signup"), x = l === "signin" || l === "signup" || l === "forgot", m = l === "signin" || l === "signup" && D;
479
+ }, K = a.length > 0 && (l === "signin" || l === "signup"), X = l === "signin" || l === "signup" || l === "forgot", x = l === "signin" || l === "signup" && R;
480
480
  return /* @__PURE__ */ u("div", { class: "flex flex-col gap-5", children: [
481
- /* @__PURE__ */ o(dt, { mode: l, customHeading: r.heading, customSubheading: r.subheading }),
481
+ /* @__PURE__ */ o(ht, { mode: l, customHeading: r.heading, customSubheading: r.subheading }),
482
482
  K ? /* @__PURE__ */ u("div", { class: "flex flex-col gap-2.5", children: [
483
- a.map((y) => /* @__PURE__ */ u("div", { class: "relative", children: [
483
+ a.map((f) => /* @__PURE__ */ u("div", { class: "relative", children: [
484
484
  /* @__PURE__ */ u(
485
485
  "button",
486
486
  {
487
487
  type: "button",
488
- onClick: () => Y(y),
489
- disabled: C !== null,
488
+ onClick: () => V(f),
489
+ disabled: y !== null,
490
490
  class: "flex h-12 w-full items-center justify-center gap-2.5 rounded-full border-1 border-gray-200 bg-white px-5 text-base font-medium text-gray-900 transition-all hover:border-gray-300 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-60 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--pw-accent)]",
491
491
  children: [
492
- C === y ? /* @__PURE__ */ o("span", { class: "inline-block h-4 w-4 animate-spin rounded-full border-2 border-gray-300 border-t-gray-700" }) : /* @__PURE__ */ o(kt, { provider: y }),
493
- /* @__PURE__ */ o("span", { children: lt(y, i) })
492
+ y === f ? /* @__PURE__ */ o("span", { class: "inline-block h-4 w-4 animate-spin rounded-full border-2 border-gray-300 border-t-gray-700" }) : /* @__PURE__ */ o(vt, { provider: f }),
493
+ /* @__PURE__ */ o("span", { children: ct(f, i) })
494
494
  ]
495
495
  }
496
496
  ),
497
- L?.method === y ? /* @__PURE__ */ o(xt, { email: L.email }) : null
498
- ] }, y)),
499
- /* @__PURE__ */ o(wt, {})
497
+ E?.method === f ? /* @__PURE__ */ o(xt, { email: E.email }) : null
498
+ ] }, f)),
499
+ /* @__PURE__ */ o(kt, {})
500
500
  ] }) : null,
501
- /* @__PURE__ */ u("form", { onSubmit: V, class: "flex flex-col gap-3", children: [
502
- x && /* @__PURE__ */ o(
503
- fe,
501
+ /* @__PURE__ */ u("form", { onSubmit: Y, class: "flex flex-col gap-3", children: [
502
+ X && /* @__PURE__ */ o(
503
+ ge,
504
504
  {
505
505
  type: "email",
506
506
  placeholder: i("auth.email", "Email address"),
507
507
  value: d,
508
- onInput: f,
508
+ onInput: g,
509
509
  autocomplete: "email",
510
510
  required: !0
511
511
  }
512
512
  ),
513
- m && /* @__PURE__ */ o(
514
- te,
513
+ x && /* @__PURE__ */ o(
514
+ re,
515
515
  {
516
516
  placeholder: i("auth.password", "Password"),
517
- value: h,
518
- onInput: _,
517
+ value: _,
518
+ onInput: p,
519
519
  autocomplete: l === "signin" ? "current-password" : "new-password",
520
520
  required: !0
521
521
  }
522
522
  ),
523
- l === "signup" && D && /* @__PURE__ */ o(
524
- te,
523
+ l === "signup" && R && /* @__PURE__ */ o(
524
+ re,
525
525
  {
526
526
  placeholder: i("auth.repeat_password", "Repeat password"),
527
- value: w,
528
- onInput: S,
527
+ value: v,
528
+ onInput: m,
529
529
  autocomplete: "new-password",
530
530
  required: !0
531
531
  }
532
532
  ),
533
533
  (l === "signup_verify" || l === "reset_verify") && /* @__PURE__ */ o(
534
- fe,
534
+ ge,
535
535
  {
536
536
  type: "text",
537
537
  placeholder: i("auth.confirmation_code", "Confirmation code"),
538
- value: g,
539
- onInput: k,
538
+ value: A,
539
+ onInput: b,
540
540
  autocomplete: "one-time-code",
541
541
  inputMode: "numeric",
542
542
  required: !0
543
543
  }
544
544
  ),
545
545
  l === "reset_verify" && /* @__PURE__ */ o(
546
- te,
546
+ re,
547
547
  {
548
548
  placeholder: i(
549
549
  "auth.new_password_optional",
550
550
  "New password (optional — only for password reset)"
551
551
  ),
552
- value: h,
553
- onInput: _,
552
+ value: _,
553
+ onInput: p,
554
554
  autocomplete: "new-password"
555
555
  }
556
556
  ),
557
- l === "reset_sent" && U && /* @__PURE__ */ o("p", { class: "rounded-2xl bg-gray-100 px-4 py-3 text-sm text-gray-600", children: U }),
558
- l === "signin" && t && /* @__PURE__ */ o("div", { class: "flex justify-end text-sm", children: /* @__PURE__ */ o(Z, { onClick: () => z("forgot"), children: i("auth.forgot_password", "Forgot password?") }) }),
559
- T && /* @__PURE__ */ o("p", { class: "text-sm text-red-600", children: T }),
560
- U && l !== "reset_sent" && /* @__PURE__ */ o("p", { class: "text-sm text-gray-500", children: U }),
557
+ l === "reset_sent" && O && /* @__PURE__ */ o("p", { class: "rounded-2xl bg-gray-100 px-4 py-3 text-sm text-gray-600", children: O }),
558
+ l === "signin" && t && /* @__PURE__ */ o("div", { class: "flex justify-end text-sm", children: /* @__PURE__ */ o(Z, { onClick: () => q("forgot"), children: i("auth.forgot_password", "Forgot password?") }) }),
559
+ U && /* @__PURE__ */ o("p", { class: "text-sm text-red-600", children: U }),
560
+ O && l !== "reset_sent" && /* @__PURE__ */ o("p", { class: "text-sm text-gray-500", children: O }),
561
561
  l !== "reset_sent" && /* @__PURE__ */ o(
562
- gt,
562
+ mt,
563
563
  {
564
- busy: C === "email",
565
- label: pt(l, D, r.submit_label ?? r.heading, i)
564
+ busy: y === "email",
565
+ label: ft(l, R, r.submit_label ?? r.heading, i)
566
566
  }
567
567
  )
568
568
  ] }),
569
569
  /* @__PURE__ */ o(
570
- ft,
570
+ gt,
571
571
  {
572
572
  mode: l,
573
573
  allowSignup: e,
574
- onSwitch: z
574
+ onSwitch: q
575
575
  }
576
576
  )
577
577
  ] });
578
578
  }
579
- function dt({
579
+ function ht({
580
580
  mode: r,
581
581
  customHeading: e,
582
582
  customSubheading: t
583
583
  }) {
584
- const { t: n } = v(), i = ht(r, n), s = r === "signin" || r === "signup", a = s && e ? e : i.title, c = s && t !== void 0 ? t || null : i.subtitle;
584
+ const { t: n } = S(), i = pt(r, n), s = r === "signin" || r === "signup", a = s && e ? e : i.title, c = s && t !== void 0 ? t || null : i.subtitle;
585
585
  return /* @__PURE__ */ u("div", { class: "flex flex-col gap-2", children: [
586
586
  /* @__PURE__ */ o("h2", { class: "text-3xl font-bold tracking-tight text-gray-900", children: a }),
587
587
  c ? /* @__PURE__ */ o("p", { class: "text-base leading-relaxed text-gray-600", children: c }) : null
588
588
  ] });
589
589
  }
590
- function ht(r, e) {
590
+ function pt(r, e) {
591
591
  switch (r) {
592
592
  case "signin":
593
593
  return {
@@ -630,7 +630,7 @@ function ht(r, e) {
630
630
  };
631
631
  }
632
632
  }
633
- function pt(r, e, t, n) {
633
+ function ft(r, e, t, n) {
634
634
  if (r === "signin" && t) return t;
635
635
  switch (r) {
636
636
  case "signin":
@@ -646,12 +646,12 @@ function pt(r, e, t, n) {
646
646
  return n("cta.continue", "Continue");
647
647
  }
648
648
  }
649
- function ft({
649
+ function gt({
650
650
  mode: r,
651
651
  allowSignup: e,
652
652
  onSwitch: t
653
653
  }) {
654
- const { t: n } = v();
654
+ const { t: n } = S();
655
655
  return r === "signin" && e ? /* @__PURE__ */ u("p", { class: "text-center text-sm text-gray-600", children: [
656
656
  n("auth.no_account", "Don't have an account?"),
657
657
  " ",
@@ -681,7 +681,7 @@ function Z({
681
681
  }
682
682
  );
683
683
  }
684
- function gt({ busy: r, label: e }) {
684
+ function mt({ busy: r, label: e }) {
685
685
  return /* @__PURE__ */ o(
686
686
  "button",
687
687
  {
@@ -696,7 +696,7 @@ function gt({ busy: r, label: e }) {
696
696
  }
697
697
  );
698
698
  }
699
- function fe({ type: r, placeholder: e, value: t, onInput: n, autocomplete: i, inputMode: s, required: a }) {
699
+ function ge({ type: r, placeholder: e, value: t, onInput: n, autocomplete: i, inputMode: s, required: a }) {
700
700
  return /* @__PURE__ */ o(
701
701
  "input",
702
702
  {
@@ -711,13 +711,13 @@ function fe({ type: r, placeholder: e, value: t, onInput: n, autocomplete: i, in
711
711
  }
712
712
  );
713
713
  }
714
- function te({ placeholder: r, value: e, onInput: t, autocomplete: n, required: i }) {
715
- const { t: s } = v(), [a, c] = b(!1), l = R(null);
714
+ function re({ placeholder: r, value: e, onInput: t, autocomplete: n, required: i }) {
715
+ const { t: s } = S(), [a, c] = k(!1), l = D(null);
716
716
  P(() => {
717
- const f = l.current;
718
- f && f.value !== e && (f.value = e);
717
+ const g = l.current;
718
+ g && g.value !== e && (g.value = e);
719
719
  }, [a, e]);
720
- const p = s("auth.show_password", "Show password"), d = s("auth.hide_password", "Hide password");
720
+ const h = s("auth.show_password", "Show password"), d = s("auth.hide_password", "Hide password");
721
721
  return /* @__PURE__ */ u("div", { class: "relative", children: [
722
722
  /* @__PURE__ */ o(
723
723
  "input",
@@ -726,7 +726,7 @@ function te({ placeholder: r, value: e, onInput: t, autocomplete: n, required: i
726
726
  type: a ? "text" : "password",
727
727
  value: e,
728
728
  placeholder: r,
729
- onInput: (f) => t(f.target.value),
729
+ onInput: (g) => t(g.target.value),
730
730
  autocomplete: n,
731
731
  required: i,
732
732
  class: "h-14 w-full rounded-2xl bg-gray-100 pl-5 pr-12 text-base text-gray-900 outline-none transition-all placeholder:text-gray-500 hover:bg-gray-200/60 focus:bg-gray-200/60 focus:shadow-[0_0_0_2px_color-mix(in_srgb,var(--pw-accent)_30%,transparent)]"
@@ -736,16 +736,16 @@ function te({ placeholder: r, value: e, onInput: t, autocomplete: n, required: i
736
736
  "button",
737
737
  {
738
738
  type: "button",
739
- onClick: () => c((f) => !f),
740
- "aria-label": a ? d : p,
739
+ onClick: () => c((g) => !g),
740
+ "aria-label": a ? d : h,
741
741
  tabIndex: -1,
742
742
  class: "absolute right-4 top-1/2 -translate-y-1/2 flex h-6 w-6 items-center justify-center rounded text-gray-500 transition-colors hover:text-gray-700 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--pw-accent)]",
743
- children: a ? /* @__PURE__ */ o(yt, {}) : /* @__PURE__ */ o(mt, {})
743
+ children: a ? /* @__PURE__ */ o(bt, {}) : /* @__PURE__ */ o(yt, {})
744
744
  }
745
745
  )
746
746
  ] });
747
747
  }
748
- function mt() {
748
+ function yt() {
749
749
  return /* @__PURE__ */ u("svg", { width: "18", height: "18", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: [
750
750
  /* @__PURE__ */ o(
751
751
  "path",
@@ -760,7 +760,7 @@ function mt() {
760
760
  /* @__PURE__ */ o("circle", { cx: "10", cy: "10", r: "2.5", stroke: "currentColor", "stroke-width": "1.5" })
761
761
  ] });
762
762
  }
763
- function yt() {
763
+ function bt() {
764
764
  return /* @__PURE__ */ u("svg", { width: "18", height: "18", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: [
765
765
  /* @__PURE__ */ o(
766
766
  "path",
@@ -785,22 +785,22 @@ function yt() {
785
785
  ] });
786
786
  }
787
787
  function xt({ email: r }) {
788
- const { t: e } = v(), t = r ? e("auth.last_used", "Last · {email}", { email: bt(r) }) : e("auth.last_used_no_email", "Last");
788
+ const { t: e } = S(), t = r ? e("auth.last_used", "Last · {email}", { email: wt(r) }) : e("auth.last_used_no_email", "Last");
789
789
  return /* @__PURE__ */ o("span", { class: "pointer-events-none absolute -top-2 right-3 max-w-[75%] truncate rounded-full bg-gray-900 px-2 py-0.5 text-[10px] font-semibold tracking-wide text-white shadow-sm", children: t });
790
790
  }
791
- function bt(r) {
791
+ function wt(r) {
792
792
  const [e, t] = r.split("@");
793
793
  return t ? `${e.slice(0, 3)}*****@${t}` : r;
794
794
  }
795
- function wt() {
796
- const { t: r } = v();
795
+ function kt() {
796
+ const { t: r } = S();
797
797
  return /* @__PURE__ */ u("div", { class: "flex items-center gap-3 py-1 text-sm text-gray-400", children: [
798
798
  /* @__PURE__ */ o("div", { class: "h-px flex-1 bg-gray-200" }),
799
799
  /* @__PURE__ */ o("span", { children: r("auth.or", "or") }),
800
800
  /* @__PURE__ */ o("div", { class: "h-px flex-1 bg-gray-200" })
801
801
  ] });
802
802
  }
803
- function kt({ provider: r }) {
803
+ function vt({ provider: r }) {
804
804
  return r === "google" ? /* @__PURE__ */ u("svg", { width: "20", height: "20", viewBox: "0 0 18 18", "aria-hidden": "true", children: [
805
805
  /* @__PURE__ */ o("path", { fill: "#4285F4", d: "M17.64 9.2c0-.64-.06-1.25-.16-1.84H9v3.49h4.84a4.14 4.14 0 0 1-1.79 2.71v2.26h2.9c1.7-1.56 2.69-3.87 2.69-6.62Z" }),
806
806
  /* @__PURE__ */ o("path", { fill: "#34A853", d: "M9 18c2.43 0 4.47-.8 5.96-2.18l-2.9-2.26c-.8.54-1.83.86-3.06.86-2.36 0-4.36-1.59-5.07-3.74H.92v2.33A9 9 0 0 0 9 18Z" }),
@@ -813,7 +813,7 @@ function kt({ provider: r }) {
813
813
  /* @__PURE__ */ o("svg", { width: "26", height: "26", viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ o("path", { d: "M17.05 20.28c-.98.95-2.05.8-3.08.35-1.09-.46-2.09-.48-3.24 0-1.44.62-2.2.44-3.06-.35C2.79 15.25 3.51 7.59 9.05 7.31c1.35.07 2.29.74 3.08.8 1.18-.24 2.31-.93 3.57-.84 1.51.12 2.65.72 3.4 1.8-3.12 1.87-2.38 5.98.48 7.13-.57 1.5-1.31 2.99-2.54 4.09zM12 7.25c-.15-2.23 1.66-4.07 3.74-4.25.29 2.58-2.34 4.5-3.74 4.25z" }) })
814
814
  ) : r === "github" ? /* @__PURE__ */ o("svg", { width: "20", height: "20", viewBox: "0 0 16 16", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ o("path", { d: "M8 0C3.6 0 0 3.6 0 8a8 8 0 0 0 5.5 7.6c.4.1.5-.2.5-.4v-1.5c-2.2.5-2.7-1-2.7-1-.4-.9-.9-1.2-.9-1.2-.7-.5.1-.5.1-.5.8.1 1.2.8 1.2.8.7 1.2 1.9.9 2.4.7 0-.5.3-.9.5-1.1-1.8-.2-3.6-.9-3.6-4 0-.9.3-1.6.8-2.1-.1-.2-.4-1 .1-2.1 0 0 .7-.2 2.2.8a7.6 7.6 0 0 1 4 0c1.5-1 2.2-.8 2.2-.8.4 1.1.2 1.9.1 2.1.5.5.8 1.2.8 2.1 0 3.1-1.9 3.7-3.6 3.9.3.3.6.8.6 1.6V15c0 .2.1.5.6.4A8 8 0 0 0 16 8c0-4.4-3.6-8-8-8Z" }) }) : /* @__PURE__ */ o("svg", { width: "18", height: "20", viewBox: "0 0 14 16", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ o("path", { d: "M14 2.7C14 1.2 12.8 0 11.3 0H2.7C1.2 0 0 1.2 0 2.7v10.6C0 14.8 1.2 16 2.7 16h4V9.8H4.7v-2H6.7V6.4c0-2 1.2-3.1 3-3.1.9 0 1.7.1 2 .2V5h-1.4c-.8 0-1 .4-1 1v1.5h2.4l-.3 2H9.3V16h2c1.5 0 2.7-1.2 2.7-2.7V2.7Z" }) });
815
815
  }
816
- function vt({
816
+ function _t({
817
817
  block: r,
818
818
  bootstrap: e,
819
819
  auth: t,
@@ -823,7 +823,7 @@ function vt({
823
823
  intent: a = "preauth",
824
824
  initialMode: c
825
825
  }) {
826
- const { t: l } = v(), p = {
826
+ const { t: l } = S(), h = {
827
827
  bootstrap: e,
828
828
  selectedPriceId: null,
829
829
  setSelectedPriceId: () => {
@@ -854,11 +854,11 @@ function vt({
854
854
  submit_label: l("auth.log_in", "Sign In")
855
855
  } : r;
856
856
  return /* @__PURE__ */ u("div", { class: "relative flex-1 min-h-0 overflow-y-auto p-6 sm:p-8", children: [
857
- s ? /* @__PURE__ */ o(_t, { onClick: i, ariaLabel: l("nav.back_aria", "Back") }) : null,
858
- /* @__PURE__ */ o(Le, { block: d, ctx: p })
857
+ s ? /* @__PURE__ */ o(St, { onClick: i, ariaLabel: l("nav.back_aria", "Back") }) : null,
858
+ /* @__PURE__ */ o(Me, { block: d, ctx: h })
859
859
  ] });
860
860
  }
861
- function _t({ onClick: r, ariaLabel: e }) {
861
+ function St({ onClick: r, ariaLabel: e }) {
862
862
  return /* @__PURE__ */ o(
863
863
  "button",
864
864
  {
@@ -891,8 +891,8 @@ function _t({ onClick: r, ariaLabel: e }) {
891
891
  }
892
892
  );
893
893
  }
894
- const Me = (r) => `pw-offer-${r}-start`;
895
- function re(r) {
894
+ const Ee = (r) => `pw-offer-${r}-start`;
895
+ function ne(r) {
896
896
  const e = r - Date.now();
897
897
  return e <= 0 ? { days: 0, hours: 0, minutes: 0, seconds: 0, expired: !0 } : {
898
898
  days: Math.floor(e / (1e3 * 60 * 60 * 24)),
@@ -902,7 +902,7 @@ function re(r) {
902
902
  expired: !1
903
903
  };
904
904
  }
905
- function St(r) {
905
+ function Ct(r) {
906
906
  if (r.expires_at) {
907
907
  const e = Date.parse(r.expires_at);
908
908
  return Number.isFinite(e) ? e : null;
@@ -910,7 +910,7 @@ function St(r) {
910
910
  if (r.duration_minutes && r.duration_minutes > 0) {
911
911
  if (typeof window > "u") return null;
912
912
  try {
913
- const e = Me(r.id);
913
+ const e = Ee(r.id);
914
914
  let t = window.localStorage.getItem(e);
915
915
  return t || (t = (/* @__PURE__ */ new Date()).toISOString(), window.localStorage.setItem(e, t)), Date.parse(t) + r.duration_minutes * 6e4;
916
916
  } catch {
@@ -919,7 +919,7 @@ function St(r) {
919
919
  }
920
920
  return null;
921
921
  }
922
- function Ee(r, e) {
922
+ function Te(r, e) {
923
923
  if (!r || r.length === 0) return null;
924
924
  if (e) {
925
925
  const t = r.find((n) => n.id === e);
@@ -927,29 +927,29 @@ function Ee(r, e) {
927
927
  }
928
928
  return r.find((t) => t.expires_at || t.duration_minutes) ?? null;
929
929
  }
930
- function Pe(r) {
931
- const e = r ? St(r) : null, [t, n] = b(
932
- () => e !== null ? re(e) : null
933
- ), i = R(e);
930
+ function Be(r) {
931
+ const e = r ? Ct(r) : null, [t, n] = k(
932
+ () => e !== null ? ne(e) : null
933
+ ), i = D(e);
934
934
  return i.current = e, P(() => {
935
935
  if (e === null) {
936
936
  n(null);
937
937
  return;
938
938
  }
939
- n(re(e));
939
+ n(ne(e));
940
940
  const s = setInterval(() => {
941
- const a = re(i.current ?? 0);
941
+ const a = ne(i.current ?? 0);
942
942
  if (n(a), a.expired && (clearInterval(s), r?.duration_minutes && typeof window < "u"))
943
943
  try {
944
- window.localStorage.removeItem(Me(r.id));
944
+ window.localStorage.removeItem(Ee(r.id));
945
945
  } catch {
946
946
  }
947
947
  }, 1e3);
948
948
  return () => clearInterval(s);
949
949
  }, [e, r?.duration_minutes, r?.id]), t;
950
950
  }
951
- function Ct({ block: r, ctx: e }) {
952
- const { t } = v(), n = Ee(e.bootstrap.offers, r.offer_id), i = Pe(n);
951
+ function It({ block: r, ctx: e }) {
952
+ const { t } = S(), n = Te(e.bootstrap.offers, r.offer_id), i = Be(n);
953
953
  if (!n || i === null || i.expired && !r.force) return null;
954
954
  const s = r.title ?? n.label ?? t("offer.limited_time", "Limited-time offer"), a = n.discount_percent ? `${s} ${n.discount_percent}%` : s;
955
955
  return /* @__PURE__ */ u(
@@ -962,16 +962,16 @@ function Ct({ block: r, ctx: e }) {
962
962
  },
963
963
  role: "status",
964
964
  children: [
965
- /* @__PURE__ */ o(Be, {}),
965
+ /* @__PURE__ */ o(Oe, {}),
966
966
  /* @__PURE__ */ o("span", { children: a }),
967
- /* @__PURE__ */ o(Te, { value: i, t })
967
+ /* @__PURE__ */ o(Pe, { value: i, t })
968
968
  ]
969
969
  }
970
970
  );
971
971
  }
972
- function Te({ value: r, t: e }) {
972
+ function Pe({ value: r, t: e }) {
973
973
  return /* @__PURE__ */ u("div", { class: "flex items-center gap-1 font-mono text-sm", children: [
974
- r.days > 0 ? /* @__PURE__ */ u(se, { children: [
974
+ r.days > 0 ? /* @__PURE__ */ u(ae, { children: [
975
975
  /* @__PURE__ */ o(H, { children: String(r.days) }),
976
976
  /* @__PURE__ */ o("span", { class: "text-xs", children: e("countdown.d", "d") })
977
977
  ] }) : null,
@@ -986,8 +986,8 @@ function Te({ value: r, t: e }) {
986
986
  function H({ children: r }) {
987
987
  return /* @__PURE__ */ o("span", { class: "rounded bg-black/20 px-1.5 py-0.5 text-xs font-bold", children: r });
988
988
  }
989
- function It({ offer: r }) {
990
- const { t: e } = v(), t = Pe(r);
989
+ function At({ offer: r }) {
990
+ const { t: e } = S(), t = Be(r);
991
991
  if (t === null || t.expired) return null;
992
992
  const n = r.label ?? e("offer.limited_time", "Limited-time offer"), i = r.discount_percent ? `${n} ${r.discount_percent}%` : n;
993
993
  return /* @__PURE__ */ u(
@@ -1000,14 +1000,14 @@ function It({ offer: r }) {
1000
1000
  },
1001
1001
  role: "status",
1002
1002
  children: [
1003
- /* @__PURE__ */ o(Be, {}),
1003
+ /* @__PURE__ */ o(Oe, {}),
1004
1004
  /* @__PURE__ */ o("span", { children: i }),
1005
- /* @__PURE__ */ o(Te, { value: t, t: e })
1005
+ /* @__PURE__ */ o(Pe, { value: t, t: e })
1006
1006
  ]
1007
1007
  }
1008
1008
  );
1009
1009
  }
1010
- function Be() {
1010
+ function Oe() {
1011
1011
  return /* @__PURE__ */ o(
1012
1012
  "svg",
1013
1013
  {
@@ -1026,39 +1026,39 @@ function Be() {
1026
1026
  }
1027
1027
  );
1028
1028
  }
1029
- const ge = 3, me = 200, ye = 5e3, ne = 5, At = 10 * 1024 * 1024, xe = ["image/jpeg", "image/png", "image/webp"], Lt = /.+@.+\..+/;
1030
- function Mt({ client: r, authSession: e, origin: t, onBack: n }) {
1031
- const { t: i } = v(), s = e?.user.email ?? "", a = s || null, [c, l] = b(s), [p, d] = b(""), [f, h] = b(""), [_, w] = b([]), [S, g] = b(!1), [k, C] = b(null), [I, A] = b({}), T = () => {
1032
- const B = {}, L = (a ?? c).trim(), N = p.trim(), z = f.trim();
1033
- return L ? Lt.test(L.toLowerCase()) || (B.email = i("support.invalid_email", "Invalid email")) : B.email = i("support.required", "Required"), (N.length < ge || N.length > me) && (B.subject = i("support.subject_length", "{min}–{max} characters", {
1034
- min: ge,
1035
- max: me
1036
- })), (z.length < 1 || z.length > ye) && (B.message = i("support.message_length", "{min}–{max} characters", {
1037
- min: 1,
1029
+ const me = 3, ye = 200, be = 5e3, ie = 5, Lt = 10 * 1024 * 1024, xe = ["image/jpeg", "image/png", "image/webp"], Mt = /.+@.+\..+/;
1030
+ function Et({ client: r, authSession: e, origin: t, onBack: n }) {
1031
+ const { t: i } = S(), s = e?.user.email ?? "", a = s || null, [c, l] = k(s), [h, d] = k(""), [g, _] = k(""), [p, v] = k([]), [m, A] = k(!1), [b, y] = k(null), [C, I] = k({}), U = () => {
1032
+ const T = {}, E = (a ?? c).trim(), z = h.trim(), q = g.trim();
1033
+ return E ? Mt.test(E.toLowerCase()) || (T.email = i("support.invalid_email", "Invalid email")) : T.email = i("support.required", "Required"), (z.length < me || z.length > ye) && (T.subject = i("support.subject_length", "{min}–{max} characters", {
1034
+ min: me,
1038
1035
  max: ye
1039
- })), A(B), Object.keys(B).length === 0;
1040
- }, E = async (B) => {
1041
- if (B.preventDefault(), !S && T()) {
1042
- g(!0), A((L) => ({ ...L, submit: void 0 }));
1036
+ })), (q.length < 1 || q.length > be) && (T.message = i("support.message_length", "{min}–{max} characters", {
1037
+ min: 1,
1038
+ max: be
1039
+ })), I(T), Object.keys(T).length === 0;
1040
+ }, M = async (T) => {
1041
+ if (T.preventDefault(), !m && U()) {
1042
+ A(!0), I((E) => ({ ...E, submit: void 0 }));
1043
1043
  try {
1044
- const L = (a ?? c).trim();
1044
+ const E = (a ?? c).trim();
1045
1045
  await r.createSupportTicket({
1046
- subject: p.trim(),
1047
- content: f.trim(),
1048
- email: L || void 0,
1049
- files: _.length > 0 ? _ : void 0
1050
- }), C(L);
1051
- } catch (L) {
1052
- const N = L instanceof O && L.message || "Failed to send. Please try again.";
1053
- A((z) => ({ ...z, submit: N }));
1046
+ subject: h.trim(),
1047
+ content: g.trim(),
1048
+ email: E || void 0,
1049
+ files: p.length > 0 ? p : void 0
1050
+ }), y(E);
1051
+ } catch (E) {
1052
+ const z = E instanceof L && E.message || "Failed to send. Please try again.";
1053
+ I((q) => ({ ...q, submit: z }));
1054
1054
  } finally {
1055
- g(!1);
1055
+ A(!1);
1056
1056
  }
1057
1057
  }
1058
- }, U = () => {
1059
- d(""), h(""), w([]), A({}), C(null);
1060
- }, j = "flex flex-col gap-3 bg-white px-6 pb-6 pt-3 sm:px-8", D = { boxShadow: "0 -4px 12px -4px rgba(15,23,42,0.06)" };
1061
- return k ? /* @__PURE__ */ u("div", { class: "relative flex-1 min-h-0 flex flex-col", children: [
1058
+ }, O = () => {
1059
+ d(""), _(""), v([]), I({}), y(null);
1060
+ }, j = "flex flex-col gap-3 bg-white px-6 pb-6 pt-3 sm:px-8", R = { boxShadow: "0 -4px 12px -4px rgba(15,23,42,0.06)" };
1061
+ return b ? /* @__PURE__ */ u("div", { class: "relative flex-1 min-h-0 flex flex-col", children: [
1062
1062
  /* @__PURE__ */ u("div", { class: "flex-1 min-h-0 overflow-y-auto flex flex-col items-center gap-4 px-6 pb-3 pt-6 sm:px-8 sm:pb-4 sm:pt-8 text-center", children: [
1063
1063
  /* @__PURE__ */ o(
1064
1064
  "div",
@@ -1086,11 +1086,11 @@ function Mt({ client: r, authSession: e, origin: t, onBack: n }) {
1086
1086
  "We've received your message and will respond to"
1087
1087
  ),
1088
1088
  " ",
1089
- /* @__PURE__ */ o("b", { class: "text-gray-700", children: k }),
1089
+ /* @__PURE__ */ o("b", { class: "text-gray-700", children: b }),
1090
1090
  "."
1091
1091
  ] })
1092
1092
  ] }),
1093
- /* @__PURE__ */ o("div", { class: j, style: D, children: /* @__PURE__ */ u("div", { class: "flex items-center justify-center gap-3", children: [
1093
+ /* @__PURE__ */ o("div", { class: j, style: R, children: /* @__PURE__ */ u("div", { class: "flex items-center justify-center gap-3", children: [
1094
1094
  /* @__PURE__ */ o(
1095
1095
  "button",
1096
1096
  {
@@ -1104,7 +1104,7 @@ function Mt({ client: r, authSession: e, origin: t, onBack: n }) {
1104
1104
  "button",
1105
1105
  {
1106
1106
  type: "button",
1107
- onClick: U,
1107
+ onClick: O,
1108
1108
  class: "flex h-10 items-center justify-center rounded-xl px-4 text-sm font-semibold text-white transition-all hover:-translate-y-px hover:brightness-105 focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-[var(--pw-accent)]",
1109
1109
  style: {
1110
1110
  background: "linear-gradient(180deg, color-mix(in srgb, var(--pw-accent) 92%, white), var(--pw-accent))",
@@ -1114,8 +1114,8 @@ function Mt({ client: r, authSession: e, origin: t, onBack: n }) {
1114
1114
  }
1115
1115
  )
1116
1116
  ] }) })
1117
- ] }) : /* @__PURE__ */ u("form", { onSubmit: E, class: "relative flex-1 min-h-0 flex flex-col", children: [
1118
- /* @__PURE__ */ o(Et, { onClick: n, ariaLabel: i("nav.back_aria", "Back") }),
1117
+ ] }) : /* @__PURE__ */ u("form", { onSubmit: M, class: "relative flex-1 min-h-0 flex flex-col", children: [
1118
+ /* @__PURE__ */ o(Tt, { onClick: n, ariaLabel: i("nav.back_aria", "Back") }),
1119
1119
  /* @__PURE__ */ o("div", { class: "flex-1 min-h-0 overflow-y-auto px-6 pb-3 pt-6 sm:px-8 sm:pb-4 sm:pt-8", children: /* @__PURE__ */ u("div", { class: "flex flex-col gap-5", children: [
1120
1120
  /* @__PURE__ */ u("div", { class: "flex flex-col gap-2 pr-10", children: [
1121
1121
  /* @__PURE__ */ o("h2", { class: "text-3xl font-bold tracking-tight text-gray-900", children: i("support.heading", "Support") }),
@@ -1127,50 +1127,50 @@ function Mt({ client: r, authSession: e, origin: t, onBack: n }) {
1127
1127
  " ",
1128
1128
  /* @__PURE__ */ o("b", { class: "font-medium text-gray-900", children: a })
1129
1129
  ] }) : /* @__PURE__ */ o(
1130
- be,
1130
+ we,
1131
1131
  {
1132
1132
  type: "email",
1133
1133
  placeholder: i("support.email_placeholder", "Enter your email *"),
1134
1134
  value: c,
1135
1135
  onInput: l,
1136
- error: I.email,
1136
+ error: C.email,
1137
1137
  autocomplete: "email",
1138
1138
  required: !0
1139
1139
  }
1140
1140
  ),
1141
1141
  /* @__PURE__ */ o(
1142
- be,
1142
+ we,
1143
1143
  {
1144
1144
  type: "text",
1145
1145
  placeholder: i("support.subject_placeholder", "Enter your subject *"),
1146
- value: p,
1146
+ value: h,
1147
1147
  onInput: d,
1148
- error: I.subject,
1148
+ error: C.subject,
1149
1149
  required: !0
1150
1150
  }
1151
1151
  ),
1152
1152
  /* @__PURE__ */ o(
1153
- Pt,
1153
+ Bt,
1154
1154
  {
1155
1155
  placeholder: i("support.message_placeholder", "Enter your message *"),
1156
- value: f,
1157
- onInput: h,
1158
- error: I.message,
1156
+ value: g,
1157
+ onInput: _,
1158
+ error: C.message,
1159
1159
  required: !0
1160
1160
  }
1161
1161
  ),
1162
- /* @__PURE__ */ o(Tt, { files: _, onChange: w, disabled: S })
1162
+ /* @__PURE__ */ o(Pt, { files: p, onChange: v, disabled: m })
1163
1163
  ] })
1164
1164
  ] }) }),
1165
- /* @__PURE__ */ u("div", { class: j, style: D, children: [
1166
- I.submit && /* @__PURE__ */ o("p", { class: "text-sm text-red-600", children: I.submit }),
1165
+ /* @__PURE__ */ u("div", { class: j, style: R, children: [
1166
+ C.submit && /* @__PURE__ */ o("p", { class: "text-sm text-red-600", children: C.submit }),
1167
1167
  /* @__PURE__ */ u("div", { class: "flex items-center justify-end gap-3", children: [
1168
1168
  /* @__PURE__ */ o(
1169
1169
  "button",
1170
1170
  {
1171
1171
  type: "button",
1172
1172
  onClick: n,
1173
- disabled: S,
1173
+ disabled: m,
1174
1174
  class: "rounded-full px-4 py-2 text-base font-medium text-gray-700 transition-colors hover:bg-gray-100 disabled:cursor-not-allowed disabled:opacity-60 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--pw-accent)]",
1175
1175
  children: t === "standalone" ? i("support.close_button", "Close") : i("nav.back_aria", "Back")
1176
1176
  }
@@ -1179,20 +1179,20 @@ function Mt({ client: r, authSession: e, origin: t, onBack: n }) {
1179
1179
  "button",
1180
1180
  {
1181
1181
  type: "submit",
1182
- disabled: S,
1182
+ disabled: m,
1183
1183
  class: "pw-cta-shimmer relative flex h-12 items-center justify-center overflow-hidden rounded-full px-8 text-base font-semibold text-white transition-transform duration-150 active:scale-[0.98] disabled:cursor-not-allowed disabled:opacity-60 focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-[var(--pw-accent)]",
1184
1184
  style: {
1185
1185
  background: "linear-gradient(135deg, color-mix(in srgb, var(--pw-accent) 55%, white) 0%, var(--pw-accent) 55%, color-mix(in srgb, var(--pw-accent) 90%, black) 100%)",
1186
1186
  boxShadow: "0 0 20px 0 color-mix(in srgb, var(--pw-accent) 25%, transparent), inset 0 0 8px 0 color-mix(in srgb, white 25%, transparent)"
1187
1187
  },
1188
- children: S ? /* @__PURE__ */ o("span", { class: "relative z-10 inline-block h-4 w-4 animate-spin rounded-full border-2 border-white/40 border-t-white" }) : /* @__PURE__ */ o("span", { class: "relative z-10", children: i("support.send_button", "Send") })
1188
+ children: m ? /* @__PURE__ */ o("span", { class: "relative z-10 inline-block h-4 w-4 animate-spin rounded-full border-2 border-white/40 border-t-white" }) : /* @__PURE__ */ o("span", { class: "relative z-10", children: i("support.send_button", "Send") })
1189
1189
  }
1190
1190
  )
1191
1191
  ] })
1192
1192
  ] })
1193
1193
  ] });
1194
1194
  }
1195
- function Et({ onClick: r, ariaLabel: e }) {
1195
+ function Tt({ onClick: r, ariaLabel: e }) {
1196
1196
  return /* @__PURE__ */ o(
1197
1197
  "button",
1198
1198
  {
@@ -1225,7 +1225,7 @@ function Et({ onClick: r, ariaLabel: e }) {
1225
1225
  }
1226
1226
  );
1227
1227
  }
1228
- function be({
1228
+ function we({
1229
1229
  type: r,
1230
1230
  placeholder: e,
1231
1231
  value: t,
@@ -1250,7 +1250,7 @@ function be({
1250
1250
  i && /* @__PURE__ */ o("span", { class: "mt-1 ml-2 block text-sm text-red-600", children: i })
1251
1251
  ] });
1252
1252
  }
1253
- function Pt({
1253
+ function Bt({
1254
1254
  placeholder: r,
1255
1255
  value: e,
1256
1256
  onInput: t,
@@ -1272,23 +1272,23 @@ function Pt({
1272
1272
  n && /* @__PURE__ */ o("span", { class: "mt-1 ml-2 block text-sm text-red-600", children: n })
1273
1273
  ] });
1274
1274
  }
1275
- function Tt({ files: r, onChange: e, disabled: t }) {
1276
- const { t: n } = v(), i = R(null), [s, a] = b(!1), [c, l] = b(null), p = (d) => {
1275
+ function Pt({ files: r, onChange: e, disabled: t }) {
1276
+ const { t: n } = S(), i = D(null), [s, a] = k(!1), [c, l] = k(null), h = (d) => {
1277
1277
  if (!d || t) return;
1278
1278
  l(null);
1279
- const f = Array.from(d);
1280
- if (r.length + f.length > ne) {
1281
- l(n("support.too_many_files", "Up to {max} files", { max: ne }));
1279
+ const g = Array.from(d);
1280
+ if (r.length + g.length > ie) {
1281
+ l(n("support.too_many_files", "Up to {max} files", { max: ie }));
1282
1282
  return;
1283
1283
  }
1284
- const h = f.filter(
1285
- (_) => xe.includes(_.type) && _.size <= At
1284
+ const _ = g.filter(
1285
+ (p) => xe.includes(p.type) && p.size <= Lt
1286
1286
  );
1287
- if (h.length !== f.length) {
1287
+ if (_.length !== g.length) {
1288
1288
  l(n("support.invalid_file", "Only JPEG/PNG/WebP, ≤ 10MB each"));
1289
1289
  return;
1290
1290
  }
1291
- e([...r, ...h]);
1291
+ e([...r, ..._]);
1292
1292
  };
1293
1293
  return /* @__PURE__ */ u("div", { children: [
1294
1294
  /* @__PURE__ */ o("span", { class: "text-xs font-medium text-gray-700", children: n("support.attachments_label", "Attachments (optional)") }),
@@ -1304,13 +1304,13 @@ function Tt({ files: r, onChange: e, disabled: t }) {
1304
1304
  },
1305
1305
  onDragLeave: () => a(!1),
1306
1306
  onDrop: (d) => {
1307
- d.preventDefault(), a(!1), p(d.dataTransfer?.files ?? null);
1307
+ d.preventDefault(), a(!1), h(d.dataTransfer?.files ?? null);
1308
1308
  },
1309
1309
  class: `mt-1.5 cursor-pointer rounded-2xl border border-dashed p-3.5 text-center transition-all ${s ? "border-[var(--pw-accent)] bg-[color-mix(in_srgb,var(--pw-accent)_6%,white)]" : "border-gray-300 hover:border-gray-400 hover:bg-gray-50/60"} ${t ? "cursor-not-allowed opacity-60" : ""}`,
1310
1310
  children: [
1311
1311
  /* @__PURE__ */ o("div", { class: "text-xs text-gray-500", children: n("support.dropzone_text", "Drop images here or click to select") }),
1312
1312
  /* @__PURE__ */ o("div", { class: "mt-0.5 text-[11px] text-gray-400", children: n("support.file_requirements", "JPEG/PNG/WebP, up to {max} files, ≤ 10MB each", {
1313
- max: ne
1313
+ max: ie
1314
1314
  }) })
1315
1315
  ]
1316
1316
  }
@@ -1324,12 +1324,12 @@ function Tt({ files: r, onChange: e, disabled: t }) {
1324
1324
  accept: xe.join(","),
1325
1325
  class: "hidden",
1326
1326
  onChange: (d) => {
1327
- p(d.target.files), d.currentTarget.value = "";
1327
+ h(d.target.files), d.currentTarget.value = "";
1328
1328
  }
1329
1329
  }
1330
1330
  ),
1331
1331
  c && /* @__PURE__ */ o("p", { class: "mt-1 text-xs text-red-600", children: c }),
1332
- r.length > 0 && /* @__PURE__ */ o("ul", { class: "mt-2 flex flex-col gap-1", children: r.map((d, f) => /* @__PURE__ */ u(
1332
+ r.length > 0 && /* @__PURE__ */ o("ul", { class: "mt-2 flex flex-col gap-1", children: r.map((d, g) => /* @__PURE__ */ u(
1333
1333
  "li",
1334
1334
  {
1335
1335
  class: "flex items-center justify-between gap-2 rounded bg-gray-50 px-2 py-1 text-xs",
@@ -1340,8 +1340,8 @@ function Tt({ files: r, onChange: e, disabled: t }) {
1340
1340
  {
1341
1341
  type: "button",
1342
1342
  onClick: () => {
1343
- const h = [...r];
1344
- h.splice(f, 1), e(h);
1343
+ const _ = [...r];
1344
+ _.splice(g, 1), e(_);
1345
1345
  },
1346
1346
  disabled: t,
1347
1347
  class: "text-gray-500 hover:text-red-600 disabled:cursor-not-allowed disabled:opacity-60",
@@ -1351,38 +1351,38 @@ function Tt({ files: r, onChange: e, disabled: t }) {
1351
1351
  )
1352
1352
  ]
1353
1353
  },
1354
- `${d.name}-${d.size}-${f}`
1354
+ `${d.name}-${d.size}-${g}`
1355
1355
  )) })
1356
1356
  ] });
1357
1357
  }
1358
- const Bt = {
1358
+ const Ot = {
1359
1359
  day: "cta.get_plan_daily",
1360
1360
  week: "cta.get_plan_weekly",
1361
1361
  month: "cta.get_plan_monthly",
1362
1362
  year: "cta.get_plan_yearly"
1363
- }, Ot = {
1363
+ }, Ut = {
1364
1364
  day: "Get Daily Plan",
1365
1365
  week: "Get Weekly Plan",
1366
1366
  month: "Get Monthly Plan",
1367
1367
  year: "Get Yearly Plan"
1368
1368
  };
1369
- function Ut(r, e, t, n) {
1369
+ function jt(r, e, t, n) {
1370
1370
  if (e === "close") return n("cta.close", "Close");
1371
1371
  if (!r) return n("cta.continue", "Continue");
1372
1372
  if (!t && r.trial_days && r.interval && r.interval !== "lifetime")
1373
1373
  return n("cta.start_trial", "Start {days}-Day Free Trial", { days: r.trial_days });
1374
1374
  if (!r.interval || r.interval === "lifetime")
1375
1375
  return n("cta.get_lifetime_access", "Get Lifetime Access");
1376
- const i = Bt[r.interval];
1377
- return i ? n(i, Ot[r.interval]) : n("cta.get_plan_generic", "Get {interval} Plan", {
1378
- interval: jt(r.interval)
1376
+ const i = Ot[r.interval];
1377
+ return i ? n(i, Ut[r.interval]) : n("cta.get_plan_generic", "Get {interval} Plan", {
1378
+ interval: Dt(r.interval)
1379
1379
  });
1380
1380
  }
1381
- function jt(r) {
1381
+ function Dt(r) {
1382
1382
  return r.length ? r[0].toUpperCase() + r.slice(1) : r;
1383
1383
  }
1384
1384
  function Rt({ block: r, ctx: e }) {
1385
- const { t } = v(), [n, i] = b(!1), s = r.priceId ?? e.selectedPriceId, a = n || r.action === "checkout" && !s, c = s ? e.bootstrap.prices.find((f) => f.id === s) ?? null : null, l = e.bootstrap.user?.had_previous_trial ?? !1, p = r.label ?? Ut(c, r.action, l, t);
1385
+ const { t } = S(), [n, i] = k(!1), s = r.priceId ?? e.selectedPriceId, a = n || r.action === "checkout" && !s, c = s ? e.bootstrap.prices.find((g) => g.id === s) ?? null : null, l = e.bootstrap.user?.had_previous_trial ?? !1, h = r.label ?? jt(c, r.action, l, t);
1386
1386
  return /* @__PURE__ */ u(
1387
1387
  "button",
1388
1388
  {
@@ -1414,13 +1414,13 @@ function Rt({ block: r, ctx: e }) {
1414
1414
  "aria-hidden": "true"
1415
1415
  }
1416
1416
  ),
1417
- n ? /* @__PURE__ */ o("span", { class: "relative z-10 inline-block h-4 w-4 animate-spin rounded-full border-2 border-white/40 border-t-white" }) : /* @__PURE__ */ o("span", { class: "relative z-10", children: p })
1417
+ n ? /* @__PURE__ */ o("span", { class: "relative z-10 inline-block h-4 w-4 animate-spin rounded-full border-2 border-white/40 border-t-white" }) : /* @__PURE__ */ o("span", { class: "relative z-10", children: h })
1418
1418
  ]
1419
1419
  }
1420
1420
  );
1421
1421
  }
1422
- function Dt({ ctx: r }) {
1423
- const { t: e } = v(), t = r.authSession, n = r.auth, [i, s] = b(!1), a = () => r.onAction("support");
1422
+ function zt({ ctx: r }) {
1423
+ const { t: e } = S(), t = r.authSession, n = r.auth, [i, s] = k(!1), a = () => r.onAction("support");
1424
1424
  if (t && !t.user.is_anonymous) {
1425
1425
  const c = async () => {
1426
1426
  if (!(!n || i)) {
@@ -1441,14 +1441,14 @@ function Dt({ ctx: r }) {
1441
1441
  ] }),
1442
1442
  /* @__PURE__ */ u("div", { class: "flex items-center justify-center gap-3", children: [
1443
1443
  /* @__PURE__ */ o(G, { onClick: c, disabled: !n || i, children: i ? e("session.signing_out", "Signing out…") : e("session.sign_out", "Sign Out") }),
1444
- /* @__PURE__ */ o(we, {}),
1444
+ /* @__PURE__ */ o(ke, {}),
1445
1445
  /* @__PURE__ */ o(G, { onClick: a, children: e("session.contact_support", "Contact Support") })
1446
1446
  ] })
1447
1447
  ] });
1448
1448
  }
1449
1449
  return /* @__PURE__ */ u("div", { class: "-mt-3 flex items-center justify-center gap-3 pt-1 text-center text-[13px]", children: [
1450
1450
  /* @__PURE__ */ o(G, { onClick: () => r.onAction("restore"), children: e("session.restore_purchases", "Restore purchases") }),
1451
- /* @__PURE__ */ o(we, {}),
1451
+ /* @__PURE__ */ o(ke, {}),
1452
1452
  /* @__PURE__ */ o(G, { onClick: a, children: e("session.contact_support", "Contact Support") })
1453
1453
  ] });
1454
1454
  }
@@ -1469,10 +1469,10 @@ function G({
1469
1469
  }
1470
1470
  );
1471
1471
  }
1472
- function we() {
1472
+ function ke() {
1473
1473
  return /* @__PURE__ */ o("span", { class: "h-1 w-1 rounded-full bg-gray-300", "aria-hidden": "true" });
1474
1474
  }
1475
- function zt({ block: r }) {
1475
+ function qt({ block: r }) {
1476
1476
  return r.items.length ? /* @__PURE__ */ o("ul", { class: "flex flex-col gap-2.5", role: "list", children: r.items.map((e) => /* @__PURE__ */ u("li", { class: "flex items-start gap-3 text-sm text-gray-700", children: [
1477
1477
  /* @__PURE__ */ o(
1478
1478
  "svg",
@@ -1502,10 +1502,10 @@ function zt({ block: r }) {
1502
1502
  ] }, e.id)) }) : null;
1503
1503
  }
1504
1504
  function Nt({ block: r }) {
1505
- const { t: e } = v(), t = r.title ?? e("pricing.money_back", "30-day money-back guarantee"), n = r.subtitle, i = (r.icon ?? "dollar_shield") !== "none", s = qt(t);
1505
+ const { t: e } = S(), t = r.title ?? e("pricing.money_back", "30-day money-back guarantee"), n = r.subtitle, i = (r.icon ?? "dollar_shield") !== "none", s = Ft(t);
1506
1506
  return /* @__PURE__ */ u("div", { class: "flex flex-col items-center gap-1.5 border-b-1 pb-4 mb-1 border-gray-100", children: [
1507
1507
  /* @__PURE__ */ u("div", { class: "inline-flex items-center gap-2 text-[12px] text-gray-700", children: [
1508
- i ? /* @__PURE__ */ o(Ft, {}) : null,
1508
+ i ? /* @__PURE__ */ o($t, {}) : null,
1509
1509
  s ? /* @__PURE__ */ u("span", { children: [
1510
1510
  /* @__PURE__ */ o("b", { class: "font-bold text-gray-900", children: s.bold }),
1511
1511
  " ",
@@ -1515,11 +1515,11 @@ function Nt({ block: r }) {
1515
1515
  n ? /* @__PURE__ */ o("span", { class: "text-center text-xs leading-relaxed text-gray-500", children: n }) : null
1516
1516
  ] });
1517
1517
  }
1518
- function qt(r) {
1518
+ function Ft(r) {
1519
1519
  const e = r.match(/^(\d+[-\s]?days?)\s+(.+)$/i);
1520
1520
  return e ? { bold: e[1], rest: e[2] } : null;
1521
1521
  }
1522
- function Ft() {
1522
+ function $t() {
1523
1523
  return /* @__PURE__ */ u(
1524
1524
  "svg",
1525
1525
  {
@@ -1554,22 +1554,22 @@ function Ft() {
1554
1554
  }
1555
1555
  );
1556
1556
  }
1557
- const Oe = 24, $t = 16, Vt = 2;
1558
- function Ht(r, e) {
1559
- const t = e * Vt;
1560
- let n = Oe;
1561
- for (r.style.fontSize = `${n}px`; r.scrollHeight > t && n > $t; )
1557
+ const Ue = 24, Vt = 16, Ht = 2;
1558
+ function Gt(r, e) {
1559
+ const t = e * Ht;
1560
+ let n = Ue;
1561
+ for (r.style.fontSize = `${n}px`; r.scrollHeight > t && n > Vt; )
1562
1562
  n -= 1, r.style.fontSize = `${n}px`;
1563
1563
  }
1564
- function Gt({ block: r, ctx: e }) {
1565
- const t = r.level ?? 1, n = `h${t}`, i = t === 1 ? "text-[22px] sm:text-2xl font-semibold leading-tight text-center text-balance text-gray-800" : t === 2 ? "text-xl font-semibold leading-snug text-gray-900 tracking-tight" : "text-base font-medium text-gray-900", s = R(null), a = t === 1 && !!e.bootstrap.settings.title_auto_fit;
1564
+ function Wt({ block: r, ctx: e }) {
1565
+ const t = r.level ?? 1, n = `h${t}`, i = t === 1 ? "text-[22px] sm:text-2xl font-semibold leading-tight text-center text-balance text-gray-800" : t === 2 ? "text-xl font-semibold leading-snug text-gray-900 tracking-tight" : "text-base font-medium text-gray-900", s = D(null), a = t === 1 && !!e.bootstrap.settings.title_auto_fit;
1566
1566
  return P(() => {
1567
1567
  if (!a || !s.current) return;
1568
- const c = getComputedStyle(s.current), l = parseFloat(c.lineHeight) || Oe * 1.5;
1569
- Ht(s.current, l);
1568
+ const c = getComputedStyle(s.current), l = parseFloat(c.lineHeight) || Ue * 1.5;
1569
+ Gt(s.current, l);
1570
1570
  }, [a, r.text]), /* @__PURE__ */ o(n, { ref: s, class: i, children: r.text });
1571
1571
  }
1572
- function Wt(r) {
1572
+ function Zt(r) {
1573
1573
  const e = r.local ?? { currency: r.currency, amount: r.amount };
1574
1574
  if (r.interval === "year") {
1575
1575
  const t = (r.interval_count ?? 1) * 12;
@@ -1577,7 +1577,7 @@ function Wt(r) {
1577
1577
  }
1578
1578
  return { amount: e.amount, currency: e.currency };
1579
1579
  }
1580
- function ie(r, e) {
1580
+ function oe(r, e) {
1581
1581
  const t = r % 1 !== 0 ? 2 : 0;
1582
1582
  try {
1583
1583
  const n = new Intl.NumberFormat(void 0, {
@@ -1595,20 +1595,20 @@ function ie(r, e) {
1595
1595
  return { currency: e, amount: String(r) };
1596
1596
  }
1597
1597
  }
1598
- function ae(r, e) {
1599
- const { amount: t, currency: n } = Wt(r);
1598
+ function le(r, e) {
1599
+ const { amount: t, currency: n } = Zt(r);
1600
1600
  if (!e) {
1601
- const { currency: c, amount: l } = ie(t, n);
1601
+ const { currency: c, amount: l } = oe(t, n);
1602
1602
  return { currency: c, amount: l, originalAmount: null };
1603
1603
  }
1604
- const i = t * (1 - e / 100), s = ie(i, n), a = ie(t, n);
1604
+ const i = t * (1 - e / 100), s = oe(i, n), a = oe(t, n);
1605
1605
  return {
1606
1606
  currency: s.currency,
1607
1607
  amount: s.amount,
1608
1608
  originalAmount: `${a.currency}${a.amount}`
1609
1609
  };
1610
1610
  }
1611
- function Ue(r, e) {
1611
+ function je(r, e) {
1612
1612
  if (r.label) return r.label.toUpperCase();
1613
1613
  if (!r.interval || r.interval === "lifetime")
1614
1614
  return e("pricing.plan_label.lifetime", "LIFETIME");
@@ -1620,15 +1620,15 @@ function Ue(r, e) {
1620
1620
  }[r.interval];
1621
1621
  return n ? e(n.key, n.fallback) : `${r.interval.toUpperCase()} PLAN`;
1622
1622
  }
1623
- function le(r, e) {
1623
+ function ce(r, e) {
1624
1624
  if (!r.interval || r.interval === "lifetime")
1625
1625
  return e("pricing.interval.lifetime_short", "lifetime");
1626
1626
  if (r.interval === "year") return e("pricing.interval.month", "month");
1627
1627
  const t = r.interval_count ?? 1;
1628
1628
  return t === 1 ? e(`pricing.interval.${r.interval}`, r.interval) : `${t} ${r.interval}s`;
1629
1629
  }
1630
- function Zt({ block: r, ctx: e }) {
1631
- const { t } = v(), n = r.priceIds && r.priceIds.length > 0 ? new Set(r.priceIds) : null, i = e.bootstrap.prices.filter((a) => !n || n.has(a.id));
1630
+ function Yt({ block: r, ctx: e }) {
1631
+ const { t } = S(), n = r.priceIds && r.priceIds.length > 0 ? new Set(r.priceIds) : null, i = e.bootstrap.prices.filter((a) => !n || n.has(a.id));
1632
1632
  if (i.length === 0)
1633
1633
  return /* @__PURE__ */ o("p", { class: "text-sm text-gray-500", children: t("pricing.no_prices", "No prices available.") });
1634
1634
  const s = r.popular_label ?? t("pricing.most_popular", "Most popular");
@@ -1640,13 +1640,13 @@ function Zt({ block: r, ctx: e }) {
1640
1640
  role: "radiogroup",
1641
1641
  "aria-label": t("pricing.plans_aria", "Plans"),
1642
1642
  children: i.map((a, c) => /* @__PURE__ */ o(
1643
- Kt,
1643
+ Xt,
1644
1644
  {
1645
1645
  price: a,
1646
1646
  isLast: c === i.length - 1,
1647
1647
  isPopular: r.popular_price_id === a.id,
1648
1648
  popularLabel: s,
1649
- offer: $(e.bootstrap.offers, a.id),
1649
+ offer: N(e.bootstrap.offers, a.id),
1650
1650
  selected: e.selectedPriceId === a.id,
1651
1651
  onSelect: () => {
1652
1652
  e.setSelectedPriceId(a.id), e.onAction("price_selected", { priceId: a.id, price: a });
@@ -1659,7 +1659,7 @@ function Zt({ block: r, ctx: e }) {
1659
1659
  );
1660
1660
  if (r.view === "horizontal") {
1661
1661
  const a = Math.min(i.length, 3), c = i.some(
1662
- (l) => ($(e.bootstrap.offers, l.id)?.discount_percent ?? 0) > 0
1662
+ (l) => (N(e.bootstrap.offers, l.id)?.discount_percent ?? 0) > 0
1663
1663
  );
1664
1664
  return /* @__PURE__ */ o(
1665
1665
  "div",
@@ -1669,12 +1669,12 @@ function Zt({ block: r, ctx: e }) {
1669
1669
  role: "radiogroup",
1670
1670
  "aria-label": t("pricing.plans_aria", "Plans"),
1671
1671
  children: i.map((l) => /* @__PURE__ */ o(
1672
- Xt,
1672
+ Jt,
1673
1673
  {
1674
1674
  price: l,
1675
1675
  isPopular: r.popular_price_id === l.id,
1676
1676
  popularLabel: s,
1677
- offer: $(e.bootstrap.offers, l.id),
1677
+ offer: N(e.bootstrap.offers, l.id),
1678
1678
  reserveStrikeRow: c,
1679
1679
  selected: e.selectedPriceId === l.id,
1680
1680
  onSelect: () => {
@@ -1694,7 +1694,7 @@ function Zt({ block: r, ctx: e }) {
1694
1694
  role: "radiogroup",
1695
1695
  "aria-label": t("pricing.plans_aria", "Plans"),
1696
1696
  children: i.map((a) => {
1697
- const c = e.selectedPriceId === a.id, l = r.popular_price_id === a.id, d = $(e.bootstrap.offers, a.id)?.discount_percent ?? null, { currency: f, amount: h, originalAmount: _ } = ae(a, d);
1697
+ const c = e.selectedPriceId === a.id, l = r.popular_price_id === a.id, d = N(e.bootstrap.offers, a.id)?.discount_percent ?? null, { currency: g, amount: _, originalAmount: p } = le(a, d);
1698
1698
  return /* @__PURE__ */ u(
1699
1699
  "button",
1700
1700
  {
@@ -1750,12 +1750,12 @@ function Zt({ block: r, ctx: e }) {
1750
1750
  ),
1751
1751
  /* @__PURE__ */ u("div", { class: "flex flex-1 flex-col gap-0.5", children: [
1752
1752
  /* @__PURE__ */ u("div", { class: "flex flex-wrap items-center gap-x-2 gap-y-1", children: [
1753
- /* @__PURE__ */ o("span", { class: "text-xs font-normal uppercase tracking-normal text-gray-800/70", children: Ue(a, t) }),
1754
- _ ? (
1753
+ /* @__PURE__ */ o("span", { class: "text-xs font-normal uppercase tracking-normal text-gray-800/70", children: je(a, t) }),
1754
+ p ? (
1755
1755
  // opacity-60 приглушает strike: глаз сначала ловит label
1756
1756
  // и discount-badge, потом main price; original «бывшая цена»
1757
1757
  // — третичная информация, не должна конкурировать с label.
1758
- /* @__PURE__ */ o("span", { class: "text-[15px] font-normal text-gray-400 opacity-60 line-through decoration-gray-400 decoration-[1.5px]", children: _ })
1758
+ /* @__PURE__ */ o("span", { class: "text-[15px] font-normal text-gray-400 opacity-60 line-through decoration-gray-400 decoration-[1.5px]", children: p })
1759
1759
  ) : null,
1760
1760
  d ? (
1761
1761
  // Emerald pill — фиксированный «успех/выгода», не зависит от
@@ -1768,12 +1768,12 @@ function Zt({ block: r, ctx: e }) {
1768
1768
  ) : null
1769
1769
  ] }),
1770
1770
  /* @__PURE__ */ o("div", { class: "flex items-baseline gap-2 flex-wrap", children: /* @__PURE__ */ u("span", { class: "text-[26px] leading-tight whitespace-nowrap text-gray-800 font-medium", children: [
1771
- /* @__PURE__ */ o("span", { class: "opacity-90", children: f }),
1772
- h,
1771
+ /* @__PURE__ */ o("span", { class: "opacity-90", children: g }),
1772
+ _,
1773
1773
  /* @__PURE__ */ u("span", { class: "text-sm font-normal text-gray-500", children: [
1774
1774
  " ",
1775
1775
  "/ ",
1776
- le(a, t)
1776
+ ce(a, t)
1777
1777
  ] })
1778
1778
  ] }) }),
1779
1779
  a.description ? /* @__PURE__ */ o("span", { class: "mt-1 text-xs leading-relaxed text-gray-500", children: a.description }) : null
@@ -1794,10 +1794,10 @@ function Zt({ block: r, ctx: e }) {
1794
1794
  }
1795
1795
  );
1796
1796
  }
1797
- function Yt(r, e) {
1797
+ function Kt(r, e) {
1798
1798
  return r.label ? r.label : !r.interval || r.interval === "lifetime" ? e("pricing.interval.lifetime_short", "lifetime") : e(`pricing.interval.${r.interval}`, r.interval);
1799
1799
  }
1800
- function Kt({
1800
+ function Xt({
1801
1801
  price: r,
1802
1802
  isLast: e,
1803
1803
  isPopular: t,
@@ -1807,7 +1807,7 @@ function Kt({
1807
1807
  onSelect: a,
1808
1808
  t: c
1809
1809
  }) {
1810
- const l = i?.discount_percent ?? null, { currency: p, amount: d, originalAmount: f } = ae(r, l);
1810
+ const l = i?.discount_percent ?? null, { currency: h, amount: d, originalAmount: g } = le(r, l);
1811
1811
  return /* @__PURE__ */ u(
1812
1812
  "button",
1813
1813
  {
@@ -1857,7 +1857,7 @@ function Kt({
1857
1857
  ].join(" "),
1858
1858
  children: [
1859
1859
  /* @__PURE__ */ u("div", { class: "flex flex-wrap items-center gap-1 gap-x-1.5", children: [
1860
- /* @__PURE__ */ o("span", { class: "text-base font-normal capitalize text-gray-800", children: Yt(r, c) }),
1860
+ /* @__PURE__ */ o("span", { class: "text-base font-normal capitalize text-gray-800", children: Kt(r, c) }),
1861
1861
  t ? (
1862
1862
  // Pastel brand-mix pill — точно как `badge` в TelegramPricingRadio.
1863
1863
  // Низкий visual weight: pill про "имя плана" (most popular), а не
@@ -1882,14 +1882,14 @@ function Kt({
1882
1882
  ] }),
1883
1883
  /* @__PURE__ */ o("div", { class: "flex-1" }),
1884
1884
  /* @__PURE__ */ u("span", { class: "flex items-baseline gap-1.5 text-base font-normal text-gray-600", children: [
1885
- f ? /* @__PURE__ */ o("span", { class: "text-xs text-gray-400 line-through decoration-gray-400 decoration-[1.5px]", children: f }) : null,
1885
+ g ? /* @__PURE__ */ o("span", { class: "text-xs text-gray-400 line-through decoration-gray-400 decoration-[1.5px]", children: g }) : null,
1886
1886
  /* @__PURE__ */ u("span", { class: "whitespace-nowrap", children: [
1887
- /* @__PURE__ */ o("span", { class: "opacity-90", children: p }),
1887
+ /* @__PURE__ */ o("span", { class: "opacity-90", children: h }),
1888
1888
  d,
1889
1889
  /* @__PURE__ */ u("span", { class: "text-xs text-gray-400", children: [
1890
1890
  " ",
1891
1891
  "/ ",
1892
- le(r, c)
1892
+ ce(r, c)
1893
1893
  ] })
1894
1894
  ] })
1895
1895
  ] })
@@ -1900,7 +1900,7 @@ function Kt({
1900
1900
  }
1901
1901
  );
1902
1902
  }
1903
- function Xt({
1903
+ function Jt({
1904
1904
  price: r,
1905
1905
  isPopular: e,
1906
1906
  popularLabel: t,
@@ -1910,7 +1910,7 @@ function Xt({
1910
1910
  onSelect: a,
1911
1911
  t: c
1912
1912
  }) {
1913
- const l = n?.discount_percent ?? null, { currency: p, amount: d, originalAmount: f } = ae(r, l);
1913
+ const l = n?.discount_percent ?? null, { currency: h, amount: d, originalAmount: g } = le(r, l);
1914
1914
  return /* @__PURE__ */ u(
1915
1915
  "button",
1916
1916
  {
@@ -1924,9 +1924,9 @@ function Xt({
1924
1924
  ].join(" "),
1925
1925
  style: s ? { background: "color-mix(in srgb, var(--pw-accent) 6%, transparent)" } : void 0,
1926
1926
  children: [
1927
- /* @__PURE__ */ o("span", { class: "flex min-h-[2.4em] items-center text-[10px] font-normal uppercase leading-tight text-gray-800/70", children: Ue(r, c) }),
1927
+ /* @__PURE__ */ o("span", { class: "flex min-h-[2.4em] items-center text-[10px] font-normal uppercase leading-tight text-gray-800/70", children: je(r, c) }),
1928
1928
  i ? /* @__PURE__ */ u("div", { class: "flex h-[22px] items-center justify-center gap-1.5", children: [
1929
- f ? /* @__PURE__ */ o("span", { class: "text-[12px] text-gray-400 line-through decoration-gray-400 decoration-[1.5px]", children: f }) : null,
1929
+ g ? /* @__PURE__ */ o("span", { class: "text-[12px] text-gray-400 line-through decoration-gray-400 decoration-[1.5px]", children: g }) : null,
1930
1930
  l ? /* @__PURE__ */ u("span", { class: "rounded-md bg-emerald-100 px-1.5 py-0.5 text-[10px] font-bold leading-none text-emerald-700", children: [
1931
1931
  "-",
1932
1932
  l,
@@ -1934,12 +1934,12 @@ function Xt({
1934
1934
  ] }) : null
1935
1935
  ] }) : null,
1936
1936
  /* @__PURE__ */ u("span", { class: "text-[26px] leading-none whitespace-nowrap text-gray-800 font-medium", children: [
1937
- /* @__PURE__ */ o("span", { class: "opacity-90", children: p }),
1937
+ /* @__PURE__ */ o("span", { class: "opacity-90", children: h }),
1938
1938
  d
1939
1939
  ] }),
1940
1940
  /* @__PURE__ */ u("span", { class: "text-xs font-normal text-gray-500", children: [
1941
1941
  "/ ",
1942
- le(r, c)
1942
+ ce(r, c)
1943
1943
  ] }),
1944
1944
  e ? /* @__PURE__ */ o(
1945
1945
  "span",
@@ -1953,24 +1953,24 @@ function Xt({
1953
1953
  }
1954
1954
  );
1955
1955
  }
1956
- function Jt({ block: r }) {
1956
+ function Qt({ block: r }) {
1957
1957
  return /* @__PURE__ */ o("p", { class: "text-[0.9375rem] leading-relaxed text-gray-600", children: r.text });
1958
1958
  }
1959
- const Qt = {
1959
+ const er = {
1960
1960
  week: 0.25,
1961
1961
  month: 1,
1962
1962
  year: 12
1963
1963
  };
1964
- function er(r, e) {
1964
+ function tr(r, e) {
1965
1965
  return r ? e(`pricing.interval.${r}`, r) : e("pricing.interval.period", "period");
1966
1966
  }
1967
- function tr({ block: r, ctx: e }) {
1968
- const { t } = v();
1967
+ function rr({ block: r, ctx: e }) {
1968
+ const { t } = S();
1969
1969
  if (!r.queries.length) return null;
1970
- const i = e.bootstrap.prices.find((a) => a.id === e.selectedPriceId)?.interval ?? null, s = i ? Qt[i] : void 0;
1970
+ const i = e.bootstrap.prices.find((a) => a.id === e.selectedPriceId)?.interval ?? null, s = i ? er[i] : void 0;
1971
1971
  return /* @__PURE__ */ u("div", { class: "flex flex-col gap-2", children: [
1972
1972
  /* @__PURE__ */ o("div", { class: "text-sm font-semibold text-gray-800", children: !i || i === "lifetime" ? t("pricing.included_total", "Included for lifetime:") : t("pricing.included_per", "Included per {interval}:", {
1973
- interval: er(i, t)
1973
+ interval: tr(i, t)
1974
1974
  }) }),
1975
1975
  /* @__PURE__ */ o("ul", { class: "flex flex-col gap-2", role: "list", children: r.queries.map((a) => {
1976
1976
  const c = Number.isFinite(a.count) ? a.count : 0, l = s !== void 0 ? Math.round(c * s) : c;
@@ -2000,7 +2000,7 @@ function tr({ block: r, ctx: e }) {
2000
2000
  /* @__PURE__ */ o("span", { class: "font-semibold text-gray-900 text-sm", children: l }),
2001
2001
  " ",
2002
2002
  /* @__PURE__ */ o("span", { class: "text-sm text-gray-800", children: a.name }),
2003
- a.desc ? /* @__PURE__ */ u(se, { children: [
2003
+ a.desc ? /* @__PURE__ */ u(ae, { children: [
2004
2004
  /* @__PURE__ */ o("br", {}),
2005
2005
  /* @__PURE__ */ o("span", { class: "text-xs text-gray-400", children: a.desc })
2006
2006
  ] }) : null
@@ -2009,38 +2009,38 @@ function tr({ block: r, ctx: e }) {
2009
2009
  }) })
2010
2010
  ] });
2011
2011
  }
2012
- const rr = {
2013
- heading: Gt,
2014
- text: Jt,
2015
- price_grid: Zt,
2012
+ const nr = {
2013
+ heading: Wt,
2014
+ text: Qt,
2015
+ price_grid: Yt,
2016
2016
  cta_button: Rt,
2017
- auth_panel: Le,
2018
- current_session: Dt,
2019
- features_list: zt,
2020
- tokenization_gate: tr,
2017
+ auth_panel: Me,
2018
+ current_session: zt,
2019
+ features_list: qt,
2020
+ tokenization_gate: rr,
2021
2021
  guarantee_badge: Nt,
2022
- offer_banner: Ct
2022
+ offer_banner: It
2023
2023
  };
2024
- function nr({ layout: r, bootstrap: e, onAction: t, auth: n, authSession: i, hasTopBanner: s }) {
2025
- const a = He(() => {
2026
- for (const w of r.blocks)
2027
- if (w.type === "price_grid" && w.popular_price_id && e.prices.some((S) => S.id === w.popular_price_id))
2028
- return w.popular_price_id;
2024
+ function ir({ layout: r, bootstrap: e, onAction: t, auth: n, authSession: i, hasTopBanner: s }) {
2025
+ const a = Ge(() => {
2026
+ for (const v of r.blocks)
2027
+ if (v.type === "price_grid" && v.popular_price_id && e.prices.some((m) => m.id === v.popular_price_id))
2028
+ return v.popular_price_id;
2029
2029
  return e.prices[0]?.id ?? null;
2030
- }, [r.blocks, e.prices]), [c, l] = b(a), p = {
2030
+ }, [r.blocks, e.prices]), [c, l] = k(a), h = {
2031
2031
  bootstrap: e,
2032
2032
  selectedPriceId: c,
2033
2033
  setSelectedPriceId: l,
2034
2034
  onAction: t,
2035
2035
  auth: n,
2036
2036
  authSession: i
2037
- }, d = r.blocks.findIndex((w) => w.type === "cta_button"), f = d === -1 ? r.blocks : r.blocks.slice(0, d), h = d === -1 ? [] : r.blocks.slice(d), _ = (w, S) => {
2038
- const g = rr[w.type];
2039
- return g ? /* @__PURE__ */ o(g, { block: w, ctx: p }, `${w.type}-${S}`) : (typeof console < "u" && console.warn(`[paywall] unknown block type: ${w.type}`), null);
2037
+ }, d = r.blocks.findIndex((v) => v.type === "cta_button"), g = d === -1 ? r.blocks : r.blocks.slice(0, d), _ = d === -1 ? [] : r.blocks.slice(d), p = (v, m) => {
2038
+ const A = nr[v.type];
2039
+ return A ? /* @__PURE__ */ o(A, { block: v, ctx: h }, `${v.type}-${m}`) : (typeof console < "u" && console.warn(`[paywall] unknown block type: ${v.type}`), null);
2040
2040
  };
2041
- return /* @__PURE__ */ u(se, { children: [
2042
- /* @__PURE__ */ o("div", { class: "flex-1 min-h-0 overflow-y-auto px-6 pb-3 pt-6 sm:px-8 sm:pb-4 sm:pt-8", children: /* @__PURE__ */ o("div", { class: "flex flex-col gap-6", children: f.map(_) }) }),
2043
- h.length > 0 ? (
2041
+ return /* @__PURE__ */ u(ae, { children: [
2042
+ /* @__PURE__ */ o("div", { class: "flex-1 min-h-0 overflow-y-auto px-6 pb-3 pt-6 sm:px-8 sm:pb-4 sm:pt-8", children: /* @__PURE__ */ o("div", { class: "flex flex-col gap-6", children: g.map(p) }) }),
2043
+ _.length > 0 ? (
2044
2044
  // Тонкий shadow-top вместо border-t — создаёт depth, читается как
2045
2045
  // «footer закреплён к низу dialog'а». Линия выглядела как divider
2046
2046
  // в обычном flow, не передавала sticky-character.
@@ -2049,19 +2049,19 @@ function nr({ layout: r, bootstrap: e, onAction: t, auth: n, authSession: i, has
2049
2049
  {
2050
2050
  class: "flex flex-col gap-4 bg-white px-6 pb-6 pt-3 sm:px-8",
2051
2051
  style: { boxShadow: "0 -4px 12px -4px rgba(15,23,42,0.06)" },
2052
- children: h.map((w, S) => _(w, f.length + S))
2052
+ children: _.map((v, m) => p(v, g.length + m))
2053
2053
  }
2054
2054
  )
2055
2055
  ) : null
2056
2056
  ] });
2057
2057
  }
2058
- function ir(r, e, t, n) {
2059
- return r ? n ? { open: !0, view: "purchased", error: null } : e.status === "idle" || e.status === "loading" ? { open: !0, view: "loading", error: null } : e.status === "error" ? { open: !0, view: "error", error: e.error } : t.kind === "support" ? { open: !0, view: "support", error: null } : t.kind === "auth_gate" ? { open: !0, view: "auth", error: null } : t.kind === "awaiting_payment" ? { open: !0, view: "awaiting_payment", error: null } : t.kind === "popup_blocked" ? { open: !0, view: "popup_blocked", error: null } : t.kind === "purchase_success" ? { open: !0, view: "purchased", error: null } : t.kind === "verifying" || t.kind === "direct_checkout_pending" ? { open: !0, view: "loading", error: null } : { open: !0, view: "layout", error: null } : { open: !1, view: null, error: null };
2058
+ function or(r, e, t, n) {
2059
+ return r ? n ? { open: !0, view: "purchased", error: null, processing: !1 } : e.status === "idle" || e.status === "loading" ? { open: !0, view: "loading", error: null, processing: !1 } : e.status === "error" ? { open: !0, view: "error", error: e.error, processing: !1 } : t.kind === "support" ? { open: !0, view: "support", error: null, processing: !1 } : t.kind === "auth_gate" ? { open: !0, view: "auth", error: null, processing: !1 } : t.kind === "awaiting_payment" ? { open: !0, view: "awaiting_payment", error: null, processing: !1 } : t.kind === "popup_blocked" ? { open: !0, view: "popup_blocked", error: null, processing: !1 } : t.kind === "purchase_success" ? { open: !0, view: "purchased", error: null, processing: !1 } : t.kind === "verifying" ? { open: !0, view: "loading", error: null, processing: !1 } : { open: !0, view: "layout", error: null, processing: !1 } : { open: !1, view: null, error: null, processing: !1 };
2060
2060
  }
2061
- function or(r, e) {
2062
- return r.open === e.open && r.view === e.view && r.error === e.error;
2061
+ function sr(r, e) {
2062
+ return r.open === e.open && r.view === e.view && r.error === e.error && r.processing === e.processing;
2063
2063
  }
2064
- function sr({
2064
+ function ar({
2065
2065
  client: r,
2066
2066
  open: e,
2067
2067
  onClose: t,
@@ -2069,162 +2069,182 @@ function sr({
2069
2069
  initialView: i,
2070
2070
  initialAuthMode: s,
2071
2071
  initialCheckoutPriceId: a,
2072
- purchased: c,
2073
- renew: l,
2074
- onState: p,
2075
- inline: d,
2076
- locale: f
2072
+ initialCheckoutUrl: c,
2073
+ purchased: l,
2074
+ renew: h,
2075
+ onState: d,
2076
+ inline: g,
2077
+ locale: _
2077
2078
  }) {
2078
- const [h, _] = b({ status: "idle" }), [w, S] = b(
2079
+ const [p, v] = k({ status: "idle" }), [m, A] = k(
2079
2080
  () => r.auth?.getCachedSession() ?? null
2080
- ), [g, k] = b(() => i === "support" ? { kind: "support", origin: "standalone" } : i === "auth" ? { kind: "auth_gate", origin: "standalone" } : i === "checkout" && a ? { kind: "direct_checkout_pending", priceId: a } : { kind: "layout" }), C = i === "checkout", I = R(!1), A = R(null);
2081
+ ), [b, y] = k(() => i === "support" ? { kind: "support", origin: "standalone" } : i === "auth" ? a ? {
2082
+ kind: "auth_gate",
2083
+ pendingCheckout: { priceId: a, direct: !0 },
2084
+ origin: "standalone",
2085
+ intent: "preauth"
2086
+ } : { kind: "auth_gate", origin: "standalone" } : i === "awaiting_payment" && a && c ? {
2087
+ kind: "awaiting_payment",
2088
+ priceId: a,
2089
+ url: c
2090
+ } : i === "popup_blocked" && a && c ? {
2091
+ kind: "popup_blocked",
2092
+ priceId: a,
2093
+ url: c
2094
+ } : { kind: "layout" }), C = i === "awaiting_payment" || i === "popup_blocked" || i === "auth" && !!a, I = D(!1), U = D(null);
2081
2095
  P(() => {
2082
- if (!p) return;
2083
- const x = ir(e, h, g, c), m = A.current;
2084
- m && or(m, x) || (A.current = x, p(x));
2085
- }, [e, h, g, c, p]), P(() => {
2096
+ if (!d) return;
2097
+ const x = or(e, p, b, l), f = U.current;
2098
+ f && sr(f, x) || (U.current = x, d(x));
2099
+ }, [e, p, b, l, d]), P(() => {
2086
2100
  if (r.auth)
2087
- return r.auth.onAuthChange((x, m) => S(m));
2101
+ return r.auth.onAuthChange((x, f) => A(f));
2088
2102
  }, [r.auth]), P(() => {
2089
2103
  if (typeof r.onBootstrapChange == "function")
2090
2104
  return r.onBootstrapChange((x) => {
2091
- _(
2092
- (m) => m.status === "ready" ? { status: "ready", data: x } : m
2105
+ v(
2106
+ (f) => f.status === "ready" ? { status: "ready", data: x } : f
2093
2107
  );
2094
2108
  });
2095
2109
  }, [r]), P(() => {
2096
- if (!e || h.status === "ready" || h.status === "loading") return;
2110
+ if (!e || p.status === "ready" || p.status === "loading") return;
2097
2111
  let x = !1;
2098
- return _({ status: "loading" }), r.bootstrap().then((m) => {
2112
+ return v({ status: "loading" }), r.bootstrap().then((f) => {
2099
2113
  if (x) return;
2100
- _({ status: "ready", data: m }), n("ready", m);
2101
- const y = i === "support" || i === "auth";
2102
- m.user?.has_active_subscription && !l && !y && (n("purchase_completed", {
2114
+ v({ status: "ready", data: f }), n("ready", f);
2115
+ const w = i === "support" || i === "auth" || C;
2116
+ f.user?.has_active_subscription && !h && !w && (n("purchase_completed", {
2103
2117
  priceId: a ?? null,
2104
2118
  sessionId: null,
2105
2119
  restored: !0
2106
- }), C ? t() : k({ kind: "purchase_success", restored: !0 }));
2107
- }).catch((m) => {
2120
+ }), y({ kind: "purchase_success", restored: !0 }));
2121
+ }).catch((f) => {
2108
2122
  if (x) return;
2109
- const y = m instanceof O ? m : new O("unknown", "Failed to load paywall", { cause: m });
2110
- _({ status: "error", error: y }), n("error", y);
2123
+ const w = f instanceof L ? f : new L("unknown", "Failed to load paywall", { cause: f });
2124
+ v({ status: "error", error: w }), n("error", w);
2111
2125
  }), () => {
2112
2126
  x = !0;
2113
2127
  };
2114
- }, [e, r]), Ge(() => {
2128
+ }, [e, r]), We(() => {
2115
2129
  if (!e) {
2116
- k({ kind: "layout" }), I.current = !1;
2130
+ y({ kind: "layout" }), I.current = !1;
2117
2131
  return;
2118
2132
  }
2119
- i === "support" ? k({ kind: "support", origin: "standalone" }) : i === "auth" ? k({ kind: "auth_gate", origin: "standalone" }) : i === "checkout" && a && k({ kind: "direct_checkout_pending", priceId: a });
2120
- }, [e, i, a]);
2121
- const T = async (x) => {
2133
+ i === "support" ? y({ kind: "support", origin: "standalone" }) : i === "auth" ? y(a ? {
2134
+ kind: "auth_gate",
2135
+ pendingCheckout: { priceId: a, direct: !0 },
2136
+ origin: "standalone",
2137
+ intent: "preauth"
2138
+ } : { kind: "auth_gate", origin: "standalone" }) : i === "awaiting_payment" && a && c ? y({
2139
+ kind: "awaiting_payment",
2140
+ priceId: a,
2141
+ url: c
2142
+ }) : i === "popup_blocked" && a && c && y({
2143
+ kind: "popup_blocked",
2144
+ priceId: a,
2145
+ url: c
2146
+ });
2147
+ }, [e, i, a, c]);
2148
+ const M = async (x) => {
2122
2149
  try {
2123
- const m = await r.createCheckout({
2150
+ const f = r.getCachedOffers?.() ?? null, w = f ? N(f, x) : null, B = await r.createCheckout({
2124
2151
  priceId: x,
2125
- ignoreActivePurchase: l === !0
2152
+ offerId: w?.id,
2153
+ ignoreActivePurchase: h === !0
2126
2154
  });
2127
- if (n("checkout_started", { priceId: x, url: m.url, acquiring: m.acquiring }), typeof window > "u" || !m.url) return;
2128
- const y = window.open(m.url, "_blank");
2129
- if (y) {
2155
+ if (n("checkout_started", { priceId: x, url: B.url, acquiring: B.acquiring }), typeof window > "u" || !B.url) return;
2156
+ const $ = window.open(B.url, "_blank");
2157
+ if ($) {
2130
2158
  try {
2131
- y.opener = null;
2159
+ $.opener = null;
2132
2160
  } catch {
2133
2161
  }
2134
- k({ kind: "awaiting_payment", priceId: x, url: m.url });
2162
+ y({ kind: "awaiting_payment", priceId: x, url: B.url });
2135
2163
  } else
2136
- k({ kind: "popup_blocked", priceId: x, url: m.url });
2137
- } catch (m) {
2138
- if (m instanceof O && m.code === "already_purchased") {
2164
+ y({ kind: "popup_blocked", priceId: x, url: B.url });
2165
+ } catch (f) {
2166
+ if (f instanceof L && f.code === "already_purchased") {
2139
2167
  try {
2140
2168
  await r.getUser({ force: !0 });
2141
2169
  } catch {
2142
2170
  }
2143
- n("purchase_completed", { priceId: x, sessionId: null, restored: !0 }), C ? t() : k({ kind: "purchase_success", restored: !0 });
2171
+ n("purchase_completed", { priceId: x, sessionId: null, restored: !0 }), C ? t() : y({ kind: "purchase_success", restored: !0 });
2144
2172
  return;
2145
2173
  }
2146
- const y = m instanceof O ? m : new O("checkout_failed", "Checkout failed", { cause: m });
2147
- n("error", y), C ? t() : k({ kind: "layout" });
2174
+ const w = f instanceof L ? f : new L("checkout_failed", "Checkout failed", { cause: f });
2175
+ n("error", w), C ? t() : y({ kind: "layout" });
2148
2176
  }
2149
- }, E = (x, m) => {
2177
+ }, O = (x, f) => {
2150
2178
  if (typeof window > "u") return;
2151
- const y = window.open(m, "_blank");
2152
- if (y) {
2179
+ const w = window.open(f, "_blank");
2180
+ if (w) {
2153
2181
  try {
2154
- y.opener = null;
2182
+ w.opener = null;
2155
2183
  } catch {
2156
2184
  }
2157
- k({ kind: "awaiting_payment", priceId: x, url: m });
2185
+ y({ kind: "awaiting_payment", priceId: x, url: f });
2158
2186
  }
2159
2187
  };
2160
2188
  P(() => {
2161
- if (g.kind !== "auth_gate" || !w || w.user.is_anonymous || I.current) return;
2189
+ if (b.kind !== "auth_gate" || !m || m.user.is_anonymous || I.current) return;
2162
2190
  I.current = !0;
2163
- const x = g.pendingCheckout, m = g.origin;
2164
- k({ kind: "verifying" }), (async () => {
2165
- if (!l)
2191
+ const x = b.pendingCheckout, f = b.origin;
2192
+ y({ kind: "verifying" }), (async () => {
2193
+ if (!h)
2166
2194
  try {
2167
2195
  if ((await r.getUser({ force: !0 })).has_active_subscription) {
2168
2196
  n("purchase_completed", {
2169
2197
  priceId: x?.priceId ?? null,
2170
2198
  sessionId: null,
2171
2199
  restored: !0
2172
- }), x?.direct ? t() : k({ kind: "purchase_success", restored: !0 });
2200
+ }), x?.direct ? t() : y({ kind: "purchase_success", restored: !0 });
2173
2201
  return;
2174
2202
  }
2175
2203
  } catch {
2176
2204
  }
2177
2205
  if (!x) {
2178
- m === "standalone" ? t() : k({ kind: "layout" });
2206
+ f === "standalone" ? t() : y({ kind: "layout" });
2179
2207
  return;
2180
2208
  }
2181
- await T(x.priceId);
2209
+ await M(x.priceId);
2182
2210
  })().finally(() => {
2183
2211
  I.current = !1;
2184
2212
  });
2185
- }, [w, g]), P(() => {
2186
- if (h.status !== "ready" || g.kind !== "direct_checkout_pending") return;
2187
- const x = g.priceId, m = h.data.settings.checkout_mode ?? "guest", y = r.auth?.getCachedSession() ?? null, M = !!y && !y.user.is_anonymous;
2188
- if (m === "preauth" && !!r.auth && !M) {
2189
- k({ kind: "auth_gate", pendingCheckout: { priceId: x, direct: !0 } });
2190
- return;
2191
- }
2192
- T(x);
2193
- }, [h, g]);
2194
- const U = async (x, m) => {
2213
+ }, [m, b]);
2214
+ const j = async (x, f) => {
2195
2215
  if (x === "close") {
2196
2216
  t();
2197
2217
  return;
2198
2218
  }
2199
2219
  if (x === "price_selected") {
2200
- n("price_selected", m);
2220
+ n("price_selected", f);
2201
2221
  return;
2202
2222
  }
2203
2223
  if (x === "restore") {
2204
2224
  if (!r.auth) return;
2205
- const y = r.auth.getCachedSession();
2206
- if (y && !y.user.is_anonymous) return;
2207
- k({ kind: "auth_gate", intent: "restore" });
2225
+ const w = r.auth.getCachedSession();
2226
+ if (w && !w.user.is_anonymous) return;
2227
+ y({ kind: "auth_gate", intent: "restore" });
2208
2228
  return;
2209
2229
  }
2210
2230
  if (x === "support") {
2211
- k({ kind: "support", origin: "layout" });
2231
+ y({ kind: "support", origin: "layout" });
2212
2232
  return;
2213
2233
  }
2214
- if (x === "checkout" && h.status === "ready") {
2215
- const y = m?.priceId;
2216
- if (!y) {
2217
- n("error", new O("no_price", "No price selected"));
2234
+ if (x === "checkout" && p.status === "ready") {
2235
+ const w = f?.priceId;
2236
+ if (!w) {
2237
+ n("error", new L("no_price", "No price selected"));
2218
2238
  return;
2219
2239
  }
2220
- const M = h.data.settings.checkout_mode ?? "guest", q = r.auth?.getCachedSession() ?? null, je = !!q && !q.user.is_anonymous;
2221
- if (M === "preauth" && !!r.auth && !je) {
2222
- k({ kind: "auth_gate", pendingCheckout: { priceId: y } });
2240
+ const B = p.data.settings.checkout_mode ?? "guest", $ = r.auth?.getCachedSession() ?? null, De = !!$ && !$.user.is_anonymous;
2241
+ if (B === "preauth" && !!r.auth && !De) {
2242
+ y({ kind: "auth_gate", pendingCheckout: { priceId: w } });
2223
2243
  return;
2224
2244
  }
2225
- await T(y);
2245
+ await M(w);
2226
2246
  }
2227
- }, j = h.status === "ready" ? h.data.settings.brand_color : null, D = h.status === "ready" ? h.data.settings.allow_close !== !1 : !0, L = g.kind === "layout" && h.status === "ready" ? Ee(h.data.offers) : null, N = L ? /* @__PURE__ */ o(It, { offer: L }) : null, z = {
2247
+ }, R = p.status === "ready" ? p.data.settings.brand_color : null, T = p.status === "ready" ? p.data.settings.allow_close !== !1 : !0, z = b.kind === "layout" && p.status === "ready" ? Te(p.data.offers) : null, q = z ? /* @__PURE__ */ o(At, { offer: z }) : null, Y = {
2228
2248
  type: "auth_panel",
2229
2249
  // Заголовок не задаём — AuthGate сам решит по intent'у (restore →
2230
2250
  // "Restore Purchases", остальные → дефолтный "Welcome back!").
@@ -2233,81 +2253,81 @@ function sr({
2233
2253
  // Не скрываем при наличии сессии — auto-resume useEffect отрабатывает быстрее,
2234
2254
  // чем хотим показывать "Signed in as ..." промежуточным экраном.
2235
2255
  hide_when_authenticated: !1,
2236
- providers: h.status === "ready" ? h.data.settings.auth_providers : void 0
2237
- }, V = g.kind === "support" ? /* @__PURE__ */ o(
2238
- Mt,
2256
+ providers: p.status === "ready" ? p.data.settings.auth_providers : void 0
2257
+ }, V = b.kind === "support" ? /* @__PURE__ */ o(
2258
+ Et,
2239
2259
  {
2240
2260
  client: r,
2241
- authSession: w,
2242
- origin: g.origin,
2261
+ authSession: m,
2262
+ origin: b.origin,
2243
2263
  onBack: () => {
2244
- g.origin === "standalone" ? t() : k({ kind: "layout" });
2264
+ b.origin === "standalone" ? t() : y({ kind: "layout" });
2245
2265
  }
2246
2266
  }
2247
- ) : null, Y = g.kind === "auth_gate" && g.origin !== "standalone" || g.kind === "support", K = h.status === "ready" ? h.data : null;
2248
- return /* @__PURE__ */ o(st, { bootstrap: K, forceLocale: f, children: /* @__PURE__ */ o(
2249
- at,
2267
+ ) : null, K = b.kind === "auth_gate" && b.origin !== "standalone" || b.kind === "support", X = p.status === "ready" ? p.data : null;
2268
+ return /* @__PURE__ */ o(at, { bootstrap: X, forceLocale: _, children: /* @__PURE__ */ o(
2269
+ lt,
2250
2270
  {
2251
2271
  open: e,
2252
2272
  onClose: t,
2253
- brandColor: j,
2254
- topBanner: N,
2255
- allowClose: D,
2256
- hideCloseButton: Y,
2257
- inline: d,
2273
+ brandColor: R,
2274
+ topBanner: q,
2275
+ allowClose: T,
2276
+ hideCloseButton: K,
2277
+ inline: g,
2258
2278
  labelledBy: "pw-title",
2259
- children: c ? /* @__PURE__ */ o(ke, { onContinue: t }) : g.kind === "purchase_success" ? /* @__PURE__ */ o(ke, { restored: g.restored, onContinue: t }) : V || (h.status === "loading" || h.status === "idle" || g.kind === "verifying" || g.kind === "direct_checkout_pending" ? /* @__PURE__ */ o(ar, { verifying: g.kind === "verifying" }) : h.status === "error" ? /* @__PURE__ */ o(lr, { message: h.error.message }) : g.kind === "auth_gate" && r.auth ? /* @__PURE__ */ o(
2260
- vt,
2279
+ children: l ? /* @__PURE__ */ o(ve, { onContinue: t }) : b.kind === "purchase_success" ? /* @__PURE__ */ o(ve, { restored: b.restored, onContinue: t }) : V || (p.status === "loading" || p.status === "idle" || b.kind === "verifying" ? /* @__PURE__ */ o(lr, { verifying: b.kind === "verifying" }) : p.status === "error" ? /* @__PURE__ */ o(cr, { message: p.error.message }) : b.kind === "auth_gate" && r.auth ? /* @__PURE__ */ o(
2280
+ _t,
2261
2281
  {
2262
- block: z,
2263
- bootstrap: h.data,
2282
+ block: Y,
2283
+ bootstrap: p.data,
2264
2284
  auth: r.auth,
2265
- authSession: w,
2266
- showBack: g.origin !== "standalone",
2267
- intent: g.intent ?? (g.origin === "standalone" ? "standalone" : "preauth"),
2268
- initialMode: g.origin === "standalone" ? s : void 0,
2285
+ authSession: m,
2286
+ showBack: b.origin !== "standalone",
2287
+ intent: b.intent ?? (b.origin === "standalone" ? "standalone" : "preauth"),
2288
+ initialMode: b.origin === "standalone" ? s : void 0,
2269
2289
  onBack: () => {
2270
- g.origin === "standalone" ? t() : k({ kind: "layout" });
2290
+ b.origin === "standalone" ? t() : y({ kind: "layout" });
2271
2291
  }
2272
2292
  }
2273
- ) : g.kind === "awaiting_payment" ? /* @__PURE__ */ o(
2274
- ur,
2293
+ ) : b.kind === "awaiting_payment" ? /* @__PURE__ */ o(
2294
+ dr,
2275
2295
  {
2276
2296
  client: r,
2277
- onBack: () => k({ kind: "layout" }),
2297
+ onBack: () => y({ kind: "layout" }),
2278
2298
  onReopen: () => {
2279
2299
  if (typeof window > "u") return;
2280
- const x = window.open(g.url, "_blank");
2300
+ const x = window.open(b.url, "_blank");
2281
2301
  if (x)
2282
2302
  try {
2283
2303
  x.opener = null;
2284
2304
  } catch {
2285
2305
  }
2286
2306
  },
2287
- onRetry: () => T(g.priceId)
2307
+ onRetry: () => M(b.priceId)
2288
2308
  }
2289
- ) : g.kind === "popup_blocked" ? /* @__PURE__ */ o(cr, { onReopen: () => E(g.priceId, g.url) }) : /* @__PURE__ */ o(
2290
- nr,
2309
+ ) : b.kind === "popup_blocked" ? /* @__PURE__ */ o(ur, { onReopen: () => O(b.priceId, b.url) }) : /* @__PURE__ */ o(
2310
+ ir,
2291
2311
  {
2292
- layout: h.data.layout,
2293
- bootstrap: h.data,
2294
- onAction: U,
2312
+ layout: p.data.layout,
2313
+ bootstrap: p.data,
2314
+ onAction: j,
2295
2315
  auth: r.auth,
2296
- authSession: w
2316
+ authSession: m
2297
2317
  }
2298
2318
  ))
2299
2319
  }
2300
2320
  ) });
2301
2321
  }
2302
- function ar({ verifying: r }) {
2303
- const { t: e } = v();
2322
+ function lr({ verifying: r }) {
2323
+ const { t: e } = S();
2304
2324
  return /* @__PURE__ */ u("div", { class: "flex flex-col items-center justify-center gap-3 py-12", children: [
2305
2325
  /* @__PURE__ */ o("span", { class: "inline-block h-7 w-7 animate-spin rounded-full border-[2.5px] border-gray-200 border-t-[var(--pw-accent)]" }),
2306
2326
  /* @__PURE__ */ o("span", { class: "text-xs font-medium tracking-wide text-gray-500", children: r ? e("modal.verifying_subscription", "Checking your subscription…") : e("modal.loading", "Loading…") })
2307
2327
  ] });
2308
2328
  }
2309
- function lr({ message: r }) {
2310
- const { t: e } = v();
2329
+ function cr({ message: r }) {
2330
+ const { t: e } = S();
2311
2331
  return /* @__PURE__ */ u("div", { class: "flex flex-col items-center gap-2 py-8 text-center", children: [
2312
2332
  /* @__PURE__ */ o("div", { class: "flex h-11 w-11 items-center justify-center rounded-full bg-red-50", children: /* @__PURE__ */ u("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: [
2313
2333
  /* @__PURE__ */ o("path", { d: "M10 6v5M10 14h.01", stroke: "#dc2626", "stroke-width": "2", "stroke-linecap": "round" }),
@@ -2317,8 +2337,8 @@ function lr({ message: r }) {
2317
2337
  /* @__PURE__ */ o("p", { class: "text-xs leading-relaxed text-gray-500", children: r })
2318
2338
  ] });
2319
2339
  }
2320
- function cr({ onReopen: r }) {
2321
- const { t: e } = v();
2340
+ function ur({ onReopen: r }) {
2341
+ const { t: e } = S();
2322
2342
  return /* @__PURE__ */ u("div", { class: "flex flex-col items-center gap-3 py-8 text-center", children: [
2323
2343
  /* @__PURE__ */ o(
2324
2344
  "div",
@@ -2349,15 +2369,15 @@ function cr({ onReopen: r }) {
2349
2369
  )
2350
2370
  ] });
2351
2371
  }
2352
- function ur({
2372
+ function dr({
2353
2373
  client: r,
2354
2374
  onBack: e,
2355
2375
  onReopen: t,
2356
2376
  onRetry: n
2357
2377
  }) {
2358
- const { t: i } = v(), [s, a] = b(!1), [c, l] = b(!1), p = R(null);
2378
+ const { t: i } = S(), [s, a] = k(!1), [c, l] = k(!1), h = D(null);
2359
2379
  P(() => () => {
2360
- p.current !== null && clearTimeout(p.current);
2380
+ h.current !== null && clearTimeout(h.current);
2361
2381
  }, []);
2362
2382
  const d = async () => {
2363
2383
  if (!s) {
@@ -2367,8 +2387,8 @@ function ur({
2367
2387
  typeof window < "u" && window.postMessage({ type: "paywall_purchase" }, "*");
2368
2388
  return;
2369
2389
  }
2370
- l(!0), p.current !== null && clearTimeout(p.current), p.current = setTimeout(() => {
2371
- l(!1), p.current = null;
2390
+ l(!0), h.current !== null && clearTimeout(h.current), h.current = setTimeout(() => {
2391
+ l(!1), h.current = null;
2372
2392
  }, 5e3);
2373
2393
  } catch {
2374
2394
  l(!0);
@@ -2443,11 +2463,11 @@ function ur({
2443
2463
  )
2444
2464
  ] });
2445
2465
  }
2446
- function ke({
2466
+ function ve({
2447
2467
  onContinue: r,
2448
2468
  restored: e = !1
2449
2469
  }) {
2450
- const { t } = v();
2470
+ const { t } = S();
2451
2471
  return /* @__PURE__ */ u("div", { class: "flex flex-col items-center gap-3 py-8 text-center", children: [
2452
2472
  /* @__PURE__ */ o(
2453
2473
  "div",
@@ -2492,17 +2512,17 @@ function ke({
2492
2512
  )
2493
2513
  ] });
2494
2514
  }
2495
- const dr = 10 * 6e4, hr = 5e3, pr = 3e4;
2496
- class fr {
2515
+ const hr = 10 * 6e4, pr = 5e3, fr = 3e4;
2516
+ class gr {
2497
2517
  constructor(e) {
2498
2518
  this.timer = null, this.timeoutTimer = null, this.visibilityHandler = null, this.focusHandler = null, this.messageHandler = null, this.stopped = !1, this.checking = !1, this.opts = {
2499
2519
  client: e.client,
2500
2520
  onActive: e.onActive,
2501
2521
  onTimeout: e.onTimeout ?? (() => {
2502
2522
  }),
2503
- timeoutMs: e.timeoutMs ?? dr,
2504
- visibleIntervalMs: e.visibleIntervalMs ?? hr,
2505
- hiddenIntervalMs: e.hiddenIntervalMs ?? pr
2523
+ timeoutMs: e.timeoutMs ?? hr,
2524
+ visibleIntervalMs: e.visibleIntervalMs ?? pr,
2525
+ hiddenIntervalMs: e.hiddenIntervalMs ?? fr
2506
2526
  };
2507
2527
  }
2508
2528
  start() {
@@ -2541,18 +2561,23 @@ class fr {
2541
2561
  !t || typeof t != "object" || t.type === "paywall_purchase" && this.check();
2542
2562
  }
2543
2563
  }
2544
- function gr() {
2564
+ function mr() {
2545
2565
  return !(typeof document > "u" || typeof window > "u" || typeof location < "u" && location.protocol === "chrome-extension:");
2546
2566
  }
2547
- const oe = { open: !1, view: null, error: null }, F = {
2567
+ const se = {
2568
+ open: !1,
2569
+ view: null,
2570
+ error: null,
2571
+ processing: !1
2572
+ }, F = {
2548
2573
  status: "paywall_status",
2549
2574
  priceId: "paywall_price_id",
2550
2575
  sessionId: "paywall_session_id"
2551
2576
  };
2552
- let mr = class {
2577
+ let yr = class {
2553
2578
  constructor(e) {
2554
- this.handle = null, this.isOpen = !1, this.listeners = /* @__PURE__ */ new Map(), this.userUnsub = null, this.authUnsub = null, this.watcher = null, this.tracker = null, this.purchased = !1, this.trialStore = null, this.trialStoreConfig = null, this.lastTrialStatus = null, this.trialExpiredFired = !1, this.lastVisibility = null, this.currentState = oe, this.stateListeners = /* @__PURE__ */ new Set();
2555
- const { auth: t, ownsAuth: n } = yr(e);
2579
+ this.handle = null, this.isOpen = !1, this.listeners = /* @__PURE__ */ new Map(), this.userUnsub = null, this.authUnsub = null, this.watcher = null, this.tracker = null, this.purchased = !1, this.trialStore = null, this.trialStoreConfig = null, this.lastTrialStatus = null, this.trialExpiredFired = !1, this.lastVisibility = null, this.currentState = se, this.stateListeners = /* @__PURE__ */ new Set();
2580
+ const { auth: t, ownsAuth: n } = br(e);
2556
2581
  this.auth = t, this.ownsAuth = n, this.billing = e.client ?? new Re({ ...e, auth: this.auth }), this.host = e.host, this.shadowMode = e.shadowMode ?? "closed", this.mountThenLoad = e.mountThenLoad ?? !0, this.inline = e.inline === !0, this.forceLocale = e.locale ?? null, this.userUnsub = this.billing.onUserChange((i) => {
2557
2582
  this.emit("userChange", i);
2558
2583
  }), this.auth && (this.authUnsub = this.auth.onAuthChange((i, s) => {
@@ -2564,7 +2589,7 @@ let mr = class {
2564
2589
  const t = typeof e == "object" && e !== null ? e : {};
2565
2590
  if (t.enabled === !1) return;
2566
2591
  const n = t.endpoint ?? `${this.billing.apiOrigin}/api/v1/paywall/${this.billing.paywallId}/events`;
2567
- this.tracker = new De({
2592
+ this.tracker = new ze({
2568
2593
  endpoint: n,
2569
2594
  paywallId: this.billing.paywallId,
2570
2595
  capabilities: this.billing.capabilities,
@@ -2752,26 +2777,39 @@ let mr = class {
2752
2777
  this.auth && this.openInternal("auth", { ...e, skipTrial: !0, authMode: "signup" });
2753
2778
  }
2754
2779
  /**
2755
- * Direct-checkout: открыть модалку и сразу перейти к /start-checkout по
2756
- * конкретной цене, минуя layout с тарифами. Полезно когда host-приложение
2757
- * рендерит pricing-карточки/таблицу собственным UI и хочет, чтобы клик по
2758
- * «Buy / Get this plan» вёл прямо в платёжного провайдера, без второго
2759
- * выбора плана в модалке SDK.
2780
+ * Direct-checkout: создать checkout-URL по конкретной цене и сразу открыть
2781
+ * платёжного провайдера, минуя layout с тарифами. Полезно когда
2782
+ * host-приложение рендерит pricing-карточки/таблицу собственным UI и
2783
+ * хочет, чтобы клик по «Buy / Get this plan» вёл прямо в Stripe/Paddle.
2784
+ *
2785
+ * **Late-mount UX.** В отличие от `open()`, модалка не появляется во время
2786
+ * фоновой работы (bootstrap + visibility/trial gates + createCheckout).
2787
+ * Хост на этой фазе показывает busy-state прямо на своей кнопке (через
2788
+ * `state.processing === true` из `paywall.getState()` — или автоматически
2789
+ * через `<PaywallButton priceId>` в sdk-react). Модалка монтируется
2790
+ * ТОЛЬКО когда реально нужна UI:
2791
+ * - `checkout_mode='preauth'` + managed-auth + не залогинен → auth-gate
2792
+ * (форма signin'а); после успеха auto-resume в createCheckout.
2793
+ * - popup провайдера заблокирован браузером → popup_blocked view с
2794
+ * retry-кнопкой под fresh user gesture.
2795
+ * - popup открылся успешно → awaiting_payment view (индикатор «оплати
2796
+ * в новой вкладке» + I've paid).
2797
+ *
2798
+ * Что эмитится без модалки:
2799
+ * - `purchase_completed{restored:true, priceId}` когда юзер уже подписан
2800
+ * (cached user, fresh bootstrap, или 409 hasActivePurchase от бэка) —
2801
+ * headless reject;
2802
+ * - `error` когда createCheckout упал или identity.email отсутствует;
2803
+ * - `visibility_blocked` / `trial_blocked` — стандартные gate-эвенты.
2760
2804
  *
2761
- * Что переиспользуется из обычного `open()`-flow:
2762
- * - `checkout_mode='preauth'` + managed-auth auth-gate (форма signin'а),
2763
- * после успеха auto-resume в createCheckout;
2764
- * - popup_blocked / awaiting_payment / purchase_success views;
2765
- * - UserWatcher polling после `checkout_started`;
2766
- * - аналитика `checkout_started`/`purchase_completed`/`purchase_failed`.
2805
+ * Что эмитится одновременно с модалкой:
2806
+ * - `checkout_started{priceId, url, acquiring}` ровно когда headless URL
2807
+ * получен, ДО mount'а awaiting_payment/popup_blocked.
2767
2808
  *
2768
- * Что отличается от `open()`:
2769
- * - layout с тарифами не показывается ни на один кадр (включая откат после
2770
- * ошибкимодалка закрывается, эмитится `error`);
2771
- * - already-paid сценарий (cached user, fresh bootstrap, preauth-resume,
2772
- * 409 hasActivePurchase от бэка) — НЕ показывает restored success-view,
2773
- * эмитит `purchase_completed{restored:true}` и закрывает/не открывает
2774
- * модалку. Host сам решает как сообщить юзеру.
2809
+ * Offer (countdown-скидка) автоматически резолвится из cached offers'ов
2810
+ * через `getOfferForPrice(priceId)` и передаётся в createCheckout как
2811
+ * `offerId` чтобы duration_minutes-офферы тоже применились на бэке
2812
+ * (для них нет server-side таймера, без явного offer-id скидка теряется).
2775
2813
  *
2776
2814
  * Требования:
2777
2815
  * - `identity.email` должен быть выставлен (через `opts.identity`, либо
@@ -2780,13 +2818,13 @@ let mr = class {
2780
2818
  * - В `checkout_mode='preauth'` без managed-auth — backend требует
2781
2819
  * email-юзера; убедись что `identity.email` явно задан.
2782
2820
  *
2783
- * Без модалки/полностью headless (когда host рендерит свой checkout-UI и
2784
- * хочет только URL) — используй `paywall.billing.createCheckout({priceId})`
2785
- * напрямую, но тогда auth-gate / popup_blocked / awaiting_payment придётся
2786
- * рисовать самостоятельно.
2821
+ * Без модалки совсем (когда host рендерит свой awaiting-payment экран) —
2822
+ * используй `paywall.billing.createCheckout({priceId, offerId})` напрямую,
2823
+ * но тогда auth-gate / popup_blocked / awaiting_payment придётся рисовать
2824
+ * самостоятельно.
2787
2825
  */
2788
2826
  checkout(e, t = {}) {
2789
- if (t.renew !== !0 && this.billing.getCachedUser()?.has_active_subscription) {
2827
+ if (t.identity && this.billing.setIdentity(t.identity), t.renew !== !0 && this.billing.getCachedUser()?.has_active_subscription) {
2790
2828
  this.emit("purchase_completed", {
2791
2829
  priceId: e,
2792
2830
  sessionId: null,
@@ -2794,7 +2832,131 @@ let mr = class {
2794
2832
  });
2795
2833
  return;
2796
2834
  }
2797
- this.openInternal("checkout", { ...t, checkoutPriceId: e });
2835
+ this.runDirectCheckout(e, t);
2836
+ }
2837
+ /** Headless prep-work для `checkout(priceId, opts)`: bootstrap → gates →
2838
+ * preauth check → createCheckout → mount модалки с финальным view.
2839
+ * Вынесено отдельным методом ради чистого async/await flow вместо вложенных
2840
+ * then-chain'ов (5+ ветвей). Любая ошибка не пробрасывается наружу: эмитим
2841
+ * через `paywall.emit('error')` и выходим — host подписан на `error`-event. */
2842
+ async runDirectCheckout(e, t) {
2843
+ const n = t.renew === !0, i = t.skipTrial === !0, s = t.skipVisibility === !0;
2844
+ this.applyProcessing(!0);
2845
+ const a = () => {
2846
+ this.applyProcessing(!1);
2847
+ };
2848
+ let c;
2849
+ try {
2850
+ c = await this.billing.bootstrap();
2851
+ } catch (m) {
2852
+ const A = m instanceof L ? m : new L("unknown", "Failed to load paywall", { cause: m });
2853
+ this.emit("error", A), a();
2854
+ return;
2855
+ }
2856
+ if (!s) {
2857
+ const m = c.settings.visibility;
2858
+ if (m && (this.lastVisibility = m, !m.visible)) {
2859
+ this.emit("visibility_blocked", m), a();
2860
+ return;
2861
+ }
2862
+ }
2863
+ if (!i && await this.checkTrialBeforeCheckout(c)) {
2864
+ a();
2865
+ return;
2866
+ }
2867
+ if (!n && c.user?.has_active_subscription) {
2868
+ this.emit("purchase_completed", {
2869
+ priceId: e,
2870
+ sessionId: null,
2871
+ restored: !0
2872
+ }), a();
2873
+ return;
2874
+ }
2875
+ const l = c.settings.checkout_mode ?? "guest", h = this.auth?.getCachedSession() ?? null, d = !!h && !h.user.is_anonymous;
2876
+ if (l === "preauth" && !!this.auth && !d) {
2877
+ this.purchased = !1, this.mountAndShow("auth", {
2878
+ renew: n,
2879
+ authMode: "signin",
2880
+ checkoutPriceId: e
2881
+ });
2882
+ return;
2883
+ }
2884
+ const _ = this.getOfferForPrice(e);
2885
+ let p;
2886
+ try {
2887
+ p = await this.billing.createCheckout({
2888
+ priceId: e,
2889
+ offerId: _?.offer.id,
2890
+ ignoreActivePurchase: n
2891
+ });
2892
+ } catch (m) {
2893
+ if (m instanceof L && m.code === "already_purchased") {
2894
+ try {
2895
+ await this.billing.getUser({ force: !0 });
2896
+ } catch {
2897
+ }
2898
+ this.emit("purchase_completed", {
2899
+ priceId: e,
2900
+ sessionId: null,
2901
+ restored: !0
2902
+ }), a();
2903
+ return;
2904
+ }
2905
+ const A = m instanceof L ? m : new L("checkout_failed", "Checkout failed", { cause: m });
2906
+ this.emit("error", A), a();
2907
+ return;
2908
+ }
2909
+ if (this.emit("checkout_started", {
2910
+ priceId: e,
2911
+ url: p.url,
2912
+ acquiring: p.acquiring
2913
+ }), this.startUserWatcher(), typeof window > "u" || !p.url) {
2914
+ this.mountAndShow("awaiting_payment", {
2915
+ renew: n,
2916
+ checkoutPriceId: e,
2917
+ checkoutUrl: p.url
2918
+ });
2919
+ return;
2920
+ }
2921
+ const v = window.open(p.url, "_blank");
2922
+ if (this.purchased = !1, v) {
2923
+ try {
2924
+ v.opener = null;
2925
+ } catch {
2926
+ }
2927
+ this.mountAndShow("awaiting_payment", {
2928
+ renew: n,
2929
+ checkoutPriceId: e,
2930
+ checkoutUrl: p.url
2931
+ });
2932
+ } else
2933
+ this.mountAndShow("popup_blocked", {
2934
+ renew: n,
2935
+ checkoutPriceId: e,
2936
+ checkoutUrl: p.url
2937
+ });
2938
+ }
2939
+ /** Trial-check без mount'а (для late-mount direct-checkout). Возвращает
2940
+ * true если trial заблокировал — caller должен прекратить flow. На любой
2941
+ * storage-ошибке log+продолжаем (не блокируем продажу). */
2942
+ async checkTrialBeforeCheckout(e) {
2943
+ const t = e.settings.trial;
2944
+ if (!t) return !1;
2945
+ const n = this.ensureTrialStore(t);
2946
+ try {
2947
+ const i = await n.check();
2948
+ if (this.lastTrialStatus = i, i.mode === "none") return !1;
2949
+ if (i.blocked) {
2950
+ const s = await n.recordBlock();
2951
+ return this.lastTrialStatus = s, this.emit("trial_blocked", s), !0;
2952
+ }
2953
+ return this.trialExpiredFired || (this.trialExpiredFired = !0, this.emit("trial_expired")), !1;
2954
+ } catch (i) {
2955
+ return typeof console < "u" && console.warn("[paywall] trial check failed", i), !1;
2956
+ }
2957
+ }
2958
+ applyProcessing(e) {
2959
+ this.currentState.processing !== e && this.applyState({ ...this.currentState, processing: e });
2798
2960
  }
2799
2961
  /**
2800
2962
  * Headless anonymous signin без открытия модалки. Внутри:
@@ -2809,7 +2971,7 @@ let mr = class {
2809
2971
  */
2810
2972
  signInAnonymously() {
2811
2973
  return this.auth ? this.auth.signInAnonymously() : Promise.reject(
2812
- new O(
2974
+ new L(
2813
2975
  "invalid_config",
2814
2976
  "signInAnonymously requires managed-auth. Pass `auth: true` to PaywallUI."
2815
2977
  )
@@ -2817,25 +2979,25 @@ let mr = class {
2817
2979
  }
2818
2980
  openInternal(e, t) {
2819
2981
  t.identity && this.billing.setIdentity(t.identity), this.purchased = !1;
2820
- const n = t.skipTrial === !0 || e === "support", i = t.skipVisibility === !0 || e === "support" || e === "auth", s = t.renew === !0, a = t.checkoutPriceId;
2982
+ const n = t.skipTrial === !0 || e === "support", i = t.skipVisibility === !0 || e === "support" || e === "auth", s = t.renew === !0;
2821
2983
  if (n && i) {
2822
- this.mountAndShow(e, { renew: s, authMode: t.authMode, checkoutPriceId: a });
2984
+ this.mountAndShow(e, { renew: s, authMode: t.authMode });
2823
2985
  return;
2824
2986
  }
2825
- const c = this.billing.getCachedBootstrap();
2826
- if (c) {
2827
- this.runOpenGates(e, c, { skipTrial: n, skipVisibility: i, renew: s, checkoutPriceId: a });
2987
+ const a = this.billing.getCachedBootstrap();
2988
+ if (a) {
2989
+ this.runOpenGates(e, a, { skipTrial: n, skipVisibility: i, renew: s });
2828
2990
  return;
2829
2991
  }
2830
2992
  if (this.mountThenLoad) {
2831
- this.mountAndShow(e, { renew: s, checkoutPriceId: a }), this.billing.bootstrap().then((l) => this.runDelayedGates(l, { skipTrial: n, skipVisibility: i })).catch(() => {
2993
+ this.mountAndShow(e, { renew: s }), this.billing.bootstrap().then((c) => this.runDelayedGates(c, { skipTrial: n, skipVisibility: i })).catch(() => {
2832
2994
  });
2833
2995
  return;
2834
2996
  }
2835
2997
  this.billing.bootstrap().then(
2836
- (l) => this.runOpenGates(e, l, { skipTrial: n, skipVisibility: i, renew: s, checkoutPriceId: a })
2998
+ (c) => this.runOpenGates(e, c, { skipTrial: n, skipVisibility: i, renew: s })
2837
2999
  ).catch(() => {
2838
- this.mountAndShow(e, { renew: s, checkoutPriceId: a });
3000
+ this.mountAndShow(e, { renew: s });
2839
3001
  });
2840
3002
  }
2841
3003
  /** Применить gates ПОСЛЕ того, как модалка уже смонтирована (mount-then-load
@@ -2881,68 +3043,70 @@ let mr = class {
2881
3043
  }
2882
3044
  }
2883
3045
  if (n.skipTrial) {
2884
- this.mountAndShow(e, { renew: n.renew, checkoutPriceId: n.checkoutPriceId });
3046
+ this.mountAndShow(e, { renew: n.renew });
2885
3047
  return;
2886
3048
  }
2887
- this.gateThroughTrial(e, t, n.renew, n.checkoutPriceId);
3049
+ this.gateThroughTrial(e, t, n.renew);
2888
3050
  }
2889
- gateThroughTrial(e, t, n, i) {
2890
- const s = t.settings.trial;
2891
- if (!s) {
2892
- this.mountAndShow(e, { renew: n, checkoutPriceId: i });
3051
+ gateThroughTrial(e, t, n) {
3052
+ const i = t.settings.trial;
3053
+ if (!i) {
3054
+ this.mountAndShow(e, { renew: n });
2893
3055
  return;
2894
3056
  }
2895
- const a = this.ensureTrialStore(s);
2896
- a.check().then(async (c) => {
2897
- if (this.lastTrialStatus = c, c.mode === "none") {
2898
- this.mountAndShow(e, { renew: n, checkoutPriceId: i });
3057
+ const s = this.ensureTrialStore(i);
3058
+ s.check().then(async (a) => {
3059
+ if (this.lastTrialStatus = a, a.mode === "none") {
3060
+ this.mountAndShow(e, { renew: n });
2899
3061
  return;
2900
3062
  }
2901
- if (c.blocked) {
2902
- const l = await a.recordBlock();
2903
- this.lastTrialStatus = l, this.emit("trial_blocked", l);
3063
+ if (a.blocked) {
3064
+ const c = await s.recordBlock();
3065
+ this.lastTrialStatus = c, this.emit("trial_blocked", c);
2904
3066
  return;
2905
3067
  }
2906
- this.trialExpiredFired || (this.trialExpiredFired = !0, this.emit("trial_expired")), this.mountAndShow(e, { renew: n, checkoutPriceId: i });
2907
- }).catch((c) => {
2908
- typeof console < "u" && console.warn("[paywall] trial check failed", c), this.mountAndShow(e, { renew: n, checkoutPriceId: i });
3068
+ this.trialExpiredFired || (this.trialExpiredFired = !0, this.emit("trial_expired")), this.mountAndShow(e, { renew: n });
3069
+ }).catch((a) => {
3070
+ typeof console < "u" && console.warn("[paywall] trial check failed", a), this.mountAndShow(e, { renew: n });
2909
3071
  });
2910
3072
  }
2911
3073
  ensureTrialStore(e) {
2912
- if (this.trialStore && this.trialStoreConfig && wr(this.trialStoreConfig, e))
3074
+ if (this.trialStore && this.trialStoreConfig && kr(this.trialStoreConfig, e))
2913
3075
  return this.trialStore;
2914
3076
  this.trialStoreConfig = e;
2915
3077
  const t = this.billing.createTrialStore;
2916
- return this.trialStore = typeof t == "function" ? t.call(this.billing, e) : ze(this.billing.getStorage(), this.billing.paywallId, e), this.trialStore;
3078
+ return this.trialStore = typeof t == "function" ? t.call(this.billing, e) : qe(this.billing.getStorage(), this.billing.paywallId, e), this.trialStore;
2917
3079
  }
2918
3080
  mountAndShow(e, t = {}) {
2919
- const n = t.renew === !0, i = t.authMode, s = e === "checkout" ? t.checkoutPriceId ?? null : null;
3081
+ const n = t.renew === !0, i = t.authMode, a = e === "auth" || e === "awaiting_payment" || e === "popup_blocked" ? t.checkoutPriceId ?? null : null, c = e === "awaiting_payment" || e === "popup_blocked" ? t.checkoutUrl ?? null : null;
2920
3082
  if (this.handle) {
2921
3083
  this.isOpen = !0, this.handle.update({
2922
3084
  open: !0,
2923
3085
  initialView: e,
2924
3086
  initialAuthMode: i,
2925
- initialCheckoutPriceId: s,
3087
+ initialCheckoutPriceId: a,
3088
+ initialCheckoutUrl: c,
2926
3089
  purchased: !1,
2927
3090
  renew: n
2928
3091
  }), this.emit("open");
2929
3092
  return;
2930
3093
  }
2931
- this.isOpen = !0, this.handle = et(
2932
- sr,
3094
+ this.isOpen = !0, this.handle = tt(
3095
+ ar,
2933
3096
  {
2934
3097
  client: this.billing,
2935
3098
  open: !0,
2936
3099
  initialView: e,
2937
3100
  initialAuthMode: i,
2938
- initialCheckoutPriceId: s,
3101
+ initialCheckoutPriceId: a,
3102
+ initialCheckoutUrl: c,
2939
3103
  purchased: !1,
2940
3104
  renew: n,
2941
3105
  onClose: () => this.close(),
2942
- onEvent: (a, c) => {
2943
- this.emit(a, c), a === "checkout_started" && this.startUserWatcher();
3106
+ onEvent: (l, h) => {
3107
+ this.emit(l, h), l === "checkout_started" && this.startUserWatcher();
2944
3108
  },
2945
- onState: (a) => this.applyState(a),
3109
+ onState: (l) => this.applyState(l),
2946
3110
  inline: this.inline,
2947
3111
  locale: this.forceLocale
2948
3112
  },
@@ -2950,7 +3114,7 @@ let mr = class {
2950
3114
  ), this.emit("open");
2951
3115
  }
2952
3116
  applyState(e) {
2953
- if (!br(this.currentState, e)) {
3117
+ if (!wr(this.currentState, e)) {
2954
3118
  this.currentState = e;
2955
3119
  for (const t of this.stateListeners)
2956
3120
  try {
@@ -3052,10 +3216,10 @@ let mr = class {
3052
3216
  getOfferForPrice(e) {
3053
3217
  const t = this.billing.getCachedOffers();
3054
3218
  if (!t) return null;
3055
- const n = $(t, e);
3056
- return n ? Ye(n, {
3219
+ const n = N(t, e);
3220
+ return n ? Ke(n, {
3057
3221
  now: Date.now(),
3058
- readStart: Je
3222
+ readStart: Qe
3059
3223
  }) : null;
3060
3224
  }
3061
3225
  /** Снимок текущего «языка юзера» — proxy над `billing.getUserLanguage()`.
@@ -3146,7 +3310,7 @@ let mr = class {
3146
3310
  // В extension popup runtime — no-op (popup не доживёт). Там полагаемся на
3147
3311
  // bootstrap при следующем открытии.
3148
3312
  startUserWatcher() {
3149
- this.watcher || gr() && (this.watcher = new fr({
3313
+ this.watcher || mr() && (this.watcher = new gr({
3150
3314
  client: this.billing,
3151
3315
  onActive: (e) => {
3152
3316
  this.watcher = null, this.emit("purchase_completed", { priceId: null, sessionId: null });
@@ -3165,7 +3329,7 @@ let mr = class {
3165
3329
  }), this.watcher.start());
3166
3330
  }
3167
3331
  close() {
3168
- !this.isOpen || !this.handle || (this.isOpen = !1, this.purchased = !1, this.handle.update({ open: !1, purchased: !1 }), this.applyState(oe), this.emit("close"));
3332
+ !this.isOpen || !this.handle || (this.isOpen = !1, this.purchased = !1, this.handle.update({ open: !1, purchased: !1 }), this.applyState(se), this.emit("close"));
3169
3333
  }
3170
3334
  /**
3171
3335
  * Сканирует текущий URL на маркеры возврата с checkout и эмитит
@@ -3175,23 +3339,23 @@ let mr = class {
3175
3339
  */
3176
3340
  checkReturn() {
3177
3341
  if (typeof window > "u") return;
3178
- const e = new URL(window.location.href), t = ve(e.hash.replace(/^#/, "")), n = ve(e.search.replace(/^\?/, "")), i = t ?? n;
3342
+ const e = new URL(window.location.href), t = _e(e.hash.replace(/^#/, "")), n = _e(e.search.replace(/^\?/, "")), i = t ?? n;
3179
3343
  i && (i.status === "paid" ? (this.emit("purchase_completed", {
3180
3344
  priceId: i.priceId,
3181
3345
  sessionId: i.sessionId
3182
- }), kr(i)) : (i.status === "failed" || i.status === "cancelled") && this.emit("purchase_failed", { reason: i.status }), vr(e));
3346
+ }), vr(i)) : (i.status === "failed" || i.status === "cancelled") && this.emit("purchase_failed", { reason: i.status }), _r(e));
3183
3347
  }
3184
3348
  destroy() {
3185
- this.tracker?.destroy(), this.tracker = null, this.listeners.clear(), this.stateListeners.clear(), this.watcher?.stop(), this.watcher = null, this.userUnsub?.(), this.userUnsub = null, this.authUnsub?.(), this.authUnsub = null, this.ownsAuth && this.auth && this.auth.destroy?.(), this.ownsAuth = !1, this.billing.destroy?.(), this.handle?.unmount(), this.handle = null, this.isOpen = !1, this.currentState = oe;
3349
+ this.tracker?.destroy(), this.tracker = null, this.listeners.clear(), this.stateListeners.clear(), this.watcher?.stop(), this.watcher = null, this.userUnsub?.(), this.userUnsub = null, this.authUnsub?.(), this.authUnsub = null, this.ownsAuth && this.auth && this.auth.destroy?.(), this.ownsAuth = !1, this.billing.destroy?.(), this.handle?.unmount(), this.handle = null, this.isOpen = !1, this.currentState = se;
3186
3350
  }
3187
3351
  };
3188
- function yr(r) {
3352
+ function br(r) {
3189
3353
  if (!r.auth) return { auth: void 0, ownsAuth: !1 };
3190
- if (r.auth instanceof ce || xr(r.auth))
3354
+ if (r.auth instanceof ue || xr(r.auth))
3191
3355
  return { auth: r.auth, ownsAuth: !1 };
3192
3356
  const e = r.auth === !0 ? {} : r.auth;
3193
3357
  return {
3194
- auth: new ce({
3358
+ auth: new ue({
3195
3359
  paywallId: r.paywallId,
3196
3360
  apiOrigin: e.apiOrigin ?? r.apiOrigin,
3197
3361
  storage: e.storage ?? r.storage,
@@ -3206,13 +3370,13 @@ function xr(r) {
3206
3370
  const e = r;
3207
3371
  return typeof e.onAuthChange == "function" && typeof e.getCachedSession == "function" && typeof e.signOut == "function";
3208
3372
  }
3209
- function br(r, e) {
3210
- return r.open === e.open && r.view === e.view && r.error === e.error;
3211
- }
3212
3373
  function wr(r, e) {
3374
+ return r.open === e.open && r.view === e.view && r.error === e.error && r.processing === e.processing;
3375
+ }
3376
+ function kr(r, e) {
3213
3377
  return r.mode === e.mode && r.payload === e.payload && r.storage === e.storage;
3214
3378
  }
3215
- function ve(r) {
3379
+ function _e(r) {
3216
3380
  if (!r) return null;
3217
3381
  const e = new URLSearchParams(r), t = e.get(F.status);
3218
3382
  return t ? {
@@ -3221,7 +3385,7 @@ function ve(r) {
3221
3385
  sessionId: e.get(F.sessionId)
3222
3386
  } : null;
3223
3387
  }
3224
- function kr(r) {
3388
+ function vr(r) {
3225
3389
  if (!(typeof window > "u" || !window.opener))
3226
3390
  try {
3227
3391
  window.opener.postMessage(
@@ -3236,7 +3400,7 @@ function kr(r) {
3236
3400
  } catch {
3237
3401
  }
3238
3402
  }
3239
- function vr(r) {
3403
+ function _r(r) {
3240
3404
  const e = (n, i) => {
3241
3405
  if (!n) return "";
3242
3406
  const s = new URLSearchParams(n.replace(/^[?#]/, ""));
@@ -3246,7 +3410,7 @@ function vr(r) {
3246
3410
  }, t = r.pathname + e(r.search, "?") + e(r.hash, "#");
3247
3411
  window.history.replaceState(null, "", t);
3248
3412
  }
3249
- class _r {
3413
+ class Sr {
3250
3414
  constructor(e, t, n) {
3251
3415
  this.transport = e, this.paywallId = t, this.config = n;
3252
3416
  }
@@ -3269,7 +3433,7 @@ class _r {
3269
3433
  });
3270
3434
  }
3271
3435
  }
3272
- class Sr {
3436
+ class Cr {
3273
3437
  constructor(e, t) {
3274
3438
  this.transport = e, this.cachedBootstrap = null, this.cachedUser = null, this.cachedBalances = null, this.identity = null, this.userListeners = /* @__PURE__ */ new Set(), this.balanceListeners = /* @__PURE__ */ new Set(), this.bootstrapListeners = /* @__PURE__ */ new Set(), this.unsubUserBroadcast = null, this.unsubBalancesBroadcast = null, this.paywallId = t.paywallId, this.apiOrigin = t.apiOrigin, this.remoteStorageAdapter = {
3275
3439
  getItem: (n) => this.transport.request("storage.get", { key: n }),
@@ -3456,7 +3620,7 @@ class Sr {
3456
3620
  * read-modify-write. PaywallUI duck-types этот метод и предпочитает его
3457
3621
  * локальной фабрике, если он есть. */
3458
3622
  createTrialStore(e) {
3459
- return new _r(this.transport, this.paywallId, e);
3623
+ return new Sr(this.transport, this.paywallId, e);
3460
3624
  }
3461
3625
  // === Identity ===
3462
3626
  getIdentity() {
@@ -3489,10 +3653,10 @@ class Sr {
3489
3653
  * broadcast'ов от offscreen — чтобы host'овский onUserChange handler
3490
3654
  * получил signal независимо от того, кто триггернул обновление. */
3491
3655
  applyUser(e) {
3492
- Cr(this.cachedUser, e) || (this.cachedUser = e, this.fireUserListeners(e));
3656
+ Ir(this.cachedUser, e) || (this.cachedUser = e, this.fireUserListeners(e));
3493
3657
  }
3494
3658
  applyBalances(e) {
3495
- Ir(this.cachedBalances, e) || (this.cachedBalances = e, this.fireBalanceListeners(e));
3659
+ Ar(this.cachedBalances, e) || (this.cachedBalances = e, this.fireBalanceListeners(e));
3496
3660
  }
3497
3661
  fireUserListeners(e) {
3498
3662
  for (const t of [...this.userListeners])
@@ -3511,17 +3675,17 @@ class Sr {
3511
3675
  }
3512
3676
  }
3513
3677
  }
3514
- function Cr(r, e) {
3678
+ function Ir(r, e) {
3515
3679
  return r === e ? !0 : !r || !e ? !1 : r.has_active_subscription === e.has_active_subscription && (r.purchases?.length ?? 0) === (e.purchases?.length ?? 0);
3516
3680
  }
3517
- function Ir(r, e) {
3681
+ function Ar(r, e) {
3518
3682
  if (r === e) return !0;
3519
3683
  if (!r || !e || r.length !== e.length) return !1;
3520
3684
  for (let t = 0; t < r.length; t++)
3521
3685
  if (r[t].type !== e[t].type || r[t].count !== e[t].count) return !1;
3522
3686
  return !0;
3523
3687
  }
3524
- class Ar {
3688
+ class Lr {
3525
3689
  constructor(e, t) {
3526
3690
  this.transport = e, this.session = null, this.listeners = /* @__PURE__ */ new Set(), this.unsubBroadcast = null, this.paywallId = t.paywallId, this.apiOrigin = t.apiOrigin, this.unsubBroadcast = this.transport.on("authChange", ({ event: n, session: i }) => {
3527
3691
  this.applySession(n, i);
@@ -3632,14 +3796,14 @@ class Ar {
3632
3796
  */
3633
3797
  async signInWithOAuth(e) {
3634
3798
  if (typeof window > "u")
3635
- throw new O("oauth_unavailable", "window is required for OAuth");
3799
+ throw new L("oauth_unavailable", "window is required for OAuth");
3636
3800
  const t = `pw-oauth-pending-${Math.random().toString(36).slice(2, 10)}`, n = window.open("about:blank", t, "width=480,height=640,popup=yes");
3637
3801
  if (!n)
3638
- throw new O(
3802
+ throw new L(
3639
3803
  "popup_blocked",
3640
3804
  "browser blocked auth popup — call from a user gesture"
3641
3805
  );
3642
- Er(n, e.provider);
3806
+ Tr(n, e.provider);
3643
3807
  try {
3644
3808
  const { authorizeUrl: i, state: s } = await this.transport.request("auth.oauthStart", {
3645
3809
  provider: e.provider,
@@ -3661,7 +3825,7 @@ class Ar {
3661
3825
  this.unsubBroadcast?.(), this.unsubBroadcast = null, this.listeners.clear(), this.session = null;
3662
3826
  }
3663
3827
  applySession(e, t) {
3664
- if (!Lr(this.session, t)) {
3828
+ if (!Mr(this.session, t)) {
3665
3829
  this.session = t;
3666
3830
  for (const n of [...this.listeners])
3667
3831
  try {
@@ -3672,17 +3836,17 @@ class Ar {
3672
3836
  }
3673
3837
  }
3674
3838
  }
3675
- function Lr(r, e) {
3839
+ function Mr(r, e) {
3676
3840
  return r === e ? !0 : !r || !e ? !1 : r.access_token === e.access_token && r.refresh_token === e.refresh_token && r.expires_at === e.expires_at && r.user.id === e.user.id;
3677
3841
  }
3678
- const Mr = {
3842
+ const Er = {
3679
3843
  google: "Google",
3680
3844
  apple: "Apple",
3681
3845
  github: "GitHub",
3682
3846
  facebook: "Facebook"
3683
3847
  };
3684
- function Er(r, e) {
3685
- const t = Mr[e] ?? e;
3848
+ function Tr(r, e) {
3849
+ const t = Er[e] ?? e;
3686
3850
  try {
3687
3851
  const n = r.document;
3688
3852
  n.title = `Sign in with ${t}`;
@@ -3697,7 +3861,7 @@ function Er(r, e) {
3697
3861
  } catch {
3698
3862
  }
3699
3863
  }
3700
- class Pr {
3864
+ class Br {
3701
3865
  constructor(e) {
3702
3866
  this.transport = e;
3703
3867
  }
@@ -3709,7 +3873,7 @@ class Pr {
3709
3873
  });
3710
3874
  }
3711
3875
  }
3712
- class Tr {
3876
+ class Pr {
3713
3877
  constructor(e) {
3714
3878
  this.factory = e, this.channel = null, this.channelDisposers = [], this.pending = /* @__PURE__ */ new Map(), this.listeners = /* @__PURE__ */ new Map(), this.destroyed = !1, this.nextId = 0, this.clientId = `c-${Math.random().toString(36).slice(2, 10)}`;
3715
3879
  }
@@ -3723,21 +3887,21 @@ class Tr {
3723
3887
  this.channel = e;
3724
3888
  const t = e.onMessage((i) => this.handleMessage(i)), n = e.onDisconnect(() => this.handleDisconnect());
3725
3889
  return this.channelDisposers = [t, n], this.request("handshake", {
3726
- protocolVersion: X,
3890
+ protocolVersion: J,
3727
3891
  clientId: this.clientId
3728
3892
  }).then((i) => {
3729
- i.protocolVersion !== X && console.warn(
3730
- `[sdk-extension] protocol version mismatch: client=${X}, offscreen=${i.protocolVersion}. Update host's @monetize.software/sdk-extension.`
3893
+ i.protocolVersion !== J && console.warn(
3894
+ `[sdk-extension] protocol version mismatch: client=${J}, offscreen=${i.protocolVersion}. Update host's @monetize.software/sdk-extension.`
3731
3895
  );
3732
3896
  }).catch(() => {
3733
3897
  }), e;
3734
3898
  }
3735
3899
  handleMessage(e) {
3736
- if (Or(e)) {
3900
+ if (Ur(e)) {
3737
3901
  if (e.type === "response") {
3738
3902
  const t = this.pending.get(e.id);
3739
3903
  if (!t) return;
3740
- this.pending.delete(e.id), t.signal?.removeEventListener("abort", t.abortListener), e.ok ? t.resolve(e.result) : t.reject(qe(e.error));
3904
+ this.pending.delete(e.id), t.signal?.removeEventListener("abort", t.abortListener), e.ok ? t.resolve(e.result) : t.reject(Fe(e.error));
3741
3905
  return;
3742
3906
  }
3743
3907
  if (e.type === "event") {
@@ -3758,7 +3922,7 @@ class Tr {
3758
3922
  const e = Array.from(this.pending.values());
3759
3923
  this.pending.clear();
3760
3924
  for (const t of e)
3761
- t.signal?.removeEventListener("abort", t.abortListener), t.reject(new Br());
3925
+ t.signal?.removeEventListener("abort", t.abortListener), t.reject(new Or());
3762
3926
  }
3763
3927
  request(e, t, n = {}) {
3764
3928
  if (this.destroyed)
@@ -3781,14 +3945,14 @@ class Tr {
3781
3945
  }
3782
3946
  }
3783
3947
  }, n.signal.addEventListener("abort", l.abortListener)), this.pending.set(s, l);
3784
- const p = {
3948
+ const h = {
3785
3949
  type: "request",
3786
3950
  id: s,
3787
3951
  kind: e,
3788
3952
  params: t
3789
3953
  };
3790
3954
  try {
3791
- i.send(p);
3955
+ i.send(h);
3792
3956
  } catch (d) {
3793
3957
  this.pending.delete(s), n.signal?.removeEventListener("abort", l.abortListener), c(d);
3794
3958
  }
@@ -3814,28 +3978,28 @@ class Tr {
3814
3978
  this.channel?.close(), this.channel = null;
3815
3979
  }
3816
3980
  }
3817
- class Br extends Error {
3981
+ class Or extends Error {
3818
3982
  constructor() {
3819
3983
  super("Transport channel disconnected mid-request"), this.code = "transport_disconnected", this.name = "TransportDisconnectedError";
3820
3984
  }
3821
3985
  }
3822
- function Or(r) {
3986
+ function Ur(r) {
3823
3987
  if (typeof r != "object" || r === null) return !1;
3824
3988
  const e = r.type;
3825
3989
  return e === "request" || e === "response" || e === "event";
3826
3990
  }
3827
3991
  let W = null;
3828
- function Ur() {
3829
- return W || (W = new Tr(() => Fe(We)), W);
3992
+ function jr() {
3993
+ return W || (W = new Pr(() => $e(Ze)), W);
3830
3994
  }
3831
- class $r extends mr {
3995
+ class Vr extends yr {
3832
3996
  constructor(e) {
3833
- const t = Ur(), n = new Sr(t, {
3997
+ const t = jr(), n = new Cr(t, {
3834
3998
  paywallId: e.paywallId,
3835
3999
  apiOrigin: e.apiOrigin
3836
4000
  });
3837
4001
  let i;
3838
- e.auth === !0 ? i = new Ar(t, {
4002
+ e.auth === !0 ? i = new Lr(t, {
3839
4003
  paywallId: e.paywallId,
3840
4004
  apiOrigin: e.apiOrigin
3841
4005
  }) : e.auth && console.warn(
@@ -3851,7 +4015,7 @@ class $r extends mr {
3851
4015
  // Внутренний EventTracker отключаем — единственный tracker живёт в
3852
4016
  // offscreen'е. Манчиально подписываемся ниже.
3853
4017
  analytics: !1
3854
- }), this.remoteTracker = null, this.trackerUnsubs = [], e.analytics !== !1 && (this.remoteTracker = new Pr(t), this.bindAnalytics());
4018
+ }), this.remoteTracker = null, this.trackerUnsubs = [], e.analytics !== !1 && (this.remoteTracker = new Br(t), this.bindAnalytics());
3855
4019
  }
3856
4020
  /** Зеркало sdk/PaywallUI.initTracker'овских биндингов, но с RemoteEventTracker.
3857
4021
  * Когда @monetize.software/sdk экспоузнет публичный hook для inject'а tracker'а,
@@ -3909,11 +4073,11 @@ class $r extends mr {
3909
4073
  }
3910
4074
  }
3911
4075
  export {
3912
- X as PROTOCOL_VERSION,
3913
- $r as PaywallUI,
3914
- Ar as RemoteAuthClient,
3915
- Sr as RemoteBillingClient,
3916
- Pr as RemoteEventTracker,
3917
- Ur as getContentTransport
4076
+ J as PROTOCOL_VERSION,
4077
+ Vr as PaywallUI,
4078
+ Lr as RemoteAuthClient,
4079
+ Cr as RemoteBillingClient,
4080
+ Br as RemoteEventTracker,
4081
+ jr as getContentTransport
3918
4082
  };
3919
4083
  //# sourceMappingURL=content.js.map