viveworker 0.7.0-beta.1 → 0.7.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -0
- package/package.json +3 -1
- package/scripts/share-cli.mjs +554 -3
- package/scripts/viveworker-bridge.mjs +3395 -218
- package/viveworker.env.example +8 -0
- package/web/app.css +916 -109
- package/web/app.js +1762 -43
- package/web/hazbase-passkey.js +107 -0
- package/web/i18n.js +276 -0
- package/web/sw.js +33 -15
package/web/app.css
CHANGED
|
@@ -653,6 +653,22 @@ code {
|
|
|
653
653
|
color: rgba(255, 210, 110, 0.95);
|
|
654
654
|
}
|
|
655
655
|
|
|
656
|
+
.settings-compose-badge--read {
|
|
657
|
+
background: rgba(91, 203, 255, 0.16);
|
|
658
|
+
color: rgba(162, 230, 255, 0.95);
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
.settings-compose-badge--write {
|
|
662
|
+
background: rgba(112, 229, 164, 0.16);
|
|
663
|
+
color: rgba(176, 244, 207, 0.94);
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
.settings-compose-badge--lane {
|
|
667
|
+
background: rgba(255, 255, 255, 0.05);
|
|
668
|
+
color: rgba(220, 232, 240, 0.9);
|
|
669
|
+
box-shadow: inset 0 0 0 1px rgba(156, 181, 197, 0.12);
|
|
670
|
+
}
|
|
671
|
+
|
|
656
672
|
.settings-compose-entry {
|
|
657
673
|
display: flex;
|
|
658
674
|
flex-direction: column;
|
|
@@ -699,6 +715,18 @@ code {
|
|
|
699
715
|
box-shadow: inset 0 0 0 1px rgba(121, 196, 255, 0.14);
|
|
700
716
|
}
|
|
701
717
|
|
|
718
|
+
.settings-icon-entry__icon--read {
|
|
719
|
+
color: rgba(91, 203, 255, 0.92);
|
|
720
|
+
background: rgba(91, 203, 255, 0.11);
|
|
721
|
+
box-shadow: inset 0 0 0 1px rgba(91, 203, 255, 0.14);
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
.settings-icon-entry__icon--write {
|
|
725
|
+
color: rgba(112, 229, 164, 0.92);
|
|
726
|
+
background: rgba(112, 229, 164, 0.11);
|
|
727
|
+
box-shadow: inset 0 0 0 1px rgba(112, 229, 164, 0.16);
|
|
728
|
+
}
|
|
729
|
+
|
|
702
730
|
.settings-icon-entry__icon svg,
|
|
703
731
|
.settings-share-file-entry__icon svg {
|
|
704
732
|
width: 0.95rem;
|
|
@@ -732,6 +760,77 @@ code {
|
|
|
732
760
|
margin-left: auto;
|
|
733
761
|
}
|
|
734
762
|
|
|
763
|
+
.settings-icon-entry__title-row .settings-compose-badge + .settings-compose-badge,
|
|
764
|
+
.settings-share-file-entry__title-row .settings-compose-badge + .settings-compose-badge {
|
|
765
|
+
margin-left: 0;
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
.settings-autopilot-entry {
|
|
769
|
+
width: 100%;
|
|
770
|
+
border: 0;
|
|
771
|
+
background: transparent;
|
|
772
|
+
color: inherit;
|
|
773
|
+
text-align: left;
|
|
774
|
+
cursor: pointer;
|
|
775
|
+
-webkit-tap-highlight-color: transparent;
|
|
776
|
+
}
|
|
777
|
+
|
|
778
|
+
.settings-autopilot-entry:active {
|
|
779
|
+
background: rgba(255, 255, 255, 0.035);
|
|
780
|
+
}
|
|
781
|
+
|
|
782
|
+
.settings-autopilot-entry__meta,
|
|
783
|
+
.settings-autopilot-entry__thread {
|
|
784
|
+
color: rgba(231, 243, 250, 0.62);
|
|
785
|
+
font-size: 0.79rem;
|
|
786
|
+
line-height: 1.4;
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
.settings-autopilot-entry__thread {
|
|
790
|
+
color: rgba(231, 243, 250, 0.48);
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
.settings-suggestion-card {
|
|
794
|
+
display: grid;
|
|
795
|
+
gap: 0.72rem;
|
|
796
|
+
padding: 0.95rem 1rem;
|
|
797
|
+
border-radius: 18px;
|
|
798
|
+
background: rgba(255, 255, 255, 0.035);
|
|
799
|
+
border: 1px solid rgba(156, 181, 197, 0.1);
|
|
800
|
+
}
|
|
801
|
+
|
|
802
|
+
.settings-suggestion-card__header {
|
|
803
|
+
display: grid;
|
|
804
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
805
|
+
gap: 0.7rem;
|
|
806
|
+
align-items: start;
|
|
807
|
+
}
|
|
808
|
+
|
|
809
|
+
.settings-suggestion-card__title,
|
|
810
|
+
.settings-suggestion-card__body {
|
|
811
|
+
margin: 0;
|
|
812
|
+
}
|
|
813
|
+
|
|
814
|
+
.settings-suggestion-card__title {
|
|
815
|
+
font-size: 0.95rem;
|
|
816
|
+
line-height: 1.35;
|
|
817
|
+
color: var(--text);
|
|
818
|
+
}
|
|
819
|
+
|
|
820
|
+
.settings-suggestion-card__body {
|
|
821
|
+
color: var(--muted);
|
|
822
|
+
font-size: 0.84rem;
|
|
823
|
+
line-height: 1.5;
|
|
824
|
+
}
|
|
825
|
+
|
|
826
|
+
.settings-suggestion-card__action {
|
|
827
|
+
min-height: 2.2rem;
|
|
828
|
+
padding: 0.55rem 0.85rem;
|
|
829
|
+
border-radius: 14px;
|
|
830
|
+
font-size: 0.84rem;
|
|
831
|
+
white-space: nowrap;
|
|
832
|
+
}
|
|
833
|
+
|
|
735
834
|
.settings-compose-entry + .settings-compose-entry {
|
|
736
835
|
border-top: 1px solid rgba(255, 255, 255, 0.06);
|
|
737
836
|
}
|
|
@@ -853,160 +952,748 @@ code {
|
|
|
853
952
|
gap: 0.9rem;
|
|
854
953
|
}
|
|
855
954
|
|
|
856
|
-
.settings-copy-block p {
|
|
955
|
+
.settings-copy-block p {
|
|
956
|
+
margin: 0;
|
|
957
|
+
}
|
|
958
|
+
|
|
959
|
+
.settings-action-panel {
|
|
960
|
+
padding: 1rem;
|
|
961
|
+
}
|
|
962
|
+
|
|
963
|
+
.settings-list--compact .settings-info-row,
|
|
964
|
+
.settings-list--compact .settings-choice-row {
|
|
965
|
+
padding-top: 0.78rem;
|
|
966
|
+
padding-bottom: 0.78rem;
|
|
967
|
+
}
|
|
968
|
+
|
|
969
|
+
.settings-list--compact .settings-info-row:last-child,
|
|
970
|
+
.settings-list--compact .settings-choice-row:last-child {
|
|
971
|
+
padding-bottom: 0.56rem;
|
|
972
|
+
}
|
|
973
|
+
|
|
974
|
+
.settings-command-card {
|
|
975
|
+
display: grid;
|
|
976
|
+
gap: 0.35rem;
|
|
977
|
+
padding: 0.85rem 0.95rem;
|
|
978
|
+
border: 1px solid rgba(156, 181, 197, 0.12);
|
|
979
|
+
border-radius: 16px;
|
|
980
|
+
background: rgba(255, 255, 255, 0.035);
|
|
981
|
+
}
|
|
982
|
+
|
|
983
|
+
.settings-command-card__label {
|
|
984
|
+
color: var(--muted);
|
|
985
|
+
font-size: 0.8rem;
|
|
986
|
+
line-height: 1.35;
|
|
987
|
+
}
|
|
988
|
+
|
|
989
|
+
.settings-command-card__value {
|
|
990
|
+
display: block;
|
|
991
|
+
font-family: ui-monospace, SFMono-Regular, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
|
992
|
+
font-size: 0.86rem;
|
|
993
|
+
line-height: 1.5;
|
|
994
|
+
color: var(--text);
|
|
995
|
+
overflow-wrap: anywhere;
|
|
996
|
+
}
|
|
997
|
+
|
|
998
|
+
.device-list {
|
|
999
|
+
display: grid;
|
|
1000
|
+
gap: 0.8rem;
|
|
1001
|
+
}
|
|
1002
|
+
|
|
1003
|
+
.device-card {
|
|
1004
|
+
padding: 0.95rem;
|
|
1005
|
+
border: 1px solid rgba(156, 181, 197, 0.08);
|
|
1006
|
+
border-radius: 18px;
|
|
1007
|
+
background: rgba(22, 28, 35, 0.96);
|
|
1008
|
+
box-shadow: 0 8px 18px rgba(0, 0, 0, 0.1);
|
|
1009
|
+
}
|
|
1010
|
+
|
|
1011
|
+
.device-card__header {
|
|
1012
|
+
display: flex;
|
|
1013
|
+
justify-content: space-between;
|
|
1014
|
+
gap: 0.75rem;
|
|
1015
|
+
align-items: flex-start;
|
|
1016
|
+
}
|
|
1017
|
+
|
|
1018
|
+
.device-card__title-wrap {
|
|
1019
|
+
min-width: 0;
|
|
1020
|
+
display: grid;
|
|
1021
|
+
gap: 0.34rem;
|
|
1022
|
+
}
|
|
1023
|
+
|
|
1024
|
+
.device-card__headline {
|
|
1025
|
+
display: flex;
|
|
1026
|
+
align-items: center;
|
|
1027
|
+
gap: 0.55rem;
|
|
1028
|
+
min-width: 0;
|
|
1029
|
+
}
|
|
1030
|
+
|
|
1031
|
+
.device-card__icon {
|
|
1032
|
+
width: 1.9rem;
|
|
1033
|
+
height: 1.9rem;
|
|
1034
|
+
display: inline-flex;
|
|
1035
|
+
align-items: center;
|
|
1036
|
+
justify-content: center;
|
|
1037
|
+
border-radius: 11px;
|
|
1038
|
+
background: rgba(123, 195, 255, 0.12);
|
|
1039
|
+
color: #e9f7ff;
|
|
1040
|
+
flex: 0 0 auto;
|
|
1041
|
+
}
|
|
1042
|
+
|
|
1043
|
+
.device-card__icon svg {
|
|
1044
|
+
width: 1rem;
|
|
1045
|
+
height: 1rem;
|
|
1046
|
+
}
|
|
1047
|
+
|
|
1048
|
+
.device-card__title {
|
|
1049
|
+
margin: 0;
|
|
1050
|
+
font-size: 1rem;
|
|
1051
|
+
line-height: 1.3;
|
|
1052
|
+
overflow-wrap: anywhere;
|
|
1053
|
+
}
|
|
1054
|
+
|
|
1055
|
+
.device-card__subtitle {
|
|
1056
|
+
margin: 0;
|
|
1057
|
+
color: rgba(231, 243, 250, 0.62);
|
|
1058
|
+
font-size: 0.78rem;
|
|
1059
|
+
line-height: 1.45;
|
|
1060
|
+
font-family: ui-monospace, SFMono-Regular, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
|
1061
|
+
overflow-wrap: anywhere;
|
|
1062
|
+
}
|
|
1063
|
+
|
|
1064
|
+
.device-card__badge {
|
|
1065
|
+
flex: 0 0 auto;
|
|
1066
|
+
display: inline-flex;
|
|
1067
|
+
align-items: center;
|
|
1068
|
+
justify-content: center;
|
|
1069
|
+
min-height: 1.75rem;
|
|
1070
|
+
padding: 0.2rem 0.68rem;
|
|
1071
|
+
border-radius: 999px;
|
|
1072
|
+
border: 1px solid rgba(121, 196, 255, 0.24);
|
|
1073
|
+
background: rgba(121, 196, 255, 0.12);
|
|
1074
|
+
color: #dcf1ff;
|
|
1075
|
+
font-size: 0.78rem;
|
|
1076
|
+
font-weight: 600;
|
|
1077
|
+
white-space: nowrap;
|
|
1078
|
+
}
|
|
1079
|
+
|
|
1080
|
+
.device-card__meta {
|
|
1081
|
+
margin-top: 0.85rem;
|
|
1082
|
+
display: grid;
|
|
1083
|
+
gap: 0.48rem;
|
|
1084
|
+
}
|
|
1085
|
+
|
|
1086
|
+
.device-card__meta-row {
|
|
1087
|
+
display: grid;
|
|
1088
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
1089
|
+
gap: 0.75rem;
|
|
1090
|
+
align-items: start;
|
|
1091
|
+
}
|
|
1092
|
+
|
|
1093
|
+
.device-card__meta-label {
|
|
1094
|
+
color: var(--muted);
|
|
1095
|
+
font-size: 0.82rem;
|
|
1096
|
+
line-height: 1.35;
|
|
1097
|
+
}
|
|
1098
|
+
|
|
1099
|
+
.device-card__meta-value {
|
|
1100
|
+
color: rgba(231, 243, 250, 0.9);
|
|
1101
|
+
font-size: 0.84rem;
|
|
1102
|
+
line-height: 1.35;
|
|
1103
|
+
text-align: right;
|
|
1104
|
+
overflow-wrap: anywhere;
|
|
1105
|
+
}
|
|
1106
|
+
|
|
1107
|
+
.device-card__actions {
|
|
1108
|
+
margin-top: 0.95rem;
|
|
1109
|
+
}
|
|
1110
|
+
|
|
1111
|
+
.wallet-flow-banner {
|
|
1112
|
+
gap: 0.35rem;
|
|
1113
|
+
}
|
|
1114
|
+
|
|
1115
|
+
.wallet-flow-banner--ready {
|
|
1116
|
+
border-color: rgba(121, 196, 255, 0.2);
|
|
1117
|
+
background: linear-gradient(180deg, rgba(28, 40, 49, 0.98), rgba(20, 27, 34, 0.96));
|
|
1118
|
+
}
|
|
1119
|
+
|
|
1120
|
+
.wallet-flow-banner--session-expired {
|
|
1121
|
+
border-color: rgba(255, 190, 92, 0.28);
|
|
1122
|
+
background: linear-gradient(180deg, rgba(49, 39, 28, 0.98), rgba(24, 28, 30, 0.96));
|
|
1123
|
+
}
|
|
1124
|
+
|
|
1125
|
+
.wallet-flow-banner__eyebrow {
|
|
1126
|
+
margin: 0;
|
|
1127
|
+
font-size: 0.72rem;
|
|
1128
|
+
letter-spacing: 0.05em;
|
|
1129
|
+
text-transform: uppercase;
|
|
1130
|
+
color: rgba(121, 196, 255, 0.82);
|
|
1131
|
+
}
|
|
1132
|
+
|
|
1133
|
+
.wallet-flow-banner__title {
|
|
1134
|
+
margin: 0;
|
|
1135
|
+
font-size: 1rem;
|
|
1136
|
+
line-height: 1.35;
|
|
1137
|
+
color: var(--text);
|
|
1138
|
+
}
|
|
1139
|
+
|
|
1140
|
+
.wallet-flow-banner__copy {
|
|
1141
|
+
margin: 0;
|
|
1142
|
+
}
|
|
1143
|
+
|
|
1144
|
+
/* The agent-payout address is the single most actionable fact in the ready
|
|
1145
|
+
banner — rendered larger than copy, in a mono font, with a subtle
|
|
1146
|
+
highlight so it's unmistakable as "the wallet agents will use". Rendered
|
|
1147
|
+
as a <button> so a single tap copies it; the clipboard icon swaps to a
|
|
1148
|
+
check mark for ~1.5s via the `.is-copied` class (applied from JS). No
|
|
1149
|
+
hover / focus-ring styling on the button itself — on iOS the sticky
|
|
1150
|
+
hover state + focus-visible kept flashing the border each tap, so we
|
|
1151
|
+
leave the box static and let only the icon transition give feedback. */
|
|
1152
|
+
.wallet-flow-banner__address {
|
|
1153
|
+
display: flex;
|
|
1154
|
+
align-items: center;
|
|
1155
|
+
gap: 0.55rem;
|
|
1156
|
+
width: 100%;
|
|
1157
|
+
margin: 0.25rem 0 0;
|
|
1158
|
+
padding: 0.55rem 0.7rem;
|
|
1159
|
+
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
|
1160
|
+
font-size: 0.88rem;
|
|
1161
|
+
letter-spacing: 0.03em;
|
|
1162
|
+
line-height: 1.35;
|
|
1163
|
+
color: #e9f7ff;
|
|
1164
|
+
background: rgba(121, 196, 255, 0.08);
|
|
1165
|
+
border: 1px solid rgba(121, 196, 255, 0.18);
|
|
1166
|
+
border-radius: 10px;
|
|
1167
|
+
cursor: pointer;
|
|
1168
|
+
text-align: left;
|
|
1169
|
+
-webkit-tap-highlight-color: transparent;
|
|
1170
|
+
outline: none;
|
|
1171
|
+
/* Tap copies via the clipboard API — we don't need the browser to also
|
|
1172
|
+
range-select the text on tap (previously `user-select: all` on the
|
|
1173
|
+
inner span, which caused an ugly blue highlight to flash every tap
|
|
1174
|
+
on iOS). Copy works without any selection. */
|
|
1175
|
+
user-select: none;
|
|
1176
|
+
-webkit-user-select: none;
|
|
1177
|
+
}
|
|
1178
|
+
|
|
1179
|
+
.wallet-flow-banner__address:focus {
|
|
1180
|
+
outline: none;
|
|
1181
|
+
}
|
|
1182
|
+
|
|
1183
|
+
.wallet-flow-banner__address-text {
|
|
1184
|
+
flex: 1;
|
|
1185
|
+
overflow-wrap: anywhere;
|
|
1186
|
+
}
|
|
1187
|
+
|
|
1188
|
+
/* Stack both icons in the same slot (one is absolutely-positioned on top)
|
|
1189
|
+
and cross-fade via the `.is-copied` toggle so the button layout doesn't
|
|
1190
|
+
jump when the mark flips. */
|
|
1191
|
+
.wallet-flow-banner__address-icon-slot {
|
|
1192
|
+
position: relative;
|
|
1193
|
+
width: 1.1rem;
|
|
1194
|
+
height: 1.1rem;
|
|
1195
|
+
flex-shrink: 0;
|
|
1196
|
+
}
|
|
1197
|
+
|
|
1198
|
+
.wallet-flow-banner__address-icon {
|
|
1199
|
+
position: absolute;
|
|
1200
|
+
inset: 0;
|
|
1201
|
+
display: inline-flex;
|
|
1202
|
+
align-items: center;
|
|
1203
|
+
justify-content: center;
|
|
1204
|
+
color: rgba(233, 247, 255, 0.78);
|
|
1205
|
+
transition: opacity 0.18s ease;
|
|
1206
|
+
}
|
|
1207
|
+
|
|
1208
|
+
.wallet-flow-banner__address-icon svg {
|
|
1209
|
+
width: 100%;
|
|
1210
|
+
height: 100%;
|
|
1211
|
+
}
|
|
1212
|
+
|
|
1213
|
+
.wallet-flow-banner__address-icon--check {
|
|
1214
|
+
opacity: 0;
|
|
1215
|
+
color: #7fe0a8;
|
|
1216
|
+
pointer-events: none;
|
|
1217
|
+
}
|
|
1218
|
+
|
|
1219
|
+
.wallet-flow-banner__address.is-copied .wallet-flow-banner__address-icon--copy {
|
|
1220
|
+
opacity: 0;
|
|
1221
|
+
}
|
|
1222
|
+
|
|
1223
|
+
.wallet-flow-banner__address.is-copied .wallet-flow-banner__address-icon--check {
|
|
1224
|
+
opacity: 1;
|
|
1225
|
+
}
|
|
1226
|
+
|
|
1227
|
+
.wallet-flow-message {
|
|
1228
|
+
border-color: rgba(156, 181, 197, 0.14);
|
|
1229
|
+
}
|
|
1230
|
+
|
|
1231
|
+
.wallet-flow-message--notice {
|
|
1232
|
+
background: rgba(31, 41, 50, 0.96);
|
|
1233
|
+
}
|
|
1234
|
+
|
|
1235
|
+
.wallet-flow-message--error {
|
|
1236
|
+
border-color: rgba(255, 140, 140, 0.18);
|
|
1237
|
+
background: rgba(53, 26, 29, 0.96);
|
|
1238
|
+
}
|
|
1239
|
+
|
|
1240
|
+
.settings-update-notice {
|
|
1241
|
+
margin-top: 0.85rem;
|
|
1242
|
+
border-color: rgba(121, 196, 255, 0.22);
|
|
1243
|
+
background: linear-gradient(180deg, rgba(28, 40, 49, 0.98), rgba(20, 27, 34, 0.96));
|
|
1244
|
+
}
|
|
1245
|
+
|
|
1246
|
+
.settings-update-notice__title {
|
|
1247
|
+
margin: 0;
|
|
1248
|
+
font-weight: 700;
|
|
1249
|
+
color: var(--text);
|
|
1250
|
+
}
|
|
1251
|
+
|
|
1252
|
+
.settings-update-notice__command {
|
|
1253
|
+
display: block;
|
|
1254
|
+
width: fit-content;
|
|
1255
|
+
max-width: 100%;
|
|
1256
|
+
margin-top: 0.35rem;
|
|
1257
|
+
padding: 0.32rem 0.5rem;
|
|
1258
|
+
border-radius: 10px;
|
|
1259
|
+
background: rgba(3, 10, 16, 0.38);
|
|
1260
|
+
color: rgba(233, 247, 255, 0.92);
|
|
1261
|
+
overflow-wrap: anywhere;
|
|
1262
|
+
}
|
|
1263
|
+
|
|
1264
|
+
/* Brand attribution at the very bottom of the wallet settings page.
|
|
1265
|
+
Sits below the advanced-actions panel as plain small text so it reads
|
|
1266
|
+
as a credit, not another card. The link inherits the muted color and
|
|
1267
|
+
only brightens on hover/focus so it doesn't compete with the Sign out
|
|
1268
|
+
button for attention. */
|
|
1269
|
+
.wallet-powered-by {
|
|
1270
|
+
margin: 0.75rem 0 0;
|
|
1271
|
+
text-align: center;
|
|
1272
|
+
font-size: 0.75rem;
|
|
1273
|
+
letter-spacing: 0.02em;
|
|
1274
|
+
color: rgba(233, 247, 255, 0.45);
|
|
1275
|
+
}
|
|
1276
|
+
|
|
1277
|
+
.wallet-powered-by a {
|
|
1278
|
+
color: inherit;
|
|
1279
|
+
text-decoration: underline;
|
|
1280
|
+
text-decoration-color: rgba(233, 247, 255, 0.22);
|
|
1281
|
+
text-underline-offset: 2px;
|
|
1282
|
+
transition: color 0.15s ease, text-decoration-color 0.15s ease;
|
|
1283
|
+
}
|
|
1284
|
+
|
|
1285
|
+
.wallet-powered-by a:hover,
|
|
1286
|
+
.wallet-powered-by a:focus-visible {
|
|
1287
|
+
color: rgba(233, 247, 255, 0.85);
|
|
1288
|
+
text-decoration-color: rgba(233, 247, 255, 0.6);
|
|
1289
|
+
outline: none;
|
|
1290
|
+
}
|
|
1291
|
+
|
|
1292
|
+
/* Wraps the banner + notice + step list on the wallet settings page.
|
|
1293
|
+
Pulled out of `renderSettingsGroup`'s `.settings-list` so each child card
|
|
1294
|
+
renders on the page background instead of nested inside another frame. */
|
|
1295
|
+
.wallet-setup-stack {
|
|
1296
|
+
display: grid;
|
|
1297
|
+
gap: 0.85rem;
|
|
1298
|
+
}
|
|
1299
|
+
|
|
1300
|
+
.wallet-step-list {
|
|
1301
|
+
display: grid;
|
|
1302
|
+
gap: 0.85rem;
|
|
1303
|
+
}
|
|
1304
|
+
|
|
1305
|
+
.wallet-step-card {
|
|
1306
|
+
display: grid;
|
|
1307
|
+
gap: 0.8rem;
|
|
1308
|
+
padding: 0.95rem;
|
|
1309
|
+
border: 1px solid rgba(156, 181, 197, 0.08);
|
|
1310
|
+
border-radius: 18px;
|
|
1311
|
+
background: rgba(22, 28, 35, 0.96);
|
|
1312
|
+
box-shadow: 0 8px 18px rgba(0, 0, 0, 0.1);
|
|
1313
|
+
}
|
|
1314
|
+
|
|
1315
|
+
.wallet-step-card--current {
|
|
1316
|
+
border-color: rgba(121, 196, 255, 0.28);
|
|
1317
|
+
box-shadow: 0 12px 26px rgba(0, 0, 0, 0.16);
|
|
1318
|
+
}
|
|
1319
|
+
|
|
1320
|
+
.wallet-step-card--complete {
|
|
1321
|
+
border-color: rgba(112, 202, 157, 0.16);
|
|
1322
|
+
}
|
|
1323
|
+
|
|
1324
|
+
.wallet-step-card--locked {
|
|
1325
|
+
opacity: 0.78;
|
|
1326
|
+
}
|
|
1327
|
+
|
|
1328
|
+
.wallet-step-card__header {
|
|
1329
|
+
display: flex;
|
|
1330
|
+
justify-content: space-between;
|
|
1331
|
+
gap: 0.8rem;
|
|
1332
|
+
align-items: flex-start;
|
|
1333
|
+
}
|
|
1334
|
+
|
|
1335
|
+
.wallet-step-card__headline {
|
|
1336
|
+
min-width: 0;
|
|
1337
|
+
display: flex;
|
|
1338
|
+
gap: 0.62rem;
|
|
1339
|
+
align-items: flex-start;
|
|
1340
|
+
}
|
|
1341
|
+
|
|
1342
|
+
.wallet-step-card__icon {
|
|
1343
|
+
width: 2rem;
|
|
1344
|
+
height: 2rem;
|
|
1345
|
+
display: inline-flex;
|
|
1346
|
+
align-items: center;
|
|
1347
|
+
justify-content: center;
|
|
1348
|
+
border-radius: 12px;
|
|
1349
|
+
background: rgba(121, 196, 255, 0.11);
|
|
1350
|
+
color: #e9f7ff;
|
|
1351
|
+
flex: 0 0 auto;
|
|
1352
|
+
}
|
|
1353
|
+
|
|
1354
|
+
.wallet-step-card__icon svg {
|
|
1355
|
+
width: 1rem;
|
|
1356
|
+
height: 1rem;
|
|
1357
|
+
}
|
|
1358
|
+
|
|
1359
|
+
.wallet-step-card__title-wrap {
|
|
1360
|
+
min-width: 0;
|
|
1361
|
+
display: grid;
|
|
1362
|
+
gap: 0.18rem;
|
|
1363
|
+
}
|
|
1364
|
+
|
|
1365
|
+
.wallet-step-card__eyebrow {
|
|
1366
|
+
margin: 0;
|
|
1367
|
+
font-size: 0.72rem;
|
|
1368
|
+
letter-spacing: 0.05em;
|
|
1369
|
+
text-transform: uppercase;
|
|
1370
|
+
color: rgba(205, 220, 231, 0.5);
|
|
1371
|
+
}
|
|
1372
|
+
|
|
1373
|
+
.wallet-step-card__title {
|
|
1374
|
+
margin: 0;
|
|
1375
|
+
font-size: 1rem;
|
|
1376
|
+
line-height: 1.3;
|
|
1377
|
+
color: var(--text);
|
|
1378
|
+
}
|
|
1379
|
+
|
|
1380
|
+
.wallet-step-card__status {
|
|
1381
|
+
display: inline-flex;
|
|
1382
|
+
align-items: center;
|
|
1383
|
+
gap: 0.36rem;
|
|
1384
|
+
min-height: 1.75rem;
|
|
1385
|
+
padding: 0.22rem 0.68rem;
|
|
1386
|
+
border-radius: 999px;
|
|
1387
|
+
border: 1px solid rgba(156, 181, 197, 0.12);
|
|
1388
|
+
background: rgba(255, 255, 255, 0.05);
|
|
1389
|
+
color: rgba(231, 243, 250, 0.82);
|
|
1390
|
+
font-size: 0.76rem;
|
|
1391
|
+
font-weight: 600;
|
|
1392
|
+
white-space: nowrap;
|
|
1393
|
+
}
|
|
1394
|
+
|
|
1395
|
+
.wallet-step-card__status--current {
|
|
1396
|
+
border-color: rgba(121, 196, 255, 0.24);
|
|
1397
|
+
background: rgba(121, 196, 255, 0.12);
|
|
1398
|
+
color: #dcf1ff;
|
|
1399
|
+
}
|
|
1400
|
+
|
|
1401
|
+
.wallet-step-card__status--complete {
|
|
1402
|
+
border-color: rgba(112, 202, 157, 0.24);
|
|
1403
|
+
background: rgba(112, 202, 157, 0.12);
|
|
1404
|
+
color: #ddfbea;
|
|
1405
|
+
}
|
|
1406
|
+
|
|
1407
|
+
.wallet-step-card__status--locked {
|
|
1408
|
+
color: rgba(205, 220, 231, 0.6);
|
|
1409
|
+
}
|
|
1410
|
+
|
|
1411
|
+
.wallet-step-card__status--optional {
|
|
1412
|
+
border-color: rgba(240, 180, 40, 0.22);
|
|
1413
|
+
background: rgba(240, 180, 40, 0.12);
|
|
1414
|
+
color: rgba(255, 220, 140, 0.96);
|
|
1415
|
+
}
|
|
1416
|
+
|
|
1417
|
+
.wallet-step-card__status-icon {
|
|
1418
|
+
width: 0.82rem;
|
|
1419
|
+
height: 0.82rem;
|
|
1420
|
+
display: inline-flex;
|
|
1421
|
+
align-items: center;
|
|
1422
|
+
justify-content: center;
|
|
1423
|
+
}
|
|
1424
|
+
|
|
1425
|
+
.wallet-step-card__status-icon svg {
|
|
1426
|
+
width: 0.82rem;
|
|
1427
|
+
height: 0.82rem;
|
|
1428
|
+
}
|
|
1429
|
+
|
|
1430
|
+
.wallet-step-card__copy,
|
|
1431
|
+
.wallet-step-card__detail {
|
|
1432
|
+
margin: 0;
|
|
1433
|
+
}
|
|
1434
|
+
|
|
1435
|
+
.wallet-step-card__copy {
|
|
1436
|
+
color: var(--muted);
|
|
1437
|
+
font-size: 0.88rem;
|
|
1438
|
+
line-height: 1.5;
|
|
1439
|
+
}
|
|
1440
|
+
|
|
1441
|
+
.wallet-step-card__detail {
|
|
1442
|
+
padding: 0.78rem 0.85rem;
|
|
1443
|
+
border-radius: 14px;
|
|
1444
|
+
background: rgba(255, 255, 255, 0.035);
|
|
1445
|
+
border: 1px solid rgba(156, 181, 197, 0.08);
|
|
1446
|
+
color: rgba(231, 243, 250, 0.82);
|
|
1447
|
+
font-size: 0.83rem;
|
|
1448
|
+
line-height: 1.45;
|
|
1449
|
+
overflow-wrap: anywhere;
|
|
1450
|
+
}
|
|
1451
|
+
|
|
1452
|
+
.wallet-step-card__detail--mono {
|
|
1453
|
+
font-family: ui-monospace, SFMono-Regular, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
|
1454
|
+
font-size: 0.8rem;
|
|
1455
|
+
}
|
|
1456
|
+
|
|
1457
|
+
/* Inline input form placed above the action button (e.g. email + OTP code
|
|
1458
|
+
during wallet sign-in). Progressive disclosure: the OTP field is only
|
|
1459
|
+
rendered once the send step succeeds, so the grid just grows. */
|
|
1460
|
+
.wallet-step-card__form {
|
|
1461
|
+
display: grid;
|
|
1462
|
+
gap: 0.65rem;
|
|
1463
|
+
}
|
|
1464
|
+
|
|
1465
|
+
.wallet-step-card__field {
|
|
1466
|
+
display: grid;
|
|
1467
|
+
gap: 0.3rem;
|
|
1468
|
+
}
|
|
1469
|
+
|
|
1470
|
+
/* Row variant: label on the left, inline action link (e.g. "Change email")
|
|
1471
|
+
on the right. Used when the field is locked but still editable via an
|
|
1472
|
+
explicit escape hatch. */
|
|
1473
|
+
.wallet-step-card__field-label-row {
|
|
1474
|
+
display: flex;
|
|
1475
|
+
align-items: baseline;
|
|
1476
|
+
justify-content: space-between;
|
|
1477
|
+
gap: 0.6rem;
|
|
1478
|
+
}
|
|
1479
|
+
|
|
1480
|
+
.wallet-step-card__field-label {
|
|
1481
|
+
font-size: 0.72rem;
|
|
1482
|
+
font-weight: 600;
|
|
1483
|
+
letter-spacing: 0.04em;
|
|
1484
|
+
color: var(--muted);
|
|
1485
|
+
text-transform: uppercase;
|
|
1486
|
+
}
|
|
1487
|
+
|
|
1488
|
+
.wallet-step-card__field-link {
|
|
1489
|
+
border: 0;
|
|
1490
|
+
background: transparent;
|
|
1491
|
+
padding: 0;
|
|
857
1492
|
margin: 0;
|
|
1493
|
+
color: rgba(147, 220, 182, 0.92);
|
|
1494
|
+
font: inherit;
|
|
1495
|
+
font-size: 0.78rem;
|
|
1496
|
+
font-weight: 500;
|
|
1497
|
+
letter-spacing: 0.01em;
|
|
1498
|
+
cursor: pointer;
|
|
1499
|
+
text-decoration: underline;
|
|
1500
|
+
text-underline-offset: 2px;
|
|
1501
|
+
text-decoration-thickness: 1px;
|
|
1502
|
+
text-decoration-color: rgba(147, 220, 182, 0.45);
|
|
1503
|
+
transition: color 0.12s ease, text-decoration-color 0.12s ease;
|
|
858
1504
|
}
|
|
859
1505
|
|
|
860
|
-
.
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
.settings-list--compact .settings-choice-row {
|
|
866
|
-
padding-top: 0.78rem;
|
|
867
|
-
padding-bottom: 0.78rem;
|
|
868
|
-
}
|
|
869
|
-
|
|
870
|
-
.settings-list--compact .settings-info-row:last-child,
|
|
871
|
-
.settings-list--compact .settings-choice-row:last-child {
|
|
872
|
-
padding-bottom: 0.56rem;
|
|
1506
|
+
.wallet-step-card__field-link:hover,
|
|
1507
|
+
.wallet-step-card__field-link:focus-visible {
|
|
1508
|
+
color: #ddfbea;
|
|
1509
|
+
text-decoration-color: rgba(221, 251, 234, 0.85);
|
|
1510
|
+
outline: none;
|
|
873
1511
|
}
|
|
874
1512
|
|
|
875
|
-
.
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
border: 1px solid
|
|
880
|
-
|
|
881
|
-
|
|
1513
|
+
.wallet-step-card__field-input {
|
|
1514
|
+
width: 100%;
|
|
1515
|
+
padding: 0.58rem 0.75rem;
|
|
1516
|
+
border-radius: 0.55rem;
|
|
1517
|
+
border: 1px solid var(--line-strong);
|
|
1518
|
+
background: rgba(7, 12, 16, 0.72);
|
|
1519
|
+
color: var(--text);
|
|
1520
|
+
font: inherit;
|
|
1521
|
+
line-height: 1.4;
|
|
1522
|
+
transition: border-color 0.12s ease, box-shadow 0.12s ease, background 0.12s ease;
|
|
882
1523
|
}
|
|
883
1524
|
|
|
884
|
-
.
|
|
885
|
-
color:
|
|
886
|
-
font-size: 0.8rem;
|
|
887
|
-
line-height: 1.35;
|
|
1525
|
+
.wallet-step-card__field-input::placeholder {
|
|
1526
|
+
color: rgba(205, 220, 231, 0.38);
|
|
888
1527
|
}
|
|
889
1528
|
|
|
890
|
-
.
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
color: var(--text);
|
|
896
|
-
overflow-wrap: anywhere;
|
|
1529
|
+
.wallet-step-card__field-input:focus {
|
|
1530
|
+
outline: none;
|
|
1531
|
+
border-color: rgba(112, 202, 157, 0.55);
|
|
1532
|
+
background: rgba(7, 12, 16, 0.92);
|
|
1533
|
+
box-shadow: 0 0 0 3px rgba(47, 143, 103, 0.22);
|
|
897
1534
|
}
|
|
898
1535
|
|
|
899
|
-
.
|
|
900
|
-
|
|
901
|
-
|
|
1536
|
+
.wallet-step-card__field-input--mono {
|
|
1537
|
+
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
|
1538
|
+
letter-spacing: 0.14em;
|
|
1539
|
+
font-size: 0.95rem;
|
|
902
1540
|
}
|
|
903
1541
|
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
1542
|
+
/* Locked variant: the email field becomes read-only after the OTP has been
|
|
1543
|
+
sent. We dim it (not fully grayed out, so the address stays readable),
|
|
1544
|
+
flatten the interactive affordances, and let the sibling "Change email"
|
|
1545
|
+
link carry the edit affordance instead. Using `disabled` on the input
|
|
1546
|
+
also short-circuits the `shouldDeferRenderForActiveInteraction` guard
|
|
1547
|
+
since the field can't accept focus while locked. */
|
|
1548
|
+
.wallet-step-card__field-input--locked,
|
|
1549
|
+
.wallet-step-card__field-input[disabled] {
|
|
1550
|
+
background: rgba(7, 12, 16, 0.38);
|
|
1551
|
+
border-color: var(--line);
|
|
1552
|
+
color: rgba(205, 220, 231, 0.72);
|
|
1553
|
+
cursor: not-allowed;
|
|
910
1554
|
}
|
|
911
1555
|
|
|
912
|
-
.
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
gap: 0.75rem;
|
|
916
|
-
align-items: flex-start;
|
|
1556
|
+
.wallet-step-card__field-input[disabled]:focus {
|
|
1557
|
+
border-color: var(--line);
|
|
1558
|
+
box-shadow: none;
|
|
917
1559
|
}
|
|
918
1560
|
|
|
919
|
-
.
|
|
920
|
-
min-width: 0;
|
|
1561
|
+
.wallet-step-card__actions {
|
|
921
1562
|
display: grid;
|
|
922
|
-
gap: 0.
|
|
1563
|
+
gap: 0.65rem;
|
|
923
1564
|
}
|
|
924
1565
|
|
|
925
|
-
|
|
1566
|
+
/* Compact variant: used for finished steps so the current step dominates the
|
|
1567
|
+
page. One row tall, icon + title + detail visible, no copy/actions. */
|
|
1568
|
+
.wallet-step-card--compact {
|
|
926
1569
|
display: flex;
|
|
1570
|
+
gap: 0.7rem;
|
|
927
1571
|
align-items: center;
|
|
928
|
-
|
|
929
|
-
|
|
1572
|
+
padding: 0.68rem 0.85rem;
|
|
1573
|
+
border-color: rgba(112, 202, 157, 0.14);
|
|
1574
|
+
background: rgba(22, 28, 35, 0.72);
|
|
1575
|
+
box-shadow: none;
|
|
930
1576
|
}
|
|
931
1577
|
|
|
932
|
-
.
|
|
933
|
-
width: 1.
|
|
934
|
-
height: 1.
|
|
1578
|
+
.wallet-step-card__compact-icon {
|
|
1579
|
+
width: 1.4rem;
|
|
1580
|
+
height: 1.4rem;
|
|
935
1581
|
display: inline-flex;
|
|
936
1582
|
align-items: center;
|
|
937
1583
|
justify-content: center;
|
|
938
|
-
border-radius:
|
|
939
|
-
background: rgba(
|
|
940
|
-
color: #
|
|
1584
|
+
border-radius: 999px;
|
|
1585
|
+
background: rgba(112, 202, 157, 0.16);
|
|
1586
|
+
color: #ddfbea;
|
|
941
1587
|
flex: 0 0 auto;
|
|
942
1588
|
}
|
|
943
1589
|
|
|
944
|
-
.
|
|
945
|
-
width:
|
|
946
|
-
height:
|
|
1590
|
+
.wallet-step-card__compact-icon svg {
|
|
1591
|
+
width: 0.78rem;
|
|
1592
|
+
height: 0.78rem;
|
|
947
1593
|
}
|
|
948
1594
|
|
|
949
|
-
.
|
|
1595
|
+
.wallet-step-card__compact-body {
|
|
1596
|
+
min-width: 0;
|
|
1597
|
+
flex: 1 1 auto;
|
|
1598
|
+
display: grid;
|
|
1599
|
+
gap: 0.1rem;
|
|
1600
|
+
}
|
|
1601
|
+
|
|
1602
|
+
.wallet-step-card__compact-title {
|
|
950
1603
|
margin: 0;
|
|
951
|
-
font-size:
|
|
1604
|
+
font-size: 0.92rem;
|
|
952
1605
|
line-height: 1.3;
|
|
953
|
-
|
|
1606
|
+
color: var(--text);
|
|
954
1607
|
}
|
|
955
1608
|
|
|
956
|
-
.
|
|
1609
|
+
.wallet-step-card__compact-detail {
|
|
957
1610
|
margin: 0;
|
|
958
|
-
color: rgba(231, 243, 250, 0.62);
|
|
959
1611
|
font-size: 0.78rem;
|
|
960
|
-
line-height: 1.
|
|
961
|
-
|
|
1612
|
+
line-height: 1.4;
|
|
1613
|
+
color: rgba(205, 220, 231, 0.62);
|
|
962
1614
|
overflow-wrap: anywhere;
|
|
963
1615
|
}
|
|
964
1616
|
|
|
965
|
-
.
|
|
1617
|
+
.wallet-step-card__compact-detail--mono {
|
|
1618
|
+
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
|
1619
|
+
font-size: 0.75rem;
|
|
1620
|
+
}
|
|
1621
|
+
|
|
1622
|
+
.wallet-step-card__compact-status {
|
|
1623
|
+
font-size: 0.72rem;
|
|
1624
|
+
font-weight: 600;
|
|
1625
|
+
letter-spacing: 0.02em;
|
|
1626
|
+
color: rgba(112, 202, 157, 0.92);
|
|
966
1627
|
flex: 0 0 auto;
|
|
967
|
-
|
|
1628
|
+
}
|
|
1629
|
+
|
|
1630
|
+
/* Mainnet opt-in link: behaves like a row-shaped button so it sits naturally
|
|
1631
|
+
among the step cards but reads as a disclosure, not a primary action. */
|
|
1632
|
+
.wallet-mainnet-optin {
|
|
1633
|
+
display: flex;
|
|
1634
|
+
gap: 0.7rem;
|
|
968
1635
|
align-items: center;
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
border
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
font
|
|
978
|
-
|
|
1636
|
+
width: 100%;
|
|
1637
|
+
padding: 0.75rem 0.9rem;
|
|
1638
|
+
border-radius: 16px;
|
|
1639
|
+
border: 1px dashed rgba(240, 180, 40, 0.28);
|
|
1640
|
+
background: rgba(240, 180, 40, 0.04);
|
|
1641
|
+
color: rgba(255, 220, 140, 0.96);
|
|
1642
|
+
text-align: left;
|
|
1643
|
+
cursor: pointer;
|
|
1644
|
+
font: inherit;
|
|
1645
|
+
transition: background 0.15s ease, border-color 0.15s ease;
|
|
979
1646
|
}
|
|
980
1647
|
|
|
981
|
-
.
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
1648
|
+
.wallet-mainnet-optin:hover,
|
|
1649
|
+
.wallet-mainnet-optin:focus-visible {
|
|
1650
|
+
background: rgba(240, 180, 40, 0.09);
|
|
1651
|
+
border-color: rgba(240, 180, 40, 0.44);
|
|
1652
|
+
outline: none;
|
|
985
1653
|
}
|
|
986
1654
|
|
|
987
|
-
.
|
|
1655
|
+
.wallet-mainnet-optin__body {
|
|
1656
|
+
flex: 1 1 auto;
|
|
988
1657
|
display: grid;
|
|
989
|
-
|
|
990
|
-
gap: 0.75rem;
|
|
991
|
-
align-items: start;
|
|
1658
|
+
gap: 0.14rem;
|
|
992
1659
|
}
|
|
993
1660
|
|
|
994
|
-
.
|
|
995
|
-
|
|
996
|
-
font-
|
|
997
|
-
line-height: 1.35;
|
|
1661
|
+
.wallet-mainnet-optin__label {
|
|
1662
|
+
font-size: 0.9rem;
|
|
1663
|
+
font-weight: 600;
|
|
998
1664
|
}
|
|
999
1665
|
|
|
1000
|
-
.
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
line-height: 1.35;
|
|
1004
|
-
text-align: right;
|
|
1005
|
-
overflow-wrap: anywhere;
|
|
1666
|
+
.wallet-mainnet-optin__hint {
|
|
1667
|
+
font-size: 0.78rem;
|
|
1668
|
+
line-height: 1.4;
|
|
1006
1669
|
}
|
|
1007
1670
|
|
|
1008
|
-
.
|
|
1009
|
-
|
|
1671
|
+
.wallet-mainnet-optin__chevron {
|
|
1672
|
+
flex: 0 0 auto;
|
|
1673
|
+
font-size: 1rem;
|
|
1674
|
+
opacity: 0.7;
|
|
1675
|
+
}
|
|
1676
|
+
|
|
1677
|
+
@media (max-width: 640px) {
|
|
1678
|
+
.wallet-step-card__header {
|
|
1679
|
+
flex-direction: column;
|
|
1680
|
+
}
|
|
1681
|
+
|
|
1682
|
+
.wallet-step-card__status {
|
|
1683
|
+
align-self: flex-start;
|
|
1684
|
+
}
|
|
1685
|
+
|
|
1686
|
+
.wallet-step-card--compact {
|
|
1687
|
+
/* Stay single-line even on narrow phones — dropping to column here
|
|
1688
|
+
would negate the point of the compact variant. */
|
|
1689
|
+
flex-direction: row;
|
|
1690
|
+
}
|
|
1691
|
+
}
|
|
1692
|
+
|
|
1693
|
+
@media (min-width: 720px) {
|
|
1694
|
+
.wallet-step-card__actions {
|
|
1695
|
+
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
|
|
1696
|
+
}
|
|
1010
1697
|
}
|
|
1011
1698
|
|
|
1012
1699
|
.screen-header {
|
|
@@ -1552,6 +2239,54 @@ code {
|
|
|
1552
2239
|
flex: 0 0 auto;
|
|
1553
2240
|
}
|
|
1554
2241
|
|
|
2242
|
+
/* Skeleton shimmer for the Code tab while /api/inbox/diff is in flight.
|
|
2243
|
+
Reuses the detail-loading-pulse keyframes so we don't duplicate the
|
|
2244
|
+
animation. Cards are non-interactive (no cursor change, hidden from
|
|
2245
|
+
assistive tech via aria-hidden on the card). */
|
|
2246
|
+
.diff-entry--skeleton {
|
|
2247
|
+
cursor: default;
|
|
2248
|
+
gap: 0.6rem;
|
|
2249
|
+
pointer-events: none;
|
|
2250
|
+
}
|
|
2251
|
+
|
|
2252
|
+
.diff-skeleton-line,
|
|
2253
|
+
.diff-skeleton-chip {
|
|
2254
|
+
display: block;
|
|
2255
|
+
height: 0.78rem;
|
|
2256
|
+
border-radius: 999px;
|
|
2257
|
+
background:
|
|
2258
|
+
linear-gradient(90deg, rgba(255, 255, 255, 0.08), rgba(255, 255, 255, 0.18), rgba(255, 255, 255, 0.08)),
|
|
2259
|
+
rgba(255, 255, 255, 0.08);
|
|
2260
|
+
background-size: 200% 100%;
|
|
2261
|
+
animation: detail-loading-pulse 1.25s ease-in-out infinite;
|
|
2262
|
+
}
|
|
2263
|
+
|
|
2264
|
+
.diff-skeleton-line--thread {
|
|
2265
|
+
width: 42%;
|
|
2266
|
+
height: 0.7rem;
|
|
2267
|
+
}
|
|
2268
|
+
|
|
2269
|
+
.diff-skeleton-line--time {
|
|
2270
|
+
width: 3.6rem;
|
|
2271
|
+
height: 0.7rem;
|
|
2272
|
+
justify-self: end;
|
|
2273
|
+
}
|
|
2274
|
+
|
|
2275
|
+
.diff-skeleton-line--title {
|
|
2276
|
+
width: 78%;
|
|
2277
|
+
height: 0.96rem;
|
|
2278
|
+
}
|
|
2279
|
+
|
|
2280
|
+
.diff-skeleton-chip {
|
|
2281
|
+
width: 5.2rem;
|
|
2282
|
+
height: 1.1rem;
|
|
2283
|
+
border-radius: 10px;
|
|
2284
|
+
}
|
|
2285
|
+
|
|
2286
|
+
.diff-skeleton-chip--narrow {
|
|
2287
|
+
width: 3.4rem;
|
|
2288
|
+
}
|
|
2289
|
+
|
|
1555
2290
|
.timeline-entry__meta {
|
|
1556
2291
|
display: grid;
|
|
1557
2292
|
grid-template-columns: minmax(0, 1fr) auto;
|
|
@@ -2053,6 +2788,14 @@ code {
|
|
|
2053
2788
|
rgba(21, 28, 33, 0.92);
|
|
2054
2789
|
}
|
|
2055
2790
|
|
|
2791
|
+
.detail-card--autopilot {
|
|
2792
|
+
margin-top: 0.24rem;
|
|
2793
|
+
gap: 0.32rem;
|
|
2794
|
+
background:
|
|
2795
|
+
linear-gradient(180deg, rgba(101, 207, 159, 0.10), rgba(255, 255, 255, 0.02)),
|
|
2796
|
+
rgba(14, 24, 27, 0.92);
|
|
2797
|
+
}
|
|
2798
|
+
|
|
2056
2799
|
.detail-card--images {
|
|
2057
2800
|
margin-top: 0.24rem;
|
|
2058
2801
|
gap: 0;
|
|
@@ -2552,6 +3295,13 @@ code {
|
|
|
2552
3295
|
line-height: 1.4;
|
|
2553
3296
|
}
|
|
2554
3297
|
|
|
3298
|
+
.detail-autopilot-copy {
|
|
3299
|
+
margin: 0;
|
|
3300
|
+
color: rgba(243, 251, 255, 0.88);
|
|
3301
|
+
font-size: 0.92rem;
|
|
3302
|
+
line-height: 1.5;
|
|
3303
|
+
}
|
|
3304
|
+
|
|
2555
3305
|
.detail-body--context {
|
|
2556
3306
|
color: rgba(243, 251, 255, 0.88);
|
|
2557
3307
|
}
|
|
@@ -2922,9 +3672,9 @@ code {
|
|
|
2922
3672
|
|
|
2923
3673
|
.reply-mode-switch {
|
|
2924
3674
|
display: grid;
|
|
2925
|
-
grid-template-columns: auto
|
|
3675
|
+
grid-template-columns: auto minmax(0, 1fr);
|
|
2926
3676
|
gap: 0.78rem;
|
|
2927
|
-
align-items:
|
|
3677
|
+
align-items: start;
|
|
2928
3678
|
padding: 0.82rem 0.92rem;
|
|
2929
3679
|
border: 1px solid rgba(156, 181, 197, 0.1);
|
|
2930
3680
|
border-radius: 18px;
|
|
@@ -2948,6 +3698,7 @@ code {
|
|
|
2948
3698
|
display: flex;
|
|
2949
3699
|
align-items: center;
|
|
2950
3700
|
transition: background 160ms ease, border-color 160ms ease;
|
|
3701
|
+
margin-top: 0.14rem;
|
|
2951
3702
|
}
|
|
2952
3703
|
|
|
2953
3704
|
.reply-mode-switch__thumb {
|
|
@@ -2972,13 +3723,13 @@ code {
|
|
|
2972
3723
|
.reply-mode-switch__copy {
|
|
2973
3724
|
min-width: 0;
|
|
2974
3725
|
display: grid;
|
|
2975
|
-
gap: 0.
|
|
3726
|
+
gap: 0.22rem;
|
|
2976
3727
|
}
|
|
2977
3728
|
|
|
2978
3729
|
.reply-mode-switch__title {
|
|
2979
|
-
display:
|
|
2980
|
-
|
|
2981
|
-
|
|
3730
|
+
display: grid;
|
|
3731
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
3732
|
+
align-items: start;
|
|
2982
3733
|
gap: 0.65rem;
|
|
2983
3734
|
font-size: 0.94rem;
|
|
2984
3735
|
font-weight: 700;
|
|
@@ -2986,10 +3737,13 @@ code {
|
|
|
2986
3737
|
}
|
|
2987
3738
|
|
|
2988
3739
|
.reply-mode-switch__state {
|
|
3740
|
+
display: inline-flex;
|
|
3741
|
+
align-items: center;
|
|
2989
3742
|
color: rgba(121, 196, 255, 0.92);
|
|
2990
3743
|
font-size: 0.78rem;
|
|
2991
3744
|
letter-spacing: 0.04em;
|
|
2992
3745
|
text-transform: uppercase;
|
|
3746
|
+
white-space: nowrap;
|
|
2993
3747
|
}
|
|
2994
3748
|
|
|
2995
3749
|
.reply-mode-switch__hint {
|
|
@@ -3017,6 +3771,56 @@ code {
|
|
|
3017
3771
|
grid-row: 1;
|
|
3018
3772
|
}
|
|
3019
3773
|
|
|
3774
|
+
.settings-list--toggle-group {
|
|
3775
|
+
display: grid;
|
|
3776
|
+
gap: 0;
|
|
3777
|
+
}
|
|
3778
|
+
|
|
3779
|
+
.settings-list--toggle-group .reply-mode-switch--grouped {
|
|
3780
|
+
border: 0;
|
|
3781
|
+
border-radius: 0;
|
|
3782
|
+
background: transparent;
|
|
3783
|
+
padding: 0.95rem 1rem;
|
|
3784
|
+
}
|
|
3785
|
+
|
|
3786
|
+
.settings-list--toggle-group .reply-mode-switch--grouped + .reply-mode-switch--grouped {
|
|
3787
|
+
border-top: 1px solid rgba(255, 255, 255, 0.06);
|
|
3788
|
+
}
|
|
3789
|
+
|
|
3790
|
+
.settings-list--toggle-group .reply-mode-switch--grouped + .settings-toggle-subhead,
|
|
3791
|
+
.settings-list--toggle-group .settings-toggle-subcopy + .reply-mode-switch--grouped {
|
|
3792
|
+
border-top: 1px solid rgba(255, 255, 255, 0.06);
|
|
3793
|
+
}
|
|
3794
|
+
|
|
3795
|
+
.settings-toggle-subhead {
|
|
3796
|
+
display: grid;
|
|
3797
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
3798
|
+
align-items: end;
|
|
3799
|
+
gap: 0.6rem;
|
|
3800
|
+
padding: 0.95rem 1rem 0.32rem;
|
|
3801
|
+
}
|
|
3802
|
+
|
|
3803
|
+
.settings-toggle-subhead__title {
|
|
3804
|
+
font-size: 0.9rem;
|
|
3805
|
+
font-weight: 700;
|
|
3806
|
+
line-height: 1.25;
|
|
3807
|
+
color: var(--text);
|
|
3808
|
+
}
|
|
3809
|
+
|
|
3810
|
+
.settings-toggle-subhead__state {
|
|
3811
|
+
color: rgba(121, 196, 255, 0.92);
|
|
3812
|
+
font-size: 0.78rem;
|
|
3813
|
+
letter-spacing: 0.04em;
|
|
3814
|
+
text-transform: uppercase;
|
|
3815
|
+
white-space: nowrap;
|
|
3816
|
+
}
|
|
3817
|
+
|
|
3818
|
+
.settings-toggle-subcopy {
|
|
3819
|
+
padding: 0 1rem 0.78rem;
|
|
3820
|
+
font-size: 0.83rem;
|
|
3821
|
+
line-height: 1.45;
|
|
3822
|
+
}
|
|
3823
|
+
|
|
3020
3824
|
.reply-mode-switch__input:checked ~ .reply-mode-switch--settings__toggle .reply-mode-switch__track {
|
|
3021
3825
|
background: rgba(67, 160, 255, 0.28);
|
|
3022
3826
|
border-color: rgba(121, 196, 255, 0.34);
|
|
@@ -3844,8 +4648,11 @@ button:disabled {
|
|
|
3844
4648
|
}
|
|
3845
4649
|
}
|
|
3846
4650
|
|
|
3847
|
-
/*
|
|
3848
|
-
|
|
4651
|
+
/* Async button busy/loading state. Applies to any button marked
|
|
4652
|
+
.is-loading / aria-busy (approval actions, push notification toggle,
|
|
4653
|
+
etc.) so the tap gets immediate visual feedback while the async
|
|
4654
|
+
work (Web Push subscribe, server POST, …) is in flight. */
|
|
4655
|
+
button.is-loading {
|
|
3849
4656
|
display: inline-flex;
|
|
3850
4657
|
align-items: center;
|
|
3851
4658
|
justify-content: center;
|
|
@@ -3853,7 +4660,7 @@ button[data-action-url].is-loading {
|
|
|
3853
4660
|
cursor: wait;
|
|
3854
4661
|
opacity: 0.9;
|
|
3855
4662
|
}
|
|
3856
|
-
button[
|
|
4663
|
+
button[aria-busy="true"]:not(.is-loading) {
|
|
3857
4664
|
opacity: 0.5;
|
|
3858
4665
|
cursor: not-allowed;
|
|
3859
4666
|
}
|