├── .gitignore
├── images
├── p1.png
├── p2.png
├── p3.png
├── p4.png
├── p5.png
├── p6.png
├── desktop-shot.PNG
├── mobile-shot1.PNG
├── mobile-shot2.PNG
├── desktop-popup-image.png
├── header-illsutration-mobile.png
├── Icons
│ ├── Icon-Arrow-button.svg
│ ├── Icon-Medium.svg
│ ├── Icon-Menu.svg
│ ├── Icon-see-live.svg
│ ├── Icom-popup-close.svg
│ ├── Icom-popup-close-desktop.svg
│ ├── Icon-close.svg
│ ├── Icon-see-source.svg
│ ├── Icon-Twitter.svg
│ ├── Icon-Linkedin.svg
│ ├── Icon-GitHub.svg
│ ├── icon-skills.svg
│ ├── Group.svg
│ ├── Icon-Angelist.svg
│ ├── icon-languages.svg
│ └── icon-frameworks.svg
├── aboutme-bottomleft.svg
├── contact-illustration-desktop-left.svg
├── contact-form-illustration.svg
├── contact-illustration-desktop-left-2.svg
├── contact-illustratoin-desktop-right.svg
├── aboutme-topright.svg
├── aboutme-bottomleft-desktop.svg
├── aboutme-topright-desktop.svg
├── header-illsutration-mobile.svg
└── Header-llustration-desktop.svg
├── .hintrc
├── .eslintrc.json
├── .stylelintrc.json
├── localStorage.js
├── LICENSE
├── modal-styles.css
├── .github
└── workflows
│ └── linters.yml
├── desktop-styles.css
├── README.md
├── Script.js
├── index.html
├── styles.css
└── package.json
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
--------------------------------------------------------------------------------
/images/p1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ab-noori/Portfolio/HEAD/images/p1.png
--------------------------------------------------------------------------------
/images/p2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ab-noori/Portfolio/HEAD/images/p2.png
--------------------------------------------------------------------------------
/images/p3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ab-noori/Portfolio/HEAD/images/p3.png
--------------------------------------------------------------------------------
/images/p4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ab-noori/Portfolio/HEAD/images/p4.png
--------------------------------------------------------------------------------
/images/p5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ab-noori/Portfolio/HEAD/images/p5.png
--------------------------------------------------------------------------------
/images/p6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ab-noori/Portfolio/HEAD/images/p6.png
--------------------------------------------------------------------------------
/images/desktop-shot.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ab-noori/Portfolio/HEAD/images/desktop-shot.PNG
--------------------------------------------------------------------------------
/images/mobile-shot1.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ab-noori/Portfolio/HEAD/images/mobile-shot1.PNG
--------------------------------------------------------------------------------
/images/mobile-shot2.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ab-noori/Portfolio/HEAD/images/mobile-shot2.PNG
--------------------------------------------------------------------------------
/images/desktop-popup-image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ab-noori/Portfolio/HEAD/images/desktop-popup-image.png
--------------------------------------------------------------------------------
/images/header-illsutration-mobile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ab-noori/Portfolio/HEAD/images/header-illsutration-mobile.png
--------------------------------------------------------------------------------
/.hintrc:
--------------------------------------------------------------------------------
1 | {
2 | "connector": {
3 | "name": "local",
4 | "options": {
5 | "pattern": ["**", "!.git/**", "!node_modules/**"]
6 | }
7 | },
8 | "extends": ["development"],
9 | "formatters": ["stylish"],
10 | "hints": [
11 | "button-type",
12 | "disown-opener",
13 | "html-checker",
14 | "meta-charset-utf-8",
15 | "meta-viewport",
16 | "no-inline-styles:error"
17 | ]
18 | }
--------------------------------------------------------------------------------
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true,
5 | "jest": true
6 | },
7 | "parser": "babel-eslint",
8 | "parserOptions": {
9 | "ecmaVersion": 2018,
10 | "sourceType": "module"
11 | },
12 | "extends": ["airbnb-base"],
13 | "rules": {
14 | "no-shadow": "off",
15 | "no-param-reassign": "off",
16 | "eol-last": "off",
17 | "import/extensions": [ 1, {
18 | "js": "always", "json": "always"
19 | }]
20 | },
21 | "ignorePatterns": [
22 | "dist/",
23 | "build/"
24 | ]
25 | }
26 |
--------------------------------------------------------------------------------
/images/Icons/Icon-Arrow-button.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.stylelintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": ["stylelint-config-standard"],
3 | "plugins": ["stylelint-scss", "stylelint-csstree-validator"],
4 | "rules": {
5 | "at-rule-no-unknown": [
6 | true,
7 | {
8 | "ignoreAtRules": ["tailwind", "apply", "variants", "responsive", "screen"]
9 | }
10 | ],
11 | "scss/at-rule-no-unknown": [
12 | true,
13 | {
14 | "ignoreAtRules": ["tailwind", "apply", "variants", "responsive", "screen"]
15 | }
16 | ],
17 | "csstree/validator": true
18 | },
19 | "ignoreFiles": ["build/**", "dist/**", "**/reset*.css", "**/bootstrap*.css", "**/*.js", "**/*.jsx"]
20 | }
21 |
--------------------------------------------------------------------------------
/localStorage.js:
--------------------------------------------------------------------------------
1 | const formString = document.querySelector('.form-itself');
2 | formString.addEventListener('input', () => {
3 | const information = {
4 | name: document.getElementById('name').value,
5 | email: document.getElementById('email').value,
6 | message: document.getElementById('textarea').value,
7 | };
8 |
9 | localStorage.setItem('formString', JSON.stringify(information));
10 | });
11 |
12 | const formObj = JSON.parse(localStorage.getItem('formString'));
13 | document.getElementById('name').value = formObj.name;
14 | document.getElementById('email').value = formObj.email;
15 | document.getElementById('textarea').value = formObj.message;
16 |
--------------------------------------------------------------------------------
/images/Icons/Icon-Medium.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/images/Icons/Icon-Menu.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/images/Icons/Icon-see-live.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/images/Icons/Icom-popup-close.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/images/Icons/Icom-popup-close-desktop.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/images/Icons/Icon-close.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/images/Icons/Icon-see-source.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 Abdul Ali Noori
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 |
--------------------------------------------------------------------------------
/images/Icons/Icon-Twitter.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/images/Icons/Icon-Linkedin.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/images/Icons/Icon-GitHub.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/images/Icons/icon-skills.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/modal-styles.css:
--------------------------------------------------------------------------------
1 | .modal {
2 | width: 313px;
3 | top: 50%;
4 | left: 50%;
5 | z-index: 50;
6 | position: fixed;
7 | border-radius: 15px;
8 | padding: 15px;
9 | display: grid;
10 | gap: 10px;
11 | background-color: white;
12 | transform: translate(-50%, -50%) scale(0);
13 | transition: 200ms ease-in-out;
14 | overflow-y: auto;
15 | }
16 |
17 | .popup-snapshoot {
18 | display: flex;
19 | justify-content: center;
20 | }
21 |
22 | #popup-snapshoot-desktop {
23 | display: none;
24 | }
25 |
26 | .modal.active {
27 | transform: translate(-50%, -50%) scale(1);
28 | }
29 |
30 | .modal-header {
31 | display: flex;
32 | gap: 10px;
33 | flex-direction: column;
34 | }
35 |
36 | .modal-header-content {
37 | display: flex;
38 | }
39 |
40 | .modal-header ul li {
41 | display: flex;
42 | align-items: center;
43 | padding: 8px 12px;
44 | background: #ebf0ee;
45 | border-radius: 4px;
46 | color: #3a4a42;
47 | font-size: 12px;
48 | font-weight: 600;
49 | line-height: 16px;
50 | }
51 |
52 | .modal-header-title {
53 | font-size: 1.25rem;
54 | font-weight: bold;
55 | }
56 |
57 | .modal-header-close-button {
58 | border: none;
59 | outline: none;
60 | background: none;
61 | cursor: pointer;
62 | position: fixed;
63 | top: 34px;
64 | right: 31px;
65 | }
66 |
67 | .modal-header-close-button-desktop {
68 | display: none;
69 | }
70 |
71 | .modal-body {
72 | padding: 0;
73 | }
74 |
75 | .modal-bottom-links {
76 | display: flex;
77 | gap: 20px;
78 | justify-content: center;
79 | }
80 |
81 | .modal-bottom-links .btn {
82 | min-width: 100px;
83 | text-align: center;
84 | padding: 10px;
85 | font-weight: 600;
86 | font-size: 15px;
87 | line-height: 20px;
88 | }
89 |
90 | .modal-bottom-links .btn a {
91 | display: flex;
92 | align-items: center;
93 | flex-wrap: nowrap;
94 | text-align: center;
95 | gap: 8px;
96 | font-weight: 500;
97 | font-size: 17px;
98 | line-height: 24px;
99 | }
100 |
101 | .modal-top-links {
102 | display: none;
103 | }
104 |
105 | #overlay {
106 | position: fixed;
107 | top: 0;
108 | left: 0;
109 | right: 0;
110 | bottom: 0;
111 | opacity: 0;
112 | transition: 200ms ease-in-out;
113 | pointer-events: none;
114 | background-color: rgba(0, 0, 0, 0.5);
115 | }
116 |
117 | #overlay.active {
118 | opacity: 1;
119 | pointer-events: all;
120 | }
121 |
--------------------------------------------------------------------------------
/images/Icons/Group.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/images/aboutme-bottomleft.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/images/Icons/Icon-Angelist.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/.github/workflows/linters.yml:
--------------------------------------------------------------------------------
1 | name: Linters
2 |
3 | on: pull_request
4 |
5 | env:
6 | FORCE_COLOR: 1
7 |
8 | jobs:
9 | lighthouse:
10 | name: Lighthouse
11 | runs-on: ubuntu-22.04
12 | steps:
13 | - uses: actions/checkout@v2
14 | - uses: actions/setup-node@v1
15 | with:
16 | node-version: "12.x"
17 | - name: Setup Lighthouse
18 | run: npm install -g @lhci/cli@0.7.x
19 | - name: Lighthouse Report
20 | run: lhci autorun --upload.target=temporary-public-storage --collect.staticDistDir=.
21 | webhint:
22 | name: Webhint
23 | runs-on: ubuntu-22.04
24 | steps:
25 | - uses: actions/checkout@v2
26 | - uses: actions/setup-node@v1
27 | with:
28 | node-version: "12.x"
29 | - name: Setup Webhint
30 | run: |
31 | npm install --save-dev hint@7.x
32 | [ -f .hintrc ] || wget https://raw.githubusercontent.com/microverseinc/linters-config/master/html-css-js/.hintrc
33 | - name: Webhint Report
34 | run: npx hint .
35 | stylelint:
36 | name: Stylelint
37 | runs-on: ubuntu-22.04
38 | steps:
39 | - uses: actions/checkout@v2
40 | - uses: actions/setup-node@v1
41 | with:
42 | node-version: "12.x"
43 | - name: Setup Stylelint
44 | run: |
45 | npm install --save-dev stylelint@13.x stylelint-scss@3.x stylelint-config-standard@21.x stylelint-csstree-validator@1.x
46 | [ -f .stylelintrc.json ] || wget https://raw.githubusercontent.com/microverseinc/linters-config/master/html-css-js/.stylelintrc.json
47 | - name: Stylelint Report
48 | run: npx stylelint "**/*.{css,scss}"
49 | eslint:
50 | name: ESLint
51 | runs-on: ubuntu-22.04
52 | steps:
53 | - uses: actions/checkout@v2
54 | - uses: actions/setup-node@v1
55 | with:
56 | node-version: "12.x"
57 | - name: Setup ESLint
58 | run: |
59 | npm install --save-dev eslint@7.x eslint-config-airbnb-base@14.x eslint-plugin-import@2.x babel-eslint@10.x
60 | [ -f .eslintrc.json ] || wget https://raw.githubusercontent.com/microverseinc/linters-config/master/html-css-js/.eslintrc.json
61 | - name: ESLint Report
62 | run: npx eslint .
63 | nodechecker:
64 | name: node_modules checker
65 | runs-on: ubuntu-22.04
66 | steps:
67 | - uses: actions/checkout@v2
68 | - name: Check node_modules existence
69 | run: |
70 | if [ -d "node_modules/" ]; then echo -e "\e[1;31mThe node_modules/ folder was pushed to the repo. Please remove it from the GitHub repository and try again."; echo -e "\e[1;32mYou can set up a .gitignore file with this folder included on it to prevent this from happening in the future." && exit 1; fi
--------------------------------------------------------------------------------
/images/Icons/icon-languages.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/images/contact-illustration-desktop-left.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/images/contact-form-illustration.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/images/contact-illustration-desktop-left-2.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/images/contact-illustratoin-desktop-right.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/images/aboutme-topright.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/images/aboutme-bottomleft-desktop.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/images/Icons/icon-frameworks.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/images/aboutme-topright-desktop.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/desktop-styles.css:
--------------------------------------------------------------------------------
1 | @media only screen and (min-width: 768px) {
2 | .wrapper {
3 | width: 1440px;
4 | margin: 0 auto;
5 | gap: 60px;
6 | background: url("images/Header-llustration-desktop.svg");
7 | background-position: top;
8 | background-repeat: no-repeat;
9 | }
10 |
11 | header {
12 | font-weight: 600;
13 | font-size: 1.1rem;
14 | justify-content: center;
15 | }
16 |
17 | .navbar {
18 | justify-content: center;
19 | }
20 |
21 | .navbar ul li a {
22 | color: #344563;
23 | font-size: 15px;
24 | font-weight: 600;
25 | }
26 |
27 | .humburger {
28 | display: none;
29 | }
30 |
31 | .nav-branding {
32 | display: none;
33 | }
34 |
35 | .nav-menu {
36 | height: 40px;
37 | position: static;
38 | width: unset;
39 | flex-direction: row;
40 | background-color: unset;
41 | justify-content: space-between;
42 | align-items: center;
43 | gap: 50px;
44 | }
45 |
46 | /* ----------------------------------Headline Section------------------------------------ */
47 |
48 | .headline {
49 | height: 100vh;
50 | margin: 0;
51 | padding: 8% 30%;
52 | background-image: none;
53 | }
54 |
55 | .headline h1 br {
56 | display: none;
57 | }
58 |
59 | .headline .social-media {
60 | width: 50%;
61 | }
62 |
63 | /* ----------------------------------Project Section------------------------------------ */
64 |
65 | .recent-work-container {
66 | width: 1171px;
67 | grid-template-columns: 1fr 1fr 1fr;
68 | }
69 |
70 | /* ----------------------------------about-me Section------------------------------------ */
71 |
72 | .about-me-carts-container {
73 | width: 1171px;
74 | grid-template-columns: 1fr 1fr 1fr;
75 | }
76 |
77 | .about-me-header {
78 | justify-content: center;
79 | background: url("images/aboutme-topright-desktop.svg"), url("images/aboutme-bottomleft-desktop.svg");
80 | background-position: right top, left bottom;
81 | background-repeat: no-repeat;
82 | }
83 |
84 | .about-me-header p {
85 | width: 50%;
86 | }
87 |
88 | /* ----------------------------------form Section------------------------------------ */
89 |
90 | .from-section {
91 | justify-items: center;
92 | padding-bottom: 30vh;
93 | background:
94 | url("images/contact-illustratoin-desktop-right.svg"),
95 | url("images/contact-illustration-desktop-left.svg"),
96 | url("images/contact-illustration-desktop-left-2.svg");
97 | background-position: right bottom, left bottom, left 25% bottom;
98 | background-repeat: no-repeat;
99 | }
100 |
101 | .form-section-container {
102 | width: 1171px;
103 | display: flex;
104 | flex-direction: row;
105 | justify-content: center;
106 | align-items: flex-start;
107 | gap: 2%;
108 | }
109 |
110 | .form-header {
111 | width: 33%;
112 | padding: 5% 0;
113 | font-size: 1.5rem;
114 | font-weight: 600;
115 | line-height: 2rem;
116 | text-align: justify;
117 | }
118 |
119 | .form-itself {
120 | width: 65%;
121 | display: flex;
122 | flex-direction: column;
123 | gap: 20px;
124 | }
125 |
126 | .form-itself .btn {
127 | align-self: flex-start;
128 | }
129 |
130 | /* ----------------------------------fotter Section------------------------------------ */
131 |
132 | footer {
133 | border-top: 1px solid #dfe1e6;
134 | padding: 1%;
135 | }
136 |
137 | footer span {
138 | display: none;
139 | }
140 |
141 | /* ---------------------------------------Modal Styles---------------------------------- */
142 |
143 | .modal {
144 | width: 600px;
145 | height: 85vh;
146 | padding: 20px;
147 | overflow-y: auto;
148 | overflow-x: hidden;
149 | }
150 |
151 | #popup-snapshoot-mobile {
152 | display: none;
153 | }
154 |
155 | .popup-snapshoot #popup-snapshoot-desktop {
156 | display: unset;
157 | width: 580px;
158 | }
159 |
160 | .modal-header-content {
161 | justify-content: space-between;
162 | }
163 |
164 | .modal-top-links {
165 | width: 45%;
166 | display: flex;
167 | justify-content: flex-end;
168 | gap: 5px;
169 | }
170 |
171 | .modal-top-links .btn {
172 | min-width: 100px;
173 | text-align: center;
174 | padding: 10px;
175 | font-weight: 600;
176 | font-size: 15px;
177 | line-height: 20px;
178 | }
179 |
180 | .modal-top-links .btn a {
181 | display: flex;
182 | align-items: center;
183 | flex-wrap: nowrap;
184 | gap: 4px;
185 | justify-content: space-between;
186 | text-align: center;
187 | }
188 |
189 | .modal-bottom-links {
190 | display: none;
191 | }
192 |
193 | .modal-header-close-button-desktop {
194 | display: unset;
195 | position: unset;
196 | padding: 0;
197 | width: 40px;
198 | border-radius: 5px;
199 | cursor: pointer;
200 | border: none;
201 | }
202 |
203 | .modal-header-close-button {
204 | display: none;
205 | }
206 |
207 | .modal-body {
208 | font-weight: 400;
209 | font-size: 16px;
210 | line-height: 30px;
211 | color: #344563;
212 | }
213 | }
214 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | 
4 |
5 |
6 |
7 |
8 |
9 | > # Portfolio
10 |
11 | | Project Veiw Screenshots|
12 | |---------------------------------------|
13 | ||
14 | ||
15 |
16 | # 📗 Table of Contents
17 |
18 | - [📖 About the Project](#about-project)
19 | - [🛠 Built With](#built-with)
20 | - [Tech Stack](#tech-stack)
21 | - [Key Features](#key-features)
22 | - [🚀 Live Demo](#live-demo)
23 | - [💻 Getting Started](#getting-started)
24 | - [Setup](#setup)
25 | - [Prerequisites](#prerequisites)
26 | - [Install](#install)
27 | - [Usage](#usage)
28 | - [Run tests](#run-tests)
29 | - [Deployment](#triangular_flag_on_post-deployment)
30 | - [👥 Authors](#authors)
31 | - [🔭 Future Features](#future-features)
32 | - [🤝 Contributing](#contributing)
33 | - [⭐️ Show your support](#support)
34 | - [🙏 Acknowledgements](#acknowledgements)
35 | - [❓ FAQ (OPTIONAL)](#faq)
36 | - [📝 License](#license)
37 |
38 |
39 | # 📖 [My-Portfolio]
40 |
41 | > **[My-Portfolio]** is a project to showcase all of my recent work. It will maitain the information and history of my recent projects,
42 | the brave informatin about me, and the link to my resume. it will also provide the context to be in contact with the clients.
43 |
44 | ## 🛠 Built With
45 |
46 | ### Tech Stack
47 |
48 |
49 | Client
50 |
55 |
56 |
57 |
58 | Server
59 |
62 |
63 |
64 |
65 | Database
66 |
69 |
70 |
71 |
72 | ### Key Features
73 | - **[Represent most recent projcts]**
74 | - **[Represnt skills and technogies]**
75 | - **[Create contact context for visitors]**
76 | - **[Responsive with the view of desktop and mobile]**
77 |
78 | (back to top )
79 |
80 |
81 | ## 🚀 Live Demo
82 |
83 | > - [Live Demo On Gh-pages](https://ab-noori.github.io/Portfolio)
84 | > - [Live Demo On Render](https://portfolio-ab.onrender.com)
85 |
86 | (back to top )
87 |
88 |
89 | ## 💻 Getting Started
90 |
91 |
92 | To get a local copy up and running, follow these steps.
93 |
94 | ### Prerequisites
95 |
96 | In order to run this project you need:
97 | - A Nude.js installed on your local system.
98 | - A browser of you choice.
99 | - A text editor of your choice.
100 |
101 |
102 | ### Setup
103 |
104 | Clone this repository to your desired folder:
105 |
106 | - Use the following Commands:
107 |
108 | cd your-desired-folder
109 | git clone git@github.com:ab-noori/Portfolio.git
110 |
111 |
112 |
113 |
114 | ### Install
115 |
116 | Install this project with:
117 | - You can deploy it with your hosting provider of your choise.
118 |
119 |
120 | ### Usage
121 |
122 | - To demonstrate your skills & knowlege of technoly.
123 | - To represent the most recent project.
124 | - to maitain connection with visitors.
125 |
126 | ### Run tests
127 | - Run the following script and style test:
128 |
129 | npx hint .
130 | npx hint . --fix
131 |
132 | npx eslint .
133 | npx eslint . --fix
134 |
135 | npx stylelint "**/*.{css,scss}"
136 | npx stylelint "**/*.{css,scss}" --fix
137 |
138 | ### Deployment
139 |
140 | You can deploy this project using:
141 | - Free deployment services like GitHub pages.
142 | - Any deployment services of your choice.
143 |
144 | (back to top )
145 |
146 |
147 | ## 👥 Authors
148 |
149 |
150 | 👤 **Abdul Ali Noori**
151 |
152 | - GitHub: [@ab-noori](https://github.com/ab-noori)
153 | - Twitter: [@AbdulAliNoori4](https://twitter.com/AbdulAliNoori4)
154 | - LinkedIn: [abdul-ali-noori](https://www.linkedin.com/in/abdul-ali-noori-384b85195/)
155 |
156 |
157 | (back to top )
158 |
159 |
160 | ## 🔭 Future Features
161 | - [ ] **[Responsiveness with the all kind of laptop and handheld devices viewport]**
162 |
163 | (back to top )
164 |
165 |
166 | ## 🤝 Contributing
167 |
168 | Contributions, issues, and feature requests are welcome!
169 |
170 | Feel free to check the [issues page](../../issues/).
171 |
172 | (back to top )
173 |
174 |
175 | ## ⭐️ Show your support
176 |
177 | If you like this project, you are most welcome to Contribute.
178 |
179 | (back to top )
180 |
181 |
182 | ## 🙏 Acknowledgments
183 |
184 |
185 | I would like to thank all of My colleagues and supporters.
186 |
187 | (back to top )
188 |
189 | (back to top )
190 |
191 |
192 | ## 📝 License
193 |
194 | This project is [MIT](./LICENSE) licensed.
195 |
196 | (back to top )
197 |
--------------------------------------------------------------------------------
/Script.js:
--------------------------------------------------------------------------------
1 | const projectCarts = document.getElementById('project-carts');
2 |
3 | const cartsData = [
4 | {
5 | id: '1',
6 | title: 'Salsal Development Group Website',
7 | desc: 'SalsalDevGroup Website is a platform to showcase the Salsal Developers group recent projects, maintain the information and history of the group recent projects, the short biography of each developer, and the link to recent projects. it will also provide the context for receiving proposals and contacting the clients in its future features.',
8 | technogies: ['Ruby on rails', 'CSS', 'HTML', 'JavScript'],
9 | img: 'images/p1.png',
10 | demoLink: 'https://ab-noori.github.io/SalsalDevGroup',
11 | sourceLink: 'https://github.com/ab-noori/SalsalDevGroup',
12 | },
13 | {
14 | id: '2',
15 | title: 'Awesom Books Project with ES6',
16 | desc: 'Awesome Books ES6 is a simple website that is created using ES6 syntax and modules to displays a list of books and allows you to add and remove books from that list.',
17 | technogies: ['Ruby on rails', 'CSS', 'HTML', 'JavScript'],
18 | img: 'images/p2.png',
19 | demoLink: 'https://ab-noori.github.io/AwesomeBooksES6',
20 | sourceLink: 'https://github.com/ab-noori/AwesomeBooksES6',
21 | },
22 | {
23 | id: '3',
24 | title: 'To Do List Project with Webpack',
25 | desc: 'In this project, we will build a simple HTML list of To Do tasks. The list will be styled according to the specifications listed later in this lesson. This simple web page will be built using webpack and served by a webpack dev server.',
26 | technogies: ['Ruby on rails', 'CSS', 'HTML', 'JavScript'],
27 | img: 'images/p3.png',
28 | demoLink: 'https://ab-noori.github.io/To-Do-List/dist',
29 | sourceLink: 'https://github.com/ab-noori/To-Do-List',
30 | },
31 | {
32 | id: '4',
33 | title: 'Online Book Store Project with ES6',
34 | desc: 'A simple book store with vanilla JavaScript. You can select multiple numbers of books. Adding them to cart, removing them from cart, decreasing and increasing the cart amount and calculating the total cost of the cart.',
35 | technogies: ['Ruby on rails', 'CSS', 'HTML', 'JavScript'],
36 | img: 'images/p4.png',
37 | demoLink: 'https://ab-noori.github.io/OnlineBookStore',
38 | sourceLink: 'https://github.com/ab-noori/OnlineBookStore',
39 | },
40 | {
41 | id: '5',
42 | title: 'Simple Webpack Joke Application',
43 | desc: ' A simple webpack joke application. but actually it is a frontend webpack environment boilerplate for building JavaScript applications, which I can later use as a starting point in my projects.',
44 | technogies: ['Ruby on rails', 'CSS', 'HTML', 'JavScript'],
45 | img: 'images/p5.png',
46 | demoLink: 'https://ab-noori.github.io/Webpack-Joke-App/dist',
47 | sourceLink: 'https://github.com/ab-noori/Webpack-Joke-App',
48 | },
49 | {
50 | id: '6',
51 | title: 'Awesom Books Project No Modules',
52 | desc: 'Awesome Books is a simple website that displays a list of books and allows you to add and remove books from that list.',
53 | technogies: ['Ruby on rails', 'CSS', 'HTML', 'JavScript'],
54 | img: 'images/p6.png',
55 | demoLink: 'https://ab-noori.github.io/Awesome-Books',
56 | sourceLink: 'https://github.com/ab-noori/Awesome-Books',
57 | },
58 | ];
59 |
60 | function generatProjectCarts() {
61 | projectCarts.innerHTML = cartsData.map((x) => {
62 | const {
63 | id, title, desc, technogies, img, demoLink, sourceLink,
64 | } = x;
65 | return `
66 |
67 |
68 |
69 |
70 |
71 |
${title}
72 |
78 |
See Project
79 |
80 |
81 |
82 |
83 |
84 |
85 |
89 |
104 |
${desc}
105 |
109 |
110 |
111 | `;
112 | }).join('');
113 | }
114 |
115 | generatProjectCarts();
116 |
117 | const humburger = document.querySelector('.humburger');
118 | const navMenu = document.querySelector('.nav-menu');
119 | const navBranding = document.querySelector('.nav-branding');
120 |
121 | humburger.addEventListener('click', () => {
122 | humburger.classList.toggle('active');
123 | navMenu.classList.toggle('active');
124 | navBranding.classList.toggle('active');
125 | });
126 |
127 | document.querySelectorAll('.nav-link')
128 | .forEach((links) => links.addEventListener('click', () => {
129 | humburger.classList.remove('active');
130 | navMenu.classList.remove('active');
131 | }));
132 |
133 | // -----------------------------Modal Scripts---------------------------------------
134 |
135 | const openModalButton = document.querySelectorAll('[data-modal-target]');
136 | const closeModalButton = document.querySelectorAll('[data-modal-close-button');
137 | const overlay = document.getElementById('overlay');
138 |
139 | function openModal(modal) {
140 | if (modal == null) return;
141 | modal.classList.add('active');
142 | overlay.classList.add('active');
143 | }
144 |
145 | function closeModal(modal) {
146 | if (modal == null) return;
147 | modal.classList.remove('active');
148 | overlay.classList.remove('active');
149 | }
150 |
151 | openModalButton.forEach((button) => {
152 | button.addEventListener('click', () => {
153 | const modal = document.querySelector(button.dataset.modalTarget);
154 | openModal(modal);
155 | });
156 | });
157 |
158 | overlay.addEventListener('click', () => {
159 | const modals = document.querySelectorAll('.modal.active');
160 | modals.forEach((modal) => {
161 | closeModal(modal);
162 | });
163 | });
164 |
165 | closeModalButton.forEach((button) => {
166 | button.addEventListener('click', () => {
167 | const modal = button.closest('.modal');
168 | closeModal(modal);
169 | });
170 | });
171 |
172 | // -------------------------Form Validations-----------------------
173 |
174 | const form = document.getElementById('contact-form');
175 | const email = document.getElementById('email');
176 | form.addEventListener('submit', (event) => {
177 | const emailRegex = /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/;
178 | if (emailRegex.test(email.value)) {
179 | form.submit();
180 | } else {
181 | event.preventDefault();
182 | const msg = document.querySelector('small');
183 | msg.innerText = 'The email should be in lowercase';
184 | }
185 | });
186 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | Portfolio
12 |
13 |
14 |
15 |
16 |
17 |
18 | Noori
19 |
20 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 | Hey there. I’m Abdul Ali.
50 | I’m a software developer
51 |
52 | I can help you build a product,
53 | feature or website Look through some of my work and experience!
54 | If you like what you see and have a project you need coded,
55 | don’t hestiate to contact me.
56 |
57 |
58 |
87 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
177 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
219 |
220 | abdulalinoori@gmail.com
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
--------------------------------------------------------------------------------
/styles.css:
--------------------------------------------------------------------------------
1 | @import url("https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap");
2 |
3 | * {
4 | box-sizing: border-box;
5 | }
6 |
7 | *,
8 | *::before,
9 | *::after {
10 | box-sizing: inherit;
11 | }
12 |
13 | .btn {
14 | padding: 12px;
15 | color: white;
16 | height: 24px;
17 | text-decoration: none;
18 | background-color: #36b37f;
19 | border-radius: 4px;
20 | font-weight: 600;
21 | font-size: 16px;
22 | line-height: 20px;
23 | display: flex;
24 | align-items: center;
25 | text-align: center;
26 | flex-wrap: nowrap;
27 | border: none;
28 | }
29 |
30 | .btn a {
31 | text-decoration: none;
32 | color: white;
33 | }
34 |
35 | body {
36 | margin: 0;
37 | padding: 0;
38 | font-family: "Inter", "Open Sans", "Helvetica Neue", Helvetica, sans-serif;
39 | overflow-x: hidden;
40 | }
41 |
42 | .wrapper {
43 | width: 375px;
44 | margin: 0 auto;
45 | display: flex;
46 | flex-direction: column;
47 | justify-content: center;
48 | background-color: #fff;
49 | overflow-x: hidden;
50 | gap: 40px;
51 | }
52 |
53 | header {
54 | width: calc(100% - 6px);
55 | font-weight: 600;
56 | font-size: 1.3rem;
57 | display: flex;
58 | align-items: center;
59 | justify-content: space-between;
60 | }
61 |
62 | .nav-branding {
63 | color: black;
64 | text-decoration: none;
65 | }
66 |
67 | .nav-branding.active {
68 | color: white;
69 | }
70 |
71 | .navbar ul li {
72 | list-style: none;
73 | }
74 |
75 | .navbar ul li a {
76 | color: #4a3a3b;
77 | font-size: 2rem;
78 | font-weight: 600;
79 | text-decoration: none;
80 | }
81 |
82 | .navbar {
83 | width: 100%;
84 | min-height: 60px;
85 | padding: 0 24px;
86 | display: flex;
87 | justify-content: space-between;
88 | align-items: center;
89 | }
90 |
91 | .nav-menu {
92 | width: 100%;
93 | height: 90vh;
94 | position: fixed;
95 | top: 50px;
96 | right: -120%;
97 | display: flex;
98 | flex-direction: column;
99 | background-color: white;
100 | justify-content: flex-start;
101 | align-items: flex-start;
102 | transition: 0.5s ease;
103 | z-index: 10;
104 | }
105 |
106 | .nav-link {
107 | transition: 0.7s ease;
108 | }
109 |
110 | .nav-link:hover {
111 | color: green;
112 | }
113 |
114 | .bar {
115 | display: block;
116 | width: 25px;
117 | height: 3px;
118 | margin: 5px auto;
119 | -webkit-transition: all 0.3s ease-in-out;
120 | transition: all 0.3s ease-in-out;
121 | background-color: black;
122 | }
123 |
124 | .humburger {
125 | cursor: pointer;
126 | }
127 |
128 | .humburger.active .bar:nth-child(2) {
129 | opacity: 0;
130 | }
131 |
132 | .humburger.active .bar:nth-child(1) {
133 | width: 22px;
134 | height: 2px;
135 | margin: 5px auto;
136 | background-color: #67798e;
137 | transform: translateY(8px) rotate(45deg);
138 | }
139 |
140 | .humburger.active .bar:nth-child(3) {
141 | width: 22px;
142 | height: 2px;
143 | margin: 5px auto;
144 | background-color: #67798e;
145 | transform: translateY(-8px) rotate(-45deg);
146 | }
147 |
148 | .nav-item {
149 | margin: 16px 0;
150 | }
151 |
152 | .nav-menu.active {
153 | right: 0;
154 | left: 1%;
155 | }
156 |
157 | .main {
158 | display: flex;
159 | flex-direction: column;
160 | justify-content: center;
161 | gap: 60px;
162 | }
163 |
164 | /* ----------------------------------Headline Section------------------------------------ */
165 |
166 | .headline {
167 | height: 80vh;
168 | display: flex;
169 | padding: 20% 10% 0;
170 | flex-direction: column;
171 | align-items: center;
172 | background: url("images/header-illsutration-mobile.svg");
173 | background-position: top;
174 | background-repeat: no-repeat;
175 | }
176 |
177 | .greeting-text,
178 | .profission-text,
179 | .supporting-text {
180 | text-align: center;
181 | }
182 |
183 | .greeting-text,
184 | .profission-text {
185 | margin: 3px;
186 | font-size: 1.8em;
187 | font-weight: 700;
188 | }
189 |
190 | .profission-text {
191 | color: rgb(66, 188, 148);
192 | }
193 |
194 | .supporting-text {
195 | margin: 1rem 2rem;
196 | line-height: 1.6;
197 | font-weight: 500;
198 | }
199 |
200 | .social-media {
201 | width: 60%;
202 | }
203 |
204 | .social-media ul {
205 | margin: 0;
206 | padding: 0;
207 | display: flex;
208 | justify-content: space-between;
209 | list-style-type: none;
210 | margin-top: 7vh;
211 | }
212 |
213 | .action-arrow-down {
214 | position: absolute;
215 | bottom: 0;
216 | }
217 |
218 | /* ----------------------------------Recent Section------------------------------------ */
219 |
220 | .grid {
221 | display: grid;
222 | }
223 |
224 | .recent-work {
225 | width: 100%;
226 | margin: 0 auto;
227 | justify-items: center;
228 | }
229 |
230 | .recent-wrok-header {
231 | width: 70%;
232 | font-size: 1.3rem;
233 | font-weight: 600;
234 | text-align: center;
235 | }
236 |
237 | .recent-wrok-header h1 {
238 | margin: 5px auto;
239 | }
240 |
241 | .recent-wrok-header hr {
242 | width: 25%;
243 | margin: 0 auto;
244 | border: 3px solid green;
245 | border-radius: 3px;
246 | }
247 |
248 | .recent-work-container {
249 | width: 331px;
250 | margin-top: 50px;
251 | gap: 25px;
252 | }
253 |
254 | .recent-work-carts {
255 | width: 100%;
256 | height: 474px;
257 | border-radius: 8px;
258 | border: 1px solid #d0d9d4;
259 | background-color: #ebf0ee;
260 | }
261 |
262 | .cart-snapshoot {
263 | width: 100%;
264 | height: 252px;
265 | }
266 |
267 | .cart-snapshoot img {
268 | border-radius: 8px 8px 0 0;
269 | }
270 |
271 | .cart-summary {
272 | width: calc(100% - 22px);
273 | height: 200px;
274 | padding: 11px;
275 | display: flex;
276 | flex-direction: column;
277 | align-items: center;
278 | gap: 1rem;
279 | background: #fff;
280 | border-radius: 8px;
281 | }
282 |
283 | .project-title {
284 | font-weight: 600;
285 | font-size: 24px;
286 | line-height: 32px;
287 | margin: 5px;
288 | display: flex;
289 | align-items: center;
290 | text-align: center;
291 | color: #3a4a42;
292 | }
293 |
294 | .project-tags {
295 | display: flex;
296 | align-items: center;
297 | list-style-type: none;
298 | padding: 0;
299 | margin: 0;
300 | gap: 8px;
301 | height: 32px;
302 | }
303 |
304 | .cart-summary ul li {
305 | display: flex;
306 | align-items: center;
307 | padding: 8px 12px;
308 | background: #ebf0ee;
309 | border-radius: 4px;
310 | color: #3a4a42;
311 | font-size: 12px;
312 | font-weight: 600;
313 | line-height: 16px;
314 | }
315 |
316 | .cart-summary .btn {
317 | height: 20px;
318 | font-weight: 500;
319 | }
320 |
321 | /* ----------------------------------About me Section------------------------------------ */
322 |
323 | .about-me {
324 | width: 100%;
325 | margin: 0 auto;
326 | justify-items: center;
327 | }
328 |
329 | .about-me-header {
330 | width: 100%;
331 | display: flex;
332 | align-items: center;
333 | flex-direction: column;
334 | background: url("images/aboutme-topright.svg"), url("images/aboutme-bottomleft.svg");
335 | background-position: right top, left bottom;
336 | background-repeat: no-repeat;
337 | }
338 |
339 | .about-me-header h1 {
340 | width: 60%;
341 | font-size: 1.8em;
342 | font-weight: 700;
343 | text-align: center;
344 | }
345 |
346 | .about-me-header p {
347 | width: 70%;
348 | margin: 0 auto 25px;
349 | line-height: 1.6;
350 | font-weight: 500;
351 | text-align: center;
352 | }
353 |
354 | .about-me-header .btn {
355 | width: 135px;
356 | font-weight: 500;
357 | text-align: center;
358 | display: flex;
359 | justify-content: center;
360 | align-items: center;
361 | }
362 |
363 | .about-me-carts-container {
364 | width: 331px;
365 | margin-top: 50px;
366 | gap: 25px;
367 | }
368 |
369 | .about-me-carts {
370 | width: 100%;
371 | height: 352px;
372 | padding-bottom: 5%;
373 | border-radius: 8px;
374 | border: 1px solid #c1c7d0;
375 | background-color: #ebf0ee;
376 | transition: width 2.5s, height 2.5s;
377 | }
378 |
379 | .about-me-carts:hover {
380 | width: 96%;
381 | height: 342px;
382 | margin: 5px 2% 5px 2%;
383 | }
384 |
385 | .icon-placeholder {
386 | width: 100%;
387 | height: 128px;
388 | margin-top: 30px;
389 | display: flex;
390 | justify-content: center;
391 | align-items: center;
392 | }
393 |
394 | .title-tags {
395 | width: 100%;
396 | margin-top: 30px;
397 | display: flex;
398 | flex-direction: column;
399 | justify-content: center;
400 | align-items: center;
401 | }
402 |
403 | .about-cart-title {
404 | font-weight: 600;
405 | font-size: 24px;
406 | line-height: 32px;
407 | text-align: center;
408 | color: #344563;
409 | }
410 |
411 | .about-cart-tags {
412 | display: flex;
413 | flex-wrap: wrap;
414 | justify-content: center;
415 | align-items: center;
416 | list-style-type: none;
417 | padding: 0;
418 | height: 40px;
419 | gap: 8px;
420 | }
421 |
422 | .title-tags ul li {
423 | display: flex;
424 | padding: 8px 12px;
425 | background: #fff;
426 | font-weight: 600;
427 | font-size: 12px;
428 | line-height: 16px;
429 | color: #36b37e;
430 | border-radius: 8px;
431 | }
432 |
433 | .form-itself small {
434 | color: red;
435 | font-size: 0.8rem;
436 | }
437 |
438 | /* ----------------------------------form Section------------------------------------ */
439 |
440 | .from-section {
441 | width: 100%;
442 | padding-bottom: 5vh;
443 | display: flex;
444 | justify-content: center;
445 | background: url("images/contact-form-illustration.svg");
446 | background-position: right bottom;
447 | background-repeat: no-repeat;
448 | }
449 |
450 | .form-section-container {
451 | width: 331px;
452 | display: flex;
453 | flex-direction: column;
454 | justify-content: center;
455 | align-items: center;
456 | gap: 30px;
457 | }
458 |
459 | .form-header {
460 | font-size: 2rem;
461 | font-weight: 600;
462 | line-height: 2.4rem;
463 | color: #172b4d;
464 | text-align: justify;
465 | }
466 |
467 | .form-itself {
468 | width: 100%;
469 | display: flex;
470 | flex-direction: column;
471 | gap: 20px;
472 | }
473 |
474 | .form-itself input,
475 | .form-itself textarea {
476 | padding: 10px;
477 | font-weight: 400;
478 | font-size: 15px;
479 | line-height: 24px;
480 | border: 1px solid #d0d9d4;
481 | border-radius: 4px;
482 | }
483 |
484 | .form-itself textarea {
485 | height: 100px;
486 | }
487 |
488 | .form-itself .btn {
489 | width: 129px;
490 | font-weight: 500;
491 | font-size: 17px;
492 | line-height: 24px;
493 | display: flex;
494 | align-items: center;
495 | justify-content: center;
496 | }
497 |
498 | /* ----------------------------------footer Section------------------------------------ */
499 |
500 | footer {
501 | display: flex;
502 | flex-direction: column;
503 | justify-content: center;
504 | align-items: center;
505 | padding-bottom: 100px;
506 | }
507 |
508 | .footer .footer-social-media {
509 | display: flex;
510 | align-items: center;
511 | justify-content: center;
512 | }
513 |
514 | footer .footer-social-media ul {
515 | padding: 0;
516 | display: flex;
517 | gap: 12%;
518 | justify-content: center;
519 | list-style-type: none;
520 | }
521 |
522 | /* --------------------------------------------Desktop-View Styles---------------------------------------------- */
523 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "my-portfolio",
3 | "version": "1.0.0",
4 | "description": "The place for my work history.",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "repository": {
10 | "type": "git",
11 | "url": "git+https://github.com/ab-noori/My-Portfolio.git"
12 | },
13 | "keywords": [],
14 | "author": "",
15 | "license": "ISC",
16 | "bugs": {
17 | "url": "https://github.com/ab-noori/My-Portfolio/issues"
18 | },
19 | "homepage": "https://github.com/ab-noori/My-Portfolio#readme",
20 | "devDependencies": {
21 | "babel-eslint": "^10.1.0",
22 | "eslint": "^7.32.0",
23 | "eslint-config-airbnb-base": "^14.2.1",
24 | "eslint-plugin-import": "^2.27.5",
25 | "hint": "^7.1.3",
26 | "stylelint": "^13.13.1",
27 | "stylelint-config-standard": "^21.0.0",
28 | "stylelint-csstree-validator": "^1.9.0",
29 | "stylelint-scss": "^3.21.0"
30 | },
31 | "dependencies": {
32 | "abab": "^2.0.6",
33 | "abbrev": "^1.1.1",
34 | "acorn": "^8.8.1",
35 | "acorn-globals": "^7.0.1",
36 | "acorn-jsx": "^5.3.2",
37 | "acorn-jsx-walk": "^2.0.0",
38 | "acorn-walk": "^8.2.0",
39 | "agent-base": "^6.0.2",
40 | "agentkeepalive": "^4.2.1",
41 | "aggregate-error": "^3.1.0",
42 | "ajv": "^8.12.0",
43 | "ajv-formats": "^2.1.1",
44 | "ansi-align": "^3.0.1",
45 | "ansi-regex": "^5.0.1",
46 | "ansi-styles": "^4.3.0",
47 | "anymatch": "^3.1.3",
48 | "aproba": "^2.0.0",
49 | "are-we-there-yet": "^2.0.0",
50 | "array-union": "^2.1.0",
51 | "arrify": "^1.0.1",
52 | "ast-types": "^0.13.4",
53 | "astral-regex": "^2.0.0",
54 | "async": "^3.2.4",
55 | "asynckit": "^0.4.0",
56 | "autoprefixer": "^9.8.8",
57 | "axe-core": "^4.6.2",
58 | "bail": "^1.0.5",
59 | "balanced-match": "^1.0.2",
60 | "base64-js": "^1.5.1",
61 | "bcp47": "^1.1.2",
62 | "binary-extensions": "^2.2.0",
63 | "bl": "^4.1.0",
64 | "boolbase": "^1.0.0",
65 | "boxen": "^5.1.2",
66 | "brace-expansion": "^1.1.11",
67 | "braces": "^3.0.2",
68 | "browserslist": "^4.21.4",
69 | "buffer": "^5.7.1",
70 | "buffer-crc32": "^0.2.13",
71 | "builtins": "^5.0.1",
72 | "bytes": "^3.1.2",
73 | "cacache": "^16.1.3",
74 | "cacheable-lookup": "^5.0.4",
75 | "cacheable-request": "^7.0.2",
76 | "callsites": "^3.1.0",
77 | "camelcase": "^6.3.0",
78 | "camelcase-keys": "^6.2.2",
79 | "caniuse-lite": "^1.0.30001444",
80 | "canvas": "^2.11.0",
81 | "chalk": "^4.1.2",
82 | "character-entities": "^1.2.4",
83 | "character-entities-legacy": "^1.1.4",
84 | "character-reference-invalid": "^1.1.4",
85 | "chokidar": "^3.5.3",
86 | "chownr": "^2.0.0",
87 | "ci-info": "^3.7.1",
88 | "clean-stack": "^2.2.0",
89 | "cli-boxes": "^2.2.1",
90 | "cli-cursor": "^3.1.0",
91 | "cli-spinners": "^2.7.0",
92 | "clone": "^1.0.4",
93 | "clone-regexp": "^2.2.0",
94 | "clone-response": "^1.0.3",
95 | "cloudinary": "^1.33.0",
96 | "cloudinary-core": "^2.13.0",
97 | "color-convert": "^2.0.1",
98 | "color-name": "^1.1.4",
99 | "color-string": "^1.9.1",
100 | "color-support": "^1.1.3",
101 | "combined-stream": "^1.0.8",
102 | "concat-map": "^0.0.1",
103 | "configstore": "^5.0.1",
104 | "console-control-strings": "^1.1.0",
105 | "content-type": "^1.0.4",
106 | "convert-source-map": "^1.9.0",
107 | "core-js": "^3.27.1",
108 | "core-util-is": "^1.0.3",
109 | "cosmiconfig": "^7.1.0",
110 | "cross-fetch": "^3.1.5",
111 | "cross-spawn": "^7.0.3",
112 | "crypto-random-string": "^2.0.0",
113 | "css-select": "^4.3.0",
114 | "css-tree": "^1.1.3",
115 | "css-what": "^6.1.0",
116 | "cssesc": "^3.0.0",
117 | "cssom": "^0.5.0",
118 | "cssstyle": "^2.3.0",
119 | "data-uri-to-buffer": "^3.0.1",
120 | "data-urls": "^3.0.2",
121 | "debug": "^4.3.4",
122 | "decamelize": "^1.2.0",
123 | "decamelize-keys": "^1.1.1",
124 | "decimal.js": "^10.4.3",
125 | "decompress-response": "^6.0.0",
126 | "deep-extend": "^0.6.0",
127 | "deep-is": "^0.1.4",
128 | "defaults": "^1.0.4",
129 | "defer-to-connect": "^2.0.1",
130 | "degenerator": "^3.0.2",
131 | "delayed-stream": "^1.0.0",
132 | "delegates": "^1.0.0",
133 | "depd": "^1.1.2",
134 | "detect-libc": "^2.0.1",
135 | "devtools-protocol": "^0.0.981744",
136 | "dir-glob": "^3.0.1",
137 | "dom-serializer": "^1.4.1",
138 | "domelementtype": "^2.3.0",
139 | "domexception": "^4.0.0",
140 | "domhandler": "^4.3.1",
141 | "domutils": "^2.8.0",
142 | "dot-prop": "^5.3.0",
143 | "duplexer3": "^0.1.5",
144 | "ejs": "^3.1.8",
145 | "electron-to-chromium": "^1.4.284",
146 | "emoji-regex": "^8.0.0",
147 | "encoding": "^0.1.13",
148 | "end-of-stream": "^1.4.4",
149 | "entities": "^2.2.0",
150 | "err-code": "^2.0.3",
151 | "error-ex": "^1.3.2",
152 | "escalade": "^3.1.1",
153 | "escape-goat": "^2.1.1",
154 | "escape-string-regexp": "^1.0.5",
155 | "escodegen": "^2.0.0",
156 | "eslint-visitor-keys": "^3.3.0",
157 | "esprima": "^4.0.1",
158 | "estraverse": "^5.3.0",
159 | "esutils": "^2.0.3",
160 | "eventemitter2": "^6.4.9",
161 | "execa": "^4.1.0",
162 | "execall": "^2.0.0",
163 | "extend": "^3.0.2",
164 | "extract-zip": "^2.0.1",
165 | "fast-deep-equal": "^3.1.3",
166 | "fast-glob": "^3.2.12",
167 | "fast-levenshtein": "^2.0.6",
168 | "fast-xml-parser": "^3.21.1",
169 | "fastest-levenshtein": "^1.0.16",
170 | "fastq": "^1.15.0",
171 | "fd-slicer": "^1.1.0",
172 | "file-entry-cache": "^6.0.1",
173 | "file-type": "^16.5.4",
174 | "file-uri-to-path": "^2.0.0",
175 | "filelist": "^1.0.4",
176 | "fill-range": "^7.0.1",
177 | "find-up": "^4.1.0",
178 | "flat-cache": "^3.0.4",
179 | "flatted": "^3.2.7",
180 | "form-data": "^4.0.0",
181 | "fs-constants": "^1.0.0",
182 | "fs-extra": "^10.1.0",
183 | "fs-minipass": "^2.1.0",
184 | "fs.realpath": "^1.0.0",
185 | "ftp": "^0.3.10",
186 | "function-bind": "^1.1.1",
187 | "gauge": "^3.0.2",
188 | "gensync": "^1.0.0-beta.2",
189 | "get-stdin": "^8.0.0",
190 | "get-stream": "^5.2.0",
191 | "get-uri": "^3.0.2",
192 | "glob": "^8.0.3",
193 | "glob-parent": "^5.1.2",
194 | "global-dirs": "^3.0.1",
195 | "global-modules": "^2.0.0",
196 | "global-prefix": "^3.0.0",
197 | "globals": "^11.12.0",
198 | "globby": "^11.1.0",
199 | "globjoin": "^0.1.4",
200 | "gonzales-pe": "^4.3.0",
201 | "got": "^11.8.6",
202 | "graceful-fs": "^4.2.10",
203 | "hard-rejection": "^2.1.0",
204 | "has": "^1.0.3",
205 | "has-flag": "^4.0.0",
206 | "has-unicode": "^2.0.1",
207 | "has-yarn": "^2.1.0",
208 | "hosted-git-info": "^5.2.1",
209 | "html-encoding-sniffer": "^3.0.0",
210 | "html-tags": "^3.2.0",
211 | "htmlparser2": "^3.10.1",
212 | "http-cache-semantics": "^4.1.0",
213 | "http-errors": "^2.0.0",
214 | "http-proxy-agent": "^5.0.0",
215 | "http2-wrapper": "^1.0.3",
216 | "https": "^1.0.0",
217 | "https-proxy-agent": "^5.0.1",
218 | "human-signals": "^1.1.1",
219 | "humanize-ms": "^1.2.1",
220 | "iconv-lite": "^0.6.3",
221 | "ieee754": "^1.2.1",
222 | "ignore": "^5.2.4",
223 | "image-size": "^1.0.2",
224 | "import-fresh": "^3.3.0",
225 | "import-lazy": "^2.1.0",
226 | "imurmurhash": "^0.1.4",
227 | "indent-string": "^4.0.0",
228 | "infer-owner": "^1.0.4",
229 | "inflight": "^1.0.6",
230 | "inherits": "^2.0.4",
231 | "ini": "^2.0.0",
232 | "invert-kv": "^3.0.1",
233 | "ip": "^1.1.8",
234 | "is-alphabetical": "^1.0.4",
235 | "is-alphanumerical": "^1.0.4",
236 | "is-arrayish": "^0.3.2",
237 | "is-binary-path": "^2.1.0",
238 | "is-buffer": "^2.0.5",
239 | "is-ci": "^3.0.1",
240 | "is-core-module": "^2.11.0",
241 | "is-decimal": "^1.0.4",
242 | "is-docker": "^2.2.1",
243 | "is-extglob": "^2.1.1",
244 | "is-fullwidth-code-point": "^3.0.0",
245 | "is-glob": "^4.0.3",
246 | "is-hexadecimal": "^1.0.4",
247 | "is-installed-globally": "^0.4.0",
248 | "is-interactive": "^1.0.0",
249 | "is-lambda": "^1.0.1",
250 | "is-npm": "^5.0.0",
251 | "is-number": "^7.0.0",
252 | "is-obj": "^2.0.0",
253 | "is-path-inside": "^3.0.3",
254 | "is-plain-obj": "^1.1.0",
255 | "is-potential-custom-element-name": "^1.0.1",
256 | "is-regexp": "^2.1.0",
257 | "is-stream": "^2.0.1",
258 | "is-svg": "^4.3.2",
259 | "is-typedarray": "^1.0.0",
260 | "is-unicode-supported": "^0.1.0",
261 | "is-wsl": "^2.2.0",
262 | "is-yarn-global": "^0.3.0",
263 | "isarray": "^0.0.1",
264 | "isexe": "^2.0.0",
265 | "jake": "^10.8.5",
266 | "js-library-detector": "^6.5.0",
267 | "js-tokens": "^4.0.0",
268 | "jsdom": "^20.0.3",
269 | "jsesc": "^2.5.2",
270 | "json-buffer": "^3.0.1",
271 | "json-parse-even-better-errors": "^2.3.1",
272 | "json-schema-traverse": "^1.0.0",
273 | "json5": "^2.2.3",
274 | "jsonc-parser": "^3.2.0",
275 | "jsonfile": "^6.1.0",
276 | "jsonparse": "^1.3.1",
277 | "keyv": "^4.5.2",
278 | "kind-of": "^6.0.3",
279 | "known-css-properties": "^0.21.0",
280 | "latest-version": "^7.0.0",
281 | "lcid": "^3.1.1",
282 | "levn": "^0.4.1",
283 | "lines-and-columns": "^1.2.4",
284 | "locate-path": "^5.0.0",
285 | "lockfile": "^1.0.4",
286 | "lodash": "^4.17.21",
287 | "lodash.truncate": "^4.4.2",
288 | "log-symbols": "^4.1.0",
289 | "longest-streak": "^2.0.4",
290 | "lowercase-keys": "^2.0.0",
291 | "lru-cache": "^7.14.1",
292 | "make-dir": "^3.1.0",
293 | "make-fetch-happen": "^10.2.1",
294 | "map-age-cleaner": "^0.1.3",
295 | "map-obj": "^4.3.0",
296 | "mathml-tag-names": "^2.1.3",
297 | "mdast-util-from-markdown": "^0.8.5",
298 | "mdast-util-to-markdown": "^0.6.5",
299 | "mdast-util-to-string": "^2.0.0",
300 | "mdn-data": "^2.0.30",
301 | "mem": "^5.1.1",
302 | "meow": "^9.0.0",
303 | "merge-stream": "^2.0.0",
304 | "merge2": "^1.4.1",
305 | "metaviewport-parser": "^0.2.0",
306 | "micromark": "^2.11.4",
307 | "micromatch": "^4.0.5",
308 | "mime-db": "^1.52.0",
309 | "mime-types": "^2.1.35",
310 | "mimic-fn": "^2.1.0",
311 | "mimic-response": "^1.0.1",
312 | "min-indent": "^1.0.1",
313 | "minimatch": "^3.1.2",
314 | "minimist": "^1.2.7",
315 | "minimist-options": "^4.1.0",
316 | "minipass": "^3.3.6",
317 | "minipass-collect": "^1.0.2",
318 | "minipass-fetch": "^2.1.2",
319 | "minipass-flush": "^1.0.5",
320 | "minipass-json-stream": "^1.0.1",
321 | "minipass-pipeline": "^1.2.4",
322 | "minipass-sized": "^1.0.3",
323 | "minizlib": "^2.1.2",
324 | "mkdirp": "^1.0.4",
325 | "mkdirp-classic": "^0.5.3",
326 | "ms": "^2.1.2",
327 | "mutationobserver-shim": "^0.3.7",
328 | "nan": "^2.17.0",
329 | "nanoid": "^3.3.4",
330 | "negotiator": "^0.6.3",
331 | "netmask": "^2.0.2",
332 | "node-fetch": "^2.6.8",
333 | "node-releases": "^2.0.8",
334 | "nopt": "^5.0.0",
335 | "normalize-package-data": "^3.0.3",
336 | "normalize-path": "^3.0.0",
337 | "normalize-range": "^0.1.2",
338 | "normalize-selector": "^0.2.0",
339 | "normalize-url": "^6.1.0",
340 | "npm-package-arg": "^9.1.2",
341 | "npm-registry-fetch": "^13.3.1",
342 | "npm-run-path": "^4.0.1",
343 | "npmlog": "^5.0.1",
344 | "nth-check": "^2.1.1",
345 | "num2fraction": "^1.2.2",
346 | "nwsapi": "^2.2.2",
347 | "object-assign": "^4.1.1",
348 | "once": "^1.4.0",
349 | "onetime": "^5.1.2",
350 | "optionator": "^0.9.1",
351 | "ora": "^5.4.1",
352 | "os-locale": "^5.0.0",
353 | "p-cancelable": "^2.1.1",
354 | "p-defer": "^1.0.0",
355 | "p-is-promise": "^2.1.0",
356 | "p-limit": "^2.3.0",
357 | "p-locate": "^4.1.0",
358 | "p-map": "^4.0.0",
359 | "p-try": "^2.2.0",
360 | "pac-proxy-agent": "^5.0.0",
361 | "pac-resolver": "^5.0.1",
362 | "package-json": "^8.1.0",
363 | "parent-module": "^1.0.1",
364 | "parse-entities": "^2.0.0",
365 | "parse-json": "^5.2.0",
366 | "parse5": "^6.0.1",
367 | "parse5-htmlparser2-tree-adapter": "^6.0.1",
368 | "path-exists": "^4.0.0",
369 | "path-is-absolute": "^1.0.1",
370 | "path-key": "^3.1.1",
371 | "path-parse": "^1.0.7",
372 | "path-type": "^4.0.0",
373 | "peek-readable": "^4.1.0",
374 | "pend": "^1.2.0",
375 | "picocolors": "^1.0.0",
376 | "picomatch": "^2.3.1",
377 | "pkg-dir": "^4.2.0",
378 | "postcss": "^8.4.21",
379 | "postcss-html": "^0.36.0",
380 | "postcss-less": "^5.0.0",
381 | "postcss-media-query-parser": "^0.2.3",
382 | "postcss-resolve-nested-selector": "^0.1.1",
383 | "postcss-safe-parser": "^6.0.0",
384 | "postcss-sass": "^0.5.0",
385 | "postcss-scss": "^4.0.6",
386 | "postcss-selector-parser": "^6.0.11",
387 | "postcss-syntax": "^0.36.2",
388 | "postcss-value-parser": "^4.2.0",
389 | "prelude-ls": "^1.2.1",
390 | "prepend-http": "^2.0.0",
391 | "proc-log": "^2.0.1",
392 | "progress": "^2.0.3",
393 | "promise-inflight": "^1.0.1",
394 | "promise-retry": "^2.0.1",
395 | "proxy-agent": "^5.0.0",
396 | "proxy-from-env": "^1.1.0",
397 | "psl": "^1.9.0",
398 | "pump": "^3.0.0",
399 | "punycode": "^2.2.0",
400 | "pupa": "^2.1.1",
401 | "puppeteer-core": "^13.7.0",
402 | "q": "^1.5.1",
403 | "querystringify": "^2.2.0",
404 | "queue": "^6.0.2",
405 | "queue-microtask": "^1.2.3",
406 | "quick-lru": "^5.1.1",
407 | "raw-body": "^2.5.1",
408 | "rc": "^1.2.8",
409 | "read-pkg": "^5.2.0",
410 | "read-pkg-up": "^7.0.1",
411 | "readable-stream": "^3.6.0",
412 | "readable-web-to-node-stream": "^3.0.2",
413 | "readdirp": "^3.6.0",
414 | "redent": "^3.0.0",
415 | "registry-auth-token": "^4.2.2",
416 | "registry-url": "^5.1.0",
417 | "remark": "^13.0.0",
418 | "remark-parse": "^9.0.0",
419 | "remark-stringify": "^9.0.1",
420 | "repeat-string": "^1.6.1",
421 | "require-from-string": "^2.0.2",
422 | "requires-port": "^1.0.0",
423 | "resolve": "^1.22.1",
424 | "resolve-alpn": "^1.2.1",
425 | "resolve-from": "^5.0.0",
426 | "responselike": "^2.0.1",
427 | "restore-cursor": "^3.1.0",
428 | "retry": "^0.12.0",
429 | "reusify": "^1.0.4",
430 | "rimraf": "^3.0.2",
431 | "run-parallel": "^1.2.0",
432 | "safe-buffer": "^5.2.1",
433 | "safer-buffer": "^2.1.2",
434 | "saxes": "^6.0.0",
435 | "semver": "^7.3.8",
436 | "semver-diff": "^3.1.1",
437 | "set-blocking": "^2.0.0",
438 | "setimmediate": "^1.0.5",
439 | "setprototypeof": "^1.2.0",
440 | "shebang-command": "^2.0.0",
441 | "shebang-regex": "^3.0.0",
442 | "signal-exit": "^3.0.7",
443 | "simple-concat": "^1.0.1",
444 | "simple-get": "^3.1.1",
445 | "simple-swizzle": "^0.2.2",
446 | "slash": "^3.0.0",
447 | "slice-ansi": "^4.0.0",
448 | "smart-buffer": "^4.2.0",
449 | "socks": "^2.7.1",
450 | "socks-proxy-agent": "^7.0.0",
451 | "source-map": "^0.6.1",
452 | "source-map-js": "^1.0.2",
453 | "spdx-correct": "^3.1.1",
454 | "spdx-exceptions": "^2.3.0",
455 | "spdx-expression-parse": "^3.0.1",
456 | "spdx-license-ids": "^3.0.12",
457 | "specificity": "^0.4.1",
458 | "ssri": "^9.0.1",
459 | "statuses": "^2.0.1",
460 | "string_decoder": "^1.3.0",
461 | "string-width": "^4.2.3",
462 | "strip-ansi": "^6.0.1",
463 | "strip-final-newline": "^2.0.0",
464 | "strip-indent": "^3.0.0",
465 | "strip-json-comments": "^2.0.1",
466 | "strnum": "^1.0.5",
467 | "strtok3": "^6.3.0",
468 | "style-search": "^0.1.0",
469 | "stylelint-config-recommended": "^4.0.0",
470 | "sugarss": "^2.0.0",
471 | "supports-color": "^7.2.0",
472 | "supports-preserve-symlinks-flag": "^1.0.0",
473 | "svg-tags": "^1.0.0",
474 | "symbol-tree": "^3.2.4",
475 | "table": "^6.8.1",
476 | "tar": "^6.1.13",
477 | "tar-fs": "^2.1.1",
478 | "tar-stream": "^2.2.0",
479 | "text-table": "^0.2.0",
480 | "through": "^2.3.8",
481 | "to-fast-properties": "^2.0.0",
482 | "to-readable-stream": "^1.0.0",
483 | "to-regex-range": "^5.0.1",
484 | "toidentifier": "^1.0.1",
485 | "token-types": "^4.2.1",
486 | "tough-cookie": "^4.1.2",
487 | "tr46": "^3.0.0",
488 | "trim-newlines": "^3.0.1",
489 | "trough": "^1.0.5",
490 | "tslib": "^2.4.1",
491 | "tsutils": "^3.21.0",
492 | "type-check": "^0.4.0",
493 | "type-fest": "^0.20.2",
494 | "typedarray-to-buffer": "^3.1.5",
495 | "typescript": "^4.9.4",
496 | "unbzip2-stream": "^1.4.3",
497 | "unified": "^9.2.2",
498 | "unique-filename": "^2.0.1",
499 | "unique-slug": "^3.0.0",
500 | "unique-string": "^2.0.0",
501 | "unist-util-find-all-after": "^3.0.2",
502 | "unist-util-is": "^4.1.0",
503 | "unist-util-stringify-position": "^2.0.3",
504 | "universalify": "^2.0.0",
505 | "unpipe": "^1.0.0",
506 | "update-browserslist-db": "^1.0.10",
507 | "update-notifier": "^6.0.2",
508 | "uri-js": "^4.4.1",
509 | "url-parse": "^1.5.10",
510 | "url-parse-lax": "^3.0.0",
511 | "util-deprecate": "^1.0.2",
512 | "v8-compile-cache": "^2.3.0",
513 | "validate-npm-package-license": "^3.0.4",
514 | "validate-npm-package-name": "^4.0.0",
515 | "vfile": "^4.2.1",
516 | "vfile-message": "^2.0.4",
517 | "vm2": "^3.9.13",
518 | "w3c-xmlserializer": "^4.0.0",
519 | "wcwidth": "^1.0.1",
520 | "webidl-conversions": "^7.0.0",
521 | "whatwg-encoding": "^2.0.0",
522 | "whatwg-mimetype": "^3.0.0",
523 | "whatwg-url": "^11.0.0",
524 | "which": "^2.0.2",
525 | "wide-align": "^1.1.5",
526 | "widest-line": "^3.1.0",
527 | "word-wrap": "^1.2.3",
528 | "wrap-ansi": "^7.0.0",
529 | "wrappy": "^1.0.2",
530 | "write-file-atomic": "^3.0.3",
531 | "ws": "^8.12.0",
532 | "xdg-basedir": "^4.0.0",
533 | "xml-name-validator": "^4.0.0",
534 | "xmlchars": "^2.2.0",
535 | "xregexp": "^2.0.0",
536 | "yallist": "^4.0.0",
537 | "yaml": "^1.10.2",
538 | "yargs-parser": "^20.2.9",
539 | "yauzl": "^2.10.0",
540 | "zwitch": "^1.0.5"
541 | }
542 | }
543 |
--------------------------------------------------------------------------------
/images/header-illsutration-mobile.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
--------------------------------------------------------------------------------
/images/Header-llustration-desktop.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
--------------------------------------------------------------------------------