@arbidocs/blocks 0.5.104 → 0.5.106

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.
Files changed (81) hide show
  1. package/dist/{DocumentReviewCard-MSHD73S3.cjs → DocumentReviewCard-QVQ2LGFH.cjs} +3 -3
  2. package/dist/{DocumentReviewCard-MSHD73S3.cjs.map → DocumentReviewCard-QVQ2LGFH.cjs.map} +1 -1
  3. package/dist/{DocumentReviewCard-WZNBPG72.js → DocumentReviewCard-UOLXZKZE.js} +3 -3
  4. package/dist/{DocumentReviewCard-WZNBPG72.js.map → DocumentReviewCard-UOLXZKZE.js.map} +1 -1
  5. package/dist/{FilesViewerDialog-XETOHORQ.js → FilesViewerDialog-5ELQYWAZ.js} +3 -3
  6. package/dist/{FilesViewerDialog-XETOHORQ.js.map → FilesViewerDialog-5ELQYWAZ.js.map} +1 -1
  7. package/dist/{FilesViewerDialog-DV2U4USR.cjs → FilesViewerDialog-XNGHHWYS.cjs} +4 -4
  8. package/dist/{FilesViewerDialog-DV2U4USR.cjs.map → FilesViewerDialog-XNGHHWYS.cjs.map} +1 -1
  9. package/dist/{WorkspaceTableView-WD754UBK.js → WorkspaceTableView-DIMTW5P5.js} +4 -4
  10. package/dist/{WorkspaceTableView-WD754UBK.js.map → WorkspaceTableView-DIMTW5P5.js.map} +1 -1
  11. package/dist/{WorkspaceTableView-3D6SYOWT.cjs → WorkspaceTableView-HRCV6WR7.cjs} +6 -6
  12. package/dist/{WorkspaceTableView-3D6SYOWT.cjs.map → WorkspaceTableView-HRCV6WR7.cjs.map} +1 -1
  13. package/dist/{chunk-N77UYRV7.js → chunk-632JXVXY.js} +51 -26
  14. package/dist/chunk-632JXVXY.js.map +1 -0
  15. package/dist/{chunk-5R67KX2O.cjs → chunk-6XNWGOS3.cjs} +70 -19
  16. package/dist/chunk-6XNWGOS3.cjs.map +1 -0
  17. package/dist/{chunk-TQFDPCWU.js → chunk-7Q6EVFMT.js} +3 -3
  18. package/dist/{chunk-TQFDPCWU.js.map → chunk-7Q6EVFMT.js.map} +1 -1
  19. package/dist/{chunk-MMSHLHTA.cjs → chunk-LM5CPXJO.cjs} +51 -26
  20. package/dist/chunk-LM5CPXJO.cjs.map +1 -0
  21. package/dist/{chunk-DDIV3MYQ.cjs → chunk-MW7FGIF4.cjs} +25 -59
  22. package/dist/chunk-MW7FGIF4.cjs.map +1 -0
  23. package/dist/{chunk-BSPPKX6X.cjs → chunk-OXHAZN43.cjs} +4 -4
  24. package/dist/{chunk-BSPPKX6X.cjs.map → chunk-OXHAZN43.cjs.map} +1 -1
  25. package/dist/{chunk-4UOXUWX3.js → chunk-QFKL4HV2.js} +54 -3
  26. package/dist/chunk-QFKL4HV2.js.map +1 -0
  27. package/dist/{chunk-FNGFSHVE.js → chunk-TRI3LQVR.js} +24 -50
  28. package/dist/chunk-TRI3LQVR.js.map +1 -0
  29. package/dist/connect/index.cjs +1874 -1860
  30. package/dist/connect/index.cjs.map +1 -1
  31. package/dist/connect/index.js +1518 -1504
  32. package/dist/connect/index.js.map +1 -1
  33. package/dist/connect/viewer.cjs +1 -1
  34. package/dist/connect/viewer.js +1 -1
  35. package/dist/connection/billing/AddAddonDialog.d.ts +1 -1
  36. package/dist/connection/billing/CollaboratorPlan.d.ts +7 -0
  37. package/dist/connection/billing/ConnectedQuotaDialog.d.ts +2 -2
  38. package/dist/connection/billing/ConnectedWelcomeDialog.d.ts +2 -2
  39. package/dist/connection/billing/MonthlySpendCap.d.ts +12 -0
  40. package/dist/connection/billing/NewProjectFlow.d.ts +0 -7
  41. package/dist/connection/billing/ProjectBilling.d.ts +1 -1
  42. package/dist/connection/billing/ProjectDetail.d.ts +1 -1
  43. package/dist/connection/billing/ProjectPurchaseOptions.d.ts +22 -0
  44. package/dist/connection/billing/ProjectUsageCard.d.ts +0 -13
  45. package/dist/connection/billing/ProjectUsageContent.d.ts +3 -3
  46. package/dist/connection/billing/ReduceAddonDialog.d.ts +2 -2
  47. package/dist/connection/billing/StripeCheckoutModal.d.ts +5 -2
  48. package/dist/connection/billing/SubscriptionPlans.d.ts +2 -10
  49. package/dist/connection/billing/SubscriptionStatus.d.ts +1 -1
  50. package/dist/connection/billing/SuspendedProjectRecovery.d.ts +8 -0
  51. package/dist/connection/billing/addon-pricing.d.ts +6 -6
  52. package/dist/connection/billing/payment-required.d.ts +2 -2
  53. package/dist/connection/billing/plan-constants.d.ts +6 -4
  54. package/dist/connection/billing/plan-pricing.d.ts +5 -5
  55. package/dist/connection/billing/quota-items.d.ts +2 -2
  56. package/dist/connection/billing/useAddonPurchase.d.ts +1 -1
  57. package/dist/connection/billing/usePaidWorkspaceMembers.d.ts +397 -0
  58. package/dist/connection/workspace-list/useConnectedWorkspaceList.d.ts +17 -1
  59. package/dist/embed/index.cjs +8 -8
  60. package/dist/embed/index.js +2 -2
  61. package/dist/settings/PlanCard.d.ts +2 -2
  62. package/dist/settings/SubscriptionParts.d.ts +3 -1
  63. package/dist/settings/index.cjs +150 -150
  64. package/dist/settings/index.js +1 -1
  65. package/dist/styles.css +1 -1
  66. package/dist/workflow-canvas/index.cjs +7 -7
  67. package/dist/workflow-canvas/index.js +2 -2
  68. package/node_modules/@arbidocs/coedit/package.json +1 -1
  69. package/package.json +6 -5
  70. package/src/blocks.css +2 -0
  71. package/src/connection/billing/project-purchase.css +453 -0
  72. package/dist/chunk-4UOXUWX3.js.map +0 -1
  73. package/dist/chunk-5R67KX2O.cjs.map +0 -1
  74. package/dist/chunk-DDIV3MYQ.cjs.map +0 -1
  75. package/dist/chunk-FNGFSHVE.js.map +0 -1
  76. package/dist/chunk-MMSHLHTA.cjs.map +0 -1
  77. package/dist/chunk-N77UYRV7.js.map +0 -1
  78. package/dist/connection/billing/CheckoutTotal.d.ts +0 -12
  79. package/dist/connection/billing/PlanSelector.d.ts +0 -50
  80. package/dist/connection/billing/billing-country.d.ts +0 -13
  81. package/dist/connection/billing/useCheckoutQuote.d.ts +0 -30
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkBSPPKX6X_cjs = require('../chunk-BSPPKX6X.cjs');
4
+ var chunkOXHAZN43_cjs = require('../chunk-OXHAZN43.cjs');
5
5
  require('../chunk-YZ6YOOTF.cjs');
