111 lines
1.9 KiB
SCSS
111 lines
1.9 KiB
SCSS
@use 'variables' as *;
|
|
|
|
// Button base mixin
|
|
@mixin button-base {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-weight: 500;
|
|
text-decoration: none;
|
|
border: none;
|
|
cursor: pointer;
|
|
transition: all 0.3s ease;
|
|
border-radius: $border-radius-sm;
|
|
|
|
&:focus {
|
|
outline: none;
|
|
box-shadow: var(--box-shadow-sm);
|
|
}
|
|
}
|
|
|
|
// Card hover effect mixin
|
|
@mixin card-hover {
|
|
transition: all 0.3s ease;
|
|
|
|
&:hover {
|
|
transform: translateY(-2px);
|
|
box-shadow: var(--box-shadow-lg);
|
|
}
|
|
}
|
|
|
|
// Gradient text mixin
|
|
@mixin gradient-text($gradient) {
|
|
background: $gradient;
|
|
background-clip: text;
|
|
-webkit-background-clip: text;
|
|
color: transparent;
|
|
-webkit-text-fill-color: transparent;
|
|
}
|
|
|
|
// Flex center mixin
|
|
@mixin flex-center {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
}
|
|
|
|
// Aspect ratio mixin
|
|
@mixin aspect-ratio($ratio: 1) {
|
|
aspect-ratio: $ratio;
|
|
|
|
@supports not (aspect-ratio: 1) {
|
|
&::before {
|
|
content: '';
|
|
float: left;
|
|
padding-top: calc(100% / #{$ratio});
|
|
}
|
|
|
|
&::after {
|
|
content: '';
|
|
display: table;
|
|
clear: both;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Responsive breakpoint mixins
|
|
@mixin mobile-only {
|
|
@media (max-width: $mobile-breakpoint) {
|
|
@content;
|
|
}
|
|
}
|
|
|
|
@mixin desktop-only {
|
|
@media (min-width: $desktop-breakpoint) {
|
|
@content;
|
|
}
|
|
}
|
|
|
|
// Common section patterns
|
|
@mixin section-container {
|
|
max-width: 80rem;
|
|
margin: 0 auto;
|
|
padding: 0 1rem;
|
|
|
|
@include desktop-only {
|
|
padding: 0 1.5rem;
|
|
}
|
|
}
|
|
|
|
@mixin section-header {
|
|
text-align: center;
|
|
margin-bottom: 4rem;
|
|
}
|
|
|
|
@mixin section-title {
|
|
font-size: 1.875rem;
|
|
font-weight: bold;
|
|
margin-bottom: 1rem;
|
|
color: var(--color-text);
|
|
|
|
@include desktop-only {
|
|
font-size: 2.25rem;
|
|
}
|
|
}
|
|
|
|
@mixin section-subtitle {
|
|
font-size: 1.25rem;
|
|
color: var(--color-text-muted);
|
|
max-width: 48rem;
|
|
margin: 0 auto;
|
|
} |