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