ultimate-jekyll-manager 1.0.7 → 1.0.8

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 (57) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/assets/css/bundles/umbra.scss +5 -0
  3. package/dist/assets/js/libs/authorized-fetch.js +6 -7
  4. package/dist/assets/themes/umbra/README.md +75 -0
  5. package/dist/assets/themes/umbra/_config.scss +187 -0
  6. package/dist/assets/themes/umbra/_theme.js +36 -0
  7. package/dist/assets/themes/umbra/_theme.scss +34 -0
  8. package/dist/assets/themes/umbra/css/base/_animations.scss +27 -0
  9. package/dist/assets/themes/umbra/css/base/_backgrounds.scss +191 -0
  10. package/dist/assets/themes/umbra/css/base/_borders.scss +65 -0
  11. package/dist/assets/themes/umbra/css/base/_root.scss +68 -0
  12. package/dist/assets/themes/umbra/css/base/_typography.scss +148 -0
  13. package/dist/assets/themes/umbra/css/base/_utilities.scss +15 -0
  14. package/dist/assets/themes/umbra/css/components/_accordion.scss +44 -0
  15. package/dist/assets/themes/umbra/css/components/_badges.scss +25 -0
  16. package/dist/assets/themes/umbra/css/components/_buttons.scss +264 -0
  17. package/dist/assets/themes/umbra/css/components/_cards.scss +47 -0
  18. package/dist/assets/themes/umbra/css/components/_carousel.scss +41 -0
  19. package/dist/assets/themes/umbra/css/components/_forms.scss +150 -0
  20. package/dist/assets/themes/umbra/css/components/_infinite-scroll.scss +140 -0
  21. package/dist/assets/themes/umbra/css/components/_text.scss +53 -0
  22. package/dist/assets/themes/umbra/css/layout/_backend.scss +59 -0
  23. package/dist/assets/themes/umbra/css/layout/_blog.scss +42 -0
  24. package/dist/assets/themes/umbra/css/layout/_general.scss +142 -0
  25. package/dist/assets/themes/umbra/css/layout/_navigation.scss +602 -0
  26. package/dist/assets/themes/umbra/css/layout/_team.scss +18 -0
  27. package/dist/assets/themes/umbra/js/hero-demo-form.js +42 -0
  28. package/dist/assets/themes/umbra/js/infinite-scroll.js +139 -0
  29. package/dist/assets/themes/umbra/js/initialize-tooltips.js +20 -0
  30. package/dist/assets/themes/umbra/js/navbar-scroll.js +65 -0
  31. package/dist/build.js +11 -1
  32. package/dist/defaults/dist/_includes/themes/umbra/admin/sections/sidebar.html +3 -0
  33. package/dist/defaults/dist/_includes/themes/umbra/admin/sections/topbar.html +3 -0
  34. package/dist/defaults/dist/_includes/themes/umbra/backend/sections/sidebar.html +347 -0
  35. package/dist/defaults/dist/_includes/themes/umbra/backend/sections/topbar.html +184 -0
  36. package/dist/defaults/dist/_includes/themes/umbra/frontend/components/testimonial-scroll.html +84 -0
  37. package/dist/defaults/dist/_includes/themes/umbra/frontend/sections/footer.html +158 -0
  38. package/dist/defaults/dist/_includes/themes/umbra/frontend/sections/nav.html +276 -0
  39. package/dist/defaults/dist/_includes/themes/umbra/global/sections/account.html +72 -0
  40. package/dist/defaults/dist/_layouts/themes/umbra/admin/core/minimal-viewport-locked.html +31 -0
  41. package/dist/defaults/dist/_layouts/themes/umbra/admin/core/minimal.html +32 -0
  42. package/dist/defaults/dist/_layouts/themes/umbra/backend/core/base.html +55 -0
  43. package/dist/defaults/dist/_layouts/themes/umbra/backend/core/minimal-viewport-locked.html +149 -0
  44. package/dist/defaults/dist/_layouts/themes/umbra/backend/core/minimal.html +149 -0
  45. package/dist/defaults/dist/_layouts/themes/umbra/backend/pages/dashboard/index.html +247 -0
  46. package/dist/defaults/dist/_layouts/themes/umbra/frontend/core/base.html +32 -0
  47. package/dist/defaults/dist/_layouts/themes/umbra/frontend/core/cover.html +41 -0
  48. package/dist/defaults/dist/_layouts/themes/umbra/frontend/core/minimal.html +42 -0
  49. package/dist/defaults/dist/_layouts/themes/umbra/frontend/pages/account/index.html +152 -0
  50. package/dist/defaults/dist/_layouts/themes/umbra/frontend/pages/auth/signin.html +85 -0
  51. package/dist/defaults/dist/_layouts/themes/umbra/frontend/pages/auth/signup.html +97 -0
  52. package/dist/defaults/dist/_layouts/themes/umbra/frontend/pages/index.html +188 -0
  53. package/dist/defaults/dist/_layouts/themes/umbra/frontend/pages/pricing.html +129 -0
  54. package/dist/defaults/src/_config.yml +1 -1
  55. package/dist/defaults/src/assets/css/main.scss +6 -6
  56. package/package.json +3 -3
  57. package/test.css +18 -0
