Add contact and about pages with shared CTA buttons.

Wire forms to the Meshkee contact API, tighten page-title spacing, and polish outline button hover so it fades cleanly.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Alireza Hassani
2026-09-18 17:54:34 +03:30
co-authored by Cursor
parent b0ba7b1de8
commit e6404eaaec
17 changed files with 880 additions and 97 deletions
+112 -5
View File
@@ -117,20 +117,127 @@ h4 {
}
/* Gradient hover utilities */
/* Simple fade for primary CTAs */
.btn-primary {
position: relative;
isolation: isolate;
background: var(--ink);
color: var(--surface);
transition:
background 0.25s ease,
color 0.25s ease,
box-shadow 0.25s ease;
cursor: pointer;
transition: color 0.3s ease;
}
.btn-primary:hover {
.btn-primary::before {
content: "";
position: absolute;
inset: 0;
z-index: -1;
border-radius: inherit;
background: var(--brand-gradient);
opacity: 0;
transition: opacity 0.3s ease;
}
.btn-primary:hover:not(:disabled) {
color: #fff;
}
.btn-primary:hover:not(:disabled)::before {
opacity: 1;
}
.btn-primary:disabled {
cursor: not-allowed;
}
/* Outline CTA: opacity-only fades (no blink on mouse-out) */
.btn-outline {
position: relative;
display: inline-flex;
align-items: center;
justify-content: center;
isolation: isolate;
border: 1px solid transparent;
background-color: #fff;
color: var(--ink-soft);
cursor: pointer;
}
.btn-outline::before,
.btn-outline::after {
content: "";
position: absolute;
inset: 0;
z-index: 0;
border-radius: inherit;
padding: 1px;
pointer-events: none;
transition: opacity 0.3s ease;
-webkit-mask:
linear-gradient(#fff 0 0) content-box,
linear-gradient(#fff 0 0);
mask:
linear-gradient(#fff 0 0) content-box,
linear-gradient(#fff 0 0);
-webkit-mask-composite: xor;
mask-composite: exclude;
}
.btn-outline::after {
background: var(--line);
opacity: 1;
}
.btn-outline::before {
background: var(--brand-gradient);
opacity: 0;
}
.btn-outline:hover::after {
opacity: 0;
}
.btn-outline:hover::before {
opacity: 1;
}
.btn-outline-label {
position: relative;
z-index: 1;
display: inline-flex;
align-items: center;
gap: 0.375rem;
}
.btn-outline-label-base {
transition: opacity 0.3s ease;
}
.btn-outline-label-grad {
position: absolute;
inset: 0;
display: inline-flex;
align-items: center;
justify-content: inherit;
gap: 0.375rem;
background-image: var(--brand-gradient);
background-clip: text;
-webkit-background-clip: text;
color: transparent;
-webkit-text-fill-color: transparent;
opacity: 0;
pointer-events: none;
transition: opacity 0.3s ease;
}
.btn-outline:hover .btn-outline-label-base {
opacity: 0;
}
.btn-outline:hover .btn-outline-label-grad {
opacity: 1;
}
.link-hover {
display: inline-block;
width: fit-content;