Donker thema toevoegen via gebruikersmenu rechtsboven
Klik op je naam rechtsboven om een menu te openen met een schakelaar voor het donkere thema. De keuze wordt per browser onthouden. - global.css: donkere kleurvariabelen, alleen op scherm (afdrukken blijft licht) - base.html: gebruikersmenu met themaschakelaar - vaste witte achtergronden en pastelkleuren op enkele pagina's volgen nu het thema Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
684db2ec82
commit
8b7fa3f716
10 files changed
+163
-20
No files matched your search
@@ -7,7 +7,7 @@
|
||||
<style>
|
||||
/* Bewerken-knop altijd zichtbaar: laatste kolom blijft rechts staan bij horizontaal scrollen */
|
||||
.lln-tabel td.actions, .lln-tabel th.actions {
|
||||
position: sticky; right: 0; background: #fff; white-space: nowrap;
|
||||
position: sticky; right: 0; background: var(--surface); white-space: nowrap;
|
||||
box-shadow: -6px 0 6px -6px rgba(15, 23, 42, .15);
|
||||
}
|
||||
.lln-tabel th.actions { background: var(--surface-muted); }
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
tr.lln.open td:first-child::before { transform: rotate(90deg); }
|
||||
tr.detail td { background: var(--surface-muted); padding: 10px 14px 14px 44px; }
|
||||
.day-chips { display: flex; flex-wrap: wrap; gap: 6px; }
|
||||
.day-chip { display: inline-flex; gap: 6px; align-items: center; padding: 4px 10px; border-radius: 999px; background: #fff;
|
||||
.day-chip { display: inline-flex; gap: 6px; align-items: center; padding: 4px 10px; border-radius: 999px; background: var(--surface);
|
||||
border: 1px solid var(--border); font-size: 13px; }
|
||||
.day-chip .dd { font-weight: 700; color: var(--danger-text); }
|
||||
.count-badge { display: inline-block; min-width: 34px; text-align: center; padding: 3px 10px; border-radius: 999px; font-weight: 700;
|
||||
|
||||
+50
-2
@@ -4,6 +4,10 @@
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{% block title %}PIVOT{% endblock %} – {{ school_name_short|upper or 'PIVOT' }}</title>
|
||||
<script>
|
||||
/* Thema meteen toepassen (vóór het tekenen) zodat de pagina niet eerst licht oplicht */
|
||||
try { if (localStorage.getItem('pivot.thema') === 'donker') document.documentElement.dataset.theme = 'dark'; } catch (e) { /* geen opslag */ }
|
||||
</script>
|
||||
<link rel="icon" type="image/png" href="{{ url_for('static', filename='pivot_mark.png') }}">
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='global.css') }}">
|
||||
{% block head %}{% endblock %}
|
||||
@@ -44,7 +48,7 @@
|
||||
onchange="if (this.value) location.href = this.value">
|
||||
<option value="" selected>🏫 {{ school.naam }} ⇄</option>
|
||||
{% for s in andere_scholen %}
|
||||
<option value="{{ url_for('scholen.wissel', code=s.code) }}" style="color:#1e293b">{{ s.naam }}</option>
|
||||
<option value="{{ url_for('scholen.wissel', code=s.code) }}" style="color:var(--text)">{{ s.naam }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
{% else %}
|
||||
@@ -52,7 +56,22 @@
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if session.get('user') %}
|
||||
<span class="header-user">👤 {{ session.get('user') }}</span>
|
||||
<div class="user-menu" id="user-menu">
|
||||
<button type="button" class="header-btn header-user user-menu-btn" id="user-menu-btn"
|
||||
aria-haspopup="true" aria-expanded="false" aria-controls="user-menu-panel" title="Gebruikersmenu">
|
||||
👤 <span class="user-naam">{{ session.get('user') }}</span> <span class="caret">▼</span>
|
||||
</button>
|
||||
<div class="user-menu-panel" id="user-menu-panel">
|
||||
<div class="user-menu-head">Aangemeld als <strong>{{ session.get('user') }}</strong></div>
|
||||
<label class="switch-row" for="thema-schakelaar">
|
||||
<span>🌙 Donker thema</span>
|
||||
<span class="switch">
|
||||
<input type="checkbox" id="thema-schakelaar">
|
||||
<span class="slider"></span>
|
||||
</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
<form action="{{ url_for('auth.logout') }}" method="get">
|
||||
<button type="submit" class="logout-btn">Uitloggen</button>
|
||||
@@ -134,6 +153,35 @@
|
||||
});
|
||||
}, 6000);
|
||||
|
||||
// Gebruikersmenu rechtsboven + donker thema aan/uit (onthouden in deze browser)
|
||||
(function () {
|
||||
const menu = document.getElementById('user-menu');
|
||||
if (!menu) return;
|
||||
const knop = document.getElementById('user-menu-btn');
|
||||
const schakelaar = document.getElementById('thema-schakelaar');
|
||||
function zetOpen(open) {
|
||||
menu.classList.toggle('open', open);
|
||||
knop.setAttribute('aria-expanded', open);
|
||||
}
|
||||
knop.addEventListener('click', function (e) {
|
||||
e.stopPropagation();
|
||||
zetOpen(!menu.classList.contains('open'));
|
||||
});
|
||||
document.addEventListener('click', function (e) {
|
||||
if (!menu.contains(e.target)) zetOpen(false);
|
||||
});
|
||||
document.addEventListener('keydown', function (e) {
|
||||
if (e.key === 'Escape') zetOpen(false);
|
||||
});
|
||||
|
||||
schakelaar.checked = document.documentElement.dataset.theme === 'dark';
|
||||
schakelaar.addEventListener('change', function () {
|
||||
if (schakelaar.checked) document.documentElement.dataset.theme = 'dark';
|
||||
else delete document.documentElement.dataset.theme;
|
||||
try { localStorage.setItem('pivot.thema', schakelaar.checked ? 'donker' : 'licht'); } catch (err) { /* negeren */ }
|
||||
});
|
||||
})();
|
||||
|
||||
// Escape sluit open modals
|
||||
document.addEventListener('keydown', function (e) {
|
||||
if (e.key !== 'Escape') return;
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
.modus-keuze small { display: block; color: var(--text-muted); font-weight: 400; }
|
||||
.tellers { display: flex; flex-wrap: wrap; gap: 10px; margin: 6px 0 14px; }
|
||||
.teller-knop { all: unset; cursor: pointer; display: inline-flex; gap: 8px; align-items: center; padding: 8px 14px;
|
||||
border-radius: var(--radius); border: 1px solid var(--border); background: #fff; font-weight: 600; font-size: 14px; }
|
||||
border-radius: var(--radius); border: 1px solid var(--border); background: var(--surface); font-weight: 600; font-size: 14px; }
|
||||
.teller-knop.actief { border-color: var(--primary-color); box-shadow: 0 0 0 2px rgba(30,111,165,.18); }
|
||||
.teller-knop .n { font-size: 18px; }
|
||||
tr.rij-fout td { background: #fff7f7; }
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
.modus-keuze small { display: block; color: var(--text-muted); font-weight: 400; }
|
||||
.tellers { display: flex; flex-wrap: wrap; gap: 10px; margin: 6px 0 14px; }
|
||||
.teller-knop { all: unset; cursor: pointer; display: inline-flex; gap: 8px; align-items: center; padding: 8px 14px;
|
||||
border-radius: var(--radius); border: 1px solid var(--border); background: #fff; font-weight: 600; font-size: 14px; }
|
||||
border-radius: var(--radius); border: 1px solid var(--border); background: var(--surface); font-weight: 600; font-size: 14px; }
|
||||
.teller-knop.actief { border-color: var(--primary-color); box-shadow: 0 0 0 2px rgba(30,111,165,.18); }
|
||||
.teller-knop .n { font-size: 18px; }
|
||||
tr.rij-fout td { background: #fff7f7; }
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
#personeelBody tr.g-account td { background: #e8f7ee; }
|
||||
#personeelBody tr.g-alias td { background: #fff1e0; }
|
||||
#personeelBody tr.g-geen td { background: #fdeaea; }
|
||||
#personeelBody tr[class*="g-"] input.adres, #personeelBody tr[class*="g-"] select.rol { background: #fff; }
|
||||
#personeelBody tr[class*="g-"] input.adres, #personeelBody tr[class*="g-"] select.rol { background: var(--surface); }
|
||||
.legende { display: flex; flex-wrap: wrap; gap: 6px 18px; align-items: center; margin: -6px 0 14px; font-size: .88em; color: var(--text-muted); }
|
||||
.legende button.kleurfilter { all: unset; box-sizing: border-box; cursor: pointer; display: inline-flex; align-items: center;
|
||||
gap: 6px; padding: 4px 10px; border-radius: 999px; border: 1px solid transparent; }
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
.nav-bar form { display: flex; gap: 6px; margin: 0; }
|
||||
.nav-bar input[type=date] { width: auto; }
|
||||
.seg { display: inline-flex; border: 1px solid var(--border-strong); border-radius: var(--radius-sm); overflow: hidden; }
|
||||
.seg a { padding: 8px 14px; text-decoration: none; color: var(--text); font-weight: 600; font-size: 14px; background: #fff; }
|
||||
.seg a { padding: 8px 14px; text-decoration: none; color: var(--text); font-weight: 600; font-size: 14px; background: var(--surface); }
|
||||
.seg a.on { background: var(--primary-color); color: #fff; }
|
||||
.day { margin-bottom: 20px; }
|
||||
.day-head { display: flex; align-items: baseline; gap: 12px; margin-bottom: 10px; }
|
||||
|
||||
@@ -8,18 +8,18 @@
|
||||
{% block extra_css %}
|
||||
<style>
|
||||
.soort-switch { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 18px; }
|
||||
.soort-switch a { padding: 8px 14px; border-radius: 999px; border: 1px solid var(--border); background: #fff; text-decoration: none; color: var(--text); font-weight: 600; font-size: 14px; }
|
||||
.soort-switch a { padding: 8px 14px; border-radius: 999px; border: 1px solid var(--border); background: var(--surface); text-decoration: none; color: var(--text); font-weight: 600; font-size: 14px; }
|
||||
.soort-switch a.on { background: var(--primary-color); border-color: var(--primary-color); color: #fff; }
|
||||
.grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 0 16px; }
|
||||
.grid3 { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 0 16px; }
|
||||
@media (max-width: 640px) { .grid2, .grid3 { grid-template-columns: 1fr; } }
|
||||
.dagdeel { display: flex; gap: 6px; flex-wrap: wrap; }
|
||||
.dagdeel label { display: inline-flex; align-items: center; gap: 6px; padding: 8px 12px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: #fff; cursor: pointer; font-weight: 500; }
|
||||
.dagdeel label { display: inline-flex; align-items: center; gap: 6px; padding: 8px 12px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); cursor: pointer; font-weight: 500; }
|
||||
.dagdeel input:checked + span { font-weight: 700; color: var(--primary-color); }
|
||||
.klassen-box { border: 1px solid var(--border); border-radius: var(--radius); padding: 10px; background: var(--surface-muted); }
|
||||
.klassen-box input[type=search] { margin-bottom: 8px; }
|
||||
.klassen { display: flex; flex-wrap: wrap; gap: 6px; max-height: 210px; overflow-y: auto; }
|
||||
.klas { display: inline-flex; align-items: center; gap: 5px; padding: 4px 10px; border: 1px solid var(--border); border-radius: 999px; background: #fff; font-size: 13px; font-weight: 600; cursor: pointer; user-select: none; }
|
||||
.klas { display: inline-flex; align-items: center; gap: 5px; padding: 4px 10px; border: 1px solid var(--border); border-radius: 999px; background: var(--surface); font-size: 13px; font-weight: 600; cursor: pointer; user-select: none; }
|
||||
.klas input { width: 14px; height: 14px; }
|
||||
.klas.on { background: var(--primary-light); border-color: var(--primary-color); color: var(--primary-color); }
|
||||
.gekozen { font-size: 13px; color: var(--text-muted); margin-top: 6px; }
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
.code-panel { margin-top: 18px; border: 2px solid var(--success); border-radius: var(--radius-lg); background: var(--success-bg); padding: 20px; text-align: center; }
|
||||
.big-code { font-family: ui-monospace, Consolas, monospace; font-size: 40px; font-weight: 800; letter-spacing: 6px; color: var(--success-text); margin: 6px 0 4px; }
|
||||
.code-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); gap: 6px; margin-top: 12px; }
|
||||
.code-grid span { font-family: ui-monospace, Consolas, monospace; background: #fff; border: 1px solid var(--border); border-radius: 6px; padding: 6px; font-size: 15px; }
|
||||
.code-grid span { font-family: ui-monospace, Consolas, monospace; background: var(--surface); border: 1px solid var(--border); border-radius: 6px; padding: 6px; font-size: 15px; }
|
||||
details summary { cursor: pointer; color: var(--text-muted); font-size: 14px; margin-top: 12px; }
|
||||
.exception-active { margin-top: 14px; }
|
||||
.pick-list { list-style: none; margin: 10px 0 0; padding: 0; }
|
||||
|
||||
Reference in new issue
Block a user