package/CHANGELOG.md CHANGED
@@ -15,6 +15,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
15
15
  - `Security` in case of vulnerabilities.
16
16
 
17
17
  ---
18
+ ## [1.0.7] - 2026-03-20
19
+ ### Changed
20
+ - Upgrade `web-manager` from ^4.1.29 to ^4.1.30
21
+
18
22
  ## [1.0.3] - 2026-03-16
19
23
  ### Added
20
24
  - Ensure consuming projects have `"private": true` in package.json during setup to prevent accidental npm publishes
@@ -0,0 +1,5 @@
1
+ // Import Ultimate Jekyll Manager
2
+ @use 'ultimate-jekyll-manager' as *;
3
+
4
+ // Custom styles
5
+ // ...
@@ -20,20 +20,19 @@ export async function authorizedFetch(url, options = {}) {
20
20
  const user = auth.currentUser;
21
21
 
22
22
  if (!user) {
23
- console.warn('Did we fully wait for auth state to be determined?');
24
- throw new Error('No authenticated user found');
23
+ console.warn('authorizedFetch: No authenticated user found. Did we fully wait for auth state to be determined?');
25
24
  }
26
25
 
27
- // Get the ID token - let it throw if it fails
28
- const idToken = await user.getIdToken(true);
29
-
30
26
  // Ensure headers object exists
31
27
  if (!requestOptions.headers) {
32
28
  requestOptions.headers = {};
33
29
  }
34
30
 
35
- // Set the Authorization header with Bearer token
36
- requestOptions.headers['Authorization'] = `Bearer ${idToken}`;
31
+ // Set the Authorization header with Bearer token if user is logged in
32
+ if (user) {
33
+ const idToken = await user.getIdToken(true);
34
+ requestOptions.headers['Authorization'] = `Bearer ${idToken}`;
35
+ }
37
36
 
38
37
  // Make the request using wonderful-fetch
39
38
  return fetch(url, requestOptions);
@@ -0,0 +1,75 @@
1
+ # Umbra Theme Customization Guide
2
+
3
+ ## How to Customize in Your Consuming Project
4
+
5
+ The Umbra theme is designed to be fully customizable. All theme variables use `!default` which means you can override them BEFORE importing the theme.
6
+
7
+ ### Example: Customizing Colors in Your Project
8
+
9
+ In your consuming project's `src/assets/css/main.scss`:
10
+
11
+ ```scss
12
+ // 1. Override Umbra theme variables BEFORE importing the theme
13
+ $primary: #FF0000; // Change primary color to red
14
+ $umbra-bg-light: #F5F5F5; // Change light mode background
15
+ $umbra-bg-dark: #1A1A1A; // Change dark mode background
16
+ $font-family-sans-serif: 'Inter', sans-serif; // Change font
17
+
18
+ // 2. Now import the Umbra theme - it will use YOUR values
19
+ @import '~ultimate-jekyll-manager/src/assets/themes/umbra/theme';
20
+
21
+ // 3. Add your custom styles below
22
+ .my-custom-class {
23
+ // Your custom CSS
24
+ }
25
+ ```
26
+
27
+ ## Available Customizable Variables
28
+
29
+ See `_config.scss` for the full list of variables you can override:
30
+
31
+ ### Bootstrap Colors
32
+ - `$primary` - Primary brand color
33
+ - `$secondary` - Secondary color
34
+ - `$success`, `$info`, `$warning`, `$danger` - Utility colors
35
+ - `$light`, `$dark` - Light and dark variants
36
+
37
+ ### Background Colors
38
+ - `$umbra-bg-light` - Light mode background
39
+ - `$umbra-bg-dark` - Dark mode background
40
+
41
+ ### Typography
42
+ - `$font-family-sans-serif` - Main font family
43
+ - `$headings-font-weight` - Heading font weight
44
+
45
+ ### Border Radius
46
+ - `$border-radius` - Default border radius
47
+ - `$border-radius-sm`, `$border-radius-lg` - Size variants
48
+
49
+ ### Gradients
50
+ - `$umbra-gradient-primary`, `$umbra-gradient-aurora`, etc.
51
+
52
+ ## File Structure
53
+
54
+ ```
55
+ umbra/
56
+ ├── _config.scss ← All customizable variables with !default
57
+ ├── _theme.scss ← Main entry point, imports config then Bootstrap
58
+ ├── css/base/
59
+ │ ├── _variables.scss ← Internal non-customizable values
60
+ │ └── _root.scss ← CSS custom property overrides
61
+ └── ...
62
+ ```
63
+
64
+ ## How It Works
65
+
66
+ 1. **`_config.scss`**: Defines all variables with `!default` (can be overridden)
67
+ 2. **Your `main.scss`**: Sets custom values BEFORE importing theme
68
+ 3. **`_theme.scss`**: Imports config (uses your values or defaults), then Bootstrap
69
+ 4. **`_root.scss`**: Converts SCSS variables to CSS custom properties for runtime
70
+
71
+ This ensures:
72
+ - ✅ You can customize anything
73
+ - ✅ Bootstrap gets configured with your colors
74
+ - ✅ CSS custom properties update for light/dark mode
75
+ - ✅ No need to modify theme files
@@ -0,0 +1,187 @@
1
+ // Umbra Theme Configuration
2
+ // ALL customizable variables are defined here with !default
3
+ // Consuming projects can override any of these using @use ... with ()
4
+
5
+ // ============================================
6
+ // Bootstrap Color Overrides
7
+ // ============================================
8
+ $primary: #E2725B !default; // Terracotta
9
+ $secondary: #8B7A75 !default; // Warm Gray
10
+ $success: #2A9D8F !default;
11
+ $info: #E9C46A !default; // Soft Gold
12
+ $warning: #F4A261 !default;
13
+ $danger: #E76F51 !default;
14
+ $light: #FDFBF7 !default; // Warm Cream
15
+ $dark: #1E1A18 !default; // Warm Charcoal
16
+
17
+ // ============================================
18
+ // Typography
19
+ // ============================================
20
+ $font-family-sans-serif: 'Figtree', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif !default;
21
+ $headings-font-weight: 600 !default;
22
+ $umbra-font-mono: monospace !default;
23
+ $umbra-font-accent: 'Figtree', sans-serif !default;
24
+
25
+ // ============================================
26
+ // Border Radius
27
+ // ============================================
28
+ $border-radius: 0.5rem !default;
29
+ $border-radius-sm: 0.375rem !default;
30
+ $border-radius-lg: 0.75rem !default;
31
+ $border-radius-xl: 1rem !default;
32
+ $border-radius-2xl: 1.5rem !default;
33
+ $border-radius-pill: 50rem !default;
34
+
35
+ // Umbra-specific border radius aliases
36
+ $umbra-radius-sm: $border-radius-sm !default;
37
+ $umbra-radius-md: $border-radius !default;
38
+ $umbra-radius-lg: $border-radius-lg !default;
39
+ $umbra-radius-xl: $border-radius-xl !default;
40
+ $umbra-radius-2xl: $border-radius-2xl !default;
41
+ $umbra-radius-full: 9999px !default;
42
+
43
+ // ============================================
44
+ // Background Colors (Light Mode)
45
+ // ============================================
46
+ $umbra-bg-light: #FDFBF7 !default; // Main body background (warm cream)
47
+ $umbra-bg-light-secondary: #F5F2EC !default; // Secondary backgrounds
48
+ $umbra-bg-light-tertiary: #EBE5DB !default; // Tertiary backgrounds
49
+
50
+ // ============================================
51
+ // Background Colors (Dark Mode)
52
+ // ============================================
53
+ $umbra-bg-dark: #1E1A18 !default; // Main body background (warm charcoal)
54
+ $umbra-bg-dark-secondary: #2A2421 !default; // Secondary backgrounds
55
+ $umbra-bg-dark-tertiary: #372F2B !default; // Tertiary backgrounds
56
+
57
+ // ============================================
58
+ // Umbra-Specific Colors
59
+ // ============================================
60
+ $umbra-primary: $primary !default;
61
+ $umbra-primary-dark: darken($primary, 10%) !default;
62
+ $umbra-primary-light: lighten($primary, 10%) !default;
63
+ $umbra-primary-soft: mix($primary, white, 10%) !default;
64
+
65
+ $umbra-secondary: $secondary !default;
66
+ $umbra-secondary-dark: darken($secondary, 5%) !default;
67
+ $umbra-secondary-light: lighten($secondary, 5%) !default;
68
+
69
+ $umbra-accent: $info !default;
70
+ $umbra-accent-dark: darken($info, 10%) !default;
71
+ $umbra-accent-light: lighten($info, 10%) !default;
72
+
73
+ $umbra-dark: $dark !default;
74
+ $umbra-dark-900: lighten($dark, 5%) !default;
75
+ $umbra-dark-800: lighten($dark, 10%) !default;
76
+ $umbra-dark-700: lighten($dark, 15%) !default;
77
+ $umbra-dark-600: lighten($dark, 20%) !default;
78
+
79
+ $umbra-gray: #6B7280 !default;
80
+ $umbra-gray-light: #9CA3AF !default;
81
+ $umbra-gray-lighter: #D1D5DB !default;
82
+ $umbra-gray-lightest: #F3F4F6 !default;
83
+
84
+ $umbra-white: #FFFFFF !default;
85
+ $umbra-off-white: #FAFBFC !default;
86
+ $umbra-cream: #FFF9F5 !default;
87
+
88
+ // ============================================
89
+ // Gradient Definitions
90
+ // ============================================
91
+ $umbra-gradient-primary: linear-gradient(135deg, $umbra-primary 0%, #D58C40 100%) !default;
92
+ $umbra-gradient-dark: linear-gradient(135deg, $umbra-dark 0%, $umbra-dark-800 100%) !default;
93
+ $umbra-gradient-light: linear-gradient(135deg, $umbra-white 0%, $umbra-off-white 100%) !default;
94
+ $umbra-gradient-sunset: linear-gradient(135deg, #E2725B 0%, #F4A261 100%) !default;
95
+ $umbra-gradient-aurora: linear-gradient(135deg, #E2725B 0%, #D58C40 50%, #2A9D8F 100%) !default;
96
+ $umbra-gradient-rainbow: linear-gradient(60deg, #E2725B, #D58C40, #F4A261, #E9C46A, #2A9D8F, #8B7A75) !default;
97
+
98
+ // ============================================
99
+ // Typography Scale
100
+ // ============================================
101
+ $umbra-font-size-xs: 0.75rem !default;
102
+ $umbra-font-size-sm: 0.875rem !default;
103
+ $umbra-font-size-base: 1rem !default;
104
+ $umbra-font-size-lg: 1.125rem !default;
105
+ $umbra-font-size-xl: 1.25rem !default;
106
+ $umbra-font-size-2xl: 1.5rem !default;
107
+ $umbra-font-size-3xl: 1.875rem !default;
108
+ $umbra-font-size-4xl: 2.25rem !default;
109
+ $umbra-font-size-5xl: 3rem !default;
110
+ $umbra-font-size-6xl: 3.75rem !default;
111
+
112
+ // ============================================
113
+ // Spacing Scale
114
+ // ============================================
115
+ $umbra-spacing-xs: 0.25rem !default;
116
+ $umbra-spacing-sm: 0.5rem !default;
117
+ $umbra-spacing-md: 1rem !default;
118
+ $umbra-spacing-lg: 1.5rem !default;
119
+ $umbra-spacing-xl: 2rem !default;
120
+ $umbra-spacing-2xl: 3rem !default;
121
+ $umbra-spacing-3xl: 4rem !default;
122
+ $umbra-spacing-4xl: 6rem !default;
123
+
124
+ // ============================================
125
+ // Shadow System
126
+ // ============================================
127
+ $umbra-shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, 0.05) !default;
128
+ $umbra-shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06) !default;
129
+ $umbra-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06) !default;
130
+ $umbra-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05) !default;
131
+ $umbra-shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04) !default;
132
+ $umbra-shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, 0.25) !default;
133
+ $umbra-shadow-glow: 0 0 40px rgba(91, 71, 251, 0.15) !default;
134
+
135
+ // ============================================
136
+ // Transition Timing
137
+ // ============================================
138
+ $umbra-transition-fast: all 0.15s cubic-bezier(.2,.3,0,1) !default;
139
+ $umbra-transition-base: all 0.3s cubic-bezier(.2,.3,0,1) !default;
140
+ $umbra-transition-slow: all 0.5s cubic-bezier(.2,.3,0,1) !default;
141
+ $umbra-transition-bounce: all 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55) !default;
142
+
143
+ // ============================================
144
+ // Responsive Breakpoints
145
+ // ============================================
146
+ // Bootstrap-compatible breakpoint values
147
+ $umbra-breakpoint-sm: 576px !default;
148
+ $umbra-breakpoint-md: 768px !default;
149
+ $umbra-breakpoint-lg: 992px !default;
150
+ $umbra-breakpoint-xl: 1200px !default;
151
+ $umbra-breakpoint-xxl: 1400px !default;
152
+
153
+ // ============================================
154
+ // Component Sizing
155
+ // ============================================
156
+ // Avatar sizes map
157
+ $avatar-sizes: (
158
+ null: 3rem, // default
159
+ 2xs: 0.5rem,
160
+ xs: 1.5rem,
161
+ sm: 2rem,
162
+ md: 2.5rem,
163
+ lg: 3.5rem,
164
+ xl: 5rem,
165
+ 2xl: 7.5rem,
166
+ 3xl: 10rem,
167
+ 4xl: 12.5rem,
168
+ 5xl: 15rem
169
+ ) !default;
170
+
171
+ // Forward Bootstrap with our configuration
172
+ @forward '../bootstrap/scss/bootstrap.scss' with (
173
+ $primary: $primary,
174
+ $secondary: $secondary,
175
+ $success: $success,
176
+ $info: $info,
177
+ $warning: $warning,
178
+ $danger: $danger,
179
+ $light: $light,
180
+ $dark: $dark,
181
+ $font-family-sans-serif: $font-family-sans-serif,
182
+ $headings-font-weight: $headings-font-weight,
183
+ $border-radius: $border-radius,
184
+ $border-radius-sm: $border-radius-sm,
185
+ $border-radius-lg: $border-radius-lg,
186
+ $enable-negative-margins: true
187
+ );
@@ -0,0 +1,36 @@
1
+ // Import the theme entry point
2
+ // __main_assets__ is a webpack alias that resolves to UJM's dist/assets
3
+ import bootstrap from '__main_assets__/themes/bootstrap/js/index.umd.js';
4
+ import { ready as domReady } from 'web-manager/modules/dom.js';
5
+
6
+ // Make Bootstrap available globally
7
+ window.bootstrap = bootstrap;
8
+
9
+ // Log that we've MADE IT
10
+ /* @dev-only:start */
11
+ {
12
+ console.log('Umbra theme loaded successfully (assets/themes/umbra/_theme.js)');
13
+ }
14
+ /* @dev-only:end */
15
+
16
+ // Import navbar scroll functionality
17
+ import setupNavbarScroll from './js/navbar-scroll.js';
18
+ // Import infinite scroll functionality (used by logo scroll, testimonials, etc.)
19
+ import { setupInfiniteScroll } from './js/infinite-scroll.js';
20
+ // Import tooltip initialization
21
+ import initializeTooltips from './js/initialize-tooltips.js';
22
+ // Import hero demo form initialization
23
+ import initHeroDemoForm from './js/hero-demo-form.js';
24
+
25
+ // Initialize theme components when DOM is ready
26
+ domReady().then(() => {
27
+ // Umbra Theme Initializations
28
+ setupNavbarScroll();
29
+ setupInfiniteScroll();
30
+
31
+ // Generic Bootstrap initializations
32
+ initializeTooltips();
33
+
34
+ // Initialize hero demo form if present
35
+ initHeroDemoForm();
36
+ });
@@ -0,0 +1,34 @@
1
+ // Forward theme configuration (allows consuming project to override)
2
+ @forward 'config';
3
+ @use 'config' as *;
4
+
5
+ // Import root overrides (CSS custom properties)
6
+ @import 'css/base/root';
7
+
8
+ // Import base styles
9
+ @import 'css/base/animations';
10
+ @import 'css/base/backgrounds';
11
+ @import 'css/base/borders';
12
+ @import 'css/base/typography';
13
+ @import 'css/base/utilities';
14
+
15
+ // Import layout styles
16
+ @import 'css/layout/backend';
17
+ @import 'css/layout/blog';
18
+ @import 'css/layout/general';
19
+ @import 'css/layout/navigation';
20
+ @import 'css/layout/team';
21
+
22
+ // Import component styles
23
+ @import 'css/components/accordion';
24
+ @import 'css/components/badges';
25
+ @import 'css/components/buttons';
26
+ @import 'css/components/cards';
27
+ @import 'css/components/carousel';
28
+ @import 'css/components/forms';
29
+ @import 'css/components/infinite-scroll';
30
+ @import 'css/components/text';
31
+
32
+ // Import universal Bootstrap overrides (shared across all UJ themes)
33
+ // Must come AFTER Bootstrap is loaded via config to use @extend
34
+ @import '../bootstrap/overrides';
@@ -0,0 +1,27 @@
1
+ // Umbra Animation Utilities
2
+ // Keyframes and animation classes for dynamic effects
3
+
4
+ // ============================================
5
+ // Keyframe Animations
6
+ // ============================================
7
+
8
+ @keyframes gradient-shimmer {
9
+ 0% {
10
+ background-position: 0% 50%;
11
+ }
12
+ 50% {
13
+ background-position: 100% 50%;
14
+ }
15
+ 100% {
16
+ background-position: 0% 50%;
17
+ }
18
+ }
19
+
20
+ // ============================================
21
+ // Animation Classes
22
+ // ============================================
23
+
24
+ // Gradient animation modifier - works with all rainbow gradient classes
25
+ .gradient-animated {
26
+ animation: gradient-shimmer 5s ease-out infinite alternate !important;
27
+ }
@@ -0,0 +1,191 @@
1
+ // Umbra Background Utilities
2
+ // Background gradients, patterns, and visual effects
3
+
4
+ // ============================================
5
+ // Gradient Backgrounds
6
+ // ============================================
7
+ .bg-gradient-primary {
8
+ background-image: $umbra-gradient-primary !important;
9
+ background-size: 300% 300% !important;
10
+ }
11
+
12
+ .bg-gradient-dark {
13
+ background-image: $umbra-gradient-dark !important;
14
+ background-size: 300% 300% !important;
15
+ }
16
+
17
+ .bg-gradient-light {
18
+ background-image: $umbra-gradient-light !important;
19
+ background-size: 300% 300% !important;
20
+ }
21
+
22
+ .bg-gradient-sunset {
23
+ background-image: $umbra-gradient-sunset !important;
24
+ background-size: 300% 300% !important;
25
+ }
26
+
27
+ .bg-gradient-aurora {
28
+ background-image: $umbra-gradient-aurora !important;
29
+ background-size: 300% 300% !important;
30
+ }
31
+
32
+ .bg-gradient-rainbow {
33
+ background-image: $umbra-gradient-rainbow !important;
34
+ background-size: 300% 300% !important;
35
+ }
36
+
37
+ // Grain texture modifier - add this class alongside bg-gradient-* to add grain effect
38
+ .gradient-grain {
39
+ position: relative;
40
+
41
+ &::before {
42
+ content: '';
43
+ position: absolute;
44
+ top: 0;
45
+ left: 0;
46
+ width: 100%;
47
+ height: 100%;
48
+ background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 400 400' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='2.5' numOctaves='5' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E");
49
+ opacity: 0.6;
50
+ mix-blend-mode: overlay;
51
+ pointer-events: none;
52
+ z-index: 1;
53
+ }
54
+
55
+ // Ensure content stays above the grain overlay
56
+ > * {
57
+ position: relative;
58
+ z-index: 2;
59
+ }
60
+ }
61
+
62
+ // @keyframes gradient-shift {
63
+ // 0%, 100% {
64
+ // background-position: 0% 50%, 0% 0%;
65
+ // }
66
+ // 25% {
67
+ // background-position: 100% 50%, 100% 100%;
68
+ // }
69
+ // 50% {
70
+ // background-position: 100% 0%, 50% 50%;
71
+ // }
72
+ // 75% {
73
+ // background-position: 0% 100%, 100% 0%;
74
+ // }
75
+ // }
76
+
77
+ // .bg-gradient-rainbow {
78
+ // position: relative;
79
+ // background:
80
+ // linear-gradient(
81
+ // to bottom right,
82
+ // rgba(0, 255, 209, 0.5),
83
+ // rgba(170, 70, 252, 0.69)
84
+ // ),
85
+ // radial-gradient(circle at 50% 50%, rgba(255, 255, 255, 0.5), rgba(0, 0, 0, 0.5)) !important;
86
+ // background-size: 200% 200%, 200% 200% !important;
87
+ // animation: gradient-shift 15s ease infinite;
88
+
89
+ // &::before {
90
+ // content: '';
91
+ // position: absolute;
92
+ // top: 0;
93
+ // left: 0;
94
+ // width: 100%;
95
+ // height: 100%;
96
+ // background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 400 400' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='2.5' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E");
97
+ // opacity: 1;
98
+ // mix-blend-mode: overlay;
99
+ // pointer-events: none;
100
+ // z-index: 1;
101
+ // filter: contrast(110%) brightness(105%);
102
+ // }
103
+
104
+ // // Ensure content stays above the grain overlay
105
+ // > * {
106
+ // position: relative;
107
+ // z-index: 2;
108
+ // }
109
+ // }
110
+
111
+
112
+
113
+ // ============================================
114
+ // Glass Morphism Mixin
115
+ // ============================================
116
+ @mixin glassy-effect {
117
+ background: transparent !important;
118
+ backdrop-filter: blur(20px) saturate(180%);
119
+ -webkit-backdrop-filter: blur(20px) saturate(180%);
120
+ border: 1px solid rgba(255, 255, 255, 0.15) !important;
121
+ position: relative;
122
+
123
+ // Glass effect overlay with body color using custom property
124
+ &::before {
125
+ content: "";
126
+ position: absolute;
127
+ inset: 0;
128
+ background: var(--bs-body-bg);
129
+ opacity: var(--navbar-before-opacity, 0.25);
130
+ border-radius: inherit;
131
+ z-index: -1;
132
+ pointer-events: none;
133
+ transition: opacity 0.3s ease;
134
+ }
135
+
136
+ // Dark mode adjustments
137
+ [data-bs-theme="dark"] & {
138
+ border: 1px solid rgba(255, 255, 255, 0.1) !important;
139
+ }
140
+ }
141
+
142
+ // ============================================
143
+ // Glass Morphism Classes
144
+ // ============================================
145
+ .bg-glassy {
146
+ @include glassy-effect;
147
+ }
148
+
149
+ // ============================================
150
+ // Pattern Overlays
151
+ // ============================================
152
+ .bg-pattern {
153
+ background-image: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%235B47FB' fill-opacity='0.05'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
154
+ }
155
+
156
+ // ============================================
157
+ // Blur Effects
158
+ // ============================================
159
+ .blur-sm {
160
+ filter: blur(4px);
161
+ }
162
+
163
+ .blur-md {
164
+ filter: blur(8px);
165
+ }
166
+
167
+ .blur-lg {
168
+ filter: blur(16px);
169
+ }
170
+
171
+ // ============================================
172
+ // Filter Effects
173
+ // ============================================
174
+ .grayscale {
175
+ filter: grayscale(100%);
176
+
177
+ &:hover {
178
+ filter: grayscale(0);
179
+ }
180
+ }
181
+
182
+ // ============================================
183
+ // Adaptive Inverse Background
184
+ // ============================================
185
+ .bg-adaptive-inverse {
186
+ @extend .bg-dark;
187
+ }
188
+
189
+ [data-bs-theme="dark"] .bg-adaptive-inverse {
190
+ @extend .bg-light;
191
+ }
@@ -0,0 +1,65 @@
1
+ // Umbra Border Utilities
2
+ // Border styles, gradients, and decorative dividers
3
+
4
+ // ============================================
5
+ // Border Radius
6
+ // ============================================
7
+ .rounded-sm { border-radius: $umbra-radius-sm !important; }
8
+ .rounded-md { border-radius: $umbra-radius-md !important; }
9
+ .rounded-lg { border-radius: $umbra-radius-lg !important; }
10
+ .rounded-xl { border-radius: $umbra-radius-xl !important; }
11
+ .rounded-2xl { border-radius: $umbra-radius-2xl !important; }
12
+ .rounded-full { border-radius: $umbra-radius-full !important; }
13
+
14
+ // ============================================
15
+ // Gradient Borders
16
+ // ============================================
17
+ .border-gradient-rainbow {
18
+ --bs-border-width: 3px;
19
+ position: relative;
20
+ border: none !important;
21
+
22
+ &::before {
23
+ content: "";
24
+ position: absolute;
25
+ inset: calc(var(--bs-border-width) * -1);
26
+ border-radius: inherit;
27
+ background: $umbra-gradient-rainbow;
28
+ background-size: 300% 300%;
29
+ z-index: -1;
30
+ }
31
+
32
+ &::after {
33
+ content: "";
34
+ position: absolute;
35
+ inset: 0;
36
+ border-radius: inherit;
37
+ background: inherit;
38
+ z-index: -1;
39
+ }
40
+
41
+ // Override Bootstrap border width classes to work with gradient border
42
+ &.border-0 { --bs-border-width: 0; }
43
+ &.border-1 { --bs-border-width: 1px; }
44
+ &.border-2 { --bs-border-width: 2px; }
45
+ &.border-3 { --bs-border-width: 3px; }
46
+ &.border-4 { --bs-border-width: 4px; }
47
+ &.border-5 { --bs-border-width: 5px; }
48
+ }
49
+
50
+ // ============================================
51
+ // Divider Styles
52
+ // ============================================
53
+ .divider {
54
+ height: 1px;
55
+ background: $umbra-gray-lighter;
56
+ margin: $umbra-spacing-2xl 0;
57
+
58
+ &.divider-gradient {
59
+ background: $umbra-gradient-primary;
60
+ }
61
+
62
+ &.divider-fade {
63
+ background: linear-gradient(to right, transparent, $umbra-gray-lighter 20%, $umbra-gray-lighter 80%, transparent);
64
+ }
65
+ }