diff --git a/images/.DS_Store b/images/.DS_Store new file mode 100644 index 0000000..0db6a14 Binary files /dev/null and b/images/.DS_Store differ diff --git a/images/breakfast-burrito.webp b/images/breakfast-burrito.webp new file mode 100644 index 0000000..4ab7cb1 Binary files /dev/null and b/images/breakfast-burrito.webp differ diff --git a/images/breakfast-canned-bread.webp b/images/breakfast-canned-bread.webp new file mode 100644 index 0000000..4962ca1 Binary files /dev/null and b/images/breakfast-canned-bread.webp differ diff --git a/images/breakfast-omelette.jpeg b/images/breakfast-omelette.jpeg new file mode 100644 index 0000000..10f37c3 Binary files /dev/null and b/images/breakfast-omelette.jpeg differ diff --git a/images/brunch-coral-bits.webp b/images/brunch-coral-bits.webp new file mode 100644 index 0000000..e1f2260 Binary files /dev/null and b/images/brunch-coral-bits.webp differ diff --git a/images/brunch-french-toast.jpeg b/images/brunch-french-toast.jpeg new file mode 100644 index 0000000..9ceaad7 Binary files /dev/null and b/images/brunch-french-toast.jpeg differ diff --git a/images/brunch-waffles.jpg b/images/brunch-waffles.jpg new file mode 100644 index 0000000..4fc4a74 Binary files /dev/null and b/images/brunch-waffles.jpg differ diff --git a/images/dessert-fruitcake.webp b/images/dessert-fruitcake.webp new file mode 100644 index 0000000..698d6cd Binary files /dev/null and b/images/dessert-fruitcake.webp differ diff --git a/images/dessert-gooberry.jpg b/images/dessert-gooberry.jpg new file mode 100644 index 0000000..8be777d Binary files /dev/null and b/images/dessert-gooberry.jpg differ diff --git a/images/dessert-sponge-cake.webp b/images/dessert-sponge-cake.webp new file mode 100644 index 0000000..e226eef Binary files /dev/null and b/images/dessert-sponge-cake.webp differ diff --git a/images/dinner-krabby-pate.webp b/images/dinner-krabby-pate.webp new file mode 100644 index 0000000..e21bf87 Binary files /dev/null and b/images/dinner-krabby-pate.webp differ diff --git a/images/dinner-krusty-krab-pizza.webp b/images/dinner-krusty-krab-pizza.webp new file mode 100644 index 0000000..b5a27a2 Binary files /dev/null and b/images/dinner-krusty-krab-pizza.webp differ diff --git a/images/dinner-pasta.webp b/images/dinner-pasta.webp new file mode 100644 index 0000000..21c792d Binary files /dev/null and b/images/dinner-pasta.webp differ diff --git a/images/drinks-diet-dr-kelp.webp b/images/drinks-diet-dr-kelp.webp new file mode 100644 index 0000000..6a7f719 Binary files /dev/null and b/images/drinks-diet-dr-kelp.webp differ diff --git a/images/drinks-kelp-shake.jpeg b/images/drinks-kelp-shake.jpeg new file mode 100644 index 0000000..55ee36d Binary files /dev/null and b/images/drinks-kelp-shake.jpeg differ diff --git a/images/drinks-milkshake.webp b/images/drinks-milkshake.webp new file mode 100644 index 0000000..fbbe975 Binary files /dev/null and b/images/drinks-milkshake.webp differ diff --git a/images/happyhour-blood-sausages.webp b/images/happyhour-blood-sausages.webp new file mode 100644 index 0000000..5bcc8d7 Binary files /dev/null and b/images/happyhour-blood-sausages.webp differ diff --git a/images/happyhour-kelp-cheese.webp b/images/happyhour-kelp-cheese.webp new file mode 100644 index 0000000..f1b01c4 Binary files /dev/null and b/images/happyhour-kelp-cheese.webp differ diff --git a/images/happyhour-kelp-fries.webp b/images/happyhour-kelp-fries.webp new file mode 100644 index 0000000..ac81f71 Binary files /dev/null and b/images/happyhour-kelp-fries.webp differ diff --git a/images/lunch-krabby-patty.webp b/images/lunch-krabby-patty.webp new file mode 100644 index 0000000..cfa53e0 Binary files /dev/null and b/images/lunch-krabby-patty.webp differ diff --git a/images/lunch-pulled-pork.jpeg b/images/lunch-pulled-pork.jpeg new file mode 100644 index 0000000..e24371e Binary files /dev/null and b/images/lunch-pulled-pork.jpeg differ diff --git a/images/lunch-salad.webp b/images/lunch-salad.webp new file mode 100644 index 0000000..135805b Binary files /dev/null and b/images/lunch-salad.webp differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..3a49374 --- /dev/null +++ b/index.html @@ -0,0 +1,153 @@ + + + + + + + Krusty Krab Menu + + + + + +
+ +
+

