Skip to main content

euv_ui/style/class/
fn.rs

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