Quellcode durchsuchen

React Markup added (done)

vladislavaSim vor 1 Jahr
Ursprung
Commit
e5e9541542
58 geänderte Dateien mit 30512 neuen und 7 gelöschten Zeilen
  1. 10 7
      HW9/main.js
  2. 28 0
      ReactMarkup/.gitignore
  3. 1 0
      ReactMarkup/README.md
  4. 21 0
      ReactMarkup/index.html
  5. 15 0
      ReactMarkup/main.js
  6. 353 0
      ReactMarkup/normalize.css
  7. 28003 0
      ReactMarkup/package-lock.json
  8. 38 0
      ReactMarkup/package.json
  9. BIN
      ReactMarkup/public/favicon.ico
  10. 31 0
      ReactMarkup/public/index.html
  11. 25 0
      ReactMarkup/public/manifest.json
  12. 25 0
      ReactMarkup/src/App.js
  13. 8 0
      ReactMarkup/src/App.test.js
  14. 9 0
      ReactMarkup/src/components/Button.jsx
  15. 64 0
      ReactMarkup/src/components/Destinations.jsx
  16. 34 0
      ReactMarkup/src/components/Footer.jsx
  17. 13 0
      ReactMarkup/src/components/FooterItem.jsx
  18. 51 0
      ReactMarkup/src/components/FooterSection.jsx
  19. 26 0
      ReactMarkup/src/components/Guides.jsx
  20. 42 0
      ReactMarkup/src/components/Header.jsx
  21. 23 0
      ReactMarkup/src/components/Heading.jsx
  22. 11 0
      ReactMarkup/src/components/Li.jsx
  23. 9 0
      ReactMarkup/src/components/ReadMoreLink.jsx
  24. 26 0
      ReactMarkup/src/components/Section2.jsx
  25. 11 0
      ReactMarkup/src/components/SectionText.jsx
  26. 12 0
      ReactMarkup/src/components/SocialLogo.jsx
  27. 21 0
      ReactMarkup/src/components/SocialMedia.jsx
  28. 15 0
      ReactMarkup/src/components/Star.jsx
  29. 37 0
      ReactMarkup/src/components/Testimonials.jsx
  30. 35 0
      ReactMarkup/src/components/Trending.jsx
  31. 20 0
      ReactMarkup/src/components/TrendingCard.jsx
  32. BIN
      ReactMarkup/src/img/1.png
  33. BIN
      ReactMarkup/src/img/2.png
  34. BIN
      ReactMarkup/src/img/3.png
  35. BIN
      ReactMarkup/src/img/4.png
  36. BIN
      ReactMarkup/src/img/Thousand-012.png
  37. BIN
      ReactMarkup/src/img/Thousand-03.png
  38. 1 0
      ReactMarkup/src/img/bars-solid.svg
  39. BIN
      ReactMarkup/src/img/element.png
  40. BIN
      ReactMarkup/src/img/element2.png
  41. 1 0
      ReactMarkup/src/img/facebook.svg
  42. BIN
      ReactMarkup/src/img/image 12.png
  43. BIN
      ReactMarkup/src/img/image 13.png
  44. BIN
      ReactMarkup/src/img/image 14.png
  45. BIN
      ReactMarkup/src/img/image 15.png
  46. 1 0
      ReactMarkup/src/img/instagram.svg
  47. 1 0
      ReactMarkup/src/img/linkedin.svg
  48. BIN
      ReactMarkup/src/img/logo.png
  49. BIN
      ReactMarkup/src/img/photo.png
  50. BIN
      ReactMarkup/src/img/thousand-011.png
  51. 1 0
      ReactMarkup/src/img/twitter.svg
  52. 1 0
      ReactMarkup/src/img/user-solid.svg
  53. 1 0
      ReactMarkup/src/img/youtube.svg
  54. 727 0
      ReactMarkup/src/index.css
  55. 17 0
      ReactMarkup/src/index.js
  56. 13 0
      ReactMarkup/src/reportWebVitals.js
  57. 5 0
      ReactMarkup/src/setupTests.js
  58. 726 0
      ReactMarkup/styles.css

+ 10 - 7
HW9/main.js

@@ -1,21 +1,24 @@
-makeProfileTimer
 function makeProfileTimer() {
     let start = performance.now();
     return function() {
         let end = performance.now();
-        return `the code took ${end - start}ms`;
+        return end - start
     };
 }
 
 let timer = makeProfileTimer();
 
 alert("Замеряем время работы этого alert");
-alert(timer());
+alert(`This code took ${timer()}ms`);
 
 function makeSaver(data){
-    let newData = data()
+    let promptShowed = false;
+    let newData;
     return () => {
-         return newData
+        if(!promptShowed) {
+            promptShowed = true;
+            return newData = data()
+        }
     }
 }
 var saver = makeSaver(Math.random)
