Holded_Blog / styles /glass.css
Shinhati2023's picture
Create glass.css
313cf07 verified
/* ============================================================
GLASSGRID — GLASSMORPHISM UTILITY SYSTEM
Reusable glass surface classes.
All visual values come from tokens.
Structure-free — layout is defined in layout.css.
============================================================ */
/* ── Base Glass Mixin Pattern ── */
.glass {
background: var(--color-glass-fill);
backdrop-filter: blur(var(--glass-blur)) saturate(var(--glass-saturation));
-webkit-backdrop-filter: blur(var(--glass-blur)) saturate(var(--glass-saturation));
border: 1px solid var(--color-glass-border);
box-shadow: var(--shadow-md);
}
.glass-sm {
background: var(--color-glass-fill);
backdrop-filter: blur(var(--glass-blur-sm)) saturate(var(--glass-saturation));
-webkit-backdrop-filter: blur(var(--glass-blur-sm)) saturate(var(--glass-saturation));
border: 1px solid var(--color-glass-border);
box-shadow: var(--shadow-sm);
}
.glass-md {
background: var(--color-glass-fill-md);
backdrop-filter: blur(var(--glass-blur)) saturate(var(--glass-saturation));
-webkit-backdrop-filter: blur(var(--glass-blur)) saturate(var(--glass-saturation));
border: 1px solid var(--color-glass-border-md);
box-shadow: var(--shadow-lg);
}
.glass-lg {
background: var(--color-glass-fill-lg);
backdrop-filter: blur(var(--blur-xl)) saturate(var(--glass-saturation));
-webkit-backdrop-filter: blur(var(--blur-xl)) saturate(var(--glass-saturation));
border: 1px solid var(--color-glass-border-md);
box-shadow: var(--shadow-xl);
}
/* ── Glass with Highlight (top edge) ── */
.glass-elevated {
background: var(--color-glass-fill-md);
backdrop-filter: blur(var(--glass-blur)) saturate(var(--glass-saturation));
-webkit-backdrop-filter: blur(var(--glass-blur)) saturate(var(--glass-saturation));
border: 1px solid var(--color-glass-border-md);
box-shadow: var(--shadow-lg),
inset 0 1px 0 var(--color-glass-highlight);
}
/* ── Glass Accent Border ── */
.glass-accent {
background: var(--color-glass-fill);
backdrop-filter: blur(var(--glass-blur)) saturate(var(--glass-saturation));
-webkit-backdrop-filter: blur(var(--glass-blur)) saturate(var(--glass-saturation));
border: 1px solid var(--color-border-accent);
box-shadow: var(--shadow-md), var(--shadow-glow);
}
/* ── Gradient Glass ── */
.glass-gradient {
background: linear-gradient(
135deg,
var(--color-glass-fill-md),
var(--color-glass-fill)
);
backdrop-filter: blur(var(--glass-blur)) saturate(var(--glass-saturation));
-webkit-backdrop-filter: blur(var(--glass-blur)) saturate(var(--glass-saturation));
border: 1px solid var(--color-glass-border);
box-shadow: var(--shadow-lg);
}
/* ── Navigation Glass ── */
.glass-nav {
background: var(--navbar-bg);
backdrop-filter: blur(var(--navbar-blur)) saturate(var(--glass-saturation));
-webkit-backdrop-filter: blur(var(--navbar-blur)) saturate(var(--glass-saturation));
border-bottom: 1px solid var(--color-glass-border);
}
/* ── Glass Bottom Bar ── */
.glass-bottom {
background: var(--navbar-bg);
backdrop-filter: blur(var(--navbar-blur)) saturate(var(--glass-saturation));
-webkit-backdrop-filter: blur(var(--navbar-blur)) saturate(var(--glass-saturation));
border-top: 1px solid var(--color-glass-border);
}
/* ── Glass Modal ── */
.glass-modal {
background: rgba(10, 10, 20, 0.85);
backdrop-filter: blur(var(--blur-2xl)) saturate(var(--glass-saturation));
-webkit-backdrop-filter: blur(var(--blur-2xl)) saturate(var(--glass-saturation));
border: 1px solid var(--color-glass-border-md);
box-shadow: var(--shadow-xl),
inset 0 1px 0 var(--color-glass-highlight);
}
/* ── Glass Input ── */
.glass-input {
background: var(--color-glass-fill);
backdrop-filter: blur(var(--blur-sm));
-webkit-backdrop-filter: blur(var(--blur-sm));
border: 1px solid var(--color-glass-border);
transition: border-color var(--duration-fast) var(--ease-out),
background var(--duration-fast) var(--ease-out),
box-shadow var(--duration-fast) var(--ease-out);
}
.glass-input:focus {
background: var(--color-glass-fill-md);
border-color: var(--color-accent-primary);
box-shadow: 0 0 0 3px rgba(168, 85, 247, 0.15);
}
.glass-input::placeholder {
color: var(--color-text-muted);
}
/* ── Radius Helpers ── */
.r-sm { border-radius: var(--radius-sm); }
.r-md { border-radius: var(--radius-md); }
.r-lg { border-radius: var(--radius-lg); }
.r-xl { border-radius: var(--radius-xl); }
.r-2xl { border-radius: var(--radius-2xl); }
.r-full { border-radius: var(--radius-full); }
/* ── Glow Helpers ── */
.glow { box-shadow: var(--shadow-glow); }
.glow-accent { box-shadow: var(--shadow-glow-accent); }
/* ── Gradient Border (using pseudo) ── */
.gradient-border {
position: relative;
}
.gradient-border::before {
content: '';
position: absolute;
inset: -1px;
border-radius: inherit;
background: var(--color-accent-gradient-full);
z-index: -1;
opacity: 0.5;
}