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