-
-
I'm Mehmet;
-
Software Development Specialist
-
Frontend-focused, 10+ years in web, experienced in backend and full stack work.
-
I design, build, and optimize digital interfaces, apps, and infrastructures.
-
-
-
-
-
-
-
-
@@ -196,13 +237,14 @@ onMounted(() => {
display: flex;
flex-direction: column;
justify-content: center;
+ contain: content; /* Improve paint performance */
.hero-bg {
position: absolute;
z-index: -1;
left: 50%;
top: 0;
- transform: translateX(-50%) translateY(10%);
+ transform: translateX(-50%) translateY(00%);
width: 65%;
max-width: 1200px;
height: auto;
@@ -225,6 +267,7 @@ onMounted(() => {
transform: translateY(0);
transition: all 0.4s cubic-bezier(0.38, 0.98, 0.6, 0.9);
transition-delay: 0.3s;
+ will-change: transform, opacity; /* Optimize for animations */
}
p {
@@ -240,6 +283,7 @@ onMounted(() => {
transform: translateY(0);
transition: all 0.4s cubic-bezier(0.38, 0.98, 0.6, 0.9);
transition-delay: 0.55s;
+ will-change: transform, opacity; /* Optimize for animations */
u {
text-decoration: none;
@@ -256,6 +300,7 @@ onMounted(() => {
transform: translateY(0);
transition: all 0.4s cubic-bezier(0.38, 0.98, 0.6, 0.9);
transition-delay: 0.5s;
+ will-change: transform, opacity; /* Optimize for animations */
}
}
@@ -287,6 +332,7 @@ onMounted(() => {
transform: translateY(0px);
transition: all 0.4s cubic-bezier(0.38, 0.98, 0.6, 0.9);
transition-delay: 0.6s;
+ will-change: transform, opacity; /* Optimize for animations */
}
.page-transition--on #ctaButtons {
@@ -326,15 +372,17 @@ onMounted(() => {
border-radius: 2px;
opacity: 0.8;
animation: scrollDown 1s cubic-bezier(0.25, 1.07, 0.6, 0.9) infinite;
+ will-change: transform, opacity; /* Optimize for animations */
}
}
- em {
+ span {
font-family: 'Inter';
- font-size: 16px;
+ font-size: 1.25rem;
font-weight: 400;
color: colors.$textGray;
font-style: normal;
+ margin-top: 0 !important;
}
}
@@ -411,7 +459,6 @@ onMounted(() => {
flex-direction: column-reverse;
align-items: center;
justify-content: center;
- margin-bottom: 130px;
figure {
position: absolute;
@@ -471,4 +518,55 @@ onMounted(() => {
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.5);
}
}
+
+/* Optimized boxes with reduced CSS complexity */
+.boxes {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
+ display: grid;
+ grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
+ grid-auto-rows: 160px;
+ opacity: 0;
+ animation: fadeIn 0.5s cubic-bezier(0.2, 0.57, 0.76, 0.79) forwards;
+ animation-delay: 0.2s;
+ box-sizing: border-box;
+ z-index: -1;
+ pointer-events: none; /* Ensure doesn't interfere with interactions */
+ contain: layout style paint; /* Improve performance */
+
+ &:after {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ box-shadow: inset 10px 0px 80px 80px colors.$navyBlue;
+ z-index: 2;
+ }
+
+ > div {
+ border-right: 1px solid rgba(255, 255, 255, 0.04);
+ border-bottom: 1px solid rgba(255, 255, 255, 0.04);
+ box-sizing: border-box;
+ transform: translateZ(0); /* Hardware acceleration */
+
+ &:nth-child(3n) {
+ border-right-width: 1px;
+ }
+ }
+}
+
+@keyframes fadeIn {
+ from {
+ opacity: 0;
+ }
+ to {
+ opacity: 0.8; /* Slightly less opaque for better contrast */
+ }
+}
diff --git a/pages/index.vue b/pages/index.vue
index 9f91d1c..1a568e5 100644
--- a/pages/index.vue
+++ b/pages/index.vue
@@ -89,7 +89,8 @@ onMounted(() => {
#secondary {
padding-top: 10rem;
background: url(~/assets/imgs/Frame-2.svg) repeat-x center 350px;
- padding-bottom: 8rem;
+ padding-bottom: 3rem;
+ background-size: 100% auto;
transition: all 0.7s cubic-bezier(0.25, 1.07, 0.6, 0.9);
margin-bottom: -6rem;
position: relative;
@@ -107,6 +108,10 @@ onMounted(() => {
z-index: 1;
}
+ .grid {
+ padding: 3rem 0;
+ }
+
> * {
position: relative;
z-index: 2;