@lockerverse/react 0.2.68 → 0.2.70

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/styles.css CHANGED
@@ -1,3 +1,5 @@
1
+ @import "./form-ui.css";
2
+
1
3
  .lockerverse-payment {
2
4
  --lockerverse-accent: #38d77a;
3
5
  --lockerverse-accent-contrast: #000;
@@ -298,16 +300,6 @@
298
300
  margin-top: 4px;
299
301
  }
300
302
 
301
- .lockerverse-payment label:not(.lockerverse-payment__check-row),
302
- .lockerverse-payment__field,
303
- .lockerverse-payment fieldset {
304
- display: grid;
305
- gap: 8px;
306
- }
307
-
308
- .lockerverse-payment label > span,
309
- .lockerverse-payment .lockerverse-payment__field > span,
310
- .lockerverse-payment legend,
311
303
  .lockerverse-payment h2 {
312
304
  font-size: 14px;
313
305
  font-weight: 500;
@@ -320,81 +312,18 @@
320
312
  color: var(--lockerverse-text);
321
313
  }
322
314
 
323
- .lockerverse-payment fieldset {
324
- padding: 0;
325
- margin: 0;
326
- border: 0;
327
- }
328
-
329
- .lockerverse-payment input:not([type="checkbox"]):not([type="radio"]),
330
- .lockerverse-payment select,
331
- .lockerverse-payment textarea {
332
- width: 100%;
333
- min-height: 48px;
334
- padding: 11px 13px;
335
- font: inherit;
336
- font-size: 16px;
337
- line-height: 1.5;
338
- color: var(--lockerverse-text);
339
- appearance: none;
340
- outline: none;
341
- background-color: var(--lockerverse-control);
342
- border: 1px solid var(--lockerverse-border);
343
- border-radius: var(--lockerverse-radius);
344
- box-shadow: inset 0 1px 0 rgb(255 255 255 / 4%);
345
- transition:
346
- border-color 140ms ease,
347
- box-shadow 140ms ease;
348
- }
349
-
350
- .lockerverse-payment select {
351
- padding-right: 38px;
352
- background-image:
353
- linear-gradient(45deg, transparent 50%, currentcolor 50%),
354
- linear-gradient(135deg, currentcolor 50%, transparent 50%);
355
- background-repeat: no-repeat;
356
- background-position:
357
- calc(100% - 17px) calc(50% - 2px),
358
- calc(100% - 12px) calc(50% - 2px);
359
- background-size:
360
- 5px 5px,
361
- 5px 5px;
362
- }
363
-
364
- .lockerverse-payment textarea {
365
- min-height: 112px;
366
- padding-top: 12px;
367
- resize: vertical;
368
- }
369
-
370
- .lockerverse-payment input::placeholder,
371
- .lockerverse-payment textarea::placeholder {
372
- color: var(--lockerverse-placeholder);
373
- opacity: 1;
374
- }
375
-
376
- .lockerverse-payment input:not([type="checkbox"]):not([type="radio"]):focus,
377
315
  .lockerverse-payment__check-row input:focus,
