commit 00641544b59532add2c15157fd91a89f69e0e700
Author: root <root@hub.scroll.pub> Date: 2025-01-08 04:50:37 +0000 Subject: Initial commit diff --git a/body.html b/body.html new file mode 100644 index 0000000..7ae63e0 --- /dev/null +++ b/body.html @@ -0,0 +1,36 @@ +<main class="container"> + <div class="login-box"> + <div class="login-header"> + <div class="icon-container"> + <svg class="icon" viewBox="0 0 24 24"> + <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 3c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm0 14.2c-2.5 0-4.71-1.28-6-3.22.03-1.99 4-3.08 6-3.08 1.99 0 5.97 1.09 6 3.08-1.29 1.94-3.5 3.22-6 3.22z"/> + </svg> + </div> + <h1>Welcome Back</h1> + </div> + <form id="loginForm"> + <div class="input-group"> + <input type="email" id="email" required> + <label for="email">Email</label> + <div class="input-icon"> + <svg viewBox="0 0 24 24"> + <path d="M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"/> + </svg> + </div> + </div> + <div class="input-group"> + <input type="password" id="password" required> + <label for="password">Password</label> + <div class="input-icon"> + <svg viewBox="0 0 24 24"> + <path d="M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z"/> + </svg> + </div> + </div> + <button type="submit" class="login-btn"> + <span>Login</span> + <div class="ripple"></div> + </button> + </form> + </div> +</main> diff --git a/index.scroll b/index.scroll new file mode 100644 index 0000000..bc541cc --- /dev/null +++ b/index.scroll @@ -0,0 +1,8 @@ +buildHtml +baseUrl https://modernlogin.scroll.pub +metaTags +editButton /edit.html +title Modern Login Experience +style.css +body.html +script.js diff --git a/prompt.json b/prompt.json new file mode 100644 index 0000000..791780d --- /dev/null +++ b/prompt.json @@ -0,0 +1,20 @@ +{ + "id": "msg_01Vytib1jjeTUbz5NfwtAmgV", + "type": "message", + "role": "assistant", + "model": "claude-3-5-sonnet-20241022", + "content": [ + { + "type": "text", + "text": "I'll create a modern login system with effects and icons. For the domain, I suggest:\n\n---domain---\nmodernlogin.scroll.pub\n\n---index.scroll---\nbuildHtml\nbaseUrl https://modernlogin.scroll.pub\nmetaTags\neditButton /edit.html\ntitle Modern Login Experience\nstyle.css\nbody.html\nscript.js\n\n---body.html---\n<main class=\"container\">\n <div class=\"login-box\">\n <div class=\"login-header\">\n <div class=\"icon-container\">\n <svg class=\"icon\" viewBox=\"0 0 24 24\">\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 3c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm0 14.2c-2.5 0-4.71-1.28-6-3.22.03-1.99 4-3.08 6-3.08 1.99 0 5.97 1.09 6 3.08-1.29 1.94-3.5 3.22-6 3.22z\"/>\n </svg>\n </div>\n <h1>Welcome Back</h1>\n </div>\n <form id=\"loginForm\">\n <div class=\"input-group\">\n <input type=\"email\" id=\"email\" required>\n <label for=\"email\">Email</label>\n <div class=\"input-icon\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z\"/>\n </svg>\n </div>\n </div>\n <div class=\"input-group\">\n <input type=\"password\" id=\"password\" required>\n <label for=\"password\">Password</label>\n <div class=\"input-icon\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z\"/>\n </svg>\n </div>\n </div>\n <button type=\"submit\" class=\"login-btn\">\n <span>Login</span>\n <div class=\"ripple\"></div>\n </button>\n </form>\n </div>\n</main>\n\n---style.css---\n:root {\n --primary: #6c63ff;\n --secondary: #f5f5f5;\n --text: #333;\n --transition: 0.3s ease;\n}\n\n* {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n}\n\nbody {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n min-height: 100vh;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.container {\n width: 100%;\n padding: 20px;\n}\n\n.login-box {\n background: rgba(255, 255, 255, 0.9);\n backdrop-filter: blur(10px);\n border-radius: 20px;\n padding: 40px;\n max-width: 400px;\n margin: 0 auto;\n box-shadow: 0 15px 35px rgba(0, 0, 0, 0.2);\n transform: translateY(0);\n transition: transform var(--transition);\n}\n\n.login-box:hover {\n transform: translateY(-5px);\n}\n\n.login-header {\n text-align: center;\n margin-bottom: 40px;\n}\n\n.icon-container {\n background: var(--primary);\n width: 80px;\n height: 80px;\n border-radius: 50%;\n margin: 0 auto 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.icon {\n width: 40px;\n height: 40px;\n fill: white;\n}\n\nh1 {\n color: var(--text);\n font-size: 24px;\n font-weight: 600;\n}\n\n.input-group {\n position: relative;\n margin-bottom: 30px;\n}\n\ninput {\n width: 100%;\n padding: 15px;\n padding-right: 45px;\n border: 2px solid #ddd;\n border-radius: 10px;\n font-size: 16px;\n transition: var(--transition);\n}\n\ninput:focus {\n border-color: var(--primary);\n outline: none;\n}\n\nlabel {\n position: absolute;\n left: 15px;\n top: 50%;\n transform: translateY(-50%);\n color: #999;\n pointer-events: none;\n transition: var(--transition);\n}\n\ninput:focus ~ label,\ninput:valid ~ label {\n top: -10px;\n left: 10px;\n font-size: 14px;\n background: white;\n padding: 0 5px;\n color: var(--primary);\n}\n\n.input-icon {\n position: absolute;\n right: 15px;\n top: 50%;\n transform: translateY(-50%);\n width: 20px;\n height: 20px;\n}\n\n.input-icon svg {\n fill: #999;\n transition: var(--transition);\n}\n\ninput:focus ~ .input-icon svg {\n fill: var(--primary);\n}\n\n.login-btn {\n width: 100%;\n padding: 15px;\n background: var(--primary);\n color: white;\n border: none;\n border-radius: 10px;\n font-size: 16px;\n font-weight: 600;\n cursor: pointer;\n position: relative;\n overflow: hidden;\n transition: var(--transition);\n}\n\n.login-btn:hover {\n background: #5651e5;\n}\n\n.ripple {\n position: absolute;\n background: rgba(255, 255, 255, 0.3);\n border-radius: 50%;\n transform: scale(0);\n animation: ripple 0.6s linear;\n pointer-events: none;\n}\n\n@keyframes ripple {\n to {\n transform: scale(4);\n opacity: 0;\n }\n}\n\n@media (max-width: 480px) {\n .login-box {\n padding: 20px;\n }\n \n .icon-container {\n width: 60px;\n height: 60px;\n }\n \n .icon {\n width: 30px;\n height: 30px;\n }\n \n h1 {\n font-size: 20px;\n }\n}\n\n---script.js---\ndocument.addEventListener('DOMContentLoaded', () => {\n const loginForm = document.getElementById('loginForm');\n const loginBtn = document.querySelector('.login-btn');\n\n // Ripple effect\n loginBtn.addEventListener('click', function(e) {\n const ripple = document.createElement('div');\n ripple.classList.add('ripple');\n \n const rect = this.getBoundingClientRect();\n const size = Math.max(rect.width, rect.height);\n \n ripple.style.width = ripple.style.height = `${size}px`;\n ripple.style.left = `${e.clientX - rect.left - size/2}px`;\n ripple.style.top = `${e.clientY - rect.top - size/2}px`;\n \n this.appendChild(ripple);\n \n setTimeout(() => ripple.remove(), 600);\n });\n\n // Form submission\n loginForm.addEventListener('submit', (e) => {\n e.preventDefault();\n \n const email = document.getElementById('email').value;\n const password = document.getElementById('password').value;\n \n // Add your login logic here\n console.log('Login attempt:', { email, password });\n \n // Animate button\n loginBtn.classList.add('loading');\n \n // Simulate API call\n setTimeout(() => {\n loginBtn.classList.remove('loading');\n // Add success/error handling here\n }, 1500);\n });\n\n // Float label animation\n const inputs = document.querySelectorAll('input');\n inputs.forEach(input => {\n input.addEventListener('focus', () => {\n input.parentElement.classList.add('focused');\n });\n \n input.addEventListener('blur', () => {\n if (!input.value) {\n input.parentElement.classList.remove('focused');\n }\n });\n });\n});\n\n---end---\n\nThis creates a beautiful, modern login system with:\n- Smooth animations and transitions\n- Floating labels\n- Ripple effect on button click\n- SVG icons\n- Glassmorphism design\n- Responsive layout\n- Input validation\n- Hover effects\n- Modern gradient background\n- Clean, accessible markup\n- Form handling\n\nThe design is mobile-responsive and follows accessibility best practices. The CSS uses modern features like CSS variables, flexbox, and transforms. The JavaScript includes smooth animations and form handling." + } + ], + "stop_reason": "end_turn", + "stop_sequence": null, + "usage": { + "input_tokens": 286, + "cache_creation_input_tokens": 0, + "cache_read_input_tokens": 0, + "output_tokens": 2675 + } +} \ No newline at end of file diff --git a/readme.scroll b/readme.scroll new file mode 100644 index 0000000..c2e28ae --- /dev/null +++ b/readme.scroll @@ -0,0 +1,3 @@ +# modernlogin.scroll.pub + +website generated by Claude from prompt: um sistema de login super moderno, com efeitos, e icones \ No newline at end of file diff --git a/script.js b/script.js new file mode 100644 index 0000000..65399b4 --- /dev/null +++ b/script.js @@ -0,0 +1,55 @@ +document.addEventListener('DOMContentLoaded', () => { + const loginForm = document.getElementById('loginForm'); + const loginBtn = document.querySelector('.login-btn'); + + // Ripple effect + loginBtn.addEventListener('click', function(e) { + const ripple = document.createElement('div'); + ripple.classList.add('ripple'); + + const rect = this.getBoundingClientRect(); + const size = Math.max(rect.width, rect.height); + + ripple.style.width = ripple.style.height = `${size}px`; + ripple.style.left = `${e.clientX - rect.left - size/2}px`; + ripple.style.top = `${e.clientY - rect.top - size/2}px`; + + this.appendChild(ripple); + + setTimeout(() => ripple.remove(), 600); + }); + + // Form submission + loginForm.addEventListener('submit', (e) => { + e.preventDefault(); + + const email = document.getElementById('email').value; + const password = document.getElementById('password').value; + + // Add your login logic here + console.log('Login attempt:', { email, password }); + + // Animate button + loginBtn.classList.add('loading'); + + // Simulate API call + setTimeout(() => { + loginBtn.classList.remove('loading'); + // Add success/error handling here + }, 1500); + }); + + // Float label animation + const inputs = document.querySelectorAll('input'); + inputs.forEach(input => { + input.addEventListener('focus', () => { + input.parentElement.classList.add('focused'); + }); + + input.addEventListener('blur', () => { + if (!input.value) { + input.parentElement.classList.remove('focused'); + } + }); + }); +}); diff --git a/style.css b/style.css new file mode 100644 index 0000000..afda0ad --- /dev/null +++ b/style.css @@ -0,0 +1,183 @@ +:root { + --primary: #6c63ff; + --secondary: #f5f5f5; + --text: #333; + --transition: 0.3s ease; +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + min-height: 100vh; + display: flex; + align-items: center; + justify-content: center; +} + +.container { + width: 100%; + padding: 20px; +} + +.login-box { + background: rgba(255, 255, 255, 0.9); + backdrop-filter: blur(10px); + border-radius: 20px; + padding: 40px; + max-width: 400px; + margin: 0 auto; + box-shadow: 0 15px 35px rgba(0, 0, 0, 0.2); + transform: translateY(0); + transition: transform var(--transition); +} + +.login-box:hover { + transform: translateY(-5px); +} + +.login-header { + text-align: center; + margin-bottom: 40px; +} + +.icon-container { + background: var(--primary); + width: 80px; + height: 80px; + border-radius: 50%; + margin: 0 auto 20px; + display: flex; + align-items: center; + justify-content: center; +} + +.icon { + width: 40px; + height: 40px; + fill: white; +} + +h1 { + color: var(--text); + font-size: 24px; + font-weight: 600; +} + +.input-group { + position: relative; + margin-bottom: 30px; +} + +input { + width: 100%; + padding: 15px; + padding-right: 45px; + border: 2px solid #ddd; + border-radius: 10px; + font-size: 16px; + transition: var(--transition); +} + +input:focus { + border-color: var(--primary); + outline: none; +} + +label { + position: absolute; + left: 15px; + top: 50%; + transform: translateY(-50%); + color: #999; + pointer-events: none; + transition: var(--transition); +} + +input:focus ~ label, +input:valid ~ label { + top: -10px; + left: 10px; + font-size: 14px; + background: white; + padding: 0 5px; + color: var(--primary); +} + +.input-icon { + position: absolute; + right: 15px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; +} + +.input-icon svg { + fill: #999; + transition: var(--transition); +} + +input:focus ~ .input-icon svg { + fill: var(--primary); +} + +.login-btn { + width: 100%; + padding: 15px; + background: var(--primary); + color: white; + border: none; + border-radius: 10px; + font-size: 16px; + font-weight: 600; + cursor: pointer; + position: relative; + overflow: hidden; + transition: var(--transition); +} + +.login-btn:hover { + background: #5651e5; +} + +.ripple { + position: absolute; + background: rgba(255, 255, 255, 0.3); + border-radius: 50%; + transform: scale(0); + animation: ripple 0.6s linear; + pointer-events: none; +} + +@keyframes ripple { + to { + transform: scale(4); + opacity: 0; + } +} + +@media (max-width: 480px) { + .login-box { + padding: 20px; + } + + .icon-container { + width: 60px; + height: 60px; + } + + .icon { + width: 30px; + height: 30px; + } + + h1 { + font-size: 20px; + } +}