@imagineio/configurator-sdk 0.1.0-beta.1
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/LICENSE.md +294 -0
- package/README.md +103 -0
- package/dist/00a41227ff.js +1 -0
- package/dist/00ab3dcbb5.js +1 -0
- package/dist/01a664fa9f.css +51 -0
- package/dist/04746bff9a.js +1 -0
- package/dist/04931f795e.js +1 -0
- package/dist/05973a4da2.js +3 -0
- package/dist/061b81ad81.js +1 -0
- package/dist/066fc9aa40.js +1 -0
- package/dist/09c4973968.js +1 -0
- package/dist/0a35b2c5f4.js +1 -0
- package/dist/0af28430ab.js +1 -0
- package/dist/0e2dedae0d.js +1 -0
- package/dist/0f7c8345a8.js +1 -0
- package/dist/12b8165d6d.js +1 -0
- package/dist/1458417bdb.js +1 -0
- package/dist/14c83bc57a.js +1 -0
- package/dist/15d6bec3b5.css +150 -0
- package/dist/16a399703e.js +1 -0
- package/dist/17876f4322.css +114 -0
- package/dist/1870fc037b.js +1 -0
- package/dist/1a2629800a.css +196 -0
- package/dist/1e243363f6.js +1 -0
- package/dist/1fac915f8b.js +1 -0
- package/dist/1fff100656.js +1 -0
- package/dist/205827c5c8.js +1 -0
- package/dist/20b0104576.js +1 -0
- package/dist/2239b22616.js +1 -0
- package/dist/22bd38ddcf.js +1 -0
- package/dist/239b619005.css +1849 -0
- package/dist/23dc0ccf32.js +1 -0
- package/dist/26155bf68c.js +1 -0
- package/dist/2774152dd2.js +1 -0
- package/dist/27fee7007f.js +1 -0
- package/dist/281cf952fa.js +1 -0
- package/dist/28a9d58274.js +1 -0
- package/dist/28d887bf8a.js +1 -0
- package/dist/28df2aa12f.js +1 -0
- package/dist/297e653adf.js +1 -0
- package/dist/2990ba64d6.js +1 -0
- package/dist/2b6aa27f6d.js +1 -0
- package/dist/2c7c1bcef1.js +1 -0
- package/dist/2cab5c5c23.js +1 -0
- package/dist/2cafe3274b.js +1 -0
- package/dist/2e366d7386.js +1 -0
- package/dist/2f8cc8b292.js +1 -0
- package/dist/30be653f00.css +110 -0
- package/dist/31ea036f5c.js +1 -0
- package/dist/32861ea2b0.js +1 -0
- package/dist/33fa2c8ca2.js +1 -0
- package/dist/35d8449ed8.js +1 -0
- package/dist/3656ffa1b8.js +1 -0
- package/dist/367a479d3a.js +1 -0
- package/dist/371ed78aa2.js +1 -0
- package/dist/37596ace72.js +1 -0
- package/dist/37addc7fb3.js +1 -0
- package/dist/388cadacbd.js +1 -0
- package/dist/39a62ef7b8.js +1 -0
- package/dist/3bbcee0334.js +1 -0
- package/dist/3c916f744f.js +1 -0
- package/dist/3f37665dd1.js +1 -0
- package/dist/3fb3ab6757.js +1 -0
- package/dist/40d6aeb28c.js +1 -0
- package/dist/41ed5985ad.js +1 -0
- package/dist/431a2d8618.js +1 -0
- package/dist/44a229099f.js +1 -0
- package/dist/4741e5d07d.css +263 -0
- package/dist/4910c07ca8.css +411 -0
- package/dist/4a99ddb3fd.js +1 -0
- package/dist/4aa671f9f6.js +1 -0
- package/dist/4b8958aa4c.js +1 -0
- package/dist/4ba4f544b9.js +1 -0
- package/dist/4c24338793.js +1 -0
- package/dist/4d7a0d1897.js +1 -0
- package/dist/4e1db1e3b0.js +1 -0
- package/dist/4e7d0a0d4a.js +1 -0
- package/dist/51b23203e5.css +1447 -0
- package/dist/52436e0169.js +1 -0
- package/dist/54413c1eae.js +1 -0
- package/dist/54f0fcf38b.js +1 -0
- package/dist/55ab45ada4.css +370 -0
- package/dist/561dc3f1ab.js +1 -0
- package/dist/58e6419ba8.js +1 -0
- package/dist/5c9fd9201c.js +1 -0
- package/dist/5d05e8982e.js +1 -0
- package/dist/5d5e8a9c58.js +3 -0
- package/dist/5e4f2349ff.js +1 -0
- package/dist/609e5e5d28.js +1 -0
- package/dist/60d697292c.js +1 -0
- package/dist/61e0c0c9b5.js +1 -0
- package/dist/631a9f7fac.js +1 -0
- package/dist/64e9020b49.js +1 -0
- package/dist/66c461dc2c.js +1 -0
- package/dist/672404d987.js +1 -0
- package/dist/67f6338a4a.js +1 -0
- package/dist/6855e6a3b1.js +1 -0
- package/dist/6b0a81e4f8.js +1 -0
- package/dist/6ba86aa3b8.js +1 -0
- package/dist/6bff84d27e.js +1 -0
- package/dist/6c0a2572dd.js +1 -0
- package/dist/6d238282c1.js +1 -0
- package/dist/6e2595aa36.js +1 -0
- package/dist/6f9ae59d6c.js +1 -0
- package/dist/70dd811d74.js +1 -0
- package/dist/710c1ab641.js +1 -0
- package/dist/7206ce49c6.js +1 -0
- package/dist/7281d77ed9.js +1 -0
- package/dist/73f7d65985.js +1 -0
- package/dist/776277593f.js +1 -0
- package/dist/79a397bb92.js +1 -0
- package/dist/7a748aae59.js +1 -0
- package/dist/7bfb0ecfbb.css +572 -0
- package/dist/7bfcd0a517.js +1 -0
- package/dist/7d9ddaeb47.js +1 -0
- package/dist/7f833bc5af.js +1 -0
- package/dist/811b403d43.js +1 -0
- package/dist/817d930a49.js +1 -0
- package/dist/81802759ca.js +1 -0
- package/dist/81eb433604.js +1 -0
- package/dist/82a8a4bc35.js +1 -0
- package/dist/85af90fade.js +1 -0
- package/dist/872c4302e0.js +1 -0
- package/dist/87bb469216.js +1 -0
- package/dist/87dcc12b65.js +1 -0
- package/dist/87f511c4a8.js +1 -0
- package/dist/88251d6671.js +1 -0
- package/dist/882bc739c8.js +1 -0
- package/dist/89ab18ebc5.js +1 -0
- package/dist/8a22e8944f.css +563 -0
- package/dist/8a3a57c008.js +1 -0
- package/dist/8ade32d067.js +1 -0
- package/dist/8bf6d26ad6.css +233 -0
- package/dist/8c27edda0f.js +1 -0
- package/dist/8db8655f21.js +24 -0
- package/dist/8f60e5059a.js +1 -0
- package/dist/91707f5ca0.css +78 -0
- package/dist/921bf270dd.js +20 -0
- package/dist/9326c23506.js +1 -0
- package/dist/94a0a79c65.js +1 -0
- package/dist/9526094bb7.js +1 -0
- package/dist/9544661159.js +1 -0
- package/dist/95a44ebec2.js +1 -0
- package/dist/970313b92b.js +1 -0
- package/dist/9794652102.js +1 -0
- package/dist/983cbed22c.js +1 -0
- package/dist/9840b9ce12.js +1 -0
- package/dist/98f3644031.js +1 -0
- package/dist/992778075d.css +353 -0
- package/dist/9c6c598569.js +1 -0
- package/dist/9f474b5d1a.js +1 -0
- package/dist/a0f71d0bf5.js +1 -0
- package/dist/a3c983d431.js +1 -0
- package/dist/a3f18e76fe.js +1 -0
- package/dist/a493e9aa8f.js +1 -0
- package/dist/a77b15c0d6.js +1 -0
- package/dist/a811c90bd5.js +1 -0
- package/dist/a822c5e4f2.js +1 -0
- package/dist/aaa0e82d7f.css +69 -0
- package/dist/ab6c80484f.js +1 -0
- package/dist/ae96f219e3.js +1 -0
- package/dist/b11b38869d.css +427 -0
- package/dist/b1349d5a21.js +4 -0
- package/dist/b14379d31b.css +151 -0
- package/dist/b3efb26fd7.js +1 -0
- package/dist/b59b0dde17.js +1 -0
- package/dist/b5c372377f.js +1 -0
- package/dist/b976df09ec.js +1 -0
- package/dist/baeaed46c9.js +1 -0
- package/dist/bb719febc6.js +1 -0
- package/dist/bcd44b4040.js +1 -0
- package/dist/bdc4e4c5b9.css +209 -0
- package/dist/bdec200d00.js +1 -0
- package/dist/be0cfe2236.js +1 -0
- package/dist/be337ddda5.js +1 -0
- package/dist/c12c112c6f.js +1 -0
- package/dist/c2a14a77ae.js +1 -0
- package/dist/c3b8f1973b.js +1 -0
- package/dist/c44d37da7a.js +1 -0
- package/dist/c4790179f1.js +1 -0
- package/dist/c5e990946e.js +1 -0
- package/dist/c71892453b.js +1 -0
- package/dist/c9a1656c62.js +1 -0
- package/dist/ca497b066c.js +1 -0
- package/dist/cdb4a0f7b3.js +3 -0
- package/dist/ce663020e4.js +60 -0
- package/dist/cec035efb1.js +1 -0
- package/dist/d0f9681634.js +1 -0
- package/dist/d118c2e7ba.js +1 -0
- package/dist/d20718159b.js +3 -0
- package/dist/d30f1f506e.js +1 -0
- package/dist/d3cd7f1bc1.js +1 -0
- package/dist/d4378d9afa.js +1 -0
- package/dist/d464da28a5.js +1 -0
- package/dist/d566d3874b.js +1 -0
- package/dist/d617bbb9f5.js +26 -0
- package/dist/d65f32e004.js +1 -0
- package/dist/d6851ea979.js +1 -0
- package/dist/d7c9500ba9.js +1 -0
- package/dist/d803155241.js +1 -0
- package/dist/d903df4e0d.js +1 -0
- package/dist/d94df858ea.js +1 -0
- package/dist/da7b5f450d.js +1 -0
- package/dist/daa11edd01.js +1 -0
- package/dist/db4afd43c9.js +1 -0
- package/dist/dbd5ba1d07.js +1 -0
- package/dist/dc2a1a0e13.js +1 -0
- package/dist/dc812f3e14.js +1 -0
- package/dist/dcbf419090.css +122 -0
- package/dist/dcdba78ddf.js +1 -0
- package/dist/de408c4516.js +1 -0
- package/dist/e1cd279733.js +1 -0
- package/dist/e379e0039b.js +1 -0
- package/dist/e4fe0551fd.js +1 -0
- package/dist/e6eed481cc.css +28 -0
- package/dist/e75f1e5992.js +1 -0
- package/dist/ea8577d22b.js +1 -0
- package/dist/ec4a34fc80.css +313 -0
- package/dist/ed6a54cdf6.js +1 -0
- package/dist/ee242c0099.js +1 -0
- package/dist/ee9b9fd7d1.js +1 -0
- package/dist/f0c3d8a28a.js +1 -0
- package/dist/f11a45a150.js +1 -0
- package/dist/f1b3b2622a.js +1 -0
- package/dist/f7b4a178e3.js +1 -0
- package/dist/f89d7cd931.js +1 -0
- package/dist/f8cb80a93c.js +1 -0
- package/dist/f8fec86f10.js +1 -0
- package/dist/fbd844f2d1.js +1 -0
- package/dist/fe235d7160.js +1 -0
- package/dist/fe58a84b85.js +1 -0
- package/dist/fe68b361ba.js +1 -0
- package/dist/ff5b3d17e2.js +1 -0
- package/dist/styles/globals.css +442 -0
- package/dist/styles/themes.css +532 -0
- package/dist/styles/variables.css +299 -0
- package/package.json +68 -0
- package/static/assets/draco/README.md +32 -0
- package/static/assets/draco/draco_decoder.js +34 -0
- package/static/assets/draco/draco_decoder.wasm +0 -0
- package/static/assets/draco/draco_encoder.js +35 -0
- package/static/assets/draco/draco_encoder.wasm +0 -0
- package/static/assets/draco/draco_encoder_wrapper.js +98 -0
- package/static/assets/draco/draco_wasm_wrapper.js +117 -0
- package/static/favicon.svg +28 -0
- package/static/version.txt +1 -0
|
@@ -0,0 +1,563 @@
|
|
|
1
|
+
@layer sdk-base, vendor, sdk;
|
|
2
|
+
@layer sdk {
|
|
3
|
+
/* ============================================================================
|
|
4
|
+
WizardLayout — self-contained styles for the structural "wizard" shell:
|
|
5
|
+
full-width top header, horizontal step-tabs, right-docked panel, floating
|
|
6
|
+
price. Deliberately NOT dependent on data-theme — it's its own complete look
|
|
7
|
+
(a warm, editorial neutral palette). The embedded Sidebar's option cards keep
|
|
8
|
+
using the base tokens, which sit cleanly on this palette.
|
|
9
|
+
============================================================================ */
|
|
10
|
+
|
|
11
|
+
.wizard-layout {
|
|
12
|
+
/* Each literal is the fallback; a theme record's --color-* (set by applyTheme)
|
|
13
|
+
overrides it. Byte-identical to the literals when no theme is applied. */
|
|
14
|
+
--wz-bg: var(--color-background, #eceae6); /* scene backdrop */
|
|
15
|
+
--wz-surface: var(--color-surface, #ffffff); /* panel */
|
|
16
|
+
--wz-header: var(--color-surface, #f4f1ec); /* header bar (warm cream) */
|
|
17
|
+
--wz-ink: var(--color-foreground, #2b2724); /* primary text */
|
|
18
|
+
--wz-ink-soft: var(--color-secondary, #6f665d); /* secondary text */
|
|
19
|
+
--wz-line: var(--color-border, #e4ddd3); /* hairlines */
|
|
20
|
+
--wz-accent: var(--color-accent, var(--color-brand-primary, #8a6a45)); /* warm brown accent */
|
|
21
|
+
--wz-accent-soft: rgba(var(--color-brand-primary-rgb, 138, 106, 69), 0.12); /* rgba can't derive from a hex var — keep literal */
|
|
22
|
+
|
|
23
|
+
/* Floating AI chat FAB → this theme's accent (matches the CTA colour). */
|
|
24
|
+
--shell-fab-bg: var(--wz-accent);
|
|
25
|
+
--shell-fab-bg-strong: var(--text-primary, #74562f);
|
|
26
|
+
/* Mobile FAB clearance: this theme pins a Back/Next bar at the bottom of the panel. */
|
|
27
|
+
--shell-fab-bottom-m: 74px;
|
|
28
|
+
|
|
29
|
+
/* Remap the shared design tokens the embedded Sidebar/cards read, so ALL of
|
|
30
|
+
their text + selection colours follow this theme instead of the base grey +
|
|
31
|
+
blue. Inherited by every descendant of .wizard-layout. */
|
|
32
|
+
--color-selection: var(--wz-accent);
|
|
33
|
+
--color-selection-rgb: 138, 106, 69;
|
|
34
|
+
--color-selection-light: var(--wz-accent-soft);
|
|
35
|
+
--color-selection-medium: rgba(var(--color-brand-primary-rgb, 138, 106, 69), 0.22);
|
|
36
|
+
--color-selection-border: rgba(var(--color-brand-primary-rgb, 138, 106, 69), 0.5);
|
|
37
|
+
--border-selected: var(--wz-accent);
|
|
38
|
+
--thumbnail-border-selected: var(--wz-accent);
|
|
39
|
+
--thumbnail-border-hover: var(--wz-accent);
|
|
40
|
+
--text-link: var(--wz-accent);
|
|
41
|
+
--icon-color-active: var(--wz-accent);
|
|
42
|
+
--slider-thumb-bg: var(--wz-accent);
|
|
43
|
+
--color-neutral-900: var(--wz-ink);
|
|
44
|
+
--color-neutral-800: var(--wz-ink);
|
|
45
|
+
--color-neutral-700: var(--wz-ink-soft);
|
|
46
|
+
--color-neutral-600: var(--wz-ink-soft);
|
|
47
|
+
--text-primary: var(--wz-ink);
|
|
48
|
+
--text-secondary: var(--wz-ink-soft);
|
|
49
|
+
|
|
50
|
+
position: relative;
|
|
51
|
+
display: flex;
|
|
52
|
+
flex-direction: column;
|
|
53
|
+
height: 100%;
|
|
54
|
+
overflow: hidden;
|
|
55
|
+
background: var(--wz-bg);
|
|
56
|
+
color: var(--wz-ink);
|
|
57
|
+
font-family: var(--font-family-base);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/* ---------------------------------------------------------------------------------------------
|
|
61
|
+
THE SAME PALETTE ON A DARK PRESET.
|
|
62
|
+
|
|
63
|
+
Every literal above is a LIGHT-mode fallback, reached whenever the theme record ships no
|
|
64
|
+
`--color-*` — which the shared dark skin (styles/themes.css) never does: it remaps the generic
|
|
65
|
+
tokens (--text-primary, --bg-primary, --border-default …), not the --color-* family. So on a
|
|
66
|
+
dark preset this shell kept its near-black ink, and because the block above re-exports
|
|
67
|
+
`--text-primary: var(--<x>-ink)`, it also OVERWROTE the dark skin's light text for every
|
|
68
|
+
descendant. Anything mounted inside the shell that inherits its colour — the live-status
|
|
69
|
+
panel, the chat bar — rendered dark-on-dark: present, sized, unreadable.
|
|
70
|
+
|
|
71
|
+
Same failure mode as the --*-ink cycle documented above, reached by a different route, so the
|
|
72
|
+
repair is the same shape: end the chain in a literal, and let a theme's own --color-* still
|
|
73
|
+
win by keeping the var() in front of it.
|
|
74
|
+
--------------------------------------------------------------------------------------------- */
|
|
75
|
+
:root[data-theme-mode="dark"] .wizard-layout {
|
|
76
|
+
--wz-bg: var(--color-background, #17171a);
|
|
77
|
+
--wz-surface: var(--color-surface, #1e1e22);
|
|
78
|
+
--wz-header: var(--color-surface, #202024);
|
|
79
|
+
--wz-ink: var(--color-foreground, #f2f2f4);
|
|
80
|
+
--wz-ink-soft: var(--color-secondary, #b8b8be);
|
|
81
|
+
--wz-line: var(--color-border, #34343a);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/* ---- Top header bar ---- */
|
|
85
|
+
.wizard-header {
|
|
86
|
+
flex: 0 0 auto;
|
|
87
|
+
display: flex;
|
|
88
|
+
align-items: center;
|
|
89
|
+
justify-content: space-between;
|
|
90
|
+
height: 64px;
|
|
91
|
+
padding: 0 22px;
|
|
92
|
+
background: var(--wz-header);
|
|
93
|
+
border-bottom: 1px solid var(--wz-line);
|
|
94
|
+
z-index: 5;
|
|
95
|
+
}
|
|
96
|
+
.wizard-header__brand { display: flex; align-items: center; gap: 12px; }
|
|
97
|
+
.wizard-header__logo { width: 26px; height: 24px; color: var(--wz-accent); }
|
|
98
|
+
.wizard-header__divider { width: 1px; height: 22px; background: var(--wz-line); }
|
|
99
|
+
.wizard-header__title {
|
|
100
|
+
font-size: 15px;
|
|
101
|
+
font-weight: 600;
|
|
102
|
+
letter-spacing: 0.2px;
|
|
103
|
+
color: var(--wz-ink);
|
|
104
|
+
}
|
|
105
|
+
.wizard-header__actions { display: flex; align-items: center; gap: 10px; }
|
|
106
|
+
|
|
107
|
+
/* CTA — outlined, uppercase, brand-accent (like "VISUALIZE IN LIFESTYLE") */
|
|
108
|
+
.wizard-header__cta {
|
|
109
|
+
display: inline-flex;
|
|
110
|
+
align-items: center;
|
|
111
|
+
gap: 8px;
|
|
112
|
+
height: 40px;
|
|
113
|
+
padding: 0 18px;
|
|
114
|
+
border: 1px solid var(--wz-accent);
|
|
115
|
+
border-radius: 3px;
|
|
116
|
+
background: transparent;
|
|
117
|
+
color: var(--wz-accent);
|
|
118
|
+
font-size: 12px;
|
|
119
|
+
font-weight: 600;
|
|
120
|
+
letter-spacing: 0.8px;
|
|
121
|
+
text-transform: uppercase;
|
|
122
|
+
cursor: pointer;
|
|
123
|
+
transition: background 0.15s, color 0.15s;
|
|
124
|
+
}
|
|
125
|
+
.wizard-header__cta:hover { background: var(--wz-accent); color: var(--bg-primary, #fff); }
|
|
126
|
+
.wizard-header__save {
|
|
127
|
+
display: inline-flex;
|
|
128
|
+
align-items: center;
|
|
129
|
+
gap: 7px;
|
|
130
|
+
height: 40px;
|
|
131
|
+
padding: 0 15px;
|
|
132
|
+
border: 1px solid var(--wz-line);
|
|
133
|
+
border-radius: 3px;
|
|
134
|
+
background: var(--bg-primary, #fff);
|
|
135
|
+
color: var(--wz-ink-soft);
|
|
136
|
+
font-size: 12px;
|
|
137
|
+
font-weight: 600;
|
|
138
|
+
letter-spacing: 0.4px;
|
|
139
|
+
white-space: nowrap;
|
|
140
|
+
cursor: pointer;
|
|
141
|
+
transition: border-color 0.15s, color 0.15s;
|
|
142
|
+
}
|
|
143
|
+
.wizard-header__save:hover { border-color: var(--wz-accent); color: var(--wz-accent); }
|
|
144
|
+
.wizard-header__save .save-btn__icon { width: 15px; height: 15px; flex-shrink: 0; }
|
|
145
|
+
|
|
146
|
+
/* ---- Body: scene (left) + docked panel (right) ---- */
|
|
147
|
+
.wizard-body {
|
|
148
|
+
flex: 1 1 auto;
|
|
149
|
+
display: flex;
|
|
150
|
+
min-height: 0;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.wizard-scene {
|
|
154
|
+
flex: 1 1 auto;
|
|
155
|
+
min-width: 0;
|
|
156
|
+
position: relative;
|
|
157
|
+
overflow: hidden;
|
|
158
|
+
background: var(--wz-bg);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/* The scene action toolbar (2D / dimensions / walls / fullscreen / AR) renders
|
|
162
|
+
as `.header__toolbar`, which is normally positioned by living inside the
|
|
163
|
+
floating header. Standalone in the wizard scene it has no position, so float
|
|
164
|
+
it top-right over the canvas like the reference. */
|
|
165
|
+
.wizard-scene .header__toolbar {
|
|
166
|
+
position: absolute;
|
|
167
|
+
top: 16px;
|
|
168
|
+
right: 16px;
|
|
169
|
+
z-index: 4;
|
|
170
|
+
/* Not a single pill — each action is its own outlined box, spaced apart. */
|
|
171
|
+
background: transparent;
|
|
172
|
+
box-shadow: none;
|
|
173
|
+
border-radius: 0;
|
|
174
|
+
padding: 0;
|
|
175
|
+
gap: 8px;
|
|
176
|
+
}
|
|
177
|
+
.wizard-scene .header__toolbar-btn {
|
|
178
|
+
width: 40px;
|
|
179
|
+
height: 40px;
|
|
180
|
+
border: 1px solid var(--wz-line);
|
|
181
|
+
border-radius: 6px;
|
|
182
|
+
background: var(--bg-primary, #fff);
|
|
183
|
+
color: var(--wz-accent);
|
|
184
|
+
box-shadow: 0 2px 8px -3px rgba(var(--text-primary-rgb, 43, 39, 36), 0.16);
|
|
185
|
+
transition: border-color 0.15s, color 0.15s, background 0.15s;
|
|
186
|
+
}
|
|
187
|
+
.wizard-scene .header__toolbar-btn:hover {
|
|
188
|
+
border-color: var(--wz-accent);
|
|
189
|
+
background: var(--bg-primary, #fff);
|
|
190
|
+
color: var(--wz-accent);
|
|
191
|
+
}
|
|
192
|
+
.wizard-scene .header__toolbar-btn--active {
|
|
193
|
+
border-color: var(--wz-accent);
|
|
194
|
+
background: var(--wz-accent-soft);
|
|
195
|
+
color: var(--wz-accent);
|
|
196
|
+
box-shadow: none;
|
|
197
|
+
}
|
|
198
|
+
.wizard-scene .header__toolbar-btn svg { width: 18px; height: 18px; }
|
|
199
|
+
.wizard-scene .header__toolbar-label { font-size: 11px; font-weight: 700; }
|
|
200
|
+
|
|
201
|
+
/* Floating price box — bottom-LEFT corner of the scene, with the AI chat FAB
|
|
202
|
+
stacked ABOVE it (see the desktop @media rule below). The LiveStatus panel is on
|
|
203
|
+
the RIGHT, so the three overlays never share a corner. */
|
|
204
|
+
.wizard-price {
|
|
205
|
+
position: absolute;
|
|
206
|
+
left: 22px;
|
|
207
|
+
/* 56, not 22: the bottom-left corner belongs to the SDK watermark ("Powered by
|
|
208
|
+
imagine.io", ~35px tall + 14px offset, not configurable) — at 22px this chip sat
|
|
209
|
+
on top of it (user-reported clash). The whole left stack shifts up with it. */
|
|
210
|
+
bottom: 56px;
|
|
211
|
+
display: flex;
|
|
212
|
+
flex-direction: column;
|
|
213
|
+
align-items: flex-start;
|
|
214
|
+
gap: 2px;
|
|
215
|
+
padding: 12px 18px;
|
|
216
|
+
background: var(--bg-primary, #fff);
|
|
217
|
+
border: 1px solid var(--wz-line);
|
|
218
|
+
border-radius: 4px;
|
|
219
|
+
box-shadow: 0 8px 24px -8px rgba(var(--text-primary-rgb, 43, 39, 36), 0.18);
|
|
220
|
+
z-index: 4;
|
|
221
|
+
}
|
|
222
|
+
/* Mark hidden → the whole bottom-left stack drops by the 34px of clearance: the chip to
|
|
223
|
+
the corner it was drawn for, and the FAB + popup that sit on top of it by the same. */
|
|
224
|
+
html[data-watermark="off"] .wizard-price { bottom: 22px; }
|
|
225
|
+
.wizard-price__label {
|
|
226
|
+
font-size: 10px;
|
|
227
|
+
font-weight: 600;
|
|
228
|
+
letter-spacing: 1px;
|
|
229
|
+
color: var(--wz-ink-soft);
|
|
230
|
+
}
|
|
231
|
+
.wizard-price__value {
|
|
232
|
+
font-size: 20px;
|
|
233
|
+
font-weight: 700;
|
|
234
|
+
color: var(--wz-ink);
|
|
235
|
+
}
|
|
236
|
+
/* Desktop: chat FAB sits ON TOP of the price box in the bottom-left stack (price is
|
|
237
|
+
in the corner at bottom:22; the FAB floats just above it). Desktop-only so the
|
|
238
|
+
mobile fixed/raised FAB is untouched. */
|
|
239
|
+
@media (min-width: 769px) {
|
|
240
|
+
.wizard-scene .shell-chat-fab { bottom: 130px; } /* +34 with the price chip (watermark clearance) */
|
|
241
|
+
.wizard-scene .shell-chat-pop { bottom: 196px; }
|
|
242
|
+
html[data-watermark="off"] .wizard-scene .shell-chat-fab { bottom: 96px; }
|
|
243
|
+
html[data-watermark="off"] .wizard-scene .shell-chat-pop { bottom: 162px; }
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/* ---- Right docked panel ---- */
|
|
247
|
+
.wizard-panel {
|
|
248
|
+
/* NOTE: keep the size on `width`, NOT inside the `flex` shorthand — clamp() in
|
|
249
|
+
the flex-basis shorthand fails to parse in some engines, which drops the whole
|
|
250
|
+
declaration and lets the panel size to its (wide) content, squeezing the scene. */
|
|
251
|
+
flex: 0 0 auto;
|
|
252
|
+
width: clamp(340px, 26vw, 460px);
|
|
253
|
+
display: flex;
|
|
254
|
+
flex-direction: column;
|
|
255
|
+
min-width: 0;
|
|
256
|
+
min-height: 0;
|
|
257
|
+
background: var(--wz-surface);
|
|
258
|
+
border-left: 1px solid var(--wz-line);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/* Step tabs — numbered, across the top of the panel */
|
|
262
|
+
.wizard-steps {
|
|
263
|
+
flex: 0 0 auto;
|
|
264
|
+
display: flex;
|
|
265
|
+
border-bottom: 1px solid var(--wz-line);
|
|
266
|
+
overflow-x: auto;
|
|
267
|
+
scrollbar-width: none;
|
|
268
|
+
}
|
|
269
|
+
.wizard-steps::-webkit-scrollbar { display: none; }
|
|
270
|
+
.wizard-step {
|
|
271
|
+
flex: 1 0 auto;
|
|
272
|
+
display: flex;
|
|
273
|
+
flex-direction: column;
|
|
274
|
+
align-items: center;
|
|
275
|
+
gap: 3px;
|
|
276
|
+
padding: 14px 16px 12px;
|
|
277
|
+
border: none;
|
|
278
|
+
border-bottom: 2px solid transparent;
|
|
279
|
+
background: transparent;
|
|
280
|
+
cursor: pointer;
|
|
281
|
+
white-space: nowrap;
|
|
282
|
+
transition: color 0.15s, border-color 0.15s;
|
|
283
|
+
}
|
|
284
|
+
.wizard-step__num {
|
|
285
|
+
font-size: 11px;
|
|
286
|
+
font-weight: 600;
|
|
287
|
+
letter-spacing: 0.5px;
|
|
288
|
+
color: var(--wz-accent);
|
|
289
|
+
opacity: 0.7;
|
|
290
|
+
}
|
|
291
|
+
.wizard-step__label {
|
|
292
|
+
font-size: 14px;
|
|
293
|
+
font-weight: 500;
|
|
294
|
+
color: var(--wz-accent);
|
|
295
|
+
opacity: 0.68;
|
|
296
|
+
}
|
|
297
|
+
.wizard-step--done .wizard-step__label { opacity: 0.85; }
|
|
298
|
+
.wizard-step--active { border-bottom-color: var(--wz-accent); }
|
|
299
|
+
.wizard-step--active .wizard-step__num { opacity: 1; }
|
|
300
|
+
.wizard-step--active .wizard-step__label { color: var(--wz-accent); font-weight: 700; opacity: 1; }
|
|
301
|
+
.wizard-step:disabled { cursor: default; opacity: 0.55; }
|
|
302
|
+
|
|
303
|
+
/* Panel body — hosts the embedded Sidebar (scrolls) */
|
|
304
|
+
.wizard-panel__body { flex: 1 1 auto; min-height: 0; min-width: 0; overflow-x: hidden; display: flex; flex-direction: column; }
|
|
305
|
+
.wizard-panel__body .sidebar--embedded {
|
|
306
|
+
flex: 1 1 auto;
|
|
307
|
+
min-height: 0;
|
|
308
|
+
display: flex;
|
|
309
|
+
flex-direction: column;
|
|
310
|
+
width: 100%;
|
|
311
|
+
background: transparent;
|
|
312
|
+
}
|
|
313
|
+
.wizard-panel__body .sidebar--embedded .sidebar__content {
|
|
314
|
+
flex: 1 1 auto;
|
|
315
|
+
overflow-y: auto;
|
|
316
|
+
padding: 18px 20px;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
/* Section title accent inside the panel */
|
|
320
|
+
.wizard-panel__body .sidebar__section-title {
|
|
321
|
+
color: var(--wz-accent);
|
|
322
|
+
letter-spacing: 1.4px;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
/* A few card styles hardcode var(--text-primary, #363636) (text + the option-card selected border)
|
|
326
|
+
instead of tokens — retint the label text to the warm accent (matches the
|
|
327
|
+
toolbar / active-step colour) and the selected border to the accent. */
|
|
328
|
+
.wizard-panel .option-thumbnail__name,
|
|
329
|
+
.wizard-summary .option-thumbnail__name,
|
|
330
|
+
.wizard-panel .color-swatch__name,
|
|
331
|
+
.wizard-summary .color-swatch__name { color: var(--wz-accent); font-weight: 600; }
|
|
332
|
+
.wizard-panel .option-thumbnail--selected,
|
|
333
|
+
.wizard-summary .option-thumbnail--selected { border-color: var(--wz-accent); }
|
|
334
|
+
|
|
335
|
+
/* ---- Card labels: always BELOW the thumbnail (not a hover tooltip/overlay) ----
|
|
336
|
+
The shared card components render their labels as absolute, hover-revealed
|
|
337
|
+
tooltips/overlays. In the wizard we want them static + always visible under
|
|
338
|
+
each card (like the reference). Scoped to the wizard so the default layout is
|
|
339
|
+
unchanged. Covers option (image), finish (swatch) and layout cards. */
|
|
340
|
+
|
|
341
|
+
/* Option cards WITH an image: stack image (top) + label (below) instead of a
|
|
342
|
+
square tile with an overlay label. */
|
|
343
|
+
.wizard-panel .option-thumbnail--has-img,
|
|
344
|
+
.wizard-summary .option-thumbnail--has-img {
|
|
345
|
+
aspect-ratio: auto;
|
|
346
|
+
min-height: 0;
|
|
347
|
+
padding: 0;
|
|
348
|
+
display: flex;
|
|
349
|
+
flex-direction: column;
|
|
350
|
+
overflow: hidden;
|
|
351
|
+
}
|
|
352
|
+
.wizard-panel .option-thumbnail--has-img .option-thumbnail__img,
|
|
353
|
+
.wizard-summary .option-thumbnail--has-img .option-thumbnail__img {
|
|
354
|
+
width: 100%;
|
|
355
|
+
height: auto;
|
|
356
|
+
aspect-ratio: 4 / 3;
|
|
357
|
+
object-fit: cover;
|
|
358
|
+
border-radius: 0;
|
|
359
|
+
}
|
|
360
|
+
.wizard-panel .option-thumbnail__img-label,
|
|
361
|
+
.wizard-summary .option-thumbnail__img-label {
|
|
362
|
+
position: static;
|
|
363
|
+
opacity: 1;
|
|
364
|
+
background: none;
|
|
365
|
+
color: var(--wz-accent);
|
|
366
|
+
text-shadow: none;
|
|
367
|
+
font-size: 11px;
|
|
368
|
+
font-weight: 600;
|
|
369
|
+
line-height: 1.25;
|
|
370
|
+
padding: 6px 4px 7px;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
/* The finish/layout labels were tooltips — their ::after draws the little
|
|
374
|
+
pointer triangle. Now that the label is a static caption, hide that arrow. */
|
|
375
|
+
.wizard-panel .finish-thumbnail__name::after,
|
|
376
|
+
.wizard-summary .finish-thumbnail__name::after,
|
|
377
|
+
.wizard-panel .layout-thumbnail__label::after,
|
|
378
|
+
.wizard-summary .layout-thumbnail__label::after {
|
|
379
|
+
display: none;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
/* Finish (material) cards: reveal the tooltip name as a static caption below. */
|
|
383
|
+
.wizard-panel .finish-thumbnail__name,
|
|
384
|
+
.wizard-summary .finish-thumbnail__name {
|
|
385
|
+
position: static;
|
|
386
|
+
transform: none;
|
|
387
|
+
opacity: 1;
|
|
388
|
+
visibility: visible;
|
|
389
|
+
pointer-events: auto;
|
|
390
|
+
background: none;
|
|
391
|
+
color: var(--wz-accent);
|
|
392
|
+
border-radius: 0;
|
|
393
|
+
white-space: normal;
|
|
394
|
+
box-shadow: none;
|
|
395
|
+
margin: 0;
|
|
396
|
+
padding: 4px 2px 2px;
|
|
397
|
+
font-size: 10px;
|
|
398
|
+
font-weight: 600;
|
|
399
|
+
line-height: 1.2;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
/* Layout cards: same — caption below the preview. */
|
|
403
|
+
.wizard-panel .layout-thumbnail,
|
|
404
|
+
.wizard-summary .layout-thumbnail { display: flex; flex-direction: column; }
|
|
405
|
+
.wizard-panel .layout-thumbnail__label,
|
|
406
|
+
.wizard-summary .layout-thumbnail__label {
|
|
407
|
+
position: static;
|
|
408
|
+
transform: none;
|
|
409
|
+
opacity: 1;
|
|
410
|
+
visibility: visible;
|
|
411
|
+
pointer-events: auto;
|
|
412
|
+
background: none;
|
|
413
|
+
color: var(--wz-accent);
|
|
414
|
+
border-radius: 0;
|
|
415
|
+
white-space: normal;
|
|
416
|
+
box-shadow: none;
|
|
417
|
+
margin: 0;
|
|
418
|
+
padding: 6px 4px 0;
|
|
419
|
+
font-size: 11px;
|
|
420
|
+
font-weight: 600;
|
|
421
|
+
text-align: center;
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
/* ---- Prev / Next controls ---- */
|
|
425
|
+
.wizard-nav {
|
|
426
|
+
flex: 0 0 auto;
|
|
427
|
+
display: flex;
|
|
428
|
+
gap: 10px;
|
|
429
|
+
padding: 14px 20px;
|
|
430
|
+
border-top: 1px solid var(--wz-line);
|
|
431
|
+
}
|
|
432
|
+
.wizard-nav__btn {
|
|
433
|
+
flex: 1;
|
|
434
|
+
height: 44px;
|
|
435
|
+
border-radius: 3px;
|
|
436
|
+
font-size: 13px;
|
|
437
|
+
font-weight: 600;
|
|
438
|
+
letter-spacing: 0.4px;
|
|
439
|
+
cursor: pointer;
|
|
440
|
+
transition: background 0.15s, border-color 0.15s, color 0.15s, opacity 0.15s;
|
|
441
|
+
}
|
|
442
|
+
.wizard-nav__btn--prev {
|
|
443
|
+
border: 1px solid var(--wz-line);
|
|
444
|
+
background: var(--bg-primary, #fff);
|
|
445
|
+
color: var(--wz-ink-soft);
|
|
446
|
+
}
|
|
447
|
+
.wizard-nav__btn--prev:hover:not(:disabled) { border-color: var(--wz-accent); color: var(--wz-accent); }
|
|
448
|
+
.wizard-nav__btn--next {
|
|
449
|
+
border: 1px solid var(--wz-accent);
|
|
450
|
+
background: var(--wz-accent);
|
|
451
|
+
color: var(--bg-primary, #fff);
|
|
452
|
+
}
|
|
453
|
+
.wizard-nav__btn--next:hover:not(:disabled) { background: var(--text-primary, #74562f); border-color: var(--text-primary, #74562f); }
|
|
454
|
+
.wizard-nav__btn:disabled { opacity: 0.4; cursor: default; }
|
|
455
|
+
|
|
456
|
+
/* ---- Summary step ---- */
|
|
457
|
+
.wizard-summary { display: flex; flex-direction: column; min-height: 0; flex: 1 1 auto; }
|
|
458
|
+
.wizard-summary__title {
|
|
459
|
+
margin: 0;
|
|
460
|
+
padding: 18px 20px 6px;
|
|
461
|
+
font-size: 18px;
|
|
462
|
+
font-weight: 700;
|
|
463
|
+
color: var(--wz-ink);
|
|
464
|
+
}
|
|
465
|
+
.wizard-summary__price {
|
|
466
|
+
display: flex;
|
|
467
|
+
align-items: baseline;
|
|
468
|
+
justify-content: space-between;
|
|
469
|
+
margin: 0 20px 4px;
|
|
470
|
+
padding: 12px 0;
|
|
471
|
+
border-bottom: 1px solid var(--wz-line);
|
|
472
|
+
}
|
|
473
|
+
.wizard-summary__price-value { font-size: 24px; font-weight: 800; color: var(--wz-accent); }
|
|
474
|
+
.wizard-summary .sidebar--embedded { flex: 1 1 auto; min-height: 0; }
|
|
475
|
+
/* The review list takes the panel's scroll area, between the price and the actions.
|
|
476
|
+
Its own rules are token-driven (ConfigurationSummary.css); the wizard only owns
|
|
477
|
+
how it sits in this shell. */
|
|
478
|
+
.wizard-summary__list { flex: 1 1 auto; min-height: 0; }
|
|
479
|
+
.wizard-summary__actions { display: flex; gap: 10px; padding: 14px 20px; border-top: 1px solid var(--wz-line); }
|
|
480
|
+
.wizard-summary__cta {
|
|
481
|
+
flex: 1;
|
|
482
|
+
height: 44px;
|
|
483
|
+
border: 1px solid var(--wz-accent);
|
|
484
|
+
border-radius: 3px;
|
|
485
|
+
background: var(--wz-accent);
|
|
486
|
+
color: var(--bg-primary, #fff);
|
|
487
|
+
font-size: 13px;
|
|
488
|
+
font-weight: 600;
|
|
489
|
+
letter-spacing: 0.6px;
|
|
490
|
+
text-transform: uppercase;
|
|
491
|
+
cursor: pointer;
|
|
492
|
+
}
|
|
493
|
+
.wizard-summary__cta:hover { background: var(--text-primary, #74562f); }
|
|
494
|
+
/* The review's Save carries the SAME icon + label the header's does (SaveProjectButton
|
|
495
|
+
always renders both). It was styled as a 48px icon-only square, so the label was crushed
|
|
496
|
+
against the icon in an unreadable box — and a theme rewording `save.label` had nowhere to
|
|
497
|
+
go. Sized to its content, mirroring .wizard-header__save, at the CTA's height so the row
|
|
498
|
+
lines up. An empty `save.label` (a theme hiding it) leaves a clean icon button. */
|
|
499
|
+
.wizard-summary__save {
|
|
500
|
+
flex: 0 0 auto;
|
|
501
|
+
display: inline-flex;
|
|
502
|
+
align-items: center;
|
|
503
|
+
justify-content: center;
|
|
504
|
+
gap: 7px;
|
|
505
|
+
height: 44px;
|
|
506
|
+
padding: 0 16px;
|
|
507
|
+
border: 1px solid var(--wz-line);
|
|
508
|
+
border-radius: 3px;
|
|
509
|
+
background: var(--bg-primary, #fff);
|
|
510
|
+
color: var(--wz-ink-soft);
|
|
511
|
+
font-size: 12px;
|
|
512
|
+
font-weight: 600;
|
|
513
|
+
letter-spacing: 0.4px;
|
|
514
|
+
white-space: nowrap;
|
|
515
|
+
cursor: pointer;
|
|
516
|
+
transition: border-color 0.15s, color 0.15s;
|
|
517
|
+
}
|
|
518
|
+
.wizard-summary__save .save-btn__icon { width: 15px; height: 15px; flex-shrink: 0; }
|
|
519
|
+
.wizard-summary__save:hover { border-color: var(--wz-accent); color: var(--wz-accent); }
|
|
520
|
+
|
|
521
|
+
/* ============================================================================
|
|
522
|
+
MOBILE (≤768px) — the SAME wizard shell, reflowed into a single column: scene
|
|
523
|
+
on top, the docked panel becomes a full-width bottom section (step tabs scroll
|
|
524
|
+
horizontally, options scroll vertically, Back/Next pinned). No MainLayout
|
|
525
|
+
fallback — the theme keeps its identity on phones.
|
|
526
|
+
============================================================================ */
|
|
527
|
+
@media (max-width: 768px) {
|
|
528
|
+
.wizard-header { height: 52px; padding: 0 14px; }
|
|
529
|
+
.wizard-header__title { font-size: 14px; }
|
|
530
|
+
.wizard-header__cta { height: 36px; padding: 0 12px; font-size: 11px; }
|
|
531
|
+
.wizard-header__save { height: 36px; padding: 0 11px; }
|
|
532
|
+
|
|
533
|
+
/* Scene (top) + panel (below) stacked; scene gets a fixed slice of the viewport
|
|
534
|
+
and the panel fills the rest and scrolls. */
|
|
535
|
+
.wizard-body { flex-direction: column; }
|
|
536
|
+
.wizard-scene { flex: 0 0 44vh; min-height: 0; }
|
|
537
|
+
.wizard-price { left: 12px; right: auto; bottom: 44px; padding: 8px 12px; } /* above the (smaller) mobile watermark */
|
|
538
|
+
html[data-watermark="off"] .wizard-price { bottom: 12px; }
|
|
539
|
+
.wizard-price__label { font-size: 9px; }
|
|
540
|
+
.wizard-price__value { font-size: 16px; }
|
|
541
|
+
|
|
542
|
+
.wizard-panel {
|
|
543
|
+
width: 100%;
|
|
544
|
+
flex: 1 1 auto;
|
|
545
|
+
min-height: 0;
|
|
546
|
+
border-left: none;
|
|
547
|
+
border-top: 1px solid var(--wz-line);
|
|
548
|
+
}
|
|
549
|
+
.wizard-step { padding: 10px 14px 8px; }
|
|
550
|
+
.wizard-step__num { font-size: 10px; }
|
|
551
|
+
.wizard-step__label { font-size: 13px; }
|
|
552
|
+
.wizard-panel__body .sidebar--embedded .sidebar__content { padding: 14px 16px; }
|
|
553
|
+
.wizard-nav { padding: 10px 14px; }
|
|
554
|
+
.wizard-nav__btn { height: 42px; }
|
|
555
|
+
|
|
556
|
+
.wizard-summary__title { padding: 14px 16px 4px; font-size: 16px; }
|
|
557
|
+
.wizard-summary__price { margin: 0 16px 4px; }
|
|
558
|
+
.wizard-summary__actions { padding: 12px 16px; }
|
|
559
|
+
.wizard-summary__save { height: 40px; padding: 0 12px; }
|
|
560
|
+
.wizard-summary__cta { height: 40px; }
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{default as t,SELECTION_COLOR as r}from"./66c461dc2c.js";import{default as f}from"./ed6a54cdf6.js";import{default as m}from"./39a62ef7b8.js";import{default as s}from"./c9a1656c62.js";import{default as d}from"./c2a14a77ae.js";import{default as c}from"./dcdba78ddf.js";import{default as S}from"./98f3644031.js";import{default as E}from"./d4378d9afa.js";import{applyEnvironmentToRenderer as v}from"./4e7d0a0d4a.js";import{default as O}from"./d65f32e004.js";import{default as I}from"./20b0104576.js";import{default as M}from"./04746bff9a.js";export{s as ComponentMesh,d as FreeMovable,c as PlacementGaps,m as ProductInstance,r as SELECTION_COLOR,I as SceneDimensions,E as SceneEnvironment,M as SceneProductsSource,O as SceneRoom,S as SceneStage,f as SelectionActionPanel,t as SelectionBox,v as applyEnvironmentToRenderer};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{BAKED_API_BASE_URL as t}from"./a811c90bd5.js";const e=typeof t=="string"&&t?t:"";let r="";try{r=import.meta&&import.meta.env&&import.meta.env.VITE_API_BASE_URL||""}catch{r=""}let o=e||r;function a(){return o}function p(n){return typeof n!="string"||e?!1:(o=n,!0)}const s=()=>!!e;export{a as getApiBaseUrl,s as isBakedBuild,p as setApiBaseUrl};
|