1 2<!DOCTYPE html> 3<html lang="pt-br"> 4<head> 5 <meta charset="utf-8" /> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 7 <link rel="preconnect" href="https://fonts.googleapis.com"> 8 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 9 <link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@300;400;500;600;700;800&display=swap" rel="stylesheet"> 10 <title>Sino.Sistema - Login</title> 11 12 <link rel="preconnect" href="https://fonts.googleapis.com"> 13<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 14<link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@300;400;500;600;700;800&display=swap" rel="stylesheet"> 15<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha256-2FMn2Zx6PuH5tdBQDRNwrOo60ts5wWPC9R8jK67b3t4=" crossorigin="anonymous"> 16<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/[email protected]/css/all.min.css" integrity="sha256-MVopmdyC2tYTiJ8wlktf0uh0v4NgT+vNdyVFepi7Q0c=" crossorigin="anonymous"> 17<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/select2.min.css" integrity="sha256-zaSoHBhwFdle0scfGEFUCwggPN7F+ip9XRglo8IWb4w=" crossorigin="anonymous"> 18<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/select2-bootstrap-5-theme.min.css" integrity="sha256-XLNUEfzPGHBeStES2DbLUURZ3e793BablwzJlYj6W2Q=" crossorigin="anonymous"> 19<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@eonasdan/[email protected]/dist/css/tempus-dominus.min.css" integrity="sha256-CnrhpfYrXdEi7tt7MaXkXnjHOtTw2WUF/ZtHsRYTd9o=" crossorigin="anonymous"> 20 21 <link rel="stylesheet" href="/Sistema/css/login.css?v=lsmYBwzchuc4fb2eD5Q7BK54jMu6Odt0l1ms5FrNLN0" /> 22
22<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js" integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" crossorigin="anonymous"></script>
vendor: 2 bytes, line 22
22
23<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.validate.min.js" integrity="sha256-1IuP7k/g+d98/r5+D1I2X2w+xhBVJJ+shT7D1kXXiYs=" crossorigin="anonymous"></script>
vendor: 2 bytes, line 23
23
24<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.validate.unobtrusive.min.js" integrity="sha256-RFWFWIIPsjB4DucR4jqwxTWw13ZmtI+s6tVR2LJmZXk=" crossorigin="anonymous"></script>
vendor: 2 bytes, line 24
24
25<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.js" integrity="sha256-aVZjRM9XIr5RrLyQ/bJsJOsBzBwVP3OLFrL6h8zTtRA=" crossorigin="anonymous"></script>
vendor: 2 bytes, line 25
25
26<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/select2.min.js" integrity="sha256-9yRP/2EFlblE92vzCA10469Ctd0jT48HnmmMw5rJZrA=" crossorigin="anonymous"></script>
vendor: 2 bytes, line 26
26
27<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/i18n/pt-BR.js" integrity="sha256-T3di9eT0sWzn9Lwps0x4A8zcJj3oviBEW35PTXjk/JQ=" crossorigin="anonymous"></script>
vendor: 2 bytes, line 27
27
28<script src="https://cdn.jsdelivr.net/npm/[email protected]/moment.js" integrity="sha256-fcClHDLa4UPy6t4jUUXf1qd1Y4jA8L9An6Nz3WwjNik=" crossorigin="anonymous"></script>
vendor: 2 bytes, line 28
28
29<script src="https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/umd/popper.min.js" integrity="sha256-whL0tQWoY1Ku1iskqPFvmZ+CHsvmRWx/PIoEvIeWh4I=" crossorigin="anonymous"></script>
vendor: 2 bytes, line 29
29
30<script src="https://cdn.jsdelivr.net/npm/@eonasdan/[email protected]/dist/js/tempus-dominus.min.js" integrity="sha256-+cy8d0TTJWbhNA4t2Sm/memoDXO2+3cK2YU3pfuBFrs=" crossorigin="anonymous"></script>
vendor: 2 bytes, line 30
30
31<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/imask.min.js" integrity="sha256-f817BCjkRsuPwQqazeY4OKKvWhz14dkFluMmQx5IlhA=" crossorigin="anonymous"></script>
31 32 33 34</head> 35<body> 36 <div class="aurora-bg" aria-hidden="true"> 37 <div class="aurora-blob aurora-blob-1"></div> 38 <div class="aurora-blob aurora-blob-2"></div> 39 <div class="aurora-blob aurora-blob-3"></div> 40 <div class="aurora-blob aurora-blob-4"></div> 41 </div> 42 43 <div class="particles-container"> 44 <div class="particle" style="width: 100px; height: 100px; left: 10%; bottom: -100px; animation-duration: 25s;"></div> 45 <div class="particle" style="width: 150px; height: 150px; left: 30%; bottom: -150px; animation-duration: 35s; animation-delay: 1s;"></div> 46 <div class="particle" style="width: 80px; height: 80px; left: 70%; bottom: -80px; animation-duration: 30s; animation-delay: 2.5s;"></div> 47 <div class="particle" style="width: 120px; height: 120px; left: 85%; bottom: -120px; animation-duration: 40s; animation-delay: 4s;"></div> 48 <div class="particle" style="width: 60px; height: 60px; left: 50%; bottom: -60px; animation-duration: 22s; animation-delay: 6s;"></div> 49 </div> 50 51 <div class="login-page-wrapper"> 52 <div class="login-visual-section"> 53 <div class="circular-container"> 54 <div class="center-glow"></div> 55 <div class="connector-container"> 56 <div class="line" style="transform: rotate(-90deg)"></div> 57 <div class="line" style="transform: rotate(-45deg)"></div> 58 <div class="line" style="transform: rotate(0deg)"></div> 59 <div class="line" style="transform: rotate(45deg)"></div> 60 <div class="line" style="transform: rotate(90deg)"></div> 61 <div class="line" style="transform: rotate(135deg)"></div> 62 <div class="line" style="transform: rotate(180deg)"></div> 63 <div class="line" style="transform: rotate(225deg)"></div> 64 </div> 65 66 <div class="icon-card center-icon"> 67 <img src="/Sistema/images/login/shield.png" alt="Segurança" /> 68 </div> 69 70 <div class="icon-card pos-1" title="Equipe"> 71 <img src="/Sistema/images/login/people.png" alt="Equipe" /> 72 </div> 73 <div class="icon-card pos-2" title="Processos"> 74 <img src="/Sistema/images/login/fluxogram.png" alt="Processos" /> 75 </div> 76 <div class="icon-card pos-3" title="Análise"> 77 <img src="/Sistema/images/login/glass.png" alt="Análise" /> 78 </div> 79 <div class="icon-card pos-4" title="Gráficos"> 80 <img src="/Sistema/images/login/graphics.png" alt="Gráficos" /> 81 </div> 82 <div class="icon-card pos-5" title="Institucional"> 83 <img src="/Sistema/images/login/cousin.png" alt="Institucional" /> 84 </div> 85 <div class="icon-card pos-6" title="Usuários"> 86 <img src="/Sistema/images/login/users.png" alt="Usuários" /> 87 </div> 88 <div class="icon-card pos-7" title="Busca"> 89 <img src="/Sistema/images/login/search.png" alt="Busca" /> 90 </div> 91 <div class="icon-card pos-8" title="Arquivos"> 92 <img src="/Sistema/images/login/files.png" alt="Arquivos" /> 93 </div> 94 </div> 95 </div> 96 97 <div class="login-container"> 98 <div class="login-card-modern"> 99 <div class="text-center mb-5"> 100 <div class="login-welcome-text"> 101 <div class="brand-mark" aria-hidden="true"> 102 <img src="/Sistema/images/brasao.png" alt="" /> 103 </div> 104 <p>Bem-vindo ao Sino.Sistema</p> 105 </div> 106 </div> 107 108 109 110 <form method="post"> 111 <div class="mb-4"> 112 <div class="input-group-modern"> 113 <i class="fa fa-envelope input-icon"></i> 114 <input class="form-control" autocomplete="username" aria-required="true" placeholder=" " required type="text" data-val="true" data-val-required="O campo 'Login ou E-mail' é obrigatório." id="Input_LoginEmail" name="Input.LoginEmail" value="" /> 115 <label class="floating-label" for="Input_LoginEmail">Login ou E-mail</label> 116 </div>
117 <span class="text-danger small field-validation-valid" data-valmsg-for="Input.LoginEmail" data-valmsg-replace="true"></span> 118 </div> 119 120 <div class="mb-3"> 121 <div class="input-group-modern"> 122 <i class="fa fa-lock input-icon"></i> 123 <input class="form-control" id="input-password" autocomplete="current-password" aria-required="true" placeholder=" " required type="password" data-val="true" data-val-required="O campo 'Senha' é obrigatório." name="Input.Password" /> 124 <label class="floating-label" for="Input_Password">Senha</label> 125 <button type="button" id="toggle-password" title="Mostrar/Ocultar senha" tabindex="-1"> 126 <i class="fa fa-eye" aria-hidden="true"></i> 127 </button> 128 </div> 129 <div class="d-flex justify-content-between align-items-start mt-1 px-1"> 130 <span class="text-danger field-validation-valid" data-valmsg-for="Input.Password" data-valmsg-replace="true"></span> 131 <a class="forgot-password-link ms-auto" style="margin-top: 0.35rem;" href="/Admin/ForgotPassword">Esqueceu a senha?</a> 132 </div> 133 </div> 134 135 <div class="mb-2 d-flex align-items-center"> 136 <div class="form-check"> 137 <input class="form-check-input" id="remember-me" type="checkbox" data-val="true" data-val-required="The Lembrar-me? field is required." name="Input.RememberMe" value="true" /> 138 <label class="form-check-label small text-secondary" for="remember-me"> 139 Mantenha-me conectado 140 </label> 141 </div> 142 </div> 143 144 <div class="recaptcha-wrapper"> 145 <div class="g-recaptcha" data-sitekey="6Lc2h3IqAAAAAHOcTJVNRVIB4I70gecaQfZ9wNkx" data-callback="recaptchaValidated"></div> 146<div class="text-danger" id="gRecaptchaResponse"></div>
vendor: 83 bytes, lines 146-148
146 147 148<script src="https://www.google.com/recaptcha/api.js" async="" defer=""></script>
148<script>var recaptchaValidated=function(e){var r=$('#gRecaptchaResponse');r.length&&r.hide()};$.validator.setDefaults({submitHandler:function(){var e=this,r=''!==grecaptcha.getResponse(),a='Valide que você não é um robô.',t=$('#gRecaptchaResponse', e.currentForm);if(t.length===0)return !0;return a&&(r?t.length&&t.hide():(e.errorList.push({message:a}),$(e.currentForm).triggerHandler('invalid-form',[e]),t.length&&(t.html(a),t.show()))),r}});</script>
148 149 150 </div> 151 152 <p class="recaptcha-disclaimer"> 153 Este site é protegido pelo reCAPTCHA e a 154 <a href="https://policies.google.com/privacy" target="_blank">PolÃtica de Privacidade</a> e os 155 <a href="https://policies.google.com/terms" target="_blank">Termos de Serviço</a> do Google se aplicam. 156 </p> 157 158 <div class="d-grid gap-2"> 159 <div class="d-flex justify-content-center"> 160 <button type="submit" class="btn btn-premium w-100" id="login-submit"> 161 <span class="btn-text">Entrar na conta <i class="fa fa-arrow-right ms-2"></i></span> 162 <span class="btn-spinner" aria-hidden="true"></span> 163 </button> 164 </div> 165 166 <a class="btn btn-outline-premium" href="/Admin/ChangePassword"> 167 Alterar minha senha 168 </a> 169 </div> 170 <input name="__RequestVerificationToken" type="hidden" value="CfDJ8M-GdmdBCbdKoIjRxaVAgJBMkYffrtwEuI4athiBRYq9_nlEvO5wyfsocVXtL4am7nOPEHjLuMp883xri8HneByLyU9jYaNuwSkA4Ce9SV9BHMSQC2SF1UFF8zTwDhchoWbhLN0EEPxGSKNxWhOgoZU" /><input name="Input.RememberMe" type="hidden" value="false" /></form> 171 172 <div class="external-logins-title"> 173 <span>ou continue com</span> 174 </div> 175 <div class="external-logins-container"> 176 <form method="post" title="Entrar com Google" action="/Admin/ExternalLogin?returnUrl=%2FAdmin"> 177 <button type="submit" class="btn btn-external-icon" name="provider" value="Google"> 178 <i class="fa-brands fa-google btn-google"></i> 179 </button> 180 <input name="__RequestVerificationToken" type="hidden" value="CfDJ8M-GdmdBCbdKoIjRxaVAgJBMkYffrtwEuI4athiBRYq9_nlEvO5wyfsocVXtL4am7nOPEHjLuMp883xri8HneByLyU9jYaNuwSkA4Ce9SV9BHMSQC2SF1UFF8zTwDhchoWbhLN0EEPxGSKNxWhOgoZU" /></form> 181 <form method="post" title="Entrar com Facebook" action="/Admin/ExternalLogin?returnUrl=%2FAdmin"> 182 <button type="submit" class="btn btn-external-icon" name="provider" value="Facebook"> 183 <i class="fa-brands fa-facebook btn-facebook"></i> 184 </button> 185 <input name="__RequestVerificationToken" type="hidden" value="CfDJ8M-GdmdBCbdKoIjRxaVAgJBMkYffrtwEuI4athiBRYq9_nlEvO5wyfsocVXtL4am7nOPEHjLuMp883xri8HneByLyU9jYaNuwSkA4Ce9SV9BHMSQC2SF1UFF8zTwDhchoWbhLN0EEPxGSKNxWhOgoZU" /></form> 186 <form method="post" title="Entrar com Twitter" action="/Admin/ExternalLogin?returnUrl=%2FAdmin"> 187 <button type="submit" class="btn btn-external-icon" name="provider" value="Twitter"> 188 <i class="fa-brands fa-twitter btn-twitter"></i> 189 </button> 190 <input name="__RequestVerificationToken" type="hidden" value="CfDJ8M-GdmdBCbdKoIjRxaVAgJBMkYffrtwEuI4athiBRYq9_nlEvO5wyfsocVXtL4am7nOPEHjLuMp883xri8HneByLyU9jYaNuwSkA4Ce9SV9BHMSQC2SF1UFF8zTwDhchoWbhLN0EEPxGSKNxWhOgoZU" /></form> 191 <form method="post" title="Entrar com Microsoft" action="/Admin/ExternalLogin?returnUrl=%2FAdmin"> 192 <button type="submit" class="btn btn-external-icon" name="provider" value="Microsoft"> 193 <i class="fa-brands fa-microsoft btn-microsoft"></i> 194 </button> 195 <input name="__RequestVerificationToken" type="hidden" value="CfDJ8M-GdmdBCbdKoIjRxaVAgJBMkYffrtwEuI4athiBRYq9_nlEvO5wyfsocVXtL4am7nOPEHjLuMp883xri8HneByLyU9jYaNuwSkA4Ce9SV9BHMSQC2SF1UFF8zTwDhchoWbhLN0EEPxGSKNxWhOgoZU" /></form> 196 <form method="post" title="Entrar c
196om GOV.BR" action="/Admin/ExternalLogin?returnUrl=%2FAdmin"> 197 <button type="submit" class="btn btn-external-icon" name="provider" value="GovBr"> 198 <span>gov</span> 199 </button> 200 <input name="__RequestVerificationToken" type="hidden" value="CfDJ8M-GdmdBCbdKoIjRxaVAgJBMkYffrtwEuI4athiBRYq9_nlEvO5wyfsocVXtL4am7nOPEHjLuMp883xri8HneByLyU9jYaNuwSkA4Ce9SV9BHMSQC2SF1UFF8zTwDhchoWbhLN0EEPxGSKNxWhOgoZU" /></form> 201 202 <div class="d-none" id="cert-panel"> 203 <form id="external-cert" method="post" title="Certificado Digital" action="/Admin/ExternalLogin?handler=CertLogin&returnUrl=%2FAdmin"> 204 <input type="hidden" id="external-cert-base64" name="base64" /> 205 <button type="submit" id="external-cert-button" class="btn btn-external-icon btn-cert"> 206 <i class="fa-solid fa-certificate"></i> 207 </button> 208 <input name="__RequestVerificationToken" type="hidden" value="CfDJ8M-GdmdBCbdKoIjRxaVAgJBMkYffrtwEuI4athiBRYq9_nlEvO5wyfsocVXtL4am7nOPEHjLuMp883xri8HneByLyU9jYaNuwSkA4Ce9SV9BHMSQC2SF1UFF8zTwDhchoWbhLN0EEPxGSKNxWhOgoZU" /></form> 209 </div> 210 </div> 211 </div> 212 </div> 213 </div> 214 215
215<script> 216 (function () { 217 const toggle = document.getElementById('toggle-password'); 218 const input = document.getElementById('input-password'); 219 if (toggle && input) { 220 toggle.addEventListener('click', function () { 221 const isPassword = input.type === 'password'; 222 input.type = isPassword ? 'text' : 'password'; 223 this.querySelector('i').className = isPassword ? 'fa fa-eye-slash' : 'fa fa-eye'; 224 }); 225 } 226 227 // Spotlight: gradiente que segue o cursor sobre o card 228 const card = document.querySelector('.login-card-modern'); 229 if (card) { 230 card.addEventListener('mousemove', (e) => { 231 const rect = card.getBoundingClientRect(); 232 card.style.setProperty('--mouse-x', (e.clientX - rect.left) + 'px'); 233 card.style.setProperty('--mouse-y', (e.clientY - rect.top) + 'px'); 234 }); 235 } 236 237 // Loading state + ripple no botão Entrar 238 const submitBtn = document.getElementById('login-submit'); 239 if (submitBtn) { 240 submitBtn.addEventListener('click', function (e) { 241 const rect = this.getBoundingClientRect(); 242 const size = Math.max(rect.width, rect.height); 243 const ripple = document.createElement('span'); 244 ripple.className = 'btn-ripple'; 245 ripple.style.width = ripple.style.height = size + 'px'; 246 ripple.style.left = (e.clientX - rect.left - size / 2) + 'px'; 247 ripple.style.top = (e.clientY - rect.top - size / 2) + 'px'; 248 this.appendChild(ripple); 249 setTimeout(() => ripple.remove(), 650); 250 }); 251 252 const form = submitBtn.closest('form'); 253 if (form) { 254 form.addEventListener('submit', function (e) { 255 // 1. Verifica validade nativa (HTML5) 256 if (!form.checkValidity()) { 257 return; 258 } 259 260 // 2. Verifica validade do jQuery (se carregado) 261 if (window.jQuery && window.jQuery.fn.valid && !window.jQuery(form).valid()) { 262 return; 263 } 264 265 // A execução do recaptcha invisible fica por conta do componente 266 // Recaptcha (submitHandler do jquery-validate); aqui só cuidamos do loading 267 submitBtn.classList.remove('w-100'); 268 submitBtn.classList.add('is-loading'); 269 270 // Se o envio não acontecer (desafio cancelado/erro), desbloqueia o botão 271 setTimeout(() => { 272 submitBtn.classList.add('w-100'); 273 submitBtn.classList.remove('is-loading'); 274 }, 15000); 275 }); 276 } 277 } 278 279 // Connection Lines Interaction 280 const icons = document.querySelectorAll('.icon-card:not(.center-icon)'); 281 const lines = document.querySelectorAll('.connector-container .line'); 282 const centerIconNode = document.querySelector('.center-icon'); 283 284 icons.forEach((icon, index) => { 285 icon.addEventListener('mouseenter', () => { 286 if(lines[index]) lines[index].classList.add('active-connection'); 287 if(centerIconNode) centerIconNode.classList.add('active-pulse'); 288 }); 289 icon.addEventListener('mouseleave', () => { 290 if(lines[index]) lines[index].classList.remove('active-connection'); 291 if(centerIconNode) centerIconNode.classList.remove('active-pulse'); 292 }); 293 }); 294 295 // Interop for certificate login 296 document.addEventListener('interop:on', e => { 297 const certPanel = document.querySelector('#cert-panel'); 298 if (certPanel) { 299 certPanel.classList.remove('d-none'); 300 const certButton = document.querySelector('#external-cert-button'); 301 certButton.addEventListener('click', function(e) { 302 e.preventDefault(); 303 interop('Signer/Certificate') 304 .then((response) => response.json()) 305 .then(data => { 306 document.querySelector('#external-cert-base64').value = data.RawData; 307 document.querySelector('#external-cert').submit(); 308 }); 309 }); 310 } 311 }); 312 })(); 313 </script>
313 314 315
315<script> 316 function interop(url, options) { 317 return fetch('https://localhost:1989/' + url, Object.assign({ mode: 'cors' }, options || {})); 318 } 319 320 document.addEventListener("DOMContentLoaded", () => { 321 interop('', { method: 'GET' }).then(tb => tb.json()).catch(() => false).then(result => { 322 if (result) { 323 const event = new CustomEvent("interop:on", { detail: result }); 324 document.dispatchEvent(event); 325 } 326 }); 327 }); 328</script>
328 329</body> 330</html> 331
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.