glassheart-ui-core
Version:
Core CSS styles and utilities for GlassHeartUI
188 lines (165 loc) • 3.76 kB
CSS
/* Performance optimizations for GlassHeartUI */
/* GPU acceleration for animations */
.gh-glass,
.gh-btn,
.gh-input,
.gh-card {
transform: translateZ(0);
will-change: transform, opacity;
}
/* Optimize backdrop-filter for better performance */
.gh-glass {
contain: layout style paint;
}
/* Reduce repaints during animations */
.gh-liquid-flow::before,
.gh-btn-liquid::before,
.gh-input-liquid::before {
contain: layout style paint;
transform: translateZ(0);
}
/* Optimize hover effects */
.gh-glass:hover,
.gh-btn:hover,
.gh-input:focus {
transform: translateZ(0) translateY(-2px);
}
/* Reduce motion for better performance on low-end devices */
@media (prefers-reduced-motion: reduce) {
.gh-glass,
.gh-btn,
.gh-input,
.gh-card {
will-change: auto;
transform: none;
}
.gh-glass:hover,
.gh-btn:hover,
.gh-input:focus {
transform: none;
}
.gh-liquid-flow::before,
.gh-btn-liquid::before,
.gh-input-liquid::before {
animation: none;
}
}
/* Optimize for mobile devices */
@media (max-width: 768px) {
.gh-glass {
--gh-glass-blur: calc(var(--gh-glass-blur) * 0.8);
}
.gh-card-interactive:hover {
transform: translateY(-1px);
}
}
/* Optimize for high DPI displays */
@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
.gh-glass {
-webkit-backdrop-filter: blur(var(--gh-glass-blur)) saturate(var(--gh-glass-saturate));
backdrop-filter: blur(var(--gh-glass-blur)) saturate(var(--gh-glass-saturate));
}
}
/* Optimize for Safari */
@supports (-webkit-backdrop-filter: blur(1px)) {
.gh-glass {
-webkit-backdrop-filter: blur(var(--gh-glass-blur)) saturate(var(--gh-glass-saturate));
}
}
/* Fallback for browsers without backdrop-filter support */
@supports not (backdrop-filter: blur(1px)) {
.gh-glass {
background: rgba(255, 255, 255, calc(var(--gh-glass-opacity) * 2));
border: 1px solid rgba(255, 255, 255, 0.3);
}
[data-theme="dark"] .gh-glass {
background: rgba(0, 0, 0, calc(var(--gh-glass-opacity) * 2));
border: 1px solid rgba(255, 255, 255, 0.1);
}
}
/* Optimize animation performance */
.gh-animate-in,
.gh-animate-out,
.gh-animate-slide-up,
.gh-animate-slide-down,
.gh-animate-scale {
animation-fill-mode: both;
animation-timing-function: var(--gh-animation-timing);
}
/* Optimize liquid flow animation */
@keyframes gh-liquid-flow {
0% {
transform: translateX(-100%) translateY(-100%) rotate(45deg) translateZ(0);
}
100% {
transform: translateX(100%) translateY(100%) rotate(45deg) translateZ(0);
}
}
/* Optimize shimmer animation */
@keyframes gh-shimmer {
0% {
transform: translateX(-100%) translateZ(0);
}
100% {
transform: translateX(100%) translateZ(0);
}
}
/* Optimize spin animation */
@keyframes gh-spin {
to {
transform: rotate(360deg) translateZ(0);
}
}
/* Optimize fade animations */
@keyframes gh-fade-in {
from {
opacity: 0;
transform: translateZ(0);
}
to {
opacity: 1;
transform: translateZ(0);
}
}
@keyframes gh-fade-out {
from {
opacity: 1;
transform: translateZ(0);
}
to {
opacity: 0;
transform: translateZ(0);
}
}
/* Optimize slide animations */
@keyframes gh-slide-up {
from {
opacity: 0;
transform: translateY(20px) translateZ(0);
}
to {
opacity: 1;
transform: translateY(0) translateZ(0);
}
}
@keyframes gh-slide-down {
from {
opacity: 0;
transform: translateY(-20px) translateZ(0);
}
to {
opacity: 1;
transform: translateY(0) translateZ(0);
}
}
/* Optimize scale animation */
@keyframes gh-scale {
from {
opacity: 0;
transform: scale(0.95) translateZ(0);
}
to {
opacity: 1;
transform: scale(1) translateZ(0);
}
}