@@ -36,7 +39,7 @@ alert(`Привет ${nameSaver()}. Только что запустился pro
 alert(`Слушай, ${nameSaver()}, го пить пиво. Ведь prompt был только один раз`)
 
 let count = 5;
-function timer() {
+function timer2() {
     console.log(count);
     const timeout = setTimeout(() => {
         timer();
@@ -51,7 +54,7 @@ function timer() {
         console.log("поехали!");
     }
 }
-timer();
+timer2();
 
 
 

+ 28 - 0
ReactMarkup/.gitignore

@@ -0,0 +1,28 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+/node_modules
+/.pnp
+.pnp.js
+
+#custom
+.idea/
+HW4/.idea/
+HW5/
+
+# testing
+/coverage
+
+# production
+/build
+
+# misc
+.DS_Store
+.env.local
+.env.development.local
+.env.test.local
+.env.production.local
+
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*

+ 1 - 0
ReactMarkup/README.md

@@ -0,0 +1 @@
+# tour_And_Travel.github.io

+ 21 - 0
ReactMarkup/index.html

@@ -0,0 +1,21 @@
+<!--<!DOCTYPE html>-->
+<!--<html lang="en">-->
+<!--<head>-->
+<!--    <meta charset="UTF-8">-->
+<!--    <meta http-equiv="X-UA-Compatible" content="IE=edge">-->
+<!--    <meta name="viewport" content="width=device-width, initial-scale=1.0">-->
+<!--    <link rel="preconnect" href="https://fonts.googleapis.com">-->
+<!--    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>-->
+<!--    <link rel="preconnect" href="https://fonts.googleapis.com">-->
+<!--    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>-->
+<!--    <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Mulish:wght@300;400&family=Playfair+Display:wght@700&display=swap" rel="stylesheet">-->
+<!--    <link rel="stylesheet" href="normalize.css">-->
+<!--    <link rel="stylesheet" href="styles.css">-->
+<!--    <title>Tour and Travel</title>-->
+<!--</head>-->
+<!--<body>-->
+
+<!--    <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>-->
+<!--    <script src="./main.js"></script>-->
+<!--</body>-->
+<!--</html>-->

+ 15 - 0
ReactMarkup/main.js

@@ -0,0 +1,15 @@
+// $(document).ready(function() {
+//     $('.menu-burger-btn').click(function() {
+//         $('.menu-burger-btn').toggleClass('open-menu');
+//         $('.nav-list').toggleClass('open-menu');
+//         $('#shadow').toggleClass('active');
+//         $('body').toggleClass('modal-active');
+//     });
+// });
+//
+// $(document).ready(function() {
+//     $('#account-burger-btn').click(function() {
+//         $('#account-burger-btn').toggleClass('open-menu');
+//         $('.account').toggleClass('open-menu');
+//     });
+// });

+ 353 - 0
ReactMarkup/normalize.css

@@ -0,0 +1,353 @@
+/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
+
+/* Document
+   ========================================================================== */
+
+/**
+ * 1. Correct the line height in all browsers.
+ * 2. Prevent adjustments of font size after orientation changes in iOS.
+ */
+* {
+  box-sizing: border-box;
+}
+
+
+ html {
+    line-height: 1.15; /* 1 */
+    -webkit-text-size-adjust: 100%; /* 2 */
+  }
+  
+  /* Sections
+     ========================================================================== */
+  
+  /**
+   * Remove the margin in all browsers.
+   */
+  
+  body {
+    margin: 0;
+  }
+  
+  /**
+   * Render the `main` element consistently in IE.
+   */
+  
+  main {
+    display: block;
+  }
+  
+  /**
+   * Correct the font size and margin on `h1` elements within `section` and
+   * `article` contexts in Chrome, Firefox, and Safari.
+   */
+  
+  h1 {
+    font-size: 2em;
+    margin: 0.67em 0;
+  }
+  
+  /* Grouping content
+     ========================================================================== */
+  
+  /**
+   * 1. Add the correct box sizing in Firefox.
+   * 2. Show the overflow in Edge and IE.
+   */
+  
+  hr {
+    box-sizing: content-box; /* 1 */
+    height: 0; /* 1 */
+    overflow: visible; /* 2 */
+  }
+  
+  /**
+   * 1. Correct the inheritance and scaling of font size in all browsers.
+   * 2. Correct the odd `em` font sizing in all browsers.
+   */
+  
+  pre {
+    font-family: monospace, monospace; /* 1 */
+    font-size: 1em; /* 2 */
+  }
+  
+  /* Text-level semantics
+     ========================================================================== */
+  
+  /**
+   * Remove the gray background on active links in IE 10.
+   */
+  
+  a {
+    background-color: transparent;
+  }
+  
+  /**
+   * 1. Remove the bottom border in Chrome 57-
+   * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
+   */
+  
+  abbr[title] {
+    border-bottom: none; /* 1 */
+    text-decoration: underline; /* 2 */
+    text-decoration: underline dotted; /* 2 */
+  }
+  
+  /**
+   * Add the correct font weight in Chrome, Edge, and Safari.
+   */
+  
+  b,
+  strong {
+    font-weight: bolder;
+  }
+  
+  /**
+   * 1. Correct the inheritance and scaling of font size in all browsers.
+   * 2. Correct the odd `em` font sizing in all browsers.
+   */
+  
+  code,
+  kbd,
+  samp {
+    font-family: monospace, monospace; /* 1 */
+    font-size: 1em; /* 2 */
+  }
+  
+  /**
+   * Add the correct font size in all browsers.
+   */
+  
+  small {
+    font-size: 80%;
+  }
+  
+  /**
+   * Prevent `sub` and `sup` elements from affecting the line height in
+   * all browsers.
+   */
+  
+  sub,
+  sup {
+    font-size: 75%;
+    line-height: 0;
+    position: relative;
+    vertical-align: baseline;
+  }
+  
+  sub {
+    bottom: -0.25em;
+  }
+  
+  sup {
+    top: -0.5em;
+  }
+  
+  /* Embedded content
+     ========================================================================== */
+  
+  /**
+   * Remove the border on images inside links in IE 10.
+   */
+  
+  img {
+    border-style: none;
+  }
+  
+  /* Forms
+     ========================================================================== */
+  
+  /**
+   * 1. Change the font styles in all browsers.
+   * 2. Remove the margin in Firefox and Safari.
+   */
+  
+  button,
+  input,
+  optgroup,
+  select,
+  textarea {
+    font-family: inherit; /* 1 */
+    font-size: 100%; /* 1 */
+    line-height: 1.15; /* 1 */
+    margin: 0; /* 2 */
+  }
+  
+  /**
+   * Show the overflow in IE.
+   * 1. Show the overflow in Edge.
+   */
+  
+  button,
+  input { /* 1 */
+    overflow: visible;
+  }
+  
+  /**
+   * Remove the inheritance of text transform in Edge, Firefox, and IE.
+   * 1. Remove the inheritance of text transform in Firefox.
+   */
+  
+  button,
+  select { /* 1 */
+    text-transform: none;
+  }
+  
+  /**
+   * Correct the inability to style clickable types in iOS and Safari.
+   */
+  
+  button,
+  [type="button"],
+  [type="reset"],
+  [type="submit"] {
+    -webkit-appearance: button;
+  }
+  
+  /**
+   * Remove the inner border and padding in Firefox.
+   */
+  
+  button::-moz-focus-inner,
+  [type="button"]::-moz-focus-inner,
+  [type="reset"]::-moz-focus-inner,
+  [type="submit"]::-moz-focus-inner {
+    border-style: none;
+    padding: 0;
+  }
+  
+  /**
+   * Restore the focus styles unset by the previous rule.
+   */
+  
+  button:-moz-focusring,
+  [type="button"]:-moz-focusring,
+  [type="reset"]:-moz-focusring,
+  [type="submit"]:-moz-focusring {
+    outline: 1px dotted ButtonText;
+  }
+  
+  /**
+   * Correct the padding in Firefox.
+   */
+  
+  fieldset {
+    padding: 0.35em 0.75em 0.625em;
+  }
+  
+  /**
+   * 1. Correct the text wrapping in Edge and IE.
+   * 2. Correct the color inheritance from `fieldset` elements in IE.
+   * 3. Remove the padding so developers are not caught out when they zero out
+   *    `fieldset` elements in all browsers.
+   */
+  
+  legend {
+    box-sizing: border-box; /* 1 */
+    color: inherit; /* 2 */
+    display: table; /* 1 */
+    max-width: 100%; /* 1 */
+    padding: 0; /* 3 */
+    white-space: normal; /* 1 */
+  }
+  
+  /**
+   * Add the correct vertical alignment in Chrome, Firefox, and Opera.
+   */
+  
+  progress {
+    vertical-align: baseline;
+  }
+  
+  /**
+   * Remove the default vertical scrollbar in IE 10+.
+   */
+  
+  textarea {
+    overflow: auto;
+  }
+  
+  /**
+   * 1. Add the correct box sizing in IE 10.
+   * 2. Remove the padding in IE 10.
+   */
+  
+  [type="checkbox"],
+  [type="radio"] {
+    box-sizing: border-box; /* 1 */
+    padding: 0; /* 2 */
+  }
+  
+  /**
+   * Correct the cursor style of increment and decrement buttons in Chrome.
+   */
+  
+  [type="number"]::-webkit-inner-spin-button,
+  [type="number"]::-webkit-outer-spin-button {
+    height: auto;
+  }
+  
+  /**
+   * 1. Correct the odd appearance in Chrome and Safari.
+   * 2. Correct the outline style in Safari.
+   */
+  
+  [type="search"] {
+    -webkit-appearance: textfield; /* 1 */
+    outline-offset: -2px; /* 2 */
+  }
+  
+  /**
+   * Remove the inner padding in Chrome and Safari on macOS.
+   */
+  
+  [type="search"]::-webkit-search-decoration {
+    -webkit-appearance: none;
+  }
+  
+  /**
+   * 1. Correct the inability to style clickable types in iOS and Safari.
+   * 2. Change font properties to `inherit` in Safari.
+   */
+  
+  ::-webkit-file-upload-button {
+    -webkit-appearance: button; /* 1 */
+    font: inherit; /* 2 */
+  }
+  
+  /* Interactive
+     ========================================================================== */
+  
+  /*
+   * Add the correct display in Edge, IE 10+, and Firefox.
+   */
+  
+  details {
+    display: block;
+  }
+  
+  /*
+   * Add the correct display in all browsers.
+   */
+  
+  summary {
+    display: list-item;
+  }
+  
+  /* Misc
+     ========================================================================== */
+  
+  /**
+   * Add the correct display in IE 10+.
+   */
+  
+  template {
+    display: none;
+  }
+  
+  /**
+   * Add the correct display in IE 10.
+   */
+  
+  [hidden] {
+    display: none;
+  }

Datei-Diff unterdrückt, da er zu groß ist
+ 28003 - 0
ReactMarkup/package-lock.json


+ 38 - 0
ReactMarkup/package.json

@@ -0,0 +1,38 @@
+{
+  "name": "travel",
+  "version": "0.1.0",
+  "private": true,
+  "dependencies": {
+    "@testing-library/jest-dom": "^5.16.4",
+    "@testing-library/react": "^13.2.0",
+    "@testing-library/user-event": "^13.5.0",
+    "react": "^18.1.0",
+    "react-dom": "^18.1.0",
+    "react-scripts": "5.0.1",
+    "web-vitals": "^2.1.4"
+  },
+  "scripts": {
+    "start": "react-scripts start",
+    "build": "react-scripts build",
+    "test": "react-scripts test",
+    "eject": "react-scripts eject"
+  },
+  "eslintConfig": {
+    "extends": [
+      "react-app",
+      "react-app/jest"
+    ]
+  },
+  "browserslist": {
+    "production": [
+      ">0.2%",
+      "not dead",
+      "not op_mini all"
+    ],
+    "development": [
+      "last 1 chrome version",
+      "last 1 firefox version",
+      "last 1 safari version"
+    ]
+  }
+}

BIN
ReactMarkup/public/favicon.ico


+ 31 - 0
ReactMarkup/public/index.html

@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <link rel="preconnect" href="https://fonts.googleapis.com">
+    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
+    <link rel="preconnect" href="https://fonts.googleapis.com">
+    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
+    <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Mulish:wght@300;400&family=Playfair+Display:wght@700&display=swap" rel="stylesheet">
+    <link rel="stylesheet" href="normalize.css">
+    <link rel="stylesheet" href="styles.css">
+    <title>Tour and Travel</title>
+  </head>
+  <body>
+    <noscript>You need to enable JavaScript to run this app.</noscript>
+    <div id="root"></div>
+    <!--
+      This HTML file is a template.
+      If you open it directly in the browser, you will see an empty page.
+
+      You can add webfonts, meta tags, or analytics to this file.
+      The build step will place the bundled scripts into the <body> tag.
+
+      To begin the development, run `npm start` or `yarn start`.
+      To create a production bundle, use `npm run build` or `yarn build`.
+    -->
+  <script src="main.js"></script>
+  </body>
+</html>

+ 25 - 0
ReactMarkup/public/manifest.json

@@ -0,0 +1,25 @@
+{
+  "short_name": "React App",
+  "name": "Create React App Sample",
+  "icons": [
+    {
+      "src": "favicon.ico",
+      "sizes": "64x64 32x32 24x24 16x16",
+      "type": "image/x-icon"
+    },
+    {
+      "src": "logo192.png",
+      "type": "image/png",
+      "sizes": "192x192"
+    },
+    {
+      "src": "logo512.png",
+      "type": "image/png",
+      "sizes": "512x512"
+    }
+  ],
+  "start_url": ".",
+  "display": "standalone",
+  "theme_color": "#000000",
+  "background_color": "#ffffff"
+}

+ 25 - 0
ReactMarkup/src/App.js

@@ -0,0 +1,25 @@
+import Header from "./components/Header";
+import Heading from "./components/Heading";
+import Section2 from "./components/Section2";
+import Destinations from "./components/Destinations";
+import Guides from "./components/Guides";
+import Testimonials from "./components/Testimonials";
+import Trending from "./components/Trending";
+import Footer from "./components/Footer";
+
+function App() {
+  return (
+    <div className="App">
+      <Header />
+        <Heading />
+        <Section2 />
+        <Destinations />
+        <Guides />
+        <Testimonials />
+        <Trending />
+        <Footer />
+    </div>
+  );
+}
+
+export default App;

+ 8 - 0
ReactMarkup/src/App.test.js

@@ -0,0 +1,8 @@
+import { render, screen } from '@testing-library/react';
+import App from './App';
+
+test('renders learn react link', () => {
+  render(<App />);
+  const linkElement = screen.getByText(/learn react/i);
+  expect(linkElement).toBeInTheDocument();
+});

+ 9 - 0
ReactMarkup/src/components/Button.jsx

@@ -0,0 +1,9 @@
+import React from 'react';
+
+const Button = ({buttonText, className}) => {
+    return (
+        <button className={className}>{buttonText}</button>
+    );
+};
+
+export default Button;

+ 64 - 0
ReactMarkup/src/components/Destinations.jsx

@@ -0,0 +1,64 @@
+import React from 'react';
+import img1 from "../img/1.png"
+import img2 from "../img/2.png"
+import img3 from "../img/3.png"
+import img4 from "../img/4.png"
+
+const Destinations = () => {
+    return (
+        <div className="destinations">
+            <div className="destinations-head">
+                <h4 className="destinations-title">Featured destinations</h4>
+                <a href="#" className="destinations-more">View all ></a>
+            </div>
+            <div className="destinations-inner">
+                <div className="destinations-item">
+                    <img src={img1} alt="picture of nature" />
+                        <div className="destinations-desc">
+                            <p className="destinations-desc-place">
+                                Raja Ampat
+                            </p>
+                            <p className="destinations-desc-country">
+                                Indonesia
+                            </p>
+                        </div>
+                </div>
+                <div className="destinations-item">
+                    <img src={img2} alt="picture of nature" />
+                        <div className="destinations-desc">
+                            <p className="destinations-desc-place">
+                                Fanjingshan
+                            </p>
+                            <p className="destinations-desc-country">
+                                China
+                            </p>
+                        </div>
+                </div>
+                <div className="destinations-item">
+                    <img src={img3} alt="picture of nature" />
+                        <div className="destinations-desc">
+                            <p className="destinations-desc-place">
+                                Vevey
+                            </p>
+                            <p className="destinations-desc-country">
+                                Switzerland
+                            </p>
+                        </div>
+                </div>
+                <div className="destinations-item">
+                    <img src={img4} alt="picture of nature" />
+                        <div className="destinations-desc">
+                            <p className="destinations-desc-place">
+                                Skadar
+                            </p>
+                            <p className="destinations-desc-country">
+                                Montenegro
+                            </p>
+                        </div>
+                </div>
+            </div>
+        </div>
+    );
+};
+
+export default Destinations;

+ 34 - 0
ReactMarkup/src/components/Footer.jsx

@@ -0,0 +1,34 @@
+import React from 'react';
+import logo from "../img/logo.png"
+import Li from "./Li";
+import FooterItem from "./FooterItem";
+import SocialLogo from "./SocialLogo";
+import SocialMedia from "./SocialMedia";
+import FooterSection from "./FooterSection";
+
+const Footer = () => {
+    return (
+        <footer>
+            <div className="footer-inner">
+                <div className="footer-info">
+                    <div>
+                        <img className="footer-logo" src={logo} alt="logo" />
+                    </div>
+                    <p className="footer-desc">Plan and book your perfect trip with
+                        expert advice, travel tips destination
+                        information from us</p>
+                    <p className="footer-copyright">©2020 Thousand Sunny. All rights reserved</p>
+                </div>
+                <div className="footer-columns">
+                    <FooterSection title='Destinations' />
+                    <FooterSection title='Shop' />
+                    <FooterSection title='Interests' />
+                </div>
+
+            </div>
+            <SocialMedia />
+        </footer>
+    );
+};
+
+export default Footer;

+ 13 - 0
ReactMarkup/src/components/FooterItem.jsx

@@ -0,0 +1,13 @@
+import React from 'react';
+
+const FooterItem = ({text}) => {
+    return (
+        <li>
+            <a href="#">
+                {text}
+            </a>
+        </li>
+    );
+};
+
+export default FooterItem;

+ 51 - 0
ReactMarkup/src/components/FooterSection.jsx

@@ -0,0 +1,51 @@
+import React from 'react';
+import FooterItem from "./FooterItem";
+
+const FooterSection = ({title}) => {
+    const renderLis = () => {
+        if (title === 'Destinations') {
+            return (
+                <>
+                    <FooterItem text='Africa'/>
+                    <FooterItem text='Antarctica'/>
+                    <FooterItem text='Asia'/>
+                    <FooterItem text='Europe'/>
+                    <FooterItem text='America'/>
+                </>
+            )
+        } else if (title === 'Shop') {
+            return (
+                <>
+                    <FooterItem text='Destination Guides'/>
+                    <FooterItem text='Pictorial & Gifts'/>
+                    <FooterItem text='Special Offers'/>
+                    <FooterItem text='Delivery Times'/>
+                    <FooterItem text='FAQs'/>
+                </>
+            )
+        } else if (title === 'Interests') {
+            return (
+                <>
+                    <FooterItem text='Adventure Travel'/>
+                    <FooterItem text='Art And Culture'/>
+                    <FooterItem text='Wildlife And Nature'/>
+                    <FooterItem text='Family Holidays'/>
+                    <FooterItem text='Food And Drink'/>
+                </>
+            )
+        }
+    }
+    let list = renderLis()
+            return (
+                <div className="footer-section">
+                    <p className="footer-title">
+                        {title}
+                    </p>
+                    <ul className="footer-list">
+                        {list}
+                    </ul>
+                </div>
+            );
+    };
+
+export default FooterSection;

+ 26 - 0
ReactMarkup/src/components/Guides.jsx

@@ -0,0 +1,26 @@
+import React from 'react';
+import thousand from "../img/Thousand-03.png"
+import SectionText from "./SectionText";
+
+const Guides = () => {
+    return (
+        <div className="guides">
+            <div className="guides-inner">
+                <h4 className="guides-title section2-inner-title">
+                    Guides by Thousand <br />
+                    Sunny
+                </h4>
+                <SectionText
+                    className='guides-text section2-inner-text'
+                    innerText=' Packed with tips and advice from our on-the-ground experts, our city guides app (iOS and Android) is
+                    the ultimate resource before and during a trip.' />
+                <a href="#" className="guides-button section2-inner-button">Download</a>
+            </div>
+            <div className="guides-img">
+                <img src={thousand} alt="picture" />
+            </div>
+        </div>
+    );
+};
+
+export default Guides;

+ 42 - 0
ReactMarkup/src/components/Header.jsx

@@ -0,0 +1,42 @@
+import React from 'react';
+import logo from '../img/logo.png'
+import Button from "./Button";
+import Li from "./Li";
+
+const Header = () => {
+    return (
+        <header>
+            <div id="shadow"></div>
+            <div>
+                <img className="logo" src={logo} alt="logo" />
+            </div>
+            <nav>
+                <ul className="nav-list">
+                    <li className="nav-item">
+                        <div className="menu-burger-btn">
+                            <span></span>
+                        </div>
+                    </li>
+                    <Li innerText='Home' />
+                    <Li innerText='Destinations' />
+                    <Li innerText='About' />
+                    <Li innerText='Partner' />
+                    <li className="nav-item hide">
+                        <div className="account">
+                           <Button buttonText='Log in' className='login' />
+                           <Button buttonText='Register' />
+                        </div>
+                    </li>
+                </ul>
+                <div className="header-right">
+                    <div className="account">
+                        <Button buttonText='Log in' className='login' />
+                        <Button buttonText='Register' className='heading-box-button'/>
+                    </div>
+                </div>
+            </nav>
+        </header>
+    );
+};
+
+export default Header;

+ 23 - 0
ReactMarkup/src/components/Heading.jsx

@@ -0,0 +1,23 @@
+import React from 'react';
+import thousand from "../img/thousand-011.png"
+import Button from "./Button";
+import SectionText from "./SectionText";
+
+const Heading = () => {
+    return (
+        <div className="heading">
+            <div className="heading-box">
+                <h4 className="heading-box-title">
+                    Explore and Travel
+                </h4>
+                <SectionText className='heading-box-text' innerText='Holiday Finder'/>
+               <Button buttonText='Explore' className='heading-box-button'/>
+            </div>
+            <div className="heading-img-box">
+                <img src={thousand} alt="picture" width="687px" height="654px" />
+            </div>
+        </div>
+    );
+};
+
+export default Heading;

+ 11 - 0
ReactMarkup/src/components/Li.jsx

@@ -0,0 +1,11 @@
+import React from 'react';
+
+const Li = ({innerText}) => {
+    return (
+        <li className="nav-item">
+            <a href="#">{innerText}</a>
+        </li>
+    );
+};
+
+export default Li;

+ 9 - 0
ReactMarkup/src/components/ReadMoreLink.jsx

@@ -0,0 +1,9 @@
+import React from 'react';
+
+const ReadMoreLink = () => {
+    return (
+        <a href="#" className="trending-link">Read more</a>
+    );
+};
+
+export default ReadMoreLink;

+ 26 - 0
ReactMarkup/src/components/Section2.jsx

@@ -0,0 +1,26 @@
+import React from 'react';
+import thousand from "../img/Thousand-012.png"
+import SectionText from "./SectionText";
+
+const Section2 = () => {
+    return (
+        <div className="section2">
+            <div className="section2-img">
+                <img src={thousand} alt="picture" width="659px" height="534px" />
+            </div>
+            <div className="section2-inner">
+                <h4 className="section2-inner-title">
+                    A new way to explore the world
+                </h4>
+                    <SectionText className='section2-inner-text' innerText=' For decades travellers have reached for Lonely Planet books when looking to plan and execute their
+                    perfect
+                    trip, but now, they can also let Lonely Planet Experiences lead the way' />
+                <a href="#" className="section2-inner-button">
+                    Learn more
+                </a>
+            </div>
+        </div>
+    );
+};
+
+export default Section2;

+ 11 - 0
ReactMarkup/src/components/SectionText.jsx

@@ -0,0 +1,11 @@
+import React from 'react';
+
+const SectionText = ({className, innerText}) => {
+    return (
+        <p className={className}>
+            {innerText}
+        </p>
+    );
+};
+
+export default SectionText;

+ 12 - 0
ReactMarkup/src/components/SocialLogo.jsx

@@ -0,0 +1,12 @@
+import React from 'react';
+
+const SocialLogo = ({img}) => {
+
+    return (
+        <a href="#" className="media-link">
+                <img src={img} />
+        </a>
+    );
+};
+
+export default SocialLogo;

+ 21 - 0
ReactMarkup/src/components/SocialMedia.jsx

@@ -0,0 +1,21 @@
+import React from 'react';
+import SocialLogo from "./SocialLogo";
+import twitter from '../img/twitter.svg'
+import facebook from '../img/facebook.svg'
+import instagram from '../img/instagram.svg'
+import linkedin from '../img/linkedin.svg'
+import youtube from '../img/youtube.svg'
+
+const SocialMedia = () => {
+    return (
+        <div className="footer-social-media">
+            <SocialLogo img={twitter}/>
+            <SocialLogo img={facebook}/>
+            <SocialLogo img={instagram}/>
+            <SocialLogo img={linkedin}/>
+            <SocialLogo img={youtube}/>
+        </div>
+    );
+};
+
+export default SocialMedia;

+ 15 - 0
ReactMarkup/src/components/Star.jsx

@@ -0,0 +1,15 @@
+import React from 'react';
+
+const Star = () => {
+    return (
+        <div className="star">
+            <svg width="26" height="24" viewBox="0 0 26 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+                <path
+                    d="M12.5854 20.0488L18.5854 23.7073C19.7561 24.439 21.0732 23.4146 20.7805 22.0976L19.1708 15.2195L24.5854 10.5366C25.6098 9.65854 25.0244 8.04878 23.7073 7.90244L16.683 7.31707L13.9025 0.878049C13.3171 -0.292683 11.7073 -0.292683 11.122 0.878049L8.34149 7.46341L1.3171 8.04878C2.73548e-05 8.04878 -0.438997 9.65854 0.439052 10.5366L5.85369 15.2195L4.24393 22.0976C3.95125 23.4146 5.26832 24.2927 6.43905 23.7073L12.5854 20.0488Z"
+                    fill="#FFBB0C"/>
+            </svg>
+        </div>
+    );
+};
+
+export default Star;

+ 37 - 0
ReactMarkup/src/components/Testimonials.jsx

@@ -0,0 +1,37 @@
+import React from 'react';
+import man from "../img/photo.png"
+import Star from "./Star";
+
+const Testimonials = () => {
+    return (
+        <div className="testimonials">
+            <div className="testimonials-inner">
+                <h4 className="testimonials-title">
+                    Testimonials
+                </h4>
+                <div className="rating">
+                    <Star />
+                    <Star />
+                    <Star />
+                    <Star />
+                    <Star />
+                </div>
+                <p className="testimonials-quote">
+                    “Quisque in lacus a urna fermentum euismod. Integer mi nibh, dapibus ac scelerisque eu, facilisis
+                    quis purus. Morbi blandit sit amet turpis nec”
+                </p>
+                <p className="testimonials-name">
+                    Edward Newgate
+                </p>
+                <p className="testimonials-workplace">
+                    Founder Circle
+                </p>
+            </div>
+            <div className="testimonials-img">
+                <img src={man} alt="portrait of a man" />
+            </div>
+        </div>
+    );
+};
+
+export default Testimonials;

+ 35 - 0
ReactMarkup/src/components/Trending.jsx

@@ -0,0 +1,35 @@
+import React from 'react';
+import ReadMoreLink from "./ReadMoreLink";
+import TrendingCard from "./TrendingCard";
+
+const Trending = () => {
+    return (
+        <div className="trending">
+            <div className="destinations-head">
+                <h4 className="destinations-title">Trending stories</h4>
+                <a href="#" className="destinations-more">View all ></a>
+            </div>
+            <div className="trending-blogs">
+                <TrendingCard cardImg='trending-img1'
+                              cardTitle='The many benefits of taking a healing holiday'
+                              cardText='Helaing holidays’ are on the rise
+                        tohelp maximise your health and happines...' />
+                <TrendingCard cardImg='trending-img2'
+                              cardTitle='The best Kyoto restaurant to try Japanese food'
+                              cardText=' From tofu to teahouses, here’s our guide to Kyoto’s best restaurants
+                       to visit...' />
+                <TrendingCard cardImg='trending-img3'
+                              cardTitle='Skip Chichen Itza and head to this remote Yucatan'
+                              cardText=' It’s remote and challenging to get,
+                        but braving the jungle and exploring
+                       these ruins without the...' />
+                <TrendingCard cardImg='trending-img4'
+                              cardTitle='Surf’s up at these beginner spots around the world'
+                              cardText=' If learning to surf has in on your to-
+                       do list for a while, the good news' />
+            </div>
+        </div>
+    );
+};
+
+export default Trending;

+ 20 - 0
ReactMarkup/src/components/TrendingCard.jsx

@@ -0,0 +1,20 @@
+import React from 'react';
+import ReadMoreLink from "./ReadMoreLink";
+
+const TrendingCard = ({cardTitle, cardText, cardImg}) => {
+    const classes = `trending-img ${cardImg}`
+    return (
+        <div className="trending-item">
+            <div className={classes}/>
+            <h4 className="trending-title">
+                {cardTitle}
+            </h4>
+            <p className="trending-text">
+                {cardText}
+            </p>
+            <ReadMoreLink />
+        </div>
+    );
+};
+
+export default TrendingCard;

BIN
ReactMarkup/src/img/1.png


BIN
ReactMarkup/src/img/2.png


BIN
ReactMarkup/src/img/3.png


BIN
ReactMarkup/src/img/4.png


BIN
ReactMarkup/src/img/Thousand-012.png


BIN
ReactMarkup/src/img/Thousand-03.png


Datei-Diff unterdrückt, da er zu groß ist
+ 1 - 0
ReactMarkup/src/img/bars-solid.svg


BIN
ReactMarkup/src/img/element.png


BIN
ReactMarkup/src/img/element2.png


Datei-Diff unterdrückt, da er zu groß ist
+ 1 - 0
ReactMarkup/src/img/facebook.svg


BIN
ReactMarkup/src/img/image 12.png


BIN
ReactMarkup/src/img/image 13.png


BIN
ReactMarkup/src/img/image 14.png


BIN
ReactMarkup/src/img/image 15.png


Datei-Diff unterdrückt, da er zu groß ist
+ 1 - 0
ReactMarkup/src/img/instagram.svg


Datei-Diff unterdrückt, da er zu groß ist
+ 1 - 0
ReactMarkup/src/img/linkedin.svg


BIN
ReactMarkup/src/img/logo.png


BIN
ReactMarkup/src/img/photo.png


BIN
ReactMarkup/src/img/thousand-011.png


Datei-Diff unterdrückt, da er zu groß ist
+ 1 - 0
ReactMarkup/src/img/twitter.svg


+ 1 - 0
ReactMarkup/src/img/user-solid.svg

@@ -0,0 +1 @@
+<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="user" class="svg-inline--fa fa-user fa-w-14" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z"></path></svg>

+ 1 - 0
ReactMarkup/src/img/youtube.svg

@@ -0,0 +1 @@
+<svg width="10" height="22" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M6.647 7.21V5.305c0-.286.02-.512.04-.655a.975.975 0 0 1 .18-.45c.1-.144.239-.247.438-.308.2-.061.48-.082.819-.082H9.98V0H7.006C5.289 0 4.072.41 3.333 1.25c-.738.84-1.117 2.048-1.117 3.687V7.21H0V11h2.216v11h4.43V11h2.955L10 7.21H6.647Z" fill="#000"/></svg>

+ 727 - 0
ReactMarkup/src/index.css

@@ -0,0 +1,727 @@
+* {
+    box-sizing: border-box;
+}
+body {
+    padding: 15px;
+}
+body.modal-active {
+    /* @todo */
+    overflow: hidden;
+}
+a {
+    text-decoration: none;
+}
+img {
+    max-width: 100%;
+    height: auto;
+}
+#shadow {
+    /* @todo */
+    display: none;
+}
+#shadow.active {
+    /* @todo */
+    display: block;
+    background-color: rgba(0, 0, 0, 0.5);
+    position: fixed;
+    z-index: 2;
+    width: 100vw;
+    height: 100vh;
+    top: 0;
+    left: 0;
+}
+header {
+    height: 60px;
+    max-width: 1300px;
+    margin: 35px auto 110px;
+    display: flex;
+    justify-content: space-between;
+}
+.logo {
+    width: 41px;
+    height: 41px;
+}
+nav {
+    display: flex;
+    align-items: flex-start;
+}
+.nav-list {
+    display: flex;
+    justify-content: space-between;
+    margin-right: 34px;
+}
+.nav-item {
+    padding-left: 34px;
+    list-style: none;
+}
+.nav-item a {
+    font-family: 'Inter', sans-serif;
+    font-size: 16px;
+    font-weight: 400;
+    color:#B8BECD;
+}
+.nav-item a:hover {
+    color: black;
+}
+.nav-item:first-child {
+    padding-left: 0;
+}
+.nav-item .menu-burger-btn {
+    /* @todo */
+    margin-left: 0;
+    cursor: pointer;
+}
+.nav-item.hide {
+    display: none;
+}
+.header-right {
+    display: flex;
+    min-width: 80px;
+    justify-content: space-between;
+    align-items: center;
+}
+#account-burger-btn,
+.menu-burger-btn {
+    /* background: transparent;
+    border: none; */
+    width: 40px;
+    height: 35px;
+    /* display: flex;
+    justify-content: center;
+    align-items: center; */
+    position: relative;
+    display: block;
+}
+.account {
+    display: flex;
+    align-items: baseline;
+    justify-content: space-between;
+    width: 282px;
+}
+.account button {
+    width: 132px;
+    height: 44px;
+    border-radius: 8px;
+    font-size: 15px;
+    font-weight: 500;
+    font-family: Inter;
+}
+.nav-burger {
+    display: flex;
+}
+
+.login {
+    border: 1px solid #FB8F1D;
+    color: #FB8F1D;
+    background: white;
+}
+.register {
+    background: #FB8F1D;
+    color: white;
+    border: none;
+}
+.heading {
+    max-width: 1300px;
+    margin: 0 auto 15%;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+}
+.heading-box {
+    margin-right: 20px;
+}
+.heading-box-title {
+    max-width: 370px;
+    font-family: Playfair Display;
+    font-size: 64px;
+    font-weight: 700;
+    margin: 0 0 74px;
+    color: #202336;
+}
+.heading-box-text {
+    font-family: Inter;
+    font-size: 22px;
+    font-weight: 600;
+    color: #202336;
+    margin-bottom: 33px;
+}
+.heading-box-button {
+    width: 187px;
+    height: 52px;
+    background-color: #FB8F1D;
+    border-radius: 8px;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    color: white;
+    font-family: Mulish;
+    font-size: 17px;
+    font-weight: 700;
+    border: none;
+}
+.heading-img-box {
+    width: 50%;
+    max-width: 100%;
+}
+.section2 {
+    display: flex;
+    justify-content: space-between;
+    margin: 0 auto 298px;
+    max-width: 1272px;
+    padding: 0 15px;
+}
+.section2-img {
+    margin-right: 30px;
+}
+.section2-inner-title {
+    font-family: Playfair Display;
+    font-size: 36px;
+    font-weight: 700;
+    color: #000000;
+    max-width: 481px;
+    margin: 96px auto 20px;
+}
+.section2-inner-text {
+    font-family: Mulish;
+    font-size: 17px;
+    font-weight: 300;
+    max-width: 450px;
+    color: #7D7987;
+    margin: 0 0 33px;
+}
+.section2-inner-button {
+    width: 164px;
+    height: 48px;
+    background-color: #FB8F1D;
+    border-radius: 8px;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    color: white;
+    font-family: Inter;
+    font-size: 16px;
+    font-weight: 600;
+}
+.destinations {
+    max-width: 1150px;
+    padding: 0 15px;
+    margin: 0 auto 15%;
+}
+
+.destinations-head {
+    display: flex;
+    width: 100%;
+    justify-content: space-between;
+    align-items: flex-start;
+    margin-bottom: 56px;
+}
+.destinations-title {
+    font-family: Playfair Display;
+    font-size: 36px;
+    font-weight: 700;
+    line-height: 50px;
+    color: black;
+    margin: 0;
+}
+.destinations-more {
+    font-family: Inter;
+    font-size: 17px;
+    font-weight: 600;
+    line-height: 60px;
+    color: #FB8F1D;
+}
+.destinations-inner {
+    display: flex;
+    justify-content: space-between;
+}
+.destinations-item {
+    position: relative;
+}
+.destinations-item img {
+    width: 261px; 
+    height: 332px;
+    margin-right: 5px;
+}
+.destinations-item img:last-child {
+    margin: 0;
+}
+.destinations-desc {
+    width: 120px;
+    height: 56px;
+    position: absolute;
+    bottom: 3px;
+    left: -1px;
+    background-color: white;
+    display: flex;
+    flex-direction: column;
+    justify-content: flex-end;
+
+}
+.destinations-desc-place {
+    font-family: Inter;
+    font-size: 17px;
+    font-weight: 600;
+    line-height: 25px;
+    color: #042521;
+    margin: 0;
+}
+.destinations-desc-country {
+    font-family: Inter;
+    font-size: 15px;
+    font-weight: 500;
+    line-height: 24px;
+    color: #7D7987;
+    margin: 0;
+}
+.guides {
+    max-width: 1210px;
+    padding: 0 15px;
+    margin: 0 auto 15%;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+}
+.guides-img {
+    max-width: 100%;
+}
+.testimonials {
+    max-width: 1201px;
+    padding: 0 15px;
+    margin: 0 auto 10%;
+    display: flex;
+    justify-content: space-between;
+}
+.testimonials-title {
+    font-family: Playfair Display;
+    font-size: 36px;
+    font-weight: 700;
+    line-height: 50px;
+    color: black;
+    margin: 0 0 145px;
+}
+.rating {
+    display: flex;
+    width: 180px;
+    justify-content: space-between;
+    margin-bottom: 30px;
+}
+.testimonials-quote {
+    max-width: 450px;
+    font-family: Mulish;
+    font-size: 24px;
+    font-weight: 400;
+    line-height: 36px;
+    margin: 0 0 40px;
+}
+.testimonials-name {
+    font-family: Inter;
+    font-size: 22px;
+    font-weight: 700;
+    line-height: 48px;
+    margin: 0;
+}
+.testimonials-workplace {
+    font-family: Inter;
+    font-size: 18px;
+    font-weight: 400;
+    line-height: 48px;
+    color: #000000D9;
+    margin: 0;
+}
+.testimonials-img {
+    width: 384px;
+    position: relative;
+    max-width: 100%;
+}
+.testimonials-img::before {
+    content: '';
+    background-image: url(./img/element.png);
+    position: absolute;
+    bottom: -13px;
+    left: -15px;
+    display: block;
+    width: 32px;
+    height: 32px;
+}
+.testimonials-img::after {
+    content: '';
+    background-image: url(./img/element2.png);
+    position: absolute;
+    top: -13px;
+    right: -15px;
+    display: block;
+    width: 42px;
+    height: 42px;
+    z-index: -10;
+}
+
+.trending {
+    max-width: 1262px;
+    padding: 0 15px;
+    margin: 0 auto 10%;
+}
+.trending-blogs {
+    display: flex;
+    justify-content: space-between;
+}
+.trending-item {
+    width: 260px;
+    margin-right: 10px;
+}
+.trending-item:last-child{
+    margin-right: 0;
+}
+.trending-img{
+    width: 100%;
+    height: 230px;
+    background-size: cover;
+    margin: 0 0 10px;
+}
+.trending-img1 {
+    background-image: url(img/image\ 12.png);
+}
+.trending-img2 {
+    background-image: url(img/image\ 13.png);
+}
+.trending-img3 {
+    background-image: url(img/image\ 14.png);
+}
+.trending-img4 {
+    background-image: url(img/image\ 15.png);
+}
+.trending-title {
+    font-family: Inter;
+    font-size: 19px;
+    font-weight: 700;
+    line-height: 30px;
+    margin: 0 0 13px;
+}
+.trending-text {
+    font-family: Inter;
+    font-size: 15px;
+    font-weight: 400;
+    line-height: 26px;
+    color: #7D7987;
+    margin: 0 0 23px;
+}
+.trending-link {
+    font-family: Inter;
+    font-size: 15px;
+    font-weight: 600;
+    color: #FB8F1D;
+}
+footer {
+    width: 100%;
+    background: #F9F9FB;
+    position: absolute;
+    z-index: 5;
+    left: 0;
+    padding: 0 15px;
+}
+.footer-inner {
+    max-width: 1220px;
+    margin: 0 auto 30px;
+    display: flex;
+    padding: 70px 0 80px;
+    font-family: Mulish;
+    display: flex;
+    justify-content: space-between;
+    border-bottom: 1px solid #C4C4C4;
+}
+.footer-columns {
+    display: flex;
+    width: 60%;
+    justify-content: space-around;
+    margin-right: 5%;
+}
+.footer-logo {
+    width: 44px;
+    height: 44px;
+    margin: 0 0 26px;
+}
+.footer-desc {
+    font-size: 18px;
+    font-weight: 300;
+    line-height: 28px;
+    color: #848484;
+    margin: 0 0 55px;
+    max-width: 391px;
+}
+.footer-copyright {
+    font-size: 17px;
+    font-weight: 300;
+    line-height: 28px;
+    color: #848484;
+}
+.footer-section {
+    margin-right: 15px;
+}
+
+.footer-title {
+    font-family: Mulish;
+    font-size: 19px;
+    font-weight: 700;
+    line-height: 60px;
+    margin: 0 0 10px;
+}
+.footer-list {
+    font-family: Mulish;
+    font-size: 18px;
+    font-weight: 300;
+    line-height: 38px;
+    list-style: none;
+    padding: 0;
+}
+.footer-list a {
+    color: #848484;
+}
+.footer-social-media {
+    max-width: 248px;
+    display: flex;
+    justify-content: space-between;
+    align-items: baseline;
+    margin: 0 auto;
+}
+
+
+
+@media screen and (max-width: 1130px) {
+    .testimonials {
+        flex-flow: column wrap;
+        align-items: center;
+    }
+    .testimonials-inner{
+        margin-bottom: 20px;
+    }
+    .destinations-inner {
+        width: 80%;
+        margin: 0 auto;
+        display: flex;
+        flex-wrap: wrap;
+        justify-content: space-around;
+    }
+    .destinations-item {
+        margin-bottom: 20px;
+    }
+}
+@media screen and (max-width: 1100px) {
+ .footer-inner{
+        flex-flow: column;
+        align-items: center;
+    }
+    .footer-columns {
+        display: flex;
+        justify-content: space-around;
+        width: 100%;
+    }
+}
+@media screen and (min-width: 795px) {
+    .menu-burger-btn {
+        display: none;
+    }
+    .nav-list {
+        padding-left: 10px;
+    }
+}
+@media screen and (max-width: 795px) {
+    .nav-list {
+        display: flex;
+        justify-content: flex-start;
+        flex-direction: column;
+        background: white;
+
+        /*width: 100%; @todo */
+        width: 50vw;
+        min-width: 250px;
+
+        padding: 0 25px 0 20px;
+        position: fixed;
+
+        top: 0;
+        /*top: 105px; @todo */
+
+        /*right: -100%; @todo */
+        right: -100vw;
+
+        transition: all 0.4s ease-in-out;
+        margin-top: 0;
+
+        height: 100vh; /* @todo  */
+        margin-right: 0; /* @todo */
+        margin-bottom: 0; /* @todo */
+        z-index: 10; /* @todo */
+    }
+    .nav-list.open-menu {
+        /*right: -18px; @todo */
+        right: 0;
+    }
+    .nav-item {
+        padding: 20px 0;
+    }
+    .nav-item a {
+        font-size: 20px;
+    }
+    .nav-item.hide {
+        display: flex;
+        min-height: 150px;
+    }
+    .nav-item.hide .account {
+        flex-direction: column;
+    }
+
+    .menu-burger-btn {
+        display: flex;
+        margin: 0 15px;
+    }
+    .menu-burger-btn::before,
+    .menu-burger-btn::after {
+        content: '';
+    }
+    .menu-burger-btn span,
+    .menu-burger-btn::before,
+    .menu-burger-btn::after {
+        position: absolute;
+        height: 4px;
+        width: 100%;
+        background: #202336;
+        margin: 0 auto;
+    }
+    .menu-burger-btn span {
+        top: 14px;
+    }
+    .menu-burger-btn::before {
+        top: 0;
+    }
+    .menu-burger-btn::after {
+        bottom: 5px;
+    }
+    .menu-burger-btn.open-menu span {
+        opacity:0; 
+        transition: 0.5s; 
+    }
+    .menu-burger-btn.open-menu:before {
+        transform: rotate(45deg);
+        top: 16px;
+        transition: 0.4s;
+    }
+    .menu-burger-btn.open-menu:after {
+        transform: rotate(-45deg);
+        bottom: 16px;
+        transition: 0.4s;
+    }
+    .header-right .account {
+        display: none;
+    }
+    header {
+        margin-bottom: 0;
+    }
+    header div {
+        display: inline;
+    }
+    .body {
+        padding-top: 70px; /* @todo */
+    }
+    header {
+        /* @todo */
+        height: auto;
+        position: fixed;
+        width: 100%;
+        background: rgba(255, 255, 255, 0.95);
+        top: 0;
+        margin-top: 0;
+        padding: 15px 30px;
+        z-index: 3;
+    }
+    .heading-box {
+        margin: 30px 0;
+    }
+    .heading-box-title {
+        margin-top: 25px;
+        font-size: 55px;
+        text-align: center;
+    }
+    .heading-box-text, 
+    .section2-inner-text,
+    .section2-inner-title,
+    .destinations-title,
+    .testimonials-title {
+        text-align: center;
+    }
+    .section2-inner-title {
+        margin-top: 15px;
+    }
+    .trending-blogs, .footer-inner{
+        flex-flow: wrap column;
+        align-items: center;
+    }
+    .destinations-inner,
+    .trending-blogs {
+        align-items: center;
+    }
+    .trending-item {
+        margin-bottom: 25px;
+    }
+    .guides-inner {
+        width: 100%;
+    }
+    .section2-inner-button, .heading-box-button {
+        margin: 0 auto;
+    }
+    .footer-section {
+        display: flex;
+        flex-direction: column;
+        align-items: center;
+    }
+    .footer-inner {
+        padding-top: 10px;
+        padding-bottom: 15px;
+        margin-bottom: 10px;
+    }
+    .heading-box, .guides-inner, .trending
+    , .testimonials, .testimonials-title, 
+    .destinations, .section2, .heading {
+        margin-bottom: 20px;
+    }
+    .footer-desc {
+        width: 100%;
+    }
+    .footer-title {
+        line-height: 0;
+    }
+    .footer-copyright {
+        margin-bottom: 30px;
+    }
+  }
+
+@media screen and (max-width: 600px) {
+    .burger-icon.user-icon {
+        display: flex;
+        margin: 0 15px;
+    }
+
+    .heading, .section2, .guides{
+      flex-flow: wrap column;
+    }
+
+    .heading-img-box, .footer-logo {
+      display: none;
+    }
+    .testimonials-quote {
+      font-size: 18px;
+    }
+    .heading-box-title, .destinations-head {
+      font-size: 40px;
+      margin-bottom: 15px;
+    }
+
+    .destinations-head,
+    .footer-columns {
+    display: block;
+    }
+}
+@media screen and (max-width: 390px) {
+    .destinations-item img{
+        width: auto;
+        height: auto;
+    }
+}

+ 17 - 0
ReactMarkup/src/index.js

@@ -0,0 +1,17 @@
+import React from 'react';
+import ReactDOM from 'react-dom/client';
+import './index.css';
+import App from './App';
+import reportWebVitals from './reportWebVitals';
+
+const root = ReactDOM.createRoot(document.getElementById('root'));
+root.render(
+  <React.StrictMode>
+    <App />
+  </React.StrictMode>
+);
+
+// If you want to start measuring performance in your app, pass a function
+// to log results (for example: reportWebVitals(console.log))
+// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
+reportWebVitals();

+ 13 - 0
ReactMarkup/src/reportWebVitals.js

@@ -0,0 +1,13 @@
+const reportWebVitals = onPerfEntry => {
+  if (onPerfEntry && onPerfEntry instanceof Function) {
+    import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
+      getCLS(onPerfEntry);
+      getFID(onPerfEntry);
+      getFCP(onPerfEntry);
+      getLCP(onPerfEntry);
+      getTTFB(onPerfEntry);
+    });
+  }
+};
+
+export default reportWebVitals;

+ 5 - 0
ReactMarkup/src/setupTests.js

@@ -0,0 +1,5 @@
+// jest-dom adds custom jest matchers for asserting on DOM nodes.
+// allows you to do things like:
+// expect(element).toHaveTextContent(/react/i)
+// learn more: https://github.com/testing-library/jest-dom
+import '@testing-library/jest-dom';

+ 726 - 0
ReactMarkup/styles.css

@@ -0,0 +1,726 @@
+* {
+    box-sizing: border-box;
+}
+body {
+    padding: 15px;
+}
+body.modal-active {
+    /* @todo */
+    overflow: hidden;
+}
+a {
+    text-decoration: none;
+}
+img {
+    max-width: 100%;
+    height: auto;
+}
+#shadow {
+    /* @todo */
+    display: none;
+}
+#shadow.active {
+    /* @todo */
+    display: block;
+    background-color: rgba(0, 0, 0, 0.5);
+    position: fixed;
+    z-index: 2;
+    width: 100vw;
+    height: 100vh;
+    top: 0;
+    left: 0;
+}
+header {
+    height: 60px;
+    max-width: 1300px;
+    margin: 35px auto 110px;
+    display: flex;
+    justify-content: space-between;
+}
+.logo {
+    width: 41px;
+    height: 41px;
+}
+nav {
+    display: flex;
+    align-items: flex-start;
+}
+.nav-list {
+    display: flex;
+    justify-content: space-between;
+    margin-right: 34px;
+}
+.nav-item {
+    padding-left: 34px;
+    list-style: none;
+}
+.nav-item a {
+    font-family: 'Inter', sans-serif;
+    font-size: 16px;
+    font-weight: 400;
+    color:#B8BECD;
+}
+.nav-item a:hover {
+    color: black;
+}
+.nav-item:first-child {
+    padding-left: 0;
+}
+.nav-item .menu-burger-btn {
+    /* @todo */
+    margin-left: 0;
+    cursor: pointer;
+}
+.nav-item.hide {
+    display: none;
+}
+.header-right {
+    display: flex;
+    min-width: 80px;
+    justify-content: space-between;
+    align-items: center;
+}
+#account-burger-btn,
+.menu-burger-btn {
+    /* background: transparent;
+    border: none; */
+    width: 40px;
+    height: 35px;
+    /* display: flex;
+    justify-content: center;
+    align-items: center; */
+    position: relative;
+    display: block;
+}
+.account {
+    display: flex;
+    align-items: baseline;
+    justify-content: space-between;
+    width: 282px;
+}
+.account button {
+    width: 132px;
+    height: 44px;
+    border-radius: 8px;
+    font-size: 15px;
+    font-weight: 500;
+    font-family: Inter;
+}
+.nav-burger {
+    display: flex;
+}
+
+.login {
+    border: 1px solid #FB8F1D;
+    color: #FB8F1D;
+    background: white;
+}
+.register {
+    background: #FB8F1D;
+    color: white;
+    border: none;
+}
+.heading {
+    max-width: 1300px;
+    margin: 0 auto 15%;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+}
+.heading-box {
+    margin-right: 20px;
+}
+.heading-box-title {
+    max-width: 370px;
+    font-family: Playfair Display;
+    font-size: 64px;
+    font-weight: 700;
+    margin: 0 0 74px;
+    color: #202336;
+}
+.heading-box-text {
+    font-family: Inter;
+    font-size: 22px;
+    font-weight: 600;
+    color: #202336;
+    margin-bottom: 33px;
+}
+.heading-box-button {
+    width: 187px;
+    height: 52px;
+    background-color: #FB8F1D;
+    border-radius: 8px;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    color: white;
+    font-family: Mulish;
+    font-size: 17px;
+    font-weight: 700;
+}
+.heading-img-box {
+    width: 50%;
+    max-width: 100%;
+}
+.section2 {
+    display: flex;
+    justify-content: space-between;
+    margin: 0 auto 298px;
+    max-width: 1272px;
+    padding: 0 15px;
+}
+.section2-img {
+    margin-right: 30px;
+}
+.section2-inner-title {
+    font-family: Playfair Display;
+    font-size: 36px;
+    font-weight: 700;
+    color: #000000;
+    max-width: 481px;
+    margin: 96px auto 20px;
+}
+.section2-inner-text {
+    font-family: Mulish;
+    font-size: 17px;
+    font-weight: 300;
+    max-width: 450px;
+    color: #7D7987;
+    margin: 0 0 33px;
+}
+.section2-inner-button {
+    width: 164px;
+    height: 48px;
+    background-color: #FB8F1D;
+    border-radius: 8px;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    color: white;
+    font-family: Inter;
+    font-size: 16px;
+    font-weight: 600;
+}
+.destinations {
+    max-width: 1150px;
+    padding: 0 15px;
+    margin: 0 auto 15%;
+}
+
+.destinations-head {
+    display: flex;
+    width: 100%;
+    justify-content: space-between;
+    align-items: flex-start;
+    margin-bottom: 56px;
+}
+.destinations-title {
+    font-family: Playfair Display;
+    font-size: 36px;
+    font-weight: 700;
+    line-height: 50px;
+    color: black;
+    margin: 0;
+}
+.destinations-more {
+    font-family: Inter;
+    font-size: 17px;
+    font-weight: 600;
+    line-height: 60px;
+    color: #FB8F1D;
+}
+.destinations-inner {
+    display: flex;
+    justify-content: space-between;
+}
+.destinations-item {
+    position: relative;
+}
+.destinations-item img {
+    width: 261px; 
+    height: 332px;
+    margin-right: 5px;
+}
+.destinations-item img:last-child {
+    margin: 0;
+}
+.destinations-desc {
+    width: 120px;
+    height: 56px;
+    position: absolute;
+    bottom: 3px;
+    left: -1px;
+    background-color: white;
+    display: flex;
+    flex-direction: column;
+    justify-content: flex-end;
+
+}
+.destinations-desc-place {
+    font-family: Inter;
+    font-size: 17px;
+    font-weight: 600;
+    line-height: 25px;
+    color: #042521;
+    margin: 0;
+}
+.destinations-desc-country {
+    font-family: Inter;
+    font-size: 15px;
+    font-weight: 500;
+    line-height: 24px;
+    color: #7D7987;
+    margin: 0;
+}
+.guides {
+    max-width: 1210px;
+    padding: 0 15px;
+    margin: 0 auto 15%;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+}
+.guides-img {
+    max-width: 100%;
+}
+.testimonials {
+    max-width: 1201px;
+    padding: 0 15px;
+    margin: 0 auto 10%;
+    display: flex;
+    justify-content: space-between;
+}
+.testimonials-title {
+    font-family: Playfair Display;
+    font-size: 36px;
+    font-weight: 700;
+    line-height: 50px;
+    color: black;
+    margin: 0 0 145px;
+}
+.rating {
+    display: flex;
+    width: 180px;
+    justify-content: space-between;
+    margin-bottom: 30px;
+}
+.testimonials-quote {
+    max-width: 450px;
+    font-family: Mulish;
+    font-size: 24px;
+    font-weight: 400;
+    line-height: 36px;
+    margin: 0 0 40px;
+}
+.testimonials-name {
+    font-family: Inter;
+    font-size: 22px;
+    font-weight: 700;
+    line-height: 48px;
+    margin: 0;
+}
+.testimonials-workplace {
+    font-family: Inter;
+    font-size: 18px;
+    font-weight: 400;
+    line-height: 48px;
+    color: #000000D9;
+    margin: 0;
+}
+.testimonials-img {
+    width: 384px;
+    position: relative;
+    max-width: 100%;
+}
+.testimonials-img::before {
+    content: '';
+    background-image: url(./img/element.png);
+    position: absolute;
+    bottom: -13px;
+    left: -15px;
+    display: block;
+    width: 32px;
+    height: 32px;
+}
+.testimonials-img::after {
+    content: '';
+    background-image: url(./img/element2.png);
+    position: absolute;
+    top: -13px;
+    right: -15px;
+    display: block;
+    width: 42px;
+    height: 42px;
+    z-index: -10;
+}
+
+.trending {
+    max-width: 1262px;
+    padding: 0 15px;
+    margin: 0 auto 10%;
+}
+.trending-blogs {
+    display: flex;
+    justify-content: space-between;
+}
+.trending-item {
+    width: 260px;
+    margin-right: 10px;
+}
+.trending-item:last-child{
+    margin-right: 0;
+}
+.trending-img{
+    width: 100%;
+    height: 230px;
+    background-size: cover;
+    margin: 0 0 10px;
+}
+.trending-img1 {
+    background-image: url(img/image\ 12.png);
+}
+.trending-img2 {
+    background-image: url(img/image\ 13.png);
+}
+.trending-img3 {
+    background-image: url(img/image\ 14.png);
+}
+.trending-img4 {
+    background-image: url(img/image\ 15.png);
+}
+.trending-title {
+    font-family: Inter;
+    font-size: 19px;
+    font-weight: 700;
+    line-height: 30px;
+    margin: 0 0 13px;
+}
+.trending-text {
+    font-family: Inter;
+    font-size: 15px;
+    font-weight: 400;
+    line-height: 26px;
+    color: #7D7987;
+    margin: 0 0 23px;
+}
+.trending-link {
+    font-family: Inter;
+    font-size: 15px;
+    font-weight: 600;
+    color: #FB8F1D;
+}
+footer {
+    width: 100%;
+    background: #F9F9FB;
+    position: absolute;
+    z-index: 5;
+    left: 0;
+    padding: 0 15px;
+}
+.footer-inner {
+    max-width: 1220px;
+    margin: 0 auto 30px;
+    display: flex;
+    padding: 70px 0 80px;
+    font-family: Mulish;
+    display: flex;
+    justify-content: space-between;
+    border-bottom: 1px solid #C4C4C4;
+}
+.footer-columns {
+    display: flex;
+    width: 60%;
+    justify-content: space-around;
+    margin-right: 5%;
+}
+.footer-logo {
+    width: 44px;
+    height: 44px;
+    margin: 0 0 26px;
+}
+.footer-desc {
+    font-size: 18px;
+    font-weight: 300;
+    line-height: 28px;
+    color: #848484;
+    margin: 0 0 55px;
+    max-width: 391px;
+}
+.footer-copyright {
+    font-size: 17px;
+    font-weight: 300;
+    line-height: 28px;
+    color: #848484;
+}
+.footer-section {
+    margin-right: 15px;
+}
+
+.footer-title {
+    font-family: Mulish;
+    font-size: 19px;
+    font-weight: 700;
+    line-height: 60px;
+    margin: 0 0 10px;
+}
+.footer-list {
+    font-family: Mulish;
+    font-size: 18px;
+    font-weight: 300;
+    line-height: 38px;
+    list-style: none;
+    padding: 0;
+}
+.footer-list a {
+    color: #848484;
+}
+.footer-social-media {
+    max-width: 248px;
+    display: flex;
+    justify-content: space-between;
+    align-items: baseline;
+    margin: 0 auto;
+}
+
+
+
+@media screen and (max-width: 1130px) {
+    .testimonials {
+        flex-flow: column wrap;
+        align-items: center;
+    }
+    .testimonials-inner{
+        margin-bottom: 20px;
+    }
+    .destinations-inner {
+        width: 80%;
+        margin: 0 auto;
+        display: flex;
+        flex-wrap: wrap;
+        justify-content: space-around;
+    }
+    .destinations-item {
+        margin-bottom: 20px;
+    }
+}
+@media screen and (max-width: 1100px) {
+ .footer-inner{
+        flex-flow: column;
+        align-items: center;
+    }
+    .footer-columns {
+        display: flex;
+        justify-content: space-around;
+        width: 100%;
+    }
+}
+@media screen and (min-width: 795px) {
+    .menu-burger-btn {
+        display: none;
+    }
+    .nav-list {
+        padding-left: 10px;
+    }
+}
+@media screen and (max-width: 795px) {
+    .nav-list {
+        display: flex;
+        justify-content: flex-start;
+        flex-direction: column;
+        background: white;
+
+        /*width: 100%; @todo */
+        width: 50vw;
+        min-width: 250px;
+
+        padding: 0 25px 0 20px;
+        position: fixed;
+
+        top: 0;
+        /*top: 105px; @todo */
+
+        /*right: -100%; @todo */
+        right: -100vw;
+
+        transition: all 0.4s ease-in-out;
+        margin-top: 0;
+
+        height: 100vh; /* @todo  */
+        margin-right: 0; /* @todo */
+        margin-bottom: 0; /* @todo */
+        z-index: 10; /* @todo */
+    }
+    .nav-list.open-menu {
+        /*right: -18px; @todo */
+        right: 0;
+    }
+    .nav-item {
+        padding: 20px 0;
+    }
+    .nav-item a {
+        font-size: 20px;
+    }
+    .nav-item.hide {
+        display: flex;
+        min-height: 150px;
+    }
+    .nav-item.hide .account {
+        flex-direction: column;
+    }
+
+    .menu-burger-btn {
+        display: flex;
+        margin: 0 15px;
+    }
+    .menu-burger-btn::before,
+    .menu-burger-btn::after {
+        content: '';
+    }
+    .menu-burger-btn span,
+    .menu-burger-btn::before,
+    .menu-burger-btn::after {
+        position: absolute;
+        height: 4px;
+        width: 100%;
+        background: #202336;
+        margin: 0 auto;
+    }
+    .menu-burger-btn span {
+        top: 14px;
+    }
+    .menu-burger-btn::before {
+        top: 0;
+    }
+    .menu-burger-btn::after {
+        bottom: 5px;
+    }
+    .menu-burger-btn.open-menu span {
+        opacity:0; 
+        transition: 0.5s; 
+    }
+    .menu-burger-btn.open-menu:before {
+        transform: rotate(45deg);
+        top: 16px;
+        transition: 0.4s;
+    }
+    .menu-burger-btn.open-menu:after {
+        transform: rotate(-45deg);
+        bottom: 16px;
+        transition: 0.4s;
+    }
+    .header-right .account {
+        display: none;
+    }
+    header {
+        margin-bottom: 0;
+    }
+    header div {
+        display: inline;
+    }
+    .body {
+        padding-top: 70px; /* @todo */
+    }
+    header {
+        /* @todo */
+        height: auto;
+        position: fixed;
+        width: 100%;
+        background: rgba(255, 255, 255, 0.95);
+        top: 0;
+        margin-top: 0;
+        padding: 15px 30px;
+        z-index: 3;
+    }
+    .heading-box {
+        margin: 30px 0;
+    }
+    .heading-box-title {
+        margin-top: 25px;
+        font-size: 55px;
+        text-align: center;
+    }
+    .heading-box-text, 
+    .section2-inner-text,
+    .section2-inner-title,
+    .destinations-title,
+    .testimonials-title {
+        text-align: center;
+    }
+    .section2-inner-title {
+        margin-top: 15px;
+    }
+    .trending-blogs, .footer-inner{
+        flex-flow: wrap column;
+        align-items: center;
+    }
+    .destinations-inner,
+    .trending-blogs {
+        align-items: center;
+    }
+    .trending-item {
+        margin-bottom: 25px;
+    }
+    .guides-inner {
+        width: 100%;
+    }
+    .section2-inner-button, .heading-box-button {
+        margin: 0 auto;
+    }
+    .footer-section {
+        display: flex;
+        flex-direction: column;
+        align-items: center;
+    }
+    .footer-inner {
+        padding-top: 10px;
+        padding-bottom: 15px;
+        margin-bottom: 10px;
+    }
+    .heading-box, .guides-inner, .trending
+    , .testimonials, .testimonials-title, 
+    .destinations, .section2, .heading {
+        margin-bottom: 20px;
+    }
+    .footer-desc {
+        width: 100%;
+    }
+    .footer-title {
+        line-height: 0;
+    }
+    .footer-copyright {
+        margin-bottom: 30px;
+    }
+  }
+
+@media screen and (max-width: 600px) {
+    .burger-icon.user-icon {
+        display: flex;
+        margin: 0 15px;
+    }
+
+    .heading, .section2, .guides{
+      flex-flow: wrap column;
+    }
+
+    .heading-img-box, .footer-logo {
+      display: none;
+    }
+    .testimonials-quote {
+      font-size: 18px;
+    }
+    .heading-box-title, .destinations-head {
+      font-size: 40px;
+      margin-bottom: 15px;
+    }
+
+    .destinations-head,
+    .footer-columns {
+    display: block;
+    }
+}
+@media screen and (max-width: 390px) {
+    .destinations-item img{
+        width: auto;
+        height: auto;
+    }
+}