+
+
-
+
@@ -144,17 +146,17 @@ $siteUrl = rtrim(SITE_URL, '/');
-
+
-
Our kitchen menu is currently being refreshed. Please check our Facebook page for today's specials!
-
+
+
Consuming raw or undercooked meats, poultry, seafood, shellfish, or eggs may increase your risk of foodborne illness. Our kitchen handles a variety of ingredients, and our menu items may contain or come into contact with common allergens such as milk, eggs, wheat, soy, nuts, or shellfish.
-
+
diff --git a/scripts/build-dist.js b/scripts/build-dist.js
index c712f1d..8dd1f93 100644
--- a/scripts/build-dist.js
+++ b/scripts/build-dist.js
@@ -74,6 +74,25 @@ if (fs.existsSync(dbHtaccess)) {
missing.push('db/.htaccess');
}
+// Normalize permissions: 755 for directories, 644 for files. Copies keep
+// the source file's mode, so a file that's owner-only on the dev machine
+// (e.g. after an in-place edit) would ship unreadable to Apache's
+// www-data and 500 the page. Forcing the modes here means local
+// permissions can never break a deploy.
+function normalizePermissions(dir) {
+ fs.chmodSync(dir, 0o755);
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
+ const full = path.join(dir, entry.name);
+ if (entry.isDirectory()) {
+ normalizePermissions(full);
+ } else {
+ fs.chmodSync(full, 0o644);
+ }
+ }
+}
+
+normalizePermissions(DIST);
+
if (missing.length) {
console.warn('Warning: expected but not found, skipped:\n ' + missing.join('\n '));
}
diff --git a/src/scss/pages/_admin-announcements.scss b/src/scss/pages/_admin-announcements.scss
new file mode 100644
index 0000000..f292e31
--- /dev/null
+++ b/src/scss/pages/_admin-announcements.scss
@@ -0,0 +1,29 @@
+/* ---------- admin: announcements ---------- */
+/* Formerly inline style="" attributes on admin/index.php — moved here so
+ the CSP can forbid inline styles. */
+.ann-summary {
+ font-size: 0.82rem;
+ margin-top: 0.2rem;
+ max-width: 32ch;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.ann-schedule {
+ font-size: 0.8rem;
+ color: var(--ink-muted);
+}
+
+.ann-placements {
+ font-size: 0.82rem;
+ color: var(--ink-muted);
+}
+
+.ann-field-hint {
+ font-size: 0.78rem;
+}
+
+.inline-form {
+ display: inline;
+}
diff --git a/src/scss/pages/_admin-hours.scss b/src/scss/pages/_admin-hours.scss
index 06e30c2..c1b0372 100644
--- a/src/scss/pages/_admin-hours.scss
+++ b/src/scss/pages/_admin-hours.scss
@@ -141,3 +141,12 @@
grid-template-columns: 1fr;
}
}
+
+/* Formerly inline style="" attributes on admin/hours.php. */
+.hours-note {
+ margin-top: 1.25rem;
+}
+
+.hours-preview-intro {
+ margin-bottom: 1.25rem;
+}
diff --git a/src/scss/pages/_menu.scss b/src/scss/pages/_menu.scss
index cd55ff3..a41361c 100644
--- a/src/scss/pages/_menu.scss
+++ b/src/scss/pages/_menu.scss
@@ -94,5 +94,61 @@
}
.menu-page-content {
+ padding-top: 0;
padding-bottom: 5.5rem;
}
+
+/* Formerly inline style="" attributes on menu.php — moved here so the
+ CSP can forbid inline styles. */
+.menu-hero {
+ text-align: center;
+}
+
+.menu-hero-title {
+ font-size: clamp(2.4rem, 5vw, 3.8rem);
+ color: var(--gold-bright);
+ margin-top: 0.5rem;
+}
+
+.menu-hero-rule {
+ margin-top: 1.5rem;
+ margin-bottom: 1.5rem;
+}
+
+.menu-hero-intro {
+ max-width: 52ch;
+ margin: 0 auto;
+ font-size: 1.05rem;
+}
+
+.menu-page-container {
+ max-width: 62rem;
+}
+
+.menu-grid-flush {
+ margin-top: 0;
+}
+
+.menu-empty {
+ text-align: center;
+ padding: 3rem 1.5rem;
+}
+
+.menu-disclaimer {
+ margin-top: 3.5rem;
+ text-align: center;
+ padding-top: 2rem;
+ border-top: 1px solid var(--rule);
+}
+
+.menu-disclaimer-text {
+ font-size: 0.8rem;
+ line-height: 1.6;
+ max-width: 68ch;
+ margin: 0 auto;
+}
+
+.menu-disclaimer-ctas {
+ margin-top: 2rem;
+ justify-content: center;
+}
diff --git a/src/scss/styles.scss b/src/scss/styles.scss
index ed4c8c4..5a78c35 100644
--- a/src/scss/styles.scss
+++ b/src/scss/styles.scss
@@ -31,4 +31,5 @@
@use "pages/admin-login";
@use "pages/admin-menu";
@use "pages/admin-hours";
+@use "pages/admin-announcements";
@use "pages/admin-account";
diff --git a/styles.css b/styles.css
index f89878c..816e71e 100644
--- a/styles.css
+++ b/styles.css
@@ -1933,9 +1933,65 @@ footer a.email:hover {
}
.menu-page-content {
+ padding-top: 0;
padding-bottom: 5.5rem;
}
+/* Formerly inline style="" attributes on menu.php — moved here so the
+ CSP can forbid inline styles. */
+.menu-hero {
+ text-align: center;
+}
+
+.menu-hero-title {
+ font-size: clamp(2.4rem, 5vw, 3.8rem);
+ color: var(--gold-bright);
+ margin-top: 0.5rem;
+}
+
+.menu-hero-rule {
+ margin-top: 1.5rem;
+ margin-bottom: 1.5rem;
+}
+
+.menu-hero-intro {
+ max-width: 52ch;
+ margin: 0 auto;
+ font-size: 1.05rem;
+}
+
+.menu-page-container {
+ max-width: 62rem;
+}
+
+.menu-grid-flush {
+ margin-top: 0;
+}
+
+.menu-empty {
+ text-align: center;
+ padding: 3rem 1.5rem;
+}
+
+.menu-disclaimer {
+ margin-top: 3.5rem;
+ text-align: center;
+ padding-top: 2rem;
+ border-top: 1px solid var(--rule);
+}
+
+.menu-disclaimer-text {
+ font-size: 0.8rem;
+ line-height: 1.6;
+ max-width: 68ch;
+ margin: 0 auto;
+}
+
+.menu-disclaimer-ctas {
+ margin-top: 2rem;
+ justify-content: center;
+}
+
/* ---------- admin / management styles ---------- */
.admin-login-body {
min-height: 100vh;
@@ -2196,6 +2252,45 @@ footer a.email:hover {
grid-template-columns: 1fr;
}
}
+/* Formerly inline style="" attributes on admin/hours.php. */
+.hours-note {
+ margin-top: 1.25rem;
+}
+
+.hours-preview-intro {
+ margin-bottom: 1.25rem;
+}
+
+/* ---------- admin: announcements ---------- */
+/* Formerly inline style="" attributes on admin/index.php — moved here so
+ the CSP can forbid inline styles. */
+.ann-summary {
+ font-size: 0.82rem;
+ margin-top: 0.2rem;
+ max-width: 32ch;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.ann-schedule {
+ font-size: 0.8rem;
+ color: var(--ink-muted);
+}
+
+.ann-placements {
+ font-size: 0.82rem;
+ color: var(--ink-muted);
+}
+
+.ann-field-hint {
+ font-size: 0.78rem;
+}
+
+.inline-form {
+ display: inline;
+}
+
/* ---------- admin: my account ---------- */
/* One panel, fields in the shared two-column .form-grid (which already
stacks below 47.5em). Capped so the fields don't stretch across the