@nebulr-group/bridge-svelte 0.9.2-beta.0 → 0.9.3
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/client/components/sdk-auth/BridgeAuthRoutes.svelte +9 -6
- package/dist/client/components/subscription/BridgeBillingNotice.svelte +124 -121
- package/dist/client/components/subscription/BridgeBillingRoutes.svelte +56 -53
- package/dist/client/components/subscription/BridgePaywall.svelte +32 -29
- package/dist/client/components/subscription/BridgePaywallPage.svelte +15 -12
- package/dist/client/components/subscription/BridgeQuotaBanner.svelte +73 -70
- package/dist/client/components/subscription/BridgeSubscriptionStatus.svelte +55 -52
- package/dist/styles.css +1438 -1393
- package/package.json +1 -1
|
@@ -192,11 +192,14 @@
|
|
|
192
192
|
{/if}
|
|
193
193
|
|
|
194
194
|
<style>
|
|
195
|
-
/*
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
195
|
+
/* TBP-814 — in the `bridge` layer with the stylesheet, so any CSS of the app wins. */
|
|
196
|
+
@layer bridge {
|
|
197
|
+
/* The default frame — the centred container every guide page used to paste.
|
|
198
|
+
A `frame` snippet replaces it entirely. */
|
|
199
|
+
.bridge-auth-page {
|
|
200
|
+
display: flex;
|
|
201
|
+
justify-content: center;
|
|
202
|
+
padding: var(--bridge-auth-page-padding, 3rem 1rem);
|
|
203
|
+
}
|
|
201
204
|
}
|
|
202
205
|
</style>
|
|
@@ -240,146 +240,149 @@
|
|
|
240
240
|
{/if}
|
|
241
241
|
|
|
242
242
|
<style>
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
243
|
+
/* TBP-814 — in the `bridge` layer with the stylesheet, so any CSS of the app wins. */
|
|
244
|
+
@layer bridge {
|
|
245
|
+
.bridge-billing-notice {
|
|
246
|
+
display: flex;
|
|
247
|
+
align-items: center;
|
|
248
|
+
justify-content: space-between;
|
|
249
|
+
gap: 1rem;
|
|
250
|
+
padding: 0.75rem 1rem;
|
|
251
|
+
border-radius: 0.5rem;
|
|
252
|
+
font: inherit;
|
|
253
|
+
transition: opacity 280ms ease, transform 320ms ease;
|
|
254
|
+
}
|
|
253
255
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
256
|
+
.bbn-content {
|
|
257
|
+
display: flex;
|
|
258
|
+
flex-direction: column;
|
|
259
|
+
gap: 0.125rem;
|
|
260
|
+
flex: 1 1 auto;
|
|
261
|
+
}
|
|
260
262
|
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
263
|
+
.bbn-title {
|
|
264
|
+
font-weight: var(--bridge-font-weight-heading, 600);
|
|
265
|
+
}
|
|
264
266
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
267
|
+
.bbn-body {
|
|
268
|
+
font-size: calc(0.875 * var(--bridge-text-base, 1rem));
|
|
269
|
+
opacity: 0.85;
|
|
270
|
+
}
|
|
269
271
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
272
|
+
.bbn-cta {
|
|
273
|
+
padding: 0.5rem 1rem;
|
|
274
|
+
border-radius: 0.375rem;
|
|
275
|
+
border: 1px solid currentColor;
|
|
276
|
+
background: transparent;
|
|
277
|
+
color: inherit;
|
|
278
|
+
font: inherit;
|
|
279
|
+
font-weight: var(--bridge-font-weight-button, 500);
|
|
280
|
+
cursor: pointer;
|
|
281
|
+
flex: 0 0 auto;
|
|
282
|
+
}
|
|
281
283
|
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
284
|
+
.bbn-cta:hover {
|
|
285
|
+
background: currentColor;
|
|
286
|
+
color: var(--bridge-bg, #ffffff);
|
|
287
|
+
}
|
|
286
288
|
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
289
|
+
/* Chassis variants */
|
|
290
|
+
.bbn-chassis-bar {
|
|
291
|
+
border-radius: 0;
|
|
292
|
+
width: 100%;
|
|
293
|
+
}
|
|
292
294
|
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
295
|
+
.bbn-chassis-rail {
|
|
296
|
+
border-left: 4px solid currentColor;
|
|
297
|
+
border-radius: 0 0.5rem 0.5rem 0;
|
|
298
|
+
}
|
|
297
299
|
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
300
|
+
.bbn-chassis-card {
|
|
301
|
+
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
|
|
302
|
+
border: 1px solid var(--bridge-border, #d1d5db);
|
|
303
|
+
}
|
|
302
304
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
305
|
+
/* Severity tokens */
|
|
306
|
+
.bbn-severity-info {
|
|
307
|
+
background: var(--bridge-alert-info-bg, #eff6ff);
|
|
308
|
+
color: var(--bridge-alert-info-fg, #1e40af);
|
|
309
|
+
}
|
|
308
310
|
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
311
|
+
.bbn-severity-warn {
|
|
312
|
+
background: var(--bridge-alert-warning-bg, #fffbeb);
|
|
313
|
+
color: var(--bridge-alert-warning-fg, #92400e);
|
|
314
|
+
}
|
|
313
315
|
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
316
|
+
.bbn-severity-critical {
|
|
317
|
+
background: var(--bridge-alert-error-bg, #fef2f2);
|
|
318
|
+
color: var(--bridge-alert-error-fg, #991b1b);
|
|
319
|
+
}
|
|
318
320
|
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
321
|
+
/* Locked inverts the surface: foreground as background, and vice versa. */
|
|
322
|
+
.bbn-severity-locked {
|
|
323
|
+
background: var(--bridge-foreground, #111827);
|
|
324
|
+
color: var(--bridge-bg, #ffffff);
|
|
325
|
+
}
|
|
324
326
|
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
327
|
+
@media (prefers-reduced-motion: reduce) {
|
|
328
|
+
.bridge-billing-notice {
|
|
329
|
+
transition: none;
|
|
330
|
+
}
|
|
328
331
|
}
|
|
329
|
-
}
|
|
330
332
|
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
333
|
+
/* Hard-mode lockscreen — full-viewport blocking overlay */
|
|
334
|
+
.bridge-billing-lockscreen {
|
|
335
|
+
position: fixed;
|
|
336
|
+
inset: 0;
|
|
337
|
+
z-index: 9999;
|
|
338
|
+
display: flex;
|
|
339
|
+
align-items: center;
|
|
340
|
+
justify-content: center;
|
|
341
|
+
padding: 1rem;
|
|
342
|
+
background: var(--bridge-paywall-bg, rgba(15, 23, 42, 0.72));
|
|
343
|
+
backdrop-filter: blur(2px);
|
|
344
|
+
}
|
|
343
345
|
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
346
|
+
.bbl-panel {
|
|
347
|
+
display: flex;
|
|
348
|
+
flex-direction: column;
|
|
349
|
+
gap: 0.75rem;
|
|
350
|
+
max-width: 28rem;
|
|
351
|
+
width: 100%;
|
|
352
|
+
padding: 1.5rem;
|
|
353
|
+
border-radius: 0.75rem;
|
|
354
|
+
background: var(--bridge-foreground, #111827);
|
|
355
|
+
color: var(--bridge-bg, #ffffff);
|
|
356
|
+
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.35);
|
|
357
|
+
text-align: center;
|
|
358
|
+
}
|
|
357
359
|
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
360
|
+
.bbl-title {
|
|
361
|
+
font-size: calc(1.125 * var(--bridge-text-base, 1rem));
|
|
362
|
+
font-weight: var(--bridge-font-weight-heading, 600);
|
|
363
|
+
}
|
|
362
364
|
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
365
|
+
.bbl-body {
|
|
366
|
+
font-size: calc(0.9375 * var(--bridge-text-base, 1rem));
|
|
367
|
+
opacity: 0.85;
|
|
368
|
+
}
|
|
367
369
|
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
370
|
+
.bbl-cta {
|
|
371
|
+
align-self: center;
|
|
372
|
+
margin-top: 0.5rem;
|
|
373
|
+
padding: 0.625rem 1.25rem;
|
|
374
|
+
border-radius: 0.5rem;
|
|
375
|
+
border: 1px solid currentColor;
|
|
376
|
+
background: transparent;
|
|
377
|
+
color: inherit;
|
|
378
|
+
font: inherit;
|
|
379
|
+
font-weight: var(--bridge-font-weight-button, 500);
|
|
380
|
+
cursor: pointer;
|
|
381
|
+
}
|
|
380
382
|
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
383
|
+
.bbl-cta:hover {
|
|
384
|
+
background: var(--bridge-bg, #ffffff);
|
|
385
|
+
color: var(--bridge-foreground, #111827);
|
|
386
|
+
}
|
|
384
387
|
}
|
|
385
388
|
</style>
|
|
@@ -172,66 +172,69 @@
|
|
|
172
172
|
{/if}
|
|
173
173
|
|
|
174
174
|
<style>
|
|
175
|
-
/*
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
175
|
+
/* TBP-814 — in the `bridge` layer with the stylesheet, so any CSS of the app wins. */
|
|
176
|
+
@layer bridge {
|
|
177
|
+
/* The default frame. A `frame` snippet replaces it entirely. */
|
|
178
|
+
.bridge-billing-page {
|
|
179
|
+
display: flex;
|
|
180
|
+
flex-direction: column;
|
|
181
|
+
gap: 1.25rem;
|
|
182
|
+
max-width: var(--bridge-billing-page-width, 60rem);
|
|
183
|
+
margin: 0 auto;
|
|
184
|
+
padding: var(--bridge-billing-page-padding, 3rem 1rem);
|
|
185
|
+
}
|
|
184
186
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
187
|
+
.bridge-billing-heading {
|
|
188
|
+
margin: 0;
|
|
189
|
+
font-size: calc(1.5 * var(--bridge-text-base, 1rem));
|
|
190
|
+
font-weight: var(--bridge-font-weight-heading, 700);
|
|
191
|
+
}
|
|
190
192
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
193
|
+
.bridge-billing-text {
|
|
194
|
+
margin: 0;
|
|
195
|
+
opacity: 0.8;
|
|
196
|
+
}
|
|
195
197
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
198
|
+
/* The subtitle sits with its heading, closer than the page's gap. */
|
|
199
|
+
.bridge-billing-heading + .bridge-billing-text {
|
|
200
|
+
margin-top: -0.75rem;
|
|
201
|
+
}
|
|
200
202
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
203
|
+
.bridge-billing-current {
|
|
204
|
+
display: flex;
|
|
205
|
+
flex-wrap: wrap;
|
|
206
|
+
align-items: center;
|
|
207
|
+
gap: 0.75rem;
|
|
208
|
+
}
|
|
207
209
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
210
|
+
/* The current-plan panel's layout; its surface is in styles.css. */
|
|
211
|
+
.bridge-billing-summary {
|
|
212
|
+
display: flex;
|
|
213
|
+
flex-wrap: wrap;
|
|
214
|
+
align-items: center;
|
|
215
|
+
justify-content: space-between;
|
|
216
|
+
gap: 1rem;
|
|
217
|
+
}
|
|
216
218
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
219
|
+
.bridge-billing-summary-plan {
|
|
220
|
+
display: flex;
|
|
221
|
+
flex-direction: column;
|
|
222
|
+
align-items: flex-start;
|
|
223
|
+
gap: 0.25rem;
|
|
224
|
+
min-width: 0;
|
|
225
|
+
}
|
|
224
226
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
227
|
+
.bridge-billing-label {
|
|
228
|
+
font-size: calc(0.75 * var(--bridge-text-base, 1rem));
|
|
229
|
+
font-weight: var(--bridge-font-weight-label, 600);
|
|
230
|
+
text-transform: uppercase;
|
|
231
|
+
letter-spacing: 0.05em;
|
|
232
|
+
opacity: 0.7;
|
|
233
|
+
}
|
|
232
234
|
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
235
|
+
.bridge-billing-action {
|
|
236
|
+
align-self: flex-start;
|
|
237
|
+
text-decoration: none;
|
|
238
|
+
}
|
|
236
239
|
}
|
|
237
240
|
</style>
|
|
@@ -58,36 +58,39 @@
|
|
|
58
58
|
{/if}
|
|
59
59
|
|
|
60
60
|
<style>
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
61
|
+
/* TBP-814 — in the `bridge` layer with the stylesheet, so any CSS of the app wins. */
|
|
62
|
+
@layer bridge {
|
|
63
|
+
.bridge-paywall {
|
|
64
|
+
position: fixed;
|
|
65
|
+
inset: 0;
|
|
66
|
+
z-index: 9000;
|
|
67
|
+
display: flex;
|
|
68
|
+
align-items: center;
|
|
69
|
+
justify-content: center;
|
|
70
|
+
padding: 1rem;
|
|
71
|
+
background: var(--bridge-paywall-bg, rgba(15, 23, 42, 0.72));
|
|
72
|
+
backdrop-filter: blur(2px);
|
|
73
|
+
}
|
|
72
74
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
75
|
+
.bridge-paywall-panel {
|
|
76
|
+
display: flex;
|
|
77
|
+
flex-direction: column;
|
|
78
|
+
gap: 1.5rem;
|
|
79
|
+
width: 100%;
|
|
80
|
+
max-width: 42rem;
|
|
81
|
+
max-height: 90vh;
|
|
82
|
+
overflow-y: auto;
|
|
83
|
+
padding: 2rem;
|
|
84
|
+
border-radius: 0.75rem;
|
|
85
|
+
background: var(--bridge-paywall-panel-bg, var(--bridge-bg, #ffffff));
|
|
86
|
+
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.15);
|
|
87
|
+
}
|
|
86
88
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
89
|
+
.bridge-paywall-heading {
|
|
90
|
+
margin: 0;
|
|
91
|
+
font-size: calc(1.25 * var(--bridge-text-base, 1rem));
|
|
92
|
+
font-weight: var(--bridge-font-weight-heading, 600);
|
|
93
|
+
text-align: center;
|
|
94
|
+
}
|
|
92
95
|
}
|
|
93
96
|
</style>
|
|
@@ -76,18 +76,21 @@
|
|
|
76
76
|
</div>
|
|
77
77
|
|
|
78
78
|
<style>
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
79
|
+
/* TBP-814 — in the `bridge` layer with the stylesheet, so any CSS of the app wins. */
|
|
80
|
+
@layer bridge {
|
|
81
|
+
.bridge-paywall-page {
|
|
82
|
+
display: flex;
|
|
83
|
+
flex-direction: column;
|
|
84
|
+
gap: 1.25rem;
|
|
85
|
+
max-width: var(--bridge-billing-page-width, 60rem);
|
|
86
|
+
margin: 0 auto;
|
|
87
|
+
padding: var(--bridge-billing-page-padding, 3rem 1rem);
|
|
88
|
+
}
|
|
87
89
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
90
|
+
.bridge-paywall-page-heading {
|
|
91
|
+
margin: 0;
|
|
92
|
+
font-size: calc(1.5 * var(--bridge-text-base, 1rem));
|
|
93
|
+
font-weight: var(--bridge-font-weight-heading, 700);
|
|
94
|
+
}
|
|
92
95
|
}
|
|
93
96
|
</style>
|