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