@squeditor/squeditor-framework 1.0.0

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 (77) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +106 -0
  3. package/package.json +36 -0
  4. package/php/functions.php +92 -0
  5. package/project-template/package.json +29 -0
  6. package/project-template/postcss.config.js +6 -0
  7. package/project-template/squeditor.config.js +81 -0
  8. package/project-template/src/404.php +21 -0
  9. package/project-template/src/assets/css/squeditor-icons.css +4719 -0
  10. package/project-template/src/assets/css/tailwind.css +3 -0
  11. package/project-template/src/assets/css/uikit-components.css +14586 -0
  12. package/project-template/src/assets/js/gsap-advanced.js +26 -0
  13. package/project-template/src/assets/js/gsap-init.js +672 -0
  14. package/project-template/src/assets/js/gsap-modules/cursor-preview.js +132 -0
  15. package/project-template/src/assets/js/gsap-modules/cursor.js +456 -0
  16. package/project-template/src/assets/js/gsap-modules/loop-panels.js +78 -0
  17. package/project-template/src/assets/js/gsap-modules/marquee.js +106 -0
  18. package/project-template/src/assets/js/gsap-modules/pinned-panels.js +105 -0
  19. package/project-template/src/assets/js/gsap-modules/scroll-to.js +54 -0
  20. package/project-template/src/assets/js/gsap-modules/swipe-slider.js +121 -0
  21. package/project-template/src/assets/js/gsap-modules/text-mask.js +93 -0
  22. package/project-template/src/assets/js/gsap-modules/tilt.js +70 -0
  23. package/project-template/src/assets/js/main.js +302 -0
  24. package/project-template/src/assets/js/uikit-components.js +18171 -0
  25. package/project-template/src/assets/scss/_base.scss +140 -0
  26. package/project-template/src/assets/scss/_components.scss +165 -0
  27. package/project-template/src/assets/scss/_config.scss +13 -0
  28. package/project-template/src/assets/scss/_functions.scss +81 -0
  29. package/project-template/src/assets/scss/_tokens.scss +229 -0
  30. package/project-template/src/assets/scss/_transitions.scss +36 -0
  31. package/project-template/src/assets/scss/_uikit-overrides.scss +187 -0
  32. package/project-template/src/assets/scss/_uikit_dynamic.scss +43 -0
  33. package/project-template/src/assets/scss/_utilities.scss +31 -0
  34. package/project-template/src/assets/scss/custom.scss +10 -0
  35. package/project-template/src/assets/scss/main.scss +11 -0
  36. package/project-template/src/assets/static/fonts/squeditor-icons/squeditor-icons.eot +0 -0
  37. package/project-template/src/assets/static/fonts/squeditor-icons/squeditor-icons.svg +1183 -0
  38. package/project-template/src/assets/static/fonts/squeditor-icons/squeditor-icons.ttf +0 -0
  39. package/project-template/src/assets/static/fonts/squeditor-icons/squeditor-icons.woff +0 -0
  40. package/project-template/src/config/site-config.php +34 -0
  41. package/project-template/src/data/blog.php +21 -0
  42. package/project-template/src/data/portfolio.php +23 -0
  43. package/project-template/src/data/team.php +23 -0
  44. package/project-template/src/index.php +57 -0
  45. package/project-template/src/init.php +19 -0
  46. package/project-template/src/page-templates/base.php +39 -0
  47. package/project-template/src/page-templates/body-scripts.php +26 -0
  48. package/project-template/src/page-templates/head.php +47 -0
  49. package/project-template/src/page-templates/transition.php +45 -0
  50. package/project-template/src/sections/cards/cards-grid.php +34 -0
  51. package/project-template/src/sections/cards/cards-horizontal.php +28 -0
  52. package/project-template/src/sections/cta/cta-banner.php +34 -0
  53. package/project-template/src/sections/cta/cta-newsletter.php +19 -0
  54. package/project-template/src/sections/footer/layout-01.php +35 -0
  55. package/project-template/src/sections/header/layout-01.php +36 -0
  56. package/project-template/src/sections/hero/hero-centered.php +44 -0
  57. package/project-template/src/sections/hero/hero-split.php +132 -0
  58. package/project-template/src/sections/hero/hero-video.php +22 -0
  59. package/project-template/src/sections/sidebar/sidebar-right.php +11 -0
  60. package/project-template/src/template-parts/breadcrumbs.php +17 -0
  61. package/project-template/src/template-parts/footer.php +74 -0
  62. package/project-template/src/template-parts/header.php +120 -0
  63. package/project-template/src/template-parts/mega-menu.php +7 -0
  64. package/project-template/src/template-parts/nav.php +16 -0
  65. package/project-template/src/template-parts/page-title-bar.php +14 -0
  66. package/project-template/tailwind.config.js +26 -0
  67. package/project-template/vite.config.js +67 -0
  68. package/scripts/build-components.js +109 -0
  69. package/scripts/copy-static.js +150 -0
  70. package/scripts/dev-router.php +23 -0
  71. package/scripts/dev.js +55 -0
  72. package/scripts/get-port.js +27 -0
  73. package/scripts/package-customer.js +278 -0
  74. package/scripts/package-dist.js +54 -0
  75. package/scripts/scaffold.js +72 -0
  76. package/scripts/snapshot.js +74 -0
  77. package/uikit-manifest.json +248 -0
