@visns-studio/visns-components 6.0.4 → 6.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/components/DataGrid.jsx +37 -12
- package/src/components/Navigation.jsx +59 -3
- package/src/components/auth/Login.jsx +203 -175
- package/src/components/columns/ColumnRenderers.jsx +34 -0
- package/src/components/generic/GenericDashboard.jsx +181 -1
- package/src/components/generic/GenericFormBuilder.jsx +735 -37
- package/src/components/generic/GenericIndex.jsx +15 -5
- package/src/components/generic/OutstandingRuleEditor.jsx +313 -0
- package/src/components/styles/DataGrid.module.scss +38 -22
- package/src/components/styles/Form.module.scss +32 -33
- package/src/components/styles/GenericDashboard.module.scss +155 -0
- package/src/components/styles/GenericDetail.module.scss +28 -30
- package/src/components/styles/GenericDynamic.module.scss +7 -21
- package/src/components/styles/GenericEditableTable.module.scss +5 -22
- package/src/components/styles/GenericFormBuilder.module.scss +605 -30
- package/src/components/styles/GenericIndex.module.scss +17 -32
- package/src/components/styles/GenericMain.module.scss +18 -6
- package/src/components/styles/GenericQuote.module.scss +7 -22
- package/src/components/styles/GenericReport.module.scss +5 -37
- package/src/components/styles/Login.module.scss +415 -239
- package/src/components/styles/Navigation.module.scss +124 -35
- package/src/components/styles/Profile.module.scss +5 -26
- package/src/components/styles/QuickAction.module.scss +34 -29
- package/src/components/styles/_controls.scss +139 -0
- package/src/components/styles/global.css +54 -15
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
@use 'controls' as *;
|
|
2
|
+
|
|
3
|
+
.btn {
|
|
4
|
+
@include button-primary;
|
|
5
|
+
}
|
|
1
6
|
.grid {
|
|
2
7
|
&__row {
|
|
3
8
|
width: 100%;
|
|
@@ -138,7 +143,10 @@
|
|
|
138
143
|
border: 1px solid var(--border-color);
|
|
139
144
|
box-sizing: border-box;
|
|
140
145
|
padding: 0;
|
|
141
|
-
|
|
146
|
+
/* Zero, not 5px: the breadcrumb above uses .crmtitle, which sets
|
|
147
|
+
margin:0 and therefore sits 5px wider on each side. The two panels
|
|
148
|
+
have to share an edge or the page looks misaligned. */
|
|
149
|
+
margin: 0;
|
|
142
150
|
height: auto;
|
|
143
151
|
position: relative;
|
|
144
152
|
|
|
@@ -777,28 +785,9 @@ select:not(:placeholder-shown) + .fi__span {
|
|
|
777
785
|
}
|
|
778
786
|
|
|
779
787
|
/* Adding btn class */
|
|
780
|
-
.btn {
|
|
781
|
-
width: max-content;
|
|
782
|
-
display: inline-block;
|
|
783
|
-
position: relative;
|
|
784
|
-
padding: 0.65rem 1rem;
|
|
785
|
-
cursor: pointer;
|
|
786
|
-
font-size: 1rem;
|
|
787
|
-
color: var(--tertiary-color);
|
|
788
|
-
text-decoration: none;
|
|
789
|
-
overflow: hidden;
|
|
790
|
-
background: var(--primary-color);
|
|
791
|
-
border: 1px solid rgba(var(--primary-rgb), 1.1);
|
|
792
|
-
border-radius: var(--br);
|
|
793
|
-
outline: none;
|
|
794
|
-
transition: all 0.2s cubic-bezier(0.85, 0, 0.15, 1) 0s;
|
|
795
|
-
}
|
|
796
788
|
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
background: var(--secondary-color);
|
|
800
|
-
border: 1px solid rgba(var(--secondary-color-rgb), 1.1);
|
|
801
|
-
}
|
|
789
|
+
|
|
790
|
+
|
|
802
791
|
|
|
803
792
|
/* Floating action buttons */
|
|
804
793
|
.polActions {
|
|
@@ -1594,17 +1583,43 @@ select:not(:placeholder-shown) + .fi__span {
|
|
|
1594
1583
|
}
|
|
1595
1584
|
|
|
1596
1585
|
.emptyState {
|
|
1597
|
-
|
|
1586
|
+
/* Full width of the panel. It previously sat inside a two-column grid and
|
|
1587
|
+
inherited the 216px rail column, which squeezed the message into a
|
|
1588
|
+
narrow box with every word on its own line. */
|
|
1589
|
+
width: 100%;
|
|
1590
|
+
max-width: 460px;
|
|
1591
|
+
margin: 3rem auto;
|
|
1592
|
+
padding: 2.5rem 2rem;
|
|
1598
1593
|
text-align: center;
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1594
|
+
background: rgba(var(--primary-rgb), 0.03);
|
|
1595
|
+
border: 1px dashed rgba(var(--primary-rgb), 0.2);
|
|
1596
|
+
border-radius: 12px;
|
|
1597
|
+
|
|
1598
|
+
&__icon {
|
|
1599
|
+
display: inline-flex;
|
|
1600
|
+
align-items: center;
|
|
1601
|
+
justify-content: center;
|
|
1602
|
+
width: 52px;
|
|
1603
|
+
height: 52px;
|
|
1604
|
+
border-radius: 50%;
|
|
1605
|
+
background: rgba(var(--primary-rgb), 0.1);
|
|
1606
|
+
color: var(--primary-color);
|
|
1607
|
+
margin-bottom: 1rem;
|
|
1608
|
+
}
|
|
1609
|
+
|
|
1610
|
+
h3 {
|
|
1611
|
+
margin: 0 0 0.4rem;
|
|
1612
|
+
font-size: 15px;
|
|
1613
|
+
font-weight: 700;
|
|
1614
|
+
color: var(--paragraph-color);
|
|
1615
|
+
}
|
|
1605
1616
|
|
|
1606
1617
|
p {
|
|
1607
|
-
margin: 0;
|
|
1618
|
+
margin: 0 auto 1.25rem;
|
|
1619
|
+
max-width: 320px;
|
|
1620
|
+
font-size: 13px;
|
|
1621
|
+
line-height: 1.55;
|
|
1622
|
+
color: rgba(var(--paragraph-rgb), 0.6);
|
|
1608
1623
|
}
|
|
1609
1624
|
}
|
|
1610
1625
|
|
|
@@ -2260,6 +2275,66 @@ select:not(:placeholder-shown) + .fi__span {
|
|
|
2260
2275
|
}
|
|
2261
2276
|
}
|
|
2262
2277
|
|
|
2278
|
+
// Outstanding item rule — a per-answer switch inside the options editor, plus
|
|
2279
|
+
// its hint and stale-reference warning. All of it renders only when the
|
|
2280
|
+
// consuming app enables `outstandingItems` in its builder config.
|
|
2281
|
+
.outstandingHint {
|
|
2282
|
+
font-size: 0.78rem;
|
|
2283
|
+
line-height: 1.45;
|
|
2284
|
+
color: rgba(var(--paragraph-color-rgb), 0.65);
|
|
2285
|
+
padding: 0 0 6px;
|
|
2286
|
+
}
|
|
2287
|
+
|
|
2288
|
+
.outstandingStale {
|
|
2289
|
+
background: #fff8e1;
|
|
2290
|
+
border: 1px solid #f4c544;
|
|
2291
|
+
border-radius: 6px;
|
|
2292
|
+
padding: 8px 12px;
|
|
2293
|
+
margin-bottom: 6px;
|
|
2294
|
+
color: #7a5c00;
|
|
2295
|
+
font-size: 0.8rem;
|
|
2296
|
+
line-height: 1.45;
|
|
2297
|
+
}
|
|
2298
|
+
|
|
2299
|
+
.outstandingFlag {
|
|
2300
|
+
flex-shrink: 0;
|
|
2301
|
+
display: inline-flex;
|
|
2302
|
+
align-items: center;
|
|
2303
|
+
gap: 5px;
|
|
2304
|
+
padding: 4px 9px;
|
|
2305
|
+
border: 1px solid rgba(var(--primary-rgb), 0.15);
|
|
2306
|
+
border-radius: 6px;
|
|
2307
|
+
background: white;
|
|
2308
|
+
font-size: 0.72rem;
|
|
2309
|
+
font-weight: 600;
|
|
2310
|
+
text-transform: uppercase;
|
|
2311
|
+
letter-spacing: 0.04em;
|
|
2312
|
+
color: rgba(var(--paragraph-color-rgb), 0.45);
|
|
2313
|
+
cursor: pointer;
|
|
2314
|
+
user-select: none;
|
|
2315
|
+
transition: all 0.2s ease;
|
|
2316
|
+
|
|
2317
|
+
&:hover {
|
|
2318
|
+
border-color: var(--primary-color);
|
|
2319
|
+
color: var(--paragraph-color);
|
|
2320
|
+
}
|
|
2321
|
+
|
|
2322
|
+
// The modal forces a 44px min-height on every input; a tick box must opt out.
|
|
2323
|
+
input[type='checkbox'] {
|
|
2324
|
+
margin: 0;
|
|
2325
|
+
width: auto !important;
|
|
2326
|
+
height: auto !important;
|
|
2327
|
+
min-height: 0 !important;
|
|
2328
|
+
cursor: pointer;
|
|
2329
|
+
}
|
|
2330
|
+
}
|
|
2331
|
+
|
|
2332
|
+
.outstandingFlagOn {
|
|
2333
|
+
border-color: #e0a800;
|
|
2334
|
+
background: #fff8e1;
|
|
2335
|
+
color: #7a5c00;
|
|
2336
|
+
}
|
|
2337
|
+
|
|
2263
2338
|
.btnCancel {
|
|
2264
2339
|
background: rgba(var(--paragraph-color-rgb), 0.08) !important;
|
|
2265
2340
|
color: var(--paragraph-color) !important;
|
|
@@ -2269,3 +2344,503 @@ select:not(:placeholder-shown) + .fi__span {
|
|
|
2269
2344
|
background: rgba(var(--paragraph-color-rgb), 0.15) !important;
|
|
2270
2345
|
}
|
|
2271
2346
|
}
|
|
2347
|
+
|
|
2348
|
+
/* ============================================================
|
|
2349
|
+
Builder layout: outline rail, compact rows, mode switch
|
|
2350
|
+
============================================================ */
|
|
2351
|
+
|
|
2352
|
+
/* Only the page header, never a section bar — the two share
|
|
2353
|
+
.gridtxt__header, so these rules must not be applied to it directly. */
|
|
2354
|
+
.builderBar {
|
|
2355
|
+
display: flex;
|
|
2356
|
+
align-items: center;
|
|
2357
|
+
justify-content: space-between;
|
|
2358
|
+
gap: 1rem;
|
|
2359
|
+
flex-wrap: wrap;
|
|
2360
|
+
/* Full-bleed across the panel.
|
|
2361
|
+
width must be auto: .gridtxt__header sets width:100%, which pins the
|
|
2362
|
+
box to the parent's content width, so negative margins SHIFT it left
|
|
2363
|
+
instead of widening it — leaving a gap on the right only. */
|
|
2364
|
+
width: auto !important;
|
|
2365
|
+
margin: 0 -1.15rem !important;
|
|
2366
|
+
padding: 0.7rem 1.15rem !important;
|
|
2367
|
+
border-radius: 0 !important;
|
|
2368
|
+
}
|
|
2369
|
+
|
|
2370
|
+
.builderTools {
|
|
2371
|
+
display: flex;
|
|
2372
|
+
align-items: center;
|
|
2373
|
+
gap: 0.6rem;
|
|
2374
|
+
font-weight: 400;
|
|
2375
|
+
}
|
|
2376
|
+
|
|
2377
|
+
.fieldCount {
|
|
2378
|
+
font-size: 11.5px;
|
|
2379
|
+
color: rgba(var(--paragraph-rgb), 0.65);
|
|
2380
|
+
white-space: nowrap;
|
|
2381
|
+
}
|
|
2382
|
+
|
|
2383
|
+
.toolBtn {
|
|
2384
|
+
display: inline-flex;
|
|
2385
|
+
align-items: center;
|
|
2386
|
+
gap: 0.35rem;
|
|
2387
|
+
height: 28px;
|
|
2388
|
+
padding: 0 0.6rem;
|
|
2389
|
+
border: 1px solid rgba(var(--primary-rgb), 0.25);
|
|
2390
|
+
border-radius: 6px;
|
|
2391
|
+
background: #fff;
|
|
2392
|
+
color: var(--primary-color);
|
|
2393
|
+
font: inherit;
|
|
2394
|
+
font-size: 12px;
|
|
2395
|
+
font-weight: 600;
|
|
2396
|
+
cursor: pointer;
|
|
2397
|
+
}
|
|
2398
|
+
|
|
2399
|
+
.toolBtnOn {
|
|
2400
|
+
background: var(--primary-color);
|
|
2401
|
+
color: #fff;
|
|
2402
|
+
border-color: var(--primary-color);
|
|
2403
|
+
}
|
|
2404
|
+
|
|
2405
|
+
/* Edit / Preview. Compact editing is the default; the live render is the
|
|
2406
|
+
thing you opt into, not the thing you scroll past. */
|
|
2407
|
+
.modeSwitch {
|
|
2408
|
+
display: inline-flex;
|
|
2409
|
+
border: 1px solid rgba(var(--primary-rgb), 0.25);
|
|
2410
|
+
border-radius: 6px;
|
|
2411
|
+
overflow: hidden;
|
|
2412
|
+
|
|
2413
|
+
button {
|
|
2414
|
+
height: 28px;
|
|
2415
|
+
padding: 0 0.7rem;
|
|
2416
|
+
border: none;
|
|
2417
|
+
background: #fff;
|
|
2418
|
+
color: var(--primary-color);
|
|
2419
|
+
font: inherit;
|
|
2420
|
+
font-size: 12px;
|
|
2421
|
+
font-weight: 600;
|
|
2422
|
+
cursor: pointer;
|
|
2423
|
+
}
|
|
2424
|
+
}
|
|
2425
|
+
|
|
2426
|
+
.modeOn {
|
|
2427
|
+
background: var(--primary-color) !important;
|
|
2428
|
+
color: #fff !important;
|
|
2429
|
+
}
|
|
2430
|
+
|
|
2431
|
+
/* ---- outline rail ---- */
|
|
2432
|
+
|
|
2433
|
+
/* Base layout. Spacing lives here rather than only on the with-rail variant,
|
|
2434
|
+
so hiding the outline does not drop the padding and jump the list up
|
|
2435
|
+
against the toolbar. */
|
|
2436
|
+
/* Body inset.
|
|
2437
|
+
No top padding: the grey toolbar is the first child of this container, so
|
|
2438
|
+
padding-top lands ABOVE the bar rather than between it and the content —
|
|
2439
|
+
which is why the chips ended up flush against it. Spacing below the bar is
|
|
2440
|
+
owned by whatever follows it. */
|
|
2441
|
+
.formSplit {
|
|
2442
|
+
padding: 0 1.15rem 1.5rem;
|
|
2443
|
+
}
|
|
2444
|
+
|
|
2445
|
+
/**
|
|
2446
|
+
* Toolbar and section strip pinned together.
|
|
2447
|
+
*
|
|
2448
|
+
* One sticky element rather than two: separately, the strip's offset had to
|
|
2449
|
+
* equal the toolbar's height, a number that breaks silently whenever the
|
|
2450
|
+
* toolbar's padding or type size changes.
|
|
2451
|
+
*
|
|
2452
|
+
* The offset is the app header's measured height — it is position:fixed in
|
|
2453
|
+
* the host project with no declared height, so top:0 parks this underneath
|
|
2454
|
+
* it. See the measuring effect in GenericFormBuilder.
|
|
2455
|
+
*/
|
|
2456
|
+
.stickyHead {
|
|
2457
|
+
position: sticky;
|
|
2458
|
+
top: var(--fb-sticky-top, 0px);
|
|
2459
|
+
z-index: 30;
|
|
2460
|
+
/* Below the app header's own stacking context (995). */
|
|
2461
|
+
background: #fff;
|
|
2462
|
+
margin: 0 -1.15rem;
|
|
2463
|
+
padding: 0 1.15rem;
|
|
2464
|
+
}
|
|
2465
|
+
|
|
2466
|
+
/* Children already carry their own full-bleed margins; inside the wrapper
|
|
2467
|
+
that would double up. */
|
|
2468
|
+
.stickyHead > .builderBar,
|
|
2469
|
+
.stickyHead > .sectionNav {
|
|
2470
|
+
margin-left: -1.15rem !important;
|
|
2471
|
+
margin-right: -1.15rem !important;
|
|
2472
|
+
}
|
|
2473
|
+
|
|
2474
|
+
|
|
2475
|
+
/* The header and search span both columns; only the rail and canvas sit
|
|
2476
|
+
side by side. */
|
|
2477
|
+
|
|
2478
|
+
/* ---- section chips ----
|
|
2479
|
+
Five short sections did not justify a 216px column, and the rail's tinted
|
|
2480
|
+
surface stopped dead after the last item. A strip costs about 40px of
|
|
2481
|
+
height and hands the full width back to the list. */
|
|
2482
|
+
.sectionNav {
|
|
2483
|
+
display: flex;
|
|
2484
|
+
flex-wrap: wrap;
|
|
2485
|
+
align-items: center;
|
|
2486
|
+
gap: 0.4rem;
|
|
2487
|
+
/* Clear air below the toolbar, and the rule pulled out to the panel edges
|
|
2488
|
+
so it divides the strip from the list rather than floating inside it. */
|
|
2489
|
+
width: auto;
|
|
2490
|
+
margin: 0 -1.15rem 1.15rem;
|
|
2491
|
+
padding: 1rem 1.15rem;
|
|
2492
|
+
/* Opaque: a translucent tint would let field rows show through while
|
|
2493
|
+
this is stuck. */
|
|
2494
|
+
background: #f7f9fc;
|
|
2495
|
+
border-bottom: 1px solid var(--border-color);
|
|
2496
|
+
}
|
|
2497
|
+
|
|
2498
|
+
.sectionChip {
|
|
2499
|
+
display: inline-flex;
|
|
2500
|
+
align-items: center;
|
|
2501
|
+
gap: 0.4rem;
|
|
2502
|
+
height: 30px;
|
|
2503
|
+
padding: 0 0.5rem 0 0.65rem;
|
|
2504
|
+
border: 1px solid rgba(var(--primary-rgb), 0.22);
|
|
2505
|
+
/* Matches the buttons and rows around it. */
|
|
2506
|
+
border-radius: 7px;
|
|
2507
|
+
background: #fff;
|
|
2508
|
+
color: var(--paragraph-color);
|
|
2509
|
+
font: inherit;
|
|
2510
|
+
font-size: 12px;
|
|
2511
|
+
cursor: pointer;
|
|
2512
|
+
max-width: 260px;
|
|
2513
|
+
|
|
2514
|
+
&:hover {
|
|
2515
|
+
border-color: var(--primary-color);
|
|
2516
|
+
background: rgba(var(--primary-rgb), 0.06);
|
|
2517
|
+
}
|
|
2518
|
+
|
|
2519
|
+
&__label {
|
|
2520
|
+
overflow: hidden;
|
|
2521
|
+
text-overflow: ellipsis;
|
|
2522
|
+
white-space: nowrap;
|
|
2523
|
+
}
|
|
2524
|
+
|
|
2525
|
+
&__count {
|
|
2526
|
+
font-size: 10.5px;
|
|
2527
|
+
font-variant-numeric: tabular-nums;
|
|
2528
|
+
font-weight: 700;
|
|
2529
|
+
color: rgba(var(--paragraph-rgb), 0.5);
|
|
2530
|
+
background: rgba(var(--paragraph-rgb), 0.08);
|
|
2531
|
+
border-radius: 4px;
|
|
2532
|
+
padding: 1px 5px;
|
|
2533
|
+
}
|
|
2534
|
+
}
|
|
2535
|
+
|
|
2536
|
+
.sectionChipActive {
|
|
2537
|
+
background: var(--primary-color);
|
|
2538
|
+
border-color: var(--primary-color);
|
|
2539
|
+
color: #fff;
|
|
2540
|
+
font-weight: 600;
|
|
2541
|
+
|
|
2542
|
+
.sectionChip__count {
|
|
2543
|
+
color: #fff;
|
|
2544
|
+
background: rgba(255, 255, 255, 0.22);
|
|
2545
|
+
}
|
|
2546
|
+
|
|
2547
|
+
&:hover {
|
|
2548
|
+
background: var(--primary-dark-color, var(--primary-color));
|
|
2549
|
+
}
|
|
2550
|
+
}
|
|
2551
|
+
|
|
2552
|
+
/* A collapsed section is still navigable, but should not look the same as
|
|
2553
|
+
one you can actually see. */
|
|
2554
|
+
.sectionChipCollapsed {
|
|
2555
|
+
border-style: dashed;
|
|
2556
|
+
opacity: 0.65;
|
|
2557
|
+
}
|
|
2558
|
+
|
|
2559
|
+
/* ---- search ---- */
|
|
2560
|
+
|
|
2561
|
+
.searchBarTop {
|
|
2562
|
+
/* Inline in the toolbar: no band, no divider, sized to sit beside the
|
|
2563
|
+
other controls rather than above them. */
|
|
2564
|
+
background: transparent !important;
|
|
2565
|
+
border-bottom: none !important;
|
|
2566
|
+
padding: 0 !important;
|
|
2567
|
+
margin: 0 !important;
|
|
2568
|
+
position: relative;
|
|
2569
|
+
width: 240px;
|
|
2570
|
+
flex: 0 0 auto;
|
|
2571
|
+
|
|
2572
|
+
.searchIcon {
|
|
2573
|
+
position: absolute;
|
|
2574
|
+
left: 9px;
|
|
2575
|
+
top: 50%;
|
|
2576
|
+
transform: translateY(-50%);
|
|
2577
|
+
z-index: 1;
|
|
2578
|
+
pointer-events: none;
|
|
2579
|
+
color: rgba(var(--paragraph-rgb), 0.45);
|
|
2580
|
+
}
|
|
2581
|
+
|
|
2582
|
+
.searchInput {
|
|
2583
|
+
width: 100%;
|
|
2584
|
+
padding: 0 2rem 0 1.9rem !important;
|
|
2585
|
+
height: 28px !important;
|
|
2586
|
+
min-height: 28px !important;
|
|
2587
|
+
border-radius: 6px !important;
|
|
2588
|
+
border-color: rgba(var(--primary-rgb), 0.25) !important;
|
|
2589
|
+
font-size: 12px !important;
|
|
2590
|
+
|
|
2591
|
+
&::placeholder {
|
|
2592
|
+
color: rgba(var(--paragraph-rgb), 0.45);
|
|
2593
|
+
}
|
|
2594
|
+
|
|
2595
|
+
&:focus {
|
|
2596
|
+
border-color: var(--primary-color) !important;
|
|
2597
|
+
box-shadow: 0 0 0 3px rgba(var(--primary-rgb), 0.12) !important;
|
|
2598
|
+
}
|
|
2599
|
+
}
|
|
2600
|
+
|
|
2601
|
+
.searchCount {
|
|
2602
|
+
position: absolute;
|
|
2603
|
+
right: 1.9rem;
|
|
2604
|
+
top: 50%;
|
|
2605
|
+
transform: translateY(-50%);
|
|
2606
|
+
background: none;
|
|
2607
|
+
padding: 0;
|
|
2608
|
+
font-size: 10.5px;
|
|
2609
|
+
font-weight: 600;
|
|
2610
|
+
color: rgba(var(--paragraph-rgb), 0.5);
|
|
2611
|
+
}
|
|
2612
|
+
|
|
2613
|
+
.searchClear {
|
|
2614
|
+
position: absolute;
|
|
2615
|
+
right: 0.3rem;
|
|
2616
|
+
top: 50%;
|
|
2617
|
+
transform: translateY(-50%);
|
|
2618
|
+
padding: 2px;
|
|
2619
|
+
}
|
|
2620
|
+
}
|
|
2621
|
+
|
|
2622
|
+
/* ---- compact rows ---- */
|
|
2623
|
+
|
|
2624
|
+
|
|
2625
|
+
|
|
2626
|
+
|
|
2627
|
+
.duplicateBtn {
|
|
2628
|
+
display: flex;
|
|
2629
|
+
align-items: center;
|
|
2630
|
+
padding: 2px;
|
|
2631
|
+
border: none;
|
|
2632
|
+
background: none;
|
|
2633
|
+
color: rgba(var(--paragraph-rgb), 0.55);
|
|
2634
|
+
cursor: pointer;
|
|
2635
|
+
|
|
2636
|
+
&:hover {
|
|
2637
|
+
color: var(--primary-color);
|
|
2638
|
+
}
|
|
2639
|
+
}
|
|
2640
|
+
|
|
2641
|
+
@media (max-width: 900px) {
|
|
2642
|
+
/* Chips scroll sideways rather than stacking into a tall block that
|
|
2643
|
+
pushes the list off screen. */
|
|
2644
|
+
.sectionNav {
|
|
2645
|
+
flex-wrap: nowrap;
|
|
2646
|
+
overflow-x: auto;
|
|
2647
|
+
padding-bottom: 0.65rem;
|
|
2648
|
+
}
|
|
2649
|
+
|
|
2650
|
+
.sectionChip {
|
|
2651
|
+
flex: 0 0 auto;
|
|
2652
|
+
}
|
|
2653
|
+
}
|
|
2654
|
+
|
|
2655
|
+
.cRow {
|
|
2656
|
+
display: flex;
|
|
2657
|
+
align-items: center;
|
|
2658
|
+
gap: 0.5rem;
|
|
2659
|
+
width: 100%;
|
|
2660
|
+
min-height: 34px;
|
|
2661
|
+
padding: 0 0.5rem;
|
|
2662
|
+
box-sizing: border-box;
|
|
2663
|
+
background: #fff;
|
|
2664
|
+
border: 1px solid var(--border-color);
|
|
2665
|
+
border-radius: 6px;
|
|
2666
|
+
font-size: 13px;
|
|
2667
|
+
|
|
2668
|
+
&:hover {
|
|
2669
|
+
border-color: rgba(var(--primary-rgb), 0.45);
|
|
2670
|
+
background: rgba(var(--primary-rgb), 0.03);
|
|
2671
|
+
}
|
|
2672
|
+
}
|
|
2673
|
+
|
|
2674
|
+
.cRowDragging {
|
|
2675
|
+
opacity: 0.5;
|
|
2676
|
+
box-shadow: 0 8px 20px -8px rgba(0, 0, 0, 0.3);
|
|
2677
|
+
}
|
|
2678
|
+
|
|
2679
|
+
/* Sections read as headings, not as another entry in the list. */
|
|
2680
|
+
.cRowSection {
|
|
2681
|
+
margin-top: 0.75rem;
|
|
2682
|
+
background: rgba(var(--primary-rgb), 0.09);
|
|
2683
|
+
border: none;
|
|
2684
|
+
border-left: 3px solid var(--primary-color);
|
|
2685
|
+
border-radius: 4px;
|
|
2686
|
+
min-height: 36px;
|
|
2687
|
+
|
|
2688
|
+
.cLabel {
|
|
2689
|
+
font-weight: 700;
|
|
2690
|
+
text-transform: uppercase;
|
|
2691
|
+
letter-spacing: 0.04em;
|
|
2692
|
+
font-size: 11.5px;
|
|
2693
|
+
color: var(--primary-color);
|
|
2694
|
+
}
|
|
2695
|
+
|
|
2696
|
+
&:hover {
|
|
2697
|
+
background: rgba(var(--primary-rgb), 0.14);
|
|
2698
|
+
}
|
|
2699
|
+
}
|
|
2700
|
+
|
|
2701
|
+
.cGrip {
|
|
2702
|
+
flex: 0 0 auto;
|
|
2703
|
+
display: flex;
|
|
2704
|
+
align-items: center;
|
|
2705
|
+
color: rgba(var(--paragraph-rgb), 0.4);
|
|
2706
|
+
cursor: grab;
|
|
2707
|
+
|
|
2708
|
+
&:active {
|
|
2709
|
+
cursor: grabbing;
|
|
2710
|
+
}
|
|
2711
|
+
}
|
|
2712
|
+
|
|
2713
|
+
.cNum {
|
|
2714
|
+
flex: 0 0 auto;
|
|
2715
|
+
min-width: 24px;
|
|
2716
|
+
text-align: right;
|
|
2717
|
+
font-size: 10.5px;
|
|
2718
|
+
color: rgba(var(--paragraph-rgb), 0.45);
|
|
2719
|
+
font-variant-numeric: tabular-nums;
|
|
2720
|
+
}
|
|
2721
|
+
|
|
2722
|
+
.cCollapse {
|
|
2723
|
+
flex: 0 0 auto;
|
|
2724
|
+
display: flex;
|
|
2725
|
+
align-items: center;
|
|
2726
|
+
padding: 0;
|
|
2727
|
+
border: none;
|
|
2728
|
+
background: none;
|
|
2729
|
+
color: var(--primary-color);
|
|
2730
|
+
cursor: pointer;
|
|
2731
|
+
}
|
|
2732
|
+
|
|
2733
|
+
.cLabel {
|
|
2734
|
+
flex: 1 1 auto;
|
|
2735
|
+
min-width: 0;
|
|
2736
|
+
font-weight: 600;
|
|
2737
|
+
color: var(--paragraph-color);
|
|
2738
|
+
overflow: hidden;
|
|
2739
|
+
text-overflow: ellipsis;
|
|
2740
|
+
white-space: nowrap;
|
|
2741
|
+
|
|
2742
|
+
em {
|
|
2743
|
+
font-weight: 400;
|
|
2744
|
+
opacity: 0.55;
|
|
2745
|
+
}
|
|
2746
|
+
}
|
|
2747
|
+
|
|
2748
|
+
.cMeta {
|
|
2749
|
+
flex: 0 0 auto;
|
|
2750
|
+
font-size: 10.5px;
|
|
2751
|
+
color: rgba(var(--paragraph-rgb), 0.55);
|
|
2752
|
+
white-space: nowrap;
|
|
2753
|
+
}
|
|
2754
|
+
|
|
2755
|
+
/* Actions stay out of the way until the row is hovered, so 87 rows are not
|
|
2756
|
+
87 clusters of icons competing with the labels. */
|
|
2757
|
+
.cActions {
|
|
2758
|
+
flex: 0 0 auto;
|
|
2759
|
+
display: flex;
|
|
2760
|
+
align-items: center;
|
|
2761
|
+
gap: 1px;
|
|
2762
|
+
opacity: 0;
|
|
2763
|
+
transition: opacity 0.12s linear;
|
|
2764
|
+
|
|
2765
|
+
button {
|
|
2766
|
+
display: flex;
|
|
2767
|
+
align-items: center;
|
|
2768
|
+
padding: 4px;
|
|
2769
|
+
border: none;
|
|
2770
|
+
background: none;
|
|
2771
|
+
color: rgba(var(--paragraph-rgb), 0.55);
|
|
2772
|
+
cursor: pointer;
|
|
2773
|
+
border-radius: 4px;
|
|
2774
|
+
|
|
2775
|
+
&:hover {
|
|
2776
|
+
color: var(--primary-color);
|
|
2777
|
+
background: rgba(var(--primary-rgb), 0.1);
|
|
2778
|
+
}
|
|
2779
|
+
}
|
|
2780
|
+
}
|
|
2781
|
+
|
|
2782
|
+
.cRow:hover .cActions,
|
|
2783
|
+
.cActions:focus-within {
|
|
2784
|
+
opacity: 1;
|
|
2785
|
+
}
|
|
2786
|
+
|
|
2787
|
+
.cDelete:hover {
|
|
2788
|
+
color: var(--secondary-color) !important;
|
|
2789
|
+
background: rgba(var(--secondary-rgb), 0.1) !important;
|
|
2790
|
+
}
|
|
2791
|
+
|
|
2792
|
+
/* ============================================================
|
|
2793
|
+
Preview mode — the form as a supervisor sees it
|
|
2794
|
+
============================================================ */
|
|
2795
|
+
|
|
2796
|
+
.pvForm {
|
|
2797
|
+
/* Sections span the full width and break the row, so each group starts
|
|
2798
|
+
on its own line the way it will in the field app. */
|
|
2799
|
+
align-items: flex-start;
|
|
2800
|
+
padding: 0.5rem 0.25rem 1rem;
|
|
2801
|
+
}
|
|
2802
|
+
|
|
2803
|
+
.pvItem {
|
|
2804
|
+
padding: 0.35rem 0.5rem;
|
|
2805
|
+
box-sizing: border-box;
|
|
2806
|
+
|
|
2807
|
+
/* None of the authoring affordances belong here: no hover outline, no
|
|
2808
|
+
grab cursor, nothing that suggests this view is editable. */
|
|
2809
|
+
cursor: default;
|
|
2810
|
+
|
|
2811
|
+
&:hover {
|
|
2812
|
+
background: none;
|
|
2813
|
+
border-color: transparent;
|
|
2814
|
+
}
|
|
2815
|
+
|
|
2816
|
+
/* Any editing furniture that a shared child style might still emit. */
|
|
2817
|
+
.fieldIndex,
|
|
2818
|
+
.fieldInfo,
|
|
2819
|
+
.fieldControls,
|
|
2820
|
+
.dragHandle {
|
|
2821
|
+
display: none !important;
|
|
2822
|
+
}
|
|
2823
|
+
|
|
2824
|
+
.fieldContent {
|
|
2825
|
+
padding-top: 0 !important;
|
|
2826
|
+
border: none;
|
|
2827
|
+
min-height: 0;
|
|
2828
|
+
}
|
|
2829
|
+
}
|
|
2830
|
+
|
|
2831
|
+
/* Section bars read as headings in preview, full width and self-contained. */
|
|
2832
|
+
.pvForm .fwBuilderItem:has(.gridtxt__header) {
|
|
2833
|
+
width: 100% !important;
|
|
2834
|
+
margin: 1.25rem 0 0.35rem;
|
|
2835
|
+
padding-left: 0;
|
|
2836
|
+
padding-right: 0;
|
|
2837
|
+
}
|
|
2838
|
+
|
|
2839
|
+
/* A dynamic template is not an unfinished one — it should not wear the
|
|
2840
|
+
dashed "something is missing" treatment. */
|
|
2841
|
+
.emptyStateDynamic {
|
|
2842
|
+
border-style: solid;
|
|
2843
|
+
border-color: rgba(var(--primary-rgb), 0.15);
|
|
2844
|
+
background: rgba(var(--primary-rgb), 0.04);
|
|
2845
|
+
max-width: 520px;
|
|
2846
|
+
}
|