├── LICENSE
├── README.md
├── web.js
├── web.css
└── index.html
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2025 Abbireddy Venkata Chandu
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # FlavorFusion 🍽️
2 |
3 | A modern and responsive restaurant website designed to provide an immersive dining experience. Built using **HTML**, **CSS**, and **JavaScript**, FlavorFusion offers an elegant interface and interactive features to engage users.
4 |
5 | ## 🚀 Features
6 |
7 | - **Responsive Design:** Seamless performance on mobile, tablet, and desktop devices.
8 | - **Interactive UI:** Smooth animations and transitions for a dynamic user experience.
9 | - **Menu Showcase:** Stylish and organized menu section to highlight dishes.
10 | - **Reservation Form:** Easy-to-use form for booking tables online.
11 | - **Modern Aesthetics:** Clean and professional design with vibrant visuals.
12 |
13 | ## 🛠️ Tech Stack
14 |
15 | - **Frontend:** HTML5, CSS3, JavaScript
16 | - **Design:** Responsive UI/UX Design Principles
17 |
18 | ## 📂 Project Structure
19 |
20 | ```
21 | FlavorFusion/
22 | ├── index.html # Main HTML file
23 | ├── css/
24 | │ └── style.css # Stylesheet
25 | ├── js/
26 | │ └── script.js # JavaScript functionality
27 | ├── images/ # Website images
28 | └── README.md # Project documentation
29 | ```
30 |
31 | ## 💻 Setup Instructions
32 |
33 | 1. **Clone the Repository:**
34 | ```bash
35 | git clone https://github.com/venkat-0706/FlavorFusion.git
36 | ```
37 | 2. **Navigate to the Project Folder:**
38 | ```bash
39 | cd FlavorFusion
40 | ```
41 | 3. **Run the Project:**
42 | - Open `index.html` in your browser.
43 |
44 | ## You can view live demo here
45 |
46 | [Click here](https://venkat-0706.github.io/FlavorFusion/)
47 |
48 | ## 🤝 Contributing
49 |
50 | Contributions are welcome! Feel free to open issues or submit pull requests to improve the project.
51 |
52 | ## 📞 Contact
53 |
54 | For any inquiries, reach out at: **chanduabbireddy247@gmail.com**
55 |
56 | ## 📄 License
57 |
58 | This project is open-source and available under the [MIT License](LICENSE).
59 |
60 |
--------------------------------------------------------------------------------
/web.js:
--------------------------------------------------------------------------------
1 | /*==================== SHOW MENU ====================*/
2 | const showMenu = (toggleId, navId) =>{
3 | const toggle = document.getElementById(toggleId),
4 | nav = document.getElementById(navId)
5 |
6 | // Validate that variables exist
7 | if(toggle && nav){
8 | toggle.addEventListener('click', ()=>{
9 | // We add the show-menu class to the div tag with the nav__menu class
10 | nav.classList.toggle('show-menu')
11 | })
12 | }
13 | }
14 | showMenu('nav-toggle','nav-menu')
15 |
16 | /*==================== REMOVE MENU MOBILE ====================*/
17 | const navLink = document.querySelectorAll('.nav__link')
18 |
19 | function linkAction(){
20 | const navMenu = document.getElementById('nav-menu')
21 | // When we click on each nav__link, we remove the show-menu class
22 | navMenu.classList.remove('show-menu')
23 | }
24 | navLink.forEach(n => n.addEventListener('click', linkAction))
25 |
26 | /*==================== SCROLL SECTIONS ACTIVE LINK ====================*/
27 | const sections = document.querySelectorAll('section[id]')
28 |
29 | function scrollActive(){
30 | const scrollY = window.pageYOffset
31 |
32 | sections.forEach(current =>{
33 | const sectionHeight = current.offsetHeight
34 | const sectionTop = current.offsetTop - 50;
35 | sectionId = current.getAttribute('id')
36 |
37 | if(scrollY > sectionTop && scrollY <= sectionTop + sectionHeight){
38 | document.querySelector('.nav__menu a[href*=' + sectionId + ']').classList.add('active-link')
39 | }else{
40 | document.querySelector('.nav__menu a[href*=' + sectionId + ']').classList.remove('active-link')
41 | }
42 | })
43 | }
44 | window.addEventListener('scroll', scrollActive)
45 |
46 | /*==================== CHANGE BACKGROUND HEADER ====================*/
47 | function scrollHeader(){
48 | const nav = document.getElementById('header')
49 | // When the scroll is greater than 200 viewport height, add the scroll-header class to the header tag
50 | if(this.scrollY >= 200) nav.classList.add('scroll-header'); else nav.classList.remove('scroll-header')
51 | }
52 | window.addEventListener('scroll', scrollHeader)
53 |
54 | /*==================== SHOW SCROLL TOP ====================*/
55 | function scrollTop(){
56 | const scrollTop = document.getElementById('scroll-top');
57 | // When the scroll is higher than 560 viewport height, add the show-scroll class to the a tag with the scroll-top class
58 | if(this.scrollY >= 560) scrollTop.classList.add('show-scroll'); else scrollTop.classList.remove('show-scroll')
59 | }
60 | window.addEventListener('scroll', scrollTop)
61 |
62 | /*==================== DARK LIGHT THEME ====================*/
63 | const themeButton = document.getElementById('theme-button')
64 | const darkTheme = 'dark-theme'
65 | const iconTheme = 'bx-sun'
66 |
67 | // Previously selected topic (if user selected)
68 | const selectedTheme = localStorage.getItem('selected-theme')
69 | const selectedIcon = localStorage.getItem('selected-icon')
70 |
71 | // We obtain the current theme that the interface has by validating the dark-theme class
72 | const getCurrentTheme = () => document.body.classList.contains(darkTheme) ? 'dark' : 'light'
73 | const getCurrentIcon = () => themeButton.classList.contains(iconTheme) ? 'bx-moon' : 'bx-sun'
74 |
75 | // We validate if the user previously chose a topic
76 | if (selectedTheme) {
77 | // If the validation is fulfilled, we ask what the issue was to know if we activated or deactivated the dark
78 | document.body.classList[selectedTheme === 'dark' ? 'add' : 'remove'](darkTheme)
79 | themeButton.classList[selectedIcon === 'bx-moon' ? 'add' : 'remove'](iconTheme)
80 | }
81 |
82 | // Activate / deactivate the theme manually with the button
83 | themeButton.addEventListener('click', () => {
84 | // Add or remove the dark / icon theme
85 | document.body.classList.toggle(darkTheme)
86 | themeButton.classList.toggle(iconTheme)
87 | // We save the theme and the current icon that the user chose
88 | localStorage.setItem('selected-theme', getCurrentTheme())
89 | localStorage.setItem('selected-icon', getCurrentIcon())
90 | })
91 |
92 | /*==================== SCROLL REVEAL ANIMATION ====================*/
93 | const sr = ScrollReveal({
94 | origin: 'top',
95 | distance: '30px',
96 | duration: 2000,
97 | reset: true
98 | });
99 |
100 | sr.reveal(`.home__data, .home__img,
101 | .about__data, .about__img,
102 | .services__content, .menu__content,
103 | .app__data, .app__img,
104 | .contact__data, .contact__button,
105 | .footer__content`, {
106 | interval: 200
107 | })
--------------------------------------------------------------------------------
/web.css:
--------------------------------------------------------------------------------
1 | /*===== GOOGLE FONTS =====*/
2 | @import url("https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600&display=swap");
3 |
4 | /*===== VARIABLES CSS =====*/
5 | :root {
6 | --header-height: 3rem;
7 |
8 | /*========== Colors ==========*/
9 | --first-color: #069C54;
10 | --first-color-alt: #048654;
11 | --title-color: #393939;
12 | --text-color: #707070;
13 | --text-color-light: #A6A6A6;
14 | --body-color: #FBFEFD;
15 | --container-color: #FFFFFF;
16 |
17 | /*========== Font and typography ==========*/
18 | --body-font: 'Poppins', sans-serif;
19 | --biggest-font-size: 2.25rem;
20 | --h1-font-size: 1.5rem;
21 | --h2-font-size: 1.25rem;
22 | --h3-font-size: 1rem;
23 | --normal-font-size: .938rem;
24 | --small-font-size: .813rem;
25 | --smaller-font-size: .75rem;
26 |
27 | /*========== Font weight ==========*/
28 | --font-medium: 500;
29 | --font-semi-bold: 600;
30 |
31 | /*========== Margenes ==========*/
32 | --mb-1: .5rem;
33 | --mb-2: 1rem;
34 | --mb-3: 1.5rem;
35 | --mb-4: 2rem;
36 | --mb-5: 2.5rem;
37 | --mb-6: 3rem;
38 |
39 | /*========== z index ==========*/
40 | --z-tooltip: 10;
41 | --z-fixed: 100;
42 | }
43 |
44 | @media screen and (min-width: 768px){
45 | :root{
46 | --biggest-font-size: 4rem;
47 | --h1-font-size: 2.25rem;
48 | --h2-font-size: 1.5rem;
49 | --h3-font-size: 1.25rem;
50 | --normal-font-size: 1rem;
51 | --small-font-size: .875rem;
52 | --smaller-font-size: .813rem;
53 | }
54 | }
55 |
56 | /*========== BASE ==========*/
57 | *,::before,::after{
58 | box-sizing: border-box;
59 | }
60 |
61 | html{
62 | scroll-behavior: smooth;
63 | }
64 |
65 | /*========== Variables Dark theme ==========*/
66 | body.dark-theme{
67 | --title-color: #F1F3F2;
68 | --text-color: #C7D1CC;
69 | --body-color: #1D2521;
70 | --container-color: #27302C;
71 | }
72 |
73 | /*========== Button Dark/Light ==========*/
74 | .change-theme{
75 | position: absolute;
76 | right: 1rem;
77 | top: 1.8rem;
78 | color: var(--text-color);
79 | font-size: 1rem;
80 | cursor: pointer;
81 | }
82 |
83 | body{
84 | margin: var(--header-height) 0 0 0;
85 | font-family: var(--body-font);
86 | font-size: var(--normal-font-size);
87 | background-color: var(--body-color);
88 | color: var(--text-color);
89 | line-height: 1.6;
90 | }
91 |
92 | h1,h2,h3,p,ul{
93 | margin: 0;
94 | }
95 |
96 | ul{
97 | padding: 0;
98 | list-style: none;
99 | }
100 |
101 | a{
102 | text-decoration: none;
103 | }
104 |
105 | img{
106 | max-width: 100%;
107 | height: auto;
108 | }
109 |
110 | /*========== CLASS CSS ==========*/
111 | .section{
112 | padding: 4rem 0 2rem;
113 | }
114 |
115 | .section-title, .section-subtitle{
116 | text-align: center;
117 | }
118 |
119 | .section-title{
120 | font-size: var(--h1-font-size);
121 | color: var(--title-color);
122 | margin-bottom: var(--mb-3);
123 | }
124 |
125 | .section-subtitle{
126 | display: block;
127 | color: var(--first-color);
128 | font-weight: var(--font-medium);
129 | margin-bottom: var(--mb-1);
130 | }
131 |
132 | /*========== LAYOUT ==========*/
133 | .bd-container{
134 | max-width: 960px;
135 | width: calc(100% - 2rem);
136 | margin-left: var(--mb-2);
137 | margin-right: var(--mb-2);
138 | }
139 |
140 | .bd-grid{
141 | display: grid;
142 | gap: 1.5rem;
143 | }
144 |
145 | .l-header{
146 | width: 100%;
147 | position: fixed;
148 | top: 0;
149 | left: 0;
150 | z-index: var(--z-fixed);
151 | background-color: var(--body-color);
152 | }
153 |
154 | /*========== NAV ==========*/
155 | .nav{
156 | max-width: 1024px;
157 | height: var(--header-height);
158 | display: flex;
159 | justify-content: space-between;
160 | align-items: center;
161 | }
162 |
163 | @media screen and (max-width: 768px){
164 | .nav__menu{
165 | position: fixed;
166 | top: -100%;
167 | left: 0;
168 | width: 100%;
169 | padding: 1.5rem 0 1rem;
170 | text-align: center;
171 | background-color: var(--body-color);
172 | transition: .4s;
173 | box-shadow: 0 4px 4px rgba(0,0,0,.1);
174 | border-radius: 0 0 1rem 1rem;
175 | z-index: var(--z-fixed);
176 | }
177 | }
178 |
179 | .nav__item{
180 | margin-bottom: var(--mb-2);
181 | }
182 |
183 | .nav__link, .nav__logo, .nav__toggle{
184 | color: var(--text-color);
185 | font-weight: var(--font-medium);
186 | }
187 |
188 | .nav__logo:hover{
189 | color: var(--first-color);
190 | }
191 |
192 | .nav__link{
193 | transition: .3s;
194 | }
195 |
196 | .nav__link:hover{
197 | color: var(--first-color);
198 | }
199 |
200 | .nav__toggle{
201 | font-size: 1.3rem;
202 | cursor: pointer;
203 | }
204 |
205 | /* Show menu */
206 | .show-menu{
207 | top: var(--header-height);
208 | }
209 |
210 | /* Active menu */
211 | .active-link{
212 | color: var(--first-color);
213 | }
214 |
215 | /* Change background header */
216 | .scroll-header{
217 | box-shadow: 0 2px 4px rgba(0,0,0,.1);
218 | }
219 |
220 | /* Scroll top */
221 | .scrolltop{
222 | position: fixed;
223 | right: 1rem;
224 | bottom: -20%;
225 | display: flex;
226 | justify-content: center;
227 | align-items: center;
228 | padding: .3rem;
229 | background: rgba(6,156,84,.5);
230 | border-radius: .4rem;
231 | z-index: var(--z-tooltip);
232 | transition: .4s;
233 | visibility: hidden;
234 | }
235 |
236 | .scrolltop:hover{
237 | background-color: var(--first-color-alt);
238 | }
239 |
240 | .scrolltop__icon{
241 | font-size: 1.8rem;
242 | color: var(--body-color);
243 | }
244 |
245 | /* Show scrolltop */
246 | .show-scroll{
247 | visibility: visible;
248 | bottom: 1.5rem;
249 | }
250 |
251 | /*========== HOME ==========*/
252 | .home__container{
253 | height: calc(100vh - var(--header-height));
254 | align-content: center;
255 | }
256 |
257 | .home__title{
258 | font-size: var(--biggest-font-size);
259 | color: var(--first-color);
260 | margin-bottom: var(--mb-1);
261 | }
262 |
263 | .home__subtitle{
264 | font-size: var(--h1-font-size);
265 | color: var(--title-color);
266 | margin-bottom: var(--mb-4);
267 | }
268 |
269 | .home__img{
270 | width: 300px;
271 | justify-self: center;
272 | }
273 |
274 | /*========== BUTTONS ==========*/
275 | .button{
276 | display: inline-block;
277 | background-color: var(--first-color);
278 | color: #FFF;
279 | padding: .75rem 1rem;
280 | border-radius: .5rem;
281 | transition: .3s;
282 | }
283 |
284 | .button:hover{
285 | background-color: var(--first-color-alt);
286 | }
287 |
288 | /*========== ABOUT ==========*/
289 | .about__data{
290 | text-align: center;
291 | }
292 |
293 | .about__description{
294 | margin-bottom: var(--mb-3);
295 | }
296 |
297 | .about__img{
298 | width: 280px;
299 | border-radius: .5rem;
300 | justify-self: center;
301 | }
302 |
303 | /*========== SERVICES ==========*/
304 | .services__container{
305 | row-gap: 2.5rem;
306 | grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
307 | }
308 |
309 | .services__content{
310 | text-align: center;
311 | }
312 |
313 | .services__img{
314 | width: 64px;
315 | height: 64px;
316 | fill: var(--first-color);
317 | margin-bottom: var(--mb-2);
318 | }
319 |
320 | .services__title{
321 | font-size: var(--h3-font-size);
322 | color: var(--title-color);
323 | margin-bottom: var(--mb-1);
324 | }
325 |
326 | .services__description{
327 | padding: 0 1.5rem;
328 | }
329 |
330 | /*========== MENU ==========*/
331 | .menu__container{
332 | grid-template-columns: repeat(2, 1fr);
333 | justify-content: center;
334 | }
335 |
336 | .menu__content{
337 | position: relative;
338 | display: flex;
339 | flex-direction: column;
340 | background-color: var(--container-color);
341 | border-radius: .5rem;
342 | box-shadow: 0 2px 4px rgba(3,74,40,.15);
343 | padding: .75rem;
344 | }
345 |
346 | .menu__img{
347 | width: 100px;
348 | align-self: center;
349 | margin-bottom: var(--mb-2);
350 | }
351 |
352 | .menu__name, .menu__preci{
353 | font-weight: var(--font-semi-bold);
354 | color: var(--title-color);
355 | }
356 |
357 | .menu__name{
358 | font-size: var(--normal-font-size);
359 | }
360 |
361 | .menu__detail, .menu__preci{
362 | font-size: var(--small-font-size);
363 | }
364 |
365 | .menu__detail{
366 | margin-bottom: var(--mb-1);
367 | }
368 |
369 | .menu__button{
370 | position: absolute;
371 | bottom: 0;
372 | right: 0;
373 | display: flex;
374 | padding: .625rem .813rem;
375 | border-radius: .5rem 0 .5rem 0;
376 | }
377 |
378 | /*========== APP ==========*/
379 | .app__data{
380 | text-align: center;
381 | }
382 |
383 | .app__description{
384 | margin-bottom: var(--mb-5);
385 | }
386 |
387 | .app__stores{
388 | margin-bottom: var(--mb-4);
389 | }
390 |
391 | .app__store{
392 | width: 120px;
393 | margin: 0 var(--mb-1);
394 | }
395 |
396 | .app__img{
397 | width: 230px;
398 | justify-self: center;
399 | }
400 |
401 | /*========== CONTACT ==========*/
402 | .contact__container{
403 | text-align: center;
404 | }
405 |
406 | .contact__description{
407 | margin-bottom: var(--mb-3);
408 | }
409 |
410 | /*========== FOOTER ==========*/
411 | .footer__container{
412 | grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
413 | row-gap: 2rem;
414 | }
415 |
416 | .footer__logo{
417 | font-size: var(--h3-font-size);
418 | color: var(--first-color);
419 | font-weight: var(--font-semi-bold);
420 | }
421 |
422 | .footer__description{
423 | display: block;
424 | font-size: var(--small-font-size);
425 | margin: .25rem 0 var(--mb-3);
426 | }
427 |
428 | .footer__social{
429 | font-size: 1.5rem;
430 | color: var(--title-color);
431 | margin-right: var(--mb-2);
432 | }
433 |
434 | .footer__title{
435 | font-size: var(--h2-font-size);
436 | color: var(--title-color);
437 | margin-bottom: var(--mb-2);
438 | }
439 |
440 | .footer__link{
441 | display: inline-block;
442 | color: var(--text-color);
443 | margin-bottom: var(--mb-1);
444 | }
445 |
446 | .footer__link:hover{
447 | color: var(--first-color);
448 | }
449 |
450 | .footer__copy{
451 | text-align: center;
452 | font-size: var(--small-font-size);
453 | color: var(--text-color-light);
454 | margin-top: 3.5rem;
455 | }
456 |
457 | /*========== MEDIA QUERIES ==========*/
458 | @media screen and (min-width: 576px){
459 | .home__container,
460 | .about__container,
461 | .app__container{
462 | grid-template-columns: repeat(2,1fr);
463 | align-items: center;
464 | }
465 |
466 | .about__data, .about__initial,
467 | .app__data, .app__initial,
468 | .contact__container, .contact__initial{
469 | text-align: initial;
470 | }
471 |
472 | .about__img, .app__img{
473 | width: 380px;
474 | order: -1;
475 | }
476 |
477 | .contact__container{
478 | grid-template-columns: 1.75fr 1fr;
479 | align-items: center;
480 | }
481 | .contact__button{
482 | justify-self: center;
483 | }
484 | }
485 |
486 | @media screen and (min-width: 768px){
487 | body{
488 | margin: 0;
489 | }
490 |
491 | .section{
492 | padding-top: 8rem;
493 | }
494 |
495 | .nav{
496 | height: calc(var(--header-height) + 1.5rem);
497 | }
498 | .nav__list{
499 | display: flex;
500 | }
501 | .nav__item{
502 | margin-left: var(--mb-5);
503 | margin-bottom: 0;
504 | }
505 | .nav__toggle{
506 | display: none;
507 | }
508 |
509 | .change-theme{
510 | position: initial;
511 | margin-left: var(--mb-2);
512 | }
513 |
514 | .home__container{
515 | height: 100vh;
516 | justify-items: center;
517 | }
518 |
519 | .services__container,
520 | .menu__container{
521 | margin-top: var(--mb-6);
522 | }
523 |
524 | .menu__container{
525 | grid-template-columns: repeat(3, 210px);
526 | column-gap: 4rem;
527 | }
528 | .menu__content{
529 | padding: 1.5rem;
530 | }
531 | .menu__img{
532 | width: 130px;
533 | }
534 |
535 | .app__store{
536 | margin: 0 var(--mb-1) 0 0;
537 | }
538 | }
539 |
540 | @media screen and (min-width: 960px){
541 | .bd-container{
542 | margin-left: auto;
543 | margin-right: auto;
544 | }
545 |
546 | .home__img{
547 | width: 500px;
548 | }
549 |
550 | .about__container,
551 | .app__container{
552 | column-gap: 7rem;
553 | }
554 | }
555 |
556 | /* For tall screens on mobiles y desktop*/
557 | @media screen and (min-height: 721px) {
558 | .home__container {
559 | height: 640px;
560 | }
561 | }
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | Responsive website food
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
Tasty food
51 |
Try the best food of
the week.
52 |
View Menu
53 |
54 |
55 |

56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
About us
64 |
We cook the best
tasty food
65 |
We cook the best food in the entire city, with excellent customer service, the best meals and at the best price, visit us.
66 |
Explore history
67 |
68 |
69 |

70 |
71 |
72 |
73 |
74 |
75 | Offering
76 | Our amazing services
77 |
78 |
79 |
80 |
141 |
Excellent food
142 |
We offer our clients excellent quality services for many years, with the best and delicious food in the city.
143 |
144 |
145 |
146 |
298 |
Fast food
299 |
We offer our clients excellent quality services for many years, with the best and delicious food in the city.
300 |
301 |
302 |
303 |
354 |
Delivery
355 |
We offer our clients excellent quality services for many years, with the best and delicious food in the city.
356 |
357 |
358 |
359 |
360 |
361 |
391 |
392 |
393 |
394 |
395 |
396 |
App
397 |
App is aviable
398 |
Find our application and download it, you can make reservations, food orders, see your deliveries on the way and much more.
399 |
400 |

401 |

402 |
403 |
404 |
405 |

406 |
407 |
408 |
409 |
410 |
423 |
424 |
425 |
426 |
471 |
472 |
473 |
474 |
475 |
476 |
477 |
478 |
--------------------------------------------------------------------------------