juxscript 1.1.141 → 1.1.142
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/dom-structure-map.json +1 -1
- package/lib/components/button.d.ts.map +1 -1
- package/lib/components/button.js +44 -16
- package/lib/components/button.ts +43 -18
- package/lib/styles/foundation.css +416 -0
- package/lib/styles/themes.css +434 -0
- package/package.json +1 -1
package/dom-structure-map.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button.d.ts","sourceRoot":"","sources":["button.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAQxD,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAChG,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAChC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,qBAAa,MAAO,SAAQ,aAAa,CAAC,WAAW,CAAC;IACpD,OAAO,CAAC,cAAc,CAAkC;gBAE5C,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa;IAmB/C,SAAS,CAAC,gBAAgB,IAAI,SAAS,MAAM,EAAE;IAI/C,SAAS,CAAC,iBAAiB,IAAI,SAAS,MAAM,EAAE;IAQhD;;;OAGG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAO1B;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIzB;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAM5B,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIzB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAI3C,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAK/B,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK5B,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,IAAI;IAO/C;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIzB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAgBzB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAQtC;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAW7B,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"button.d.ts","sourceRoot":"","sources":["button.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAQxD,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAChG,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAChC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,qBAAa,MAAO,SAAQ,aAAa,CAAC,WAAW,CAAC;IACpD,OAAO,CAAC,cAAc,CAAkC;gBAE5C,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa;IAmB/C,SAAS,CAAC,gBAAgB,IAAI,SAAS,MAAM,EAAE;IAI/C,SAAS,CAAC,iBAAiB,IAAI,SAAS,MAAM,EAAE;IAQhD;;;OAGG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAO1B;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIzB;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAM5B,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIzB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAI3C,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAK/B,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK5B,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,IAAI;IAO/C;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIzB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAgBzB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAQtC;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAW7B,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,IAAI;CAqFnE;AAED,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,CAElE"}
|
package/lib/components/button.js
CHANGED
|
@@ -120,16 +120,50 @@ export class Button extends BaseComponent {
|
|
|
120
120
|
}
|
|
121
121
|
render(targetId) {
|
|
122
122
|
const container = this._setupContainer(targetId);
|
|
123
|
-
const {
|
|
123
|
+
const { content, icon, iconPosition, variant, size, style, class: className } = this.state;
|
|
124
124
|
const button = document.createElement('button');
|
|
125
|
-
|
|
126
|
-
button.className =
|
|
125
|
+
// ✅ ONLY set base class (no variant/size classes)
|
|
126
|
+
button.className = 'jux-button';
|
|
127
127
|
button.id = this._id;
|
|
128
|
-
|
|
128
|
+
// ✅ Add user classes
|
|
129
129
|
if (className)
|
|
130
130
|
button.className += ` ${className}`;
|
|
131
|
-
|
|
132
|
-
|
|
131
|
+
// ✅ Apply variant via CSS variables (inline style)
|
|
132
|
+
let inlineStyle = style || '';
|
|
133
|
+
// Map variant to CSS variable overrides
|
|
134
|
+
if (variant === 'success') {
|
|
135
|
+
inlineStyle += `--jux-accent-bg: var(--jux-success-bg); --jux-accent-to: var(--jux-success-to);`;
|
|
136
|
+
}
|
|
137
|
+
else if (variant === 'danger') {
|
|
138
|
+
inlineStyle += `--jux-accent-bg: var(--jux-danger-bg); --jux-accent-to: var(--jux-danger-to);`;
|
|
139
|
+
}
|
|
140
|
+
else if (variant === 'warning') {
|
|
141
|
+
inlineStyle += `--jux-accent-bg: var(--jux-warning-bg); --jux-accent-to: var(--jux-warning-to);`;
|
|
142
|
+
}
|
|
143
|
+
else if (variant === 'info') {
|
|
144
|
+
inlineStyle += `--jux-accent-bg: var(--jux-info-bg); --jux-accent-to: var(--jux-info-to);`;
|
|
145
|
+
}
|
|
146
|
+
else if (variant === 'secondary') {
|
|
147
|
+
inlineStyle += `--jux-accent-bg: var(--jux-brand-accent-bg); --jux-accent-to: var(--jux-brand-accent-to);`;
|
|
148
|
+
}
|
|
149
|
+
else if (variant === 'ghost') {
|
|
150
|
+
inlineStyle += `background: transparent; border-color: transparent; color: var(--jux-brand-color);`;
|
|
151
|
+
}
|
|
152
|
+
else if (variant === 'outline') {
|
|
153
|
+
inlineStyle += `background: transparent; color: var(--jux-brand-color); border-color: var(--jux-brand-color);`;
|
|
154
|
+
}
|
|
155
|
+
// 'primary' uses default --jux-brand-bg from foundation.css
|
|
156
|
+
// Map size to CSS variable overrides
|
|
157
|
+
if (size === 'small') {
|
|
158
|
+
inlineStyle += `--jux-pad: calc(0.375rem * var(--jux-size-xs)) calc(0.75rem * var(--jux-size-xs)); font-size: calc(var(--jux-base-font) * var(--jux-size-xs));`;
|
|
159
|
+
}
|
|
160
|
+
else if (size === 'large') {
|
|
161
|
+
inlineStyle += `--jux-pad: calc(0.5rem * var(--jux-size-lg)) calc(1rem * var(--jux-size-lg)); font-size: calc(var(--jux-base-font) * var(--jux-size-lg));`;
|
|
162
|
+
}
|
|
163
|
+
// 'medium' uses default --jux-base-pad from foundation.css
|
|
164
|
+
if (inlineStyle) {
|
|
165
|
+
button.setAttribute('style', inlineStyle);
|
|
166
|
+
}
|
|
133
167
|
if (icon && iconPosition === 'left') {
|
|
134
168
|
const iconEl = document.createElement('span');
|
|
135
169
|
iconEl.className = 'jux-button-icon';
|
|
@@ -141,12 +175,12 @@ export class Button extends BaseComponent {
|
|
|
141
175
|
if (content) {
|
|
142
176
|
textEl.innerHTML = content;
|
|
143
177
|
}
|
|
144
|
-
else if (label) {
|
|
145
|
-
textEl.textContent = loading ? 'Loading...' : label;
|
|
178
|
+
else if (this.state.label) {
|
|
179
|
+
textEl.textContent = this.state.loading ? 'Loading...' : this.state.label;
|
|
146
180
|
}
|
|
147
181
|
else {
|
|
148
182
|
// Fallback to auto-generated label from ID
|
|
149
|
-
textEl.textContent = loading ? 'Loading...' : formatIdAsLabel(this._id);
|
|
183
|
+
textEl.textContent = this.state.loading ? 'Loading...' : formatIdAsLabel(this._id);
|
|
150
184
|
}
|
|
151
185
|
button.appendChild(textEl);
|
|
152
186
|
if (icon && iconPosition === 'right') {
|
|
@@ -156,18 +190,12 @@ export class Button extends BaseComponent {
|
|
|
156
190
|
button.appendChild(iconEl);
|
|
157
191
|
}
|
|
158
192
|
button.addEventListener('click', (e) => {
|
|
159
|
-
if (!disabled && !loading) {
|
|
193
|
+
if (!this.state.disabled && !this.state.loading) {
|
|
160
194
|
this._triggerCallback('click', e);
|
|
161
195
|
}
|
|
162
196
|
});
|
|
163
197
|
this._wireStandardEvents(button);
|
|
164
|
-
this._wireAllSyncs();
|
|
165
198
|
container.appendChild(button);
|
|
166
|
-
requestAnimationFrame(() => {
|
|
167
|
-
if (window.lucide) {
|
|
168
|
-
window.lucide.createIcons();
|
|
169
|
-
}
|
|
170
|
-
});
|
|
171
199
|
return this;
|
|
172
200
|
}
|
|
173
201
|
}
|
package/lib/components/button.ts
CHANGED
|
@@ -172,16 +172,50 @@ export class Button extends BaseComponent<ButtonState> {
|
|
|
172
172
|
|
|
173
173
|
render(targetId?: string | HTMLElement | BaseComponent<any>): this {
|
|
174
174
|
const container = this._setupContainer(targetId);
|
|
175
|
-
|
|
175
|
+
|
|
176
|
+
const { content, icon, iconPosition, variant, size, style, class: className } = this.state;
|
|
176
177
|
|
|
177
178
|
const button = document.createElement('button');
|
|
178
|
-
|
|
179
|
-
|
|
179
|
+
|
|
180
|
+
// ✅ ONLY set base class (no variant/size classes)
|
|
181
|
+
button.className = 'jux-button';
|
|
180
182
|
button.id = this._id;
|
|
181
|
-
button.disabled = disabled || loading;
|
|
182
183
|
|
|
184
|
+
// ✅ Add user classes
|
|
183
185
|
if (className) button.className += ` ${className}`;
|
|
184
|
-
|
|
186
|
+
|
|
187
|
+
// ✅ Apply variant via CSS variables (inline style)
|
|
188
|
+
let inlineStyle = style || '';
|
|
189
|
+
|
|
190
|
+
// Map variant to CSS variable overrides
|
|
191
|
+
if (variant === 'success') {
|
|
192
|
+
inlineStyle += `--jux-accent-bg: var(--jux-success-bg); --jux-accent-to: var(--jux-success-to);`;
|
|
193
|
+
} else if (variant === 'danger') {
|
|
194
|
+
inlineStyle += `--jux-accent-bg: var(--jux-danger-bg); --jux-accent-to: var(--jux-danger-to);`;
|
|
195
|
+
} else if (variant === 'warning') {
|
|
196
|
+
inlineStyle += `--jux-accent-bg: var(--jux-warning-bg); --jux-accent-to: var(--jux-warning-to);`;
|
|
197
|
+
} else if (variant === 'info') {
|
|
198
|
+
inlineStyle += `--jux-accent-bg: var(--jux-info-bg); --jux-accent-to: var(--jux-info-to);`;
|
|
199
|
+
} else if (variant === 'secondary') {
|
|
200
|
+
inlineStyle += `--jux-accent-bg: var(--jux-brand-accent-bg); --jux-accent-to: var(--jux-brand-accent-to);`;
|
|
201
|
+
} else if (variant === 'ghost') {
|
|
202
|
+
inlineStyle += `background: transparent; border-color: transparent; color: var(--jux-brand-color);`;
|
|
203
|
+
} else if (variant === 'outline') {
|
|
204
|
+
inlineStyle += `background: transparent; color: var(--jux-brand-color); border-color: var(--jux-brand-color);`;
|
|
205
|
+
}
|
|
206
|
+
// 'primary' uses default --jux-brand-bg from foundation.css
|
|
207
|
+
|
|
208
|
+
// Map size to CSS variable overrides
|
|
209
|
+
if (size === 'small') {
|
|
210
|
+
inlineStyle += `--jux-pad: calc(0.375rem * var(--jux-size-xs)) calc(0.75rem * var(--jux-size-xs)); font-size: calc(var(--jux-base-font) * var(--jux-size-xs));`;
|
|
211
|
+
} else if (size === 'large') {
|
|
212
|
+
inlineStyle += `--jux-pad: calc(0.5rem * var(--jux-size-lg)) calc(1rem * var(--jux-size-lg)); font-size: calc(var(--jux-base-font) * var(--jux-size-lg));`;
|
|
213
|
+
}
|
|
214
|
+
// 'medium' uses default --jux-base-pad from foundation.css
|
|
215
|
+
|
|
216
|
+
if (inlineStyle) {
|
|
217
|
+
button.setAttribute('style', inlineStyle);
|
|
218
|
+
}
|
|
185
219
|
|
|
186
220
|
if (icon && iconPosition === 'left') {
|
|
187
221
|
const iconEl = document.createElement('span');
|
|
@@ -195,11 +229,11 @@ export class Button extends BaseComponent<ButtonState> {
|
|
|
195
229
|
// ✅ Priority: content (HTML) > label (text) > loading state
|
|
196
230
|
if (content) {
|
|
197
231
|
textEl.innerHTML = content;
|
|
198
|
-
} else if (label) {
|
|
199
|
-
textEl.textContent = loading ? 'Loading...' : label;
|
|
232
|
+
} else if (this.state.label) {
|
|
233
|
+
textEl.textContent = this.state.loading ? 'Loading...' : this.state.label;
|
|
200
234
|
} else {
|
|
201
235
|
// Fallback to auto-generated label from ID
|
|
202
|
-
textEl.textContent = loading ? 'Loading...' : formatIdAsLabel(this._id);
|
|
236
|
+
textEl.textContent = this.state.loading ? 'Loading...' : formatIdAsLabel(this._id);
|
|
203
237
|
}
|
|
204
238
|
|
|
205
239
|
button.appendChild(textEl);
|
|
@@ -212,22 +246,13 @@ export class Button extends BaseComponent<ButtonState> {
|
|
|
212
246
|
}
|
|
213
247
|
|
|
214
248
|
button.addEventListener('click', (e) => {
|
|
215
|
-
if (!disabled && !loading) {
|
|
249
|
+
if (!this.state.disabled && !this.state.loading) {
|
|
216
250
|
this._triggerCallback('click', e);
|
|
217
251
|
}
|
|
218
252
|
});
|
|
219
253
|
|
|
220
254
|
this._wireStandardEvents(button);
|
|
221
|
-
this._wireAllSyncs();
|
|
222
|
-
|
|
223
255
|
container.appendChild(button);
|
|
224
|
-
|
|
225
|
-
requestAnimationFrame(() => {
|
|
226
|
-
if ((window as any).lucide) {
|
|
227
|
-
(window as any).lucide.createIcons();
|
|
228
|
-
}
|
|
229
|
-
});
|
|
230
|
-
|
|
231
256
|
return this;
|
|
232
257
|
}
|
|
233
258
|
}
|
|
@@ -0,0 +1,416 @@
|
|
|
1
|
+
/* ══════════════════════════════════════════════════════════════════
|
|
2
|
+
CSS CUSTOM PROPERTIES (DESIGN TOKENS)
|
|
3
|
+
Generative Color System with Burn Calculations + Complete Foundation
|
|
4
|
+
|
|
5
|
+
⚙️ USER CONFIGURATION (Lines 13-80) - Override these to theme your app
|
|
6
|
+
🔧 SYSTEM CONFIGURATION (Lines 81+) - Auto-generated, don't touch
|
|
7
|
+
══════════════════════════════════════════════════════════════════ */
|
|
8
|
+
|
|
9
|
+
:root {
|
|
10
|
+
/* ═════════════════════════════════════════════════════════════════
|
|
11
|
+
* 🎨 BRAND COLORS - Your Primary Customization Point
|
|
12
|
+
* Change these to match your brand identity
|
|
13
|
+
* ═════════════════════════════════════════════════════════════════ */
|
|
14
|
+
|
|
15
|
+
/* Brand Primary (buttons, links, primary actions) */
|
|
16
|
+
--jux-brand-from: #18181b;
|
|
17
|
+
--jux-brand-to: #000000;
|
|
18
|
+
|
|
19
|
+
/* Brand Accent (highlights, secondary actions, badges) */
|
|
20
|
+
--jux-brand-accent-from: #3b82f6;
|
|
21
|
+
--jux-brand-accent-to: #1e40af;
|
|
22
|
+
|
|
23
|
+
/* Surfaces (backgrounds, cards, panels) */
|
|
24
|
+
--jux-surface-from: #ffffff;
|
|
25
|
+
--jux-surface-to: #09090b;
|
|
26
|
+
|
|
27
|
+
/* Text (headings, paragraphs, labels) */
|
|
28
|
+
--jux-text-from: #09090b;
|
|
29
|
+
--jux-text-to: #ffffff;
|
|
30
|
+
|
|
31
|
+
/* Borders (input outlines, dividers) */
|
|
32
|
+
--jux-border-from: #e4e4e7;
|
|
33
|
+
--jux-border-to: #71717a;
|
|
34
|
+
|
|
35
|
+
/* ═════════════════════════════════════════════════════════════════
|
|
36
|
+
* 🔥 BURN FACTORS - Interaction Intensities
|
|
37
|
+
* ═════════════════════════════════════════════════════════════════ */
|
|
38
|
+
--jux-burn-subtle: 0.03;
|
|
39
|
+
--jux-burn-hover: 0.06;
|
|
40
|
+
--jux-burn-active: 0.12;
|
|
41
|
+
--jux-burn-muted: 0.25;
|
|
42
|
+
--jux-burn-strong: 0.50;
|
|
43
|
+
|
|
44
|
+
/* ═════════════════════════════════════════════════════════════════
|
|
45
|
+
* 📏 SPACING SCALE (Base units for padding, gap, margins)
|
|
46
|
+
* ═════════════════════════════════════════════════════════════════ */
|
|
47
|
+
--jux-space-xs: 0.25rem; /* 4px */
|
|
48
|
+
--jux-space-sm: 0.5rem; /* 8px */
|
|
49
|
+
--jux-space-md: 1rem; /* 16px */
|
|
50
|
+
--jux-space-lg: 1.5rem; /* 24px */
|
|
51
|
+
--jux-space-xl: 2rem; /* 32px */
|
|
52
|
+
--jux-space-2xl: 3rem; /* 48px */
|
|
53
|
+
--jux-space-3xl: 4rem; /* 64px */
|
|
54
|
+
|
|
55
|
+
/* ═════════════════════════════════════════════════════════════════
|
|
56
|
+
* 🔤 TYPOGRAPHY SCALE
|
|
57
|
+
* ═════════════════════════════════════════════════════════════════ */
|
|
58
|
+
|
|
59
|
+
/* Font Families */
|
|
60
|
+
--jux-font-sans: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
|
|
61
|
+
--jux-font-serif: Georgia, Cambria, "Times New Roman", Times, serif;
|
|
62
|
+
--jux-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
|
|
63
|
+
|
|
64
|
+
/* Font Sizes */
|
|
65
|
+
--jux-text-xs: 0.75rem; /* 12px */
|
|
66
|
+
--jux-text-sm: 0.875rem; /* 14px */
|
|
67
|
+
--jux-text-base: 1rem; /* 16px */
|
|
68
|
+
--jux-text-lg: 1.125rem; /* 18px */
|
|
69
|
+
--jux-text-xl: 1.25rem; /* 20px */
|
|
70
|
+
--jux-text-2xl: 1.5rem; /* 24px */
|
|
71
|
+
--jux-text-3xl: 1.875rem; /* 30px */
|
|
72
|
+
--jux-text-4xl: 2.25rem; /* 36px */
|
|
73
|
+
--jux-text-5xl: 3rem; /* 48px */
|
|
74
|
+
|
|
75
|
+
/* Font Weights */
|
|
76
|
+
--jux-weight-thin: 100;
|
|
77
|
+
--jux-weight-light: 300;
|
|
78
|
+
--jux-weight-normal: 400;
|
|
79
|
+
--jux-weight-medium: 500;
|
|
80
|
+
--jux-weight-semibold: 600;
|
|
81
|
+
--jux-weight-bold: 700;
|
|
82
|
+
--jux-weight-black: 900;
|
|
83
|
+
|
|
84
|
+
/* Line Heights */
|
|
85
|
+
--jux-leading-tight: 1.25;
|
|
86
|
+
--jux-leading-snug: 1.375;
|
|
87
|
+
--jux-leading-normal: 1.5;
|
|
88
|
+
--jux-leading-relaxed: 1.625;
|
|
89
|
+
--jux-leading-loose: 2;
|
|
90
|
+
|
|
91
|
+
/* ═════════════════════════════════════════════════════════════════
|
|
92
|
+
* 📐 SHAPE & SIZE SCALE
|
|
93
|
+
* ═════════════════════════════════════════════════════════════════ */
|
|
94
|
+
|
|
95
|
+
/* Border Radius */
|
|
96
|
+
--jux-radius-sharp: 0;
|
|
97
|
+
--jux-radius-sm: 0.25rem;
|
|
98
|
+
--jux-radius-md: 0.375rem;
|
|
99
|
+
--jux-radius-lg: 0.5rem;
|
|
100
|
+
--jux-radius-xl: 0.75rem;
|
|
101
|
+
--jux-radius-2xl: 1rem;
|
|
102
|
+
--jux-radius-full: 9999px;
|
|
103
|
+
|
|
104
|
+
/* Border Width */
|
|
105
|
+
--jux-stroke-thin: 1px;
|
|
106
|
+
--jux-stroke-base: 2px;
|
|
107
|
+
--jux-stroke-thick: 4px;
|
|
108
|
+
|
|
109
|
+
/* Size Multipliers */
|
|
110
|
+
--jux-size-xs: 0.75;
|
|
111
|
+
--jux-size-sm: 0.875;
|
|
112
|
+
--jux-size-md: 1;
|
|
113
|
+
--jux-size-lg: 1.25;
|
|
114
|
+
--jux-size-xl: 1.5;
|
|
115
|
+
|
|
116
|
+
/* ═════════════════════════════════════════════════════════════════
|
|
117
|
+
* 🤖 SYSTEM CONFIGURATION - AUTO-GENERATED
|
|
118
|
+
* These are computed from your brand colors above
|
|
119
|
+
* DO NOT MODIFY - Override brand colors instead
|
|
120
|
+
* ═════════════════════════════════════════════════════════════════ */
|
|
121
|
+
|
|
122
|
+
/* Generated Brand Colors */
|
|
123
|
+
--jux-brand-color: var(--jux-brand-from);
|
|
124
|
+
--jux-brand-bg: var(--jux-brand-from);
|
|
125
|
+
--jux-brand-color-hover: color-mix(in srgb,
|
|
126
|
+
var(--jux-brand-from) calc(100% - var(--jux-burn-hover) * 100%),
|
|
127
|
+
var(--jux-brand-to) calc(var(--jux-burn-hover) * 100%)
|
|
128
|
+
);
|
|
129
|
+
--jux-brand-color-active: color-mix(in srgb,
|
|
130
|
+
var(--jux-brand-from) calc(100% - var(--jux-burn-active) * 100%),
|
|
131
|
+
var(--jux-brand-to) calc(var(--jux-burn-active) * 100%)
|
|
132
|
+
);
|
|
133
|
+
|
|
134
|
+
/* Generated Brand Accent Colors */
|
|
135
|
+
--jux-brand-accent-color: var(--jux-brand-accent-from);
|
|
136
|
+
--jux-brand-accent-bg: var(--jux-brand-accent-from);
|
|
137
|
+
--jux-brand-accent-color-hover: color-mix(in srgb,
|
|
138
|
+
var(--jux-brand-accent-from) calc(100% - var(--jux-burn-hover) * 100%),
|
|
139
|
+
var(--jux-brand-accent-to) calc(var(--jux-burn-hover) * 100%)
|
|
140
|
+
);
|
|
141
|
+
--jux-brand-accent-color-active: color-mix(in srgb,
|
|
142
|
+
var(--jux-brand-accent-from) calc(100% - var(--jux-burn-active) * 100%),
|
|
143
|
+
var(--jux-brand-accent-to) calc(var(--jux-burn-active) * 100%)
|
|
144
|
+
);
|
|
145
|
+
|
|
146
|
+
/* Generated Surface Colors */
|
|
147
|
+
--jux-surface-bg: var(--jux-surface-from);
|
|
148
|
+
--jux-surface-bg-alt: color-mix(in srgb,
|
|
149
|
+
var(--jux-surface-from) calc(100% - var(--jux-burn-subtle) * 100%),
|
|
150
|
+
var(--jux-surface-to) calc(var(--jux-burn-subtle) * 100%)
|
|
151
|
+
);
|
|
152
|
+
--jux-surface-bg-hover: color-mix(in srgb,
|
|
153
|
+
var(--jux-surface-from) calc(100% - var(--jux-burn-hover) * 100%),
|
|
154
|
+
var(--jux-surface-to) calc(var(--jux-burn-hover) * 100%)
|
|
155
|
+
);
|
|
156
|
+
--jux-surface-bg-active: color-mix(in srgb,
|
|
157
|
+
var(--jux-surface-from) calc(100% - var(--jux-burn-active) * 100%),
|
|
158
|
+
var(--jux-surface-to) calc(var(--jux-burn-active) * 100%)
|
|
159
|
+
);
|
|
160
|
+
|
|
161
|
+
/* Generated Text Colors */
|
|
162
|
+
--jux-text-color: var(--jux-text-from);
|
|
163
|
+
--jux-text-color-secondary: color-mix(in srgb,
|
|
164
|
+
var(--jux-text-from) calc(100% - var(--jux-burn-muted) * 100%),
|
|
165
|
+
var(--jux-text-to) calc(var(--jux-burn-muted) * 100%)
|
|
166
|
+
);
|
|
167
|
+
--jux-text-color-tertiary: color-mix(in srgb,
|
|
168
|
+
var(--jux-text-from) calc(100% - var(--jux-burn-strong) * 100%),
|
|
169
|
+
var(--jux-text-to) calc(var(--jux-burn-strong) * 100%)
|
|
170
|
+
);
|
|
171
|
+
|
|
172
|
+
/* Generated Border Colors */
|
|
173
|
+
--jux-border-color: var(--jux-border-from);
|
|
174
|
+
--jux-border-color-strong: color-mix(in srgb,
|
|
175
|
+
var(--jux-border-from) calc(100% - var(--jux-burn-hover) * 100%),
|
|
176
|
+
var(--jux-border-to) calc(var(--jux-burn-hover) * 100%)
|
|
177
|
+
);
|
|
178
|
+
|
|
179
|
+
/* Semantic Colors (Optional - Use for app-level alerts/feedback) */
|
|
180
|
+
--jux-success-from: #10b981;
|
|
181
|
+
--jux-success-to: #065f46;
|
|
182
|
+
--jux-success-color: var(--jux-success-from);
|
|
183
|
+
--jux-success-bg: var(--jux-success-from);
|
|
184
|
+
--jux-success-bg-light: color-mix(in srgb, var(--jux-success-from) 20%, #ffffff 80%);
|
|
185
|
+
--jux-success-bg-dark: var(--jux-success-to);
|
|
186
|
+
|
|
187
|
+
--jux-warning-from: #f59e0b;
|
|
188
|
+
--jux-warning-to: #92400e;
|
|
189
|
+
--jux-warning-color: var(--jux-warning-from);
|
|
190
|
+
--jux-warning-bg: var(--jux-warning-from);
|
|
191
|
+
--jux-warning-bg-light: color-mix(in srgb, var(--jux-warning-from) 20%, #ffffff 80%);
|
|
192
|
+
--jux-warning-bg-dark: var(--jux-warning-to);
|
|
193
|
+
|
|
194
|
+
--jux-danger-from: #ef4444;
|
|
195
|
+
--jux-danger-to: #991b1b;
|
|
196
|
+
--jux-danger-color: var(--jux-danger-from);
|
|
197
|
+
--jux-danger-bg: var(--jux-danger-from);
|
|
198
|
+
--jux-danger-bg-light: color-mix(in srgb, var(--jux-danger-from) 20%, #ffffff 80%);
|
|
199
|
+
--jux-danger-bg-dark: var(--jux-danger-to);
|
|
200
|
+
|
|
201
|
+
--jux-info-from: #3b82f6;
|
|
202
|
+
--jux-info-to: #1e40af;
|
|
203
|
+
--jux-info-color: var(--jux-info-from);
|
|
204
|
+
--jux-info-bg: var(--jux-info-from);
|
|
205
|
+
--jux-info-bg-light: color-mix(in srgb, var(--jux-info-from) 20%, #ffffff 80%);
|
|
206
|
+
--jux-info-bg-dark: var(--jux-info-to);
|
|
207
|
+
|
|
208
|
+
/* Spatial Axis Engine (Ghost Logic Fallbacks) */
|
|
209
|
+
--jux-gap: var(--jux-gap-override, var(--jux-gap-token, 0px));
|
|
210
|
+
--jux-pad: var(--jux-pad-override, var(--jux-pad-token, 0px));
|
|
211
|
+
--jux-align: flex-start;
|
|
212
|
+
|
|
213
|
+
/* Default Radius & Stroke */
|
|
214
|
+
--jux-radius: var(--jux-radius-override, var(--jux-radius-md));
|
|
215
|
+
--jux-stroke: var(--jux-stroke-base);
|
|
216
|
+
|
|
217
|
+
/* Default Typography */
|
|
218
|
+
--jux-font-family: var(--jux-font-sans);
|
|
219
|
+
--jux-font-weight: var(--jux-weight-normal);
|
|
220
|
+
--jux-font-size: var(--jux-text-base);
|
|
221
|
+
--jux-line-height: var(--jux-leading-normal);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/* ══════════════════════════════════════════════════════════════════
|
|
225
|
+
GEOMETRIC DESCRIPTOR CLASSES (Mobile First)
|
|
226
|
+
══════════════════════════════════════════════════════════════════ */
|
|
227
|
+
|
|
228
|
+
/* ─────────────────────────────────────────────────────────────────
|
|
229
|
+
* PADDING DESCRIPTORS
|
|
230
|
+
* ───────────────────────────────────────────────────────────────── */
|
|
231
|
+
.pad-none { --jux-pad-token: 0; }
|
|
232
|
+
.pad-xs { --jux-pad-token: var(--jux-space-xs); }
|
|
233
|
+
.pad-sm { --jux-pad-token: var(--jux-space-sm); }
|
|
234
|
+
.pad-md { --jux-pad-token: var(--jux-space-md); }
|
|
235
|
+
.pad-lg { --jux-pad-token: var(--jux-space-lg); }
|
|
236
|
+
.pad-xl { --jux-pad-token: var(--jux-space-xl); }
|
|
237
|
+
.pad-2xl { --jux-pad-token: var(--jux-space-2xl); }
|
|
238
|
+
.pad-3xl { --jux-pad-token: var(--jux-space-3xl); }
|
|
239
|
+
|
|
240
|
+
/* ─────────────────────────────────────────────────────────────────
|
|
241
|
+
* GAP DESCRIPTORS
|
|
242
|
+
* ───────────────────────────────────────────────────────────────── */
|
|
243
|
+
.gap-none { --jux-gap-token: 0; }
|
|
244
|
+
.gap-xs { --jux-gap-token: var(--jux-space-xs); }
|
|
245
|
+
.gap-sm { --jux-gap-token: var(--jux-space-sm); }
|
|
246
|
+
.gap-md { --jux-gap-token: var(--jux-space-md); }
|
|
247
|
+
.gap-lg { --jux-gap-token: var(--jux-space-lg); }
|
|
248
|
+
.gap-xl { --jux-gap-token: var(--jux-space-xl); }
|
|
249
|
+
.gap-2xl { --jux-gap-token: var(--jux-space-2xl); }
|
|
250
|
+
.gap-3xl { --jux-gap-token: var(--jux-space-3xl); }
|
|
251
|
+
|
|
252
|
+
/* ─────────────────────────────────────────────────────────────────
|
|
253
|
+
* RADIUS DESCRIPTORS
|
|
254
|
+
* ───────────────────────────────────────────────────────────────── */
|
|
255
|
+
.radius-sharp { --jux-radius-override: var(--jux-radius-sharp); }
|
|
256
|
+
.radius-sm { --jux-radius-override: var(--jux-radius-sm); }
|
|
257
|
+
.radius-md { --jux-radius-override: var(--jux-radius-md); }
|
|
258
|
+
.radius-lg { --jux-radius-override: var(--jux-radius-lg); }
|
|
259
|
+
.radius-xl { --jux-radius-override: var(--jux-radius-xl); }
|
|
260
|
+
.radius-2xl { --jux-radius-override: var(--jux-radius-2xl); }
|
|
261
|
+
.radius-full { --jux-radius-override: var(--jux-radius-full); }
|
|
262
|
+
|
|
263
|
+
/* ─────────────────────────────────────────────────────────────────
|
|
264
|
+
* FONT WEIGHT DESCRIPTORS
|
|
265
|
+
* ───────────────────────────────────────────────────────────────── */
|
|
266
|
+
.weight-thin { font-weight: var(--jux-weight-thin); }
|
|
267
|
+
.weight-light { font-weight: var(--jux-weight-light); }
|
|
268
|
+
.weight-normal { font-weight: var(--jux-weight-normal); }
|
|
269
|
+
.weight-medium { font-weight: var(--jux-weight-medium); }
|
|
270
|
+
.weight-semibold { font-weight: var(--jux-weight-semibold); }
|
|
271
|
+
.weight-bold { font-weight: var(--jux-weight-bold); }
|
|
272
|
+
.weight-black { font-weight: var(--jux-weight-black); }
|
|
273
|
+
|
|
274
|
+
/* ─────────────────────────────────────────────────────────────────
|
|
275
|
+
* FONT SIZE DESCRIPTORS
|
|
276
|
+
* ───────────────────────────────────────────────────────────────── */
|
|
277
|
+
.text-xs { font-size: var(--jux-text-xs); }
|
|
278
|
+
.text-sm { font-size: var(--jux-text-sm); }
|
|
279
|
+
.text-base { font-size: var(--jux-text-base); }
|
|
280
|
+
.text-lg { font-size: var(--jux-text-lg); }
|
|
281
|
+
.text-xl { font-size: var(--jux-text-xl); }
|
|
282
|
+
.text-2xl { font-size: var(--jux-text-2xl); }
|
|
283
|
+
.text-3xl { font-size: var(--jux-text-3xl); }
|
|
284
|
+
.text-4xl { font-size: var(--jux-text-4xl); }
|
|
285
|
+
.text-5xl { font-size: var(--jux-text-5xl); }
|
|
286
|
+
|
|
287
|
+
/* ─────────────────────────────────────────────────────────────────
|
|
288
|
+
* FONT FAMILY DESCRIPTORS
|
|
289
|
+
* ───────────────────────────────────────────────────────────────── */
|
|
290
|
+
.font-sans { font-family: var(--jux-font-sans); }
|
|
291
|
+
.font-serif { font-family: var(--jux-font-serif); }
|
|
292
|
+
.font-mono { font-family: var(--jux-font-mono); }
|
|
293
|
+
|
|
294
|
+
/* ──────────────────────────────────────────────────────────────────
|
|
295
|
+
* DESKTOP SCALE-UP (@media: 1024px+)
|
|
296
|
+
* ────────────────────────────────────────────────────────────────── */
|
|
297
|
+
@media (min-width: 1024px) {
|
|
298
|
+
.pad-xs { --jux-pad-token: calc(var(--jux-space-xs) * 1.25); }
|
|
299
|
+
.pad-sm { --jux-pad-token: calc(var(--jux-space-sm) * 1.25); }
|
|
300
|
+
.pad-md { --jux-pad-token: calc(var(--jux-space-md) * 1.25); }
|
|
301
|
+
.pad-lg { --jux-pad-token: calc(var(--jux-space-lg) * 1.25); }
|
|
302
|
+
.pad-xl { --jux-pad-token: calc(var(--jux-space-xl) * 1.25); }
|
|
303
|
+
.pad-2xl { --jux-pad-token: calc(var(--jux-space-2xl) * 1.25); }
|
|
304
|
+
.pad-3xl { --jux-pad-token: calc(var(--jux-space-3xl) * 1.25); }
|
|
305
|
+
|
|
306
|
+
.gap-xs { --jux-gap-token: calc(var(--jux-space-xs) * 1.25); }
|
|
307
|
+
.gap-sm { --jux-gap-token: calc(var(--jux-space-sm) * 1.25); }
|
|
308
|
+
.gap-md { --jux-gap-token: calc(var(--jux-space-md) * 1.25); }
|
|
309
|
+
.gap-lg { --jux-gap-token: calc(var(--jux-space-lg) * 1.25); }
|
|
310
|
+
.gap-xl { --jux-gap-token: calc(var(--jux-space-xl) * 1.25); }
|
|
311
|
+
.gap-2xl { --jux-gap-token: calc(var(--jux-space-2xl) * 1.25); }
|
|
312
|
+
.gap-3xl { --jux-gap-token: calc(var(--jux-space-3xl) * 1.25); }
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
/* ══════════════════════════════════════════════════════════════════
|
|
316
|
+
BUTTON (Ultra-Minimal - Pure Token Usage)
|
|
317
|
+
══════════════════════════════════════════════════════════════════ */
|
|
318
|
+
|
|
319
|
+
.jux-button {
|
|
320
|
+
/* Colors */
|
|
321
|
+
background: var(--jux-brand-bg);
|
|
322
|
+
color: #fff;
|
|
323
|
+
border: var(--jux-stroke) solid var(--jux-border-color);
|
|
324
|
+
|
|
325
|
+
/* Shape */
|
|
326
|
+
border-radius: var(--jux-radius);
|
|
327
|
+
|
|
328
|
+
/* Size */
|
|
329
|
+
padding: var(--jux-pad, var(--jux-space-md));
|
|
330
|
+
font-size: var(--jux-font-size);
|
|
331
|
+
font-weight: var(--jux-weight-medium);
|
|
332
|
+
font-family: var(--jux-font-family);
|
|
333
|
+
|
|
334
|
+
/* Layout */
|
|
335
|
+
display: inline-flex;
|
|
336
|
+
align-items: center;
|
|
337
|
+
gap: var(--jux-space-sm);
|
|
338
|
+
|
|
339
|
+
/* Interaction */
|
|
340
|
+
cursor: pointer;
|
|
341
|
+
user-select: none;
|
|
342
|
+
transition: all 0.15s ease;
|
|
343
|
+
line-height: 1;
|
|
344
|
+
text-decoration: none;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
/* States use burn calculations */
|
|
348
|
+
.jux-button:hover:not(:disabled) {
|
|
349
|
+
background: var(--jux-brand-color-hover);
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
.jux-button:active:not(:disabled) {
|
|
353
|
+
background: var(--jux-brand-color-active);
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
.jux-button:focus {
|
|
357
|
+
outline: none;
|
|
358
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--jux-brand-bg) 30%, transparent 70%);
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
.jux-button:disabled {
|
|
362
|
+
opacity: var(--jux-burn-strong);
|
|
363
|
+
cursor: not-allowed;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
/* ══════════════════════════════════════════════════════════════════
|
|
367
|
+
BUTTON VARIANT CLASSES (Optional)
|
|
368
|
+
══════════════════════════════════════════════════════════════════ */
|
|
369
|
+
|
|
370
|
+
.jux-button-success {
|
|
371
|
+
--jux-accent-bg: var(--jux-success-bg);
|
|
372
|
+
--jux-accent-to: var(--jux-success-to);
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
.jux-button-danger {
|
|
376
|
+
--jux-accent-bg: var(--jux-danger-bg);
|
|
377
|
+
--jux-accent-to: var(--jux-danger-to);
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
.jux-button-warning {
|
|
381
|
+
--jux-accent-bg: var(--jux-warning-bg);
|
|
382
|
+
--jux-accent-to: var(--jux-warning-to);
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
.jux-button-info {
|
|
386
|
+
--jux-accent-bg: var(--jux-info-bg);
|
|
387
|
+
--jux-accent-to: var(--jux-info-to);
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
.jux-button-secondary {
|
|
391
|
+
--jux-accent-bg: var(--jux-brand-accent-bg);
|
|
392
|
+
--jux-accent-to: var(--jux-brand-accent-to);
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
.jux-button-ghost {
|
|
396
|
+
background: transparent;
|
|
397
|
+
border-color: transparent;
|
|
398
|
+
color: var(--jux-brand-color);
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
.jux-button-outline {
|
|
402
|
+
background: transparent;
|
|
403
|
+
color: var(--jux-brand-color);
|
|
404
|
+
border-color: var(--jux-brand-color);
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
/* Size classes */
|
|
408
|
+
.jux-button-small {
|
|
409
|
+
--jux-pad: calc(0.375rem * var(--jux-size-xs)) calc(0.75rem * var(--jux-size-xs));
|
|
410
|
+
font-size: calc(var(--jux-base-font) * var(--jux-size-xs));
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
.jux-button-large {
|
|
414
|
+
--jux-pad: calc(0.5rem * var(--jux-size-lg)) calc(1rem * var(--jux-size-lg));
|
|
415
|
+
font-size: calc(var(--jux-base-font) * var(--jux-size-lg));
|
|
416
|
+
}
|
|
@@ -0,0 +1,434 @@
|
|
|
1
|
+
/* ══════════════════════════════════════════════════════════════════
|
|
2
|
+
JUX THEME SYSTEM
|
|
3
|
+
Combines MODE (dark/light) + SWAG (brand aesthetic)
|
|
4
|
+
|
|
5
|
+
Usage:
|
|
6
|
+
<html data-mode="dark" data-swag="apple">
|
|
7
|
+
|
|
8
|
+
Swag Options: gumroad | stripe | google | apple | meta | notion
|
|
9
|
+
Mode Options: light | dark
|
|
10
|
+
══════════════════════════════════════════════════════════════════ */
|
|
11
|
+
|
|
12
|
+
/* ══════════════════════════════════════════════════════════════════
|
|
13
|
+
🍎 APPLE - Minimalist, Elegant, Rounded
|
|
14
|
+
══════════════════════════════════════════════════════════════════ */
|
|
15
|
+
|
|
16
|
+
[data-swag="apple"][data-mode="light"] {
|
|
17
|
+
/* Brand Colors */
|
|
18
|
+
--jux-brand-from: #007aff;
|
|
19
|
+
--jux-brand-to: #0051d5;
|
|
20
|
+
--jux-brand-accent-from: #34c759;
|
|
21
|
+
--jux-brand-accent-to: #248a3d;
|
|
22
|
+
|
|
23
|
+
/* Surfaces */
|
|
24
|
+
--jux-surface-from: #ffffff;
|
|
25
|
+
--jux-surface-to: #f5f5f7;
|
|
26
|
+
|
|
27
|
+
/* Text */
|
|
28
|
+
--jux-text-from: #1d1d1f;
|
|
29
|
+
--jux-text-to: #86868b;
|
|
30
|
+
|
|
31
|
+
/* Borders */
|
|
32
|
+
--jux-border-from: #d2d2d7;
|
|
33
|
+
--jux-border-to: #86868b;
|
|
34
|
+
|
|
35
|
+
/* Radius - Very rounded (Apple style) */
|
|
36
|
+
--jux-radius-sharp: 0;
|
|
37
|
+
--jux-radius-sm: 0.5rem;
|
|
38
|
+
--jux-radius-md: 0.75rem;
|
|
39
|
+
--jux-radius-lg: 1rem;
|
|
40
|
+
--jux-radius-xl: 1.25rem;
|
|
41
|
+
--jux-radius-2xl: 1.5rem;
|
|
42
|
+
--jux-radius-full: 9999px;
|
|
43
|
+
|
|
44
|
+
/* Spacing - Generous (Apple loves whitespace) */
|
|
45
|
+
--jux-space-xs: 0.5rem;
|
|
46
|
+
--jux-space-sm: 0.75rem;
|
|
47
|
+
--jux-space-md: 1.25rem;
|
|
48
|
+
--jux-space-lg: 2rem;
|
|
49
|
+
--jux-space-xl: 3rem;
|
|
50
|
+
--jux-space-2xl: 4rem;
|
|
51
|
+
--jux-space-3xl: 6rem;
|
|
52
|
+
|
|
53
|
+
/* Typography - San Francisco inspired */
|
|
54
|
+
--jux-font-sans: -apple-system, BlinkMacSystemFont, "SF Pro Display", "Helvetica Neue", sans-serif;
|
|
55
|
+
--jux-weight-normal: 400;
|
|
56
|
+
--jux-weight-medium: 500;
|
|
57
|
+
--jux-weight-semibold: 600;
|
|
58
|
+
--jux-weight-bold: 700;
|
|
59
|
+
|
|
60
|
+
/* Burn Factors - Subtle (Apple is understated) */
|
|
61
|
+
--jux-burn-subtle: 0.02;
|
|
62
|
+
--jux-burn-hover: 0.05;
|
|
63
|
+
--jux-burn-active: 0.08;
|
|
64
|
+
--jux-burn-muted: 0.3;
|
|
65
|
+
--jux-burn-strong: 0.6;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
[data-swag="apple"][data-mode="dark"] {
|
|
69
|
+
--jux-brand-from: #0a84ff;
|
|
70
|
+
--jux-brand-to: #0062cc;
|
|
71
|
+
--jux-brand-accent-from: #32d74b;
|
|
72
|
+
--jux-brand-accent-to: #248a3d;
|
|
73
|
+
|
|
74
|
+
--jux-surface-from: #000000;
|
|
75
|
+
--jux-surface-to: #1c1c1e;
|
|
76
|
+
|
|
77
|
+
--jux-text-from: #ffffff;
|
|
78
|
+
--jux-text-to: #98989d;
|
|
79
|
+
|
|
80
|
+
--jux-border-from: #38383a;
|
|
81
|
+
--jux-border-to: #545456;
|
|
82
|
+
|
|
83
|
+
/* Radius, spacing, typography inherited from light mode */
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/* ══════════════════════════════════════════════════════════════════
|
|
87
|
+
🔵 GOOGLE - Bold, Colorful, Material Design
|
|
88
|
+
══════════════════════════════════════════════════════════════════ */
|
|
89
|
+
|
|
90
|
+
[data-swag="google"][data-mode="light"] {
|
|
91
|
+
--jux-brand-from: #4285f4;
|
|
92
|
+
--jux-brand-to: #1a73e8;
|
|
93
|
+
--jux-brand-accent-from: #34a853;
|
|
94
|
+
--jux-brand-accent-to: #0d652d;
|
|
95
|
+
|
|
96
|
+
--jux-surface-from: #ffffff;
|
|
97
|
+
--jux-surface-to: #f8f9fa;
|
|
98
|
+
|
|
99
|
+
--jux-text-from: #202124;
|
|
100
|
+
--jux-text-to: #5f6368;
|
|
101
|
+
|
|
102
|
+
--jux-border-from: #dadce0;
|
|
103
|
+
--jux-border-to: #5f6368;
|
|
104
|
+
|
|
105
|
+
/* Radius - Less rounded (Material) */
|
|
106
|
+
--jux-radius-sharp: 0;
|
|
107
|
+
--jux-radius-sm: 0.25rem;
|
|
108
|
+
--jux-radius-md: 0.5rem;
|
|
109
|
+
--jux-radius-lg: 0.75rem;
|
|
110
|
+
--jux-radius-xl: 1rem;
|
|
111
|
+
--jux-radius-2xl: 1.25rem;
|
|
112
|
+
--jux-radius-full: 9999px;
|
|
113
|
+
|
|
114
|
+
/* Spacing - Standard Material */
|
|
115
|
+
--jux-space-xs: 0.25rem;
|
|
116
|
+
--jux-space-sm: 0.5rem;
|
|
117
|
+
--jux-space-md: 1rem;
|
|
118
|
+
--jux-space-lg: 1.5rem;
|
|
119
|
+
--jux-space-xl: 2rem;
|
|
120
|
+
--jux-space-2xl: 3rem;
|
|
121
|
+
--jux-space-3xl: 4rem;
|
|
122
|
+
|
|
123
|
+
/* Typography - Roboto */
|
|
124
|
+
--jux-font-sans: "Roboto", "Helvetica", "Arial", sans-serif;
|
|
125
|
+
--jux-weight-normal: 400;
|
|
126
|
+
--jux-weight-medium: 500;
|
|
127
|
+
--jux-weight-semibold: 600;
|
|
128
|
+
--jux-weight-bold: 700;
|
|
129
|
+
|
|
130
|
+
/* Burn Factors - Pronounced (Google loves color) */
|
|
131
|
+
--jux-burn-subtle: 0.04;
|
|
132
|
+
--jux-burn-hover: 0.08;
|
|
133
|
+
--jux-burn-active: 0.15;
|
|
134
|
+
--jux-burn-muted: 0.25;
|
|
135
|
+
--jux-burn-strong: 0.5;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
[data-swag="google"][data-mode="dark"] {
|
|
139
|
+
--jux-brand-from: #8ab4f8;
|
|
140
|
+
--jux-brand-to: #4285f4;
|
|
141
|
+
--jux-brand-accent-from: #81c995;
|
|
142
|
+
--jux-brand-accent-to: #34a853;
|
|
143
|
+
|
|
144
|
+
--jux-surface-from: #202124;
|
|
145
|
+
--jux-surface-to: #292a2d;
|
|
146
|
+
|
|
147
|
+
--jux-text-from: #e8eaed;
|
|
148
|
+
--jux-text-to: #9aa0a6;
|
|
149
|
+
|
|
150
|
+
--jux-border-from: #3c4043;
|
|
151
|
+
--jux-border-to: #5f6368;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/* ══════════════════════════════════════════════════════════════════
|
|
155
|
+
💳 STRIPE - Professional, Precise, Trustworthy
|
|
156
|
+
══════════════════════════════════════════════════════════════════ */
|
|
157
|
+
|
|
158
|
+
[data-swag="stripe"][data-mode="light"] {
|
|
159
|
+
--jux-brand-from: #635bff;
|
|
160
|
+
--jux-brand-to: #0a2540;
|
|
161
|
+
--jux-brand-accent-from: #00d4ff;
|
|
162
|
+
--jux-brand-accent-to: #0073e6;
|
|
163
|
+
|
|
164
|
+
--jux-surface-from: #ffffff;
|
|
165
|
+
--jux-surface-to: #f6f9fc;
|
|
166
|
+
|
|
167
|
+
--jux-text-from: #0a2540;
|
|
168
|
+
--jux-text-to: #425466;
|
|
169
|
+
|
|
170
|
+
--jux-border-from: #e3e8ee;
|
|
171
|
+
--jux-border-to: #cbd2d9;
|
|
172
|
+
|
|
173
|
+
/* Radius - Sharp to moderate (professional) */
|
|
174
|
+
--jux-radius-sharp: 0;
|
|
175
|
+
--jux-radius-sm: 0.25rem;
|
|
176
|
+
--jux-radius-md: 0.375rem;
|
|
177
|
+
--jux-radius-lg: 0.5rem;
|
|
178
|
+
--jux-radius-xl: 0.75rem;
|
|
179
|
+
--jux-radius-2xl: 1rem;
|
|
180
|
+
--jux-radius-full: 9999px;
|
|
181
|
+
|
|
182
|
+
/* Spacing - Tight, efficient */
|
|
183
|
+
--jux-space-xs: 0.25rem;
|
|
184
|
+
--jux-space-sm: 0.5rem;
|
|
185
|
+
--jux-space-md: 1rem;
|
|
186
|
+
--jux-space-lg: 1.5rem;
|
|
187
|
+
--jux-space-xl: 2rem;
|
|
188
|
+
--jux-space-2xl: 3rem;
|
|
189
|
+
--jux-space-3xl: 4rem;
|
|
190
|
+
|
|
191
|
+
/* Typography - Camphor (fallback to system) */
|
|
192
|
+
--jux-font-sans: "Camphor", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
193
|
+
--jux-weight-normal: 400;
|
|
194
|
+
--jux-weight-medium: 500;
|
|
195
|
+
--jux-weight-semibold: 600;
|
|
196
|
+
--jux-weight-bold: 700;
|
|
197
|
+
|
|
198
|
+
/* Burn Factors - Subtle, professional */
|
|
199
|
+
--jux-burn-subtle: 0.02;
|
|
200
|
+
--jux-burn-hover: 0.04;
|
|
201
|
+
--jux-burn-active: 0.08;
|
|
202
|
+
--jux-burn-muted: 0.3;
|
|
203
|
+
--jux-burn-strong: 0.5;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
[data-swag="stripe"][data-mode="dark"] {
|
|
207
|
+
--jux-brand-from: #7a73ff;
|
|
208
|
+
--jux-brand-to: #635bff;
|
|
209
|
+
--jux-brand-accent-from: #00d4ff;
|
|
210
|
+
--jux-brand-accent-to: #0073e6;
|
|
211
|
+
|
|
212
|
+
--jux-surface-from: #0a2540;
|
|
213
|
+
--jux-surface-to: #1a365d;
|
|
214
|
+
|
|
215
|
+
--jux-text-from: #ffffff;
|
|
216
|
+
--jux-text-to: #adbdcc;
|
|
217
|
+
|
|
218
|
+
--jux-border-from: #1a365d;
|
|
219
|
+
--jux-border-to: #2d4a6f;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/* ══════════════════════════════════════════════════════════════════
|
|
223
|
+
🎨 GUMROAD - Bold, Playful, Creative
|
|
224
|
+
══════════════════════════════════════════════════════════════════ */
|
|
225
|
+
|
|
226
|
+
[data-swag="gumroad"][data-mode="light"] {
|
|
227
|
+
--jux-brand-from: #ff90e8;
|
|
228
|
+
--jux-brand-to: #ff5ac4;
|
|
229
|
+
--jux-brand-accent-from: #36d9b8;
|
|
230
|
+
--jux-brand-accent-to: #1ead8a;
|
|
231
|
+
|
|
232
|
+
--jux-surface-from: #ffffff;
|
|
233
|
+
--jux-surface-to: #f9f9f9;
|
|
234
|
+
|
|
235
|
+
--jux-text-from: #000000;
|
|
236
|
+
--jux-text-to: #999999;
|
|
237
|
+
|
|
238
|
+
--jux-border-from: #e6e6e6;
|
|
239
|
+
--jux-border-to: #cccccc;
|
|
240
|
+
|
|
241
|
+
/* Radius - Playful, more rounded */
|
|
242
|
+
--jux-radius-sharp: 0;
|
|
243
|
+
--jux-radius-sm: 0.5rem;
|
|
244
|
+
--jux-radius-md: 0.75rem;
|
|
245
|
+
--jux-radius-lg: 1rem;
|
|
246
|
+
--jux-radius-xl: 1.5rem;
|
|
247
|
+
--jux-radius-2xl: 2rem;
|
|
248
|
+
--jux-radius-full: 9999px;
|
|
249
|
+
|
|
250
|
+
/* Spacing - Generous (creative needs room) */
|
|
251
|
+
--jux-space-xs: 0.5rem;
|
|
252
|
+
--jux-space-sm: 0.75rem;
|
|
253
|
+
--jux-space-md: 1.25rem;
|
|
254
|
+
--jux-space-lg: 2rem;
|
|
255
|
+
--jux-space-xl: 3rem;
|
|
256
|
+
--jux-space-2xl: 4rem;
|
|
257
|
+
--jux-space-3xl: 6rem;
|
|
258
|
+
|
|
259
|
+
/* Typography - Mabry (fallback to rounded sans) */
|
|
260
|
+
--jux-font-sans: "Mabry", "Circular", -apple-system, sans-serif;
|
|
261
|
+
--jux-weight-normal: 400;
|
|
262
|
+
--jux-weight-medium: 500;
|
|
263
|
+
--jux-weight-semibold: 600;
|
|
264
|
+
--jux-weight-bold: 700;
|
|
265
|
+
|
|
266
|
+
/* Burn Factors - Vibrant transitions */
|
|
267
|
+
--jux-burn-subtle: 0.05;
|
|
268
|
+
--jux-burn-hover: 0.1;
|
|
269
|
+
--jux-burn-active: 0.15;
|
|
270
|
+
--jux-burn-muted: 0.25;
|
|
271
|
+
--jux-burn-strong: 0.4;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
[data-swag="gumroad"][data-mode="dark"] {
|
|
275
|
+
--jux-brand-from: #ff90e8;
|
|
276
|
+
--jux-brand-to: #ff5ac4;
|
|
277
|
+
--jux-brand-accent-from: #36d9b8;
|
|
278
|
+
--jux-brand-accent-to: #1ead8a;
|
|
279
|
+
|
|
280
|
+
--jux-surface-from: #000000;
|
|
281
|
+
--jux-surface-to: #1a1a1a;
|
|
282
|
+
|
|
283
|
+
--jux-text-from: #ffffff;
|
|
284
|
+
--jux-text-to: #999999;
|
|
285
|
+
|
|
286
|
+
--jux-border-from: #333333;
|
|
287
|
+
--jux-border-to: #666666;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/* ══════════════════════════════════════════════════════════════════
|
|
291
|
+
🔷 META - Modern, Bold, Blue
|
|
292
|
+
══════════════════════════════════════════════════════════════════ */
|
|
293
|
+
|
|
294
|
+
[data-swag="meta"][data-mode="light"] {
|
|
295
|
+
--jux-brand-from: #0866ff;
|
|
296
|
+
--jux-brand-to: #0554e5;
|
|
297
|
+
--jux-brand-accent-from: #0bc15c;
|
|
298
|
+
--jux-brand-accent-to: #089e48;
|
|
299
|
+
|
|
300
|
+
--jux-surface-from: #ffffff;
|
|
301
|
+
--jux-surface-to: #f0f2f5;
|
|
302
|
+
|
|
303
|
+
--jux-text-from: #050505;
|
|
304
|
+
--jux-text-to: #65676b;
|
|
305
|
+
|
|
306
|
+
--jux-border-from: #ced0d4;
|
|
307
|
+
--jux-border-to: #bcc0c4;
|
|
308
|
+
|
|
309
|
+
/* Radius - Moderate, friendly */
|
|
310
|
+
--jux-radius-sharp: 0;
|
|
311
|
+
--jux-radius-sm: 0.375rem;
|
|
312
|
+
--jux-radius-md: 0.5rem;
|
|
313
|
+
--jux-radius-lg: 0.75rem;
|
|
314
|
+
--jux-radius-xl: 1rem;
|
|
315
|
+
--jux-radius-2xl: 1.25rem;
|
|
316
|
+
--jux-radius-full: 9999px;
|
|
317
|
+
|
|
318
|
+
/* Spacing - Balanced */
|
|
319
|
+
--jux-space-xs: 0.25rem;
|
|
320
|
+
--jux-space-sm: 0.5rem;
|
|
321
|
+
--jux-space-md: 1rem;
|
|
322
|
+
--jux-space-lg: 1.5rem;
|
|
323
|
+
--jux-space-xl: 2rem;
|
|
324
|
+
--jux-space-2xl: 3rem;
|
|
325
|
+
--jux-space-3xl: 4rem;
|
|
326
|
+
|
|
327
|
+
/* Typography - Optimistic Display */
|
|
328
|
+
--jux-font-sans: "Optimistic Display", -apple-system, BlinkMacSystemFont, sans-serif;
|
|
329
|
+
--jux-weight-normal: 400;
|
|
330
|
+
--jux-weight-medium: 500;
|
|
331
|
+
--jux-weight-semibold: 600;
|
|
332
|
+
--jux-weight-bold: 700;
|
|
333
|
+
|
|
334
|
+
/* Burn Factors - Standard */
|
|
335
|
+
--jux-burn-subtle: 0.03;
|
|
336
|
+
--jux-burn-hover: 0.06;
|
|
337
|
+
--jux-burn-active: 0.12;
|
|
338
|
+
--jux-burn-muted: 0.25;
|
|
339
|
+
--jux-burn-strong: 0.5;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
[data-swag="meta"][data-mode="dark"] {
|
|
343
|
+
--jux-brand-from: #2e89ff;
|
|
344
|
+
--jux-brand-to: #0866ff;
|
|
345
|
+
--jux-brand-accent-from: #0bc15c;
|
|
346
|
+
--jux-brand-accent-to: #089e48;
|
|
347
|
+
|
|
348
|
+
--jux-surface-from: #18191a;
|
|
349
|
+
--jux-surface-to: #242526;
|
|
350
|
+
|
|
351
|
+
--jux-text-from: #e4e6eb;
|
|
352
|
+
--jux-text-to: #b0b3b8;
|
|
353
|
+
|
|
354
|
+
--jux-border-from: #3a3b3c;
|
|
355
|
+
--jux-border-to: #4e4f50;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
/* ══════════════════════════════════════════════════════════════════
|
|
359
|
+
📝 NOTION - Clean, Minimal, Functional
|
|
360
|
+
══════════════════════════════════════════════════════════════════ */
|
|
361
|
+
|
|
362
|
+
[data-swag="notion"][data-mode="light"] {
|
|
363
|
+
--jux-brand-from: #000000;
|
|
364
|
+
--jux-brand-to: #2e2e2e;
|
|
365
|
+
--jux-brand-accent-from: #0f7b6c;
|
|
366
|
+
--jux-brand-accent-to: #0a5a4f;
|
|
367
|
+
|
|
368
|
+
--jux-surface-from: #ffffff;
|
|
369
|
+
--jux-surface-to: #f7f6f3;
|
|
370
|
+
|
|
371
|
+
--jux-text-from: #37352f;
|
|
372
|
+
--jux-text-to: #9b9a97;
|
|
373
|
+
|
|
374
|
+
--jux-border-from: #e9e9e7;
|
|
375
|
+
--jux-border-to: #d3d1cb;
|
|
376
|
+
|
|
377
|
+
/* Radius - Minimal */
|
|
378
|
+
--jux-radius-sharp: 0;
|
|
379
|
+
--jux-radius-sm: 0.1875rem;
|
|
380
|
+
--jux-radius-md: 0.25rem;
|
|
381
|
+
--jux-radius-lg: 0.375rem;
|
|
382
|
+
--jux-radius-xl: 0.5rem;
|
|
383
|
+
--jux-radius-2xl: 0.75rem;
|
|
384
|
+
--jux-radius-full: 9999px;
|
|
385
|
+
|
|
386
|
+
/* Spacing - Compact, efficient */
|
|
387
|
+
--jux-space-xs: 0.25rem;
|
|
388
|
+
--jux-space-sm: 0.5rem;
|
|
389
|
+
--jux-space-md: 0.75rem;
|
|
390
|
+
--jux-space-lg: 1rem;
|
|
391
|
+
--jux-space-xl: 1.5rem;
|
|
392
|
+
--jux-space-2xl: 2rem;
|
|
393
|
+
--jux-space-3xl: 3rem;
|
|
394
|
+
|
|
395
|
+
/* Typography - Inter-like */
|
|
396
|
+
--jux-font-sans: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
397
|
+
--jux-weight-normal: 400;
|
|
398
|
+
--jux-weight-medium: 500;
|
|
399
|
+
--jux-weight-semibold: 600;
|
|
400
|
+
--jux-weight-bold: 700;
|
|
401
|
+
|
|
402
|
+
/* Burn Factors - Very subtle (Notion is understated) */
|
|
403
|
+
--jux-burn-subtle: 0.02;
|
|
404
|
+
--jux-burn-hover: 0.04;
|
|
405
|
+
--jux-burn-active: 0.08;
|
|
406
|
+
--jux-burn-muted: 0.35;
|
|
407
|
+
--jux-burn-strong: 0.6;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
[data-swag="notion"][data-mode="dark"] {
|
|
411
|
+
--jux-brand-from: #ffffff;
|
|
412
|
+
--jux-brand-to: #e0e0e0;
|
|
413
|
+
--jux-brand-accent-from: #0f7b6c;
|
|
414
|
+
--jux-brand-accent-to: #0a5a4f;
|
|
415
|
+
|
|
416
|
+
--jux-surface-from: #191919;
|
|
417
|
+
--jux-surface-to: #2f2f2f;
|
|
418
|
+
|
|
419
|
+
--jux-text-from: #ffffff;
|
|
420
|
+
--jux-text-to: #9b9a97;
|
|
421
|
+
|
|
422
|
+
--jux-border-from: #373737;
|
|
423
|
+
--jux-border-to: #4a4a4a;
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
/* ══════════════════════════════════════════════════════════════════
|
|
427
|
+
🎯 DEFAULT FALLBACK - Neutral, System-Based
|
|
428
|
+
══════════════════════════════════════════════════════════════════ */
|
|
429
|
+
|
|
430
|
+
:root:not([data-swag]),
|
|
431
|
+
[data-swag="default"] {
|
|
432
|
+
/* Inherits from foundation.css defaults */
|
|
433
|
+
/* This ensures the system works even if no theme is selected */
|
|
434
|
+
}
|