@charset "UTF-8"; :root { --font-size__base: 16px; --gap: 20px; --gap-s: 10px; --dark: #222831; --dark-darker: #181E25; --dark-lighter: #333B48; --light: #F5F5F5; --green: #0B7A75; --green-lighter: #11BBB2; --blue: #5f9ea0; --blue-lighter: #b0c299; } @media screen and (min-width: 920px) { :root { --font-size__base: 18px; } } @media screen and (min-width: 1010px) { :root { --gap: 40px; --gap-s: 20px; } } *, *::before, *::after { box-sizing: border-box; } body, h1, h2, h3, h4, p, figure, blockquote, dl, dd { margin: 0; } html { --scroll-behavior: smooth; scroll-behavior: smooth; overflow-x: hidden; } body { text-rendering: optimizeSpeed; -webkit-font-smoothing: antialiased; line-height: 1.6; font-family: "KoHo", sans-serif; font-size: var(--font-size__base); background: var(--dark); color: var(--light); overflow-x: hidden; } h1 { font-size: 45px; } h2 { font-size: 32px; margin-bottom: var(--gap-s); } @media screen and (min-width: 768px) { h2 { font-size: 38px; } } h3 { font-size: 20px; margin-bottom: 10px; } @media screen and (min-width: 768px) { h3 { font-size: 24px; } } h4 { font-size: var(--font-size__base); } ul, ol { list-style: none; margin: 0; padding: 0; } a, a:visited { text-decoration: none; cursor: pointer; transition: all 0.4s ease; color: var(--green-lighter); } a:hover { color: var(--blue-lighter); transition: all 0.4s ease; } img, picture { max-width: 100%; display: block; } /* Firefox */ * { scrollbar-width: thin; scrollbar-color: var(--green) transparent; } /* Chrome, Edge, and Safari */ *::-webkit-scrollbar { width: 5px; } *::-webkit-scrollbar-track { background: none; } *::-webkit-scrollbar-thumb { background-color: var(--green); border-radius: 5px; border: none; } @font-face { font-family: 'KoHo'; src: url("font/KoHo-Regular.woff"); font-weight: normal; font-style: normal; font-display: swap; } .fade-in-left { opacity: 0; transition: opacity 0.4s ease; } .fade-in-left.animate { -webkit-animation: fade-in-left 1s cubic-bezier(0.68, -0.55, 0.265, 1.55) both; animation: fade-in-left 1s cubic-bezier(0.68, -0.55, 0.265, 1.55) both; transition: opacity 0.4s ease; } .fade-in-right { opacity: 0; transition: opacity 0.4s ease; } .fade-in-right.animate { -webkit-animation: fade-in-right 1s cubic-bezier(0.39, 0.575, 0.565, 1) both; animation: fade-in-right 1s cubic-bezier(0.39, 0.575, 0.565, 1) both; transition: opacity 0.4s ease; } .fade-in-fwd { opacity: 0; transition: opacity 0.4s ease; } .fade-in-fwd.animate { -webkit-animation: fade-in-fwd 1s cubic-bezier(0.39, 0.575, 0.565, 1) both; animation: fade-in-fwd 1s cubic-bezier(0.39, 0.575, 0.565, 1) both; transition: opacity 0.4s ease; } .swing-in-top-fwd { opacity: 0; transition: opacity 0.4s ease; } .swing-in-top-fwd.animate { -webkit-animation: swing-in-top-fwd 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275) both; animation: swing-in-top-fwd 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275) both; transition: opacity 0.4s ease; } .fade-out { -webkit-animation: fade-out 1s cubic-bezier(0.25, 0.46, 0.45, 0.94) both !important; animation: fade-out 1s cubic-bezier(0.25, 0.46, 0.45, 0.94) both !important; transition: opacity 0.4s ease; } .slide-in-left { -webkit-animation: slide-in-left 1s cubic-bezier(0.68, -0.55, 0.265, 1.55) both; animation: slide-in-left 1s cubic-bezier(0.68, -0.55, 0.265, 1.55) both; transition: opacity 0.4s ease; } .slide-out-left { -webkit-animation: slide-out-left 1s cubic-bezier(0.68, -0.55, 0.265, 1.55) both; animation: slide-out-left 1s cubic-bezier(0.68, -0.55, 0.265, 1.55) both; transition: opacity 0.4s ease; } .animate.delay_01 { -webkit-animation-delay: 0.1s; animation-delay: 0.1s; } .animate.delay_02 { -webkit-animation-delay: 0.2s; animation-delay: 0.2s; } .animate.delay_03 { -webkit-animation-delay: 0.3s; animation-delay: 0.3s; } .animate.delay_04 { -webkit-animation-delay: 0.4s; animation-delay: 0.4s; } .animate.delay_05 { -webkit-animation-delay: 0.5s; animation-delay: 0.5s; } .animate.delay_06 { -webkit-animation-delay: 0.6s; animation-delay: 0.6s; } .animate.delay_07 { -webkit-animation-delay: 0.7s; animation-delay: 0.7s; } .animate.delay_08 { -webkit-animation-delay: 0.8s; animation-delay: 0.8s; } .animate.delay_09 { -webkit-animation-delay: 0.9s; animation-delay: 0.9s; } .animate.delay_10 { -webkit-animation-delay: 1s; animation-delay: 1s; } .animate.delay_11 { -webkit-animation-delay: 1.1s; animation-delay: 1.1s; } .animate.delay_12 { -webkit-animation-delay: 1.2s; animation-delay: 1.2s; } .animate.delay_13 { -webkit-animation-delay: 1.3s; animation-delay: 1.3s; } .animate.delay_14 { -webkit-animation-delay: 1.4s; animation-delay: 1.4s; } .animate.delay_15 { -webkit-animation-delay: 1.5s; animation-delay: 1.5s; } @-webkit-keyframes fade-out { 0% { -webkit-transform: translateZ(0); transform: translateZ(0); opacity: 1; } 100% { -webkit-transform: translateZ(-80px); transform: translateZ(-80px); opacity: 0; } } /** * ---------------------------------------- * animation fade-in-left * ---------------------------------------- */ @-webkit-keyframes fade-in-left { 0% { -webkit-transform: translateX(-50px); transform: translateX(-50px); opacity: 0; } 100% { -webkit-transform: translateX(0); transform: translateX(0); opacity: 1; } } @keyframes fade-in-left { 0% { -webkit-transform: translateX(-50px); transform: translateX(-50px); opacity: 0; } 100% { -webkit-transform: translateX(0); transform: translateX(0); opacity: 1; } } /** * ---------------------------------------- * animation fade-in-fwd * ---------------------------------------- */ @-webkit-keyframes fade-in-fwd { 0% { -webkit-transform: translateZ(-80px); transform: translateZ(-80px); opacity: 0; } 100% { -webkit-transform: translateZ(0); transform: translateZ(0); opacity: 1; } } @keyframes fade-in-fwd { 0% { -webkit-transform: translateZ(-80px); transform: translateZ(-80px); opacity: 0; } 100% { -webkit-transform: translateZ(0); transform: translateZ(0); opacity: 1; } } /** * ---------------------------------------- * animation fade-in-right * ---------------------------------------- */ @-webkit-keyframes fade-in-right { 0% { -webkit-transform: translateX(50px); transform: translateX(50px); opacity: 0; } 100% { -webkit-transform: translateX(0); transform: translateX(0); opacity: 1; } } @keyframes fade-in-right { 0% { -webkit-transform: translateX(50px); transform: translateX(50px); opacity: 0; } 100% { -webkit-transform: translateX(0); transform: translateX(0); opacity: 1; } } /** * ---------------------------------------- * animation swing-in-top-fwd * ---------------------------------------- */ @-webkit-keyframes swing-in-top-fwd { 0% { -webkit-transform: rotateX(-100deg); transform: rotateX(-100deg); -webkit-transform-origin: top; transform-origin: top; opacity: 0; } 100% { -webkit-transform: rotateX(0deg); transform: rotateX(0deg); -webkit-transform-origin: top; transform-origin: top; opacity: 1; } } @keyframes swing-in-top-fwd { 0% { -webkit-transform: rotateX(-100deg); transform: rotateX(-100deg); -webkit-transform-origin: top; transform-origin: top; opacity: 0; } 100% { -webkit-transform: rotateX(0deg); transform: rotateX(0deg); -webkit-transform-origin: top; transform-origin: top; opacity: 1; } } @-webkit-keyframes slide-in-left { 0% { -webkit-transform: translateX(-175px); transform: translateX(-175px); } 100% { -webkit-transform: translateX(0); transform: translateX(0); } } @-webkit-keyframes slide-out-left { 0% { -webkit-transform: translateX(0); transform: translateX(0); } 100% { -webkit-transform: translateX(-175px); transform: translateX(-175px); } } .page-wrapper { width: 100%; margin: 0 auto; } main { scroll-snap-type: y mandatory; height: 100vh; overflow-y: scroll; } @media screen and (min-width: 768px) { main { padding-left: 175px; } } @media screen and (min-width: 920px) { main { padding-left: 280px; } } section { width: 100%; scroll-snap-align: start; scroll-snap-stop: always; height: 100vh; } @media screen and (max-width: 767px) { section { padding-top: 80px; } } section .content { width: 100%; height: 100%; padding: var(--gap); overflow-x: hidden; overflow-y: auto; } section .content .wrapper .title { position: relative; line-height: 1; padding-bottom: var(--gap-s); } section .content .wrapper .title:after { content: ''; position: absolute; bottom: 0; left: 0; width: 100px; height: 2px; background: var(--green); } aside { position: fixed; display: flex; flex-direction: column; width: 175px; height: 100vh; background: var(--dark-darker); } @media screen and (max-width: 767px) { aside { transform: translateX(-175px); z-index: 5; } } @media screen and (min-width: 920px) { aside { width: 280px; } } aside .logo-wrapper { display: flex; align-items: center; width: 100px; height: 100px; margin: var(--gap) auto; font-size: 50px; background: linear-gradient(to bottom, var(--green-lighter) 0%, var(--green) 50%, var(--dark) 50%, var(--dark-darker) 100%); } @media screen and (min-width: 920px) { aside .logo-wrapper { width: 200px; height: 200px; font-size: 100px; } } aside .logo-wrapper .logo { margin: 0 auto; text-shadow: 5px 5px 5px var(--dark-lighter); } .copyright-wrapper { position: absolute; bottom: 0; padding: var(--gap); font-size: 16px; text-align: center; } nav { height: 100%; overflow-y: scroll; margin-bottom: 150px; } .nav-btn { display: block; margin: var(--gap-s) var(--gap); padding: 10px 20px; color: var(--light); text-align: center; border: 2px solid var(--green); } .nav-btn:hover { background: var(--green); color: var(--light); } .nav-btn:before { content: '⇩'; margin-right: 20px; } .nav-link { display: inline-block; padding: var(--gap-s) var(--gap); font-size: 18px; } @media screen and (min-width: 920px) { .nav-link { font-size: 22px; } } .nav-link.active { color: var(--blue-lighter); } @media screen and (max-width: 767px) { .mobile-nav { display: block; } } @media screen and (min-width: 768px) { .mobile-nav { display: none; } } .mobile-nav.open > span { top: 25px; transform: rotate(45deg); } .mobile-nav.open > span::before { top: 0; transform: rotate(0deg); } .mobile-nav.open > span::after { top: 0; transform: rotate(90deg); } .mobile-nav { position: absolute; top: 40px; right: -75px; width: 50px; height: 50px; cursor: pointer; z-index: 1; } .mobile-nav.open { top: 15px; } .mobile-nav > span, .mobile-nav > span::before, .mobile-nav > span::after { display: block; position: absolute; width: 100%; height: 4px; background-color: var(--green); transition-duration: .25s; } .mobile-nav > span::before { content: ''; top: -15px; } .mobile-nav > span::after { content: ''; top: 15px; } #intro .content { position: relative; } #intro .content .intro-content { will-change: auto; } @media screen and (max-width: 767px) { #intro .content .intro-content { position: absolute; bottom: 15%; height: auto; } } @media screen and (min-width: 768px) { #intro .content .intro-content { display: inline-flex; flex-direction: column; height: 100%; justify-content: center; } } #intro .content .intro-content .subtitle { position: relative; padding: 10px 15px; } #intro .content .intro-content .subtitle::after { content: ''; width: 93%; height: 60px; display: block; position: absolute; top: -1px; background: var(--green); z-index: -1; left: 0; } #intro .content .intro-image { position: absolute; right: 0; bottom: 0; width: 100%; height: 100%; opacity: 0.5; filter: drop-shadow(5px 5px 15px var(--dark-darker)); object-fit: contain; object-position: bottom right; will-change: auto; } #intro .content .intro-image__wrapper { position: absolute; right: 0; bottom: 2px; width: 100%; height: 100%; } @media screen and (min-width: 768px) { #intro .content .intro-image__wrapper { max-width: 50%; } } #about .content .wrapper { height: 100%; } @media screen and (min-width: 920px) { .about-wrapper { display: flex; flex-direction: column; max-height: calc(100% - 40px); } } .about-wrapper .row { width: 100%; min-height: 360px; padding-bottom: var(--gap); margin-bottom: 20px; overflow: auto; } @media screen and (min-width: 920px) { .about-wrapper .row { display: flex; overflow: hidden; margin-bottom: 0; height: 100%; max-height: 50%; } } .about-wrapper .row .col { background: var(--dark-lighter); padding: var(--gap); overflow: auto; will-change: auto; } .about-wrapper .row .col.about-history { position: relative; } .about-wrapper .row .col.about-history p:not(:last-child) { padding-bottom: var(--gap-s); margin-bottom: var(--gap-s); border-bottom: 2px solid var(--green); } .about-wrapper .row .col.about-info, .about-wrapper .row .col.about-img { position: relative; background: none; border: 2px solid var(--green); } @media screen and (min-width: 920px) { .about-wrapper .row .col.about-info, .about-wrapper .row .col.about-img { min-width: 340px; } } @media screen and (max-width: 919px) { .about-wrapper .row .col.about-img { display: none; } } .about-wrapper .row .col.about-intro { display: grid; grid-gap: var(--gap) var(--gap); } @media screen and (min-width: 1095px) { .about-wrapper .row .col.about-intro { grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); grid-template-rows: minmax(min-content, max-content); } } .about-wrapper .row .col.about-intro > p:first-child { position: relative; } .about-wrapper .row .col.about-intro > p:first-child:after { content: ''; position: absolute; left: 0; bottom: -20px; display: inline-block; width: 100%; height: 2px; background: var(--green); } @media screen and (min-width: 1390px) { .about-wrapper .row .col.about-intro > p:first-child:after { bottom: unset; left: unset; top: 0; right: -20px; width: 2px; height: 100%; } } @media screen and (max-width: 919px) { .about-wrapper .row .col.about-intro > p:last-child { margin-top: var(--gap-s); } } @media screen and (min-width: 920px) { .about-wrapper .row .col:not(:last-child) { margin-right: var(--gap); } } .about-wrapper .row .col .about-image { position: absolute; top: 0; right: 0; width: auto; height: 100%; max-width: 340px; opacity: 0.5; filter: drop-shadow(5px 5px 15px var(--dark-darker)); object-fit: contain; object-position: bottom right; } @media screen and (max-width: 1009px) { .info-list { height: 100%; display: flex; flex-direction: column; justify-content: center; align-items: center; } } @media screen and (min-width: 1010px) { .info-list { width: 250px; line-height: 1.4; } } .info-list li { padding: var(--gap-s) 0; } .info-list li:first-child { padding-top: 0; } .info-list li:last-child { padding-bottom: 0; } .info-list li:not(:last-child) { border-bottom: 1px solid; } .work-wrapper .work .info { display: flex; } .work-wrapper .work .info .duration { min-width: 50px; text-align: center; display: inline-flex; flex-direction: column; justify-content: center; background: var(--green); } @media screen and (min-width: 500px) { .work-wrapper .work .info .duration { min-width: 100px; height: 80px; } } .work-wrapper .work .info .duration .separator { line-height: 10px; } .work-wrapper .work .info .company { position: relative; display: inline-flex; width: 100%; flex-direction: column; justify-content: center; padding: 10px 110px 10px 20px; background: var(--dark-lighter); } .work-wrapper .work .info .company .office { position: absolute; top: 20px; right: 20px; font-size: 14px; padding: 10px; background: var(--dark); } .work-wrapper .work .description { padding: 20px; margin-left: 50px; border-top: 1px solid var(--green); border-left: 1px solid var(--green); } @media screen and (min-width: 500px) { .work-wrapper .work .description { margin-left: 100px; } } .work-wrapper .work .description summary { position: relative; outline: 0; cursor: pointer; } .work-wrapper .work .description summary::before { content: "+"; position: absolute; font-size: 30px; width: 45px; height: 45px; padding: 10px; line-height: 20px; text-align: center; left: -70px; top: calc(50% - 22px); transform-origin: center; transition: 200ms linear; cursor: pointer; } @media screen and (min-width: 500px) { .work-wrapper .work .description summary::before { left: -95px; } } .work-wrapper .work .description[open] .dots { display: none; } .work-wrapper .work .description[open] summary::before { transform: rotate(45deg); font-size: 32px; } details summary::-webkit-details-marker, details summary::marker { display: none; content: ""; } details[open] summary ~ * { animation: open 0.4s ease-in-out; } @keyframes open { 0% { opacity: 0; height: 0; } 100% { opacity: 1; height: 100%; } } .projects-wrapper { display: grid; grid-gap: var(--gap) var(--gap); grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); } .projects-wrapper .project { will-change: auto; } .projects-wrapper .project-info { position: relative; } .projects-wrapper .project-more { position: absolute; width: 100%; height: 100%; padding: 100px; font-size: 60px; text-align: center; opacity: 0; visibility: hidden; background: rgba(11, 122, 117, 0.5); transition: all 0.4s ease; } .projects-wrapper .project-image img { width: 100%; height: auto; } .projects-wrapper .project-name { position: absolute; bottom: 0; width: 100%; background: rgba(51, 59, 72, 0.5); padding: 10px var(--gap-s); text-shadow: 1px 1px 1px var(--dark-darker); transition: all 0.4s ease; } .projects-wrapper .project > .tags { background: var(--dark-lighter); padding: var(--gap-s); font-size: 12px; transition: all 0.4s ease; } .projects-wrapper .project > .tags .tag { background: var(--dark); padding: 10px; } .projects-wrapper .project > .tags .tag:not(:last-child) { margin-right: 5px; } .projects-wrapper .project:hover { cursor: pointer; } .projects-wrapper .project:hover .project-more { opacity: 1; visibility: visible; transition: all 0.4s ease; } .projects-wrapper .project:hover .project-name { background: rgba(11, 122, 117, 0.5); transition: all 0.4s ease; } .projects-wrapper .project:hover > .tags { background: var(--green); transition: all 0.4s ease; } .projects-modals .project-modal { position: fixed; z-index: -1; left: 0; top: 0; width: 100%; height: 100%; overflow: auto; background: rgba(51, 59, 72, 0.6); opacity: 0; visibility: hidden; transition: all 0.4s ease; } .projects-modals .project-modal.open { opacity: 1; visibility: visible; z-index: 2; } .projects-modals .project-modal__inner { position: relative; background-color: var(--dark); padding: var(--gap); border: 2px solid var(--green); cursor: initial; } @media screen and (max-width: 919px) { .projects-modals .project-modal__inner { width: calc(100% - 100px); height: calc(100% - 100px); margin: 70px auto 5%; transform: translateY(-50%); top: 50%; } } @media screen and (min-width: 920px) { .projects-modals .project-modal__inner { margin: 5% auto; width: 80%; height: 100%; max-height: 80%; max-width: 1720px; } } .projects-modals .project-modal__inner .close-modal { position: absolute; top: 0; right: 0; width: 40px; height: 40px; font-size: 38px; line-height: 34px; text-align: center; background: var(--green); cursor: pointer; } @media screen and (max-width: 919px) { .projects-modals .project-modal__wrapper { height: 100%; overflow: auto; } } @media screen and (min-width: 920px) { .projects-modals .project-modal__wrapper { display: flex; height: 100%; } } @media screen and (min-width: 920px) { .projects-modals .project-modal__image { width: 100%; } } .projects-modals .project-modal__image .project-image, .projects-modals .project-modal__image img { height: auto; } @media screen and (min-width: 920px) { .projects-modals .project-modal__image .project-image, .projects-modals .project-modal__image img { width: 100%; height: 100%; object-fit: cover; object-position: top; } } .projects-modals .project-modal__content { position: relative; width: 100%; overflow: auto; } @media screen and (min-width: 920px) { .projects-modals .project-modal__content { margin-left: var(--gap); margin-bottom: 60px; } } .projects-modals .project-modal__content .green-tag { background: #0B7A75; padding: 2px 5px; font-size: 12px; } .projects-modals .project-modal__content > p { margin-top: var(--gap-s); } .projects-modals .project-modal__content + .tags { width: 100%; font-size: 12px; transition: all 0.4s ease; } @media screen and (min-width: 920px) { .projects-modals .project-modal__content + .tags { position: absolute; bottom: var(--gap); right: var(--gap); max-width: calc(50% - 30px); } } @media screen and (min-width: 1010px) { .projects-modals .project-modal__content + .tags { max-width: calc(50% - 60px); } } .projects-modals .project-modal__content + .tags .tag { display: inline-block; background: var(--dark-lighter); padding: 5px 10px; } .projects-modals .project-modal__content + .tags .tag:not(:last-child) { margin-right: 5px; } .projects-modals .project-modal__arrow { position: absolute; top: 50%; width: 40px; height: 40px; background: var(--green); z-index: 2; cursor: pointer; transform: translateY(-50%); } .projects-modals .project-modal__arrow:before { display: inline-block; width: 40px; height: 40px; color: var(--light); font-size: 32px; font-weight: bold; line-height: 36px; text-align: center; } .projects-modals .project-modal__arrow.prev { left: -40px; } .projects-modals .project-modal__arrow.prev:before { content: '<'; } .projects-modals .project-modal__arrow.next { right: -40px; } .projects-modals .project-modal__arrow.next:before { content: '>'; } .projects-modals .project-modal:first-child .project-modal__arrow.prev { display: none; } .projects-modals .project-modal:last-child .project-modal__arrow.next { display: none; } #skills .content .wrapper { height: 100%; } .skills-wrapper { display: flex; flex-direction: column; max-height: calc(100% - 80px); } @media screen and (max-width: 1094px) { .skills-wrapper .skills.technical { display: flex; align-items: center; min-height: 300px; overflow-x: auto; } } @media screen and (min-width: 1095px) { .skills-wrapper .skills.technical { display: grid; grid-gap: 5px; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); } } @media screen and (min-width: 1445px) { .skills-wrapper .skills.technical { grid-gap: var(--gap) var(--gap); } } .skills-wrapper .skills.technical .skill { flex: 1; display: flex; flex-direction: column; align-items: center; padding: var(--gap-s); border: 2px solid var(--green); transition: all 0.4s ease; } @media screen and (max-width: 1094px) { .skills-wrapper .skills.technical .skill { flex: 1; min-width: 140px; min-height: 230px; justify-content: center; } } .skills-wrapper .skills.technical .skill-logo { border-radius: 50%; } .skills-wrapper .skills.technical .skill-name { font-size: 20px; text-align: center; margin: 0 auto; } .skills-wrapper .skills.technical .skill:last-child .skill-name { font-size: var(--font-size__base); } .skills-wrapper .other-skills { margin-top: var(--gap); } @media screen and (min-width: 768px) { .skills-wrapper .other-skills { display: flex; overflow: hidden; } } .skills-wrapper .other-skills .skills { width: 100%; background: var(--dark-lighter); padding: var(--gap); overflow: auto; } @media screen and (min-width: 768px) { .skills-wrapper .other-skills .skills.non-technical { max-width: 340px; margin-right: var(--gap); } } .skills-wrapper .other-skills .skills.responsibilities h4 { margin-bottom: var(--gap-s); } .skills-wrapper .other-skills .skills.responsibilities ol li { padding-left: var(--gap-s); margin-left: var(--gap-s); } .skills-wrapper .other-skills .skills.responsibilities ol li:not(:last-child) { margin-bottom: var(--gap-s); } .skills-wrapper .other-skills .skills.responsibilities ol li::marker { content: '☉'; color: var(--green-lighter); } /*# sourceMappingURL=style.css.map */