diff --git a/css/main.css b/css/main.css deleted file mode 100644 index 177f39c..0000000 --- a/css/main.css +++ /dev/null @@ -1,16 +0,0 @@ -body { - font-family: var(--font-family); - color: var(--primary-color); - background-color: var(--secondary-color); - line-height: 1.6; -} - -.container { - max-width: var(--max-width); - margin: 0 auto; - padding: var(--spacing); -} -h1 { - font-size: 2.5rem; - margin-bottom: var(--spacing); -} \ No newline at end of file diff --git a/css/styles.css b/css/styles.css new file mode 100644 index 0000000..41664a5 --- /dev/null +++ b/css/styles.css @@ -0,0 +1,1776 @@ +@import url("https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap"); + +:root { + --bg-gradient-onyx: linear-gradient( + to bottom right, + hsl(240, 1%, 25%) 3%, + hsl(0, 0%, 19%) 97% + ); + --bg-gradient-jet: linear-gradient( + to bottom right, + hsla(240, 1%, 18%, 0.251) 3%, + hsla(240, 2%, 11%, 0) 100% + ), + hsl(240, 2%, 13%); + --bg-gradient-yellow1: linear-gradient( + to bottom right, + hsl(45, 100%, 71%) 0%, + hsla(36, 100%, 69%, 0) 50% + ); + --bg-gradient-yellow2: linear-gradient( + 135deg, + hsla(45, 100%, 71%, 0.251) 0%, + hsla(35, 100%, 68%, 0) 59.86% + ), + hsl(240, 2%, 13%); + --border-gradient-onyx: linear-gradient( + to bottom right, + hsl(0, 0%, 25%) 0%, + hsla(0, 0%, 25%, 0) 50% + ); + --text-gradient-yellow: linear-gradient( + to right, + hsl(45, 100%, 72%), + hsl(35, 100%, 68%) + ); + + --jet: hsl(0, 0%, 22%); + --onyx: hsl(240, 1%, 17%); + --eerie-black1: hsl(240, 2%, 13%); + --eerie-black2: hsl(240, 2%, 12%); + --smoky-black: hsl(0, 0%, 7%); + --white1: hsl(0, 0%, 100%); + --white2: hsl(0, 0%, 98%); + --orange-yellow-crayola: hsl(45, 100%, 72%); + --vegas-gold: hsl(45, 54%, 58%); + --light-gray: hsl(0, 0%, 84%); + --light-gray70: hsla(0, 0%, 84%, 0.7); + --bittersweet-shimmer: hsl(0, 43%, 51%); + + --ff-poppins: "Poppins", sans-serif; + + --fs1: 24px; + --fs2: 18px; + --fs3: 17px; + --fs4: 16px; + --fs5: 15px; + --fs6: 14px; + --fs7: 13px; + --fs8: 12px; + + --fw300: 300; + --fw400: 400; + --fw500: 500; + --fw600: 600; + + --shadow1: -4px 8px 24px hsla(0, 0%, 0%, 0.25); + --shadow2: 0px 16px 30px hsla(0, 0%, 0%, 0.25); + --shadow3: 0px 16px 40px hsla(0, 0%, 0%, 0.25); + --shadow4: 0px 25px 50px hsla(0, 0%, 0%, 0.15); + --shadow5: 0px 24px 80px hsla(0, 0%, 0%, 0.25); + + --transition1: 0.25s ease; + --transition2: 0.5s ease-in-out; +} + +*, +*::before, +*::after { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +a { + text-decoration: none; +} + +li { + list-style: none; +} + +img, +ion-icon, +a, +button, +time, +span { + display: block; +} + +button { + font: inherit; + background: none; + border: none; + text-align: left; + cursor: pointer; +} + +input, +textarea { + display: block; + width: 100%; + background: none; + font: inherit; +} + +::selection { + background: var(--orange-yellow-crayola); + color: var(--smoky-black); +} + +:focus { + outline-color: var(--orange-yellow-crayola); +} + +html { + font-family: var(--ff-poppins); +} + +body { + background: var(--smoky-black); +} + +main { + margin: 15px 12px; + margin-bottom: 75px; + min-width: 259px; +} + +.sidebar, +article { + background: var(--eerie-black2); + border: 1px solid var(--jet); + border-radius: 20px; + box-shadow: var(--shadow1); + z-index: 1; + padding: 15px; +} + +.sidebar.active { + max-height: 405px; +} + +.separator { + width: 100%; + height: 1px; + background: var(--jet); + margin: 16px 0; +} + +.icon-box { + position: relative; + background: var(--border-gradient-onyx); + width: 30px; + height: 30px; + border-radius: 8px; + display: flex; + justify-content: center; + align-items: center; + font-size: 16px; + color: var(--orange-yellow-crayola); + box-shadow: var(--shadow1); + z-index: 1; +} + +.icon-box::before { + content: ""; + position: absolute; + inset: 1px; + background: var(--eerie-black1); + border-radius: inherit; + z-index: -1; +} + +.icon-box ion-icon { + --ionicon-stroke-width: 35px; +} + +article { + display: none; +} + +article.active { + display: block; + animation: fade 0.5s ease backwards; +} + +@keyframes fade { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } +} + +.h2, +.h3, +.h4, +.h5 { + color: var(--white2); + text-transform: capitalize; +} + +.h2 { + font-size: var(--fs1); +} +.h3 { + font-size: var(--fs2); +} +.h4 { + font-size: var(--fs4); +} +.h5 { + font-size: var(--fs7); + font-weight: var(--fw500); +} + +.article-title { + position: relative; + padding-bottom: 7px; +} + +.article-title::after { + content: ""; + position: absolute; + bottom: 0; + left: 0; + width: 30px; + height: 3px; + background: var(--text-gradient-yellow); + border-radius: 3px; +} + +.has-scrollbar::-webkit-scrollbar { + width: 5px; + height: 5px; +} + +.has-scrollbar::-webkit-scrollbar-track { + background: var(--onyx); + border-radius: 5px; +} + +.has-scrollbar::-webkit-scrollbar-thumb { + background: var(--orange-yellow-crayola); + border-radius: 5px; +} + +.has-scrollbar::-webkit-scrollbar-button { + width: 20px; +} + +.content-card { + position: relative; + background: var(--border-gradient-onyx); + padding: 15px; + padding-top: 45px; + border-radius: 14px; + box-shadow: var(--shadow2); + cursor: pointer; + z-index: 1; +} + +.content-card::before { + content: ""; + position: absolute; + inset: 1px; + background: var(--bg-gradient-jet); + border-radius: inherit; + z-index: -1; +} + +/*ASIDE - SIDEBAR*/ + +.sidebar { + margin-bottom: 15px; + max-height: 112px; + overflow: hidden; + padding: 15px; + transition: var(--transition2); +} + +.sidebar-info { + position: relative; + display: flex; + justify-content: flex-start; + align-items: center; + gap: 15px; +} + +.avatar-box { + background: var(--bg-gradient-onyx); + border-radius: 20px; +} + +.info-content .name { + color: var(--white2); + font-size: var(--fs3); + font-weight: var(--fw500); + letter-spacing: -0.25px; + margin-bottom: 10px; +} + +.info-content .title { + color: var(--white1); + background: var(--onyx); + font-size: var(--fs8); + font-weight: var(--fw300); + width: max-content; + padding: 3px 12px; + border-radius: 8px; +} + +.info-more-btn { + position: absolute; + top: -15px; + right: -15px; + border-radius: 0 15px; + font-size: 13px; + color: var(--orange-yellow-crayola); + background: var(--border-gradient-onyx); + padding: 10px; + box-shadow: var(--shadow2); + transition: var(--transition1); + z-index: 1; +} + +.info-more-btn::before { + content: ""; + position: absolute; + inset: 1px; + border-radius: inherit; + background: var(--bg-gradient-jet); + transition: var(--transition1); + z-index: -1; +} + +.info-more-btn:hover, +.info-more-btn:focus { + background: var(--bg-gradient-yellow1); +} +.info-more-btn:hover::before, +.info-more-btn:focus::before { + background: var(--bg-gradient-yellow2); +} + +.info-more-btn span { + display: none; +} + +.sidebar-info-more { + opacity: 0; + visibility: hidden; + transition: var(--transition2); +} + +.sidebar.active .sidebar-info-more { + opacity: 1; + visibility: visible; +} + +.contacts-list { + display: grid; + grid-template-columns: 1fr; + gap: 16px; +} + +.contact-item { + min-width: 100%; + display: flex; + align-items: center; + gap: 16px; +} + +.contact-info { + max-width: calc(100% - 46px); + width: calc(100% - 46px); +} + +.contact-info :is(.contact-link, time, address) { + color: var(--white2); + font-size: var(--fs7); +} + +.contact-info address { + font-style: normal; +} + +.contact-title { + color: var(--light-gray70); + font-size: var(--fs8); + text-transform: uppercase; + margin-bottom: 2px; +} + +.social-list { + display: flex; + justify-content: flex-start; + align-items: center; + gap: 15px; + padding-bottom: 4px; + padding-left: 7px; +} + +.social-item .social-link { + color: var(--light-gray70); + font-size: 18px; +} + +.social-item .social-link:hover { + color: var(--light-gray); +} + +/*NAVBAR*/ + +.navbar { + position: fixed; + bottom: 0; + left: 0; + width: 100%; + background: hsla(240, 1%, 17%, 0.75); + backdrop-filter: blur(10px); + border: 1px solid var(--jet); + border-radius: 12px 12px 0 0; + box-shadow: var(--shadow2); + z-index: 5; +} + +.navbar-list { + display: flex; + flex-wrap: wrap; + justify-content: center; + align-items: center; + padding: 0 10px; +} + +.navbar-link { + color: var(--light-gray); + font-size: var(--fs8); + padding: 20px 7px; + transition: color var(--transition1); +} + +.navbar-link:hover, +.navbar-link:focus { + color: var(--light-gray70); +} +.navbar-link.active { + color: var(--orange-yellow-crayola); +} + +.navbar-link.active { + color: #f39c12; /* Ejemplo de color de énfasis */ + font-weight: bold; +} + +/*ABOUT*/ + +.about .article-title { + margin-bottom: 15px; + margin-top: 15px; +} + +.about-text { + color: var(--light-gray); + font-size: var(--fs6); + font-weight: var(--fw300); + line-height: 1.6; +} + +.about-text p { + margin-bottom: 15px; + text-align: justify; + padding-left: 10px; + padding-right: 10px; +} + +.service { + margin-bottom: 35px; +} + +.service-title { + margin-bottom: 20px; +} + +.service-list { + display: grid; + grid-template-columns: 1fr; + gap: 20px; +} + +.service-item { + position: relative; + background: var(--border-gradient-onyx); + padding: 20px; + border-radius: 14px; + box-shadow: var(--shadow2); + z-index: 1; +} + +.service-item::before { + content: ""; + position: absolute; + inset: 1px; + background: var(--bg-gradient-jet); + border-radius: inherit; + z-index: -1; +} + +.service-icon-box { + margin-bottom: 10px; +} +.service-icon-box img { + margin: auto; +} + +.service-content-box { + text-align: center; +} +.service-item-title { + margin-bottom: 7px; +} + +.service-item-text { + color: var(--light-gray); + font-size: var(--fs6); + font-weight: var(--fw300); + line-height: 1.6; +} + +/*TESTIMONIALS*/ + +.testimonials { + margin-bottom: 30px; +} +.testimonials-title { + margin-bottom: 20px; +} + +.testimonials-list { + display: flex; + justify-content: flex-start; + align-items: flex-start; + gap: 15px; + margin: 0 -15px; + padding: 25px 15px; + padding-bottom: 35px; + overflow-x: auto; + scroll-behavior: smooth; + overscroll-behavior-inline: contain; + scroll-snap-type: inline mandatory; +} + +.testimonials-item { + min-width: 100%; + scroll-snap-align: center; +} + +.testimonials-avatar-box { + position: absolute; + top: 0; + left: 0; + transform: translate(15px, -25px); + background: var(--bg-gradient-onyx); + border-radius: 14px; + box-shadow: var(--shadow1); +} + +.testimonials-text { + color: var(--light-gray); + font-size: var(--fs6); + font-weight: var(--fw300); + line-height: 1.6; + display: -webkit-box; + line-clamp: 4; + -webkit-line-clamp: 4; + -webkit-box-orient: vertical; + overflow: hidden; +} + +/*MODAL CONTAINER*/ + +.modal-container { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; + overflow-y: auto; + overscroll-behavior: contain; + z-index: 20; + pointer-events: none; + visibility: hidden; +} + +.modal-container::-webkit-scrollbar { + display: none; +} + +.modal-container.active { + pointer-events: all; + visibility: visible; +} + +.modal-container.active .testimonials-modal { + transform: scale(1); + opacity: 1; +} + +.overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100vh; + background: hsl(0, 0%, 5%); + opacity: 0; + visibility: hidden; + pointer-events: none; + z-index: 1; + transition: var(--transition1); +} + +.overlay.active { + opacity: 0.8; + visibility: visible; + pointer-events: all; +} + +.testimonials-modal { + background: var(--eerie-black2); + position: relative; + padding: 15px; + margin: 15px 12px; + border: 1px solid var(--jet); + border-radius: 14px; + box-shadow: var(--shadow5); + transform: scale(1.2); + opacity: 0; + transition: var(--transition1); + z-index: 2; +} + +.modal-close-btn { + position: absolute; + top: 15px; + right: 15px; + background: var(--onyx); + border-radius: 8px; + width: 32px; + height: 32px; + display: flex; + justify-content: center; + align-items: center; + color: var(--white2); + font-size: 18px; + opacity: 0.7; +} + +.modal-close-btn:hover, +.modal-close-btn:focus { + opacity: 1; +} +.modal-close-btn ion-icon { + --ionicon-stroke-width: 50px; +} + +.modal-avatar-box { + background: var(--bg-gradient-onyx); + width: max-content; + border-radius: 14px; + margin-bottom: 15px; + box-shadow: var(--shadow2); +} + +.modal-img-wrapper > img { + display: none; +} + +.modal-title { + margin-bottom: 4px; +} + +.modal-content time { + font-size: var(--fs6); + color: var(--light-gray70); + font-weight: var(--fw500); + margin-bottom: 10px; +} + +.modal-content p { + color: var(--light-gray); + font-size: var(--fs6); + font-weight: var(--fw300); + line-height: 1.6; +} + +/*CLIENTS*/ + +.clients { + margin-bottom: 15px; +} + +.clients-list { + display: flex; + justify-content: flex-start; + align-items: flex-start; + gap: 15px; + margin: 0 -15px; + padding: 25px; + padding-bottom: 25px; + overflow-x: auto; + scroll-behavior: smooth; + overscroll-behavior-inline: contain; + scroll-snap-type: inline mandatory; + scroll-padding-inline: 25px; +} + +.clients-item { + min-width: 50%; + scroll-snap-align: start; +} + +.clients-item img { + width: 100%; + filter: grayscale(1); + transition: var(--transition1); +} + +.clients-item img:hover { + filter: grayscale(0); +} + +/*RESUME*/ + +.article-title { + margin-bottom: 30px; +} + +.timeline { + margin-bottom: 30px; +} + +.timeline .title-wrapper { + display: flex; + align-items: center; + gap: 15px; + margin-bottom: 25px; +} + +.timeline-list { + font-size: var(--fs6); + margin-left: 45px; +} + +.timeline-list span { + color: var(--vegas-gold); + font-weight: var(--fw400); + line-height: 1.6; +} + +.timeline-item { + position: relative; +} + +.timeline-item:not(:last-child) { + margin-bottom: 20px; +} +.timeline-item:not(:last-child)::before { + content: ""; + position: absolute; + top: -25px; + left: -30px; + width: 1px; + height: calc(100% + 50px); + background: var(--jet); +} + +.timeline-item::after { + content: ""; + position: absolute; + top: 5px; + left: -33px; + height: 6px; + width: 6px; + border-radius: 50%; + background: var(--text-gradient-yellow); + box-shadow: 0 0 0 4px var(--jet); +} + +.timeline-item-title { + font-size: var(--fs6); + line-height: 1.3; + margin-bottom: 7px; +} + +.timeline-text { + color: var(--light-gray); + font-weight: var(--fw300); + line-height: 1.6; + text-align: justify; +} + +/*SKILLS*/ + +.skills-title { + margin-bottom: 20px; +} + +.skills-list { + padding: 20px; +} + +.skills-item:not(:last-child) { + margin-bottom: 15px; +} + +.skill .title-wrapper { + display: flex; + align-items: center; + gap: 5px; + margin-bottom: 8px; +} + +.skill .title-wrapper data { + color: var(--light-gray); + font-size: var(--fs7); + font-weight: var(--fw300); +} + +.skills-progress-bg { + background: var(--jet); + width: 100%; + height: 8px; + border-radius: 10px; +} + +.skills-progress-fill { + background: var(--text-gradient-yellow); + height: 100%; + border-radius: inherit; +} + +/*PORTFOLIO*/ + +.filter-list { + display: none; +} + +.filter-select-box { + position: relative; + margin-bottom: 25px; +} + +.filter-select { + background: var(--eerie-black2); + color: var(--light-gray); + display: flex; + justify-content: space-between; + align-items: center; + width: 100%; + padding: 12px 16px; + border: 1px solid var(--jet); + border-radius: 14px; + font-size: var(--fs6); + font-weight: var(--fw300); +} + +.filter-select.active .select-icon { + transform: rotate(0.5turn); +} + +.select-list { + background: var(--eerie-black2); + position: absolute; + top: calc(100% + 6px); + width: 100%; + padding: 6px; + border: 1px solid var(--jet); + border-radius: 14px; + z-index: 2; + visibility: hidden; + pointer-events: none; + transition: 0.5s ease-in-out; +} + +.filter-select.active + .select-list { + opacity: 1; + visibility: visible; + pointer-events: all; +} + +.select-item button { + background: var(--eerie-black2); + color: var(--light-gray); + font-size: var(--fs6); + font-weight: var(--fw300); + text-transform: capitalize; + width: 100%; + padding: 8px 10px; + border-radius: 8px; +} + +.select-item button:hover { + --eerie-black2: hsl(240, 2%, 20%); +} + +.project-list { + display: grid; + grid-template-columns: 1fr; + gap: 30px; + margin-bottom: 10px; +} + +.project-item { + display: none; +} + +.project-item.active { + display: block; + animation: scaleUp 0.25s ease forwards; +} + +@keyframes scaleUp { + 0% { + transform: scale(0.5); + } + 100% { + transform: scale(1); + } +} + +.project-item > a { + width: 100%; +} + +.project-img { + position: relative; + width: 100%; + height: 200px; + border-radius: 16px; + overflow: hidden; + margin-bottom: 15px; +} + +.project-img img { + width: 100%; + height: 100%; + object-fit: cover; + transition: var(--transition1); +} + +.project-img::before { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: transparent; + z-index: 1; + transition: var(--transition1); +} + +.project-item > a:hover img { + transform: scale(1.1); +} + +.project-item > a:hover .project-img::before { + background: hsla(0, 0%, 0%, 0.5); +} + +.project-item-icon-box { + --scale: 0.8; + + background: var(--jet); + color: var(--orange-yellow-crayola); + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%) scale(var(--scale)); + font-size: 20px; + padding: 18px; + border-radius: 12px; + opacity: 0; + z-index: 1; + transition: var(--transition1); +} + +.project-item > a:hover .project-item-icon-box { + --scale: 1; + opacity: 1; +} + +.project-item-icon-box ion-icon { + --ionicon-stroke-width: 50px; +} + +.project-title, +.project-category { + margin-left: 10px; +} + +.project-title { + color: var(--white2); + font-size: var(--fs5); + font-weight: var(--fw400); + text-transform: capitalize; + line-height: 1.3; +} + +.project-category { + color: var(--light-gray70); + font-size: var(--fs6); + font-weight: var(--fw300); +} + +/*BLOG*/ + +.blog-posts { + margin-bottom: 10px; +} + +.blog-posts-list { + display: grid; + grid-template-columns: 1fr; + gap: 20px; +} + +.blog-posts-item > a { + position: relative; + background: var(--border-gradient-onyx); + height: 100%; + box-shadow: var(--shadow4); + border-radius: 16px; + z-index: 1; +} + +.blog-posts-item > a::before { + content: ""; + position: absolute; + inset: 1px; + border-radius: inherit; + background: var(--eerie-black1); + z-index: -1; +} + +.blog-banner-box { + width: 100%; + height: 200px; + border-radius: 12px; + overflow: hidden; +} + +.blog-banner-box img { + width: 100%; + height: 100%; + object-fit: cover; + transition: var(--transition1); +} + +.blog-content { + padding: 15px; +} + +.blog-meta { + display: flex; + justify-content: flex-start; + align-items: center; + gap: 7px; + margin-bottom: 10px; +} + +.blog-meta :is(.blog-category, time) { + color: var(--light-gray70); + font-size: var(--fs6); + font-weight: var(--fw300); +} + +.blog-meta .dot { + background: var(--light-gray70); + width: 4px; + height: 4px; + border-radius: 4px; +} + +.blog-item-title { + margin-bottom: 10px; + line-height: 1.3; + transition: var(--transition1); +} + +.blog-post-item > a:hover .blog-item-title { + color: var(--orange-yellow-crayola); +} + +.blog-text { + color: var(--light-gray); + font-size: var(--fs6); + font-weight: var(--fw300); + line-height: 1.6; + text-align: justify; +} + +/*CONTACT*/ + +.mapbox { + position: relative; + height: 250px; + width: 100%; + border-radius: 16px; + margin-bottom: 30px; + border: 1px solid var(--jet); + overflow: hidden; +} + +.mapbox figure { + height: 100%; +} + +.mapbox iframe { + width: 100%; + height: 100%; + border: none; + filter: grayscale(1) invert(1); +} + +.contact-form { + margin-bottom: 10px; +} + +.form-title { + margin-bottom: 20px; +} + +.input-wrapper { + display: grid; + grid-template-columns: 1fr; + gap: 25px; + margin-bottom: 25px; +} + +.form-input { + color: var(--white2); + font-size: var(--fs6); + font-weight: var(--fw400); + padding: 13px 20px; + border: 1px solid var(--jet); + border-radius: 14px; + outline: none; +} + +.form-input::placeholder { + font-weight: var(--fw500); +} +.form-input:focus { + border-color: var(--orange-yellow-crayola); +} +.form-input:focus:invalid { + border-color: var(--bittersweet-shimmer); +} + +textarea.form-input { + min-height: 100px; + height: 120px; + max-height: 200px; + resize: vertical; + margin-bottom: 25px; +} + +textarea.form-input::-webkit-realizer { + display: none; +} + +.form-btn { + position: relative; + width: 100%; + background: var(--border-gradient-onyx); + color: var(--orange-yellow-crayola); + display: flex; + justify-content: center; + align-items: center; + gap: 10px; + padding: 13px 20px; + border-radius: 14px; + font-size: var(--fs6); + text-transform: capitalize; + box-shadow: var(--shadow3); + z-index: 1; + transition: var(--transition1); +} + +.form-btn::before { + content: ""; + position: absolute; + inset: 1px; + background: var(--bg-gradient-jet); + border-radius: inherit; + z-index: -1; + transition: var(--transition1); +} + +.form-btn ion-icon { + font-size: 16px; +} +.form-btn:hover { + background: var(--bg-gradient-yellow1); +} +.form-btn::before { + background: var(--bg-gradient-yellow2); +} + +.form-btn:disabled { + opacity: 0.7; + cursor: not-allowed; +} + +.form-btn:disabled:hover { + background: var(--border-gradient-onyx); +} +.form-btn:disabled:hover::before { + background: var(--bg-gradient-jet); +} + +/*MEDIA QUERIES*/ + +@media (min-width: 450px) { + .clients-item { + min-width: calc(33.33% - 10px); + } + + .project-img, + .blog-banner-box { + height: auto; + } +} + +@media (min-width: 580px) { + :root { + --fs1: 32px; + --fs2: 24px; + --fs3: 26px; + --fs4: 18px; + --fs6: 15px; + --fs7: 15px; + --fs8: 12px; + } + + .sidebar, + article { + width: 520px; + margin-inline: auto; + padding: 30px; + } + + .article-title { + font-weight: var(--fw600); + padding-bottom: 15px; + } + + .article-title::after { + width: 40px; + height: 5px; + } + + .icon-box { + width: 48px; + height: 48px; + border-radius: 12px; + font-size: 18px; + } + + main { + margin-top: 60px; + margin-bottom: 100px; + } + + .sidebar { + max-height: 180px; + margin-bottom: 30px; + } + + .sidebar.active { + max-height: 584px; + } + + .sidebar-info { + gap: 25px; + } + + .avatar-box { + border-radius: 30px; + } + .avatar-box img { + width: 120px; + } + + .info-content .name { + margin-bottom: 15px; + } + .info-content .title { + padding: 5px 10px; + } + + .info-more-btn { + top: -30px; + right: -30px; + padding: 10px 15px; + } + + .info-more-btn span { + display: block; + font-size: var(--fs8); + } + + .info-more-btn ion-icon { + display: none; + } + + .separator { + margin: 32px 0; + } + + .contacts-list { + gap: 20px; + } + + .contact-info { + max-width: calc(100% - 64px); + width: calc(100% - 64px); + } + + .navbar { + border-radius: 20px 20px 0 0; + } + + .navbar-list { + gap: 20px; + } + .navbar-link { + --fs8: 14px; + } + + .about .article-title { + margin-bottom: 20px; + } + .about-text { + margin-bottom: 40px; + } + + .service-item { + display: flex; + justify-content: flex-start; + align-items: flex-start; + gap: 18px; + padding: 30px; + } + + .service-icon-box { + margin-bottom: 0; + margin-top: 5px; + } + + .service-content-box { + text-align: left; + } + + .testimonials-title { + margin-bottom: 25px; + } + + .testimonials-list { + gap: 30px; + margin: 0 -30px; + padding: 30px; + padding-bottom: 35px; + } + + .content-card { + padding: 30px; + padding-top: 25px; + } + + .testimonials-avatar-box { + transform: translate(30px, -30px); + border-radius: 28px; + } + + .testimonials-avatar-box img { + width: 80px; + } + + .testimonials-item-title { + margin-bottom: 10px; + margin-left: 95px; + } + + .testimonials-text { + line-clamp: 2; + -webkit-line-clamp: 2; + } + + .modal-container { + padding: 20px; + } + + .testimonials-modal { + display: flex; + justify-content: flex-start; + align-items: stretch; + gap: 25px; + padding: 30px; + border-radius: 20px; + } + + .modal-img-wrapper { + display: flex; + flex-direction: column; + align-items: center; + } + + .modal-avatar-box { + border-radius: 18px; + margin-bottom: 0; + } + + .modal-avatar-box img { + width: 65px; + } + + .modal-img-wrapper > img { + display: block; + position: relative; + /* flex-grow: 1; */ + width: 35px; + top: 50px; + } + + .clients-list { + gap: 25px; + margin: 0 -30px; + padding: 45px; + scroll-padding-inline: 45px; + } + + .clients-item { + min-width: calc(33.33% - 35px); + } + + .timeline-list { + margin-left: 65px; + } + + .timeline-item:not(:last-child)::before { + left: -40px; + } + + .timeline-item::after { + height: 8px; + width: 8px; + left: -43px; + } + + .skills-item:not(:last-child) { + margin-bottom: 25px; + } + + .project-img, + .blog-banner-box { + border-radius: 16px; + } + + .blog-posts-list { + gap: 30px; + } + + .blog-content { + padding: 25px; + } + + .mapbox { + height: 380px; + border-radius: 18px; + } + + .input-wrapper { + gap: 30px; + margin-bottom: 30px; + } + + .form-input { + padding: 15px 20px; + } + + textarea.form-input { + margin-bottom: 30px; + } + + .form-btn { + --fs-6: 16px; + padding: 16px 20px; + } + + .form-btn ion-icon { + font-size: 18px; + } +} + +@media (min-width: 768px) { + .sidebar, + article { + width: 700px; + } + + .has-scrollbar::-webkit-scrollbar-button { + width: 100px; + } + + .contacts-list { + grid-template-columns: 1fr 1fr; + gap: 30px 15px; + } + + .navbar-link { + --fs8: 15px; + } + + .testimonials-modal { + gap: 35px; + max-width: 680px; + } + + .modal-avatar-box img { + width: 80px; + } + + .article-title { + padding-bottom: 20px; + } + + .filter-select-box { + display: none; + } + + .filter-list { + display: flex; + justify-content: flex-start; + align-items: center; + gap: 25px; + padding-left: 5px; + margin-bottom: 30px; + } + + .filter-item button { + color: var(--light-gray); + font-size: var(--fs5); + transition: var(--transition1); + } + + .filter-item button:hover { + color: var(--light-gray70); + } + .filter-item button.active { + color: var(--orange-yellow-crayola); + } + + .project-list, + .blog-posts-list { + grid-template-columns: 1fr 1fr; + } + + .input-wrapper { + grid-template-columns: 1fr 1fr; + } + + .form-btn { + width: max-content; + margin-left: auto; + } +} + +@media (min-width: 1024px) { + :root { + --shadow1: -4px 8px 24px hsla(0, 0%, 0%, 0.125); + --shadow2: 0px 16px 30px hsla(0, 0%, 0%, 0.125); + --shadow3: 0px 16px 40px hsla(0, 0%, 0%, 0.125); + } + + .sidebar, + article { + width: 950px; + box-shadow: var(--shadow5); + } + + main { + margin-bottom: 60px; + } + + .main-content { + position: relative; + width: max-content; + margin: auto; + } + + .navbar { + position: absolute; + bottom: auto; + top: 0; + left: auto; + right: 0; + width: max-content; + border-radius: 0 20px; + padding: 0 20px; + box-shadow: none; + } + + .navbar-list { + gap: 30px; + padding: 0 20px; + } + + .navbar-link { + font-weight: var(--fw500); + } + + .service-list { + grid-template-columns: 1fr 1fr; + gap: 20px 25px; + } + + .testimonials-item { + min-width: calc(50% - 15px); + } + + .modal-img-wrapper > img { + top: 20px; + } + + .clients-item { + min-width: calc(25% - 15px); + } + + .project-list { + grid-template-columns: repeat(3, 1fr); + } + + .blog-banner-box { + height: 230px; + } +} + +@media (min-width: 1250px) { + body::-webkit-scrollbar { + width: 20px; + } + body::-webkit-scrollbar-track { + background: var(--smoky-black); + } + + body::-webkit-scrollbar-thumb { + border: 5px solid var(--smoky-black); + background: hsla(0, 0%, 100%, 0.1); + border-radius: 20px; + box-shadow: inset 1px 1px 0 hsla(0, 0%, 100%, 0.11), + inset -1px -1px 0 hsla(0, 0%, 100%, 0.11); + } + + body::-webkit-scrollbar-thumb:hover { + background: hsla(0, 0%, 100%, 0.15); + } + body::-webkit-scrollbar-button { + height: 60px; + } + + .sidebar, + article { + width: auto; + } + + article { + min-height: 100%; + } + + main { + max-width: 1200px; + margin-inline: auto; + display: flex; + justify-content: center; + align-items: stretch; + gap: 25px; + } + + .main-content { + min-width: 75%; + width: 75%; + margin: 0; + } + + .sidebar { + position: sticky; + top: 60px; + max-height: max-content; + height: 100%; + margin-bottom: 0; + padding-top: 60px; + z-index: 1; + } + + .sidebar-info { + flex-direction: column; + } + + .avatar-box img { + width: 150px; + } + + .info-content .name { + white-space: nowrap; + text-align: center; + } + + .info-content .title { + margin: auto; + } + + .info-more-btn { + display: none; + } + + .sidebar-info-more { + opacity: 1; + visibility: visible; + } + + .contacts-list { + grid-template-columns: 1fr; + } + + .contact-info :is(.contact-link) { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + + .contact-info :is(.contact-link, time, address) { + --fs7: 14px; + font-weight: var(--fw300); + } + + .separator:last-of-type { + margin: 15px 0; + opacity: 0; + } + + .social-list { + justify-content: center; + } + + .timeline-text { + max-width: 700px; + } +} diff --git a/index.html b/index.html index ce033bc..0fed044 100644 --- a/index.html +++ b/index.html @@ -8,7 +8,7 @@ - + @@ -101,7 +101,378 @@

About me

appealing solutions that reflect creativity and technical expertise. I am always eager to learn and apply my knowledge to solve real-world challenges.

+ + +
+

What I'm doing

+ + +
+ + +
+
+

Resume

+
+ +
+
+
+

Education

+
+ +
    +
  1. +

    Instituto Tecnológico Superior de Occidente del Estado de + Hidalgo (ITSOEH)

    + 2021 - Present +

    Currently pursuing a degree in Engineering in Information and + Communication Technologies (TICS). My coursework focuses on artificial intelligence, + data analysis, and advanced programming. I have also worked on projects involving + machine learning and web development.

    +
  2. + +
  3. +

    High School

    + 2018 - 2021 +

    Completed my high school education with a focus on science and + technology. This was where I discovered my passion for programming and problem-solving, + laying the foundation for my future studies in engineering and technology.

    +
  4. +
+
+
+

My Skills

+ + +
+
+ +
+
+

Portfolio

+
+ +
+ + +
+ + +
    +
  • +
  • +
  • +
  • +
+
+ + +
+
+ +
+
+

Blog

+
+
+ +
+
+
+

Contact

+
+ +
+
+ +
+
+ +
+

Contact Form

+ +
+
+ + +
+ + + + +
+
+
+ + + + + + \ No newline at end of file diff --git a/js/main.js b/js/main.js index e69de29..508f83d 100644 --- a/js/main.js +++ b/js/main.js @@ -0,0 +1,33 @@ +// Page navigation: show/hide content based on navbar clicks + +document.addEventListener('DOMContentLoaded', function () { + const navLinks = document.querySelectorAll('[data-nav-link]'); + const sections = document.querySelectorAll('article[data-page]'); + + // Attach click handlers + navLinks.forEach(link => { + link.addEventListener('click', function () { + const targetPage = this.textContent.trim().toLowerCase(); + + // Show/hide sections + sections.forEach(section => { + section.style.display = + section.getAttribute('data-page') === targetPage ? 'block' : 'none'; + }); + + // Update active class on nav links + navLinks.forEach(navLink => navLink.classList.remove('active')); + this.classList.add('active'); + }); + }); + + // Initialize: show first section and set first nav link active + sections.forEach((section, index) => { + if (index === 0) { + section.style.display = 'block'; + navLinks[index].classList.add('active'); + } else { + section.style.display = 'none'; + } + }); +}); diff --git a/main.css b/main.css new file mode 100644 index 0000000..41664a5 --- /dev/null +++ b/main.css @@ -0,0 +1,1776 @@ +@import url("https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap"); + +:root { + --bg-gradient-onyx: linear-gradient( + to bottom right, + hsl(240, 1%, 25%) 3%, + hsl(0, 0%, 19%) 97% + ); + --bg-gradient-jet: linear-gradient( + to bottom right, + hsla(240, 1%, 18%, 0.251) 3%, + hsla(240, 2%, 11%, 0) 100% + ), + hsl(240, 2%, 13%); + --bg-gradient-yellow1: linear-gradient( + to bottom right, + hsl(45, 100%, 71%) 0%, + hsla(36, 100%, 69%, 0) 50% + ); + --bg-gradient-yellow2: linear-gradient( + 135deg, + hsla(45, 100%, 71%, 0.251) 0%, + hsla(35, 100%, 68%, 0) 59.86% + ), + hsl(240, 2%, 13%); + --border-gradient-onyx: linear-gradient( + to bottom right, + hsl(0, 0%, 25%) 0%, + hsla(0, 0%, 25%, 0) 50% + ); + --text-gradient-yellow: linear-gradient( + to right, + hsl(45, 100%, 72%), + hsl(35, 100%, 68%) + ); + + --jet: hsl(0, 0%, 22%); + --onyx: hsl(240, 1%, 17%); + --eerie-black1: hsl(240, 2%, 13%); + --eerie-black2: hsl(240, 2%, 12%); + --smoky-black: hsl(0, 0%, 7%); + --white1: hsl(0, 0%, 100%); + --white2: hsl(0, 0%, 98%); + --orange-yellow-crayola: hsl(45, 100%, 72%); + --vegas-gold: hsl(45, 54%, 58%); + --light-gray: hsl(0, 0%, 84%); + --light-gray70: hsla(0, 0%, 84%, 0.7); + --bittersweet-shimmer: hsl(0, 43%, 51%); + + --ff-poppins: "Poppins", sans-serif; + + --fs1: 24px; + --fs2: 18px; + --fs3: 17px; + --fs4: 16px; + --fs5: 15px; + --fs6: 14px; + --fs7: 13px; + --fs8: 12px; + + --fw300: 300; + --fw400: 400; + --fw500: 500; + --fw600: 600; + + --shadow1: -4px 8px 24px hsla(0, 0%, 0%, 0.25); + --shadow2: 0px 16px 30px hsla(0, 0%, 0%, 0.25); + --shadow3: 0px 16px 40px hsla(0, 0%, 0%, 0.25); + --shadow4: 0px 25px 50px hsla(0, 0%, 0%, 0.15); + --shadow5: 0px 24px 80px hsla(0, 0%, 0%, 0.25); + + --transition1: 0.25s ease; + --transition2: 0.5s ease-in-out; +} + +*, +*::before, +*::after { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +a { + text-decoration: none; +} + +li { + list-style: none; +} + +img, +ion-icon, +a, +button, +time, +span { + display: block; +} + +button { + font: inherit; + background: none; + border: none; + text-align: left; + cursor: pointer; +} + +input, +textarea { + display: block; + width: 100%; + background: none; + font: inherit; +} + +::selection { + background: var(--orange-yellow-crayola); + color: var(--smoky-black); +} + +:focus { + outline-color: var(--orange-yellow-crayola); +} + +html { + font-family: var(--ff-poppins); +} + +body { + background: var(--smoky-black); +} + +main { + margin: 15px 12px; + margin-bottom: 75px; + min-width: 259px; +} + +.sidebar, +article { + background: var(--eerie-black2); + border: 1px solid var(--jet); + border-radius: 20px; + box-shadow: var(--shadow1); + z-index: 1; + padding: 15px; +} + +.sidebar.active { + max-height: 405px; +} + +.separator { + width: 100%; + height: 1px; + background: var(--jet); + margin: 16px 0; +} + +.icon-box { + position: relative; + background: var(--border-gradient-onyx); + width: 30px; + height: 30px; + border-radius: 8px; + display: flex; + justify-content: center; + align-items: center; + font-size: 16px; + color: var(--orange-yellow-crayola); + box-shadow: var(--shadow1); + z-index: 1; +} + +.icon-box::before { + content: ""; + position: absolute; + inset: 1px; + background: var(--eerie-black1); + border-radius: inherit; + z-index: -1; +} + +.icon-box ion-icon { + --ionicon-stroke-width: 35px; +} + +article { + display: none; +} + +article.active { + display: block; + animation: fade 0.5s ease backwards; +} + +@keyframes fade { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } +} + +.h2, +.h3, +.h4, +.h5 { + color: var(--white2); + text-transform: capitalize; +} + +.h2 { + font-size: var(--fs1); +} +.h3 { + font-size: var(--fs2); +} +.h4 { + font-size: var(--fs4); +} +.h5 { + font-size: var(--fs7); + font-weight: var(--fw500); +} + +.article-title { + position: relative; + padding-bottom: 7px; +} + +.article-title::after { + content: ""; + position: absolute; + bottom: 0; + left: 0; + width: 30px; + height: 3px; + background: var(--text-gradient-yellow); + border-radius: 3px; +} + +.has-scrollbar::-webkit-scrollbar { + width: 5px; + height: 5px; +} + +.has-scrollbar::-webkit-scrollbar-track { + background: var(--onyx); + border-radius: 5px; +} + +.has-scrollbar::-webkit-scrollbar-thumb { + background: var(--orange-yellow-crayola); + border-radius: 5px; +} + +.has-scrollbar::-webkit-scrollbar-button { + width: 20px; +} + +.content-card { + position: relative; + background: var(--border-gradient-onyx); + padding: 15px; + padding-top: 45px; + border-radius: 14px; + box-shadow: var(--shadow2); + cursor: pointer; + z-index: 1; +} + +.content-card::before { + content: ""; + position: absolute; + inset: 1px; + background: var(--bg-gradient-jet); + border-radius: inherit; + z-index: -1; +} + +/*ASIDE - SIDEBAR*/ + +.sidebar { + margin-bottom: 15px; + max-height: 112px; + overflow: hidden; + padding: 15px; + transition: var(--transition2); +} + +.sidebar-info { + position: relative; + display: flex; + justify-content: flex-start; + align-items: center; + gap: 15px; +} + +.avatar-box { + background: var(--bg-gradient-onyx); + border-radius: 20px; +} + +.info-content .name { + color: var(--white2); + font-size: var(--fs3); + font-weight: var(--fw500); + letter-spacing: -0.25px; + margin-bottom: 10px; +} + +.info-content .title { + color: var(--white1); + background: var(--onyx); + font-size: var(--fs8); + font-weight: var(--fw300); + width: max-content; + padding: 3px 12px; + border-radius: 8px; +} + +.info-more-btn { + position: absolute; + top: -15px; + right: -15px; + border-radius: 0 15px; + font-size: 13px; + color: var(--orange-yellow-crayola); + background: var(--border-gradient-onyx); + padding: 10px; + box-shadow: var(--shadow2); + transition: var(--transition1); + z-index: 1; +} + +.info-more-btn::before { + content: ""; + position: absolute; + inset: 1px; + border-radius: inherit; + background: var(--bg-gradient-jet); + transition: var(--transition1); + z-index: -1; +} + +.info-more-btn:hover, +.info-more-btn:focus { + background: var(--bg-gradient-yellow1); +} +.info-more-btn:hover::before, +.info-more-btn:focus::before { + background: var(--bg-gradient-yellow2); +} + +.info-more-btn span { + display: none; +} + +.sidebar-info-more { + opacity: 0; + visibility: hidden; + transition: var(--transition2); +} + +.sidebar.active .sidebar-info-more { + opacity: 1; + visibility: visible; +} + +.contacts-list { + display: grid; + grid-template-columns: 1fr; + gap: 16px; +} + +.contact-item { + min-width: 100%; + display: flex; + align-items: center; + gap: 16px; +} + +.contact-info { + max-width: calc(100% - 46px); + width: calc(100% - 46px); +} + +.contact-info :is(.contact-link, time, address) { + color: var(--white2); + font-size: var(--fs7); +} + +.contact-info address { + font-style: normal; +} + +.contact-title { + color: var(--light-gray70); + font-size: var(--fs8); + text-transform: uppercase; + margin-bottom: 2px; +} + +.social-list { + display: flex; + justify-content: flex-start; + align-items: center; + gap: 15px; + padding-bottom: 4px; + padding-left: 7px; +} + +.social-item .social-link { + color: var(--light-gray70); + font-size: 18px; +} + +.social-item .social-link:hover { + color: var(--light-gray); +} + +/*NAVBAR*/ + +.navbar { + position: fixed; + bottom: 0; + left: 0; + width: 100%; + background: hsla(240, 1%, 17%, 0.75); + backdrop-filter: blur(10px); + border: 1px solid var(--jet); + border-radius: 12px 12px 0 0; + box-shadow: var(--shadow2); + z-index: 5; +} + +.navbar-list { + display: flex; + flex-wrap: wrap; + justify-content: center; + align-items: center; + padding: 0 10px; +} + +.navbar-link { + color: var(--light-gray); + font-size: var(--fs8); + padding: 20px 7px; + transition: color var(--transition1); +} + +.navbar-link:hover, +.navbar-link:focus { + color: var(--light-gray70); +} +.navbar-link.active { + color: var(--orange-yellow-crayola); +} + +.navbar-link.active { + color: #f39c12; /* Ejemplo de color de énfasis */ + font-weight: bold; +} + +/*ABOUT*/ + +.about .article-title { + margin-bottom: 15px; + margin-top: 15px; +} + +.about-text { + color: var(--light-gray); + font-size: var(--fs6); + font-weight: var(--fw300); + line-height: 1.6; +} + +.about-text p { + margin-bottom: 15px; + text-align: justify; + padding-left: 10px; + padding-right: 10px; +} + +.service { + margin-bottom: 35px; +} + +.service-title { + margin-bottom: 20px; +} + +.service-list { + display: grid; + grid-template-columns: 1fr; + gap: 20px; +} + +.service-item { + position: relative; + background: var(--border-gradient-onyx); + padding: 20px; + border-radius: 14px; + box-shadow: var(--shadow2); + z-index: 1; +} + +.service-item::before { + content: ""; + position: absolute; + inset: 1px; + background: var(--bg-gradient-jet); + border-radius: inherit; + z-index: -1; +} + +.service-icon-box { + margin-bottom: 10px; +} +.service-icon-box img { + margin: auto; +} + +.service-content-box { + text-align: center; +} +.service-item-title { + margin-bottom: 7px; +} + +.service-item-text { + color: var(--light-gray); + font-size: var(--fs6); + font-weight: var(--fw300); + line-height: 1.6; +} + +/*TESTIMONIALS*/ + +.testimonials { + margin-bottom: 30px; +} +.testimonials-title { + margin-bottom: 20px; +} + +.testimonials-list { + display: flex; + justify-content: flex-start; + align-items: flex-start; + gap: 15px; + margin: 0 -15px; + padding: 25px 15px; + padding-bottom: 35px; + overflow-x: auto; + scroll-behavior: smooth; + overscroll-behavior-inline: contain; + scroll-snap-type: inline mandatory; +} + +.testimonials-item { + min-width: 100%; + scroll-snap-align: center; +} + +.testimonials-avatar-box { + position: absolute; + top: 0; + left: 0; + transform: translate(15px, -25px); + background: var(--bg-gradient-onyx); + border-radius: 14px; + box-shadow: var(--shadow1); +} + +.testimonials-text { + color: var(--light-gray); + font-size: var(--fs6); + font-weight: var(--fw300); + line-height: 1.6; + display: -webkit-box; + line-clamp: 4; + -webkit-line-clamp: 4; + -webkit-box-orient: vertical; + overflow: hidden; +} + +/*MODAL CONTAINER*/ + +.modal-container { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; + overflow-y: auto; + overscroll-behavior: contain; + z-index: 20; + pointer-events: none; + visibility: hidden; +} + +.modal-container::-webkit-scrollbar { + display: none; +} + +.modal-container.active { + pointer-events: all; + visibility: visible; +} + +.modal-container.active .testimonials-modal { + transform: scale(1); + opacity: 1; +} + +.overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100vh; + background: hsl(0, 0%, 5%); + opacity: 0; + visibility: hidden; + pointer-events: none; + z-index: 1; + transition: var(--transition1); +} + +.overlay.active { + opacity: 0.8; + visibility: visible; + pointer-events: all; +} + +.testimonials-modal { + background: var(--eerie-black2); + position: relative; + padding: 15px; + margin: 15px 12px; + border: 1px solid var(--jet); + border-radius: 14px; + box-shadow: var(--shadow5); + transform: scale(1.2); + opacity: 0; + transition: var(--transition1); + z-index: 2; +} + +.modal-close-btn { + position: absolute; + top: 15px; + right: 15px; + background: var(--onyx); + border-radius: 8px; + width: 32px; + height: 32px; + display: flex; + justify-content: center; + align-items: center; + color: var(--white2); + font-size: 18px; + opacity: 0.7; +} + +.modal-close-btn:hover, +.modal-close-btn:focus { + opacity: 1; +} +.modal-close-btn ion-icon { + --ionicon-stroke-width: 50px; +} + +.modal-avatar-box { + background: var(--bg-gradient-onyx); + width: max-content; + border-radius: 14px; + margin-bottom: 15px; + box-shadow: var(--shadow2); +} + +.modal-img-wrapper > img { + display: none; +} + +.modal-title { + margin-bottom: 4px; +} + +.modal-content time { + font-size: var(--fs6); + color: var(--light-gray70); + font-weight: var(--fw500); + margin-bottom: 10px; +} + +.modal-content p { + color: var(--light-gray); + font-size: var(--fs6); + font-weight: var(--fw300); + line-height: 1.6; +} + +/*CLIENTS*/ + +.clients { + margin-bottom: 15px; +} + +.clients-list { + display: flex; + justify-content: flex-start; + align-items: flex-start; + gap: 15px; + margin: 0 -15px; + padding: 25px; + padding-bottom: 25px; + overflow-x: auto; + scroll-behavior: smooth; + overscroll-behavior-inline: contain; + scroll-snap-type: inline mandatory; + scroll-padding-inline: 25px; +} + +.clients-item { + min-width: 50%; + scroll-snap-align: start; +} + +.clients-item img { + width: 100%; + filter: grayscale(1); + transition: var(--transition1); +} + +.clients-item img:hover { + filter: grayscale(0); +} + +/*RESUME*/ + +.article-title { + margin-bottom: 30px; +} + +.timeline { + margin-bottom: 30px; +} + +.timeline .title-wrapper { + display: flex; + align-items: center; + gap: 15px; + margin-bottom: 25px; +} + +.timeline-list { + font-size: var(--fs6); + margin-left: 45px; +} + +.timeline-list span { + color: var(--vegas-gold); + font-weight: var(--fw400); + line-height: 1.6; +} + +.timeline-item { + position: relative; +} + +.timeline-item:not(:last-child) { + margin-bottom: 20px; +} +.timeline-item:not(:last-child)::before { + content: ""; + position: absolute; + top: -25px; + left: -30px; + width: 1px; + height: calc(100% + 50px); + background: var(--jet); +} + +.timeline-item::after { + content: ""; + position: absolute; + top: 5px; + left: -33px; + height: 6px; + width: 6px; + border-radius: 50%; + background: var(--text-gradient-yellow); + box-shadow: 0 0 0 4px var(--jet); +} + +.timeline-item-title { + font-size: var(--fs6); + line-height: 1.3; + margin-bottom: 7px; +} + +.timeline-text { + color: var(--light-gray); + font-weight: var(--fw300); + line-height: 1.6; + text-align: justify; +} + +/*SKILLS*/ + +.skills-title { + margin-bottom: 20px; +} + +.skills-list { + padding: 20px; +} + +.skills-item:not(:last-child) { + margin-bottom: 15px; +} + +.skill .title-wrapper { + display: flex; + align-items: center; + gap: 5px; + margin-bottom: 8px; +} + +.skill .title-wrapper data { + color: var(--light-gray); + font-size: var(--fs7); + font-weight: var(--fw300); +} + +.skills-progress-bg { + background: var(--jet); + width: 100%; + height: 8px; + border-radius: 10px; +} + +.skills-progress-fill { + background: var(--text-gradient-yellow); + height: 100%; + border-radius: inherit; +} + +/*PORTFOLIO*/ + +.filter-list { + display: none; +} + +.filter-select-box { + position: relative; + margin-bottom: 25px; +} + +.filter-select { + background: var(--eerie-black2); + color: var(--light-gray); + display: flex; + justify-content: space-between; + align-items: center; + width: 100%; + padding: 12px 16px; + border: 1px solid var(--jet); + border-radius: 14px; + font-size: var(--fs6); + font-weight: var(--fw300); +} + +.filter-select.active .select-icon { + transform: rotate(0.5turn); +} + +.select-list { + background: var(--eerie-black2); + position: absolute; + top: calc(100% + 6px); + width: 100%; + padding: 6px; + border: 1px solid var(--jet); + border-radius: 14px; + z-index: 2; + visibility: hidden; + pointer-events: none; + transition: 0.5s ease-in-out; +} + +.filter-select.active + .select-list { + opacity: 1; + visibility: visible; + pointer-events: all; +} + +.select-item button { + background: var(--eerie-black2); + color: var(--light-gray); + font-size: var(--fs6); + font-weight: var(--fw300); + text-transform: capitalize; + width: 100%; + padding: 8px 10px; + border-radius: 8px; +} + +.select-item button:hover { + --eerie-black2: hsl(240, 2%, 20%); +} + +.project-list { + display: grid; + grid-template-columns: 1fr; + gap: 30px; + margin-bottom: 10px; +} + +.project-item { + display: none; +} + +.project-item.active { + display: block; + animation: scaleUp 0.25s ease forwards; +} + +@keyframes scaleUp { + 0% { + transform: scale(0.5); + } + 100% { + transform: scale(1); + } +} + +.project-item > a { + width: 100%; +} + +.project-img { + position: relative; + width: 100%; + height: 200px; + border-radius: 16px; + overflow: hidden; + margin-bottom: 15px; +} + +.project-img img { + width: 100%; + height: 100%; + object-fit: cover; + transition: var(--transition1); +} + +.project-img::before { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: transparent; + z-index: 1; + transition: var(--transition1); +} + +.project-item > a:hover img { + transform: scale(1.1); +} + +.project-item > a:hover .project-img::before { + background: hsla(0, 0%, 0%, 0.5); +} + +.project-item-icon-box { + --scale: 0.8; + + background: var(--jet); + color: var(--orange-yellow-crayola); + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%) scale(var(--scale)); + font-size: 20px; + padding: 18px; + border-radius: 12px; + opacity: 0; + z-index: 1; + transition: var(--transition1); +} + +.project-item > a:hover .project-item-icon-box { + --scale: 1; + opacity: 1; +} + +.project-item-icon-box ion-icon { + --ionicon-stroke-width: 50px; +} + +.project-title, +.project-category { + margin-left: 10px; +} + +.project-title { + color: var(--white2); + font-size: var(--fs5); + font-weight: var(--fw400); + text-transform: capitalize; + line-height: 1.3; +} + +.project-category { + color: var(--light-gray70); + font-size: var(--fs6); + font-weight: var(--fw300); +} + +/*BLOG*/ + +.blog-posts { + margin-bottom: 10px; +} + +.blog-posts-list { + display: grid; + grid-template-columns: 1fr; + gap: 20px; +} + +.blog-posts-item > a { + position: relative; + background: var(--border-gradient-onyx); + height: 100%; + box-shadow: var(--shadow4); + border-radius: 16px; + z-index: 1; +} + +.blog-posts-item > a::before { + content: ""; + position: absolute; + inset: 1px; + border-radius: inherit; + background: var(--eerie-black1); + z-index: -1; +} + +.blog-banner-box { + width: 100%; + height: 200px; + border-radius: 12px; + overflow: hidden; +} + +.blog-banner-box img { + width: 100%; + height: 100%; + object-fit: cover; + transition: var(--transition1); +} + +.blog-content { + padding: 15px; +} + +.blog-meta { + display: flex; + justify-content: flex-start; + align-items: center; + gap: 7px; + margin-bottom: 10px; +} + +.blog-meta :is(.blog-category, time) { + color: var(--light-gray70); + font-size: var(--fs6); + font-weight: var(--fw300); +} + +.blog-meta .dot { + background: var(--light-gray70); + width: 4px; + height: 4px; + border-radius: 4px; +} + +.blog-item-title { + margin-bottom: 10px; + line-height: 1.3; + transition: var(--transition1); +} + +.blog-post-item > a:hover .blog-item-title { + color: var(--orange-yellow-crayola); +} + +.blog-text { + color: var(--light-gray); + font-size: var(--fs6); + font-weight: var(--fw300); + line-height: 1.6; + text-align: justify; +} + +/*CONTACT*/ + +.mapbox { + position: relative; + height: 250px; + width: 100%; + border-radius: 16px; + margin-bottom: 30px; + border: 1px solid var(--jet); + overflow: hidden; +} + +.mapbox figure { + height: 100%; +} + +.mapbox iframe { + width: 100%; + height: 100%; + border: none; + filter: grayscale(1) invert(1); +} + +.contact-form { + margin-bottom: 10px; +} + +.form-title { + margin-bottom: 20px; +} + +.input-wrapper { + display: grid; + grid-template-columns: 1fr; + gap: 25px; + margin-bottom: 25px; +} + +.form-input { + color: var(--white2); + font-size: var(--fs6); + font-weight: var(--fw400); + padding: 13px 20px; + border: 1px solid var(--jet); + border-radius: 14px; + outline: none; +} + +.form-input::placeholder { + font-weight: var(--fw500); +} +.form-input:focus { + border-color: var(--orange-yellow-crayola); +} +.form-input:focus:invalid { + border-color: var(--bittersweet-shimmer); +} + +textarea.form-input { + min-height: 100px; + height: 120px; + max-height: 200px; + resize: vertical; + margin-bottom: 25px; +} + +textarea.form-input::-webkit-realizer { + display: none; +} + +.form-btn { + position: relative; + width: 100%; + background: var(--border-gradient-onyx); + color: var(--orange-yellow-crayola); + display: flex; + justify-content: center; + align-items: center; + gap: 10px; + padding: 13px 20px; + border-radius: 14px; + font-size: var(--fs6); + text-transform: capitalize; + box-shadow: var(--shadow3); + z-index: 1; + transition: var(--transition1); +} + +.form-btn::before { + content: ""; + position: absolute; + inset: 1px; + background: var(--bg-gradient-jet); + border-radius: inherit; + z-index: -1; + transition: var(--transition1); +} + +.form-btn ion-icon { + font-size: 16px; +} +.form-btn:hover { + background: var(--bg-gradient-yellow1); +} +.form-btn::before { + background: var(--bg-gradient-yellow2); +} + +.form-btn:disabled { + opacity: 0.7; + cursor: not-allowed; +} + +.form-btn:disabled:hover { + background: var(--border-gradient-onyx); +} +.form-btn:disabled:hover::before { + background: var(--bg-gradient-jet); +} + +/*MEDIA QUERIES*/ + +@media (min-width: 450px) { + .clients-item { + min-width: calc(33.33% - 10px); + } + + .project-img, + .blog-banner-box { + height: auto; + } +} + +@media (min-width: 580px) { + :root { + --fs1: 32px; + --fs2: 24px; + --fs3: 26px; + --fs4: 18px; + --fs6: 15px; + --fs7: 15px; + --fs8: 12px; + } + + .sidebar, + article { + width: 520px; + margin-inline: auto; + padding: 30px; + } + + .article-title { + font-weight: var(--fw600); + padding-bottom: 15px; + } + + .article-title::after { + width: 40px; + height: 5px; + } + + .icon-box { + width: 48px; + height: 48px; + border-radius: 12px; + font-size: 18px; + } + + main { + margin-top: 60px; + margin-bottom: 100px; + } + + .sidebar { + max-height: 180px; + margin-bottom: 30px; + } + + .sidebar.active { + max-height: 584px; + } + + .sidebar-info { + gap: 25px; + } + + .avatar-box { + border-radius: 30px; + } + .avatar-box img { + width: 120px; + } + + .info-content .name { + margin-bottom: 15px; + } + .info-content .title { + padding: 5px 10px; + } + + .info-more-btn { + top: -30px; + right: -30px; + padding: 10px 15px; + } + + .info-more-btn span { + display: block; + font-size: var(--fs8); + } + + .info-more-btn ion-icon { + display: none; + } + + .separator { + margin: 32px 0; + } + + .contacts-list { + gap: 20px; + } + + .contact-info { + max-width: calc(100% - 64px); + width: calc(100% - 64px); + } + + .navbar { + border-radius: 20px 20px 0 0; + } + + .navbar-list { + gap: 20px; + } + .navbar-link { + --fs8: 14px; + } + + .about .article-title { + margin-bottom: 20px; + } + .about-text { + margin-bottom: 40px; + } + + .service-item { + display: flex; + justify-content: flex-start; + align-items: flex-start; + gap: 18px; + padding: 30px; + } + + .service-icon-box { + margin-bottom: 0; + margin-top: 5px; + } + + .service-content-box { + text-align: left; + } + + .testimonials-title { + margin-bottom: 25px; + } + + .testimonials-list { + gap: 30px; + margin: 0 -30px; + padding: 30px; + padding-bottom: 35px; + } + + .content-card { + padding: 30px; + padding-top: 25px; + } + + .testimonials-avatar-box { + transform: translate(30px, -30px); + border-radius: 28px; + } + + .testimonials-avatar-box img { + width: 80px; + } + + .testimonials-item-title { + margin-bottom: 10px; + margin-left: 95px; + } + + .testimonials-text { + line-clamp: 2; + -webkit-line-clamp: 2; + } + + .modal-container { + padding: 20px; + } + + .testimonials-modal { + display: flex; + justify-content: flex-start; + align-items: stretch; + gap: 25px; + padding: 30px; + border-radius: 20px; + } + + .modal-img-wrapper { + display: flex; + flex-direction: column; + align-items: center; + } + + .modal-avatar-box { + border-radius: 18px; + margin-bottom: 0; + } + + .modal-avatar-box img { + width: 65px; + } + + .modal-img-wrapper > img { + display: block; + position: relative; + /* flex-grow: 1; */ + width: 35px; + top: 50px; + } + + .clients-list { + gap: 25px; + margin: 0 -30px; + padding: 45px; + scroll-padding-inline: 45px; + } + + .clients-item { + min-width: calc(33.33% - 35px); + } + + .timeline-list { + margin-left: 65px; + } + + .timeline-item:not(:last-child)::before { + left: -40px; + } + + .timeline-item::after { + height: 8px; + width: 8px; + left: -43px; + } + + .skills-item:not(:last-child) { + margin-bottom: 25px; + } + + .project-img, + .blog-banner-box { + border-radius: 16px; + } + + .blog-posts-list { + gap: 30px; + } + + .blog-content { + padding: 25px; + } + + .mapbox { + height: 380px; + border-radius: 18px; + } + + .input-wrapper { + gap: 30px; + margin-bottom: 30px; + } + + .form-input { + padding: 15px 20px; + } + + textarea.form-input { + margin-bottom: 30px; + } + + .form-btn { + --fs-6: 16px; + padding: 16px 20px; + } + + .form-btn ion-icon { + font-size: 18px; + } +} + +@media (min-width: 768px) { + .sidebar, + article { + width: 700px; + } + + .has-scrollbar::-webkit-scrollbar-button { + width: 100px; + } + + .contacts-list { + grid-template-columns: 1fr 1fr; + gap: 30px 15px; + } + + .navbar-link { + --fs8: 15px; + } + + .testimonials-modal { + gap: 35px; + max-width: 680px; + } + + .modal-avatar-box img { + width: 80px; + } + + .article-title { + padding-bottom: 20px; + } + + .filter-select-box { + display: none; + } + + .filter-list { + display: flex; + justify-content: flex-start; + align-items: center; + gap: 25px; + padding-left: 5px; + margin-bottom: 30px; + } + + .filter-item button { + color: var(--light-gray); + font-size: var(--fs5); + transition: var(--transition1); + } + + .filter-item button:hover { + color: var(--light-gray70); + } + .filter-item button.active { + color: var(--orange-yellow-crayola); + } + + .project-list, + .blog-posts-list { + grid-template-columns: 1fr 1fr; + } + + .input-wrapper { + grid-template-columns: 1fr 1fr; + } + + .form-btn { + width: max-content; + margin-left: auto; + } +} + +@media (min-width: 1024px) { + :root { + --shadow1: -4px 8px 24px hsla(0, 0%, 0%, 0.125); + --shadow2: 0px 16px 30px hsla(0, 0%, 0%, 0.125); + --shadow3: 0px 16px 40px hsla(0, 0%, 0%, 0.125); + } + + .sidebar, + article { + width: 950px; + box-shadow: var(--shadow5); + } + + main { + margin-bottom: 60px; + } + + .main-content { + position: relative; + width: max-content; + margin: auto; + } + + .navbar { + position: absolute; + bottom: auto; + top: 0; + left: auto; + right: 0; + width: max-content; + border-radius: 0 20px; + padding: 0 20px; + box-shadow: none; + } + + .navbar-list { + gap: 30px; + padding: 0 20px; + } + + .navbar-link { + font-weight: var(--fw500); + } + + .service-list { + grid-template-columns: 1fr 1fr; + gap: 20px 25px; + } + + .testimonials-item { + min-width: calc(50% - 15px); + } + + .modal-img-wrapper > img { + top: 20px; + } + + .clients-item { + min-width: calc(25% - 15px); + } + + .project-list { + grid-template-columns: repeat(3, 1fr); + } + + .blog-banner-box { + height: 230px; + } +} + +@media (min-width: 1250px) { + body::-webkit-scrollbar { + width: 20px; + } + body::-webkit-scrollbar-track { + background: var(--smoky-black); + } + + body::-webkit-scrollbar-thumb { + border: 5px solid var(--smoky-black); + background: hsla(0, 0%, 100%, 0.1); + border-radius: 20px; + box-shadow: inset 1px 1px 0 hsla(0, 0%, 100%, 0.11), + inset -1px -1px 0 hsla(0, 0%, 100%, 0.11); + } + + body::-webkit-scrollbar-thumb:hover { + background: hsla(0, 0%, 100%, 0.15); + } + body::-webkit-scrollbar-button { + height: 60px; + } + + .sidebar, + article { + width: auto; + } + + article { + min-height: 100%; + } + + main { + max-width: 1200px; + margin-inline: auto; + display: flex; + justify-content: center; + align-items: stretch; + gap: 25px; + } + + .main-content { + min-width: 75%; + width: 75%; + margin: 0; + } + + .sidebar { + position: sticky; + top: 60px; + max-height: max-content; + height: 100%; + margin-bottom: 0; + padding-top: 60px; + z-index: 1; + } + + .sidebar-info { + flex-direction: column; + } + + .avatar-box img { + width: 150px; + } + + .info-content .name { + white-space: nowrap; + text-align: center; + } + + .info-content .title { + margin: auto; + } + + .info-more-btn { + display: none; + } + + .sidebar-info-more { + opacity: 1; + visibility: visible; + } + + .contacts-list { + grid-template-columns: 1fr; + } + + .contact-info :is(.contact-link) { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + + .contact-info :is(.contact-link, time, address) { + --fs7: 14px; + font-weight: var(--fw300); + } + + .separator:last-of-type { + margin: 15px 0; + opacity: 0; + } + + .social-list { + justify-content: center; + } + + .timeline-text { + max-width: 700px; + } +}