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        min-width: "140px";
3522        background: var!(background);
3523        border: format!("1px solid {}", var!(border));
3524        box-shadow: var!(shadow-accent-lg);
3525        flex-direction: "column";
3526        z-index: "101";
3527    }
3528    pub c_euv_dropdown_menu_open {
3529        display: "flex";
3530    }
3531    pub c_euv_dropdown_menu_closed {
3532        display: "none";
3533    }
3534    pub c_euv_dropdown_item {
3535        padding: format!("{} {}", var!(space-sm), var!(space-lg));
3536        font-size: var!(font-sm);
3537        text-align: "left";
3538        cursor: "pointer";
3539        hover {
3540            background: var!(accent-muted);
3541        }
3542    }
3543
3544    // ═══════════════════════════════════════════════════════════════════════════
3545    // euv_sidebar
3546    // ═══════════════════════════════════════════════════════════════════════════
3547
3548    pub c_euv_sidebar_group {
3549        margin-bottom: var!(space-xs);
3550    }
3551    pub c_euv_sidebar_group_title {
3552        display: "flex";
3553        align-items: "center";
3554        justify-content: "space-between";
3555        width: "100%";
3556        padding: format!("{} {}", var!(space-sm), var!(space-xl));
3557        font-size: var!(font-sm);
3558        font-weight: "600";
3559        cursor: "pointer";
3560        text-align: "left";
3561        hover {
3562            background: var!(accent-muted);
3563        }
3564    }
3565    pub c_euv_sidebar_group_arrow {
3566        font-size: var!(font-xs);
3567        color: var!(muted-foreground);
3568        transition: format!("transform {} {}", var!(duration-fast), var!(ease-out));
3569    }
3570    pub c_euv_sidebar_group_arrow_open {
3571        transform: "rotate(90deg)";
3572    }
3573    pub c_euv_sidebar_children {
3574        display: "flex";
3575        flex-direction: "column";
3576        padding-left: var!(space-md);
3577        border-left: format!("1px dashed {}", var!(border));
3578        margin-left: var!(space-sm);
3579        animation: format!("euv-fade-in {} {}", var!(duration-normal), var!(ease-out));
3580    }
3581    pub c_euv_sidebar_link {
3582        display: "block";
3583        padding: format!("{} {}", var!(space-sm), var!(space-xl));
3584        font-size: var!(font-sm);
3585        color: var!(foreground);
3586        cursor: "pointer";
3587        transition: format!("background {} {}", var!(duration-fast), var!(ease-out));
3588        hover {
3589            background: var!(accent-muted);
3590            color: var!(accent);
3591            box-shadow: format!("inset 4px 0px 0px {}", var!(accent));
3592        }
3593    }
3594    pub c_euv_sidebar_link_active {
3595        display: "block";
3596        padding: format!("{} {}", var!(space-sm), var!(space-xl));
3597        font-size: var!(font-sm);
3598        background: var!(accent);
3599        color: var!(text-on-accent);
3600        font-weight: "600";
3601        cursor: "pointer";
3602    }
3603
3604    // ═══════════════════════════════════════════════════════════════════════════
3605    // euv_toc
3606    // ═══════════════════════════════════════════════════════════════════════════
3607
3608    pub c_euv_toc {
3609        position: "sticky";
3610        top: "76px";
3611        display: "flex";
3612        flex-direction: "column";
3613        gap: var!(space-xs);
3614        border-left: format!("1px solid {}", var!(border));
3615        padding-left: var!(space-lg);
3616    }
3617    pub c_euv_toc_title {
3618        font-size: var!(font-xs);
3619        font-weight: "700";
3620        text-transform: "uppercase";
3621        letter-spacing: "0.08em";
3622        color: var!(muted-foreground);
3623        margin-bottom: var!(space-xs);
3624    }
3625    pub c_euv_toc_link {
3626        font-size: var!(font-sm);
3627        color: var!(muted-foreground);
3628        cursor: "pointer";
3629        line-height: "1.5";
3630        hover {
3631            color: var!(accent);
3632        }
3633    }
3634    pub c_euv_toc_link_nested {
3635        padding-left: var!(space-lg);
3636    }
3637
3638    // ═══════════════════════════════════════════════════════════════════════════
3639    // euv_pagination
3640    // ═══════════════════════════════════════════════════════════════════════════
3641
3642    pub c_euv_pagination {
3643        display: "flex";
3644        justify-content: "space-between";
3645        gap: var!(gap-component);
3646        margin-top: var!(space-4xl);
3647        @media ((max-width: 767px)) {
3648            flex-direction: "column";
3649        }
3650    }
3651    pub c_euv_pagination_link {
3652        flex: "1";
3653        border: format!("1px solid {}", var!(border));
3654        padding: var!(space-lg);
3655        cursor: "pointer";
3656        display: "flex";
3657        flex-direction: "column";
3658        gap: var!(space-2xs);
3659        hover {
3660            border-color: var!(accent);
3661        }
3662    }
3663    pub c_euv_pagination_label {
3664        font-size: var!(font-xs);
3665        color: var!(muted-foreground);
3666        text-transform: "uppercase";
3667        letter-spacing: "0.08em";
3668    }
3669    pub c_euv_pagination_text {
3670        font-size: var!(font-base);
3671        font-weight: "600";
3672        color: var!(accent);
3673    }
3674    pub c_euv_pagination_next {
3675        text-align: "right";
3676    }
3677    pub c_euv_pagination_spacer {
3678        flex: "1";
3679    }
3680
3681    // ═══════════════════════════════════════════════════════════════════════════
3682    // euv_drawer
3683    // ═══════════════════════════════════════════════════════════════════════════
3684
3685    pub c_euv_drawer_overlay {
3686        position: "fixed";
3687        top: "0px";
3688        left: "0px";
3689        right: "0px";
3690        bottom: "0px";
3691        background: var!(bg-overlay);
3692        z-index: "200";
3693        transition: format!("opacity {} {}, visibility {} {}", var!(duration-overlay), var!(ease-out), var!(duration-overlay), var!(ease-out));
3694    }
3695    pub c_euv_drawer_overlay_open {
3696        opacity: "1";
3697        visibility: "visible";
3698    }
3699    pub c_euv_drawer_overlay_closed {
3700        opacity: "0";
3701        visibility: "hidden";
3702    }
3703    pub c_euv_drawer {
3704        position: "fixed";
3705        top: "0px";
3706        left: "0px";
3707        bottom: "0px";
3708        width: "260px";
3709        background: var!(background);
3710        border-right: format!("1px solid {}", var!(border));
3711        z-index: "201";
3712        overflow-y: "auto";
3713        padding: var!(space-xl);
3714        transition: format!("transform {} {}, visibility {} {}", var!(duration-normal), var!(ease-out), var!(duration-normal), var!(ease-out));
3715    }
3716    pub c_euv_drawer_open {
3717        transform: "translateX(0px)";
3718        visibility: "visible";
3719    }
3720    pub c_euv_drawer_closed {
3721        transform: "translateX(-100%)";
3722        visibility: "hidden";
3723    }
3724
3725    // ═══════════════════════════════════════════════════════════════════════════
3726    // euv_markdown / euv_footer
3727    // ═══════════════════════════════════════════════════════════════════════════
3728
3729    pub c_euv_markdown {
3730        width: "100%";
3731        min-width: "0px";
3732    }
3733    pub c_euv_footer {
3734        margin-top: var!(space-7xl);
3735        padding: format!("{} 0px", var!(space-2xl));
3736        border-top: format!("1px dashed {}", var!(border));
3737        text-align: "center";
3738        font-size: var!(font-sm);
3739        color: var!(muted-foreground);
3740    }
3741
3742    // ═══════════════════════════════════════════════════════════════════════════
3743    // euv_result / euv_doc_layout
3744    // ═══════════════════════════════════════════════════════════════════════════
3745
3746    pub c_euv_result {
3747        display: "flex";
3748        flex-direction: "column";
3749        align-items: "center";
3750        justify-content: "center";
3751        text-align: "center";
3752        gap: var!(space-md);
3753        padding: format!("{} {}", var!(space-4xl), var!(space-md));
3754        min-height: "50vh";
3755    }
3756    pub c_euv_result_code {
3757        font-size: var!(font-6xl);
3758        font-weight: "700";
3759        line-height: "1";
3760        letter-spacing: "-0.02em";
3761    }
3762    pub c_euv_result_title {
3763        font-size: var!(font-2xl);
3764        font-weight: "600";
3765        margin: "0px";
3766    }
3767    pub c_euv_result_description {
3768        color: var!(muted-foreground);
3769        margin: "0px";
3770    }
3771    pub c_euv_result_actions {
3772        display: "flex";
3773        gap: var!(space-md);
3774        margin-top: var!(space-lg);
3775    }
3776
3777    pub c_euv_doc_layout {
3778        display: "flex";
3779        gap: var!(space-4xl);
3780        width: "100%";
3781        min-width: "0px";
3782        max-width: "1080px";
3783        margin: "0px auto";
3784    }
3785    pub c_euv_doc_content {
3786        flex: "1";
3787        min-width: "0px";
3788        max-width: var!(content-max-width);
3789    }
3790    pub c_euv_doc_toc {
3791        width: "200px";
3792        flex-shrink: "0";
3793        @media ((max-width: 1100px)) {
3794            display: "none";
3795        }
3796    }
3797}