@echomem/mcp 1.4.42 → 1.4.44
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/README.md +25 -28
- package/dist/config-files.js +63 -0
- package/dist/context-analysis/claude-native-canonical.js +2 -2
- package/dist/context-analysis/vendored-canonical.js +2 -2
- package/dist/context-analysis/workspace-report.js +3 -3
- package/dist/hud/hooks.js +43 -31
- package/dist/index.js +5 -8
- package/dist/local-jsonl.js +87 -0
- package/dist/migrate.js +6 -4
- package/dist/onboarding-stats.js +16 -0
- package/dist/save-checkpoint-hook.js +1 -1
- package/dist/setup-page/client-core.js +18 -372
- package/dist/setup-page/client-extraction.js +19 -134
- package/dist/setup-page/client-lifecycle.js +31 -101
- package/dist/setup-page/client.js +0 -2
- package/dist/setup-page/styles-extraction.js +1 -31
- package/dist/setup-page/styles-foundation.js +0 -89
- package/dist/setup-page/styles-mvp.js +10 -155
- package/dist/setup-page/styles-website-alignment.js +0 -204
- package/dist/setup-page/styles.js +0 -4
- package/dist/setup-page.js +4 -4
- package/dist/setup-preview.js +4 -212
- package/dist/setup.js +378 -668
- package/dist/v1-contract.js +0 -8
- package/package.json +9 -7
- package/dist/city/README.md +0 -9
- package/dist/city/echo-ai-city-only.html +0 -2232
- package/dist/city/echo-extraction-plate.html +0 -330
- package/dist/city/echo-face-cutout.png +0 -0
- package/dist/city/personality_stickers/bossy.png +0 -0
- package/dist/city/personality_stickers/ghosty.png +0 -0
- package/dist/city/personality_stickers/loopy.png +0 -0
- package/dist/city/personality_stickers/lusty.png +0 -0
- package/dist/city/personality_stickers/maxxy.png +0 -0
- package/dist/city/personality_stickers/tabby.png +0 -0
- package/dist/city/vendor/OrbitControls.js +0 -1417
- package/dist/city/vendor/RoundedBoxGeometry.js +0 -155
- package/dist/city/vendor/echo_general-file-21.riv +0 -0
- package/dist/city/vendor/rive.js +0 -8139
- package/dist/city/vendor/rive.wasm +0 -0
- package/dist/city/vendor/three.module.min.js +0 -6
- package/dist/forensics.js +0 -1531
- package/dist/report.js +0 -721
- package/dist/setup-page/client-report-audit.js +0 -819
- package/dist/setup-page/client-report-city.js +0 -356
- package/dist/setup-page/client-report.js +0 -6
- package/dist/setup-page/styles-city-report.js +0 -880
- package/dist/setup-page/styles-context-audit.js +0 -470
|
@@ -105,89 +105,6 @@ export const SETUP_PAGE_STYLES_FOUNDATION = String.raw ` :root {
|
|
|
105
105
|
font-size: 16px;
|
|
106
106
|
text-align: center;
|
|
107
107
|
}
|
|
108
|
-
body.scanMode {
|
|
109
|
-
background: var(--echo-paper-canvas);
|
|
110
|
-
}
|
|
111
|
-
body.scanMode main {
|
|
112
|
-
width: 100%;
|
|
113
|
-
min-height: 100vh;
|
|
114
|
-
margin: 0;
|
|
115
|
-
padding: clamp(32px, 7vw, 96px);
|
|
116
|
-
display: grid;
|
|
117
|
-
place-items: center;
|
|
118
|
-
}
|
|
119
|
-
body.scanMode main > header {
|
|
120
|
-
display: none;
|
|
121
|
-
}
|
|
122
|
-
body.scanMode #app {
|
|
123
|
-
width: min(900px, 100%);
|
|
124
|
-
min-height: min(62vh, 620px);
|
|
125
|
-
display: grid;
|
|
126
|
-
place-items: center;
|
|
127
|
-
}
|
|
128
|
-
.scanLoader {
|
|
129
|
-
width: min(720px, 100%);
|
|
130
|
-
border-top: 1px solid #c9cbc6;
|
|
131
|
-
border-right: 1px solid #c9cbc6;
|
|
132
|
-
border-bottom: 1px solid #c9cbc6;
|
|
133
|
-
border-left: 5px solid var(--echo-ink-primary);
|
|
134
|
-
border-radius: 2px;
|
|
135
|
-
background: var(--echo-paper-white);
|
|
136
|
-
padding: clamp(30px, 6vw, 58px);
|
|
137
|
-
text-align: left;
|
|
138
|
-
}
|
|
139
|
-
.scanEyebrow {
|
|
140
|
-
margin: 0 0 22px;
|
|
141
|
-
color: var(--echo-ink-faint);
|
|
142
|
-
font-family: var(--echo-font-mono);
|
|
143
|
-
font-size: 14px;
|
|
144
|
-
font-weight: 700;
|
|
145
|
-
letter-spacing: 0.18em;
|
|
146
|
-
text-transform: uppercase;
|
|
147
|
-
}
|
|
148
|
-
.scanLoader h2 {
|
|
149
|
-
margin: 0;
|
|
150
|
-
color: var(--echo-ink-text);
|
|
151
|
-
font-size: clamp(42px, 5vw, 72px);
|
|
152
|
-
line-height: 1;
|
|
153
|
-
}
|
|
154
|
-
.scanProgress {
|
|
155
|
-
width: min(520px, 100%);
|
|
156
|
-
height: 6px;
|
|
157
|
-
margin: 38px 0 0;
|
|
158
|
-
overflow: hidden;
|
|
159
|
-
border-radius: 0;
|
|
160
|
-
background: #e2e3e9;
|
|
161
|
-
}
|
|
162
|
-
.scanProgressFill {
|
|
163
|
-
display: block;
|
|
164
|
-
height: 100%;
|
|
165
|
-
min-width: 10px;
|
|
166
|
-
border-radius: 0;
|
|
167
|
-
background: var(--echo-ink-primary);
|
|
168
|
-
/* Matched to the 700ms report poll so the fill glides between updates instead of
|
|
169
|
-
stepping and then sitting still for the rest of the interval. */
|
|
170
|
-
transition: width 700ms linear;
|
|
171
|
-
}
|
|
172
|
-
.scanCaption {
|
|
173
|
-
margin: 20px 0 0;
|
|
174
|
-
color: var(--echo-ink-faint);
|
|
175
|
-
font-family: var(--echo-font-mono);
|
|
176
|
-
font-size: 16px;
|
|
177
|
-
font-weight: 600;
|
|
178
|
-
line-height: 1.45;
|
|
179
|
-
}
|
|
180
|
-
body.cityMode {
|
|
181
|
-
background: var(--echo-paper-canvas);
|
|
182
|
-
}
|
|
183
|
-
body.cityMode main {
|
|
184
|
-
width: 100%;
|
|
185
|
-
padding: 0;
|
|
186
|
-
margin: 0;
|
|
187
|
-
}
|
|
188
|
-
body.cityMode main > header {
|
|
189
|
-
display: none;
|
|
190
|
-
}
|
|
191
108
|
body.extractMode main > header {
|
|
192
109
|
display: none;
|
|
193
110
|
}
|
|
@@ -210,12 +127,6 @@ export const SETUP_PAGE_STYLES_FOUNDATION = String.raw ` :root {
|
|
|
210
127
|
body.readyMode {
|
|
211
128
|
background: #f5f3ed;
|
|
212
129
|
}
|
|
213
|
-
body.cityMode #app {
|
|
214
|
-
display: block;
|
|
215
|
-
min-height: 100vh;
|
|
216
|
-
color: var(--echo-ink-text);
|
|
217
|
-
text-align: left;
|
|
218
|
-
}
|
|
219
130
|
body.extractMode #app {
|
|
220
131
|
width: 100%;
|
|
221
132
|
display: grid;
|
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
// Final MVP onboarding layer. It deliberately mirrors the public Echo pricing,
|
|
2
|
-
// login, and
|
|
2
|
+
// login, plan, and import surfaces instead of introducing another local-only design system.
|
|
3
3
|
export const SETUP_PAGE_STYLES_MVP = String.raw `
|
|
4
4
|
body.readyMode,
|
|
5
|
-
body.scanMode,
|
|
6
5
|
body.extractMode {
|
|
7
6
|
background:
|
|
8
7
|
radial-gradient(circle, rgba(26,58,143,0.12) 0 1.2px, transparent 1.5px) 0 0 / 22px 22px,
|
|
9
8
|
var(--echo-paper-canvas);
|
|
10
9
|
}
|
|
11
|
-
body.readyMode main,
|
|
12
|
-
body.scanMode main,
|
|
10
|
+
body.readyMode main main,
|
|
13
11
|
body.extractMode main {
|
|
14
12
|
width: 100%;
|
|
15
13
|
min-height: 100vh;
|
|
@@ -19,19 +17,17 @@ export const SETUP_PAGE_STYLES_MVP = String.raw `
|
|
|
19
17
|
}
|
|
20
18
|
main > header { display: none; }
|
|
21
19
|
#app.state { color: transparent; }
|
|
22
|
-
body.readyMode #app,
|
|
23
|
-
body.scanMode #app,
|
|
20
|
+
body.readyMode #app #app,
|
|
24
21
|
body.extractMode #app {
|
|
25
22
|
width: 100%;
|
|
26
23
|
min-height: calc(100vh - clamp(56px, 10vw, 128px));
|
|
27
24
|
}
|
|
28
|
-
body.readyMode #app:has(> .setupJourney),
|
|
29
|
-
body.scanMode #app:has(> .setupJourney),
|
|
25
|
+
body.readyMode #app:has(> .setupJourney) #app:has(> .setupJourney),
|
|
30
26
|
body.extractMode #app:has(> .setupJourney) {
|
|
31
27
|
padding-top: 0 !important;
|
|
32
28
|
}
|
|
33
29
|
|
|
34
|
-
/* One calm map across
|
|
30
|
+
/* One calm map across access, account/Stripe, import, and first value. */
|
|
35
31
|
.setupJourney {
|
|
36
32
|
width: min(760px, 100%);
|
|
37
33
|
flex: 0 0 auto;
|
|
@@ -40,7 +36,7 @@ export const SETUP_PAGE_STYLES_MVP = String.raw `
|
|
|
40
36
|
}
|
|
41
37
|
.setupJourney ol {
|
|
42
38
|
display: grid;
|
|
43
|
-
grid-template-columns: repeat(
|
|
39
|
+
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
44
40
|
gap: 0;
|
|
45
41
|
margin: 0;
|
|
46
42
|
padding: 0;
|
|
@@ -99,11 +95,6 @@ export const SETUP_PAGE_STYLES_MVP = String.raw `
|
|
|
99
95
|
box-shadow: 0 0 0 4px rgba(26,58,143,0.09);
|
|
100
96
|
color: white;
|
|
101
97
|
}
|
|
102
|
-
body.cityMode .setupJourney {
|
|
103
|
-
margin-top: 12px;
|
|
104
|
-
margin-bottom: 8px;
|
|
105
|
-
padding-inline: 18px;
|
|
106
|
-
}
|
|
107
98
|
#setupJourneySlot {
|
|
108
99
|
width: 100%;
|
|
109
100
|
flex: 0 0 auto;
|
|
@@ -151,21 +142,6 @@ export const SETUP_PAGE_STYLES_MVP = String.raw `
|
|
|
151
142
|
text-align: center;
|
|
152
143
|
}
|
|
153
144
|
.mvpConsentTrustLine strong { color: var(--echo-ink-text); }
|
|
154
|
-
.mvpReportPreview { overflow: hidden; border: 1px solid rgba(26,58,143,0.18); border-radius: 18px; background: rgba(255,255,255,0.84); box-shadow: 0 16px 36px -26px rgba(26,58,143,0.42); }
|
|
155
|
-
.mvpReportPreview header { display: flex; align-items: center; gap: 13px; border-bottom: 1px solid rgba(26,58,143,0.10); background: color-mix(in srgb, var(--echo-paper-white) 66%, var(--echo-note-blue) 34%); padding: 13px 15px; }
|
|
156
|
-
.mvpReportPreview header span,
|
|
157
|
-
.mvpReportPreview header small,
|
|
158
|
-
.mvpReportPreview header strong,
|
|
159
|
-
.mvpPreviewRow span,
|
|
160
|
-
.mvpPreviewRow small,
|
|
161
|
-
.mvpPreviewRow strong { display: block; }
|
|
162
|
-
.mvpReportPreview header small { color: var(--echo-ink-primary); font: 800 9px/1 var(--echo-font-mono); letter-spacing: 0.1em; text-transform: uppercase; }
|
|
163
|
-
.mvpReportPreview header strong { margin-top: 5px; color: var(--echo-ink-text); font-size: 15px; }
|
|
164
|
-
.mvpPreviewRow { display: grid; grid-template-columns: 22px minmax(0, 1fr); gap: 10px; align-items: start; padding: 11px 15px; }
|
|
165
|
-
.mvpPreviewRow + .mvpPreviewRow { border-top: 1px solid rgba(26,58,143,0.08); }
|
|
166
|
-
.mvpPreviewRow .setupGlyph { width: 19px; height: 19px; color: #2c8f68; }
|
|
167
|
-
.mvpPreviewRow strong { color: var(--echo-ink-text); font-size: 13px; }
|
|
168
|
-
.mvpPreviewRow small { margin-top: 2px; color: var(--echo-ink-mute); font-size: 11px; line-height: 1.35; }
|
|
169
145
|
.mvpTrustCard { display: grid; grid-template-columns: 38px minmax(0, 1fr) auto; gap: 12px; align-items: center; border: 1px solid rgba(44,143,104,0.28); border-radius: 15px; background: color-mix(in srgb, var(--echo-paper-white) 62%, var(--echo-note-mint) 38%); padding: 13px 15px; }
|
|
170
146
|
.mvpTrustIcon { width: 38px; height: 38px; display: grid; place-items: center; border-radius: 50%; background: rgba(44,143,104,0.13); color: #257b59; }
|
|
171
147
|
.mvpTrustIcon .setupGlyph { width: 21px; height: 21px; }
|
|
@@ -537,125 +513,6 @@ export const SETUP_PAGE_STYLES_MVP = String.raw `
|
|
|
537
513
|
font-weight: 750;
|
|
538
514
|
}
|
|
539
515
|
|
|
540
|
-
/* Reading --------------------------------------------------------------- */
|
|
541
|
-
.scanLoading {
|
|
542
|
-
display: flex !important;
|
|
543
|
-
flex-direction: column;
|
|
544
|
-
align-items: center;
|
|
545
|
-
justify-content: flex-start;
|
|
546
|
-
}
|
|
547
|
-
.scanLoading .mvpReading {
|
|
548
|
-
margin-block: auto;
|
|
549
|
-
}
|
|
550
|
-
.mvpReading {
|
|
551
|
-
display: flex;
|
|
552
|
-
width: min(460px, 100%);
|
|
553
|
-
flex-direction: column;
|
|
554
|
-
align-items: center;
|
|
555
|
-
color: var(--echo-ink-text);
|
|
556
|
-
text-align: center;
|
|
557
|
-
}
|
|
558
|
-
.mvpReadingMascot {
|
|
559
|
-
display: block;
|
|
560
|
-
width: 150px;
|
|
561
|
-
height: 150px;
|
|
562
|
-
margin: 0 auto 18px;
|
|
563
|
-
object-fit: contain;
|
|
564
|
-
filter: none;
|
|
565
|
-
}
|
|
566
|
-
.mvpReading h2 {
|
|
567
|
-
margin: 0;
|
|
568
|
-
color: var(--echo-ink-primary);
|
|
569
|
-
font: 650 38px/1.05 var(--echo-font-script), cursive;
|
|
570
|
-
}
|
|
571
|
-
.mvpReadingCount {
|
|
572
|
-
min-height: 18px;
|
|
573
|
-
margin: 13px 0 0;
|
|
574
|
-
color: var(--echo-ink-mute);
|
|
575
|
-
font: 650 13px/1.4 var(--echo-font-mono);
|
|
576
|
-
}
|
|
577
|
-
.mvpReadingCount[hidden] {
|
|
578
|
-
display: block;
|
|
579
|
-
visibility: hidden;
|
|
580
|
-
}
|
|
581
|
-
.mvpReadingEta {
|
|
582
|
-
min-height: 17px;
|
|
583
|
-
margin: 5px 0 0;
|
|
584
|
-
color: var(--echo-ink-faint);
|
|
585
|
-
font: 600 12px/1.4 var(--echo-font-mono);
|
|
586
|
-
font-variant-numeric: tabular-nums;
|
|
587
|
-
}
|
|
588
|
-
.mvpReadingProgress {
|
|
589
|
-
width: min(260px, 100%);
|
|
590
|
-
height: 3px;
|
|
591
|
-
margin: 8px 0 0;
|
|
592
|
-
background: rgba(26,58,143,0.12);
|
|
593
|
-
}
|
|
594
|
-
.discoveryLoader {
|
|
595
|
-
width: 100%;
|
|
596
|
-
min-height: min(62vh, 620px);
|
|
597
|
-
display: grid;
|
|
598
|
-
place-items: center;
|
|
599
|
-
}
|
|
600
|
-
.discoverySpinner span {
|
|
601
|
-
display: block;
|
|
602
|
-
width: 26px;
|
|
603
|
-
height: 26px;
|
|
604
|
-
border: 3px solid rgba(26,58,143,0.16);
|
|
605
|
-
border-top-color: var(--echo-ink-primary);
|
|
606
|
-
border-radius: 50%;
|
|
607
|
-
animation: localAuthSpin 700ms linear infinite;
|
|
608
|
-
}
|
|
609
|
-
.extractionStartStage {
|
|
610
|
-
display: flex !important;
|
|
611
|
-
flex-direction: column;
|
|
612
|
-
align-items: center;
|
|
613
|
-
justify-content: flex-start;
|
|
614
|
-
}
|
|
615
|
-
.extractionStartStage .discoverySpinner {
|
|
616
|
-
display: grid;
|
|
617
|
-
flex: 1 1 auto;
|
|
618
|
-
place-items: center;
|
|
619
|
-
}
|
|
620
|
-
.reportMessageStage {
|
|
621
|
-
display: flex !important;
|
|
622
|
-
justify-content: center;
|
|
623
|
-
color: var(--echo-ink-text);
|
|
624
|
-
}
|
|
625
|
-
.reportMessage {
|
|
626
|
-
width: min(620px, 100%);
|
|
627
|
-
padding-top: clamp(48px, 10vh, 112px);
|
|
628
|
-
}
|
|
629
|
-
.reportMessage h2 {
|
|
630
|
-
margin: 0;
|
|
631
|
-
font-size: clamp(42px, 5vw, 58px);
|
|
632
|
-
font-weight: 650;
|
|
633
|
-
line-height: 1;
|
|
634
|
-
letter-spacing: -0.045em;
|
|
635
|
-
}
|
|
636
|
-
.reportMessage p {
|
|
637
|
-
margin: 16px 0 0;
|
|
638
|
-
color: var(--echo-ink-mute);
|
|
639
|
-
font-size: 16px;
|
|
640
|
-
line-height: 1.55;
|
|
641
|
-
}
|
|
642
|
-
.reportMessage code {
|
|
643
|
-
color: var(--echo-ink-primary);
|
|
644
|
-
font-family: var(--echo-font-mono);
|
|
645
|
-
}
|
|
646
|
-
.reportTechnical {
|
|
647
|
-
width: fit-content;
|
|
648
|
-
margin-top: 22px;
|
|
649
|
-
color: var(--echo-ink-faint);
|
|
650
|
-
font: 650 11px/1.5 var(--echo-font-mono);
|
|
651
|
-
}
|
|
652
|
-
.reportTechnical summary {
|
|
653
|
-
cursor: pointer;
|
|
654
|
-
text-decoration: underline;
|
|
655
|
-
text-underline-offset: 3px;
|
|
656
|
-
}
|
|
657
|
-
.reportTechnical code { display: block; margin-top: 8px; }
|
|
658
|
-
|
|
659
516
|
/* Pricing copied from the public Echo habitat -------------------------- */
|
|
660
517
|
.planGateStage {
|
|
661
518
|
display: flex !important;
|
|
@@ -1575,7 +1432,7 @@ export const SETUP_PAGE_STYLES_MVP = String.raw `
|
|
|
1575
1432
|
box-shadow: 0 6px 0 color-mix(in srgb, var(--echo-ink-primary) 77%, black);
|
|
1576
1433
|
}
|
|
1577
1434
|
|
|
1578
|
-
/* Extraction
|
|
1435
|
+
/* Extraction ------------------------------------------------------------- */
|
|
1579
1436
|
.exHero {
|
|
1580
1437
|
width: min(1180px, 100%);
|
|
1581
1438
|
min-height: calc(100vh - clamp(56px, 10vw, 128px));
|
|
@@ -1585,7 +1442,8 @@ export const SETUP_PAGE_STYLES_MVP = String.raw `
|
|
|
1585
1442
|
box-shadow: none;
|
|
1586
1443
|
}
|
|
1587
1444
|
.exHero.exHeroActive {
|
|
1588
|
-
|
|
1445
|
+
width: min(720px, 100%);
|
|
1446
|
+
grid-template-columns: minmax(0, 1fr);
|
|
1589
1447
|
align-items: center;
|
|
1590
1448
|
}
|
|
1591
1449
|
.exHeroActive #exText { padding: clamp(20px, 4vw, 44px); }
|
|
@@ -1610,7 +1468,6 @@ export const SETUP_PAGE_STYLES_MVP = String.raw `
|
|
|
1610
1468
|
-webkit-text-fill-color: var(--echo-ink-primary);
|
|
1611
1469
|
font-weight: 650;
|
|
1612
1470
|
}
|
|
1613
|
-
.exHeroActive .exPlate { min-height: min(72vh, 720px); }
|
|
1614
1471
|
.exHeroActive .exMeter {
|
|
1615
1472
|
margin-top: 28px;
|
|
1616
1473
|
border: 0;
|
|
@@ -1735,11 +1592,9 @@ export const SETUP_PAGE_STYLES_MVP = String.raw `
|
|
|
1735
1592
|
.checkoutCommitment,
|
|
1736
1593
|
.checkoutActions { grid-template-columns: 1fr; }
|
|
1737
1594
|
.exHero.exHeroActive { grid-template-columns: 1fr; }
|
|
1738
|
-
|
|
1739
|
-
}
|
|
1595
|
+
}
|
|
1740
1596
|
@media (max-width: 560px) {
|
|
1741
1597
|
body.readyMode main,
|
|
1742
|
-
body.scanMode main,
|
|
1743
1598
|
body.extractMode main { padding: 22px 14px 38px; }
|
|
1744
1599
|
.setupJourney { margin-bottom: 24px; }
|
|
1745
1600
|
.mvpConsentFooter { align-items: stretch; flex-direction: column; }
|
|
@@ -88,171 +88,6 @@ export const SETUP_PAGE_STYLES_WEBSITE_ALIGNMENT = String.raw `
|
|
|
88
88
|
box-shadow: none;
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
-
/* Local scan -------------------------------------------------------------- */
|
|
92
|
-
body.scanMode {
|
|
93
|
-
background:
|
|
94
|
-
radial-gradient(circle, rgba(26,58,143,0.075) 0 1px, transparent 1.35px) 0 0 / 18px 18px,
|
|
95
|
-
radial-gradient(circle, rgba(78,205,196,0.07) 0 1px, transparent 1.35px) 9px 9px / 22px 22px,
|
|
96
|
-
var(--echo-paper-canvas);
|
|
97
|
-
}
|
|
98
|
-
body.scanMode main {
|
|
99
|
-
padding: clamp(32px, 6vw, 72px) clamp(18px, 5vw, 58px);
|
|
100
|
-
}
|
|
101
|
-
body.scanMode #app {
|
|
102
|
-
width: min(860px, 100%);
|
|
103
|
-
min-height: min(72vh, 680px);
|
|
104
|
-
}
|
|
105
|
-
.scanLoader {
|
|
106
|
-
position: relative;
|
|
107
|
-
overflow: visible;
|
|
108
|
-
width: min(760px, 100%);
|
|
109
|
-
border: 1.5px solid rgba(26,58,143,0.20);
|
|
110
|
-
border-radius: var(--echo-radius-panel);
|
|
111
|
-
background: rgba(255,255,255,0.92);
|
|
112
|
-
padding: clamp(26px, 5vw, 48px);
|
|
113
|
-
box-shadow: var(--echo-shadow-pop);
|
|
114
|
-
}
|
|
115
|
-
.scanLoader::before {
|
|
116
|
-
content: "";
|
|
117
|
-
position: absolute;
|
|
118
|
-
top: -11px;
|
|
119
|
-
left: 50%;
|
|
120
|
-
z-index: 2;
|
|
121
|
-
width: 88px;
|
|
122
|
-
height: 25px;
|
|
123
|
-
border: 1px solid rgba(43,42,38,0.07);
|
|
124
|
-
background: color-mix(in srgb, var(--echo-note-cream) 72%, white 28%);
|
|
125
|
-
box-shadow: 0 1px 2px rgba(43,42,38,0.07);
|
|
126
|
-
opacity: 0.82;
|
|
127
|
-
transform: translateX(-50%) rotate(-1deg);
|
|
128
|
-
}
|
|
129
|
-
.scanLoaderLead {
|
|
130
|
-
display: grid;
|
|
131
|
-
grid-template-columns: auto minmax(0, 1fr);
|
|
132
|
-
align-items: center;
|
|
133
|
-
gap: clamp(20px, 4vw, 34px);
|
|
134
|
-
}
|
|
135
|
-
.scanMascot {
|
|
136
|
-
display: grid;
|
|
137
|
-
place-items: center;
|
|
138
|
-
width: clamp(108px, 14vw, 132px);
|
|
139
|
-
aspect-ratio: 1;
|
|
140
|
-
flex: 0 0 auto;
|
|
141
|
-
border: 1px solid rgba(26,58,143,0.11);
|
|
142
|
-
border-radius: 20px;
|
|
143
|
-
background: color-mix(in srgb, var(--echo-paper-white) 64%, var(--echo-note-cream) 36%);
|
|
144
|
-
box-shadow: var(--echo-shadow-paper);
|
|
145
|
-
overflow: hidden;
|
|
146
|
-
transform: rotate(-1.5deg);
|
|
147
|
-
}
|
|
148
|
-
.scanMascotFrames {
|
|
149
|
-
position: relative;
|
|
150
|
-
display: block;
|
|
151
|
-
width: 100%;
|
|
152
|
-
height: 100%;
|
|
153
|
-
}
|
|
154
|
-
.scanMascotFrame {
|
|
155
|
-
position: absolute;
|
|
156
|
-
inset: 0;
|
|
157
|
-
display: block;
|
|
158
|
-
width: 100%;
|
|
159
|
-
height: 100%;
|
|
160
|
-
object-fit: contain;
|
|
161
|
-
opacity: 0;
|
|
162
|
-
filter: drop-shadow(0 12px 14px rgba(26,58,143,0.16));
|
|
163
|
-
animation: scanMascotFrame 4.2s linear infinite;
|
|
164
|
-
}
|
|
165
|
-
/* Keep the ready pose mounted underneath every animated frame. This prevents
|
|
166
|
-
a transparent flash at loop boundaries or while a later PNG is decoding. */
|
|
167
|
-
.scanMascotFrame:nth-child(1) {
|
|
168
|
-
opacity: 1;
|
|
169
|
-
animation: none;
|
|
170
|
-
}
|
|
171
|
-
.scanMascotFrame:nth-child(2) { animation-delay: 0.6s; }
|
|
172
|
-
.scanMascotFrame:nth-child(3) { animation-delay: 1.2s; }
|
|
173
|
-
.scanMascotFrame:nth-child(4) { animation-delay: 1.8s; }
|
|
174
|
-
.scanMascotFrame:nth-child(5) { animation-delay: 2.4s; }
|
|
175
|
-
.scanMascotFrame:nth-child(6) { animation-delay: 3s; }
|
|
176
|
-
.scanMascotFrame:nth-child(7) { animation-delay: 3.6s; }
|
|
177
|
-
@keyframes scanMascotFrame {
|
|
178
|
-
0%, 14.4% { opacity: 1; }
|
|
179
|
-
14.5%, 100% { opacity: 0; }
|
|
180
|
-
}
|
|
181
|
-
.scanLoaderCopy { min-width: 0; }
|
|
182
|
-
.scanEyebrow {
|
|
183
|
-
width: fit-content;
|
|
184
|
-
margin: 0 0 15px;
|
|
185
|
-
border: 1px solid rgba(26,58,143,0.13);
|
|
186
|
-
border-radius: 999px;
|
|
187
|
-
background: rgba(255,255,255,0.72);
|
|
188
|
-
padding: 6px 11px;
|
|
189
|
-
box-shadow: var(--echo-shadow-glass);
|
|
190
|
-
color: color-mix(in srgb, var(--echo-ink-primary) 70%, var(--echo-ink-accent) 30%);
|
|
191
|
-
font-size: 11px;
|
|
192
|
-
letter-spacing: 0.11em;
|
|
193
|
-
}
|
|
194
|
-
.scanLoader h2.siteHeadline {
|
|
195
|
-
max-width: 560px;
|
|
196
|
-
font-size: clamp(40px, 6vw, 64px);
|
|
197
|
-
line-height: 0.98;
|
|
198
|
-
}
|
|
199
|
-
.scanIntro {
|
|
200
|
-
max-width: 520px;
|
|
201
|
-
margin: 18px 0 0;
|
|
202
|
-
color: var(--echo-ink-mute);
|
|
203
|
-
font-size: 15px;
|
|
204
|
-
font-weight: 500;
|
|
205
|
-
line-height: 1.55;
|
|
206
|
-
}
|
|
207
|
-
.scanProgressCard {
|
|
208
|
-
margin-top: clamp(26px, 5vw, 38px);
|
|
209
|
-
border: 1px solid rgba(26,58,143,0.10);
|
|
210
|
-
border-radius: var(--echo-radius-card);
|
|
211
|
-
background: color-mix(in srgb, var(--echo-paper-white) 68%, var(--echo-note-blue) 32%);
|
|
212
|
-
padding: 17px 18px 15px;
|
|
213
|
-
box-shadow: var(--echo-shadow-paper);
|
|
214
|
-
}
|
|
215
|
-
.scanProgress {
|
|
216
|
-
width: 100%;
|
|
217
|
-
height: 10px;
|
|
218
|
-
margin: 0;
|
|
219
|
-
border-radius: 999px;
|
|
220
|
-
background: rgba(255,255,255,0.78);
|
|
221
|
-
box-shadow: inset 0 1px 3px rgba(20,24,34,0.10);
|
|
222
|
-
}
|
|
223
|
-
.scanProgressFill {
|
|
224
|
-
min-width: 10px;
|
|
225
|
-
border-radius: 999px;
|
|
226
|
-
background: linear-gradient(90deg, var(--echo-ink-primary), color-mix(in srgb, var(--echo-ink-primary) 72%, var(--echo-ink-accent) 28%));
|
|
227
|
-
box-shadow: 0 0 0 1px rgba(26,58,143,0.08), 0 3px 9px rgba(26,58,143,0.20);
|
|
228
|
-
}
|
|
229
|
-
.scanCaption {
|
|
230
|
-
margin: 12px 0 0;
|
|
231
|
-
color: var(--echo-ink-mute);
|
|
232
|
-
font-size: 12px;
|
|
233
|
-
font-weight: 700;
|
|
234
|
-
line-height: 1.5;
|
|
235
|
-
}
|
|
236
|
-
.scanPrivacy {
|
|
237
|
-
display: flex;
|
|
238
|
-
align-items: center;
|
|
239
|
-
gap: 8px;
|
|
240
|
-
margin: 15px 2px 0;
|
|
241
|
-
color: var(--echo-ink-faint);
|
|
242
|
-
font-family: var(--echo-font-mono);
|
|
243
|
-
font-size: 11px;
|
|
244
|
-
font-weight: 600;
|
|
245
|
-
line-height: 1.45;
|
|
246
|
-
}
|
|
247
|
-
.scanPrivacy > span {
|
|
248
|
-
width: 8px;
|
|
249
|
-
height: 8px;
|
|
250
|
-
flex: 0 0 auto;
|
|
251
|
-
border-radius: 50%;
|
|
252
|
-
background: var(--echo-ink-accent-deep);
|
|
253
|
-
box-shadow: 0 0 0 4px rgba(78,205,196,0.13);
|
|
254
|
-
}
|
|
255
|
-
|
|
256
91
|
/* Permission and skip states ------------------------------------------------ */
|
|
257
92
|
.localConsent {
|
|
258
93
|
overflow: visible;
|
|
@@ -954,38 +789,6 @@ export const SETUP_PAGE_STYLES_WEBSITE_ALIGNMENT = String.raw `
|
|
|
954
789
|
.skipStage {
|
|
955
790
|
border-radius: 18px;
|
|
956
791
|
}
|
|
957
|
-
body.scanMode main {
|
|
958
|
-
padding: 34px 14px 52px;
|
|
959
|
-
}
|
|
960
|
-
body.scanMode #app {
|
|
961
|
-
min-height: calc(100vh - 86px);
|
|
962
|
-
}
|
|
963
|
-
.scanLoader {
|
|
964
|
-
border-radius: 18px;
|
|
965
|
-
padding: 28px 20px 22px;
|
|
966
|
-
}
|
|
967
|
-
.scanLoaderLead {
|
|
968
|
-
grid-template-columns: 1fr;
|
|
969
|
-
gap: 18px;
|
|
970
|
-
}
|
|
971
|
-
.scanMascot {
|
|
972
|
-
width: 88px;
|
|
973
|
-
border-radius: 16px;
|
|
974
|
-
}
|
|
975
|
-
.scanLoader h2.siteHeadline {
|
|
976
|
-
font-size: clamp(38px, 12vw, 52px);
|
|
977
|
-
}
|
|
978
|
-
.scanIntro {
|
|
979
|
-
margin-top: 14px;
|
|
980
|
-
font-size: 14px;
|
|
981
|
-
}
|
|
982
|
-
.scanProgressCard {
|
|
983
|
-
margin-top: 24px;
|
|
984
|
-
padding: 15px 14px 13px;
|
|
985
|
-
}
|
|
986
|
-
.scanPrivacy {
|
|
987
|
-
align-items: flex-start;
|
|
988
|
-
}
|
|
989
792
|
.consentLead,
|
|
990
793
|
.skippedEcho {
|
|
991
794
|
border-radius: 16px 16px 0 0;
|
|
@@ -1044,12 +847,5 @@ export const SETUP_PAGE_STYLES_WEBSITE_ALIGNMENT = String.raw `
|
|
|
1044
847
|
transition: none;
|
|
1045
848
|
transform: none;
|
|
1046
849
|
}
|
|
1047
|
-
.scanMascotFrame {
|
|
1048
|
-
animation: none;
|
|
1049
|
-
opacity: 0;
|
|
1050
|
-
}
|
|
1051
|
-
.scanMascotFrame:first-child {
|
|
1052
|
-
opacity: 1;
|
|
1053
|
-
}
|
|
1054
850
|
}
|
|
1055
851
|
`;
|
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
import { SETUP_PAGE_STYLES_FOUNDATION } from "./styles-foundation.js";
|
|
2
|
-
import { SETUP_PAGE_STYLES_CITY_REPORT } from "./styles-city-report.js";
|
|
3
2
|
import { SETUP_PAGE_STYLES_EXTRACTION } from "./styles-extraction.js";
|
|
4
|
-
import { SETUP_PAGE_STYLES_CONTEXT_AUDIT } from "./styles-context-audit.js";
|
|
5
3
|
import { SETUP_PAGE_STYLES_WEBSITE_ALIGNMENT } from "./styles-website-alignment.js";
|
|
6
4
|
import { SETUP_PAGE_STYLES_MVP } from "./styles-mvp.js";
|
|
7
5
|
// Kept as one emitted style tag so the local HTML page remains self-contained.
|
|
8
6
|
export const SETUP_PAGE_STYLES = [
|
|
9
7
|
SETUP_PAGE_STYLES_FOUNDATION,
|
|
10
|
-
SETUP_PAGE_STYLES_CITY_REPORT,
|
|
11
8
|
SETUP_PAGE_STYLES_EXTRACTION,
|
|
12
|
-
SETUP_PAGE_STYLES_CONTEXT_AUDIT,
|
|
13
9
|
SETUP_PAGE_STYLES_WEBSITE_ALIGNMENT,
|
|
14
10
|
SETUP_PAGE_STYLES_MVP,
|
|
15
11
|
].join("\n");
|
package/dist/setup-page.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { renderSetupPageDocument } from "./setup-page/document.js";
|
|
2
2
|
import { renderSetupPreviewBootstrap } from "./setup-preview.js";
|
|
3
|
-
export {
|
|
3
|
+
export { SETUP_PREVIEW_STATES } from "./setup-preview.js";
|
|
4
4
|
/**
|
|
5
5
|
* Setup page entry point. The implementation is split by product phase under ./setup-page/:
|
|
6
|
-
* core utilities,
|
|
6
|
+
* core utilities, post-auth extraction, and lifecycle polling.
|
|
7
7
|
*/
|
|
8
8
|
export function renderSetupPage(options = {}) {
|
|
9
9
|
const previewState = options.previewState ?? null;
|
|
10
10
|
const startupScript = previewState
|
|
11
11
|
? renderSetupPreviewBootstrap(previewState)
|
|
12
12
|
: `
|
|
13
|
-
init().catch(function () {
|
|
14
|
-
|
|
13
|
+
init().catch(function (error) {
|
|
14
|
+
renderDiscoveryCheckIssue(error && error.message ? error.message : "The local setup page could not start.");
|
|
15
15
|
});`;
|
|
16
16
|
return renderSetupPageDocument({ previewState, startupScript });
|
|
17
17
|
}
|