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