@nebulr-group/bridge-svelte 0.9.0-beta.2 → 0.9.0-beta.4

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/README.md CHANGED
@@ -14,7 +14,43 @@ npm i @nebulr-group/bridge-svelte
14
14
 
15
15
  ### Usage
16
16
 
17
- See the `demo/` app in the monorepo for end-to-end wiring.
17
+ The whole integration is one `.env` line and three files:
18
+
19
+ ```env
20
+ # .env
21
+ VITE_BRIDGE_APP_ID=your-app-id
22
+ ```
23
+
24
+ ```ts
25
+ // src/routes/+layout.ts
26
+ import { bridgeBootstrap } from '@nebulr-group/bridge-svelte';
27
+ export const ssr = false;
28
+ export const load = bridgeBootstrap({ rules: [{ match: new RegExp('^/auth($|/)'), public: true }] });
29
+ ```
30
+
31
+ ```svelte
32
+ <!-- src/routes/+layout.svelte -->
33
+ <script lang="ts">
34
+ import { BridgeBootstrap } from '@nebulr-group/bridge-svelte';
35
+ import '@nebulr-group/bridge-svelte/styles';
36
+ let { children } = $props();
37
+ </script>
38
+ <BridgeBootstrap>
39
+ {@render children()}
40
+ </BridgeBootstrap>
41
+ ```
42
+
43
+ ```svelte
44
+ <!-- src/routes/auth/[...bridge]/+page.svelte — every sign-in page -->
45
+ <script lang="ts">
46
+ import { BridgeAuthRoutes } from '@nebulr-group/bridge-svelte';
47
+ </script>
48
+ <BridgeAuthRoutes />
49
+ ```
50
+
51
+ A stage or local app also sets `VITE_BRIDGE_API_BASE_URL`. Add `loginRoute: '/auth/login'` for sign-in inside the app, and `src/routes/subscription/[...bridge]/+page.svelte` rendering `<BridgeBillingRoutes />` for subscriptions.
52
+
53
+ [How Bridge works](https://github.com/thebridgedev/bridge-svelte/blob/main/learning/mechanisms.md) explains plan limits, the three UI levels and the four customisation levels; the [learning docs](https://github.com/thebridgedev/bridge-svelte/tree/main/learning) cover everything else. Coding agents: `npx @nebulr-group/bridge-cli guide svelte`.
18
54
 
19
55
  ### Build
20
56
 
@@ -284,7 +284,7 @@
284
284
 
285
285
  .bbn-cta:hover {
286
286
  background: currentColor;
287
- color: white;
287
+ color: var(--bridge-bg, #ffffff);
288
288
  }
289
289
 
290
290
  /* Chassis variants */
@@ -300,28 +300,29 @@
300
300
 
301
301
  .bbn-chassis-card {
302
302
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
303
- border: 1px solid rgba(0, 0, 0, 0.08);
303
+ border: 1px solid var(--bridge-border, #d1d5db);
304
304
  }
305
305
 
306
306
  /* Severity tokens */
307
307
  .bbn-severity-info {
308
- background: #dbeafe;
309
- color: #1e40af;
308
+ background: var(--bridge-alert-info-bg, #eff6ff);
309
+ color: var(--bridge-alert-info-fg, #1e40af);
310
310
  }
311
311
 
312
312
  .bbn-severity-warn {
313
- background: #fef3c7;
314
- color: #92400e;
313
+ background: var(--bridge-alert-warning-bg, #fffbeb);
314
+ color: var(--bridge-alert-warning-fg, #92400e);
315
315
  }
316
316
 
317
317
  .bbn-severity-critical {
318
- background: #fee2e2;
319
- color: #991b1b;
318
+ background: var(--bridge-alert-error-bg, #fef2f2);
319
+ color: var(--bridge-alert-error-fg, #991b1b);
320
320
  }
321
321
 
322
+ /* Locked inverts the surface: foreground as background, and vice versa. */
322
323
  .bbn-severity-locked {
323
- background: #1f2937;
324
- color: #f9fafb;
324
+ background: var(--bridge-foreground, #111827);
325
+ color: var(--bridge-bg, #ffffff);
325
326
  }
326
327
 
327
328
  @media (prefers-reduced-motion: reduce) {
@@ -339,7 +340,7 @@
339
340
  align-items: center;
340
341
  justify-content: center;
341
342
  padding: 1rem;
342
- background: rgba(15, 23, 42, 0.72);
343
+ background: var(--bridge-paywall-bg, rgba(15, 23, 42, 0.72));
343
344
  backdrop-filter: blur(2px);
344
345
  }
345
346
 
@@ -351,8 +352,8 @@
351
352
  width: 100%;
352
353
  padding: 1.5rem;
353
354
  border-radius: 0.75rem;
354
- background: #1f2937;
355
- color: #f9fafb;
355
+ background: var(--bridge-foreground, #111827);
356
+ color: var(--bridge-bg, #ffffff);
356
357
  box-shadow: 0 10px 40px rgba(0, 0, 0, 0.35);
357
358
  text-align: center;
358
359
  }
@@ -381,7 +382,7 @@
381
382
  }
382
383
 
383
384
  .bbl-cta:hover {
384
- background: #f9fafb;
385
- color: #1f2937;
385
+ background: var(--bridge-bg, #ffffff);
386
+ color: var(--bridge-foreground, #111827);
386
387
  }
387
388
  </style>
@@ -81,7 +81,7 @@
81
81
  overflow-y: auto;
82
82
  padding: 2rem;
83
83
  border-radius: 0.75rem;
84
- background: var(--bridge-paywall-panel-bg, #ffffff);
84
+ background: var(--bridge-paywall-panel-bg, var(--bridge-bg, #ffffff));
85
85
  box-shadow: 0 10px 40px rgba(0, 0, 0, 0.15);
86
86
  }
87
87
 
@@ -26,11 +26,7 @@
26
26
  useBridge,
27
27
  type QuotaSnapshot,
28
28
  } from '@nebulr-group/bridge-auth-core';
29
- <<<<<<< HEAD
30
- import { getBridgeAuth } from '../../../core/bridge-instance.js';
31
- =======
32
29
  import { isBillingAdmin as canManageBilling, quotaMemberBody } from '../../billing-role.js';
33
- >>>>>>> origin/feature/mcp-journey
34
30
  import { billingRoutes } from '../../billing-routes.js';
35
31
 
36
32
  type Chassis = 'rail';
@@ -287,7 +283,7 @@
287
283
  margin-top: 0.25rem;
288
284
  width: 100%;
289
285
  height: 0.375rem;
290
- background: rgba(0, 0, 0, 0.08);
286
+ background: color-mix(in srgb, currentColor 15%, transparent);
291
287
  border-radius: 999px;
292
288
  overflow: hidden;
293
289
  }
@@ -313,7 +309,7 @@
313
309
 
314
310
  .bqb-cta:hover {
315
311
  background: currentColor;
316
- color: white;
312
+ color: var(--bridge-bg, #ffffff);
317
313
  }
318
314
 
319
315
  /* Chassis — rail only for US-11. */
@@ -324,13 +320,13 @@
324
320
 
325
321
  /* Severity tokens — mirror BridgeBillingNotice for visual consistency. */
326
322
  .bqb-severity-warn {
327
- background: #fef3c7;
328
- color: #92400e;
323
+ background: var(--bridge-alert-warning-bg, #fffbeb);
324
+ color: var(--bridge-alert-warning-fg, #92400e);
329
325
  }
330
326
 
331
327
  .bqb-severity-critical {
332
- background: #fee2e2;
333
- color: #991b1b;
328
+ background: var(--bridge-alert-error-bg, #fef2f2);
329
+ color: var(--bridge-alert-error-fg, #991b1b);
334
330
  }
335
331
 
336
332
  @media (prefers-reduced-motion: reduce) {
@@ -79,38 +79,38 @@
79
79
  font-size: 0.75rem;
80
80
  font-weight: 500;
81
81
  text-transform: lowercase;
82
- background: #e5e7eb;
83
- color: #374151;
82
+ background: var(--bridge-muted-bg, var(--bridge-bg-muted, #f3f4f6));
83
+ color: var(--bridge-foreground, #111827);
84
84
  }
85
85
 
86
86
  .bss-badge-active {
87
- background: #d1fae5;
88
- color: #065f46;
87
+ background: var(--bridge-alert-success-bg, #f0fdf4);
88
+ color: var(--bridge-alert-success-fg, #166534);
89
89
  }
90
90
 
91
91
  .bss-badge-trial {
92
- background: #dbeafe;
93
- color: #1e40af;
92
+ background: var(--bridge-alert-info-bg, #eff6ff);
93
+ color: var(--bridge-alert-info-fg, #1e40af);
94
94
  }
95
95
 
96
96
  .bss-badge-past_due,
97
97
  .bss-badge-cancel_at_period_end {
98
- background: #fef3c7;
99
- color: #92400e;
98
+ background: var(--bridge-alert-warning-bg, #fffbeb);
99
+ color: var(--bridge-alert-warning-fg, #92400e);
100
100
  }
101
101
 
102
102
  .bss-badge-canceled {
103
- background: #fee2e2;
104
- color: #991b1b;
103
+ background: var(--bridge-alert-error-bg, #fef2f2);
104
+ color: var(--bridge-alert-error-fg, #991b1b);
105
105
  }
106
106
 
107
107
  .bss-loading,
108
108
  .bss-empty {
109
- color: #6b7280;
109
+ color: var(--bridge-muted, #6b7280);
110
110
  font-style: italic;
111
111
  }
112
112
 
113
113
  .bss-error {
114
- color: #b91c1c;
114
+ color: var(--bridge-alert-error-fg, #991b1b);
115
115
  }
116
116
  </style>
package/dist/styles.css CHANGED
@@ -1,12 +1,54 @@
1
1
  /*
2
- * bridge-svelte default styles — plain baseline
2
+ * bridge-svelte default styles
3
3
  *
4
- * Import this file to get the default appearance for all bridge-svelte components:
5
4
  * import '@nebulr-group/bridge-svelte/styles';
6
5
  *
7
- * Without this file, components render as plain unstyled HTML — the headless contract.
8
- * This file provides structural CSS only. Visual design (colors, shadows, radii) is
9
- * intentionally left to the consumer or a future design-system layer.
6
+ * Without this file, components render as plain unstyled HTML — the headless
7
+ * contract. With it, they get their structure plus a small default look driven
8
+ * entirely by the `--bridge-*` tokens below.
9
+ *
10
+ * ── THE TOKEN CONTRACT ────────────────────────────────────────────────────
11
+ *
12
+ * The `--bridge-*` custom properties are the supported way to restyle every
13
+ * Bridge page and component. Set them in your own stylesheet:
14
+ *
15
+ * :root { --bridge-primary: #0f766e; --bridge-border-radius: 10px; }
16
+ *
17
+ * The defaults are declared on `:where(:root)`, which has zero specificity, so
18
+ * YOUR `:root` wins whatever order the two stylesheets load in. Set a token on
19
+ * a wrapper instead of `:root` to theme one area.
20
+ *
21
+ * Colour
22
+ * --bridge-primary primary buttons, selected tab, active workspace
23
+ * --bridge-primary-hover primary button hover (derived from primary)
24
+ * --bridge-primary-fg text on primary surfaces
25
+ * --bridge-primary-light tint behind the active workspace (derived)
26
+ * --bridge-input-focus input focus ring (defaults to primary)
27
+ * --bridge-bg dialogs, menus, panels
28
+ * --bridge-foreground text on those surfaces, emphasised names
29
+ * --bridge-muted secondary text: hints, table headings
30
+ * --bridge-muted-bg subtle fills: tab tracks, hovers, code boxes
31
+ * --bridge-border input, table, card and secondary button borders
32
+ * --bridge-border-radius corners of inputs, buttons, alerts, cards, dialogs
33
+ * --bridge-overlay backdrop behind dialogs
34
+ * --bridge-alert-error-{bg,fg,border} errors, critical billing notices
35
+ * --bridge-alert-success-{bg,fg,border} confirmations, active plan badge
36
+ * --bridge-alert-info-{bg,fg,border} info notices, trial badge
37
+ * --bridge-alert-warning-{bg,fg,border} warnings, quota nearing its limit
38
+ *
39
+ * Layout
40
+ * --bridge-auth-page-padding default container of the sign-in pages
41
+ * --bridge-billing-page-width subscription pages, <BridgePaywallPage>
42
+ * --bridge-billing-page-padding subscription pages, <BridgePaywallPage>
43
+ * --bridge-paywall-bg backdrop of <BridgePaywall> / the lockscreen
44
+ * --bridge-paywall-panel-bg panel of <BridgePaywall>
45
+ *
46
+ * Deprecated aliases — still honoured when set on :root, removed in a later
47
+ * major: --bridge-primary-foreground → --bridge-primary-fg
48
+ * --bridge-bg-muted → --bridge-muted-bg
49
+ *
50
+ * Fonts and body text colour are not tokens: Bridge pages render inside your
51
+ * layout and inherit them.
10
52
  *
11
53
  * State selectors:
12
54
  * [data-active="true"] — active tab
@@ -19,21 +61,37 @@
19
61
  * [data-variant="danger"] — danger variant
20
62
  */
21
63
 
22
- /* ─── CSS variable defaults (consumer can override at any scope) ─────────── */
64
+ /* ─── Token defaults — zero specificity, so the app's :root always wins ──── */
23
65
 
24
- :root {
66
+ :where(:root) {
67
+ /* Derived tokens (primary-hover, primary-fg, primary-light, input-focus,
68
+ muted-bg, paywall-panel-bg) have no value here on purpose: each falls back
69
+ to its source where it is used, so setting --bridge-primary on a wrapper
70
+ re-derives them for that wrapper too. */
25
71
  --bridge-primary: #4f46e5;
26
- --bridge-primary-hover: #4338ca;
27
- --bridge-primary-fg: #ffffff;
72
+ --bridge-bg: #ffffff;
73
+ --bridge-foreground: #111827;
74
+ --bridge-muted: #6b7280;
28
75
  --bridge-border: #d1d5db;
29
76
  --bridge-border-radius: 6px;
30
- --bridge-input-focus: #4f46e5;
77
+ --bridge-overlay: rgba(15, 23, 42, 0.45);
31
78
  --bridge-alert-error-bg: #fef2f2;
32
79
  --bridge-alert-error-fg: #991b1b;
33
80
  --bridge-alert-error-border: #fca5a5;
34
81
  --bridge-alert-success-bg: #f0fdf4;
35
82
  --bridge-alert-success-fg: #166534;
36
83
  --bridge-alert-success-border: #86efac;
84
+ --bridge-alert-info-bg: #eff6ff;
85
+ --bridge-alert-info-fg: #1e40af;
86
+ --bridge-alert-info-border: #bfdbfe;
87
+ --bridge-alert-warning-bg: #fffbeb;
88
+ --bridge-alert-warning-fg: #92400e;
89
+ --bridge-alert-warning-border: #fcd34d;
90
+
91
+ --bridge-auth-page-padding: 3rem 1rem;
92
+ --bridge-billing-page-width: 60rem;
93
+ --bridge-billing-page-padding: 3rem 1rem;
94
+ --bridge-paywall-bg: rgba(15, 23, 42, 0.72);
37
95
  }
38
96
 
39
97
  /* ─── Input visual defaults ──────────────────────────────────────────────── */
@@ -47,8 +105,8 @@
47
105
  :where(input[type="text"]:focus, input[type="email"]:focus,
48
106
  input[type="password"]:focus, input[type="tel"]:focus,
49
107
  .bridge-input:focus) {
50
- border-color: var(--bridge-input-focus);
51
- box-shadow: 0 0 0 2px color-mix(in srgb, var(--bridge-input-focus) 20%, transparent);
108
+ border-color: var(--bridge-input-focus, var(--bridge-primary));
109
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--bridge-input-focus, var(--bridge-primary)) 20%, transparent);
52
110
  }
53
111
 
54
112
  /* ─── Buttons ────────────────────────────────────────────────────────────── */
@@ -92,13 +150,13 @@
92
150
 
93
151
  :where(.bridge-btn-primary) {
94
152
  background-color: var(--bridge-primary);
95
- color: var(--bridge-primary-fg);
153
+ color: var(--bridge-primary-fg, var(--bridge-primary-foreground, #ffffff));
96
154
  border: 1px solid var(--bridge-primary);
97
155
  border-radius: var(--bridge-border-radius);
98
156
  }
99
157
  :where(.bridge-btn-primary:hover:not(:disabled)) {
100
- background-color: var(--bridge-primary-hover);
101
- border-color: var(--bridge-primary-hover);
158
+ background-color: var(--bridge-primary-hover, color-mix(in srgb, var(--bridge-primary) 85%, #000000));
159
+ border-color: var(--bridge-primary-hover, color-mix(in srgb, var(--bridge-primary) 85%, #000000));
102
160
  }
103
161
  :where(.bridge-btn-secondary, .bridge-btn-outline) {
104
162
  background-color: transparent;
@@ -275,12 +333,12 @@
275
333
  border: none;
276
334
  cursor: pointer;
277
335
  padding: 0.25rem;
278
- color: var(--bridge-muted, #6b7280);
336
+ color: var(--bridge-muted);
279
337
  line-height: 1;
280
338
  }
281
339
 
282
340
  .bridge-password-toggle:hover {
283
- color: var(--bridge-foreground, #374151);
341
+ color: var(--bridge-foreground);
284
342
  }
285
343
 
286
344
  /* ─── Auth form helpers ───────────────────────────────────────────────────── */
@@ -318,13 +376,13 @@
318
376
  /* Roughly the height of the credentials form it replaces, so the card does
319
377
  not collapse and then re-expand under the cursor. */
320
378
  min-height: 8rem;
321
- color: var(--bridge-muted, #6b7280);
379
+ color: var(--bridge-muted);
322
380
  font-size: 0.875rem;
323
381
  }
324
382
 
325
383
  .bridge-mfa-help {
326
384
  font-size: 0.8125rem;
327
- color: var(--bridge-muted, #6b7280);
385
+ color: var(--bridge-muted);
328
386
  margin: 0.75rem 0 0.25rem;
329
387
  text-align: center;
330
388
  }
@@ -358,7 +416,7 @@
358
416
  gap: 0.75rem;
359
417
  margin-bottom: 1rem;
360
418
  padding: 0.75rem;
361
- background: var(--bridge-bg-muted, #f5f5f5);
419
+ background: var(--bridge-muted-bg, var(--bridge-bg-muted, #f3f4f6));
362
420
  border-radius: 0.5rem;
363
421
  }
364
422
 
@@ -446,6 +504,19 @@
446
504
  font-family: inherit;
447
505
  }
448
506
 
507
+ :where(.bridge-team-tabs) {
508
+ border-bottom: 1px solid var(--bridge-border);
509
+ }
510
+
511
+ :where(.bridge-team-tab) {
512
+ color: var(--bridge-muted);
513
+ }
514
+
515
+ :where(.bridge-team-tab[data-active="true"]) {
516
+ color: var(--bridge-primary);
517
+ box-shadow: inset 0 -2px 0 var(--bridge-primary);
518
+ }
519
+
449
520
  /* ─── TeamUserList ───────────────────────────────────────────────────────── */
450
521
 
451
522
  .bridge-team-users-header {
@@ -633,6 +704,22 @@
633
704
  min-width: 160px;
634
705
  }
635
706
 
707
+ :where(.bridge-team-actions-menu) {
708
+ background: var(--bridge-bg);
709
+ color: var(--bridge-foreground);
710
+ border: 1px solid var(--bridge-border);
711
+ border-radius: var(--bridge-border-radius);
712
+ }
713
+
714
+ :where(.bridge-team-table th) {
715
+ color: var(--bridge-muted);
716
+ border-bottom: 1px solid var(--bridge-border);
717
+ }
718
+
719
+ :where(.bridge-team-table td) {
720
+ border-bottom: 1px solid var(--bridge-border);
721
+ }
722
+
636
723
  .bridge-team-actions-item {
637
724
  display: block;
638
725
  width: 100%;
@@ -647,15 +734,24 @@
647
734
 
648
735
  /* ─── Team Dialogs ───────────────────────────────────────────────────────── */
649
736
 
650
- .bridge-team-dialog {
737
+ /* The team dialogs carry [data-bridge-team-dialog]; the upgrade dialog the class. */
738
+ .bridge-team-dialog,
739
+ [data-bridge-team-dialog] {
651
740
  border: none;
652
741
  padding: 0;
653
742
  max-width: 400px;
654
743
  width: 90%;
655
744
  }
656
745
 
657
- .bridge-team-dialog::backdrop {
658
- background: rgba(0, 0, 0, 0.4);
746
+ :where(.bridge-team-dialog, [data-bridge-team-dialog]) {
747
+ background: var(--bridge-bg);
748
+ color: var(--bridge-foreground);
749
+ border-radius: var(--bridge-border-radius);
750
+ }
751
+
752
+ .bridge-team-dialog::backdrop,
753
+ [data-bridge-team-dialog]::backdrop {
754
+ background: var(--bridge-overlay);
659
755
  }
660
756
 
661
757
  .bridge-team-dialog-content {
@@ -764,25 +860,25 @@
764
860
  letter-spacing: 0.05em;
765
861
  font-weight: 500;
766
862
  text-align: left;
767
- border-bottom: 1px solid var(--bridge-border, #e5e7eb);
768
- color: var(--bridge-muted, #6b7280);
863
+ border-bottom: 1px solid var(--bridge-border);
864
+ color: var(--bridge-muted);
769
865
  }
770
866
 
771
867
  [data-bridge-api-tokens] .bridge-api-td,
772
868
  [data-bridge-api-tokens] .bridge-api-td-name,
773
869
  [data-bridge-api-tokens] .bridge-api-td-muted {
774
870
  padding: 0.75rem 1rem;
775
- border-bottom: 1px solid var(--bridge-border, #e5e7eb);
871
+ border-bottom: 1px solid var(--bridge-border);
776
872
  }
777
873
 
778
874
  [data-bridge-api-tokens] .bridge-api-td-muted {
779
- color: var(--bridge-muted, #6b7280);
875
+ color: var(--bridge-muted);
780
876
  }
781
877
 
782
878
  [data-bridge-api-tokens] .bridge-api-td-actions {
783
879
  padding: 0.75rem 1rem;
784
880
  text-align: right;
785
- border-bottom: 1px solid var(--bridge-border, #e5e7eb);
881
+ border-bottom: 1px solid var(--bridge-border);
786
882
  }
787
883
 
788
884
  [data-bridge-api-tokens] .bridge-api-privileges {
@@ -792,7 +888,7 @@
792
888
  }
793
889
 
794
890
  [data-bridge-api-tokens] .bridge-api-inline-form {
795
- border: 1px solid var(--bridge-border, #e5e7eb);
891
+ border: 1px solid var(--bridge-border);
796
892
  border-radius: 0.5rem;
797
893
  padding: 1rem 1.25rem;
798
894
  }
@@ -957,9 +1053,9 @@
957
1053
  gap: 0.25rem;
958
1054
  margin-bottom: 1.25rem;
959
1055
  padding: 0.25rem;
960
- border: 1px solid var(--bridge-border, #e2e8f0);
961
- border-radius: var(--bridge-border-radius, 0.5rem);
962
- background: var(--bridge-muted-bg, var(--bridge-bg-muted, #f8fafc));
1056
+ border: 1px solid var(--bridge-border);
1057
+ border-radius: var(--bridge-border-radius);
1058
+ background: var(--bridge-muted-bg, var(--bridge-bg-muted, #f3f4f6));
963
1059
  }
964
1060
 
965
1061
  .bridge-plan-interval-tab {
@@ -970,19 +1066,19 @@
970
1066
  font: inherit;
971
1067
  font-size: 0.8125rem;
972
1068
  padding: 0.375rem 0.875rem;
973
- border-radius: calc(var(--bridge-border-radius, 0.5rem) - 0.2rem);
974
- color: var(--bridge-muted, #64748b);
1069
+ border-radius: calc(var(--bridge-border-radius) - 0.2rem);
1070
+ color: var(--bridge-muted);
975
1071
  }
976
1072
 
977
1073
  .bridge-plan-interval-tab[data-active="true"] {
978
- background: var(--bridge-primary, #2563eb);
979
- color: var(--bridge-primary-fg, var(--bridge-primary-foreground, #fff));
1074
+ background: var(--bridge-primary);
1075
+ color: var(--bridge-primary-fg, var(--bridge-primary-foreground, #ffffff));
980
1076
  }
981
1077
 
982
1078
  .bridge-plan-unavailable {
983
1079
  margin: 0;
984
1080
  font-size: 0.8125rem;
985
- color: var(--bridge-muted, #64748b);
1081
+ color: var(--bridge-muted);
986
1082
  }
987
1083
 
988
1084
  /* Plan-change confirmation dialog + success notice (TBP-33) */
@@ -993,7 +1089,7 @@
993
1089
  .bridge-plan-confirm-backdrop {
994
1090
  position: fixed;
995
1091
  inset: 0;
996
- background: rgba(15, 23, 42, 0.45);
1092
+ background: var(--bridge-overlay);
997
1093
  display: grid;
998
1094
  place-items: center;
999
1095
  z-index: 1000;
@@ -1001,9 +1097,9 @@
1001
1097
  }
1002
1098
 
1003
1099
  .bridge-plan-confirm {
1004
- background: var(--bridge-bg, #fff);
1005
- border: 1px solid var(--bridge-border, #e2e8f0);
1006
- border-radius: var(--bridge-border-radius, 0.5rem);
1100
+ background: var(--bridge-bg);
1101
+ border: 1px solid var(--bridge-border);
1102
+ border-radius: var(--bridge-border-radius);
1007
1103
  box-shadow: 0 24px 60px -12px rgba(0, 0, 0, 0.35);
1008
1104
  max-width: 26rem;
1009
1105
  width: 100%;
@@ -1028,7 +1124,7 @@
1028
1124
  .bridge-plan-confirm-note {
1029
1125
  margin: 0;
1030
1126
  font-size: 0.8125rem;
1031
- color: var(--bridge-muted, #64748b);
1127
+ color: var(--bridge-muted);
1032
1128
  line-height: 1.5;
1033
1129
  }
1034
1130
 
@@ -1129,12 +1225,12 @@
1129
1225
  }
1130
1226
 
1131
1227
  [data-bridge-workspace-item]:hover:not(:disabled) {
1132
- background: var(--bridge-muted-bg, #f3f4f6);
1228
+ background: var(--bridge-muted-bg, var(--bridge-bg-muted, #f3f4f6));
1133
1229
  }
1134
1230
 
1135
1231
  [data-bridge-workspace-item][data-active="true"] {
1136
- background: var(--bridge-primary-light, #eff6ff);
1137
- border-color: var(--bridge-primary, #3b82f6);
1232
+ background: var(--bridge-primary-light, color-mix(in srgb, var(--bridge-primary) 10%, #ffffff));
1233
+ border-color: var(--bridge-primary);
1138
1234
  }
1139
1235
 
1140
1236
  [data-bridge-workspace-item][data-loading="true"] {
@@ -1153,8 +1249,8 @@
1153
1249
  width: 2rem;
1154
1250
  height: 2rem;
1155
1251
  border-radius: 0.375rem;
1156
- background: var(--bridge-primary, #3b82f6);
1157
- color: var(--bridge-primary-foreground, #ffffff);
1252
+ background: var(--bridge-primary);
1253
+ color: var(--bridge-primary-fg, var(--bridge-primary-foreground, #ffffff));
1158
1254
  font-size: 0.875rem;
1159
1255
  font-weight: 600;
1160
1256
  flex-shrink: 0;
@@ -1178,7 +1274,7 @@
1178
1274
  [data-bridge-workspace-name] {
1179
1275
  font-size: 0.875rem;
1180
1276
  font-weight: 500;
1181
- color: var(--bridge-foreground, #111827);
1277
+ color: var(--bridge-foreground);
1182
1278
  white-space: nowrap;
1183
1279
  overflow: hidden;
1184
1280
  text-overflow: ellipsis;
@@ -1186,7 +1282,7 @@
1186
1282
 
1187
1283
  [data-bridge-workspace-user] {
1188
1284
  font-size: 0.75rem;
1189
- color: var(--bridge-muted, #6b7280);
1285
+ color: var(--bridge-muted);
1190
1286
  white-space: nowrap;
1191
1287
  overflow: hidden;
1192
1288
  text-overflow: ellipsis;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nebulr-group/bridge-svelte",
3
- "version": "0.9.0-beta.2",
3
+ "version": "0.9.0-beta.4",
4
4
  "description": "Bridge Svelte library, This library helps you to add bridge authentication and feature flags, and payments to your svelte application.",
5
5
  "author": "Iman Pouya",
6
6
  "license": "MIT",