6
6
  require('../chunk-KWJW5TMH.cjs');
7
7
  require('../chunk-V2CKYM4B.cjs');
@@ -16,7 +16,7 @@ require('../chunk-QN5GTCPB.cjs');
16
16
  require('../chunk-DDWLMYRO.cjs');
17
17
  var chunk6NSKIS35_cjs = require('../chunk-6NSKIS35.cjs');
18
18
  require('../chunk-IWLNDDPN.cjs');
19
- require('../chunk-MMSHLHTA.cjs');
19
+ require('../chunk-LM5CPXJO.cjs');
20
20
  require('../chunk-OKUXM2N4.cjs');
21
21
  require('../chunk-223D4727.cjs');
22
22
  require('../chunk-SNUBQMIS.cjs');
@@ -3012,7 +3012,7 @@ function ConnectedWorkflowsPage({
3012
3012
  const config = host.workflows;
3013
3013
  const { openConversation, openFiles } = chunkWGWP4ATS_cjs.useBlocksEnvironment();
3014
3014
  const openWorkflow = chunk53RXGFJ6_cjs.useOpenWorkflow();
3015
- const renderPerson = chunkBSPPKX6X_cjs.useRenderTaskPerson();
3015
+ const renderPerson = chunkOXHAZN43_cjs.useRenderTaskPerson();
3016
3016
  const refreshDocuments = react$2.useRefreshDocuments();
3017
3017
  const invalidateTags = react$2.useInvalidateTagData();
3018
3018
  const { data: tags = [] } = react$2.useTags();
@@ -3043,7 +3043,7 @@ function ConnectedWorkflowsPage({
3043
3043
  openHistory,
3044
3044
  closeHistoryTab,
3045
3045
  selectHistoryTab
3046
- } = chunkBSPPKX6X_cjs.useWorkflowsPageState({
3046
+ } = chunkOXHAZN43_cjs.useWorkflowsPageState({
3047
3047
  historyWorkflowId: requestedHistoryId ?? historyWorkflowId,
3048
3048
  onHistoryWorkflowConsumed: consumeHistory
3049
3049
  });
@@ -3105,7 +3105,7 @@ function ConnectedWorkflowsPage({
3105
3105
  return (
3106
3106
  // The page in the Workflows page's frame: padded, scrolling.
3107
3107
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-full min-h-0 w-full overflow-auto p-4 sm:p-6", children: /* @__PURE__ */ jsxRuntime.jsx(
3108
- chunkBSPPKX6X_cjs.ConnectedWorkflowRunPage,
3108
+ chunkOXHAZN43_cjs.ConnectedWorkflowRunPage,
3109
3109
  {
3110
3110
  workflow: running.workflow,
3111
3111
  projectFrom: running.projectFrom,
@@ -3223,7 +3223,7 @@ function ConnectedWorkflowsPage({
3223
3223
  }
3224
3224
  },
3225
3225
  content: hostTab ? hostTab.content : runsFor ? /* @__PURE__ */ jsxRuntime.jsx(
3226
- chunkBSPPKX6X_cjs.ConnectedWorkflowHistory,
3226
+ chunkOXHAZN43_cjs.ConnectedWorkflowHistory,
3227
3227
  {
3228
3228
  inline: true,
3229
3229
  hideHeader: true,
@@ -3287,7 +3287,7 @@ function ConnectedWorkflowsPage({
3287
3287
  }
3288
3288
  ),
3289
3289
  /* @__PURE__ */ jsxRuntime.jsx(
3290
- chunkBSPPKX6X_cjs.ConnectedTaskComposer,
3290
+ chunkOXHAZN43_cjs.ConnectedTaskComposer,
3291
3291
  {
3292
3292
  kind: "workflow",
3293
3293
  saveOnly: true,
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { useRenderTaskPerson, useWorkflowsPageState, ConnectedWorkflowRunPage, ConnectedWorkflowHistory, ConnectedTaskComposer } from '../chunk-TQFDPCWU.js';
2
+ import { useRenderTaskPerson, useWorkflowsPageState, ConnectedWorkflowRunPage, ConnectedWorkflowHistory, ConnectedTaskComposer } from '../chunk-7Q6EVFMT.js';
3
3
  import '../chunk-SEBNGA3F.js';
4
4
  import '../chunk-57CG33XJ.js';
5
5
  import '../chunk-7ONU7EWY.js';
@@ -14,7 +14,7 @@ import '../chunk-BMHW7WTF.js';
14
14
  import '../chunk-TROXWCQQ.js';
15
15
  import { useAiReviewStore } from '../chunk-E6ISR55S.js';
16
16
  import '../chunk-GOJ5GHFS.js';
17
- import '../chunk-N77UYRV7.js';
17
+ import '../chunk-632JXVXY.js';
18
18
  import '../chunk-JWUCDK2F.js';
19
19
  import '../chunk-RC6VTY2H.js';
20
20
  import '../chunk-OHRWYRTH.js';
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arbidocs/coedit",
3
- "version": "0.5.104",
3
+ "version": "0.5.106",
4
4
  "description": "Real-time collaboration for the ARBI native DOCX editor: a Yjs mirror of the canonical OOXML package, session, and server runtime",
5
5
  "type": "module",
6
6
  "sideEffects": false,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arbidocs/blocks",
3
- "version": "0.5.104",
3
+ "version": "0.5.106",
4
4
  "description": "Composable, domain-neutral UI blocks for ARBI apps, organised by capability (retrieval, facts, agents, workspaces, citations, collaboration) plus shell, theme and site primitives, on top of @arbidocs/react.",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs",
@@ -310,6 +310,7 @@
310
310
  "record/render-take.py",
311
311
  "src/tokens.css",
312
312
  "src/blocks.css",
313
+ "src/connection/billing/project-purchase.css",
313
314
  "src/workflow-canvas/canvas.css",
314
315
  "src/studio/studio.css",
315
316
  "src/components/grid.css",
@@ -335,9 +336,9 @@
335
336
  "custom-site:test:e2e": "playwright test -c examples/custom-site/playwright.config.ts"
336
337
  },
337
338
  "dependencies": {
338
- "@arbidocs/client": "0.5.104",
339
- "@arbidocs/coedit": "0.5.104",
340
- "@arbidocs/sdk": "0.5.104",
339
+ "@arbidocs/client": "0.5.106",
340
+ "@arbidocs/coedit": "0.5.106",
341
+ "@arbidocs/sdk": "0.5.106",
341
342
  "@auth0/auth0-react": "^2.19.0",
342
343
  "@dnd-kit/core": "^6.3.1",
343
344
  "@dnd-kit/sortable": "^10.0.0",
@@ -386,7 +387,7 @@
386
387
  "y-protocols": "^1.0.6"
387
388
  },
388
389
  "peerDependencies": {
389
- "@arbidocs/react": "0.5.104",
390
+ "@arbidocs/react": "0.5.106",
390
391
  "@lexical/html": "0.35.0",
391
392
  "@lexical/link": "0.35.0",
392
393
  "@lexical/list": "0.35.0",
package/src/blocks.css CHANGED
@@ -13,6 +13,8 @@
13
13
  * imported before `@import 'tailwindcss'`. Repeating the statement is harmless. */
14
14
  @layer theme, base, components, utilities;
15
15
 
16
+ @import './connection/billing/project-purchase.css';
17
+
16
18
  /* A dark theme is dark for the browser too: native scrollbars (a tab strip's overflow bar, a
17
19
  * dialog's), form controls and the canvas follow the theme instead of painting light on a dark
18
20
  * surface. Every site's dark switch (`.dark` or `[data-theme='dark']`) gets it, with no kit opting in. */
@@ -0,0 +1,453 @@
1
+ .project-purchase {
2
+ display: flex;
3
+ flex-direction: column;
4
+ gap: 10px;
5
+ }
6
+ .project-purchase-modal {
7
+ border-radius: 16px;
8
+ box-shadow: 0 24px 80px rgb(0 0 0 / 22%);
9
+ }
10
+ .project-purchase-modal [data-slot='modal-header'] {
11
+ padding: 18px 22px 12px;
12
+ padding-right: 44px;
13
+ background: linear-gradient(110deg, hsl(var(--secondary) / 0.12), hsl(var(--accent) / 0.35));
14
+ border-bottom: 1px solid hsl(var(--secondary) / 0.15);
15
+ }
16
+ .project-purchase-modal [data-slot='modal-scroll'] {
17
+ padding: 14px 22px 18px;
18
+ }
19
+ .project-purchase-modal [data-slot='modal-scroll'] > div {
20
+ gap: 12px;
21
+ }
22
+ .project-purchase-heading {
23
+ display: flex;
24
+ align-items: center;
25
+ gap: 8px;
26
+ color: hsl(var(--muted-foreground));
27
+ font-size: 12px;
28
+ }
29
+ .project-purchase-plan {
30
+ border-radius: 5px;
31
+ padding: 3px 7px;
32
+ color: hsl(var(--primary-foreground));
33
+ background: hsl(var(--primary));
34
+ font-size: 10px;
35
+ font-weight: 700;
36
+ letter-spacing: 0.08em;
37
+ }
38
+ .project-purchase-inclusions {
39
+ display: grid;
40
+ grid-template-columns: repeat(3, minmax(0, 1fr));
41
+ padding: 10px 4px;
42
+ border-radius: 10px;
43
+ background: hsl(var(--secondary) / 0.07);
44
+ border: 1px solid hsl(var(--secondary) / 0.13);
45
+ }
46
+ .project-purchase-inclusions > div {
47
+ display: grid;
48
+ grid-template-columns: 16px auto;
49
+ justify-content: center;
50
+ align-content: start;
51
+ align-items: center;
52
+ gap: 4px 6px;
53
+ padding: 0 6px;
54
+ text-align: center;
55
+ }
56
+ .project-purchase-inclusions > div + div {
57
+ border-left: 1px solid hsl(var(--secondary) / 0.18);
58
+ }
59
+ .project-purchase-inclusions dt {
60
+ grid-column: 1 / -1;
61
+ }
62
+ .project-purchase-inclusions dd {
63
+ font-size: 18px;
64
+ line-height: 22px;
65
+ }
66
+ .project-purchase-icon {
67
+ width: 16px;
68
+ height: 16px;
69
+ color: hsl(var(--secondary));
70
+ stroke-width: 1.7;
71
+ }
72
+ .project-purchase-prices {
73
+ display: grid;
74
+ grid-template-columns: repeat(2, minmax(0, 1fr));
75
+ gap: 10px;
76
+ }
77
+ .project-purchase-price {
78
+ display: flex;
79
+ min-width: 0;
80
+ flex-direction: column;
81
+ align-items: flex-start;
82
+ gap: 3px;
83
+ padding: 10px 14px;
84
+ border: 1px solid hsl(var(--secondary) / 0.3);
85
+ border-radius: 10px;
86
+ background: hsl(var(--secondary) / 0.045);
87
+ text-align: left;
88
+ cursor: pointer;
89
+ transition:
90
+ border-color 0.15s,
91
+ box-shadow 0.15s,
92
+ transform 0.15s;
93
+ }
94
+ .project-purchase-price-annual {
95
+ border-color: hsl(var(--primary));
96
+ background: hsl(var(--primary));
97
+ color: hsl(var(--primary-foreground));
98
+ }
99
+ .project-purchase-price:hover:not(:disabled) {
100
+ border-color: hsl(var(--primary));
101
+ box-shadow: 0 3px 12px hsl(var(--primary) / 0.18);
102
+ transform: translateY(-1px);
103
+ }
104
+ .project-purchase-price:focus-visible {
105
+ outline: 2px solid hsl(var(--ring));
106
+ outline-offset: 3px;
107
+ }
108
+ .project-purchase-price:disabled {
109
+ opacity: 0.5;
110
+ cursor: default;
111
+ }
112
+ .project-purchase-price-heading {
113
+ display: flex;
114
+ align-items: center;
115
+ justify-content: space-between;
116
+ flex-wrap: wrap;
117
+ gap: 4px 6px;
118
+ width: 100%;
119
+ margin-bottom: 2px;
120
+ }
121
+ .project-purchase-period {
122
+ line-height: 16px;
123
+ font-size: 12px;
124
+ font-weight: 600;
125
+ }
126
+ .project-purchase-saving {
127
+ border: 1px solid #86efac;
128
+ border-radius: 5px;
129
+ padding: 2px 6px;
130
+ background: #bbf7d0;
131
+ color: #14532d;
132
+ font-size: 11px;
133
+ line-height: 14px;
134
+ font-weight: 700;
135
+ }
136
+ .project-purchase-amount {
137
+ font-size: 28px;
138
+ line-height: 1.15;
139
+ font-weight: 650;
140
+ letter-spacing: -0.04em;
141
+ font-variant-numeric: tabular-nums;
142
+ }
143
+ .project-purchase-price > .text-xs {
144
+ font-size: 11px;
145
+ line-height: 15px;
146
+ }
147
+ .project-purchase-price-annual > .text-muted-foreground {
148
+ color: hsl(var(--primary-foreground) / 0.82);
149
+ }
150
+ .project-purchase-cta {
151
+ display: flex;
152
+ align-items: center;
153
+ justify-content: space-between;
154
+ width: 100%;
155
+ margin-top: auto;
156
+ padding-top: 4px;
157
+ gap: 6px;
158
+ white-space: nowrap;
159
+ font-size: 11px;
160
+ font-weight: 600;
161
+ color: hsl(var(--primary));
162
+ }
163
+ .project-purchase-price-annual .project-purchase-cta {
164
+ color: hsl(var(--primary-foreground));
165
+ }
166
+ .project-purchase-cap {
167
+ border: 1px solid hsl(var(--secondary) / 0.2);
168
+ border-radius: 10px;
169
+ padding: 10px 12px;
170
+ background: hsl(var(--secondary) / 0.04);
171
+ }
172
+ .project-purchase-cap label {
173
+ font-size: 12px;
174
+ font-weight: 500;
175
+ }
176
+ .project-purchase-cap output {
177
+ font-size: 12px;
178
+ }
179
+ .project-purchase-cap input[type='range'] {
180
+ appearance: none;
181
+ height: 20px;
182
+ margin: 0;
183
+ cursor: pointer;
184
+ background: transparent;
185
+ }
186
+ .project-purchase-cap p {
187
+ font-size: 11px;
188
+ line-height: 1.4;
189
+ }
190
+ .project-purchase-cap .space-y-2 > :not(:last-child) {
191
+ margin-bottom: 4px;
192
+ }
193
+ .project-purchase-adjust {
194
+ color: hsl(var(--secondary));
195
+ cursor: pointer;
196
+ font-size: 12px;
197
+ }
198
+ .project-purchase-adjust:hover {
199
+ color: hsl(var(--foreground));
200
+ }
201
+ .project-purchase-cap input[type='range']::-webkit-slider-runnable-track {
202
+ height: 4px;
203
+ border-radius: 99px;
204
+ background: linear-gradient(
205
+ to right,
206
+ hsl(var(--secondary)) var(--cap-progress),
207
+ hsl(var(--border)) var(--cap-progress)
208
+ );
209
+ }
210
+ .project-purchase-cap input[type='range']::-webkit-slider-thumb {
211
+ appearance: none;
212
+ width: 16px;
213
+ height: 16px;
214
+ margin-top: -6px;
215
+ border: 3px solid hsl(var(--background));
216
+ border-radius: 50%;
217
+ background: hsl(var(--secondary));
218
+ box-shadow:
219
+ 0 0 0 1px hsl(var(--primary) / 0.3),
220
+ 0 1px 3px rgb(0 0 0 / 0.15);
221
+ }
222
+ .project-purchase-cap input[type='range']::-moz-range-track {
223
+ height: 4px;
224
+ border-radius: 99px;
225
+ background: hsl(var(--border));
226
+ }
227
+ .project-purchase-cap input[type='range']::-moz-range-progress {
228
+ height: 4px;
229
+ border-radius: 99px;
230
+ background: hsl(var(--secondary));
231
+ }
232
+ .project-purchase-cap input[type='range']::-moz-range-thumb {
233
+ width: 12px;
234
+ height: 12px;
235
+ border: 2px solid hsl(var(--background));
236
+ border-radius: 50%;
237
+ background: hsl(var(--secondary));
238
+ }
239
+ .project-purchase-cap input[type='range']:focus-visible {
240
+ outline: 2px solid hsl(var(--ring));
241
+ outline-offset: 4px;
242
+ border-radius: 4px;
243
+ }
244
+ @media (max-width: 420px) {
245
+ .project-purchase {
246
+ gap: 10px;
247
+ }
248
+ .project-purchase-modal [data-slot='modal-scroll'] {
249
+ padding: 12px 18px 14px;
250
+ }
251
+ .project-purchase-price {
252
+ padding: 10px;
253
+ }
254
+ .project-purchase-amount {
255
+ font-size: 26px;
256
+ }
257
+ .project-purchase-price-heading {
258
+ flex-wrap: nowrap;
259
+ gap: 4px;
260
+ }
261
+ .project-purchase-saving {
262
+ padding: 2px 4px;
263
+ font-size: 11px;
264
+ }
265
+ }
266
+
267
+ .project-purchase-upgrade {
268
+ max-width: 500px;
269
+ border-radius: 16px;
270
+ gap: 12px;
271
+ }
272
+ .project-purchase-upgrade > div:first-child {
273
+ flex-direction: column;
274
+ gap: 6px;
275
+ }
276
+ .project-purchase-upgrade [data-testid='change-plan-project'] {
277
+ white-space: normal;
278
+ overflow-wrap: anywhere;
279
+ }
280
+
281
+ @media (max-height: 720px) {
282
+ .project-purchase-modal [data-slot='modal-header'] {
283
+ padding-top: 14px;
284
+ padding-bottom: 10px;
285
+ }
286
+ .project-purchase-modal [data-slot='modal-scroll'] {
287
+ padding-top: 10px;
288
+ padding-bottom: 12px;
289
+ }
290
+ .project-purchase-modal [data-slot='modal-scroll'] > div {
291
+ gap: 8px;
292
+ }
293
+ .project-purchase {
294
+ gap: 8px;
295
+ }
296
+ }
297
+
298
+ .project-purchase-addon-grid {
299
+ display: grid;
300
+ grid-template-columns: repeat(3, minmax(0, 1fr));
301
+ padding: 0 4px;
302
+ }
303
+ .project-purchase-addon {
304
+ display: flex;
305
+ min-width: 0;
306
+ flex-direction: column;
307
+ align-items: center;
308
+ gap: 6px;
309
+ padding: 0 4px;
310
+ text-align: center;
311
+ font-size: 11px;
312
+ }
313
+ .project-purchase-addon > div:first-child {
314
+ flex: initial;
315
+ min-width: 0;
316
+ order: 2;
317
+ font-size: 11px;
318
+ line-height: 1.4;
319
+ }
320
+ .project-purchase-addon > div:first-child > div {
321
+ font-size: inherit;
322
+ }
323
+ .project-purchase-addon > div:last-child {
324
+ flex-wrap: nowrap;
325
+ gap: 4px;
326
+ }
327
+ .project-purchase-addon button {
328
+ width: 28px;
329
+ height: 28px;
330
+ flex-shrink: 0;
331
+ }
332
+ .project-purchase-addon [data-testid$='-count'] {
333
+ width: 20px;
334
+ font-size: 12px;
335
+ }
336
+
337
+ .project-purchase-adjust.project-purchase-heading {
338
+ justify-content: flex-start;
339
+ list-style: none;
340
+ }
341
+ .project-purchase-adjust.project-purchase-heading::-webkit-details-marker {
342
+ display: none;
343
+ }
344
+ .project-purchase-adjust-label {
345
+ display: inline-flex;
346
+ align-items: center;
347
+ gap: 4px;
348
+ color: hsl(var(--secondary));
349
+ }
350
+ details[open] > .project-purchase-adjust .project-purchase-adjust-label svg {
351
+ transform: rotate(180deg);
352
+ }
353
+
354
+ .project-purchase-inclusions .project-purchase-allowance-controls {
355
+ grid-column: 1 / -1;
356
+ display: flex;
357
+ justify-content: center;
358
+ gap: 10px;
359
+ margin-top: 4px;
360
+ }
361
+ .project-purchase-allowance-controls button {
362
+ width: 28px;
363
+ height: 28px;
364
+ border-color: hsl(var(--secondary) / 0.25);
365
+ color: hsl(var(--primary));
366
+ background: hsl(var(--background));
367
+ }
368
+ .project-purchase-auto-title {
369
+ margin-bottom: 6px;
370
+ color: hsl(var(--primary));
371
+ font-size: 12px;
372
+ font-weight: 600;
373
+ }
374
+
375
+ .project-purchase-inclusions > div {
376
+ grid-template-rows: auto 1fr auto;
377
+ align-content: stretch;
378
+ }
379
+ @media (max-height: 720px) {
380
+ .project-purchase-price {
381
+ padding-top: 8px;
382
+ padding-bottom: 8px;
383
+ }
384
+ .project-purchase-price-heading {
385
+ margin-bottom: 0;
386
+ }
387
+ .project-purchase-cta {
388
+ padding-top: 2px;
389
+ }
390
+ .project-purchase-cap {
391
+ padding-top: 8px;
392
+ padding-bottom: 8px;
393
+ }
394
+ .project-purchase-modal [data-slot='modal-scroll'] > div {
395
+ gap: 6px;
396
+ }
397
+ }
398
+
399
+ .project-purchase-price:not(.project-purchase-price-annual) {
400
+ background: hsl(var(--secondary));
401
+ border-color: hsl(var(--secondary));
402
+ color: white;
403
+ }
404
+ .project-purchase-price:not(.project-purchase-price-annual) > .text-muted-foreground {
405
+ color: rgb(255 255 255 / 0.9);
406
+ }
407
+ .project-purchase-price:not(.project-purchase-price-annual) .project-purchase-cta {
408
+ color: white;
409
+ }
410
+ .project-purchase-annual-cap {
411
+ margin-top: 6px;
412
+ color: hsl(var(--muted-foreground));
413
+ font-size: 11px;
414
+ line-height: 1.4;
415
+ }
416
+
417
+ /* Make the final purchase actions read as explicit buttons within each price choice. */
418
+ .project-purchase-price .project-purchase-cta {
419
+ margin-top: 8px;
420
+ padding: 7px 9px;
421
+ border: 1px solid rgb(255 255 255 / 0.6);
422
+ border-radius: 6px;
423
+ background: rgb(255 255 255 / 0.14);
424
+ font-size: 12px;
425
+ }
426
+
427
+ .project-purchase-credit {
428
+ display: grid;
429
+ gap: 3px;
430
+ width: 100%;
431
+ margin: 3px 0 6px;
432
+ padding-bottom: 6px;
433
+ border-bottom: 1px solid rgb(255 255 255 / 0.3);
434
+ font-size: 11px;
435
+ line-height: 15px;
436
+ font-variant-numeric: tabular-nums;
437
+ }
438
+ .project-purchase-credit > span {
439
+ display: flex;
440
+ justify-content: space-between;
441
+ gap: 6px;
442
+ }
443
+
444
+ .project-purchase-total {
445
+ display: flex;
446
+ width: 100%;
447
+ align-items: baseline;
448
+ justify-content: space-between;
449
+ gap: 6px;
450
+ }
451
+ .project-purchase-total .project-purchase-amount {
452
+ text-align: right;
453
+ }