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        inset: "0";
1398        display: "flex";
1399        flex-direction: "column";
1400        align-items: "center";
1401        justify-content: "center";
1402        gap: var!(gap-component);
1403        border-radius: "8px";
1404        background: background;
1405        z-index: "1";
1406        box-sizing: "border-box";
1407    }
1408
1409    pub c_error_container {
1410        display: "flex";
1411        align-items: "center";
1412        gap: var!(gap-element);
1413        margin-top: var!(gap-component);
1414        box-sizing: "border-box";
1415    }
1416
1417    pub c_error_icon {
1418        width: "20px";
1419        height: "20px";
1420        display: "flex";
1421        align-items: "center";
1422        justify-content: "center";
1423        flex-shrink: "0";
1424        color: var!(foreground);
1425        font-size: var!(font-sm);
1426        font-weight: "700";
1427    }
1428
1429    pub c_error_text {
1430        color: var!(foreground);
1431        font-size: var!(font-base);
1432    }
1433
1434    pub c_data_box {
1435        margin: format!("{} 0px", var!(gap-component));
1436        box-sizing: "border-box";
1437    }
1438
1439    pub c_data_pre {
1440        color: var!(foreground);
1441        font-size: var!(font-base);
1442        margin: "0px";
1443        white-space: "pre-wrap";
1444        word-break: "break-all";
1445        font-family: "ui-monospace, monospace";
1446    }
1447
1448    pub c_fetch_hint {
1449        color: "inherit";
1450        opacity: "1";
1451        font-size: var!(font-base);
1452        margin-bottom: var!(gap-component);
1453    }
1454
1455    // ═══════════════════════════════════════════════════════════════════════════
1456    // Conditional Rendering Demo
1457    // ═══════════════════════════════════════════════════════════════════════════
1458
1459    pub c_toggle_content {
1460        margin-top: var!(gap-component);
1461        color: "inherit";
1462    }
1463
1464    pub c_toggle_title {
1465        margin-top: "0px";
1466        color: var!(accent);
1467        font-size: var!(font-md);
1468    }
1469
1470    pub c_role_button_row {
1471        display: "flex";
1472        flex-wrap: "wrap";
1473        gap: var!(gap-element);
1474        margin-bottom: var!(gap-component);
1475    }
1476
1477    pub c_role_guest_text {
1478        color: var!(foreground);
1479        font-size: var!(font-base);
1480    }
1481
1482    pub c_role_user_text {
1483        color: var!(foreground);
1484        font-size: var!(font-base);
1485    }
1486
1487    pub c_role_admin_text {
1488        color: var!(foreground);
1489        font-size: var!(font-base);
1490    }
1491
1492    // ═══════════════════════════════════════════════════════════════════════════
1493    // Tabs
1494    // ═══════════════════════════════════════════════════════════════════════════
1495
1496    pub c_tab_bar {
1497        display: "flex";
1498        border-bottom: format!("1px dashed {}", var!(border));
1499        margin-bottom: var!(gap-component);
1500        gap: var!(gap-element);
1501        @media ((max-width: 767px)) {
1502            flex-wrap: "wrap";
1503        }
1504    }
1505
1506    pub c_tab_item_active {
1507        padding: format!("{} {}", var!(space-md), var!(space-xl));
1508        cursor: "pointer";
1509        border-bottom: format!("2px solid {}", var!(accent));
1510        color: var!(text-on-accent);
1511        background: var!(accent);
1512        font-size: var!(font-base);
1513        font-weight: "500";
1514    }
1515
1516    pub c_tab_item_inactive {
1517        padding: format!("{} {}", var!(space-md), var!(space-xl));
1518        cursor: "pointer";
1519        border-bottom: "2px solid transparent";
1520        color: "inherit";
1521        font-size: var!(font-base);
1522        font-weight: "500";
1523        :hover {
1524            background: var!(accent-muted);
1525            color: var!(accent);
1526        }
1527    }
1528
1529    pub c_tab_content {
1530        padding: format!("{} 0px", var!(gap-element));
1531    }
1532
1533    pub c_tab_text {
1534        color: "inherit";
1535        font-size: var!(font-base);
1536        margin-bottom: var!(gap-element);
1537    }
1538
1539    pub c_tab_text_muted {
1540        color: "inherit";
1541        opacity: "1";
1542        font-size: var!(font-base);
1543    }
1544
1545    pub c_tab_text_input {
1546        color: "inherit";
1547        font-size: var!(font-base);
1548        margin-bottom: var!(gap-component);
1549    }
1550
1551    // ═══════════════════════════════════════════════════════════════════════════
1552    // List
1553    // ═══════════════════════════════════════════════════════════════════════════
1554
1555    pub c_list_input {
1556        width: "100%";
1557        flex: "1";
1558        height: "42px";
1559        padding: format!("0px {}", var!(space-lg));
1560        border: format!("1px solid {}", var!(border));
1561        font-size: var!(font-base);
1562        line-height: "normal";
1563        box-sizing: "border-box";
1564        outline: "none";
1565        color: var!(foreground);
1566        appearance: "none";
1567        -webkit-appearance: "none";
1568        -moz-appearance: "none";
1569        vertical-align: "middle";
1570        :hover {
1571            border-color: var!(accent);
1572            background: var!(accent-muted);
1573        }
1574        :focus {
1575            outline: "none";
1576            border-color: var!(accent);
1577            background: var!(accent-muted);
1578        }
1579    }
1580
1581    pub c_list_input_error {
1582        width: "100%";
1583        flex: "1";
1584        height: "42px";
1585        padding: format!("0px {}", var!(space-lg));
1586        border: format!("1px solid {}", var!(foreground));
1587        font-size: var!(font-base);
1588        line-height: "normal";
1589        box-sizing: "border-box";
1590        outline: "none";
1591        color: var!(foreground);
1592        appearance: "none";
1593        -webkit-appearance: "none";
1594        -moz-appearance: "none";
1595        vertical-align: "middle";
1596        :focus {
1597            outline: "none";
1598            border-color: var!(foreground);
1599        }
1600    }
1601
1602    pub c_list_error_text {
1603        color: var!(foreground);
1604        font-size: var!(font-base);
1605        margin: format!("{} 0px", var!(gap-element));
1606    }
1607
1608    pub c_inline_input_button_wrap {
1609        flex-shrink: "0";
1610    }
1611
1612    pub c_list_ul {
1613        list-style: "none";
1614        padding: "0px";
1615        margin: "0px";
1616        margin-top: var!(gap-component);
1617    }
1618
1619    pub c_list_item {
1620        display: "flex";
1621        justify-content: "space-between";
1622        align-items: "center";
1623        gap: var!(gap-component);
1624        min-height: var!(min-height-base);
1625        margin: format!("{} 0px", var!(gap-element));
1626    }
1627
1628    pub c_list_item_text {
1629        flex: "1";
1630        overflow: "hidden";
1631        text-overflow: "ellipsis";
1632        white-space: "nowrap";
1633        font-size: var!(font-base);
1634        color: "inherit";
1635        min-width: "0";
1636    }
1637
1638    pub c_list_item_button {
1639        max-width: "120px";
1640        flex-shrink: "0";
1641    }
1642
1643    // ═══════════════════════════════════════════════════════════════════════════
1644    // Log / Console Display
1645    // ═══════════════════════════════════════════════════════════════════════════
1646
1647    pub c_log_container {
1648        font-family: "ui-monospace, monospace";
1649        font-size: var!(font-base);
1650        margin-top: "0px";
1651        color: var!(foreground);
1652    }
1653
1654    pub c_log_item {
1655        padding: format!("{} 0px", var!(space-sm));
1656        font-size: var!(font-base);
1657        color: var!(foreground);
1658    }
1659
1660    // ═══════════════════════════════════════════════════════════════════════════
1661    // 404 Not Found
1662    // ═══════════════════════════════════════════════════════════════════════════
1663
1664    pub c_render_count_text {
1665        font-size: var!(font-lg);
1666        color: "inherit";
1667        margin-bottom: var!(gap-component);
1668    }
1669
1670    // ═══════════════════════════════════════════════════════════════════════════
1671    // Event Demo
1672    // ═══════════════════════════════════════════════════════════════════════════
1673
1674    pub c_event_result {
1675        font-size: var!(font-base);
1676        color: "inherit";
1677        margin-top: var!(gap-element);
1678    }
1679
1680    pub c_event_highlight {
1681        font-weight: "600";
1682        color: var!(accent);
1683    }
1684
1685    pub c_event_info_grid {
1686        display: "grid";
1687        grid-template-columns: "1fr 1fr";
1688        gap: var!(gap-element);
1689        margin-top: var!(gap-component);
1690        @media ((max-width: 767px)) {
1691            grid-template-columns: "1fr";
1692            gap: var!(gap-element);
1693        }
1694    }
1695
1696    pub c_event_info_row {
1697        display: "flex";
1698        align-items: "center";
1699        gap: var!(space-sm);
1700        overflow: "hidden";
1701    }
1702
1703    pub c_event_info_label {
1704        font-size: var!(font-base);
1705        font-weight: "600";
1706        color: var!(foreground);
1707        flex-shrink: "0";
1708    }
1709
1710    pub c_event_info_value {
1711        c_text_ellipsis();
1712        font-size: var!(font-base);
1713        font-weight: "600";
1714        color: var!(accent);
1715        font-family: "ui-monospace, monospace";
1716        flex: "1";
1717    }
1718
1719    pub c_event_mouse_area {
1720        min-height: "120px";
1721        padding: format!("{} 0px", var!(space-xl));
1722        border: format!("2px dashed {}", var!(border));
1723        cursor: "crosshair";
1724        text-align: "center";
1725        user-select: "none";
1726        color: "inherit";
1727    }
1728
1729    pub c_event_drag_zone {
1730        min-height: "100px";
1731        padding: format!("{} 0px", var!(space-xl));
1732        border: format!("2px dashed {}", var!(border));
1733        text-align: "center";
1734        user-select: "none";
1735        color: var!(foreground);
1736    }
1737
1738    pub c_event_drag_zone_active {
1739        min-height: "100px";
1740        padding: format!("{} 0px", var!(space-xl));
1741        border: format!("2px dashed {}", var!(border));
1742        text-align: "center";
1743        user-select: "none";
1744        color: var!(foreground);
1745    }
1746
1747    pub c_event_drag_item {
1748        display: "inline-block";
1749        padding: format!("{} {}", var!(space-sm), var!(space-xl));
1750        background: var!(accent);
1751        color: var!(text-on-accent);
1752        font-size: var!(font-base);
1753        font-weight: "500";
1754        cursor: "grab";
1755        margin: var!(space-sm);
1756    }
1757
1758    pub c_event_drop_zone {
1759        border: format!("2px dashed {}", var!(border));
1760        padding: format!("{} {}", var!(space-4xl), var!(space-xl));
1761        text-align: "center";
1762        cursor: "pointer";
1763    }
1764
1765    pub c_event_drop_zone_active {
1766        border: format!("2px dashed {}", var!(accent));
1767        padding: format!("{} {}", var!(space-4xl), var!(space-xl));
1768        text-align: "center";
1769        cursor: "pointer";
1770        background: var!(accent-muted);
1771    }
1772
1773    pub c_event_drop_icon {
1774        font-size: var!(font-5xl);
1775        display: "block";
1776        padding-bottom: var!(space-md);
1777    }
1778
1779    pub c_event_drop_text {
1780        font-size: var!(font-lg);
1781        font-weight: "500";
1782        color: "inherit";
1783        padding-bottom: var!(space-md);
1784    }
1785
1786    pub c_event_drop_hint {
1787        font-size: var!(font-base);
1788        color: "inherit";
1789        opacity: "1";
1790        margin: "0px";
1791    }
1792
1793    pub c_event_wheel_zone {
1794        min-height: "120px";
1795        padding: format!("{} 0px", var!(space-xl));
1796        border: format!("2px dashed {}", var!(border));
1797        text-align: "center";
1798        overflow: "auto";
1799        color: var!(foreground);
1800    }
1801
1802    pub c_event_clipboard_area {
1803        color: var!(foreground);
1804    }
1805
1806    pub c_event_touch_zone {
1807        min-height: "120px";
1808        padding: format!("{} 0px", var!(space-xl));
1809        border: format!("2px dashed {}", var!(accent));
1810        text-align: "center";
1811        touch-action: "none";
1812        user-select: "none";
1813        color: var!(accent);
1814    }
1815
1816    pub c_event_form_area {
1817        padding: format!("{} 0px", var!(space-lg));
1818        color: var!(foreground);
1819    }
1820
1821    pub c_event_media_area {
1822        padding: format!("{} 0px", var!(space-lg));
1823        color: var!(foreground);
1824        max-width: "100%";
1825        overflow: "hidden";
1826    }
1827
1828    pub c_event_audio {
1829        width: "100%";
1830        max-width: "100%";
1831    }
1832
1833    pub c_event_video_area {
1834        color: var!(foreground);
1835        width: "100%";
1836        overflow: "hidden";
1837    }
1838
1839    pub c_event_video {
1840        width: "100%";
1841        max-width: "100%";
1842    }
1843
1844    pub c_event_image_area {
1845        padding: format!("{} 0px", var!(space-lg));
1846        color: "inherit";
1847        width: "100%";
1848        overflow: "hidden";
1849        display: "flex";
1850        flex-direction: "column";
1851        align-items: "center";
1852        gap: var!(space-md);
1853    }
1854
1855    pub c_event_image {
1856        width: "200px";
1857        max-width: "100%";
1858        object-fit: "contain";
1859        display: "block";
1860    }
1861
1862    pub c_event_url_text {
1863        text-align: "center";
1864        font-size: var!(font-sm);
1865        color: "inherit";
1866        opacity: "1";
1867        font-family: "ui-monospace, monospace";
1868        word-break: "break-all";
1869        width: "100%";
1870    }
1871
1872    // ═══════════════════════════════════════════════════════════════════════════
1873    // Timer Demo
1874    // ═══════════════════════════════════════════════════════════════════════════
1875
1876    pub c_timer_display {
1877        text-align: "center";
1878        padding: var!(space-xl);
1879        margin: format!("{} 0px", var!(gap-component));
1880        color: "inherit";
1881    }
1882
1883    pub c_timer_value {
1884        font-size: var!(font-5xl);
1885        font-weight: "700";
1886        color: var!(accent);
1887        letter-spacing: "0.04em";
1888        font-family: "ui-monospace, monospace";
1889        @media ((max-width: 767px)) {
1890            font-size: var!(font-4xl);
1891        }
1892    }
1893
1894    pub c_timer_controls {
1895        display: "flex";
1896        flex-wrap: "wrap";
1897        gap: var!(gap-element);
1898    }
1899
1900    pub c_timer_done {
1901        text-align: "center";
1902        margin-top: var!(gap-component);
1903        font-size: var!(font-lg);
1904        font-weight: "600";
1905        color: var!(foreground);
1906    }
1907
1908    // ═══════════════════════════════════════════════════════════════════════════
1909    // Modal
1910    // ═══════════════════════════════════════════════════════════════════════════
1911
1912    pub c_modal_overlay {
1913        position: "fixed";
1914        top: "0px";
1915        left: "0px";
1916        width: "100%";
1917        height: "100%";
1918        background: var!(bg-overlay);
1919        contain: "layout style paint";
1920        display: "flex";
1921        align-items: "center";
1922        justify-content: "center";
1923        z-index: "1000";
1924        animation: format!("euv-fade-in {} {}", var!(duration-modal-overlay), var!(ease-out));
1925        @media ((max-width: 767px)) {
1926            align-items: "center";
1927            justify-content: "center";
1928        }
1929    }
1930
1931    pub c_modal_content {
1932        background: var!(background);
1933        padding: "0px";
1934        max-width: "480px";
1935        width: "90%";
1936        animation: format!("euv-scale-in-modal {} {}", var!(duration-modal-content), var!(ease-bounce));
1937        overflow: "hidden";
1938        color: var!(foreground);
1939        box-sizing: "border-box";
1940        @media ((max-width: 767px)) {
1941            max-width: "100%";
1942            width: "calc(100% - 32px)";
1943            max-height: "85vh";
1944            overflow-y: "auto";
1945        }
1946    }
1947
1948    pub c_modal_header {
1949        display: "flex";
1950        justify-content: "space-between";
1951        align-items: "center";
1952        padding: format!("{} {} 0px {}", var!(space-md), var!(space-xl), var!(space-xl));
1953    }
1954
1955    pub c_modal_title {
1956        margin: "0px";
1957        font-size: var!(font-xl);
1958        font-weight: "600";
1959        color: "inherit";
1960    }
1961
1962    pub c_modal_body {
1963        padding: format!("0px {} {} {}", var!(space-xl), var!(space-md), var!(space-xl));
1964        color: "inherit";
1965    }
1966
1967    pub c_modal_actions {
1968        display: "flex";
1969        flex-wrap: "wrap";
1970        gap: var!(space-md);
1971        margin: format!("{} 0px", var!(space-md));
1972    }
1973
1974    // ═══════════════════════════════════════════════════════════════════════════
1975    // Animation Demo
1976    // ═══════════════════════════════════════════════════════════════════════════
1977
1978    pub c_anim_fade_in {
1979        margin-top: var!(gap-component);
1980        animation: format!("euv-fade-in 0.5s {}", var!(ease-out));
1981        font-size: var!(font-base);
1982        color: "inherit";
1983    }
1984
1985    pub c_anim_spin_container {
1986        display: "flex";
1987        justify-content: "center";
1988        align-items: "center";
1989        margin: format!("{} 0px", var!(space-lg));
1990        min-height: "80px";
1991    }
1992
1993    pub c_anim_spin {
1994        font-size: var!(font-5xl);
1995        animation: "euv-spin 1.5s linear infinite";
1996        display: "inline-block";
1997        @media ((max-width: 767px)) {
1998            font-size: var!(font-4xl);
1999        }
2000    }
2001
2002    pub c_anim_spin_stopped {
2003        font-size: var!(font-5xl);
2004        display: "inline-block";
2005        opacity: "1";
2006        @media ((max-width: 767px)) {
2007            font-size: var!(font-4xl);
2008        }
2009    }
2010
2011    pub c_anim_pulse_container {
2012        display: "flex";
2013        justify-content: "center";
2014        align-items: "center";
2015        margin: format!("{} 0px", var!(space-lg));
2016        min-height: "80px";
2017    }
2018
2019    pub c_anim_pulse {
2020        font-size: var!(font-5xl);
2021        animation: "euv-pulse 1.5s ease-in-out infinite";
2022        display: "inline-block";
2023        color: var!(foreground);
2024        @media ((max-width: 767px)) {
2025            font-size: var!(font-4xl);
2026        }
2027    }
2028
2029    pub c_anim_pulse_stopped {
2030        font-size: var!(font-5xl);
2031        display: "inline-block";
2032        opacity: "1";
2033        color: var!(foreground);
2034        @media ((max-width: 767px)) {
2035            font-size: var!(font-4xl);
2036        }
2037    }
2038
2039    pub c_progress_container {
2040        width: "100%";
2041        height: "12px";
2042        margin: format!("{} 0px", var!(space-lg));
2043        overflow: "hidden";
2044    }
2045
2046    pub c_progress_bar_running {
2047        height: "100%";
2048        background: var!(accent);
2049        animation: format!("euv-progress 1.6s {} forwards", var!(ease-in-out));
2050    }
2051
2052    pub c_progress_bar_stopped {
2053        height: "100%";
2054        background: var!(accent);
2055        width: "0%";
2056    }
2057
2058    pub c_anim_scale_box {
2059        margin: format!("{} 0px", var!(gap-component));
2060        padding: var!(space-xl);
2061        background: var!(accent);
2062        cursor: "pointer";
2063        transition: format!("transform {} {}", var!(duration-normal), var!(ease-out));
2064    }
2065
2066    // ═══════════════════════════════════════════════════════════════════════════
2067    // Browser API Demo
2068    // ═══════════════════════════════════════════════════════════════════════════
2069
2070    pub c_browser_api_row {
2071        display: "grid";
2072        grid-template-columns: "1fr 1fr";
2073        gap: var!(gap-component);
2074        margin-bottom: var!(gap-component);
2075        @media ((max-width: 767px)) {
2076            grid-template-columns: "1fr";
2077        }
2078    }
2079
2080    pub c_browser_api_actions {
2081        display: "flex";
2082        flex-wrap: "wrap";
2083        gap: var!(gap-element);
2084        margin: format!("{} 0px", var!(gap-component));
2085    }
2086
2087    pub c_browser_result_box {
2088        margin-top: var!(gap-component);
2089        font-size: var!(font-base);
2090        word-break: "break-all";
2091        color: "inherit";
2092    }
2093
2094    pub c_browser_result_label {
2095        font-weight: "600";
2096        color: var!(accent);
2097    }
2098
2099    pub c_browser_result_value {
2100        color: "inherit";
2101    }
2102
2103    pub c_browser_info_grid {
2104        display: "grid";
2105        gap: var!(gap-component);
2106        margin-top: var!(gap-component);
2107        @media ((max-width: 767px)) {
2108            grid-template-columns: "1fr";
2109        }
2110    }
2111
2112    pub c_browser_info_item {
2113        display: "flex";
2114        flex-direction: "column";
2115        gap: var!(space-xs);
2116        color: "inherit";
2117    }
2118
2119    pub c_browser_info_label {
2120        font-size: var!(font-sm);
2121        font-weight: "600";
2122        color: "inherit";
2123        opacity: "1";
2124        text-transform: "uppercase";
2125        letter-spacing: "0.05em";
2126    }
2127
2128    pub c_browser_info_value {
2129        font-size: var!(font-base);
2130        color: "inherit";
2131        word-break: "break-all";
2132        font-family: "ui-monospace, monospace";
2133    }
2134
2135    // ═══════════════════════════════════════════════════════════════════════════
2136    // VConsole Panel
2137    // ═══════════════════════════════════════════════════════════════════════════
2138
2139    pub c_vconsole_badge {
2140        position: "absolute";
2141        top: "-6px";
2142        right: "-8px";
2143        min-width: "18px";
2144        height: "18px";
2145        background: var!(background);
2146        color: var!(foreground);
2147        font-size: "10px";
2148        font-weight: "600";
2149        display: "flex";
2150        align-items: "center";
2151        justify-content: "center";
2152        padding: format!("0px {}", var!(space-xs));
2153        border: format!("1px solid {}", var!(accent));
2154        pointer-events: "none";
2155        transition: format!("transform {} {}, opacity {} {}", var!(duration-normal), var!(ease-out), var!(duration-normal), var!(ease-out));
2156    }
2157
2158    pub c_vconsole_overlay {
2159        position: "fixed";
2160        top: "0px";
2161        left: "0px";
2162        right: "0px";
2163        bottom: "0px";
2164        z-index: "10000";
2165        background: var!(bg-overlay);
2166        contain: "layout style paint";
2167        transition: format!("opacity {} {}", var!(duration-overlay), var!(ease-out));
2168    }
2169
2170    pub c_vconsole_overlay_hidden {
2171        opacity: "0";
2172        pointer-events: "none";
2173    }
2174
2175    pub c_vconsole_panel {
2176        position: "fixed";
2177        bottom: "0px";
2178        left: "0px";
2179        right: "0px";
2180        height: format!("calc(76vh - {})", var!(safe-area-inset-bottom));
2181        background: var!(background);
2182        z-index: "10001";
2183        display: "flex";
2184        flex-direction: "column";
2185        contain: "layout style paint";
2186        will-change: "transform";
2187        transition: format!("transform {} {}", var!(duration-overlay), var!(ease-out));
2188        overflow: "hidden";
2189        padding: format!("{} {}", var!(padding-main-top), var!(padding-main-horizontal));
2190        @media ((max-width: 767px)) {
2191            padding: format!("{} {}", var!(space-md), var!(padding-main-horizontal-mobile));
2192        }
2193    }
2194
2195    pub c_vconsole_panel_closed {
2196        transform: "translateY(100%)";
2197        will-change: "auto";
2198    }
2199
2200    pub c_vconsole_fab {
2201        position: "fixed";
2202        bottom: format!("calc(20px + {})", var!(safe-area-inset-bottom));
2203        right: var!(padding-main-horizontal);
2204        z-index: "9999";
2205        @media ((max-width: 767px)) {
2206            bottom: format!("calc(16px + {})", var!(safe-area-inset-bottom));
2207            right: var!(padding-main-horizontal-mobile);
2208        }
2209    }
2210
2211    pub c_vconsole_header {
2212        display: "flex";
2213        justify-content: "space-between";
2214        align-items: "center";
2215        flex-shrink: "0";
2216    }
2217
2218    pub c_vconsole_title {
2219        color: var!(foreground);
2220        font-size: var!(font-md);
2221        font-weight: "600";
2222        margin: "0px";
2223        letter-spacing: "0.03em";
2224        display: "flex";
2225        align-items: "center";
2226        gap: var!(space-sm);
2227    }
2228
2229    pub c_vconsole_title_dot {
2230        width: "8px";
2231        height: "8px";
2232        background: var!(accent);
2233        display: "inline-block";
2234        animation: "euv-pulse 2s ease-in-out infinite";
2235    }
2236
2237    pub c_vconsole_header_actions {
2238        display: "flex";
2239        gap: var!(space-sm);
2240        align-items: "center";
2241    }
2242
2243    pub c_vconsole_clear_button {
2244        display: "inline-flex";
2245        justify-content: "center";
2246        align-items: "center";
2247        color: var!(foreground);
2248        padding: format!("{} {}", var!(space-2xs), var!(space-sm));
2249        font-size: var!(font-xs);
2250        font-weight: "600";
2251        cursor: "pointer";
2252        text-align: "center";
2253        border: format!("1.5px solid {}", var!(border));
2254        margin-left: "auto";
2255        :focus-visible {
2256            outline: "none";
2257        }
2258    }
2259
2260    pub c_vconsole_close_button {
2261        display: "inline-flex";
2262        justify-content: "center";
2263        align-items: "center";
2264        color: var!(foreground);
2265        padding: format!("{} {}", var!(space-xs), var!(space-md));
2266        cursor: "pointer";
2267        font-size: var!(font-sm);
2268        font-weight: "400";
2269        text-align: "center";
2270        white-space: "nowrap";
2271        user-select: "none";
2272        -webkit-user-select: "none";
2273        vertical-align: "middle";
2274        outline: "none";
2275        transition: format!("all {} {}", var!(duration-fast), var!(ease-out));
2276        :hover {
2277            border-color: var!(foreground);
2278            color: var!(foreground);
2279            background: var!(background);
2280        }
2281        :focus-visible {
2282            outline: "none";
2283        }
2284        :active {
2285            background: "transparent";
2286            color: var!(foreground);
2287            border-color: var!(border);
2288        }
2289    }
2290
2291    pub c_vconsole_body {
2292        flex: "1";
2293        overflow-y: "auto";
2294        contain: "content";
2295        padding-bottom: var!(space-md);
2296        font-family: "ui-monospace, monospace";
2297        font-size: var!(font-xs);
2298    }
2299
2300    pub c_vconsole_log_item {
2301        display: "flex";
2302        align-items: "center";
2303        padding: format!("{} 0px", var!(space-sm));
2304        border-bottom: format!("1px dashed {}", var!(border));
2305        color: var!(foreground);
2306        font-size: var!(font-xs);
2307        word-break: "break-all";
2308    }
2309
2310    pub c_vconsole_empty {
2311        color: var!(muted-foreground);
2312        font-size: var!(font-xs);
2313        text-align: "center";
2314        padding: format!("{} 0px", var!(space-4xl));
2315        overflow: "hidden";
2316    }
2317
2318    pub c_vconsole_empty_hidden {
2319        height: "0";
2320        overflow: "hidden";
2321        padding: "0";
2322    }
2323
2324    pub c_vconsole_log_list {
2325        overflow: "hidden";
2326    }
2327
2328    pub c_vconsole_log_list_hidden {
2329        height: "0";
2330        overflow: "hidden";
2331    }
2332
2333    pub c_vconsole_count {
2334        color: var!(muted-foreground);
2335        font-size: var!(font-sm);
2336        font-weight: "400";
2337    }
2338
2339    pub c_vconsole_filter_bar {
2340        display: "flex";
2341        gap: var!(space-sm);
2342        padding: format!("{} 0px", var!(space-sm));
2343        border-bottom: format!("1px dashed {}", var!(border));
2344        flex-shrink: "0";
2345        align-items: "center";
2346    }
2347
2348    pub c_vconsole_filter_badge {
2349        display: "inline-flex";
2350        justify-content: "center";
2351        align-items: "center";
2352        color: var!(text-on-accent);
2353        padding: format!("{} {}", var!(space-2xs), var!(space-sm));
2354        border: format!("1px solid {}", var!(accent));
2355        font-size: var!(font-xs);
2356        font-weight: "600";
2357        cursor: "pointer";
2358        text-align: "center";
2359        background: var!(accent);
2360        :focus-visible {
2361            outline: "none";
2362        }
2363    }
2364
2365    pub c_vconsole_filter_badge_outline {
2366        display: "inline-flex";
2367        justify-content: "center";
2368        align-items: "center";
2369        color: var!(foreground);
2370        padding: format!("{} {}", var!(space-2xs), var!(space-sm));
2371        font-size: var!(font-xs);
2372        font-weight: "600";
2373        cursor: "pointer";
2374        text-align: "center";
2375        border: format!("1.5px solid {}", var!(border));
2376    }
2377
2378    pub c_vconsole_level_badge {
2379        padding: format!("{} {}", var!(space-2xs), var!(space-sm));
2380        font-size: var!(font-xs);
2381        margin-right: var!(space-sm);
2382        letter-spacing: "0.05em";
2383        color: var!(foreground);
2384        border: "1px solid currentColor";
2385        wrap: "nowrap";
2386        flex-shrink: "0";
2387    }
2388
2389    // ═══════════════════════════════════════════════════════════════════════════
2390    // Mobile Layout
2391    // ═══════════════════════════════════════════════════════════════════════════
2392
2393    pub c_mobile_header {
2394        display: "flex";
2395        align-items: "center";
2396        justify-content: "space-between";
2397        padding: format!("0px {}", var!(space-lg));
2398        height: var!(mobile-header-height);
2399        flex-shrink: "0";
2400        position: "sticky";
2401        top: "0px";
2402        z-index: "100";
2403        contain: "content";
2404        border-bottom: format!("1px solid {}", var!(border));
2405    }
2406
2407    pub c_mobile_header_left {
2408        display: "flex";
2409        align-items: "center";
2410        gap: format!("{}", var!(space-md));
2411    }
2412
2413    pub c_mobile_header_logo {
2414        display: "flex";
2415        align-items: "center";
2416        gap: format!("{}", var!(space-sm));
2417        text-decoration: "none";
2418        color: var!(foreground);
2419    }
2420
2421    pub c_mobile_menu_button {
2422        width: "40px";
2423        height: "40px";
2424        border: "none";
2425        cursor: "pointer";
2426        font-size: "22px";
2427        font-weight: "700";
2428        display: "flex";
2429        align-items: "center";
2430        justify-content: "center";
2431        color: var!(foreground);
2432        padding: "0px";
2433        :active {
2434            background: "transparent";
2435            color: var!(foreground);
2436        }
2437    }
2438
2439    pub c_mobile_theme_button {
2440        width: "40px";
2441        height: "40px";
2442        border: "none";
2443        cursor: "pointer";
2444        display: "flex";
2445        align-items: "center";
2446        justify-content: "center";
2447        padding: "0px";
2448        :active {
2449            background: "transparent";
2450        }
2451    }
2452
2453    pub c_mobile_menu_button_active {
2454        width: "40px";
2455        height: "40px";
2456        border: "none";
2457        cursor: "pointer";
2458        font-size: "22px";
2459        font-weight: "700";
2460        display: "flex";
2461        align-items: "center";
2462        justify-content: "center";
2463        color: var!(accent);
2464        padding: "0px";
2465        :active {
2466            background: var!(background);
2467            color: var!(accent);
2468        }
2469    }
2470
2471    pub c_mobile_drawer_close_button {
2472        width: "32px";
2473        height: "32px";
2474        border: "none";
2475        cursor: "pointer";
2476        font-size: "18px";
2477        font-weight: "500";
2478        display: "flex";
2479        align-items: "center";
2480        justify-content: "center";
2481        color: var!(muted-foreground);
2482        padding: "0px";
2483        transition: format!("color {} {}", var!(duration-fast), var!(ease-out));
2484        :hover {
2485            color: var!(foreground);
2486        }
2487        :active {
2488            color: var!(muted-foreground);
2489        }
2490    }
2491
2492    pub c_mobile_overlay {
2493        position: "fixed";
2494        top: "0px";
2495        left: "0px";
2496        width: "100%";
2497        height: "100%";
2498        background: var!(bg-overlay);
2499        z-index: "200";
2500        contain: "layout style paint";
2501        transition: format!("opacity {} {}", var!(duration-overlay), var!(ease-out));
2502    }
2503
2504    pub c_mobile_overlay_hidden {
2505        opacity: "0";
2506        pointer-events: "none";
2507    }
2508
2509    pub c_mobile_nav_drawer {
2510        position: "fixed";
2511        top: "0px";
2512        left: "0px";
2513        width: "240px";
2514        max-width: "100%";
2515        height: "100%";
2516        background: var!(background);
2517        z-index: "201";
2518        display: "flex";
2519        flex-direction: "column";
2520        padding-top: var!(padding-shell-top);
2521        padding-bottom: var!(padding-shell-bottom);
2522        contain: "layout style paint";
2523        will-change: "transform";
2524        transition: format!("transform {} {}", var!(duration-overlay), var!(ease-out));
2525        overflow: "hidden";
2526    }
2527
2528    pub c_mobile_nav_drawer_closed {
2529        transform: "translateX(-100%)";
2530    }
2531
2532    pub c_mobile_nav_drawer_header {
2533        display: "flex";
2534        align-items: "center";
2535        justify-content: "space-between";
2536        padding: format!("0px {}", var!(space-lg));
2537        height: var!(mobile-header-height);
2538        flex-shrink: "0";
2539        position: "relative";
2540        ::after {
2541            content: "''";
2542            position: "absolute";
2543            bottom: "0px";
2544            left: var!(space-lg);
2545            right: var!(space-lg);
2546            height: "1px";
2547            background: format!("linear-gradient(90deg, transparent, {}, transparent)", var!(border));
2548        }
2549    }
2550
2551    pub c_mobile_main {
2552        c_app_main();
2553        ::-webkit-scrollbar {
2554            width: "0px";
2555        }
2556    }
2557
2558    // ═══════════════════════════════════════════════════════════════════════════
2559    // Keep-Alive Demo
2560    // ═══════════════════════════════════════════════════════════════════════════
2561
2562    pub c_keep_alive_tab_bar {
2563        display: "flex";
2564        border-bottom: format!("1px dashed {}", var!(border));
2565        margin-bottom: var!(gap-component);
2566        gap: var!(gap-element);
2567    }
2568
2569    pub c_keep_alive_tab_panel {
2570        padding: format!("{} 0px", var!(gap-element));
2571    }
2572
2573    pub c_keep_alive_panel_title {
2574        margin-top: "0px";
2575        color: var!(accent);
2576        font-size: var!(font-md);
2577        margin-bottom: var!(gap-element);
2578    }
2579
2580    pub c_keep_alive_demo_text {
2581        color: "inherit";
2582        font-size: var!(font-base);
2583        margin-bottom: var!(gap-component);
2584    }
2585
2586    pub c_keep_alive_counter_display {
2587        display: "flex";
2588        justify-content: "center";
2589        align-items: "center";
2590        margin: format!("{} 0px", var!(space-xl));
2591    }
2592
2593    pub c_keep_alive_counter_value {
2594        font-size: var!(font-5xl);
2595        font-weight: "700";
2596        font-variant-numeric: "tabular-nums";
2597        color: var!(accent);
2598        min-width: "120px";
2599        text-align: "center";
2600    }
2601
2602    pub c_keep_alive_counter_controls {
2603        display: "flex";
2604        flex-wrap: "wrap";
2605        gap: format!("{}", var!(space-md));
2606    }
2607
2608    pub c_keep_alive_form_group {
2609        margin-bottom: var!(gap-component);
2610    }
2611
2612    pub c_keep_alive_form_preview {
2613        margin-top: var!(gap-component);
2614        background: var!(accent-muted);
2615    }
2616
2617    pub c_keep_alive_preview_label {
2618        font-size: var!(font-base);
2619        font-weight: "600";
2620        color: var!(accent);
2621        margin: format!("0px 0px {} 0px", var!(space-xs));
2622    }
2623
2624    // ═══════════════════════════════════════════════════════════════════════════
2625    // File Upload
2626    // ═══════════════════════════════════════════════════════════════════════════
2627
2628    pub c_file_upload_input_hidden {
2629        position: "absolute";
2630        width: "1px";
2631        height: "1px";
2632        padding: "0px";
2633        margin: "-1px";
2634        overflow: "hidden";
2635        clip: "rect(0, 0, 0, 0)";
2636        white-space: "nowrap";
2637        border: "0px";
2638    }
2639
2640    pub c_file_upload_options {
2641        margin: format!("{} 0px", var!(gap-component));
2642    }
2643
2644    pub c_file_upload_item {
2645        display: "flex";
2646        align-items: "center";
2647        gap: format!("{}", var!(space-md));
2648        margin: format!("{} 0px", var!(space-sm));
2649        font-size: var!(font-base);
2650        color: "inherit";
2651    }
2652
2653    pub c_file_upload_item_index {
2654        font-size: var!(font-sm);
2655        font-weight: "600";
2656        color: var!(accent);
2657        min-width: "24px";
2658    }
2659
2660    pub c_file_upload_item_name {
2661        color: "inherit";
2662        word-break: "break-all";
2663    }
2664
2665    // ═══════════════════════════════════════════════════════════════════════════
2666    // Binding Demo
2667    // ═══════════════════════════════════════════════════════════════════════════
2668
2669    pub c_binding_child_box {
2670        display: "flex";
2671        flex-direction: "column";
2672        gap: var!(gap-component);
2673        margin-top: var!(gap-component);
2674    }
2675
2676    pub c_binding_child_label {
2677        font-size: var!(font-base);
2678        font-weight: "600";
2679        color: var!(accent);
2680        text-transform: "uppercase";
2681        letter-spacing: "0.05em";
2682    }
2683
2684    pub c_binding_parent_box {
2685        display: "flex";
2686        flex-direction: "column";
2687        gap: var!(gap-component);
2688        margin-top: var!(gap-component);
2689    }
2690
2691    pub c_binding_section_title {
2692        margin-top: var!(gap-component);
2693        margin-bottom: var!(gap-element);
2694        color: var!(accent);
2695        font-size: var!(font-md);
2696        font-weight: "600";
2697    }
2698
2699    pub c_binding_temp_converter {
2700        display: "flex";
2701        align-items: "flex-end";
2702        gap: var!(gap-component);
2703        flex-wrap: "wrap";
2704        margin-top: var!(gap-component);
2705    }
2706
2707    pub c_binding_temp_field {
2708        flex: "1";
2709        min-width: "120px";
2710    }
2711
2712    pub c_binding_temp_arrow {
2713        font-size: "20px";
2714        font-weight: "700";
2715        color: var!(accent);
2716        padding-bottom: "10px";
2717    }
2718
2719    pub c_binding_color_mixer {
2720        margin-top: var!(gap-component);
2721    }
2722
2723    pub c_binding_color_preview {
2724        width: "100%";
2725        height: "80px";
2726        display: "flex";
2727        align-items: "center";
2728        justify-content: "center";
2729        margin-bottom: var!(gap-component);
2730    }
2731
2732    pub c_binding_color_hex {
2733        font-family: "ui-monospace, monospace";
2734        font-size: var!(font-xl);
2735        font-weight: "700";
2736        color: var!(text-on-accent);
2737        letter-spacing: "0.02em";
2738    }
2739
2740    pub c_binding_slider_row {
2741        display: "flex";
2742        align-items: "center";
2743        gap: format!("{}", var!(space-md));
2744        margin-bottom: var!(space-sm);
2745    }
2746
2747    pub c_binding_slider_label {
2748        font-size: var!(font-base);
2749        font-weight: "700";
2750        min-width: var!(font-sm);
2751    }
2752
2753    pub c_binding_slider {
2754        flex: "1";
2755        height: "24px";
2756        padding: "0px";
2757        cursor: "pointer";
2758        -webkit-appearance: "none";
2759        appearance: "none";
2760        border: "none";
2761        outline: "none";
2762        ::-webkit-slider-runnable-track {
2763            height: "6px";
2764            background: format!("linear-gradient(to right, {} 0%, {} var(--value,50%), {} var(--value,50%), {} 100%)", var!(foreground), var!(foreground), var!(border), var!(border));
2765            border-radius: "3px";
2766            border: "none";
2767        }
2768        ::-webkit-slider-thumb {
2769            width: "20px";
2770            height: "20px";
2771            background: var!(background);
2772            border: format!("2px solid {}", var!(accent));
2773            border-radius: "50%";
2774            cursor: "pointer";
2775            -webkit-appearance: "none";
2776            margin-top: "-7px";
2777        }
2778        : active::-webkit-slider-thumb {
2779            transform: "scale(0.92)";
2780        }
2781        ::-moz-range-track {
2782            height: "6px";
2783            background: format!("linear-gradient(to right, {} 0%, {} var(--value,50%), {} var(--value,50%), {} 100%)", var!(foreground), var!(foreground), var!(border), var!(border));
2784            border-radius: "3px";
2785            border: "none";
2786        }
2787        ::-moz-range-thumb {
2788            width: "20px";
2789            height: "20px";
2790            background: var!(background);
2791            border: format!("2px solid {}", var!(accent));
2792            border-radius: "50%";
2793            cursor: "pointer";
2794        }
2795        : active::-moz-range-thumb {
2796            transform: "scale(0.92)";
2797        }
2798    }
2799
2800    pub c_binding_slider_value {
2801        font-size: var!(font-base);
2802        font-weight: "500";
2803        color: "inherit";
2804        min-width: "32px";
2805        text-align: "right";
2806        font-family: "ui-monospace, monospace";
2807    }
2808
2809    pub c_binding_typed_prop_value {
2810        font-family: "ui-monospace, monospace";
2811        font-size: var!(font-base);
2812        font-weight: "600";
2813        color: var!(accent);
2814        padding: format!("1px {}", var!(space-sm));
2815    }
2816
2817    pub c_binding_typed_prop_group {
2818        display: "flex";
2819        align-items: "center";
2820        gap: var!(space-sm);
2821    }
2822
2823    pub c_binding_typed_warning {
2824        font-size: var!(font-base);
2825        font-weight: "500";
2826        color: var!(foreground);
2827        margin-bottom: "0px";
2828    }
2829
2830    pub c_binding_form_label {
2831        display: "block";
2832        color: "inherit";
2833        font-weight: "500";
2834        font-size: var!(font-base);
2835    }
2836
2837    pub c_binding_demo_text {
2838        color: "inherit";
2839        margin: "0px"
2840    }
2841
2842    pub c_binding_compact_button {
2843        display: "inline-flex";
2844        justify-content: "center";
2845        align-items: "center";
2846        height: "42px";
2847        padding: format!("0px {}", var!(space-md));
2848        background: var!(accent);
2849        color: var!(text-on-accent);
2850        border: format!("1px solid {}", var!(accent));
2851        cursor: "pointer";
2852        font-size: var!(font-sm);
2853        font-weight: "600";
2854        outline: "none";
2855        white-space: "nowrap";
2856        user-select: "none";
2857        -webkit-user-select: "none";
2858        box-sizing: "border-box";
2859        :hover {
2860            background: var!(accent);
2861        }
2862        :focus-visible {
2863            outline: "none";
2864        }
2865        :active {
2866            background: var!(accent);
2867            color: var!(text-on-accent);
2868            border-color: var!(accent);
2869        }
2870    }
2871
2872    // ═══════════════════════════════════════════════════════════════════════════
2873    // Custom Attrs - Dynamic Style
2874    // ═══════════════════════════════════════════════════════════════════════════
2875
2876    pub c_attrs_dynamic_demo(prop_key: &str, prop_value: &str) {
2877        {
2878            prop_key
2879        }
2880        : prop_value;
2881        margin-top: var!(gap-component);
2882        color: "inherit";
2883        margin-top: var!(space-md);
2884    }
2885
2886    // ═══════════════════════════════════════════════════════════════════════════
2887    // Dynamic Component Demo
2888    // ═══════════════════════════════════════════════════════════════════════════
2889
2890    pub c_dynamic_component_tab_bar {
2891        display: "flex";
2892        flex-wrap: "wrap";
2893        gap: var!(gap-element);
2894        margin-bottom: var!(gap-component);
2895    }
2896
2897    pub c_dynamic_component_panel {
2898        display: "block";
2899        min-height: var!(min-height-sm);
2900        margin-top: var!(gap-component);
2901    }
2902
2903    // ═══════════════════════════════════════════════════════════════════════════
2904    // Virtual List
2905    // ═══════════════════════════════════════════════════════════════════════════
2906
2907    pub c_virtual_list_status {
2908        display: "flex";
2909        gap: var!(gap-component);
2910        padding: format!("{} 0px", var!(gap-component));
2911        flex-wrap: "nowrap";
2912        overflow: "hidden";
2913        text-overflow: "ellipsis";
2914        white-space: "nowrap";
2915        @media ((max-width: 767px)) {
2916            gap: var!(gap-component-mobile);
2917        }
2918    }
2919
2920    pub c_virtual_list_status_item {
2921        font-size: var!(font-base);
2922        color: "inherit";
2923        overflow: "hidden";
2924        text-overflow: "ellipsis";
2925        white-space: "nowrap";
2926    }
2927
2928    pub c_virtual_list_status_value {
2929        font-weight: "700";
2930        color: var!(accent);
2931        font-family: "ui-monospace, monospace";
2932    }
2933
2934    pub c_virtual_list_container {
2935        flex: "1";
2936        height: "666px";
2937        max-height: "666px";
2938        overflow-y: "auto";
2939    }
2940
2941    pub c_virtual_list_card {
2942        flex: "1";
2943        padding: var!(space-xl);
2944        color: var!(foreground);
2945        display: "flex";
2946        flex-direction: "column";
2947        @media ((max-width: 767px)) {
2948            padding: var!(space-lg);
2949        }
2950    }
2951
2952    pub c_virtual_list_row {
2953        display: "flex";
2954        align-items: "center";
2955        gap: var!(space-lg);
2956        height: "100%";
2957        box-sizing: "border-box";
2958    }
2959
2960    pub c_virtual_list_row_index {
2961        min-width: "36px";
2962        font-size: var!(font-sm);
2963        font-weight: "600";
2964        color: var!(accent);
2965        font-family: "ui-monospace, monospace";
2966        flex-shrink: "0";
2967        display: "flex";
2968        align-items: "center";
2969    }
2970
2971    pub c_virtual_list_row_label {
2972        font-size: var!(font-base);
2973        font-weight: "500";
2974        color: "inherit";
2975        min-width: "120px";
2976        flex-shrink: "0";
2977        overflow: "hidden";
2978        text-overflow: "ellipsis";
2979        white-space: "nowrap";
2980        display: "flex";
2981        align-items: "center";
2982    }
2983
2984    pub c_virtual_list_row_description {
2985        font-size: var!(font-base);
2986        color: "inherit";
2987        opacity: "1";
2988        overflow: "hidden";
2989        text-overflow: "ellipsis";
2990        white-space: "nowrap";
2991        flex: "1";
2992        display: "flex";
2993        align-items: "center";
2994    }
2995
2996    // ═══════════════════════════════════════════════════════════════════════════
2997    // Unified Layout Primitives
2998    // ═══════════════════════════════════════════════════════════════════════════
2999
3000    pub c_element_stack {
3001        display: "flex";
3002        flex-direction: "column";
3003        gap: var!(gap-element);
3004    }
3005
3006    pub c_switcher {
3007        display: "flex";
3008        gap: var!(gap-component);
3009        flex-wrap: "wrap";
3010        @media ((max-width: 767px)) {
3011            flex-direction: "column";
3012            gap: var!(gap-component-mobile);
3013        }
3014    }
3015
3016    pub c_switcher_col {
3017        flex: "1";
3018        min-width: "200px";
3019        @media ((max-width: 767px)) {
3020            min-width: "100%";
3021        }
3022    }
3023
3024    // ═══════════════════════════════════════════════════════════════════════════
3025    // Unified Description / Hint Text
3026    // ═══════════════════════════════════════════════════════════════════════════
3027
3028    pub c_hint {
3029        color: "inherit";
3030        opacity: "1";
3031        font-size: var!(font-base);
3032        margin-bottom: var!(gap-component);
3033    }
3034
3035    // ═══════════════════════════════════════════════════════════════════════════
3036    // Network Demo
3037    // ═══════════════════════════════════════════════════════════════════════════
3038
3039    pub c_net_messages_empty {
3040        color: "inherit";
3041        opacity: "1";
3042        padding: var!(space-xl);
3043        text-align: "center";
3044        font-size: var!(font-base);
3045    }
3046
3047    pub c_net_messages_list {
3048        display: "flex";
3049        flex-direction: "column";
3050        gap: var!(space-xs);
3051    }
3052
3053    pub c_net_message_item {
3054        display: "flex";
3055        align-items: "baseline";
3056        gap: var!(gap-element);
3057        justify-content: "space-between";
3058    }
3059
3060    pub c_net_message_index {
3061        color: var!(accent);
3062        font-size: var!(font-sm);
3063        font-weight: "600";
3064        white-space: "nowrap";
3065        flex-shrink: "0";
3066    }
3067
3068    pub c_net_message_data {
3069        color: "inherit";
3070        font-size: var!(font-base);
3071        word-break: "break-all";
3072        overflow-wrap: "break-word";
3073        flex: "1";
3074        min-width: "0";
3075    }
3076
3077    // ═══════════════════════════════════════════════════════════════════════════
3078    // WebSocket Demo
3079    // ═══════════════════════════════════════════════════════════════════════════
3080
3081    pub c_ws_message_input {
3082        width: "100%";
3083        flex: "1";
3084        height: "42px";
3085        padding: format!("0px {}", var!(space-lg));
3086        color: var!(foreground);
3087        border: format!("1px solid {}", var!(border));
3088        font-size: var!(font-base);
3089        line-height: "normal";
3090        box-sizing: "border-box";
3091        outline: "none";
3092        appearance: "none";
3093        -webkit-appearance: "none";
3094        -moz-appearance: "none";
3095        vertical-align: "middle";
3096        :hover {
3097            border-color: var!(accent);
3098            background: var!(accent-muted);
3099        }
3100        :focus {
3101            outline: "none";
3102            border-color: var!(accent);
3103            background: var!(accent-muted);
3104        }
3105    }
3106
3107    pub c_ws_message_time {
3108        color: var!(foreground);
3109        font-size: var!(font-sm);
3110        white-space: "nowrap";
3111        flex-shrink: "0";
3112        margin-left: "auto";
3113    }
3114
3115    // ═══════════════════════════════════════════════════════════════════════════
3116    // Sticky & CSS Effects Demo
3117    // ═══════════════════════════════════════════════════════════════════════════
3118
3119    // ═══════════════════════════════════════════════════════════════════════════
3120    // Home Page — Section
3121    // ═══════════════════════════════════════════════════════════════════════════
3122
3123    pub c_home {
3124        position: "relative";
3125        text-align: "center";
3126        margin-bottom: var!(space-xl);
3127        flex: "1";
3128        display: "flex";
3129        flex-direction: "column";
3130        justify-content: "center";
3131        @media ((max-width: 767px)) {
3132            margin-bottom: var!(space-lg);
3133            flex: "0 0 auto";
3134        }
3135    }
3136
3137    pub c_home_content {
3138        position: "relative";
3139        z-index: "1";
3140    }
3141
3142    pub c_home_badge_row {
3143        display: "inline-flex";
3144        align-items: "center";
3145        gap: var!(space-sm);
3146        margin-bottom: var!(space-md);
3147    }
3148
3149    pub c_home_badge {
3150        display: "inline-flex";
3151        justify-content: "center";
3152        align-items: "center";
3153        padding: format!("{} {}", var!(space-xs), var!(space-sm));
3154        color: var!(accent);
3155        font-size: var!(font-xs);
3156        font-weight: "600";
3157        letter-spacing: "0.05em";
3158        border: format!("1px solid {}", var!(accent));
3159    }
3160
3161    pub c_home_title {
3162        font-size: var!(font-5xl);
3163        font-weight: "800";
3164        letter-spacing: "-0.03em";
3165        margin: "0px";
3166        color: var!(foreground);
3167        margin-bottom: var!(space-xs);
3168        @media ((max-width: 767px)) {
3169            font-size: var!(font-4xl);
3170        }
3171    }
3172
3173    pub c_home_subtitle {
3174        font-size: var!(font-lg);
3175        color: var!(foreground);
3176        margin: "0px auto";
3177        max-width: "520px";
3178        margin-bottom: var!(space-lg);
3179        @media ((max-width: 767px)) {
3180            font-size: var!(font-base);
3181        }
3182    }
3183
3184    pub c_home_actions {
3185        display: "flex";
3186        gap: var!(space-md);
3187        justify-content: "center";
3188        flex-wrap: "wrap";
3189    }
3190
3191    pub c_home_btn_primary {
3192        display: "inline-flex";
3193        justify-content: "center";
3194        align-items: "center";
3195        gap: var!(space-sm);
3196        padding: format!("{} {}", var!(space-sm), var!(space-2xl));
3197        background: var!(accent);
3198        color: var!(text-on-accent);
3199        font-size: var!(font-base);
3200        font-weight: "600";
3201        text-decoration: "none";
3202        border: "1.5px solid transparent";
3203        cursor: "pointer";
3204        letter-spacing: "0.01em";
3205        vertical-align: "middle";
3206        min-height: var!(min-height-sm);
3207        :focus-visible {
3208            outline: "none";
3209        }
3210        :active {
3211            background: var!(accent);
3212            color: var!(text-on-accent);
3213            border-color: "1.5px solid transparent";
3214        }
3215    }
3216
3217    pub c_home_btn_secondary {
3218        display: "inline-flex";
3219        justify-content: "center";
3220        align-items: "center";
3221        gap: var!(space-sm);
3222        padding: format!("{} {}", var!(space-sm), var!(space-2xl));
3223        color: var!(accent);
3224        font-size: var!(font-base);
3225        font-weight: "600";
3226        text-decoration: "none";
3227        border: format!("1.5px solid {}", var!(accent));
3228        cursor: "pointer";
3229        letter-spacing: "0.01em";
3230        vertical-align: "middle";
3231        min-height: var!(min-height-sm);
3232        :focus-visible {
3233            outline: "none";
3234        }
3235        :active {
3236            background: "transparent";
3237            color: var!(accent);
3238            border-color: var!(accent);
3239        }
3240    }
3241
3242    // ═══════════════════════════════════════════════════════════════════════════
3243    // Home Page — Stats Row
3244    // ═══════════════════════════════════════════════════════════════════════════
3245
3246    pub c_home_stats {
3247        display: "grid";
3248        grid-template-columns: "repeat(4, 1fr)";
3249        gap: var!(space-md);
3250        margin-bottom: var!(space-xl);
3251        @media ((max-width: 767px)) {
3252            grid-template-columns: "repeat(2, 1fr)";
3253            gap: var!(space-sm);
3254        }
3255    }
3256
3257    pub c_home_stat_card {
3258        display: "flex";
3259        flex-direction: "column";
3260        align-items: "center";
3261        justify-content: "center";
3262        gap: var!(space-xs);
3263    }
3264
3265    pub c_home_stat_icon {
3266        font-size: var!(font-2xl);
3267    }
3268
3269    pub c_home_stat_value {
3270        font-size: var!(font-xl);
3271        font-weight: "800";
3272        color: var!(foreground);
3273        letter-spacing: "-0.01em";
3274    }
3275
3276    pub c_home_stat_label {
3277        font-size: var!(font-sm);
3278        color: var!(muted-foreground);
3279        font-weight: "500";
3280    }
3281
3282    // ═══════════════════════════════════════════════════════════════════════════
3283    // Home Page — Section & Feature Cards
3284    // ═══════════════════════════════════════════════════════════════════════════
3285
3286    pub c_home_section_title {
3287        font-size: var!(font-2xl);
3288        font-weight: "700";
3289        color: var!(foreground);
3290        margin: "0px";
3291        margin: format!("{} 0px", var!(gap-component));
3292        letter-spacing: "-0.02em";
3293    }
3294
3295    pub c_home_section_desc {
3296        font-size: var!(font-base);
3297        color: var!(foreground);
3298        margin: "0px";
3299        margin-bottom: var!(space-2xl);
3300    }
3301
3302    pub c_home_feature_grid {
3303        display: "grid";
3304        grid-template-columns: "repeat(2, 1fr)";
3305        gap: var!(space-md);
3306        @media ((max-width: 767px)) {
3307            grid-template-columns: "1fr";
3308        }
3309    }
3310
3311    pub c_feature_card {
3312        display: "flex";
3313        flex-direction: "column";
3314        gap: var!(space-sm);
3315        padding: "0px";
3316        overflow: "hidden";
3317    }
3318
3319    pub c_feature_header {
3320        display: "flex";
3321        align-items: "center";
3322        gap: var!(space-sm);
3323    }
3324
3325    pub c_feature_icon {
3326        font-size: var!(font-2xl);
3327        display: "flex";
3328        align-items: "center";
3329        justify-content: "center";
3330        line-height: "1";
3331        flex-shrink: "0";
3332    }
3333
3334    pub c_feature_name {
3335        font-size: var!(font-lg);
3336        font-weight: "600";
3337        color: var!(foreground);
3338        margin: "0px";
3339        overflow: "hidden";
3340        text-overflow: "ellipsis";
3341        white-space: "nowrap";
3342    }
3343
3344    pub c_feature_desc {
3345        font-size: var!(font-sm);
3346        color: var!(foreground);
3347        margin: "0px";
3348    }
3349
3350    // ═══════════════════════════════════════════════════════════════════════════
3351    // Global Utilities
3352    // ═══════════════════════════════════════════════════════════════════════════
3353}