@mohasinac/appkit 4.54.1 → 4.55.0-next.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/dist/.build-stamp.json +5 -5
- package/dist/features/media/messages/en.json +67 -67
- package/dist/security/csp.d.ts +16 -1
- package/dist/security/csp.js +5 -3
- package/dist/styles.css +536 -381
- package/dist/tokens/themes/index.d.ts +3 -1
- package/dist/tokens/themes/index.js +11 -1
- package/dist/tokens/themes/technical-dark.d.ts +30 -0
- package/dist/tokens/themes/technical-dark.js +103 -0
- package/dist/tokens/themes/technical-light.d.ts +22 -0
- package/dist/tokens/themes/technical-light.js +89 -0
- package/dist/tokens/tokens.css +155 -0
- package/dist/ui/components/GatedPrice.style.css +43 -43
- package/dist/ui/components/QuickCreateModal.style.css +78 -78
- package/dist/ui/forms/FormShell.style.css +260 -260
- package/package.json +1 -1
package/dist/styles.css
CHANGED
|
@@ -650,6 +650,161 @@
|
|
|
650
650
|
--appkit-shadow-glow-pink: 0 0 0 1px rgba(244,63,94,0.18), 0 4px 20px -4px rgba(244,63,94,0.30);
|
|
651
651
|
}
|
|
652
652
|
|
|
653
|
+
/* --- Theme — Technical Dark ([data-theme="technical-dark"]) --------------- */
|
|
654
|
+
/* Developer-tool identity: graphite surfaces, hairline borders, a mono-forward
|
|
655
|
+
type stack, and accents from a syntax palette (keyword violet, string green,
|
|
656
|
+
number amber, error red) reused semantically for difficulty badges,
|
|
657
|
+
submission verdicts and status chips.
|
|
658
|
+
|
|
659
|
+
Mirrors src/tokens/themes/technical-dark.ts — values must stay identical or
|
|
660
|
+
the first paint disagrees with the hydrated theme.
|
|
661
|
+
|
|
662
|
+
Contrast on --appkit-color-bg (#0b0d10), measured: text 15.82:1,
|
|
663
|
+
muted 7.72:1, faint 4.68:1, primary 6.53:1, lowest status 7.01:1. */
|
|
664
|
+
[data-theme="technical-dark"] {
|
|
665
|
+
--appkit-color-primary: #7c8cff;
|
|
666
|
+
--appkit-color-primary-50: #eef0ff;
|
|
667
|
+
--appkit-color-primary-100: #e0e4ff;
|
|
668
|
+
--appkit-color-primary-200: #c7cdff;
|
|
669
|
+
--appkit-color-primary-300: #a5aeff;
|
|
670
|
+
--appkit-color-primary-400: #8e99ff;
|
|
671
|
+
--appkit-color-primary-500: #7c8cff;
|
|
672
|
+
--appkit-color-primary-600: #5a68e8;
|
|
673
|
+
--appkit-color-primary-700: #4650c4;
|
|
674
|
+
--appkit-color-primary-800: #373f9c;
|
|
675
|
+
--appkit-color-primary-900: #2b317a;
|
|
676
|
+
--appkit-color-primary-950: #171a45;
|
|
677
|
+
|
|
678
|
+
--appkit-color-secondary: #56d39a;
|
|
679
|
+
--appkit-color-secondary-50: #ecfdf5;
|
|
680
|
+
--appkit-color-secondary-100: #d1fae5;
|
|
681
|
+
--appkit-color-secondary-200: #a7f3d0;
|
|
682
|
+
--appkit-color-secondary-300: #7ee7b8;
|
|
683
|
+
--appkit-color-secondary-400: #56d39a;
|
|
684
|
+
--appkit-color-secondary-500: #34b87d;
|
|
685
|
+
--appkit-color-secondary-600: #1f9664;
|
|
686
|
+
--appkit-color-secondary-700: #187752;
|
|
687
|
+
--appkit-color-secondary-800: #155e42;
|
|
688
|
+
--appkit-color-secondary-900: #124b36;
|
|
689
|
+
--appkit-color-secondary-950: #062a1d;
|
|
690
|
+
|
|
691
|
+
--appkit-color-bg: #0b0d10;
|
|
692
|
+
--appkit-color-surface: #13161b;
|
|
693
|
+
--appkit-color-surface-elevated: rgba(19, 22, 27, 0.92);
|
|
694
|
+
--appkit-color-surface-input: rgba(27, 31, 38, 0.7);
|
|
695
|
+
|
|
696
|
+
--appkit-color-surface-hover: rgba(148, 163, 184, 0.1);
|
|
697
|
+
--appkit-color-surface-raised: rgba(27, 31, 38, 0.8);
|
|
698
|
+
--appkit-color-primary-surface: rgba(124, 140, 255, 0.16);
|
|
699
|
+
|
|
700
|
+
--appkit-color-border: #242a33;
|
|
701
|
+
--appkit-color-border-subtle: rgba(36, 42, 51, 0.6);
|
|
702
|
+
|
|
703
|
+
--appkit-color-text: #e4e8ee;
|
|
704
|
+
--appkit-color-text-muted: #9aa4b2;
|
|
705
|
+
--appkit-color-text-faint: #747d8c;
|
|
706
|
+
/* Dark ink on the violet fill: 6.53:1, where white measures 2.98:1 and
|
|
707
|
+
fails. Declared here AND in the TS record or first paint disagrees. */
|
|
708
|
+
--appkit-color-text-on-primary: #0b0d10;
|
|
709
|
+
|
|
710
|
+
--appkit-color-success: #4ade80;
|
|
711
|
+
--appkit-color-success-surface: rgba(22, 101, 68, 0.22);
|
|
712
|
+
--appkit-color-warning: #f2b544;
|
|
713
|
+
--appkit-color-warning-surface: rgba(120, 78, 10, 0.22);
|
|
714
|
+
--appkit-color-error: #ff6b6b;
|
|
715
|
+
--appkit-color-error-surface: rgba(140, 30, 30, 0.22);
|
|
716
|
+
--appkit-color-info: #58b4ff;
|
|
717
|
+
--appkit-color-info-surface: rgba(12, 74, 110, 0.22);
|
|
718
|
+
|
|
719
|
+
/* Amber, deliberately not a status or brand hue — a focus ring that doubles
|
|
720
|
+
as an error colour is unreadable on an invalid field. */
|
|
721
|
+
--appkit-color-focus-ring: #ffb86b;
|
|
722
|
+
--appkit-shadow-glow: 0 0 0 1px rgba(124,140,255,0.14), 0 4px 16px -6px rgba(124,140,255,0.2);
|
|
723
|
+
--appkit-shadow-glow-pink: 0 0 0 1px rgba(86,211,154,0.14), 0 4px 18px -6px rgba(86,211,154,0.22);
|
|
724
|
+
|
|
725
|
+
/* Mono-forward: display/sans are monospace for headings, labels, IDs and
|
|
726
|
+
tables; editorial carries the reading face for long lesson prose. */
|
|
727
|
+
--appkit-font-display: var(--font-mono), "JetBrains Mono", "IBM Plex Mono", ui-monospace, "SFMono-Regular", Consolas, monospace;
|
|
728
|
+
--appkit-font-sans: var(--font-mono), "JetBrains Mono", "IBM Plex Mono", ui-monospace, "SFMono-Regular", Consolas, monospace;
|
|
729
|
+
--appkit-font-editorial: var(--font-body), ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
|
|
730
|
+
--appkit-font-mono: var(--font-mono), "JetBrains Mono", "IBM Plex Mono", ui-monospace, "SFMono-Regular", Consolas, monospace;
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
/* --- Theme — Technical Light ([data-theme="technical-light"]) ------------- */
|
|
734
|
+
/* The matched light counterpart. Every accent is RE-DARKENED rather than
|
|
735
|
+
reused: the dark preset's #7c8cff measures 2.88:1 on this ground and fails
|
|
736
|
+
AA, and its #ffb86b focus ring measures 1.65:1 — an invisible focus ring is
|
|
737
|
+
a keyboard trap.
|
|
738
|
+
|
|
739
|
+
Mirrors src/tokens/themes/technical-light.ts.
|
|
740
|
+
|
|
741
|
+
Contrast on --appkit-color-bg (#fbfbfa), measured: text 17.15:1,
|
|
742
|
+
muted 5.84:1, faint 4.67:1, primary 5.38:1, lowest status 4.80:1. */
|
|
743
|
+
[data-theme="technical-light"] {
|
|
744
|
+
--appkit-color-primary: #4b5bd6;
|
|
745
|
+
--appkit-color-primary-50: #eef0ff;
|
|
746
|
+
--appkit-color-primary-100: #e0e4ff;
|
|
747
|
+
--appkit-color-primary-200: #c7cdff;
|
|
748
|
+
--appkit-color-primary-300: #a5aeff;
|
|
749
|
+
--appkit-color-primary-400: #7c8cff;
|
|
750
|
+
--appkit-color-primary-500: #5a68e8;
|
|
751
|
+
--appkit-color-primary-600: #4b5bd6;
|
|
752
|
+
--appkit-color-primary-700: #3b45ad;
|
|
753
|
+
--appkit-color-primary-800: #2f3789;
|
|
754
|
+
--appkit-color-primary-900: #262c6d;
|
|
755
|
+
--appkit-color-primary-950: #151840;
|
|
756
|
+
|
|
757
|
+
--appkit-color-secondary: #0f8f5f;
|
|
758
|
+
--appkit-color-secondary-50: #ecfdf5;
|
|
759
|
+
--appkit-color-secondary-100: #d1fae5;
|
|
760
|
+
--appkit-color-secondary-200: #a7f3d0;
|
|
761
|
+
--appkit-color-secondary-300: #6ee7b7;
|
|
762
|
+
--appkit-color-secondary-400: #34b87d;
|
|
763
|
+
--appkit-color-secondary-500: #0f8f5f;
|
|
764
|
+
--appkit-color-secondary-600: #0c744d;
|
|
765
|
+
--appkit-color-secondary-700: #0a5c3d;
|
|
766
|
+
--appkit-color-secondary-800: #084830;
|
|
767
|
+
--appkit-color-secondary-900: #063a27;
|
|
768
|
+
--appkit-color-secondary-950: #032016;
|
|
769
|
+
|
|
770
|
+
--appkit-color-bg: #fbfbfa;
|
|
771
|
+
--appkit-color-surface: #ffffff;
|
|
772
|
+
--appkit-color-surface-elevated: rgba(255, 255, 255, 0.96);
|
|
773
|
+
--appkit-color-surface-input: rgba(244, 244, 242, 0.8);
|
|
774
|
+
|
|
775
|
+
--appkit-color-surface-hover: rgba(22, 24, 29, 0.05);
|
|
776
|
+
--appkit-color-surface-raised: rgba(244, 244, 242, 0.9);
|
|
777
|
+
--appkit-color-primary-surface: rgba(75, 91, 214, 0.1);
|
|
778
|
+
|
|
779
|
+
--appkit-color-border: #e2e2df;
|
|
780
|
+
--appkit-color-border-subtle: rgba(226, 226, 223, 0.7);
|
|
781
|
+
|
|
782
|
+
--appkit-color-text: #16181d;
|
|
783
|
+
--appkit-color-text-muted: #5c6370;
|
|
784
|
+
/* #767d89 measured 4.00:1 — AA for large text only. Darkened to clear AA
|
|
785
|
+
at body size. */
|
|
786
|
+
--appkit-color-text-faint: #6b7280;
|
|
787
|
+
--appkit-color-text-on-primary: #ffffff;
|
|
788
|
+
|
|
789
|
+
--appkit-color-success: #13804f;
|
|
790
|
+
--appkit-color-success-surface: rgba(19, 128, 79, 0.1);
|
|
791
|
+
--appkit-color-warning: #9a6400;
|
|
792
|
+
--appkit-color-warning-surface: rgba(154, 100, 0, 0.1);
|
|
793
|
+
--appkit-color-error: #c62828;
|
|
794
|
+
--appkit-color-error-surface: rgba(198, 40, 40, 0.1);
|
|
795
|
+
--appkit-color-info: #0a69b5;
|
|
796
|
+
--appkit-color-info-surface: rgba(10, 105, 181, 0.1);
|
|
797
|
+
|
|
798
|
+
--appkit-color-focus-ring: #b45a00;
|
|
799
|
+
--appkit-shadow-glow: 0 0 0 1px rgba(75,91,214,0.14), 0 4px 16px -6px rgba(75,91,214,0.18);
|
|
800
|
+
--appkit-shadow-glow-pink: 0 0 0 1px rgba(15,143,95,0.14), 0 4px 18px -6px rgba(15,143,95,0.2);
|
|
801
|
+
|
|
802
|
+
--appkit-font-display: var(--font-mono), "JetBrains Mono", "IBM Plex Mono", ui-monospace, "SFMono-Regular", Consolas, monospace;
|
|
803
|
+
--appkit-font-sans: var(--font-mono), "JetBrains Mono", "IBM Plex Mono", ui-monospace, "SFMono-Regular", Consolas, monospace;
|
|
804
|
+
--appkit-font-editorial: var(--font-body), ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
|
|
805
|
+
--appkit-font-mono: var(--font-mono), "JetBrains Mono", "IBM Plex Mono", ui-monospace, "SFMono-Regular", Consolas, monospace;
|
|
806
|
+
}
|
|
807
|
+
|
|
653
808
|
/* --- Typography ----------------------------------------------------------- */
|
|
654
809
|
:root {
|
|
655
810
|
--appkit-font-sans: var(--font-body), ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
|
|
@@ -3481,49 +3636,49 @@
|
|
|
3481
3636
|
color: var(--appkit-color-emerald-300);
|
|
3482
3637
|
}
|
|
3483
3638
|
|
|
3484
|
-
/**
|
|
3485
|
-
* Sign-in gate for money amounts on public listing surfaces.
|
|
3486
|
-
*
|
|
3487
|
-
* The pending state must occupy the SAME vertical space as a rendered price, or
|
|
3488
|
-
* every card in a grid reflows once the session resolves. It is deliberately a
|
|
3489
|
-
* silent placeholder rather than a shimmer: the wait is short, and an animated
|
|
3490
|
-
* skeleton on 24 cards reads as a page that failed to load.
|
|
3491
|
-
*/
|
|
3492
|
-
.appkit-gated-price__pending {
|
|
3493
|
-
display: inline-block;
|
|
3494
|
-
min-width: 5rem;
|
|
3495
|
-
height: 1.25rem;
|
|
3496
|
-
border-radius: 0.25rem;
|
|
3497
|
-
/* 🛑 `--appkit-color-surface-muted` is NOT a token — 15 uses, 0 definitions,
|
|
3498
|
-
and `audit-undefined-css-vars` ratchets it down. An undefined custom
|
|
3499
|
-
property with no fallback makes the whole declaration invalid, so this
|
|
3500
|
-
placeholder had no background at all and the grid still reflowed on
|
|
3501
|
-
resolve, which is the one job it has. */
|
|
3502
|
-
background: var(--appkit-color-surface-input);
|
|
3503
|
-
}
|
|
3504
|
-
|
|
3505
|
-
.appkit-gated-price__prompt {
|
|
3506
|
-
display: inline-flex;
|
|
3507
|
-
align-items: center;
|
|
3508
|
-
/*
|
|
3509
|
-
* The eye is a 2rem IconButton while `__pending` above is a 1.25rem price
|
|
3510
|
-
* line, so a GUEST's row grows by 0.75rem once the session resolves. That is
|
|
3511
|
-
* deliberate and is the lesser of the two: the alternative is making
|
|
3512
|
-
* `__pending` 2rem, which shifts the row for SIGNED-IN users — the ones who
|
|
3513
|
-
* end up looking at real content. The guest shift happens once per load and
|
|
3514
|
-
* applies to every card identically, so the grid moves as one rather than
|
|
3515
|
-
* going ragged.
|
|
3516
|
-
*/
|
|
3517
|
-
line-height: 1.25rem;
|
|
3518
|
-
}
|
|
3519
|
-
|
|
3520
|
-
/*
|
|
3521
|
-
* 🛑 The eye itself has NO rules here, on purpose. It is an `<IconButton
|
|
3522
|
-
* size="sm" variant="outline">`, so its box, ink, hover and focus ring all
|
|
3523
|
-
* come from the design system — a second, private set of button styles for
|
|
3524
|
-
* one control is exactly how a UI ends up with two kinds of icon button that
|
|
3525
|
-
* drift apart. This wrapper only has to keep the row's height stable.
|
|
3526
|
-
*/
|
|
3639
|
+
/**
|
|
3640
|
+
* Sign-in gate for money amounts on public listing surfaces.
|
|
3641
|
+
*
|
|
3642
|
+
* The pending state must occupy the SAME vertical space as a rendered price, or
|
|
3643
|
+
* every card in a grid reflows once the session resolves. It is deliberately a
|
|
3644
|
+
* silent placeholder rather than a shimmer: the wait is short, and an animated
|
|
3645
|
+
* skeleton on 24 cards reads as a page that failed to load.
|
|
3646
|
+
*/
|
|
3647
|
+
.appkit-gated-price__pending {
|
|
3648
|
+
display: inline-block;
|
|
3649
|
+
min-width: 5rem;
|
|
3650
|
+
height: 1.25rem;
|
|
3651
|
+
border-radius: 0.25rem;
|
|
3652
|
+
/* 🛑 `--appkit-color-surface-muted` is NOT a token — 15 uses, 0 definitions,
|
|
3653
|
+
and `audit-undefined-css-vars` ratchets it down. An undefined custom
|
|
3654
|
+
property with no fallback makes the whole declaration invalid, so this
|
|
3655
|
+
placeholder had no background at all and the grid still reflowed on
|
|
3656
|
+
resolve, which is the one job it has. */
|
|
3657
|
+
background: var(--appkit-color-surface-input);
|
|
3658
|
+
}
|
|
3659
|
+
|
|
3660
|
+
.appkit-gated-price__prompt {
|
|
3661
|
+
display: inline-flex;
|
|
3662
|
+
align-items: center;
|
|
3663
|
+
/*
|
|
3664
|
+
* The eye is a 2rem IconButton while `__pending` above is a 1.25rem price
|
|
3665
|
+
* line, so a GUEST's row grows by 0.75rem once the session resolves. That is
|
|
3666
|
+
* deliberate and is the lesser of the two: the alternative is making
|
|
3667
|
+
* `__pending` 2rem, which shifts the row for SIGNED-IN users — the ones who
|
|
3668
|
+
* end up looking at real content. The guest shift happens once per load and
|
|
3669
|
+
* applies to every card identically, so the grid moves as one rather than
|
|
3670
|
+
* going ragged.
|
|
3671
|
+
*/
|
|
3672
|
+
line-height: 1.25rem;
|
|
3673
|
+
}
|
|
3674
|
+
|
|
3675
|
+
/*
|
|
3676
|
+
* 🛑 The eye itself has NO rules here, on purpose. It is an `<IconButton
|
|
3677
|
+
* size="sm" variant="outline">`, so its box, ink, hover and focus ring all
|
|
3678
|
+
* come from the design system — a second, private set of button styles for
|
|
3679
|
+
* one control is exactly how a UI ends up with two kinds of icon button that
|
|
3680
|
+
* drift apart. This wrapper only has to keep the row's height stable.
|
|
3681
|
+
*/
|
|
3527
3682
|
|
|
3528
3683
|
.appkit-item-row {
|
|
3529
3684
|
display: flex;
|
|
@@ -10180,84 +10335,84 @@
|
|
|
10180
10335
|
/* Was ORPHANED — @imported from nowhere, so `.appkit-quick-create-modal` (used
|
|
10181
10336
|
by QuickCreateModal.tsx) shipped to no one. Found by audit-css-shipped.mjs,
|
|
10182
10337
|
which exists because FormShell.style.css had the same defect. */
|
|
10183
|
-
.appkit-quick-create-modal {
|
|
10184
|
-
position: fixed;
|
|
10185
|
-
inset: 0;
|
|
10186
|
-
z-index: var(--appkit-z-modal, 1000);
|
|
10187
|
-
display: flex;
|
|
10188
|
-
align-items: stretch;
|
|
10189
|
-
justify-content: center;
|
|
10190
|
-
}
|
|
10191
|
-
|
|
10192
|
-
.appkit-quick-create-modal__backdrop {
|
|
10193
|
-
position: absolute;
|
|
10194
|
-
inset: 0;
|
|
10195
|
-
background: rgb(0 0 0 / 0.45);
|
|
10196
|
-
}
|
|
10197
|
-
|
|
10198
|
-
.appkit-quick-create-modal__panel {
|
|
10199
|
-
position: relative;
|
|
10200
|
-
display: flex;
|
|
10201
|
-
flex-direction: column;
|
|
10202
|
-
background: var(--appkit-color-surface, #ffffff);
|
|
10203
|
-
color: var(--appkit-color-foreground, inherit);
|
|
10204
|
-
width: 100%;
|
|
10205
|
-
max-width: 560px;
|
|
10206
|
-
margin: auto;
|
|
10207
|
-
max-height: 92vh;
|
|
10208
|
-
border-radius: 0.75rem;
|
|
10209
|
-
box-shadow: var(--appkit-shadow-lg, 0 20px 40px rgb(0 0 0 / 0.25));
|
|
10210
|
-
outline: none;
|
|
10211
|
-
}
|
|
10212
|
-
|
|
10213
|
-
.appkit-quick-create-modal__header {
|
|
10214
|
-
display: flex;
|
|
10215
|
-
align-items: center;
|
|
10216
|
-
justify-content: space-between;
|
|
10217
|
-
padding: 1rem 1.25rem;
|
|
10218
|
-
border-bottom: 1px solid var(--appkit-color-border, rgb(0 0 0 / 0.1));
|
|
10219
|
-
}
|
|
10220
|
-
|
|
10221
|
-
.appkit-quick-create-modal__title {
|
|
10222
|
-
margin: 0;
|
|
10223
|
-
font-size: 1.125rem;
|
|
10224
|
-
font-weight: 600;
|
|
10225
|
-
}
|
|
10226
|
-
|
|
10227
|
-
.appkit-quick-create-modal__body {
|
|
10228
|
-
flex: 1 1 auto;
|
|
10229
|
-
overflow-y: auto;
|
|
10230
|
-
padding: 1.25rem;
|
|
10231
|
-
}
|
|
10232
|
-
|
|
10233
|
-
/* Chrome only — layout comes from ActionRow. Re-adding `display: flex` or
|
|
10234
|
-
`justify-content` here would fight the row this class now decorates. */
|
|
10235
|
-
.appkit-quick-create-modal__footer {
|
|
10236
|
-
padding: 1rem 1.25rem;
|
|
10237
|
-
border-top: 1px solid var(--appkit-color-border, rgb(0 0 0 / 0.1));
|
|
10238
|
-
}
|
|
10239
|
-
|
|
10240
|
-
.appkit-quick-create-modal__full-link {
|
|
10241
|
-
font-size: 0.875rem;
|
|
10242
|
-
color: var(--appkit-color-primary, #6366f1);
|
|
10243
|
-
text-decoration: underline;
|
|
10244
|
-
}
|
|
10245
|
-
|
|
10246
|
-
@media (max-width: 640px) {
|
|
10247
|
-
.appkit-quick-create-modal {
|
|
10248
|
-
align-items: flex-end;
|
|
10249
|
-
}
|
|
10250
|
-
.appkit-quick-create-modal__panel {
|
|
10251
|
-
max-width: 100%;
|
|
10252
|
-
margin: 0;
|
|
10253
|
-
border-radius: 0.75rem 0.75rem 0 0;
|
|
10254
|
-
max-height: 92vh;
|
|
10255
|
-
}
|
|
10256
|
-
}
|
|
10257
|
-
|
|
10258
|
-
[data-theme="default-dark"] .appkit-quick-create-modal__panel {
|
|
10259
|
-
background: var(--appkit-color-surface-dark, #1e293b);
|
|
10260
|
-
}
|
|
10338
|
+
.appkit-quick-create-modal {
|
|
10339
|
+
position: fixed;
|
|
10340
|
+
inset: 0;
|
|
10341
|
+
z-index: var(--appkit-z-modal, 1000);
|
|
10342
|
+
display: flex;
|
|
10343
|
+
align-items: stretch;
|
|
10344
|
+
justify-content: center;
|
|
10345
|
+
}
|
|
10346
|
+
|
|
10347
|
+
.appkit-quick-create-modal__backdrop {
|
|
10348
|
+
position: absolute;
|
|
10349
|
+
inset: 0;
|
|
10350
|
+
background: rgb(0 0 0 / 0.45);
|
|
10351
|
+
}
|
|
10352
|
+
|
|
10353
|
+
.appkit-quick-create-modal__panel {
|
|
10354
|
+
position: relative;
|
|
10355
|
+
display: flex;
|
|
10356
|
+
flex-direction: column;
|
|
10357
|
+
background: var(--appkit-color-surface, #ffffff);
|
|
10358
|
+
color: var(--appkit-color-foreground, inherit);
|
|
10359
|
+
width: 100%;
|
|
10360
|
+
max-width: 560px;
|
|
10361
|
+
margin: auto;
|
|
10362
|
+
max-height: 92vh;
|
|
10363
|
+
border-radius: 0.75rem;
|
|
10364
|
+
box-shadow: var(--appkit-shadow-lg, 0 20px 40px rgb(0 0 0 / 0.25));
|
|
10365
|
+
outline: none;
|
|
10366
|
+
}
|
|
10367
|
+
|
|
10368
|
+
.appkit-quick-create-modal__header {
|
|
10369
|
+
display: flex;
|
|
10370
|
+
align-items: center;
|
|
10371
|
+
justify-content: space-between;
|
|
10372
|
+
padding: 1rem 1.25rem;
|
|
10373
|
+
border-bottom: 1px solid var(--appkit-color-border, rgb(0 0 0 / 0.1));
|
|
10374
|
+
}
|
|
10375
|
+
|
|
10376
|
+
.appkit-quick-create-modal__title {
|
|
10377
|
+
margin: 0;
|
|
10378
|
+
font-size: 1.125rem;
|
|
10379
|
+
font-weight: 600;
|
|
10380
|
+
}
|
|
10381
|
+
|
|
10382
|
+
.appkit-quick-create-modal__body {
|
|
10383
|
+
flex: 1 1 auto;
|
|
10384
|
+
overflow-y: auto;
|
|
10385
|
+
padding: 1.25rem;
|
|
10386
|
+
}
|
|
10387
|
+
|
|
10388
|
+
/* Chrome only — layout comes from ActionRow. Re-adding `display: flex` or
|
|
10389
|
+
`justify-content` here would fight the row this class now decorates. */
|
|
10390
|
+
.appkit-quick-create-modal__footer {
|
|
10391
|
+
padding: 1rem 1.25rem;
|
|
10392
|
+
border-top: 1px solid var(--appkit-color-border, rgb(0 0 0 / 0.1));
|
|
10393
|
+
}
|
|
10394
|
+
|
|
10395
|
+
.appkit-quick-create-modal__full-link {
|
|
10396
|
+
font-size: 0.875rem;
|
|
10397
|
+
color: var(--appkit-color-primary, #6366f1);
|
|
10398
|
+
text-decoration: underline;
|
|
10399
|
+
}
|
|
10400
|
+
|
|
10401
|
+
@media (max-width: 640px) {
|
|
10402
|
+
.appkit-quick-create-modal {
|
|
10403
|
+
align-items: flex-end;
|
|
10404
|
+
}
|
|
10405
|
+
.appkit-quick-create-modal__panel {
|
|
10406
|
+
max-width: 100%;
|
|
10407
|
+
margin: 0;
|
|
10408
|
+
border-radius: 0.75rem 0.75rem 0 0;
|
|
10409
|
+
max-height: 92vh;
|
|
10410
|
+
}
|
|
10411
|
+
}
|
|
10412
|
+
|
|
10413
|
+
[data-theme="default-dark"] .appkit-quick-create-modal__panel {
|
|
10414
|
+
background: var(--appkit-color-surface-dark, #1e293b);
|
|
10415
|
+
}
|
|
10261
10416
|
|
|
10262
10417
|
/* Last on purpose: hand-mode rules are cross-cutting overrides keyed on
|
|
10263
10418
|
`[data-hand]`, not a component's own base styles. */
|
|
@@ -10321,266 +10476,266 @@
|
|
|
10321
10476
|
* bundle-css.mjs flattens only the @import chain rooted here, which is why a
|
|
10322
10477
|
* stylesheet reachable just from JS never made it in.
|
|
10323
10478
|
*/
|
|
10324
|
-
/* ─── FormShell ─────────────────────────────────────────────────────────────── */
|
|
10325
|
-
|
|
10326
|
-
.appkit-formshell {
|
|
10327
|
-
display: flex;
|
|
10328
|
-
flex-direction: column;
|
|
10329
|
-
gap: var(--appkit-spacing-6, 1.5rem);
|
|
10330
|
-
}
|
|
10331
|
-
|
|
10332
|
-
/* Header */
|
|
10333
|
-
.appkit-formshell__header {
|
|
10334
|
-
display: flex;
|
|
10335
|
-
flex-direction: column;
|
|
10336
|
-
gap: var(--appkit-spacing-4, 1rem);
|
|
10337
|
-
}
|
|
10338
|
-
|
|
10339
|
-
.appkit-formshell__title {
|
|
10340
|
-
font-size: var(--appkit-font-size-lg, 1.125rem);
|
|
10341
|
-
font-weight: 600;
|
|
10342
|
-
color: var(--appkit-color-text-primary);
|
|
10343
|
-
}
|
|
10344
|
-
|
|
10345
|
-
/* ─── Step Indicator ──────────────────────────────────────────────────────── */
|
|
10346
|
-
|
|
10347
|
-
.appkit-formshell__step-indicator {
|
|
10348
|
-
display: flex;
|
|
10349
|
-
flex-wrap: wrap;
|
|
10350
|
-
gap: var(--appkit-spacing-1, 0.25rem);
|
|
10351
|
-
border-bottom: 1px solid var(--appkit-color-border);
|
|
10352
|
-
padding-bottom: var(--appkit-spacing-3, 0.75rem);
|
|
10353
|
-
}
|
|
10354
|
-
|
|
10355
|
-
.appkit-formshell__step-btn {
|
|
10356
|
-
display: flex;
|
|
10357
|
-
align-items: center;
|
|
10358
|
-
gap: var(--appkit-spacing-2, 0.5rem);
|
|
10359
|
-
padding: var(--appkit-spacing-1-5, 0.375rem) var(--appkit-spacing-3, 0.75rem);
|
|
10360
|
-
border-radius: var(--appkit-radius-md, 0.375rem);
|
|
10361
|
-
background: transparent;
|
|
10362
|
-
border: 1px solid transparent;
|
|
10363
|
-
color: var(--appkit-color-text-secondary);
|
|
10364
|
-
cursor: pointer;
|
|
10365
|
-
font-size: var(--appkit-font-size-sm, 0.875rem);
|
|
10366
|
-
transition: background 0.15s, border-color 0.15s, color 0.15s;
|
|
10367
|
-
}
|
|
10368
|
-
|
|
10369
|
-
.appkit-formshell__step-btn:hover {
|
|
10370
|
-
background: var(--appkit-color-surface-hover);
|
|
10371
|
-
border-color: var(--appkit-color-border);
|
|
10372
|
-
}
|
|
10373
|
-
|
|
10374
|
-
.appkit-formshell__step-btn--active {
|
|
10375
|
-
background: var(--appkit-color-primary-subtle, rgb(from var(--appkit-color-primary) r g b / 0.1));
|
|
10376
|
-
border-color: var(--appkit-color-primary);
|
|
10377
|
-
color: var(--appkit-color-primary);
|
|
10378
|
-
font-weight: 500;
|
|
10379
|
-
}
|
|
10380
|
-
|
|
10381
|
-
.appkit-formshell__step-btn--error {
|
|
10382
|
-
color: var(--appkit-color-error, #dc2626);
|
|
10383
|
-
border-color: var(--appkit-color-error, #dc2626);
|
|
10384
|
-
}
|
|
10385
|
-
|
|
10386
|
-
.appkit-formshell__step-dot {
|
|
10387
|
-
position: relative;
|
|
10388
|
-
display: flex;
|
|
10389
|
-
align-items: center;
|
|
10390
|
-
justify-content: center;
|
|
10391
|
-
width: 1.5rem;
|
|
10392
|
-
height: 1.5rem;
|
|
10393
|
-
border-radius: 9999px;
|
|
10394
|
-
background: var(--appkit-color-surface-secondary);
|
|
10395
|
-
font-size: var(--appkit-font-size-xs, 0.75rem);
|
|
10396
|
-
font-weight: 600;
|
|
10397
|
-
flex-shrink: 0;
|
|
10398
|
-
}
|
|
10399
|
-
|
|
10400
|
-
.appkit-formshell__step-btn--active .appkit-formshell__step-dot {
|
|
10401
|
-
background: var(--appkit-color-primary);
|
|
10402
|
-
color: #fff;
|
|
10403
|
-
}
|
|
10404
|
-
|
|
10405
|
-
.appkit-formshell__step-btn--error .appkit-formshell__step-dot {
|
|
10406
|
-
background: var(--appkit-color-error, #dc2626);
|
|
10407
|
-
color: #fff;
|
|
10408
|
-
}
|
|
10409
|
-
|
|
10410
|
-
/* Red dot badge on step dot */
|
|
10411
|
-
.appkit-formshell__step-error-badge {
|
|
10412
|
-
position: absolute;
|
|
10413
|
-
top: -3px;
|
|
10414
|
-
right: -3px;
|
|
10415
|
-
width: 8px;
|
|
10416
|
-
height: 8px;
|
|
10417
|
-
border-radius: 9999px;
|
|
10418
|
-
background: var(--appkit-color-error, #dc2626);
|
|
10419
|
-
border: 2px solid var(--appkit-color-surface);
|
|
10420
|
-
}
|
|
10421
|
-
|
|
10422
|
-
/* Inline error count badge (accordion header) */
|
|
10423
|
-
.appkit-formshell__step-error-badge--inline {
|
|
10424
|
-
position: static;
|
|
10425
|
-
width: auto;
|
|
10426
|
-
height: auto;
|
|
10427
|
-
border-radius: var(--appkit-radius-full, 9999px);
|
|
10428
|
-
padding: 0 0.375rem;
|
|
10429
|
-
font-size: var(--appkit-font-size-xs, 0.75rem);
|
|
10430
|
-
font-weight: 600;
|
|
10431
|
-
color: #fff;
|
|
10432
|
-
line-height: 1.4;
|
|
10433
|
-
border: none;
|
|
10434
|
-
}
|
|
10435
|
-
|
|
10436
|
-
.appkit-formshell__step-label {
|
|
10437
|
-
display: none;
|
|
10438
|
-
}
|
|
10439
|
-
|
|
10440
|
-
@media (min-width: 640px) {
|
|
10441
|
-
.appkit-formshell__step-label {
|
|
10442
|
-
display: inline;
|
|
10443
|
-
}
|
|
10444
|
-
}
|
|
10445
|
-
|
|
10446
|
-
/* ─── Error Summary ───────────────────────────────────────────────────────── */
|
|
10447
|
-
|
|
10448
|
-
.appkit-formshell__error-summary {
|
|
10449
|
-
border: 1px solid var(--appkit-color-error, #dc2626);
|
|
10450
|
-
border-radius: var(--appkit-radius-md, 0.375rem);
|
|
10451
|
-
padding: var(--appkit-spacing-3, 0.75rem);
|
|
10452
|
-
background: rgb(from var(--appkit-color-error, #dc2626) r g b / 0.05);
|
|
10453
|
-
}
|
|
10454
|
-
|
|
10455
|
-
.appkit-formshell__error-summary__title {
|
|
10456
|
-
font-weight: 600;
|
|
10457
|
-
margin-bottom: var(--appkit-spacing-2, 0.5rem);
|
|
10458
|
-
}
|
|
10459
|
-
|
|
10460
|
-
.appkit-formshell__error-summary__list {
|
|
10461
|
-
list-style: disc;
|
|
10462
|
-
padding-left: 1.25rem;
|
|
10463
|
-
display: flex;
|
|
10464
|
-
flex-direction: column;
|
|
10465
|
-
gap: var(--appkit-spacing-1, 0.25rem);
|
|
10466
|
-
}
|
|
10467
|
-
|
|
10468
|
-
.appkit-formshell__error-summary__step-link {
|
|
10469
|
-
background: none;
|
|
10470
|
-
border: none;
|
|
10471
|
-
padding: 0;
|
|
10472
|
-
margin: 0;
|
|
10473
|
-
font: inherit;
|
|
10474
|
-
color: inherit;
|
|
10475
|
-
text-align: left;
|
|
10476
|
-
cursor: pointer;
|
|
10477
|
-
text-decoration: underline;
|
|
10478
|
-
text-underline-offset: 2px;
|
|
10479
|
-
}
|
|
10480
|
-
|
|
10481
|
-
.appkit-formshell__error-summary__step-link:hover {
|
|
10482
|
-
color: var(--appkit-color-error, #dc2626);
|
|
10483
|
-
}
|
|
10484
|
-
|
|
10485
|
-
/* ─── Body + Steps ───────────────────────────────────────────────────────── */
|
|
10486
|
-
|
|
10487
|
-
.appkit-formshell__body {
|
|
10488
|
-
flex: 1;
|
|
10489
|
-
/* Ensure body content is not hidden under the sticky footer. The footer is
|
|
10490
|
-
~56px tall; add generous padding so the last field is always reachable. */
|
|
10491
|
-
padding-bottom: 5rem;
|
|
10492
|
-
}
|
|
10493
|
-
|
|
10494
|
-
.appkit-formshell__steps {
|
|
10495
|
-
display: flex;
|
|
10496
|
-
flex-direction: column;
|
|
10497
|
-
gap: var(--appkit-spacing-1, 0.25rem);
|
|
10498
|
-
}
|
|
10499
|
-
|
|
10500
|
-
.appkit-formshell__step {
|
|
10501
|
-
border: 1px solid var(--appkit-color-border);
|
|
10502
|
-
border-radius: var(--appkit-radius-md, 0.375rem);
|
|
10503
|
-
overflow: hidden;
|
|
10504
|
-
}
|
|
10505
|
-
|
|
10506
|
-
.appkit-formshell__step--active {
|
|
10507
|
-
border-color: var(--appkit-color-primary);
|
|
10508
|
-
}
|
|
10509
|
-
|
|
10510
|
-
.appkit-formshell__step--error {
|
|
10511
|
-
border-color: var(--appkit-color-error, #dc2626);
|
|
10512
|
-
}
|
|
10513
|
-
|
|
10514
|
-
/* Mobile accordion button — hidden on lg+ (step indicator handles navigation) */
|
|
10515
|
-
.appkit-formshell__step-accordion-btn {
|
|
10516
|
-
display: flex;
|
|
10517
|
-
align-items: center;
|
|
10518
|
-
justify-content: space-between;
|
|
10519
|
-
width: 100%;
|
|
10520
|
-
padding: var(--appkit-spacing-3, 0.75rem) var(--appkit-spacing-4, 1rem);
|
|
10521
|
-
background: var(--appkit-color-surface-secondary);
|
|
10522
|
-
border: none;
|
|
10523
|
-
cursor: pointer;
|
|
10524
|
-
font-size: var(--appkit-font-size-sm, 0.875rem);
|
|
10525
|
-
font-weight: 500;
|
|
10526
|
-
color: var(--appkit-color-text-primary);
|
|
10527
|
-
text-align: left;
|
|
10528
|
-
}
|
|
10529
|
-
|
|
10530
|
-
.appkit-formshell__step-accordion-label {
|
|
10531
|
-
flex: 1;
|
|
10532
|
-
}
|
|
10533
|
-
|
|
10534
|
-
/* On lg+ the accordion controls are purely decorative; the step indicator drives navigation */
|
|
10535
|
-
@media (min-width: 1024px) {
|
|
10536
|
-
.appkit-formshell--accordion-mobile .appkit-formshell__step-accordion-btn {
|
|
10537
|
-
display: none;
|
|
10538
|
-
}
|
|
10539
|
-
|
|
10540
|
-
.appkit-formshell--accordion-mobile .appkit-formshell__step [hidden] {
|
|
10541
|
-
display: block !important;
|
|
10542
|
-
}
|
|
10543
|
-
|
|
10544
|
-
.appkit-formshell--accordion-mobile .appkit-formshell__step-content {
|
|
10545
|
-
display: block !important;
|
|
10546
|
-
}
|
|
10547
|
-
}
|
|
10548
|
-
|
|
10549
|
-
.appkit-formshell__step-content {
|
|
10550
|
-
padding: 0.75rem 1.25rem;
|
|
10551
|
-
}
|
|
10552
|
-
|
|
10553
|
-
@media (max-width: 639px) {
|
|
10554
|
-
.appkit-formshell__step-content {
|
|
10555
|
-
padding: 0.5rem 0.875rem;
|
|
10556
|
-
}
|
|
10557
|
-
}
|
|
10558
|
-
/* --- Footer --------------------------------------------------------------- */
|
|
10559
|
-
|
|
10560
|
-
/*
|
|
10561
|
-
* `.appkit-formshell__footer`, `__step-nav` and `__actions` were deleted here:
|
|
10562
|
-
* `ui/forms/FormShell.tsx` is context/state only and renders no footer JSX, so
|
|
10563
|
-
* nothing had referenced them for a long time. The real form footer lives in
|
|
10564
|
-
* `features/shell/FormShell.tsx` and is an ActionRow now.
|
|
10565
|
-
*
|
|
10566
|
-
* Worth recording: this dead block held the ONLY `flex-wrap: wrap` on any
|
|
10567
|
-
* action row in the codebase. Every live footer had lost it.
|
|
10568
|
-
*/
|
|
10569
|
-
|
|
10570
|
-
/* ─── Dark mode ──────────────────────────────────────────────────────────── */
|
|
10571
|
-
|
|
10572
|
-
.dark .appkit-formshell__title {
|
|
10573
|
-
color: var(--appkit-color-text-primary-dark, inherit);
|
|
10574
|
-
}
|
|
10575
|
-
|
|
10576
|
-
.dark .appkit-formshell__step-accordion-btn {
|
|
10577
|
-
background: var(--appkit-color-surface-secondary-dark, var(--appkit-color-surface-secondary));
|
|
10578
|
-
color: var(--appkit-color-text-primary-dark, inherit);
|
|
10579
|
-
}
|
|
10580
|
-
|
|
10581
|
-
.dark .appkit-formshell__error-summary {
|
|
10582
|
-
background: rgb(from var(--appkit-color-error, #dc2626) r g b / 0.1);
|
|
10583
|
-
}
|
|
10479
|
+
/* ─── FormShell ─────────────────────────────────────────────────────────────── */
|
|
10480
|
+
|
|
10481
|
+
.appkit-formshell {
|
|
10482
|
+
display: flex;
|
|
10483
|
+
flex-direction: column;
|
|
10484
|
+
gap: var(--appkit-spacing-6, 1.5rem);
|
|
10485
|
+
}
|
|
10486
|
+
|
|
10487
|
+
/* Header */
|
|
10488
|
+
.appkit-formshell__header {
|
|
10489
|
+
display: flex;
|
|
10490
|
+
flex-direction: column;
|
|
10491
|
+
gap: var(--appkit-spacing-4, 1rem);
|
|
10492
|
+
}
|
|
10493
|
+
|
|
10494
|
+
.appkit-formshell__title {
|
|
10495
|
+
font-size: var(--appkit-font-size-lg, 1.125rem);
|
|
10496
|
+
font-weight: 600;
|
|
10497
|
+
color: var(--appkit-color-text-primary);
|
|
10498
|
+
}
|
|
10499
|
+
|
|
10500
|
+
/* ─── Step Indicator ──────────────────────────────────────────────────────── */
|
|
10501
|
+
|
|
10502
|
+
.appkit-formshell__step-indicator {
|
|
10503
|
+
display: flex;
|
|
10504
|
+
flex-wrap: wrap;
|
|
10505
|
+
gap: var(--appkit-spacing-1, 0.25rem);
|
|
10506
|
+
border-bottom: 1px solid var(--appkit-color-border);
|
|
10507
|
+
padding-bottom: var(--appkit-spacing-3, 0.75rem);
|
|
10508
|
+
}
|
|
10509
|
+
|
|
10510
|
+
.appkit-formshell__step-btn {
|
|
10511
|
+
display: flex;
|
|
10512
|
+
align-items: center;
|
|
10513
|
+
gap: var(--appkit-spacing-2, 0.5rem);
|
|
10514
|
+
padding: var(--appkit-spacing-1-5, 0.375rem) var(--appkit-spacing-3, 0.75rem);
|
|
10515
|
+
border-radius: var(--appkit-radius-md, 0.375rem);
|
|
10516
|
+
background: transparent;
|
|
10517
|
+
border: 1px solid transparent;
|
|
10518
|
+
color: var(--appkit-color-text-secondary);
|
|
10519
|
+
cursor: pointer;
|
|
10520
|
+
font-size: var(--appkit-font-size-sm, 0.875rem);
|
|
10521
|
+
transition: background 0.15s, border-color 0.15s, color 0.15s;
|
|
10522
|
+
}
|
|
10523
|
+
|
|
10524
|
+
.appkit-formshell__step-btn:hover {
|
|
10525
|
+
background: var(--appkit-color-surface-hover);
|
|
10526
|
+
border-color: var(--appkit-color-border);
|
|
10527
|
+
}
|
|
10528
|
+
|
|
10529
|
+
.appkit-formshell__step-btn--active {
|
|
10530
|
+
background: var(--appkit-color-primary-subtle, rgb(from var(--appkit-color-primary) r g b / 0.1));
|
|
10531
|
+
border-color: var(--appkit-color-primary);
|
|
10532
|
+
color: var(--appkit-color-primary);
|
|
10533
|
+
font-weight: 500;
|
|
10534
|
+
}
|
|
10535
|
+
|
|
10536
|
+
.appkit-formshell__step-btn--error {
|
|
10537
|
+
color: var(--appkit-color-error, #dc2626);
|
|
10538
|
+
border-color: var(--appkit-color-error, #dc2626);
|
|
10539
|
+
}
|
|
10540
|
+
|
|
10541
|
+
.appkit-formshell__step-dot {
|
|
10542
|
+
position: relative;
|
|
10543
|
+
display: flex;
|
|
10544
|
+
align-items: center;
|
|
10545
|
+
justify-content: center;
|
|
10546
|
+
width: 1.5rem;
|
|
10547
|
+
height: 1.5rem;
|
|
10548
|
+
border-radius: 9999px;
|
|
10549
|
+
background: var(--appkit-color-surface-secondary);
|
|
10550
|
+
font-size: var(--appkit-font-size-xs, 0.75rem);
|
|
10551
|
+
font-weight: 600;
|
|
10552
|
+
flex-shrink: 0;
|
|
10553
|
+
}
|
|
10554
|
+
|
|
10555
|
+
.appkit-formshell__step-btn--active .appkit-formshell__step-dot {
|
|
10556
|
+
background: var(--appkit-color-primary);
|
|
10557
|
+
color: #fff;
|
|
10558
|
+
}
|
|
10559
|
+
|
|
10560
|
+
.appkit-formshell__step-btn--error .appkit-formshell__step-dot {
|
|
10561
|
+
background: var(--appkit-color-error, #dc2626);
|
|
10562
|
+
color: #fff;
|
|
10563
|
+
}
|
|
10564
|
+
|
|
10565
|
+
/* Red dot badge on step dot */
|
|
10566
|
+
.appkit-formshell__step-error-badge {
|
|
10567
|
+
position: absolute;
|
|
10568
|
+
top: -3px;
|
|
10569
|
+
right: -3px;
|
|
10570
|
+
width: 8px;
|
|
10571
|
+
height: 8px;
|
|
10572
|
+
border-radius: 9999px;
|
|
10573
|
+
background: var(--appkit-color-error, #dc2626);
|
|
10574
|
+
border: 2px solid var(--appkit-color-surface);
|
|
10575
|
+
}
|
|
10576
|
+
|
|
10577
|
+
/* Inline error count badge (accordion header) */
|
|
10578
|
+
.appkit-formshell__step-error-badge--inline {
|
|
10579
|
+
position: static;
|
|
10580
|
+
width: auto;
|
|
10581
|
+
height: auto;
|
|
10582
|
+
border-radius: var(--appkit-radius-full, 9999px);
|
|
10583
|
+
padding: 0 0.375rem;
|
|
10584
|
+
font-size: var(--appkit-font-size-xs, 0.75rem);
|
|
10585
|
+
font-weight: 600;
|
|
10586
|
+
color: #fff;
|
|
10587
|
+
line-height: 1.4;
|
|
10588
|
+
border: none;
|
|
10589
|
+
}
|
|
10590
|
+
|
|
10591
|
+
.appkit-formshell__step-label {
|
|
10592
|
+
display: none;
|
|
10593
|
+
}
|
|
10594
|
+
|
|
10595
|
+
@media (min-width: 640px) {
|
|
10596
|
+
.appkit-formshell__step-label {
|
|
10597
|
+
display: inline;
|
|
10598
|
+
}
|
|
10599
|
+
}
|
|
10600
|
+
|
|
10601
|
+
/* ─── Error Summary ───────────────────────────────────────────────────────── */
|
|
10602
|
+
|
|
10603
|
+
.appkit-formshell__error-summary {
|
|
10604
|
+
border: 1px solid var(--appkit-color-error, #dc2626);
|
|
10605
|
+
border-radius: var(--appkit-radius-md, 0.375rem);
|
|
10606
|
+
padding: var(--appkit-spacing-3, 0.75rem);
|
|
10607
|
+
background: rgb(from var(--appkit-color-error, #dc2626) r g b / 0.05);
|
|
10608
|
+
}
|
|
10609
|
+
|
|
10610
|
+
.appkit-formshell__error-summary__title {
|
|
10611
|
+
font-weight: 600;
|
|
10612
|
+
margin-bottom: var(--appkit-spacing-2, 0.5rem);
|
|
10613
|
+
}
|
|
10614
|
+
|
|
10615
|
+
.appkit-formshell__error-summary__list {
|
|
10616
|
+
list-style: disc;
|
|
10617
|
+
padding-left: 1.25rem;
|
|
10618
|
+
display: flex;
|
|
10619
|
+
flex-direction: column;
|
|
10620
|
+
gap: var(--appkit-spacing-1, 0.25rem);
|
|
10621
|
+
}
|
|
10622
|
+
|
|
10623
|
+
.appkit-formshell__error-summary__step-link {
|
|
10624
|
+
background: none;
|
|
10625
|
+
border: none;
|
|
10626
|
+
padding: 0;
|
|
10627
|
+
margin: 0;
|
|
10628
|
+
font: inherit;
|
|
10629
|
+
color: inherit;
|
|
10630
|
+
text-align: left;
|
|
10631
|
+
cursor: pointer;
|
|
10632
|
+
text-decoration: underline;
|
|
10633
|
+
text-underline-offset: 2px;
|
|
10634
|
+
}
|
|
10635
|
+
|
|
10636
|
+
.appkit-formshell__error-summary__step-link:hover {
|
|
10637
|
+
color: var(--appkit-color-error, #dc2626);
|
|
10638
|
+
}
|
|
10639
|
+
|
|
10640
|
+
/* ─── Body + Steps ───────────────────────────────────────────────────────── */
|
|
10641
|
+
|
|
10642
|
+
.appkit-formshell__body {
|
|
10643
|
+
flex: 1;
|
|
10644
|
+
/* Ensure body content is not hidden under the sticky footer. The footer is
|
|
10645
|
+
~56px tall; add generous padding so the last field is always reachable. */
|
|
10646
|
+
padding-bottom: 5rem;
|
|
10647
|
+
}
|
|
10648
|
+
|
|
10649
|
+
.appkit-formshell__steps {
|
|
10650
|
+
display: flex;
|
|
10651
|
+
flex-direction: column;
|
|
10652
|
+
gap: var(--appkit-spacing-1, 0.25rem);
|
|
10653
|
+
}
|
|
10654
|
+
|
|
10655
|
+
.appkit-formshell__step {
|
|
10656
|
+
border: 1px solid var(--appkit-color-border);
|
|
10657
|
+
border-radius: var(--appkit-radius-md, 0.375rem);
|
|
10658
|
+
overflow: hidden;
|
|
10659
|
+
}
|
|
10660
|
+
|
|
10661
|
+
.appkit-formshell__step--active {
|
|
10662
|
+
border-color: var(--appkit-color-primary);
|
|
10663
|
+
}
|
|
10664
|
+
|
|
10665
|
+
.appkit-formshell__step--error {
|
|
10666
|
+
border-color: var(--appkit-color-error, #dc2626);
|
|
10667
|
+
}
|
|
10668
|
+
|
|
10669
|
+
/* Mobile accordion button — hidden on lg+ (step indicator handles navigation) */
|
|
10670
|
+
.appkit-formshell__step-accordion-btn {
|
|
10671
|
+
display: flex;
|
|
10672
|
+
align-items: center;
|
|
10673
|
+
justify-content: space-between;
|
|
10674
|
+
width: 100%;
|
|
10675
|
+
padding: var(--appkit-spacing-3, 0.75rem) var(--appkit-spacing-4, 1rem);
|
|
10676
|
+
background: var(--appkit-color-surface-secondary);
|
|
10677
|
+
border: none;
|
|
10678
|
+
cursor: pointer;
|
|
10679
|
+
font-size: var(--appkit-font-size-sm, 0.875rem);
|
|
10680
|
+
font-weight: 500;
|
|
10681
|
+
color: var(--appkit-color-text-primary);
|
|
10682
|
+
text-align: left;
|
|
10683
|
+
}
|
|
10684
|
+
|
|
10685
|
+
.appkit-formshell__step-accordion-label {
|
|
10686
|
+
flex: 1;
|
|
10687
|
+
}
|
|
10688
|
+
|
|
10689
|
+
/* On lg+ the accordion controls are purely decorative; the step indicator drives navigation */
|
|
10690
|
+
@media (min-width: 1024px) {
|
|
10691
|
+
.appkit-formshell--accordion-mobile .appkit-formshell__step-accordion-btn {
|
|
10692
|
+
display: none;
|
|
10693
|
+
}
|
|
10694
|
+
|
|
10695
|
+
.appkit-formshell--accordion-mobile .appkit-formshell__step [hidden] {
|
|
10696
|
+
display: block !important;
|
|
10697
|
+
}
|
|
10698
|
+
|
|
10699
|
+
.appkit-formshell--accordion-mobile .appkit-formshell__step-content {
|
|
10700
|
+
display: block !important;
|
|
10701
|
+
}
|
|
10702
|
+
}
|
|
10703
|
+
|
|
10704
|
+
.appkit-formshell__step-content {
|
|
10705
|
+
padding: 0.75rem 1.25rem;
|
|
10706
|
+
}
|
|
10707
|
+
|
|
10708
|
+
@media (max-width: 639px) {
|
|
10709
|
+
.appkit-formshell__step-content {
|
|
10710
|
+
padding: 0.5rem 0.875rem;
|
|
10711
|
+
}
|
|
10712
|
+
}
|
|
10713
|
+
/* --- Footer --------------------------------------------------------------- */
|
|
10714
|
+
|
|
10715
|
+
/*
|
|
10716
|
+
* `.appkit-formshell__footer`, `__step-nav` and `__actions` were deleted here:
|
|
10717
|
+
* `ui/forms/FormShell.tsx` is context/state only and renders no footer JSX, so
|
|
10718
|
+
* nothing had referenced them for a long time. The real form footer lives in
|
|
10719
|
+
* `features/shell/FormShell.tsx` and is an ActionRow now.
|
|
10720
|
+
*
|
|
10721
|
+
* Worth recording: this dead block held the ONLY `flex-wrap: wrap` on any
|
|
10722
|
+
* action row in the codebase. Every live footer had lost it.
|
|
10723
|
+
*/
|
|
10724
|
+
|
|
10725
|
+
/* ─── Dark mode ──────────────────────────────────────────────────────────── */
|
|
10726
|
+
|
|
10727
|
+
.dark .appkit-formshell__title {
|
|
10728
|
+
color: var(--appkit-color-text-primary-dark, inherit);
|
|
10729
|
+
}
|
|
10730
|
+
|
|
10731
|
+
.dark .appkit-formshell__step-accordion-btn {
|
|
10732
|
+
background: var(--appkit-color-surface-secondary-dark, var(--appkit-color-surface-secondary));
|
|
10733
|
+
color: var(--appkit-color-text-primary-dark, inherit);
|
|
10734
|
+
}
|
|
10735
|
+
|
|
10736
|
+
.dark .appkit-formshell__error-summary {
|
|
10737
|
+
background: rgb(from var(--appkit-color-error, #dc2626) r g b / 0.1);
|
|
10738
|
+
}
|
|
10584
10739
|
|
|
10585
10740
|
/*
|
|
10586
10741
|
* Third-party stylesheet, vendored into dist/vendor by copy-assets.mjs.
|