diff --git a/index.html b/index.html index 7ce8bd0..f87461d 100644 --- a/index.html +++ b/index.html @@ -174,6 +174,26 @@ box-shadow: 0 4px 15px rgba(0, 0, 0, 0.3); cursor: pointer; border: none; + position: relative; + overflow: hidden; + } + + .pix-button::before { + content: ''; + position: absolute; + top: 50%; + left: 50%; + width: 0; + height: 0; + border-radius: 50%; + background: rgba(255, 255, 255, 0.3); + transform: translate(-50%, -50%); + transition: width 0.6s, height 0.6s; + } + + .pix-button:hover::before { + width: 300px; + height: 300px; } .pix-button:hover { @@ -182,6 +202,10 @@ background: linear-gradient(135deg, #00A86B, #32BCAD); } + .pix-button:active { + transform: translateY(-1px) scale(0.98); + } + /* Modal PIX */ .modal { display: none; @@ -190,14 +214,25 @@ left: 0; width: 100%; height: 100%; - background: rgba(0, 0, 0, 0.8); + background: rgba(0, 0, 0, 0); z-index: 1000; justify-content: center; align-items: center; + transition: background 0.3s ease; } .modal.active { display: flex; + animation: fadeIn 0.3s ease forwards; + } + + @keyframes fadeIn { + from { + background: rgba(0, 0, 0, 0); + } + to { + background: rgba(0, 0, 0, 0.8); + } } .modal-content { @@ -207,6 +242,43 @@ max-width: 400px; width: 90%; box-shadow: 0 10px 40px rgba(0, 0, 0, 0.5); + transform: translateY(30px) scale(0.9); + opacity: 0; + } + + .modal.active .modal-content { + animation: slideUpScale 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) forwards; + } + + @keyframes slideUpScale { + 0% { + transform: translateY(30px) scale(0.9); + opacity: 0; + } + 100% { + transform: translateY(0) scale(1); + opacity: 1; + } + } + + @keyframes fadeOut { + from { + background: rgba(0, 0, 0, 0.8); + } + to { + background: rgba(0, 0, 0, 0); + } + } + + @keyframes slideDownScale { + 0% { + transform: translateY(0) scale(1); + opacity: 1; + } + 100% { + transform: translateY(30px) scale(0.9); + opacity: 0; + } } .modal-header { @@ -224,6 +296,14 @@ border-radius: 10px; margin-bottom: 20px; text-align: center; + transition: all 0.3s ease; + outline: none; + } + + .modal-input:focus { + border-color: #32BCAD; + box-shadow: 0 0 0 3px rgba(50, 188, 173, 0.2); + transform: scale(1.02); } .modal-buttons { @@ -240,6 +320,26 @@ font-weight: bold; cursor: pointer; transition: all 0.3s ease; + position: relative; + overflow: hidden; + } + + .modal-button::after { + content: ''; + position: absolute; + top: 50%; + left: 50%; + width: 0; + height: 0; + border-radius: 50%; + background: rgba(255, 255, 255, 0.4); + transform: translate(-50%, -50%); + transition: width 0.5s, height 0.5s; + } + + .modal-button:hover::after { + width: 300px; + height: 300px; } .modal-button.generate { @@ -257,6 +357,10 @@ box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2); } + .modal-button:active { + transform: translateY(0) scale(0.98); + } + .pix-code-area { display: none; margin-top: 20px; @@ -267,10 +371,24 @@ font-family: monospace; font-size: 0.9em; color: #333; + transform: translateY(-10px); + opacity: 0; } .pix-code-area.active { display: block; + animation: slideInFade 0.4s ease forwards; + } + + @keyframes slideInFade { + from { + transform: translateY(-10px); + opacity: 0; + } + to { + transform: translateY(0); + opacity: 1; + } } .copy-notification { @@ -278,10 +396,24 @@ color: #00A86B; font-weight: bold; display: none; + transform: scale(0.8); + opacity: 0; } .copy-notification.active { display: block; + animation: popIn 0.3s cubic-bezier(0.34, 1.56, 0.64, 1) forwards; + } + + @keyframes popIn { + from { + transform: scale(0.8); + opacity: 0; + } + to { + transform: scale(1); + opacity: 1; + } } /* Ícones pequenos */ @@ -463,15 +595,29 @@