Skip to main content

euv_ui/style/class/
fn.rs

1use crate::*;
2
3class! {
4    // ═══════════════════════════════════════════════════════════════════════════
5    // Layout Shell
6    // ═══════════════════════════════════════════════════════════════════════════
7
8    pub c_app_root {
9        display: "flex";
10        height: "100%";
11        padding-top: var!(safe-area-inset-top);
12        padding-bottom: var!(safe-area-inset-bottom);
13        font-family: "system-ui, -apple-system, sans-serif";
14        background: var!(background);
15        color: var!(foreground);
16        user-select: "none";
17        -webkit-user-select: "none";
18        -webkit-font-smoothing: "antialiased";
19        -moz-osx-font-smoothing: "grayscale";
20        text-rendering: "optimizeLegibility";
21        scrollbar-color: format!("{} {}", var!(scrollbar-thumb), var!(scrollbar-track));
22        ::-webkit-scrollbar-thumb {
23            background: var!(scrollbar-thumb);
24            border: "none";
25            border-radius: "0px";
26        }
27        ::-webkit-scrollbar-thumb:hover {
28            background: var!(scrollbar-thumb-hover);
29        }
30        ::-webkit-scrollbar-thumb:active {
31            background: var!(scrollbar-thumb-active);
32        }
33
34        // ═══════════════════════════════════════════════════════════════════════════
35        // CSS Reset — Cross-browser normalization
36        // ═══════════════════════════════════════════════════════════════════════════
37
38        *, *::before, *::after {
39            box-sizing: "border-box";
40        }
41        h1, h2, h3, h4, h5, h6, p, ul, ol, dl, dd, figure, blockquote, pre, hr {
42            margin: "0px";
43            padding: "0px";
44        }
45        ul, ol {
46            list-style: "none";
47            padding: "0px";
48            margin: "0px";
49        }
50        a {
51            color: "inherit";
52            text-decoration: "none";
53        }
54        button {
55            appearance: "none";
56            -webkit-appearance: "none";
57            -moz-appearance: "none";
58            background: "transparent";
59            border: "none";
60            padding: "0px";
61            margin: "0px";
62            font: "inherit";
63            color: "inherit";
64            cursor: "pointer";
65            outline: "none";
66            font-family: "inherit";
67            ::-moz-focus-inner {
68                border: "0px";
69                padding: "0px";
70            }
71        }
72        input, textarea, select, button {
73            font: "inherit";
74            font-family: "inherit";
75            font-size: "inherit";
76            line-height: "normal";
77            margin: "0px";
78            padding: "0px";
79            border: "none";
80            outline: "none";
81            background: "transparent";
82            color: "inherit";
83            appearance: "none";
84            -webkit-appearance: "none";
85            -moz-appearance: "none";
86        }
87        input[type="text"], input[type="number"], input[type="email"], input[type="password"], input[type="search"], input[type="tel"], input[type="url"] {
88            appearance: "none";
89            -webkit-appearance: "none";
90            -moz-appearance: "none";
91            border-radius: "0px";
92        }
93        input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration {
94            -webkit-appearance: "none";
95            appearance: "none";
96        }
97        input[type="number"] {
98            -moz-appearance: "textfield";
99        }
100        input[type="number"]::-webkit-outer-spin-button, input[type="number"]::-webkit-inner-spin-button {
101            -webkit-appearance: "none";
102            appearance: "none";
103            margin: "0px";
104        }
105        textarea {
106            appearance: "none";
107            -webkit-appearance: "none";
108            -moz-appearance: "none";
109            resize: "vertical";
110            font-family: "inherit";
111        }
112        select {
113            appearance: "none";
114            -webkit-appearance: "none";
115            -moz-appearance: "none";
116            background-image: "none";
117            border-radius: "0px";
118        }
119        img, svg, video, canvas, audio, iframe, embed, object {
120            display: "block";
121            max-width: "100%";
122            height: "auto";
123        }
124        table {
125            border-collapse: "collapse";
126            border-spacing: "0px";
127        }
128        hr {
129            border: "none";
130            margin: "0px";
131        }
132        :focus-visible {
133            outline: "none";
134        }
135        : focus:not(: focus-visible) {
136            outline: "none";
137        }
138        h1, h2, h3, h4, h5, h6 {
139            font-weight: "inherit";
140            font-size: "inherit";
141        }
142        strong, b {
143            font-weight: "700";
144        }
145        em, i {
146            font-style: "italic";
147        }
148        code, pre, kbd, samp {
149            font-family: "ui-monospace, monospace";
150        }
151        @media ((max-width: 767px)) {
152            input, select, textarea {
153                font-size: "16px";
154            }
155        }
156    }
157
158    pub c_mobile_app_root {
159        display: "flex";
160        flex-direction: "column";
161        width: "100%";
162        height: "100%";
163        gap: var!(space-sm);
164        font-family: "system-ui, -apple-system, sans-serif";
165        background: var!(background);
166        color: var!(foreground);
167        padding: format!("{} {} {} {}", var!(padding-shell-top), var!(safe-area-inset-right), var!(padding-shell-bottom), var!(safe-area-inset-left));
168        scrollbar-color: format!("{} {}", var!(scrollbar-thumb), var!(scrollbar-track));
169        ::-webkit-scrollbar-thumb {
170            background: var!(scrollbar-thumb);
171            border: "none";
172            border-radius: "0px";
173        }
174        ::-webkit-scrollbar-thumb:hover {
175            background: var!(scrollbar-thumb-hover);
176        }
177        ::-webkit-scrollbar-thumb:active {
178            background: var!(scrollbar-thumb-active);
179        }
180    }
181
182    // ═══════════════════════════════════════════════════════════════════════════
183    // Navigation - Desktop Sidebar
184    // ═══════════════════════════════════════════════════════════════════════════
185
186    pub c_app_nav {
187        width: var!(nav-width);
188        background: var!(background);
189        border-left: format!("2px solid {}", var!(border));
190        display: "flex";
191        flex-direction: "column";
192        height: "100%";
193        flex-shrink: "0";
194        @media ((max-width: 767px)) {
195            display: "none";
196        }
197    }
198
199    pub c_nav_header {
200        padding: format!("{} {}", var!(space-xl), var!(space-xl));
201        width: "100%";
202        box-sizing: "border-box";
203        font-size: var!(font-xl);
204        font-weight: "700";
205        color: var!(foreground);
206        letter-spacing: "-0.02em";
207        display: "flex";
208        align-items: "center";
209        gap: format!("{}", var!(space-md));
210        flex-shrink: "0";
211        text-decoration: "none";
212        cursor: "pointer";
213        position: "relative";
214        ::after {
215            content: "''";
216            position: "absolute";
217            bottom: "0px";
218            left: var!(space-lg);
219            right: var!(space-lg);
220            height: "1px";
221            background: format!("linear-gradient(90deg, transparent, {}, transparent)", var!(border));
222        }
223    }
224
225    pub c_nav_brand_title {
226        font-size: var!(font-xl);
227        font-weight: "700";
228        color: var!(foreground);
229        letter-spacing: "-0.02em";
230    }
231
232    pub c_euv_logo {
233        display: "flex";
234        background: var!(accent);
235        align-items: "center";
236        justify-content: "center";
237        color: var!(text-on-accent);
238        font-weight: "700";
239        border: "none";
240        cursor: "pointer";
241        padding: "0px";
242        flex-shrink: "0";
243        position: "relative";
244    }
245
246    pub c_euv_logo_nav {
247        width: "32px";
248        height: "32px";
249        font-size: var!(font-lg);
250    }
251
252    pub c_euv_logo_fab {
253        width: "36px";
254        height: "36px";
255        font-size: var!(font-xl);
256        @media ((max-width: 767px)) {
257            width: "44px";
258            height: "44px";
259        }
260    }
261
262    pub c_nav_section_label {
263        padding: format!("{} {} {} {}", var!(space-md), var!(space-xl), var!(space-xs), var!(space-xl));
264        margin: "0px";
265        font-size: var!(font-xs);
266        font-weight: "700";
267        color: var!(foreground);
268        text-transform: "uppercase";
269        letter-spacing: "0.10em";
270        flex-shrink: "0";
271    }
272
273    pub c_nav_items_scroll {
274        flex: "1";
275        overflow-y: "auto";
276        contain: "content";
277        scrollbar-color: format!("{} {}", var!(scrollbar-thumb), var!(scrollbar-track));
278        ::-webkit-scrollbar-thumb {
279            background: var!(scrollbar-thumb);
280            border: "none";
281            border-radius: "0px";
282        }
283        ::-webkit-scrollbar-thumb:hover {
284            background: var!(scrollbar-thumb-hover);
285        }
286        ::-webkit-scrollbar-thumb:active {
287            background: var!(scrollbar-thumb-active);
288        }
289    }
290
291    pub c_nav_theme_toggle {
292        padding: format!("{} {}", var!(space-md), var!(space-xl));
293        flex-shrink: "0";
294        margin-top: "auto";
295        @media ((max-width: 767px)) {
296            display: "none";
297        }
298    }
299
300    pub c_nav_theme_button {
301        width: "100%";
302        height: "36px";
303        padding: "0px";
304        cursor: "pointer";
305        outline: "none";
306        border: format!("1px dashed {}", var!(border));
307        display: "flex";
308        align-items: "center";
309        justify-content: "center";
310        :focus-visible {
311            outline: "none";
312        }
313        :active {
314            background: "transparent";
315            border-color: var!(border);
316        }
317    }
318
319    pub c_theme_icon_sun {
320        width: "20px";
321        height: "20px";
322        background-repeat: "no-repeat";
323        background-position: "center";
324        background-size: "20px 20px";
325        background-image: "url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='%23ffffff' stroke='%23ffffff' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='5'/%3E%3Cline x1='12' y1='1' x2='12' y2='4'/%3E%3Cline x1='12' y1='20' x2='12' y2='23'/%3E%3Cline x1='4.22' y1='4.22' x2='6.34' y2='6.34'/%3E%3Cline x1='17.66' y1='17.66' x2='19.78' y2='19.78'/%3E%3Cline x1='1' y1='12' x2='4' y2='12'/%3E%3Cline x1='20' y1='12' x2='23' y2='12'/%3E%3Cline x1='4.22' y1='19.78' x2='6.34' y2='17.66'/%3E%3Cline x1='17.66' y1='6.34' x2='19.78' y2='4.22'/%3E%3C/svg%3E\")";
326        transition: format!("transform {} {}", var!(duration-normal), var!(ease-out));
327    }
328
329    pub c_theme_icon_moon {
330        width: "20px";
331        height: "20px";
332        background-repeat: "no-repeat";
333        background-position: "center";
334        background-size: "20px 20px";
335        background-image: "url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='%23000000' stroke='none' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 13A9 9 0 1 1 11 3a7 7 0 0 0 10 10z'/%3E%3C/svg%3E\")";
336        transition: format!("transform {} {}", var!(duration-normal), var!(ease-out));
337    }
338
339    pub c_nav_footer {
340        padding: format!("{} {}", var!(space-lg), var!(space-xl));
341        position: "relative";
342        font-size: var!(font-xs);
343        color: var!(muted-foreground);
344        flex-shrink: "0";
345        text-decoration: "none";
346        display: "flex";
347        align-items: "center";
348        gap: var!(space-xs);
349        cursor: "pointer";
350        transition: format!("opacity {} {}", var!(duration-fast), var!(ease-out));
351        opacity: "1";
352        :hover {
353            opacity: "1";
354        }
355    }
356
357    pub c_nav_footer_divider {
358        position: "absolute";
359        top: "0";
360        left: var!(space-lg);
361        right: var!(space-lg);
362        height: "1px";
363        background: format!("linear-gradient(90deg, transparent, {}, transparent)", var!(border));
364    }
365
366    pub c_nav_footer_text {
367        font-weight: "400";
368        letter-spacing: "0.02em";
369    }
370
371    pub c_nav_footer_brand {
372        font-weight: "700";
373        color: var!(accent);
374    }
375
376    pub c_nav_item_active {
377        display: "flex";
378        align-items: "center";
379        gap: var!(space-sm);
380        padding: format!("{} {}", var!(space-md), var!(space-xl));
381        text-decoration: "none";
382        font-size: var!(font-base);
383        color: var!(text-on-accent);
384        font-weight: "600";
385        background: var!(accent);
386    }
387
388    pub c_nav_item_inactive {
389        display: "flex";
390        align-items: "center";
391        gap: var!(space-sm);
392        padding: format!("{} {}", var!(space-md), var!(space-xl));
393        text-decoration: "none";
394        font-size: var!(font-base);
395        color: var!(foreground);
396        font-weight: "400";
397        :hover {
398            background: var!(accent-muted);
399            color: var!(accent);
400            box-shadow: format!("inset 4px 0 0 0 {}", var!(foreground));
401        }
402    }
403
404    pub c_nav_item_icon {
405        flex-shrink: "0";
406        width: "20px";
407        text-align: "center";
408    }
409
410    pub c_nav_item_label {
411        flex: "1";
412        overflow: "hidden";
413        text-overflow: "ellipsis";
414        white-space: "nowrap";
415        color: "inherit";
416    }
417
418    // ═══════════════════════════════════════════════════════════════════════════
419    // Main Content Area
420    // ═══════════════════════════════════════════════════════════════════════════
421
422    pub c_app_main {
423        flex: "1";
424        height: "100%";
425        overflow: "auto";
426        padding: format!("{} {} {} {}", var!(padding-main-top), var!(padding-main-horizontal), var!(padding-main-bottom), var!(padding-main-horizontal));
427        scrollbar-color: format!("{} {}", var!(scrollbar-thumb), var!(scrollbar-track));
428        ::-webkit-scrollbar {
429            width: "6px";
430        }
431        ::-webkit-scrollbar-thumb {
432            background: var!(scrollbar-thumb);
433            border: "none";
434            border-radius: "0px";
435        }
436        ::-webkit-scrollbar-thumb:hover {
437            background: var!(scrollbar-thumb-hover);
438        }
439        ::-webkit-scrollbar-thumb:active {
440            background: var!(scrollbar-thumb-active);
441        }
442        @media ((max-width: 767px)) {
443            padding: format!("{} {} {} {}", var!(padding-main-top), var!(padding-main-horizontal-mobile), var!(padding-main-bottom), var!(padding-main-horizontal-mobile));
444            scrollbar-width: "none";
445            ::-webkit-scrollbar {
446                width: "0px";
447            }
448        }
449    }
450
451    pub c_page_router {
452        flex: "1";
453        display: "flex";
454        flex-direction: "column";
455    }
456
457    pub c_page_container {
458        width: "100%";
459        margin: "0px auto";
460        max-width: var!(content-max-width);
461    }
462
463    // ═══════════════════════════════════════════════════════════════════════════
464    // Page Banner (unified header with emoji icon)
465    // ═══════════════════════════════════════════════════════════════════════════
466
467    pub c_page {
468        position: "relative";
469        text-align: "center";
470        box-sizing: "border-box";
471    }
472
473    pub c_page_glow {
474        position: "absolute";
475        top: "-50%";
476        left: "50%";
477        transform: "translateX(-50%)";
478        width: "400px";
479        max-width: "100%";
480        height: "400px";
481        pointer-events: "none";
482    }
483
484    pub c_page_content {
485        position: "relative";
486        z-index: "1";
487    }
488
489    pub c_page_icon {
490        font-size: "36px";
491        padding-bottom: var!(space-md);
492        @media ((max-width: 767px)) {
493            font-size: "40px";
494        }
495    }
496
497    pub c_page_title {
498        font-size: var!(font-4xl);
499        font-weight: "800";
500        letter-spacing: "-0.03em";
501        margin: "0px";
502        color: var!(foreground);
503        margin-bottom: var!(space-sm);
504        @media ((max-width: 767px)) {
505            font-size: var!(font-3xl);
506        }
507    }
508
509    pub c_page_subtitle {
510        font-size: var!(font-lg);
511        color: var!(muted-foreground);
512        margin: "0px auto";
513        margin-bottom: var!(space-sm);
514        max-width: "560px";
515        opacity: "1";
516        @media ((max-width: 767px)) {
517            font-size: var!(font-base);
518        }
519    }
520
521    // ═══════════════════════════════════════════════════════════════════════════
522    // Card Component
523    // ═══════════════════════════════════════════════════════════════════════════
524
525    pub c_card {
526        color: var!(foreground);
527        box-sizing: "border-box";
528    }
529
530    pub c_card_title {
531        margin: format!("{} 0px", var!(gap-component));
532        color: var!(foreground);
533        font-size: var!(font-lg);
534        font-weight: "600";
535        padding-bottom: var!(gap-component);
536        border-bottom: format!("1px dashed {}", var!(border));
537        letter-spacing: "-0.01em";
538        @media ((max-width: 767px)) {
539            font-size: var!(font-md);
540        }
541    }
542
543    // ═══════════════════════════════════════════════════════════════════════════
544    // Buttons
545    // ═══════════════════════════════════════════════════════════════════════════
546
547    pub c_primary_button {
548        display: "flex";
549        justify-content: "center";
550        align-items: "center";
551        gap: var!(space-sm);
552        width: "100%";
553        height: "42px";
554        background: var!(accent);
555        color: var!(text-on-accent);
556        border: "1px solid transparent";
557        padding: format!("0px {}", var!(space-2xl));
558        cursor: "pointer";
559        font-size: var!(font-base);
560        font-weight: "500";
561        letter-spacing: "0.02em";
562        text-align: "center";
563        outline: "none";
564        box-sizing: "border-box";
565        white-space: "nowrap";
566        overflow: "hidden";
567        text-overflow: "ellipsis";
568        user-select: "none";
569        -webkit-user-select: "none";
570        :focus-visible {
571            outline: "none";
572        }
573        :disabled {
574            background: var!(muted-foreground);
575            cursor: "not-allowed";
576            opacity: "1";
577        }
578        :hover {
579            background: var!(accent);
580        }
581        :active {
582            background: var!(accent);
583            color: var!(text-on-accent);
584            border-color: "transparent";
585        }
586        @media ((max-width: 767px)) {
587            max-width: "100%";
588            padding: format!("{} {}", var!(space-lg), var!(space-xl));
589            font-size: var!(font-md);
590        }
591    }
592
593    pub c_modal_close_button {
594        display: "flex";
595        justify-content: "center";
596        align-items: "center";
597        color: "inherit";
598        border: "none";
599        padding: format!("{} {}", var!(space-sm), var!(space-md));
600        cursor: "pointer";
601        font-size: "20px";
602        font-weight: "400";
603        vertical-align: "middle";
604        outline: "none";
605        opacity: "1";
606        flex-shrink: "0";
607        transition: format!("opacity {} {}", var!(duration-fast), var!(ease-out));
608        :hover {
609            opacity: "1";
610        }
611        :active {
612            opacity: "1";
613        }
614        :focus {
615            outline: "none";
616        }
617    }
618
619    // ═══════════════════════════════════════════════════════════════════════════
620    // Button Controls Container
621    // ═══════════════════════════════════════════════════════════════════════════
622
623    pub c_button_controls {
624        display: "flex";
625        flex-wrap: "wrap";
626        gap: var!(gap-element);
627        margin-top: var!(gap-component);
628    }
629
630    // ═══════════════════════════════════════════════════════════════════════════
631    // Euv Button Variants
632    // ═══════════════════════════════════════════════════════════════════════════
633
634    pub c_euv_button_primary_md {
635        display: "flex";
636        justify-content: "center";
637        align-items: "center";
638        gap: var!(space-sm);
639        flex: "1 1 120px";
640        height: "42px";
641        padding: format!("0px {}", var!(space-xl));
642        background: var!(accent);
643        color: var!(text-on-accent);
644        cursor: "pointer";
645        font-size: var!(font-base);
646        font-weight: "500";
647        outline: "none";
648        white-space: "nowrap";
649        user-select: "none";
650        -webkit-user-select: "none";
651        box-sizing: "border-box";
652        :hover {
653            background: var!(accent);
654        }
655        :focus-visible {
656            outline: "none";
657        }
658        :disabled {
659            background: var!(muted-foreground);
660            cursor: "not-allowed";
661            opacity: "1";
662        }
663        :active {
664            background: var!(accent);
665            color: var!(text-on-accent);
666            border-color: var!(text-on-accent);
667        }
668    }
669
670    pub c_euv_button_outline_md {
671        display: "flex";
672        justify-content: "center";
673        align-items: "center";
674        gap: var!(space-sm);
675        flex: "1 1 120px";
676        height: "42px";
677        padding: format!("0px {}", var!(space-xl));
678        color: var!(foreground);
679        border: format!("1px solid {}", var!(border));
680        cursor: "pointer";
681        font-size: var!(font-base);
682        font-weight: "500";
683        outline: "none";
684        white-space: "nowrap";
685        user-select: "none";
686        -webkit-user-select: "none";
687        box-sizing: "border-box";
688        :hover {
689            background: var!(accent-muted);
690            border-color: var!(accent);
691            color: var!(accent);
692        }
693        :focus-visible {
694            outline: "none";
695        }
696        :active {
697            background: "transparent";
698            color: var!(foreground);
699            border-color: var!(border);
700        }
701    }
702
703    // ═══════════════════════════════════════════════════════════════════════════
704    // Badges
705    // ═══════════════════════════════════════════════════════════════════════════
706
707    pub c_badge {
708        display: "inline-flex";
709        justify-content: "center";
710        align-items: "center";
711        color: var!(text-on-accent);
712        padding: format!("{} {}", var!(space-2xs), var!(space-sm));
713        border: format!("1px solid {}", var!(accent));
714        font-size: var!(font-xs);
715        font-weight: "600";
716        cursor: "pointer";
717        text-align: "center";
718        background: var!(accent);
719        :focus-visible {
720            outline: "none";
721        }
722        @media ((max-width: 767px)) {
723            padding: format!("{} {}", var!(space-2xs), var!(space-xs));
724            font-size: var!(font-xs);
725        }
726    }
727
728    pub c_badge_outline {
729        display: "inline-flex";
730        justify-content: "center";
731        align-items: "center";
732        color: var!(foreground);
733        padding: format!("{} {}", var!(space-2xs), var!(space-sm));
734        font-size: var!(font-xs);
735        font-weight: "600";
736        cursor: "pointer";
737        text-align: "center";
738        border: format!("1.5px solid {}", var!(border));
739        @media ((max-width: 767px)) {
740            padding: format!("{} {}", var!(space-2xs), var!(space-xs));
741            font-size: var!(font-xs);
742        }
743    }
744
745    pub c_euv_tag_solid_black {
746        display: "inline-flex";
747        align-items: "center";
748        justify-content: "center";
749        color: var!(text-on-accent);
750        padding: format!("{} {}", var!(space-xs), var!(space-md));
751        font-size: var!(font-sm);
752        font-weight: "600";
753        cursor: "pointer";
754        background: var!(accent);
755        border: format!("1px solid {}", var!(accent));
756    }
757
758    pub c_euv_tag_solid_white {
759        display: "inline-flex";
760        align-items: "center";
761        justify-content: "center";
762        color: var!(foreground);
763        padding: format!("{} {}", var!(space-2xs), var!(space-sm));
764        font-size: var!(font-xs);
765        font-weight: "600";
766        cursor: "pointer";
767        border: format!("1.5px solid {}", var!(accent));
768    }
769
770    // ═══════════════════════════════════════════════════════════════════════════
771    // Euv Tag Variants (semantic colour tags)
772    // ═══════════════════════════════════════════════════════════════════════════
773
774    pub c_euv_tag_outline_black {
775        display: "inline-flex";
776        justify-content: "center";
777        align-items: "center";
778        color: var!(accent);
779        padding: format!("{} {}", var!(space-2xs), var!(space-sm));
780        font-size: var!(font-xs);
781        font-weight: "600";
782        cursor: "pointer";
783        border: format!("1.5px solid {}", var!(accent));
784    }
785
786    pub c_euv_tag_outline_white {
787        display: "inline-flex";
788        justify-content: "center";
789        align-items: "center";
790        color: var!(foreground);
791        padding: format!("{} {}", var!(space-xs), var!(space-md));
792        font-size: var!(font-sm);
793        font-weight: "600";
794        cursor: "pointer";
795        border: format!("1.5px solid {}", var!(border));
796    }
797
798    // ═══════════════════════════════════════════════════════════════════════════
799    // Form Elements
800    // ═══════════════════════════════════════════════════════════════════════════
801
802    pub c_euv_input_wrapper {
803        width: "100%";
804        margin: format!("{} 0px", var!(gap-element));
805    }
806
807    pub c_form_label {
808        display: "block";
809        margin-bottom: var!(space-sm);
810        color: "inherit";
811        font-weight: "500";
812        font-size: var!(font-base);
813    }
814
815    pub c_inline_input_row {
816        display: "flex";
817        align-items: "center";
818        gap: var!(gap-component);
819    }
820
821    pub c_euv_input {
822        width: "100%";
823        min-height: var!(min-height-base);
824        padding: format!("0px {}", var!(space-lg));
825        border: format!("1px solid {}", var!(border));
826        font-size: var!(font-base);
827        line-height: "normal";
828        box-sizing: "border-box";
829        outline: "none";
830        color: var!(foreground);
831        appearance: "none";
832        -webkit-appearance: "none";
833        -moz-appearance: "none";
834        vertical-align: "middle";
835        :hover {
836            border-color: var!(accent);
837            background: var!(accent-muted);
838        }
839        :focus {
840            outline: "none";
841            border-color: var!(accent);
842            background: var!(accent-muted);
843        }
844    }
845
846    pub c_euv_input_no_transition {
847        width: "100%";
848        min-height: var!(min-height-base);
849        padding: format!("0px {}", var!(space-lg));
850        border: format!("1px solid {}", var!(border));
851        font-size: var!(font-base);
852        line-height: "normal";
853        box-sizing: "border-box";
854        outline: "none";
855        color: var!(foreground);
856        appearance: "none";
857        -webkit-appearance: "none";
858        -moz-appearance: "none";
859        vertical-align: "middle";
860    }
861
862    pub c_euv_input_error {
863        width: "100%";
864        min-height: var!(min-height-base);
865        padding: format!("0px {}", var!(space-lg));
866        border: format!("1px solid {}", var!(foreground));
867        font-size: var!(font-base);
868        line-height: "normal";
869        box-sizing: "border-box";
870        outline: "none";
871        color: var!(foreground);
872        appearance: "none";
873        -webkit-appearance: "none";
874        -moz-appearance: "none";
875        vertical-align: "middle";
876        :focus {
877            outline: "none";
878            border-color: var!(foreground);
879        }
880    }
881
882    pub c_form_checkbox {
883        cursor: "pointer";
884        width: var!(space-lg);
885        height: var!(space-lg);
886    }
887
888    pub c_form_checkbox_label {
889        font-size: var!(font-base);
890        color: "inherit";
891        cursor: "pointer";
892    }
893
894    pub c_form_checkbox_row {
895        margin: format!("{} 0px", var!(gap-component));
896        display: "flex";
897        align-items: "center";
898        gap: var!(gap-element);
899    }
900
901    pub c_select_input {
902        width: "100%";
903        min-height: var!(min-height-base);
904        padding: format!("0px {}", var!(space-lg));
905        border: format!("1px solid {}", var!(border));
906        font-size: var!(font-base);
907        line-height: "normal";
908        box-sizing: "border-box";
909        outline: "none";
910        cursor: "pointer";
911        appearance: "none";
912        -webkit-appearance: "none";
913        -moz-appearance: "none";
914        color: var!(foreground);
915        vertical-align: "middle";
916        background-image: "url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='currentColor' d='M6 8L1 3h10z'/%3E%3C/svg%3E\")";
917        background-repeat: "no-repeat";
918        background-position: "right 14px center";
919        :focus {
920            outline: "none";
921            border-color: var!(accent);
922            background: var!(accent-muted);
923        }
924    }
925
926    pub c_textarea_input {
927        width: "100%";
928        max-width: "100%";
929        padding: format!("{} {}", var!(space-md), var!(space-lg));
930        border: format!("1px solid {}", var!(border));
931        font-size: var!(font-base);
932        line-height: "normal";
933        box-sizing: "border-box";
934        outline: "none";
935        resize: "vertical";
936        overflow-x: "hidden";
937        word-wrap: "break-word";
938        font-family: "inherit";
939        color: var!(foreground);
940        appearance: "none";
941        -webkit-appearance: "none";
942        -moz-appearance: "none";
943        :hover {
944            border-color: var!(accent);
945            background: var!(accent-muted);
946        }
947        :focus {
948            outline: "none";
949            border-color: var!(accent);
950            background: var!(accent-muted);
951        }
952    }
953
954    pub c_textarea_input_error {
955        width: "100%";
956        max-width: "100%";
957        padding: format!("{} {}", var!(space-md), var!(space-lg));
958        border: format!("1px solid {}", var!(foreground));
959        font-size: var!(font-base);
960        line-height: "normal";
961        box-sizing: "border-box";
962        outline: "none";
963        resize: "vertical";
964        overflow-x: "hidden";
965        word-wrap: "break-word";
966        font-family: "inherit";
967        color: var!(foreground);
968        appearance: "none";
969        -webkit-appearance: "none";
970        -moz-appearance: "none";
971        :focus {
972            outline: "none";
973            border-color: var!(foreground);
974        }
975    }
976
977    pub c_textarea_counter {
978        text-align: "right";
979        margin-top: var!(space-xs);
980        margin-bottom: var!(gap-component);
981    }
982
983    pub c_textarea_counter_text {
984        font-size: var!(font-sm);
985        color: "inherit";
986        opacity: "1";
987    }
988
989    pub c_field_error_text {
990        color: var!(foreground);
991        font-size: var!(font-base);
992        margin-top: var!(space-xs);
993        margin-bottom: var!(space-sm);
994    }
995
996    // ═══════════════════════════════════════════════════════════════════════════
997    // Status Boxes
998    // ═══════════════════════════════════════════════════════════════════════════
999
1000    pub c_error_box {
1001        margin: format!("{} 0px", var!(gap-component));
1002        background: var!(accent-muted);
1003        color: var!(foreground);
1004        font-size: var!(font-base);
1005        box-sizing: "border-box";
1006    }
1007
1008    pub c_success_box {
1009        margin: format!("{} 0px", var!(gap-component));
1010        background: var!(accent-muted);
1011        color: var!(foreground);
1012        font-size: var!(font-base);
1013        box-sizing: "border-box";
1014    }
1015
1016    // ═══════════════════════════════════════════════════════════════════════════
1017    // Counter / Signals Demo
1018    // ═══════════════════════════════════════════════════════════════════════════
1019
1020    pub c_counter_row {
1021        display: "grid";
1022        grid-template-columns: "1fr 1fr";
1023        align-items: "center";
1024        gap: var!(gap-component);
1025        @media ((max-width: 767px)) {
1026            grid-template-columns: "1fr";
1027        }
1028    }
1029
1030    pub c_counter_text {
1031        font-size: var!(font-lg);
1032        color: "inherit";
1033        margin-bottom: var!(gap-component);
1034    }
1035
1036    pub c_counter_value {
1037        font-weight: "700";
1038        color: var!(accent);
1039        font-size: var!(font-2xl);
1040        @media ((max-width: 767px)) {
1041            font-size: var!(font-xl);
1042        }
1043    }
1044
1045    pub c_badge_row {
1046        display: "flex";
1047        gap: var!(gap-inline);
1048        flex-wrap: "wrap";
1049        align-items: "center";
1050    }
1051
1052    pub c_badge_hint {
1053        margin-bottom: var!(gap-component);
1054        color: "inherit";
1055        opacity: "1";
1056        font-size: var!(font-base);
1057    }
1058
1059    // ═══════════════════════════════════════════════════════════════════════════
1060    // Home Page
1061    // ═══════════════════════════════════════════════════════════════════════════
1062
1063    pub c_text_ellipsis {
1064        overflow: "hidden";
1065        text-overflow: "ellipsis";
1066        white-space: "nowrap";
1067    }
1068
1069    pub c_info_row {
1070        display: "flex";
1071        align-items: "center";
1072        gap: var!(space-md);
1073        padding: format!("{} 0", var!(space-sm));
1074        overflow: "hidden";
1075    }
1076
1077    pub c_info_label {
1078        font-size: var!(font-sm);
1079        font-weight: "500";
1080        color: var!(muted-foreground);
1081        min-width: "72px";
1082        flex-shrink: "0";
1083        letter-spacing: "0.02em";
1084    }
1085
1086    pub c_info_value {
1087        c_text_ellipsis();
1088        font-size: var!(font-base);
1089        font-weight: "600";
1090        color: var!(foreground);
1091        font-family: "ui-monospace, monospace";
1092        flex: "1";
1093    }
1094
1095    pub c_info_link {
1096        c_text_ellipsis();
1097        font-size: var!(font-base);
1098        font-weight: "600";
1099        color: var!(accent);
1100        font-family: "ui-monospace, monospace";
1101        flex: "1";
1102        text-decoration: "none";
1103        transition: format!("opacity {} {}", var!(duration-fast), var!(ease-out));
1104        :hover {
1105            opacity: "1";
1106        }
1107    }
1108
1109    // ═══════════════════════════════════════════════════════════════════════════
1110    // Camera Page
1111    // ═══════════════════════════════════════════════════════════════════════════
1112
1113    pub c_camera_video_container {
1114        margin: format!("{} 0", var!(space-lg));
1115    }
1116
1117    pub c_camera_video_active {
1118        width: "100%";
1119        background: "#000";
1120        aspect-ratio: "16 / 9";
1121        object-fit: "cover";
1122        border: format!("2px solid {}", var!(accent));
1123        box-sizing: "border-box";
1124    }
1125
1126    pub c_camera_video_hidden {
1127        width: "100%";
1128        aspect-ratio: "16 / 9";
1129        display: "none";
1130    }
1131
1132    pub c_camera_video_placeholder {
1133        width: "100%";
1134        aspect-ratio: "16 / 9";
1135        border: format!("2px dashed {}", var!(border));
1136        display: "flex";
1137        align-items: "center";
1138        justify-content: "center";
1139        box-sizing: "border-box";
1140    }
1141
1142    pub c_camera_placeholder_content {
1143        display: "flex";
1144        flex-direction: "column";
1145        align-items: "center";
1146        gap: var!(space-md);
1147    }
1148
1149    pub c_camera_placeholder_icon {
1150        font-size: var!(font-4xl);
1151        opacity: "1";
1152    }
1153
1154    pub c_camera_placeholder_text {
1155        font-size: var!(font-base);
1156        color: "inherit";
1157        opacity: "1";
1158    }
1159
1160    pub c_camera_error_box {
1161        margin: format!("{} 0px", var!(gap-component));
1162        color: var!(foreground);
1163        font-size: var!(font-base);
1164        word-break: "break-all";
1165        overflow-wrap: "break-word";
1166        box-sizing: "border-box";
1167    }
1168
1169    pub c_camera_scan_result_box {
1170        margin-top: var!(gap-component);
1171        box-sizing: "border-box";
1172    }
1173
1174    pub c_camera_scan_result_label {
1175        font-size: var!(font-sm);
1176        font-weight: "600";
1177        color: var!(foreground);
1178        margin-bottom: var!(space-xs);
1179    }
1180
1181    pub c_camera_scan_result_value {
1182        font-size: var!(font-base);
1183        color: "inherit";
1184        word-break: "break-all";
1185        overflow-wrap: "break-word";
1186    }
1187
1188    // ═══════════════════════════════════════════════════════════════════════════
1189    // Canvas Drawing Board
1190    // ═══════════════════════════════════════════════════════════════════════════
1191
1192    pub c_canvas_preview_container {
1193        margin: format!("{} 0", var!(space-lg));
1194        overflow: "hidden";
1195        border: format!("2px solid {}", var!(border));
1196        background: "#ffffff";
1197        aspect-ratio: "9 / 16";
1198        display: "flex";
1199        align-items: "center";
1200        justify-content: "center";
1201        box-sizing: "border-box";
1202    }
1203
1204    pub c_canvas_placeholder {
1205        color: var!(muted-foreground);
1206        font-size: var!(font-sm);
1207        text-align: "center";
1208        padding: var!(space-lg);
1209    }
1210
1211    pub c_canvas_preview_image {
1212        width: "100%";
1213        height: "100%";
1214        object-fit: "cover";
1215        display: "block";
1216    }
1217
1218    pub c_canvas_container_fullscreen {
1219        width: "100%";
1220        height: "100%";
1221        background: var!(background);
1222        display: "flex";
1223        flex-direction: "column";
1224        position: "fixed";
1225        top: "0";
1226        left: "0";
1227        z-index: "10002";
1228        padding: format!("{} {} {} {}", var!(padding-shell-top), var!(space-lg), var!(padding-shell-bottom), var!(space-lg));
1229        box-sizing: "border-box";
1230    }
1231
1232    pub c_canvas_drawing_fullscreen_wrapper {
1233        flex: "1";
1234        display: "flex";
1235        align-items: "center";
1236        justify-content: "center";
1237        overflow: "hidden";
1238        padding: var!(space-xs);
1239    }
1240
1241    pub c_canvas_drawing_fullscreen {
1242        border: format!("2px solid {}", var!(border));
1243        display: "block";
1244        cursor: "crosshair";
1245        touch-action: "none";
1246    }
1247
1248    pub c_canvas_fullscreen_toolbar {
1249        display: "flex";
1250        flex-direction: "column";
1251        align-items: "stretch";
1252        width: "100%";
1253        padding: format!("{} {}", var!(space-xs), "0px");
1254        flex-shrink: "0";
1255        gap: var!(space-xs);
1256    }
1257
1258    pub c_canvas_fullscreen_toolbar_row_top {
1259        display: "flex";
1260        align-items: "center";
1261        height: var!(mobile-header-height);
1262        width: "100%";
1263        gap: var!(space-sm);
1264    }
1265
1266    pub c_canvas_fullscreen_toolbar_color_wrapper {
1267        display: "flex";
1268        align-items: "center";
1269        justify-content: "center";
1270        flex: "1";
1271        min-width: "0";
1272    }
1273
1274    pub c_canvas_color_input_fullscreen {
1275        width: "100%";
1276        height: "42px";
1277        border: format!("1px solid {}", var!(border));
1278        cursor: "pointer";
1279        padding: format!("{}", var!(space-xs));
1280    }
1281
1282    pub c_canvas_fullscreen_toolbar_row_bottom {
1283        display: "flex";
1284        align-items: "center";
1285        width: "100%";
1286    }
1287
1288    pub c_canvas_fullscreen_range_input {
1289        flex: "1 1 0%";
1290        min-width: "120px";
1291        cursor: "pointer";
1292        -webkit-appearance: "none";
1293        appearance: "none";
1294        border: "none";
1295        outline: "none";
1296        height: "24px";
1297        ::-webkit-slider-runnable-track {
1298            height: "6px";
1299            background: format!("linear-gradient(to right, {} 0%, {} var(--value,50%), {} var(--value,50%), {} 100%)", var!(foreground), var!(foreground), var!(border), var!(border));
1300            border-radius: "3px";
1301            border: "none";
1302        }
1303        ::-webkit-slider-thumb {
1304            width: "20px";
1305            height: "20px";
1306            background: var!(background);
1307            border: format!("2px solid {}", var!(accent));
1308            border-radius: "50%";
1309            cursor: "pointer";
1310            -webkit-appearance: "none";
1311            margin-top: "-7px";
1312        }
1313        ::-moz-range-track {
1314            height: "6px";
1315            background: format!("linear-gradient(to right, {} 0%, {} var(--value,50%), {} var(--value,50%), {} 100%)", var!(foreground), var!(foreground), var!(border), var!(border));
1316            border-radius: "3px";
1317            border: "none";
1318        }
1319        ::-moz-range-thumb {
1320            width: "20px";
1321            height: "20px";
1322            background: var!(background);
1323            border: format!("2px solid {}", var!(accent));
1324            border-radius: "50%";
1325            cursor: "pointer";
1326        }
1327    }
1328
1329    pub c_canvas_fullscreen_toolbar_button {
1330        flex: "0 0 auto";
1331        overflow: "hidden";
1332    }
1333
1334    // ═══════════════════════════════════════════════════════════════════════════
1335    // Custom Attrs Demo
1336    // ═══════════════════════════════════════════════════════════════════════════
1337
1338    pub c_custom_attrs_demo {
1339        color: "inherit";
1340        box-sizing: "border-box";
1341    }
1342
1343    pub c_demo_text {
1344        color: "inherit";
1345        margin-bottom: var!(gap-component);
1346    }
1347
1348    pub c_demo_text_muted {
1349        color: "inherit";
1350        opacity: "1";
1351        font-size: var!(font-base);
1352        margin-bottom: "0px";
1353    }
1354
1355    // ═══════════════════════════════════════════════════════════════════════════
1356    // Async / Loading States
1357    // ═══════════════════════════════════════════════════════════════════════════
1358
1359    pub c_loading_container {
1360        display: "flex";
1361        align-items: "center";
1362        justify-content: "center";
1363        gap: var!(gap-component);
1364        margin: format!("{} 0px", var!(gap-component));
1365        box-sizing: "border-box";
1366    }
1367
1368    pub c_spinner {
1369        width: "28px";
1370        height: "28px";
1371        border: format!("3px solid {}", var!(accent-muted));
1372        border-top: format!("3px solid {}", var!(accent));
1373        border-radius: "50%";
1374        flex-shrink: "0";
1375        animation: "euv-spin 0.8s linear infinite";
1376    }
1377
1378    pub c_loading_text_col {
1379        display: "flex";
1380        flex-direction: "column";
1381        gap: var!(space-xs);
1382    }
1383
1384    pub c_loading_title {
1385        color: var!(foreground);
1386        font-size: var!(font-md);
1387        font-weight: "500";
1388    }
1389
1390    pub c_loading_subtitle {
1391        color: var!(muted-foreground);
1392        font-size: var!(font-base);
1393    }
1394
1395    pub c_loading_overlay(background: &str) {
1396        position: "absolute";
1397        top: "0";
1398        left: "0";
1399        width: "100%";
1400        height: "100%";
1401        display: "flex";
1402        flex-direction: "column";
1403        align-items: "center";
1404        justify-content: "center";
1405        gap: var!(gap-component);
1406        background: background;
1407        z-index: "1";
1408        box-sizing: "border-box";
1409    }
1410
1411    pub c_error_container {
1412        display: "flex";
1413        align-items: "center";
1414        gap: var!(gap-element);
1415        margin-top: var!(gap-component);
1416        box-sizing: "border-box";
1417    }
1418
1419    pub c_error_icon {
1420        width: "20px";
1421        height: "20px";
1422        display: "flex";
1423        align-items: "center";
1424        justify-content: "center";
1425        flex-shrink: "0";
1426        color: var!(foreground);
1427        font-size: var!(font-sm);
1428        font-weight: "700";
1429    }
1430
1431    pub c_error_text {
1432        color: var!(foreground);
1433        font-size: var!(font-base);
1434    }
1435
1436    pub c_data_box {
1437        margin: format!("{} 0px", var!(gap-component));
1438        box-sizing: "border-box";
1439    }
1440
1441    pub c_data_pre {
1442        color: var!(foreground);
1443        font-size: var!(font-base);
1444        margin: "0px";
1445        white-space: "pre-wrap";
1446        word-break: "break-all";
1447        font-family: "ui-monospace, monospace";
1448    }
1449
1450    pub c_fetch_hint {
1451        color: "inherit";
1452        opacity: "1";
1453        font-size: var!(font-base);
1454        margin-bottom: var!(gap-component);
1455    }
1456
1457    // ═══════════════════════════════════════════════════════════════════════════
1458    // Conditional Rendering Demo
1459    // ═══════════════════════════════════════════════════════════════════════════
1460
1461    pub c_toggle_content {
1462        margin-top: var!(gap-component);
1463        color: "inherit";
1464    }
1465
1466    pub c_toggle_title {
1467        margin-top: "0px";
1468        color: var!(accent);
1469        font-size: var!(font-md);
1470    }
1471
1472    pub c_role_button_row {
1473        display: "flex";
1474        flex-wrap: "wrap";
1475        gap: var!(gap-element);
1476        margin-bottom: var!(gap-component);
1477    }
1478
1479    pub c_role_guest_text {
1480        color: var!(foreground);
1481        font-size: var!(font-base);
1482    }
1483
1484    pub c_role_user_text {
1485        color: var!(foreground);
1486        font-size: var!(font-base);
1487    }
1488
1489    pub c_role_admin_text {
1490        color: var!(foreground);
1491        font-size: var!(font-base);
1492    }
1493
1494    // ═══════════════════════════════════════════════════════════════════════════
1495    // Tabs
1496    // ═══════════════════════════════════════════════════════════════════════════
1497
1498    pub c_tab_bar {
1499        display: "flex";
1500        border-bottom: format!("1px dashed {}", var!(border));
1501        margin-bottom: var!(gap-component);
1502        gap: var!(gap-element);
1503        @media ((max-width: 767px)) {
1504            flex-wrap: "wrap";
1505        }
1506    }
1507
1508    pub c_tab_item_active {
1509        padding: format!("{} {}", var!(space-md), var!(space-xl));
1510        cursor: "pointer";
1511        border-bottom: format!("2px solid {}", var!(accent));
1512        color: var!(text-on-accent);
1513        background: var!(accent);
1514        font-size: var!(font-base);
1515        font-weight: "500";
1516    }
1517
1518    pub c_tab_item_inactive {
1519        padding: format!("{} {}", var!(space-md), var!(space-xl));
1520        cursor: "pointer";
1521        border-bottom: "2px solid transparent";
1522        color: "inherit";
1523        font-size: var!(font-base);
1524        font-weight: "500";
1525        :hover {
1526            background: var!(accent-muted);
1527            color: var!(accent);
1528        }
1529    }
1530
1531    pub c_tab_content {
1532        padding: format!("{} 0px", var!(gap-element));
1533    }
1534
1535    pub c_tab_text {
1536        color: "inherit";
1537        font-size: var!(font-base);
1538        margin-bottom: var!(gap-element);
1539    }
1540
1541    pub c_tab_text_muted {
1542        color: "inherit";
1543        opacity: "1";
1544        font-size: var!(font-base);
1545    }
1546
1547    pub c_tab_text_input {
1548        color: "inherit";
1549        font-size: var!(font-base);
1550        margin-bottom: var!(gap-component);
1551    }
1552
1553    // ═══════════════════════════════════════════════════════════════════════════
1554    // List
1555    // ═══════════════════════════════════════════════════════════════════════════
1556
1557    pub c_list_input {
1558        width: "100%";
1559        flex: "1";
1560        height: "42px";
1561        padding: format!("0px {}", var!(space-lg));
1562        border: format!("1px solid {}", var!(border));
1563        font-size: var!(font-base);
1564        line-height: "normal";
1565        box-sizing: "border-box";
1566        outline: "none";
1567        color: var!(foreground);
1568        appearance: "none";
1569        -webkit-appearance: "none";
1570        -moz-appearance: "none";
1571        vertical-align: "middle";
1572        :hover {
1573            border-color: var!(accent);
1574            background: var!(accent-muted);
1575        }
1576        :focus {
1577            outline: "none";
1578            border-color: var!(accent);
1579            background: var!(accent-muted);
1580        }
1581    }
1582
1583    pub c_list_input_error {
1584        width: "100%";
1585        flex: "1";
1586        height: "42px";
1587        padding: format!("0px {}", var!(space-lg));
1588        border: format!("1px solid {}", var!(foreground));
1589        font-size: var!(font-base);
1590        line-height: "normal";
1591        box-sizing: "border-box";
1592        outline: "none";
1593        color: var!(foreground);
1594        appearance: "none";
1595        -webkit-appearance: "none";
1596        -moz-appearance: "none";
1597        vertical-align: "middle";
1598        :focus {
1599            outline: "none";
1600            border-color: var!(foreground);
1601        }
1602    }
1603
1604    pub c_list_error_text {
1605        color: var!(foreground);
1606        font-size: var!(font-base);
1607        margin: format!("{} 0px", var!(gap-element));
1608    }
1609
1610    pub c_inline_input_button_wrap {
1611        flex-shrink: "0";
1612    }
1613
1614    pub c_list_ul {
1615        list-style: "none";
1616        padding: "0px";
1617        margin: "0px";
1618        margin-top: var!(gap-component);
1619    }
1620
1621    pub c_list_item {
1622        display: "flex";
1623        justify-content: "space-between";
1624        align-items: "center";
1625        gap: var!(gap-component);
1626        min-height: var!(min-height-base);
1627        margin: format!("{} 0px", var!(gap-element));
1628    }
1629
1630    pub c_list_item_text {
1631        flex: "1";
1632        overflow: "hidden";
1633        text-overflow: "ellipsis";
1634        white-space: "nowrap";
1635        font-size: var!(font-base);
1636        color: "inherit";
1637        min-width: "0";
1638    }
1639
1640    pub c_list_item_button {
1641        max-width: "120px";
1642        flex-shrink: "0";
1643    }
1644
1645    // ═══════════════════════════════════════════════════════════════════════════
1646    // Log / Console Display
1647    // ═══════════════════════════════════════════════════════════════════════════
1648
1649    pub c_log_container {
1650        font-family: "ui-monospace, monospace";
1651        font-size: var!(font-base);
1652        margin-top: "0px";
1653        color: var!(foreground);
1654    }
1655
1656    pub c_log_item {
1657        padding: format!("{} 0px", var!(space-sm));
1658        font-size: var!(font-base);
1659        color: var!(foreground);
1660    }
1661
1662    // ═══════════════════════════════════════════════════════════════════════════
1663    // 404 Not Found
1664    // ═══════════════════════════════════════════════════════════════════════════
1665
1666    pub c_render_count_text {
1667        font-size: var!(font-lg);
1668        color: "inherit";
1669        margin-bottom: var!(gap-component);
1670    }
1671
1672    // ═══════════════════════════════════════════════════════════════════════════
1673    // Event Demo
1674    // ═══════════════════════════════════════════════════════════════════════════
1675
1676    pub c_event_result {
1677        font-size: var!(font-base);
1678        color: "inherit";
1679        margin-top: var!(gap-element);
1680    }
1681
1682    pub c_event_highlight {
1683        font-weight: "600";
1684        color: var!(accent);
1685    }
1686
1687    pub c_event_info_grid {
1688        display: "grid";
1689        grid-template-columns: "1fr 1fr";
1690        gap: var!(gap-element);
1691        margin-top: var!(gap-component);
1692        @media ((max-width: 767px)) {
1693            grid-template-columns: "1fr";
1694            gap: var!(gap-element);
1695        }
1696    }
1697
1698    pub c_event_info_row {
1699        display: "flex";
1700        align-items: "center";
1701        gap: var!(space-sm);
1702        overflow: "hidden";
1703    }
1704
1705    pub c_event_info_label {
1706        font-size: var!(font-base);
1707        font-weight: "600";
1708        color: var!(foreground);
1709        flex-shrink: "0";
1710    }
1711
1712    pub c_event_info_value {
1713        c_text_ellipsis();
1714        font-size: var!(font-base);
1715        font-weight: "600";
1716        color: var!(accent);
1717        font-family: "ui-monospace, monospace";
1718        flex: "1";
1719    }
1720
1721    pub c_event_mouse_area {
1722        min-height: "120px";
1723        padding: format!("{} 0px", var!(space-xl));
1724        border: format!("2px dashed {}", var!(border));
1725        cursor: "crosshair";
1726        text-align: "center";
1727        user-select: "none";
1728        color: "inherit";
1729    }
1730
1731    pub c_event_drag_zone {
1732        min-height: "100px";
1733        padding: format!("{} 0px", var!(space-xl));
1734        border: format!("2px dashed {}", var!(border));
1735        text-align: "center";
1736        user-select: "none";
1737        color: var!(foreground);
1738    }
1739
1740    pub c_event_drag_zone_active {
1741        min-height: "100px";
1742        padding: format!("{} 0px", var!(space-xl));
1743        border: format!("2px dashed {}", var!(border));
1744        text-align: "center";
1745        user-select: "none";
1746        color: var!(foreground);
1747    }
1748
1749    pub c_event_drag_item {
1750        display: "inline-block";
1751        padding: format!("{} {}", var!(space-sm), var!(space-xl));
1752        background: var!(accent);
1753        color: var!(text-on-accent);
1754        font-size: var!(font-base);
1755        font-weight: "500";
1756        cursor: "grab";
1757        margin: var!(space-sm);
1758    }
1759
1760    pub c_event_drop_zone {
1761        border: format!("2px dashed {}", var!(border));
1762        padding: format!("{} {}", var!(space-4xl), var!(space-xl));
1763        text-align: "center";
1764        cursor: "pointer";
1765    }
1766
1767    pub c_event_drop_zone_active {
1768        border: format!("2px dashed {}", var!(accent));
1769        padding: format!("{} {}", var!(space-4xl), var!(space-xl));
1770        text-align: "center";
1771        cursor: "pointer";
1772        background: var!(accent-muted);
1773    }
1774
1775    pub c_event_drop_icon {
1776        font-size: var!(font-5xl);
1777        display: "block";
1778        padding-bottom: var!(space-md);
1779    }
1780
1781    pub c_event_drop_text {
1782        font-size: var!(font-lg);
1783        font-weight: "500";
1784        color: "inherit";
1785        padding-bottom: var!(space-md);
1786    }
1787
1788    pub c_event_drop_hint {
1789        font-size: var!(font-base);
1790        color: "inherit";
1791        opacity: "1";
1792        margin: "0px";
1793    }
1794
1795    pub c_event_wheel_zone {
1796        min-height: "120px";
1797        padding: format!("{} 0px", var!(space-xl));
1798        border: format!("2px dashed {}", var!(border));
1799        text-align: "center";
1800        overflow: "auto";
1801        color: var!(foreground);
1802    }
1803
1804    pub c_event_clipboard_area {
1805        color: var!(foreground);
1806    }
1807
1808    pub c_event_touch_zone {
1809        min-height: "120px";
1810        padding: format!("{} 0px", var!(space-xl));
1811        border: format!("2px dashed {}", var!(accent));
1812        text-align: "center";
1813        touch-action: "none";
1814        user-select: "none";
1815        color: var!(accent);
1816    }
1817
1818    pub c_event_form_area {
1819        padding: format!("{} 0px", var!(space-lg));
1820        color: var!(foreground);
1821    }
1822
1823    pub c_event_media_area {
1824        padding: format!("{} 0px", var!(space-lg));
1825        color: var!(foreground);
1826        max-width: "100%";
1827        overflow: "hidden";
1828    }
1829
1830    pub c_event_audio {
1831        width: "100%";
1832        max-width: "100%";
1833    }
1834
1835    pub c_event_video_area {
1836        color: var!(foreground);
1837        width: "100%";
1838        overflow: "hidden";
1839    }
1840
1841    pub c_event_video {
1842        width: "100%";
1843        max-width: "100%";
1844    }
1845
1846    pub c_event_image_area {
1847        padding: format!("{} 0px", var!(space-lg));
1848        color: "inherit";
1849        width: "100%";
1850        overflow: "hidden";
1851        display: "flex";
1852        flex-direction: "column";
1853        align-items: "center";
1854        gap: var!(space-md);
1855    }
1856
1857    pub c_event_image {
1858        width: "200px";
1859        max-width: "100%";
1860        object-fit: "contain";
1861        display: "block";
1862    }
1863
1864    pub c_event_url_text {
1865        text-align: "center";
1866        font-size: var!(font-sm);
1867        color: "inherit";
1868        opacity: "1";
1869        font-family: "ui-monospace, monospace";
1870        word-break: "break-all";
1871        width: "100%";
1872    }
1873
1874    // ═══════════════════════════════════════════════════════════════════════════
1875    // Timer Demo
1876    // ═══════════════════════════════════════════════════════════════════════════
1877
1878    pub c_timer_display {
1879        text-align: "center";
1880        padding: var!(space-xl);
1881        margin: format!("{} 0px", var!(gap-component));
1882        color: "inherit";
1883    }
1884
1885    pub c_timer_value {
1886        font-size: var!(font-5xl);
1887        font-weight: "700";
1888        color: var!(accent);
1889        letter-spacing: "0.04em";
1890        font-family: "ui-monospace, monospace";
1891        @media ((max-width: 767px)) {
1892            font-size: var!(font-4xl);
1893        }
1894    }
1895
1896    pub c_timer_controls {
1897        display: "flex";
1898        flex-wrap: "wrap";
1899        gap: var!(gap-element);
1900    }
1901
1902    pub c_timer_done {
1903        text-align: "center";
1904        margin-top: var!(gap-component);
1905        font-size: var!(font-lg);
1906        font-weight: "600";
1907        color: var!(foreground);
1908    }
1909
1910    // ═══════════════════════════════════════════════════════════════════════════
1911    // Modal
1912    // ═══════════════════════════════════════════════════════════════════════════
1913
1914    pub c_modal_overlay {
1915        position: "fixed";
1916        top: "0px";
1917        left: "0px";
1918        width: "100%";
1919        height: "100%";
1920        background: var!(bg-overlay);
1921        contain: "layout style paint";
1922        display: "flex";
1923        align-items: "center";
1924        justify-content: "center";
1925        z-index: "1000";
1926        animation: format!("euv-fade-in {} {}", var!(duration-modal-overlay), var!(ease-out));
1927        @media ((max-width: 767px)) {
1928            align-items: "center";
1929            justify-content: "center";
1930        }
1931    }
1932
1933    pub c_modal_content {
1934        background: var!(background);
1935        padding: "0px";
1936        max-width: "480px";
1937        width: "90%";
1938        animation: format!("euv-scale-in-modal {} {}", var!(duration-modal-content), var!(ease-bounce));
1939        overflow: "hidden";
1940        color: var!(foreground);
1941        box-sizing: "border-box";
1942        @media ((max-width: 767px)) {
1943            max-width: "100%";
1944            width: "calc(100% - 32px)";
1945            max-height: "85vh";
1946            overflow-y: "auto";
1947        }
1948    }
1949
1950    pub c_modal_header {
1951        display: "flex";
1952        justify-content: "space-between";
1953        align-items: "center";
1954        padding: format!("{} {} 0px {}", var!(space-md), var!(space-xl), var!(space-xl));
1955    }
1956
1957    pub c_modal_title {
1958        margin: "0px";
1959        font-size: var!(font-xl);
1960        font-weight: "600";
1961        color: "inherit";
1962    }
1963
1964    pub c_modal_body {
1965        padding: format!("0px {} {} {}", var!(space-xl), var!(space-md), var!(space-xl));
1966        color: "inherit";
1967    }
1968
1969    pub c_modal_actions {
1970        display: "flex";
1971        flex-wrap: "wrap";
1972        gap: var!(space-md);
1973        margin: format!("{} 0px", var!(space-md));
1974    }
1975
1976    // ═══════════════════════════════════════════════════════════════════════════
1977    // Animation Demo
1978    // ═══════════════════════════════════════════════════════════════════════════
1979
1980    pub c_anim_fade_in {
1981        margin-top: var!(gap-component);
1982        animation: format!("euv-fade-in 0.5s {}", var!(ease-out));
1983        font-size: var!(font-base);
1984        color: "inherit";
1985    }
1986
1987    pub c_anim_spin_container {
1988        display: "flex";
1989        justify-content: "center";
1990        align-items: "center";
1991        margin: format!("{} 0px", var!(space-lg));
1992        min-height: "80px";
1993    }
1994
1995    pub c_anim_spin {
1996        font-size: var!(font-5xl);
1997        animation: "euv-spin 1.5s linear infinite";
1998        display: "inline-block";
1999        @media ((max-width: 767px)) {
2000            font-size: var!(font-4xl);
2001        }
2002    }
2003
2004    pub c_anim_spin_stopped {
2005        font-size: var!(font-5xl);
2006        display: "inline-block";
2007        opacity: "1";
2008        @media ((max-width: 767px)) {
2009            font-size: var!(font-4xl);
2010        }
2011    }
2012
2013    pub c_anim_pulse_container {
2014        display: "flex";
2015        justify-content: "center";
2016        align-items: "center";
2017        margin: format!("{} 0px", var!(space-lg));
2018        min-height: "80px";
2019    }
2020
2021    pub c_anim_pulse {
2022        font-size: var!(font-5xl);
2023        animation: "euv-pulse 1.5s ease-in-out infinite";
2024        display: "inline-block";
2025        color: var!(foreground);
2026        @media ((max-width: 767px)) {
2027            font-size: var!(font-4xl);
2028        }
2029    }
2030
2031    pub c_anim_pulse_stopped {
2032        font-size: var!(font-5xl);
2033        display: "inline-block";
2034        opacity: "1";
2035        color: var!(foreground);
2036        @media ((max-width: 767px)) {
2037            font-size: var!(font-4xl);
2038        }
2039    }
2040
2041    pub c_progress_container {
2042        width: "100%";
2043        height: "12px";
2044        margin: format!("{} 0px", var!(space-lg));
2045        overflow: "hidden";
2046    }
2047
2048    pub c_progress_bar_running {
2049        height: "100%";
2050        background: var!(accent);
2051        animation: format!("euv-progress 1.6s {} forwards", var!(ease-in-out));
2052    }
2053
2054    pub c_progress_bar_stopped {
2055        height: "100%";
2056        background: var!(accent);
2057        width: "0%";
2058    }
2059
2060    pub c_anim_scale_box {
2061        margin: format!("{} 0px", var!(gap-component));
2062        padding: var!(space-xl);
2063        background: var!(accent);
2064        cursor: "pointer";
2065        transition: format!("transform {} {}", var!(duration-normal), var!(ease-out));
2066    }
2067
2068    // ═══════════════════════════════════════════════════════════════════════════
2069    // Browser API Demo
2070    // ═══════════════════════════════════════════════════════════════════════════
2071
2072    pub c_browser_api_row {
2073        display: "grid";
2074        grid-template-columns: "1fr 1fr";
2075        gap: var!(gap-component);
2076        margin-bottom: var!(gap-component);
2077        @media ((max-width: 767px)) {
2078            grid-template-columns: "1fr";
2079        }
2080    }
2081
2082    pub c_browser_api_actions {
2083        display: "flex";
2084        flex-wrap: "wrap";
2085        gap: var!(gap-element);
2086        margin: format!("{} 0px", var!(gap-component));
2087    }
2088
2089    pub c_browser_result_box {
2090        margin-top: var!(gap-component);
2091        font-size: var!(font-base);
2092        word-break: "break-all";
2093        color: "inherit";
2094    }
2095
2096    pub c_browser_result_label {
2097        font-weight: "600";
2098        color: var!(accent);
2099    }
2100
2101    pub c_browser_result_value {
2102        color: "inherit";
2103    }
2104
2105    pub c_browser_info_grid {
2106        display: "grid";
2107        gap: var!(gap-component);
2108        margin-top: var!(gap-component);
2109        @media ((max-width: 767px)) {
2110            grid-template-columns: "1fr";
2111        }
2112    }
2113
2114    pub c_browser_info_item {
2115        display: "flex";
2116        flex-direction: "column";
2117        gap: var!(space-xs);
2118        color: "inherit";
2119    }
2120
2121    pub c_browser_info_label {
2122        font-size: var!(font-sm);
2123        font-weight: "600";
2124        color: "inherit";
2125        opacity: "1";
2126        text-transform: "uppercase";
2127        letter-spacing: "0.05em";
2128    }
2129
2130    pub c_browser_info_value {
2131        font-size: var!(font-base);
2132        color: "inherit";
2133        word-break: "break-all";
2134        font-family: "ui-monospace, monospace";
2135    }
2136
2137    // ═══════════════════════════════════════════════════════════════════════════
2138    // VConsole Panel
2139    // ═══════════════════════════════════════════════════════════════════════════
2140
2141    pub c_vconsole_badge {
2142        position: "absolute";
2143        top: "-6px";
2144        right: "-8px";
2145        min-width: "18px";
2146        height: "18px";
2147        background: var!(background);
2148        color: var!(foreground);
2149        font-size: "10px";
2150        font-weight: "600";
2151        display: "flex";
2152        align-items: "center";
2153        justify-content: "center";
2154        padding: format!("0px {}", var!(space-xs));
2155        border: format!("1px solid {}", var!(accent));
2156        pointer-events: "none";
2157        transition: format!("transform {} {}, opacity {} {}", var!(duration-normal), var!(ease-out), var!(duration-normal), var!(ease-out));
2158    }
2159
2160    pub c_vconsole_overlay {
2161        position: "fixed";
2162        top: "0px";
2163        left: "0px";
2164        right: "0px";
2165        bottom: "0px";
2166        z-index: "10000";
2167        background: var!(bg-overlay);
2168        contain: "layout style paint";
2169        transition: format!("opacity {} {}", var!(duration-overlay), var!(ease-out));
2170    }
2171
2172    pub c_vconsole_overlay_hidden {
2173        opacity: "0";
2174        pointer-events: "none";
2175    }
2176
2177    pub c_vconsole_panel {
2178        position: "fixed";
2179        bottom: "0px";
2180        left: "0px";
2181        right: "0px";
2182        height: format!("calc(76vh - {})", var!(safe-area-inset-bottom));
2183        background: var!(background);
2184        z-index: "10001";
2185        display: "flex";
2186        flex-direction: "column";
2187        contain: "layout style paint";
2188        will-change: "transform";
2189        transition: format!("transform {} {}", var!(duration-overlay), var!(ease-out));
2190        overflow: "hidden";
2191        padding: format!("{} {}", var!(padding-main-top), var!(padding-main-horizontal));
2192        @media ((max-width: 767px)) {
2193            padding: format!("{} {}", var!(space-md), var!(padding-main-horizontal-mobile));
2194        }
2195    }
2196
2197    pub c_vconsole_panel_closed {
2198        transform: "translateY(100%)";
2199        will-change: "auto";
2200    }
2201
2202    pub c_vconsole_fab {
2203        position: "fixed";
2204        bottom: format!("calc(20px + {})", var!(safe-area-inset-bottom));
2205        right: var!(padding-main-horizontal);
2206        z-index: "9999";
2207        @media ((max-width: 767px)) {
2208            bottom: format!("calc(16px + {})", var!(safe-area-inset-bottom));
2209            right: var!(padding-main-horizontal-mobile);
2210        }
2211    }
2212
2213    pub c_vconsole_header {
2214        display: "flex";
2215        justify-content: "space-between";
2216        align-items: "center";
2217        flex-shrink: "0";
2218    }
2219
2220    pub c_vconsole_title {
2221        color: var!(foreground);
2222        font-size: var!(font-md);
2223        font-weight: "600";
2224        margin: "0px";
2225        letter-spacing: "0.03em";
2226        display: "flex";
2227        align-items: "center";
2228        gap: var!(space-sm);
2229    }
2230
2231    pub c_vconsole_title_dot {
2232        width: "8px";
2233        height: "8px";
2234        background: var!(accent);
2235        display: "inline-block";
2236        animation: "euv-pulse 2s ease-in-out infinite";
2237    }
2238
2239    pub c_vconsole_header_actions {
2240        display: "flex";
2241        gap: var!(space-sm);
2242        align-items: "center";
2243    }
2244
2245    pub c_vconsole_clear_button {
2246        display: "inline-flex";
2247        justify-content: "center";
2248        align-items: "center";
2249        color: var!(foreground);
2250        padding: format!("{} {}", var!(space-2xs), var!(space-sm));
2251        font-size: var!(font-xs);
2252        font-weight: "600";
2253        cursor: "pointer";
2254        text-align: "center";
2255        border: format!("1.5px solid {}", var!(border));
2256        margin-left: "auto";
2257        :focus-visible {
2258            outline: "none";
2259        }
2260    }
2261
2262    pub c_vconsole_close_button {
2263        display: "inline-flex";
2264        justify-content: "center";
2265        align-items: "center";
2266        color: var!(foreground);
2267        padding: format!("{} {}", var!(space-xs), var!(space-md));
2268        cursor: "pointer";
2269        font-size: var!(font-sm);
2270        font-weight: "400";
2271        text-align: "center";
2272        white-space: "nowrap";
2273        user-select: "none";
2274        -webkit-user-select: "none";
2275        vertical-align: "middle";
2276        outline: "none";
2277        transition: format!("all {} {}", var!(duration-fast), var!(ease-out));
2278        :hover {
2279            border-color: var!(foreground);
2280            color: var!(foreground);
2281            background: var!(background);
2282        }
2283        :focus-visible {
2284            outline: "none";
2285        }
2286        :active {
2287            background: "transparent";
2288            color: var!(foreground);
2289            border-color: var!(border);
2290        }
2291    }
2292
2293    pub c_vconsole_body {
2294        flex: "1";
2295        overflow-y: "auto";
2296        contain: "content";
2297        padding-bottom: var!(space-md);
2298        font-family: "ui-monospace, monospace";
2299        font-size: var!(font-xs);
2300    }
2301
2302    pub c_vconsole_log_item {
2303        display: "flex";
2304        align-items: "center";
2305        padding: format!("{} 0px", var!(space-sm));
2306        border-bottom: format!("1px dashed {}", var!(border));
2307        color: var!(foreground);
2308        font-size: var!(font-xs);
2309        word-break: "break-all";
2310    }
2311
2312    pub c_vconsole_empty {
2313        color: var!(muted-foreground);
2314        font-size: var!(font-xs);
2315        text-align: "center";
2316        padding: format!("{} 0px", var!(space-4xl));
2317        overflow: "hidden";
2318    }
2319
2320    pub c_vconsole_empty_hidden {
2321        height: "0";
2322        overflow: "hidden";
2323        padding: "0";
2324    }
2325
2326    pub c_vconsole_log_list {
2327        overflow: "hidden";
2328    }
2329
2330    pub c_vconsole_log_list_hidden {
2331        height: "0";
2332        overflow: "hidden";
2333    }
2334
2335    pub c_vconsole_count {
2336        color: var!(muted-foreground);
2337        font-size: var!(font-sm);
2338        font-weight: "400";
2339    }
2340
2341    pub c_vconsole_filter_bar {
2342        display: "flex";
2343        gap: var!(space-sm);
2344        padding: format!("{} 0px", var!(space-sm));
2345        border-bottom: format!("1px dashed {}", var!(border));
2346        flex-shrink: "0";
2347        align-items: "center";
2348    }
2349
2350    pub c_vconsole_filter_badge {
2351        display: "inline-flex";
2352        justify-content: "center";
2353        align-items: "center";
2354        color: var!(text-on-accent);
2355        padding: format!("{} {}", var!(space-2xs), var!(space-sm));
2356        border: format!("1px solid {}", var!(accent));
2357        font-size: var!(font-xs);
2358        font-weight: "600";
2359        cursor: "pointer";
2360        text-align: "center";
2361        background: var!(accent);
2362        :focus-visible {
2363            outline: "none";
2364        }
2365    }
2366
2367    pub c_vconsole_filter_badge_outline {
2368        display: "inline-flex";
2369        justify-content: "center";
2370        align-items: "center";
2371        color: var!(foreground);
2372        padding: format!("{} {}", var!(space-2xs), var!(space-sm));
2373        font-size: var!(font-xs);
2374        font-weight: "600";
2375        cursor: "pointer";
2376        text-align: "center";
2377        border: format!("1.5px solid {}", var!(border));
2378    }
2379
2380    pub c_vconsole_level_badge {
2381        padding: format!("{} {}", var!(space-2xs), var!(space-sm));
2382        font-size: var!(font-xs);
2383        margin-right: var!(space-sm);
2384        letter-spacing: "0.05em";
2385        color: var!(foreground);
2386        border: "1px solid currentColor";
2387        wrap: "nowrap";
2388        flex-shrink: "0";
2389    }
2390
2391    // ═══════════════════════════════════════════════════════════════════════════
2392    // Mobile Layout
2393    // ═══════════════════════════════════════════════════════════════════════════
2394
2395    pub c_mobile_header {
2396        display: "flex";
2397        align-items: "center";
2398        justify-content: "space-between";
2399        padding: format!("0px {}", var!(space-lg));
2400        height: var!(mobile-header-height);
2401        flex-shrink: "0";
2402        position: "sticky";
2403        top: "0px";
2404        z-index: "100";
2405        contain: "content";
2406        border-bottom: format!("1px solid {}", var!(border));
2407    }
2408
2409    pub c_mobile_header_left {
2410        display: "flex";
2411        align-items: "center";
2412        gap: format!("{}", var!(space-md));
2413    }
2414
2415    pub c_mobile_header_logo {
2416        display: "flex";
2417        align-items: "center";
2418        gap: format!("{}", var!(space-sm));
2419        text-decoration: "none";
2420        color: var!(foreground);
2421    }
2422
2423    pub c_mobile_menu_button {
2424        width: "40px";
2425        height: "40px";
2426        border: "none";
2427        cursor: "pointer";
2428        font-size: "22px";
2429        font-weight: "700";
2430        display: "flex";
2431        align-items: "center";
2432        justify-content: "center";
2433        color: var!(foreground);
2434        padding: "0px";
2435        :active {
2436            background: "transparent";
2437            color: var!(foreground);
2438        }
2439    }
2440
2441    pub c_mobile_theme_button {
2442        width: "40px";
2443        height: "40px";
2444        border: "none";
2445        cursor: "pointer";
2446        display: "flex";
2447        align-items: "center";
2448        justify-content: "center";
2449        padding: "0px";
2450        :active {
2451            background: "transparent";
2452        }
2453    }
2454
2455    pub c_mobile_menu_button_active {
2456        width: "40px";
2457        height: "40px";
2458        border: "none";
2459        cursor: "pointer";
2460        font-size: "22px";
2461        font-weight: "700";
2462        display: "flex";
2463        align-items: "center";
2464        justify-content: "center";
2465        color: var!(accent);
2466        padding: "0px";
2467        :active {
2468            background: var!(background);
2469            color: var!(accent);
2470        }
2471    }
2472
2473    pub c_mobile_drawer_close_button {
2474        width: "32px";
2475        height: "32px";
2476        border: "none";
2477        cursor: "pointer";
2478        font-size: "18px";
2479        font-weight: "500";
2480        display: "flex";
2481        align-items: "center";
2482        justify-content: "center";
2483        color: var!(muted-foreground);
2484        padding: "0px";
2485        transition: format!("color {} {}", var!(duration-fast), var!(ease-out));
2486        :hover {
2487            color: var!(foreground);
2488        }
2489        :active {
2490            color: var!(muted-foreground);
2491        }
2492    }
2493
2494    pub c_mobile_overlay {
2495        position: "fixed";
2496        top: "0px";
2497        left: "0px";
2498        width: "100%";
2499        height: "100%";
2500        background: var!(bg-overlay);
2501        z-index: "200";
2502        contain: "layout style paint";
2503        transition: format!("opacity {} {}", var!(duration-overlay), var!(ease-out));
2504    }
2505
2506    pub c_mobile_overlay_hidden {
2507        opacity: "0";
2508        pointer-events: "none";
2509    }
2510
2511    pub c_mobile_nav_drawer {
2512        position: "fixed";
2513        top: "0px";
2514        left: "0px";
2515        width: "240px";
2516        max-width: "100%";
2517        height: "100%";
2518        background: var!(background);
2519        z-index: "201";
2520        display: "flex";
2521        flex-direction: "column";
2522        padding-top: var!(padding-shell-top);
2523        padding-bottom: var!(padding-shell-bottom);
2524        contain: "layout style paint";
2525        will-change: "transform";
2526        transition: format!("transform {} {}", var!(duration-overlay), var!(ease-out));
2527        overflow: "hidden";
2528    }
2529
2530    pub c_mobile_nav_drawer_closed {
2531        transform: "translateX(-100%)";
2532    }
2533
2534    pub c_mobile_nav_drawer_header {
2535        display: "flex";
2536        align-items: "center";
2537        justify-content: "space-between";
2538        padding: format!("0px {}", var!(space-lg));
2539        height: var!(mobile-header-height);
2540        flex-shrink: "0";
2541        position: "relative";
2542        ::after {
2543            content: "''";
2544            position: "absolute";
2545            bottom: "0px";
2546            left: var!(space-lg);
2547            right: var!(space-lg);
2548            height: "1px";
2549            background: format!("linear-gradient(90deg, transparent, {}, transparent)", var!(border));
2550        }
2551    }
2552
2553    pub c_mobile_main {
2554        c_app_main();
2555        ::-webkit-scrollbar {
2556            width: "0px";
2557        }
2558    }
2559
2560    // ═══════════════════════════════════════════════════════════════════════════
2561    // Keep-Alive Demo
2562    // ═══════════════════════════════════════════════════════════════════════════
2563
2564    pub c_keep_alive_tab_bar {
2565        display: "flex";
2566        border-bottom: format!("1px dashed {}", var!(border));
2567        margin-bottom: var!(gap-component);
2568        gap: var!(gap-element);
2569    }
2570
2571    pub c_keep_alive_tab_panel {
2572        padding: format!("{} 0px", var!(gap-element));
2573    }
2574
2575    pub c_keep_alive_panel_title {
2576        margin-top: "0px";
2577        color: var!(accent);
2578        font-size: var!(font-md);
2579        margin-bottom: var!(gap-element);
2580    }
2581
2582    pub c_keep_alive_demo_text {
2583        color: "inherit";
2584        font-size: var!(font-base);
2585        margin-bottom: var!(gap-component);
2586    }
2587
2588    pub c_keep_alive_counter_display {
2589        display: "flex";
2590        justify-content: "center";
2591        align-items: "center";
2592        margin: format!("{} 0px", var!(space-xl));
2593    }
2594
2595    pub c_keep_alive_counter_value {
2596        font-size: var!(font-5xl);
2597        font-weight: "700";
2598        font-variant-numeric: "tabular-nums";
2599        color: var!(accent);
2600        min-width: "120px";
2601        text-align: "center";
2602    }
2603
2604    pub c_keep_alive_counter_controls {
2605        display: "flex";
2606        flex-wrap: "wrap";
2607        gap: format!("{}", var!(space-md));
2608    }
2609
2610    pub c_keep_alive_form_group {
2611        margin-bottom: var!(gap-component);
2612    }
2613
2614    pub c_keep_alive_form_preview {
2615        margin-top: var!(gap-component);
2616        background: var!(accent-muted);
2617    }
2618
2619    pub c_keep_alive_preview_label {
2620        font-size: var!(font-base);
2621        font-weight: "600";
2622        color: var!(accent);
2623        margin: format!("0px 0px {} 0px", var!(space-xs));
2624    }
2625
2626    // ═══════════════════════════════════════════════════════════════════════════
2627    // File Upload
2628    // ═══════════════════════════════════════════════════════════════════════════
2629
2630    pub c_file_upload_input_hidden {
2631        position: "absolute";
2632        width: "1px";
2633        height: "1px";
2634        padding: "0px";
2635        margin: "-1px";
2636        overflow: "hidden";
2637        clip: "rect(0, 0, 0, 0)";
2638        white-space: "nowrap";
2639        border: "0px";
2640    }
2641
2642    pub c_file_upload_options {
2643        margin: format!("{} 0px", var!(gap-component));
2644    }
2645
2646    pub c_file_upload_item {
2647        display: "flex";
2648        align-items: "center";
2649        gap: format!("{}", var!(space-md));
2650        margin: format!("{} 0px", var!(space-sm));
2651        font-size: var!(font-base);
2652        color: "inherit";
2653    }
2654
2655    pub c_file_upload_item_index {
2656        font-size: var!(font-sm);
2657        font-weight: "600";
2658        color: var!(accent);
2659        min-width: "24px";
2660    }
2661
2662    pub c_file_upload_item_name {
2663        color: "inherit";
2664        word-break: "break-all";
2665    }
2666
2667    // ═══════════════════════════════════════════════════════════════════════════
2668    // Binding Demo
2669    // ═══════════════════════════════════════════════════════════════════════════
2670
2671    pub c_binding_child_box {
2672        display: "flex";
2673        flex-direction: "column";
2674        gap: var!(gap-component);
2675        margin-top: var!(gap-component);
2676    }
2677
2678    pub c_binding_child_label {
2679        font-size: var!(font-base);
2680        font-weight: "600";
2681        color: var!(accent);
2682        text-transform: "uppercase";
2683        letter-spacing: "0.05em";
2684    }
2685
2686    pub c_binding_parent_box {
2687        display: "flex";
2688        flex-direction: "column";
2689        gap: var!(gap-component);
2690        margin-top: var!(gap-component);
2691    }
2692
2693    pub c_binding_section_title {
2694        margin-top: var!(gap-component);
2695        margin-bottom: var!(gap-element);
2696        color: var!(accent);
2697        font-size: var!(font-md);
2698        font-weight: "600";
2699    }
2700
2701    pub c_binding_temp_converter {
2702        display: "flex";
2703        align-items: "flex-end";
2704        gap: var!(gap-component);
2705        flex-wrap: "wrap";
2706        margin-top: var!(gap-component);
2707    }
2708
2709    pub c_binding_temp_field {
2710        flex: "1";
2711        min-width: "120px";
2712    }
2713
2714    pub c_binding_temp_arrow {
2715        font-size: "20px";
2716        font-weight: "700";
2717        color: var!(accent);
2718        padding-bottom: "10px";
2719    }
2720
2721    pub c_binding_color_mixer {
2722        margin-top: var!(gap-component);
2723    }
2724
2725    pub c_binding_color_preview {
2726        width: "100%";
2727        height: "80px";
2728        display: "flex";
2729        align-items: "center";
2730        justify-content: "center";
2731        margin-bottom: var!(gap-component);
2732    }
2733
2734    pub c_binding_color_hex {
2735        font-family: "ui-monospace, monospace";
2736        font-size: var!(font-xl);
2737        font-weight: "700";
2738        color: var!(text-on-accent);
2739        letter-spacing: "0.02em";
2740    }
2741
2742    pub c_binding_slider_row {
2743        display: "flex";
2744        align-items: "center";
2745        gap: format!("{}", var!(space-md));
2746        margin-bottom: var!(space-sm);
2747    }
2748
2749    pub c_binding_slider_label {
2750        font-size: var!(font-base);
2751        font-weight: "700";
2752        min-width: var!(font-sm);
2753    }
2754
2755    pub c_binding_slider {
2756        flex: "1";
2757        height: "24px";
2758        padding: "0px";
2759        cursor: "pointer";
2760        -webkit-appearance: "none";
2761        appearance: "none";
2762        border: "none";
2763        outline: "none";
2764        ::-webkit-slider-runnable-track {
2765            height: "6px";
2766            background: format!("linear-gradient(to right, {} 0%, {} var(--value,50%), {} var(--value,50%), {} 100%)", var!(foreground), var!(foreground), var!(border), var!(border));
2767            border-radius: "3px";
2768            border: "none";
2769        }
2770        ::-webkit-slider-thumb {
2771            width: "20px";
2772            height: "20px";
2773            background: var!(background);
2774            border: format!("2px solid {}", var!(accent));
2775            border-radius: "50%";
2776            cursor: "pointer";
2777            -webkit-appearance: "none";
2778            margin-top: "-7px";
2779        }
2780        : active::-webkit-slider-thumb {
2781            transform: "scale(0.92)";
2782        }
2783        ::-moz-range-track {
2784            height: "6px";
2785            background: format!("linear-gradient(to right, {} 0%, {} var(--value,50%), {} var(--value,50%), {} 100%)", var!(foreground), var!(foreground), var!(border), var!(border));
2786            border-radius: "3px";
2787            border: "none";
2788        }
2789        ::-moz-range-thumb {
2790            width: "20px";
2791            height: "20px";
2792            background: var!(background);
2793            border: format!("2px solid {}", var!(accent));
2794            border-radius: "50%";
2795            cursor: "pointer";
2796        }
2797        : active::-moz-range-thumb {
2798            transform: "scale(0.92)";
2799        }
2800    }
2801
2802    pub c_binding_slider_value {
2803        font-size: var!(font-base);
2804        font-weight: "500";
2805        color: "inherit";
2806        min-width: "32px";
2807        text-align: "right";
2808        font-family: "ui-monospace, monospace";
2809    }
2810
2811    pub c_binding_typed_prop_value {
2812        font-family: "ui-monospace, monospace";
2813        font-size: var!(font-base);
2814        font-weight: "600";
2815        color: var!(accent);
2816        padding: format!("1px {}", var!(space-sm));
2817    }
2818
2819    pub c_binding_typed_prop_group {
2820        display: "flex";
2821        align-items: "center";
2822        gap: var!(space-sm);
2823    }
2824
2825    pub c_binding_typed_warning {
2826        font-size: var!(font-base);
2827        font-weight: "500";
2828        color: var!(foreground);
2829        margin-bottom: "0px";
2830    }
2831
2832    pub c_binding_form_label {
2833        display: "block";
2834        color: "inherit";
2835        font-weight: "500";
2836        font-size: var!(font-base);
2837    }
2838
2839    pub c_binding_demo_text {
2840        color: "inherit";
2841        margin: "0px"
2842    }
2843
2844    pub c_binding_compact_button {
2845        display: "inline-flex";
2846        justify-content: "center";
2847        align-items: "center";
2848        height: "42px";
2849        padding: format!("0px {}", var!(space-md));
2850        background: var!(accent);
2851        color: var!(text-on-accent);
2852        border: format!("1px solid {}", var!(accent));
2853        cursor: "pointer";
2854        font-size: var!(font-sm);
2855        font-weight: "600";
2856        outline: "none";
2857        white-space: "nowrap";
2858        user-select: "none";
2859        -webkit-user-select: "none";
2860        box-sizing: "border-box";
2861        :hover {
2862            background: var!(accent);
2863        }
2864        :focus-visible {
2865            outline: "none";
2866        }
2867        :active {
2868            background: var!(accent);
2869            color: var!(text-on-accent);
2870            border-color: var!(accent);
2871        }
2872    }
2873
2874    // ═══════════════════════════════════════════════════════════════════════════
2875    // Custom Attrs - Dynamic Style
2876    // ═══════════════════════════════════════════════════════════════════════════
2877
2878    pub c_attrs_dynamic_demo(prop_key: &str, prop_value: &str) {
2879        {
2880            prop_key
2881        }
2882        : prop_value;
2883        margin-top: var!(gap-component);
2884        color: "inherit";
2885        margin-top: var!(space-md);
2886    }
2887
2888    // ═══════════════════════════════════════════════════════════════════════════
2889    // Dynamic Component Demo
2890    // ═══════════════════════════════════════════════════════════════════════════
2891
2892    pub c_dynamic_component_tab_bar {
2893        display: "flex";
2894        flex-wrap: "wrap";
2895        gap: var!(gap-element);
2896        margin-bottom: var!(gap-component);
2897    }
2898
2899    pub c_dynamic_component_panel {
2900        display: "block";
2901        min-height: var!(min-height-sm);
2902        margin-top: var!(gap-component);
2903    }
2904
2905    // ═══════════════════════════════════════════════════════════════════════════
2906    // Virtual List
2907    // ═══════════════════════════════════════════════════════════════════════════
2908
2909    pub c_virtual_list_status {
2910        display: "flex";
2911        gap: var!(gap-component);
2912        padding: format!("{} 0px", var!(gap-component));
2913        flex-wrap: "nowrap";
2914        overflow: "hidden";
2915        text-overflow: "ellipsis";
2916        white-space: "nowrap";
2917        @media ((max-width: 767px)) {
2918            gap: var!(gap-component-mobile);
2919        }
2920    }
2921
2922    pub c_virtual_list_status_item {
2923        font-size: var!(font-base);
2924        color: "inherit";
2925        overflow: "hidden";
2926        text-overflow: "ellipsis";
2927        white-space: "nowrap";
2928    }
2929
2930    pub c_virtual_list_status_value {
2931        font-weight: "700";
2932        color: var!(accent);
2933        font-family: "ui-monospace, monospace";
2934    }
2935
2936    pub c_virtual_list_container {
2937        flex: "1";
2938        height: "666px";
2939        max-height: "666px";
2940        overflow-y: "auto";
2941    }
2942
2943    pub c_virtual_list_card {
2944        flex: "1";
2945        padding: var!(space-xl);
2946        color: var!(foreground);
2947        display: "flex";
2948        flex-direction: "column";
2949        @media ((max-width: 767px)) {
2950            padding: var!(space-lg);
2951        }
2952    }
2953
2954    pub c_virtual_list_row {
2955        display: "flex";
2956        align-items: "center";
2957        gap: var!(space-lg);
2958        height: "100%";
2959        box-sizing: "border-box";
2960    }
2961
2962    pub c_virtual_list_row_index {
2963        min-width: "36px";
2964        font-size: var!(font-sm);
2965        font-weight: "600";
2966        color: var!(accent);
2967        font-family: "ui-monospace, monospace";
2968        flex-shrink: "0";
2969        display: "flex";
2970        align-items: "center";
2971    }
2972
2973    pub c_virtual_list_row_label {
2974        font-size: var!(font-base);
2975        font-weight: "500";
2976        color: "inherit";
2977        min-width: "120px";
2978        flex-shrink: "0";
2979        overflow: "hidden";
2980        text-overflow: "ellipsis";
2981        white-space: "nowrap";
2982        display: "flex";
2983        align-items: "center";
2984    }
2985
2986    pub c_virtual_list_row_description {
2987        font-size: var!(font-base);
2988        color: "inherit";
2989        opacity: "1";
2990        overflow: "hidden";
2991        text-overflow: "ellipsis";
2992        white-space: "nowrap";
2993        flex: "1";
2994        display: "flex";
2995        align-items: "center";
2996    }
2997
2998    // ═══════════════════════════════════════════════════════════════════════════
2999    // Unified Layout Primitives
3000    // ═══════════════════════════════════════════════════════════════════════════
3001
3002    pub c_element_stack {
3003        display: "flex";
3004        flex-direction: "column";
3005        gap: var!(gap-element);
3006    }
3007
3008    pub c_switcher {
3009        display: "flex";
3010        gap: var!(gap-component);
3011        flex-wrap: "wrap";
3012        @media ((max-width: 767px)) {
3013            flex-direction: "column";
3014            gap: var!(gap-component-mobile);
3015        }
3016    }
3017
3018    pub c_switcher_col {
3019        flex: "1";
3020        min-width: "200px";
3021        @media ((max-width: 767px)) {
3022            min-width: "100%";
3023        }
3024    }
3025
3026    // ═══════════════════════════════════════════════════════════════════════════
3027    // Unified Description / Hint Text
3028    // ═══════════════════════════════════════════════════════════════════════════
3029
3030    pub c_hint {
3031        color: "inherit";
3032        opacity: "1";
3033        font-size: var!(font-base);
3034        margin-bottom: var!(gap-component);
3035    }
3036
3037    // ═══════════════════════════════════════════════════════════════════════════
3038    // Network Demo
3039    // ═══════════════════════════════════════════════════════════════════════════
3040
3041    pub c_net_messages_empty {
3042        color: "inherit";
3043        opacity: "1";
3044        padding: var!(space-xl);
3045        text-align: "center";
3046        font-size: var!(font-base);
3047    }
3048
3049    pub c_net_messages_list {
3050        display: "flex";
3051        flex-direction: "column";
3052        gap: var!(space-xs);
3053    }
3054
3055    pub c_net_message_item {
3056        display: "flex";
3057        align-items: "baseline";
3058        gap: var!(gap-element);
3059        justify-content: "space-between";
3060    }
3061
3062    pub c_net_message_index {
3063        color: var!(accent);
3064        font-size: var!(font-sm);
3065        font-weight: "600";
3066        white-space: "nowrap";
3067        flex-shrink: "0";
3068    }
3069
3070    pub c_net_message_data {
3071        color: "inherit";
3072        font-size: var!(font-base);
3073        word-break: "break-all";
3074        overflow-wrap: "break-word";
3075        flex: "1";
3076        min-width: "0";
3077    }
3078
3079    // ═══════════════════════════════════════════════════════════════════════════
3080    // WebSocket Demo
3081    // ═══════════════════════════════════════════════════════════════════════════
3082
3083    pub c_ws_message_input {
3084        width: "100%";
3085        flex: "1";
3086        height: "42px";
3087        padding: format!("0px {}", var!(space-lg));
3088        color: var!(foreground);
3089        border: format!("1px solid {}", var!(border));
3090        font-size: var!(font-base);
3091        line-height: "normal";
3092        box-sizing: "border-box";
3093        outline: "none";
3094        appearance: "none";
3095        -webkit-appearance: "none";
3096        -moz-appearance: "none";
3097        vertical-align: "middle";
3098        :hover {
3099            border-color: var!(accent);
3100            background: var!(accent-muted);
3101        }
3102        :focus {
3103            outline: "none";
3104            border-color: var!(accent);
3105            background: var!(accent-muted);
3106        }
3107    }
3108
3109    pub c_ws_message_time {
3110        color: var!(foreground);
3111        font-size: var!(font-sm);
3112        white-space: "nowrap";
3113        flex-shrink: "0";
3114        margin-left: "auto";
3115    }
3116
3117    // ═══════════════════════════════════════════════════════════════════════════
3118    // Sticky & CSS Effects Demo
3119    // ═══════════════════════════════════════════════════════════════════════════
3120
3121    // ═══════════════════════════════════════════════════════════════════════════
3122    // Home Page — Section
3123    // ═══════════════════════════════════════════════════════════════════════════
3124
3125    pub c_home {
3126        position: "relative";
3127        text-align: "center";
3128        margin-bottom: var!(space-xl);
3129        flex: "1";
3130        display: "flex";
3131        flex-direction: "column";
3132        justify-content: "center";
3133        @media ((max-width: 767px)) {
3134            margin-bottom: var!(space-lg);
3135            flex: "0 0 auto";
3136        }
3137    }
3138
3139    pub c_home_content {
3140        position: "relative";
3141        z-index: "1";
3142    }
3143
3144    pub c_home_badge_row {
3145        display: "inline-flex";
3146        align-items: "center";
3147        gap: var!(space-sm);
3148        margin-bottom: var!(space-md);
3149    }
3150
3151    pub c_home_badge {
3152        display: "inline-flex";
3153        justify-content: "center";
3154        align-items: "center";
3155        padding: format!("{} {}", var!(space-xs), var!(space-sm));
3156        color: var!(accent);
3157        font-size: var!(font-xs);
3158        font-weight: "600";
3159        letter-spacing: "0.05em";
3160        border: format!("1px solid {}", var!(accent));
3161    }
3162
3163    pub c_home_title {
3164        font-size: var!(font-5xl);
3165        font-weight: "800";
3166        letter-spacing: "-0.03em";
3167        margin: "0px";
3168        color: var!(foreground);
3169        margin-bottom: var!(space-xs);
3170        @media ((max-width: 767px)) {
3171            font-size: var!(font-4xl);
3172        }
3173    }
3174
3175    pub c_home_subtitle {
3176        font-size: var!(font-lg);
3177        color: var!(foreground);
3178        margin: "0px auto";
3179        max-width: "520px";
3180        margin-bottom: var!(space-lg);
3181        @media ((max-width: 767px)) {
3182            font-size: var!(font-base);
3183        }
3184    }
3185
3186    pub c_home_actions {
3187        display: "flex";
3188        gap: var!(space-md);
3189        justify-content: "center";
3190        flex-wrap: "wrap";
3191    }
3192
3193    pub c_home_btn_primary {
3194        display: "inline-flex";
3195        justify-content: "center";
3196        align-items: "center";
3197        gap: var!(space-sm);
3198        padding: format!("{} {}", var!(space-sm), var!(space-2xl));
3199        background: var!(accent);
3200        color: var!(text-on-accent);
3201        font-size: var!(font-base);
3202        font-weight: "600";
3203        text-decoration: "none";
3204        border: "1.5px solid transparent";
3205        cursor: "pointer";
3206        letter-spacing: "0.01em";
3207        vertical-align: "middle";
3208        min-height: var!(min-height-sm);
3209        :focus-visible {
3210            outline: "none";
3211        }
3212        :active {
3213            background: var!(accent);
3214            color: var!(text-on-accent);
3215            border-color: "1.5px solid transparent";
3216        }
3217    }
3218
3219    pub c_home_btn_secondary {
3220        display: "inline-flex";
3221        justify-content: "center";
3222        align-items: "center";
3223        gap: var!(space-sm);
3224        padding: format!("{} {}", var!(space-sm), var!(space-2xl));
3225        color: var!(accent);
3226        font-size: var!(font-base);
3227        font-weight: "600";
3228        text-decoration: "none";
3229        border: format!("1.5px solid {}", var!(accent));
3230        cursor: "pointer";
3231        letter-spacing: "0.01em";
3232        vertical-align: "middle";
3233        min-height: var!(min-height-sm);
3234        :focus-visible {
3235            outline: "none";
3236        }
3237        :active {
3238            background: "transparent";
3239            color: var!(accent);
3240            border-color: var!(accent);
3241        }
3242    }
3243
3244    // ═══════════════════════════════════════════════════════════════════════════
3245    // Home Page — Stats Row
3246    // ═══════════════════════════════════════════════════════════════════════════
3247
3248    pub c_home_stats {
3249        display: "grid";
3250        grid-template-columns: "repeat(4, 1fr)";
3251        gap: var!(space-md);
3252        margin-bottom: var!(space-xl);
3253        @media ((max-width: 767px)) {
3254            grid-template-columns: "repeat(2, 1fr)";
3255            gap: var!(space-sm);
3256        }
3257    }
3258
3259    pub c_home_stat_card {
3260        display: "flex";
3261        flex-direction: "column";
3262        align-items: "center";
3263        justify-content: "center";
3264        gap: var!(space-xs);
3265    }
3266
3267    pub c_home_stat_icon {
3268        font-size: var!(font-2xl);
3269    }
3270
3271    pub c_home_stat_value {
3272        font-size: var!(font-xl);
3273        font-weight: "800";
3274        color: var!(foreground);
3275        letter-spacing: "-0.01em";
3276    }
3277
3278    pub c_home_stat_label {
3279        font-size: var!(font-sm);
3280        color: var!(muted-foreground);
3281        font-weight: "500";
3282    }
3283
3284    // ═══════════════════════════════════════════════════════════════════════════
3285    // Home Page — Section & Feature Cards
3286    // ═══════════════════════════════════════════════════════════════════════════
3287
3288    pub c_home_section_title {
3289        font-size: var!(font-2xl);
3290        font-weight: "700";
3291        color: var!(foreground);
3292        margin: "0px";
3293        margin: format!("{} 0px", var!(gap-component));
3294        letter-spacing: "-0.02em";
3295    }
3296
3297    pub c_home_section_desc {
3298        font-size: var!(font-base);
3299        color: var!(foreground);
3300        margin: "0px";
3301        margin-bottom: var!(space-2xl);
3302    }
3303
3304    pub c_home_feature_grid {
3305        display: "grid";
3306        grid-template-columns: "repeat(2, 1fr)";
3307        gap: var!(space-md);
3308        @media ((max-width: 767px)) {
3309            grid-template-columns: "1fr";
3310        }
3311    }
3312
3313    pub c_feature_card {
3314        display: "flex";
3315        flex-direction: "column";
3316        gap: var!(space-sm);
3317        padding: "0px";
3318        overflow: "hidden";
3319    }
3320
3321    pub c_feature_header {
3322        display: "flex";
3323        align-items: "center";
3324        gap: var!(space-sm);
3325    }
3326
3327    pub c_feature_icon {
3328        font-size: var!(font-2xl);
3329        display: "flex";
3330        align-items: "center";
3331        justify-content: "center";
3332        line-height: "1";
3333        flex-shrink: "0";
3334    }
3335
3336    pub c_feature_name {
3337        font-size: var!(font-lg);
3338        font-weight: "600";
3339        color: var!(foreground);
3340        margin: "0px";
3341        overflow: "hidden";
3342        text-overflow: "ellipsis";
3343        white-space: "nowrap";
3344    }
3345
3346    pub c_feature_desc {
3347        font-size: var!(font-sm);
3348        color: var!(foreground);
3349        margin: "0px";
3350    }
3351
3352    // ═══════════════════════════════════════════════════════════════════════════
3353    // Global Utilities
3354    // ═══════════════════════════════════════════════════════════════════════════
3355}