Register the icons packs in platform_connect, add fit_icon_assets() with local fallback, and add a sysadmin 'Pacotes de icones' link to platform?tool=icons.
74 lines
3.9 KiB
PHP
74 lines
3.9 KiB
PHP
<?php
|
|
// Anonymous-safe shell for the auth pages (login / register / forgot / reset /
|
|
// setup). Deliberately NOT includes/header.php: that one renders the whole
|
|
// backoffice chrome — sidebar, topbar, logout button — and calls current_user(),
|
|
// none of which makes sense for a visitor who isn't signed in yet.
|
|
//
|
|
// Pair with includes/auth_footer.php. Optional $page_title sets the <title>.
|
|
$page_title = $page_title ?? 'Entrar';
|
|
$app_name = defined('APP_NAME') ? APP_NAME : 'FitMe 3070';
|
|
?><!doctype html>
|
|
<html lang="pt-PT">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<meta name="robots" content="noindex, nofollow">
|
|
<title><?= htmlspecialchars($page_title) ?> — <?= htmlspecialchars($app_name) ?></title>
|
|
<meta name="color-scheme" content="light dark">
|
|
<meta name="theme-color" content="#eef0f4" media="(prefers-color-scheme: light)">
|
|
<meta name="theme-color" content="#0a0a0a" media="(prefers-color-scheme: dark)">
|
|
<script>
|
|
// Tema antes do CSS, para não piscar o tema errado. Escolha guardada no
|
|
// navegador (claro / escuro / auto); auto segue o sistema operativo.
|
|
(function () {
|
|
var pref = 'auto';
|
|
try { pref = localStorage.getItem('bo-theme') || 'auto'; } catch (e) {}
|
|
var dark = pref === 'dark' || (pref === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches);
|
|
document.documentElement.setAttribute('data-bs-theme', dark ? 'dark' : 'light');
|
|
document.documentElement.setAttribute('data-theme-pref', pref);
|
|
})();
|
|
</script>
|
|
<link href="<?= base_url('assets/vendor/bootstrap5/css/bootstrap.min.css') ?>" rel="stylesheet">
|
|
<link href="<?= htmlspecialchars(_asset_versioned('assets/css/bs-brand.css'), ENT_QUOTES) ?>" rel="stylesheet">
|
|
<?= fit_icon_assets(['bootstrap-icons'], ['assets/vendor/bootstrap-icons/bootstrap-icons.css']) ?>
|
|
<style>
|
|
:root {
|
|
--bo-accent: #C2D500;
|
|
--bo-accent-rgb: 194,213,0;
|
|
--bo-dark: #0a0a0a;
|
|
}
|
|
body {
|
|
min-height: 100vh; margin: 0;
|
|
display: flex; align-items: center; justify-content: center;
|
|
padding: 2rem 1rem;
|
|
background: var(--bo-dark);
|
|
background-image: radial-gradient(circle at 50% 0%, rgba(var(--bo-accent-rgb), .16), transparent 60%);
|
|
font-size: .925rem; color: #f5f5f5;
|
|
}
|
|
.auth-card {
|
|
width: 100%; max-width: 420px;
|
|
background: var(--bs-body-bg); color: var(--bs-body-color);
|
|
border-radius: 14px; padding: 2rem;
|
|
box-shadow: 0 18px 50px rgba(0,0,0,.45);
|
|
}
|
|
.auth-brand {
|
|
text-align: center; font-weight: 700; font-size: 1.25rem;
|
|
letter-spacing: .5px; margin-bottom: .25rem;
|
|
}
|
|
.auth-brand i { color: var(--bo-accent); }
|
|
.auth-sub { text-align: center; color: var(--bs-secondary-color); font-size: .875rem; margin-bottom: 1.5rem; }
|
|
.btn-primary { background: var(--bo-accent); border-color: var(--bo-accent); color: var(--bo-dark); font-weight: 600; }
|
|
.btn-primary:hover, .btn-primary:focus { background: #a8ba00; border-color: #a8ba00; color: var(--bo-dark); }
|
|
.form-control:focus { border-color: var(--bo-accent); box-shadow: 0 0 0 .2rem rgba(var(--bo-accent-rgb), .25); }
|
|
.auth-foot { color: var(--bs-secondary-color); }
|
|
.auth-foot a, .auth-card a { color: #6a7a00; }
|
|
[data-bs-theme="dark"] .auth-foot a, [data-bs-theme="dark"] .auth-card a { color: var(--bo-accent); }
|
|
/* 16px inputs stop iOS from auto-zooming on focus */
|
|
@media (max-width: 575.98px) { .form-control { font-size: 16px; } .auth-card { padding: 1.5rem; } }
|
|
</style>
|
|
<?php include __DIR__ . '/env_ribbon.php'; // moldura de aviso fora de produção ?>
|
|
</head>
|
|
<body>
|
|
<main class="auth-card">
|
|
<div class="auth-brand"><i class="bi bi-lightning-charge-fill me-1"></i><?= htmlspecialchars($app_name) ?></div>
|