├── .eslintrc.json
├── .github
└── workflows
│ └── linters.yml
├── .gitignore
├── .hintrc
├── .stylelintrc.json
├── .vscode
└── settings.json
├── LICENSE
├── README.md
├── images
├── ArrowDown.svg
├── Cancel.svg
├── DEskImg3.png
├── DeskImg1.png
├── DeskImg2.png
├── DeskImg4.png
├── DesktopheaderBg.png
├── Disabled.svg
├── FooterBg.png
├── Linkedinicon.svg
├── Multipost2.svg
├── MutiPostStory.svg
├── TonicColor.svg
├── TonicImage.svg
├── Union.png
├── contact-form-Bg-mobile.svg
├── css3.svg
├── github.svg
├── hand.svg
├── header-shapes mobile@2x.svg
├── headerBack.png
├── headerTrans.png
├── html.svg
├── imageprofile4x.png
├── javascript.svg
├── m.svg
├── right.svg
├── seeLive.svg
├── sourceGit.svg
├── todoListImage.png
├── tonicImgDesktop.svg
└── twitter.svg
├── index.html
├── package-lock.json
├── package.json
├── script.js
└── style.css
/.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 |
--------------------------------------------------------------------------------
/.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-18.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-18.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@6.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-18.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-18.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 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Compiled class file
2 | *.class
3 |
4 | # Log file
5 | *.log
6 |
7 | # BlueJ files
8 | *.ctxt
9 |
10 | # Mobile Tools for Java (J2ME)
11 | .mtj.tmp/
12 |
13 | # Package Files #
14 | *.jar
15 | *.war
16 | *.nar
17 | *.ear
18 | *.zip
19 | *.tar.gz
20 | *.rar
21 |
22 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
23 | hs_err_pid*
24 |
25 | #node modules
26 | node_modules/
27 |
28 | #Rough NOte
29 | note.txt
30 |
--------------------------------------------------------------------------------
/.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 | }
--------------------------------------------------------------------------------
/.stylelintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": ["stylelint-config-standard"],
3 | "plugins": ["stylelint-scss", "stylelint-csstree-validator"],
4 | "rules": {
5 | "at-rule-no-unknown": null,
6 | "scss/at-rule-no-unknown": true,
7 | "csstree/validator": true
8 | },
9 | "ignoreFiles": ["build/**", "dist/**", "**/reset*.css", "**/bootstrap*.css", "**/*.js", "**/*.jsx"]
10 | }
11 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "liveServer.settings.port": 5501
3 | }
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 Kanu Mike Chibundu
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # My-portfolio
2 |
3 | My portfolio website to showcase my information as a web developer and my created projects
4 |
5 | # hello-microverse
6 |
7 | 
8 |
9 |
10 |
11 | This is the first GitHub Flow project
12 |
13 | Additional description about the project and its features.
14 |
15 | ## Live Preview
16 |
17 | LIVE DEMO: [Myportfolio](https://ginohmk.github.io/My-portfolio/)
18 |
19 | ## Built With
20 |
21 | - HTML & CSS
22 |
23 | ## Getting Started
24 |
25 | To get a local copy up and running follow these simple example steps.
26 |
27 | ### Prerequisites
28 |
29 | clone repo: `git@github.com:Ginohmk/My-portfolio.git`
30 |
31 | then
32 | `cd My-portfolio`
33 |
34 | ### Install
35 |
36 | run `npm install` to install dependencies
37 |
38 | ## Authors
39 |
40 | 👤 **Author**
41 |
42 | - GitHub: [@Ginohmk](https://github.com/Ginohmk)
43 | - Twitter: [@michotall95](https://www.twitter.com/michotall95)
44 | - LinkedIn: [@kanumike](https://www.linkedin.com/in/kanu-mike-497119211/)
45 | - Instagram: [@savy_kanu_mike](https/instagram.com/savy_kanu_mike)
46 | - Facebook: [@mike.kanu](https://www.facebook.com/mike.kanu)
47 |
48 | ## 🤝 Contribute
49 |
50 | Contributions, issues, and feature requests are welcome!
51 |
52 | Feel free to check the [issues page](../../issues/)
53 |
54 | ## Show your support
55 |
56 | Give a ⭐️ if you like this project!
57 |
58 | ## Acknowledgments
59 |
60 | - Hat tip to anyone whose code was used
61 | - Inspiration
62 | - etc
63 |
--------------------------------------------------------------------------------
/images/ArrowDown.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/images/Cancel.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/images/DEskImg3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codewithmike01/My-portfolio/13cd235feda6d9854018ce1aeeea44107ef2f6c9/images/DEskImg3.png
--------------------------------------------------------------------------------
/images/DeskImg1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codewithmike01/My-portfolio/13cd235feda6d9854018ce1aeeea44107ef2f6c9/images/DeskImg1.png
--------------------------------------------------------------------------------
/images/DeskImg2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codewithmike01/My-portfolio/13cd235feda6d9854018ce1aeeea44107ef2f6c9/images/DeskImg2.png
--------------------------------------------------------------------------------
/images/DeskImg4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codewithmike01/My-portfolio/13cd235feda6d9854018ce1aeeea44107ef2f6c9/images/DeskImg4.png
--------------------------------------------------------------------------------
/images/DesktopheaderBg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codewithmike01/My-portfolio/13cd235feda6d9854018ce1aeeea44107ef2f6c9/images/DesktopheaderBg.png
--------------------------------------------------------------------------------
/images/Disabled.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/images/FooterBg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codewithmike01/My-portfolio/13cd235feda6d9854018ce1aeeea44107ef2f6c9/images/FooterBg.png
--------------------------------------------------------------------------------
/images/Linkedinicon.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/images/Union.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codewithmike01/My-portfolio/13cd235feda6d9854018ce1aeeea44107ef2f6c9/images/Union.png
--------------------------------------------------------------------------------
/images/contact-form-Bg-mobile.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/images/css3.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/images/github.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/images/hand.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/images/header-shapes mobile@2x.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/images/headerBack.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codewithmike01/My-portfolio/13cd235feda6d9854018ce1aeeea44107ef2f6c9/images/headerBack.png
--------------------------------------------------------------------------------
/images/headerTrans.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codewithmike01/My-portfolio/13cd235feda6d9854018ce1aeeea44107ef2f6c9/images/headerTrans.png
--------------------------------------------------------------------------------
/images/html.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/images/imageprofile4x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codewithmike01/My-portfolio/13cd235feda6d9854018ce1aeeea44107ef2f6c9/images/imageprofile4x.png
--------------------------------------------------------------------------------
/images/javascript.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/images/m.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/images/right.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/images/seeLive.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/images/sourceGit.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/images/todoListImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codewithmike01/My-portfolio/13cd235feda6d9854018ce1aeeea44107ef2f6c9/images/todoListImage.png
--------------------------------------------------------------------------------
/images/twitter.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
9 |
10 |
19 |
20 |
21 |
22 |
23 |
24 | Mike's profolio page
25 |
26 |
27 |
28 |
29 |
30 |
31 |
53 |
54 |
55 |
56 | I'm Mike Glad to see you!
57 |
58 | I’m a software developer! I can help you build a product , feature or
59 | website Look through some of my work and experience! If you like what
60 | you see and have a project you need coded, don’t hestiate to contact
61 | me.
62 |
63 |
64 |
65 | LET'S CONNECT
66 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
101 |
102 |
103 |
104 |
105 |
106 | About Myself
107 |
108 | Hello I’m a software developer! I can help you build a product ,
109 | feature or website Look through some of my work and experience! If
110 | you like what you see and have a project you need coded, don’t
111 | hestiate to contact me.
112 |
113 |
114 | LET'S CONNECT
115 |
142 |
143 | Get my resume
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
Language
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 | Javascript
161 |
162 |
163 |
164 | HTML
165 |
166 |
167 |
168 | CSS
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
Frameworks
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 | Javascript
187 |
188 |
189 |
190 | HTML
191 |
192 |
193 |
194 | CSS
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
Skill
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 | Javascript
213 |
214 |
215 |
216 | HTML
217 |
218 |
219 |
220 | CSS
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
292 |
293 |
294 |
295 |
296 |
297 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "My-portfolio",
3 | "version": "1.0.0",
4 | "description": "My portfolio website to showcase my information as a web developer and my created projects",
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/Ginohmk/My-portfolio.git"
12 | },
13 | "keywords": [],
14 | "author": "",
15 | "license": "ISC",
16 | "bugs": {
17 | "url": "https://github.com/Ginohmk/My-portfolio/issues"
18 | },
19 | "homepage": "https://github.com/Ginohmk/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.25.3",
25 | "hint": "^6.1.9",
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 | }
32 |
--------------------------------------------------------------------------------
/script.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable prefer-const */
2 | const ham = document.querySelector('.hide-ham');
3 | const menuLink = document.querySelector('.desktop-menu');
4 | const cancelMenu = document.querySelector('.cancel-dropDown');
5 | const navLinks = Array.from(document.getElementsByClassName('link'));
6 | const navH1 = document.querySelector('.greet');
7 | const navP = document.querySelector('.banner-detail');
8 | const letConnect = document.querySelector('.connect');
9 | const logo = document.querySelector('.logo');
10 | const projectSection = document.getElementById('project-show-case');
11 | let count = 1;
12 | let modalCount = 1;
13 |
14 | // Creting Global elements ( For Cards)
15 | const divImg = document.createElement('div');
16 | divImg.setAttribute('class', 'project-img');
17 |
18 | const writeUp = document.createElement('section');
19 | writeUp.setAttribute('class', 'write-up');
20 |
21 | const titleDetail = document.createElement('section');
22 | titleDetail.setAttribute('class', 'title-detail-tag');
23 |
24 | const descriptionPara = document.createElement('p');
25 | descriptionPara.setAttribute('class', 'project-description');
26 |
27 | const ulTech = document.createElement('ul');
28 | ulTech.setAttribute('class', 'lang-tag');
29 |
30 | const cardButton = document.createElement('button');
31 | cardButton.setAttribute('class', 'see-project');
32 | cardButton.setAttribute('type', 'button');
33 |
34 | // Object storage for project details
35 | const projectObj = {
36 | projectOne: {
37 | imageUrl: './images/todoListImage.png',
38 | name: 'Todo List',
39 | tags: ['TODO LIST', 'Front End Dev', '2021'],
40 | description:
41 | 'A Todo List built with javascript, using Webpage features, to enable users to Add list of Todo Items, Edit Items and also delete ccompleted items',
42 | technology: ['html', 'css', 'javascript', 'WebPack'],
43 | projectDetails: 'See project',
44 | liveLink: 'https://ginohmk.github.io/TodoList-With-Webpack',
45 | sourceLink: 'https://github.com/Ginohmk/TodoList-With-Webpack.git',
46 | },
47 | projectTwo: {
48 | imageUrl: './images/MutiPostStory.svg',
49 | name: 'Multi-Post Stories',
50 | tags: ['CANOPY', 'Back End Dev', '2015'],
51 | description:
52 | 'A daily selection of privately personalized reads; no accounts or sign-ups required',
53 | technology: ['html', 'css', 'javascript'],
54 | projectDetails: 'See project',
55 | liveLink: '#',
56 | sourceLink: '#',
57 | },
58 | projectThree: {
59 | imageUrl: './images/TonicColor.svg',
60 | name: 'Facebook 360',
61 | tags: ['FACEBOOK', 'Full Stack Dev', '2015'],
62 | description:
63 | "Exploring the future of media in Facebook's first Virtual Reality app; a place to discover and enjoy 360 photos and videos on Gear VR.",
64 | technology: ['html', 'css', 'Ruby on Rails', 'javascript'],
65 | projectDetails: 'See project',
66 | liveLink: '#',
67 | sourceLink: '#',
68 | },
69 | projectFour: {
70 | imageUrl: './images/Multipost2.svg',
71 | name: 'Uber Navigation',
72 | tags: ['Uber', 'Lead Developer', '2018'],
73 | description:
74 | 'A smart assistant to make driving more safe, efficient, and fun by unlocking your most expensive computer: your car',
75 | technology: ['html', 'css', 'Ruby on Rails', 'javascript'],
76 | projectDetails: 'See project',
77 | liveLink: '#',
78 | sourceLink: '#',
79 | },
80 | };
81 |
82 | // Dynamically creating Cards
83 | Object.keys(projectObj).forEach((k) => {
84 | const section = document.createElement('section');
85 | section.classList.add('project-card');
86 | const projectAll = projectObj[k];
87 | Object.keys(projectAll).forEach((k) => {
88 | // image
89 | if (k === 'imageUrl') {
90 | // Change Imagies of card on desktop view ( in Css media query)
91 | if (count === 1) {
92 | divImg.setAttribute('id', 'one');
93 | } else if (count === 2) {
94 | divImg.setAttribute('id', 'two');
95 | } else if (count === 3) {
96 | divImg.setAttribute('id', 'three');
97 | } else {
98 | divImg.setAttribute('id', 'four');
99 | }
100 | divImg.innerHTML = ` `;
101 | section.appendChild(divImg.cloneNode(true));
102 | // eslint-disable-next-line brace-style
103 | }
104 | // name
105 | else if (k === 'name') {
106 | writeUp.innerHTML = `${projectAll[k]}
`;
107 | // eslint-disable-next-line brace-style
108 | }
109 | // Tags
110 | else if (k === 'tags') {
111 | const listTags = projectAll[k];
112 | titleDetail.innerHTML = `${listTags[0]}
113 |
114 | ${listTags[1]}
115 | ${listTags[2]}
116 | `;
117 | writeUp.appendChild(titleDetail);
118 | // eslint-disable-next-line brace-style
119 | }
120 | // description
121 | else if (k === 'description') {
122 | descriptionPara.textContent = `${projectAll[k]}`;
123 | writeUp.appendChild(descriptionPara);
124 | // eslint-disable-next-line brace-style
125 | }
126 | // technology used
127 | else if (k === 'technology') {
128 | const listTechTag = projectAll[k];
129 | let listFill = '';
130 |
131 | // for dynamic tech tag length
132 | // eslint-disable-next-line no-plusplus
133 | for (let i = 0; i < listTechTag.length; i++) {
134 | listFill += ` ${listTechTag[i]} `;
135 | }
136 | ulTech.innerHTML = `${listFill}`;
137 | writeUp.appendChild(ulTech);
138 | // eslint-disable-next-line brace-style
139 | }
140 | // button
141 | else if (k === 'projectDetails') {
142 | cardButton.innerHTML = `${projectAll[k]} `;
143 | writeUp.appendChild(cardButton.cloneNode(true));
144 | section.appendChild(writeUp.cloneNode(true));
145 | }
146 | });
147 | // eslint-disable-next-line no-plusplus
148 | count++;
149 | projectSection.appendChild(section);
150 | });
151 |
152 | /* Modal
153 | Creating Global Elements (For Modal)
154 | */
155 |
156 | const modalHead = document.createElement('div');
157 | modalHead.setAttribute('class', 'modal-head');
158 |
159 | const CancelDiv = document.createElement('div');
160 | CancelDiv.classList.add('image-cancel"');
161 |
162 | const h4 = document.createElement('h4');
163 |
164 | const mainModal = document.createElement('div');
165 | mainModal.setAttribute('class', 'main-modal');
166 |
167 | const modalTags = document.createElement('div');
168 | modalTags.setAttribute('class', 'modal-tags');
169 |
170 | const modalImage = document.createElement('div');
171 | modalImage.setAttribute('class', 'main-image');
172 |
173 | const flexDesk = document.createElement('div');
174 | flexDesk.setAttribute('class', 'flexDesk');
175 |
176 | const pModal = document.createElement('p');
177 |
178 | const flexRight = document.createElement('div');
179 | flexRight.setAttribute('class', 'flex-right');
180 |
181 | const rule = document.createElement('hr');
182 |
183 | const ulModal = document.createElement('ul');
184 |
185 | const liveButton = document.createElement('div');
186 | liveButton.setAttribute('class', 'button-live');
187 |
188 | const liveButton1 = document.createElement('div');
189 |
190 | const cardLine = document.createElement('div');
191 | cardLine.setAttribute('class', 'card-line');
192 |
193 | const cardModal = Array.from(document.getElementsByClassName('see-project'));
194 |
195 | // Modal Creation
196 | Object.keys(projectObj).forEach((k) => {
197 | const projectModalAll = projectObj[k];
198 | const sectionModal = document.createElement('section');
199 | sectionModal.classList.add('modal-container');
200 | const modalCard = document.createElement('div');
201 | modalCard.classList.add('modal-card');
202 | Object.keys(projectModalAll).forEach((k) => {
203 | const widthScreen = 991;
204 | if (k === 'name') {
205 | h4.textContent = `${projectModalAll[k]}`;
206 | CancelDiv.innerHTML = '×
';
207 | modalHead.appendChild(h4);
208 | modalHead.appendChild(CancelDiv);
209 | modalCard.appendChild(modalHead.cloneNode(true));
210 | }
211 | if (k === 'imageUrl') {
212 | if (window.screen.width > widthScreen) {
213 | if (modalCount === 1) {
214 | // eslint-disable-next-line operator-linebreak
215 | modalImage.innerHTML =
216 | ' ';
217 | } else if (modalCount === 2) {
218 | // eslint-disable-next-line operator-linebreak
219 | modalImage.innerHTML =
220 | ' ';
221 | } else if (modalCount === 3) {
222 | // eslint-disable-next-line operator-linebreak
223 | modalImage.innerHTML =
224 | ' ';
225 | } else {
226 | // eslint-disable-next-line operator-linebreak
227 | modalImage.innerHTML =
228 | ' ';
229 | }
230 | } else {
231 | modalImage.innerHTML = ` `;
232 | }
233 | mainModal.appendChild(modalImage);
234 | modalCard.append(mainModal);
235 | }
236 | if (k === 'tags') {
237 | const listModalTags = projectModalAll[k];
238 | modalTags.innerHTML = `${listModalTags[0]}
239 |
240 | ${listModalTags[1]}
241 | ${listModalTags[2]}
242 | `;
243 | mainModal.append(modalTags);
244 | modalCard.appendChild(mainModal);
245 | }
246 | if (k === 'description') {
247 | pModal.textContent = `${projectModalAll[k]}`;
248 | flexDesk.appendChild(pModal);
249 | mainModal.appendChild(flexDesk);
250 | }
251 |
252 | if (k === 'technology') {
253 | const listModal = projectModalAll[k];
254 | let listModalFill = '';
255 |
256 | // eslint-disable-next-line no-plusplus
257 | for (let j = 0; j < listModal.length; j++) {
258 | listModalFill += ` ${listModal[j]}`;
259 | }
260 | ulModal.innerHTML = `${listModalFill}`;
261 | flexRight.appendChild(ulModal);
262 | flexRight.appendChild(rule);
263 | flexDesk.appendChild(flexRight);
264 | }
265 |
266 | if (k === 'liveLink') {
267 | liveButton.innerHTML = `See live
268 |
269 | `;
270 | flexRight.appendChild(liveButton);
271 | }
272 |
273 | if (k === 'sourceLink') {
274 | liveButton1.innerHTML = `See source
275 |
276 | `;
277 | liveButton.appendChild(liveButton1);
278 | flexRight.appendChild(liveButton);
279 | }
280 | });
281 | // eslint-disable-next-line no-plusplus
282 | modalCount++;
283 | sectionModal.appendChild(modalCard);
284 | sectionModal.appendChild(cardLine);
285 | document.body.appendChild(sectionModal.cloneNode(true));
286 | });
287 |
288 | const modalAll = Array.from(document.getElementsByClassName('modal-container'));
289 | const modalImageCancel = Array.from(
290 | // eslint-disable-next-line comma-dangle
291 | document.getElementsByClassName('image-cancel')
292 | );
293 |
294 | // Add the display None Class
295 | Object.keys(modalAll).forEach((k) => {
296 | if (k === '0') {
297 | modalAll[k].classList.add('class', 'modalOne');
298 | } else if (k === '1') {
299 | modalAll[k].classList.add('class', 'modaltwo');
300 | } else if (k === '2') {
301 | modalAll[k].classList.add('class', 'modalthree');
302 | } else if (k === '3') {
303 | modalAll[k].classList.add('class', 'modalfour');
304 | }
305 | });
306 |
307 | // Show modal
308 | Object.keys(cardModal).forEach((k) => {
309 | cardModal[k].addEventListener('click', () => {
310 | if (k === '0') {
311 | modalAll[k].classList.toggle('modalOne');
312 | } else if (k === '1') {
313 | modalAll[k].classList.toggle('modaltwo');
314 | } else if (k === '2') {
315 | modalAll[k].classList.toggle('modalthree');
316 | } else if (k === '3') {
317 | modalAll[k].classList.toggle('modalfour');
318 | }
319 | });
320 | });
321 |
322 | // Close Modal
323 | Object.keys(modalImageCancel).forEach((k) => {
324 | modalImageCancel[k].addEventListener('click', () => {
325 | if (k === '0') {
326 | modalAll[k].classList.toggle('modalOne');
327 | } else if (k === '1') {
328 | modalAll[k].classList.toggle('modaltwo');
329 | } else if (k === '2') {
330 | modalAll[k].classList.toggle('modalthree');
331 | } else if (k === '3') {
332 | modalAll[k].classList.toggle('modalfour');
333 | }
334 | });
335 | });
336 |
337 | // Reload on screen size change
338 | window.addEventListener('resize', () => {
339 | window.location.reload();
340 | });
341 |
342 | /* Mobile Menu */
343 | function closeMobileMenu() {
344 | menuLink.classList.toggle('hide');
345 | navH1.classList.toggle('blur');
346 | navP.classList.toggle('blur');
347 | letConnect.classList.toggle('blur');
348 | ham.classList.toggle('blur');
349 | logo.classList.toggle('blur');
350 | }
351 |
352 | ham.addEventListener('click', closeMobileMenu);
353 |
354 | cancelMenu.addEventListener('click', closeMobileMenu);
355 |
356 | Object.keys(navLinks).forEach((k) => {
357 | if (k !== '') {
358 | navLinks[k].addEventListener('click', closeMobileMenu);
359 | }
360 | });
361 |
362 | // FORM VALIDATION & LOCAL STORAGE
363 | const formOne = document.getElementById('formOne');
364 | const inputName = document.getElementById('name');
365 | const email = document.getElementById('email');
366 | const textArea = document.getElementById('textArea');
367 | const lStorage = window.localStorage.getItem('data');
368 | const formEntry = {};
369 | let errorMsg = document.getElementById('errorMsg');
370 | let emailTest = '';
371 | let formTest = false;
372 |
373 | // eslint-disable-next-line no-trailing-spaces
374 | /* Get lowercase of each vale in
375 | email for testing real user case value */
376 |
377 | // Validation Starts
378 | email.addEventListener('keyup', () => {
379 | emailTest = email.value.toLowerCase();
380 | });
381 |
382 | formOne.addEventListener('submit', (e) => {
383 | if (emailTest !== email.value) {
384 | errorMsg.innerText = 'Email should be lowercase.';
385 | if (formTest === false) {
386 | errorMsg.classList.toggle('hideErr');
387 | }
388 | formTest = true;
389 | // To remove the errMsg when email input is clicked
390 | email.addEventListener('click', () => {
391 | if (formTest === true) {
392 | errorMsg.classList.toggle('hideErr');
393 | }
394 | formTest = false;
395 | });
396 | e.preventDefault();
397 | } else errorMsg = '';
398 | });
399 |
400 | // Local Storage Get user input Data
401 | function getUserData() {
402 | formEntry[inputName.name] = inputName.value;
403 | formEntry[email.name] = email.value;
404 | formEntry[textArea.name] = textArea.value;
405 | let items = JSON.stringify(formEntry);
406 | localStorage.setItem('data', `${items}`);
407 | }
408 |
409 | // Set user input value
410 | function setUserData() {
411 | const holdObj = JSON.parse(lStorage);
412 | inputName.value = holdObj.userName;
413 | email.value = holdObj.replyto;
414 | textArea.value = holdObj.message;
415 | }
416 |
417 | // on keyup to listen to User input
418 | formOne.addEventListener('keyup', () => {
419 | getUserData();
420 | });
421 |
422 | // Check and set user input value only when local storage is not empty
423 | if (lStorage) {
424 | setUserData();
425 | }
426 |
--------------------------------------------------------------------------------
/style.css:
--------------------------------------------------------------------------------
1 | /* Imported */
2 |
3 | @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@400;700&display=swap');
4 |
5 | /* General */
6 |
7 | html {
8 | box-sizing: border-box;
9 | overflow-x: hidden;
10 | }
11 |
12 | *,
13 | *::after,
14 | *::before {
15 | box-sizing: inherit;
16 | padding: 0;
17 | margin: 0;
18 | }
19 |
20 | /* Document code */
21 |
22 | body {
23 | overflow-y: hidden;
24 | scroll-behavior: smooth;
25 | position: relative;
26 | background: #e5e5e5;
27 | font-family: 'Poppins', sans-serif;
28 | }
29 |
30 | .desktop-bg {
31 | display: none;
32 | }
33 |
34 | .hero {
35 | position: relative;
36 | background-image: url(./images/headerTrans.png), url(./images/headerBack.png);
37 | background-repeat: no-repeat, no-repeat;
38 | background-position: 95%;
39 | border-bottom-left-radius: 25% 50px;
40 | background-size: cover;
41 | height: 93vh;
42 | width: 100%;
43 | display: flex;
44 | flex-direction: column;
45 | align-items: center;
46 | justify-content: flex-start;
47 | gap: 12%;
48 | }
49 |
50 | .desktop-menu {
51 | position: absolute;
52 | top: 0;
53 | left: 0;
54 | right: 0;
55 | bottom: 0;
56 | height: 100vh;
57 | padding-top: 63px;
58 | padding-left: 28px;
59 | padding-right: 30px;
60 | display: flex;
61 | flex-direction: column;
62 | background-color: #6070ff;
63 | mix-blend-mode: multiply;
64 | z-index: 5;
65 | }
66 |
67 | .blur {
68 | -webkit-filter: blur(10px);
69 | filter: blur(10px);
70 | }
71 |
72 | .hide {
73 | display: none;
74 | }
75 |
76 | .hide-ham {
77 | display: inline-block;
78 | }
79 |
80 | .cancel-dropDown {
81 | text-align: right;
82 | font-size: 2rem;
83 | height: 55px;
84 | margin-top: -2rem;
85 | margin-bottom: 0.5rem;
86 | }
87 |
88 | .desktop-menu ul {
89 | margin-top: 11px;
90 | display: flex;
91 | flex-direction: column;
92 | gap: 49px;
93 | }
94 |
95 | .desktop-menu li {
96 | list-style-type: none;
97 | font-size: 2rem;
98 | line-height: 44px;
99 | font-weight: 600;
100 | }
101 |
102 | .desktop-menu a {
103 | text-decoration: none;
104 | color: #fff;
105 | }
106 |
107 | .mobile-line {
108 | height: 5px;
109 | width: 134px;
110 | margin: 0 auto;
111 | border-radius: 10px;
112 | background-color: #0d151e;
113 | position: absolute;
114 | bottom: 10px;
115 | left: 0;
116 | right: 0;
117 | }
118 |
119 | header {
120 | width: 100%;
121 | display: flex;
122 | justify-content: space-between;
123 | align-items: center;
124 | padding-right: 30px;
125 | padding-left: 30px;
126 | padding-top: 10px;
127 | }
128 |
129 | .logo {
130 | text-align: center;
131 | transition: all 1s ease-in-out;
132 | }
133 |
134 | .logo:hover {
135 | transform: rotate(360deg);
136 | }
137 |
138 | .logo a {
139 | text-decoration: none;
140 | font-size: 18px;
141 | line-height: 20px;
142 | font-weight: bold;
143 | color: #6070ff;
144 | }
145 |
146 | .banner {
147 | padding-bottom: 20px;
148 | width: 90%;
149 | display: flex;
150 | flex-direction: column;
151 | flex: 1;
152 | }
153 |
154 | .banner h1 {
155 | position: relative;
156 | width: 70%;
157 | font-size: 2.1rem;
158 | line-height: 52px;
159 | color: #172b4d;
160 | animation: slide-right 1s ease-in-out;
161 | }
162 |
163 | @keyframes slide-right {
164 | 0% {
165 | left: 700px;
166 | }
167 |
168 | 25% {
169 | left: 500px;
170 | }
171 |
172 | 50% {
173 | left: 300px;
174 | }
175 |
176 | 75% {
177 | left: 100px;
178 | }
179 |
180 | 100% {
181 | left: 0;
182 | }
183 | }
184 |
185 | .banner p {
186 | font-size: 1em;
187 | line-height: 24px;
188 | font-weight: 400;
189 | color: #344563;
190 | margin: 12px 0;
191 | animation: Fade-in 1s ease-in-out 0.8s;
192 | }
193 |
194 | @keyframes Fade-in {
195 | 0% {
196 | opacity: 0;
197 | }
198 |
199 | 25% {
200 | opacity: 0.04;
201 | }
202 |
203 | 50% {
204 | opacity: 0.08;
205 | }
206 |
207 | 75% {
208 | opacity: 0.1;
209 | }
210 |
211 | 100% {
212 | opacity: 1;
213 | }
214 | }
215 |
216 | .project-img img,
217 | .main-image img {
218 | width: 100%;
219 | }
220 |
221 | .main-image img {
222 | width: 100%;
223 | }
224 |
225 | .button-live img {
226 | margin-left: 1px;
227 | vertical-align: text-bottom;
228 | }
229 |
230 | .framework-icon img,
231 | .lang-icon li img,
232 | .skill-icon li img {
233 | height: 48px;
234 | width: 48px;
235 | }
236 |
237 | .connect {
238 | position: relative;
239 | flex-direction: column;
240 | gap: 20px;
241 | animation: slide-left 1s ease-in-out;
242 | }
243 |
244 | @keyframes slide-left {
245 | 0% {
246 | right: 700px;
247 | }
248 |
249 | 25% {
250 | right: 500px;
251 | }
252 |
253 | 50% {
254 | right: 300px;
255 | }
256 |
257 | 75% {
258 | right: 100px;
259 | }
260 |
261 | 100% {
262 | right: 0;
263 | }
264 | }
265 |
266 | .connect h2 {
267 | margin-bottom: 10px;
268 | font-size: 1.1em;
269 | font-weight: 500;
270 | color: #7f8cff;
271 | display: flex;
272 | }
273 |
274 | .connect .social-icon img {
275 | height: 20px;
276 | width: 14.166671752929688px;
277 | left: 180px;
278 | }
279 |
280 | .social-icon {
281 | display: flex;
282 | align-items: center;
283 | gap: 15px;
284 | }
285 |
286 | .social-icon li {
287 | list-style-type: none;
288 | color: #505f79;
289 | }
290 |
291 | /* Project Show case Section */
292 |
293 | #project-show-case {
294 | width: 100%;
295 | margin: 0 24px;
296 | margin-bottom: 114px;
297 | margin-top: 87px;
298 | display: grid;
299 | grid-template-columns: auto;
300 | row-gap: 88px;
301 | justify-content: center;
302 | }
303 |
304 | .project-card {
305 | display: flex;
306 | flex-direction: column;
307 | justify-content: start;
308 | align-items: center;
309 | flex: 1;
310 | height: 100%;
311 | padding-bottom: 20px;
312 | width: 87%;
313 | background-color: #fff;
314 | border-radius: 15px;
315 | }
316 |
317 | .project-img,
318 | .main-image {
319 | width: 90%;
320 | margin: 16px;
321 | border-radius: 8px;
322 | }
323 |
324 | .write-up {
325 | width: 90%;
326 | height: 50%;
327 | margin: 0 auto;
328 | display: flex;
329 | flex-direction: column;
330 | justify-content: space-between;
331 | gap: 20px;
332 | }
333 |
334 | .title {
335 | color: #172b4d;
336 | font-weight: 700;
337 | font-size: 2.4rem;
338 | line-height: 44px;
339 | }
340 |
341 | .title-detail-tag {
342 | display: flex;
343 | align-items: center;
344 | gap: 32px;
345 | }
346 |
347 | .tag-title,
348 | .list-tag-title li {
349 | color: #344563;
350 | font-weight: 600;
351 | font-style: normal;
352 | font-size: 0.8rem;
353 | line-height: 16px;
354 | }
355 |
356 | .list-tag-title {
357 | display: flex;
358 | align-items: center;
359 | gap: 32px;
360 | }
361 |
362 | .list-tag-title li {
363 | color: #7a869a;
364 | }
365 |
366 | .project-description {
367 | line-height: 24px;
368 | font-weight: 400;
369 | color: #344563;
370 | font-size: 0.9rem;
371 | }
372 |
373 | .lang-tag {
374 | display: flex;
375 | flex-wrap: wrap;
376 | gap: 20px;
377 | }
378 |
379 | .lang-tag li {
380 | list-style-type: none;
381 | font-size: 0.7rem;
382 | line-height: 16px;
383 | color: #6070ff;
384 | background-color: #ebebff;
385 | padding: 4px 12px;
386 | border-radius: 8px;
387 | }
388 |
389 | .see-project .p,
390 | .see-resume .p {
391 | font-size: 0.9rem;
392 | }
393 |
394 | .see-project,
395 | .see-resume {
396 | height: 45px;
397 | max-width: 45%;
398 | padding: 12px;
399 | color: #396df2;
400 | background-color: #fff;
401 | border-radius: 8px;
402 | text-align: center;
403 | border: 1px solid #7f8cff;
404 | }
405 |
406 | /* Project Button links */
407 |
408 | /* Hover */
409 | .form-button:hover,
410 | .see-project:hover,
411 | .see-resume:hover {
412 | color: #fff;
413 | background-color: #6070ff;
414 | box-shadow: 0 8px 16px rgba(64, 83, 252, 0.24);
415 | cursor: pointer;
416 | }
417 |
418 | /* Pressed */
419 | .form-button:active,
420 | .see-project:active,
421 | .see-resume:active {
422 | background-color: #2230d2;
423 | }
424 |
425 | /* Enabled */
426 | .form-button:visited,
427 | .see-project:visited,
428 | .see-resume:visited {
429 | border: 1px solid #7f8cff;
430 | box-sizing: border-box;
431 | border-radius: 8px;
432 | }
433 |
434 | .see-project .p {
435 | line-height: 24px;
436 | font-size: 1rem;
437 | }
438 |
439 | /* About section */
440 |
441 | .about-section {
442 | background-color: #fff;
443 | width: 100%;
444 | padding-top: 114px;
445 | padding-bottom: 114px;
446 | margin: 0 auto;
447 | height: 100%;
448 | display: flex;
449 | flex-direction: column;
450 | gap: 12px;
451 | border-top-right-radius: 25% 60px;
452 | }
453 |
454 | .about-write {
455 | width: 90%;
456 | display: flex;
457 | flex-direction: column;
458 | justify-content: flex-start;
459 | gap: 12px;
460 | margin: 0 auto;
461 | }
462 |
463 | .about-connect {
464 | display: flex;
465 | flex-direction: column;
466 | gap: 12px;
467 | }
468 |
469 | .about-section h2 {
470 | font-weight: bold;
471 | font-size: 2.2rem;
472 | color: #172b4d;
473 | line-height: 52px;
474 | }
475 |
476 | .about-detail {
477 | font-weight: 400;
478 | font-size: 1rem;
479 | line-height: 24px;
480 | color: #344563;
481 | }
482 |
483 | .about-connect h3 {
484 | color: #7f8cff;
485 | font-size: 1rem;
486 | line-height: 24px;
487 | font-weight: 500;
488 | }
489 |
490 | .about-connect .social-icon img {
491 | height: 16px;
492 | width: 20px;
493 | }
494 |
495 | /* Language */
496 |
497 | .languages {
498 | width: 90%;
499 | margin: 60px auto;
500 | display: flex;
501 | flex-direction: column;
502 | gap: 36px;
503 | }
504 |
505 | .select-lang {
506 | width: 88%;
507 | display: flex;
508 | justify-content: space-between;
509 | align-items: center;
510 | }
511 |
512 | .select-lang h3 {
513 | font-size: 1.2rem;
514 | font-weight: 500;
515 | line-height: 24px;
516 | color: #000;
517 | }
518 |
519 | .javascript,
520 | .framework,
521 | .skill {
522 | display: grid;
523 | grid-template-columns: auto;
524 | gap: 36px;
525 | }
526 |
527 | .flex-right li {
528 | list-style-type: none;
529 | border: 1px solid #dfe1e6;
530 | border-radius: 8px;
531 | padding: 4px 12px;
532 | background-color: #ebebff;
533 | color: #6070ff;
534 | }
535 |
536 | .lang-icon,
537 | .skill-icon,
538 | .framework-icon {
539 | width: 100%;
540 | display: flex;
541 | flex-direction: column;
542 | gap: 12px;
543 | }
544 |
545 | .lang-icon li,
546 | .framework-icon li,
547 | .skill-icon li {
548 | list-style-type: none;
549 | width: 95%;
550 | height: 66.72px;
551 | background-color: #f7f7f9;
552 | display: flex;
553 | align-items: center;
554 | gap: 16px;
555 | transition: transform 1s ease-in-out;
556 | }
557 |
558 | .contact-form ul li {
559 | list-style-type: none;
560 | }
561 |
562 | .contact-form ul {
563 | width: 100%;
564 | margin: 0 auto;
565 | display: flex;
566 | flex-direction: column;
567 | gap: 20px;
568 | }
569 |
570 | .lang-icon li:hover,
571 | .framework-icon li:hover,
572 | .skill-icon li:hover {
573 | transform: scaleX(0.3);
574 | }
575 |
576 | .lang-name {
577 | font-size: 0.9rem;
578 | font-weight: 500;
579 | color: #253858;
580 | line-height: 24px;
581 | }
582 |
583 | .framework-icon.hide {
584 | display: none;
585 | }
586 |
587 | .skill-icon.hide {
588 | display: none;
589 | }
590 |
591 | .line.lang {
592 | display: none;
593 | }
594 |
595 | .line {
596 | height: 1px;
597 | width: 97%;
598 | border: 1px solid #dfe1e6;
599 | }
600 |
601 | /* Footer */
602 |
603 | footer {
604 | width: 100%;
605 | background-color: #6070ff;
606 | border-top-left-radius: 25% 60px;
607 | padding-bottom: 40px;
608 | margin-top: -60px;
609 | position: inherit;
610 | display: flex;
611 | flex-direction: column;
612 | align-items: center;
613 | justify-content: center;
614 | }
615 |
616 | .trans-background {
617 | margin-top: 12px;
618 | height: 867px;
619 | width: 265px;
620 | position: absolute;
621 | top: 0;
622 | right: -3px;
623 | border-radius: 0;
624 | background-image: url(./images/contact-form-Bg-mobile.svg);
625 | background-repeat: no-repeat;
626 | background-size: cover;
627 | z-index: 2;
628 | }
629 |
630 | .contact-me {
631 | z-index: 3;
632 | width: 90%;
633 | margin: 0 auto;
634 | }
635 |
636 | .contact-heading {
637 | text-align: center;
638 | margin-top: 103px;
639 | }
640 |
641 | .contact-heading h2 {
642 | color: #fff;
643 | line-height: 52px;
644 | font-size: 2.1rem;
645 | font-weight: bold;
646 | }
647 |
648 | .contact-description {
649 | color: #fff;
650 | font-size: 1.1rem;
651 | margin-bottom: 77px;
652 | margin-top: 12px;
653 | }
654 |
655 | .contact-description p {
656 | text-align: center;
657 | color: #ebebff;
658 | font-weight: 400;
659 | line-height: 28px;
660 | }
661 |
662 | input[type='text']::placeholder,
663 | input[type='text']::-ms-input-placeholder,
664 | input[type='text']::-webkit-input-placeholder,
665 | input[type='email']::placeholder,
666 | input[type='email']::-ms-input-placeholder,
667 | input[type='email']:-webkit-input-placeholder {
668 | color: #172b4d;
669 | opacity: 1;
670 | }
671 |
672 | textarea::placeholder,
673 | textarea::-webkit-input-placeholder {
674 | color: #b3bac5;
675 | }
676 |
677 | input[type='text']:active,
678 | input[type='text']:focus,
679 | input[type='email']:active,
680 | input[type='email']:focus,
681 | textarea:active,
682 | textarea:focus {
683 | outline: none;
684 | }
685 |
686 | .contact-form li input {
687 | border: 1px solid #cfd8dc;
688 | height: 48px;
689 | border-radius: 8px;
690 | width: 100%;
691 | color: #172b4d;
692 | padding: 15px 38px 15px 16px;
693 | }
694 |
695 | .text-area {
696 | padding: 15px 38px 15px 16px;
697 | background-color: #fff;
698 | border: 1px solid #cfd8dc;
699 | border-radius: 8px;
700 | display: flex;
701 | flex-wrap: wrap;
702 | width: 100%;
703 | color: #b3bac5;
704 | line-height: 24px;
705 | vertical-align: top;
706 | text-align: left;
707 | }
708 |
709 | .contact-form button {
710 | display: flex;
711 | align-items: center;
712 | padding: 12px 16px;
713 | background-color: #fff;
714 | color: #6070ff;
715 | font-size: 1.1rem;
716 | text-align: center;
717 | border-radius: 8px;
718 | border: none;
719 | width: 140px;
720 | height: 48px;
721 | margin-top: 22px;
722 | margin-bottom: 45px;
723 | }
724 |
725 | .footer-line,
726 | .card-line {
727 | height: 5px;
728 | width: 134px;
729 | margin: 0 auto;
730 | border-radius: 10px;
731 | background-color: #0d151e;
732 | }
733 |
734 | /* MODAL */
735 |
736 | .modal-container {
737 | width: 100%;
738 | height: 100%;
739 | background-color: rgba(193, 199, 208, 0.94);
740 | margin: auto;
741 | position: absolute;
742 | top: 0;
743 | right: 0;
744 | left: 0;
745 | padding-top: 75px;
746 | padding-bottom: 12px;
747 | z-index: 100;
748 | }
749 |
750 | .modal-card {
751 | width: 87%;
752 | position: fixed;
753 | transform: translateY(-50%);
754 | top: 50%;
755 | left: 7%;
756 | margin: 0 auto;
757 | padding: 18px 16px;
758 | background-color: #fff;
759 | border-radius: 16px;
760 | margin-bottom: 32px;
761 | transition: all 0.5s ease-in-out;
762 | }
763 |
764 | .modal-head {
765 | display: flex;
766 | justify-content: space-between;
767 | align-items: center;
768 | margin-bottom: 32px;
769 | }
770 |
771 | .modal-head h4 {
772 | color: #17284d;
773 | font-weight: 700;
774 | line-height: 44px;
775 | font-size: 2rem;
776 | }
777 |
778 | .modal-tags {
779 | display: flex;
780 | align-items: center;
781 | gap: 30px;
782 | margin-bottom: 20px;
783 | }
784 |
785 | .modal-tags h5 {
786 | color: #344563;
787 | line-height: 16px;
788 | font-size: 0.9rem;
789 | }
790 |
791 | .modal-tags ul {
792 | display: flex;
793 | align-items: center;
794 | gap: 30px;
795 | }
796 |
797 | .main-image {
798 | margin-bottom: 12px;
799 | }
800 |
801 | .flexDesk p {
802 | color: #344563;
803 | font-size: 1rem;
804 | line-height: 24px;
805 | font-weight: 400;
806 | margin-bottom: 12px;
807 | }
808 |
809 | .flex-right ul {
810 | display: flex;
811 | align-items: center;
812 | gap: 30px;
813 | width: 100%;
814 | flex-wrap: wrap;
815 | margin-bottom: 20px;
816 | }
817 |
818 | .flex-right hr {
819 | margin-bottom: 25px;
820 | }
821 |
822 | .button-live {
823 | display: flex;
824 | align-items: center;
825 | justify-content: center;
826 | flex-wrap: wrap;
827 | margin-bottom: 15px;
828 | gap: 5px;
829 | }
830 |
831 | .button-live a {
832 | text-decoration: none;
833 | color: #396df2;
834 | background-color: #fff;
835 | border: 1px solid #6070ff;
836 | border-radius: 8px;
837 | padding: 14px 22px;
838 | }
839 |
840 | .active {
841 | display: block;
842 | }
843 |
844 | .modalOne {
845 | display: none;
846 | }
847 |
848 | .modaltwo {
849 | display: none;
850 | }
851 |
852 | .modalthree {
853 | display: none;
854 | }
855 |
856 | .modalfour {
857 | display: none;
858 | }
859 |
860 | .image-cancel {
861 | cursor: pointer;
862 | font-size: 2.2rem;
863 | color: #67798e;
864 | }
865 |
866 | .notshow {
867 | display: none;
868 | }
869 |
870 | .form-button:active {
871 | font-weight: 600;
872 | }
873 |
874 | .button-errorMsg {
875 | display: flex;
876 | flex-direction: column;
877 | align-items: center;
878 | gap: 25px;
879 | }
880 |
881 | #errorMsg {
882 | line-height: 24px;
883 | height: 40px;
884 | font-weight: 400;
885 | color: rgb(231, 71, 71);
886 | background-color: #fff;
887 | font-size: 1.2rem;
888 | border: 1px solid red;
889 | box-shadow: 0 3px 0 0 rgba(241, 79, 79, 0.7);
890 | border-radius: 8px;
891 | padding: 5px 12px;
892 | margin-top: 7px;
893 | margin-bottom: -1.6rem;
894 | }
895 |
896 | .hideErr {
897 | display: none;
898 | }
899 |
900 | /* Media Query */
901 |
902 | /* Mobile Screen less than 300px */
903 |
904 | @media (max-width: 300px) {
905 | .see-project .p {
906 | font-size: 0.8rem;
907 | }
908 |
909 | .button-live {
910 | flex-wrap: wrap;
911 | justify-content: center;
912 | }
913 |
914 | .see-resume .p {
915 | font-size: 0.75rem;
916 | }
917 | }
918 |
919 | @media (max-width: 365px) {
920 | .button-live > a {
921 | flex-wrap: wrap;
922 | margin-bottom: 20px;
923 | }
924 | }
925 |
926 | /* Desktop view 992px */
927 |
928 | @media (min-width: 992px) {
929 | .Ham-menu {
930 | display: none;
931 | }
932 |
933 | .blur {
934 | -webkit-filter: blur(0);
935 | filter: blur(0);
936 | }
937 |
938 | .menu {
939 | width: 25%;
940 | }
941 |
942 | .hide {
943 | display: none;
944 | }
945 |
946 | .desktop-menu {
947 | position: relative;
948 | top: 0;
949 | flex-direction: row;
950 | margin-top: -28px;
951 | width: 100%;
952 | height: 100%;
953 | padding: 0;
954 | display: flex;
955 | gap: 0;
956 | color: black;
957 | background-color: inherit;
958 | }
959 |
960 | .mobile-line {
961 | display: none;
962 | }
963 |
964 | .desktop-menu li {
965 | list-style-type: none;
966 | }
967 |
968 | .framework-icon li,
969 | .lang-icon li,
970 | .skill-icon li {
971 | padding: 10px;
972 | height: 100%;
973 | flex-direction: column;
974 | align-items: flex-start;
975 | justify-content: center;
976 | }
977 |
978 | .modal-tags li {
979 | color: #7a869a;
980 | font-size: 0.9rem;
981 | line-height: 16px;
982 | font-weight: 600;
983 | }
984 |
985 | .desktop-menu ul li:hover {
986 | cursor: pointer;
987 | }
988 |
989 | .desktop-menu li a {
990 | text-decoration: none;
991 | color: #344563;
992 | font-weight: bolder;
993 | font-size: 0.9rem;
994 | }
995 |
996 | .desktop-menu ul {
997 | flex-direction: row;
998 | justify-content: flex-start;
999 | width: 100%;
1000 | vertical-align: top;
1001 | gap: 30px;
1002 | }
1003 |
1004 | .hero {
1005 | position: relative;
1006 | background-color: #fff;
1007 | background-image: none;
1008 | height: 83vh;
1009 | border-bottom-left-radius: 25% 100px;
1010 | }
1011 |
1012 | .desktop-bg {
1013 | display: block;
1014 | z-index: 1;
1015 | background-image: url(./images/DesktopheaderBg.png);
1016 | background-repeat: no-repeat;
1017 | background-size: 100%;
1018 | height: 524px;
1019 | width: 93%;
1020 | margin-top: 90px;
1021 | margin-right: 8px;
1022 | position: absolute;
1023 | }
1024 |
1025 | header {
1026 | position: fixed;
1027 | z-index: 100;
1028 | width: 100%;
1029 | padding: 25px 0;
1030 | padding-left: 70px;
1031 | padding-right: 70px;
1032 | background-color: #fff;
1033 | }
1034 |
1035 | .banner {
1036 | z-index: 2;
1037 | margin-top: 135px;
1038 | width: 70%;
1039 | }
1040 |
1041 | .project-img img {
1042 | display: none;
1043 | }
1044 |
1045 | .main-image img {
1046 | width: 100%;
1047 | height: 630px;
1048 | margin-bottom: 10px;
1049 | }
1050 |
1051 | .social-icon li img {
1052 | height: 50px;
1053 | width: 50px;
1054 | }
1055 |
1056 | .project-img {
1057 | height: 100%;
1058 | }
1059 |
1060 | #project-show-case {
1061 | width: 95%;
1062 | margin: 0 auto;
1063 | margin-top: -38px;
1064 | margin-bottom: 194px;
1065 | row-gap: 152px;
1066 | grid-template-rows: auto;
1067 | }
1068 |
1069 | #project-show-case .project-card:nth-child(odd) .project-img {
1070 | order: 2;
1071 | }
1072 |
1073 | .write-up {
1074 | height: 70%;
1075 | margin-top: 37px;
1076 | margin-left: 20px;
1077 | }
1078 |
1079 | .project-card {
1080 | display: grid;
1081 | grid-template-columns: 1fr 1fr;
1082 | justify-content: start;
1083 | align-items: flex-start;
1084 | width: 100%;
1085 | max-width: 1024px;
1086 | height: calc(100% + 89px);
1087 | padding-bottom: 20px;
1088 | }
1089 |
1090 | #one {
1091 | background-image: url(./images/todoListImage.png);
1092 | background-repeat: no-repeat;
1093 | background-size: contain;
1094 | }
1095 |
1096 | #two {
1097 | background-image: url(./images/DeskImg2.png);
1098 | background-repeat: no-repeat;
1099 | background-size: contain;
1100 | }
1101 |
1102 | #three {
1103 | background-image: url(./images/DEskImg3.png);
1104 | background-repeat: no-repeat;
1105 | background-size: contain;
1106 | }
1107 |
1108 | #four {
1109 | background-image: url(./images/DeskImg4.png);
1110 | background-repeat: no-repeat;
1111 | background-size: contain;
1112 | }
1113 |
1114 | /* Effects on hover */
1115 | .project-card:hover {
1116 | cursor: pointer;
1117 | border: 2px solid #a7aeff;
1118 | }
1119 |
1120 | .project-card:hover .see-project {
1121 | color: #fff;
1122 | background-color: #6070ff;
1123 | box-shadow: 0 8px 16px rgba(64, 83, 252, 0.24);
1124 | }
1125 |
1126 | /* About Section */
1127 | .about-section {
1128 | flex-direction: row;
1129 | justify-content: flex-start;
1130 | align-items: flex-start;
1131 | padding-left: 103px;
1132 | padding-bottom: 250px;
1133 | border-top-right-radius: 25% 100px;
1134 | }
1135 |
1136 | .about-connect {
1137 | gap: 24px;
1138 | }
1139 |
1140 | .about-write {
1141 | width: 40%;
1142 | }
1143 |
1144 | .languages {
1145 | width: 55%;
1146 | margin: auto;
1147 | display: flex;
1148 | flex-direction: column;
1149 | gap: 36px;
1150 | }
1151 |
1152 | .framework-icon,
1153 | .lang-icon,
1154 | .skill-icon {
1155 | width: 45%;
1156 | flex-direction: row;
1157 | }
1158 |
1159 | /* Footer */
1160 |
1161 | footer {
1162 | border-top-left-radius: 25% 100px;
1163 | margin-top: -90px;
1164 | }
1165 |
1166 | .trans-background {
1167 | margin-top: 79px;
1168 | margin-right: 19px;
1169 | width: 970px;
1170 | height: 540px;
1171 | background-image: url(./images/FooterBg.png);
1172 | z-index: 10;
1173 | }
1174 |
1175 | .contact-me {
1176 | z-index: 11;
1177 | width: 60%;
1178 | text-align: center;
1179 | }
1180 |
1181 | .contact-description {
1182 | width: 85%;
1183 | margin: 0 auto;
1184 | margin-bottom: 24px;
1185 | }
1186 |
1187 | .contact-form {
1188 | width: 70%;
1189 | margin: 0 auto;
1190 | }
1191 |
1192 | .contact-form li input,
1193 | .text-area {
1194 | border-radius: 2px;
1195 | }
1196 |
1197 | .contact-form button {
1198 | margin: 0 auto;
1199 | margin-top: 22px;
1200 | margin-bottom: 45px;
1201 | }
1202 |
1203 | .modal-card {
1204 | height: 940px;
1205 | overflow-y: auto;
1206 | margin: 0 auto;
1207 | left: 17%;
1208 | right: 20%;
1209 | width: 70%;
1210 | max-width: 950px;
1211 | }
1212 |
1213 | .flexDesk {
1214 | display: flex;
1215 | }
1216 |
1217 | .flexDesk p {
1218 | flex: 1;
1219 | }
1220 |
1221 | .flex-right {
1222 | flex: 1;
1223 | }
1224 |
1225 | .main-image {
1226 | display: flex;
1227 | width: 100%;
1228 | margin-left: -0.2rem;
1229 | }
1230 | }
1231 |
1232 | /* For higher resolution (desktop) */
1233 |
1234 | @media (min-width: 1024px) {
1235 | .project-img.one,
1236 | .project-img.two,
1237 | .project-img.three,
1238 | .project-img.four {
1239 | height: 95%;
1240 | }
1241 |
1242 | .banner {
1243 | margin-top: 238px;
1244 | width: 65%;
1245 | }
1246 |
1247 | .banner p {
1248 | width: 70%;
1249 | }
1250 |
1251 | header {
1252 | padding-left: 90px;
1253 | padding-right: 90px;
1254 | }
1255 |
1256 | .about-section {
1257 | padding-right: 110px;
1258 | }
1259 | }
1260 |
--------------------------------------------------------------------------------