Krusty Krab

+

Come spend your money here!

+
+ + + +
+ + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/interactive-restaurant-menu.png b/interactive-restaurant-menu.png new file mode 100644 index 0000000..c79d94f Binary files /dev/null and b/interactive-restaurant-menu.png differ diff --git a/script.js b/script.js new file mode 100644 index 0000000..ae80a12 --- /dev/null +++ b/script.js @@ -0,0 +1,192 @@ +const buttons = document.querySelectorAll(".menu-btn"); +const menuTitle = document.querySelector("#menu-title"); +const menuDisplay = document.querySelector("#menu-display"); + +const menuData = { + breakfast: [ + { + name: "Krusty Krab Omelette", + description: "A fluffy three-egg omelet stuffed with cheese, sausage, and seaweed-style spinach, served with coral hash browns.", + price: "$8", + image: "images/breakfast-omelette.jpeg" + }, + { + name: "Squidward's Canned Bread", + description: "Canned bread served with a side of disappointment", + price: "$7", + image: "images/breakfast-canned-bread.webp" + }, + { + name: "Bikini Bottom Breakfast Burrito", + description: "Scrambled eggs, crispy bacon, cheese, and potatoes wrapped in a warm tortilla with sandy salsa.", + price: "$6", + image: "images/breakfast-burrito.webp" + } + ], + lunch: [ + { + name: "Krabby Patty", + description: "THE burger. Secret sauce, lettuce, cheese, tomato, onion on a sesame bun", + price: "$12", + image: "images/lunch-krabby-patty.webp" + }, + { + name: "Sandy's Texas Pulled Pork", + description: "Slow-smoked pulled pork sandwich with coleslaw on a brioche bun", + price: "$11", + image: "images/lunch-pulled-pork.jpeg" + }, + { + name: "Jellyfish Fields Salad", + description: "Mixed greens, pickled beets, goat cheese & honey-lemon dressing. Stings in a good way!", + price: "$7", + image: "images/lunch-salad.webp" + } + ], + brunch: [ + { + name: "SpongeBob's Pineapple French Toast", + description: "Thick-cut French toast topped with caramelized pineapple and powdered sugar.", + price: "$14", + image: "images/brunch-french-toast.jpeg" + }, + { + name: "Patrick's Starfish Waffles", + description: "Crispy waffles shaped like starfish, served with strawberry syrup and whipped cream.", + price: "$10", + image: "images/brunch-waffles.jpg" + }, + { + name: "Coral Bits", + description: "Crispy fried coral bits served with a tangy dipping sauce.", + price: "$9", + image: "images/brunch-coral-bits.webp" + } + ], + dinner: [ + { + name: "Krabby Pâté", + description: "Ground Krabby Patties minced into a spreadable paste, with jewelry added to make the food appear fancier.", + price: "$18", + image: "images/dinner-krabby-pate.webp" + }, + { + name: "Spongebob's Sea Salt Pasta", + description: "Creamy Alfredo pasta with grilled chicken and garlic bread.", + price: "$19", + image: "images/dinner-pasta.webp" + }, + { + name: "Krusty Krab Pizza", + description: "A delicious pizza with a krabby patty topping, served with a side of coral ranch dressing.", + price: "$15", + image: "images/dinner-krusty-krab-pizza.webp" + } + ], + dessert: [ + { + name: "Triple Gooberry Surprise", + description: "A massive mountain of ice cream, syrup, whipped cream, and gooberries.", + price: "$7", + image: "images/dessert-gooberry.jpg" + }, + { + name: "Fruitcake", + description: "A classic fruitcake packed with dried fruits and nuts.", + price: "$6", + image: "images/dessert-fruitcake.webp" + }, + { + name: "Sponge Cake", + description: "A moist and spongy cake made with secret ingredients from the Krusty Krab.", + price: "$5", + image: "images/dessert-sponge-cake.webp" + } + ], + happyHour: [ + { + name: "Kelp Cheese", + description: "A creamy cheese made from fermented kelp, served with crackers.", + price: "$6", + image: "images/happyhour-kelp-cheese.webp" + }, + { + name: "Kelp Fries", + description: "Crispy kelp fries with a side of spicy coral sauce.", + price: "$7", + image: "images/happyhour-kelp-fries.webp" + }, + { + name: "Blood Sausages", + description: "Juicy sausages made from the blood of sea creatures, served with a side of seaweed salad.", + price: "$6", + image: "images/happyhour-blood-sausages.webp" + } + ], + drinks: [ + { + name: "Goofy Goober Milkshake", + description: "Vanilla milkshake topped with whipped cream and sprinkles.", + price: "$4", + image: "images/drinks-milkshake.webp" + }, + { + name: "Kelp Shake", + description: "A refreshing blend of kelp and sea minerals, served chilled.", + price: "$5", + image: "images/drinks-kelp-shake.jpeg" + }, + { + name: "Diet Dr. Kelp", + description: "A refreshing sugar-free sea soda with a crisp and bubbly finish.", + price: "$6", + image: "images/drinks-diet-dr-kelp.webp" + } + ] +}; + +function displayMenu(category) { + menuDisplay.innerHTML = ""; + + const categoryTitles = { + breakfast: "Breakfast Menu", + lunch: "Lunch Menu", + brunch: "Brunch Menu", + dinner: "Dinner Menu", + dessert: "Dessert Menu", + happyHour: "Happy Hour Menu", + drinks: "Drinks Menu" + }; + + menuTitle.textContent = categoryTitles[category]; + + menuData[category].forEach(item => { + const menuItem = document.createElement("div"); + menuItem.classList.add("menu-item"); + + menuItem.innerHTML = ` + ${item.name} + + `; + + menuDisplay.appendChild(menuItem); + }); +} + +displayMenu("breakfast"); + +buttons.forEach(button => { + button.addEventListener("click", function () { + buttons.forEach(btn => btn.classList.remove("active")); + button.classList.add("active"); + const selectedCategory = button.dataset.category; + displayMenu(selectedCategory); + }); +}); \ No newline at end of file diff --git a/style.css b/style.css new file mode 100644 index 0000000..52be98e --- /dev/null +++ b/style.css @@ -0,0 +1,222 @@ +@import url('https://fonts.googleapis.com/css2?family=Rye&family=Special+Elite&display=swap'); + +/* Reset */ +* { + box-sizing: border-box; + margin: 0; + padding: 0; +} + +/* Page */ +body { + font-family: 'Special Elite', 'Courier New', monospace; + background-color: #a8c8d8; + background-image: + repeating-linear-gradient( + 0deg, + transparent, + transparent 38px, + rgba(255,255,255,0.06) 38px, + rgba(255,255,255,0.06) 40px + ); + color: #2a0a00; + line-height: 1.6; + padding: 30px 20px 60px; + min-height: 100vh; +} + +/* Hero - parchment sign */ +.hero { + text-align: center; + background: #f5e9c0; + background-image: + url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='300' height='300'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='300' height='300' filter='url(%23n)' opacity='0.08'/%3E%3C/svg%3E"); + border: 4px solid #6b1a0a; + border-radius: 4px; + max-width: 700px; + margin: 0 auto 30px; + padding: 30px 40px 24px; + box-shadow: + 4px 4px 0 #6b1a0a, + 8px 8px 0 rgba(107,26,10,0.2); + position: relative; +} + +/* Thumbtacks are drawn by the JS rope overlay */ + +.hero h1 { + font-family: 'Rye', serif; + font-size: 3rem; + color: #6b1a0a; + letter-spacing: 0.06em; + text-shadow: 2px 2px 0 rgba(107,26,10,0.25); + margin-bottom: 8px; +} + +.hero p { + font-family: 'Special Elite', monospace; + font-size: 1rem; + color: #4a2000; + font-style: italic; + letter-spacing: 0.04em; +} + +/* Rope SVGs */ +.rope-svg { + display: block; + width: 100%; + overflow: visible; + pointer-events: none; +} + +/* Menu buttons */ +.menu-controls { + display: flex; + flex-wrap: nowrap; + justify-content: center; + gap: 6px; + max-width: 700px; + margin-left: auto; + margin-right: auto; + /* Parchment mini-board for the button row */ + background: #f5e9c0; + border: 3px solid #6b1a0a; + border-radius: 4px; + padding: 10px 16px; + box-shadow: 3px 3px 0 #6b1a0a, 6px 6px 0 rgba(107,26,10,0.18); + position: relative; + margin-bottom: 60px; +} + +/* Thumbtacks are drawn by the JS rope overlay */ + +.menu-btn { + font-family: 'Rye', serif; + padding: 5px 11px; + border: 2px solid #6b1a0a; + background: #f5e9c0; + color: #6b1a0a; + border-radius: 3px; + cursor: pointer; + font-size: 0.68rem; + letter-spacing: 0.04em; + white-space: nowrap; + transition: background 0.15s, color 0.15s, transform 0.1s; + box-shadow: 1.5px 1.5px 0 #6b1a0a; +} + +.menu-btn:hover { + background: #ecdfa0; + transform: translate(-1px, -1px); + box-shadow: 2.5px 2.5px 0 #6b1a0a; +} + +.menu-btn.active { + background: #6b1a0a; + color: #f5e9c0; + transform: translate(1px, 1px); + box-shadow: 0.5px 0.5px 0 #3a0a00; +} + +/* Menu section - parchment board */ +.menu-section { + max-width: 700px; + margin: 0 auto; + background: #f5e9c0; + background-image: + url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='300' height='300'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='300' height='300' filter='url(%23n)' opacity='0.07'/%3E%3C/svg%3E"); + border: 4px solid #6b1a0a; + border-radius: 4px; + padding: 28px 36px 32px; + box-shadow: + 4px 4px 0 #6b1a0a, + 8px 8px 0 rgba(107,26,10,0.2); +} + +#menu-title { + font-family: 'Rye', serif; + font-size: 1.8rem; + color: #6b1a0a; + text-align: center; + letter-spacing: 0.08em; + margin-bottom: 22px; + padding-bottom: 10px; + border-bottom: 2px dashed #6b1a0a; +} + +/* Menu items */ +#menu-display { + display: flex; + flex-direction: column; + gap: 0; +} + +.menu-item { + display: flex; + align-items: center; + gap: 16px; + padding: 14px 0; + border-bottom: 1px solid rgba(107,26,10,0.12); +} + +.menu-item:last-child { + border-bottom: none; +} + +.menu-item-img { + width: 90px; + height: 90px; + object-fit: cover; + border-radius: 6px; + border: 2px solid #6b1a0a; + flex-shrink: 0; + background: #e8d9a0; +} + +.menu-item-body { + flex: 1; + min-width: 0; +} + +/* name + price on same line with dotted leader */ +.menu-item-header { + display: flex; + align-items: baseline; + gap: 0; + margin-bottom: 4px; +} + +.menu-item h3 { + font-family: 'Special Elite', monospace; + font-size: 1rem; + color: #2a0a00; + letter-spacing: 0.04em; + text-transform: uppercase; + white-space: nowrap; + flex-shrink: 0; +} + +/* dotted leader line between name and price */ +.leader { + flex: 1; + border-bottom: 2px dotted rgba(107,26,10,0.45); + margin: 0 6px 4px; + min-width: 20px; +} + +.price { + font-family: 'Special Elite', monospace; + font-size: 1rem; + font-weight: bold; + color: #2a0a00; + white-space: nowrap; + flex-shrink: 0; +} + +.menu-item p { + font-size: 0.83rem; + color: #5a2e00; + font-style: italic; + padding-left: 2px; + line-height: 1.5; +} \ No newline at end of file