@bluevolt-tech/lumen 1.3.2

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 (78) hide show
  1. package/README.md +286 -0
  2. package/assets/fonts/fonts.css +25 -0
  3. package/assets/icons/.gitkeep +0 -0
  4. package/assets/icons/edit.svg +3 -0
  5. package/assets/images/.gitkeep +0 -0
  6. package/assets/images/bluevolt-logo.png +0 -0
  7. package/dist/assets/fonts/fonts.css +25 -0
  8. package/dist/assets/icons/.gitkeep +0 -0
  9. package/dist/assets/icons/edit.svg +3 -0
  10. package/dist/assets/images/.gitkeep +0 -0
  11. package/dist/assets/images/bluevolt-logo.png +0 -0
  12. package/dist/components/bv-avatar/bv-avatar.d.ts +13 -0
  13. package/dist/components/bv-avatar/bv-avatar.js +81 -0
  14. package/dist/components/bv-badge/bv-badge.d.ts +11 -0
  15. package/dist/components/bv-badge/bv-badge.js +58 -0
  16. package/dist/components/bv-button/bv-button.d.ts +23 -0
  17. package/dist/components/bv-button/bv-button.js +395 -0
  18. package/dist/components/bv-category-pill/bv-category-pill.d.ts +11 -0
  19. package/dist/components/bv-category-pill/bv-category-pill.js +61 -0
  20. package/dist/components/bv-checkbox/bv-checkbox.d.ts +14 -0
  21. package/dist/components/bv-checkbox/bv-checkbox.js +89 -0
  22. package/dist/components/bv-chip/bv-chip.d.ts +11 -0
  23. package/dist/components/bv-chip/bv-chip.js +72 -0
  24. package/dist/components/bv-course-detail/bv-course-detail.d.ts +28 -0
  25. package/dist/components/bv-course-detail/bv-course-detail.js +269 -0
  26. package/dist/components/bv-course-detail-modal/bv-course-detail-modal.d.ts +35 -0
  27. package/dist/components/bv-course-detail-modal/bv-course-detail-modal.js +1455 -0
  28. package/dist/components/bv-course-grid-card/bv-course-grid-card.d.ts +12 -0
  29. package/dist/components/bv-course-grid-card/bv-course-grid-card.js +578 -0
  30. package/dist/components/bv-course-list-card/bv-course-list-card.d.ts +12 -0
  31. package/dist/components/bv-course-list-card/bv-course-list-card.js +585 -0
  32. package/dist/components/bv-course-outline/bv-course-outline.d.ts +49 -0
  33. package/dist/components/bv-course-outline/bv-course-outline.js +488 -0
  34. package/dist/components/bv-empty-state/bv-empty-state.d.ts +10 -0
  35. package/dist/components/bv-empty-state/bv-empty-state.js +69 -0
  36. package/dist/components/bv-filter-dropdown/bv-filter-dropdown.d.ts +26 -0
  37. package/dist/components/bv-filter-dropdown/bv-filter-dropdown.js +164 -0
  38. package/dist/components/bv-filter-panel/bv-filter-panel.d.ts +25 -0
  39. package/dist/components/bv-filter-panel/bv-filter-panel.js +222 -0
  40. package/dist/components/bv-icon/bv-icon.d.ts +10 -0
  41. package/dist/components/bv-icon/bv-icon.js +122 -0
  42. package/dist/components/bv-icon/icons.d.ts +3 -0
  43. package/dist/components/bv-modal/bv-modal.d.ts +13 -0
  44. package/dist/components/bv-modal/bv-modal.js +104 -0
  45. package/dist/components/bv-page-title/bv-page-title.d.ts +4 -0
  46. package/dist/components/bv-page-title/bv-page-title.js +33 -0
  47. package/dist/components/bv-pagination/bv-pagination.d.ts +20 -0
  48. package/dist/components/bv-pagination/bv-pagination.js +139 -0
  49. package/dist/components/bv-portal-header/bv-portal-header.d.ts +12 -0
  50. package/dist/components/bv-portal-header/bv-portal-header.js +854 -0
  51. package/dist/components/bv-portal-layout/bv-portal-layout.d.ts +6 -0
  52. package/dist/components/bv-portal-layout/bv-portal-layout.js +39 -0
  53. package/dist/components/bv-progress-bar/bv-progress-bar.d.ts +11 -0
  54. package/dist/components/bv-progress-bar/bv-progress-bar.js +61 -0
  55. package/dist/components/bv-promo-banner/bv-promo-banner.d.ts +12 -0
  56. package/dist/components/bv-promo-banner/bv-promo-banner.js +79 -0
  57. package/dist/components/bv-radio/bv-radio.d.ts +11 -0
  58. package/dist/components/bv-radio/bv-radio.js +78 -0
  59. package/dist/components/bv-searchbox/bv-searchbox.d.ts +10 -0
  60. package/dist/components/bv-searchbox/bv-searchbox.js +68 -0
  61. package/dist/components/bv-star-rating/bv-star-rating.d.ts +11 -0
  62. package/dist/components/bv-star-rating/bv-star-rating.js +67 -0
  63. package/dist/components/bv-table/bv-table.d.ts +5 -0
  64. package/dist/components/bv-table/bv-table.js +72 -0
  65. package/dist/components/bv-toggle/bv-toggle.d.ts +11 -0
  66. package/dist/components/bv-toggle/bv-toggle.js +72 -0
  67. package/dist/components/bv-user-row/bv-user-row.d.ts +12 -0
  68. package/dist/components/bv-user-row/bv-user-row.js +574 -0
  69. package/dist/components/bv-view-switcher/bv-view-switcher.d.ts +11 -0
  70. package/dist/components/bv-view-switcher/bv-view-switcher.js +91 -0
  71. package/dist/preview/index.html +76 -0
  72. package/dist/storybook/stories/screens/course-catalog.data.d.ts +28 -0
  73. package/dist/storybook/stories/screens/course-catalog.data.js +301 -0
  74. package/dist/themes/base.css +66 -0
  75. package/dist/themes/layouts.css +35 -0
  76. package/package.json +181 -0
  77. package/themes/base.css +66 -0
  78. package/themes/layouts.css +35 -0
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Do not edit directly
3
+ * Generated on Tue, 26 May 2026 17:51:51 GMT
4
+ */
5
+
6
+ :root {
7
+ --bv-color-primary: #0277bd;
8
+ --bv-color-primary-dark: #01579b;
9
+ --bv-color-primary-light: #e1f5fe;
10
+ --bv-color-primary-50: #eff8ff;
11
+ --bv-color-secondary: #f0f0f0;
12
+ --bv-color-secondary-dark: #e0e0e0;
13
+ --bv-color-secondary-light: #f8f8f8;
14
+ --bv-color-secondary-foreground: #344054;
15
+ --bv-color-danger: #dc2626;
16
+ --bv-color-danger-dark: #b91c1c;
17
+ --bv-color-danger-light: #fee2e2;
18
+ --bv-color-tertiary: #d55b27;
19
+ --bv-color-tertiary-dark: #b34d20;
20
+ --bv-color-tertiary-light: #fdf0ea;
21
+ --bv-color-warning: #d97706;
22
+ --bv-color-warning-dark: #b45309;
23
+ --bv-color-warning-light: #fef3c7;
24
+ --bv-color-success: #16a34a;
25
+ --bv-color-success-dark: #15803d;
26
+ --bv-color-success-light: #dcfce7;
27
+ --bv-color-neutral-0: #ffffff;
28
+ --bv-color-neutral-100: #f8fafc;
29
+ --bv-color-neutral-200: #e2e8f0;
30
+ --bv-color-neutral-300: #cbd5e1;
31
+ --bv-color-neutral-400: #94a3b8;
32
+ --bv-color-neutral-500: #64748b;
33
+ --bv-color-neutral-600: #475569;
34
+ --bv-color-neutral-700: #334155;
35
+ --bv-color-neutral-800: #1e293b;
36
+ --bv-color-neutral-900: #0f172a;
37
+ --bv-spacing-xs: 4px;
38
+ --bv-spacing-sm: 8px;
39
+ --bv-spacing-md: 16px;
40
+ --bv-spacing-lg: 24px;
41
+ --bv-spacing-xl: 32px;
42
+ --bv-spacing-2xl: 48px;
43
+ --bv-font-family-base: 'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
44
+ --bv-font-family-mono: 'Cascadia Code', 'Fira Code', monospace;
45
+ --bv-font-size-xs: 12px;
46
+ --bv-font-size-sm: 14px;
47
+ --bv-font-size-md: 16px;
48
+ --bv-font-size-lg: 18px;
49
+ --bv-font-size-xl: 20px;
50
+ --bv-font-size-2xl: 24px;
51
+ --bv-font-weight-regular: 400;
52
+ --bv-font-weight-medium: 500;
53
+ --bv-font-weight-semibold: 600;
54
+ --bv-font-weight-bold: 700;
55
+ --bv-radius-sm: 4px;
56
+ --bv-radius-md: 6px;
57
+ --bv-radius-lg: 8px;
58
+ --bv-radius-xl: 12px;
59
+ --bv-radius-full: 9999px;
60
+ --bv-shadow-sm: 0 1px 2px 0 rgba(16, 24, 40, 0.05);
61
+ --bv-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);
62
+ --bv-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1);
63
+ --bv-transition-fast: 100ms ease-in-out;
64
+ --bv-transition-normal: 200ms ease-in-out;
65
+ --bv-transition-slow: 300ms ease-in-out;
66
+ }
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Layout context tokens
3
+ *
4
+ * Apply via data attribute on any ancestor element (typically <body> or a shell component):
5
+ *
6
+ * <body data-bv-layout="portal"> — Learner Portal: inset canvas, rounded surfaces
7
+ * <body data-bv-layout="admin"> — Admin: full-bleed header, sharp containers
8
+ *
9
+ * Tokens:
10
+ * --bv-layout-gutter Outer padding between viewport and page content
11
+ * --bv-layout-bg Canvas background color behind the content shell
12
+ * --bv-layout-radius Border-radius for floating surface cards (header, panels)
13
+ * --bv-content-radius Border-radius for content containers (course list, tables)
14
+ */
15
+
16
+ :root {
17
+ --bv-layout-gutter: 0px;
18
+ --bv-layout-bg: transparent;
19
+ --bv-layout-radius: 0px;
20
+ --bv-content-radius: 0px;
21
+ }
22
+
23
+ [data-bv-layout="portal"] {
24
+ --bv-layout-gutter: 20px;
25
+ --bv-layout-bg: #F9FAFB;
26
+ --bv-layout-radius: 0px;
27
+ --bv-content-radius: 0px;
28
+ }
29
+
30
+ [data-bv-layout="admin"] {
31
+ --bv-layout-gutter: 0px;
32
+ --bv-layout-bg: #F9FAFB;
33
+ --bv-layout-radius: 0px;
34
+ --bv-content-radius: 0px;
35
+ }
package/package.json ADDED
@@ -0,0 +1,181 @@
1
+ {
2
+ "name": "@bluevolt-tech/lumen",
3
+ "version": "1.3.2",
4
+ "type": "module",
5
+ "publishConfig": {
6
+ "registry": "https://registry.npmjs.org",
7
+ "access": "public"
8
+ },
9
+ "scripts": {
10
+ "storybook": "storybook dev -p 6006 --config-dir storybook/.storybook",
11
+ "build-storybook": "node scripts/generate-changelog.js && storybook build --config-dir storybook/.storybook",
12
+ "changelog": "node scripts/generate-changelog.js",
13
+ "build:tokens": "node tokens/style-dictionary.config.cjs",
14
+ "build:components": "node build.mjs",
15
+ "build:types": "tsc --project tsconfig.build.json",
16
+ "build:static": "node scripts/copy-static.js",
17
+ "build": "npm run build:tokens && npm run build:components && npm run build:types && npm run build:static",
18
+ "prepublishOnly": "npm run build",
19
+ "serve": "vite preview --port 4173 --host --strictPort",
20
+ "tunnel": "npx localtunnel --port 4173",
21
+ "test": "vitest run",
22
+ "test:watch": "vitest",
23
+ "lint": "eslint components builder",
24
+ "lint:fix": "eslint components builder --fix",
25
+ "format": "prettier --write components builder",
26
+ "format:check": "prettier --check components builder",
27
+ "validate:screens": "node scripts/validate-screens.js",
28
+ "prepare": "husky"
29
+ },
30
+ "files": [
31
+ "dist",
32
+ "themes",
33
+ "assets",
34
+ "!**/*.test.ts",
35
+ "!**/*.test.js"
36
+ ],
37
+ "exports": {
38
+ "./components/bv-category-pill": {
39
+ "types": "./dist/components/bv-category-pill/bv-category-pill.d.ts",
40
+ "default": "./dist/components/bv-category-pill/bv-category-pill.js"
41
+ },
42
+ "./components/bv-avatar": {
43
+ "types": "./dist/components/bv-avatar/bv-avatar.d.ts",
44
+ "default": "./dist/components/bv-avatar/bv-avatar.js"
45
+ },
46
+ "./components/bv-badge": {
47
+ "types": "./dist/components/bv-badge/bv-badge.d.ts",
48
+ "default": "./dist/components/bv-badge/bv-badge.js"
49
+ },
50
+ "./components/bv-button": {
51
+ "types": "./dist/components/bv-button/bv-button.d.ts",
52
+ "default": "./dist/components/bv-button/bv-button.js"
53
+ },
54
+ "./components/bv-checkbox": {
55
+ "types": "./dist/components/bv-checkbox/bv-checkbox.d.ts",
56
+ "default": "./dist/components/bv-checkbox/bv-checkbox.js"
57
+ },
58
+ "./components/bv-chip": {
59
+ "types": "./dist/components/bv-chip/bv-chip.d.ts",
60
+ "default": "./dist/components/bv-chip/bv-chip.js"
61
+ },
62
+ "./components/bv-course-detail": {
63
+ "types": "./dist/components/bv-course-detail/bv-course-detail.d.ts",
64
+ "default": "./dist/components/bv-course-detail/bv-course-detail.js"
65
+ },
66
+ "./components/bv-course-detail-modal": {
67
+ "types": "./dist/components/bv-course-detail-modal/bv-course-detail-modal.d.ts",
68
+ "default": "./dist/components/bv-course-detail-modal/bv-course-detail-modal.js"
69
+ },
70
+ "./components/bv-course-grid-card": {
71
+ "types": "./dist/components/bv-course-grid-card/bv-course-grid-card.d.ts",
72
+ "default": "./dist/components/bv-course-grid-card/bv-course-grid-card.js"
73
+ },
74
+ "./components/bv-course-outline": {
75
+ "types": "./dist/components/bv-course-outline/bv-course-outline.d.ts",
76
+ "default": "./dist/components/bv-course-outline/bv-course-outline.js"
77
+ },
78
+ "./components/bv-course-list-card": {
79
+ "types": "./dist/components/bv-course-list-card/bv-course-list-card.d.ts",
80
+ "default": "./dist/components/bv-course-list-card/bv-course-list-card.js"
81
+ },
82
+ "./components/bv-empty-state": {
83
+ "types": "./dist/components/bv-empty-state/bv-empty-state.d.ts",
84
+ "default": "./dist/components/bv-empty-state/bv-empty-state.js"
85
+ },
86
+ "./components/bv-filter-dropdown": {
87
+ "types": "./dist/components/bv-filter-dropdown/bv-filter-dropdown.d.ts",
88
+ "default": "./dist/components/bv-filter-dropdown/bv-filter-dropdown.js"
89
+ },
90
+ "./components/bv-filter-panel": {
91
+ "types": "./dist/components/bv-filter-panel/bv-filter-panel.d.ts",
92
+ "default": "./dist/components/bv-filter-panel/bv-filter-panel.js"
93
+ },
94
+ "./components/bv-icon": {
95
+ "types": "./dist/components/bv-icon/bv-icon.d.ts",
96
+ "default": "./dist/components/bv-icon/bv-icon.js"
97
+ },
98
+ "./components/bv-modal": {
99
+ "types": "./dist/components/bv-modal/bv-modal.d.ts",
100
+ "default": "./dist/components/bv-modal/bv-modal.js"
101
+ },
102
+ "./components/bv-page-title": {
103
+ "types": "./dist/components/bv-page-title/bv-page-title.d.ts",
104
+ "default": "./dist/components/bv-page-title/bv-page-title.js"
105
+ },
106
+ "./components/bv-pagination": {
107
+ "types": "./dist/components/bv-pagination/bv-pagination.d.ts",
108
+ "default": "./dist/components/bv-pagination/bv-pagination.js"
109
+ },
110
+ "./components/bv-portal-header": {
111
+ "types": "./dist/components/bv-portal-header/bv-portal-header.d.ts",
112
+ "default": "./dist/components/bv-portal-header/bv-portal-header.js"
113
+ },
114
+ "./components/bv-portal-layout": {
115
+ "types": "./dist/components/bv-portal-layout/bv-portal-layout.d.ts",
116
+ "default": "./dist/components/bv-portal-layout/bv-portal-layout.js"
117
+ },
118
+ "./components/bv-progress-bar": {
119
+ "types": "./dist/components/bv-progress-bar/bv-progress-bar.d.ts",
120
+ "default": "./dist/components/bv-progress-bar/bv-progress-bar.js"
121
+ },
122
+ "./components/bv-promo-banner": {
123
+ "types": "./dist/components/bv-promo-banner/bv-promo-banner.d.ts",
124
+ "default": "./dist/components/bv-promo-banner/bv-promo-banner.js"
125
+ },
126
+ "./components/bv-radio": {
127
+ "types": "./dist/components/bv-radio/bv-radio.d.ts",
128
+ "default": "./dist/components/bv-radio/bv-radio.js"
129
+ },
130
+ "./components/bv-searchbox": {
131
+ "types": "./dist/components/bv-searchbox/bv-searchbox.d.ts",
132
+ "default": "./dist/components/bv-searchbox/bv-searchbox.js"
133
+ },
134
+ "./components/bv-star-rating": {
135
+ "types": "./dist/components/bv-star-rating/bv-star-rating.d.ts",
136
+ "default": "./dist/components/bv-star-rating/bv-star-rating.js"
137
+ },
138
+ "./components/bv-table": {
139
+ "types": "./dist/components/bv-table/bv-table.d.ts",
140
+ "default": "./dist/components/bv-table/bv-table.js"
141
+ },
142
+ "./components/bv-toggle": {
143
+ "types": "./dist/components/bv-toggle/bv-toggle.d.ts",
144
+ "default": "./dist/components/bv-toggle/bv-toggle.js"
145
+ },
146
+ "./components/bv-user-row": {
147
+ "types": "./dist/components/bv-user-row/bv-user-row.d.ts",
148
+ "default": "./dist/components/bv-user-row/bv-user-row.js"
149
+ },
150
+ "./components/bv-view-switcher": {
151
+ "types": "./dist/components/bv-view-switcher/bv-view-switcher.d.ts",
152
+ "default": "./dist/components/bv-view-switcher/bv-view-switcher.js"
153
+ },
154
+ "./storybook/stories/screens/course-catalog.data": {
155
+ "types": "./dist/storybook/stories/screens/course-catalog.data.d.ts",
156
+ "default": "./dist/storybook/stories/screens/course-catalog.data.js"
157
+ },
158
+ "./themes/*": "./themes/*",
159
+ "./assets/*": "./assets/*"
160
+ },
161
+ "devDependencies": {
162
+ "@storybook/addon-essentials": "^8.0.0",
163
+ "@storybook/addon-themes": "^8.0.0",
164
+ "@storybook/web-components-vite": "^8.0.0",
165
+ "@types/node": "^25.7.0",
166
+ "esbuild": "^0.28.0",
167
+ "eslint": "^9.39.4",
168
+ "eslint-config-prettier": "^10.1.8",
169
+ "eslint-plugin-wc": "^3.1.0",
170
+ "happy-dom": "^12.0.0",
171
+ "husky": "^9.1.7",
172
+ "lit": "^3.0.0",
173
+ "prettier": "^3.8.3",
174
+ "storybook": "^8.0.0",
175
+ "style-dictionary": "^3.9.0",
176
+ "typescript": "^5.3.0",
177
+ "typescript-eslint": "^8.59.2",
178
+ "vite": "^5.0.0",
179
+ "vitest": "^1.6.0"
180
+ }
181
+ }
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Do not edit directly
3
+ * Generated on Tue, 26 May 2026 17:51:51 GMT
4
+ */
5
+
6
+ :root {
7
+ --bv-color-primary: #0277bd;
8
+ --bv-color-primary-dark: #01579b;
9
+ --bv-color-primary-light: #e1f5fe;
10
+ --bv-color-primary-50: #eff8ff;
11
+ --bv-color-secondary: #f0f0f0;
12
+ --bv-color-secondary-dark: #e0e0e0;
13
+ --bv-color-secondary-light: #f8f8f8;
14
+ --bv-color-secondary-foreground: #344054;
15
+ --bv-color-danger: #dc2626;
16
+ --bv-color-danger-dark: #b91c1c;
17
+ --bv-color-danger-light: #fee2e2;
18
+ --bv-color-tertiary: #d55b27;
19
+ --bv-color-tertiary-dark: #b34d20;
20
+ --bv-color-tertiary-light: #fdf0ea;
21
+ --bv-color-warning: #d97706;
22
+ --bv-color-warning-dark: #b45309;
23
+ --bv-color-warning-light: #fef3c7;
24
+ --bv-color-success: #16a34a;
25
+ --bv-color-success-dark: #15803d;
26
+ --bv-color-success-light: #dcfce7;
27
+ --bv-color-neutral-0: #ffffff;
28
+ --bv-color-neutral-100: #f8fafc;
29
+ --bv-color-neutral-200: #e2e8f0;
30
+ --bv-color-neutral-300: #cbd5e1;
31
+ --bv-color-neutral-400: #94a3b8;
32
+ --bv-color-neutral-500: #64748b;
33
+ --bv-color-neutral-600: #475569;
34
+ --bv-color-neutral-700: #334155;
35
+ --bv-color-neutral-800: #1e293b;
36
+ --bv-color-neutral-900: #0f172a;
37
+ --bv-spacing-xs: 4px;
38
+ --bv-spacing-sm: 8px;
39
+ --bv-spacing-md: 16px;
40
+ --bv-spacing-lg: 24px;
41
+ --bv-spacing-xl: 32px;
42
+ --bv-spacing-2xl: 48px;
43
+ --bv-font-family-base: 'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
44
+ --bv-font-family-mono: 'Cascadia Code', 'Fira Code', monospace;
45
+ --bv-font-size-xs: 12px;
46
+ --bv-font-size-sm: 14px;
47
+ --bv-font-size-md: 16px;
48
+ --bv-font-size-lg: 18px;
49
+ --bv-font-size-xl: 20px;
50
+ --bv-font-size-2xl: 24px;
51
+ --bv-font-weight-regular: 400;
52
+ --bv-font-weight-medium: 500;
53
+ --bv-font-weight-semibold: 600;
54
+ --bv-font-weight-bold: 700;
55
+ --bv-radius-sm: 4px;
56
+ --bv-radius-md: 6px;
57
+ --bv-radius-lg: 8px;
58
+ --bv-radius-xl: 12px;
59
+ --bv-radius-full: 9999px;
60
+ --bv-shadow-sm: 0 1px 2px 0 rgba(16, 24, 40, 0.05);
61
+ --bv-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);
62
+ --bv-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1);
63
+ --bv-transition-fast: 100ms ease-in-out;
64
+ --bv-transition-normal: 200ms ease-in-out;
65
+ --bv-transition-slow: 300ms ease-in-out;
66
+ }
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Layout context tokens
3
+ *
4
+ * Apply via data attribute on any ancestor element (typically <body> or a shell component):
5
+ *
6
+ * <body data-bv-layout="portal"> — Learner Portal: inset canvas, rounded surfaces
7
+ * <body data-bv-layout="admin"> — Admin: full-bleed header, sharp containers
8
+ *
9
+ * Tokens:
10
+ * --bv-layout-gutter Outer padding between viewport and page content
11
+ * --bv-layout-bg Canvas background color behind the content shell
12
+ * --bv-layout-radius Border-radius for floating surface cards (header, panels)
13
+ * --bv-content-radius Border-radius for content containers (course list, tables)
14
+ */
15
+
16
+ :root {
17
+ --bv-layout-gutter: 0px;
18
+ --bv-layout-bg: transparent;
19
+ --bv-layout-radius: 0px;
20
+ --bv-content-radius: 0px;
21
+ }
22
+
23
+ [data-bv-layout="portal"] {
24
+ --bv-layout-gutter: 20px;
25
+ --bv-layout-bg: #F9FAFB;
26
+ --bv-layout-radius: 0px;
27
+ --bv-content-radius: 0px;
28
+ }
29
+
30
+ [data-bv-layout="admin"] {
31
+ --bv-layout-gutter: 0px;
32
+ --bv-layout-bg: #F9FAFB;
33
+ --bv-layout-radius: 0px;
34
+ --bv-content-radius: 0px;
35
+ }