- Implemented the Lakeside Orders demo rebrand:

New licensed lake, picnic, dining, server, burger, and food photography.
Rebuilt homepage gallery, logo, colors, copy, menu, specials, and 
exports.
Added dashboard-configurable branding in [settings.php (line 
18)](/Users/tyemeclifford/Documents/GH/fatbottomgrille/views/admin/settings.php:18).
Added a public attribution page and full [image 
credits](/Users/tyemeclifford/Documents/GH/fatbottomgrille/public/assets/images/CREDITS.md).
Migrated existing SQLite menu data and admin email to 
admin@lakesideorders.test.
Verified 51 PHP files, JSON/JavaScript, storefront pages, database 
migration, admin settings, and menu PDF. All passed.
This commit is contained in:
Ty Clifford
2026-06-14 14:26:09 -04:00
parent 03348cad79
commit b14f4c1796
33 changed files with 531 additions and 123 deletions
+168 -30
View File
@@ -3,8 +3,8 @@
--ink-soft: #0e1d2b;
--navy: #12283b;
--navy-light: #1c3a50;
--gold: #c8973b;
--gold-light: #e1b75e;
--gold: #35d6c1;
--gold-light: #8af5e6;
--cream: #f3eedf;
--paper: #faf7ef;
--white: #ffffff;
@@ -41,9 +41,10 @@ body {
body.store-body {
background-image:
radial-gradient(circle at 0 0, rgba(200, 151, 59, 0.08), transparent 28%),
radial-gradient(circle at 0 0, rgba(53, 214, 193, 0.1), transparent 28%),
radial-gradient(circle at 92% 12%, rgba(114, 92, 255, 0.09), transparent 24%),
linear-gradient(rgba(255, 255, 255, 0.018) 1px, transparent 1px);
background-size: auto, 100% 22px;
background-size: auto, auto, 100% 22px;
}
a {
@@ -409,8 +410,8 @@ h3 {
overflow: hidden;
color: var(--cream);
background:
linear-gradient(90deg, rgba(5, 12, 18, 0.99) 0%, rgba(8, 20, 30, 0.96) 48%, rgba(8, 18, 28, 0.76) 100%),
url("images/reuben-fries.jpg") center 48% / cover no-repeat;
linear-gradient(90deg, rgba(5, 12, 18, 0.99) 0%, rgba(8, 20, 30, 0.95) 46%, rgba(8, 18, 28, 0.48) 100%),
url("images/lakeside-sunset.jpg") center 56% / cover no-repeat;
}
.hero::after {
@@ -708,25 +709,25 @@ h3 {
.special-card:nth-child(4n + 1) {
background-image:
linear-gradient(112deg, rgba(5, 12, 18, 0.98), rgba(8, 18, 28, 0.82)),
url("images/quesadilla.jpg");
url("images/lakeside-burger.jpg");
}
.special-card:nth-child(4n + 2) {
background-image:
linear-gradient(112deg, rgba(5, 12, 18, 0.98), rgba(8, 18, 28, 0.8)),
url("images/sausage-kale-soup.jpg");
url("images/boardwalk-fries.jpg");
}
.special-card:nth-child(4n + 3) {
background-image:
linear-gradient(112deg, rgba(5, 12, 18, 0.98), rgba(8, 18, 28, 0.78)),
url("images/grilled-chicken-salad.jpg");
url("images/shoreline-bowl.jpg");
}
.special-card:nth-child(4n + 4) {
background-image:
linear-gradient(112deg, rgba(5, 12, 18, 0.98), rgba(8, 18, 28, 0.8)),
url("images/curry-rice.jpg");
url("images/picnic-wrap.jpg");
}
.special-card::after {
@@ -832,43 +833,43 @@ h3 {
.menu-card:nth-child(7n + 1) .menu-card-art:not(.has-image) {
background-image:
linear-gradient(rgba(5, 12, 18, 0.62), rgba(5, 12, 18, 0.86)),
url("images/reuben-fries.jpg");
url("images/lakeside-burger.jpg");
}
.menu-card:nth-child(7n + 2) .menu-card-art:not(.has-image) {
background-image:
linear-gradient(rgba(5, 12, 18, 0.62), rgba(5, 12, 18, 0.86)),
url("images/chicken-sandwich-fries.jpg");
url("images/picnic-wrap.jpg");
}
.menu-card:nth-child(7n + 3) .menu-card-art:not(.has-image) {
background-image:
linear-gradient(rgba(5, 12, 18, 0.62), rgba(5, 12, 18, 0.86)),
url("images/quesadilla.jpg");
url("images/shoreline-bowl.jpg");
}
.menu-card:nth-child(7n + 4) .menu-card-art:not(.has-image) {
background-image:
linear-gradient(rgba(5, 12, 18, 0.62), rgba(5, 12, 18, 0.86)),
url("images/curry-rice.jpg");
url("images/lakehouse-chicken.jpg");
}
.menu-card:nth-child(7n + 5) .menu-card-art:not(.has-image) {
background-image:
linear-gradient(rgba(5, 12, 18, 0.62), rgba(5, 12, 18, 0.86)),
url("images/italian-sub.jpg");
url("images/boardwalk-fries.jpg");
}
.menu-card:nth-child(7n + 6) .menu-card-art:not(.has-image) {
background-image:
linear-gradient(rgba(5, 12, 18, 0.62), rgba(5, 12, 18, 0.86)),
url("images/sausage-kale-soup.jpg");
url("images/lemon-iced-tea.jpg");
}
.menu-card:nth-child(7n) .menu-card-art:not(.has-image) {
background-image:
linear-gradient(rgba(5, 12, 18, 0.62), rgba(5, 12, 18, 0.86)),
url("images/grilled-chicken-salad.jpg");
url("images/patio-dining.jpg");
}
.menu-card-art:not(.has-image) {
@@ -968,6 +969,78 @@ h3 {
background: #08141f;
}
.lakeside-gallery {
background:
radial-gradient(circle at 92% 16%, rgba(239, 91, 161, 0.11), transparent 28%),
radial-gradient(circle at 8% 84%, rgba(31, 124, 255, 0.1), transparent 30%),
#07131d;
}
.experience-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 18px;
}
.experience-card {
position: relative;
min-height: 320px;
margin: 0;
overflow: hidden;
background: var(--navy);
border: 1px solid rgba(138, 245, 230, 0.2);
border-radius: var(--radius-large);
}
.experience-card-wide {
min-height: 470px;
grid-column: 1 / -1;
}
.experience-card img {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 420ms ease;
}
.experience-card:hover img {
transform: scale(1.025);
}
.experience-card::after {
position: absolute;
inset: 0;
background: linear-gradient(transparent 38%, rgba(5, 12, 18, 0.9));
content: "";
}
.experience-card figcaption {
position: absolute;
z-index: 2;
right: 26px;
bottom: 24px;
left: 26px;
display: flex;
flex-direction: column;
}
.experience-card figcaption span {
color: var(--gold-light);
font-size: 0.7rem;
font-weight: 700;
letter-spacing: 0.12em;
text-transform: uppercase;
}
.experience-card figcaption strong {
color: var(--cream);
font-family: var(--font-display);
font-size: clamp(1.8rem, 4vw, 3.4rem);
line-height: 1;
text-transform: uppercase;
}
.category-band {
padding-block: 55px;
color: var(--cream);
@@ -1034,10 +1107,23 @@ h3 {
min-height: 410px;
place-items: center;
overflow: hidden;
color: var(--gold);
background:
linear-gradient(rgba(5, 12, 18, 0.58), rgba(5, 12, 18, 0.9)),
url("images/italian-sub.jpg") center / cover no-repeat;
color: var(--gold-light);
background: var(--navy);
}
.story-art::after {
position: absolute;
inset: 0;
background: linear-gradient(rgba(5, 12, 18, 0.16), rgba(5, 12, 18, 0.78));
content: "";
}
.story-art img {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
object-fit: cover;
}
.story-number {
@@ -1069,7 +1155,7 @@ h3 {
color: var(--cream);
background:
linear-gradient(90deg, rgba(5, 12, 18, 0.97), rgba(8, 18, 28, 0.8)),
url("images/italian-sub.jpg") center 55% / cover no-repeat;
url("images/lakeside-sunset.jpg") center 56% / cover no-repeat;
}
.page-hero-compact {
@@ -1086,6 +1172,41 @@ h3 {
color: #b9c4ca;
}
.narrow-content {
max-width: 880px;
}
.credits-list {
border-top: 1px solid var(--line);
}
.credits-list article {
display: flex;
align-items: center;
justify-content: space-between;
gap: 25px;
padding-block: 22px;
border-bottom: 1px solid var(--line);
}
.credits-list h2 {
margin-bottom: 5px;
color: var(--cream);
font-size: 1.35rem;
text-transform: uppercase;
}
.credits-list p,
.credits-note {
margin: 0;
color: var(--muted);
font-size: 0.84rem;
}
.credits-note {
margin-top: 28px;
}
.page-hero-inner {
display: grid;
grid-template-columns: 1fr minmax(340px, 0.55fr);
@@ -1958,8 +2079,8 @@ textarea:focus {
padding-top: 68px;
color: #b6c0c6;
background:
linear-gradient(90deg, rgba(5, 12, 18, 0.99), rgba(5, 12, 18, 0.94)),
url("images/fat-bottom-grille-logo.jpg") right -80px center / 520px no-repeat,
linear-gradient(90deg, rgba(5, 12, 18, 0.99), rgba(5, 12, 18, 0.86)),
url("images/lakeside-sunset.jpg") center 62% / cover no-repeat,
#050c12;
}
@@ -2047,14 +2168,14 @@ textarea:focus {
.store-body .story-section {
background:
linear-gradient(90deg, rgba(8, 18, 28, 0.99), rgba(8, 18, 28, 0.92)),
url("images/sausage-kale-soup.jpg") right center / 46% auto no-repeat;
radial-gradient(circle at 86% 20%, rgba(114, 92, 255, 0.12), transparent 30%),
#08121c;
}
.store-body .category-band {
background:
linear-gradient(90deg, rgba(5, 12, 18, 0.98), rgba(5, 12, 18, 0.86)),
url("images/curry-rice.jpg") center 56% / cover no-repeat;
url("images/patio-dining.jpg") center 48% / cover no-repeat;
}
.store-body .menu-category-heading {
@@ -2116,20 +2237,20 @@ textarea:focus {
.store-body .order-summary {
background:
linear-gradient(145deg, rgba(8, 18, 28, 0.98), rgba(8, 18, 28, 0.88)),
url("images/quesadilla.jpg") center / cover no-repeat;
url("images/lakeside-burger.jpg") center / cover no-repeat;
border: 1px solid rgba(200, 151, 59, 0.22);
}
.store-body .auth-section {
background:
linear-gradient(90deg, rgba(5, 12, 18, 0.97), rgba(8, 18, 28, 0.87)),
url("images/grilled-chicken-salad.jpg") center / cover no-repeat;
url("images/garden-dining.jpg") center / cover no-repeat;
}
.store-body .confirmation-section {
background:
linear-gradient(rgba(5, 12, 18, 0.94), rgba(5, 12, 18, 0.97)),
url("images/sausage-kale-soup.jpg") center / cover no-repeat;
url("images/lakeside-sunset.jpg") center / cover no-repeat;
}
.store-body .status-pill {
@@ -3319,6 +3440,10 @@ code {
gap: 40px;
}
.experience-card-wide {
min-height: 390px;
}
.story-art {
min-height: 320px;
}
@@ -3464,6 +3589,7 @@ code {
}
.menu-grid,
.experience-grid,
.category-links,
.footer-grid,
.form-grid,
@@ -3474,6 +3600,18 @@ code {
grid-template-columns: 1fr;
}
.experience-card,
.experience-card-wide {
min-height: 280px;
grid-column: auto;
}
.credits-list article {
align-items: flex-start;
flex-direction: column;
gap: 8px;
}
.category-links a {
min-height: 85px;
}
+25
View File
@@ -0,0 +1,25 @@
# Lakeside Orders image credits
The active demo photography was sourced from Wikimedia Commons. Images may be
cropped or resized by the website through CSS.
- `lakeside-sunset.jpg` - Bonnie Moreland, public domain:
https://commons.wikimedia.org/wiki/File:Sunset_Odell_Lake,_Oregon_-_Flickr_-_Bonnie_Moreland_(free_images).jpg
- `lakeside-picnic.jpg` - Gholamreza Shamsnetari, CC BY 4.0:
https://commons.wikimedia.org/wiki/File:Sizdah_Be-Dar_2018,_Valasht_Lake_(13970114000329636583522676851541_54966).jpg
- `patio-dining.jpg` - Elvert Barnes, CC BY-SA 2.0:
https://commons.wikimedia.org/wiki/File:People_eating_outside_restaurant_Baltimore.jpg
- `garden-dining.jpg` - Ibrahim Achiri, CC BY-SA 4.0:
https://commons.wikimedia.org/wiki/File:People_dining_and_socializing_at_Zen_Garden.jpg
- `lakeside-burger.jpg` - Daderot, CC0:
https://commons.wikimedia.org/wiki/File:Hamburger_with_blue_cheese,_guacamole,_and_other_toppings,_plus_French_fries_-_Massachusetts.jpg
- `picnic-wrap.jpg` - Tomwsulcer, CC0:
https://commons.wikimedia.org/wiki/File:Lunch_chicken_wrap_with_spinach_and_sauce.JPG
- `shoreline-bowl.jpg` - Andy Li, CC0:
https://commons.wikimedia.org/wiki/File:Falafel_Super_Bowl_Salad_-_Leon_2025-10-27.jpg
- `lakehouse-chicken.jpg` - Vyacheslav Argenberg, CC BY 4.0:
https://commons.wikimedia.org/wiki/File:Fried_chicken_legs,_Rostov-on-Don,_Russia.jpg
- `lemon-iced-tea.jpg` - Renee Comet, public domain:
https://commons.wikimedia.org/wiki/File:Iced_tea.jpg
- `boardwalk-fries.jpg` - Thriving Vegetarian, CC BY 2.0:
https://commons.wikimedia.org/wiki/File:Perfect_French_Fries_-_11457817933.jpg
Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 732 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 316 KiB

@@ -0,0 +1,27 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 120 120" role="img" aria-labelledby="title">
<title id="title">Lakeside Orders</title>
<defs>
<linearGradient id="sky" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#725cff"/>
<stop offset="0.58" stop-color="#ef5ba1"/>
<stop offset="1" stop-color="#ff9d4d"/>
</linearGradient>
<linearGradient id="water" x1="0" y1="0" x2="1" y2="1">
<stop offset="0" stop-color="#31e6cf"/>
<stop offset="1" stop-color="#1f7cff"/>
</linearGradient>
<clipPath id="round">
<circle cx="60" cy="60" r="54"/>
</clipPath>
</defs>
<circle cx="60" cy="60" r="57" fill="#07131d" stroke="#8af5e6" stroke-width="4"/>
<g clip-path="url(#round)">
<rect x="6" y="6" width="108" height="62" fill="url(#sky)"/>
<circle cx="82" cy="39" r="15" fill="#fff0a8"/>
<path d="M0 67 31 40 49 58 68 35 96 62 120 45 126 78H0Z" fill="#0d2740"/>
<path d="M0 66c18-5 31-4 47 0 18 5 36 4 73-2v56H0Z" fill="url(#water)"/>
<path d="M0 82c24-8 43 5 66-1 19-5 36-7 60-1M-4 98c27-7 46 5 69-1 20-5 39-5 65 0" fill="none" stroke="#e8fffb" stroke-width="4" stroke-linecap="round" opacity=".7"/>
<path d="M35 76h50l-6 9H41Z" fill="#07131d"/>
<path d="M49 75 60 62l11 13" fill="none" stroke="#07131d" stroke-width="5" stroke-linejoin="round"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 259 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 414 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 710 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 255 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 276 KiB

+1
View File
@@ -51,6 +51,7 @@ $stats->record($path, $user ? (int) $user['id'] : null);
$router = new Router();
$router->get('/', [$store, 'home']);
$router->get('/menu', [$store, 'menu']);
$router->get('/credits', [$store, 'credits']);
$router->post('/cart/add', [$store, 'addToCart']);
$router->get('/cart', [$store, 'cart']);
$router->post('/cart/update', [$store, 'updateCart']);