diff --git a/.gitea/workflows/container.yml b/.gitea/workflows/container.yml index 06bef6b..c438641 100644 --- a/.gitea/workflows/container.yml +++ b/.gitea/workflows/container.yml @@ -25,6 +25,10 @@ jobs: podman run --rm --interactive docker.io/library/node:24-alpine node --check - < database.js podman run --rm --interactive docker.io/library/node:24-alpine node --check - < public/app.js podman run --rm --interactive docker.io/library/node:24-alpine node --check - < public/admin.js + podman run --rm \ + --volume "$PWD:/app:ro" \ + --workdir /app \ + docker.io/library/node:24-alpine npm test publish: name: Build and push diff --git a/README.md b/README.md index a682e16..d44d866 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,8 @@ Die Übersicht zeigt: - wann die Antwort zuletzt gespeichert beziehungsweise geändert wurde - die erwartete Gesamtzahl der kommenden Gäste +Über „Antwort setzen“ beziehungsweise „Antwort ändern“ kann die Zu- oder Absage im Adminbereich stellvertretend für einen Gast gespeichert werden. Bei einer Zusage mit Begleitung wird auch deren Name erfasst. + Über „CSV herunterladen“ lässt sich die vollständige Liste für Excel, Numbers oder LibreOffice exportieren. Eine Öffnung wird gezählt, sobald das JavaScript der RSVP-Seite die Einladung abruft. Manche besonders aktive Link-Vorschau-Bots können theoretisch ebenfalls eine Öffnung erzeugen. ## Persönlichen Einladungslink anlegen diff --git a/public/admin.css b/public/admin.css index 3b45583..4918eb7 100644 --- a/public/admin.css +++ b/public/admin.css @@ -7,8 +7,8 @@ .admin-card { padding: 30px; background: rgba(255,253,249,.94); border: 1px solid rgba(0,104,128,.1); border-radius: 22px; box-shadow: 0 16px 45px rgba(15,78,88,.1); } .admin-card h2 { font-size: 1.8rem; } .admin-card label { display: block; margin: 1.2rem 0 .4rem; color: var(--ink-dark); font-weight: 700; } -.admin-card input, .admin-card textarea { width: 100%; padding: .85rem 1rem; color: var(--ink-dark); background: white; border: 1.5px solid var(--line); border-radius: 12px; outline: none; resize: vertical; } -.admin-card input:focus, .admin-card textarea:focus { border-color: var(--turquoise); box-shadow: 0 0 0 3px rgba(24,185,187,.15); } +.admin-card input, .admin-card textarea, .response-dialog input, .response-dialog select { width: 100%; padding: .85rem 1rem; color: var(--ink-dark); background: white; border: 1.5px solid var(--line); border-radius: 12px; outline: none; resize: vertical; } +.admin-card input:focus, .admin-card textarea:focus, .response-dialog input:focus, .response-dialog select:focus { border-color: var(--turquoise); box-shadow: 0 0 0 3px rgba(24,185,187,.15); } .login-card { width: min(480px, 100%); margin: 10vh auto 0; text-align: center; } .login-card .state-icon { margin-bottom: 1rem; } .login-card label { text-align: left; } @@ -41,6 +41,15 @@ td:first-child { color: var(--ink-dark); font-weight: 700; } .status.alone, .status.with_someone { color: #167039; background: #e6f7e8; } .status.not_coming { color: #9a462d; background: #fcedea; } .link-button { width: auto; margin: 0; padding: .42rem .65rem; font-size: .68rem; } +.response-dialog { width: min(480px, calc(100% - 32px)); padding: 28px; color: var(--ink-dark); background: var(--white); border: 0; border-radius: 22px; box-shadow: var(--shadow); } +.response-dialog::backdrop { background: rgba(7, 85, 107, .35); backdrop-filter: blur(3px); } +.response-dialog h2 { margin: 0; font: 400 2rem/1.1 Georgia, serif; } +.response-dialog label { display: block; margin: 1.2rem 0 .4rem; font-weight: 700; } +.response-dialog .eyebrow { margin: 0 0 .5rem; } +.dialog-heading { display: flex; align-items: flex-start; justify-content: space-between; gap: 1rem; } +.dialog-close { width: 42px; margin: 0; padding: .35rem; color: var(--ink); background: transparent; font-size: 1.6rem; line-height: 1; } +.dialog-close:hover { color: white; } +.dialog-actions { display: flex; justify-content: flex-end; gap: .7rem; margin-top: 1.5rem; } code { padding: .1em .3em; background: #edf5f3; border-radius: 4px; } @media (max-width: 760px) { diff --git a/public/admin.html b/public/admin.html index 0d479b3..1ec208d 100644 --- a/public/admin.html +++ b/public/admin.html @@ -89,6 +89,7 @@