j1rwTiB4)(T)jV5$Qu_@
zNq=2dTmdT%uXLASrOlwBEVZ6i*>1S$SKx?);y~8$q%XQ-RFtyps|@N46lM#TW+m*h
z=Z&Qz`)p}!vWf`?uBT!!|1vJkCaA4^=b+Y!?nZX}r67P{;v5r#kFX=YCUt3nPvA5N
zO({JrX|yb#a^p5p2?A9Z-PsyLoo+-YkuHiOb$J27uvKnrO2u0Ns28&RmRVQRIpPwL
zK=vL{2uGQbJdC1i_7P5j&Ta<%m|ZvyPL!++t{U}(Z>8jrrj8@+%p+`^6Ef`O;Bdjc
z;WVvLJ`@8d}>@a0S}O5QcTCn
z`$)(U)2wFvgfMb+zGQp6R6ibtFeCa4fuCW-0a7f-Eb*1v==ggcFkn^f5@A)gNV~=f
zOK%u3v1RK756?lR=UaYQXFE9w5@EL1LSii!NJOd@E`z}!2HWdul2txfRrF)c2#I=d
z=2A%X0*Qb&;PxW!*Ba>>5$TIvxxLc%N`Po#NqL{w`^hW<6NjF8grvm+4dqh26BYqF
zQ-qoai=f^Mi@+)Rh^zw_U$PTzatX-$$u?_Z(fl-z0E%BF@CdP3pCTj9#3RV#i9?X`
zeenkxM3l96%^%FzgZ>=;z;RYgSCX0=2EkhDo$w9jrdWfFEbobFXLlX9+AFdK&klb5
z!fmn!bL7TuCoKg}1R9g~4JlPTbfA>jroM%YLof&$`0HL`}
zYoPTj`x-gWG4QSf&l3dSBV2keqC?u62$vS4H~opG<{q93G;hR9F^`yhx5Or4Y9LL@namIB~v%sE#Q)QLy>v==oB9!a^Hjf)mWTNXj7|TmgE0lUEUMT4l
zjb^YemLNq9&j9S;83iP7+$&j5(5;){vIO4%b-$S5nJw<;dwiE$Y!k6F={;_7Ki}g!
z++yd5opbMbkMI8&*FApwsQR+eZ@lqd$^y1*f8CP4!(dv|_zMb{%ow0n+N%%hg_&<1kq2P88
F0syv6H8lVL
literal 0
HcmV?d00001
diff --git a/src/css/main.css b/src/css/main.css
index f773c54..3d5735e 100644
--- a/src/css/main.css
+++ b/src/css/main.css
@@ -10,6 +10,11 @@ body.plugin {
min-height: 600px;
}
+body.disable-animations * {
+ transition-duration: 0s !important;
+ animation-duration: 0s !important;
+}
+
.body-container {
position: absolute;
left: 0;
@@ -35,7 +40,7 @@ a, a:focus, a:active, a:after {
input {
width: 100%;
border: none;
- border-bottom: 1px solid #e7e7e7;
+ border-bottom: 1px solid transparent;
height: 40px;
margin-top: 10px;
margin-bottom: 10px;
@@ -47,16 +52,27 @@ input {
user-select: auto;
-webkit-user-select: auto;
-moz-user-select: auto;
+
+ background-image: linear-gradient(rgba(215, 77, 77, 0), rgba(215, 77, 77, 0)), linear-gradient(rgba(60, 164, 219, 0), rgba(60, 164, 219, 0)), linear-gradient(#e7e7e7, #e7e7e7);
+ background-size: 0% 1px, 0% 1px, 100% 1px;
+ background-position: bottom center;
+ background-repeat: no-repeat;
+ transition: 0.2s background-image, 0s 0.2s background-size;
}
input:focus {
- border-bottom: 1px solid #3CA4DB;
+ background-image: linear-gradient(rgba(215, 77, 77, 0), rgba(215, 77, 77, 0)), linear-gradient(rgba(60, 164, 219, 1), rgba(60, 164, 219, 1)), linear-gradient(#e7e7e7, #e7e7e7);
+ background-size: 100% 1px, 100% 1px, 100% 1px;
+ transition: 0.2s background-image, 0.2s background-size;
}
input.error {
- border-bottom: 1px solid #D74D4D;
+ background-image: linear-gradient(rgba(215, 77, 77, 1), rgba(215, 77, 77, 1)), linear-gradient(rgba(60, 164, 219, 0), rgba(60, 164, 219, 0)), linear-gradient(#e7e7e7, #e7e7e7);
+ background-size: 100% 1px, 100% 1px, 100% 1px;
+ transition: 0.2s background-image, 0.2s background-size;
}
+
::-webkit-input-placeholder { /* Edge */
color: #999999;
}
@@ -119,6 +135,64 @@ button {
background-color: #2E2F31;
}
+.btn-loader {
+ pointer-events: none;
+}
+
+.btn-loader:after {
+ content: '';
+ position: absolute;
+ transform: translate(8px, 2px);
+ width: 8px;
+ height: 8px;
+ border: 3px solid white;
+ border-left: 3px solid transparent;
+ border-radius: 50%;
+ animation: loading-animation-spin 2s infinite linear;
+}
+
+.btn-lite.btn-loader:after {
+ transform: translate(6px, 3px);
+ width: 6px;
+ height: 6px;
+ border: 2px solid #3CA4DB;
+ border-left: 2px solid transparent;
+ animation: loading-animation-spin-small 2s infinite linear;
+}
+
+.btn-back {
+ position: fixed;
+ top: 10px;
+ left: 10px;
+ width: 40px;
+ height: 40px;
+ background-position: center;
+ background-repeat: no-repeat;
+ background-size: 20px 20px;
+ border: none;
+ background-color: transparent;
+ background-image: url("../assets/arrow.svg");
+ transform: scaleX(-1);
+ border-radius: 100%;
+ background-color: white;
+}
+
+.btn-back:hover {
+ background-color: #F7F7F7;
+}
+
+@keyframes loading-animation-spin {
+ to {
+ transform: translate(8px, 2px) rotate(1turn);
+ }
+}
+
+@keyframes loading-animation-spin-small {
+ to {
+ transform: translate(6px, 3px) rotate(1turn);
+ }
+}
+
.screen {
position: absolute;
left: 0;
@@ -129,12 +203,82 @@ button {
}
.middle {
- position: absolute;
- text-align: center;
- top: 50%;
- left: 0;
width: 100%;
- transform: translate(0, -50%);
+ min-height: 100%;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+}
+
+.middle-content {
+ text-align: center;
+}
+
+.screen.faded-show {
+ opacity: 1;
+ visibility: inherit !important;
+ transition: 0.3s opacity, 0.3s visibility step-start;
+}
+
+.screen.faded-hide {
+ opacity: 0;
+ visibility: hidden;
+ transition: 0.3s opacity, 0.3s visibility step-end;
+ animation: 99999999s 0.3s screen-delayed-overflow;
+}
+
+.screen.faded-show .middle {
+ animation: screen-show-left 0.3s ease-out;
+}
+
+.screen.faded-hide .middle {
+ animation: screen-hide-left 0.3s ease-in;
+}
+
+.screen.faded-show.isBack .middle {
+ animation: screen-show-right 0.3s ease-out;
+}
+
+.screen.faded-hide.isBack .middle {
+ animation: screen-hide-right 0.3s ease-in;
+}
+
+.screen.faded-show .screen-lottie {
+ opacity: 1;
+ transform: scale(1);
+ transition: 0.2s opacity, transform 0.2s;
+}
+
+.screen.faded-hide .screen-lottie {
+ opacity: 0;
+ transform: scale(0.3);
+ transition: 0.2s opacity, transform 0.25s;
+}
+
+
+@keyframes screen-delayed-overflow {
+ from { overflow: hidden }
+}
+
+@keyframes screen-hide-left {
+ from { transform: translateX(0px) }
+ to { transform: translateX(-25px) }
+}
+
+@keyframes screen-hide-right {
+ from { transform: translateX(0px) }
+ to { transform: translateX(25px) }
+}
+
+@keyframes screen-show-left {
+ from { transform: translateX(25px) }
+ to { transform: translateX(0px) }
+}
+
+@keyframes screen-show-right {
+ from { transform: translateX(-25px) }
+ to { transform: translateX(0px) }
}
.addr {
@@ -187,6 +331,16 @@ button {
color: white;
font-size: 14px;
text-align: center;
+
+ opacity: 0;
+ visibility: hidden;
+ transition: 0.15s opacity, 0.15s visibility step-end;
+}
+
+#notify.faded-show {
+ opacity: 1;
+ visibility: inherit !important;
+ transition: 0.15s opacity, 0.15s visibility step-start;
}
/* SET PASSWORD */
@@ -197,7 +351,7 @@ button {
font-size: 15px;
}
-/* IMPORT */
+/* IMPORT && BACKUP && CONFIRM */
#import .btn-lite {
font-weight: normal;
@@ -205,13 +359,16 @@ button {
margin-bottom: 10px;
}
-#importWords {
+#importWords,
+#confirmWords,
+#createWords {
max-width: 276px;
margin-left: auto;
margin-right: auto;
}
-#wordsPopup {
+#wordsPopup,
+#wordsConfirmPopup {
position: absolute;
background: white;
padding-top: 4px;
@@ -229,6 +386,10 @@ button {
border: 1px solid #DCDCDC;
}
+#wordsConfirmPopup {
+ width: 190px;
+}
+
.words-popup-item {
font-size: 14px;
line-height: 30px;
@@ -245,13 +406,6 @@ button {
background: #f0f0f0;
}
-#createWords {
- margin-top: 10px;
- max-width: 272px;
- margin-left: auto;
- margin-right: auto;
-}
-
.word-item {
float: left;
}
@@ -265,18 +419,24 @@ button {
margin-right: 4px;
}
-#import .word-num {
+#import .word-num,
+#wordsConfirm .word-num {
margin-right: 8px;
margin-left: 16px;
}
-#import input {
+#import input,
+#wordsConfirm input {
width: 92px;
height: 32px;
margin-top: 0;
margin-bottom: 0;
}
+#wordsConfirm input {
+ width: 190px;
+}
+
.create-word-item {
float: left;
width: 136px;
@@ -520,7 +680,7 @@ button {
/* POPUP */
#modal {
- position: absolute;
+ position: fixed;
left: 0;
top: 0;
width: 100%;
@@ -533,6 +693,7 @@ button {
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
+ box-shadow: 0px 8px 24px rgba(0, 0, 0, .25);
width: 320px;
background-color: white;
@@ -541,6 +702,26 @@ button {
font-size: 14px;
}
+.popup#alert {
+ position: fixed;
+}
+
+.popup.faded-show,
+#menuDropdown.faded-show,
+#modal.faded-show {
+ opacity: 1;
+ visibility: inherit !important;
+ transition: 0.15s opacity, 0.15s visibility step-start;
+}
+
+.popup.faded-hide,
+#menuDropdown.faded-hide,
+#modal.faded-hide {
+ opacity: 0;
+ visibility: hidden;
+ transition: 0.15s opacity, 0.15s visibility step-end;
+}
+
.popup-title {
font-weight: bold;
margin-bottom: 20px;
diff --git a/src/index.html b/src/index.html
index 4831660..f66eff6 100644
--- a/src/index.html
+++ b/src/index.html
@@ -19,190 +19,241 @@
-
+
-
-
-
-
TON Wallet
-
- TON wallet allows you to make fast and
- secure blockchain-based payments
- without intermediaries.
-
+
+
+
-
-
-
-
-
+
TON Wallet
+
+ TON wallet allows you to make fast and
+ secure blockchain-based payments
+ without intermediaries.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
24 Secret Words
-
- Please restore access to your non-hardware wallet by
- entering the 24 secret words you wrote
- down when creating the wallet.
-
+
+
+
+
-
+
24 Secret Words
+
+ Please restore access to your non-hardware wallet by
+ entering the 24 secret words you wrote
+ down when creating the wallet.
+
-
+
-
+
-
+
-
-
+
+
+
+
+
+
-
+
-
-
+
+
+
-
Congratulations
+
Congratulations
-
- Your TON wallet has just been created.
- Only you control it.
-
+
+ Your TON wallet has just been created.
+ Only you control it.
+
-
- To be able to always have access to it,
- please set up a secure password and write
- down secret words.
-
+
+ To be able to always have access to it,
+ please set up a secure password and write
+ down secret words.
+
-
-
+
+
+
-
-
-
+
+
+
+
+
-
24 secret words
+
24 secret words
-
- Write down these 24 words in the correct
- order and store them in secret place.
-
+
+ Write down these 24 words in the correct
+ order and store them in secret place.
+
-
- Use these secret words to restore access to
- your wallet if you lose your password or
- access to this device.
-
+
+ Use these secret words to restore access to
+ your wallet if you lose your password or
+ access to this device.
+
-
-
-
+
+
+
+
-
+
-
+
+
-
-
+
-
Secure Password
+
+
-
- Please choose a secure password
- for confirming your payments
-
+
Test Time!
-
-
-
-
-
+
+ Now let's check that you wrote your secret
words correctly.
+
+
+
+ Please enter the words , and below:
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
Secure Password
+
+
+ Please choose a secure password
+ for confirming your payments
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
+
+
+
-
Ready to go!
+
Ready to go!
-
- You're all set. Now you have a wallet that
- only you control - directly, without
- middlemen or bankers.
-
+
+ You're all set. Now you have a wallet that
+ only you control - directly, without
+ middlemen or bankers.
+
-
-
+
+
+
-