UNPKG

@casoon/tailwindcss-glass

Version:

Pure glassmorphism effects and glass cards for Tailwind CSS v4 - backdrop-filter utilities, glass UI components, and glass animations

1,657 lines (1,453 loc) 51.7 kB
/*! * Casoon Glass - Complete Glassmorphism System for Tailwind v4 * Version: 0.9.0 — COMPLETE CONSOLIDATED GLASS SYSTEM * * SYSTEMATICALLY CONSOLIDATED FROM: * * === GLASS PACKAGE (9 files) === * - src/index.css (root) * - src/styles/base/tokens.css * - src/styles/base/glass-core.css * - src/styles/base/fallbacks.css * - src/styles/utilities/variants.css * - src/styles/utilities/addons.css * - src/styles/utilities/responsive.css * - src/styles/components/ui-elements.css * - src/styles/effects/pro-effects.css * * === CARDS PACKAGE (7 files) === * - src/index.css (root) * - src/styles/base/tokens.css * - src/styles/presets/card-feature.css * - src/styles/presets/card-product.css * - src/styles/presets/card-product-clean.css * - src/styles/presets/card-pricing.css * - src/styles/presets/card-testimonial.css * * === NAVIGATION PACKAGE (13 files) === * - src/index.css (root) * - src/styles/index.css * - src/styles/base/tokens.css * - src/styles/variants.css * - src/styles/utilities/navigation.css * - src/styles/utilities/accessibility.css * - src/styles/components/nav.css * - src/styles/components/navbar.css * - src/styles/components/nav-tabs.css * - src/styles/components/nav-pills.css * - src/styles/components/breadcrumbs.css * - src/styles/components/drawer.css * - src/styles/effects/animations.css * * TOTAL: 29 CSS FILES → Pure Tailwind v4 (179 classes + 88 @utility) * * Usage: @import "@casoon/tailwindcss-glass/index.css"; */ /* Note: @import "tailwindcss"; should be added by the consumer */ /* ========================================================= CONSOLIDATED DESIGN TOKENS & THEME All tokens from glass, cards, navigation packages merged ========================================================= */ @theme { /* === GLASS COLOR SYSTEM === */ --cs-glass-white: #ffffff; --cs-glass-black: #000000; --cs-glass-blue: #3b82f6; --cs-glass-purple: #9333ea; --cs-glass-green: #22c55e; --cs-glass-pink: #ec4899; --cs-glass-amber: #f59e0b; /* Glass background opacity tokens - Complete range */ --cs-glass-bg-xs: rgba(255,255,255,0.02); --cs-glass-bg-sm: rgba(255,255,255,0.07); --cs-glass-bg-light: rgba(255,255,255,0.10); --cs-glass-bg-weak: rgba(255,255,255,0.05); --cs-glass-bg-md: rgba(255,255,255,0.12); --cs-glass-bg-medium: rgba(255,255,255,0.15); --cs-glass-bg-lg: rgba(255,255,255,0.18); --cs-glass-bg-strong: rgba(255,255,255,0.20); --cs-glass-bg-xl: rgba(255,255,255,0.25); --cs-glass-bg-2xl: rgba(255,255,255,0.35); --cs-glass-bg-3xl: rgba(255,255,255,0.45); --cs-glass-bg-4xl: rgba(255,255,255,0.60); --cs-glass-bg-5xl: rgba(255,255,255,0.75); /* Dark glass backgrounds - Complete range */ --cs-glass-bg-dark: rgba(0,0,0,0.10); --cs-glass-bg-dark-xs: rgba(0,0,0,0.02); --cs-glass-bg-dark-sm: rgba(0,0,0,0.07); --cs-glass-bg-dark-md: rgba(0,0,0,0.12); --cs-glass-bg-dark-lg: rgba(0,0,0,0.18); --cs-glass-bg-dark-strong: rgba(0,0,0,0.20); --cs-glass-bg-dark-xl: rgba(0,0,0,0.25); --cs-glass-bg-dark-2xl: rgba(0,0,0,0.35); --cs-glass-bg-dark-3xl: rgba(0,0,0,0.45); --cs-glass-bg-dark-4xl: rgba(0,0,0,0.60); --cs-glass-bg-dark-5xl: rgba(0,0,0,0.75); /* Colored glass backgrounds */ --cs-glass-bg-blue: rgba(59,130,246,0.10); --cs-glass-bg-purple: rgba(147,51,234,0.10); --cs-glass-bg-green: rgba(34,197,94,0.10); --cs-glass-bg-pink: rgba(236,72,153,0.10); --cs-glass-bg-amber: rgba(245,158,11,0.10); /* Glass border opacity tokens - Complete range */ --cs-glass-border-xs: rgba(255,255,255,0.05); --cs-glass-border-sm: rgba(255,255,255,0.08); --cs-glass-border-light: rgba(255,255,255,0.10); --cs-glass-border-md: rgba(255,255,255,0.15); --cs-glass-border-medium: rgba(255,255,255,0.20); --cs-glass-border-lg: rgba(255,255,255,0.25); --cs-glass-border-strong: rgba(255,255,255,0.30); --cs-glass-border-xl: rgba(255,255,255,0.40); --cs-glass-border-2xl: rgba(255,255,255,0.50); --cs-glass-border-3xl: rgba(255,255,255,0.65); /* Colored glass borders */ --cs-glass-border-blue: rgba(59,130,246,0.20); --cs-glass-border-purple: rgba(147,51,234,0.20); --cs-glass-border-green: rgba(34,197,94,0.20); --cs-glass-border-pink: rgba(236,72,153,0.20); --cs-glass-border-amber: rgba(245,158,11,0.20); /* Glass effects tokens */ --cs-glass-blur-sm: blur(8px); --cs-glass-blur: blur(16px); --cs-glass-blur-lg: blur(24px); --cs-glass-blur-xl: blur(32px); --cs-glass-radius-sm: .25rem; --cs-glass-radius: .5rem; --cs-glass-radius-lg: .75rem; --cs-glass-radius-xl: 1rem; --cs-glass-radius-2xl: 1.5rem; --cs-glass-radius-3xl: 2rem; /* Glass shadow tokens */ --cs-glass-shadow-light: rgba(0,0,0,0.05); --cs-glass-shadow-medium: rgba(0,0,0,0.10); --cs-glass-shadow-strong: rgba(0,0,0,0.15); --cs-glass-shadow-xl: rgba(0,0,0,0.20); --cs-glass-shadow-sm-def: 0 1px 2px var(--cs-glass-shadow-light); --cs-glass-shadow-def: 0 8px 32px var(--cs-glass-shadow-medium); --cs-glass-shadow-lg-def: 0 20px 40px var(--cs-glass-shadow-strong); --cs-glass-shadow-xl-def: 0 25px 50px var(--cs-glass-shadow-xl); /* Glass misc tokens */ --cs-glass-transition: .3s; --cs-glass-tooltip-bg: rgba(0,0,0,0.80); --cs-glass-bg-hover: rgba(255,255,255,0.15); --cs-glass-bg-light-hover: rgba(255,255,255,0.25); --cs-glass-bg-contrast: rgba(255,255,255,0.20); --cs-glass-bg-dark-contrast: rgba(0,0,0,0.20); --cs-glass-bg-fallback: rgba(255,255,255,0.25); --cs-glass-bg-dark-fallback: rgba(0,0,0,0.25); --cs-glass-bg-blue-fallback: rgba(59,130,246,0.20); --cs-glass-bg-purple-fallback: rgba(147,51,234,0.20); --cs-glass-bg-green-fallback: rgba(34,197,94,0.20); --cs-glass-bg-pink-fallback: rgba(236,72,153,0.20); --cs-glass-bg-amber-fallback: rgba(245,158,11,0.20); --cs-glass-focus-ring: rgba(59,130,246,0.50); --cs-glass-backdrop-filter-extra: none; /* Dark mode card adjustments */ @media (prefers-color-scheme: dark) { --cs-card-bg: color-mix(in srgb, #ffffff 5%, #1a1a1a); --cs-card-shadow: 0 4px 6px rgba(0, 0, 0, 0.25); --cs-card-shadow-hover: 0 10px 25px rgba(0, 0, 0, 0.35); } /* === CARD SYSTEM TOKENS === */ /* v0.8.x Compatible Card System */ --cs-card-border-radius: 1rem; --cs-card-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); --cs-card-shadow-hover: 0 10px 25px rgba(0, 0, 0, 0.15); --cs-card-bg: #ffffff; --cs-card-padding: 1.5rem; --cs-card-spacing: 1rem; /* Extended Card System for compatibility */ --cs-card-border: var(--cs-border, #e5e7eb); --cs-card-radius: var(--cs-card-border-radius); --cs-card-text: var(--cs-text, #111827); --cs-card-text-muted: var(--cs-text-muted, #6b7280); --cs-card-brand: var(--cs-brand, #3b82f6); --cs-card-brand-ink: var(--cs-brand-ink, #ffffff); --cs-card-transition: var(--cs-transition, 0.3s ease); /* Card spacing system */ --cs-card-space-xs: 0.25rem; --cs-card-space-sm: 0.375rem; --cs-card-space-md: 0.75rem; --cs-card-space-lg: 1rem; --cs-card-space-xl: 1.5rem; --cs-card-space-2xl: 2rem; --cs-card-hover-lift: -4px; /* Card typography */ --cs-card-font-size-xs: 0.75rem; --cs-card-font-size-sm: 0.875rem; --cs-card-font-size: 1rem; --cs-card-font-size-lg: 1.125rem; --cs-card-font-size-xl: 1.25rem; --cs-card-font-size-2xl: 1.5rem; --cs-card-line-height: 1.6; /* Card shadows expanded */ --cs-card-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05); --cs-card-shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1); --cs-card-shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1); --cs-card-shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.1); /* Card radius system */ --cs-card-radius-sm: 0.375rem; --cs-card-radius-md: 0.5rem; --cs-card-radius-lg: 0.75rem; --cs-card-radius-xl: 1rem; /* === NAVIGATION TOKENS === */ --cs-nav-bg: var(--cs-glass-bg-light); --cs-nav-border: var(--cs-glass-border-medium); --cs-nav-blur: var(--cs-glass-blur); --cs-nav-text: var(--cs-text, #374151); --cs-nav-text-muted: var(--cs-text-muted, #9ca3af); --cs-nav-text-active: var(--cs-brand, #3b82f6); --cs-nav-bg-hover: var(--cs-glass-bg-hover); --cs-nav-bg-active: var(--cs-glass-bg-medium); --cs-nav-transition: var(--cs-transition, 0.2s ease); --cs-nav-shadow: var(--cs-glass-shadow-def); /* Navigation spacing */ --cs-nav-space-xs: 0.25rem; --cs-nav-space-sm: 0.5rem; --cs-nav-space-md: 0.75rem; --cs-nav-space-lg: 1rem; --cs-nav-space-xl: 1.5rem; /* Navigation z-index */ --cs-nav-z-dropdown: 30; --cs-nav-z-modal: 40; --cs-nav-z-overlay: 50; --cs-nav-z-drawer: 60; /* Navigation typography */ --cs-nav-font-size-sm: 0.875rem; --cs-nav-font-size: 1rem; --cs-nav-font-size-lg: 1.125rem; /* === FORMS SYSTEM TOKENS === */ /* v0.8.x Compatible Form System */ --cs-form-border-radius: 0.5rem; --cs-form-border-color: color-mix(in srgb, currentColor 20%, transparent); --cs-form-focus-color: #3b82f6; --cs-form-error-color: #ef4444; --cs-form-success-color: #10b981; --cs-form-spacing: 1rem; --cs-form-transition: all 200ms ease; --cs-form-padding: 0.75rem 1rem; --cs-form-focus-shadow: 0 0 0 3px; } /* ========================================================= CORE GLASS UTILITIES Complete glass effect system with all variants ========================================================= */ /* Base glass effects with complete backdrop-filter support */ @utility cs-glass { background: var(--cs-glass-bg-light); border: 1px solid var(--cs-glass-border-medium); backdrop-filter: var(--cs-glass-blur) var(--cs-glass-backdrop-filter-extra); -webkit-backdrop-filter: var(--cs-glass-blur) var(--cs-glass-backdrop-filter-extra); background-clip: padding-box; } @utility cs-glass-dark { background: var(--cs-glass-bg-dark); border: 1px solid var(--cs-glass-border-light); backdrop-filter: var(--cs-glass-blur) var(--cs-glass-backdrop-filter-extra); -webkit-backdrop-filter: var(--cs-glass-blur) var(--cs-glass-backdrop-filter-extra); background-clip: padding-box; } /* Light glass opacity scale - Complete range */ @utility cs-glass-xs { background: var(--cs-glass-bg-xs); border: 1px solid var(--cs-glass-border-xs); backdrop-filter: var(--cs-glass-blur-sm) var(--cs-glass-backdrop-filter-extra); -webkit-backdrop-filter: var(--cs-glass-blur-sm) var(--cs-glass-backdrop-filter-extra); background-clip: padding-box; } @utility cs-glass-sm { background: var(--cs-glass-bg-sm); border: 1px solid var(--cs-glass-border-sm); backdrop-filter: var(--cs-glass-blur-sm) var(--cs-glass-backdrop-filter-extra); -webkit-backdrop-filter: var(--cs-glass-blur-sm) var(--cs-glass-backdrop-filter-extra); background-clip: padding-box; } @utility cs-glass-weak { background: var(--cs-glass-bg-weak); border: 1px solid var(--cs-glass-border-light); backdrop-filter: var(--cs-glass-blur-sm) var(--cs-glass-backdrop-filter-extra); -webkit-backdrop-filter: var(--cs-glass-blur-sm) var(--cs-glass-backdrop-filter-extra); background-clip: padding-box; } @utility cs-glass-md { background: var(--cs-glass-bg-md); border: 1px solid var(--cs-glass-border-md); backdrop-filter: var(--cs-glass-blur) var(--cs-glass-backdrop-filter-extra); -webkit-backdrop-filter: var(--cs-glass-blur) var(--cs-glass-backdrop-filter-extra); background-clip: padding-box; } @utility cs-glass-medium { background: var(--cs-glass-bg-light); border: 1px solid var(--cs-glass-border-medium); backdrop-filter: var(--cs-glass-blur) var(--cs-glass-backdrop-filter-extra); -webkit-backdrop-filter: var(--cs-glass-blur) var(--cs-glass-backdrop-filter-extra); background-clip: padding-box; } @utility cs-glass-lg { background: var(--cs-glass-bg-lg); border: 1px solid var(--cs-glass-border-lg); backdrop-filter: var(--cs-glass-blur) var(--cs-glass-backdrop-filter-extra); -webkit-backdrop-filter: var(--cs-glass-blur) var(--cs-glass-backdrop-filter-extra); background-clip: padding-box; } @utility cs-glass-strong { background: var(--cs-glass-bg-medium); border: 1px solid var(--cs-glass-border-strong); backdrop-filter: var(--cs-glass-blur-xl) var(--cs-glass-backdrop-filter-extra); -webkit-backdrop-filter: var(--cs-glass-blur-xl) var(--cs-glass-backdrop-filter-extra); background-clip: padding-box; } @utility cs-glass-xl { background: var(--cs-glass-bg-xl); border: 1px solid var(--cs-glass-border-xl); backdrop-filter: var(--cs-glass-blur-xl) var(--cs-glass-backdrop-filter-extra); -webkit-backdrop-filter: var(--cs-glass-blur-xl) var(--cs-glass-backdrop-filter-extra); background-clip: padding-box; } @utility cs-glass-2xl { background: var(--cs-glass-bg-2xl); border: 1px solid var(--cs-glass-border-2xl); backdrop-filter: var(--cs-glass-blur-xl) var(--cs-glass-backdrop-filter-extra); -webkit-backdrop-filter: var(--cs-glass-blur-xl) var(--cs-glass-backdrop-filter-extra); background-clip: padding-box; } @utility cs-glass-3xl { background: var(--cs-glass-bg-3xl); border: 1px solid var(--cs-glass-border-3xl); backdrop-filter: var(--cs-glass-blur-xl) var(--cs-glass-backdrop-filter-extra); -webkit-backdrop-filter: var(--cs-glass-blur-xl) var(--cs-glass-backdrop-filter-extra); background-clip: padding-box; } @utility cs-glass-4xl { background: var(--cs-glass-bg-4xl); border: 1px solid var(--cs-glass-border-2xl); backdrop-filter: var(--cs-glass-blur-xl) var(--cs-glass-backdrop-filter-extra); -webkit-backdrop-filter: var(--cs-glass-blur-xl) var(--cs-glass-backdrop-filter-extra); background-clip: padding-box; } @utility cs-glass-5xl { background: var(--cs-glass-bg-5xl); border: 1px solid var(--cs-glass-border-3xl); backdrop-filter: var(--cs-glass-blur-xl) var(--cs-glass-backdrop-filter-extra); -webkit-backdrop-filter: var(--cs-glass-blur-xl) var(--cs-glass-backdrop-filter-extra); background-clip: padding-box; } /* Dark glass opacity scale - Complete range */ @utility cs-glass-dark-xs { background: var(--cs-glass-bg-dark-xs); border: 1px solid var(--cs-glass-border-xs); backdrop-filter: var(--cs-glass-blur-sm) var(--cs-glass-backdrop-filter-extra); -webkit-backdrop-filter: var(--cs-glass-blur-sm) var(--cs-glass-backdrop-filter-extra); background-clip: padding-box; } @utility cs-glass-dark-sm { background: var(--cs-glass-bg-dark-sm); border: 1px solid var(--cs-glass-border-sm); backdrop-filter: var(--cs-glass-blur-sm) var(--cs-glass-backdrop-filter-extra); -webkit-backdrop-filter: var(--cs-glass-blur-sm) var(--cs-glass-backdrop-filter-extra); background-clip: padding-box; } @utility cs-glass-dark-md { background: var(--cs-glass-bg-dark-md); border: 1px solid var(--cs-glass-border-md); backdrop-filter: var(--cs-glass-blur) var(--cs-glass-backdrop-filter-extra); -webkit-backdrop-filter: var(--cs-glass-blur) var(--cs-glass-backdrop-filter-extra); background-clip: padding-box; } @utility cs-glass-dark-lg { background: var(--cs-glass-bg-dark-lg); border: 1px solid var(--cs-glass-border-lg); backdrop-filter: var(--cs-glass-blur) var(--cs-glass-backdrop-filter-extra); -webkit-backdrop-filter: var(--cs-glass-blur) var(--cs-glass-backdrop-filter-extra); background-clip: padding-box; } @utility cs-glass-dark-xl { background: var(--cs-glass-bg-dark-xl); border: 1px solid var(--cs-glass-border-xl); backdrop-filter: var(--cs-glass-blur-xl) var(--cs-glass-backdrop-filter-extra); -webkit-backdrop-filter: var(--cs-glass-blur-xl) var(--cs-glass-backdrop-filter-extra); background-clip: padding-box; } @utility cs-glass-dark-2xl { background: var(--cs-glass-bg-dark-2xl); border: 1px solid var(--cs-glass-border-2xl); backdrop-filter: var(--cs-glass-blur-xl) var(--cs-glass-backdrop-filter-extra); -webkit-backdrop-filter: var(--cs-glass-blur-xl) var(--cs-glass-backdrop-filter-extra); background-clip: padding-box; } @utility cs-glass-dark-3xl { background: var(--cs-glass-bg-dark-3xl); border: 1px solid var(--cs-glass-border-3xl); backdrop-filter: var(--cs-glass-blur-xl) var(--cs-glass-backdrop-filter-extra); -webkit-backdrop-filter: var(--cs-glass-blur-xl) var(--cs-glass-backdrop-filter-extra); background-clip: padding-box; } @utility cs-glass-dark-4xl { background: var(--cs-glass-bg-dark-4xl); border: 1px solid var(--cs-glass-border-2xl); backdrop-filter: var(--cs-glass-blur-xl) var(--cs-glass-backdrop-filter-extra); -webkit-backdrop-filter: var(--cs-glass-blur-xl) var(--cs-glass-backdrop-filter-extra); background-clip: padding-box; } @utility cs-glass-dark-5xl { background: var(--cs-glass-bg-dark-5xl); border: 1px solid var(--cs-glass-border-3xl); backdrop-filter: var(--cs-glass-blur-xl) var(--cs-glass-backdrop-filter-extra); -webkit-backdrop-filter: var(--cs-glass-blur-xl) var(--cs-glass-backdrop-filter-extra); background-clip: padding-box; } /* Colored glass variants */ @utility cs-glass-blue { background: var(--cs-glass-bg-blue); border: 1px solid var(--cs-glass-border-blue); backdrop-filter: var(--cs-glass-blur) var(--cs-glass-backdrop-filter-extra); -webkit-backdrop-filter: var(--cs-glass-blur) var(--cs-glass-backdrop-filter-extra); background-clip: padding-box; } @utility cs-glass-purple { background: var(--cs-glass-bg-purple); border: 1px solid var(--cs-glass-border-purple); backdrop-filter: var(--cs-glass-blur) var(--cs-glass-backdrop-filter-extra); -webkit-backdrop-filter: var(--cs-glass-blur) var(--cs-glass-backdrop-filter-extra); background-clip: padding-box; } @utility cs-glass-green { background: var(--cs-glass-bg-green); border: 1px solid var(--cs-glass-border-green); backdrop-filter: var(--cs-glass-blur) var(--cs-glass-backdrop-filter-extra); -webkit-backdrop-filter: var(--cs-glass-blur) var(--cs-glass-backdrop-filter-extra); background-clip: padding-box; } @utility cs-glass-pink { background: var(--cs-glass-bg-pink); border: 1px solid var(--cs-glass-border-pink); backdrop-filter: var(--cs-glass-blur) var(--cs-glass-backdrop-filter-extra); -webkit-backdrop-filter: var(--cs-glass-blur) var(--cs-glass-backdrop-filter-extra); background-clip: padding-box; } @utility cs-glass-amber { background: var(--cs-glass-bg-amber); border: 1px solid var(--cs-glass-border-amber); backdrop-filter: var(--cs-glass-blur) var(--cs-glass-backdrop-filter-extra); -webkit-backdrop-filter: var(--cs-glass-blur) var(--cs-glass-backdrop-filter-extra); background-clip: padding-box; } /* Glass radius utilities */ @utility cs-glass-rounded-sm { border-radius: var(--cs-glass-radius-sm); } @utility cs-glass-rounded { border-radius: var(--cs-glass-radius); } @utility cs-glass-rounded-lg { border-radius: var(--cs-glass-radius-lg); } @utility cs-glass-rounded-xl { border-radius: var(--cs-glass-radius-xl); } @utility cs-glass-rounded-2xl { border-radius: var(--cs-glass-radius-2xl); } @utility cs-glass-rounded-3xl { border-radius: var(--cs-glass-radius-3xl); } /* Glass shadow utilities */ @utility cs-glass-shadow-sm { box-shadow: var(--cs-glass-shadow-sm-def); } @utility cs-glass-shadow { box-shadow: var(--cs-glass-shadow-def); } @utility cs-glass-shadow-lg { box-shadow: var(--cs-glass-shadow-lg-def); } @utility cs-glass-shadow-xl { box-shadow: var(--cs-glass-shadow-xl-def); } /* ========================================================= GLASS ADD-ON UTILITIES Optional effects and add-on features ========================================================= */ /* Acrylic look (adds saturation/contrast on the backdrop) */ @utility cs-glass-acrylic { --cs-glass-backdrop-filter-extra: saturate(135%) contrast(110%); backdrop-filter: var(--cs-glass-backdrop-filter-extra) var(--cs-glass-blur); -webkit-backdrop-filter: var(--cs-glass-backdrop-filter-extra) var(--cs-glass-blur); } /* Frosted edge (inner highlight for stronger glass rim) */ @utility cs-glass-frosted-edge { box-shadow: inset 0 1px 0 color-mix(in srgb, var(--cs-glass-white) 40%, transparent), var(--cs-glass-shadow-def); } /* Noise/grain overlay */ @utility cs-glass-noise { position: relative; isolation: isolate; &::after { content: ""; position: absolute; inset: 0; pointer-events: none; mix-blend-mode: overlay; opacity: .07; background-image: var(--cs-glass-noise-img, none); background-size: 200px 200px; z-index: 1; } } /* Text contrast helpers for content placed on glass */ @utility cs-glass-on { color: var(--cs-glass-on, #0f172a); } @utility cs-glass-on-invert { color: var(--cs-glass-on-invert, #ffffff); } /* Disabled/read-only helper for interactive glass */ @utility cs-glass-disabled { opacity: .6; filter: grayscale(20%); pointer-events: none; } /* Elevation helpers (z-index layering for overlays on glass) */ @utility cs-glass-elev-1 { z-index: 10; } @utility cs-glass-elev-2 { z-index: 20; } @utility cs-glass-elev-3 { z-index: 30; } @utility cs-glass-elev-4 { z-index: 40; } @utility cs-glass-elev-5 { z-index: 50; } /* Blend mode utilities (creative tints over imagery) */ @utility cs-glass-blend-overlay { mix-blend-mode: overlay; } @utility cs-glass-blend-screen { mix-blend-mode: screen; } @utility cs-glass-blend-multiply { mix-blend-mode: multiply; } /* Layout helpers for sticky bars & performance hints */ @utility cs-glass-sticky { position: sticky; top: 0; } @utility cs-glass-will-change { will-change: transform, backdrop-filter; } /* Isolation utility for Canvas/Background-Layering issues */ @utility cs-glass-isolate { isolation: isolate; } /* ========================================================= GLASS UI COMPONENTS Ready-to-use glass UI elements ========================================================= */ /* Glass card base component */ @utility cs-glass-card { background: var(--cs-glass-bg-light); border: 1px solid var(--cs-glass-border-medium); border-radius: 20px; padding: 2rem; box-shadow: var(--cs-glass-shadow-def); transition: all var(--cs-glass-transition) ease; backdrop-filter: var(--cs-glass-blur); -webkit-backdrop-filter: var(--cs-glass-blur); &:hover { background: var(--cs-glass-bg-hover); box-shadow: 0 20px 40px var(--cs-glass-shadow-strong); transform: translateY(-2px); border: 1px solid var(--cs-glass-border-strong); } &:focus-within { outline: 2px solid var(--cs-glass-focus-ring); outline-offset: 2px; } } /* Light glass card variant */ @utility cs-glass-card-light { background: var(--cs-glass-bg-medium); border: 1px solid var(--cs-glass-border-strong); border-radius: 20px; padding: 2rem; box-shadow: var(--cs-glass-shadow-def); transition: all var(--cs-glass-transition) ease; backdrop-filter: var(--cs-glass-blur); -webkit-backdrop-filter: var(--cs-glass-blur); &:hover { background: var(--cs-glass-bg-light-hover); transform: translateY(-1px); box-shadow: 0 12px 24px var(--cs-glass-shadow-strong); } &:focus-within { outline: 2px solid var(--cs-glass-focus-ring); outline-offset: 2px; } } /* Glass navigation component */ @utility cs-glass-nav { background: var(--cs-glass-bg-light); border: 1px solid var(--cs-glass-border-medium); border-radius: 12px; box-shadow: var(--cs-glass-shadow-def); transition: all var(--cs-glass-transition) ease; backdrop-filter: var(--cs-glass-blur); -webkit-backdrop-filter: var(--cs-glass-blur); } @utility cs-glass-nav-light { background: var(--cs-glass-bg-medium); border: 1px solid var(--cs-glass-border-strong); border-radius: 12px; box-shadow: var(--cs-glass-shadow-def); transition: all var(--cs-glass-transition) ease; backdrop-filter: var(--cs-glass-blur); -webkit-backdrop-filter: var(--cs-glass-blur); } /* Glass button component */ @utility cs-glass-button { background: var(--cs-glass-bg-light); border: 1px solid var(--cs-glass-border-medium); border-radius: 12px; padding: 0.75rem 1.5rem; transition: all var(--cs-glass-transition) ease; cursor: pointer; min-height: 2.5rem; /* touch target */ min-width: 2.5rem; -webkit-tap-highlight-color: transparent; backdrop-filter: var(--cs-glass-blur); -webkit-backdrop-filter: var(--cs-glass-blur); &:hover { background: var(--cs-glass-bg-hover); transform: translateY(-1px); box-shadow: 0 8px 16px var(--cs-glass-shadow-medium); } &:focus, &:focus-visible { outline: 2px solid var(--cs-glass-focus-ring); outline-offset: 2px; } &:active { transform: translateY(0); box-shadow: 0 4px 8px var(--cs-glass-shadow-medium); } } /* Glass toast component */ @utility cs-glass-toast { background: var(--cs-glass-bg-light); border: 1px solid var(--cs-glass-border-medium); border-radius: 0.75rem; padding: 1rem 1.5rem; box-shadow: 0 8px 32px var(--cs-glass-shadow-strong); position: relative; overflow: hidden; backdrop-filter: var(--cs-glass-blur); -webkit-backdrop-filter: var(--cs-glass-blur); } /* Glass tooltip component */ @utility cs-glass-tooltip { background: var(--cs-glass-tooltip-bg); border: 1px solid var(--cs-glass-border-medium); border-radius: 0.5rem; padding: 0.5rem 0.75rem; box-shadow: 0 4px 16px var(--cs-glass-shadow-xl); font-size: 0.875rem; color: white; white-space: nowrap; z-index: 50; backdrop-filter: var(--cs-glass-blur-sm); -webkit-backdrop-filter: var(--cs-glass-blur-sm); } /* Glass dropdown component */ @utility cs-glass-dropdown { background: var(--cs-glass-bg-light); border: 1px solid var(--cs-glass-border-medium); border-radius: 0.75rem; box-shadow: var(--cs-glass-shadow-def); padding: 0.5rem; min-width: 12rem; z-index: 50; backdrop-filter: var(--cs-glass-blur); -webkit-backdrop-filter: var(--cs-glass-blur); } /* ========================================================= GLASS PRO EFFECTS Advanced animations and glass effects ========================================================= */ /* Animated morph effects */ @utility cs-glass-morph-in { animation: glassMorphIn 0.4s ease-out both; } @utility cs-glass-morph-out { animation: glassMorphOut 0.3s ease-in both; } @keyframes glassMorphIn { from { opacity: 0; transform: scale(0.95); backdrop-filter: blur(0px); } to { opacity: 1; transform: scale(1); backdrop-filter: var(--cs-glass-blur); } } @keyframes glassMorphOut { from { opacity: 1; transform: scale(1); } to { opacity: 0; transform: scale(0.95); } } /* 3D hover glass effect */ @utility cs-glass-3d-hover { transform-style: preserve-3d; transition: transform 0.3s ease, box-shadow 0.3s ease; &:hover { transform: rotateX(6deg) rotateY(-4deg) scale(1.02); box-shadow: 0 24px 48px var(--cs-glass-shadow-xl); } } /* Glossy highlight overlays */ @utility cs-glass-gloss-top { position: relative; &::before { content: ""; position: absolute; top: 0; left: 0; right: 0; height: 20%; background: linear-gradient(to bottom, rgba(255,255,255,0.4), transparent); border-top-left-radius: inherit; border-top-right-radius: inherit; pointer-events: none; z-index: 2; mix-blend-mode: soft-light; } } @utility cs-glass-gloss-left { position: relative; &::before { content: ""; position: absolute; top: 0; bottom: 0; left: 0; width: 15%; background: linear-gradient(to right, rgba(255,255,255,0.35), transparent); pointer-events: none; z-index: 2; mix-blend-mode: soft-light; } } @utility cs-glass-gloss-right { position: relative; &::before { content: ""; position: absolute; top: 0; bottom: 0; right: 0; width: 15%; background: linear-gradient(to left, rgba(255,255,255,0.35), transparent); pointer-events: none; z-index: 2; mix-blend-mode: soft-light; } } @utility cs-glass-gloss-bottom { position: relative; &::before { content: ""; position: absolute; bottom: 0; left: 0; right: 0; height: 20%; background: linear-gradient(to top, rgba(255,255,255,0.3), transparent); pointer-events: none; z-index: 2; mix-blend-mode: soft-light; } } /* Skeleton glass blocks */ @utility cs-glass-skeleton { position: relative; overflow: hidden; background: var(--cs-glass-bg-light); border: 1px solid var(--cs-glass-border-medium); border-radius: var(--cs-glass-radius); min-height: 2rem; isolation: isolate; backdrop-filter: var(--cs-glass-blur-sm); -webkit-backdrop-filter: var(--cs-glass-blur-sm); &::after { content: ""; position: absolute; inset: 0; background: linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent); animation: glassSkeletonShimmer 1.2s infinite; } } @keyframes glassSkeletonShimmer { 0% { transform: translateX(-100%); } 100% { transform: translateX(100%); } } /* Card-specific animations */ @keyframes cs-orb-float { 0%, 100% { transform: translate(0, 0) rotate(0deg); } 33% { transform: translate(30px, -30px) rotate(120deg); } 66% { transform: translate(-20px, 20px) rotate(240deg); } } /* Pro theme presets */ @utility cs-glass-theme-neon { --cs-glass-bg-light: rgba(58, 227, 255, 0.1); --cs-glass-border-medium: rgba(58, 227, 255, 0.25); --cs-glass-shadow-def: 0 8px 32px rgba(58, 227, 255, 0.25); --cs-glass-focus-ring: rgba(58, 227, 255, 0.6); } @utility cs-glass-theme-carbon { --cs-glass-bg-light: rgba(30, 30, 30, 0.25); --cs-glass-border-medium: rgba(255, 255, 255, 0.08); --cs-glass-shadow-def: 0 8px 32px rgba(0,0,0,0.4); --cs-glass-focus-ring: rgba(255, 255, 255, 0.3); } @utility cs-glass-theme-pastel { --cs-glass-bg-light: rgba(255, 230, 250, 0.12); --cs-glass-border-medium: rgba(255, 230, 250, 0.25); --cs-glass-shadow-def: 0 8px 32px rgba(255, 230, 250, 0.25); --cs-glass-focus-ring: rgba(255, 230, 250, 0.6); } /* ========================================================= CARD SYSTEM COMPONENTS Feature, Product, Pricing & Testimonial cards ========================================================= */ /* Feature Card Component */ @utility cs-card-feature { display: grid; grid-template-rows: auto auto 1fr; gap: var(--cs-card-space-lg, 1.5rem); background: var(--cs-card-bg, #ffffff); border: 1px solid var(--cs-card-border, #e5e7eb); border-radius: var(--cs-card-radius-lg, 12px); box-shadow: var(--cs-card-shadow-sm, 0 1px 2px rgba(0, 0, 0, 0.05)); padding: var(--cs-card-space-xl, 2rem); text-align: center; position: relative; transition: var(--cs-card-transition, all 0.2s ease); &:hover { transform: translateY(var(--cs-card-hover-lift, -2px)); box-shadow: var(--cs-card-shadow-md, 0 4px 6px rgba(0, 0, 0, 0.07)); } } /* Feature card with glass styling */ @utility cs-card-feature-glass { background: var(--cs-acrylic-tint, rgba(255, 255, 255, 0.1)); backdrop-filter: saturate(140%) blur(12px); border: 1px solid var(--cs-acrylic-border, rgba(255, 255, 255, 0.2)); } /* Product Card Component */ @utility cs-card-product { display: grid; grid-template-rows: auto 1fr auto; background: var(--cs-surface, #ffffff); border: 1px solid var(--cs-border, #e5e7eb); border-radius: var(--cs-radius-lg, 12px); box-shadow: var(--cs-shadow-1, 0 1px 3px rgba(0, 0, 0, 0.1)); overflow: hidden; transition: all var(--cs-transition, 0.2s ease); position: relative; &:hover { transform: translateY(-2px); box-shadow: var(--cs-shadow-2, 0 4px 6px rgba(0, 0, 0, 0.1)); } } /* Product card with glass styling */ @utility cs-card-product-glass { background: var(--cs-acrylic-tint, rgba(255, 255, 255, 0.1)); backdrop-filter: saturate(140%) blur(12px); border: 1px solid var(--cs-acrylic-border, rgba(255, 255, 255, 0.2)); } /* Pricing Card Component */ @utility cs-card-pricing { display: grid; grid-template-rows: auto 1fr auto; background: var(--cs-surface); border: 2px solid var(--cs-border); border-radius: var(--cs-radius-lg); box-shadow: var(--cs-shadow-1); padding: var(--cs-space-6); text-align: center; position: relative; transition: all var(--cs-transition); &:hover { transform: translateY(-4px); box-shadow: var(--cs-shadow-2); } } /* Pricing card with glass styling */ @utility cs-card-pricing-glass { background: var(--cs-acrylic-tint, rgba(255, 255, 255, 0.1)); backdrop-filter: saturate(140%) blur(12px); border: 2px solid var(--cs-acrylic-border, rgba(255, 255, 255, 0.3)); } /* ========================================================= v0.8.x CARD SYSTEM COMPONENTS Complete card system with interactive effects ========================================================= */ /* Card Base - v0.8.x compatible */ @utility cs-card-base { background: var(--cs-card-bg); border-radius: var(--cs-card-border-radius); box-shadow: var(--cs-card-shadow); transition: all 300ms ease; overflow: hidden; &:hover { box-shadow: var(--cs-card-shadow-hover); transform: translateY(var(--cs-card-hover-lift)); } } /* Product Card - v0.8.x compatible */ @utility cs-card-product { background: var(--cs-card-bg); border-radius: var(--cs-card-border-radius); box-shadow: var(--cs-card-shadow); transition: all 300ms ease; overflow: hidden; max-width: 20rem; display: flex; flex-direction: column; &:hover { box-shadow: var(--cs-card-shadow-hover); transform: translateY(var(--cs-card-hover-lift)); } } /* Card Image */ @utility cs-card-image { width: 100%; height: 12rem; object-fit: cover; background: color-mix(in srgb, currentColor 5%, transparent); } /* Card Content */ @utility cs-card-content { padding: var(--cs-card-padding); flex: 1; display: flex; flex-direction: column; gap: 0.75rem; } /* Card Title */ @utility cs-card-title { font-size: 1.25rem; font-weight: 700; color: color-mix(in srgb, currentColor 95%, transparent); margin: 0; line-height: 1.3; } /* Card Description */ @utility cs-card-description { color: color-mix(in srgb, currentColor 70%, transparent); line-height: 1.6; margin: 0; flex: 1; } /* Card Price */ @utility cs-card-price { font-size: 1.5rem; font-weight: 800; color: #059669; margin: 0; } /* Card Actions */ @utility cs-card-actions { padding: 0 var(--cs-card-padding) var(--cs-card-padding); display: flex; gap: 0.75rem; } /* Primary Button for Cards */ @utility cs-button-primary-card { background: linear-gradient(135deg, #3b82f6, #1d4ed8); color: white; border: none; padding: 0.75rem 1.5rem; border-radius: 0.5rem; font-weight: 600; cursor: pointer; transition: all 200ms ease; flex: 1; &:hover { transform: translateY(-1px); box-shadow: 0 4px 12px color-mix(in srgb, #3b82f6 40%, transparent); } } /* Testimonial Card - v0.8.x compatible */ @utility cs-card-testimonial { background: var(--cs-card-bg); border-radius: var(--cs-card-border-radius); box-shadow: var(--cs-card-shadow); transition: all 300ms ease; overflow: hidden; padding: var(--cs-card-padding); max-width: 24rem; text-align: center; position: relative; &:hover { box-shadow: var(--cs-card-shadow-hover); transform: translateY(var(--cs-card-hover-lift)); } } /* Testimonial Quote */ @utility cs-testimonial-quote { font-size: 1.125rem; line-height: 1.6; font-style: italic; color: color-mix(in srgb, currentColor 85%, transparent); margin-bottom: 1.5rem; position: relative; &::before { content: '"'; position: absolute; top: -0.5rem; left: -0.5rem; font-size: 3rem; color: color-mix(in srgb, currentColor 20%, transparent); line-height: 1; } } /* Testimonial Author */ @utility cs-testimonial-author { display: flex; align-items: center; justify-content: center; gap: 1rem; } /* Testimonial Avatar */ @utility cs-testimonial-avatar { width: 3rem; height: 3rem; border-radius: 50%; object-fit: cover; border: 2px solid color-mix(in srgb, currentColor 20%, transparent); } /* Testimonial Info */ @utility cs-testimonial-info { text-align: left; } /* Testimonial Name */ @utility cs-testimonial-name { font-weight: 600; color: color-mix(in srgb, currentColor 90%, transparent); margin: 0; } /* Testimonial Role */ @utility cs-testimonial-role { font-size: 0.875rem; color: color-mix(in srgb, currentColor 60%, transparent); margin: 0; } /* Testimonial with Orbs - v0.8.x compatible */ @utility cs-card-testimonial-orb { background: linear-gradient(135deg, color-mix(in srgb, #3b82f6 10%, transparent) 0%, color-mix(in srgb, #8b5cf6 15%, transparent) 50%, color-mix(in srgb, #06b6d4 10%, transparent) 100% ); backdrop-filter: blur(20px) saturate(180%); border: 1px solid color-mix(in srgb, #ffffff 20%, transparent); border-radius: var(--cs-card-border-radius); transition: all 300ms ease; overflow: hidden; padding: var(--cs-card-padding); max-width: 24rem; text-align: center; position: relative; &:hover { box-shadow: var(--cs-card-shadow-hover); transform: translateY(var(--cs-card-hover-lift)); } &::before { content: ''; position: absolute; top: -50%; right: -50%; width: 100%; height: 100%; background: radial-gradient(circle, color-mix(in srgb, #3b82f6 30%, transparent) 0%, transparent 70% ); animation: cs-orb-float 6s ease-in-out infinite; pointer-events: none; } } /* ========================================================= v0.8.x FORMS SYSTEM COMPONENTS Complete form system with validation states ========================================================= */ /* Form Base - v0.8.x compatible */ @utility cs-form-base { display: flex; flex-direction: column; gap: var(--cs-form-spacing); } /* Input Base - v0.8.x compatible */ @utility cs-input-base { padding: var(--cs-form-padding); border: 1px solid var(--cs-form-border-color); border-radius: var(--cs-form-border-radius); transition: var(--cs-form-transition); &:focus { outline: none; border-color: var(--cs-form-focus-color); box-shadow: var(--cs-form-focus-shadow) color-mix(in srgb, var(--cs-form-focus-color) 20%, transparent); } } /* Modern Form - v0.8.x compatible */ @utility cs-form-modern { display: flex; flex-direction: column; gap: var(--cs-form-spacing); max-width: 32rem; margin: 0 auto; padding: 2rem; background: color-mix(in srgb, #ffffff 95%, transparent); border-radius: 1rem; box-shadow: 0 10px 25px color-mix(in srgb, #000000 10%, transparent); } /* Modern Input - v0.8.x compatible */ @utility cs-input-modern { padding: var(--cs-form-padding); border: 2px solid color-mix(in srgb, currentColor 10%, transparent); border-radius: var(--cs-form-border-radius); transition: var(--cs-form-transition); background: #ffffff; font-size: 1rem; line-height: 1.5; &:focus { outline: none; border-color: var(--cs-form-focus-color); box-shadow: var(--cs-form-focus-shadow) color-mix(in srgb, var(--cs-form-focus-color) 20%, transparent); } &::placeholder { color: color-mix(in srgb, currentColor 60%, transparent); } } /* Modern Label - v0.8.x compatible */ @utility cs-label-modern { font-weight: 600; color: color-mix(in srgb, currentColor 90%, transparent); margin-bottom: 0.5rem; display: block; } /* Modern Primary Button - v0.8.x compatible */ @utility cs-button-primary-modern { background: linear-gradient(135deg, #3b82f6, #1d4ed8); color: white; border: none; padding: 0.875rem 1.5rem; border-radius: var(--cs-form-border-radius); font-weight: 600; cursor: pointer; transition: var(--cs-form-transition); &:hover { transform: translateY(-2px); box-shadow: 0 8px 20px color-mix(in srgb, #3b82f6 30%, transparent); } } /* Glass Form - v0.8.x compatible */ @utility cs-form-glass { display: flex; flex-direction: column; gap: var(--cs-form-spacing); backdrop-filter: blur(20px) saturate(180%); background: color-mix(in srgb, #ffffff 10%, transparent); border: 1px solid color-mix(in srgb, #ffffff 20%, transparent); border-radius: 1rem; padding: 2rem; } /* Glass Input - v0.8.x compatible */ @utility cs-input-glass { padding: var(--cs-form-padding); background: color-mix(in srgb, #ffffff 15%, transparent); border: 1px solid color-mix(in srgb, #ffffff 30%, transparent); border-radius: var(--cs-form-border-radius); transition: var(--cs-form-transition); color: inherit; backdrop-filter: blur(10px); &:focus { outline: none; border-color: var(--cs-form-focus-color); box-shadow: var(--cs-form-focus-shadow) color-mix(in srgb, var(--cs-form-focus-color) 20%, transparent); } &::placeholder { color: color-mix(in srgb, currentColor 60%, transparent); } } /* Glass Primary Button - v0.8.x compatible */ @utility cs-button-primary-glass { background: color-mix(in srgb, #ffffff 20%, transparent); border: 1px solid color-mix(in srgb, #ffffff 30%, transparent); backdrop-filter: blur(10px); color: inherit; padding: 0.875rem 1.5rem; border-radius: var(--cs-form-border-radius); font-weight: 600; cursor: pointer; transition: var(--cs-form-transition); &:hover { background: color-mix(in srgb, #ffffff 30%, transparent); transform: translateY(-1px); } } /* Form Group - v0.8.x compatible */ @utility cs-form-group { position: relative; margin-bottom: var(--cs-form-spacing); } /* Input Validation States - v0.8.x compatible */ @utility cs-input-validation { position: absolute; top: 100%; left: 0; right: 0; margin-top: 0.25rem; font-size: 0.875rem; display: none; align-items: center; gap: 0.25rem; } @utility cs-validation-error { display: flex; color: var(--cs-form-error-color); } @utility cs-validation-success { display: flex; color: var(--cs-form-success-color); } @utility cs-validation-icon { font-size: 1rem; line-height: 1; } @utility cs-input-error { border-color: var(--cs-form-error-color) !important; box-shadow: var(--cs-form-focus-shadow) color-mix(in srgb, var(--cs-form-error-color) 20%, transparent) !important; } @utility cs-input-success { border-color: var(--cs-form-success-color) !important; box-shadow: var(--cs-form-focus-shadow) color-mix(in srgb, var(--cs-form-success-color) 20%, transparent) !important; } /* Additional Form Utilities */ @utility cs-input-group { position: relative; display: flex; align-items: stretch; } @utility cs-input-addon { display: flex; align-items: center; padding: 0 0.75rem; background: color-mix(in srgb, currentColor 5%, transparent); border: 1px solid var(--cs-form-border-color); color: color-mix(in srgb, currentColor 70%, transparent); font-size: 0.875rem; } @utility cs-input-addon-left { border-right: none; border-radius: var(--cs-form-border-radius) 0 0 var(--cs-form-border-radius); } @utility cs-input-addon-right { border-left: none; border-radius: 0 var(--cs-form-border-radius) var(--cs-form-border-radius) 0; } @utility cs-input-with-addon-left { border-radius: 0 var(--cs-form-border-radius) var(--cs-form-border-radius) 0; border-left: none; } @utility cs-input-with-addon-right { border-radius: var(--cs-form-border-radius) 0 0 var(--cs-form-border-radius); border-right: none; } @utility cs-form-row { display: flex; gap: var(--cs-form-spacing); align-items: flex-start; } @utility cs-form-col { flex: 1; min-width: 0; } /* ========================================================= NAVIGATION COMPONENTS Navbar, Tabs, Pills, Drawer, Breadcrumbs ========================================================= */ /* Navbar Component */ @utility cs-navbar { position: relative; z-index: var(--cs-z-nav); display: flex; align-items: center; justify-content: space-between; gap: var(--cs-space-2); padding: var(--cs-space-2) var(--cs-space-4); background-color: var(--cs-color-bg); border-bottom: 1px solid var(--cs-color-border); &.cs-navbar--acrylic { background-color: var(--cs-acrylic-bg); border-bottom: 1px solid var(--cs-acrylic-border); } @supports ((-webkit-backdrop-filter: blur(6px)) or (backdrop-filter: blur(6px))) { &.cs-navbar--acrylic { -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px); } } } /* Brand Component */ @utility cs-navbar-brand { display: inline-block; padding-top: calc(0.3125rem * var(--cs-density)); padding-bottom: calc(0.3125rem * var(--cs-density)); margin-right: var(--cs-space-4); font-size: 1.25rem; line-height: inherit; white-space: nowrap; text-decoration: none; color: inherit; } /* Navigation Tabs */ @utility cs-nav-tabs { display: flex; flex-wrap: wrap; border-bottom: 1px solid var(--cs-color-border); & .cs-nav-list { display: flex; flex-wrap: wrap; margin: 0; padding: 0; list-style: none; } & .cs-nav-item { display: flex; margin-bottom: -1px; } & .cs-nav-link { display: inline-block; padding: var(--cs-space-3) var(--cs-space-4); color: var(--cs-color-text-secondary); text-decoration: none; font-weight: 500; font-size: 0.875rem; border: 1px solid transparent; border-bottom: none; border-top-left-radius: var(--cs-radius-md); border-top-right-radius: var(--cs-radius-md); transition: all var(--cs-transition-fast) var(--cs-ease-out); white-space: nowrap; position: relative; &:hover { color: var(--cs-color-text); border-color: var(--cs-color-border-light); background-color: var(--cs-color-bg-hover); } } & .cs-nav-item.cs-nav-item--active .cs-nav-link { color: var(--cs-color-primary); background-color: var(--cs-color-bg); border-color: var(--cs-color-border) var(--cs-color-border) var(--cs-color-bg); &::after { content: ''; position: absolute; bottom: -1px; left: 0; right: 0; height: 2px; background-color: var(--cs-color-primary); } } } /* Tab Content */ @utility cs-tab-content { display: none; padding: var(--cs-space-4); animation: cs-tab-switch var(--cs-transition-base) var(--cs-ease-out); } @utility cs-tab-content--active { display: block; } /* Drawer Component */ @utility cs-drawer { position: fixed; top: 0; left: 0; z-index: var(--cs-z-drawer); display: flex; flex-direction: column; width: 100%; height: 100%; max-width: 320px; background-color: var(--cs-color-bg); box-shadow: var(--cs-shadow-xl); transform: translateX(-100%); transition: transform var(--cs-transition-fast) var(--cs-ease-out); &[open], &.cs-is-open { transform: translateX(0); } &.cs-drawer--right { left: auto; right: 0; transform: translateX(100%); &[open], &.cs-is-open { transform: translateX(0); } } } @utility cs-drawer-header { padding: var(--cs-space-4); border-bottom: 1px solid var(--cs-color-border); } @utility cs-drawer-body { flex: 1; padding: var(--cs-space-4); overflow-y: auto; } @utility cs-drawer-footer { padding: var(--cs-space-4); border-top: 1px solid var(--cs-color-border); } @utility cs-drawer-backdrop { position: fixed; top: 0; left: 0; z-index: calc(var(--cs-z-drawer) - 1); width: 100%; height: 100%; background-color: var(--cs-backdrop-bg); opacity: 0; visibility: hidden; transition: opacity var(--cs-transition-fast) var(--cs-ease-out), visibility var(--cs-transition-fast) var(--cs-ease-out); } /* Open state sibling backdrop */ @utility cs-drawer { &[open] ~ .cs-drawer-backdrop, &.cs-is-open ~ .cs-drawer-backdrop { opacity: 1; visibility: visible; } } /* ========================================================= RESPONSIVE GLASS UTILITIES Container queries and responsive glass blur effects ========================================================= */ /* Responsive glass blur based on container size */ @utility cs-glass-responsive { background: var(--cs-glass-bg-light); border: 1px solid var(--cs-glass-border-medium); backdrop-filter: var(--cs-glass-blur-sm); -webkit-backdrop-filter: var(--cs-glass-blur-sm); background-clip: padding-box; @container (min-width: 320px) { backdrop-filter: var(--cs-glass-blur-sm); -webkit-backdrop-filter: var(--cs-glass-blur-sm); } @container (min-width: 640px) { backdrop-filter: var(--cs-glass-blur); -webkit-backdrop-filter: var(--cs-glass-blur); } @container (min-width: 1024px) { backdrop-filter: var(--cs-glass-blur-lg); -webkit-backdrop-filter: var(--cs-glass-blur-lg); } } /* Base backdrop filter utility */ @utility cs-glass-backdrop-clip { background-clip: padding-box; } /* ========================================================= GLASS-FIRST FALLBACKS & PERFORMANCE Fallback optimizations for legacy browsers ========================================================= */ /* For browsers that don't support backdrop-filter, provide a fallback with slightly higher opacity background */ @supports not ((-webkit-backdrop-filter: blur(1px)) or (backdrop-filter: blur(1px))) { .cs-glass, .cs-glass-card, .cs-glass-card-light, .cs-glass-nav, .cs-glass-nav-light, .cs-glass-button, .cs-glass-toast, .cs-glass-tooltip, .cs-glass-dropdown { background: var(--cs-glass-bg-fallback); box-shadow: 0 4px 16px var(--cs-glass-shadow-medium); } .cs-glass-dark { background: var(--cs-glass-bg-dark-fallback); } .cs-glass-blue { background: var(--cs-glass-bg-blue-fallback); } .cs-glass-purple { background: var(--cs-glass-bg-purple-fallback); } .cs-glass-green { background: var(--cs-glass-bg-green-fallback); } .cs-glass-pink { background: var(--cs-glass-bg-pink-fallback); } .cs-glass-amber { background: var(--cs-glass-bg-amber-fallback); } .cs-card-feature-glass, .cs-card-product-glass, .cs-card-prici