ui-soxo-bootstrap-core 2.6.41 → 2.6.43
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.
|
@@ -123,7 +123,9 @@
|
|
|
123
123
|
.right-section {
|
|
124
124
|
margin-top: 0px;
|
|
125
125
|
width: 100%;
|
|
126
|
-
|
|
126
|
+
/* `auto` so the horizontal scrollbar only appears when content genuinely
|
|
127
|
+
overflows — `scroll` forced it to show permanently on every page. */
|
|
128
|
+
overflow-x: auto;
|
|
127
129
|
position: relative;
|
|
128
130
|
padding: 15px;
|
|
129
131
|
margin-left: calc(var(--sidemenu-width, 211px) + 1px);
|
|
@@ -526,7 +526,7 @@ function panelActions(item, model, setSelectedRecord, setDrawerTitle, setDrawerV
|
|
|
526
526
|
<EditOutlined />
|
|
527
527
|
</Button>
|
|
528
528
|
)}
|
|
529
|
-
<Button
|
|
529
|
+
{/* <Button
|
|
530
530
|
size="small"
|
|
531
531
|
type="default"
|
|
532
532
|
onClick={() => {
|
|
@@ -536,7 +536,7 @@ function panelActions(item, model, setSelectedRecord, setDrawerTitle, setDrawerV
|
|
|
536
536
|
}}
|
|
537
537
|
>
|
|
538
538
|
<CopyOutlined />
|
|
539
|
-
</Button>
|
|
539
|
+
</Button> */}
|
|
540
540
|
<Popconfirm title="Are you sure?" onConfirm={() => deleteRecord(item)}>
|
|
541
541
|
<Button danger size="small" type="default">
|
|
542
542
|
<DeleteOutlined />
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* - Renders a single active step view with compact breadcrumb controls.
|
|
12
12
|
*/
|
|
13
13
|
import { ArrowLeftOutlined, ArrowRightOutlined, CompressOutlined, ExpandOutlined, SoundOutlined } from '@ant-design/icons';
|
|
14
|
-
import { Empty, Select,
|
|
14
|
+
import { Empty, Select, Skeleton, message } from 'antd';
|
|
15
15
|
import moment from 'moment';
|
|
16
16
|
import { useEffect, useRef, useState } from 'react';
|
|
17
17
|
import { ExternalWindow } from '../../components';
|
|
@@ -1290,7 +1290,27 @@ export default function ProcessStepsPage({ match, CustomComponents = {}, ...prop
|
|
|
1290
1290
|
</div>
|
|
1291
1291
|
)} */}
|
|
1292
1292
|
|
|
1293
|
-
<div className=
|
|
1293
|
+
<div className={`steps-top-bar${isStepFullscreen ? ' is-fullscreen' : ''}`}>
|
|
1294
|
+
{/*
|
|
1295
|
+
Full-screen toggle is anchored to the far left of the bar so the
|
|
1296
|
+
step tabs can stretch across the middle and the primary CTA sits
|
|
1297
|
+
flush right (see design).
|
|
1298
|
+
*/}
|
|
1299
|
+
<Button
|
|
1300
|
+
className="steps-fullscreen-toggle"
|
|
1301
|
+
type="dashed"
|
|
1302
|
+
icon={isStepFullscreen ? <CompressOutlined /> : <ExpandOutlined />}
|
|
1303
|
+
onClick={toggleStepFullscreen}
|
|
1304
|
+
aria-label={isStepFullscreen ? 'Exit Full Screen' : 'Full Screen'}
|
|
1305
|
+
title={isStepFullscreen ? 'Exit Full Screen' : 'Full Screen'}
|
|
1306
|
+
>
|
|
1307
|
+
{isStepFullscreen ? 'Exit Full Screen' : 'Full Screen'}
|
|
1308
|
+
</Button>
|
|
1309
|
+
|
|
1310
|
+
{/*
|
|
1311
|
+
Breadcrumb strip stays visible in fullscreen mode too so the
|
|
1312
|
+
user keeps the step timeline / navigation while presenting.
|
|
1313
|
+
*/}
|
|
1294
1314
|
<div className="steps-breadcrumb-strip">
|
|
1295
1315
|
{steps.length ? (
|
|
1296
1316
|
steps.map((stepItem, stepIndex) => {
|
|
@@ -1315,10 +1335,6 @@ export default function ProcessStepsPage({ match, CustomComponents = {}, ...prop
|
|
|
1315
1335
|
</div>
|
|
1316
1336
|
|
|
1317
1337
|
<div className="steps-nav-actions">
|
|
1318
|
-
<Button type="dashed" icon={isStepFullscreen ? <CompressOutlined /> : <ExpandOutlined />} onClick={toggleStepFullscreen}>
|
|
1319
|
-
{isStepFullscreen ? 'Exit Full Screen' : 'Full Screen'}
|
|
1320
|
-
</Button>
|
|
1321
|
-
|
|
1322
1338
|
{/*
|
|
1323
1339
|
Previous-process button.
|
|
1324
1340
|
- Only relevant at the start of a process (`activeStep === 0`)
|
|
@@ -1333,7 +1349,13 @@ export default function ProcessStepsPage({ match, CustomComponents = {}, ...prop
|
|
|
1333
1349
|
)}
|
|
1334
1350
|
|
|
1335
1351
|
{activeStep > 0 && (
|
|
1336
|
-
<Button
|
|
1352
|
+
<Button
|
|
1353
|
+
type="default"
|
|
1354
|
+
icon={<ArrowLeftOutlined />}
|
|
1355
|
+
onClick={handlePrevious}
|
|
1356
|
+
aria-label="Back"
|
|
1357
|
+
title="Back"
|
|
1358
|
+
>
|
|
1337
1359
|
Back
|
|
1338
1360
|
</Button>
|
|
1339
1361
|
)}
|
|
@@ -1366,7 +1388,13 @@ export default function ProcessStepsPage({ match, CustomComponents = {}, ...prop
|
|
|
1366
1388
|
)}
|
|
1367
1389
|
</>
|
|
1368
1390
|
) : (
|
|
1369
|
-
<Button
|
|
1391
|
+
<Button
|
|
1392
|
+
type="primary"
|
|
1393
|
+
disabled={!isStepCompleted}
|
|
1394
|
+
onClick={handleNext}
|
|
1395
|
+
aria-label={activeStep === 0 ? (FIRST_STEP_LABELS[processName?.trim().toLowerCase()] ?? 'Next') : 'Next'}
|
|
1396
|
+
title={activeStep === 0 ? (FIRST_STEP_LABELS[processName?.trim().toLowerCase()] ?? 'Next') : 'Next'}
|
|
1397
|
+
>
|
|
1370
1398
|
{/*
|
|
1371
1399
|
First-step label is resolved via FIRST_STEP_LABELS using
|
|
1372
1400
|
the process name (lowercased + trimmed) as the key. Known
|
|
@@ -1464,10 +1492,10 @@ export default function ProcessStepsPage({ match, CustomComponents = {}, ...prop
|
|
|
1464
1492
|
</button>
|
|
1465
1493
|
</>
|
|
1466
1494
|
) : null}
|
|
1467
|
-
<div
|
|
1495
|
+
{/* <div
|
|
1468
1496
|
key={`${currentProcessId}_${activeStep}`}
|
|
1469
1497
|
className={`steps-chat-step-card ${stepSlideDirection === 'backward' ? 'slide-backward' : 'slide-forward'}`}
|
|
1470
|
-
>
|
|
1498
|
+
> */}
|
|
1471
1499
|
{/* <div className="steps-chat-step-top">
|
|
1472
1500
|
<span className="steps-index-pill">
|
|
1473
1501
|
Step {Math.min(activeStep + 1, steps.length || 1)} of {steps.length || 1}
|
|
@@ -1476,15 +1504,17 @@ export default function ProcessStepsPage({ match, CustomComponents = {}, ...prop
|
|
|
1476
1504
|
{currentStep?.step_description ? <p className="steps-description">{currentStep.step_description}</p> : null}
|
|
1477
1505
|
</div> */}
|
|
1478
1506
|
|
|
1479
|
-
<div className="steps-chat-step-component">
|
|
1507
|
+
{/* <div className="steps-chat-step-component"> */}
|
|
1480
1508
|
{loading ? (
|
|
1481
1509
|
<div className="steps-chat-loading">
|
|
1482
|
-
<
|
|
1510
|
+
<div className="steps-chat-loading__card">
|
|
1511
|
+
<Skeleton active title={{ width: '32%' }} paragraph={{ rows: 6, width: ['90%', '82%', '86%', '70%', '78%', '60%'] }} />
|
|
1512
|
+
</div>
|
|
1483
1513
|
</div>
|
|
1484
1514
|
) : null}
|
|
1485
1515
|
{!loading ? renderDynamicStep() : null}
|
|
1486
|
-
</div>
|
|
1487
|
-
</div>
|
|
1516
|
+
{/* </div> */}
|
|
1517
|
+
{/* </div> */}
|
|
1488
1518
|
</div>
|
|
1489
1519
|
</div>
|
|
1490
1520
|
|
|
@@ -3,7 +3,13 @@
|
|
|
3
3
|
.process-steps-page {
|
|
4
4
|
display: flex;
|
|
5
5
|
flex-direction: column;
|
|
6
|
-
height:
|
|
6
|
+
/* The app shell's `.right-section` is `height: 100vh` with a fixed 56px header
|
|
7
|
+
(`.page-wrapper`) on top of it plus 15px padding. A plain `height: 100%`
|
|
8
|
+
makes this page a full 100vh — so its bottom runs past the viewport under the
|
|
9
|
+
header and forces a page scroll in normal view. Bound it to the space that is
|
|
10
|
+
actually visible below the header instead. (In full screen the promoted
|
|
11
|
+
`.steps-viewport` is 100vh via the Fullscreen API, so this doesn't apply.) */
|
|
12
|
+
height: calc(100vh - 86px);
|
|
7
13
|
min-height: 0;
|
|
8
14
|
width: 100%;
|
|
9
15
|
max-width: 100%;
|
|
@@ -159,16 +165,19 @@
|
|
|
159
165
|
flex: 0 0 auto;
|
|
160
166
|
display: flex;
|
|
161
167
|
align-items: center;
|
|
162
|
-
gap:
|
|
163
|
-
padding:
|
|
164
|
-
|
|
165
|
-
background: #f8fbff;
|
|
166
|
-
min-height: 50px;
|
|
168
|
+
gap: 12px;
|
|
169
|
+
padding: 0 24px;
|
|
170
|
+
min-height: 70px;
|
|
167
171
|
width: 100%;
|
|
168
172
|
max-width: 100%;
|
|
169
173
|
min-width: 0;
|
|
170
174
|
box-sizing: border-box;
|
|
171
175
|
overflow: hidden;
|
|
176
|
+
position: relative;
|
|
177
|
+
/* Clean solid header on the soft sage → ivory gradient (no glass/frost).
|
|
178
|
+
Matches the onboarding reference without the frosted-glass treatment. */
|
|
179
|
+
border-bottom: 1px solid rgba(255, 255, 255, 0.4);
|
|
180
|
+
background: linear-gradient(180deg, #a7c2c6 100%, #eff3e3 100%);
|
|
172
181
|
}
|
|
173
182
|
|
|
174
183
|
.steps-breadcrumb-strip {
|
|
@@ -176,13 +185,49 @@
|
|
|
176
185
|
min-width: 0;
|
|
177
186
|
display: flex;
|
|
178
187
|
align-items: center;
|
|
179
|
-
|
|
188
|
+
/* `safe center` keeps the steps centered when they fit, but falls back to
|
|
189
|
+
start-aligned when there are too many to fit (>6). Plain `center` would clip
|
|
190
|
+
BOTH ends on overflow — cutting off the active step's label (e.g. "Guest
|
|
191
|
+
Details") and making it unreachable even though the strip scrolls. */
|
|
192
|
+
justify-content: safe center;
|
|
193
|
+
gap: clamp(28px, 3vw, 52px);
|
|
180
194
|
overflow-x: auto;
|
|
181
195
|
overflow-y: hidden;
|
|
182
196
|
white-space: nowrap;
|
|
183
|
-
scrollbar-width:
|
|
184
|
-
|
|
185
|
-
|
|
197
|
+
scrollbar-width: none;
|
|
198
|
+
padding: 0 8px;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
.steps-breadcrumb-strip::-webkit-scrollbar {
|
|
202
|
+
height: 0;
|
|
203
|
+
display: none;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/* Full-screen toggle — grey frosted pill anchored to the far left. */
|
|
207
|
+
.steps-fullscreen-toggle {
|
|
208
|
+
flex: 0 0 auto;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
.steps-fullscreen-toggle.ant-btn,
|
|
212
|
+
.steps-fullscreen-toggle.ant-btn-dashed {
|
|
213
|
+
height: 38px;
|
|
214
|
+
padding: 0 18px;
|
|
215
|
+
border-radius: 999px;
|
|
216
|
+
background: #07232E33;
|
|
217
|
+
border: 1px solid #dbe3e6;
|
|
218
|
+
color: #ffffff;
|
|
219
|
+
font-size: 13px;
|
|
220
|
+
font-weight: 500;
|
|
221
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
|
|
222
|
+
transition: all 0.2s ease;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
.steps-fullscreen-toggle.ant-btn:hover,
|
|
226
|
+
.steps-fullscreen-toggle.ant-btn:focus {
|
|
227
|
+
background: #ffffff;
|
|
228
|
+
border-color: #ffffff;
|
|
229
|
+
color: #000000;
|
|
230
|
+
transform: translateY(-1px);
|
|
186
231
|
}
|
|
187
232
|
|
|
188
233
|
.steps-nav-actions {
|
|
@@ -190,20 +235,40 @@
|
|
|
190
235
|
display: flex;
|
|
191
236
|
align-items: center;
|
|
192
237
|
gap: 6px;
|
|
238
|
+
/*
|
|
239
|
+
Anchors the Back + primary CTA to the far right. In fullscreen the
|
|
240
|
+
breadcrumb strip is not rendered, so this margin keeps the group pinned
|
|
241
|
+
right with only the Full Screen toggle sitting on the left.
|
|
242
|
+
*/
|
|
243
|
+
margin-left: auto;
|
|
193
244
|
}
|
|
194
245
|
|
|
195
246
|
.steps-nav-actions .ant-btn {
|
|
196
|
-
min-height:
|
|
197
|
-
border-radius:
|
|
198
|
-
padding: 0
|
|
247
|
+
min-height: 40px;
|
|
248
|
+
border-radius: 999px;
|
|
249
|
+
padding: 0 18px;
|
|
199
250
|
font-size: 13px;
|
|
200
251
|
font-weight: 600;
|
|
201
252
|
touch-action: manipulation;
|
|
202
253
|
-webkit-tap-highlight-color: transparent;
|
|
203
|
-
transition: all 0.
|
|
254
|
+
transition: all 0.2s ease;
|
|
204
255
|
white-space: nowrap;
|
|
205
256
|
}
|
|
206
257
|
|
|
258
|
+
/* Secondary (Back / previous-process) — solid white pill. */
|
|
259
|
+
.steps-nav-actions .ant-btn-default {
|
|
260
|
+
background: #ffffff;
|
|
261
|
+
border-color: #dbe3e6;
|
|
262
|
+
color: #4a5a68;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
.steps-nav-actions .ant-btn-default:hover,
|
|
266
|
+
.steps-nav-actions .ant-btn-default:focus {
|
|
267
|
+
background: #f4f7f8;
|
|
268
|
+
border-color: #c3ccd0;
|
|
269
|
+
color: #253a5b;
|
|
270
|
+
}
|
|
271
|
+
|
|
207
272
|
.steps-nav-actions .ant-btn:active {
|
|
208
273
|
transform: scale(0.97);
|
|
209
274
|
}
|
|
@@ -253,17 +318,23 @@
|
|
|
253
318
|
}
|
|
254
319
|
|
|
255
320
|
.steps-breadcrumb-item {
|
|
321
|
+
/* Compact, natural-width steps that sit centered with connector lines
|
|
322
|
+
between them — matching the onboarding reference. */
|
|
323
|
+
position: relative;
|
|
324
|
+
flex: 0 0 auto;
|
|
325
|
+
min-width: 0;
|
|
256
326
|
display: inline-flex;
|
|
257
327
|
align-items: center;
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
328
|
+
justify-content: flex-start;
|
|
329
|
+
gap: 8px;
|
|
330
|
+
border: none;
|
|
331
|
+
background: transparent;
|
|
261
332
|
border-radius: 999px;
|
|
262
|
-
padding:
|
|
333
|
+
padding: 4px;
|
|
263
334
|
cursor: pointer;
|
|
264
|
-
transition: all 0.
|
|
265
|
-
color: #
|
|
266
|
-
font-size:
|
|
335
|
+
transition: all 0.2s ease;
|
|
336
|
+
color: #7a8792;
|
|
337
|
+
font-size: 13px;
|
|
267
338
|
font-weight: 500;
|
|
268
339
|
white-space: nowrap;
|
|
269
340
|
min-height: 34px;
|
|
@@ -271,56 +342,110 @@
|
|
|
271
342
|
-webkit-tap-highlight-color: transparent;
|
|
272
343
|
}
|
|
273
344
|
|
|
274
|
-
.
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
345
|
+
/* Thin connecting line drawn into the gap toward the next step.
|
|
346
|
+
Width matches the strip's gap so it spans the space without overhanging. */
|
|
347
|
+
.steps-breadcrumb-item:not(:last-child)::after {
|
|
348
|
+
content: '';
|
|
349
|
+
position: absolute;
|
|
350
|
+
left: 100%;
|
|
351
|
+
top: 50%;
|
|
352
|
+
width: clamp(28px, 3vw, 52px);
|
|
353
|
+
height: 1px;
|
|
354
|
+
background: rgba(37, 58, 91, 0.2);
|
|
355
|
+
transform: translateY(-50%);
|
|
278
356
|
}
|
|
279
357
|
|
|
280
358
|
.steps-breadcrumb-item:active {
|
|
281
|
-
transform: scale(0.
|
|
359
|
+
transform: scale(0.97);
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
/* Number bubble — default (upcoming) solid muted circle. */
|
|
363
|
+
.steps-breadcrumb-index {
|
|
364
|
+
width: 26px;
|
|
365
|
+
height: 26px;
|
|
366
|
+
border-radius: 50%;
|
|
367
|
+
display: inline-flex;
|
|
368
|
+
align-items: center;
|
|
369
|
+
justify-content: center;
|
|
370
|
+
font-size: 12px;
|
|
371
|
+
font-weight: 600;
|
|
372
|
+
background: #ffffff;
|
|
373
|
+
border: 1px solid #d3dbdf;
|
|
374
|
+
color: #8a97a2;
|
|
375
|
+
flex: 0 0 auto;
|
|
376
|
+
transition: all 0.2s ease;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
.steps-breadcrumb-item:hover .steps-breadcrumb-index {
|
|
380
|
+
border-color: rgba(37, 58, 91, 0.35);
|
|
381
|
+
color: #253a5b;
|
|
282
382
|
}
|
|
283
383
|
|
|
384
|
+
/* Label is shown only for the active step (upcoming steps are circle-only,
|
|
385
|
+
as in the reference). */
|
|
386
|
+
.steps-breadcrumb-label {
|
|
387
|
+
display: none;
|
|
388
|
+
font-size: 13px;
|
|
389
|
+
font-weight: 500;
|
|
390
|
+
color: inherit;
|
|
391
|
+
min-width: 0;
|
|
392
|
+
overflow: hidden;
|
|
393
|
+
text-overflow: ellipsis;
|
|
394
|
+
white-space: nowrap;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
/* ACTIVE — solid white rounded pill with dark navy text. */
|
|
284
398
|
.steps-breadcrumb-item.active {
|
|
285
|
-
background: #
|
|
286
|
-
|
|
287
|
-
|
|
399
|
+
background: #ffffff;
|
|
400
|
+
padding: 4px 16px 4px 6px;
|
|
401
|
+
box-shadow: 0 4px 14px rgba(0, 0, 0, 0.06);
|
|
402
|
+
color: #253a5b;
|
|
288
403
|
font-weight: 600;
|
|
289
404
|
}
|
|
290
405
|
|
|
291
|
-
.steps-breadcrumb-item.
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
color: #
|
|
406
|
+
.steps-breadcrumb-item.active .steps-breadcrumb-index {
|
|
407
|
+
background: #ffffff;
|
|
408
|
+
border-color: rgba(37, 58, 91, 0.25);
|
|
409
|
+
color: #253a5b;
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
.steps-breadcrumb-item.active .steps-breadcrumb-label {
|
|
413
|
+
display: inline;
|
|
414
|
+
color: #253a5b;
|
|
295
415
|
}
|
|
296
416
|
|
|
417
|
+
/* COMPLETED — filled navy circle. */
|
|
297
418
|
.steps-breadcrumb-item.completed .steps-breadcrumb-index {
|
|
298
|
-
background: #
|
|
419
|
+
background: #253a5b;
|
|
420
|
+
border-color: #253a5b;
|
|
299
421
|
color: #ffffff;
|
|
300
422
|
}
|
|
301
423
|
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
424
|
+
/* Primary CTA (Start / Verify Profile / Next / Finish) — dark navy pill. */
|
|
425
|
+
.steps-nav-actions .ant-btn-primary {
|
|
426
|
+
background: #253a5b;
|
|
427
|
+
border-color: #253a5b;
|
|
428
|
+
border-radius: 999px;
|
|
429
|
+
padding: 0 30px;
|
|
430
|
+
min-height: 40px;
|
|
431
|
+
box-shadow: 0 8px 20px rgba(37, 58, 91, 0.28);
|
|
305
432
|
}
|
|
306
433
|
|
|
307
|
-
.steps-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
border-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
justify-content: center;
|
|
314
|
-
font-size: 11px;
|
|
315
|
-
font-weight: 700;
|
|
316
|
-
background: #e2e8f4;
|
|
317
|
-
color: #1e293b;
|
|
318
|
-
flex: 0 0 auto;
|
|
434
|
+
.steps-nav-actions .ant-btn-primary:hover,
|
|
435
|
+
.steps-nav-actions .ant-btn-primary:focus {
|
|
436
|
+
background: #1d3054;
|
|
437
|
+
border-color: #1d3054;
|
|
438
|
+
transform: translateY(-1px);
|
|
439
|
+
box-shadow: 0 12px 26px rgba(37, 58, 91, 0.36);
|
|
319
440
|
}
|
|
320
441
|
|
|
321
|
-
.steps-
|
|
322
|
-
|
|
323
|
-
|
|
442
|
+
.steps-nav-actions .ant-btn-primary:disabled,
|
|
443
|
+
.steps-nav-actions .ant-btn-primary[disabled] {
|
|
444
|
+
background: #c8d0e0;
|
|
445
|
+
border-color: #c8d0e0;
|
|
446
|
+
color: #ffffff;
|
|
447
|
+
box-shadow: none;
|
|
448
|
+
transform: none;
|
|
324
449
|
}
|
|
325
450
|
|
|
326
451
|
.steps-breadcrumb-empty {
|
|
@@ -347,8 +472,8 @@
|
|
|
347
472
|
padding: 10px 14px;
|
|
348
473
|
box-sizing: border-box;
|
|
349
474
|
position: relative;
|
|
475
|
+
background: linear-gradient(180deg, #a7c2c6 0%, #eff3e3 100%);
|
|
350
476
|
}
|
|
351
|
-
|
|
352
477
|
.steps-stage-body.is-swipe-enabled {
|
|
353
478
|
touch-action: pan-y;
|
|
354
479
|
}
|
|
@@ -712,10 +837,29 @@
|
|
|
712
837
|
}
|
|
713
838
|
|
|
714
839
|
.steps-chat-loading {
|
|
840
|
+
flex: 1 1 auto;
|
|
715
841
|
min-height: 120px;
|
|
716
842
|
display: flex;
|
|
717
|
-
align-items:
|
|
843
|
+
align-items: stretch;
|
|
718
844
|
justify-content: center;
|
|
845
|
+
padding: 20px;
|
|
846
|
+
box-sizing: border-box;
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
/* Frosted skeleton card that fills the stage while a step loads (replaces the
|
|
850
|
+
old centered spinner) — matches the soft gradient step surfaces. */
|
|
851
|
+
.steps-chat-loading__card {
|
|
852
|
+
width: 100%;
|
|
853
|
+
max-width: 1100px;
|
|
854
|
+
align-self: stretch;
|
|
855
|
+
padding: 28px 32px;
|
|
856
|
+
box-sizing: border-box;
|
|
857
|
+
border-radius: 16px;
|
|
858
|
+
background: rgba(255, 255, 255, 0.42);
|
|
859
|
+
border: 1px solid rgba(255, 255, 255, 0.6);
|
|
860
|
+
box-shadow: 0 2px 10px rgba(20, 50, 64, 0.05);
|
|
861
|
+
backdrop-filter: blur(4px);
|
|
862
|
+
-webkit-backdrop-filter: blur(4px);
|
|
719
863
|
}
|
|
720
864
|
|
|
721
865
|
/* ── Narration bar (hidden by default via NARRATION_CONTROLS_ENABLED) ── */
|