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