@@ -0,0 +1,140 @@
1
+ // _base.scss
2
+
3
+ *,
4
+ ::before,
5
+ ::after {
6
+ border-color: var(--sq-color-border);
7
+ }
8
+
9
+ body {
10
+ font-family: var(--sq-font-sans);
11
+ color: var(--sq-color-body-text);
12
+ background-color: var(--sq-color-body-bg);
13
+ -webkit-font-smoothing: antialiased;
14
+ }
15
+
16
+ h1,
17
+ h2,
18
+ h3,
19
+ h4,
20
+ h5,
21
+ h6,
22
+ .sq-nav-link,
23
+ .btn {
24
+ font-family: var(--sq-font-heading);
25
+ color: var(--sq-color-heading-text);
26
+ font-weight: 600;
27
+ line-height: 1.2;
28
+ }
29
+
30
+ h1,
31
+ h2,
32
+ h3,
33
+ h4,
34
+ h5,
35
+ h6 {
36
+ margin-bottom: 0.75em;
37
+ }
38
+
39
+ h1 {
40
+ @apply text-4xl lg:text-5xl;
41
+ }
42
+
43
+ h2 {
44
+ @apply text-3xl lg:text-4xl;
45
+ }
46
+
47
+ h3 {
48
+ @apply text-2xl lg:text-3xl;
49
+ }
50
+
51
+ h4 {
52
+ @apply text-xl lg:text-2xl;
53
+ }
54
+
55
+ h5 {
56
+ @apply text-lg lg:text-xl;
57
+ }
58
+
59
+ h6 {
60
+ @apply text-base lg:text-lg;
61
+ }
62
+
63
+ .text-muted {
64
+ color: var(--sq-color-muted-text);
65
+ }
66
+
67
+ .bg-muted {
68
+ background-color: var(--sq-color-muted-bg);
69
+ }
70
+
71
+ // Headline Highlight Effect
72
+ .sq-highlight {
73
+ @apply bg-gradient-to-r from-fuchsia-600 to-blue-400 bg-clip-text text-transparent;
74
+ display: inline-block;
75
+ position: relative;
76
+ }
77
+
78
+ // Badge styling
79
+ .sq-badge {
80
+ @apply inline-flex items-center px-3 py-1 rounded-full text-sm font-medium tracking-tight mb-6 border;
81
+ color: var(--sq-color-secondary);
82
+ }
83
+
84
+ // Only apply paragraph and list styles if the author didn't supply their own layout classes
85
+ p:not([class]) {
86
+ margin-bottom: 1rem;
87
+ line-height: 1.6;
88
+ }
89
+
90
+ ul:not([class]),
91
+ ol:not([class]) {
92
+ margin-bottom: 1rem;
93
+ padding-left: 1.5rem;
94
+ }
95
+
96
+ ul:not([class]) {
97
+ list-style-type: disc;
98
+ }
99
+
100
+ ol:not([class]) {
101
+ list-style-type: decimal;
102
+ }
103
+
104
+ pre,
105
+ code {
106
+ @apply bg-fuchsia-600/5 text-fuchsia-700;
107
+ font-family: var(--sq-font-mono);
108
+ padding: 0.1rem 0.25rem;
109
+ border-radius: var(--sq-radius-sm);
110
+ font-size: 0.875rem;
111
+ font-style: italic;
112
+ }
113
+
114
+ pre {
115
+ @apply bg-zinc-600/5 text-zinc-600;
116
+ padding: 1rem;
117
+ border-radius: var(--sq-radius-md);
118
+ overflow-x: auto;
119
+ }
120
+
121
+ .sq-theme-dark {
122
+ code {
123
+ @apply bg-zinc-100/5 text-fuchsia-400;
124
+ }
125
+
126
+ pre {
127
+ @apply bg-zinc-100/5 text-zinc-100;
128
+ }
129
+ }
130
+
131
+ // Ensure default UIKit links without classes use the secondary color
132
+ a:not([class]) {
133
+ color: var(--sq-color-secondary);
134
+ text-decoration: none;
135
+ transition: color 0.2s ease, text-decoration-color 0.2s ease;
136
+
137
+ &:hover {
138
+ text-decoration: underline;
139
+ }
140
+ }
@@ -0,0 +1,165 @@
1
+ // _components.scss
2
+
3
+ // 1. Buttons
4
+ .btn {
5
+ appearance: none;
6
+ background: var(--sq-btn-bg);
7
+ color: var(--sq-btn-text);
8
+ border-radius: var(--sq-btn-radius);
9
+ height: var(--sq-btn-height);
10
+ font-size: var(--sq-btn-font-size);
11
+ font-weight: var(--sq-btn-font-weight);
12
+
13
+ @apply inline-flex items-center justify-center gap-2 py-0 px-4 transition-colors transition-all duration-200 cursor-pointer border-none outline-none no-underline;
14
+ }
15
+
16
+ .btn-sm {
17
+ @apply text-sm px-3;
18
+ height: 2rem;
19
+ }
20
+
21
+ .btn-lg {
22
+ @apply text-lg px-6;
23
+ height: 3rem;
24
+ }
25
+
26
+ .btn-default {
27
+ --sq-btn-bg: var(--sq-btn-default-bg);
28
+ --sq-btn-text: var(--sq-btn-default-text);
29
+ @apply hover:bg-opacity-90;
30
+ }
31
+
32
+ .btn-primary {
33
+ --sq-btn-bg: var(--sq-btn-primary-bg);
34
+ --sq-btn-text: var(--sq-btn-primary-text);
35
+ @apply hover:bg-opacity-90;
36
+ }
37
+
38
+ .btn-secondary {
39
+ --sq-btn-bg: var(--sq-btn-secondary-bg);
40
+ --sq-btn-text: var(--sq-btn-secondary-text);
41
+ @apply hover:bg-opacity-90;
42
+ }
43
+
44
+ .btn-ghost {
45
+ --sq-btn-bg: transparent;
46
+ --sq-btn-text: var(--sq-color-body-text);
47
+
48
+ &:hover {
49
+ background: var(--sq-btn-ghost-hover-bg);
50
+ }
51
+ }
52
+
53
+ .btn-accent {
54
+ --sq-btn-bg: var(--sq-btn-accent-bg);
55
+ --sq-btn-text: var(--sq-btn-accent-text);
56
+ @apply hover:bg-opacity-90;
57
+ }
58
+
59
+ // 2. Form Elements
60
+ .form-input,
61
+ .form-select,
62
+ .form-textarea {
63
+ background: var(--sq-form-bg);
64
+ border: 1px solid var(--sq-form-border);
65
+ color: var(--sq-form-text);
66
+ border-radius: var(--sq-form-radius);
67
+ min-height: var(--sq-form-min-height);
68
+ padding: var(--sq-form-padding);
69
+ padding-top: 0;
70
+ padding-bottom: 0;
71
+
72
+ @apply w-full text-base shadow-sm transition-all outline-none;
73
+
74
+ &:focus {
75
+ border-color: var(--sq-form-focus-border);
76
+ box-shadow: 0 0 0 4px var(--sq-form-focus-ring);
77
+ }
78
+
79
+ &:disabled {
80
+ @apply bg-zinc-50;
81
+ }
82
+ }
83
+
84
+ .form-textarea {
85
+ min-height: 5rem;
86
+ padding-top: var(--sq-form-padding);
87
+ padding-bottom: var(--sq-form-padding);
88
+ }
89
+
90
+ .form-checkbox,
91
+ .form-radio {
92
+ @apply w-4 h-4 border border-solid border-zinc-200 outline-none;
93
+ }
94
+
95
+ .form-label {
96
+ @apply block text-sm font-medium mb-1 opacity-60;
97
+ }
98
+
99
+ // 3. Squeditor Cards & Headers
100
+ .sq-card {
101
+ background: var(--sq-card-bg);
102
+ border: 1px solid var(--sq-card-border);
103
+ border-radius: var(--sq-radius-lg);
104
+ padding: var(--sq-space-lg);
105
+ transition: all 0.3s ease;
106
+
107
+ &:hover {
108
+ box-shadow: var(--sq-card-shadow-hover);
109
+ transform: translateY(-4px);
110
+ }
111
+ }
112
+
113
+ .sq--header {
114
+ z-index: var(--sq-z-sticky);
115
+
116
+ &--sticky {
117
+ box-shadow: var(--sq-shadow-sm);
118
+ backdrop-filter: blur(10px);
119
+ }
120
+ }
121
+
122
+ .sq-theme-dark {
123
+ .sq-header--sticky {
124
+ background: rgb(0 0 0 / 75%);
125
+ }
126
+ }
127
+
128
+ // ---------------------------------------------------------
129
+ // Page Transitions
130
+ // ---------------------------------------------------------
131
+
132
+ .sq-page-transition {
133
+ position: fixed;
134
+ top: 0;
135
+ left: 0;
136
+ width: 100%;
137
+ height: 100vh;
138
+ z-index: 9999;
139
+ pointer-events: none;
140
+ overflow: hidden;
141
+
142
+ &.is-active {
143
+ pointer-events: all;
144
+ }
145
+
146
+ svg,
147
+ .sq-transition-slide,
148
+ .sq-transition-blinds {
149
+ position: absolute;
150
+ top: 0;
151
+ left: 0;
152
+ width: 100%;
153
+ height: 100%;
154
+ }
155
+
156
+ svg {
157
+ display: block;
158
+ width: 100vw;
159
+ height: 100vh;
160
+ }
161
+
162
+ .sq-transition-blinds {
163
+ display: flex;
164
+ }
165
+ }
@@ -0,0 +1,13 @@
1
+ // _config.scss
2
+ // Framework Configuration Variables
3
+ // ==========================================
4
+
5
+ // Global Auto-Contrast Minimum Threshold
6
+ // Adjust this to change when button text flips from dark to light.
7
+ // 4.5 = Strict WCAG AA contrast
8
+ // 2.5 = Loose UI preference (default)
9
+ $sq-min-contrast-ratio: 2.5;
10
+
11
+ // Global Text Colors for Auto-Contrast
12
+ $sq-contrast-dark-text: #19191b;
13
+ $sq-contrast-light-text: #ffffff;
@@ -0,0 +1,81 @@
1
+ // _functions.scss
2
+ @use "sass:math";
3
+ @use "sass:meta";
4
+ @use "sass:color";
5
+
6
+ // Calculate relative luminance based on WCAG formulas
7
+ @function luminance($color) {
8
+ @if meta.type-of($color) !='color' {
9
+ @return 0; // Fallback
10
+ }
11
+
12
+ $r: math.div(color.channel($color, "red", $space: rgb), 255);
13
+ $g: math.div(color.channel($color, "green", $space: rgb), 255);
14
+ $b: math.div(color.channel($color, "blue", $space: rgb), 255);
15
+
16
+ @if $r <=0.03928 {
17
+ $r: math.div($r, 12.92);
18
+ }
19
+
20
+ @else {
21
+ $r: math.pow(math.div($r + 0.055, 1.055), 2.4);
22
+ }
23
+
24
+ @if $g <=0.03928 {
25
+ $g: math.div($g, 12.92);
26
+ }
27
+
28
+ @else {
29
+ $g: math.pow(math.div($g + 0.055, 1.055), 2.4);
30
+ }
31
+
32
+ @if $b <=0.03928 {
33
+ $b: math.div($b, 12.92);
34
+ }
35
+
36
+ @else {
37
+ $b: math.pow(math.div($b + 0.055, 1.055), 2.4);
38
+ }
39
+
40
+ @return (0.2126 * $r)+(0.7152 * $g)+(0.0722 * $b);
41
+ }
42
+
43
+ // Calculate true contrast ratio between two colors
44
+ @function contrast-ratio($color1, $color2) {
45
+ $luminance1: luminance($color1);
46
+ $luminance2: luminance($color2);
47
+
48
+ $l1: math.max($luminance1, $luminance2);
49
+ $l2: math.min($luminance1, $luminance2);
50
+
51
+ @return math.div($l1 + 0.05, $l2 + 0.05);
52
+ }
53
+
54
+ // Automatically choose light or dark text based on a minimum contrast threshold
55
+ @function sq-color-contrast($background, $light: $sq-contrast-light-text, $dark: $sq-contrast-dark-text, $min-contrast: $sq-min-contrast-ratio) {
56
+ @if meta.type-of($background) !='color' {
57
+ @return $dark; // Safe fallback if a CSS variable is passed directly
58
+ }
59
+
60
+ $light-ratio: contrast-ratio($background, $light);
61
+ $dark-ratio: contrast-ratio($background, $dark);
62
+
63
+ // If light text meets the minimum threshold, ALWAYS prefer it (forces white text on teal/blue).
64
+ @if $light-ratio >=$min-contrast {
65
+ @return $light;
66
+ }
67
+
68
+ // If light text fails but dark text meets the minimum threshold, use dark.
69
+ @if $dark-ratio >=$min-contrast {
70
+ @return $dark;
71
+ }
72
+
73
+ // If NEITHER meets the minimum, fallback to whichever one is strictly higher.
74
+ @if $light-ratio >$dark-ratio {
75
+ @return $light;
76
+ }
77
+
78
+ @else {
79
+ @return $dark;
80
+ }
81
+ }
@@ -0,0 +1,229 @@
1
+ // _tokens.scss — Design tokens as CSS custom properties
2
+
3
+ // 1. Define SASS Variables for calculations
4
+ $color-primary: #1c2020 !default;
5
+ $color-primary-dark: #ffffff !default;
6
+ $color-secondary: #038677 !default;
7
+ $color-secondary-dark: #d5f37b !default;
8
+ $color-accent: #F0FF44 !default;
9
+ $color-accent-dark: #F0FF44 !default;
10
+ $color-white: #FFFFFF !default;
11
+ $color-muted-text: #777f7f !default;
12
+ $color-muted-bg: #f8f8f8 !default;
13
+ $color-light: #f8f8f8 !default;
14
+ $color-body-bg: #FFFFFF !default;
15
+ $color-body-text: #19191b !default;
16
+ $color-heading-text: #19191b !default;
17
+ $color-border: rgba(138, 138, 138, 0.196) !default;
18
+
19
+ :root {
20
+ // Brand colors
21
+ --sq-color-primary: #{$color-primary};
22
+ --sq-color-primary-contrast: #{sq-color-contrast($color-primary, $sq-contrast-light-text, $sq-contrast-dark-text, $sq-min-contrast-ratio)};
23
+ --sq-color-secondary: #{$color-secondary};
24
+ --sq-color-secondary-contrast: #{sq-color-contrast($color-secondary, $sq-contrast-light-text, $sq-contrast-dark-text, $sq-min-contrast-ratio)};
25
+ --sq-color-accent: #{$color-accent};
26
+ --sq-color-accent-contrast: #{sq-color-contrast($color-accent, $sq-contrast-light-text, $sq-contrast-dark-text, $sq-min-contrast-ratio)};
27
+ --sq-color-white: #{$color-white};
28
+ --sq-color-muted-text: #{$color-muted-text};
29
+ --sq-color-muted-bg: #{$color-muted-bg};
30
+ --sq-color-light: #{$color-light};
31
+ --sq-color-body-bg: #{$color-body-bg};
32
+ --sq-color-body-text: #{$color-body-text};
33
+ --sq-color-heading-text: #{$color-heading-text};
34
+ --sq-color-border: #{$color-border};
35
+
36
+ // Typography
37
+ --sq-font-sans: "TASA Orbiter", "IBM Plex Sans Arabic", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
38
+ --sq-font-heading: "TASA Orbiter", "IBM Plex Sans Arabic", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
39
+ --sq-font-serif: 'Georgia', 'Times New Roman', serif;
40
+ --sq-font-mono: 'JetBrains Mono', 'Fira Code', monospace;
41
+
42
+ // Spacing scale
43
+ --sq-space-xs: 0.25rem;
44
+ --sq-space-sm: 0.5rem;
45
+ --sq-space-md: 1rem;
46
+ --sq-space-lg: 2rem;
47
+ --sq-space-xl: 4rem;
48
+ --sq-space-2xl: 8rem;
49
+
50
+ // Border radius
51
+ --sq-radius-xs: 0.15rem;
52
+ --sq-radius-sm: 0.25rem;
53
+ --sq-radius-md: 0.5rem;
54
+ --sq-radius-lg: 0.75rem;
55
+ --sq-radius-xl: 1rem;
56
+ --sq-radius-2xl: 1.5rem;
57
+ --sq-radius-3xl: 2rem;
58
+ --sq-radius-full: 9999px;
59
+
60
+ // Shadows
61
+ --sq-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.08);
62
+ --sq-shadow-md: 0 4px 16px rgba(0, 0, 0, 0.1);
63
+ --sq-shadow-lg: 0 10px 40px rgba(0, 0, 0, 0.15);
64
+
65
+ // Z-index scale
66
+ --sq-z-sticky: 980;
67
+ --sq-z-offcanvas: 1000;
68
+ --sq-z-modal: 1100;
69
+ --sq-z-tooltip: 1200;
70
+
71
+ // Page Transitions
72
+ --sq-page-transition-from: var(--sq-color-secondary);
73
+ --sq-page-transition-via: var(--sq-color-accent);
74
+ --sq-page-transition-to: var(--sq-color-accent);
75
+
76
+ // --- Component Tokens ---
77
+
78
+ // Buttons
79
+ --sq-btn-height: 2.25rem; // h-9
80
+ --sq-btn-bg: transparent;
81
+ --sq-btn-text: var(--sq-color-body-text);
82
+ --sq-btn-radius: var(--sq-radius-lg);
83
+ --sq-btn-font-size: 1rem; // text-base
84
+ --sq-btn-font-weight: 500;
85
+
86
+ --sq-btn-default-bg: var(--sq-color-light);
87
+ --sq-btn-default-text: var(--sq-color-muted-text);
88
+ --sq-btn-primary-bg: var(--sq-color-primary);
89
+ --sq-btn-primary-text: var(--sq-color-primary-contrast);
90
+ --sq-btn-secondary-bg: var(--sq-color-secondary);
91
+ --sq-btn-secondary-text: var(--sq-color-secondary-contrast);
92
+ --sq-btn-accent-bg: var(--sq-color-accent);
93
+ --sq-btn-accent-text: var(--sq-color-accent-contrast);
94
+ --sq-btn-ghost-hover-bg: var(--sq-color-light);
95
+
96
+ // Forms
97
+ --sq-form-min-height: 2.5rem; // h-10
98
+ --sq-form-padding: 0.75rem;
99
+ --sq-form-bg: var(--sq-color-white);
100
+ --sq-form-border: #E2E8F0; // zinc-200
101
+ --sq-form-text: var(--sq-color-body-text);
102
+ --sq-form-radius: var(--sq-radius-md);
103
+ --sq-form-focus-ring: rgba(15, 23, 42, 0.1); // primary w/ opacity
104
+ --sq-form-focus-border: var(--sq-color-primary);
105
+
106
+ // Navbar
107
+ --sq-navbar-nav-min-height: 60px;
108
+ --sq-navbar-nav-padding: 0px;
109
+ --sq-navbar-nav-gap: 1.75rem;
110
+ --sq-navbar-nav-color: var(--sq-color-body-text);
111
+ --sq-navbar-nav-hover-color: var(--sq-color-secondary);
112
+
113
+ // Dropdown
114
+ --sq-dropdown-width: 300px;
115
+ --sq-dropdown-padding: 2rem;
116
+ --sq-dropdown-bg: var(--sq-color-white);
117
+ --sq-dropdown-text: var(--sq-color-body-text);
118
+
119
+ // Accordion
120
+ --sq-accordion-title-bg: #8b8b8b15; // zinc-50
121
+ --sq-accordion-title-text: var(--sq-color-primary);
122
+ --sq-accordion-content-text: var(--sq-color-muted-text); // zinc-600
123
+
124
+ // Tabs
125
+ --sq-tab-text: #94A3B8; // zinc-400
126
+ --sq-tab-active-text: var(--sq-color-primary);
127
+ --sq-tab-active-border: var(--sq-color-primary);
128
+
129
+ // Offcanvas
130
+ --sq-offcanvas-width: 300px;
131
+ --sq-offcanvas-padding: 2rem;
132
+ --sq-offcanvas-bg: var(--sq-color-white);
133
+ --sq-offcanvas-text: var(--sq-color-body-text);
134
+ --sq-offcanvas-border: var(--sq-color-border);
135
+ --sq-offcanvas-close-color: var(--sq-color-muted-text);
136
+
137
+ // Cards
138
+ --sq-card-bg: var(--sq-color-white);
139
+ --sq-card-border: var(--sq-color-border);
140
+ --sq-card-shadow: var(--sq-shadow-sm);
141
+ --sq-card-shadow-hover: var(--sq-shadow-md);
142
+
143
+ // Modal
144
+ --sq-modal-padding: 1.75rem;
145
+ --sq-modal-border: var(--sq-color-border);
146
+ --sq-modal-bg: var(--sq-color-white);
147
+ --sq-modal-text: var(--sq-color-body-text);
148
+ --sq-modal-close-color: var(--sq-color-muted-text);
149
+ --sq-modal-radius: var(--sq-radius-lg);
150
+
151
+ // Sticky
152
+ --sq-sticky-bg: var(--sq-color-white);
153
+ --sq-sticky-text: var(--sq-color-body-text);
154
+
155
+ // Drop
156
+ --sq-drop-bg: var(--sq-color-white);
157
+ --sq-drop-text: var(--sq-color-body-text);
158
+ --sq-drop-border: var(--sq-color-border);
159
+ --sq-drop-close-color: var(--sq-color-muted-text);
160
+ }
161
+
162
+ // Global Schema Overrides
163
+ .sq-theme-dark {
164
+ // Brand colors (Dark Mode Specific Overrides)
165
+ --sq-color-primary: #{$color-primary-dark};
166
+ --sq-color-primary-contrast: #{sq-color-contrast($color-primary-dark, $sq-contrast-light-text, $sq-contrast-dark-text, $sq-min-contrast-ratio)};
167
+ --sq-color-secondary: #{$color-secondary-dark};
168
+ --sq-color-secondary-contrast: #{sq-color-contrast($color-secondary-dark, $sq-contrast-light-text, $sq-contrast-dark-text, $sq-min-contrast-ratio)};
169
+ --sq-color-accent: #{$color-accent-dark};
170
+ --sq-color-accent-contrast: #{sq-color-contrast($color-accent-dark, $sq-contrast-light-text, $sq-contrast-dark-text, $sq-min-contrast-ratio)};
171
+
172
+ // Standard structural adjustments
173
+ --sq-color-body-bg: #19191b;
174
+ --sq-color-body-text: #F1F5F9;
175
+ --sq-color-heading-text: #ffffff;
176
+ --sq-color-muted-text: #c7cacd;
177
+ --sq-color-muted-bg: #272729;
178
+
179
+ // Buttons
180
+ --sq-btn-default-bg: var(--sq-color-light);
181
+ --sq-btn-default-text: var(--sq-color-muted-text);
182
+ --sq-btn-primary-bg: var(--sq-color-primary);
183
+ --sq-btn-primary-text: var(--sq-color-primary-contrast);
184
+ --sq-btn-secondary-bg: var(--sq-color-secondary);
185
+ --sq-btn-secondary-text: var(--sq-color-secondary-contrast);
186
+ --sq-btn-accent-bg: var(--sq-color-accent);
187
+ --sq-btn-accent-text: var(--sq-color-accent-contrast);
188
+ --sq-btn-ghost-hover-bg: var(--sq-color-muted-bg); // zinc-100
189
+
190
+ // Forms
191
+ --sq-form-bg: #19191b;
192
+ --sq-form-border: #8d8d8d1c;
193
+ --sq-form-text: #F1F5F9;
194
+ --sq-form-focus-ring: rgba(99, 102, 241, 0.2); // secondary w/ opacity
195
+ --sq-form-focus-border: var(--sq-color-secondary);
196
+
197
+ // Accordion
198
+ --sq-accordion-title-text: #F1F5F9;
199
+ --sq-accordion-content-text: var(--sq-color-muted-text);
200
+
201
+ // Tabs
202
+ --sq-tab-text: var(--sq-color-muted-text);
203
+ --sq-tab-active-text: #FFFFFF;
204
+ --sq-tab-active-border: var(--sq-color-secondary);
205
+
206
+ // Offcanvas
207
+ --sq-offcanvas-bg: #19191b;
208
+ --sq-offcanvas-text: #F1F5F9;
209
+ --sq-offcanvas-close-color: var(--sq-color-muted-text);
210
+
211
+ // Modal
212
+ --sq-modal-bg: #19191b;
213
+ --sq-modal-text: #F1F5F9;
214
+ --sq-modal-close-color: var(--sq-color-muted-text);
215
+
216
+ // Sticky
217
+ --sq-sticky-bg: #19191b;
218
+ --sq-sticky-text: #F1F5F9;
219
+
220
+ // Drop
221
+ --sq-drop-bg: #19191b;
222
+ --sq-drop-text: #F1F5F9;
223
+ --sq-drop-close-color: var(--sq-color-muted-text);
224
+
225
+ // Cards
226
+ --sq-card-bg: #19191b;
227
+ --sq-card-shadow: none;
228
+ --sq-card-shadow-hover: none;
229
+ }
@@ -0,0 +1,36 @@
1
+ // src/assets/scss/_transitions.scss
2
+
3
+ .sq-page-transition {
4
+ position: fixed;
5
+ top: 0;
6
+ left: 0;
7
+ width: 100%;
8
+ height: 100vh;
9
+ z-index: 9999;
10
+ pointer-events: none;
11
+ overflow: hidden;
12
+
13
+ &.is-active {
14
+ pointer-events: all;
15
+ }
16
+
17
+ svg,
18
+ .sq-transition-slide,
19
+ .sq-transition-blinds {
20
+ position: absolute;
21
+ top: 0;
22
+ left: 0;
23
+ width: 100%;
24
+ height: 100%;
25
+ }
26
+
27
+ svg {
28
+ display: block;
29
+ width: 100vw;
30
+ height: 100vh;
31
+ }
32
+
33
+ .sq-transition-blinds {
34
+ display: flex;
35
+ }
36
+ }