diff --git a/public/css/style.css b/public/css/style.css index 10db8bd..8710fda 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -590,7 +590,7 @@ tr:hover { background: linear-gradient(135deg, var(--card-bg) 0%, #0d2618 100%); } -[data-theme="dark"] a:not(.btn) { +[data-theme="dark"] a:not(.btn):not(.scanner-fab) { color: var(--primary); } @@ -800,3 +800,45 @@ tr:hover { min-height: 36px; } } + +/* ── Floating QR Scanner FAB ──────────────────────────────── */ +.scanner-fab { + position: fixed; + bottom: 1.5rem; + right: 1.5rem; + width: 60px; + height: 60px; + border-radius: 50%; + background: var(--primary); + color: #000; + display: flex; + align-items: center; + justify-content: center; + box-shadow: 0 4px 14px rgba(0,0,0,0.25); + text-decoration: none; + z-index: 100; + transition: transform 0.15s ease, box-shadow 0.15s ease; +} + +.scanner-fab:hover { + transform: scale(1.1); + box-shadow: 0 6px 20px rgba(0,0,0,0.3); + color: #fff; +} + +.scanner-fab:active { + transform: scale(0.95); +} + +/* ── Scanner disclaimer on home page ─────────────────────── */ +.scanner-disclaimer { + background: var(--card-bg); + border: 1px solid var(--border); + border-left: 4px solid var(--primary); + border-radius: 8px; + padding: 1rem; +} + +[data-theme="dark"] .scanner-disclaimer { + border-left-color: var(--primary); +} diff --git a/src/app.js b/src/app.js index c9f296e..a663c75 100644 --- a/src/app.js +++ b/src/app.js @@ -121,6 +121,11 @@ async function start() { app.use('/loot', require('./routes/loot')); app.use('/', require('./routes/hunts')); + // QR Scanner + app.get('/scanner', (req, res) => { + res.render('scanner', { title: 'QR Scanner' }); + }); + // Home page app.get('/', (req, res) => { const { Hunts, Scans } = require('./models'); diff --git a/src/views/home.ejs b/src/views/home.ejs index a48dd47..93d1c47 100644 --- a/src/views/home.ejs +++ b/src/views/home.ejs @@ -34,6 +34,18 @@ +
Not all QR codes can be trusted. Use our built-in QR scanner to safely scan codes and warn you about invalid ones - at least as far as collecting points is concerned. 🏆
+