<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-patible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Encurtador Oficial da Bravulink!">
<link rel="icon" href="/frontend/assets/img/favicon.ico">
<title>Bravulink URL</title>
<link rel="stylesheet" href="/frontend/dist/styles.css">
<style>
body {
background-color: #007bff;
}
</style>
<style>
.btn-primary {
background-color: #007bff;
border-color: #007bff;
}
.btn-primary:hover,
.btn-primary:focus,
.btn-primary:active {
background-color: #006cf0;
border-color: #006cf0;
}
</style>
</head>
<body>
<div class="container-fluid h-100">
<div class="row justify-content-center align-items-center h-100">
<div class="col-12 col-lg-10 col-xl-8 col-xxl-5 mt-5">
<div class="card border-0 mt-5">
<!-- Login form for unauthenticated users -->
<div class="text-center">
<img src="https://bravu.link/frontend/assets/img/logo-black.png" alt="Logo" width="95px" class="mt-n5">
</div>
<div class="card-body px-md-5">
<h2 class="text-uppercase text-center mb-4">Login Necessário</h2>
<p class="text-center mb-4">Por favor, faça login.</p>
<form method="post" action="">
<div class="mb-3">
<label for="username" class="form-label">Username</label>
<input type="text" id="username" name="username" class="form-control" autocomplete="username" required>
</div>
<div class="mb-3">
<label for="password" class="form-label">Password</label>
<input type="password" id="password" name="password" class="form-control" autocomplete="current-password" required>
</div>
<div class="d-grid">
<input type="hidden" id="nonce" name="nonce" value="21424234a9" /> <button type="submit" class="btn btn-primary text-uppercase">Login</button>
</div>
</form>
<div class="text-center mt-3">
<a href="https://bravu.link/admin/" class="text-decoration-none"Admin Area</a>
</div>
</div>
</div>
<div class="d-flex flex-column flex-md-row align-items-center my-3">
<span class="text-white fw-light" style="text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.7);">© 2026 Bravulink</span>
<div class="ms-3">
<a class="bold-link me-3 text-white text-decoration-none" href="https://bravulink.pt" style="text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.7);"><span>Alojamento Web</span></a>
<a class="bold-link me-3 text-white text-decoration-none" href="https://bravulink.pt" style="text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.7);"><span>Cloud VPS</span></a>
</div>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>
<script>
// From https://stackoverflow.com/a/30810322
function fallbackCopyTextToClipboard(text) {
var textArea = document.createElement("textarea");
textArea.value = text;
// Avoid scrolling to bottom
textArea.style.top = "0";
textArea.style.left = "0";
textArea.style.position = "fixed";
document.body.appendChild(textArea);
textArea.focus();
textArea.select();
try {
var successful = document.execCommand('copy');
var msg = successful ? 'successful' : 'unsuccessful';
console.log('Fallback: Copying text command was ' + msg);
} catch (err) {
console.error('Fallback: Oops, unable to copy', err);
}
document.body.removeChild(textArea);
}
function copyTextToClipboard(text) {
if (!navigator.clipboard) {
fallbackCopyTextToClipboard(text);
return;
}
navigator.clipboard.writeText(text).then(function() {
console.log('Async: Copying to clipboard was successful!');
}, function(err) {
console.error('Async: Could not copy text: ', err);
});
}
const copyBtn = document.querySelector('button#copy-button');
if (copyBtn) {
copyBtn.addEventListener('click', function(event) {
copyTextToClipboard(event.target.dataset.shorturl);
});
}
const closeShortenedLinkScreenButton = document.querySelector('button#close-shortened-screen');
if (closeShortenedLinkScreenButton) {
closeShortenedLinkScreenButton.addEventListener('click', function(event) {
window.location.href=window.location.href;
});
}
</script>
</body>
</html>