11/* General Toggle Styling */
2- .toggle {
2+ .kroma- toggle {
33 display : inline-flex;
44 align-items : center;
55 gap : var (--space-2 );
6- }
7-
8- /* Label */
9- . toggle-label {
6+ }
7+
8+ /* Label */
9+ . kroma- toggle-label {
1010 font-size : clamp (0.875rem , 1vw + 0.25rem , 1rem );
1111 color : var (--neutral-700 );
12- }
13-
14- /* Base Checkbox Styling */
15- .toggle input [type = "checkbox" ] {
12+ cursor : pointer;
13+ }
14+
15+ /* Base Checkbox Styling */
16+ .kroma-toggle input [type = "checkbox" ] {
1617 position : relative;
1718 width : clamp (var (--space-10 ), 5vw , var (--space-16 ));
1819 height : clamp (var (--space-5 ), 3vw , var (--space-8 ));
2425 cursor : pointer;
2526 transition : background-color var (--transition-colors ), box-shadow var (--transition-all );
2627 box-shadow : inset 0 0 5px rgba (0 , 0 , 0 , 0.3 );
27- }
28-
29- /* Toggle Knob */
30- .toggle input [type = "checkbox" ]::before {
28+ overflow : hidden;
29+ display : inline-flex;
30+ }
31+
32+ /* Ripple Effect for Toggle */
33+ .kroma-toggle input [type = "checkbox" ]::after {
34+ content : "" ;
35+ position : absolute;
36+ top : 50% ;
37+ left : 50% ;
38+ width : 0 ;
39+ height : 0 ;
40+ border-radius : 50% ;
41+ background-color : rgba (255 , 255 , 255 , 0.6 );
42+ transform : translate (-50% , -50% ) scale (1 );
43+ transition : transform 0.3s ease-out, opacity 0.3s ease-out;
44+ opacity : 0 ;
45+ }
46+
47+ /* Ripple Animation on Interaction */
48+ .kroma-toggle input [type = "checkbox" ]: checked ::after {
49+ transform : translate (-50% , -50% ) scale (3 );
50+ opacity : 0 ;
51+ transition : transform 0.5s ease-out, opacity 0.5s ease-out;
52+ }
53+
54+ /* Toggle Knob */
55+ .kroma-toggle input [type = "checkbox" ]::before {
3156 content : "" ;
3257 width : clamp (var (--space-5 ), 2vw , var (--space-8 ));
3358 height : clamp (var (--space-5 ), 2vw , var (--space-8 ));
3762 top : 50% ;
3863 left : var (--space-1 );
3964 transform : translateY (-50% );
40- transition : transform var ( --transition-transform ) , background-color var ( --transition-colors ) , box-shadow var ( --transition-all ) ;
65+ transition : transform 0.3 s ease , background-color 0.3 s ease , box-shadow 0.3 s ease ;
4166 box-shadow : 0 2px 4px rgba (0 , 0 , 0 , 0.15 );
4267 z-index : 1 ;
43- }
44-
45- /* Checked State */
46- . toggle input [type = "checkbox" ]: checked {
68+ }
69+
70+ /* Checked State */
71+ . kroma- toggle input [type = "checkbox" ]: checked {
4772 background-color : var (--variant-light-bg );
4873 box-shadow : inset 0 0 7px rgba (0 , 0 , 0 , 0.5 );
49- }
50-
51- . toggle input [type = "checkbox" ]: checked ::before {
74+ }
75+
76+ . kroma- toggle input [type = "checkbox" ]: checked ::before {
5277 transform : translate (calc (100% - var (--space-1 )), -50% );
5378 background-color : var (--variant-bg );
54- }
55-
56- /* Disabled State */
57- . toggle input [type = "checkbox" ]: disabled {
79+ }
80+
81+ /* Disabled State */
82+ . kroma- toggle input [type = "checkbox" ]: disabled {
5883 background-color : var (--neutral-200 );
5984 cursor : not-allowed;
6085 opacity : 0.6 ;
61- }
62- . toggle input [type = "checkbox" ]: disabled ::before {
86+ }
87+ . kroma- toggle input [type = "checkbox" ]: disabled ::before {
6388 background-color : var (--neutral-400 );
64- }
65- . toggle input [type = "checkbox" ]: disabled : checked {
89+ }
90+ . kroma- toggle input [type = "checkbox" ]: disabled : checked {
6691 background-color : var (--neutral-300 );
67- }
68- . toggle input [type = "checkbox" ]: disabled : checked ::before {
92+ }
93+ . kroma- toggle input [type = "checkbox" ]: disabled : checked ::before {
6994 background-color : var (--neutral-400 );
70- }
71-
72- /* Readonly State */
73- [data-state = "readonly" ] input [type = "checkbox" ] {
95+ }
96+
97+ /* Readonly State */
98+ [data-state = "readonly" ] input [type = "checkbox" ] {
7499 pointer-events : none;
75100 cursor : not-allowed;
76101 background-color : var (--neutral-200 );
77- }
78- [data-state = "readonly" ] input [type = "checkbox" ]::before {
102+ }
103+ [data-state = "readonly" ] input [type = "checkbox" ]::before {
79104 background-color : var (--neutral-400 );
80- }
81- [data-state = "readonly" ] input [type = "checkbox" ]: checked {
105+ }
106+ [data-state = "readonly" ] input [type = "checkbox" ]: checked {
82107 background-color : var (--neutral-300 );
83- }
84- [data-state = "readonly" ] input [type = "checkbox" ]: checked ::before {
108+ }
109+ [data-state = "readonly" ] input [type = "checkbox" ]: checked ::before {
85110 background-color : var (--neutral-400 );
86- }
87-
88- /* Responsive Adjustments */
89- @media (max-width : 768px ) {
90- .toggle {
91- gap : var (--space-1 );
111+ }
112+
113+ /* Hover and Active States */
114+ .kroma-toggle input [type = "checkbox" ]: hover {
115+ box-shadow : inset 0 0 8px rgba (0 , 0 , 0 , 0.4 );
116+ }
117+ .kroma-toggle input [type = "checkbox" ]: active ::before {
118+ box-shadow : 0 4px 8px rgba (0 , 0 , 0 , 0.3 );
119+ transform : scale (0.95 ) translate (calc (100% - var (--space-1 )), -50% );
120+ }
121+
122+ /* Responsive Adjustments */
123+ @media (max-width : 768px ) {
124+ .kroma-toggle {
125+ gap : var (--space-1 );
92126 }
93-
94- .toggle input [type = "checkbox" ] {
95- width : clamp (var (--space-8 ), 4vw , var (--space-12 ));
96- height : clamp (var (--space-4 ), 2vw , var (--space-6 ));
127+
128+ .kroma- toggle input [type = "checkbox" ] {
129+ width : clamp (var (--space-8 ), 4vw , var (--space-12 ));
130+ height : clamp (var (--space-4 ), 2vw , var (--space-6 ));
97131 }
98-
99- .toggle input [type = "checkbox" ]::before {
100- width : clamp (var (--space-4 ), 1.5vw , var (--space-5 ));
101- height : clamp (var (--space-4 ), 1.5vw , var (--space-5 ));
132+
133+ .kroma- toggle input [type = "checkbox" ]::before {
134+ width : clamp (var (--space-4 ), 1.5vw , var (--space-5 ));
135+ height : clamp (var (--space-4 ), 1.5vw , var (--space-5 ));
102136 }
103- }
137+ }
138+
0 commit comments