378
- .lockerverse-payment select:focus,
379
- .lockerverse-payment textarea:focus,
380
- .lockerverse-payment button:focus {
316
+ .lockerverse-payment__select-trigger:focus {
381
317
  outline: none;
382
318
  border-color: var(--lockerverse-accent);
383
319
  }
384
320
 
385
- .lockerverse-payment input:not([type="checkbox"]):not([type="radio"]):focus,
386
- .lockerverse-payment select:focus,
387
- .lockerverse-payment textarea:focus,
388
321
  .lockerverse-payment__select-trigger:focus {
389
322
  box-shadow: 0 0 0 1px var(--lockerverse-accent);
390
323
  }
391
324
 
392
- .lockerverse-payment
393
- input:not([type="checkbox"]):not([type="radio"]):focus-visible,
394
325
  .lockerverse-payment__check-row input:focus-visible,
395
- .lockerverse-payment select:focus-visible,
396
- .lockerverse-payment textarea:focus-visible,
397
- .lockerverse-payment button:focus-visible {
326
+ .lockerverse-payment__select-trigger:focus-visible {
398
327
  box-shadow: 0 0 0 2px
399
328
  color-mix(in srgb, var(--lockerverse-accent) 24%, transparent);
400
329
  }
@@ -817,7 +746,7 @@
817
746
  height: 36px;
818
747
  background: color-mix(in srgb, var(--lockerverse-text) 4.5%, transparent);
819
748
  border-radius: 6px;
820
- animation: lockerverse-pulse 1.5s ease-in-out infinite;
749
+ animation: lockerverse-form-pulse 1.5s ease-in-out infinite;
821
750
  }
822
751
 
823
752
  .lockerverse-payment__stripe-loader span:first-child {
@@ -837,128 +766,6 @@
837
766
  clip: rect(0, 0, 0, 0);
838
767
  }
839
768
 
840
- .lockerverse-payment__skeleton {
841
- display: grid;
842
- gap: 16px;
843
- }
844
-
845
- .lockerverse-payment__skeleton-branding {
846
- display: flex;
847
- gap: 14px;
848
- align-items: center;
849
- }
850
-
851
- .lockerverse-payment__skeleton-avatar,
852
- .lockerverse-payment__skeleton-community,
853
- .lockerverse-payment__skeleton-label,
854
- .lockerverse-payment__skeleton-input,
855
- .lockerverse-payment__skeleton-loader-label,
856
- .lockerverse-payment__skeleton-loader-full,
857
- .lockerverse-payment__skeleton-loader-half,
858
- .lockerverse-payment__skeleton-check-line,
859
- .lockerverse-payment__skeleton-button {
860
- display: block;
861
- background: color-mix(in srgb, var(--lockerverse-text) 8%, transparent);
862
- animation: lockerverse-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
863
- }
864
-
865
- .lockerverse-payment__skeleton-avatar {
866
- flex: none;
867
- width: 48px;
868
- height: 48px;
869
- border-radius: var(--lockerverse-radius);
870
- }
871
-
872
- .lockerverse-payment__skeleton-community {
873
- width: 176px;
874
- height: 20px;
875
- border-radius: 4px;
876
- }
877
-
878
- .lockerverse-payment__skeleton-contact {
879
- display: grid;
880
- gap: 12px;
881
- padding-top: 14px;
882
- border-top: 1px solid var(--lockerverse-subtle);
883
- }
884
-
885
- .lockerverse-payment__skeleton-field {
886
- display: grid;
887
- gap: 8px;
888
- }
889
-
890
- .lockerverse-payment__skeleton-label {
891
- width: 48px;
892
- height: 16px;
893
- border-radius: 4px;
894
- }
895
-
896
- .lockerverse-payment__skeleton-input {
897
- width: 100%;
898
- height: 48px;
899
- background: var(--lockerverse-control);
900
- border: 1px solid var(--lockerverse-subtle);
901
- border-radius: var(--lockerverse-radius);
902
- }
903
-
904
- .lockerverse-payment__skeleton-loader-block {
905
- padding: 12px;
906
- background: color-mix(in srgb, var(--lockerverse-text) 2.5%, transparent);
907
- border: 1px solid var(--lockerverse-subtle);
908
- border-radius: var(--lockerverse-radius);
909
- }
910
-
911
- .lockerverse-payment__skeleton-loader-label {
912
- width: 144px;
913
- height: 16px;
914
- border-radius: 4px;
915
- }
916
-
917
- .lockerverse-payment__skeleton-loader-content {
918
- display: grid;
919
- gap: 8px;
920
- margin-top: 12px;
921
- }
922
-
923
- .lockerverse-payment__skeleton-loader-full,
924
- .lockerverse-payment__skeleton-loader-half {
925
- height: 36px;
926
- border-radius: 6px;
927
- }
928
-
929
- .lockerverse-payment__skeleton-loader-full {
930
- background: color-mix(in srgb, var(--lockerverse-text) 6%, transparent);
931
- }
932
-
933
- .lockerverse-payment__skeleton-loader-grid {
934
- display: grid;
935
- grid-template-columns: repeat(2, minmax(0, 1fr));
936
- gap: 8px;
937
- }
938
-
939
- .lockerverse-payment__skeleton-loader-half {
940
- background: color-mix(in srgb, var(--lockerverse-text) 4.5%, transparent);
941
- }
942
-
943
- .lockerverse-payment__skeleton-actions {
944
- display: grid;
945
- gap: 16px;
946
- padding: 20px 0 4px;
947
- }
948
-
949
- .lockerverse-payment__skeleton-check-line {
950
- width: min(256px, 70%);
951
- height: 20px;
952
- border-radius: 4px;
953
- }
954
-
955
- .lockerverse-payment__skeleton-button {
956
- width: 100%;
957
- height: 48px;
958
- background: color-mix(in srgb, var(--lockerverse-text) 12%, transparent);
959
- border-radius: var(--lockerverse-radius);
960
- }
961
-
962
769
  .lockerverse-payment button[type="submit"] {
963
770
  width: 100%;
964
771
  min-height: 48px;
@@ -1003,12 +810,6 @@
1003
810
  display: none;
1004
811
  }
1005
812
 
1006
- @keyframes lockerverse-pulse {
1007
- 50% {
1008
- opacity: 0.55;
1009
- }
1010
- }
1011
-
1012
813
  @container (max-width: 360px) {
1013
814
  .lockerverse-payment__tip-box [role="radiogroup"] {
1014
815
  grid-template-columns: repeat(6, minmax(0, 1fr));
@@ -1040,30 +841,30 @@
1040
841
  .lockerverse-launcher__dialog {
1041
842
  --lockerverse-accent: #38d77a;
1042
843
  --lockerverse-accent-contrast: #000;
1043
- --lockerverse-bg: #080808;
1044
- --lockerverse-border: rgb(255 255 255 / 12%);
1045
- --lockerverse-control: #121212;
844
+ --lockerverse-bg: #17130f;
845
+ --lockerverse-border: rgb(255 228 194 / 14%);
846
+ --lockerverse-control: #211b16;
1046
847
  --lockerverse-danger: #f08a98;
1047
848
  --lockerverse-font-family:
1048
849
  ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI",
1049
850
  sans-serif;
1050
- --lockerverse-muted: rgb(255 255 255 / 64%);
851
+ --lockerverse-muted: rgb(255 235 211 / 65%);
1051
852
  --lockerverse-radius: 10px;
1052
- --lockerverse-subtle: rgb(255 255 255 / 8%);
1053
- --lockerverse-text: #fff;
853
+ --lockerverse-subtle: rgb(255 228 194 / 8%);
854
+ --lockerverse-text: #fff5e9;
1054
855
  box-sizing: border-box;
1055
856
  font-family: var(--lockerverse-font-family);
1056
857
  }
1057
858
 
1058
859
  .lockerverse-launcher[data-lockerverse-theme="light"],
1059
860
  .lockerverse-launcher__dialog[data-lockerverse-theme="light"] {
1060
- --lockerverse-bg: #fff;
1061
- --lockerverse-border: rgb(18 20 22 / 14%);
1062
- --lockerverse-control: #f5f6f7;
861
+ --lockerverse-bg: #fffaf3;
862
+ --lockerverse-border: rgb(92 68 43 / 15%);
863
+ --lockerverse-control: #fffdf9;
1063
864
  --lockerverse-danger: #c52b3e;
1064
- --lockerverse-muted: rgb(18 20 22 / 64%);
1065
- --lockerverse-subtle: rgb(18 20 22 / 8%);
1066
- --lockerverse-text: #121416;
865
+ --lockerverse-muted: rgb(70 55 40 / 66%);
866
+ --lockerverse-subtle: rgb(103 73 43 / 7%);
867
+ --lockerverse-text: #2d251d;
1067
868
  }
1068
869
 
1069
870
  .lockerverse-launcher {
@@ -1078,6 +879,21 @@
1078
879
  border: 0;
1079
880
  border-radius: 999px;
1080
881
  box-shadow: 0 14px 34px rgb(0 0 0 / 28%);
882
+ transition:
883
+ transform 180ms ease,
884
+ box-shadow 180ms ease,
885
+ filter 180ms ease;
886
+ }
887
+
888
+ .lockerverse-launcher:hover {
889
+ box-shadow: 0 18px 42px rgb(0 0 0 / 34%);
890
+ filter: brightness(1.04);
891
+ transform: translateY(-2px);
892
+ }
893
+
894
+ .lockerverse-launcher:active {
895
+ box-shadow: 0 10px 24px rgb(0 0 0 / 24%);
896
+ transform: translateY(0) scale(0.98);
1081
897
  }
1082
898
 
1083
899
  .lockerverse-launcher--bottom-left,
@@ -1105,8 +921,9 @@
1105
921
  position: fixed;
1106
922
  inset: 0;
1107
923
  z-index: 1000;
1108
- background: rgb(0 0 0 / 68%);
1109
- backdrop-filter: blur(4px);
924
+ background: rgb(8 12 9 / 72%);
925
+ backdrop-filter: blur(10px) saturate(0.75);
926
+ animation: lockerverse-launcher-fade-in 180ms ease-out;
1110
927
  }
1111
928
 
1112
929
  .lockerverse-launcher__viewport {
@@ -1120,15 +937,24 @@
1120
937
 
1121
938
  .lockerverse-launcher__dialog {
1122
939
  position: relative;
1123
- width: min(100%, 520px);
940
+ width: min(100%, 580px);
1124
941
  max-height: calc(100dvh - 48px);
1125
- padding: 24px;
942
+ padding: 30px;
1126
943
  overflow-y: auto;
1127
944
  color: var(--lockerverse-text);
1128
945
  background: var(--lockerverse-bg);
1129
946
  border: 1px solid var(--lockerverse-border);
1130
- border-radius: calc(var(--lockerverse-radius) + 6px);
1131
- box-shadow: 0 30px 90px rgb(0 0 0 / 48%);
947
+ border-radius: calc(var(--lockerverse-radius) + 12px);
948
+ box-shadow:
949
+ 0 32px 100px rgb(5 14 8 / 48%),
950
+ inset 0 1px 0 rgb(255 255 255 / 10%);
951
+ animation: lockerverse-launcher-enter 240ms cubic-bezier(0.22, 1, 0.36, 1);
952
+ }
953
+
954
+ .lockerverse-launcher__dialog:has(.lockerverse-launcher__products) {
955
+ width: min(100%, 600px);
956
+ padding: 32px;
957
+ border-radius: calc(var(--lockerverse-radius) + 18px);
1132
958
  }
1133
959
 
1134
960
  .lockerverse-launcher__dialog *,
@@ -1137,79 +963,357 @@
1137
963
  box-sizing: border-box;
1138
964
  }
1139
965
 
966
+ .lockerverse-launcher__sr-only {
967
+ position: absolute;
968
+ width: 1px;
969
+ height: 1px;
970
+ padding: 0;
971
+ margin: -1px;
972
+ overflow: hidden;
973
+ white-space: nowrap;
974
+ border: 0;
975
+ clip: rect(0, 0, 0, 0);
976
+ }
977
+
978
+ .lockerverse-launcher__header {
979
+ display: grid;
980
+ gap: 8px;
981
+ padding-right: 50px;
982
+ }
983
+
984
+ .lockerverse-launcher__brand {
985
+ display: flex;
986
+ gap: 9px;
987
+ align-items: center;
988
+ margin-bottom: 4px;
989
+ font-size: 13px;
990
+ font-weight: 600;
991
+ color: var(--lockerverse-muted);
992
+ }
993
+
994
+ .lockerverse-launcher__brand img {
995
+ width: 28px;
996
+ height: 28px;
997
+ object-fit: cover;
998
+ border: 1px solid var(--lockerverse-border);
999
+ border-radius: 8px;
1000
+ }
1001
+
1140
1002
  .lockerverse-launcher__title {
1141
- padding-right: 72px;
1142
1003
  margin: 0;
1143
- font-size: 24px;
1144
- line-height: 1.25;
1004
+ font-size: clamp(25px, 5vw, 30px);
1005
+ font-weight: 650;
1006
+ line-height: 1.12;
1007
+ letter-spacing: -0.035em;
1008
+ text-wrap: balance;
1145
1009
  }
1146
1010
 
1147
1011
  .lockerverse-launcher__description {
1148
- margin: 10px 0 0;
1012
+ max-width: 52ch;
1013
+ margin: 0;
1014
+ font-size: 14px;
1015
+ line-height: 1.5;
1149
1016
  color: var(--lockerverse-muted);
1017
+ text-wrap: pretty;
1150
1018
  }
1151
1019
 
1152
1020
  .lockerverse-launcher__close {
1153
1021
  position: absolute;
1154
- top: 18px;
1155
- right: 18px;
1156
- min-height: 36px;
1157
- padding: 7px 10px;
1022
+ top: 22px;
1023
+ right: 22px;
1024
+ display: grid;
1025
+ place-items: center;
1026
+ width: 38px;
1027
+ height: 38px;
1028
+ padding: 0;
1158
1029
  font: inherit;
1030
+ font-size: 24px;
1031
+ line-height: 1;
1159
1032
  color: var(--lockerverse-muted);
1160
1033
  cursor: pointer;
1161
1034
  background: var(--lockerverse-subtle);
1162
1035
  border: 1px solid var(--lockerverse-border);
1163
- border-radius: var(--lockerverse-radius);
1036
+ border-radius: 50%;
1037
+ transition:
1038
+ color 160ms ease,
1039
+ background 160ms ease,
1040
+ transform 160ms ease;
1041
+ }
1042
+
1043
+ .lockerverse-launcher__close:hover {
1044
+ color: var(--lockerverse-text);
1045
+ background: color-mix(in srgb, var(--lockerverse-text) 12%, transparent);
1046
+ transform: rotate(4deg);
1164
1047
  }
1165
1048
 
1166
1049
  .lockerverse-launcher__products,
1167
- .lockerverse-launcher__amount-form,
1168
1050
  .lockerverse-launcher__checkout {
1169
1051
  display: grid;
1170
- gap: 12px;
1171
- margin-top: 24px;
1052
+ gap: 10px;
1053
+ }
1054
+
1055
+ .lockerverse-launcher__products {
1056
+ margin-top: 26px;
1057
+ }
1058
+
1059
+ .lockerverse-launcher__checkout {
1060
+ gap: 18px;
1061
+ margin-top: 0;
1062
+ }
1063
+
1064
+ .lockerverse-launcher__section,
1065
+ .lockerverse-launcher__product-list {
1066
+ display: grid;
1067
+ gap: 10px;
1068
+ }
1069
+
1070
+ .lockerverse-launcher__donation {
1071
+ display: grid;
1072
+ gap: 14px;
1073
+ padding: 18px;
1074
+ margin-top: 10px;
1075
+ background: color-mix(
1076
+ in srgb,
1077
+ var(--lockerverse-accent) 7%,
1078
+ var(--lockerverse-control)
1079
+ );
1080
+ border: 1px solid
1081
+ color-mix(in srgb, var(--lockerverse-accent) 23%, var(--lockerverse-border));
1082
+ border-radius: calc(var(--lockerverse-radius) + 8px);
1083
+ }
1084
+
1085
+ .lockerverse-launcher__section-header {
1086
+ display: grid;
1087
+ gap: 3px;
1088
+ }
1089
+
1090
+ .lockerverse-launcher__section-header h3,
1091
+ .lockerverse-launcher__section-header p {
1092
+ margin: 0;
1093
+ }
1094
+
1095
+ .lockerverse-launcher__section-header h3 {
1096
+ font-size: 17px;
1097
+ font-weight: 650;
1098
+ letter-spacing: -0.015em;
1099
+ }
1100
+
1101
+ .lockerverse-launcher__donation
1102
+ .lockerverse-launcher__section-header
1103
+ h3::before {
1104
+ margin-right: 8px;
1105
+ color: var(--lockerverse-accent);
1106
+ content: "♡";
1107
+ }
1108
+
1109
+ .lockerverse-launcher__section-header p {
1110
+ font-size: 13px;
1111
+ color: var(--lockerverse-muted);
1112
+ }
1113
+
1114
+ .lockerverse-launcher__donation-option {
1115
+ display: grid;
1116
+ gap: 8px;
1117
+ }
1118
+
1119
+ .lockerverse-launcher__donation-choices {
1120
+ display: grid;
1121
+ grid-template-columns: repeat(auto-fit, minmax(70px, 1fr));
1122
+ gap: 7px;
1123
+ padding: 0;
1124
+ margin: 0;
1125
+ border: 0;
1126
+ }
1127
+
1128
+ .lockerverse-launcher__donation-choices > button,
1129
+ .lockerverse-launcher__donation-other {
1130
+ min-height: 40px;
1131
+ padding: 8px 7px;
1132
+ font: inherit;
1133
+ font-size: 13px;
1134
+ font-weight: 650;
1135
+ color: var(--lockerverse-text);
1136
+ cursor: pointer;
1137
+ background: var(--lockerverse-subtle);
1138
+ border: 1px solid var(--lockerverse-border);
1139
+ border-radius: calc(var(--lockerverse-radius) - 1px);
1140
+ transition:
1141
+ color 150ms ease,
1142
+ background 150ms ease,
1143
+ border-color 150ms ease,
1144
+ transform 100ms ease;
1145
+ }
1146
+
1147
+ .lockerverse-launcher__donation-choices > button {
1148
+ white-space: nowrap;
1149
+ }
1150
+
1151
+ .lockerverse-launcher__donation-choices > button:hover,
1152
+ .lockerverse-launcher__donation-other:hover {
1153
+ border-color: color-mix(in srgb, var(--lockerverse-accent) 55%, transparent);
1154
+ }
1155
+
1156
+ .lockerverse-launcher__donation-choices > button:active {
1157
+ transform: translateY(1px);
1158
+ }
1159
+
1160
+ .lockerverse-launcher__donation-choices > button[aria-pressed="true"],
1161
+ .lockerverse-launcher__donation-other[data-selected="true"] {
1162
+ color: var(--lockerverse-accent-contrast);
1163
+ background: var(--lockerverse-accent);
1164
+ border-color: var(--lockerverse-accent);
1165
+ }
1166
+
1167
+ .lockerverse-launcher__donation-other {
1168
+ position: relative;
1169
+ display: grid;
1170
+ width: auto;
1171
+ padding: 0;
1172
+ overflow: hidden;
1173
+ }
1174
+
1175
+ .lockerverse-launcher__donation-other input {
1176
+ min-width: 0;
1177
+ padding: 8px 12px;
1178
+ font: inherit;
1179
+ font-size: 13px;
1180
+ font-weight: 650;
1181
+ font-variant-numeric: tabular-nums;
1182
+ color: inherit;
1183
+ appearance: textfield;
1184
+ outline: none;
1185
+ background: transparent;
1186
+ border: 0;
1187
+ }
1188
+
1189
+ .lockerverse-launcher__donation-other[data-selected="true"]::before {
1190
+ position: absolute;
1191
+ top: 50%;
1192
+ left: 12px;
1193
+ content: "$";
1194
+ transform: translateY(-50%);
1195
+ }
1196
+
1197
+ .lockerverse-launcher__donation-other[data-selected="true"] input {
1198
+ padding-left: 24px;
1199
+ }
1200
+
1201
+ .lockerverse-launcher__donation-other input::placeholder {
1202
+ color: var(--lockerverse-muted);
1203
+ opacity: 1;
1204
+ }
1205
+
1206
+ .lockerverse-launcher__donation-other[data-selected="true"] input::placeholder {
1207
+ color: inherit;
1208
+ }
1209
+
1210
+ .lockerverse-launcher__donation-other input::-webkit-inner-spin-button,
1211
+ .lockerverse-launcher__donation-other input::-webkit-outer-spin-button {
1212
+ margin: 0;
1213
+ appearance: none;
1214
+ }
1215
+
1216
+ .lockerverse-launcher__checkout-toolbar {
1217
+ display: flex;
1218
+ align-items: center;
1219
+ min-height: 38px;
1220
+ padding-right: 52px;
1221
+ margin-top: -8px;
1172
1222
  }
1173
1223
 
1174
1224
  .lockerverse-launcher__back {
1175
1225
  justify-self: start;
1176
- padding: 7px 10px;
1226
+ padding: 8px 0;
1177
1227
  font: inherit;
1228
+ font-size: 14px;
1229
+ font-weight: 600;
1178
1230
  color: var(--lockerverse-muted);
1179
1231
  cursor: pointer;
1180
1232
  background: transparent;
1181
- border: 1px solid var(--lockerverse-border);
1182
- border-radius: var(--lockerverse-radius);
1233
+ border: 0;
1234
+ transition:
1235
+ color 160ms ease,
1236
+ transform 100ms ease;
1237
+ }
1238
+
1239
+ .lockerverse-launcher__back::before {
1240
+ margin-right: 6px;
1241
+ content: "←";
1242
+ }
1243
+
1244
+ .lockerverse-launcher__back:hover {
1245
+ color: var(--lockerverse-accent);
1246
+ }
1247
+
1248
+ .lockerverse-launcher__back:active {
1249
+ transform: translateX(-1px);
1183
1250
  }
1184
1251
 
1185
1252
  .lockerverse-launcher__checkout > .lockerverse-payment {
1186
1253
  max-width: none;
1187
1254
  padding: 0;
1255
+ background: transparent;
1256
+ border-radius: 0;
1257
+ box-shadow: none;
1188
1258
  }
1189
1259
 
1190
1260
  .lockerverse-launcher__product {
1191
- display: flex;
1261
+ display: grid;
1262
+ grid-template-columns: minmax(0, 1fr) auto;
1192
1263
  gap: 16px;
1193
1264
  align-items: center;
1194
1265
  justify-content: space-between;
1195
- min-height: 58px;
1196
- padding: 14px 16px;
1266
+ min-height: 76px;
1267
+ padding: 17px;
1197
1268
  font: inherit;
1198
1269
  color: var(--lockerverse-text);
1199
1270
  text-align: left;
1200
- cursor: pointer;
1201
1271
  background: var(--lockerverse-control);
1202
1272
  border: 1px solid var(--lockerverse-border);
1203
- border-radius: var(--lockerverse-radius);
1273
+ border-radius: calc(var(--lockerverse-radius) + 7px);
1274
+ box-shadow: 0 5px 18px rgb(75 50 27 / 5%);
1275
+ transition:
1276
+ background 180ms ease,
1277
+ border-color 180ms ease,
1278
+ box-shadow 180ms ease,
1279
+ transform 180ms ease;
1204
1280
  }
1205
1281
 
1206
1282
  .lockerverse-launcher__product:hover {
1207
- border-color: color-mix(in srgb, var(--lockerverse-accent) 58%, transparent);
1283
+ border-color: color-mix(in srgb, var(--lockerverse-accent) 42%, transparent);
1284
+ transform: translateY(-1px);
1285
+ }
1286
+
1287
+ .lockerverse-launcher__product[data-selected="true"] {
1288
+ background: color-mix(
1289
+ in srgb,
1290
+ var(--lockerverse-accent) 8%,
1291
+ var(--lockerverse-bg)
1292
+ );
1293
+ border-color: color-mix(in srgb, var(--lockerverse-accent) 55%, transparent);
1294
+ box-shadow: inset 3px 0 0 var(--lockerverse-accent);
1208
1295
  }
1209
1296
 
1210
1297
  .lockerverse-launcher__product-copy {
1211
1298
  display: grid;
1212
- gap: 3px;
1299
+ flex: 1;
1300
+ gap: 2px;
1301
+ min-width: 0;
1302
+ }
1303
+
1304
+ .lockerverse-launcher__product-name {
1305
+ overflow: hidden;
1306
+ text-overflow: ellipsis;
1307
+ font-size: 15px;
1308
+ font-weight: 600;
1309
+ white-space: nowrap;
1310
+ }
1311
+
1312
+ .lockerverse-launcher__product-price {
1313
+ margin-top: 2px;
1314
+ font-size: 14px;
1315
+ font-weight: 650;
1316
+ font-variant-numeric: tabular-nums;
1213
1317
  }
1214
1318
 
1215
1319
  .lockerverse-launcher__product-copy small {
@@ -1217,24 +1321,116 @@
1217
1321
  color: var(--lockerverse-muted);
1218
1322
  }
1219
1323
 
1220
- .lockerverse-launcher__amount-form label {
1221
- font-size: 14px;
1324
+ .lockerverse-launcher__quantity {
1325
+ display: inline-grid;
1326
+ grid-template-columns: 36px 38px 36px;
1327
+ align-items: center;
1328
+ overflow: hidden;
1329
+ background: var(--lockerverse-bg);
1330
+ border: 1px solid var(--lockerverse-border);
1331
+ border-radius: calc(var(--lockerverse-radius) - 1px);
1332
+ }
1333
+
1334
+ .lockerverse-launcher__quantity button {
1335
+ min-height: 36px;
1336
+ padding: 0;
1337
+ font: inherit;
1338
+ color: var(--lockerverse-text);
1339
+ cursor: pointer;
1340
+ background: var(--lockerverse-subtle);
1341
+ border: 0;
1342
+ transition:
1343
+ color 150ms ease,
1344
+ background 150ms ease,
1345
+ transform 100ms ease;
1346
+ }
1347
+
1348
+ .lockerverse-launcher__quantity button:hover:not(:disabled) {
1349
+ color: var(--lockerverse-accent);
1350
+ background: color-mix(in srgb, var(--lockerverse-accent) 12%, transparent);
1351
+ }
1352
+
1353
+ .lockerverse-launcher__quantity button:active:not(:disabled) {
1354
+ transform: scale(0.92);
1355
+ }
1356
+
1357
+ .lockerverse-launcher__quantity button:disabled,
1358
+ .lockerverse-launcher__continue:disabled {
1359
+ cursor: not-allowed;
1360
+ opacity: 0.45;
1361
+ }
1362
+
1363
+ .lockerverse-launcher__quantity output {
1222
1364
  font-weight: 600;
1365
+ font-variant-numeric: tabular-nums;
1366
+ text-align: center;
1367
+ }
1368
+
1369
+ .lockerverse-launcher__custom-amount {
1370
+ display: grid;
1371
+ grid-template-columns: auto minmax(80px, 112px);
1372
+ gap: 4px 6px;
1373
+ align-items: center;
1374
+ color: var(--lockerverse-muted);
1223
1375
  }
1224
1376
 
1225
- .lockerverse-launcher__amount-form input {
1377
+ .lockerverse-launcher__custom-amount input {
1226
1378
  width: 100%;
1227
- min-height: 48px;
1228
- padding: 11px 13px;
1379
+ min-height: 38px;
1380
+ padding: 7px 9px;
1229
1381
  font: inherit;
1230
- font-size: 18px;
1382
+ font-variant-numeric: tabular-nums;
1231
1383
  color: var(--lockerverse-text);
1232
- background: var(--lockerverse-control);
1384
+ appearance: textfield;
1385
+ background: var(--lockerverse-bg);
1386
+ border: 1px solid var(--lockerverse-border);
1387
+ border-radius: var(--lockerverse-radius);
1388
+ }
1389
+
1390
+ .lockerverse-launcher__custom-amount input::-webkit-inner-spin-button,
1391
+ .lockerverse-launcher__custom-amount input::-webkit-outer-spin-button {
1392
+ margin: 0;
1393
+ appearance: none;
1394
+ }
1395
+
1396
+ .lockerverse-launcher__custom-amount small {
1397
+ grid-column: 1 / -1;
1398
+ font-size: 11px;
1399
+ text-align: right;
1400
+ }
1401
+
1402
+ .lockerverse-launcher__select {
1403
+ min-height: 38px;
1404
+ padding: 7px 13px;
1405
+ font: inherit;
1406
+ font-weight: 600;
1407
+ color: var(--lockerverse-text);
1408
+ cursor: pointer;
1409
+ background: var(--lockerverse-subtle);
1233
1410
  border: 1px solid var(--lockerverse-border);
1234
1411
  border-radius: var(--lockerverse-radius);
1412
+ transition:
1413
+ color 160ms ease,
1414
+ background 160ms ease,
1415
+ border-color 160ms ease,
1416
+ transform 100ms ease;
1417
+ }
1418
+
1419
+ .lockerverse-launcher__select:hover {
1420
+ border-color: color-mix(in srgb, var(--lockerverse-accent) 50%, transparent);
1421
+ }
1422
+
1423
+ .lockerverse-launcher__select:active {
1424
+ transform: scale(0.97);
1235
1425
  }
1236
1426
 
1237
- .lockerverse-launcher__amount-form button[type="submit"] {
1427
+ .lockerverse-launcher__select[aria-pressed="true"] {
1428
+ color: var(--lockerverse-accent-contrast);
1429
+ background: var(--lockerverse-accent);
1430
+ border-color: var(--lockerverse-accent);
1431
+ }
1432
+
1433
+ .lockerverse-launcher__continue {
1238
1434
  min-height: 48px;
1239
1435
  padding: 12px;
1240
1436
  font: inherit;
@@ -1244,6 +1440,79 @@
1244
1440
  background: var(--lockerverse-accent);
1245
1441
  border: 0;
1246
1442
  border-radius: var(--lockerverse-radius);
1443
+ box-shadow: 0 10px 24px
1444
+ color-mix(in srgb, var(--lockerverse-accent) 22%, transparent);
1445
+ transition:
1446
+ filter 160ms ease,
1447
+ transform 100ms ease,
1448
+ box-shadow 160ms ease;
1449
+ }
1450
+
1451
+ .lockerverse-launcher__continue::after {
1452
+ margin-left: 8px;
1453
+ content: "→";
1454
+ }
1455
+
1456
+ .lockerverse-launcher__continue:hover:not(:disabled) {
1457
+ box-shadow: 0 12px 30px
1458
+ color-mix(in srgb, var(--lockerverse-accent) 30%, transparent);
1459
+ filter: brightness(1.04);
1460
+ }
1461
+
1462
+ .lockerverse-launcher__continue:active:not(:disabled) {
1463
+ transform: scale(0.985);
1464
+ }
1465
+
1466
+ .lockerverse-launcher__footer {
1467
+ position: sticky;
1468
+ bottom: -30px;
1469
+ z-index: 2;
1470
+ display: grid;
1471
+ grid-template-columns: minmax(0, 1fr) minmax(180px, 0.8fr);
1472
+ gap: 18px;
1473
+ align-items: center;
1474
+ padding: 16px 30px 30px;
1475
+ margin: 8px -30px -30px;
1476
+ background: color-mix(in srgb, var(--lockerverse-bg) 96%, transparent);
1477
+ border-top: 1px solid var(--lockerverse-border);
1478
+ box-shadow: 0 -12px 28px
1479
+ color-mix(in srgb, var(--lockerverse-bg) 82%, transparent);
1480
+ backdrop-filter: blur(12px);
1481
+ }
1482
+
1483
+ .lockerverse-launcher__summary {
1484
+ display: grid;
1485
+ gap: 2px;
1486
+ margin: 0;
1487
+ font-size: 12px;
1488
+ color: var(--lockerverse-muted);
1489
+ }
1490
+
1491
+ .lockerverse-launcher__summary strong {
1492
+ font-size: 18px;
1493
+ font-variant-numeric: tabular-nums;
1494
+ color: var(--lockerverse-text);
1495
+ }
1496
+
1497
+ .lockerverse-launcher__loading {
1498
+ display: grid;
1499
+ gap: 10px;
1500
+ margin-top: 26px;
1501
+ }
1502
+
1503
+ .lockerverse-launcher__loading-row {
1504
+ display: block;
1505
+ height: 76px;
1506
+ background: linear-gradient(
1507
+ 100deg,
1508
+ var(--lockerverse-control) 20%,
1509
+ var(--lockerverse-subtle) 42%,
1510
+ var(--lockerverse-control) 64%
1511
+ );
1512
+ background-size: 240% 100%;
1513
+ border: 1px solid var(--lockerverse-border);
1514
+ border-radius: calc(var(--lockerverse-radius) + 3px);
1515
+ animation: lockerverse-launcher-shimmer 1.4s ease-in-out infinite;
1247
1516
  }
1248
1517
 
1249
1518
  .lockerverse-launcher__dialog > [role="alert"] {
@@ -1272,6 +1541,51 @@
1272
1541
  padding: 22px 18px max(22px, env(safe-area-inset-bottom));
1273
1542
  border-radius: 18px 18px 0 0;
1274
1543
  }
1544
+
1545
+ .lockerverse-launcher__dialog:has(.lockerverse-launcher__products) {
1546
+ padding: 22px 18px max(22px, env(safe-area-inset-bottom));
1547
+ border-radius: 18px 18px 0 0;
1548
+ }
1549
+
1550
+ .lockerverse-launcher__product {
1551
+ gap: 12px;
1552
+ padding: 14px;
1553
+ }
1554
+
1555
+ .lockerverse-launcher__footer {
1556
+ bottom: -22px;
1557
+ grid-template-columns: 1fr;
1558
+ gap: 10px;
1559
+ padding: 14px 18px max(22px, env(safe-area-inset-bottom));
1560
+ margin: 8px -18px calc(-1 * max(22px, env(safe-area-inset-bottom)));
1561
+ }
1562
+
1563
+ .lockerverse-launcher__summary {
1564
+ grid-template-columns: 1fr auto;
1565
+ align-items: baseline;
1566
+ }
1567
+ }
1568
+
1569
+ @keyframes lockerverse-launcher-enter {
1570
+ from {
1571
+ opacity: 0;
1572
+ transform: translateY(12px) scale(0.98);
1573
+ }
1574
+ }
1575
+
1576
+ @keyframes lockerverse-launcher-fade-in {
1577
+ from {
1578
+ opacity: 0;
1579
+ }
1580
+ }
1581
+
1582
+ @keyframes lockerverse-launcher-shimmer {
1583
+ 0% {
1584
+ background-position: 100% 0;
1585
+ }
1586
+ 100% {
1587
+ background-position: -100% 0;
1588
+ }
1275
1589
  }
1276
1590
 
1277
1591
  @media (prefers-reduced-motion: reduce) {