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;
+ }
+}