@muten/shadcn 0.0.7 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +47 -0
- package/README.md +47 -0
- package/kit.css +2763 -0
- package/motion.css +31 -1
- package/nova.css +1387 -0
- package/package.json +6 -2
- package/registry/accordion.muten +11 -10
- package/registry/agenda.js +35 -0
- package/registry/agenda.muten +10 -0
- package/registry/alert-dialog.muten +9 -12
- package/registry/alert.muten +8 -8
- package/registry/app-shell.js +9 -0
- package/registry/app-shell.muten +12 -0
- package/registry/attachment.muten +13 -9
- package/registry/avatar.muten +24 -5
- package/registry/badge.muten +23 -8
- package/registry/band.muten +16 -0
- package/registry/bar-chart.muten +7 -0
- package/registry/bell.muten +3 -0
- package/registry/bento.muten +6 -9
- package/registry/booking.js +21 -0
- package/registry/booking.muten +13 -0
- package/registry/breadcrumb.muten +9 -7
- package/registry/button-group.muten +13 -4
- package/registry/button.muten +21 -8
- package/registry/calendar.js +28 -93
- package/registry/calendar.muten +9 -8
- package/registry/canvas-viewport.js +12 -5
- package/registry/canvas-viewport.muten +9 -9
- package/registry/card-field.muten +4 -0
- package/registry/card.muten +12 -8
- package/registry/carousel.js +5 -36
- package/registry/carousel.muten +12 -5
- package/registry/chatbot.muten +9 -0
- package/registry/checklist.muten +6 -0
- package/registry/choice-list.muten +16 -0
- package/registry/code.js +14 -12
- package/registry/code.muten +6 -7
- package/registry/collapsible.muten +14 -10
- package/registry/color-picker.js +460 -41
- package/registry/color-picker.muten +7 -6
- package/registry/combobox.js +5 -0
- package/registry/combobox.muten +6 -23
- package/registry/command-palette.muten +8 -12
- package/registry/command.js +32 -0
- package/registry/command.muten +32 -11
- package/registry/context-menu.muten +9 -8
- package/registry/count-up.muten +5 -10
- package/registry/date-field.js +5 -0
- package/registry/date-field.muten +7 -0
- package/registry/device-frame.muten +8 -0
- package/registry/dialog.muten +6 -12
- package/registry/dirty-bar.js +19 -0
- package/registry/dirty-bar.muten +13 -0
- package/registry/drawer.muten +6 -11
- package/registry/dropdown-menu.muten +37 -13
- package/registry/empty.muten +11 -7
- package/registry/feature-grid.muten +10 -12
- package/registry/feature-rows.muten +12 -8
- package/registry/field-behavior.js +33 -0
- package/registry/field-behavior.muten +9 -0
- package/registry/field.muten +26 -7
- package/registry/file-input.js +36 -21
- package/registry/file-input.muten +8 -7
- package/registry/fixed-card.muten +25 -0
- package/registry/folder-picker.js +13 -15
- package/registry/folder-picker.muten +5 -8
- package/registry/gradient-blinds.muten +6 -13
- package/registry/hover-card.muten +7 -9
- package/registry/image-upload.js +5 -0
- package/registry/image-upload.muten +8 -0
- package/registry/indicator.muten +5 -0
- package/registry/input-group.muten +27 -4
- package/registry/input-otp.js +8 -35
- package/registry/input-otp.muten +6 -6
- package/registry/input.muten +8 -7
- package/registry/inspector.muten +13 -15
- package/registry/island.js +7 -0
- package/registry/island.muten +5 -0
- package/registry/item.muten +20 -7
- package/registry/kbd.muten +3 -3
- package/registry/kit/board.js +300 -0
- package/registry/kit/collections.js +148 -0
- package/registry/kit/core.js +989 -0
- package/registry/kit/dates.js +106 -0
- package/registry/kit/menus.js +90 -0
- package/registry/kit/overlays.js +114 -0
- package/registry/kit/paint.js +211 -0
- package/registry/kit/qrcode.js +2291 -0
- package/registry/kit/structure.js +393 -0
- package/registry/kit/table.js +198 -0
- package/registry/kit/values.js +179 -0
- package/registry/kit-layer.js +2 -0
- package/registry/kit-layer.muten +5 -0
- package/registry/kit-skeleton.js +24 -0
- package/registry/kit-skeleton.muten +16 -0
- package/registry/kit-widget.js +79 -0
- package/registry/kit-widget.muten +4 -0
- package/registry/link-btn.muten +9 -7
- package/registry/live-stack.js +29 -0
- package/registry/live-stack.muten +7 -0
- package/registry/logo-cloud.muten +6 -11
- package/registry/member-list.muten +6 -0
- package/registry/menubar.muten +10 -14
- package/registry/message-scroller.js +12 -0
- package/registry/message-scroller.muten +8 -4
- package/registry/message.muten +27 -10
- package/registry/messaging.muten +11 -0
- package/registry/modal-behavior.js +56 -0
- package/registry/modal-behavior.muten +4 -0
- package/registry/modal.muten +29 -0
- package/registry/money-field.js +5 -0
- package/registry/money-field.muten +7 -0
- package/registry/nav-button.muten +14 -0
- package/registry/navigation-menu.muten +16 -14
- package/registry/navpill.muten +15 -9
- package/registry/new-appointment.js +8 -0
- package/registry/new-appointment.muten +10 -0
- package/registry/number-field.js +34 -24
- package/registry/number-field.muten +8 -6
- package/registry/order-board.js +6 -0
- package/registry/order-board.muten +21 -0
- package/registry/overlay-behavior.js +13 -0
- package/registry/overlay-behavior.muten +4 -0
- package/registry/pagination-nav.js +6 -0
- package/registry/pagination-nav.muten +8 -0
- package/registry/pagination.muten +12 -9
- package/registry/password-field.muten +3 -0
- package/registry/permission-matrix.muten +6 -0
- package/registry/phone-field.js +5 -0
- package/registry/phone-field.muten +7 -0
- package/registry/phone-shell.js +7 -0
- package/registry/phone-shell.muten +9 -0
- package/registry/pill.muten +6 -5
- package/registry/plans.muten +4 -0
- package/registry/popover.muten +16 -9
- package/registry/pricing.muten +21 -21
- package/registry/progress.muten +5 -5
- package/registry/queue.muten +3 -0
- package/registry/radio-group.muten +16 -8
- package/registry/range-slider.js +9 -24
- package/registry/range-slider.muten +4 -5
- package/registry/resizable.js +34 -27
- package/registry/resizable.muten +16 -5
- package/registry/roving-behavior.js +16 -0
- package/registry/roving-behavior.muten +3 -0
- package/registry/row-menu.js +5 -0
- package/registry/row-menu.muten +5 -0
- package/registry/save-button.muten +11 -0
- package/registry/scale-slider.js +7 -0
- package/registry/scale-slider.muten +9 -0
- package/registry/scroll-area.muten +8 -4
- package/registry/segmented-control.muten +8 -8
- package/registry/separator.muten +3 -3
- package/registry/share-button.js +7 -0
- package/registry/share-button.muten +10 -0
- package/registry/sheet.muten +6 -10
- package/registry/sidebar.muten +23 -15
- package/registry/skeleton.muten +6 -4
- package/registry/slider.js +73 -27
- package/registry/slider.muten +6 -6
- package/registry/sortable-behavior.js +43 -0
- package/registry/sortable-behavior.muten +2 -0
- package/registry/sortable-list.js +10 -26
- package/registry/sortable-list.muten +6 -7
- package/registry/sortable.muten +15 -0
- package/registry/spark.js +14 -0
- package/registry/spark.muten +3 -0
- package/registry/spinner.muten +4 -3
- package/registry/split-button.muten +12 -10
- package/registry/stamp-card.muten +7 -0
- package/registry/stat-band.muten +6 -9
- package/registry/stat.muten +23 -0
- package/registry/status-bar.muten +7 -6
- package/registry/stepper.muten +17 -14
- package/registry/store-qr.js +5 -0
- package/registry/store-qr.muten +5 -0
- package/registry/swatch.muten +8 -8
- package/registry/switch.muten +14 -6
- package/registry/table-view.muten +10 -0
- package/registry/tabs-behavior.js +27 -0
- package/registry/tabs-behavior.muten +3 -0
- package/registry/tabs.muten +19 -10
- package/registry/tag-input.js +4 -27
- package/registry/tag-input.muten +6 -6
- package/registry/text.muten +7 -0
- package/registry/time-field.js +5 -0
- package/registry/time-field.muten +6 -0
- package/registry/timeline.muten +14 -14
- package/registry/toaster.js +34 -22
- package/registry/toaster.muten +10 -8
- package/registry/toggle-group.muten +11 -6
- package/registry/toggle.muten +8 -5
- package/registry/toolbar.muten +11 -6
- package/registry/tooltip.muten +6 -9
- package/registry/tree-view.js +27 -7
- package/registry/tree-view.muten +8 -13
- package/registry/vector-field.muten +9 -8
- package/registry/virtual-list.js +5 -0
- package/registry/virtual-list.muten +6 -0
- package/registry/weekly-hours.muten +4 -0
- package/registry/wordline.muten +6 -0
- package/registry/zoom-control.muten +9 -9
- package/registry.json +872 -406
- package/registry/context-menu.js +0 -34
package/kit.css
ADDED
|
@@ -0,0 +1,2763 @@
|
|
|
1
|
+
/* @muten/shadcn · kit layer: what the library adds on top of Nova (import after nova.css, `class="style-nova"` on <html>).
|
|
2
|
+
It is the reference artifact's own CSS, as is, so every component is 1:1 with it:
|
|
3
|
+
1. muten adapters (this block): what changes because muten renders an Icon as span.mu-icon > svg, a Stack as a
|
|
4
|
+
flex column, and a dynamic value through a CSS var.
|
|
5
|
+
2. lib · the generic layer (tokens, skins, atoms, fields, overlays, pickers, cards, tables, carousel…)
|
|
6
|
+
3. sys · the system kit (agenda, messaging, chat, numbers, settings, billing, team, skeletons…)
|
|
7
|
+
4. pk · the color picker 5. mslider · the slider
|
|
8
|
+
Edit the artifact first, then copy here: the artifact is the reference. */
|
|
9
|
+
|
|
10
|
+
/* ── 1. muten adapters ── */
|
|
11
|
+
/* A Nova component that is a plain block in shadcn must not inherit muten's flex column; one Nova says is a row stays
|
|
12
|
+
a row. Unlayered + zero specificity: beats muten's base layer, loses to every Nova/kit rule that sets a display. */
|
|
13
|
+
:where(.style-nova .mu-stack[data-slot]) { display: block; } /* a Nova part is a plain div until Nova says otherwise */
|
|
14
|
+
/* Every library class was written for a <div>, whose flex default is a ROW; muten's Stack defaults to a column. */
|
|
15
|
+
:where(.style-nova .mu-stack[class*="cx-"], .style-nova .mu-stack[class*="cn-"], .style-nova .mu-nav[class*="cx-"]) { flex-direction: row; }
|
|
16
|
+
/* The generic card's header item keeps one line per text, like the artifact's .cx-ellipsis spans. */
|
|
17
|
+
.cn-card-header > .cn-item .cn-item-title, .cn-card-header > .cn-item .cn-item-description { display: block; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
18
|
+
/* The kit's layout helpers on a muten Stack: a row stays a row. */
|
|
19
|
+
/* The artifact's inline styles, as classes (muten writes no inline style). Same values. */
|
|
20
|
+
.cx-stat-body { display: flex; flex-direction: column; gap: 6px; padding: 14px 14px 12px; }
|
|
21
|
+
.cx-stat-row { display: flex; flex-direction: row; align-items: center; justify-content: space-between; flex-wrap: nowrap; gap: 6px; }
|
|
22
|
+
.cx-stat-ic:empty { display: none; }
|
|
23
|
+
.cx-gap-6 { gap: 6px; }
|
|
24
|
+
.cx-stat-ic > .mu-icon { font-size: 15px; }
|
|
25
|
+
/* Icons: span.mu-icon wraps the svg; it sits like the svg would. */
|
|
26
|
+
.style-nova .mu-icon { display: inline-flex; flex: none; line-height: 1; }
|
|
27
|
+
/* Avatar tone: a hue per person, chosen from data (tone 1-8) since muten does not hash names. */
|
|
28
|
+
.cn-avatar[data-tone] { --h: 230; }
|
|
29
|
+
.cn-avatar[data-tone] .cn-avatar-fallback { background: color-mix(in srgb, oklch(0.62 0.13 var(--h)) 22%, var(--background)); color: color-mix(in srgb, oklch(0.55 0.14 var(--h)) 50%, var(--foreground)); font-weight: 600; }
|
|
30
|
+
.cn-avatar[data-tone="1"] { --h: 25; } .cn-avatar[data-tone="2"] { --h: 70; } .cn-avatar[data-tone="3"] { --h: 140; } .cn-avatar[data-tone="4"] { --h: 190; }
|
|
31
|
+
.cn-avatar[data-tone="5"] { --h: 230; } .cn-avatar[data-tone="6"] { --h: 280; } .cn-avatar[data-tone="7"] { --h: 320; } .cn-avatar[data-tone="8"] { --h: 0; }
|
|
32
|
+
/* Alert: Nova's grid keys on a direct <svg>; give span.mu-icon the same place. */
|
|
33
|
+
.style-nova .cn-alert:has(> .mu-icon) { grid-template-columns: auto 1fr; column-gap: .5rem; }
|
|
34
|
+
.style-nova .cn-alert > .mu-icon { grid-row: span 2; translate: 0 .125rem; font-size: 16px; }
|
|
35
|
+
.cn-alert[data-tone="info"] > .mu-icon { color: var(--info); } .cn-alert[data-tone="ok"] > .mu-icon { color: var(--success); } .cn-alert[data-tone="wait"] > .mu-icon { color: var(--warning); }
|
|
36
|
+
.cn-alert[data-tone="wait"] { background: color-mix(in srgb, var(--warning) 6%, var(--card)); }
|
|
37
|
+
/* Progress: the value rides --w (muten's style(w: …)); Nova's flex-1 would stretch it to full. */
|
|
38
|
+
.cn-progress > .cn-progress-indicator:not([style*="transform"]) { flex: none; width: var(--w, 0%); transition: width 260ms cubic-bezier(.22, 1, .36, 1); }
|
|
39
|
+
/* Skeleton: the shimmer on Nova's block (the kit's own .cx-sk keeps working for Customs). */
|
|
40
|
+
.cn-skeleton { background: linear-gradient(90deg, var(--sk-a) 0%, var(--sk-b) 50%, var(--sk-a) 100%); background-size: 200% 100%; animation: cx-sk 1.3s linear infinite; }
|
|
41
|
+
.cn-skeleton[data-shape="circle"], .cn-skeleton[data-shape="pill"] { border-radius: 99px; }
|
|
42
|
+
@media (prefers-reduced-motion: reduce) { .cn-skeleton { animation: none; } }
|
|
43
|
+
/* Modal from muten: the root's data-open drives what the artifact's JS drove with data-state + [hidden]. Closed, the
|
|
44
|
+
layers stay mounted but invisible and inert; visibility flips only after the exit has played (no flicker). */
|
|
45
|
+
.cx-modal-root[data-open="true"] > .cx-overlay { opacity: 1; }
|
|
46
|
+
.cx-modal-root[data-open="true"] > .cx-modal[data-mode="dialog"] { transform: translate(-50%, -50%); opacity: 1; }
|
|
47
|
+
.cx-modal-root[data-open="true"] > .cx-modal[data-mode="drawer"] { transform: translateY(0); }
|
|
48
|
+
.cx-modal-root:not([data-open="true"]) > .cx-overlay, .cx-modal-root:not([data-open="true"]) > .cx-modal { visibility: hidden; pointer-events: none; transition-property: opacity, transform, visibility; transition-delay: 0s, 0s, 460ms; }
|
|
49
|
+
.cx-modal-root > .cx-overlay { border: 0; padding: 0; cursor: default; }
|
|
50
|
+
.cx-modal-head > .cx-modal-title { font-size: 16px; font-weight: 600; color: var(--popover-foreground); }
|
|
51
|
+
.cx-modal-desc { color: var(--muted-foreground); font-size: 14px; }
|
|
52
|
+
.cx-modal-desc:empty { display: none; }
|
|
53
|
+
.cx-modal-behavior { display: none; }
|
|
54
|
+
/* auto mode before the first open (no flash): dialog wide, drawer on a phone */
|
|
55
|
+
.cx-modal[data-mode="auto"] { visibility: hidden; }
|
|
56
|
+
/* Field from muten: an empty description/label must not take a row. The switch row's «why» is the artifact's <p>. */
|
|
57
|
+
.cn-field > .cn-label:empty, .cn-field > .cn-field-description:empty { display: none; }
|
|
58
|
+
.cx-switch-row > .cx-switch-why { grid-column: 1; margin: 0; font-size: 13px; color: var(--muted-foreground); line-height: 1.45; }
|
|
59
|
+
.cx-switch-row > .cx-switch-why:empty { display: none; }
|
|
60
|
+
.cx-switch-row > .cn-switch { margin-top: 1px; }
|
|
61
|
+
/* Tokens swatches from muten (the artifact paints them with <i style>): the color rides --c. */
|
|
62
|
+
.cx-sw > .cx-sw-i { width: 22px; height: 22px; border-radius: 6px; box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--foreground) 15%, transparent); flex: none; background: var(--c); }
|
|
63
|
+
.cx-z > .cx-z-code { font: 12px var(--font-mono); color: var(--muted-foreground); }
|
|
64
|
+
.cx-z > .cx-z-v { font: 600 12px var(--font-mono); text-align: right; }
|
|
65
|
+
.cx-z > .cx-z-i { height: 8px; width: var(--w); border-radius: 99px; background: var(--selected); opacity: .25; }
|
|
66
|
+
/* Nav: the chosen one rides aria-pressed (muten writes aria-current="false" too, which [aria-current] would match). */
|
|
67
|
+
.style-nova .cn-button.cx-nav[aria-pressed="true"][aria-pressed][aria-pressed] {
|
|
68
|
+
background: var(--selected-soft); color: var(--selected); position: relative;
|
|
69
|
+
}
|
|
70
|
+
.cx-nav[aria-pressed="true"]::after { content: ""; position: absolute; left: 50%; bottom: 3px; width: 4px; height: 4px; margin-left: -2px; border-radius: 99px; background: var(--selected); }
|
|
71
|
+
/* Chip: a removed chip leaves with the kit's fade (muten keeps it until the animation ends). */
|
|
72
|
+
.cx-chip.mu-leave { animation: cx-chip-out 160ms ease forwards; }
|
|
73
|
+
.cx-tabs-behavior { display: none; }
|
|
74
|
+
.cx-tab-panel.hidden { display: none; }
|
|
75
|
+
/* Items that are buttons (a ChoiceItem): a row, not a centred label. */
|
|
76
|
+
button.cn-item { width: 100%; font: inherit; text-align: left; cursor: pointer; }
|
|
77
|
+
.cx-roving-behavior, .cx-sortable-behavior { display: none; }
|
|
78
|
+
.cx-grip > .mu-icon { font-size: 16px; }
|
|
79
|
+
/* Row3 from muten (the artifact writes <div><b><small>). */
|
|
80
|
+
.cx-row3 > .cx-row3-who { display: block; min-width: 0; }
|
|
81
|
+
.cx-row3 .cx-row3-t { font-weight: 500; display: block; }
|
|
82
|
+
.cx-row3 .cx-row3-s { color: var(--muted-foreground); font-size: 13px; }
|
|
83
|
+
.cx-row3 .cx-row3-s:empty { display: none; }
|
|
84
|
+
.cx-empty-mini > .mu-icon { font-size: 22px; color: var(--success); }
|
|
85
|
+
/* Text atom from a part: data-variant comes from data(), same rules as the kit's .cx-text below. */
|
|
86
|
+
/* Button icon motion, for span.mu-icon (the kit's rules below key on svg). */
|
|
87
|
+
@media (hover: hover) and (prefers-reduced-motion: no-preference) {
|
|
88
|
+
.cn-button > .mu-icon { transition: transform 180ms cubic-bezier(.22, 1, .36, 1); }
|
|
89
|
+
.cn-button:not(:disabled):hover > .mu-icon:last-child:not(:first-child) { transform: translateX(2px); }
|
|
90
|
+
.cn-button:not(:disabled):hover > .mu-icon:first-child:not(:last-child) { transform: scale(1.12); }
|
|
91
|
+
.cn-button:not(:disabled):hover > .mu-icon:only-child { transform: scale(1.12); }
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
/* ═════════════════════════ 1b. the artifact page's library rules (floating panels, drawer, svg size, checkbox, toasts) ═════════════════════════ */
|
|
96
|
+
.pg-pop { position: fixed; top: 0; left: 0; z-index: 60; }
|
|
97
|
+
.pg-drw-o { position: fixed; inset: 0; z-index: 50; background: rgb(0 0 0 / .3); backdrop-filter: blur(8px); opacity: 0; transition: opacity 450ms cubic-bezier(0.22, 1, 0.36, 1); }
|
|
98
|
+
.pg-drw-o[data-state="open"] { opacity: 1; }
|
|
99
|
+
.pg-drw { position: fixed; z-index: 50; margin: 8px; display: flex; flex-direction: column; border-radius: 24px; border: 1px solid var(--popover); background: var(--popover); color: var(--popover-foreground); font-size: 14px; box-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1); transition: transform 450ms cubic-bezier(0.22, 1, 0.36, 1); will-change: transform; outline: none; }
|
|
100
|
+
:root[data-theme="dark"] .pg-drw { border-color: var(--border); }
|
|
101
|
+
.pg-drw[data-dir="right"] { top: 0; right: 0; bottom: 0; width: calc(75% - 16px); max-width: 24rem; transform: translateX(calc(100% + 8px)); }
|
|
102
|
+
.pg-drw[data-dir="bottom"] { left: 0; right: 0; bottom: 0; max-height: calc(100dvh - 6rem); transform: translateY(calc(100% + 8px)); }
|
|
103
|
+
.pg-drw[data-state="open"] { transform: none; }
|
|
104
|
+
.pg-drw-handle { display: none; margin: 12px auto 0; width: 96px; height: 4px; flex: none; border-radius: 99px; background: var(--muted); }
|
|
105
|
+
.pg-drw[data-dir="bottom"] .pg-drw-handle { display: block; }
|
|
106
|
+
.pg-drw[data-dir="bottom"] > * { width: 100%; max-width: 32rem; margin-left: auto; margin-right: auto; }
|
|
107
|
+
.pg-drw-body { display: grid; gap: 8px; padding: 0 16px; overflow: auto; }
|
|
108
|
+
.pg-slot { display: flex; align-items: center; justify-content: space-between; gap: 12px; border: 1px solid var(--border); border-radius: 10px; padding: 10px 12px; cursor: pointer; }
|
|
109
|
+
.pg-slot b { font-weight: 500; } .pg-slot small { color: var(--muted-foreground); font-size: 12.5px; }
|
|
110
|
+
.pg-slot:has([data-state="checked"]) { background: color-mix(in oklch, var(--muted) 60%, transparent); }
|
|
111
|
+
/* icons with no size class get shadcn's default 16px (containers that size them still win) */
|
|
112
|
+
/* an icon with no size of its own is 16 px; an SVG that states its width (a logo, an illustration) keeps it */
|
|
113
|
+
.style-nova :where(svg:not([class*="size-"]):not([width])) { width: 16px; height: 16px; flex-shrink: 0; }
|
|
114
|
+
/* our extra for the checkbox: the check draws itself (shadcn just shows it) */
|
|
115
|
+
.cb-mark { width: 14px; height: 14px; }
|
|
116
|
+
[data-state="unchecked"] > .cn-checkbox-indicator { visibility: hidden; }
|
|
117
|
+
.style-nova .cb-mark path { stroke-dasharray: 24; stroke-dashoffset: 24; }
|
|
118
|
+
.style-nova [data-state="checked"] .cb-mark path { stroke-dashoffset: 0; transition: stroke-dashoffset 200ms cubic-bezier(0.22, 1, 0.36, 1) 40ms; }
|
|
119
|
+
.style-nova [data-state="checked"] > .cn-checkbox-indicator { visibility: visible; }
|
|
120
|
+
.style-nova .cn-checkbox { transition: background-color 150ms, border-color 150ms, color 150ms; }
|
|
121
|
+
.style-nova .cn-checkbox:active { scale: .92; transition: scale 100ms; }
|
|
122
|
+
/* the toast, as shadcn's current one (Base UI): stack, peek, expand */
|
|
123
|
+
.pg-toasts { position: fixed; z-index: 70; right: 16px; bottom: 16px; width: calc(100% - 32px); max-width: 384px; pointer-events: none; }
|
|
124
|
+
.pg-toast { position: absolute; right: 0; bottom: 0; width: 100%; pointer-events: auto; transform-origin: bottom; border-radius: calc(var(--radius) * 1.8); border: 1px solid var(--border); background: var(--popover); color: var(--popover-foreground); box-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);
|
|
125
|
+
--gap: .75rem; --peek: .75rem; --scale: max(0, 1 - var(--i) * 0.1); --shrink: calc(1 - var(--scale));
|
|
126
|
+
height: var(--front-h); z-index: calc(1000 - var(--i));
|
|
127
|
+
transform: translateY(calc(0px - var(--i) * var(--peek) - var(--shrink) * var(--front-h))) scale(var(--scale));
|
|
128
|
+
transition: transform 500ms cubic-bezier(0.22, 1, 0.36, 1), opacity 500ms, height 150ms; will-change: transform; }
|
|
129
|
+
.pg-toast::after { content: ""; position: absolute; top: 100%; left: 0; width: 100%; height: calc(var(--gap) + 1px); }
|
|
130
|
+
.pg-toasts[data-expanded] .pg-toast { height: var(--h); transform: translateY(calc(0px - var(--off) - var(--i) * var(--gap))); }
|
|
131
|
+
.pg-toast[data-start], .pg-toast[data-end] { transform: translateY(150%) !important; }
|
|
132
|
+
.pg-toast[data-limited] { opacity: 0; }
|
|
133
|
+
.pg-toast-c { display: flex; height: 100%; align-items: center; gap: 12px; overflow: hidden; padding: 16px; transition: opacity 250ms cubic-bezier(0.22, 1, 0.36, 1); }
|
|
134
|
+
.pg-toast[data-behind] .pg-toast-c { opacity: 0; }
|
|
135
|
+
.pg-toasts[data-expanded] .pg-toast-c { opacity: 1; }
|
|
136
|
+
.pg-toast-t { font-size: 14px; font-weight: 500; } .pg-toast-d { font-size: 14px; color: var(--muted-foreground); }
|
|
137
|
+
@media (prefers-reduced-motion: reduce) { .pg-toast, .pg-vaul { transition-duration: 1ms !important; } }
|
|
138
|
+
|
|
139
|
+
.pg-acc-icon { margin-left: auto; color: var(--muted-foreground); pointer-events: none; flex-shrink: 0; }
|
|
140
|
+
.pg-acc-open { display: none; }
|
|
141
|
+
[aria-expanded="true"] > .pg-acc-closed { display: none; } [aria-expanded="true"] > .pg-acc-open { display: inline; }
|
|
142
|
+
|
|
143
|
+
/* floating panels animate with enter/exit only: their position must never transition (shadcn's Radix places them with a transform) */
|
|
144
|
+
.pg-pop { transition-property: none !important; }
|
|
145
|
+
/* an exit animation keeps its last frame: with fill-mode none the panel snaps back to full opacity before it is hidden (the flicker) */
|
|
146
|
+
[data-state="closed"] { animation-fill-mode: forwards !important; }
|
|
147
|
+
.pg-drw.dragging, .pg-drw-o.dragging { transition: none !important; }
|
|
148
|
+
.pg-drw { touch-action: none; }
|
|
149
|
+
.pg-drw-body { touch-action: pan-y; }
|
|
150
|
+
|
|
151
|
+
/* spinner (shadcn's animate-spin) */
|
|
152
|
+
@keyframes pg-spin { to { transform: rotate(360deg); } }
|
|
153
|
+
.animate-spin { animation: pg-spin 1s linear infinite; }
|
|
154
|
+
.cn-progress-indicator { transition: transform 450ms ease; }
|
|
155
|
+
/* native select: options readable in both themes */
|
|
156
|
+
.pg-opt-native { background: var(--popover); color: var(--popover-foreground); }
|
|
157
|
+
/* textarea counter (our extra) */
|
|
158
|
+
.pg-count { display: flex; justify-content: space-between; gap: 12px; }
|
|
159
|
+
.pg-count-n { font-size: 12px; color: var(--muted-foreground); font-variant-numeric: tabular-nums; }
|
|
160
|
+
.pg-count-n.full { color: var(--destructive); }
|
|
161
|
+
/* tooltip wrappers on avatars keep the group's ring */
|
|
162
|
+
.pg-tipwrap { display: inline-flex; }
|
|
163
|
+
.cn-avatar-group .pg-tipwrap > [data-slot=avatar], .cn-avatar-group .pg-tipwrap > [data-slot=avatar-group-count] { box-shadow: 0 0 0 2px var(--background); }
|
|
164
|
+
/* select (ours): search row, list, highlighted item */
|
|
165
|
+
.pg-select { position: relative; width: 100%; }
|
|
166
|
+
.pg-sel-search { display: flex; align-items: center; gap: 8px; height: 36px; padding: 0 10px; border-bottom: 1px solid var(--border); color: var(--muted-foreground); }
|
|
167
|
+
.pg-sel-search input { flex: 1; min-width: 0; border: 0; outline: none; background: transparent; color: var(--foreground); font-size: 14px; }
|
|
168
|
+
.pg-sel-search input::placeholder { color: var(--muted-foreground); }
|
|
169
|
+
.pg-sel-list { max-height: 240px; overflow-y: auto; }
|
|
170
|
+
.cn-select-content[data-slot] { max-height: 300px; overflow: hidden; display: flex; flex-direction: column; }
|
|
171
|
+
.cn-select-content > .cn-select-group:not(.pg-sel-list) { overflow-y: auto; }
|
|
172
|
+
.pg-sel-empty { padding: 20px 8px; text-align: center; font-size: 14px; color: var(--muted-foreground); }
|
|
173
|
+
.pg-sel-loading { display: inline-flex; align-items: center; gap: 8px; }
|
|
174
|
+
.cn-select-item[data-highlighted] { background: var(--accent); color: var(--accent-foreground); }
|
|
175
|
+
.cn-select-item { cursor: default; }
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
/* ═════════════════════════ 2. lib ═════════════════════════ */
|
|
179
|
+
/* ═══════════════════════════════════════════════════════════════════════════════════════════════════
|
|
180
|
+
@muten/shadcn · capa genérica (tanda 1). Todo lee tokens: un tema de muten (theme.muten + styling{})
|
|
181
|
+
solo redefine estas variables. Ningún componente trae un color fijo.
|
|
182
|
+
Tokens nuevos sobre los de shadcn:
|
|
183
|
+
--selected / --selected-foreground / --selected-soft lo elegido («estás aquí»): color + punto
|
|
184
|
+
--success · --warning · --info (+ -soft) tonos de estado para badges, avisos y filas
|
|
185
|
+
--overlay fondo de los modales
|
|
186
|
+
--z-* la escala de capas
|
|
187
|
+
═══════════════════════════════════════════════════════════════════════════════════════════════════ */
|
|
188
|
+
:root { --font-sans: "Geist", ui-sans-serif, system-ui, sans-serif; --font-mono: "Geist Mono", ui-monospace, SFMono-Regular, monospace; }
|
|
189
|
+
.style-nova, [data-skin] {
|
|
190
|
+
--selected: var(--primary); --selected-foreground: var(--primary-foreground);
|
|
191
|
+
--selected-soft: color-mix(in srgb, var(--selected) 12%, transparent);
|
|
192
|
+
--success: oklch(0.55 0.13 155); --success-soft: color-mix(in srgb, var(--success) 14%, transparent);
|
|
193
|
+
--warning: oklch(0.62 0.15 60); --warning-soft: color-mix(in srgb, var(--warning) 16%, transparent);
|
|
194
|
+
--info: oklch(0.55 0.15 255); --info-soft: color-mix(in srgb, var(--info) 14%, transparent);
|
|
195
|
+
--overlay: rgb(0 0 0 / 0.1);
|
|
196
|
+
--on-destructive: oklch(1 0 0);
|
|
197
|
+
--z-content: 0; --z-sticky: 20; --z-fab: 30; --z-popover: 40; --z-sheet: 50; --z-modal: 60; --z-toast: 70;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/* ── pieles de ejemplo: lo único que cambia entre apps y tiendas ── */
|
|
201
|
+
[data-skin="storio"] {
|
|
202
|
+
--primary: oklch(0.18 0.01 285); --primary-foreground: oklch(0.99 0 0);
|
|
203
|
+
--selected: #6B46F2; --selected-foreground: #fff;
|
|
204
|
+
--ring: #6B46F2;
|
|
205
|
+
--accent: oklch(0.96 0.015 290); --accent-foreground: oklch(0.2 0.02 290);
|
|
206
|
+
}
|
|
207
|
+
:root[data-theme="dark"] [data-skin="storio"] {
|
|
208
|
+
--primary: oklch(0.96 0 0); --primary-foreground: oklch(0.18 0.01 285);
|
|
209
|
+
--selected: #9B80FF; --selected-foreground: #160d33; --ring: #9B80FF;
|
|
210
|
+
--accent: oklch(0.3 0.03 290); --accent-foreground: oklch(0.97 0 0);
|
|
211
|
+
}
|
|
212
|
+
[data-skin="tienda"] {
|
|
213
|
+
--background: #0F2C24; --foreground: #F3EEE2; --card: #14372D; --card-foreground: #F3EEE2;
|
|
214
|
+
--popover: #163E33; --popover-foreground: #F3EEE2;
|
|
215
|
+
--primary: #E6C470; --primary-foreground: #20190B;
|
|
216
|
+
--secondary: #1D4A3D; --secondary-foreground: #F3EEE2;
|
|
217
|
+
--muted: #1A4337; --muted-foreground: #B5C4B9; --accent: #1F4D40; --accent-foreground: #F3EEE2;
|
|
218
|
+
--border: rgb(243 238 226 / 0.13); --input: rgb(243 238 226 / 0.18); --ring: #E6C470;
|
|
219
|
+
--selected: #E6C470; --selected-foreground: #20190B;
|
|
220
|
+
--destructive: #FF8A80; --overlay: rgb(0 0 0 / 0.35);
|
|
221
|
+
--radius: 1rem;
|
|
222
|
+
color-scheme: dark;
|
|
223
|
+
}
|
|
224
|
+
[data-skin] { color: var(--foreground); }
|
|
225
|
+
.cx-skinbox { background: var(--background); color: var(--foreground); }
|
|
226
|
+
|
|
227
|
+
/* ── Button: the «elegido» state (color + dot, aria-current) and the save button's three moments ── */
|
|
228
|
+
.cn-button[aria-current], .cn-button[aria-pressed="true"].cx-nav {
|
|
229
|
+
background: var(--selected-soft); color: var(--selected); position: relative;
|
|
230
|
+
}
|
|
231
|
+
.cx-nav { position: relative; }
|
|
232
|
+
.cx-nav[aria-current]::after { content: ""; position: absolute; left: 50%; bottom: 3px; width: 4px; height: 4px; margin-left: -2px; border-radius: 99px; background: var(--selected); }
|
|
233
|
+
.cx-create { background: var(--primary); color: var(--primary-foreground); }
|
|
234
|
+
.cx-save { width: 9.25rem; justify-content: center; }
|
|
235
|
+
.cx-save[data-status="saving"] { pointer-events: none; opacity: .85; }
|
|
236
|
+
.cx-save[data-status="saved"] { background: var(--success); color: #fff; animation: cx-pop 260ms cubic-bezier(.22, 1, .36, 1); }
|
|
237
|
+
@keyframes cx-pop { 50% { transform: scale(1.04); } }
|
|
238
|
+
.cx-btn-label { display: inline-flex; align-items: center; gap: 6px; }
|
|
239
|
+
|
|
240
|
+
/* ── Badge tones + dot + removable chip ── */
|
|
241
|
+
.cx-tone-new { background: var(--info-soft); color: var(--info); }
|
|
242
|
+
.cx-tone-ok { background: var(--success-soft); color: var(--success); }
|
|
243
|
+
.cx-tone-wait { background: var(--warning-soft); color: var(--warning); }
|
|
244
|
+
.cx-tone-bad { background: color-mix(in srgb, var(--destructive) 14%, transparent); color: var(--destructive); }
|
|
245
|
+
.cx-tone-pro { background: var(--selected); color: var(--selected-foreground); letter-spacing: .04em; }
|
|
246
|
+
.cx-dot { width: 6px; height: 6px; border-radius: 99px; background: currentColor; flex: none; }
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
@keyframes cx-chip-out { to { opacity: 0; transform: scale(.9); } }
|
|
252
|
+
|
|
253
|
+
/* ── Item: media, price, selectable, draggable; text wraps instead of being cut ── */
|
|
254
|
+
.cx-item .cn-item-title, .cx-item .cn-item-description { white-space: normal; -webkit-line-clamp: unset; line-clamp: unset; display: block; overflow: visible; }
|
|
255
|
+
.cx-media-img { width: 40px; height: 40px; border-radius: calc(var(--radius) * .8); object-fit: cover; flex: none; background: var(--muted); }
|
|
256
|
+
.cx-price { margin-left: auto; font-weight: 600; font-variant-numeric: tabular-nums; white-space: nowrap; }
|
|
257
|
+
.cx-item[data-selectable] { cursor: pointer; }
|
|
258
|
+
.cx-item[data-selectable][aria-checked="true"] { border-color: var(--selected); background: var(--selected-soft); }
|
|
259
|
+
.cx-radio { width: 18px; height: 18px; border-radius: 99px; border: 1.5px solid var(--input); flex: none; display: grid; place-items: center; transition: border-color .15s; }
|
|
260
|
+
[aria-checked="true"] > .cx-radio { border-color: var(--selected); }
|
|
261
|
+
[aria-checked="true"] > .cx-radio::after { content: ""; width: 8px; height: 8px; border-radius: 99px; background: var(--selected); }
|
|
262
|
+
|
|
263
|
+
.cx-sortable .cx-item { transition: transform 180ms cubic-bezier(.22, 1, .36, 1); background: var(--background); }
|
|
264
|
+
.cx-sortable .cx-item.lifting { transition: none; z-index: 2; box-shadow: 0 8px 24px -8px rgb(0 0 0 / .25); position: relative; }
|
|
265
|
+
|
|
266
|
+
/* ── Card de forma fija ── */
|
|
267
|
+
.cx-fixed-card { width: 100%; max-width: 380px; }
|
|
268
|
+
.cx-row3 { display: grid; grid-template-columns: auto 1fr auto; align-items: center; gap: 10px; padding: 8px 0; border-top: 1px solid var(--border); }
|
|
269
|
+
.cx-row3:first-child { border-top: 0; }
|
|
270
|
+
.cx-row3 b { font-weight: 500; display: block; }
|
|
271
|
+
.cx-row3 small { color: var(--muted-foreground); font-size: 13px; }
|
|
272
|
+
.cx-time { font-variant-numeric: tabular-nums; font-weight: 600; font-size: 13px; }
|
|
273
|
+
|
|
274
|
+
/* ── SwitchRow: the switch centred on the label's line, description below ── */
|
|
275
|
+
.cx-switch-row { display: grid; grid-template-columns: 1fr auto; gap: 2px 16px; align-items: start; padding: 12px 0; border-top: 1px solid var(--border); width: 100%; max-width: 420px; }
|
|
276
|
+
.cx-switch-row:first-child { border-top: 0; }
|
|
277
|
+
.cx-switch-row .cn-label { line-height: 20px; }
|
|
278
|
+
.cx-switch-row .cn-switch { margin-top: 1px; }
|
|
279
|
+
.cx-switch-row p { grid-column: 1; margin: 0; font-size: 13px; color: var(--muted-foreground); line-height: 1.45; }
|
|
280
|
+
|
|
281
|
+
/* ── Tabs with a sliding indicator, counts and horizontal scroll on the phone ── */
|
|
282
|
+
.cx-tabs { position: relative; display: flex; gap: 2px; padding: 3px; border-radius: var(--radius); background: var(--muted); width: max-content; max-width: 100%; overflow-x: auto; scrollbar-width: none; }
|
|
283
|
+
.cx-tabs::-webkit-scrollbar { display: none; }
|
|
284
|
+
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
.cx-tab-ind { position: absolute; z-index: 0; top: 3px; height: 26px; border-radius: calc(var(--radius) * .8); background: var(--background); box-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1); transition: left 260ms cubic-bezier(.22, 1, .36, 1), width 260ms cubic-bezier(.22, 1, .36, 1); }
|
|
289
|
+
.cx-tabs.line { background: transparent; border-bottom: 1px solid var(--border); border-radius: 0; padding: 0; }
|
|
290
|
+
|
|
291
|
+
.cx-tabs.line .cx-tab-ind { top: auto; bottom: -1px; height: 2px; border-radius: 2px; background: var(--selected); box-shadow: none; }
|
|
292
|
+
.cx-panel { animation: cx-fade 180ms ease; }
|
|
293
|
+
@keyframes cx-fade { from { opacity: 0; } }
|
|
294
|
+
|
|
295
|
+
/* ── Booking picker: week strip + hours in one piece ── */
|
|
296
|
+
.cx-book { width: 100%; max-width: 420px; display: flex; flex-direction: column; gap: 14px; }
|
|
297
|
+
.cx-book-head { display: flex; align-items: center; justify-content: space-between; }
|
|
298
|
+
.cx-book-head b { font-weight: 600; }
|
|
299
|
+
.cx-week { display: grid; grid-template-columns: repeat(7, 1fr); gap: 6px; }
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
.cx-hours { display: flex; flex-direction: column; gap: 10px; min-height: 172px; }
|
|
311
|
+
.cx-hours h4 { margin: 0; font-size: 12px; font-weight: 500; color: var(--muted-foreground); }
|
|
312
|
+
.cx-hour-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; }
|
|
313
|
+
|
|
314
|
+
|
|
315
|
+
|
|
316
|
+
.cx-hour-skel { height: 34px; border-radius: calc(var(--radius) * .8); background: var(--muted); animation: pulse 2s cubic-bezier(.4, 0, .6, 1) infinite; }
|
|
317
|
+
@keyframes pulse { 50% { opacity: .5; } }
|
|
318
|
+
.cx-book-sum { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding-top: 12px; border-top: 1px solid var(--border); font-size: 14px; min-height: 44px; }
|
|
319
|
+
.cx-book-sum span { color: var(--muted-foreground); }
|
|
320
|
+
.cx-book-sum b { color: var(--foreground); font-weight: 600; }
|
|
321
|
+
|
|
322
|
+
/* ── Modal adaptable: Dialog en escritorio, Drawer en el teléfono (o forzado con data-mode) ── */
|
|
323
|
+
.cx-overlay { position: fixed; inset: 0; z-index: var(--z-modal); background: var(--overlay); backdrop-filter: blur(4px); opacity: 0; transition: opacity 160ms ease; }
|
|
324
|
+
.cx-overlay[data-state="open"] { opacity: 1; }
|
|
325
|
+
.cx-modal { position: fixed; z-index: var(--z-modal); display: flex; flex-direction: column; background: var(--popover); color: var(--popover-foreground); box-shadow: 0 0 0 1px color-mix(in srgb, var(--foreground) 10%, transparent), 0 20px 25px -5px rgb(0 0 0 / .1); outline: none; font-size: 14px;
|
|
326
|
+
--sheet-space: 16px; --sheet-tight: 8px; }
|
|
327
|
+
.cx-modal-head { display: flex; flex-direction: column; gap: 4px; padding: 16px 48px 12px 16px; }
|
|
328
|
+
.cx-modal-head b { font-size: 16px; font-weight: 600; }
|
|
329
|
+
.cx-modal-head span { color: var(--muted-foreground); }
|
|
330
|
+
.cx-modal-body { flex: 1 1 auto; min-height: 0; overflow-y: auto; padding: 4px 16px 16px; display: flex; flex-direction: column; gap: var(--sheet-space); overscroll-behavior: contain; }
|
|
331
|
+
.cx-modal-foot { display: flex; gap: 8px; padding: 12px 16px calc(12px + env(safe-area-inset-bottom, 0px)); border-top: 1px solid var(--border); background: color-mix(in srgb, var(--muted) 50%, transparent); }
|
|
332
|
+
.cx-modal-foot { align-items: center; }
|
|
333
|
+
.cx-modal-foot .cn-button { height: 36px; }
|
|
334
|
+
.cx-modal-foot .cx-exit { flex: none; min-width: 6.5rem; }
|
|
335
|
+
.cx-modal-foot .cx-go { flex: 1 1 0; min-width: 0; }
|
|
336
|
+
.cx-modal-foot .cx-foot-note { margin-left: auto; font-size: 13px; color: var(--muted-foreground); font-variant-numeric: tabular-nums; }
|
|
337
|
+
.cx-modal-x { position: absolute; top: 10px; right: 10px; }
|
|
338
|
+
.cx-handle { display: none; width: 96px; height: 4px; margin: 10px auto 0; border-radius: 99px; background: var(--muted); flex: none; }
|
|
339
|
+
/* escritorio = Dialog */
|
|
340
|
+
.cx-modal[data-mode="dialog"] { top: 50%; left: 50%; width: min(28rem, calc(100% - 2rem)); max-height: min(36rem, calc(100dvh - 4rem)); border-radius: calc(var(--radius) * 1.4); overflow: hidden;
|
|
341
|
+
transform: translate(-50%, -50%) scale(.95); opacity: 0; transition: transform 160ms cubic-bezier(.22, 1, .36, 1), opacity 160ms ease; }
|
|
342
|
+
.cx-modal[data-mode="dialog"][data-state="open"] { transform: translate(-50%, -50%); opacity: 1; }
|
|
343
|
+
/* teléfono = Drawer desde abajo, arrastrable */
|
|
344
|
+
.cx-modal[data-mode="drawer"] { left: 0; right: 0; bottom: 0; margin-inline: auto; width: min(100%, 34rem); max-height: calc(100dvh - 3rem); border-radius: calc(var(--radius) * 1.8) calc(var(--radius) * 1.8) 0 0; overflow: hidden;
|
|
345
|
+
transform: translateY(100%); transition: transform 450ms cubic-bezier(.32, .72, 0, 1); touch-action: none; }
|
|
346
|
+
.cx-modal[data-mode="drawer"][data-state="open"] { transform: translateY(0); }
|
|
347
|
+
.cx-modal[data-mode="drawer"] .cx-handle { display: block; }
|
|
348
|
+
.cx-modal[data-mode="drawer"] .cx-modal-body { touch-action: pan-y; }
|
|
349
|
+
.cx-modal.dragging, .cx-overlay.dragging { transition: none !important; }
|
|
350
|
+
.cx-modal-list { display: flex; flex-direction: column; }
|
|
351
|
+
.cx-more { align-self: center; }
|
|
352
|
+
|
|
353
|
+
/* ── Capas: el botón flotante vive debajo de hojas y modales ── */
|
|
354
|
+
.cx-fab { position: fixed; right: 20px; bottom: 20px; z-index: var(--z-fab); display: inline-flex; align-items: center; gap: 8px; height: 44px; padding: 0 16px 0 12px; border-radius: 99px; border: 0; background: var(--primary); color: var(--primary-foreground); font: 500 14px var(--font-sans); box-shadow: 0 10px 25px -8px rgb(0 0 0 / .35); cursor: pointer; }
|
|
355
|
+
.cx-zscale { display: grid; gap: 6px; width: 100%; max-width: 420px; }
|
|
356
|
+
.cx-z { display: grid; grid-template-columns: 110px 1fr 36px; gap: 10px; align-items: center; font-size: 13px; }
|
|
357
|
+
.cx-z code { font: 12px var(--font-mono); color: var(--muted-foreground); }
|
|
358
|
+
.cx-z i { height: 8px; border-radius: 99px; background: var(--selected); opacity: .25; }
|
|
359
|
+
.cx-z b { font: 600 12px var(--font-mono); text-align: right; }
|
|
360
|
+
|
|
361
|
+
/* ── token swatches ── */
|
|
362
|
+
.cx-swatches { display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: 10px; width: 100%; }
|
|
363
|
+
.cx-sw { display: flex; align-items: center; gap: 8px; white-space: nowrap; font: 12px var(--font-mono); color: var(--muted-foreground); }
|
|
364
|
+
.cx-sw i { width: 22px; height: 22px; border-radius: 6px; box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--foreground) 15%, transparent); flex: none; }
|
|
365
|
+
|
|
366
|
+
/* ── 44 px touch target without changing the drawn size ── */
|
|
367
|
+
@media (pointer: coarse) { .cn-button { position: relative; } .cn-button::before { content: ""; position: absolute; left: 50%; top: 50%; width: max(100%, 44px); height: max(100%, 44px); transform: translate(-50%, -50%); } }
|
|
368
|
+
|
|
369
|
+
/* ── page scaffolding for this preview (not part of the library) ── */
|
|
370
|
+
.cx-lib { display: flex; flex-direction: column; gap: 18px; }
|
|
371
|
+
.cx-lib[data-skin="tienda"] { background: var(--background); border-radius: 22px; padding: 8px 14px 28px; margin-inline: -14px; }
|
|
372
|
+
.cx-skin-label { font-size: 12px; color: var(--muted-foreground); }
|
|
373
|
+
.cx-tri { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); }
|
|
374
|
+
.cx-skinbox { padding: 20px; border-right: 1px solid color-mix(in srgb, var(--foreground) 10%, transparent); }
|
|
375
|
+
.cx-skinbox:last-child { border-right: 0; }
|
|
376
|
+
.cx-tri-in { display: flex; flex-direction: column; gap: 14px; font-size: 14px; }
|
|
377
|
+
.cx-tri-name { font: 500 11px var(--font-mono); color: var(--muted-foreground); }
|
|
378
|
+
.cx-note { margin: 0; font-size: 12px; color: var(--muted-foreground); text-align: center; min-height: 1.4em; }
|
|
379
|
+
.cx-cols { display: flex; flex-wrap: wrap; gap: 24px; width: 100%; justify-content: center; align-items: flex-start; }
|
|
380
|
+
.cx-col { flex: 1 1 260px; max-width: 360px; display: flex; flex-direction: column; gap: 8px; }
|
|
381
|
+
.cx-col-h { font: 500 11px var(--font-mono); color: var(--muted-foreground); text-transform: uppercase; letter-spacing: .05em; }
|
|
382
|
+
.cx-radiogroup, .cx-sortable { display: flex; flex-direction: column; gap: 8px; }
|
|
383
|
+
.cx-radiogroup [role="radio"]:focus-visible{ outline: 2px solid var(--ring); outline-offset: 2px; }
|
|
384
|
+
.cx-empty-mini { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; text-align: center; color: var(--muted-foreground); font-size: 13px; height: 168px; }
|
|
385
|
+
.cx-empty-mini svg { width: 22px; height: 22px; color: var(--success); }
|
|
386
|
+
.cx-fixed-card .cn-card-content { min-height: 168px; }
|
|
387
|
+
.cx-2col { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
|
|
388
|
+
.cx-lane { display: flex; flex-direction: column; gap: 8px; padding-top: 14px; min-height: 140px; }
|
|
389
|
+
.cx-lane-empty { color: var(--muted-foreground); font-size: 13px; text-align: center; padding: 40px 0; }
|
|
390
|
+
.cx-hours-empty { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 10px; text-align: center; color: var(--muted-foreground); font-size: 13px; height: 172px; }
|
|
391
|
+
.cx-hours-empty svg { width: 22px; height: 22px; }
|
|
392
|
+
.cx-list-tools { display: flex; flex-direction: column; gap: 10px; position: sticky; top: -4px; background: var(--popover); padding: 4px 0 8px; z-index: 1; }
|
|
393
|
+
.cx-list-row { display: grid; grid-template-columns: 48px 1fr auto; gap: 10px; align-items: center; padding: 10px 0; border-top: 1px solid var(--border); }
|
|
394
|
+
.cx-list-row b { font-weight: 500; display: block; }
|
|
395
|
+
.cx-list-row small { color: var(--muted-foreground); font-size: 13px; }
|
|
396
|
+
.cx-list-skel { height: 52px; border-top: 1px solid var(--border); display: flex; align-items: center; gap: 10px; }
|
|
397
|
+
.cx-list-skel i { display: block; height: 12px; border-radius: 6px; background: var(--muted); animation: pulse 2s cubic-bezier(.4, 0, .6, 1) infinite; }
|
|
398
|
+
@media (max-width: 760px) {
|
|
399
|
+
.cx-tri { grid-template-columns: 1fr; }
|
|
400
|
+
.cx-skinbox { border-right: 0; border-bottom: 1px solid color-mix(in srgb, var(--foreground) 10%, transparent); }
|
|
401
|
+
.cx-skinbox:last-child { border-bottom: 0; }
|
|
402
|
+
.pg-top-in .pg-legend { margin-left: 0; }
|
|
403
|
+
.cx-lib[data-skin="tienda"] { margin-inline: -8px; padding-inline: 8px; }
|
|
404
|
+
}
|
|
405
|
+
@media (max-width: 420px) { .cx-2col { grid-template-columns: 1fr; } .cx-hour-grid { grid-template-columns: repeat(3, 1fr); } }
|
|
406
|
+
.cx-lib .pg-live::before { content: none; }
|
|
407
|
+
.cx-lib .pg-live { padding-top: 32px; }
|
|
408
|
+
|
|
409
|
+
|
|
410
|
+
/* the page keeps its width when a modal locks the scroll: the scrollbar's lane stays reserved */
|
|
411
|
+
html { scrollbar-gutter: stable; }
|
|
412
|
+
html.cx-locked { overflow: hidden; }
|
|
413
|
+
/* a list modal has a fixed height: loading, filtering or paging never resizes it */
|
|
414
|
+
.cx-modal[data-size="tall"][data-mode="dialog"] { height: min(36rem, calc(100dvh - 4rem)); }
|
|
415
|
+
.cx-modal[data-size="tall"][data-mode="drawer"] { height: calc(100dvh - 3rem); }
|
|
416
|
+
|
|
417
|
+
/* ═════ tanda 2 ═════ */
|
|
418
|
+
.style-nova, [data-skin] { --qr-ink: oklch(0.16 0 0); --qr-paper: #fff; }
|
|
419
|
+
[data-skin="tienda"] { --qr-ink: #0F2C24; --qr-paper: #F3EEE2; }
|
|
420
|
+
|
|
421
|
+
/* ── Avatar: initials take a stable hue per name, mixed into the skin's own surface ── */
|
|
422
|
+
.cx-av .cn-avatar-fallback { background: color-mix(in srgb, oklch(0.62 0.13 var(--h)) 22%, var(--background)); color: color-mix(in srgb, oklch(0.55 0.14 var(--h)) 50%, var(--foreground)); font-weight: 600; }
|
|
423
|
+
.cx-av[data-size="sm"] .cn-avatar-fallback { font-size: 10px; }
|
|
424
|
+
.cx-av[data-size="lg"] .cn-avatar-fallback { font-size: 15px; }
|
|
425
|
+
.cx-av-wrap { display: inline-flex; border-radius: 99px; }
|
|
426
|
+
.cx-av-wrap:focus-visible { outline: 2px solid var(--ring); outline-offset: 2px; }
|
|
427
|
+
.cn-avatar-group .cx-av-wrap > .cn-avatar, .cn-avatar-group .cn-avatar-group-count { box-shadow: 0 0 0 2px var(--background); }
|
|
428
|
+
.cx-who { display: flex; align-items: center; gap: 10px; font-size: 14px; }
|
|
429
|
+
.cx-who b { display: block; font-weight: 500; }
|
|
430
|
+
.cx-who small { color: var(--muted-foreground); font-size: 13px; }
|
|
431
|
+
.cx-online { background: var(--success) !important; box-shadow: 0 0 0 2px var(--background); }
|
|
432
|
+
.cx-tip { position: fixed; z-index: var(--z-toast); padding: 6px 10px; border-radius: calc(var(--radius) * .8); background: var(--foreground); color: var(--background); font-size: 12px; font-weight: 500; white-space: nowrap; pointer-events: none; opacity: 0; transform: translateY(2px); transition: opacity 150ms ease, transform 150ms ease; }
|
|
433
|
+
.cx-tip[data-state="open"] { opacity: 1; transform: none; }
|
|
434
|
+
|
|
435
|
+
/* ── Fields ── */
|
|
436
|
+
.cx-form { display: flex; flex-direction: column; gap: 18px; width: 100%; max-width: 380px; }
|
|
437
|
+
.cx-num { font-variant-numeric: tabular-nums; }
|
|
438
|
+
.cx-clear { opacity: 1; transition: opacity 120ms ease; }
|
|
439
|
+
.cx-clear[hidden] { display: inline-flex !important; opacity: 0; pointer-events: none; }
|
|
440
|
+
.cx-count-line { display: flex; justify-content: space-between; gap: 12px; }
|
|
441
|
+
.cx-count-line span:last-child { font-variant-numeric: tabular-nums; flex: none; }
|
|
442
|
+
.cx-count-line[data-near] span:last-child { color: var(--warning); }
|
|
443
|
+
.cx-msg { min-height: 1.45em; }
|
|
444
|
+
.cn-field[data-invalid] .cx-msg { color: var(--destructive); }
|
|
445
|
+
.cn-input[aria-invalid="true"] { border-color: var(--destructive); }
|
|
446
|
+
.cn-input[aria-invalid="true"]:focus-visible { box-shadow: 0 0 0 3px color-mix(in srgb, var(--destructive) 20%, transparent); }
|
|
447
|
+
|
|
448
|
+
/* ── Combobox list: under the field, its width, Nova's popover look ── */
|
|
449
|
+
.cx-combo-list { max-height: 248px; overflow-y: auto; padding: 4px; border-radius: calc(var(--radius) * 1); background: var(--popover); color: var(--popover-foreground); box-shadow: 0 0 0 1px color-mix(in srgb, var(--foreground) 10%, transparent), 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1); font-size: 14px; overscroll-behavior: contain;
|
|
450
|
+
opacity: 0; transform: scale(.96); transition: opacity 100ms ease, transform 100ms ease !important; transition-property: opacity, transform !important; }
|
|
451
|
+
.cx-combo-list[data-state="open"] { opacity: 1; transform: none; }
|
|
452
|
+
.cx-opt { display: flex; align-items: center; gap: 8px; min-height: 32px; padding: 6px 8px; border-radius: calc(var(--radius) * .6); cursor: default; user-select: none; }
|
|
453
|
+
.cx-opt[data-hl] { background: var(--accent); color: var(--accent-foreground); }
|
|
454
|
+
.cx-opt mark { background: none; color: inherit; font-weight: 600; }
|
|
455
|
+
.cx-opt small { margin-left: auto; color: var(--muted-foreground); font-size: 12px; }
|
|
456
|
+
.cx-opt .cx-tick { margin-left: auto; width: 16px; height: 16px; color: var(--selected); }
|
|
457
|
+
.cx-opt-new { color: var(--muted-foreground); border-top: 1px solid var(--border); border-radius: 0 0 calc(var(--radius) * .6) calc(var(--radius) * .6); margin-top: 4px; }
|
|
458
|
+
.cx-opt-new b { color: var(--foreground); font-weight: 600; }
|
|
459
|
+
|
|
460
|
+
/* ── Alert tones (Nova's alert, colour from tokens) ── */
|
|
461
|
+
.cx-alerts { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 340px), 1fr)); gap: 12px; width: 100%; max-width: 820px; margin: 0 auto; }
|
|
462
|
+
.cx-alerts .cn-alert { align-content: start; }
|
|
463
|
+
.cx-al-row { grid-column: 2; margin-top: 8px; display: flex; gap: 8px; }
|
|
464
|
+
.cx-al-info > svg { color: var(--info); }
|
|
465
|
+
.cx-al-ok > svg { color: var(--success); }
|
|
466
|
+
.cx-al-wait > svg { color: var(--warning); }
|
|
467
|
+
.cx-al-wait { background: color-mix(in srgb, var(--warning) 6%, var(--card)); }
|
|
468
|
+
|
|
469
|
+
/* ── a tiny app screen for Band and Island (iPhone-like corners) ── */
|
|
470
|
+
.cx-screens { display: flex; flex-wrap: wrap; justify-content: center; gap: 28px; }
|
|
471
|
+
.cx-screen-wrap { display: flex; flex-direction: column; align-items: center; gap: 12px; }
|
|
472
|
+
.cx-screen { position: relative; width: 300px; max-width: 100%; height: 250px; border-radius: 34px; overflow: hidden; background: var(--background); box-shadow: 0 0 0 1px var(--border), 0 0 0 7px color-mix(in srgb, var(--foreground) 8%, var(--background)); display: flex; flex-direction: column; }
|
|
473
|
+
.cx-appbar { display: flex; align-items: center; justify-content: space-between; height: 48px; padding: 0 18px; margin-top: 30px; border-bottom: 1px solid var(--border); font-size: 15px; flex: none; }
|
|
474
|
+
.cx-appbar-dot { width: 26px; height: 26px; border-radius: 99px; background: var(--muted); }
|
|
475
|
+
.cx-fake { display: flex; flex-direction: column; gap: 10px; padding: 14px 18px; }
|
|
476
|
+
.cx-fake i { display: block; height: 34px; border-radius: calc(var(--radius) * .8); background: var(--muted); }
|
|
477
|
+
.cx-fake i:nth-child(2n) { width: 80%; }
|
|
478
|
+
/* Band: grows its own height in, pushes content (never covers it), one at a time */
|
|
479
|
+
.cx-band-slot { display: grid; grid-template-rows: 0fr; transition: grid-template-rows 260ms cubic-bezier(.22, 1, .36, 1); flex: none; }
|
|
480
|
+
.cx-band-slot[data-open] { grid-template-rows: 1fr; }
|
|
481
|
+
.cx-band-slot > div { overflow: hidden; min-height: 0; }
|
|
482
|
+
.cx-band { display: flex; align-items: center; gap: 10px; padding: 9px 14px 9px 18px; font-size: 13px; line-height: 1.35; border-bottom: 1px solid var(--border); }
|
|
483
|
+
.cx-band svg { width: 16px; height: 16px; flex: none; }
|
|
484
|
+
.cx-band span { flex: 1; }
|
|
485
|
+
.cx-band[data-tone="warn"] { background: color-mix(in srgb, var(--warning) 14%, var(--background)); }
|
|
486
|
+
.cx-band[data-tone="warn"] svg { color: var(--warning); }
|
|
487
|
+
.cx-band[data-tone="muted"] { background: var(--muted); }
|
|
488
|
+
.cx-band .cn-button { flex: none; }
|
|
489
|
+
.cx-band-in { animation: cx-fade 200ms ease; }
|
|
490
|
+
/* exit: the text fades before the slot folds, so nothing is clipped mid-way */
|
|
491
|
+
.cx-band-slot > div > .cx-band { transition: opacity 140ms ease; }
|
|
492
|
+
.cx-band-slot:not([data-open]) > div > .cx-band { opacity: 0; }
|
|
493
|
+
/* Island: one pill that changes shape and text in place */
|
|
494
|
+
.cx-island { position: absolute; top: 10px; left: 50%; z-index: 3; display: flex; align-items: center; gap: 8px; height: 34px; padding: 0 14px 0 10px; border-radius: 99px; background: oklch(0.16 0 0); color: #fff; font-size: 13px; font-weight: 500; white-space: nowrap; overflow: hidden;
|
|
495
|
+
transform: translateX(-50%); transition: width 380ms cubic-bezier(.22, 1, .36, 1), opacity 200ms ease, transform 380ms cubic-bezier(.22, 1, .36, 1); }
|
|
496
|
+
.cx-island[data-state="hidden"] { opacity: 0; transform: translateX(-50%) scale(.7); }
|
|
497
|
+
.cx-island-icon { width: 18px; height: 18px; display: grid; place-items: center; flex: none; }
|
|
498
|
+
.cx-island-icon svg { width: 16px; height: 16px; }
|
|
499
|
+
.cx-island[data-tone="done"] .cx-island-icon { color: oklch(0.8 0.17 150); }
|
|
500
|
+
.cx-island[data-tone="error"] .cx-island-icon { color: oklch(0.72 0.19 25); }
|
|
501
|
+
.cx-island[data-tone="error"] { animation: cx-shake 320ms ease; }
|
|
502
|
+
.cx-island-text { transition: opacity 140ms ease; }
|
|
503
|
+
.cx-island-text.swap { opacity: 0; }
|
|
504
|
+
@keyframes cx-shake { 25% { margin-left: -4px; } 75% { margin-left: 4px; } }
|
|
505
|
+
|
|
506
|
+
/* ── Accordion chevron rotates ── */
|
|
507
|
+
.cx-acc-chev { margin-left: auto; width: 16px; height: 16px; flex: none; color: var(--muted-foreground); transition: transform 200ms ease; pointer-events: none; }
|
|
508
|
+
[aria-expanded="true"] > .cx-acc-chev { transform: rotate(180deg); }
|
|
509
|
+
|
|
510
|
+
/* ── QR ── */
|
|
511
|
+
.cx-qr-card { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 24px; }
|
|
512
|
+
.cx-qr { width: 176px; height: 176px; padding: 12px; border-radius: calc(var(--radius) * 1.4); background: var(--qr-paper); box-shadow: 0 0 0 1px var(--border); position: relative; }
|
|
513
|
+
.cx-qr svg { width: 100%; height: 100%; display: block; }
|
|
514
|
+
.cx-qr-mark { position: absolute; left: 50%; top: 50%; width: 38px; height: 38px; margin: -19px 0 0 -19px; border-radius: 10px; background: var(--qr-paper); display: grid; place-items: center; }
|
|
515
|
+
.cx-qr-mark span { width: 30px; height: 30px; border-radius: 8px; background: var(--qr-ink); color: var(--qr-paper); font: 700 12px var(--font-sans); display: grid; place-items: center; }
|
|
516
|
+
.cx-qr-side { display: flex; flex-direction: column; align-items: flex-start; gap: 6px; font-size: 14px; }
|
|
517
|
+
.cx-qr-side b { font-size: 16px; font-weight: 600; }
|
|
518
|
+
.cx-qr-url { font: 13px var(--font-mono); color: var(--muted-foreground); user-select: all; margin-bottom: 8px; }
|
|
519
|
+
.cx-copy { min-width: 9.5rem; justify-content: center; }
|
|
520
|
+
.cx-copy[data-done] { color: var(--success); }
|
|
521
|
+
|
|
522
|
+
/* ── thin themed scrollbar for every scrolling list or sheet ── */
|
|
523
|
+
.cx-combo-list, .cx-modal-body, .cx-scroll { scrollbar-width: thin; scrollbar-color: color-mix(in srgb, var(--foreground) 22%, transparent) transparent; }
|
|
524
|
+
.cx-combo-list::-webkit-scrollbar, .cx-modal-body::-webkit-scrollbar, .cx-scroll::-webkit-scrollbar { width: 10px; height: 10px; }
|
|
525
|
+
.cx-combo-list::-webkit-scrollbar-thumb, .cx-modal-body::-webkit-scrollbar-thumb, .cx-scroll::-webkit-scrollbar-thumb { background: color-mix(in srgb, var(--foreground) 22%, transparent); border-radius: 99px; border: 3px solid transparent; background-clip: padding-box; }
|
|
526
|
+
.cx-combo-list::-webkit-scrollbar-thumb:hover, .cx-modal-body::-webkit-scrollbar-thumb:hover, .cx-scroll::-webkit-scrollbar-thumb:hover { background-color: color-mix(in srgb, var(--foreground) 40%, transparent); }
|
|
527
|
+
.cx-combo-list::-webkit-scrollbar-track, .cx-modal-body::-webkit-scrollbar-track, .cx-scroll::-webkit-scrollbar-track { background: transparent; }
|
|
528
|
+
.cx-combo-list::-webkit-scrollbar-button, .cx-modal-body::-webkit-scrollbar-button, .cx-scroll::-webkit-scrollbar-button { display: none; height: 0; }
|
|
529
|
+
|
|
530
|
+
/* ═════ tanda 3 ═════ */
|
|
531
|
+
/* ── Slider / range: value beside the label, tokens instead of Nova's fixed white thumb ── */
|
|
532
|
+
.cx-sl-field { display: flex; flex-direction: column; gap: 10px; }
|
|
533
|
+
.cx-sl-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
|
|
534
|
+
.cx-sl-val { font-size: 14px; font-weight: 600; font-variant-numeric: tabular-nums; white-space: nowrap; }
|
|
535
|
+
.cx-slider { position: relative; width: 100%; height: 16px; display: flex; align-items: center; touch-action: none; cursor: pointer; user-select: none; }
|
|
536
|
+
.cx-slider .cn-slider-track { width: 100%; }
|
|
537
|
+
.cx-slider .cn-slider-range { position: absolute; top: 0; bottom: 0; background: var(--selected); }
|
|
538
|
+
.cx-slider .cn-slider-thumb { position: absolute; top: 50%; margin-top: -6px; background: var(--background); border-color: var(--selected); cursor: grab; }
|
|
539
|
+
.cx-slider .cn-slider-thumb:focus-visible, .cx-slider .cn-slider-thumb[data-drag] { box-shadow: 0 0 0 4px color-mix(in srgb, var(--selected) 25%, transparent); }
|
|
540
|
+
.cx-slider .cn-slider-thumb[data-drag] { cursor: grabbing; }
|
|
541
|
+
.cx-sl-scale { display: flex; justify-content: space-between; font-size: 12px; color: var(--muted-foreground); font-variant-numeric: tabular-nums; }
|
|
542
|
+
|
|
543
|
+
/* ── OTP: one real input under six painted slots ── */
|
|
544
|
+
.cx-otp { position: relative; }
|
|
545
|
+
.cx-otp-input { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0; border: 0; padding: 0; font-size: 16px; color: transparent; caret-color: transparent; background: transparent; z-index: 1; cursor: text; letter-spacing: 2em; }
|
|
546
|
+
.cx-otp .cn-input-otp-slot { position: relative; display: grid; place-items: center; width: 40px; height: 44px; font-size: 18px; font-weight: 500; font-variant-numeric: tabular-nums; background: var(--background); }
|
|
547
|
+
.cx-otp .cn-input-otp-slot[data-active="true"] { border-color: var(--selected); box-shadow: 0 0 0 3px color-mix(in srgb, var(--selected) 22%, transparent); z-index: 1; }
|
|
548
|
+
.cx-otp .cx-caret { width: 1px; height: 18px; background: var(--foreground); animation: cx-blink 1s steps(1) infinite; }
|
|
549
|
+
@keyframes cx-blink { 50% { opacity: 0; } }
|
|
550
|
+
.cx-otp-sep { display: grid; place-items: center; width: 20px; }
|
|
551
|
+
.cx-otp-sep span { width: 8px; height: 2px; border-radius: 2px; background: var(--muted-foreground); }
|
|
552
|
+
.cx-otp .cn-input-otp { display: flex; align-items: center; }
|
|
553
|
+
.cx-otp[data-state="bad"] .cn-input-otp-slot { border-color: var(--destructive); }
|
|
554
|
+
.cx-otp[data-state="bad"] { animation: cx-shake 320ms ease; }
|
|
555
|
+
.cx-otp[data-state="ok"] .cn-input-otp-slot { border-color: var(--success); color: var(--success); }
|
|
556
|
+
#otp-msg[data-tone="bad"] { color: var(--destructive); }
|
|
557
|
+
#otp-msg[data-tone="ok"] { color: var(--success); }
|
|
558
|
+
|
|
559
|
+
/* ── Color picker ── */
|
|
560
|
+
.cx-swatch-row { display: flex; flex-wrap: wrap; gap: 10px; }
|
|
561
|
+
.cx-sw-btn { position: relative; display: grid; place-items: center; width: 32px; height: 32px; border-radius: 99px; border: 0; padding: 0; background: var(--c); cursor: pointer; box-shadow: inset 0 0 0 1px rgb(0 0 0 / .12); transition: transform 120ms ease; }
|
|
562
|
+
.cx-sw-btn:hover { transform: scale(1.08); }
|
|
563
|
+
.cx-sw-btn:focus-visible { outline: 2px solid var(--ring); outline-offset: 2px; }
|
|
564
|
+
.cx-sw-btn[aria-checked="true"]::after { content: ""; position: absolute; inset: -4px; border-radius: 99px; box-shadow: 0 0 0 2px var(--foreground); }
|
|
565
|
+
.cx-sw-btn svg { width: 16px; height: 16px; color: var(--on, #fff); opacity: 0; }
|
|
566
|
+
.cx-sw-btn[aria-checked="true"] svg { opacity: 1; }
|
|
567
|
+
.cx-sw-other { background: conic-gradient(from 0deg, #f43f5e, #f59e0b, #84cc16, #06b6d4, #6366f1, #d946ef, #f43f5e); display: grid; place-items: center; }
|
|
568
|
+
.cx-sw-other svg { opacity: 1; color: #fff; filter: drop-shadow(0 1px 1px rgb(0 0 0 / .4)); }
|
|
569
|
+
.cx-store-prev { gap: 14px; padding: 18px; border-radius: calc(var(--radius) * 1.6); background: var(--card); box-shadow: 0 0 0 1px var(--border); max-width: 320px; flex-basis: 300px; }
|
|
570
|
+
.cx-sp-head { display: flex; align-items: center; gap: 12px; font-size: 14px; }
|
|
571
|
+
.cx-sp-head b { display: block; font-weight: 600; }
|
|
572
|
+
.cx-sp-head small { color: var(--muted-foreground); font-size: 13px; }
|
|
573
|
+
.cx-sp-logo { width: 40px; height: 40px; border-radius: 12px; display: grid; place-items: center; background: var(--primary); color: var(--primary-foreground); font-weight: 700; font-size: 14px; transition: background-color 200ms ease, color 200ms ease; }
|
|
574
|
+
.cx-store-prev .cn-button { transition: background-color 200ms ease, color 200ms ease; }
|
|
575
|
+
.cx-picker { width: 248px; padding: 12px; border-radius: calc(var(--radius) * 1.2); background: var(--popover); color: var(--popover-foreground); box-shadow: 0 0 0 1px color-mix(in srgb, var(--foreground) 10%, transparent), 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1); display: flex; flex-direction: column; gap: 12px;
|
|
576
|
+
opacity: 0; transform: scale(.96); transition: opacity 120ms ease, transform 120ms ease !important; transition-property: opacity, transform !important; }
|
|
577
|
+
.cx-picker[data-state="open"] { opacity: 1; transform: none; }
|
|
578
|
+
.cx-sv { position: relative; height: 150px; border-radius: calc(var(--radius) * .8); background: linear-gradient(to top, #000, transparent), linear-gradient(to right, #fff, hsl(var(--pk-h, 260) 100% 50%)); cursor: crosshair; touch-action: none; }
|
|
579
|
+
.cx-sv-dot, .cx-hue-dot { position: absolute; width: 16px; height: 16px; margin: -8px 0 0 -8px; border-radius: 99px; box-shadow: 0 0 0 2px #fff, 0 0 0 3px rgb(0 0 0 / .3); pointer-events: none; }
|
|
580
|
+
.cx-hue { position: relative; height: 12px; border-radius: 99px; background: linear-gradient(to right, #f00, #ff0, #0f0, #0ff, #00f, #f0f, #f00); cursor: pointer; touch-action: none; }
|
|
581
|
+
.cx-hue-dot { top: 50%; background: hsl(var(--pk-h, 260) 100% 50%); }
|
|
582
|
+
.cx-sv:focus-visible, .cx-hue:focus-visible { outline: 2px solid var(--ring); outline-offset: 2px; }
|
|
583
|
+
.cx-pk-row { display: flex; align-items: center; gap: 8px; }
|
|
584
|
+
.cx-pk-chip { width: 32px; height: 32px; border-radius: calc(var(--radius) * .8); flex: none; box-shadow: inset 0 0 0 1px rgb(0 0 0 / .12); }
|
|
585
|
+
.cx-pk-warn { margin: 0; font-size: 12px; color: var(--warning); min-height: 1.4em; line-height: 1.4; }
|
|
586
|
+
|
|
587
|
+
/* ── Tag input ── */
|
|
588
|
+
.cx-taginput { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; min-height: 32px; padding: 4px 6px; border: 1px solid var(--input); border-radius: calc(var(--radius) * 0.8); background: transparent; cursor: text; transition: border-color .15s, box-shadow .15s; }
|
|
589
|
+
.cx-taginput:focus-within { border-color: var(--ring); box-shadow: 0 0 0 3px color-mix(in srgb, var(--ring) 50%, transparent); }
|
|
590
|
+
|
|
591
|
+
|
|
592
|
+
|
|
593
|
+
@keyframes cx-flash { 30% { background: var(--selected); color: var(--selected-foreground); } }
|
|
594
|
+
.cx-tag-field { flex: 1 1 120px; min-width: 120px; height: 22px; border: 0; outline: 0; background: transparent; color: inherit; font: inherit; font-size: 14px; padding: 0 4px; }
|
|
595
|
+
.cx-suggest { display: flex; flex-direction: column; gap: 8px; font-size: 12px; color: var(--muted-foreground); }
|
|
596
|
+
|
|
597
|
+
|
|
598
|
+
|
|
599
|
+
|
|
600
|
+
/* ── Pagination ── */
|
|
601
|
+
.cx-pages-wrap { width: 100%; max-width: 560px; display: flex; flex-direction: column; gap: 12px; }
|
|
602
|
+
.cx-pg-list { display: flex; flex-direction: column; }
|
|
603
|
+
.cx-pg-row { display: grid; grid-template-columns: 1fr auto; align-items: center; gap: 12px; height: 44px; border-top: 1px solid var(--border); font-size: 14px; }
|
|
604
|
+
.cx-pg-row:first-child { border-top: 0; }
|
|
605
|
+
.cx-pg-row small { color: var(--muted-foreground); margin-left: 8px; }
|
|
606
|
+
.cx-pg-row b { font-weight: 600; font-variant-numeric: tabular-nums; }
|
|
607
|
+
.cx-pg-row i { display: block; height: 12px; border-radius: 6px; background: var(--muted); animation: pulse 2s cubic-bezier(.4, 0, .6, 1) infinite; }
|
|
608
|
+
.cx-pg-foot { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 10px; font-size: 13px; color: var(--muted-foreground); }
|
|
609
|
+
.cx-pagination { margin: 0; width: auto; }
|
|
610
|
+
.cx-pagination .cn-button[aria-current="page"] { pointer-events: none; }
|
|
611
|
+
.cx-pg-compact { display: none; font-size: 13px; color: var(--foreground); padding: 0 6px; font-variant-numeric: tabular-nums; }
|
|
612
|
+
@media (max-width: 520px) { .cx-pagination .cx-pg-num { display: none; } .cx-pg-compact { display: inline; } .cx-pagination .cn-pagination-previous span, .cx-pagination .cn-pagination-next span { display: none; } }
|
|
613
|
+
|
|
614
|
+
/* ── Carousel ── */
|
|
615
|
+
.cx-car { width: 100%; max-width: 760px; display: flex; flex-direction: column; gap: 12px; }
|
|
616
|
+
.cx-car-track { display: grid; grid-auto-flow: column; grid-auto-columns: 220px; gap: 12px; overflow-x: auto; scroll-snap-type: x mandatory; scroll-behavior: smooth; overscroll-behavior-x: contain; padding-bottom: 10px; border-radius: calc(var(--radius) * 1.2); }
|
|
617
|
+
.cx-car-track:focus-visible { outline: 2px solid var(--ring); outline-offset: 4px; }
|
|
618
|
+
.cx-card-p { scroll-snap-align: start; display: flex; flex-direction: column; gap: 8px; font-size: 14px; }
|
|
619
|
+
.cx-card-p .cx-ph { aspect-ratio: 1; border-radius: calc(var(--radius) * 1.2); background: var(--g); box-shadow: inset 0 0 0 1px rgb(0 0 0 / .06); }
|
|
620
|
+
.cx-card-p b { font-weight: 500; }
|
|
621
|
+
.cx-card-p span { color: var(--muted-foreground); font-variant-numeric: tabular-nums; font-size: 13px; }
|
|
622
|
+
.cx-car-bar { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
|
|
623
|
+
.cx-car-dots { display: flex; gap: 6px; }
|
|
624
|
+
|
|
625
|
+
|
|
626
|
+
|
|
627
|
+
|
|
628
|
+
|
|
629
|
+
/* ── Phone ── */
|
|
630
|
+
.cx-cc { gap: 4px; padding: 0 6px; font-variant-numeric: tabular-nums; }
|
|
631
|
+
.cx-cc svg { width: 12px !important; height: 12px !important; opacity: .6; }
|
|
632
|
+
.cx-phone .cn-input-group-input { padding-left: 4px; }
|
|
633
|
+
#ph-f[data-invalid] .cx-msg { color: var(--destructive); }
|
|
634
|
+
.cx-cc-item { display: flex; gap: 8px; }
|
|
635
|
+
.cx-cc-item small { margin-left: auto; color: var(--muted-foreground); font-variant-numeric: tabular-nums; }
|
|
636
|
+
|
|
637
|
+
/* ═════ arreglos tanda 3 ═════ */
|
|
638
|
+
/* code picker (country, currency, …): search on top, list below */
|
|
639
|
+
.cx-cpick { padding: 0; border-radius: var(--radius); background: var(--popover); color: var(--popover-foreground); box-shadow: 0 0 0 1px color-mix(in srgb, var(--foreground) 10%, transparent), 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1); overflow: hidden;
|
|
640
|
+
opacity: 0; transform: scale(.97); transition: opacity 110ms ease, transform 110ms ease !important; transition-property: opacity, transform !important; }
|
|
641
|
+
.cx-cpick[data-state="open"] { opacity: 1; transform: none; }
|
|
642
|
+
.cx-cpick-search { display: flex; align-items: center; gap: 8px; height: 36px; padding: 0 10px; border-bottom: 1px solid var(--border); }
|
|
643
|
+
.cx-cpick-search svg { width: 14px; height: 14px; color: var(--muted-foreground); flex: none; }
|
|
644
|
+
.cx-cpick-search input { flex: 1; min-width: 0; border: 0; outline: 0; background: transparent; color: inherit; font: inherit; font-size: 14px; }
|
|
645
|
+
.cx-cpick-list { box-shadow: none !important; border-radius: 0; max-height: 232px; opacity: 1 !important; transform: none !important; }
|
|
646
|
+
.cx-opt-code { min-width: 30px; font: 600 12px var(--font-mono); color: var(--muted-foreground); }
|
|
647
|
+
.cx-opt[aria-selected="true"] .cx-opt-code { color: var(--selected); }
|
|
648
|
+
/* the trigger never changes width between countries / currencies */
|
|
649
|
+
.cx-cc { min-width: 4.75rem; justify-content: space-between; }
|
|
650
|
+
#mf-cur.cx-cc { min-width: 3.75rem; }
|
|
651
|
+
.cx-cc-code { font: 600 12px var(--font-mono); }
|
|
652
|
+
.cx-cc-dial { min-width: 2.6em; text-align: left; }
|
|
653
|
+
/* tags: chips come in and go out, the box eases its height (JS) */
|
|
654
|
+
|
|
655
|
+
@keyframes cx-chip-in { from { opacity: 0; transform: scale(.85); } }
|
|
656
|
+
.cx-taginput { overflow: hidden; }
|
|
657
|
+
/* pagination: stacked, centred, steady */
|
|
658
|
+
.cx-pg-foot { flex-direction: column; justify-content: center; gap: 8px; }
|
|
659
|
+
.cx-pagination .cn-pagination-content { justify-content: center; }
|
|
660
|
+
.cx-pagination .cx-pg-num .cn-button, .cx-pg-gap { width: 32px; }
|
|
661
|
+
.cx-pg-gap { display: flex; justify-content: center; }
|
|
662
|
+
.cx-pg-list { transition: opacity 160ms ease; }
|
|
663
|
+
.cx-pg-list[data-loading] { opacity: .45; }
|
|
664
|
+
.cx-pg-empty { border-top-color: transparent; }
|
|
665
|
+
/* virtual list */
|
|
666
|
+
.cx-vlist { height: 364px; overflow-y: auto; border-radius: calc(var(--radius) * 1.2); box-shadow: 0 0 0 1px var(--border); overscroll-behavior: contain; }
|
|
667
|
+
.cx-vlist:focus-visible { outline: 2px solid var(--ring); outline-offset: 2px; }
|
|
668
|
+
.cx-vspace { position: relative; }
|
|
669
|
+
.cx-vwin { position: absolute; top: 0; left: 0; right: 0; will-change: transform; }
|
|
670
|
+
.cx-vrow { display: grid; grid-template-columns: 56px 1fr auto; align-items: center; gap: 10px; height: 52px; padding: 0 14px; border-bottom: 1px solid var(--border); font-size: 14px; box-sizing: border-box; }
|
|
671
|
+
.cx-vrow small { color: var(--muted-foreground); margin-left: 8px; font-size: 12px; }
|
|
672
|
+
.cx-vrow b { font-weight: 600; font-variant-numeric: tabular-nums; }
|
|
673
|
+
.cx-vn { color: var(--muted-foreground); font-size: 12px; }
|
|
674
|
+
/* carousel: no visible scrollbar (swipe, wheel, arrows and dots move it) */
|
|
675
|
+
.cx-car-track { scrollbar-width: none; padding-bottom: 0; }
|
|
676
|
+
.cx-car-track::-webkit-scrollbar { display: none; }
|
|
677
|
+
|
|
678
|
+
/* carousel: a whole number of cards per view, so no card is ever cut */
|
|
679
|
+
.cx-car-track { grid-auto-columns: calc((100% - 36px) / 4); }
|
|
680
|
+
@media (max-width: 760px) { .cx-car-track { grid-auto-columns: calc((100% - 12px) / 2); } }
|
|
681
|
+
|
|
682
|
+
/* ═════ tanda 4 ═════ */
|
|
683
|
+
.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
|
|
684
|
+
.cx-check { width: 16px; }
|
|
685
|
+
|
|
686
|
+
/* ── DataTable: a table while its box is wide, a list of Items when the box is narrow ── */
|
|
687
|
+
.cx-dt-host { container-type: inline-size; width: 100%; max-width: 920px; margin: 0 auto; display: flex; flex-direction: column; transition: max-width 320ms cubic-bezier(.22, 1, .36, 1); }
|
|
688
|
+
.cx-dt-host[data-narrow] { max-width: 380px; }
|
|
689
|
+
.cx-dt-bulk { display: grid; grid-template-rows: 0fr; transition: grid-template-rows 220ms cubic-bezier(.22, 1, .36, 1); }
|
|
690
|
+
.cx-dt-bulk[data-open] { grid-template-rows: 1fr; }
|
|
691
|
+
.cx-dt-bulk > div { overflow: hidden; min-height: 0; display: flex; align-items: center; justify-content: space-between; gap: 12px; font-size: 13px; font-weight: 500; }
|
|
692
|
+
.cx-dt-bulk[data-open] > div { padding: 0 4px 10px; }
|
|
693
|
+
.cx-dt-scroll { max-height: 380px; overflow: auto; border-radius: calc(var(--radius) * 1.2); box-shadow: 0 0 0 1px var(--border); }
|
|
694
|
+
.cx-dt { width: 100%; border-collapse: separate; border-spacing: 0; font-size: 14px; }
|
|
695
|
+
.cx-dt th { position: sticky; top: 0; z-index: 1; background: var(--muted); text-align: left; font-weight: 500; color: var(--muted-foreground); height: 40px; padding: 0 12px; border-bottom: 1px solid var(--border); white-space: nowrap; }
|
|
696
|
+
.cx-dt td { height: 52px; padding: 0 12px; border-bottom: 1px solid var(--border); vertical-align: middle; }
|
|
697
|
+
.cx-dt tbody tr:last-child td { border-bottom: 0; }
|
|
698
|
+
.cx-dt tbody tr { transition: background-color 120ms; }
|
|
699
|
+
.cx-dt tbody tr:hover { background: color-mix(in srgb, var(--muted) 50%, transparent); }
|
|
700
|
+
.cx-dt tbody tr[data-selected] { background: var(--selected-soft); }
|
|
701
|
+
.cx-dt .cx-dt-check { width: 40px; padding-right: 0; }
|
|
702
|
+
.cx-dt .cx-dt-num { text-align: right; }
|
|
703
|
+
.cx-dt td.cx-dt-num { font-variant-numeric: tabular-nums; font-weight: 600; }
|
|
704
|
+
.cx-dt .cx-dt-act { width: 44px; padding: 0 6px; }
|
|
705
|
+
|
|
706
|
+
|
|
707
|
+
|
|
708
|
+
|
|
709
|
+
|
|
710
|
+
|
|
711
|
+
.cx-dt-who b { display: block; font-weight: 500; }
|
|
712
|
+
.cx-dt-who small { color: var(--muted-foreground); font-size: 12px; }
|
|
713
|
+
.cx-dt-when { font-variant-numeric: tabular-nums; white-space: nowrap; }
|
|
714
|
+
@container (max-width: 560px) {
|
|
715
|
+
.cx-dt thead { display: none; }
|
|
716
|
+
.cx-dt, .cx-dt tbody { display: block; }
|
|
717
|
+
.cx-dt tbody tr { display: grid; grid-template-columns: auto 1fr auto; grid-template-areas: "c who amt" "c meta st"; gap: 2px 12px; align-items: center; padding: 12px; border-bottom: 1px solid var(--border); }
|
|
718
|
+
.cx-dt td { display: block; height: auto; padding: 0; border: 0; }
|
|
719
|
+
.cx-dt td.cx-dt-check { grid-area: c; align-self: center; width: auto; }
|
|
720
|
+
.cx-dt td.cx-dt-who { grid-area: who; }
|
|
721
|
+
.cx-dt td.cx-dt-svc { grid-area: meta; color: var(--muted-foreground); font-size: 13px; }
|
|
722
|
+
.cx-dt td.cx-dt-when { display: none; }
|
|
723
|
+
.cx-dt td.cx-dt-st { grid-area: st; justify-self: end; }
|
|
724
|
+
.cx-dt td.cx-dt-num { grid-area: amt; }
|
|
725
|
+
.cx-dt td.cx-dt-act { display: none; }
|
|
726
|
+
.cx-dt-who small { display: none; }
|
|
727
|
+
.cx-dt td.cx-dt-svc::after { content: " · " attr(data-when); }
|
|
728
|
+
}
|
|
729
|
+
|
|
730
|
+
/* ── Board ── */
|
|
731
|
+
.cx-board { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(250px, 1fr); max-width: 1120px !important; gap: 12px; width: 100%; max-width: 920px; margin: 0 auto; overflow-x: auto; scroll-snap-type: x proximity; padding-bottom: 4px; }
|
|
732
|
+
.cx-blane { scroll-snap-align: start; display: flex; flex-direction: column; gap: 8px; padding: 10px; border-radius: calc(var(--radius) * 1.4); background: var(--muted); min-height: 300px; }
|
|
733
|
+
.cx-lane-h { display: flex; align-items: center; justify-content: space-between; padding: 2px 4px 4px; font-size: 13px; font-weight: 600; }
|
|
734
|
+
.cx-lane-h .cx-count { min-width: 20px; height: 20px; padding: 0 6px; border-radius: 99px; background: var(--background); font-size: 11px; display: inline-grid; place-items: center; font-variant-numeric: tabular-nums; }
|
|
735
|
+
.cx-lane-list { display: flex; flex-direction: column; gap: 8px; flex: 1; border-radius: calc(var(--radius) * .9); transition: background-color 150ms; }
|
|
736
|
+
.cx-blane[data-over] .cx-lane-list { background: color-mix(in srgb, var(--selected) 8%, transparent); }
|
|
737
|
+
|
|
738
|
+
|
|
739
|
+
|
|
740
|
+
|
|
741
|
+
|
|
742
|
+
|
|
743
|
+
|
|
744
|
+
.cx-bph { border-radius: var(--radius); border: 1.5px dashed color-mix(in srgb, var(--selected) 55%, transparent); background: var(--selected-soft); flex: none; }
|
|
745
|
+
.cx-lane-empty-b { padding: 18px 8px; text-align: center; color: var(--muted-foreground); font-size: 12px; }
|
|
746
|
+
|
|
747
|
+
/* ── Picker field + wheels ── */
|
|
748
|
+
|
|
749
|
+
|
|
750
|
+
|
|
751
|
+
|
|
752
|
+
.cx-wheels { position: relative; display: flex; gap: 4px; height: 220px; user-select: none; }
|
|
753
|
+
.cx-wheels::before { content: ""; position: absolute; left: 0; right: 0; top: 50%; height: 40px; margin-top: -20px; border-radius: calc(var(--radius) * .9); background: var(--muted); pointer-events: none; }
|
|
754
|
+
.cx-wheel { position: relative; flex: 1; overflow-y: auto; touch-action: none; cursor: grab; overscroll-behavior: contain; scroll-snap-type: y mandatory; scrollbar-width: none; padding: 90px 0; outline: none; border-radius: calc(var(--radius) * .9);
|
|
755
|
+
-webkit-mask-image: linear-gradient(transparent, #000 32%, #000 68%, transparent); mask-image: linear-gradient(transparent, #000 32%, #000 68%, transparent); }
|
|
756
|
+
.cx-wheel::-webkit-scrollbar { display: none; }
|
|
757
|
+
.cx-wheel:focus-visible { box-shadow: inset 0 0 0 2px var(--ring); }
|
|
758
|
+
.cx-wheel-it { height: 40px; display: grid; place-items: center; scroll-snap-align: center; font-size: 17px; font-variant-numeric: tabular-nums; color: var(--muted-foreground); cursor: pointer; transition: color 120ms; white-space: nowrap; }
|
|
759
|
+
.cx-wheel-it[data-on] { color: var(--foreground); font-weight: 600; }
|
|
760
|
+
.cx-wheel-it[data-off] { opacity: .35; }
|
|
761
|
+
.cx-wheel[data-flex="2"] { flex: 2; }
|
|
762
|
+
.cx-wheel-sum { text-align: center; font-size: 14px; font-weight: 500; min-height: 1.4em; }
|
|
763
|
+
|
|
764
|
+
/* ── Upload ── */
|
|
765
|
+
.cx-drop { position: relative; aspect-ratio: 1; max-width: 100%; border-radius: calc(var(--radius) * 1.6); border: 1.5px dashed var(--input); background: color-mix(in srgb, var(--muted) 50%, transparent); display: grid; place-items: center; cursor: pointer; overflow: hidden; transition: border-color 150ms, background-color 150ms; }
|
|
766
|
+
.cx-drop:hover, .cx-drop[data-over] { border-color: var(--selected); background: var(--selected-soft); }
|
|
767
|
+
.cx-drop:focus-visible { outline: 2px solid var(--ring); outline-offset: 2px; }
|
|
768
|
+
.cx-drop[data-has] { border-style: solid; border-color: var(--border); cursor: default; }
|
|
769
|
+
.cx-drop-empty { display: flex; flex-direction: column; align-items: center; gap: 6px; text-align: center; font-size: 13px; color: var(--muted-foreground); padding: 16px; }
|
|
770
|
+
.cx-drop-empty svg { width: 22px; height: 22px; margin-bottom: 4px; }
|
|
771
|
+
.cx-drop-empty b { color: var(--foreground); font-size: 14px; font-weight: 500; }
|
|
772
|
+
.cx-drop[data-has] .cx-drop-empty { display: none; }
|
|
773
|
+
.cx-drop-img { position: absolute; inset: 0; width: 100%; height: 100%; animation: cx-fade 260ms ease; }
|
|
774
|
+
.cx-drop-bar { position: absolute; left: 12px; right: 12px; bottom: 12px; height: 6px; border-radius: 99px; background: rgb(255 255 255 / .55); overflow: hidden; backdrop-filter: blur(4px); }
|
|
775
|
+
.cx-drop-bar i { display: block; height: 100%; width: 0; border-radius: 99px; background: var(--selected); transition: width 160ms linear; }
|
|
776
|
+
#drop-msg[data-tone="bad"] { color: var(--destructive); }
|
|
777
|
+
#drop-msg[data-tone="ok"] { color: var(--success); }
|
|
778
|
+
|
|
779
|
+
/* ── Phone shell: header that shrinks, three fixed tabs ── */
|
|
780
|
+
.cx-phone-frame { width: 320px; max-width: 100%; height: 600px; border-radius: 46px; padding: 9px; background: color-mix(in srgb, var(--foreground) 88%, var(--background)); box-shadow: 0 30px 60px -30px rgb(0 0 0 / .45); }
|
|
781
|
+
.cx-ph-screen { position: relative; height: 100%; border-radius: 38px; overflow: hidden; background: var(--background); display: flex; flex-direction: column; }
|
|
782
|
+
.cx-ph-status { display: flex; align-items: center; justify-content: space-between; height: 44px; padding: 0 24px; font-size: 13px; font-weight: 600; flex: none; }
|
|
783
|
+
.cx-ph-island { width: 96px; height: 28px; border-radius: 99px; background: #000; }
|
|
784
|
+
.cx-ph-head { flex: none; background: color-mix(in srgb, var(--background) 92%, transparent); backdrop-filter: blur(10px); border-bottom: 1px solid transparent; transition: border-color 160ms; z-index: 2; }
|
|
785
|
+
.cx-ph-head[data-compact] { border-bottom-color: var(--border); }
|
|
786
|
+
.cx-ph-bar { display: grid; grid-template-columns: auto 1fr auto; align-items: center; height: 44px; padding: 0 6px; }
|
|
787
|
+
.cx-ph-small { text-align: center; font-size: 15px; font-weight: 600; opacity: 0; transform: translateY(4px); transition: opacity 160ms, transform 160ms; }
|
|
788
|
+
.cx-ph-head[data-compact] .cx-ph-small { opacity: 1; transform: none; }
|
|
789
|
+
.cx-ph-big { margin: 0; padding: 0 18px 10px; font-size: 30px; font-weight: 700; letter-spacing: -0.02em; line-height: 1.1; transform-origin: left center; }
|
|
790
|
+
.cx-ph-body { flex: 1; overflow-y: auto; padding: 4px 16px 16px; display: flex; flex-direction: column; gap: 8px; }
|
|
791
|
+
.cx-ph-nav { flex: none; display: grid; grid-template-columns: repeat(3, 1fr); padding: 6px 8px calc(6px + 18px); border-top: 1px solid var(--border); background: var(--background); }
|
|
792
|
+
|
|
793
|
+
|
|
794
|
+
|
|
795
|
+
|
|
796
|
+
|
|
797
|
+
.cx-ph-ico { position: relative; display: grid; }
|
|
798
|
+
.cx-ph-badge { position: absolute; top: -5px; left: 15px; min-width: 18px; height: 16px; padding: 0 4px; border-radius: 99px; background: var(--destructive); color: var(--on-destructive); font: 600 10px/16px var(--font-sans); font-style: normal; text-align: center; font-variant-numeric: tabular-nums; box-shadow: 0 0 0 2px var(--background); }
|
|
799
|
+
.cx-ph-row { display: flex; align-items: center; gap: 10px; padding: 10px 12px; border-radius: var(--radius); background: var(--card); box-shadow: 0 0 0 1px var(--border); font-size: 13px; }
|
|
800
|
+
.cx-ph-row b { font-weight: 600; }
|
|
801
|
+
.cx-ph-row small { display: block; color: var(--muted-foreground); }
|
|
802
|
+
.cx-ph-row .cx-time { margin-left: auto; }
|
|
803
|
+
.cx-ph-sec { font-size: 12px; font-weight: 600; color: var(--muted-foreground); text-transform: uppercase; letter-spacing: .05em; margin: 8px 2px 0; }
|
|
804
|
+
|
|
805
|
+
/* ── Share ── */
|
|
806
|
+
.cx-share { width: 328px; padding: 14px; border-radius: calc(var(--radius) * 1.4); background: var(--popover); color: var(--popover-foreground); box-shadow: 0 0 0 1px color-mix(in srgb, var(--foreground) 10%, transparent), 0 10px 15px -3px rgb(0 0 0 / .1); display: flex; flex-direction: column; gap: 12px;
|
|
807
|
+
opacity: 0; transform: scale(.97); transition: opacity 120ms ease, transform 120ms ease !important; transition-property: opacity, transform !important; }
|
|
808
|
+
.cx-share[data-state="open"] { opacity: 1; transform: none; }
|
|
809
|
+
.cx-share-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 4px; }
|
|
810
|
+
.cx-share-it { display: flex; flex-direction: column; align-items: center; gap: 6px; padding: 8px 2px; border-radius: var(--radius); border: 0; background: transparent; color: var(--foreground); font: 500 11px var(--font-sans); cursor: pointer; text-decoration: none; }
|
|
811
|
+
.cx-share-it:hover { background: var(--accent); }
|
|
812
|
+
.cx-share-it:focus-visible { outline: 2px solid var(--ring); outline-offset: 0; }
|
|
813
|
+
.cx-share-ico { width: 44px; height: 44px; border-radius: 14px; display: grid; place-items: center; background: var(--brand, var(--muted)); color: #fff; }
|
|
814
|
+
.cx-share-ico svg { width: 22px; height: 22px; }
|
|
815
|
+
.cx-share-ico.plain { background: var(--muted); color: var(--foreground); }
|
|
816
|
+
.cx-share-link { display: flex; align-items: center; gap: 8px; height: 36px; padding: 0 4px 0 12px; border-radius: var(--radius); background: var(--muted); font: 13px var(--font-mono); }
|
|
817
|
+
.cx-share-link span { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; user-select: all; }
|
|
818
|
+
|
|
819
|
+
.cx-wheel:active { cursor: grabbing; }
|
|
820
|
+
|
|
821
|
+
/* ── Share sheet (Storio's, on tokens) ── */
|
|
822
|
+
.cx-modal-head span:empty { display: none; }
|
|
823
|
+
.cx-modal-foot:empty { display: none; }
|
|
824
|
+
.cx-sh { display: flex; flex-direction: column; gap: 16px; }
|
|
825
|
+
.cx-sh-card { display: flex; flex-direction: column; align-items: center; text-align: center; gap: 6px; padding: 26px 16px; border-radius: calc(var(--radius) * 2); background: var(--primary); color: var(--primary-foreground); }
|
|
826
|
+
.cx-sh-av { width: 72px; height: 72px; border-radius: 99px; display: grid; place-items: center; margin-bottom: 4px; background: color-mix(in srgb, var(--primary-foreground) 14%, var(--primary)); font-weight: 700; font-size: 22px; }
|
|
827
|
+
.cx-sh-card b { font-size: 18px; font-weight: 800; letter-spacing: -.01em; }
|
|
828
|
+
.cx-sh-card > span:last-child { font-size: 13px; opacity: .78; }
|
|
829
|
+
.cx-sh-prod { position: relative; height: 15rem; border-radius: calc(var(--radius) * 2); overflow: hidden; background: var(--g); color: #fff; }
|
|
830
|
+
.cx-sh-prod::before { content: ""; position: absolute; inset: 0; background: linear-gradient(to top, rgb(0 0 0 / .74), rgb(0 0 0 / .16) 42%, transparent 66%); }
|
|
831
|
+
.cx-sh-tag { position: absolute; top: 11px; right: 11px; padding: 3px 10px; border-radius: 10px; background: #fff; color: #101014; font-weight: 800; font-size: 17px; letter-spacing: -.01em; font-variant-numeric: tabular-nums; box-shadow: 0 6px 18px rgb(0 0 0 / .35); }
|
|
832
|
+
.cx-sh-pinfo { position: absolute; left: 0; right: 0; bottom: 0; padding: 16px 17px 18px; display: flex; flex-direction: column; gap: 2px; }
|
|
833
|
+
.cx-sh-pinfo b { font-size: 20px; font-weight: 800; letter-spacing: -.02em; line-height: 1.05; text-shadow: 0 2px 12px rgb(0 0 0 / .45); }
|
|
834
|
+
.cx-sh-pinfo span { font-size: 14px; font-weight: 600; opacity: .9; }
|
|
835
|
+
.cx-sh-copy { display: flex; align-items: center; gap: 10px; height: 54px; padding: 0 8px 0 14px; border: 1px solid var(--border); border-radius: calc(var(--radius) * 1.4); }
|
|
836
|
+
.cx-sh-url { flex: 1; min-width: 0; font-size: 14px; overflow-wrap: anywhere; line-height: 1.3; }
|
|
837
|
+
|
|
838
|
+
.cx-sh-lbl { font-size: 11px; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; color: var(--muted-foreground); }
|
|
839
|
+
.cx-sh-targets { display: flex; gap: 6px; overflow-x: auto; scrollbar-width: none; margin-inline: -4px; padding: 2px 4px 4px; cursor: grab; touch-action: pan-x; overscroll-behavior-x: contain; }
|
|
840
|
+
.cx-sh-targets::-webkit-scrollbar { display: none; }
|
|
841
|
+
.cx-sh-targets.dragging { cursor: grabbing; }
|
|
842
|
+
|
|
843
|
+
|
|
844
|
+
|
|
845
|
+
|
|
846
|
+
|
|
847
|
+
|
|
848
|
+
|
|
849
|
+
|
|
850
|
+
.cx-sh-qrview { align-items: center; padding: 6px 0 4px; }
|
|
851
|
+
.cx-sh-qrurl { font-size: 14px; color: var(--muted-foreground); }
|
|
852
|
+
.cx-sh-msg:empty { display: none; }
|
|
853
|
+
/* fade only the edge that still has more to scroll */
|
|
854
|
+
.cx-sh-targets { --fl: 0px; --fr: 28px; -webkit-mask-image: linear-gradient(to right, transparent, #000 var(--fl), #000 calc(100% - var(--fr)), transparent); mask-image: linear-gradient(to right, transparent, #000 var(--fl), #000 calc(100% - var(--fr)), transparent); }
|
|
855
|
+
.cx-sh-targets[data-end] { --fr: 0px; }
|
|
856
|
+
.cx-sh-targets[data-scrolled] { --fl: 28px; }
|
|
857
|
+
|
|
858
|
+
/* ── Board card: optional parts, none fixed ── */
|
|
859
|
+
|
|
860
|
+
|
|
861
|
+
|
|
862
|
+
|
|
863
|
+
|
|
864
|
+
|
|
865
|
+
|
|
866
|
+
|
|
867
|
+
|
|
868
|
+
|
|
869
|
+
|
|
870
|
+
|
|
871
|
+
|
|
872
|
+
|
|
873
|
+
|
|
874
|
+
|
|
875
|
+
/* ── receipt ── */
|
|
876
|
+
.cx-rcpt { display: flex; flex-direction: column; gap: 14px; }
|
|
877
|
+
.cx-rcpt-shot { display: flex; flex-direction: column; align-items: center; gap: 6px; padding: 22px 18px 16px; border-radius: calc(var(--radius) * 1.6); background: linear-gradient(#fdfcf7, #f3f1ea); color: #1b1b1f; box-shadow: inset 0 0 0 1px rgb(0 0 0 / .06); }
|
|
878
|
+
.cx-rcpt-ok { width: 40px; height: 40px; border-radius: 99px; display: grid; place-items: center; background: #1f9d55; color: #fff; }
|
|
879
|
+
.cx-rcpt-ok svg { width: 20px; height: 20px; }
|
|
880
|
+
.cx-rcpt-shot b { font-size: 15px; }
|
|
881
|
+
.cx-rcpt-amt { font-size: 26px; font-weight: 800; letter-spacing: -.02em; font-variant-numeric: tabular-nums; }
|
|
882
|
+
.cx-rcpt-shot dl { display: grid; grid-template-columns: auto 1fr; gap: 6px 14px; width: 100%; margin: 10px 0 0; padding-top: 12px; border-top: 1px dashed rgb(0 0 0 / .15); font-size: 13px; }
|
|
883
|
+
.cx-rcpt-shot dt { color: #6b6b74; }
|
|
884
|
+
.cx-rcpt-shot dd { margin: 0; text-align: right; font-weight: 500; }
|
|
885
|
+
.cx-rcpt-check { display: grid; grid-template-columns: 1fr auto auto; align-items: center; gap: 10px; padding: 10px 12px; border-radius: var(--radius); background: var(--muted); font-size: 13px; }
|
|
886
|
+
|
|
887
|
+
/* ── Board card blocks ── */
|
|
888
|
+
|
|
889
|
+
|
|
890
|
+
|
|
891
|
+
|
|
892
|
+
|
|
893
|
+
|
|
894
|
+
|
|
895
|
+
|
|
896
|
+
|
|
897
|
+
|
|
898
|
+
|
|
899
|
+
|
|
900
|
+
.cx-map-svg { display: block; width: 100%; height: 96px; }
|
|
901
|
+
.mp-ground { fill: color-mix(in srgb, var(--muted) 70%, var(--background)); }
|
|
902
|
+
.mp-park { fill: color-mix(in srgb, var(--success) 18%, var(--background)); }
|
|
903
|
+
.mp-water { fill: color-mix(in srgb, var(--info) 18%, var(--background)); }
|
|
904
|
+
.mp-street { stroke: var(--background); stroke-width: 7; fill: none; }
|
|
905
|
+
.mp-minor { stroke: var(--background); stroke-width: 3; fill: none; opacity: .8; }
|
|
906
|
+
.mp-route { stroke: var(--selected); stroke-width: 3.5; fill: none; stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 2 0; }
|
|
907
|
+
.mp-shop { fill: var(--foreground); stroke: var(--background); stroke-width: 2.5; }
|
|
908
|
+
.mp-pin { fill: var(--selected); stroke: var(--background); stroke-width: 1.5; }
|
|
909
|
+
.mp-pin-dot { fill: var(--background); }
|
|
910
|
+
|
|
911
|
+
|
|
912
|
+
|
|
913
|
+
|
|
914
|
+
|
|
915
|
+
|
|
916
|
+
|
|
917
|
+
|
|
918
|
+
|
|
919
|
+
|
|
920
|
+
|
|
921
|
+
|
|
922
|
+
|
|
923
|
+
|
|
924
|
+
|
|
925
|
+
|
|
926
|
+
|
|
927
|
+
|
|
928
|
+
|
|
929
|
+
|
|
930
|
+
|
|
931
|
+
|
|
932
|
+
|
|
933
|
+
|
|
934
|
+
|
|
935
|
+
/* board: wider than its box, so it pans; edges fade where there is more */
|
|
936
|
+
.cx-board { scroll-snap-type: none; cursor: grab; --fl: 0px; --fr: 0px; -webkit-mask-image: linear-gradient(to right, transparent, #000 var(--fl), #000 calc(100% - var(--fr)), transparent); mask-image: linear-gradient(to right, transparent, #000 var(--fl), #000 calc(100% - var(--fr)), transparent); }
|
|
937
|
+
.cx-board[data-start] { --fl: 36px; }
|
|
938
|
+
.cx-board[data-end] { --fr: 36px; }
|
|
939
|
+
.cx-board.panning { cursor: grabbing; user-select: none; }
|
|
940
|
+
.cx-board.panning * { pointer-events: none; }
|
|
941
|
+
|
|
942
|
+
|
|
943
|
+
|
|
944
|
+
/* ── card sizes showcase ── */
|
|
945
|
+
.cx-card-sizes { display: grid; grid-template-columns: repeat(3, minmax(0, 280px)); gap: 20px; justify-content: center; align-items: start; width: 100%; }
|
|
946
|
+
.cx-cs-col { display: flex; flex-direction: column; gap: 10px; }
|
|
947
|
+
.cx-cs-h b { display: block; font-size: 14px; font-weight: 600; }
|
|
948
|
+
.cx-cs-h span { display: block; font-size: 12px; color: var(--muted-foreground); line-height: 1.4; min-height: 2.8em; }
|
|
949
|
+
|
|
950
|
+
|
|
951
|
+
|
|
952
|
+
|
|
953
|
+
|
|
954
|
+
@media (max-width: 900px) { .cx-card-sizes { grid-template-columns: minmax(0, 320px); } }
|
|
955
|
+
|
|
956
|
+
/* ── ColorPick host rows ── */
|
|
957
|
+
.cx-cp-field { display: flex; flex-direction: column; gap: 6px; }
|
|
958
|
+
.cx-cp-hint { font-size: 12px; color: var(--muted-foreground); }
|
|
959
|
+
.cx-cp-hint code { font: 11px var(--font-mono); }
|
|
960
|
+
.cx-cp-row { display: flex; align-items: center; gap: 12px; padding: 6px; border: 1px solid var(--border); border-radius: calc(var(--radius) * 1.2); cursor: pointer; width: fit-content; max-width: 100%; }
|
|
961
|
+
.cx-cp-row:hover { background: color-mix(in srgb, var(--muted) 60%, transparent); }
|
|
962
|
+
.cx-cp-val { font-size: 13px; font-weight: 500; padding-right: 6px; }
|
|
963
|
+
.cx-store-wall { flex: 0 1 380px; display: grid; place-items: center; padding: 32px 24px; border-radius: calc(var(--radius) * 2); box-shadow: inset 0 0 0 1px rgb(0 0 0 / .06); }
|
|
964
|
+
|
|
965
|
+
/* ── Accordion: hover and focus on the whole row (Nova underlines; the row also lights up) ── */
|
|
966
|
+
#acc .cn-accordion-trigger { border-radius: calc(var(--radius) * .8); margin-inline: -8px; padding-inline: 8px; width: calc(100% + 16px); transition: background-color 150ms ease, color 150ms ease; }
|
|
967
|
+
#acc .cn-accordion-trigger:hover { background: color-mix(in srgb, var(--foreground) 6%, transparent); text-decoration: underline; text-underline-offset: 3px; }
|
|
968
|
+
#acc .cn-accordion-trigger:hover .cx-acc-chev { color: var(--foreground); }
|
|
969
|
+
#acc .cn-accordion-trigger:focus-visible { outline: 2px solid var(--ring); outline-offset: 0; }
|
|
970
|
+
|
|
971
|
+
/* ── card groups ── */
|
|
972
|
+
|
|
973
|
+
|
|
974
|
+
|
|
975
|
+
|
|
976
|
+
|
|
977
|
+
|
|
978
|
+
|
|
979
|
+
|
|
980
|
+
|
|
981
|
+
|
|
982
|
+
|
|
983
|
+
|
|
984
|
+
|
|
985
|
+
|
|
986
|
+
|
|
987
|
+
|
|
988
|
+
|
|
989
|
+
|
|
990
|
+
|
|
991
|
+
/* ── one slider look for all (Storio's): 8 px track, 21 px thumb ringed in --primary, value bubble ── */
|
|
992
|
+
.cx-sl-field { gap: 6px; }
|
|
993
|
+
.cx-slider { margin-top: 2.1rem; height: 21px; }
|
|
994
|
+
.cx-slider .cn-slider-track { height: 8px; border-radius: 999px; background: var(--muted); }
|
|
995
|
+
.cx-slider .cn-slider-range { background: var(--primary); border-radius: 999px; }
|
|
996
|
+
.cx-slider .cn-slider-thumb { width: 21px; height: 21px; margin-top: -10.5px; border-radius: 50%; background: var(--background); border: 5px solid var(--primary); box-shadow: 0 2px 5px rgb(0 0 0 / .3); transition: transform .1s ease, box-shadow .15s ease; }
|
|
997
|
+
.cx-slider .cn-slider-thumb[data-drag] { transform: scale(1.12); }
|
|
998
|
+
.cx-slider .cn-slider-thumb:focus-visible { box-shadow: 0 2px 5px rgb(0 0 0 / .3), 0 0 0 4px var(--ring); outline: none; }
|
|
999
|
+
.cx-sl-bubble { position: absolute; bottom: calc(100% + 7px); transform: translateX(-50%); pointer-events: none; background: var(--primary); color: var(--primary-foreground); font-weight: 700; font-size: .72rem; padding: .24rem .5rem; border-radius: 8px; font-variant-numeric: tabular-nums; white-space: nowrap; box-shadow: 0 3px 10px rgb(0 0 0 / .2); }
|
|
1000
|
+
.cx-sl-bubble::after { content: ""; position: absolute; left: 50%; bottom: -4px; transform: translateX(-50%); border: 5px solid transparent; border-top-color: var(--primary); border-bottom: 0; }
|
|
1001
|
+
.mslider .mslider-input { height: 21px; }
|
|
1002
|
+
|
|
1003
|
+
/* ═════ Board card: one vertical rhythm (two measures), full width used ═════ */
|
|
1004
|
+
|
|
1005
|
+
|
|
1006
|
+
|
|
1007
|
+
|
|
1008
|
+
|
|
1009
|
+
|
|
1010
|
+
|
|
1011
|
+
|
|
1012
|
+
|
|
1013
|
+
/* decision box */
|
|
1014
|
+
|
|
1015
|
+
|
|
1016
|
+
|
|
1017
|
+
|
|
1018
|
+
|
|
1019
|
+
|
|
1020
|
+
|
|
1021
|
+
/* groups: same padding above and below every divider */
|
|
1022
|
+
|
|
1023
|
+
|
|
1024
|
+
|
|
1025
|
+
|
|
1026
|
+
|
|
1027
|
+
/* photos use the whole width: four equal squares */
|
|
1028
|
+
|
|
1029
|
+
|
|
1030
|
+
|
|
1031
|
+
|
|
1032
|
+
/* map, address, tracking, courier: each its own row with the same gap */
|
|
1033
|
+
.cx-map-svg { height: 112px; }
|
|
1034
|
+
|
|
1035
|
+
|
|
1036
|
+
|
|
1037
|
+
|
|
1038
|
+
|
|
1039
|
+
|
|
1040
|
+
|
|
1041
|
+
|
|
1042
|
+
|
|
1043
|
+
|
|
1044
|
+
/* actions fill the row: the next step widest, WhatsApp a fixed square at the end */
|
|
1045
|
+
|
|
1046
|
+
|
|
1047
|
+
|
|
1048
|
+
|
|
1049
|
+
/* room to breathe: wider lanes and a wider max example */
|
|
1050
|
+
.cx-board { grid-auto-columns: minmax(292px, 1fr) !important; max-width: 1240px !important; }
|
|
1051
|
+
.cx-card-sizes { grid-template-columns: minmax(0, 300px) minmax(0, 320px) minmax(0, 360px); }
|
|
1052
|
+
|
|
1053
|
+
/* ── compact delivery line on the card ── */
|
|
1054
|
+
|
|
1055
|
+
|
|
1056
|
+
|
|
1057
|
+
|
|
1058
|
+
|
|
1059
|
+
|
|
1060
|
+
|
|
1061
|
+
|
|
1062
|
+
|
|
1063
|
+
|
|
1064
|
+
/* footer icon buttons: same square as WhatsApp; the note shows a dot */
|
|
1065
|
+
|
|
1066
|
+
|
|
1067
|
+
|
|
1068
|
+
/* the note bubble */
|
|
1069
|
+
.cx-notepop { width: min(300px, calc(100vw - 32px)); padding: 12px 14px 14px; border-radius: calc(var(--radius) * 1.2); background: var(--foreground); color: var(--background); box-shadow: 0 16px 36px -14px rgb(0 0 0 / .45); font-size: 13.5px; line-height: 1.5;
|
|
1070
|
+
opacity: 0; transform: translateY(4px) scale(.98); transition: opacity 140ms ease, transform 140ms ease !important; transition-property: opacity, transform !important; }
|
|
1071
|
+
.cx-notepop[data-state="open"] { opacity: 1; transform: none; }
|
|
1072
|
+
.cx-notepop-h { display: flex; align-items: center; gap: 6px; margin-bottom: 6px; font-size: 12.5px; }
|
|
1073
|
+
.cx-notepop-h svg { width: 14px; height: 14px; opacity: .7; }
|
|
1074
|
+
.cx-notepop-h b { font-weight: 600; }
|
|
1075
|
+
.cx-notepop p { margin: 0; }
|
|
1076
|
+
.cx-notepop-x { margin-left: auto; display: grid; place-items: center; width: 24px; height: 24px; border: 0; border-radius: 99px; background: color-mix(in srgb, var(--background) 14%, transparent); color: inherit; cursor: pointer; }
|
|
1077
|
+
.cx-notepop-x svg { width: 12px; height: 12px; opacity: 1; }
|
|
1078
|
+
/* ── delivery modal: steps aligned to the edges ── */
|
|
1079
|
+
.cx-dl { display: flex; flex-direction: column; gap: 16px; }
|
|
1080
|
+
.cx-dl-map { border-radius: var(--radius); overflow: hidden; box-shadow: inset 0 0 0 1px var(--border); }
|
|
1081
|
+
.cx-dl-map .cx-map-svg { height: 170px; }
|
|
1082
|
+
.cx-dl-addr { display: grid; grid-template-columns: 18px 1fr; gap: 10px; align-items: start; font-size: 14px; }
|
|
1083
|
+
.cx-dl-addr svg { width: 18px; height: 18px; color: var(--primary); margin-top: 1px; }
|
|
1084
|
+
.cx-dl-addr b { display: block; font-weight: 500; line-height: 1.4; }
|
|
1085
|
+
.cx-dl-addr small { display: block; color: var(--muted-foreground); font-size: 13px; margin-top: 2px; }
|
|
1086
|
+
.cx-dl-steps { display: grid; grid-template-columns: repeat(var(--n), 1fr); gap: 6px; }
|
|
1087
|
+
.cx-dl-steps > div { display: flex; flex-direction: column; gap: 8px; font-size: 12.5px; color: var(--muted-foreground); }
|
|
1088
|
+
.cx-dl-steps i { display: block; height: 6px; border-radius: 99px; background: var(--border); }
|
|
1089
|
+
.cx-dl-steps [data-done] i, .cx-dl-steps [data-now] i { background: var(--primary); }
|
|
1090
|
+
.cx-dl-steps [data-now] span { color: var(--foreground); font-weight: 600; }
|
|
1091
|
+
.cx-dl-steps > div:last-child { text-align: right; }
|
|
1092
|
+
.cx-dl-steps > div:not(:first-child):not(:last-child) { text-align: center; }
|
|
1093
|
+
.cx-dl-courier { display: grid; grid-template-columns: auto 1fr auto; align-items: center; gap: 12px; padding: 12px; border-radius: var(--radius); background: color-mix(in srgb, var(--muted) 70%, transparent); font-size: 14px; }
|
|
1094
|
+
.cx-dl-courier b { display: block; font-weight: 600; }
|
|
1095
|
+
.cx-dl-courier small { display: block; color: var(--muted-foreground); font-size: 12.5px; }
|
|
1096
|
+
.cx-dl-eta { text-align: right; }
|
|
1097
|
+
.cx-dl-eta b { font-size: 18px; color: var(--primary); font-variant-numeric: tabular-nums; }
|
|
1098
|
+
|
|
1099
|
+
/* ── head: one line for the name (with WhatsApp next to it), one line for the detail ── */
|
|
1100
|
+
|
|
1101
|
+
|
|
1102
|
+
|
|
1103
|
+
|
|
1104
|
+
|
|
1105
|
+
|
|
1106
|
+
|
|
1107
|
+
/* the customer's note: a violet strip right under the person, one line, tap to read */
|
|
1108
|
+
|
|
1109
|
+
|
|
1110
|
+
|
|
1111
|
+
|
|
1112
|
+
|
|
1113
|
+
|
|
1114
|
+
|
|
1115
|
+
/* decision box: compact, the message in one line */
|
|
1116
|
+
|
|
1117
|
+
|
|
1118
|
+
|
|
1119
|
+
|
|
1120
|
+
|
|
1121
|
+
|
|
1122
|
+
|
|
1123
|
+
.cx-req-full { margin: 0; padding: 12px 14px; border-left: 3px solid var(--warning); border-radius: 0 var(--radius) var(--radius) 0; background: color-mix(in srgb, var(--warning) 8%, var(--background)); font-size: 15px; line-height: 1.55; }
|
|
1124
|
+
.cx-req-next { display: flex; flex-direction: column; gap: 6px; font-size: 13px; color: var(--muted-foreground); }
|
|
1125
|
+
.cx-req-next b { color: var(--foreground); font-weight: 600; }
|
|
1126
|
+
.cx-req-next span { display: flex; align-items: center; gap: 6px; }
|
|
1127
|
+
.cx-req-next svg { width: 14px; height: 14px; }
|
|
1128
|
+
/* footer: the state change is THE button (filled), the rest secondary */
|
|
1129
|
+
|
|
1130
|
+
|
|
1131
|
+
|
|
1132
|
+
|
|
1133
|
+
|
|
1134
|
+
|
|
1135
|
+
/* ═════ minimal card: it only informs; reading and deciding happen in a modal ═════ */
|
|
1136
|
+
|
|
1137
|
+
|
|
1138
|
+
|
|
1139
|
+
|
|
1140
|
+
|
|
1141
|
+
|
|
1142
|
+
|
|
1143
|
+
|
|
1144
|
+
|
|
1145
|
+
|
|
1146
|
+
|
|
1147
|
+
|
|
1148
|
+
|
|
1149
|
+
|
|
1150
|
+
|
|
1151
|
+
/* products: a small strip */
|
|
1152
|
+
|
|
1153
|
+
|
|
1154
|
+
|
|
1155
|
+
/* the payment badge is the way into the receipt */
|
|
1156
|
+
|
|
1157
|
+
|
|
1158
|
+
|
|
1159
|
+
|
|
1160
|
+
/* footer: just the state change */
|
|
1161
|
+
|
|
1162
|
+
|
|
1163
|
+
.cx-req-full[data-tone="bad"] { border-left-color: var(--destructive); background: color-mix(in srgb, var(--destructive) 7%, var(--background)); }
|
|
1164
|
+
.cx-req-full[data-tone="info"] { border-left-color: var(--info); background: color-mix(in srgb, var(--info) 7%, var(--background)); }
|
|
1165
|
+
|
|
1166
|
+
|
|
1167
|
+
/* attention icons: tinted by kind, a dot says «pending» */
|
|
1168
|
+
|
|
1169
|
+
|
|
1170
|
+
|
|
1171
|
+
|
|
1172
|
+
|
|
1173
|
+
|
|
1174
|
+
|
|
1175
|
+
|
|
1176
|
+
|
|
1177
|
+
|
|
1178
|
+
|
|
1179
|
+
/* attention icons: their own row under the person, aligned with the name */
|
|
1180
|
+
|
|
1181
|
+
|
|
1182
|
+
|
|
1183
|
+
|
|
1184
|
+
|
|
1185
|
+
/* real buttons look like buttons; information has no button chrome */
|
|
1186
|
+
|
|
1187
|
+
|
|
1188
|
+
|
|
1189
|
+
|
|
1190
|
+
|
|
1191
|
+
|
|
1192
|
+
|
|
1193
|
+
/* the showcase stacks on narrow screens */
|
|
1194
|
+
@media (max-width: 1000px) { .cx-card-sizes { grid-template-columns: minmax(0, 360px); } }
|
|
1195
|
+
|
|
1196
|
+
/* long text never breaks a line: it ends in an ellipsis */
|
|
1197
|
+
|
|
1198
|
+
|
|
1199
|
+
|
|
1200
|
+
|
|
1201
|
+
|
|
1202
|
+
/* the contact channel the customer chose, on the right */
|
|
1203
|
+
|
|
1204
|
+
|
|
1205
|
+
|
|
1206
|
+
|
|
1207
|
+
|
|
1208
|
+
|
|
1209
|
+
.cx-req-full[data-tone="note"] { border-left-color: var(--selected); background: var(--selected-soft); }
|
|
1210
|
+
/* Stripe receipt */
|
|
1211
|
+
.cx-stripe { display: flex; flex-direction: column; gap: 14px; }
|
|
1212
|
+
.cx-stripe-top { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
|
|
1213
|
+
.cx-stripe-amt { font-size: 28px; font-weight: 800; letter-spacing: -.02em; }
|
|
1214
|
+
.cx-stripe dl { display: grid; grid-template-columns: auto 1fr; gap: 8px 16px; margin: 0; padding: 14px; border-radius: var(--radius); background: color-mix(in srgb, var(--muted) 70%, transparent); font-size: 13.5px; }
|
|
1215
|
+
.cx-stripe dt { color: var(--muted-foreground); }
|
|
1216
|
+
.cx-stripe dd { margin: 0; text-align: right; }
|
|
1217
|
+
|
|
1218
|
+
|
|
1219
|
+
|
|
1220
|
+
|
|
1221
|
+
|
|
1222
|
+
|
|
1223
|
+
/* card badges: quiet text with a colored dot, no tinted pill */
|
|
1224
|
+
.cx-modal .cx-rcpt-check .cn-badge { height: auto; padding: 0; border: 0; border-radius: 0; background: none !important; color: var(--foreground); font-size: 12.5px; font-weight: 500; gap: 6px; }
|
|
1225
|
+
|
|
1226
|
+
|
|
1227
|
+
|
|
1228
|
+
|
|
1229
|
+
|
|
1230
|
+
|
|
1231
|
+
/* extras stay a light outlined chip */
|
|
1232
|
+
|
|
1233
|
+
|
|
1234
|
+
|
|
1235
|
+
/* ═════ library extensions (generic, reusable by any component) ═════ */
|
|
1236
|
+
/* Badge · variant="status": quiet text with a tone dot */
|
|
1237
|
+
.cn-badge[data-variant="status"] { height: auto; padding: 0; border: 0; background: none; color: var(--foreground); font-size: 12.5px; font-weight: 500; gap: 6px; --tone: var(--muted-foreground); }
|
|
1238
|
+
.cn-badge[data-variant="status"]::before { content: ""; width: 7px; height: 7px; border-radius: 99px; background: var(--tone); flex: none; }
|
|
1239
|
+
.cn-badge[data-variant="status"][data-tone="ok"] { --tone: var(--success); }
|
|
1240
|
+
.cn-badge[data-variant="status"][data-tone="wait"] { --tone: var(--warning); font-weight: 600; }
|
|
1241
|
+
.cn-badge[data-variant="status"][data-tone="info"] { --tone: var(--info); font-weight: 600; }
|
|
1242
|
+
.cn-badge[data-variant="status"][data-tone="bad"] { --tone: var(--destructive); font-weight: 600; }
|
|
1243
|
+
/* Button · tonal: tinted by a tone (or a brand colour via --brand) */
|
|
1244
|
+
.cn-button.cx-tonal { --tone: var(--info); background: color-mix(in srgb, var(--tone) 13%, transparent); color: var(--tone); }
|
|
1245
|
+
.cn-button.cx-tonal:hover { background: color-mix(in srgb, var(--tone) 22%, transparent); color: var(--tone); }
|
|
1246
|
+
.cn-button.cx-tonal[data-tone="wait"] { --tone: var(--warning); }
|
|
1247
|
+
.cn-button.cx-tonal[data-tone="bad"] { --tone: var(--destructive); }
|
|
1248
|
+
.cn-button.cx-tonal[data-tone="ok"] { --tone: var(--success); }
|
|
1249
|
+
.cn-button.cx-tonal[data-tone="note"] { --tone: var(--selected); }
|
|
1250
|
+
.cn-button.cx-tonal[data-tone="brand"] { --tone: var(--brand); border-radius: 99px; }
|
|
1251
|
+
/* Indicator: a pending dot on any control */
|
|
1252
|
+
.cx-has-indicator { position: relative; overflow: visible; }
|
|
1253
|
+
.cx-indicator { position: absolute; top: -3px; right: -3px; width: 9px; height: 9px; border-radius: 99px; background: var(--tone, var(--selected)); box-shadow: 0 0 0 2px var(--card); }
|
|
1254
|
+
.cx-indicator[data-tone="wait"] { --tone: var(--warning); } .cx-indicator[data-tone="bad"] { --tone: var(--destructive); } .cx-indicator[data-tone="info"] { --tone: var(--info); } .cx-indicator[data-tone="note"] { --tone: var(--selected); }
|
|
1255
|
+
/* Avatar · shape="square" (product thumbnails) */
|
|
1256
|
+
.cn-avatar[data-shape="square"] { border-radius: calc(var(--radius) * .7); }
|
|
1257
|
+
.cn-avatar[data-shape="square"] .cn-avatar-image, .cn-avatar[data-shape="square"] .cn-avatar-fallback { border-radius: inherit; }
|
|
1258
|
+
.cn-avatar[data-shape="square"] .cn-avatar-fallback { font-size: 12px; font-weight: 600; color: var(--muted-foreground); }
|
|
1259
|
+
/* layout + text helpers */
|
|
1260
|
+
.cx-hstack { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
|
|
1261
|
+
.cx-fill { width: 100%; justify-content: center; }
|
|
1262
|
+
.cx-ellipsis { display: block; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
1263
|
+
.cx-strong { font-weight: 600; }
|
|
1264
|
+
.cn-item-content { min-width: 0; }
|
|
1265
|
+
.cn-item-description .cx-ellipsis, .cn-item-description { overflow: hidden; text-overflow: ellipsis; }
|
|
1266
|
+
|
|
1267
|
+
/* ═════ board behaviour only (the look is the Card atom) ═════ */
|
|
1268
|
+
.cx-bcard { cursor: grab; touch-action: none; user-select: none; transition: transform 200ms cubic-bezier(.22, 1, .36, 1), box-shadow 150ms; }
|
|
1269
|
+
.cx-bcard-static { cursor: default; touch-action: auto; user-select: auto; }
|
|
1270
|
+
.cx-bcard:focus-visible { outline: 2px solid var(--ring); outline-offset: 2px; }
|
|
1271
|
+
.cx-bcard[data-lifted], .cx-bcard[data-held] { box-shadow: 0 0 0 2px var(--selected), 0 12px 28px -10px rgb(0 0 0 / .3); }
|
|
1272
|
+
.cx-bcard[data-held] { transform: scale(1.03); }
|
|
1273
|
+
.cx-bcard.cx-dragging { position: fixed; z-index: var(--z-toast); transition: none; cursor: grabbing; box-shadow: 0 16px 36px -12px rgb(0 0 0 / .35); transform: rotate(1.5deg); pointer-events: none; }
|
|
1274
|
+
.cx-bcard button, .cx-bcard a { cursor: pointer; }
|
|
1275
|
+
.cx-vstack { display: flex; flex-direction: column; gap: 8px; width: 100%; }
|
|
1276
|
+
.cx-vstack > .cx-hstack { flex-wrap: wrap; }
|
|
1277
|
+
|
|
1278
|
+
/* ═════ atoms: Button sizes (every button has a defined height) and its «chosen» state ═════ */
|
|
1279
|
+
/* tile: a button that stacks an icon/number over a label — 56 px; tile-lg — 76 px */
|
|
1280
|
+
.cn-button.cx-size-tile { height: 56px; padding: 0 6px; flex-direction: column; gap: 2px; font-size: 11.5px; line-height: 1.1; }
|
|
1281
|
+
.cn-button.cx-size-tile-lg { height: 76px; padding: 0 4px; flex-direction: column; gap: 6px; font-size: 12px; line-height: 1.1; }
|
|
1282
|
+
/* chosen: a pressed toggle wears --selected */
|
|
1283
|
+
/* selected wins over every variant and theme (Nova's dark outline background is more specific than a bare class) */
|
|
1284
|
+
.style-nova .cn-button[aria-pressed="true"][aria-pressed], [data-skin] .cn-button[aria-pressed="true"][aria-pressed] { background: var(--selected); border-color: var(--selected); color: var(--selected-foreground); }
|
|
1285
|
+
.style-nova .cn-button[aria-pressed="true"][aria-pressed]:hover, [data-skin] .cn-button[aria-pressed="true"][aria-pressed]:hover { background: var(--selected); color: var(--selected-foreground); }
|
|
1286
|
+
/* Badge · size lg (28 px) for chips that carry a button */
|
|
1287
|
+
.cn-badge.cx-chip { height: 28px; padding: 0 2px 0 10px; gap: 2px; font-size: 12.5px; }
|
|
1288
|
+
.cn-badge.cx-chip .cn-button { border-radius: 99px; }
|
|
1289
|
+
.cn-badge.cx-chip .cn-button svg { width: 12px; height: 12px; }
|
|
1290
|
+
|
|
1291
|
+
/* ═════ molecules built from those atoms (only what composition needs) ═════ */
|
|
1292
|
+
/* Tabs = Buttons + a sliding indicator + a count Badge */
|
|
1293
|
+
.cx-tab { position: relative; z-index: 1; color: color-mix(in srgb, var(--foreground) 62%, transparent); }
|
|
1294
|
+
.cx-tab:hover { background: transparent; color: var(--foreground); }
|
|
1295
|
+
.cx-tab[aria-selected="true"] { color: var(--foreground); }
|
|
1296
|
+
.cx-tabs.line .cx-tab { height: 36px; border-radius: 0; }
|
|
1297
|
+
.cx-tab .cx-count { min-width: 18px; height: 18px; padding: 0 5px; border-radius: 99px; background: color-mix(in srgb, var(--foreground) 9%, transparent); font-size: 11px; font-variant-numeric: tabular-nums; display: inline-grid; place-items: center; }
|
|
1298
|
+
.cx-tab[aria-selected="true"] .cx-count { background: var(--selected); color: var(--selected-foreground); }
|
|
1299
|
+
.cx-tabs:not(.line) .cx-tab-ind { height: 28px; }
|
|
1300
|
+
/* booking: day tile + hour buttons */
|
|
1301
|
+
.cx-day small { font-size: 11px; color: var(--muted-foreground); text-transform: uppercase; letter-spacing: .04em; }
|
|
1302
|
+
.cx-day b { font-size: 16px; font-weight: 600; font-variant-numeric: tabular-nums; }
|
|
1303
|
+
.cx-day i { width: 4px; height: 4px; border-radius: 99px; background: var(--success); }
|
|
1304
|
+
.cx-day[data-full] i, .cx-day:disabled i { background: transparent; }
|
|
1305
|
+
.cx-day[aria-pressed="true"] small { color: inherit; opacity: .8; }
|
|
1306
|
+
.cx-day[aria-pressed="true"] i { background: currentColor; }
|
|
1307
|
+
.cx-hour-grid .cn-button { width: 100%; font-variant-numeric: tabular-nums; }
|
|
1308
|
+
.cx-hour-skel { height: 28px; }
|
|
1309
|
+
/* table header sort buttons */
|
|
1310
|
+
.cx-th { margin-left: -6px; color: inherit; }
|
|
1311
|
+
.cx-th svg { width: 13px; height: 13px; opacity: .55; }
|
|
1312
|
+
th[aria-sort="ascending"] .cx-th, th[aria-sort="descending"] .cx-th { color: var(--foreground); }
|
|
1313
|
+
th[aria-sort="ascending"] .cx-th svg, th[aria-sort="descending"] .cx-th svg { opacity: 1; color: var(--selected); }
|
|
1314
|
+
.cx-dt-num .cx-th { margin-left: 0; margin-right: -6px; flex-direction: row-reverse; }
|
|
1315
|
+
/* phone bottom bar */
|
|
1316
|
+
.cx-ph-tab { width: 100%; color: var(--muted-foreground); position: relative; }
|
|
1317
|
+
.cx-ph-tab svg { width: 22px !important; height: 22px !important; }
|
|
1318
|
+
.cx-ph-tab[aria-current] { color: var(--selected); background: transparent; }
|
|
1319
|
+
.cx-ph-tab[aria-current]::after { content: ""; position: absolute; bottom: 4px; width: 4px; height: 4px; border-radius: 99px; background: var(--selected); }
|
|
1320
|
+
/* carousel dots: a real button (24 px) with a small mark */
|
|
1321
|
+
.cx-dotb .cx-dot-mark { width: 8px; height: 8px; border-radius: 99px; background: color-mix(in srgb, var(--foreground) 22%, transparent); transition: width 240ms cubic-bezier(.22, 1, .36, 1), background-color 200ms; }
|
|
1322
|
+
.cx-dotb[aria-selected="true"] { width: 34px; }
|
|
1323
|
+
.cx-dotb[aria-selected="true"] .cx-dot-mark { width: 22px; background: var(--selected); }
|
|
1324
|
+
.cx-car-dots { display: flex; gap: 0; }
|
|
1325
|
+
/* drag handle */
|
|
1326
|
+
.cx-grip { cursor: grab; touch-action: none; color: var(--muted-foreground); flex: none; }
|
|
1327
|
+
/* a field-like trigger (date / time) */
|
|
1328
|
+
.cx-picker-field { width: 100%; justify-content: flex-start; font-weight: 400; }
|
|
1329
|
+
.cx-picker-field span { flex: 1; text-align: left; }
|
|
1330
|
+
.cx-picker-field svg { color: var(--muted-foreground); }
|
|
1331
|
+
/* share targets */
|
|
1332
|
+
.cx-sh-tg { width: 72px; flex: 0 0 auto; color: var(--foreground); text-decoration: none; }
|
|
1333
|
+
.cx-sh-tg .cx-sh-ic { width: 46px; height: 46px; border-radius: 99px; display: grid; place-items: center; background: #fff; color: var(--brand); border: 1px solid rgb(20 16 40 / .06); box-shadow: 0 6px 16px -8px rgb(20 16 40 / .45); }
|
|
1334
|
+
.cx-sh-tg .cx-sh-ic.plain { background: var(--muted); color: var(--foreground); border-color: transparent; box-shadow: none; }
|
|
1335
|
+
.cx-sh-tg .cx-sh-ic svg { width: 22px !important; height: 22px !important; }
|
|
1336
|
+
.cx-sh-tg:hover { background: var(--accent); }
|
|
1337
|
+
.cx-sh-copybtn { flex: none; min-width: 5.5rem; }
|
|
1338
|
+
|
|
1339
|
+
/* Card · size sm: compact rhythm. Items sit edge to edge, separated only by the hairline:
|
|
1340
|
+
text-to-text = item padding (10) + line + item padding (10). No gap or margin stacks on top. */
|
|
1341
|
+
.cn-card[data-size="sm"] { gap: 0; padding-block: 0; }
|
|
1342
|
+
.cn-card[data-size="sm"] > .cn-card-header { padding: 12px 12px 4px; }
|
|
1343
|
+
.cn-card[data-size="sm"] > .cn-card-content { padding: 0 12px; }
|
|
1344
|
+
.cn-card[data-size="sm"] > .cn-card-footer { margin-top: 8px; padding: 10px 12px; }
|
|
1345
|
+
.cn-card[data-size="sm"] .cn-item-group { gap: 0; }
|
|
1346
|
+
.cn-card[data-size="sm"] .cn-item-separator { margin-block: 0; }
|
|
1347
|
+
.cn-card[data-size="sm"] .cn-item { padding: 10px 4px; }
|
|
1348
|
+
.cn-card[data-size="sm"] .cn-card-header .cn-item { padding: 0 4px 8px; }
|
|
1349
|
+
.cn-card[data-size="sm"] .cn-item-footer { margin-top: 2px; }
|
|
1350
|
+
|
|
1351
|
+
/* ═════ atom: Text ═════ */
|
|
1352
|
+
.cx-text { color: var(--foreground); font-size: 14px; line-height: 1.45; }
|
|
1353
|
+
.cx-text[data-variant="title"] { font-size: 16px; font-weight: 600; letter-spacing: -.01em; }
|
|
1354
|
+
.cx-text[data-variant="heading"] { font-size: 14px; font-weight: 600; }
|
|
1355
|
+
.cx-text[data-variant="strong"] { font-weight: 600; font-variant-numeric: tabular-nums; }
|
|
1356
|
+
.cx-text[data-variant="muted"] { font-size: 13px; color: var(--muted-foreground); }
|
|
1357
|
+
.cx-text[data-variant="caption"] { font-size: 12px; color: var(--muted-foreground); }
|
|
1358
|
+
.cx-text[data-variant="label"] { font-size: 12.5px; font-weight: 600; }
|
|
1359
|
+
p.cx-text { margin: 0; }
|
|
1360
|
+
/* ═════ atom: Stepper (Progress per step) ═════ */
|
|
1361
|
+
.cx-stepper { display: grid; grid-template-columns: repeat(var(--n), 1fr); gap: 6px; margin-top: 6px; }
|
|
1362
|
+
.cx-step { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
|
|
1363
|
+
.cx-step .cn-progress { height: 4px; }
|
|
1364
|
+
.cx-step .cx-text { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
1365
|
+
.cx-step[data-now] .cx-text { color: var(--foreground); }
|
|
1366
|
+
/* choice = Item as a radio */
|
|
1367
|
+
.cx-choice { cursor: pointer; }
|
|
1368
|
+
.cx-choice[aria-checked="true"] { border-color: var(--selected); background: var(--selected-soft); }
|
|
1369
|
+
.cx-choice:focus-visible { outline: 2px solid var(--ring); outline-offset: 2px; }
|
|
1370
|
+
.cx-wz-days { display: grid; grid-template-columns: repeat(5, 1fr); gap: 6px; }
|
|
1371
|
+
.cx-wz-sum .cn-item { padding-inline: 0; }
|
|
1372
|
+
/* generic cards grid */
|
|
1373
|
+
.cx-generic { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 290px), 1fr)); gap: 20px; width: 100%; max-width: 1240px; align-items: start; }
|
|
1374
|
+
.cx-modal-head .cx-stepper { margin-right: -32px; }
|
|
1375
|
+
|
|
1376
|
+
/* table filters (molecule: InputGroup + Buttons + Popover/Command + Badges) */
|
|
1377
|
+
.cx-dt-toolbar { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px 12px; margin-bottom: 10px; }
|
|
1378
|
+
.cx-dt-tools { gap: 8px; }
|
|
1379
|
+
.cx-dt-search { width: 240px; max-width: 100%; }
|
|
1380
|
+
.cx-fbtn.cx-dashed { border-style: dashed; }
|
|
1381
|
+
.cx-fbtn .cn-badge { height: 20px; }
|
|
1382
|
+
.cx-fsep { height: 16px; margin: 0 2px; }
|
|
1383
|
+
.cx-dt-chips { gap: 6px; margin-bottom: 10px; }
|
|
1384
|
+
.cx-fpop { width: 240px; padding: 0; overflow: hidden; }
|
|
1385
|
+
.cx-fpop .cx-vstack { padding: 6px; }
|
|
1386
|
+
.cx-fpop .cx-vstack:has(.cx-frange) { padding: 12px; }
|
|
1387
|
+
.cx-fpop .cn-command-list { max-height: 260px; }
|
|
1388
|
+
.cx-fpop .cn-command-item { gap: 8px; cursor: pointer; }
|
|
1389
|
+
.cx-fpop .cn-command-item:focus-visible, .cx-fpop .cn-command-item:hover { background: var(--accent); outline: none; }
|
|
1390
|
+
.cx-fpop .cn-command-item .cn-checkbox { pointer-events: none; }
|
|
1391
|
+
.cx-fcount { margin-left: auto; font-size: 12px; color: var(--muted-foreground); font-variant-numeric: tabular-nums; }
|
|
1392
|
+
.cx-fclear-one { width: 100%; justify-content: center; border: 0; background: none; color: var(--foreground); font: inherit; font-size: 13px; }
|
|
1393
|
+
.cx-frange { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
|
|
1394
|
+
.cx-left { justify-content: flex-start; }
|
|
1395
|
+
.cx-dt-empty { padding: 28px 12px; }
|
|
1396
|
+
|
|
1397
|
+
/* ═════ Carousel (molecule) ═════ */
|
|
1398
|
+
.cx-car-demo { display: flex; flex-direction: column; gap: 10px; width: 100%; max-width: 820px; margin: 0 auto; }
|
|
1399
|
+
.cx-car { display: flex; flex-direction: column; gap: 12px; --gap: 12px; }
|
|
1400
|
+
.cx-car-view { position: relative; }
|
|
1401
|
+
.cx-car-track { display: grid; grid-auto-flow: column; grid-auto-columns: calc((100% - (var(--per) - 1) * var(--gap)) / var(--per)); gap: var(--gap); overflow-x: auto; scroll-snap-type: x mandatory; scroll-behavior: smooth; overscroll-behavior-x: contain; scrollbar-width: none; border-radius: calc(var(--radius) * 1.2); }
|
|
1402
|
+
.cx-car-track::-webkit-scrollbar { display: none; }
|
|
1403
|
+
.cx-car-track.dragging { scroll-snap-type: none; scroll-behavior: auto; cursor: grabbing; user-select: none; }
|
|
1404
|
+
.cx-car-track:focus-visible { outline: 2px solid var(--ring); outline-offset: 4px; }
|
|
1405
|
+
.cx-car-slide { scroll-snap-align: start; min-width: 0; }
|
|
1406
|
+
.cx-car[data-center] .cx-car-track { grid-auto-columns: 72%; padding-inline: 14%; }
|
|
1407
|
+
.cx-car[data-center] .cx-car-slide { scroll-snap-align: center; transition: transform 260ms cubic-bezier(.22, 1, .36, 1), opacity 260ms; transform: scale(.92); opacity: .55; }
|
|
1408
|
+
.cx-car[data-center] .cx-car-slide[data-active] { transform: none; opacity: 1; }
|
|
1409
|
+
.cx-car-bar { display: flex; align-items: center; justify-content: space-between; gap: 12px; min-height: 28px; }
|
|
1410
|
+
.cx-car-ind { flex: 1; min-width: 0; }
|
|
1411
|
+
.cx-car-ind .cn-progress { flex: 1; max-width: 220px; }
|
|
1412
|
+
.cx-car-view[data-arrows="overlay"] .cx-car-arrow { position: absolute; top: 50%; margin-top: -14px; z-index: 2; border-radius: 99px; background: var(--background); box-shadow: 0 2px 8px rgb(0 0 0 / .15); }
|
|
1413
|
+
.cx-car-view[data-arrows="overlay"] [data-car="prev"] { left: 10px; }
|
|
1414
|
+
.cx-car-view[data-arrows="overlay"] [data-car="next"] { right: 10px; }
|
|
1415
|
+
.cn-avatar[data-fill] { width: 100%; height: auto; aspect-ratio: 1; }
|
|
1416
|
+
.cx-hero { display: flex; flex-direction: column; align-items: flex-start; justify-content: flex-end; gap: 6px; height: 220px; padding: 22px 56px; border-radius: calc(var(--radius) * 1.4); color: #fff; }
|
|
1417
|
+
.cx-hero .cx-text { color: #fff; }
|
|
1418
|
+
.cx-hero .cx-text[data-variant="title"] { font-size: 22px; }
|
|
1419
|
+
.cx-hero .cn-button { margin-top: 8px; }
|
|
1420
|
+
.cx-gallery-img { height: 300px; border-radius: calc(var(--radius) * 1.4); }
|
|
1421
|
+
.cx-thumb { padding: 2px; border-radius: calc(var(--radius) * .8); }
|
|
1422
|
+
.cx-thumb .cn-avatar { width: 100%; height: 100%; }
|
|
1423
|
+
.cx-thumb[aria-pressed="true"] { background: transparent; box-shadow: 0 0 0 2px var(--selected); }
|
|
1424
|
+
.cx-car-card .cn-card-header { padding: 12px 12px 4px; }
|
|
1425
|
+
@media (max-width: 640px) { .cx-car { --per: var(--per-sm) !important; } }
|
|
1426
|
+
|
|
1427
|
+
/* filters on the phone: search fills the row, «Filtros» beside it; chips scroll sideways */
|
|
1428
|
+
.cx-dt-host:has(.cx-fbtn-m) .cx-dt-tools { width: 100%; flex-wrap: nowrap; }
|
|
1429
|
+
.cx-dt-host:has(.cx-fbtn-m) .cx-dt-search { flex: 1; width: auto; }
|
|
1430
|
+
.cx-fbtn-m { flex: none; }
|
|
1431
|
+
.cx-fbtn-m .cn-badge { height: 18px; min-width: 18px; padding: 0 5px; margin-left: 2px; }
|
|
1432
|
+
.cx-dt-host:has(.cx-fbtn-m) .cx-dt-toolbar { flex-direction: column; align-items: stretch; }
|
|
1433
|
+
.cx-dt-host:has(.cx-fbtn-m) .cx-dt-chips { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 24px), transparent); mask-image: linear-gradient(to right, #000 calc(100% - 24px), transparent); }
|
|
1434
|
+
.cx-dt-chips .cx-chip { flex: none; }
|
|
1435
|
+
.cx-fsheet-opt { width: 100%; border: 0; background: none; font: inherit; color: inherit; text-align: left; gap: 10px; min-height: 40px; cursor: pointer; border-radius: calc(var(--radius) * .8); }
|
|
1436
|
+
.cx-fsheet-opt:hover { background: var(--accent); }
|
|
1437
|
+
.cx-dt-scroll { overflow-anchor: none; }
|
|
1438
|
+
.cx-chip.out { animation: cx-chip-out 160ms ease forwards; }
|
|
1439
|
+
|
|
1440
|
+
/* sidebar tokens come from the skin */
|
|
1441
|
+
.style-nova, [data-skin] { --sidebar: color-mix(in srgb, var(--muted) 55%, var(--background)); --sidebar-foreground: var(--foreground); --sidebar-accent: color-mix(in srgb, var(--foreground) 6%, transparent); --sidebar-accent-foreground: var(--foreground); --sidebar-border: var(--border); --sidebar-ring: var(--ring); --sidebar-width: 15rem; --sidebar-width-icon: 3rem; }
|
|
1442
|
+
/* chosen nav entry = the system's «you are here» (violet + dot), like everywhere else */
|
|
1443
|
+
.cn-sidebar-menu-button[data-active="true"] { background: var(--selected-soft); color: var(--selected); font-weight: 600; }
|
|
1444
|
+
.cn-sidebar-menu-button[data-active="true"] svg { color: var(--selected); }
|
|
1445
|
+
.cn-sidebar-menu-button svg { width: 16px; height: 16px; flex: none; }
|
|
1446
|
+
.cn-sidebar-menu-button { cursor: pointer; border: 0; background: transparent; color: var(--sidebar-foreground); font: inherit; font-size: 14px; }
|
|
1447
|
+
.cn-sidebar-menu-button > span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
1448
|
+
.cx-sb-two { display: flex; flex-direction: column; min-width: 0; flex: 1; line-height: 1.2; }
|
|
1449
|
+
.cx-sb-two .cx-text { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
1450
|
+
.cn-sidebar-menu { list-style: none; margin: 0; padding: 0; gap: 2px; }
|
|
1451
|
+
.cn-sidebar-menu-badge { background: color-mix(in srgb, var(--foreground) 8%, transparent); }
|
|
1452
|
+
|
|
1453
|
+
/* ═════ App frame (the shell is a molecule of Sidebar + Inset + Sheet) ═════ */
|
|
1454
|
+
.cx-app { position: relative; display: flex; height: 600px; width: 100%; max-width: 1180px; margin: 0 auto; border-radius: calc(var(--radius) * 1.6); overflow: hidden; background: var(--background); box-shadow: 0 0 0 1px var(--border), 0 24px 60px -30px rgb(0 0 0 / .35); transition: max-width 320ms cubic-bezier(.22, 1, .36, 1); }
|
|
1455
|
+
.cx-app[data-narrow] { max-width: 390px; }
|
|
1456
|
+
.cx-app-sb { flex: none; width: var(--sidebar-width); border-right: 1px solid var(--sidebar-border); transition: width 220ms cubic-bezier(.22, 1, .36, 1); overflow: hidden; }
|
|
1457
|
+
.cx-app-sb[data-collapsible="icon"] { width: var(--sidebar-width-icon); }
|
|
1458
|
+
.cx-app-sb .cn-sidebar-inner { height: 100%; display: flex; flex-direction: column; padding: 8px; gap: 8px; }
|
|
1459
|
+
.cx-app-sb .cn-sidebar-content { gap: 6px; }
|
|
1460
|
+
.cx-app-sb[data-collapsible="icon"] .cx-sb-two, .cx-app-sb[data-collapsible="icon"] .cn-sidebar-menu-button > span:not([data-slot="avatar"]), .cx-app-sb[data-collapsible="icon"] .cn-sidebar-menu-badge, .cx-app-sb[data-collapsible="icon"] .cn-sidebar-menu-button > svg:last-child:not(:first-child) { display: none; }
|
|
1461
|
+
.cx-app-sb[data-collapsible="icon"] .cn-sidebar-menu-button-size-lg { width: 32px !important; height: 32px !important; padding: 0 !important; justify-content: center; }
|
|
1462
|
+
.cx-app-sb[data-collapsible="icon"] .cn-sidebar-menu-button-size-lg .cn-avatar { width: 28px; height: 28px; }
|
|
1463
|
+
.cx-app-main { position: relative; flex: 1; min-width: 0; display: flex; flex-direction: column; overflow: hidden; }
|
|
1464
|
+
.cx-app-top { display: flex; align-items: center; gap: 8px; height: 52px; padding: 0 14px; border-bottom: 1px solid var(--border); flex: none; }
|
|
1465
|
+
.cx-app-vsep { height: 18px; }
|
|
1466
|
+
.cx-grow { flex: 1; }
|
|
1467
|
+
.cx-app-search { width: 220px; justify-content: flex-start; color: var(--muted-foreground); }
|
|
1468
|
+
.cx-app-search .cx-app-search-t { flex: 1; text-align: left; }
|
|
1469
|
+
.cx-app-page { flex: 1; overflow-y: auto; padding: 20px 22px 28px; display: flex; flex-direction: column; gap: 18px; scrollbar-width: thin; }
|
|
1470
|
+
.cx-app-head { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: 12px; }
|
|
1471
|
+
.cx-app-head h1.cx-text { margin: 0; font-size: 22px; }
|
|
1472
|
+
.cx-app-list { gap: 8px; }
|
|
1473
|
+
.cx-app-row { width: 100%; text-align: left; font: inherit; color: inherit; background: var(--background); cursor: pointer; transition: background-color 150ms, border-color 150ms; }
|
|
1474
|
+
.cx-app-row:hover { background: color-mix(in srgb, var(--foreground) 3%, var(--background)); }
|
|
1475
|
+
.cx-app-row[data-active] { border-color: var(--selected); background: var(--selected-soft); }
|
|
1476
|
+
.cx-app-row .cn-item-actions { gap: 14px; }
|
|
1477
|
+
/* detail Sheet: inside the frame, slides from the right */
|
|
1478
|
+
.cx-app .cn-sheet-content.cx-app-sheet[data-side] { position: absolute; top: 0; bottom: 0; right: 0; left: auto; height: auto; max-width: none; width: min(380px, 100%); border-left: 1px solid var(--border); box-shadow: -18px 0 40px -24px rgb(0 0 0 / .3); gap: 0; z-index: 3; transform: translateX(100%); transition: transform 240ms cubic-bezier(.22, 1, .36, 1); }
|
|
1479
|
+
.cx-app .cn-sheet-content.cx-app-sheet[data-side][data-state="open"] { transform: none; }
|
|
1480
|
+
.cx-app-sheet .cn-sheet-header { padding: 16px 16px 8px; }
|
|
1481
|
+
.cx-app-sheet-body { flex: 1; overflow-y: auto; padding: 0 12px; scrollbar-width: thin; }
|
|
1482
|
+
.cx-app-sheet-body .cn-item-group { gap: 0; }
|
|
1483
|
+
.cx-app-sheet-body .cn-item-separator { margin-block: 0; }
|
|
1484
|
+
.cx-app-sheet .cn-sheet-footer { display: flex; flex-direction: row; gap: 8px; padding: 12px 16px; border-top: 1px solid var(--border); }
|
|
1485
|
+
.cx-app-sheet .cn-sheet-footer .cx-go { flex: 1; }
|
|
1486
|
+
.cx-app-scrim { position: absolute; inset: 0; z-index: 2; background: var(--overlay); opacity: 0; transition: opacity 200ms; }
|
|
1487
|
+
.cx-app-scrim[data-state="open"] { opacity: 1; }
|
|
1488
|
+
/* timeline (molecule: Text + a line) */
|
|
1489
|
+
.cx-timeline { list-style: none; margin: 0; padding: 0 0 0 4px; display: flex; flex-direction: column; gap: 12px; }
|
|
1490
|
+
.cx-timeline li { position: relative; display: flex; flex-direction: column; padding-left: 18px; }
|
|
1491
|
+
.cx-timeline li::before { content: ""; position: absolute; left: 0; top: 6px; width: 8px; height: 8px; border-radius: 99px; background: var(--border); }
|
|
1492
|
+
.cx-timeline li:not(:last-child)::after { content: ""; position: absolute; left: 3.5px; top: 18px; bottom: -10px; width: 1px; background: var(--border); }
|
|
1493
|
+
.cx-timeline li[data-now]::before { background: var(--selected); box-shadow: 0 0 0 4px var(--selected-soft); }
|
|
1494
|
+
/* the shell on a narrow box: sidebar becomes an off-canvas menu */
|
|
1495
|
+
.cx-app[data-mobile] .cx-app-sb { position: absolute; z-index: 4; top: 0; bottom: 0; left: 0; width: min(270px, 85%); transform: translateX(-102%); transition: transform 240ms cubic-bezier(.22, 1, .36, 1); box-shadow: 18px 0 40px -24px rgb(0 0 0 / .35); }
|
|
1496
|
+
.cx-app[data-mobile][data-sb-open] .cx-app-sb { transform: none; }
|
|
1497
|
+
.cx-app[data-mobile] [data-app-scrim]:not([hidden]) { opacity: 1; z-index: 3; }
|
|
1498
|
+
.cx-app[data-mobile] .cx-app-search { width: 36px; padding: 0; justify-content: center; }
|
|
1499
|
+
.cx-app[data-mobile] .cx-app-search .cx-app-search-t, .cx-app[data-mobile] .cx-app-search .cn-kbd, .cx-app[data-mobile] nav[aria-label="Migas"] { display: none; }
|
|
1500
|
+
.cx-app[data-mobile] .cx-app-page { padding: 16px 14px 24px; }
|
|
1501
|
+
.cx-app[data-mobile] .cx-app-row .cn-item-actions .cn-badge { display: none; }
|
|
1502
|
+
/* command */
|
|
1503
|
+
.cx-cmd { border: 0; background: none; }
|
|
1504
|
+
.cx-cmd .cn-command-list { max-height: 320px; }
|
|
1505
|
+
.cx-cmd-label { padding: 8px 8px 4px; }
|
|
1506
|
+
.cx-cmd .cn-command-item { cursor: pointer; }
|
|
1507
|
+
.cx-cmd-help { gap: 14px; }
|
|
1508
|
+
.cx-cmd-help .cn-kbd { margin-right: 3px; }
|
|
1509
|
+
.cx-app .cn-sheet-overlay.cx-app-scrim { position: absolute; }
|
|
1510
|
+
.cn-command-input-group .cn-command-input.cn-input-group-input { padding: 0 8px; }
|
|
1511
|
+
|
|
1512
|
+
|
|
1513
|
+
/* ═════════════════════════ 3. sys ═════════════════════════ */
|
|
1514
|
+
/* ═════ Button · icon motion on hover (atom-level, every button with an icon) ═════ */
|
|
1515
|
+
.cn-button svg { transition: transform 180ms cubic-bezier(.22, 1, .36, 1); }
|
|
1516
|
+
@media (hover: hover) and (prefers-reduced-motion: no-preference) {
|
|
1517
|
+
.cn-button:not(:disabled):hover > svg:last-child:not(:first-child) { transform: translateX(2px); } /* trailing arrow moves on */
|
|
1518
|
+
.cn-button:not(:disabled):hover > svg:first-child:not(:last-child) { transform: scale(1.12); } /* leading icon lifts */
|
|
1519
|
+
.cn-button:not(:disabled):hover > svg:first-child:not(:last-child):has(use[href="#plus"]) { transform: rotate(90deg); }
|
|
1520
|
+
.cn-button:not(:disabled):hover > svg:only-child { transform: scale(1.12); }
|
|
1521
|
+
.cn-button:not(:disabled):hover > svg:only-child:has(use[href="#left"]) { transform: translateX(-2px); }
|
|
1522
|
+
.cn-button:not(:disabled):hover > svg:only-child:has(use[href="#right"]) { transform: translateX(2px); }
|
|
1523
|
+
.cn-button:not(:disabled):hover > svg:only-child:has(use[href="#x"]) { transform: rotate(90deg); }
|
|
1524
|
+
.cn-button:not(:disabled):hover > svg:only-child:has(use[href="#i-send"]) { transform: translate(2px, -2px); }
|
|
1525
|
+
.cn-button:not(:disabled):hover > svg:only-child:has(use[href="#i-bell"]) { animation: cx-ring 600ms ease; }
|
|
1526
|
+
.cn-button:not(:disabled):active > svg { transform: scale(.92); }
|
|
1527
|
+
}
|
|
1528
|
+
@keyframes cx-ring { 20% { transform: rotate(14deg); } 40% { transform: rotate(-12deg); } 60% { transform: rotate(8deg); } 80% { transform: rotate(-4deg); } }
|
|
1529
|
+
|
|
1530
|
+
/* ═════ Calendar ═════ */
|
|
1531
|
+
.cx-cal { position: relative; display: inline-flex; flex-direction: column; gap: 8px; padding: 12px; border-radius: calc(var(--radius) * 1.2); box-shadow: 0 0 0 1px var(--border); background: var(--background); }
|
|
1532
|
+
.cx-cal-nav { position: absolute; top: 10px; left: 8px; right: 8px; display: flex; justify-content: space-between; pointer-events: none; }
|
|
1533
|
+
.cx-cal-nav .cn-button { pointer-events: auto; }
|
|
1534
|
+
.cx-cal-months { display: flex; gap: 24px; flex-wrap: wrap; }
|
|
1535
|
+
.cx-cal-title { height: 28px; display: grid; place-items: center; margin-bottom: 4px; }
|
|
1536
|
+
.cx-cal-grid { display: grid; grid-template-columns: repeat(7, 32px); row-gap: 2px; }
|
|
1537
|
+
.cx-cal-wd { height: 28px; display: grid; place-items: center; }
|
|
1538
|
+
.cx-cal-day { font-variant-numeric: tabular-nums; font-weight: 400; position: relative; }
|
|
1539
|
+
.cx-cal-day[data-out] { color: color-mix(in srgb, var(--muted-foreground) 55%, transparent); }
|
|
1540
|
+
.cx-cal-day[data-today]::after { content: ""; position: absolute; bottom: 4px; left: 50%; width: 4px; height: 4px; margin-left: -2px; border-radius: 99px; background: currentColor; }
|
|
1541
|
+
.cx-cal-day[data-range="mid"] { background: var(--selected-soft); color: var(--foreground); border-radius: 0; }
|
|
1542
|
+
.cx-cal-day[data-range="edge"] { font-weight: 600; }
|
|
1543
|
+
.cx-cal-day:disabled { opacity: .35; }
|
|
1544
|
+
.cx-cal-day:focus-visible { outline: 2px solid var(--ring); outline-offset: 1px; z-index: 1; }
|
|
1545
|
+
.cx-range-wrap { display: flex; gap: 12px; align-items: flex-start; flex-wrap: wrap; }
|
|
1546
|
+
.cx-range-presets .cn-button { width: 9.5rem; }
|
|
1547
|
+
|
|
1548
|
+
/* ═════ Agenda ═════ */
|
|
1549
|
+
.cx-agenda { display: flex; flex-direction: column; gap: 12px; width: 100%; max-width: 1080px; margin: 0 auto; }
|
|
1550
|
+
.cx-ag-bar { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 10px; }
|
|
1551
|
+
.cx-ag-scroll { max-height: 520px; overflow: auto; }
|
|
1552
|
+
.cx-ag { position: relative; display: grid; grid-template-rows: 36px 1fr; min-width: calc(56px + var(--cols) * 140px); }
|
|
1553
|
+
.cx-ag-head { position: sticky; top: 0; z-index: 3; display: grid; grid-template-columns: 56px repeat(var(--cols), 1fr); background: var(--background); border-bottom: 1px solid var(--border); }
|
|
1554
|
+
.cx-ag-colhead { display: grid; place-items: center; font-size: 13px; font-weight: 600; border-left: 1px solid var(--border); }
|
|
1555
|
+
.cx-ag-body { position: relative; display: grid; grid-template-columns: 56px repeat(var(--cols), 1fr); background-image: repeating-linear-gradient(to bottom, var(--border) 0 1px, transparent 1px var(--h)); }
|
|
1556
|
+
.cx-ag-times { position: relative; }
|
|
1557
|
+
.cx-ag-times span { position: absolute; right: 8px; transform: translateY(-50%); }
|
|
1558
|
+
.cx-ag-times span:first-child { transform: none; }
|
|
1559
|
+
.cx-ag-col { position: relative; border-left: 1px solid var(--border); }
|
|
1560
|
+
.cx-ag-slot { position: absolute; left: 0; right: 0; border: 0; background: transparent; cursor: pointer; }
|
|
1561
|
+
.cx-ag-slot:hover { background: color-mix(in srgb, var(--selected) 6%, transparent); }
|
|
1562
|
+
.cx-ag-ev { --tone: var(--info); position: absolute; left: 4px; right: 4px; z-index: 1; display: flex; flex-direction: column; align-items: flex-start; gap: 0; overflow: hidden; padding: 4px 8px; border: 0; border-radius: calc(var(--radius) * .7); background: color-mix(in srgb, var(--tone) 20%, var(--background)); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--tone) 28%, transparent); color: var(--foreground); font: inherit; text-align: left; cursor: grab; touch-action: none; transition: box-shadow 150ms, top 160ms cubic-bezier(.22, 1, .36, 1); }
|
|
1563
|
+
.cx-ag-ev[data-tone="ok"] { --tone: var(--success); } .cx-ag-ev[data-tone="wait"] { --tone: var(--warning); } .cx-ag-ev[data-tone="info"] { --tone: var(--info); } .cx-ag-ev[data-tone="bad"] { --tone: var(--destructive); }
|
|
1564
|
+
.cx-ag-ev:hover { box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--tone) 40%, transparent), 0 4px 12px -6px rgb(0 0 0 / .35); }
|
|
1565
|
+
.cx-ag-ev[data-dragging] { transition: none; cursor: grabbing; z-index: 2; box-shadow: 0 10px 24px -10px rgb(0 0 0 / .4); }
|
|
1566
|
+
.cx-ag-ev:focus-visible { outline: 2px solid var(--ring); outline-offset: 1px; }
|
|
1567
|
+
.cx-ag-ev .cx-text { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
|
|
1568
|
+
.cx-ag-now { position: absolute; left: 56px; right: 0; height: 0; border-top: 2px solid var(--destructive); z-index: 2; pointer-events: none; }
|
|
1569
|
+
.cx-ag-now i { position: absolute; left: -5px; top: -6px; width: 10px; height: 10px; border-radius: 99px; background: var(--destructive); }
|
|
1570
|
+
|
|
1571
|
+
/* ═════ Chat (inbox + chatbot) ═════ */
|
|
1572
|
+
.cx-inbox { display: grid; grid-template-columns: 300px 1fr; height: 560px; width: 100%; max-width: 980px; margin: 0 auto; border-radius: calc(var(--radius) * 1.6); overflow: hidden; box-shadow: 0 0 0 1px var(--border); background: var(--background); transition: max-width 320ms cubic-bezier(.22, 1, .36, 1); }
|
|
1573
|
+
.cx-inbox[data-force-narrow] { max-width: 390px; }
|
|
1574
|
+
.cx-ib-list { display: flex; flex-direction: column; min-height: 0; border-right: 1px solid var(--border); }
|
|
1575
|
+
.cx-ib-items { flex: 1; overflow-y: auto; padding: 0 8px 8px; display: flex; flex-direction: column; gap: 2px; }
|
|
1576
|
+
.cx-ib-row { width: 100%; border: 0; background: none; color: inherit; font: inherit; text-align: left; cursor: pointer; border-radius: var(--radius); }
|
|
1577
|
+
.cx-ib-row:hover { background: color-mix(in srgb, var(--foreground) 4%, transparent); }
|
|
1578
|
+
.cx-ib-row[data-active] { background: var(--selected-soft); }
|
|
1579
|
+
.cx-ch { position: absolute; right: -4px; bottom: -4px; display: grid; place-items: center; width: 17px; height: 17px; border-radius: 99px; background: var(--background); color: var(--brand); box-shadow: 0 0 0 1.5px var(--background); }
|
|
1580
|
+
.cx-ch svg { width: 11px; height: 11px; }
|
|
1581
|
+
.cx-ib-thread { display: flex; flex-direction: column; min-width: 0; min-height: 0; }
|
|
1582
|
+
.cx-ib-th { display: flex; align-items: center; gap: 10px; padding: 10px 14px; border-bottom: 1px solid var(--border); flex: none; }
|
|
1583
|
+
.cx-ib-back { display: none; }
|
|
1584
|
+
.cx-inbox[data-narrow], .cx-inbox[data-force-narrow] { grid-template-columns: 1fr; }
|
|
1585
|
+
.cx-inbox[data-narrow][data-view="list"] .cx-ib-thread, .cx-inbox[data-force-narrow][data-view="list"] .cx-ib-thread { display: none; }
|
|
1586
|
+
.cx-inbox[data-narrow][data-view="thread"] .cx-ib-list, .cx-inbox[data-force-narrow][data-view="thread"] .cx-ib-list { display: none; }
|
|
1587
|
+
.cx-inbox[data-narrow] .cx-ib-back, .cx-inbox[data-force-narrow] .cx-ib-back { display: inline-flex; }
|
|
1588
|
+
.cx-chat { flex: 1; overflow-y: auto; padding: 16px 14px; display: flex; flex-direction: column; gap: 6px; background: color-mix(in srgb, var(--muted) 35%, var(--background)); }
|
|
1589
|
+
.cx-chat-day { align-self: center; margin: 8px 0; padding: 2px 10px; border-radius: 99px; background: var(--background); box-shadow: 0 0 0 1px var(--border); }
|
|
1590
|
+
.cx-chat-msg { display: flex; flex-direction: column; max-width: min(78%, 440px); gap: 4px; }
|
|
1591
|
+
.cx-chat-msg[data-who="in"] { align-self: flex-start; align-items: flex-start; }
|
|
1592
|
+
.cx-chat-msg[data-who="out"] { align-self: flex-end; align-items: flex-end; }
|
|
1593
|
+
.cx-chat-bubble { display: flex; flex-direction: column; gap: 4px; padding: 8px 10px 6px; border-radius: 14px; font-size: 14px; line-height: 1.45; }
|
|
1594
|
+
.cx-chat-msg[data-who="in"] .cx-chat-bubble { background: var(--background); box-shadow: 0 0 0 1px var(--border); border-bottom-left-radius: 4px; }
|
|
1595
|
+
.cx-chat-msg[data-who="out"] .cx-chat-bubble { background: var(--primary); color: var(--primary-foreground); border-bottom-right-radius: 4px; }
|
|
1596
|
+
.cx-chat-msg[data-who="out"] .cx-chat-bubble .cx-text { color: inherit; opacity: .8; }
|
|
1597
|
+
.cx-chat-bubble p { margin: 0; white-space: pre-wrap; overflow-wrap: anywhere; }
|
|
1598
|
+
.cx-chat-meta { display: flex; align-items: center; justify-content: flex-end; gap: 3px; margin-top: -2px; }
|
|
1599
|
+
.cx-chat-meta .cx-text { font-size: 11px; }
|
|
1600
|
+
.cx-tick { width: 14px; height: 14px; opacity: .75; }
|
|
1601
|
+
.cx-tick[data-status="read"] { color: #53bdeb; opacity: 1; }
|
|
1602
|
+
.cx-chat-img { display: block; width: 220px; max-width: 100%; aspect-ratio: 4 / 3; border-radius: 10px; }
|
|
1603
|
+
.cx-chat-audio { display: flex; align-items: center; gap: 8px; min-width: 200px; }
|
|
1604
|
+
.cx-chat-audio .cn-progress { flex: 1; }
|
|
1605
|
+
.cx-chat-card { display: flex; flex-direction: column; gap: 2px; padding: 8px 10px; border-radius: 10px; background: color-mix(in srgb, var(--primary-foreground) 12%, transparent); }
|
|
1606
|
+
.cx-chat-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; }
|
|
1607
|
+
.cx-typing { flex-direction: row; gap: 4px; padding: 12px 14px; }
|
|
1608
|
+
.cx-typing i { width: 6px; height: 6px; border-radius: 99px; background: var(--muted-foreground); animation: cx-typing 1.2s infinite; }
|
|
1609
|
+
.cx-typing i:nth-child(2) { animation-delay: .15s; } .cx-typing i:nth-child(3) { animation-delay: .3s; }
|
|
1610
|
+
@keyframes cx-typing { 0%, 60%, 100% { opacity: .3; transform: none; } 30% { opacity: 1; transform: translateY(-3px); } }
|
|
1611
|
+
.cx-bot { display: flex; flex-direction: column; width: 100%; max-width: 440px; height: 520px; margin: 0 auto; border-radius: calc(var(--radius) * 1.6); overflow: hidden; box-shadow: 0 0 0 1px var(--border); background: var(--background); }
|
|
1612
|
+
.cx-bot-face { display: flex; align-items: center; justify-content: center; gap: 7px; width: 36px; height: 36px; flex: none; border-radius: 12px; background: var(--selected); }
|
|
1613
|
+
.cx-bot-face i { display: block; width: 5px; height: 9px; border-radius: 99px; background: var(--selected-foreground); animation: cx-blink-eye 4s infinite; }
|
|
1614
|
+
@keyframes cx-blink-eye { 0%, 92%, 100% { transform: none; } 95% { transform: scaleY(.15); } }
|
|
1615
|
+
.cx-bot-sugs { padding: 8px 12px; gap: 6px; border-top: 1px solid var(--border); }
|
|
1616
|
+
.cx-bot .cx-chat-actions .cn-button[aria-pressed="true"][aria-pressed][aria-pressed] { background: var(--selected-soft); color: var(--foreground); border-color: transparent; }
|
|
1617
|
+
|
|
1618
|
+
/* ═════ Dashboard ═════ */
|
|
1619
|
+
.cx-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 12px; }
|
|
1620
|
+
.cx-stat .cx-text[data-variant="title"] { font-size: 24px; font-variant-numeric: tabular-nums; }
|
|
1621
|
+
.cx-spark { width: 100%; height: 28px; margin-top: 2px; }
|
|
1622
|
+
.cx-chart-card { flex: 2 1 420px; min-width: 0; }
|
|
1623
|
+
.cx-onboard { flex: 1 1 280px; min-width: 0; }
|
|
1624
|
+
.cx-chart-body { display: grid; grid-template-columns: auto 1fr; gap: 8px; padding: 14px; }
|
|
1625
|
+
.cx-chart-y { display: flex; flex-direction: column; justify-content: space-between; height: 180px; text-align: right; }
|
|
1626
|
+
.cx-chart-plot { position: relative; display: grid; grid-template-rows: 180px auto; gap: 6px; }
|
|
1627
|
+
.cx-chart-grid { position: absolute; inset: 0 0 auto; height: 180px; display: flex; flex-direction: column; justify-content: space-between; pointer-events: none; }
|
|
1628
|
+
.cx-chart-grid i { border-top: 1px dashed var(--border); }
|
|
1629
|
+
.cx-chart-bars { position: relative; display: grid; grid-template-columns: repeat(var(--n), 1fr); gap: 4px; align-items: end; height: 180px; }
|
|
1630
|
+
.cx-chart-bar { display: flex; align-items: flex-end; height: 100%; padding: 0; border: 0; background: none; cursor: pointer; transform-origin: bottom; }
|
|
1631
|
+
.cx-chart-bar i { width: 100%; height: var(--v); border-radius: 4px 4px 0 0; background: color-mix(in srgb, var(--primary) 85%, transparent); transition: background-color 150ms; }
|
|
1632
|
+
.cx-chart-bar:hover i, .cx-chart-bar:focus-visible i { background: var(--selected); }
|
|
1633
|
+
.cx-chart-bar:focus-visible { outline: none; }
|
|
1634
|
+
.cx-chart-x { display: grid; grid-template-columns: repeat(var(--n), 1fr); }
|
|
1635
|
+
.cx-chart-x span { overflow: visible; white-space: nowrap; }
|
|
1636
|
+
.cx-check-dot { display: grid; place-items: center; width: 24px; height: 24px; border-radius: 99px; box-shadow: inset 0 0 0 1.5px var(--border); font-size: 12px; font-weight: 600; color: var(--muted-foreground); }
|
|
1637
|
+
.cx-check-dot[data-done] { background: var(--success); box-shadow: none; color: #fff; animation: cx-pop 300ms cubic-bezier(.22, 1, .36, 1); }
|
|
1638
|
+
.cx-check-dot svg { width: 13px; height: 13px; }
|
|
1639
|
+
|
|
1640
|
+
/* ═════ Settings ═════ */
|
|
1641
|
+
.cx-settings { width: 100%; max-width: 760px; }
|
|
1642
|
+
.cx-set-form { position: relative; display: flex; flex-direction: column; gap: 0; padding-bottom: 72px; }
|
|
1643
|
+
.cx-set-sec { display: grid; grid-template-columns: 220px 1fr; gap: 16px 32px; padding: 20px 0; border-top: 1px solid var(--border); }
|
|
1644
|
+
.cx-set-sec:first-child { border-top: 0; padding-top: 0; }
|
|
1645
|
+
@container (max-width: 600px) { .cx-set-sec { grid-template-columns: 1fr; } }
|
|
1646
|
+
.cx-settings { container-type: inline-size; }
|
|
1647
|
+
/* floats over the form: it never takes or gives back space, it only fades and slides */
|
|
1648
|
+
.cx-dirty { position: sticky; bottom: 0; z-index: 5; height: 88px; box-sizing: border-box; padding: 24px 0 16px; display: flex; justify-content: flex-end; align-items: flex-end; pointer-events: none; }
|
|
1649
|
+
.cx-dirty > .cx-dirty-in { position: relative; max-width: 100%; height: 48px; box-sizing: border-box; display: flex; align-items: center; gap: 16px; padding: 0 8px 0 18px; white-space: nowrap; border-radius: 99px; background: var(--foreground); color: var(--background); box-shadow: 0 16px 36px -14px rgb(0 0 0 / .45); opacity: 0; transform: translateY(10px) scale(.98); visibility: hidden; transition: opacity 180ms ease, transform 240ms cubic-bezier(.22, 1, .36, 1), visibility 0s linear 240ms; }
|
|
1650
|
+
.cx-dirty[data-open] > .cx-dirty-in { opacity: 1; transform: none; visibility: visible; pointer-events: auto; transition: opacity 180ms ease, transform 240ms cubic-bezier(.22, 1, .36, 1), visibility 0s; }
|
|
1651
|
+
@media (prefers-reduced-motion: reduce) { .cx-dirty > .cx-dirty-in { transform: none; } }
|
|
1652
|
+
.cx-dirty .cx-text { color: inherit; }
|
|
1653
|
+
.cx-dirty .cn-button-variant-ghost { color: inherit; }
|
|
1654
|
+
.cx-dirty .cn-button-variant-ghost:hover { background: color-mix(in srgb, var(--background) 14%, transparent); color: inherit; }
|
|
1655
|
+
.cx-dirty .cn-button-variant-default { background: var(--background); color: var(--foreground); }
|
|
1656
|
+
.cx-save-w { min-width: 7.5rem; }
|
|
1657
|
+
.cx-wh-day { display: grid; grid-template-columns: 150px 1fr; gap: 10px; align-items: start; padding: 10px 0; border-top: 1px solid var(--border); }
|
|
1658
|
+
.cx-wh-day:first-child { border-top: 0; padding-top: 0; }
|
|
1659
|
+
.cx-wh-name { display: flex; align-items: center; gap: 10px; height: 32px; }
|
|
1660
|
+
.cx-wh-ranges { display: flex; flex-direction: column; gap: 6px; min-height: 32px; justify-content: center; }
|
|
1661
|
+
.cx-wh-range { display: flex; align-items: center; gap: 8px; }
|
|
1662
|
+
@container (max-width: 520px) { .cx-wh-day { grid-template-columns: 1fr; } }
|
|
1663
|
+
|
|
1664
|
+
/* ═════ Plans, card, team, permissions ═════ */
|
|
1665
|
+
.cx-plans { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 240px), 1fr)); gap: 14px; width: 100%; max-width: 920px; }
|
|
1666
|
+
.cx-plan { display: flex; flex-direction: column; gap: 12px; padding: 0; cursor: pointer; transition: box-shadow 160ms, transform 160ms; }
|
|
1667
|
+
.cx-plan:hover { transform: translateY(-2px); }
|
|
1668
|
+
.cx-plan[aria-checked="true"] { box-shadow: 0 0 0 2px var(--selected); }
|
|
1669
|
+
.cx-plan:focus-visible { outline: 2px solid var(--ring); outline-offset: 3px; }
|
|
1670
|
+
.cx-plan-price { display: flex; align-items: baseline; gap: 6px; }
|
|
1671
|
+
.cx-plan-price .cx-text[data-variant="title"] { font-size: 26px; font-variant-numeric: tabular-nums; }
|
|
1672
|
+
.cx-plan-feats { list-style: none; margin: 0; padding: 0 16px; display: flex; flex-direction: column; gap: 8px; }
|
|
1673
|
+
.cx-plan-feats li { display: flex; gap: 8px; align-items: flex-start; }
|
|
1674
|
+
.cx-plan-feats svg { width: 16px; height: 16px; color: var(--success); flex: none; margin-top: 2px; }
|
|
1675
|
+
.cx-cc-brand { font-size: 12px; font-weight: 700; color: var(--foreground); }
|
|
1676
|
+
#cc-msg { display: flex; align-items: center; gap: 6px; }
|
|
1677
|
+
#cc-msg svg { width: 14px; height: 14px; flex: none; }
|
|
1678
|
+
#cc-msg[data-tone="bad"] { color: var(--destructive); }
|
|
1679
|
+
#cc-msg[data-tone="ok"] { color: var(--success); }
|
|
1680
|
+
.cx-team { width: 100%; max-width: 640px; margin: 0 auto; display: flex; flex-direction: column; gap: 10px; }
|
|
1681
|
+
.cx-perm { min-width: 520px; }
|
|
1682
|
+
.cx-perm .cx-perm-c { width: 120px; text-align: center; }
|
|
1683
|
+
.cx-perm td { height: auto; padding-block: 10px; }
|
|
1684
|
+
.cx-perm .cn-checkbox:disabled { opacity: .6; }
|
|
1685
|
+
#perms { width: 100%; max-width: 760px; margin: 0 auto; }
|
|
1686
|
+
|
|
1687
|
+
/* ═════ Stamps, bell, queue, password ═════ */
|
|
1688
|
+
.cx-extras { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 280px), 1fr)); gap: 24px; width: 100%; max-width: 1080px; align-items: start; }
|
|
1689
|
+
.cx-extras > div { display: flex; flex-direction: column; gap: 10px; }
|
|
1690
|
+
.cx-stamp-grid { display: grid; grid-template-columns: repeat(5, 1fr); gap: 8px; padding: 14px 16px; }
|
|
1691
|
+
.cx-stamp { aspect-ratio: 1; display: grid; place-items: center; border-radius: 99px; border: 1.5px dashed var(--border); color: var(--muted-foreground); }
|
|
1692
|
+
.cx-stamp svg { width: 18px; height: 18px; }
|
|
1693
|
+
.cx-stamp[data-on] { border: 0; background: var(--selected); color: var(--selected-foreground); }
|
|
1694
|
+
.cx-stamp[data-gift]:not([data-on]) { border-style: solid; color: var(--selected); }
|
|
1695
|
+
.cx-stamp[data-pop] { animation: cx-stamp-pop 420ms cubic-bezier(.22, 1.4, .36, 1); }
|
|
1696
|
+
@keyframes cx-stamp-pop { 0% { transform: scale(1.6) rotate(-12deg); opacity: 0; } 100% { transform: none; opacity: 1; } }
|
|
1697
|
+
.cx-bell-wrap { position: relative; }
|
|
1698
|
+
.cx-count-ind { width: auto; min-width: 18px; height: 18px; padding: 0 5px; top: -6px; right: -6px; color: var(--on-destructive); font-size: 11px; font-weight: 600; display: grid; place-items: center; font-variant-numeric: tabular-nums; }
|
|
1699
|
+
.cx-bellpop { width: 340px; padding: 0; overflow: hidden; }
|
|
1700
|
+
.cx-bell-list { max-height: 320px; overflow-y: auto; padding: 4px; }
|
|
1701
|
+
.cx-bell-it { width: 100%; border: 0; background: none; font: inherit; color: inherit; text-align: left; cursor: pointer; border-radius: var(--radius); }
|
|
1702
|
+
.cx-bell-it:hover { background: var(--accent); }
|
|
1703
|
+
.cx-bell-it:not([data-unread]) .cn-item-title { font-weight: 400; color: var(--muted-foreground); }
|
|
1704
|
+
.cx-tonal-ic { --tone: var(--info); display: grid; place-items: center; width: 32px; height: 32px; border-radius: 10px; background: color-mix(in srgb, var(--tone) 13%, transparent); color: var(--tone); }
|
|
1705
|
+
.cx-tonal-ic[data-tone="ok"] { --tone: var(--success); } .cx-tonal-ic[data-tone="wait"] { --tone: var(--warning); } .cx-tonal-ic[data-tone="bad"] { --tone: var(--destructive); }
|
|
1706
|
+
.cx-tonal-ic svg { width: 16px; height: 16px; }
|
|
1707
|
+
.cx-unread-dot { width: 8px; height: 8px; border-radius: 99px; background: var(--selected); }
|
|
1708
|
+
.cx-q-pos { display: grid; place-items: center; width: 28px; height: 28px; border-radius: 99px; background: var(--muted); font-weight: 600; font-size: 13px; font-variant-numeric: tabular-nums; }
|
|
1709
|
+
.cx-pw-meter { display: flex; flex-direction: column; gap: 8px; }
|
|
1710
|
+
.cx-pw-bars { display: grid; grid-template-columns: repeat(4, 1fr); gap: 4px; }
|
|
1711
|
+
.cx-pw-bars .cn-progress { height: 4px; }
|
|
1712
|
+
.cx-pw-bars .cn-progress .cn-progress-indicator { transition: transform 260ms cubic-bezier(.22, 1, .36, 1), background-color 200ms; }
|
|
1713
|
+
.cx-pw-bars .cn-progress[data-tone="bad"] .cn-progress-indicator { background: var(--destructive); }
|
|
1714
|
+
.cx-pw-bars .cn-progress[data-tone="wait"] .cn-progress-indicator { background: var(--warning); }
|
|
1715
|
+
.cx-pw-bars .cn-progress[data-tone="ok"] .cn-progress-indicator { background: var(--success); }
|
|
1716
|
+
.cx-pw-rules { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }
|
|
1717
|
+
.cx-pw-rules li { display: flex; align-items: center; gap: 8px; }
|
|
1718
|
+
.cx-pw-rules svg { width: 14px; height: 14px; color: var(--border); transition: color 200ms, transform 200ms; }
|
|
1719
|
+
.cx-pw-rules li[data-ok] svg { color: var(--success); transform: scale(1.15); }
|
|
1720
|
+
.cx-pw-rules li[data-ok] .cx-text { color: var(--foreground); }
|
|
1721
|
+
.cx-ag-ev:has(> .cx-text:only-child) { justify-content: center; padding-block: 0; }
|
|
1722
|
+
.cx-team .cn-item-group, .cx-extras .cn-item-group { gap: 0; }
|
|
1723
|
+
.cx-team .cn-item-separator, .cx-extras .cn-item-separator { margin-block: 0; }
|
|
1724
|
+
.cx-team .cn-item, .cx-extras .cn-item { padding-inline: 4px; }
|
|
1725
|
+
|
|
1726
|
+
/* ═════ native <select>: its list follows the theme (never white on white) ═════ */
|
|
1727
|
+
.style-nova select, [data-skin] select { color-scheme: light; background-color: var(--background); color: var(--foreground); }
|
|
1728
|
+
:root[data-theme="dark"] .style-nova select, :root[data-theme="dark"] [data-skin] select, [data-skin="tienda"] select { color-scheme: dark; }
|
|
1729
|
+
.style-nova select option, .style-nova select optgroup, [data-skin] select option { background-color: var(--popover); color: var(--popover-foreground); }
|
|
1730
|
+
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) .style-nova select { color-scheme: dark; } }
|
|
1731
|
+
|
|
1732
|
+
/* ═════ charts fill their card, no blank band ═════ */
|
|
1733
|
+
.cx-chart-card, .cx-onboard { display: flex; }
|
|
1734
|
+
.cx-chart-card > .cn-card, .cx-onboard > .cn-card { flex: 1; }
|
|
1735
|
+
.cx-chart { display: flex; flex-direction: column; }
|
|
1736
|
+
.cx-chart-body { flex: 1; min-height: 220px; grid-template-rows: 1fr; }
|
|
1737
|
+
.cx-chart-y { height: auto; padding-bottom: 22px; }
|
|
1738
|
+
.cx-chart-plot { grid-template-rows: 1fr auto; min-height: 0; }
|
|
1739
|
+
.cx-chart-grid { height: auto; bottom: 22px; }
|
|
1740
|
+
.cx-chart-bars { height: 100%; min-height: 160px; }
|
|
1741
|
+
|
|
1742
|
+
/* ═════ chat: one height per element, everywhere ═════ */
|
|
1743
|
+
.cx-ib-th { height: 56px; padding: 0 14px; }
|
|
1744
|
+
.cx-ib-list > .cx-vstack:first-child { padding: 12px !important; gap: 10px !important; }
|
|
1745
|
+
.cx-ib-row { min-height: 60px; }
|
|
1746
|
+
.cx-bot-sugs .cn-button { height: 28px; }
|
|
1747
|
+
.cx-chat-bubble { min-height: 36px; }
|
|
1748
|
+
.cx-chat-audio { height: 32px; }
|
|
1749
|
+
.cx-chat-audio .cn-button { width: 28px; height: 28px; }
|
|
1750
|
+
.cx-stat-ic { display: grid; place-items: center; width: 28px; height: 28px; border-radius: 8px; background: var(--muted); color: var(--muted-foreground); }
|
|
1751
|
+
.cx-stat-ic svg { width: 15px; height: 15px; }
|
|
1752
|
+
|
|
1753
|
+
/* ═════ Agenda v2 ═════ */
|
|
1754
|
+
.cx-agenda { container-type: inline-size; }
|
|
1755
|
+
.cx-ag-who { gap: 4px; flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; }
|
|
1756
|
+
.cx-ag-who .cn-button { flex: none; gap: 6px; }
|
|
1757
|
+
.cx-ag-who .cn-button .cn-avatar { width: 20px; height: 20px; }
|
|
1758
|
+
.cx-ag-who .cn-button .cn-avatar .cn-avatar-fallback { font-size: 9px; }
|
|
1759
|
+
.cx-ag-who .cn-button[aria-pressed="true"][aria-pressed][aria-pressed] { background: var(--selected-soft); color: var(--selected); border-color: transparent; }
|
|
1760
|
+
.cx-ag-strip { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; }
|
|
1761
|
+
.cx-ag-day small { font-size: 11px; color: var(--muted-foreground); text-transform: uppercase; letter-spacing: .04em; }
|
|
1762
|
+
.cx-ag-day b { font-size: 16px; font-weight: 600; font-variant-numeric: tabular-nums; }
|
|
1763
|
+
.cx-ag-day .cx-ag-count { min-width: 18px; height: 16px; border-radius: 99px; font-size: 11px; font-weight: 600; color: var(--muted-foreground); font-variant-numeric: tabular-nums; }
|
|
1764
|
+
.cx-ag-day[data-today] b { color: var(--selected); }
|
|
1765
|
+
.cx-ag-day[aria-pressed="true"] small, .cx-ag-day[aria-pressed="true"] .cx-ag-count, .cx-ag-day[aria-pressed="true"] b { color: inherit; }
|
|
1766
|
+
.cx-ag-colhead { display: flex; align-items: center; justify-content: center; gap: 6px; }
|
|
1767
|
+
.cx-ag-colhead .cn-avatar { width: 22px; height: 22px; }
|
|
1768
|
+
.cx-ag-colhead .cn-avatar .cn-avatar-fallback { font-size: 9px; }
|
|
1769
|
+
.cx-ag-colhead[data-today] { color: var(--selected); }
|
|
1770
|
+
.cx-ag { grid-template-rows: 44px 1fr; }
|
|
1771
|
+
.cx-ag-off { position: absolute; left: 0; right: 0; background: repeating-linear-gradient(135deg, color-mix(in srgb, var(--muted) 90%, transparent) 0 6px, color-mix(in srgb, var(--muted) 45%, transparent) 6px 12px); pointer-events: none; display: grid; place-items: center; }
|
|
1772
|
+
.cx-ag-block { position: absolute; left: 3px; right: 3px; z-index: 1; display: flex; align-items: flex-start; padding: 4px 8px; border-radius: calc(var(--radius) * .6); background: repeating-linear-gradient(135deg, color-mix(in srgb, var(--foreground) 8%, transparent) 0 5px, transparent 5px 10px); box-shadow: inset 0 0 0 1px var(--border); pointer-events: none; }
|
|
1773
|
+
.cx-ag-ev { left: auto; right: auto; }
|
|
1774
|
+
.cx-ag-grip { position: absolute; left: 0; right: 0; bottom: 0; height: 7px; cursor: ns-resize; }
|
|
1775
|
+
.cx-ag-grip::after { content: ""; position: absolute; left: 50%; bottom: 2px; width: 18px; height: 3px; margin-left: -9px; border-radius: 99px; background: color-mix(in srgb, var(--tone) 55%, transparent); opacity: 0; transition: opacity 150ms; }
|
|
1776
|
+
.cx-ag-ev:hover .cx-ag-grip::after { opacity: 1; }
|
|
1777
|
+
.cx-ag-list { display: flex; flex-direction: column; gap: 6px; }
|
|
1778
|
+
.cx-ag-row { --tone: var(--info); display: flex; align-items: center; gap: 12px; min-height: 52px; padding: 8px 12px; border: 1px solid color-mix(in srgb, var(--tone) 26%, var(--border)); border-radius: var(--radius); background: color-mix(in srgb, var(--tone) 10%, var(--background)); color: var(--foreground); font: inherit; text-align: left; width: 100%; cursor: pointer; }
|
|
1779
|
+
.cx-ag-row[data-tone="ok"] { --tone: var(--success); } .cx-ag-row[data-tone="wait"] { --tone: var(--warning); }
|
|
1780
|
+
.cx-ag-row:hover { background: color-mix(in srgb, var(--tone) 16%, var(--background)); }
|
|
1781
|
+
.cx-ag-row-t { display: flex; flex-direction: column; width: 52px; flex: none; }
|
|
1782
|
+
.cx-ag-row .cn-badge { margin-left: auto; flex: none; }
|
|
1783
|
+
.cx-ag-row[data-kind="free"] { --tone: var(--border); border-style: dashed; background: var(--background); min-height: 44px; color: var(--muted-foreground); }
|
|
1784
|
+
.cx-ag-row[data-kind="free"] svg { width: 16px; height: 16px; }
|
|
1785
|
+
.cx-ag-row[data-kind="free"]:hover { border-color: var(--selected); color: var(--selected); }
|
|
1786
|
+
.cx-ag-row[data-kind="block"] { --tone: var(--muted-foreground); cursor: default; background: repeating-linear-gradient(135deg, color-mix(in srgb, var(--foreground) 5%, transparent) 0 5px, transparent 5px 10px); }
|
|
1787
|
+
.cx-rcpt-mini { display: block; width: 120px; aspect-ratio: 3 / 4; border-radius: 8px; box-shadow: inset 0 0 0 1px var(--border); }
|
|
1788
|
+
@container (max-width: 700px) { .cx-ag-bar .cx-text[data-variant="heading"] { flex-basis: 100%; order: 9; } }
|
|
1789
|
+
|
|
1790
|
+
/* time and menu triggers: field-like buttons, icon and chevron with real padding */
|
|
1791
|
+
.cx-time-btn { gap: 6px; padding-inline: 10px 12px; font-variant-numeric: tabular-nums; }
|
|
1792
|
+
.cx-time-btn svg { color: var(--muted-foreground); }
|
|
1793
|
+
.cx-time-btn[aria-invalid="true"] { border-color: var(--destructive); }
|
|
1794
|
+
.cx-sel-btn { justify-content: space-between; gap: 10px; padding-inline: 12px 10px; min-width: 128px; font-weight: 500; }
|
|
1795
|
+
.cx-sel-btn > span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
1796
|
+
.cx-sel-btn > svg { color: var(--muted-foreground); transition: transform 160ms ease; }
|
|
1797
|
+
.cx-sel-btn[aria-expanded="true"] > svg { transform: rotate(180deg); }
|
|
1798
|
+
.cx-selmenu { position: fixed; z-index: 60; padding: 4px; max-width: min(320px, calc(100vw - 16px)); }
|
|
1799
|
+
.cx-selitem { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 8px 10px; border-radius: calc(var(--radius) - 2px); cursor: default; outline: none; }
|
|
1800
|
+
.cx-selitem:focus { background: var(--accent); }
|
|
1801
|
+
.cx-selcheck { width: 16px; height: 16px; flex: none; }
|
|
1802
|
+
.cx-wh-range { display: flex; align-items: center; gap: 8px; }
|
|
1803
|
+
|
|
1804
|
+
.cx-dirty .cx-grow { display: none; }
|
|
1805
|
+
.cx-dirty-acts { display: flex; gap: 4px; }
|
|
1806
|
+
@media (max-width: 480px) { .cx-dirty > .cx-dirty-in { flex: 1; min-width: 0; height: auto; min-height: 52px; padding: 6px 6px 6px 16px; gap: 8px; border-radius: 18px; white-space: normal; justify-content: space-between; } .cx-dirty-in > .cx-text { min-width: 0; line-height: 1.25; } .cx-dirty .cx-save-w { min-width: 0; } .cx-dirty-acts { flex: none; } }
|
|
1807
|
+
|
|
1808
|
+
/* ── Composer = InputGroup + Textarea + block-end addon ── */
|
|
1809
|
+
.cx-composer { display: flex; flex-direction: column; gap: 6px; padding: 12px; border-top: 1px solid var(--border); background: var(--background); flex: none; }
|
|
1810
|
+
.cx-composer-box { align-items: stretch; }
|
|
1811
|
+
.cx-composer-in { min-height: 40px; max-height: 160px; padding: 10px 12px 4px; font-size: 14px; line-height: 20px; overflow-y: auto; }
|
|
1812
|
+
.cx-composer-box > .cn-input-group-addon-align-block-end { gap: 2px; padding: 4px 6px 6px; cursor: default; }
|
|
1813
|
+
.cx-composer-box .cn-input-group-button-size-icon-sm { width: 32px; height: 32px; }
|
|
1814
|
+
.cx-composer-box [data-send] { border-radius: 99px; }
|
|
1815
|
+
.cx-composer-hint { margin: 0; padding-inline: 2px; }
|
|
1816
|
+
.cx-emoji { display: grid; grid-template-columns: repeat(5, 36px); gap: 2px; padding: 6px; width: auto; }
|
|
1817
|
+
.cx-emoji .cn-button { font-size: 18px; }
|
|
1818
|
+
.cx-chat-tag { display: inline-flex; align-items: center; gap: 3px; margin-right: 4px; font-size: 11px; font-weight: 600; opacity: .75; }
|
|
1819
|
+
.cx-chat-tag svg { width: 12px; height: 12px; }
|
|
1820
|
+
.cx-chat-sys { align-self: center; display: inline-flex; align-items: center; gap: 6px; padding: 4px 10px; color: var(--muted-foreground); }
|
|
1821
|
+
.cx-chat-sys svg { width: 14px; height: 14px; flex: none; }
|
|
1822
|
+
|
|
1823
|
+
/* ── Messaging: 3 panes (wide) · thread + sheet (mid) · one pane (narrow) ── */
|
|
1824
|
+
.cx-mx { display: grid; grid-template-columns: 320px minmax(0, 1fr) 288px; height: 640px; width: 100%; margin: 0 auto; border-radius: calc(var(--radius) * 1.6); border: 1px solid var(--border); background: var(--background); overflow: hidden; transition: max-width 260ms cubic-bezier(.22, 1, .36, 1); }
|
|
1825
|
+
.cx-mx[data-layout="mid"] { grid-template-columns: 300px minmax(0, 1fr); }
|
|
1826
|
+
.cx-mx[data-layout="narrow"] { grid-template-columns: minmax(0, 1fr); }
|
|
1827
|
+
.cx-mx:not([data-layout="wide"]) .cx-mx-ctx:not(.cx-mx-ctx-sheet) { display: none; }
|
|
1828
|
+
.cx-mx[data-layout="wide"] .cx-mx-ctxbtn { display: none; }
|
|
1829
|
+
.cx-mx-back { display: none; }
|
|
1830
|
+
.cx-mx[data-layout="narrow"] .cx-mx-back { display: inline-flex; }
|
|
1831
|
+
.cx-mx[data-layout="narrow"][data-view="list"] .cx-mx-thread, .cx-mx[data-layout="narrow"][data-view="thread"] .cx-mx-list { display: none; }
|
|
1832
|
+
.cx-mx[data-layout="narrow"] .cx-mx-hide-sm { display: none; }
|
|
1833
|
+
|
|
1834
|
+
.cx-mx-list { display: flex; flex-direction: column; min-height: 0; min-width: 0; border-right: 1px solid var(--border); }
|
|
1835
|
+
.cx-mx[data-layout="narrow"] .cx-mx-list { border-right: 0; }
|
|
1836
|
+
.cx-mx-lh { display: flex; align-items: center; gap: 8px; height: 56px; padding: 0 12px 0 16px; flex: none; }
|
|
1837
|
+
.cx-mx-tools { display: flex; flex-direction: column; gap: 10px; padding: 0 12px 10px; flex: none; }
|
|
1838
|
+
.cx-mx-chips { display: flex; gap: 6px; overflow-x: auto; margin-inline: -12px; padding-inline: 12px; scroll-padding-inline: 12px; }
|
|
1839
|
+
.cx-mx-chips .cn-button { flex: none; gap: 6px; }
|
|
1840
|
+
.cx-mx-chips .cn-button[aria-pressed="true"] .cx-mx-n { color: inherit; opacity: .7; }
|
|
1841
|
+
.cx-mx-n { font-variant-numeric: tabular-nums; color: var(--muted-foreground); font-weight: 500; }
|
|
1842
|
+
.cx-noscrollbar { scrollbar-width: none; } .cx-noscrollbar::-webkit-scrollbar { display: none; }
|
|
1843
|
+
.cx-mx-items { flex: 1; min-height: 0; overflow-y: auto; padding: 0 8px 8px; display: flex; flex-direction: column; gap: 2px; }
|
|
1844
|
+
.cx-mx-row { width: 100%; min-height: 64px; border: 0; background: none; color: inherit; font: inherit; text-align: left; cursor: pointer; border-radius: var(--radius); flex-wrap: nowrap; }
|
|
1845
|
+
.cx-mx-row:hover { background: color-mix(in srgb, var(--foreground) 4%, transparent); }
|
|
1846
|
+
.cx-mx-row[aria-current="true"] { background: var(--selected-soft); }
|
|
1847
|
+
.cx-mx-row .cn-item-content { min-width: 0; }
|
|
1848
|
+
.cx-mx-row .cn-item-title { display: flex; align-items: center; gap: 6px; min-width: 0; width: 100%; }
|
|
1849
|
+
.cx-mx-row .cn-item-title .cn-badge { flex: none; }
|
|
1850
|
+
.cx-mx-row:not([data-unread]) .cn-item-title { font-weight: 500; }
|
|
1851
|
+
.cx-mx-row[data-unread] .cn-item-description { color: var(--foreground); }
|
|
1852
|
+
.cx-mx-by { color: var(--muted-foreground); font-weight: 500; }
|
|
1853
|
+
.cx-mx-end { flex-direction: column; align-items: flex-end; gap: 6px; width: auto; flex: none; }
|
|
1854
|
+
.cx-mx-end .cn-badge { min-width: 20px; height: 20px; padding: 0 6px; justify-content: center; font-variant-numeric: tabular-nums; }
|
|
1855
|
+
.cx-mx-badge-gap { height: 20px; }
|
|
1856
|
+
.cx-mx-av { position: relative; display: inline-flex; flex: none; }
|
|
1857
|
+
.cx-mx-av .cx-ch { position: absolute; right: -6px; bottom: -5px; width: 16px; height: 16px; }
|
|
1858
|
+
.cx-ch-lg { position: static !important; width: 32px; height: 32px; border-radius: 10px; }
|
|
1859
|
+
.cx-ch-lg svg { width: 18px; height: 18px; }
|
|
1860
|
+
.cx-mx-lf { display: flex; align-items: center; justify-content: space-between; gap: 8px; height: 48px; padding: 0 8px 0 16px; border-top: 1px solid var(--border); flex: none; }
|
|
1861
|
+
.cx-mx-empty { padding: 32px 12px; }
|
|
1862
|
+
|
|
1863
|
+
.cx-mx-thread { display: flex; flex-direction: column; min-width: 0; min-height: 0; }
|
|
1864
|
+
.cx-mx-th { display: flex; align-items: center; gap: 10px; height: 64px; padding: 0 12px 0 16px; border-bottom: 1px solid var(--border); flex: none; }
|
|
1865
|
+
.cx-mx[data-layout="narrow"] .cx-mx-th { padding-left: 8px; }
|
|
1866
|
+
.cx-mx-thwho { gap: 0; min-width: 0; }
|
|
1867
|
+
.cx-mx-th .cn-button[data-mx-resolve][aria-pressed="true"][aria-pressed] { color: var(--success); border-color: color-mix(in srgb, var(--success) 40%, var(--border)); background: color-mix(in srgb, var(--success) 8%, transparent); }
|
|
1868
|
+
.cx-mx-control { flex: none; overflow: hidden; }
|
|
1869
|
+
.cx-mx-control:empty { display: none; }
|
|
1870
|
+
.cx-mx-control .cn-alert, .cx-mx-quick .cn-alert { border-radius: 0; border-width: 0 0 1px; }
|
|
1871
|
+
.cx-mx-control .cn-alert[data-tone="wait"] { background: color-mix(in srgb, var(--warning) 8%, var(--background)); }
|
|
1872
|
+
.cx-mx-control .cn-alert[data-tone="wait"] > svg { color: var(--warning); }
|
|
1873
|
+
.cx-mx .cn-alert { padding-right: 140px; }
|
|
1874
|
+
.cx-mx .cn-alert-action { top: 50%; transform: translateY(-50%); }
|
|
1875
|
+
.cx-mx-compose { flex: none; display: flex; flex-direction: column; background: var(--background); }
|
|
1876
|
+
.cx-mx-compose .cx-composer { border-top: 0; padding-top: 4px; }
|
|
1877
|
+
.cx-mx-quick { overflow: hidden; border-top: 1px solid var(--border); }
|
|
1878
|
+
.cx-mx-quick .cn-alert { border-width: 0; padding-right: 170px; }
|
|
1879
|
+
.cx-mx-qrow { display: flex; gap: 6px; overflow-x: auto; padding: 10px 12px 6px; }
|
|
1880
|
+
.cx-mx-qrow .cn-button { flex: none; }
|
|
1881
|
+
.cx-chat-event { max-width: min(86%, 340px); }
|
|
1882
|
+
.cx-mx-card { width: 100%; }
|
|
1883
|
+
.cx-mx-card .cn-card-content { display: flex; flex-direction: column; gap: 6px; }
|
|
1884
|
+
.cx-mx-card .cn-card-footer { gap: 6px; flex-wrap: wrap; }
|
|
1885
|
+
.cx-mx-line { display: flex; justify-content: space-between; gap: 12px; }
|
|
1886
|
+
.cx-mx-total { padding-top: 6px; border-top: 1px dashed var(--border); }
|
|
1887
|
+
|
|
1888
|
+
.cx-mx-ctx { display: flex; flex-direction: column; gap: 20px; min-height: 0; overflow-y: auto; padding: 20px 16px; border-left: 1px solid var(--border); }
|
|
1889
|
+
.cx-mx-ctx-sheet { border: 0; padding: 0; overflow: visible; }
|
|
1890
|
+
.cx-mx-who { display: flex; flex-direction: column; align-items: center; gap: 4px; text-align: center; }
|
|
1891
|
+
.cx-mx-who .cx-mx-av { margin-bottom: 6px; }
|
|
1892
|
+
.cx-mx-stats { display: grid; grid-template-columns: repeat(3, 1fr); border: 1px solid var(--border); border-radius: var(--radius); }
|
|
1893
|
+
.cx-mx-stats > div { display: flex; flex-direction: column; align-items: center; gap: 2px; padding: 10px 4px; min-width: 0; }
|
|
1894
|
+
.cx-mx-stats > div + div { border-left: 1px solid var(--border); }
|
|
1895
|
+
.cx-mx-stats .cx-text[data-variant="strong"] { font-variant-numeric: tabular-nums; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
|
|
1896
|
+
.cx-mx-sec { display: flex; flex-direction: column; gap: 8px; }
|
|
1897
|
+
.cx-mx-now { width: 100%; font: inherit; color: inherit; text-align: left; cursor: pointer; }
|
|
1898
|
+
.cx-mx-now:hover { background: var(--accent); }
|
|
1899
|
+
.cx-mx-dl { margin: 0; display: flex; flex-direction: column; gap: 8px; }
|
|
1900
|
+
.cx-mx-dl > div { display: flex; justify-content: space-between; gap: 12px; }
|
|
1901
|
+
.cx-mx-dl dd { margin: 0; text-align: right; }
|
|
1902
|
+
.cx-mx-acts { display: flex; flex-direction: column; align-items: stretch; gap: 2px; margin-top: auto; padding-top: 12px; border-top: 1px solid var(--border); }
|
|
1903
|
+
.cx-mx-acts .cn-button { justify-content: flex-start; }
|
|
1904
|
+
.cx-mx-danger { color: var(--destructive); }
|
|
1905
|
+
.cx-mx-danger:hover { background: color-mix(in srgb, var(--destructive) 10%, transparent); color: var(--destructive); }
|
|
1906
|
+
@media (max-width: 480px) { .cx-mx { height: 600px; } }
|
|
1907
|
+
.cx-mx-thname { min-width: 0; flex: 0 1 auto; }
|
|
1908
|
+
.cx-mx-thname > .cx-text { white-space: nowrap; }
|
|
1909
|
+
.cx-mx-thwho .cn-badge { flex: none; }
|
|
1910
|
+
|
|
1911
|
+
/* ── Skeletons: Nova's Skeleton + Storio's shimmer; the layout comes from the real component's classes ── */
|
|
1912
|
+
.cx-sk { display: block; flex: none; max-width: 100%; border-radius: calc(var(--radius) * .6); background: linear-gradient(90deg, var(--sk-a) 0%, var(--sk-b) 50%, var(--sk-a) 100%); background-size: 200% 100%; animation: cx-sk 1.3s linear infinite; }
|
|
1913
|
+
:root, [data-skin] { --sk-a: color-mix(in srgb, var(--foreground) 10%, transparent); --sk-b: color-mix(in srgb, var(--foreground) 4%, transparent); }
|
|
1914
|
+
.cx-sk[data-shape="circle"] { border-radius: 99px; }
|
|
1915
|
+
.cx-sk[data-shape="pill"] { border-radius: 99px; }
|
|
1916
|
+
.cx-sk[data-shape="bubble"] { border-radius: 14px; }
|
|
1917
|
+
@keyframes cx-sk { to { background-position: -200% 0; } }
|
|
1918
|
+
@media (prefers-reduced-motion: reduce) { .cx-sk { animation: none; } }
|
|
1919
|
+
.cx-sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
|
|
1920
|
+
.cn-item .cn-item-content > .cx-sk + .cx-sk { margin-top: 6px; }
|
|
1921
|
+
.cx-chat-msg[data-who="out"]:has(> .cx-sk) { align-items: stretch; }
|
|
1922
|
+
.cx-chat-msg:has(> .cx-sk) { align-items: stretch; }
|
|
1923
|
+
.cx-sk-demo { min-height: 120px; }
|
|
1924
|
+
.cx-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 12px; }
|
|
1925
|
+
.cx-sk-products { display: grid; grid-template-columns: repeat(auto-fill, minmax(170px, 1fr)); gap: 12px; }
|
|
1926
|
+
.cx-sk-card { overflow: hidden; padding: 0; gap: 0; }
|
|
1927
|
+
.cx-sk-media { display: block; }
|
|
1928
|
+
.cx-sk-media > .cx-sk { border-radius: 0; }
|
|
1929
|
+
.cx-sk-chatbox { display: flex; flex-direction: column; height: 360px; max-width: 440px; margin: 0 auto; border: 1px solid var(--border); border-radius: calc(var(--radius) * 1.6); overflow: hidden; }
|
|
1930
|
+
.cx-sk-ag { display: flex; flex-direction: column; gap: 14px; }
|
|
1931
|
+
.cx-sk-strip { display: grid; grid-template-columns: repeat(7, 1fr); gap: 6px; }
|
|
1932
|
+
.cx-sk-grid { display: grid; grid-template-columns: 52px repeat(var(--cols), 1fr); border: 1px solid var(--border); border-radius: var(--radius); overflow: hidden; height: 480px; }
|
|
1933
|
+
.cx-sk-hours { display: flex; flex-direction: column; gap: 38px; padding: 8px; border-right: 1px solid var(--border); }
|
|
1934
|
+
.cx-sk-col { position: relative; border-right: 1px solid var(--border); background: repeating-linear-gradient(to bottom, transparent 0 47px, var(--border) 47px 48px); }
|
|
1935
|
+
.cx-sk-col:last-child { border-right: 0; }
|
|
1936
|
+
.cx-sk-ev { position: absolute; left: 4px; right: 4px; }
|
|
1937
|
+
.cx-sk-ev > .cx-sk { height: 100% !important; }
|
|
1938
|
+
.cx-sk-table { display: flex; flex-direction: column; }
|
|
1939
|
+
.cx-sk-tr { display: flex; gap: 24px; align-items: center; height: 44px; padding: 0 12px; border-bottom: 1px solid var(--border); }
|
|
1940
|
+
@media (max-width: 640px) { .cx-sk-strip { grid-template-columns: repeat(4, 1fr); } .cx-sk-strip > :nth-child(n+5) { display: none; } }
|
|
1941
|
+
|
|
1942
|
+
/* ── Agenda: one frame (people + days on top, grid or list below) ── */
|
|
1943
|
+
.cx-ag-frame { display: flex; flex-direction: column; border: 1px solid var(--border); border-radius: calc(var(--radius) * 1.4); background: var(--card, var(--background)); overflow: hidden; }
|
|
1944
|
+
.cx-ag-top { display: flex; flex-direction: column; gap: 10px; padding: 12px; border-bottom: 1px solid var(--border); }
|
|
1945
|
+
.cx-ag-top:empty { display: none; }
|
|
1946
|
+
.cx-ag-strip { padding: 4px; border-radius: calc(var(--radius) * 1.1); background: color-mix(in srgb, var(--muted) 60%, transparent); }
|
|
1947
|
+
.cx-ag-strip .cx-ag-day { height: 56px; }
|
|
1948
|
+
.cx-ag-listwrap { padding: 12px; }
|
|
1949
|
+
.cx-ag-head { background: var(--card, var(--background)); }
|
|
1950
|
+
.cx-ag-off[data-all] { display: block; text-align: center; padding-top: 14px; }
|
|
1951
|
+
.cx-ag-off[data-all] > .cx-text { display: inline-block; padding: 2px 10px; border-radius: 99px; background: var(--card, var(--background)); box-shadow: 0 0 0 1px var(--border); }
|
|
1952
|
+
.cx-ag-ev { touch-action: pan-y; user-select: none; -webkit-user-select: none; cursor: grab; }
|
|
1953
|
+
.cx-ag-ev[data-dragging] { opacity: .35; box-shadow: none; }
|
|
1954
|
+
.cx-ag-ghost { z-index: 4; pointer-events: none; opacity: .95; box-shadow: 0 12px 28px -10px rgb(0 0 0 / .5); outline: 2px solid var(--tone); outline-offset: -1px; transition: top 60ms linear, height 60ms linear; }
|
|
1955
|
+
.cx-ag-ghost[data-invalid] { --tone: var(--destructive); background: color-mix(in srgb, var(--destructive) 16%, var(--background)); }
|
|
1956
|
+
.cx-ag-ghost .cx-ag-grip { display: none; }
|
|
1957
|
+
.cx-ag-ghost-t { position: absolute; right: 6px; bottom: 4px; padding: 1px 6px; border-radius: 6px; font-size: 11px; font-weight: 600; font-variant-numeric: tabular-nums; background: var(--foreground); color: var(--background); white-space: nowrap; }
|
|
1958
|
+
.cx-ag-ghost[data-invalid] .cx-ag-ghost-t { background: var(--destructive); color: #fff; }
|
|
1959
|
+
.cx-ag-ghost { background: color-mix(in srgb, var(--tone) 16%, var(--card, var(--background))); }
|
|
1960
|
+
.cx-ag-ghost[data-invalid] { background: color-mix(in srgb, var(--destructive) 18%, var(--card, var(--background))); }
|
|
1961
|
+
/* short appointments: never shorter than one line of text */
|
|
1962
|
+
.cx-ag-ev { min-height: 24px; }
|
|
1963
|
+
.cx-ag-ev:has(> .cx-text:only-child) .cx-text, .cx-ag-ev:has(> .cx-text + .cx-ag-grip:last-child) > .cx-text:first-child { font-size: 12px; line-height: 16px; }
|
|
1964
|
+
|
|
1965
|
+
/* phone: the grid stays; columns scroll sideways under a fixed hours column */
|
|
1966
|
+
.cx-ag-head > span:first-child, .cx-ag-times { position: sticky; left: 0; z-index: 3; background: var(--card, var(--background)); }
|
|
1967
|
+
.cx-ag-times { z-index: 2; border-right: 1px solid var(--border); }
|
|
1968
|
+
@container (max-width: 700px) {
|
|
1969
|
+
.cx-ag { min-width: calc(48px + var(--cols) * 128px); }
|
|
1970
|
+
.cx-ag-head, .cx-ag-body { grid-template-columns: 48px repeat(var(--cols), 1fr); }
|
|
1971
|
+
.cx-ag-now { left: 48px; }
|
|
1972
|
+
.cx-ag-scroll { max-height: 70vh; }
|
|
1973
|
+
}
|
|
1974
|
+
.cx-ag-times { z-index: 5; }
|
|
1975
|
+
.cx-ag-head { z-index: 6; }
|
|
1976
|
+
.cx-ag-head > span:first-child { z-index: 7; }
|
|
1977
|
+
@container (max-width: 700px) {
|
|
1978
|
+
.cx-ag-scroll { scroll-snap-type: x mandatory; scroll-padding-left: 48px; }
|
|
1979
|
+
.cx-ag-col { scroll-snap-align: start; }
|
|
1980
|
+
}
|
|
1981
|
+
|
|
1982
|
+
|
|
1983
|
+
/* ═════════════════════════ 4. pk ═════════════════════════ */
|
|
1984
|
+
/* ═════ ColorPick de Storio, genérico (tokens de la piel) ═════ */
|
|
1985
|
+
|
|
1986
|
+
/* THE APP'S ONE COLOUR PICKER (components/ColorPick.js, used through the ColorPick / PaintPick parts).
|
|
1987
|
+
The trigger keeps the .cp-host/.cp-well classes, so every place that sized or ringed the old swatch
|
|
1988
|
+
keeps doing so. The popover (.pk-*) lives on <body> with position:fixed so no panel clips it, and turns
|
|
1989
|
+
into a bottom sheet on a phone. Gradients are optional per place (see the component's header). */
|
|
1990
|
+
.cp-host{ position:relative; display:inline-flex; }
|
|
1991
|
+
.cp-well{ width:2rem; height:2rem; flex:none; padding:0; cursor:pointer; border-radius:.6rem;
|
|
1992
|
+
border:1px solid rgba(0,0,0,.14); box-shadow:inset 0 0 0 1px rgba(255,255,255,.25); }
|
|
1993
|
+
/* PORTED from Fidelidad's custom swatch (.fd-sw-custom): the SAME conic RAINBOW ring, size, radii and
|
|
1994
|
+
card-coloured gap, so Diseño's colour pickers look identical to Fidelidad's — not just «with a ring». */
|
|
1995
|
+
.cp-ring .cp-host{ width:2.5rem; height:2.5rem; padding:2px; border-radius:.7rem; overflow:visible;
|
|
1996
|
+
display:grid; place-items:stretch;
|
|
1997
|
+
background:conic-gradient(from 0deg, #f43f5e, #f59e0b, #22c55e, #3b82f6, #a855f7, #f43f5e); }
|
|
1998
|
+
.cp-ring .cp-well{ width:100%; height:100%; border:0; border-radius:.48rem;
|
|
1999
|
+
box-shadow:inset 0 0 0 2px var(--card); }
|
|
2000
|
+
.pk-well{ position:relative; overflow:hidden; }
|
|
2001
|
+
.pk-dot{ position:absolute; right:3px; bottom:3px; width:14px; height:14px; border-radius:50%; background:#fff;
|
|
2002
|
+
display:grid; place-items:center; box-shadow:0 1px 3px rgba(0,0,0,.3); }
|
|
2003
|
+
.pk-scrim{ position:fixed; inset:0; z-index:var(--z-modal); background:transparent; }
|
|
2004
|
+
.pk-pop{ color:var(--popover-foreground); overflow-y:auto; overscroll-behavior:contain; scrollbar-width:thin; position:fixed; z-index:calc(var(--z-modal) + 1); width:292px; box-sizing:border-box; background:var(--popover); border-radius:20px;
|
|
2005
|
+
box-shadow:0 24px 60px -18px rgba(31,22,60,.38), 0 0 0 1px var(--border); padding:12px;
|
|
2006
|
+
display:flex; flex-direction:column; gap:11px; animation:pk-in .18s cubic-bezier(.2,.8,.3,1); }
|
|
2007
|
+
@keyframes pk-in{ from{ opacity:0; transform:translateY(6px) scale(.98); } to{ opacity:1; transform:none; } }
|
|
2008
|
+
@media (max-width:35rem){
|
|
2009
|
+
.pk-scrim{ background:rgba(16,16,20,.28); }
|
|
2010
|
+
.pk-pop{ left:0 !important; right:0; top:auto !important; bottom:0 !important; max-height:88dvh !important; width:auto; border-radius:22px 22px 0 0;
|
|
2011
|
+
padding:10px 16px calc(16px + env(safe-area-inset-bottom,0px)); animation:pk-up .24s cubic-bezier(.2,.8,.3,1); }
|
|
2012
|
+
.pk-pop::before{ content:""; width:38px; height:5px; border-radius:5px; background:var(--muted); margin:0 auto 2px; }
|
|
2013
|
+
}
|
|
2014
|
+
@keyframes pk-up{ from{ transform:translateY(100%); } to{ transform:none; } }
|
|
2015
|
+
.pk-seg{ display:flex; background:var(--muted); border-radius:12px; padding:3px; gap:2px; }
|
|
2016
|
+
.pk-seg button{ flex:1; font:inherit; font-size:.78rem; font-weight:600; border:0; background:transparent; border-radius:9px;
|
|
2017
|
+
padding:.42rem .4rem; cursor:pointer; color:var(--muted-foreground); }
|
|
2018
|
+
.pk-seg button.on{ background:var(--background); color:var(--foreground); box-shadow:0 1px 3px rgba(31,22,60,.14); }
|
|
2019
|
+
.pk-bar{ position:relative; height:26px; margin:0 10px; border-radius:9px; cursor:copy; touch-action:none; box-shadow:inset 0 0 0 1px rgba(0,0,0,.06); }
|
|
2020
|
+
.pk-stop{ position:absolute; top:50%; width:20px; height:30px; margin:-15px 0 0 -10px; border-radius:7px; border:2.5px solid #fff;
|
|
2021
|
+
box-shadow:0 1px 5px rgba(0,0,0,.35); cursor:grab; touch-action:none; }
|
|
2022
|
+
.pk-stop.on{ box-shadow:0 0 0 2px var(--foreground), 0 2px 8px rgba(0,0,0,.35); }
|
|
2023
|
+
.pk-stop.gone{ opacity:.35; }
|
|
2024
|
+
.pk-map{ position:relative; height:150px; touch-action:none; cursor:crosshair; }
|
|
2025
|
+
.pk-map canvas{ position:absolute; inset:0; width:100%; height:100%; border-radius:12px; }
|
|
2026
|
+
.pk-map svg{ position:absolute; inset:0; width:100%; height:100%; pointer-events:none; overflow:visible; }
|
|
2027
|
+
.pk-pt{ position:absolute; width:22px; height:22px; margin:-11px 0 0 -11px; border-radius:50%; border:2.5px solid #fff;
|
|
2028
|
+
box-shadow:0 1px 6px rgba(0,0,0,.4); pointer-events:none; display:grid; place-items:center; font-size:.58rem; font-weight:800;
|
|
2029
|
+
color:#fff; text-shadow:0 1px 2px rgba(0,0,0,.6); transition:width .1s, height .1s, margin .1s; }
|
|
2030
|
+
.pk-pt.on{ width:28px; height:28px; margin:-14px 0 0 -14px; box-shadow:0 0 0 2px var(--foreground), 0 2px 8px rgba(0,0,0,.4); }
|
|
2031
|
+
.pk-row{ display:flex; align-items:center; gap:8px; }
|
|
2032
|
+
.pk-grow{ flex:1; }
|
|
2033
|
+
.pk-lbl{ font-size:.7rem; font-weight:700; color:var(--muted-foreground); flex:none; width:62px; }
|
|
2034
|
+
.pk-range{ flex:1; min-width:0; -webkit-appearance:none; appearance:none; height:12px; border-radius:99px; outline-offset:3px; }
|
|
2035
|
+
.pk-range::-webkit-slider-thumb{ -webkit-appearance:none; width:18px; height:18px; border-radius:50%; background:#fff; border:2px solid #fff;
|
|
2036
|
+
box-shadow:0 0 0 1px rgba(0,0,0,.25), 0 1px 4px rgba(0,0,0,.3); cursor:grab; }
|
|
2037
|
+
.pk-range::-moz-range-thumb{ width:16px; height:16px; border-radius:50%; background:#fff; border:2px solid #fff; box-shadow:0 0 0 1px rgba(0,0,0,.25); }
|
|
2038
|
+
.pk-hex{ flex:1; min-width:0; display:flex; align-items:center; gap:6px; border:1px solid var(--border); border-radius:10px; padding:5px 8px; }
|
|
2039
|
+
.pk-hex i{ width:18px; height:18px; border-radius:5px; flex:none; box-shadow:inset 0 0 0 1px rgba(0,0,0,.1); }
|
|
2040
|
+
.pk-hex input{ font:600 .82rem var(--font-mono); border:0; outline:0; width:100%; min-width:0; background:transparent;
|
|
2041
|
+
text-transform:uppercase; color:var(--foreground); }
|
|
2042
|
+
.pk-ic{ font:inherit; width:32px; height:32px; flex:none; border-radius:10px; border:1px solid var(--border); background:var(--background); color:var(--foreground);
|
|
2043
|
+
cursor:pointer; display:grid; place-items:center; color:var(--muted-foreground); }
|
|
2044
|
+
.pk-ic:disabled{ opacity:.35; cursor:default; }
|
|
2045
|
+
.pk-ic.on{ background:var(--foreground); border-color:var(--foreground); color:var(--background); }
|
|
2046
|
+
.pk-dial{ width:32px; height:32px; flex:none; border-radius:50%; border:1px solid var(--border); position:relative;
|
|
2047
|
+
cursor:grab; touch-action:none; background:var(--background); }
|
|
2048
|
+
.pk-dial i{ position:absolute; left:50%; top:50%; width:2px; height:12px; margin-left:-1px; background:var(--foreground);
|
|
2049
|
+
border-radius:2px; transform-origin:50% 0; }
|
|
2050
|
+
.pk-deg{ font:600 .74rem var(--font-mono); color:var(--muted-foreground); width:34px; }
|
|
2051
|
+
.pk-sep{ height:1px; background:var(--border); margin:0 -12px; }
|
|
2052
|
+
.pk-anims{ display:grid; grid-template-columns:repeat(auto-fit, minmax(0, 1fr)); gap:4px; }
|
|
2053
|
+
.pk-anims button{ font:inherit; font-size:.64rem; font-weight:600; border:1px solid var(--border); background:var(--background); color:var(--foreground);
|
|
2054
|
+
border-radius:10px; padding:4px 2px 5px; cursor:pointer; display:flex; flex-direction:column; align-items:center; gap:3px; color:var(--muted-foreground); }
|
|
2055
|
+
.pk-anims button i{ width:100%; height:18px; border-radius:6px; }
|
|
2056
|
+
.pk-anims button.on{ border-color:var(--foreground); box-shadow:0 0 0 1px var(--foreground); color:var(--foreground); }
|
|
2057
|
+
.pk-sw{ display:grid; grid-template-columns:repeat(6, 1fr); gap:6px; }
|
|
2058
|
+
.pk-sw button{ aspect-ratio:1; width:100%; border-radius:10px; border:0; cursor:pointer; box-shadow:inset 0 0 0 1px rgba(0,0,0,.08);
|
|
2059
|
+
transition:transform .12s ease; }
|
|
2060
|
+
.pk-sw button:hover{ transform:scale(1.08); }
|
|
2061
|
+
.pk-recent{ display:flex; align-items:center; gap:6px; flex-wrap:wrap; }
|
|
2062
|
+
.pk-recent button{ width:22px; height:22px; border-radius:7px; border:0; cursor:pointer; box-shadow:inset 0 0 0 1px rgba(0,0,0,.1); }
|
|
2063
|
+
.pk-pop button:focus-visible, .pk-pop input:focus-visible, .pk-pop [tabindex]:focus-visible{ outline:2px solid var(--ring); outline-offset:2px; }
|
|
2064
|
+
/* the animations a picked paint can carry (lib/paint.ts paintCss). «breathe» and «hue» move a filter, so
|
|
2065
|
+
a host puts them on a layer behind its text. */
|
|
2066
|
+
@property --pk-angle{ syntax:"<angle>"; inherits:false; initial-value:0deg; }
|
|
2067
|
+
@keyframes pk-flow{ 0%,100%{ background-position:0% 50%; } 50%{ background-position:100% 50%; } }
|
|
2068
|
+
@keyframes pk-breathe{ 0%,100%{ filter:saturate(1) brightness(1); } 50%{ filter:saturate(1.35) brightness(1.12); } }
|
|
2069
|
+
@keyframes pk-spin{ to{ --pk-angle:360deg; } }
|
|
2070
|
+
@keyframes pk-hue{ to{ filter:hue-rotate(360deg); } }
|
|
2071
|
+
@media (prefers-reduced-motion: reduce){ .pk-pop, .pk-well{ animation:none !important; } }
|
|
2072
|
+
.pk-stop::before{ content:""; position:absolute; inset:-9px -8px; }
|
|
2073
|
+
.pk-bar.grabbing, .pk-bar.grabbing .pk-stop{ cursor:grabbing; }
|
|
2074
|
+
/* «Saturación N»: the slider acts on ONE point of the gradient, and its label shows which (number + colour). */
|
|
2075
|
+
.pk-satlbl{ display:flex; align-items:center; gap:5px; width:auto; min-width:62px; }
|
|
2076
|
+
.pk-satdot{ width:16px; height:16px; flex:none; border-radius:50%; display:grid; place-items:center; font-style:normal; font-size:.56rem;
|
|
2077
|
+
font-weight:800; color:#fff; text-shadow:0 1px 2px rgba(0,0,0,.6); box-shadow:0 0 0 1.5px #fff, 0 0 0 2.5px rgba(0,0,0,.15); }
|
|
2078
|
+
|
|
2079
|
+
|
|
2080
|
+
/* ═════════════════════════ 5. mslider ═════════════════════════ */
|
|
2081
|
+
/* ═════ Slider de Storio (components/Slider.js), genérico ═════ */
|
|
2082
|
+
.mslider { --track: var(--muted); }
|
|
2083
|
+
.mslider { position: relative; padding-top: 2.1rem; width: 100%; }
|
|
2084
|
+
.mslider-bubble {
|
|
2085
|
+
position: absolute; top: 0; transform: translateX(-50%); pointer-events: none;
|
|
2086
|
+
background: var(--primary); color: var(--primary-foreground);
|
|
2087
|
+
font-weight: 700; font-size: .72rem; padding: .24rem .5rem; border-radius: 8px;
|
|
2088
|
+
font-variant-numeric: tabular-nums; white-space: nowrap;
|
|
2089
|
+
box-shadow: 0 3px 10px rgb(0 0 0 / .2);
|
|
2090
|
+
}
|
|
2091
|
+
.mslider-bubble::after {
|
|
2092
|
+
content: ""; position: absolute; left: 50%; bottom: -4px; transform: translateX(-50%);
|
|
2093
|
+
border: 5px solid transparent; border-top-color: var(--primary); border-bottom: 0;
|
|
2094
|
+
}
|
|
2095
|
+
.mslider-input {
|
|
2096
|
+
-webkit-appearance: none; appearance: none;
|
|
2097
|
+
width: 100%; height: 1.6rem; margin: 0; padding: 0;
|
|
2098
|
+
background: transparent; cursor: pointer; display: block;
|
|
2099
|
+
}
|
|
2100
|
+
.mslider-input:focus { outline: none; }
|
|
2101
|
+
|
|
2102
|
+
/* WebKit / Blink (Chrome, Safari, Edge) */
|
|
2103
|
+
.mslider-input::-webkit-slider-runnable-track {
|
|
2104
|
+
height: .5rem; border-radius: 999px;
|
|
2105
|
+
background: linear-gradient(var(--primary), var(--primary)) left/var(--p, 50%) 100% no-repeat, var(--track);
|
|
2106
|
+
}
|
|
2107
|
+
.mslider-input::-webkit-slider-thumb {
|
|
2108
|
+
-webkit-appearance: none; appearance: none;
|
|
2109
|
+
width: 1.3rem; height: 1.3rem; margin-top: -.4rem;
|
|
2110
|
+
border-radius: 50%; background: var(--background); border: .3rem solid var(--primary);
|
|
2111
|
+
box-shadow: 0 2px 5px rgb(0 0 0 / .3); transition: transform .1s ease;
|
|
2112
|
+
}
|
|
2113
|
+
.mslider-input:active::-webkit-slider-thumb { transform: scale(1.12); }
|
|
2114
|
+
.mslider-input:focus-visible::-webkit-slider-thumb { box-shadow: 0 2px 5px rgb(0 0 0 / .3), 0 0 0 4px var(--ring); }
|
|
2115
|
+
|
|
2116
|
+
/* Firefox */
|
|
2117
|
+
.mslider-input::-moz-range-track { height: .5rem; border-radius: 999px; background: var(--track); }
|
|
2118
|
+
.mslider-input::-moz-range-progress { height: .5rem; border-radius: 999px; background: var(--primary); }
|
|
2119
|
+
.mslider-input::-moz-range-thumb {
|
|
2120
|
+
width: 1.3rem; height: 1.3rem; border: .3rem solid var(--primary);
|
|
2121
|
+
border-radius: 50%; background: var(--background); box-shadow: 0 2px 5px rgb(0 0 0 / .3);
|
|
2122
|
+
}
|
|
2123
|
+
.mslider-input:active::-moz-range-thumb { transform: scale(1.12); }
|
|
2124
|
+
|
|
2125
|
+
|
|
2126
|
+
|
|
2127
|
+
/* ── muten adapters, kit core: the island as the app's one floating notice (the artifact showed it inside a phone) ── */
|
|
2128
|
+
.cx-island.cx-island-app { position: fixed; top: calc(env(safe-area-inset-top, 0px) + 12px); z-index: var(--z-toast); }
|
|
2129
|
+
.cx-kit-layer { color: var(--foreground); }
|
|
2130
|
+
.cx-gap-2 { gap: 2px; } .cx-gap-14 { gap: 14px; }
|
|
2131
|
+
.cx-dirty-host, .cx-kit-widget { display: contents; }
|
|
2132
|
+
|
|
2133
|
+
/* ── muten adapters, batch: people, fields, notices ── */
|
|
2134
|
+
.cx-who > .cx-who-t { display: block; } .cx-who .cx-who-n { display: block; font-weight: 500; } .cx-who .cx-who-s { color: var(--muted-foreground); font-size: 13px; }
|
|
2135
|
+
.cx-av-wrap { display: inline-flex; }
|
|
2136
|
+
.cn-avatar-badge.cx-online { width: 10px; height: 10px; }
|
|
2137
|
+
.cx-field-behavior, .cx-island-host, .cx-kit-host { display: none; }
|
|
2138
|
+
/* Band from muten: data-open is "true"/"false" (the artifact toggled the attribute). */
|
|
2139
|
+
.cx-band-slot[data-open="false"] { grid-template-rows: 0fr; }
|
|
2140
|
+
.cx-band-slot > .cx-band-fold { overflow: hidden; min-height: 0; }
|
|
2141
|
+
.cx-band-slot > .cx-band-fold > .cx-band { transition: opacity 140ms ease; }
|
|
2142
|
+
.cx-band-slot[data-open="false"] > .cx-band-fold > .cx-band { opacity: 0; }
|
|
2143
|
+
.cx-band > .mu-icon { font-size: 16px; flex: none; }
|
|
2144
|
+
.cx-band[data-tone="warn"] > .mu-icon { color: var(--warning); }
|
|
2145
|
+
.cx-band > .cx-band-text { flex: 1; }
|
|
2146
|
+
/* Accordion from muten: the panel folds with grid rows (exact height, no measuring) and its text fades. */
|
|
2147
|
+
.cn-accordion-content.cx-acc-fold { display: grid; grid-template-rows: 1fr; transition: grid-template-rows 200ms ease; animation: none; }
|
|
2148
|
+
.cn-accordion-content.cx-acc-fold[data-open="false"] { grid-template-rows: 0fr; }
|
|
2149
|
+
.cn-accordion-content.cx-acc-fold > .cn-accordion-content-inner { overflow: hidden; min-height: 0; transition: opacity 160ms ease; }
|
|
2150
|
+
.cn-accordion-content.cx-acc-fold[data-open="false"] > .cn-accordion-content-inner { opacity: 0; padding-bottom: 0; }
|
|
2151
|
+
.cn-accordion-trigger > .cx-acc-chev { margin-left: auto; font-size: 16px; color: var(--muted-foreground); transition: transform 200ms ease; }
|
|
2152
|
+
.cn-accordion-trigger[aria-expanded="true"] > .cx-acc-chev { transform: rotate(180deg); }
|
|
2153
|
+
.cn-accordion-trigger { width: 100%; }
|
|
2154
|
+
.cx-fake > .mu-span { display: block; height: 34px; border-radius: calc(var(--radius) * .8); background: var(--muted); }
|
|
2155
|
+
.cx-fake > .mu-span:nth-child(2n) { width: 80%; }
|
|
2156
|
+
.cx-appbar-down { margin-top: 44px; }
|
|
2157
|
+
.cx-otp-stack { display: flex; flex-direction: column; align-items: center; gap: 14px; }
|
|
2158
|
+
.cx-car-behavior, .cx-tags-host:empty, .cx-pgnav-host:empty { display: none; }
|
|
2159
|
+
.cx-car-slide > * { min-width: 0; }
|
|
2160
|
+
.cx-thumb .cx-thumb-fill { display: block; width: 100%; height: 100%; border-radius: inherit; background-size: cover; }
|
|
2161
|
+
/* muten adapters · collections: backgrounds that come from data ride --bg (muten's style()). */
|
|
2162
|
+
.cx-prod-ph { width: 100%; aspect-ratio: 1; border-radius: calc(var(--radius) * 1.2); background: var(--bg, var(--muted)); }
|
|
2163
|
+
.cx-hero[style*="--bg"], .cx-gallery-img[style*="--bg"] { background: var(--bg); }
|
|
2164
|
+
.cx-gap-8 { gap: 8px; }
|
|
2165
|
+
.cx-pg-row > .cx-pg-who { display: flex; flex-direction: column; } .cx-pg-row .cx-pg-sub { font-size: 12px; color: var(--muted-foreground); } .cx-pg-row > .cx-pg-amt { font-weight: 600; font-variant-numeric: tabular-nums; }
|
|
2166
|
+
.mu-stack.cx-car-slide { display: block; }
|
|
2167
|
+
|
|
2168
|
+
/* ── Loading: the content fades in where its skeleton was (kit-skeleton.muten) ── */
|
|
2169
|
+
:where(.style-nova) .cx-loading, :where(.style-nova) .cx-loaded, :where(.style-nova) .cx-sk-host { display: block; }
|
|
2170
|
+
.cx-loaded { animation: cx-loaded-in 180ms ease-out; }
|
|
2171
|
+
@keyframes cx-loaded-in { from { opacity: 0.001; } to { opacity: 1; } }
|
|
2172
|
+
@media (prefers-reduced-motion: reduce) { .cx-loaded { animation: none; } }
|
|
2173
|
+
/* a skeleton line inside an Item title takes the title's width (the title shrinks to its text otherwise) */
|
|
2174
|
+
.cn-item-title:has(> .cx-sk) { width: 100%; }
|
|
2175
|
+
.cx-sk-tr > .cx-sk { flex: 0 1 auto; min-width: 0; }
|
|
2176
|
+
|
|
2177
|
+
/* ── ToggleGroup: Base UI marks orientation and spacing with its own attributes; muten writes data-orientation and
|
|
2178
|
+
data-spacing, so the joined / separated / vertical looks are restated on those (toggle-group.muten) ── */
|
|
2179
|
+
.style-nova .cn-toggle-group { display: flex; width: fit-content; flex-direction: row; align-items: center; }
|
|
2180
|
+
.style-nova .cn-toggle-group[data-orientation="vertical"] { flex-direction: column; align-items: stretch; }
|
|
2181
|
+
.style-nova .cn-toggle-group[data-spacing="1"] { gap: 4px; }
|
|
2182
|
+
.style-nova .cn-toggle-group[data-spacing="2"] { gap: 8px; }
|
|
2183
|
+
.style-nova .cn-toggle-group[data-spacing="0"] > .cn-toggle { border-radius: 0; }
|
|
2184
|
+
.style-nova .cn-toggle-group[data-spacing="0"][data-orientation="horizontal"] > .cn-toggle:first-child { border-top-left-radius: var(--radius-lg, 10px); border-bottom-left-radius: var(--radius-lg, 10px); }
|
|
2185
|
+
.style-nova .cn-toggle-group[data-spacing="0"][data-orientation="horizontal"] > .cn-toggle:last-child { border-top-right-radius: var(--radius-lg, 10px); border-bottom-right-radius: var(--radius-lg, 10px); }
|
|
2186
|
+
.style-nova .cn-toggle-group[data-spacing="0"][data-orientation="horizontal"] > .cn-toggle-variant-outline:not(:first-child) { border-left-width: 0; }
|
|
2187
|
+
.style-nova .cn-toggle-group[data-spacing="0"][data-orientation="vertical"] > .cn-toggle:first-child { border-top-left-radius: var(--radius-lg, 10px); border-top-right-radius: var(--radius-lg, 10px); }
|
|
2188
|
+
.style-nova .cn-toggle-group[data-spacing="0"][data-orientation="vertical"] > .cn-toggle:last-child { border-bottom-left-radius: var(--radius-lg, 10px); border-bottom-right-radius: var(--radius-lg, 10px); }
|
|
2189
|
+
.style-nova .cn-toggle-group[data-spacing="0"][data-orientation="vertical"] > .cn-toggle-variant-outline:not(:first-child) { border-top-width: 0; }
|
|
2190
|
+
.style-nova .cn-toggle-group[data-spacing="0"][data-variant="outline"] { box-shadow: 0 1px 2px rgb(0 0 0 / .05); }
|
|
2191
|
+
.style-nova .cn-toggle[aria-pressed="true"] { background: var(--muted); }
|
|
2192
|
+
.style-nova .cn-button-group > .cx-av-wrap, .style-nova .cn-button-group > .mu-stack { display: flex; }
|
|
2193
|
+
|
|
2194
|
+
/* ── RadioGroup: muten writes data-state="true|false" (Base UI's data-checked is presence-only) ── */
|
|
2195
|
+
.cx-rg { display: grid; gap: 12px; }
|
|
2196
|
+
.cx-rg[data-orientation="horizontal"] { grid-auto-flow: column; justify-content: start; gap: 20px; }
|
|
2197
|
+
.cx-rg-row { display: flex; align-items: flex-start; gap: 10px; padding: 0; border: 0; background: none; color: inherit; font: inherit; text-align: left; cursor: pointer; border-radius: 6px; }
|
|
2198
|
+
.cx-rg-row:focus-visible { outline: none; }
|
|
2199
|
+
.cx-rg-row:focus-visible .cx-rg-dot { border-color: var(--ring); box-shadow: 0 0 0 3px color-mix(in srgb, var(--ring) 50%, transparent); }
|
|
2200
|
+
.cx-rg-dot { position: relative; display: block; width: 16px; height: 16px; margin-top: 2px; border-radius: 99px; border: 1px solid var(--input); background: transparent; transition: background-color 150ms, border-color 150ms; }
|
|
2201
|
+
.cx-rg-dot[data-state="true"] { background: var(--primary); border-color: var(--primary); }
|
|
2202
|
+
.cx-rg-dot::after { content: ""; position: absolute; top: 50%; left: 50%; width: 8px; height: 8px; border-radius: 99px; background: var(--primary-foreground); transform: translate(-50%, -50%) scale(0); transition: transform 150ms cubic-bezier(.22, 1, .36, 1); }
|
|
2203
|
+
.cx-rg-dot[data-state="true"]::after { transform: translate(-50%, -50%) scale(1); }
|
|
2204
|
+
.cx-rg-row:active .cx-rg-dot { scale: .92; }
|
|
2205
|
+
.cx-rg-text { display: flex; flex-direction: column; gap: 2px; }
|
|
2206
|
+
.cx-rg-text > .cn-field-description:empty { display: none; }
|
|
2207
|
+
.cx-rg-text > .cn-label { cursor: pointer; }
|
|
2208
|
+
|
|
2209
|
+
/* ── Checkbox: muten's native primitive with Nova's look — Checkbox "Acepto" bind(x) class("cx-checkbox")
|
|
2210
|
+
(the primitive is a <label> around the <input>; the class lands on the label) ── */
|
|
2211
|
+
.cx-checkbox { display: inline-flex; align-items: flex-start; gap: 10px; width: fit-content; max-width: 100%; font-size: 14px; line-height: 20px; cursor: pointer; }
|
|
2212
|
+
.cx-checkbox > input[type="checkbox"] { margin-top: 2px; }
|
|
2213
|
+
.cx-checkbox > .mu-checkbox-label { min-width: 0; }
|
|
2214
|
+
.cx-checkbox > input[type="checkbox"] { appearance: none; -webkit-appearance: none; margin: 0; flex: none; width: 16px; height: 16px; border: 1px solid var(--input); border-radius: 4px; background: transparent center / 12px no-repeat; cursor: pointer; transition: background-color 150ms, border-color 150ms; }
|
|
2215
|
+
.cx-checkbox > input[type="checkbox"]:checked { background-color: var(--primary); border-color: var(--primary); background-image: var(--cx-check-mark); }
|
|
2216
|
+
.cx-checkbox { --cx-check-mark: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E"); }
|
|
2217
|
+
:root[data-theme="dark"] .cx-checkbox { --cx-check-mark: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E"); }
|
|
2218
|
+
.cx-checkbox > input[type="checkbox"]:focus-visible { outline: none; border-color: var(--ring); box-shadow: 0 0 0 3px color-mix(in srgb, var(--ring) 50%, transparent); }
|
|
2219
|
+
.cx-checkbox:has(> input:disabled) { opacity: .5; cursor: not-allowed; }
|
|
2220
|
+
.cx-checkbox > input[type="checkbox"]:active { scale: .92; }
|
|
2221
|
+
|
|
2222
|
+
/* ── NumberField / VectorField (number-field.js, vector-field.muten) ── */
|
|
2223
|
+
.cx-nf-host { display: block; }
|
|
2224
|
+
.cx-nf { width: fit-content; max-width: 100%; }
|
|
2225
|
+
.cx-nf-input { text-align: left; font-variant-numeric: tabular-nums; field-sizing: content; min-width: 3ch; width: auto; flex: 0 1 auto; padding-right: 2px; }
|
|
2226
|
+
.cx-nf-prefix { font-size: 12px; font-weight: 600; color: var(--muted-foreground); min-width: 14px; }
|
|
2227
|
+
.cx-nf-unit { font-size: 13px; color: var(--muted-foreground); padding-right: 2px; }
|
|
2228
|
+
.cx-nf-steps { gap: 0; padding-right: 4px; }
|
|
2229
|
+
.cx-nf-btn:disabled { opacity: .35; }
|
|
2230
|
+
.cx-vector { display: flex; flex-wrap: wrap; gap: 8px; width: fit-content; max-width: 100%; }
|
|
2231
|
+
.cx-vector .cx-nf { max-width: none; }
|
|
2232
|
+
/* ── FileInput (file-input.js) ── */
|
|
2233
|
+
.cx-file-host { display: flex; flex-direction: column; gap: 8px; width: 100%; max-width: 360px; }
|
|
2234
|
+
.cx-file-drop { aspect-ratio: auto; min-height: 132px; }
|
|
2235
|
+
.cx-file-drop[data-over] { border-color: var(--primary); background: color-mix(in srgb, var(--primary) 6%, transparent); }
|
|
2236
|
+
.cx-file-msg { text-align: left; margin: 0; color: var(--destructive); }
|
|
2237
|
+
.cx-file-msg:empty { display: none; }
|
|
2238
|
+
.cx-file-list:empty { display: none; }
|
|
2239
|
+
.cx-file-list { gap: 6px; }
|
|
2240
|
+
|
|
2241
|
+
/* ── Swatch (swatch.muten) ── */
|
|
2242
|
+
.cx-swatches-row { display: flex; flex-direction: row; flex-wrap: wrap; gap: 8px; }
|
|
2243
|
+
.cx-swatch { --s: 28px; width: var(--s); height: var(--s); flex: none; padding: 0; border-radius: calc(var(--radius) * .8); border: 1px solid color-mix(in srgb, var(--foreground) 12%, transparent); background: var(--bg); cursor: pointer; transition: box-shadow 150ms, scale 120ms; }
|
|
2244
|
+
.cx-swatch[data-size="sm"] { --s: 20px; border-radius: calc(var(--radius) * .6); }
|
|
2245
|
+
.cx-swatch[data-size="lg"] { --s: 36px; }
|
|
2246
|
+
.cx-swatch:hover { scale: 1.06; }
|
|
2247
|
+
.cx-swatch:active { scale: .94; }
|
|
2248
|
+
.cx-swatch[aria-pressed="true"] { box-shadow: 0 0 0 2px var(--background), 0 0 0 4px var(--selected, var(--ring)); }
|
|
2249
|
+
.cx-swatch:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--background), 0 0 0 4px var(--ring); }
|
|
2250
|
+
|
|
2251
|
+
/* ── Collapsible (collapsible.muten) ── */
|
|
2252
|
+
.cx-coll { display: flex; flex-direction: column; width: 100%; max-width: 420px; border: 1px solid var(--border); border-radius: var(--radius); }
|
|
2253
|
+
.cx-coll-trigger { display: flex; align-items: center; gap: 8px; width: 100%; padding: 10px 12px; border: 0; background: none; color: inherit; font: inherit; font-size: 14px; font-weight: 500; text-align: left; cursor: pointer; border-radius: var(--radius); }
|
|
2254
|
+
.cx-coll-trigger:hover { background: color-mix(in srgb, var(--muted) 60%, transparent); }
|
|
2255
|
+
.cx-coll-trigger:focus-visible { outline: none; box-shadow: 0 0 0 3px color-mix(in srgb, var(--ring) 50%, transparent); }
|
|
2256
|
+
.cx-coll-label { flex: 1; }
|
|
2257
|
+
.cx-coll-hint { font-size: 13px; font-weight: 400; color: var(--muted-foreground); }
|
|
2258
|
+
.cx-coll-hint:empty { display: none; }
|
|
2259
|
+
.cx-coll-trigger[aria-expanded="true"] .cx-acc-chev { rotate: 180deg; }
|
|
2260
|
+
.cx-coll .cx-acc-chev { width: 16px; height: 16px; color: var(--muted-foreground); transition: rotate 200ms ease; }
|
|
2261
|
+
.cx-coll-inner { padding: 0 12px 12px; display: flex; flex-direction: column; gap: 8px; }
|
|
2262
|
+
/* ── ScrollArea (scroll-area.muten) ── */
|
|
2263
|
+
.cx-scroll-area { display: block; max-height: var(--h, 18rem); overflow-y: auto; overflow-x: hidden; border-radius: var(--radius); }
|
|
2264
|
+
.cx-scroll-area[data-orientation="horizontal"] { max-height: none; overflow-x: auto; overflow-y: hidden; }
|
|
2265
|
+
/* ── Resizable (resizable.muten) ── */
|
|
2266
|
+
.cx-rz { display: flex; flex-direction: row; width: 100%; min-height: 200px; border: 1px solid var(--border); border-radius: calc(var(--radius) * 1.2); overflow: hidden; }
|
|
2267
|
+
.cx-rz[data-orientation="vertical"] { flex-direction: column; }
|
|
2268
|
+
.cx-rz-panel { min-width: 0; min-height: 0; overflow: auto; display: flex; flex-direction: column; }
|
|
2269
|
+
.cx-rz-handle { position: relative; flex: none; width: 1px; display: flex; align-items: center; justify-content: center; background: var(--border); cursor: col-resize; touch-action: none; outline: none; }
|
|
2270
|
+
.cx-rz-handle::after { content: ""; position: absolute; inset: 0 -4px; }
|
|
2271
|
+
.cx-rz[data-orientation="vertical"] > .cx-rz-handle { width: auto; height: 1px; cursor: row-resize; }
|
|
2272
|
+
.cx-rz[data-orientation="vertical"] > .cx-rz-handle::after { inset: -4px 0; }
|
|
2273
|
+
.cx-rz-handle:focus-visible, .cx-rz-handle[data-drag] { background: var(--ring); }
|
|
2274
|
+
.cx-rz-handle .cn-resizable-handle-icon { display: block; width: 4px; height: 24px; border-radius: 99px; background: var(--border); z-index: 1; }
|
|
2275
|
+
.cx-rz[data-orientation="vertical"] .cn-resizable-handle-icon { width: 24px; height: 4px; }
|
|
2276
|
+
.cx-rz-behavior { display: none; }
|
|
2277
|
+
/* ── Timeline (timeline.muten): the artifact's .cx-timeline on muten's Stacks ── */
|
|
2278
|
+
.cx-tl { display: flex; flex-direction: column; gap: 12px; padding-left: 4px; }
|
|
2279
|
+
.cx-tl-item { position: relative; display: flex; flex-direction: column; gap: 1px; padding-left: 18px; }
|
|
2280
|
+
.cx-tl-item::before { content: ""; position: absolute; left: 0; top: 6px; width: 8px; height: 8px; border-radius: 99px; background: var(--border); }
|
|
2281
|
+
.cx-tl-item:not(:last-child)::after { content: ""; position: absolute; left: 3.5px; top: 18px; bottom: -10px; width: 1px; background: var(--border); }
|
|
2282
|
+
.cx-tl-item[data-state="now"]::before { background: var(--selected, var(--primary)); box-shadow: 0 0 0 3px color-mix(in srgb, var(--selected, var(--primary)) 20%, transparent); }
|
|
2283
|
+
.cx-tl-item[data-state="now"] .cx-tl-title { font-weight: 600; }
|
|
2284
|
+
.cx-tl-item[data-state="next"] { opacity: .55; }
|
|
2285
|
+
.cx-tl-desc { margin: 0; font-size: 13px; color: var(--muted-foreground); }
|
|
2286
|
+
.cx-tl-desc:empty { display: none; }
|
|
2287
|
+
/* ── Stepper (stepper.muten): bars across, numbered dots down ── */
|
|
2288
|
+
.cx-stp { display: grid; grid-template-columns: repeat(var(--n, 3), minmax(0, 1fr)); gap: 6px; width: 100%; max-width: 480px; }
|
|
2289
|
+
.cx-stp-step { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
|
|
2290
|
+
.cx-stp-bar { height: 4px; }
|
|
2291
|
+
.cx-stp-bar > .cn-progress-indicator { width: 0; transition: width 260ms cubic-bezier(.22, 1, .36, 1); }
|
|
2292
|
+
.cx-stp-step[data-state="done"] .cx-stp-bar > .cn-progress-indicator, .cx-stp-step[data-state="now"] .cx-stp-bar > .cn-progress-indicator { width: 100%; }
|
|
2293
|
+
.cx-stp-dot, .cx-stp-desc { display: none; }
|
|
2294
|
+
.cx-stp-label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
2295
|
+
.cx-stp-step[data-state="now"] .cx-stp-label { color: var(--foreground); font-weight: 500; }
|
|
2296
|
+
.cx-stp[data-orientation="vertical"] { grid-template-columns: 1fr; gap: 0; max-width: 360px; }
|
|
2297
|
+
.cx-stp[data-orientation="vertical"] .cx-stp-step { flex-direction: row; align-items: flex-start; gap: 12px; position: relative; padding-bottom: 20px; }
|
|
2298
|
+
.cx-stp[data-orientation="vertical"] .cx-stp-step:not(:last-child)::after { content: ""; position: absolute; left: 13px; top: 30px; bottom: 2px; width: 2px; border-radius: 2px; background: var(--border); }
|
|
2299
|
+
.cx-stp[data-orientation="vertical"] .cx-stp-step[data-state="done"]:not(:last-child)::after { background: var(--primary); }
|
|
2300
|
+
.cx-stp[data-orientation="vertical"] .cx-stp-bar { display: none; }
|
|
2301
|
+
.cx-stp[data-orientation="vertical"] .cx-stp-dot { display: grid; place-items: center; flex: none; width: 28px; height: 28px; border-radius: 99px; border: 1px solid var(--border); background: var(--background); font-size: 13px; font-weight: 600; color: var(--muted-foreground); font-variant-numeric: tabular-nums; }
|
|
2302
|
+
.cx-stp-check { display: none; width: 14px; height: 14px; }
|
|
2303
|
+
.cx-stp[data-orientation="vertical"] [data-state="done"] .cx-stp-dot { background: var(--primary); border-color: var(--primary); color: var(--primary-foreground); }
|
|
2304
|
+
.cx-stp[data-orientation="vertical"] [data-state="done"] .cx-stp-num { display: none; }
|
|
2305
|
+
.cx-stp[data-orientation="vertical"] [data-state="done"] .cx-stp-check { display: block; }
|
|
2306
|
+
.cx-stp[data-orientation="vertical"] [data-state="now"] .cx-stp-dot { border-color: var(--selected, var(--primary)); color: var(--foreground); box-shadow: 0 0 0 3px color-mix(in srgb, var(--selected, var(--primary)) 18%, transparent); }
|
|
2307
|
+
.cx-stp[data-orientation="vertical"] .cx-stp-text { display: flex; flex-direction: column; gap: 2px; padding-top: 4px; }
|
|
2308
|
+
.cx-stp[data-orientation="vertical"] .cx-stp-label { white-space: normal; font-size: 14px; }
|
|
2309
|
+
.cx-stp[data-orientation="vertical"] .cx-stp-desc { display: block; margin: 0; font-size: 13px; color: var(--muted-foreground); }
|
|
2310
|
+
.cx-stp[data-orientation="vertical"] .cx-stp-desc:empty { display: none; }
|
|
2311
|
+
/* ── Code (code.js) ── */
|
|
2312
|
+
.cx-code { display: block; width: 100%; border: 1px solid var(--border); border-radius: calc(var(--radius) * 1.2); background: color-mix(in srgb, var(--muted) 45%, var(--background)); overflow: hidden; }
|
|
2313
|
+
.cx-code-bar { display: flex; align-items: center; justify-content: space-between; padding: 6px 8px 0 14px; font-size: 12px; color: var(--muted-foreground); font-family: "Geist Mono", ui-monospace, monospace; }
|
|
2314
|
+
.cx-code-pre { margin: 0; padding: 8px 14px 14px; overflow-x: auto; font: 13px/1.65 "Geist Mono", ui-monospace, monospace; }
|
|
2315
|
+
|
|
2316
|
+
/* ── a picker button inside an InputGroup (MoneyField's currency, PhoneField's country): it fills the group's
|
|
2317
|
+
height with an even 3px inset instead of overflowing it, and the input gives way so nothing spills ── */
|
|
2318
|
+
.cn-input-group-addon:has(> .cx-cc) { align-self: stretch; height: auto; padding: 3px !important; }
|
|
2319
|
+
.cn-input-group-addon > .cx-cc { height: 100%; min-height: 0; padding-inline: 8px; border-radius: calc(var(--radius) * .6); }
|
|
2320
|
+
.cn-input-group > .cn-input-group-input { min-width: 0; }
|
|
2321
|
+
/* rows and columns the kit's modules build (the artifact page called them pg-line / pg-stack) */
|
|
2322
|
+
.cx-line { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 8px; }
|
|
2323
|
+
.cx-line-start { justify-content: flex-start; }
|
|
2324
|
+
.cx-vline { display: flex; flex-direction: column; align-items: center; gap: 14px; }
|
|
2325
|
+
.cx-cc[data-mf-cur] { min-width: 3.75rem; }
|
|
2326
|
+
/* ImageUpload (dates.js): the zone, its line and its buttons, each with room around them */
|
|
2327
|
+
.cx-up-host { display: flex; flex-direction: column; gap: 10px; }
|
|
2328
|
+
.cx-up-host > .cx-drop-msg { font-size: 13px; line-height: 1.45; min-height: 0; }
|
|
2329
|
+
.cx-up-host > .cx-line:not(:has(> button:not([hidden]))) { display: none; }
|
|
2330
|
+
|
|
2331
|
+
/* ── the value bubble and the end labels are optional on every slider (scale-slider / range-slider / slider) ── */
|
|
2332
|
+
.cx-sl-host[data-bubble="off"] .cx-sl-bubble, .cx-mslider-host[data-bubble="off"] .mslider-bubble { display: none; }
|
|
2333
|
+
.cx-sl-host[data-bubble="off"] .cx-slider { margin-top: 6px; }
|
|
2334
|
+
.cx-mslider-host[data-bubble="off"] .mslider { padding-top: 6px; }
|
|
2335
|
+
.cx-sl-host[data-bubble="drag"] .cx-sl-bubble, .cx-mslider-host[data-bubble="drag"] .mslider-bubble { opacity: 0; scale: .9; transition: opacity 140ms ease, scale 140ms ease; }
|
|
2336
|
+
.cx-sl-host[data-bubble="drag"]:is(:active, :focus-within) .cx-sl-bubble, .cx-mslider-host[data-bubble="drag"]:is(:active, :focus-within) .mslider-bubble { opacity: 1; scale: 1; }
|
|
2337
|
+
.cx-sl-host[data-ends="off"] .cx-sl-scale { display: none; }
|
|
2338
|
+
|
|
2339
|
+
/* ── Field horizontal: the label on the left in one line; the control and its help (or error) stacked on the right ── */
|
|
2340
|
+
.style-nova .cn-field.cn-field-orientation-horizontal { display: grid; grid-template-columns: var(--field-label, 10rem) minmax(0, 1fr); column-gap: 20px; row-gap: 6px; align-items: start; }
|
|
2341
|
+
.style-nova .cn-field.cn-field-orientation-horizontal > .cn-label { grid-column: 1; grid-row: 1 / span 3; padding-top: 7px; white-space: nowrap; }
|
|
2342
|
+
.style-nova .cn-field.cn-field-orientation-horizontal > :not(.cn-label) { grid-column: 2; }
|
|
2343
|
+
|
|
2344
|
+
/* PasswordField (kit.password): the meter breathes under the field; the four bars are full, rounded segments */
|
|
2345
|
+
.cx-pwd-host .cx-pw-meter { margin-top: 10px; gap: 10px; }
|
|
2346
|
+
.cx-pwd-host .cx-pw-bars { gap: 6px; }
|
|
2347
|
+
.cx-pwd-host .cx-pw-bars .cn-progress { height: 6px; border-radius: 99px; overflow: hidden; }
|
|
2348
|
+
.cx-pwd-host .cx-pw-rules { gap: 8px; margin-top: 14px; }
|
|
2349
|
+
/* Empty keeps a readable measure instead of stretching across the page; VirtualList fills its container */
|
|
2350
|
+
.style-nova .cn-empty { width: 100%; max-width: 26rem; margin-inline: auto; }
|
|
2351
|
+
.cx-vl-host { display: block; width: 100%; }
|
|
2352
|
+
/* Stepper: the dot holds the number OR the check, never both (mu-icon's own display would win over a bare class) */
|
|
2353
|
+
.cx-stp .cx-stp-dot > .cx-stp-check { display: none; }
|
|
2354
|
+
.cx-stp[data-orientation="vertical"] .cx-stp-step[data-state="done"] .cx-stp-dot > .cx-stp-check { display: block; }
|
|
2355
|
+
.cx-stp[data-orientation="vertical"] .cx-stp-step[data-state="done"] .cx-stp-dot > .cx-stp-num { display: none; }
|
|
2356
|
+
|
|
2357
|
+
/* ── NavButton / NavBar (nav-button.muten): the «you are here» marker is chosen, the button is any Btn ── */
|
|
2358
|
+
.cx-navbar { display: flex; flex-direction: row; flex-wrap: wrap; align-items: center; gap: 4px; }
|
|
2359
|
+
.cx-navbar[data-orientation="vertical"] { flex-direction: column; align-items: stretch; width: 100%; max-width: 240px; }
|
|
2360
|
+
.cx-navbar[data-orientation="vertical"] > .cx-nav { justify-content: flex-start; }
|
|
2361
|
+
.cx-nav-label:empty { display: none; }
|
|
2362
|
+
.style-nova .cn-button.cx-nav[data-marker="fill"][aria-pressed="true"] { background: var(--selected-soft); color: var(--selected); }
|
|
2363
|
+
.cx-nav[data-marker="fill"]::after, .cx-nav[data-marker="none"]::after { display: none; }
|
|
2364
|
+
.style-nova .cn-button.cx-nav[data-marker="line"][aria-pressed="true"][aria-pressed] { background: transparent; color: var(--foreground); }
|
|
2365
|
+
.cx-nav[data-marker="line"][aria-pressed="true"]::after { left: 10px; right: 10px; bottom: 0; width: auto; height: 2px; margin: 0; border-radius: 2px; }
|
|
2366
|
+
.style-nova .cn-button.cx-nav[data-marker="none"][aria-pressed="true"][aria-pressed] { background: transparent; color: var(--foreground); font-weight: 600; }
|
|
2367
|
+
.cx-navbar[data-orientation="vertical"] > .cx-nav[data-marker="dot"][aria-pressed="true"]::after { left: auto; right: 10px; bottom: auto; top: 50%; margin: -2px 0 0; }
|
|
2368
|
+
.cx-vl-host .cx-pages-wrap { max-width: none; }
|
|
2369
|
+
.mu-stack.cx-car-view { display: block; width: 100%; } /* the track sizes its columns in % of its width: the view must be a block, not a shrink-to-fit row */
|
|
2370
|
+
/* KitWidget while its kit loads: the inbox and the assistant keep their final height with the skeleton shimmer */
|
|
2371
|
+
.cx-mx-host.cx-kw-wait:empty { display: block; height: 640px; border-radius: calc(var(--radius) * 1.6); background: linear-gradient(90deg, var(--sk-a) 0%, var(--sk-b) 50%, var(--sk-a) 100%); background-size: 200% 100%; animation: cx-sk 1.3s linear infinite; }
|
|
2372
|
+
.cx-bot.cx-kw-wait:empty { display: block; height: 520px; border-radius: calc(var(--radius) * 1.6); background: linear-gradient(90deg, var(--sk-a) 0%, var(--sk-b) 50%, var(--sk-a) 100%); background-size: 200% 100%; animation: cx-sk 1.3s linear infinite; }
|
|
2373
|
+
@media (max-width: 480px) { .cx-mx-host.cx-kw-wait:empty { height: 600px; } }
|
|
2374
|
+
/* Fundamentos (docs): the radius and shadow scales drawn with the real tokens */
|
|
2375
|
+
.cx-radii { display: flex; flex-wrap: wrap; gap: 16px; justify-content: center; }
|
|
2376
|
+
.cx-radius, .cx-shadow { display: grid; place-items: center; width: 112px; height: 80px; font-size: 12px; color: var(--muted-foreground); font-family: var(--font-mono); }
|
|
2377
|
+
.cx-radius { border: 1px solid var(--border); background: var(--muted); border-radius: calc(var(--radius) * var(--r, 1)); }
|
|
2378
|
+
.cx-shadow { border-radius: var(--radius); background: var(--card); border: 1px solid color-mix(in srgb, var(--border) 60%, transparent); }
|
|
2379
|
+
.cx-shadow[data-level="xs"] { box-shadow: 0 1px 2px rgb(0 0 0 / .05); }
|
|
2380
|
+
.cx-shadow[data-level="sm"] { box-shadow: 0 1px 3px rgb(0 0 0 / .08), 0 1px 2px rgb(0 0 0 / .04); }
|
|
2381
|
+
.cx-shadow[data-level="md"] { box-shadow: 0 6px 16px -6px rgb(0 0 0 / .16), 0 2px 4px -2px rgb(0 0 0 / .06); }
|
|
2382
|
+
.cx-shadow[data-level="lg"] { box-shadow: 0 18px 40px -12px rgb(0 0 0 / .25), 0 4px 10px -4px rgb(0 0 0 / .08); }
|
|
2383
|
+
|
|
2384
|
+
/* ── floating parts (kit/overlays.js): a trigger and a panel that rises to the top layer ── */
|
|
2385
|
+
.cx-ov { display: inline-flex; position: relative; }
|
|
2386
|
+
.cx-ov.cx-ov-zone { display: flex; width: 100%; }
|
|
2387
|
+
.cx-ov-trigger { display: inline-flex; }
|
|
2388
|
+
.cx-ov-zone > .cx-ov-trigger { display: flex; width: 100%; }
|
|
2389
|
+
.cx-ov-behavior { display: none; }
|
|
2390
|
+
.cx-ov-content[popover] { position: fixed; inset: auto; margin: 0; border: 0; overflow: visible; width: var(--w, auto); max-width: calc(100vw - 16px); color: var(--popover-foreground); }
|
|
2391
|
+
.cx-ov-content:not([popover]) { display: none; }
|
|
2392
|
+
.cx-ov-content[popover]:popover-open { display: flex; flex-direction: column; }
|
|
2393
|
+
/* menus: items are buttons laid out as rows; the label grows, the shortcut sits at the end */
|
|
2394
|
+
.cx-menu { gap: 0; padding: 4px; max-height: min(24rem, calc(100dvh - 32px)); overflow-y: auto; }
|
|
2395
|
+
.cx-menu-item { position: relative; display: flex; align-items: center; gap: 8px; width: 100%; min-height: 32px; padding: 6px 8px; border: 0; background: none; color: inherit; font: inherit; font-size: 14px; text-align: left; cursor: default; border-radius: calc(var(--radius) * .7); outline: none; }
|
|
2396
|
+
.cx-menu-item:focus, .cx-menu-item:focus-visible { background: var(--accent); color: var(--accent-foreground); }
|
|
2397
|
+
.cx-menu-item[data-variant="destructive"] { color: var(--destructive); }
|
|
2398
|
+
.cx-menu-item[data-variant="destructive"]:focus { background: color-mix(in srgb, var(--destructive) 10%, transparent); color: var(--destructive); }
|
|
2399
|
+
.cx-menu-item > .mu-icon { width: 16px; height: 16px; flex: none; color: var(--muted-foreground); }
|
|
2400
|
+
.cx-menu-item[data-variant="destructive"] > .mu-icon { color: var(--destructive); }
|
|
2401
|
+
.cx-menu-label { flex: 1; min-width: 0; }
|
|
2402
|
+
.cx-menu-item .cn-dropdown-menu-shortcut:empty { display: none; }
|
|
2403
|
+
.cx-menu-check { padding-right: 32px; }
|
|
2404
|
+
.cx-menu-mark, .cx-menu-dot { position: absolute; right: 10px; display: grid; place-items: center; width: 16px; height: 16px; }
|
|
2405
|
+
.cx-menu-check[aria-checked="false"] .cx-menu-mark { visibility: hidden; }
|
|
2406
|
+
.cx-menu-dot::after { content: ""; width: 7px; height: 7px; border-radius: 99px; background: currentColor; transform: scale(0); transition: transform 120ms ease; }
|
|
2407
|
+
.cx-menu-check[aria-checked="true"] .cx-menu-dot::after { transform: scale(1); }
|
|
2408
|
+
.cx-menu-group { display: flex; flex-direction: column; }
|
|
2409
|
+
.cx-menu .cn-dropdown-menu-separator { display: block; height: 1px; margin: 4px -4px; background: var(--border); }
|
|
2410
|
+
.cx-menu .cn-dropdown-menu-label { display: block; padding: 6px 8px 4px; font-size: 12px; font-weight: 500; color: var(--muted-foreground); }
|
|
2411
|
+
/* the context zone */
|
|
2412
|
+
.cx-ctx-zone { align-items: center; justify-content: center; min-height: 140px; border: 1.5px dashed var(--input); border-radius: calc(var(--radius) * 1.2); color: var(--muted-foreground); font-size: 14px; user-select: none; -webkit-touch-callout: none; }
|
|
2413
|
+
.cx-ctx-zone[data-open] { border-color: var(--ring); background: color-mix(in srgb, var(--muted) 40%, transparent); }
|
|
2414
|
+
/* menubar */
|
|
2415
|
+
.cx-menubar { display: flex; flex-direction: row; align-items: center; width: fit-content; }
|
|
2416
|
+
.cx-menubar .cn-menubar-trigger { border: 0; background: none; color: inherit; font: inherit; font-size: 14px; font-weight: 500; padding: 3px 8px; border-radius: calc(var(--radius) * .6); cursor: default; }
|
|
2417
|
+
.cx-menubar .cx-ov-trigger[data-open] .cn-menubar-trigger, .cx-menubar .cn-menubar-trigger:hover { background: var(--muted); }
|
|
2418
|
+
/* navigation menu */
|
|
2419
|
+
.cx-navmenu { display: flex; flex-direction: row; align-items: center; gap: 2px; }
|
|
2420
|
+
.cx-navmenu-trigger { display: inline-flex; align-items: center; gap: 4px; border: 0; background: none; color: inherit; font: inherit; font-size: 14px; font-weight: 500; text-decoration: none; padding: 6px 10px; border-radius: calc(var(--radius) * .8); cursor: pointer; }
|
|
2421
|
+
.cx-navmenu-trigger:hover, .cx-ov-trigger[data-open] .cx-navmenu-trigger { background: var(--muted); }
|
|
2422
|
+
.cx-navmenu-trigger .cn-navigation-menu-trigger-icon { width: 12px; height: 12px; transition: rotate 200ms ease; }
|
|
2423
|
+
.cx-ov-trigger[data-open] .cn-navigation-menu-trigger-icon { rotate: 180deg; }
|
|
2424
|
+
.cx-navmenu-panel[popover]:popover-open { display: grid; grid-template-columns: repeat(var(--cols, 2), minmax(0, 1fr)); gap: 4px; padding: 8px; border-radius: calc(var(--radius) * 1.2); background: var(--popover); box-shadow: 0 0 0 1px color-mix(in srgb, var(--foreground) 10%, transparent), 0 10px 30px -10px rgb(0 0 0 / .25); }
|
|
2425
|
+
.cx-navmenu-link { display: flex; flex-direction: column; align-items: flex-start; gap: 2px; padding: 10px; border-radius: calc(var(--radius) * .8); color: inherit; text-decoration: none; }
|
|
2426
|
+
.cx-navmenu-link:hover, .cx-navmenu-link:focus-visible { background: var(--muted); outline: none; }
|
|
2427
|
+
.cx-navmenu-title { font-size: 14px; font-weight: 500; }
|
|
2428
|
+
.cx-navmenu-desc { font-size: 13px; line-height: 1.4; color: var(--muted-foreground); }
|
|
2429
|
+
.cx-navmenu-desc:empty { display: none; }
|
|
2430
|
+
/* the panels' enter / exit (Nova's animate-in reads data-open / data-closed, which the kit sets) */
|
|
2431
|
+
.cx-ov-content[data-open] { animation: cx-ov-in 120ms cubic-bezier(.22, 1, .36, 1); }
|
|
2432
|
+
.cx-ov-content[data-closed] { animation: cx-ov-out 100ms ease forwards; }
|
|
2433
|
+
@keyframes cx-ov-in { from { opacity: 0; transform: scale(.96) translateY(var(--ov-dy, -4px)); } }
|
|
2434
|
+
@keyframes cx-ov-out { to { opacity: 0; transform: scale(.97); } }
|
|
2435
|
+
.cx-ov-content[data-side="top"] { --ov-dy: 4px; }
|
|
2436
|
+
@media (prefers-reduced-motion: reduce) { .cx-ov-content[data-open], .cx-ov-content[data-closed] { animation-duration: 1ms; } }
|
|
2437
|
+
|
|
2438
|
+
/* ── Modal mode sheet (sheet.muten): a full-height panel from a side, or full-width from the top/bottom ── */
|
|
2439
|
+
.cx-modal[data-mode="sheet"] { top: 0; bottom: 0; right: 0; width: min(26rem, calc(100% - 2rem)); max-height: none; border-radius: 0; overflow: hidden; transition: transform 300ms cubic-bezier(.32, .72, 0, 1); transform: translateX(100%); }
|
|
2440
|
+
.cx-modal[data-mode="sheet"][data-side="left"] { right: auto; left: 0; transform: translateX(-100%); }
|
|
2441
|
+
.cx-modal[data-mode="sheet"]:is([data-side="top"], [data-side="bottom"]) { left: 0; right: 0; width: 100%; height: auto; max-height: min(80dvh, 40rem); }
|
|
2442
|
+
.cx-modal[data-mode="sheet"][data-side="top"] { bottom: auto; transform: translateY(-100%); }
|
|
2443
|
+
.cx-modal[data-mode="sheet"][data-side="bottom"] { top: auto; transform: translateY(100%); }
|
|
2444
|
+
.cx-modal-root[data-open="true"] > .cx-modal[data-mode="sheet"] { transform: none; }
|
|
2445
|
+
.cx-modal[data-mode="sheet"] .cx-modal-body { flex: 1; }
|
|
2446
|
+
|
|
2447
|
+
/* ── Command (command.muten): search on top, the list scrolls under it ── */
|
|
2448
|
+
.cx-command { display: flex; flex-direction: column; width: 100%; max-width: 480px; border-radius: calc(var(--radius) * 1.2); border: 1px solid var(--border); background: var(--popover); overflow: hidden; }
|
|
2449
|
+
.cx-command-input { display: flex; flex-direction: row; align-items: center; gap: 8px; padding: 0 12px; border-bottom: 1px solid var(--border); }
|
|
2450
|
+
.cx-command-input > .mu-icon { width: 16px; height: 16px; flex: none; color: var(--muted-foreground); }
|
|
2451
|
+
.cx-command-input input { flex: 1; min-width: 0; height: 44px; border: 0; background: none; outline: none; font: inherit; font-size: 14px; color: inherit; }
|
|
2452
|
+
.cx-command-list { display: flex; flex-direction: column; max-height: 300px; overflow-y: auto; padding: 4px; }
|
|
2453
|
+
.cx-cmd-group { display: flex; flex-direction: column; padding: 2px 0; }
|
|
2454
|
+
.cx-cmd-group[hidden], .cx-cmd-item[hidden], .cx-cmd-sep[hidden], .cx-command-empty[hidden] { display: none; }
|
|
2455
|
+
.cx-cmd-label { padding: 6px 8px 4px; font-size: 12px; font-weight: 500; color: var(--muted-foreground); }
|
|
2456
|
+
.cx-cmd-item { display: flex; align-items: center; gap: 8px; min-height: 36px; padding: 6px 8px; border: 0; border-radius: calc(var(--radius) * .7); background: none; color: inherit; font: inherit; font-size: 14px; text-align: left; cursor: default; outline: none; }
|
|
2457
|
+
.cx-cmd-item > .mu-icon { width: 16px; height: 16px; flex: none; color: var(--muted-foreground); }
|
|
2458
|
+
.cx-cmd-item[data-selected] { background: var(--accent); color: var(--accent-foreground); }
|
|
2459
|
+
.cx-cmd-text { flex: 1; min-width: 0; }
|
|
2460
|
+
.cx-cmd-item .cn-command-shortcut { font-size: 12px; letter-spacing: .08em; color: var(--muted-foreground); }
|
|
2461
|
+
.cx-cmd-item .cn-command-shortcut:empty { display: none; }
|
|
2462
|
+
.cx-cmd-sep { display: block; height: 1px; margin: 4px -4px; background: var(--border); }
|
|
2463
|
+
.cx-command-empty { padding: 24px 8px; text-align: center; font-size: 14px; color: var(--muted-foreground); }
|
|
2464
|
+
.cx-cmd-behavior { display: none; }
|
|
2465
|
+
.cx-palette .cx-modal-body { padding: 0; }
|
|
2466
|
+
.cx-palette .cx-command { max-width: none; border: 0; border-radius: 0; background: transparent; }
|
|
2467
|
+
/* SplitButton: the chevron is a square joined to the main button */
|
|
2468
|
+
.cx-split-caret { width: 32px; padding: 0; }
|
|
2469
|
+
.cx-toaster-host { display: none; }
|
|
2470
|
+
.cx-tip-wrap { display: inline-flex; }
|
|
2471
|
+
.cx-ov-content[popover]:not(:popover-open) { display: none !important; } /* a closed panel must not take the click: muten's .mu-stack display beats the browser's own rule */
|
|
2472
|
+
|
|
2473
|
+
/* ── Breadcrumb / Pagination (links) ── */
|
|
2474
|
+
.cx-breadcrumb { display: block; }
|
|
2475
|
+
.cx-bc-list { display: flex; flex-direction: row; flex-wrap: wrap; align-items: center; gap: 6px; font-size: 14px; color: var(--muted-foreground); }
|
|
2476
|
+
.cx-bc-item { color: inherit; text-decoration: none; }
|
|
2477
|
+
a.cx-bc-item:hover { color: var(--foreground); }
|
|
2478
|
+
.cn-breadcrumb-page.cx-bc-item { color: var(--foreground); font-weight: 500; }
|
|
2479
|
+
.cx-bc-sep, .cx-bc-more { display: inline-grid; place-items: center; }
|
|
2480
|
+
.cx-bc-sep .mu-icon { width: 14px; height: 14px; }
|
|
2481
|
+
.cx-bc-more .mu-icon { width: 16px; height: 16px; }
|
|
2482
|
+
.cx-pl-row { display: flex; flex-direction: row; align-items: center; gap: 4px; }
|
|
2483
|
+
.cx-pl-more { display: inline-grid; place-items: center; width: 32px; height: 32px; color: var(--muted-foreground); }
|
|
2484
|
+
/* ── AppSidebar ── */
|
|
2485
|
+
.cx-sidebar { display: flex; width: 248px; flex: none; border-right: 1px solid var(--border); background: color-mix(in srgb, var(--muted) 35%, var(--background)); transition: width 200ms cubic-bezier(.22, 1, .36, 1); overflow: hidden; }
|
|
2486
|
+
.cx-sidebar[data-collapsed="true"] { width: 56px; }
|
|
2487
|
+
.cx-sb-inner { display: flex; flex-direction: column; width: 100%; gap: 4px; padding: 8px; }
|
|
2488
|
+
.cx-sb-head, .cx-sb-foot { display: flex; flex-direction: column; gap: 4px; }
|
|
2489
|
+
.cx-sb-foot { margin-top: auto; }
|
|
2490
|
+
.cx-sb-group { display: flex; flex-direction: column; gap: 2px; padding: 8px 0 4px; }
|
|
2491
|
+
.cx-sb-glabel { padding: 0 8px 4px; font-size: 12px; font-weight: 500; color: var(--muted-foreground); white-space: nowrap; }
|
|
2492
|
+
.cx-sb-glabel:empty { display: none; }
|
|
2493
|
+
.cx-sb-menu { display: flex; flex-direction: column; gap: 2px; }
|
|
2494
|
+
.cx-sb-item { display: flex; align-items: center; gap: 8px; width: 100%; height: 32px; padding: 0 8px; border: 0; border-radius: calc(var(--radius) * .7); background: none; color: inherit; font: inherit; font-size: 14px; text-align: left; cursor: pointer; white-space: nowrap; }
|
|
2495
|
+
.cx-sb-item:hover { background: var(--accent); }
|
|
2496
|
+
.cx-sb-item[data-active="true"] { background: var(--selected-soft); color: var(--selected); font-weight: 500; }
|
|
2497
|
+
.cx-sb-item > .mu-icon { width: 16px; height: 16px; flex: none; }
|
|
2498
|
+
.cx-sb-label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
|
|
2499
|
+
.cx-sb-count { min-width: 20px; height: 20px; padding: 0 6px; border-radius: 99px; background: var(--muted); font-size: 12px; font-variant-numeric: tabular-nums; display: inline-grid; place-items: center; }
|
|
2500
|
+
.cx-sb-count:empty { display: none; }
|
|
2501
|
+
.cx-sidebar[data-collapsed="true"] :is(.cx-sb-label, .cx-sb-count, .cx-sb-glabel) { display: none; }
|
|
2502
|
+
.cx-sidebar[data-collapsed="true"] .cx-sb-item { justify-content: center; padding: 0; }
|
|
2503
|
+
/* ── Message (message.muten): the kit's bubbles as parts ── */
|
|
2504
|
+
.cx-chat-msg[data-variant="received"] { align-self: flex-start; align-items: flex-start; }
|
|
2505
|
+
.cx-chat-msg[data-variant="sent"] { align-self: flex-end; align-items: flex-end; }
|
|
2506
|
+
.cx-chat-msg[data-variant="received"] .cx-chat-bubble { background: var(--background); box-shadow: 0 0 0 1px var(--border); border-bottom-left-radius: 4px; }
|
|
2507
|
+
.cx-chat-msg[data-variant="sent"] .cx-chat-bubble { background: var(--primary); color: var(--primary-foreground); border-bottom-right-radius: 4px; }
|
|
2508
|
+
.cx-chat-msg[data-variant="sent"] .cx-chat-bubble .cx-text { color: inherit; opacity: .8; }
|
|
2509
|
+
.cx-msg-bubble { display: flex; flex-direction: column; gap: 4px; }
|
|
2510
|
+
.cx-msg-body { display: flex; flex-direction: column; gap: 6px; font-size: 14px; line-height: 1.45; }
|
|
2511
|
+
.cx-chat-tag:empty { display: none; }
|
|
2512
|
+
.cx-tick { width: 14px; height: 14px; }
|
|
2513
|
+
.cx-tick[data-status="read"] { color: var(--info); }
|
|
2514
|
+
.cx-chat-msg[data-variant="sent"] .cx-tick[data-status="read"] { color: color-mix(in srgb, var(--info) 70%, var(--primary-foreground)); }
|
|
2515
|
+
.cx-chat-day { align-self: center; }
|
|
2516
|
+
.cx-msg-scroller { height: var(--h, 22rem); flex: none; width: 100%; max-width: 440px; border: 1px solid var(--border); border-radius: calc(var(--radius) * 1.4); }
|
|
2517
|
+
.cx-msg-behavior { display: none; }
|
|
2518
|
+
.cx-chat-img { display: block; width: 220px; max-width: 100%; aspect-ratio: 4 / 3; border-radius: calc(var(--radius) * .8); background: var(--bg, var(--muted)) center / cover; }
|
|
2519
|
+
/* ── Attachment ── */
|
|
2520
|
+
.cx-attach { display: flex; align-items: center; gap: 10px; width: 100%; max-width: 280px; padding: 8px 12px 8px 8px; border: 1px solid var(--border); border-radius: calc(var(--radius) * 1); background: var(--background); color: var(--foreground); text-decoration: none; }
|
|
2521
|
+
.cx-attach:hover { background: var(--accent); }
|
|
2522
|
+
.cx-attach-ic { display: grid; place-items: center; width: 36px; height: 36px; flex: none; border-radius: calc(var(--radius) * .7); background: var(--muted); color: var(--muted-foreground); }
|
|
2523
|
+
.cx-attach[data-kind="pdf"] .cx-attach-ic { background: color-mix(in srgb, var(--destructive) 12%, transparent); color: var(--destructive); }
|
|
2524
|
+
.cx-attach[data-kind="image"] .cx-attach-ic { background: var(--info-soft); color: var(--info); }
|
|
2525
|
+
.cx-attach[data-kind="sheet"] .cx-attach-ic { background: var(--success-soft); color: var(--success); }
|
|
2526
|
+
.cx-attach-ic .mu-icon { width: 18px; height: 18px; }
|
|
2527
|
+
.cx-attach-text { display: flex; flex-direction: column; min-width: 0; }
|
|
2528
|
+
.cx-attach-name { font-size: 14px; font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
2529
|
+
.cx-attach-size { font-size: 12px; color: var(--muted-foreground); }
|
|
2530
|
+
.cx-attach-size:empty { display: none; }
|
|
2531
|
+
|
|
2532
|
+
/* ── Estudio: Toolbar, StatusBar, ZoomControl, CanvasViewport, Inspector, TreeView, FolderPicker, SortableList ── */
|
|
2533
|
+
.cx-toolbar { display: inline-flex; flex-direction: row; align-items: center; gap: 4px; padding: 4px; border: 1px solid var(--border); border-radius: calc(var(--radius) * 1.1); background: var(--popover); box-shadow: 0 4px 14px -6px rgb(0 0 0 / .18); width: fit-content; }
|
|
2534
|
+
.cx-toolbar-group { display: flex; flex-direction: row; align-items: center; gap: 2px; }
|
|
2535
|
+
.cx-toolbar-sep { width: 1px; height: 20px; margin: 0 4px; background: var(--border); flex: none; }
|
|
2536
|
+
.cx-status { display: flex; flex-direction: row; align-items: center; gap: 16px; width: 100%; min-height: 28px; padding: 0 12px; border-top: 1px solid var(--border); background: color-mix(in srgb, var(--muted) 45%, var(--background)); font-size: 12px; color: var(--muted-foreground); font-variant-numeric: tabular-nums; }
|
|
2537
|
+
.cx-status-item { display: flex; flex-direction: row; align-items: center; gap: 6px; white-space: nowrap; }
|
|
2538
|
+
.cx-status-item .mu-icon { width: 13px; height: 13px; }
|
|
2539
|
+
.cx-status-spacer { flex: 1; }
|
|
2540
|
+
.cx-zoom { display: inline-flex; flex-direction: row; align-items: center; gap: 2px; padding: 2px; border: 1px solid var(--border); border-radius: var(--radius); background: var(--popover); width: fit-content; }
|
|
2541
|
+
.cx-zoom-value { min-width: 64px; font-variant-numeric: tabular-nums; }
|
|
2542
|
+
.cx-canvas { position: relative; display: block; width: 100%; height: var(--h, 360px); border: 1px solid var(--border); border-radius: calc(var(--radius) * 1.2); overflow: hidden; }
|
|
2543
|
+
.cx-canvas-host { position: absolute; inset: 0; display: block; }
|
|
2544
|
+
.cx-canvas-host canvas { display: block; width: 100%; height: 100%; cursor: grab; touch-action: none; }
|
|
2545
|
+
.cx-canvas-host canvas:active { cursor: grabbing; }
|
|
2546
|
+
.cx-canvas-over { position: absolute; inset: 12px; display: flex; flex-direction: column; align-items: flex-start; justify-content: space-between; gap: 8px; pointer-events: none; }
|
|
2547
|
+
.cx-canvas-over > * { pointer-events: auto; }
|
|
2548
|
+
.cx-insp { display: flex; flex-direction: column; width: 100%; max-width: 320px; border: 1px solid var(--border); border-radius: calc(var(--radius) * 1.2); background: var(--background); overflow: hidden; }
|
|
2549
|
+
.cx-insp-sec + .cx-insp-sec { border-top: 1px solid var(--border); }
|
|
2550
|
+
.cx-insp-head { display: flex; align-items: center; justify-content: space-between; width: 100%; padding: 10px 12px; border: 0; background: none; color: inherit; font: inherit; font-size: 13px; font-weight: 600; cursor: pointer; }
|
|
2551
|
+
.cx-insp-head:hover { background: color-mix(in srgb, var(--muted) 50%, transparent); }
|
|
2552
|
+
.cx-insp-head .cx-acc-chev { width: 14px; height: 14px; color: var(--muted-foreground); transition: rotate 200ms ease; }
|
|
2553
|
+
.cx-insp-head[aria-expanded="false"] .cx-acc-chev { rotate: -90deg; }
|
|
2554
|
+
.cx-insp-body { display: flex; flex-direction: column; gap: 8px; padding: 2px 12px 12px; }
|
|
2555
|
+
.cx-insp-row { display: grid; grid-template-columns: 84px minmax(0, 1fr); align-items: center; gap: 10px; }
|
|
2556
|
+
.cx-insp-label { font-size: 13px; color: var(--muted-foreground); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
2557
|
+
.cx-insp-ctl { display: flex; flex-direction: row; align-items: center; min-width: 0; }
|
|
2558
|
+
.cx-insp-ctl .cx-nf, .cx-insp-ctl .cx-vector { max-width: 100%; }
|
|
2559
|
+
.cx-tree-host { display: block; width: 100%; max-width: 320px; }
|
|
2560
|
+
.cx-tree { display: flex; flex-direction: column; padding: 4px; border: 1px solid var(--border); border-radius: calc(var(--radius) * 1.2); }
|
|
2561
|
+
.cx-tree-row { display: flex; align-items: center; gap: 6px; width: 100%; height: 30px; padding-right: 8px; border: 0; border-radius: calc(var(--radius) * .6); background: none; color: inherit; font: inherit; font-size: 13px; text-align: left; cursor: pointer; outline: none; }
|
|
2562
|
+
.cx-tree-row:hover { background: var(--accent); }
|
|
2563
|
+
.cx-tree-row:focus-visible { box-shadow: inset 0 0 0 2px var(--ring); }
|
|
2564
|
+
.cx-tree-row[aria-selected="true"] { background: var(--selected-soft); color: var(--selected); font-weight: 500; }
|
|
2565
|
+
.cx-tree-chev, .cx-tree-ic { display: inline-grid; place-items: center; width: 14px; height: 14px; flex: none; color: var(--muted-foreground); }
|
|
2566
|
+
.cx-tree-chev svg, .cx-tree-ic svg { width: 14px; height: 14px; }
|
|
2567
|
+
.cx-tree-row[aria-selected="true"] .cx-tree-ic { color: inherit; }
|
|
2568
|
+
.cx-tree-chev-none { visibility: hidden; }
|
|
2569
|
+
.cx-tree-label { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
2570
|
+
.cx-folder-host { display: flex; flex-direction: column; gap: 6px; }
|
|
2571
|
+
.cx-folder-btn[data-connected] { color: var(--selected); border-color: color-mix(in srgb, var(--selected) 40%, var(--border)); }
|
|
2572
|
+
.cx-folder-msg { text-align: left; margin: 0; }
|
|
2573
|
+
.cx-folder-msg:empty { display: none; }
|
|
2574
|
+
.cx-slist-host { display: block; width: 100%; max-width: 320px; }
|
|
2575
|
+
.cx-sl-anchor { display: none; }
|
|
2576
|
+
.cx-insp-sec { display: flex; flex-direction: column; }
|
|
2577
|
+
.cx-insp { max-width: 380px; }
|
|
2578
|
+
.cx-stp-text { display: flex; flex-direction: column; min-width: 0; }
|
|
2579
|
+
|
|
2580
|
+
/* ── Marketing: Pill, FeatureGrid, FeatureRows, BentoGallery, LogoCloud, StatBand, Pricing, GradientBlinds ── */
|
|
2581
|
+
.cx-pill { display: inline-flex; flex-direction: row; align-items: center; gap: 8px; width: fit-content; padding: 6px 14px; border: 1px solid var(--border); border-radius: 99px; background: var(--background); font-size: 13px; font-weight: 500; }
|
|
2582
|
+
.cx-pill .mu-icon { width: 15px; height: 15px; }
|
|
2583
|
+
.cx-pill[data-tone="brand"] { border-color: color-mix(in srgb, var(--selected) 30%, transparent); background: var(--selected-soft); color: var(--selected); }
|
|
2584
|
+
.cx-features { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 220px), 1fr)); gap: 16px; width: 100%; }
|
|
2585
|
+
@media (min-width: 900px) { .cx-features { grid-template-columns: repeat(var(--cols, 3), minmax(0, 1fr)); } }
|
|
2586
|
+
.cx-feature { display: flex; flex-direction: column; gap: 8px; padding: 20px; border: 1px solid var(--border); border-radius: calc(var(--radius) * 1.4); background: var(--card); }
|
|
2587
|
+
.cx-feature-ic { display: grid; place-items: center; width: 36px; height: 36px; border-radius: calc(var(--radius) * .8); background: var(--selected-soft); color: var(--selected); }
|
|
2588
|
+
.cx-feature-ic .mu-icon { width: 18px; height: 18px; }
|
|
2589
|
+
.cx-feature-t { margin: 4px 0 0; font-size: 16px; font-weight: 600; }
|
|
2590
|
+
.cx-feature-d { margin: 0; font-size: 14px; line-height: 1.55; color: var(--muted-foreground); }
|
|
2591
|
+
.cx-frows { display: flex; flex-direction: column; width: 100%; border-top: 1px solid var(--border); }
|
|
2592
|
+
.cx-frow { display: grid; grid-template-columns: 64px minmax(0, 4fr) minmax(0, 7fr); gap: 16px; align-items: baseline; padding: 20px 8px; border-bottom: 1px solid var(--border); }
|
|
2593
|
+
.cx-frow-i { font-family: var(--font-mono); font-size: 13px; color: var(--muted-foreground); }
|
|
2594
|
+
.cx-frow-t { margin: 0; font-size: 17px; font-weight: 600; }
|
|
2595
|
+
.cx-frow-d { margin: 0; font-size: 14px; line-height: 1.55; color: var(--muted-foreground); }
|
|
2596
|
+
@media (max-width: 640px) { .cx-frow { grid-template-columns: 40px minmax(0, 1fr); } .cx-frow-d { grid-column: 2; } }
|
|
2597
|
+
.cx-bento { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); grid-auto-rows: var(--row, 160px); gap: 12px; width: 100%; }
|
|
2598
|
+
.cx-bento-cell { grid-column: span var(--span, 2); grid-row: span var(--rows, 1); display: flex; flex-direction: column; justify-content: flex-end; gap: 4px; padding: 16px; border-radius: calc(var(--radius) * 1.4); background: var(--muted); overflow: hidden; }
|
|
2599
|
+
@media (max-width: 640px) { .cx-bento { grid-template-columns: 1fr; grid-auto-rows: auto; } .cx-bento-cell { grid-column: auto; grid-row: auto; min-height: 140px; } }
|
|
2600
|
+
.cx-logos { display: flex; flex-direction: row; flex-wrap: wrap; align-items: center; justify-content: center; gap: 16px 40px; width: 100%; }
|
|
2601
|
+
.cx-logo { display: flex; align-items: center; height: 28px; color: var(--muted-foreground); opacity: .7; filter: grayscale(1); transition: opacity 160ms, filter 160ms; font-size: 18px; font-weight: 700; letter-spacing: -0.02em; }
|
|
2602
|
+
.cx-logo:hover { opacity: 1; filter: none; color: var(--foreground); }
|
|
2603
|
+
.cx-logo img, .cx-logo .mu-image, .cx-logo .mu-icon { height: 100%; width: auto; }
|
|
2604
|
+
.cx-statband { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(50%, 160px), 1fr)); width: 100%; border-block: 1px solid var(--border); }
|
|
2605
|
+
.cx-statband-cell { display: flex; flex-direction: column; align-items: center; gap: 4px; padding: 24px 12px; text-align: center; }
|
|
2606
|
+
.cx-statband-cell + .cx-statband-cell { border-left: 1px solid var(--border); }
|
|
2607
|
+
.cx-statband-value { font-size: 34px; font-weight: 700; letter-spacing: -0.03em; font-variant-numeric: tabular-nums; }
|
|
2608
|
+
.cx-statband-label { font-size: 13px; color: var(--muted-foreground); }
|
|
2609
|
+
.cx-countup { display: inline; }
|
|
2610
|
+
.cx-pricing { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 230px), 1fr)); gap: 16px; width: 100%; align-items: stretch; }
|
|
2611
|
+
.cx-tier { position: relative; display: flex; flex-direction: column; gap: 16px; padding: 24px; border: 1px solid var(--border); border-radius: calc(var(--radius) * 1.6); background: var(--card); }
|
|
2612
|
+
.cx-tier[data-featured="on"] { border-color: var(--selected); box-shadow: 0 0 0 1px var(--selected), 0 18px 40px -20px color-mix(in srgb, var(--selected) 45%, transparent); }
|
|
2613
|
+
.cx-tier-badge { position: absolute; top: -11px; left: 24px; padding: 2px 10px; border-radius: 99px; background: var(--selected); color: var(--selected-foreground); font-size: 12px; font-weight: 600; }
|
|
2614
|
+
.cx-tier-head { display: flex; flex-direction: column; gap: 4px; }
|
|
2615
|
+
.cx-tier-name { font-size: 15px; font-weight: 600; }
|
|
2616
|
+
.cx-tier-desc { margin: 0; font-size: 13px; color: var(--muted-foreground); }
|
|
2617
|
+
.cx-tier-price { display: flex; flex-direction: row; align-items: baseline; gap: 4px; }
|
|
2618
|
+
.cx-tier-amount { font-size: 36px; font-weight: 700; letter-spacing: -0.03em; font-variant-numeric: tabular-nums; }
|
|
2619
|
+
.cx-tier-period { font-size: 14px; color: var(--muted-foreground); }
|
|
2620
|
+
.cx-tier-body { display: flex; flex-direction: column; gap: 10px; flex: 1; }
|
|
2621
|
+
.cx-tier-body > :last-child { margin-top: auto; }
|
|
2622
|
+
.cx-tier-feature { display: flex; flex-direction: row; align-items: center; gap: 8px; font-size: 14px; }
|
|
2623
|
+
.cx-tier-feature .mu-icon { width: 16px; height: 16px; color: var(--selected); flex: none; }
|
|
2624
|
+
.cx-blinds { position: absolute; inset: 0; z-index: 0; pointer-events: none; opacity: .8; }
|
|
2625
|
+
.cx-hero-blinds { position: relative; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 14px; min-height: 280px; width: 100%; padding: 40px 20px; border-radius: calc(var(--radius) * 1.6); overflow: hidden; text-align: center; }
|
|
2626
|
+
.cx-hero-blinds > :not(.cx-blinds) { position: relative; z-index: 1; }
|
|
2627
|
+
/* NavPill: sticky glass; it firms up as the page scrolls (scroll-driven animation; plain glass where unsupported) */
|
|
2628
|
+
.cx-navpill-wrap { position: sticky; top: 12px; z-index: var(--z-sticky, 20); display: flex; justify-content: center; width: 100%; padding: 0 12px; }
|
|
2629
|
+
.cx-navpill { display: flex; flex-direction: row; align-items: center; justify-content: space-between; gap: 16px; width: 100%; max-width: 64rem; padding: 8px 8px 8px 18px; border: 1px solid color-mix(in srgb, var(--border) 70%, transparent); border-radius: 99px; background: color-mix(in srgb, var(--background) 70%, transparent); -webkit-backdrop-filter: blur(14px) saturate(1.4); backdrop-filter: blur(14px) saturate(1.4); }
|
|
2630
|
+
.cx-navpill a:not(.cn-button) { color: var(--muted-foreground); text-decoration: none; font-size: 14px; }
|
|
2631
|
+
.cx-navpill a:not(.cn-button):hover { color: var(--foreground); }
|
|
2632
|
+
@supports (animation-timeline: scroll()) {
|
|
2633
|
+
.cx-navpill { animation: cx-navpill-firm linear both; animation-timeline: scroll(); animation-range: 0 120px; }
|
|
2634
|
+
@keyframes cx-navpill-firm { to { background: color-mix(in srgb, var(--background) 92%, transparent); box-shadow: 0 10px 30px -14px rgb(0 0 0 / .25); } }
|
|
2635
|
+
}
|
|
2636
|
+
|
|
2637
|
+
/* ── Big surfaces (a landing page, a sign-in): Btn and the fields share one taller scale, xl 44 · 2xl 52 ── */
|
|
2638
|
+
.style-nova .cn-button-size-xl { height: 44px; gap: 8px; padding-inline: 18px; border-radius: 10px; font-size: 15px; }
|
|
2639
|
+
.style-nova .cn-button-size-2xl { height: 52px; gap: 10px; padding-inline: 24px; border-radius: 12px; font-size: 15.5px; }
|
|
2640
|
+
.style-nova .cn-button-size-icon-xl { width: 44px; height: 44px; border-radius: 10px; }
|
|
2641
|
+
.style-nova .cn-button-size-icon-2xl { width: 52px; height: 52px; border-radius: 12px; }
|
|
2642
|
+
.style-nova :is(.cn-button-size-xl, .cn-button-size-2xl, .cn-button-size-icon-xl, .cn-button-size-icon-2xl) svg:not([class*="size-"]) { width: 18px; height: 18px; }
|
|
2643
|
+
/* a field takes its size on itself (Input/InputGroup size) or from any container around it (FieldSet), so the kit's
|
|
2644
|
+
own fields (PasswordField, PhoneField…) follow too */
|
|
2645
|
+
.style-nova :is(.cn-input:not(.cn-input-group-input), .cn-input-group):is([data-size="xl"], .cx-fieldset[data-fields="xl"] *) { height: 44px; border-radius: 10px; font-size: 15px; }
|
|
2646
|
+
.style-nova :is(.cn-input:not(.cn-input-group-input), .cn-input-group):is([data-size="2xl"], .cx-fieldset[data-fields="2xl"] *) { height: 52px; border-radius: 12px; font-size: 15.5px; }
|
|
2647
|
+
.style-nova .cn-input:not(.cn-input-group-input):is([data-size="xl"], [data-size="2xl"], .cx-fieldset[data-fields] *) { padding-inline: 14px; }
|
|
2648
|
+
.style-nova .cn-input-group:is([data-size="xl"], [data-size="2xl"], .cx-fieldset[data-fields] *) { padding-inline: 4px; }
|
|
2649
|
+
.style-nova .cn-input-group:is([data-size="xl"], [data-size="2xl"], .cx-fieldset[data-fields] *) .cn-input-group-input { font-size: inherit; height: 100%; }
|
|
2650
|
+
.style-nova .cn-input-group:is([data-size="xl"], [data-size="2xl"], .cx-fieldset[data-fields] *) .cn-input-group-addon { font-size: inherit; padding-inline: 10px 4px; }
|
|
2651
|
+
.style-nova .cx-fieldset[data-fields] .cn-label { font-size: 14px; font-weight: 600; }
|
|
2652
|
+
/* filled: the soft field of a landing (muted fill, no line); it turns to the page color with the ring on focus */
|
|
2653
|
+
.style-nova :is(.cn-input:not(.cn-input-group-input), .cn-input-group):is([data-variant="filled"], .cx-fieldset[data-look="filled"] *) { background: var(--muted); border-color: transparent; }
|
|
2654
|
+
.style-nova .cn-input:not(.cn-input-group-input):is([data-variant="filled"], .cx-fieldset[data-look="filled"] *):focus-visible,
|
|
2655
|
+
.style-nova .cn-input-group:is([data-variant="filled"], .cx-fieldset[data-look="filled"] *):focus-within { background: var(--background); border-color: var(--ring); }
|
|
2656
|
+
.style-nova .cn-input-group:is([data-variant="filled"], .cx-fieldset[data-look="filled"] *) .cn-input-group-input { background: transparent; }
|
|
2657
|
+
.cx-fieldset { display: flex; flex-direction: column; gap: 18px; }
|
|
2658
|
+
|
|
2659
|
+
/* ── Field pieces: FieldSeparator (a line with a word in the middle) and FieldHead (a label with an action beside it) ── */
|
|
2660
|
+
.cn-field-separator { position: relative; display: flex; align-items: center; justify-content: center; height: 20px; }
|
|
2661
|
+
.cn-field-separator > .cn-separator { position: absolute; left: 0; right: 0; top: 50%; }
|
|
2662
|
+
.cn-field-separator-content { position: relative; padding: 0 10px; background: var(--background); color: var(--muted-foreground); font-size: 13px; }
|
|
2663
|
+
.cn-field:has(> .cx-field-head) { flex-direction: column; }
|
|
2664
|
+
.cn-field:has(> .cx-field-head) > .cn-label:empty { display: none; }
|
|
2665
|
+
.cx-field-head { display: flex; flex-direction: row; justify-content: space-between; align-items: baseline; gap: 12px; }
|
|
2666
|
+
|
|
2667
|
+
/* ── NavPill look="tray": a tray (radius 18) in the muted fill at rest; once the page moves it turns to glass and the
|
|
2668
|
+
call to action (.cx-nav-cta) turns primary. On a phone the links, the language and «Entrar» (.cx-nav-hide-sm) fold
|
|
2669
|
+
into the menu button (.cx-nav-menu) and the call to action stays. ── */
|
|
2670
|
+
.cx-navpill-wrap[data-look="tray"] { top: 16px; padding: 0; }
|
|
2671
|
+
.cx-navpill[data-look="tray"] { max-width: 1008px; height: 60px; padding: 0 8px 0 20px; gap: 32px; justify-content: flex-start; border: 0; border-radius: 18px; background: var(--muted); box-shadow: none; -webkit-backdrop-filter: none; backdrop-filter: none; animation: none; }
|
|
2672
|
+
.cx-navpill .cx-nav-links { display: flex; flex-direction: row; align-items: center; gap: 26px; }
|
|
2673
|
+
.cx-navpill[data-look="tray"] a:not(.cn-button) { font-size: 14.5px; font-weight: 500; }
|
|
2674
|
+
.cx-navpill a[aria-current="page"] { color: var(--foreground); }
|
|
2675
|
+
.cx-navpill[data-look="tray"] .cx-nav-cta { height: 44px; padding: 0 18px; border-radius: 10px; font-size: 14.5px; background: var(--background); color: var(--foreground); box-shadow: 0 1px 2px rgb(11 11 13 / .06); }
|
|
2676
|
+
.cx-navpill .cx-nav-menu { display: none; }
|
|
2677
|
+
@supports (animation-timeline: scroll()) {
|
|
2678
|
+
.cx-navpill[data-look="tray"], .cx-navpill[data-look="tray"] .cx-nav-cta { animation-timeline: scroll(); animation-range: 0 64px; animation-fill-mode: both; animation-timing-function: linear; }
|
|
2679
|
+
.cx-navpill[data-look="tray"] { animation-name: cx-tray-glass; }
|
|
2680
|
+
.cx-navpill[data-look="tray"] .cx-nav-cta { animation-name: cx-tray-cta; }
|
|
2681
|
+
@keyframes cx-tray-glass { to { background: color-mix(in srgb, var(--background) 82%, transparent); -webkit-backdrop-filter: blur(20px) saturate(1.8); backdrop-filter: blur(20px) saturate(1.8); box-shadow: 0 0 0 1px rgb(11 11 13 / .06), 0 12px 32px -18px rgb(11 11 13 / .35); } }
|
|
2682
|
+
@keyframes cx-tray-cta { to { background: var(--primary); color: var(--primary-foreground); } }
|
|
2683
|
+
}
|
|
2684
|
+
@media (max-width: 640px) {
|
|
2685
|
+
.cx-navpill-wrap[data-look="tray"] { padding: 0 12px; top: 12px; }
|
|
2686
|
+
.cx-navpill[data-look="tray"] { height: 56px; gap: 8px; padding: 0 6px 0 16px; border-radius: 16px; }
|
|
2687
|
+
.cx-navpill[data-look="tray"] .cx-nav-links, .cx-navpill[data-look="tray"] .cx-nav-hide-sm { display: none; }
|
|
2688
|
+
.cx-navpill[data-look="tray"] .cx-nav-cta { height: 40px; padding: 0 14px; font-size: 14px; }
|
|
2689
|
+
.cx-navpill .cx-nav-menu { display: inline-flex; }
|
|
2690
|
+
}
|
|
2691
|
+
@media (prefers-reduced-motion: reduce) { .cx-navpill[data-look="tray"], .cx-navpill[data-look="tray"] .cx-nav-cta { animation: none; } }
|
|
2692
|
+
|
|
2693
|
+
/* ── PricingTier: was (the old price, struck), note (how it is billed) and lead (the line over the features) ── */
|
|
2694
|
+
.cx-tier-was { margin-left: 8px; color: var(--muted-foreground); text-decoration: line-through; font-size: 14px; }
|
|
2695
|
+
.cx-tier-note { margin: 0; color: var(--muted-foreground); font-size: 13px; line-height: 1.5; }
|
|
2696
|
+
.cx-tier-lead { color: var(--muted-foreground); font-size: 13px; font-weight: 500; }
|
|
2697
|
+
.cx-tab .cn-badge { margin-left: 6px; }
|
|
2698
|
+
/* a group row inside a table (the plans compared, by topic) */
|
|
2699
|
+
.cn-table-row[data-group="on"] > .cn-table-cell { padding-top: 20px; font-weight: 600; font-size: 12px; color: var(--muted-foreground); }
|
|
2700
|
+
|
|
2701
|
+
/* ── Stepper look="list": a numbered list for «how it works»: ruled rows, a number in a round chip (the current one
|
|
2702
|
+
filled), the step in strong type and its line under it. No bars, no checks. ── */
|
|
2703
|
+
.cx-stp[data-look="list"] { display: flex; flex-direction: column; gap: 0; max-width: none; }
|
|
2704
|
+
.cx-stp[data-look="list"] .cx-stp-step { flex-direction: row; align-items: flex-start; gap: 18px; padding: 20px 0; border-top: 1px solid var(--border); }
|
|
2705
|
+
.cx-stp[data-look="list"] .cx-stp-step:last-child { border-bottom: 1px solid var(--border); }
|
|
2706
|
+
.cx-stp[data-look="list"] .cx-stp-step::after, .cx-stp[data-look="list"] .cx-stp-bar, .cx-stp[data-look="list"] .cx-stp-check { display: none; }
|
|
2707
|
+
.cx-stp[data-look="list"] .cx-stp-dot { display: grid; place-items: center; flex: none; width: 32px; height: 32px; border-radius: 99px; background: var(--muted); color: var(--foreground); font-size: 14px; font-weight: 600; font-variant-numeric: tabular-nums; transition: background-color 200ms ease, color 200ms ease; }
|
|
2708
|
+
.cx-stp[data-look="list"] .cx-stp-dot { border: 0; box-shadow: none; }
|
|
2709
|
+
.cx-stp[data-look="list"] [data-state] .cx-stp-dot { border: 0; box-shadow: none; }
|
|
2710
|
+
.cx-stp[data-look="list"] [data-state="now"] .cx-stp-dot { background: var(--primary); color: var(--primary-foreground); }
|
|
2711
|
+
.cx-stp[data-look="list"] [data-state="done"] .cx-stp-dot { background: var(--muted); color: var(--foreground); }
|
|
2712
|
+
.cx-stp[data-look="list"] .cx-stp-num { display: block; }
|
|
2713
|
+
.cx-stp[data-look="list"] .cx-stp-text { display: flex; flex-direction: column; gap: 4px; padding-top: 4px; min-width: 0; }
|
|
2714
|
+
.cx-stp[data-look="list"] .cx-stp-label { white-space: normal; font-size: 18px; font-weight: 600; letter-spacing: -0.02em; color: var(--foreground); }
|
|
2715
|
+
.cx-stp[data-look="list"] .cx-stp-desc { display: block; margin: 0; font-size: 15px; line-height: 1.6; color: var(--muted-foreground); }
|
|
2716
|
+
|
|
2717
|
+
/* ── WordLine: a line of words set as type (who it is for), muted words joined by dots in ink; a strong word stands out ── */
|
|
2718
|
+
.cx-wordline { display: block; margin: 0; font-size: clamp(28px, 4vw, 44px); line-height: 1.25; letter-spacing: -0.04em; font-weight: 700; color: color-mix(in srgb, var(--muted-foreground) 55%, var(--background)); text-wrap: pretty; }
|
|
2719
|
+
.cx-word { display: inline-block; white-space: nowrap; }
|
|
2720
|
+
.cx-word[data-tone="strong"] { color: var(--foreground); }
|
|
2721
|
+
/* the dot rides after each word, so a line breaks after it and never starts with one */
|
|
2722
|
+
.cx-word:not(:last-child)::after { content: " ·"; color: var(--foreground); margin-right: 0.28em; }
|
|
2723
|
+
|
|
2724
|
+
/* ── Accordion size="lg": the questions of a landing page, taller rows and bigger type ── */
|
|
2725
|
+
.style-nova .cn-accordion[data-size="lg"] .cn-accordion-trigger { padding-block: 22px; font-size: 17px; font-weight: 600; letter-spacing: -0.01em; }
|
|
2726
|
+
.style-nova .cn-accordion[data-size="lg"] .cn-accordion-trigger .cx-acc-chev { width: 18px; height: 18px; }
|
|
2727
|
+
.style-nova .cn-accordion[data-size="lg"] .cn-accordion-content-inner { padding-bottom: 22px; font-size: 15.5px; line-height: 1.65; max-width: 680px; color: var(--muted-foreground); }
|
|
2728
|
+
|
|
2729
|
+
/* ── DeviceFrame: a phone or a browser window around a picture of a product ── */
|
|
2730
|
+
.cx-device { position: relative; display: flex; flex-direction: column; flex: none; overflow: hidden; background: var(--background); box-shadow: 0 0 0 1px var(--border), 0 30px 60px -34px rgb(11 11 13 / .45); }
|
|
2731
|
+
.cx-device[data-kind="phone"] { width: 280px; padding: 6px; border-radius: 44px; }
|
|
2732
|
+
.cx-device[data-kind="browser"] { width: 100%; }
|
|
2733
|
+
.cx-device[data-sized="true"] { width: var(--w); }
|
|
2734
|
+
.cx-device > :not(img) { flex: 1; min-height: 0; border-radius: inherit; }
|
|
2735
|
+
.cx-device[data-kind="phone"] > :not(img) { border-radius: 38px; }
|
|
2736
|
+
.cx-device[data-kind="browser"] > :not(img) { border-radius: 0 0 13px 13px; }
|
|
2737
|
+
.cx-device[data-kind="phone"] > img { display: block; width: 100%; height: auto; border-radius: 38px; object-fit: cover; object-position: top; }
|
|
2738
|
+
.cx-device[data-kind="browser"] { border-radius: 14px; padding-top: 36px; }
|
|
2739
|
+
.cx-device[data-kind="browser"]::before { content: ""; position: absolute; left: 0; right: 0; top: 0; height: 36px; border-bottom: 1px solid var(--border); background: radial-gradient(circle at 18px 18px, var(--border) 4px, transparent 4.5px), radial-gradient(circle at 34px 18px, var(--border) 4px, transparent 4.5px), radial-gradient(circle at 50px 18px, var(--border) 4px, transparent 4.5px), var(--muted); }
|
|
2740
|
+
.cx-device[data-kind="browser"] > img { display: block; width: 100%; height: auto; }
|
|
2741
|
+
.cx-device[data-crop="true"] { height: var(--h); }
|
|
2742
|
+
.cx-device[data-crop="true"] > img { height: 100%; object-fit: cover; object-position: top; }
|
|
2743
|
+
.cx-device[data-crop="true"]::after { content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 30%; background: linear-gradient(to bottom, transparent, var(--background)); pointer-events: none; }
|
|
2744
|
+
|
|
2745
|
+
/* ── LiveStack: news that keeps arriving; the newest in front, the older ones step back behind it ── */
|
|
2746
|
+
.cx-live { position: relative; display: block; width: 100%; max-width: 380px; height: var(--live-h, 200px); }
|
|
2747
|
+
.cx-live-card { position: absolute; left: 0; right: 0; top: 0; z-index: calc(10 - var(--i, 0)); display: flex; align-items: center; gap: 12px; padding: 14px 16px; border-radius: calc(var(--radius) * 1.6); border: 1px solid var(--border); background: var(--card); color: var(--card-foreground); box-shadow: 0 18px 36px -24px rgb(11 11 13 / .45); transform-origin: top center; transform: translateY(calc(var(--i, 0) * 14px)) scale(calc(1 - var(--i, 0) * 0.05)); opacity: calc(1 - var(--i, 0) * 0.28); transition: transform 560ms cubic-bezier(.23, 1, .32, 1), opacity 420ms ease, filter 420ms ease; }
|
|
2748
|
+
.cx-live-card[data-enter] { transform: translateY(-28px) scale(.96); opacity: 0; filter: blur(4px); }
|
|
2749
|
+
.cx-live-card + .cx-live-card + .cx-live-card + .cx-live-card { opacity: 0; }
|
|
2750
|
+
.cx-live-ic { display: grid; place-items: center; flex: none; width: 36px; height: 36px; border-radius: 10px; background: var(--muted); color: var(--foreground); }
|
|
2751
|
+
.cx-live-ic svg { width: 18px; height: 18px; }
|
|
2752
|
+
.cx-live-card[data-tone="ok"] .cx-live-ic { background: var(--success-soft); color: var(--success); }
|
|
2753
|
+
.cx-live-card[data-tone="wait"] .cx-live-ic { background: var(--warning-soft); color: var(--warning); }
|
|
2754
|
+
.cx-live-card[data-tone="info"] .cx-live-ic { background: var(--selected-soft); color: var(--selected); }
|
|
2755
|
+
.cx-live-tx { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1; }
|
|
2756
|
+
.cx-live-tx b { font-size: 14px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
2757
|
+
.cx-live-tx span { font-size: 13px; color: var(--muted-foreground); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
2758
|
+
.cx-live-card small { flex: none; align-self: flex-start; font-size: 12px; color: var(--muted-foreground); }
|
|
2759
|
+
@media (prefers-reduced-motion: reduce) { .cx-live-card { transition: none; } }
|
|
2760
|
+
|
|
2761
|
+
/* ── Press: anything you press gives way a little (0.97), so the page feels it heard you ── */
|
|
2762
|
+
.style-nova .cn-button { transition-property: color, background-color, border-color, box-shadow, transform; transition-duration: 160ms; transition-timing-function: cubic-bezier(.23, 1, .32, 1); }
|
|
2763
|
+
.style-nova .cn-button:active:not(:disabled) { transform: scale(0.97); }
|