diff --git a/public/css/styles.css b/public/css/styles.css index 4800b34..f8fe516 100644 --- a/public/css/styles.css +++ b/public/css/styles.css @@ -454,18 +454,26 @@ button.loading::after { /* Modals: the overlay locks body scroll (overflow:hidden on
), so a panel taller than the viewport would have its bottom cut off and unreachable. Cap the panel to the viewport and let it scroll internally; align the wrapper to - the top so the close button stays in reach instead of being clipped. */ + the top so the close button stays in reach instead of being clipped. This + applies on every screen size — the Bewerbung-hinzufügen form has enough fields + (Datum bis Interne Notizen) to overflow even on a laptop, not just a phone. */ +.fixed.inset-0 > .min-h-screen { + align-items: flex-start !important; +} +.fixed.inset-0 > .min-h-screen > .max-w-lg, +.fixed.inset-0 > .min-h-screen > .max-w-md, +.fixed.inset-0 > .min-h-screen > .max-w-2xl, +.fixed.inset-0 > .min-h-screen > .max-w-3xl, +.fixed.inset-0 > .min-h-screen > .max-w-4xl { + max-height: calc(100vh - 2rem) !important; + overflow-y: auto !important; +} @media (max-width: 640px) { - .max-w-lg, - .max-w-md { + .fixed.inset-0 > .min-h-screen > .max-w-lg, + .fixed.inset-0 > .min-h-screen > .max-w-md { max-width: calc(100vw - 2rem) !important; - max-height: calc(100vh - 2rem) !important; - overflow-y: auto !important; margin: 0 !important; } - .fixed.inset-0 > .min-h-screen { - align-items: flex-start !important; - } } /* Dashboard application list: the desktop layout is a 7-column grid forced to diff --git a/server.js b/server.js index 115cc47..2b97899 100644 --- a/server.js +++ b/server.js @@ -386,7 +386,7 @@ function emailPlainText(e) { // followed by the original body with every line prefixed by "> ". function buildReplyQuote(e) { const d = e.email_date ? new Date(e.email_date) : null; - const when = d && !isNaN(d.getTime()) ? d.toLocaleString('de-DE') : ''; + const when = d && !isNaN(d.getTime()) ? d.toLocaleString('de-DE', { timeZone: 'Europe/Berlin' }) : ''; const who = String(e.from_addr || '').trim(); const src = emailPlainText(e).replace(/\r\n/g, '\n').replace(/\s+$/, ''); const quoted = src.split('\n').map((l) => '> ' + l).join('\n'); diff --git a/views/bewerbung.ejs b/views/bewerbung.ejs index d02f2b0..10188fd 100644 --- a/views/bewerbung.ejs +++ b/views/bewerbung.ejs @@ -472,7 +472,7 @@ <%= out ? ('An: ' + (e.to_addr || '')) : ('Von: ' + (e.from_addr || '')) %> - <%= e.email_date ? new Date(e.email_date).toLocaleString('de-DE') : '' %> + <%= e.email_date ? new Date(e.email_date).toLocaleString('de-DE', { timeZone: 'Europe/Berlin' }) : '' %><%= e.subject || '(kein Betreff)' %>
<% if (e.display_srcdoc) { %> diff --git a/views/index.ejs b/views/index.ejs index 3e006cf..eb5742c 100644 --- a/views/index.ejs +++ b/views/index.ejs @@ -117,7 +117,7 @@ /* Shared column grid – used by the header labels and every application line */ .app-grid { display: grid; - grid-template-columns: 1.25rem 5.5rem minmax(7rem, 1.6fr) minmax(8rem, 2fr) 5.5rem 8.5rem 4.5rem; + grid-template-columns: 1.25rem 5.5rem minmax(7rem, 1.6fr) minmax(8rem, 2fr) 5.5rem 8.5rem 5.5rem; gap: 0 0.75rem; align-items: center; } diff --git a/views/partials/favorit-button.ejs b/views/partials/favorit-button.ejs index 18a34a5..bde2d23 100644 --- a/views/partials/favorit-button.ejs +++ b/views/partials/favorit-button.ejs @@ -14,7 +14,7 @@ : ('/jobangebote/' + encodeURIComponent(favId) + '/favorit'); var favCompact = !!(typeof compact !== 'undefined' && compact); %> -