@uplifted/react 0.22.6
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/dist/AddClientSheet.d.ts +39 -0
- package/dist/AddClientSheet.d.ts.map +1 -0
- package/dist/AddClientSheet.js +108 -0
- package/dist/AddClientSheet.js.map +1 -0
- package/dist/AiSettingsSheet.d.ts +20 -0
- package/dist/AiSettingsSheet.d.ts.map +1 -0
- package/dist/AiSettingsSheet.js +274 -0
- package/dist/AiSettingsSheet.js.map +1 -0
- package/dist/AssistantGrid.d.ts +30 -0
- package/dist/AssistantGrid.d.ts.map +1 -0
- package/dist/AssistantGrid.js +68 -0
- package/dist/AssistantGrid.js.map +1 -0
- package/dist/AttachmentPicker.d.ts +38 -0
- package/dist/AttachmentPicker.d.ts.map +1 -0
- package/dist/AttachmentPicker.js +173 -0
- package/dist/AttachmentPicker.js.map +1 -0
- package/dist/BulkGenerateSheet.d.ts +25 -0
- package/dist/BulkGenerateSheet.d.ts.map +1 -0
- package/dist/BulkGenerateSheet.js +65 -0
- package/dist/BulkGenerateSheet.js.map +1 -0
- package/dist/ChannelBadge.d.ts +16 -0
- package/dist/ChannelBadge.d.ts.map +1 -0
- package/dist/ChannelBadge.js +19 -0
- package/dist/ChannelBadge.js.map +1 -0
- package/dist/ChannelExplainer.d.ts +17 -0
- package/dist/ChannelExplainer.d.ts.map +1 -0
- package/dist/ChannelExplainer.js +25 -0
- package/dist/ChannelExplainer.js.map +1 -0
- package/dist/ClientList.d.ts +43 -0
- package/dist/ClientList.d.ts.map +1 -0
- package/dist/ClientList.js +76 -0
- package/dist/ClientList.js.map +1 -0
- package/dist/ClosedWindowBanner.d.ts +12 -0
- package/dist/ClosedWindowBanner.d.ts.map +1 -0
- package/dist/ClosedWindowBanner.js +15 -0
- package/dist/ClosedWindowBanner.js.map +1 -0
- package/dist/Composer.d.ts +49 -0
- package/dist/Composer.d.ts.map +1 -0
- package/dist/Composer.js +99 -0
- package/dist/Composer.js.map +1 -0
- package/dist/ComposerExtras.d.ts +15 -0
- package/dist/ComposerExtras.d.ts.map +1 -0
- package/dist/ComposerExtras.js +14 -0
- package/dist/ComposerExtras.js.map +1 -0
- package/dist/ConversationPane.d.ts +33 -0
- package/dist/ConversationPane.d.ts.map +1 -0
- package/dist/ConversationPane.js +126 -0
- package/dist/ConversationPane.js.map +1 -0
- package/dist/DeliveryReceipt.d.ts +7 -0
- package/dist/DeliveryReceipt.d.ts.map +1 -0
- package/dist/DeliveryReceipt.js +13 -0
- package/dist/DeliveryReceipt.js.map +1 -0
- package/dist/DraftGrid.d.ts +17 -0
- package/dist/DraftGrid.d.ts.map +1 -0
- package/dist/DraftGrid.js +43 -0
- package/dist/DraftGrid.js.map +1 -0
- package/dist/HostPreviewPane.d.ts +37 -0
- package/dist/HostPreviewPane.d.ts.map +1 -0
- package/dist/HostPreviewPane.js +106 -0
- package/dist/HostPreviewPane.js.map +1 -0
- package/dist/InlineDrafts.d.ts +14 -0
- package/dist/InlineDrafts.d.ts.map +1 -0
- package/dist/InlineDrafts.js +19 -0
- package/dist/InlineDrafts.js.map +1 -0
- package/dist/ItemActions.d.ts +23 -0
- package/dist/ItemActions.d.ts.map +1 -0
- package/dist/ItemActions.js +83 -0
- package/dist/ItemActions.js.map +1 -0
- package/dist/MediaAttachment.d.ts +7 -0
- package/dist/MediaAttachment.d.ts.map +1 -0
- package/dist/MediaAttachment.js +37 -0
- package/dist/MediaAttachment.js.map +1 -0
- package/dist/OfferSheet.d.ts +32 -0
- package/dist/OfferSheet.d.ts.map +1 -0
- package/dist/OfferSheet.js +84 -0
- package/dist/OfferSheet.js.map +1 -0
- package/dist/ProactiveOptionsSheet.d.ts +14 -0
- package/dist/ProactiveOptionsSheet.d.ts.map +1 -0
- package/dist/ProactiveOptionsSheet.js +58 -0
- package/dist/ProactiveOptionsSheet.js.map +1 -0
- package/dist/QuickSend.d.ts +15 -0
- package/dist/QuickSend.d.ts.map +1 -0
- package/dist/QuickSend.js +90 -0
- package/dist/QuickSend.js.map +1 -0
- package/dist/SegmentEditor.d.ts +25 -0
- package/dist/SegmentEditor.d.ts.map +1 -0
- package/dist/SegmentEditor.js +95 -0
- package/dist/SegmentEditor.js.map +1 -0
- package/dist/Sheet.d.ts +13 -0
- package/dist/Sheet.d.ts.map +1 -0
- package/dist/Sheet.js +64 -0
- package/dist/Sheet.js.map +1 -0
- package/dist/ThreadFeed.d.ts +27 -0
- package/dist/ThreadFeed.d.ts.map +1 -0
- package/dist/ThreadFeed.js +42 -0
- package/dist/ThreadFeed.js.map +1 -0
- package/dist/UpliftPanel.d.ts +40 -0
- package/dist/UpliftPanel.d.ts.map +1 -0
- package/dist/UpliftPanel.js +219 -0
- package/dist/UpliftPanel.js.map +1 -0
- package/dist/UpliftProvider.d.ts +15 -0
- package/dist/UpliftProvider.d.ts.map +1 -0
- package/dist/UpliftProvider.js +19 -0
- package/dist/UpliftProvider.js.map +1 -0
- package/dist/WaitingTemplateGhost.d.ts +12 -0
- package/dist/WaitingTemplateGhost.d.ts.map +1 -0
- package/dist/WaitingTemplateGhost.js +16 -0
- package/dist/WaitingTemplateGhost.js.map +1 -0
- package/dist/channels.d.ts +22 -0
- package/dist/channels.d.ts.map +1 -0
- package/dist/channels.js +31 -0
- package/dist/channels.js.map +1 -0
- package/dist/errors.d.ts +6 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +20 -0
- package/dist/errors.js.map +1 -0
- package/dist/host.d.ts +45 -0
- package/dist/host.d.ts.map +1 -0
- package/dist/host.js +35 -0
- package/dist/host.js.map +1 -0
- package/dist/icons.d.ts +48 -0
- package/dist/icons.d.ts.map +1 -0
- package/dist/icons.js +71 -0
- package/dist/icons.js.map +1 -0
- package/dist/index.d.ts +58 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/labels.d.ts +58 -0
- package/dist/labels.d.ts.map +1 -0
- package/dist/labels.js +86 -0
- package/dist/labels.js.map +1 -0
- package/dist/phone.d.ts +18 -0
- package/dist/phone.d.ts.map +1 -0
- package/dist/phone.js +27 -0
- package/dist/phone.js.map +1 -0
- package/dist/proactiveIcons.d.ts +6 -0
- package/dist/proactiveIcons.d.ts.map +1 -0
- package/dist/proactiveIcons.js +39 -0
- package/dist/proactiveIcons.js.map +1 -0
- package/dist/purposes.d.ts +19 -0
- package/dist/purposes.d.ts.map +1 -0
- package/dist/purposes.js +20 -0
- package/dist/purposes.js.map +1 -0
- package/dist/segments.d.ts +29 -0
- package/dist/segments.d.ts.map +1 -0
- package/dist/segments.js +75 -0
- package/dist/segments.js.map +1 -0
- package/dist/smsSegments.d.ts +28 -0
- package/dist/smsSegments.d.ts.map +1 -0
- package/dist/smsSegments.js +100 -0
- package/dist/smsSegments.js.map +1 -0
- package/dist/styles.d.ts +15 -0
- package/dist/styles.d.ts.map +1 -0
- package/dist/styles.js +545 -0
- package/dist/styles.js.map +1 -0
- package/dist/time.d.ts +14 -0
- package/dist/time.d.ts.map +1 -0
- package/dist/time.js +80 -0
- package/dist/time.js.map +1 -0
- package/dist/useAiSettings.d.ts +11 -0
- package/dist/useAiSettings.d.ts.map +1 -0
- package/dist/useAiSettings.js +21 -0
- package/dist/useAiSettings.js.map +1 -0
- package/dist/useBilling.d.ts +40 -0
- package/dist/useBilling.d.ts.map +1 -0
- package/dist/useBilling.js +155 -0
- package/dist/useBilling.js.map +1 -0
- package/dist/useBulkDrafts.d.ts +41 -0
- package/dist/useBulkDrafts.d.ts.map +1 -0
- package/dist/useBulkDrafts.js +112 -0
- package/dist/useBulkDrafts.js.map +1 -0
- package/dist/useClients.d.ts +16 -0
- package/dist/useClients.d.ts.map +1 -0
- package/dist/useClients.js +22 -0
- package/dist/useClients.js.map +1 -0
- package/dist/useDeliveryStatus.d.ts +7 -0
- package/dist/useDeliveryStatus.d.ts.map +1 -0
- package/dist/useDeliveryStatus.js +39 -0
- package/dist/useDeliveryStatus.js.map +1 -0
- package/dist/useDrafts.d.ts +19 -0
- package/dist/useDrafts.d.ts.map +1 -0
- package/dist/useDrafts.js +60 -0
- package/dist/useDrafts.js.map +1 -0
- package/dist/useInstructions.d.ts +9 -0
- package/dist/useInstructions.d.ts.map +1 -0
- package/dist/useInstructions.js +20 -0
- package/dist/useInstructions.js.map +1 -0
- package/dist/useLiveUpdates.d.ts +9 -0
- package/dist/useLiveUpdates.d.ts.map +1 -0
- package/dist/useLiveUpdates.js +48 -0
- package/dist/useLiveUpdates.js.map +1 -0
- package/dist/usePolling.d.ts +6 -0
- package/dist/usePolling.d.ts.map +1 -0
- package/dist/usePolling.js +31 -0
- package/dist/usePolling.js.map +1 -0
- package/dist/usePreviewDrafts.d.ts +15 -0
- package/dist/usePreviewDrafts.d.ts.map +1 -0
- package/dist/usePreviewDrafts.js +77 -0
- package/dist/usePreviewDrafts.js.map +1 -0
- package/dist/useProactiveOptions.d.ts +15 -0
- package/dist/useProactiveOptions.d.ts.map +1 -0
- package/dist/useProactiveOptions.js +39 -0
- package/dist/useProactiveOptions.js.map +1 -0
- package/dist/useSend.d.ts +16 -0
- package/dist/useSend.d.ts.map +1 -0
- package/dist/useSend.js +50 -0
- package/dist/useSend.js.map +1 -0
- package/dist/useStickToBottom.d.ts +12 -0
- package/dist/useStickToBottom.d.ts.map +1 -0
- package/dist/useStickToBottom.js +71 -0
- package/dist/useStickToBottom.js.map +1 -0
- package/dist/useThread.d.ts +26 -0
- package/dist/useThread.d.ts.map +1 -0
- package/dist/useThread.js +76 -0
- package/dist/useThread.js.map +1 -0
- package/dist/useWhatsAppWindow.d.ts +8 -0
- package/dist/useWhatsAppWindow.d.ts.map +1 -0
- package/dist/useWhatsAppWindow.js +22 -0
- package/dist/useWhatsAppWindow.js.map +1 -0
- package/package.json +36 -0
package/dist/styles.js
ADDED
|
@@ -0,0 +1,545 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Panel styles, injected once into the document by <UpliftPanel>. Scoped under `.uplift`.
|
|
3
|
+
* D15: every colour, font and radius is a `--u-*` custom property. Defaults below sit at
|
|
4
|
+
* zero specificity (`:where`) so a host overrides them with any ordinary rule, e.g.
|
|
5
|
+
* `.uplift { --u-bg: var(--card); --u-text: var(--foreground); }`.
|
|
6
|
+
* `--u-accent`/`--u-accent-ink` paint primary buttons (Send, Add client); `--u-highlight`/`--u-highlight-soft`
|
|
7
|
+
* paint emphasis (sparkle, draft labels, selected ring, focus, purpose icons) and default to the accent, so a
|
|
8
|
+
* host whose buttons are neutral and whose brand is a colour (PulseKit) can split them.
|
|
9
|
+
* D16: layout answers to the panel's own width through a container query, never the viewport.
|
|
10
|
+
*/
|
|
11
|
+
export const STYLE_ELEMENT_ID = "uplifted-react-styles";
|
|
12
|
+
export const upliftStyles = `
|
|
13
|
+
:where(.uplift){
|
|
14
|
+
--u-bg:#ffffff;--u-surface:#ffffff;--u-surface-2:#fafafa;--u-surface-3:#f4f4f5;
|
|
15
|
+
--u-text:#262626;--u-muted:#666666;--u-border:rgba(0,0,0,.08);
|
|
16
|
+
--u-accent:#0f8a63;--u-accent-soft:#e3f5ee;--u-accent-ink:#ffffff;--u-link:#0b6b4c;
|
|
17
|
+
--u-highlight:var(--u-accent);--u-highlight-soft:var(--u-accent-soft);
|
|
18
|
+
--u-gold:#c9971c;--u-gold-hi:#f7e2a0;--u-gold-ink:#8a6410;--u-gold-ink-hi:#c9971c;
|
|
19
|
+
--u-seg-l:88%;
|
|
20
|
+
--u-danger:#c10007;--u-warn:#bb4d00;--u-out:#eaf1ff;--u-out-ink:#12244d;
|
|
21
|
+
--u-font:-apple-system,BlinkMacSystemFont,"Segoe UI",Inter,sans-serif;--u-radius:10px;
|
|
22
|
+
}
|
|
23
|
+
:where(.uplift[data-theme="dark"],[data-theme="dark"] .uplift){
|
|
24
|
+
--u-bg:#111111;--u-surface:#111111;--u-surface-2:#0a0a0a;--u-surface-3:#1a1a1a;
|
|
25
|
+
--u-text:#f5f5f5;--u-muted:#9a9a9a;--u-border:rgba(255,255,255,.08);
|
|
26
|
+
--u-accent:#70d7b0;--u-accent-soft:#17342a;--u-accent-ink:#062a1e;--u-link:#70d7b0;
|
|
27
|
+
--u-gold:#d9a830;--u-gold-hi:#fff1b8;--u-gold-ink:#d9a830;--u-gold-ink-hi:#f3d47a;
|
|
28
|
+
--u-seg-l:26%;
|
|
29
|
+
--u-danger:#ff6467;--u-warn:#ffb900;--u-out:#1d2b4a;--u-out-ink:#e3ebff;
|
|
30
|
+
}
|
|
31
|
+
.uplift,.uplift *,.uplift *::before,.uplift *::after{box-sizing:border-box}
|
|
32
|
+
.uplift{font:15px/1.45 var(--u-font);color:var(--u-text);background:var(--u-bg);border:1px solid var(--u-border);border-radius:14px;overflow:hidden;container-type:inline-size;container-name:panel;position:relative;-webkit-font-smoothing:antialiased}
|
|
33
|
+
:where(.uplift) button{font:inherit;color:inherit;cursor:pointer}
|
|
34
|
+
:where(.uplift) button:disabled{cursor:not-allowed}
|
|
35
|
+
.uplift :focus-visible{outline:2px solid var(--u-highlight);outline-offset:2px;border-radius:6px}
|
|
36
|
+
.uplift h2,.uplift h3,.uplift h4,.uplift p{margin:0}
|
|
37
|
+
.u-sp{flex:1}
|
|
38
|
+
.u-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
|
|
39
|
+
.u-pill{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--u-border);background:var(--u-surface-2);border-radius:999px;padding:4px 10px;font-size:13px;color:var(--u-muted)}
|
|
40
|
+
.u-pill b{color:var(--u-text);font-weight:600}
|
|
41
|
+
.u-linkbtn{background:none;border:0;padding:4px 2px;color:var(--u-link);font-weight:600;text-decoration:underline;text-underline-offset:3px}
|
|
42
|
+
.u-split{display:grid;grid-template-columns:320px minmax(0,1fr);height:min(max(520px,62.5cqw),86vh)}
|
|
43
|
+
.u-split>*{min-height:0}
|
|
44
|
+
.u-list{overflow:hidden}
|
|
45
|
+
.u-pane{overflow:hidden}
|
|
46
|
+
.u-iconbtn{display:inline-grid;place-items:center;width:34px;height:34px;border:1px solid var(--u-border);background:var(--u-bg);border-radius:8px;color:var(--u-muted);padding:0}
|
|
47
|
+
.u-iconbtn:hover{color:var(--u-text)}
|
|
48
|
+
.u-iconbtn-pair{width:auto;padding:0 9px;display:inline-flex;align-items:center;gap:4px}
|
|
49
|
+
.u-ai-spark{display:inline-flex;color:var(--u-highlight)}
|
|
50
|
+
.u-iconbtn .u-ai-spark svg{width:14px;height:14px}
|
|
51
|
+
.u-iconbtn svg{width:16px;height:16px}
|
|
52
|
+
.u-iconbtn[aria-pressed="true"]{color:var(--u-text);background:var(--u-surface-2)}
|
|
53
|
+
.u-bulkbtn svg{width:14px;height:14px}
|
|
54
|
+
.uplift.u-full{position:fixed;inset:0;z-index:2147483000;border-radius:0;border:0;display:flex;flex-direction:column}
|
|
55
|
+
.uplift.u-full .u-split{flex:1;height:auto;min-height:0}
|
|
56
|
+
.u-back{display:none;border:1px solid var(--u-border);background:var(--u-bg);border-radius:8px;padding:6px 10px;font-size:16px;min-height:36px;align-items:center;flex:none}
|
|
57
|
+
.u-list{border-right:1px solid var(--u-border);display:flex;flex-direction:column;min-width:0}
|
|
58
|
+
/* inbox toolbar: native Uplift's collapsed search + segmented sort + Bulk generate */
|
|
59
|
+
.u-toolbar{display:flex;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid var(--u-border)}
|
|
60
|
+
.u-search{position:relative;flex:0 1 32px;min-width:32px;display:flex;align-items:center;cursor:pointer;transition:flex-basis .2s ease,flex-grow .2s ease}
|
|
61
|
+
.u-search-open{flex:1 1 140px;cursor:auto}
|
|
62
|
+
.u-search svg{position:absolute;left:9px;width:14px;height:14px;color:var(--u-muted);pointer-events:none}
|
|
63
|
+
.u-search input{width:100%;min-height:32px;padding:6px 10px 6px 30px;border-radius:999px;border:1px solid var(--u-border);background:var(--u-surface-2);font:inherit;font-size:13px;color:var(--u-text)}
|
|
64
|
+
.u-search:not(.u-search-open) input{cursor:pointer;padding-right:0}
|
|
65
|
+
.u-search:not(.u-search-open) input::placeholder{opacity:0}
|
|
66
|
+
.u-search input:focus{outline:none;border-color:var(--u-accent);background:var(--u-bg)}
|
|
67
|
+
.u-search input::-webkit-search-cancel-button{cursor:pointer}
|
|
68
|
+
.u-sortgroup{display:inline-flex;align-items:center;padding:2px;border-radius:999px;background:var(--u-surface-2);flex:none}
|
|
69
|
+
.u-sortgroup button{border:0;background:none;border-radius:999px;padding:4px 9px;font-size:12px;font-weight:600;color:var(--u-muted);min-height:28px;white-space:nowrap}
|
|
70
|
+
.u-sortgroup button:hover{color:var(--u-text)}
|
|
71
|
+
.u-sortgroup button[aria-pressed="true"]{background:var(--u-bg);color:var(--u-text);box-shadow:0 1px 2px rgba(0,0,0,.08),0 0 0 1px var(--u-border)}
|
|
72
|
+
.u-toolbar button.u-bulkbtn{margin-left:auto;display:inline-flex;align-items:center;gap:1px;border:0;border-radius:999px;background:none;color:var(--u-muted);padding:0 6px;min-height:32px;flex:none}
|
|
73
|
+
.u-toolbar button.u-bulkbtn:hover:not(:disabled){color:var(--u-accent);background:var(--u-surface-2)}
|
|
74
|
+
.u-toolbar button.u-bulkbtn:disabled{opacity:.45}
|
|
75
|
+
.u-rows{list-style:none;margin:0;padding:0;overflow:auto;flex:1;min-height:0}
|
|
76
|
+
.u-rows li{display:flex;flex-wrap:wrap;align-items:stretch;border-bottom:1px solid var(--u-border)}
|
|
77
|
+
.u-row-open{flex:1;min-width:0;text-align:left;border:0;background:transparent;padding:11px 12px;display:grid;grid-template-columns:36px minmax(0,1fr);gap:2px 10px;min-height:64px}
|
|
78
|
+
.u-av{grid-row:span 3;width:36px;height:36px;border-radius:999px;display:grid;place-items:center;font-size:13px;font-weight:700;color:#fff}
|
|
79
|
+
.u-av.u-av-sm{grid-row:auto;width:32px;height:32px}
|
|
80
|
+
.u-r-top{display:flex;gap:6px;align-items:baseline;min-width:0}
|
|
81
|
+
.u-r-name{font-weight:600;font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
|
|
82
|
+
.u-r-time{margin-left:auto;font-size:12.5px;color:var(--u-muted);flex:none}
|
|
83
|
+
.u-r-line{font-size:13.5px;color:var(--u-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
|
|
84
|
+
.u-r-tags{display:flex;flex-wrap:wrap;gap:4px}
|
|
85
|
+
.u-tag{font-size:12px;font-weight:600;border-radius:999px;padding:1px 8px;border:1px solid var(--u-border);color:var(--u-muted);background:var(--u-surface-2)}
|
|
86
|
+
.u-tag.u-need{color:var(--u-danger);border-color:color-mix(in srgb,var(--u-danger) 35%,transparent)}
|
|
87
|
+
.u-tag.u-ok{color:var(--u-link);border-color:color-mix(in srgb,var(--u-highlight) 35%,transparent)}
|
|
88
|
+
.u-tag.u-warn{color:var(--u-warn);border-color:color-mix(in srgb,var(--u-warn) 35%,transparent)}
|
|
89
|
+
.u-list-foot{padding:10px 12px;font-size:13px;color:var(--u-muted)}
|
|
90
|
+
.u-skel{height:12px;border-radius:6px;background:var(--u-surface-3);margin:6px 0}
|
|
91
|
+
.u-skel-row{padding:14px 12px;border-bottom:1px solid var(--u-border)}
|
|
92
|
+
.u-state{padding:22px 16px;display:flex;flex-direction:column;gap:8px;align-items:flex-start;font-size:14.5px;color:var(--u-muted)}
|
|
93
|
+
.u-state h3{font-size:16px;color:var(--u-text)}
|
|
94
|
+
.u-state p{max-width:52ch}
|
|
95
|
+
.u-pane{display:flex;flex-direction:column;min-width:0}
|
|
96
|
+
.u-pane-head{display:flex;align-items:center;gap:10px;padding:11px 16px;border-bottom:1px solid var(--u-border)}
|
|
97
|
+
.u-who{display:flex;flex-direction:column;min-width:0}
|
|
98
|
+
.u-who strong{font-size:15px}
|
|
99
|
+
.u-who small{font-size:13px;color:var(--u-muted)}
|
|
100
|
+
.u-chan{margin-left:auto;font-size:13px;color:var(--u-muted)}
|
|
101
|
+
.u-feed{flex:1;overflow:auto;padding:14px 16px;display:flex;flex-direction:column;gap:8px;background:var(--u-surface-2);min-height:200px}
|
|
102
|
+
.u-tpl-chip{display:inline-flex;align-items:center;gap:4px;margin-left:6px;border:1px solid var(--u-border);border-radius:999px;padding:0 7px;font-size:11px;color:var(--u-muted);background:var(--u-bg);min-height:18px}
|
|
103
|
+
.u-bub.u-tpl-shown{opacity:.85;border:1px dashed color-mix(in srgb,var(--u-out-ink) 50%,transparent)}
|
|
104
|
+
.u-day{align-self:center;font-size:12px;color:var(--u-muted);background:var(--u-bg);border:1px solid var(--u-border);padding:2px 10px;border-radius:999px}
|
|
105
|
+
.u-older{align-self:center;border:1px solid var(--u-border);background:var(--u-bg);border-radius:999px;padding:5px 12px;font-size:13px;color:var(--u-muted);min-height:32px}
|
|
106
|
+
.u-ev{align-self:center;max-width:92%;display:flex;gap:8px;align-items:flex-start;font-size:13.5px;background:var(--u-bg);border:1px solid var(--u-border);border-radius:10px;padding:8px 11px}
|
|
107
|
+
.u-ev svg{width:16px;height:16px;flex:none;margin-top:2px;color:var(--u-muted)}
|
|
108
|
+
.u-ev b{font-weight:600}
|
|
109
|
+
.u-ev .u-meta{color:var(--u-muted);font-size:12.5px}
|
|
110
|
+
.u-bub{max-width:78%;padding:8px 12px;border-radius:14px;font-size:14.5px;white-space:pre-wrap;overflow-wrap:anywhere}
|
|
111
|
+
.u-bub.u-in{align-self:flex-start;background:var(--u-bg);border:1px solid var(--u-border);border-bottom-left-radius:4px}
|
|
112
|
+
.u-bub.u-out{align-self:flex-end;background:var(--u-out);color:var(--u-out-ink);border-bottom-right-radius:4px}
|
|
113
|
+
.u-bmeta{font-size:12px;color:var(--u-muted)}
|
|
114
|
+
.u-bmeta.u-r{align-self:flex-end}
|
|
115
|
+
/* ---- Composer footer (port of native ChatPage footer) ---- */
|
|
116
|
+
.u-composer{display:flex;flex-direction:column;gap:8px;padding:10px 16px 12px;background:var(--u-surface-2);border-top:1px solid var(--u-border)}
|
|
117
|
+
.u-composer>*:empty{display:none}
|
|
118
|
+
.u-rail{align-self:center;display:inline-flex;align-items:center;gap:6px;border:0;background:transparent;color:var(--u-muted);font-size:12px;padding:2px 10px;border-radius:999px;min-height:24px}
|
|
119
|
+
.u-rail:hover{color:var(--u-text);background:var(--u-surface-3)}
|
|
120
|
+
.u-rail svg{width:14px;height:14px}
|
|
121
|
+
.u-extras-wrap{position:relative;display:flex;flex-direction:column}
|
|
122
|
+
.u-extras-wrap>.u-rail{align-self:flex-end}
|
|
123
|
+
.u-extras-wrap>.u-rail[aria-expanded="true"]{position:absolute;top:0;right:0;z-index:1}
|
|
124
|
+
.u-extras-wrap:has(>.u-rail[aria-expanded="true"]) .u-ag-h{padding-right:34px}
|
|
125
|
+
.u-extras{display:contents}
|
|
126
|
+
.u-extras-off{display:none}
|
|
127
|
+
/* draft grid (ComposerAssistant) */
|
|
128
|
+
.u-ag{display:flex;flex-direction:column;gap:6px}
|
|
129
|
+
.u-ag-h{display:flex;align-items:center;gap:2px}
|
|
130
|
+
.u-ag-toggle{display:inline-flex;align-items:center;gap:8px;padding:4px 8px;border:0;background:transparent;color:var(--u-muted);font-size:12px;font-weight:600;border-radius:6px;min-height:28px}
|
|
131
|
+
.u-ag-toggle:hover{background:var(--u-surface-3);color:var(--u-text)}
|
|
132
|
+
.u-ag-spark{display:inline-flex;color:var(--u-highlight)}.u-ag-spark svg{width:12px;height:12px}
|
|
133
|
+
.u-ag-label{letter-spacing:.02em}
|
|
134
|
+
.u-ag-chev{display:inline-flex;color:var(--u-muted);transition:transform .15s}.u-ag-chev svg{width:14px;height:14px}
|
|
135
|
+
.u-ag-chev-open{transform:rotate(180deg)}
|
|
136
|
+
.u-ag-by{font-size:12px;color:var(--u-muted);margin-left:6px}
|
|
137
|
+
.u-ag-regen{display:inline-flex;align-items:center;justify-content:center;padding:4px;border:0;background:transparent;color:var(--u-muted);border-radius:6px;min-width:24px;min-height:24px}
|
|
138
|
+
.u-ag-regen svg{width:11px;height:11px}
|
|
139
|
+
.u-ag-regen:hover:not(:disabled){color:var(--u-highlight);background:var(--u-surface-3)}
|
|
140
|
+
.u-ag-regen:disabled{opacity:.5}
|
|
141
|
+
.u-ag-spinning svg{animation:u-spin 1s linear infinite}
|
|
142
|
+
@keyframes u-spin{to{transform:rotate(360deg)}}
|
|
143
|
+
.u-ag-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
|
|
144
|
+
.u-ag-cell{position:relative;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:2px;min-height:56px;padding:10px 12px;background:var(--u-surface-2);border:1px solid transparent;border-radius:var(--u-radius);color:var(--u-text);text-align:left;transition:background .15s,transform .15s}
|
|
145
|
+
.u-ag-cell:hover:not(:disabled){background:var(--u-bg)}
|
|
146
|
+
/* Gold shimmer ring on finished drafts (Ian, 2026-10-11): a gradient pseudo-element masked to the edge. Reduced motion leaves a still ring. */
|
|
147
|
+
.u-ag-cell:not(.u-ag-loading)::before{content:"";position:absolute;inset:-1px;border-radius:calc(var(--u-radius) + 1px);padding:1.5px;pointer-events:none;background:linear-gradient(110deg,var(--u-gold) 0%,var(--u-gold-hi) 25%,var(--u-gold) 50%,var(--u-gold-hi) 75%,var(--u-gold) 100%);background-size:250% 100%;animation:u-shimmer 3.2s linear infinite;-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);mask-composite:exclude}
|
|
148
|
+
@keyframes u-shimmer{from{background-position:0% 50%}to{background-position:250% 50%}}
|
|
149
|
+
.u-ag-cell[aria-checked="true"]{box-shadow:0 0 0 2px var(--u-highlight)}
|
|
150
|
+
.u-ag-cell[aria-checked="true"]::before{display:none}
|
|
151
|
+
.u-ag-lab{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:600;color:var(--u-highlight);text-transform:uppercase;letter-spacing:.04em}
|
|
152
|
+
.u-ag-pencil{display:inline-flex;opacity:.6}.u-ag-pencil svg{width:10px;height:10px}
|
|
153
|
+
.u-ag-txt{font-size:14px;line-height:1.35;color:var(--u-text);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;word-break:break-word}
|
|
154
|
+
.u-ag-loading{overflow:hidden;cursor:default;pointer-events:none;justify-content:center;align-items:center;border-color:var(--u-border)}
|
|
155
|
+
.u-ag-loading-txt{position:relative;z-index:1;font-size:12px;color:var(--u-muted)}
|
|
156
|
+
.u-ag-shimmer{position:absolute;inset:0;background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.55) 50%,transparent 100%);animation:u-ag-sheen 1.4s infinite;transform:translateX(-100%)}
|
|
157
|
+
@keyframes u-ag-sheen{0%{transform:translateX(-100%)}100%{transform:translateX(100%)}}
|
|
158
|
+
.u-ag-empty{font-size:12.5px;color:var(--u-muted);padding:6px 0;display:flex;gap:10px;align-items:center;flex-wrap:wrap}
|
|
159
|
+
.u-ag-foot{font-size:12.5px;color:var(--u-muted);margin:0}
|
|
160
|
+
/* attachments */
|
|
161
|
+
.u-attach-row{align-items:center;gap:8px;flex-wrap:wrap}
|
|
162
|
+
.u-limits{font-size:12px;color:var(--u-muted)}
|
|
163
|
+
.u-limits-warn{color:var(--u-warn)}
|
|
164
|
+
.u-chips{display:flex;flex-wrap:wrap;gap:8px;padding:4px 0}
|
|
165
|
+
.u-chip{display:inline-flex;align-items:center;gap:6px;max-width:240px;padding:4px 8px;border-radius:999px;background:var(--u-bg);border:1px solid var(--u-border);font-size:12px;color:var(--u-muted)}
|
|
166
|
+
.u-chip svg{width:13px;height:13px;flex:none}
|
|
167
|
+
.u-chip-err{border-color:var(--u-danger);color:var(--u-danger)}
|
|
168
|
+
.u-chip-errtxt{font-size:10px}
|
|
169
|
+
.u-chip-thumb{width:22px;height:22px;object-fit:cover;border-radius:5px}
|
|
170
|
+
.u-chip-name{max-width:110px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
|
171
|
+
.u-chip-x{display:inline-flex;align-items:center;border:0;background:none;color:inherit;padding:2px;min-height:0}
|
|
172
|
+
.u-chip-x svg{width:12px;height:12px}
|
|
173
|
+
.u-spin{animation:u-spin 1s linear infinite}
|
|
174
|
+
.u-rec{display:flex;align-items:center;gap:8px;padding:6px 10px;border-radius:9px;background:var(--u-bg);font-size:12px;color:var(--u-muted)}
|
|
175
|
+
.u-rec-dot{width:8px;height:8px;border-radius:50%;background:#ff3b30;animation:u-rec-pulse 1.2s ease-in-out infinite}
|
|
176
|
+
@keyframes u-rec-pulse{0%,100%{opacity:1}50%{opacity:.35}}
|
|
177
|
+
.u-rec-btn{display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--u-border);background:var(--u-bg);color:var(--u-text);border-radius:999px;width:28px;height:28px;min-height:0;padding:0}
|
|
178
|
+
.u-rec-btn svg{width:14px;height:14px}
|
|
179
|
+
.u-rec-done{background:var(--u-accent);color:var(--u-accent-ink);border-color:var(--u-accent)}
|
|
180
|
+
.u-sms-note{font-size:12px;color:var(--u-warn)}
|
|
181
|
+
/* editor row: + button, pill with the editor and the inline send/✨ */
|
|
182
|
+
.u-c-row{display:flex;align-items:flex-end;gap:8px;width:100%}
|
|
183
|
+
.u-attach-wrap{position:relative;flex:none}
|
|
184
|
+
.u-attach-btn{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;min-height:0;padding:0;margin-bottom:3px;border:1px solid var(--u-border);border-radius:999px;background:var(--u-bg);color:var(--u-muted);transition:color .15s,background .15s}
|
|
185
|
+
.u-attach-btn svg{width:18px;height:18px}
|
|
186
|
+
.u-attach-btn:hover:not(:disabled){color:var(--u-highlight);background:var(--u-highlight-soft)}
|
|
187
|
+
.u-attach-btn:disabled{opacity:.45}
|
|
188
|
+
.u-pill{position:relative;flex:1;min-width:0;display:flex;align-items:flex-end;gap:6px;background:var(--u-bg);border:1px solid var(--u-border);border-radius:14px;padding:4px 4px 4px 8px}
|
|
189
|
+
.u-pill-grow{flex:1;min-width:0}
|
|
190
|
+
.u-pill .u-editor{border:0;background:transparent;border-radius:0;padding:6px 4px;min-height:38px;max-height:220px;resize:none}
|
|
191
|
+
.u-pill .u-editor:focus{outline:none}
|
|
192
|
+
.u-pill:focus-within{border-color:var(--u-highlight)}
|
|
193
|
+
/* Locked pill (stock intro, nothing to edit): gold shimmer ring like the draft cells. Reduced motion leaves a still ring. */
|
|
194
|
+
.u-pill-locked{border-color:transparent}
|
|
195
|
+
.u-pill-locked::before{content:"";position:absolute;inset:-1px;border-radius:15px;padding:1.5px;pointer-events:none;background:linear-gradient(110deg,var(--u-gold) 0%,var(--u-gold-hi) 25%,var(--u-gold) 50%,var(--u-gold-hi) 75%,var(--u-gold) 100%);background-size:250% 100%;animation:u-shimmer 3.2s linear infinite;-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);mask-composite:exclude}
|
|
196
|
+
.u-pill-locked:focus-within{border-color:transparent}
|
|
197
|
+
.u-editor-locked{cursor:default;caret-color:transparent}
|
|
198
|
+
.u-send-btn{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;min-height:0;padding:0;flex:none;border-radius:999px;border:0;background:var(--u-accent);color:var(--u-accent-ink);transition:transform .15s,opacity .15s}
|
|
199
|
+
.u-send-btn svg{width:15px;height:15px;stroke:var(--u-accent-ink)}
|
|
200
|
+
.u-send-btn:hover:not(:disabled){transform:translateY(-1px)}
|
|
201
|
+
.u-send-btn:disabled{opacity:.4;cursor:not-allowed}
|
|
202
|
+
.u-gen-btn{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;min-height:0;padding:0;flex:none;border:0;border-radius:999px;background:transparent;color:var(--u-highlight);transition:background .15s}
|
|
203
|
+
.u-gen-btn svg{width:16px;height:16px}
|
|
204
|
+
.u-gen-btn:hover:not(:disabled){background:var(--u-highlight-soft)}
|
|
205
|
+
.u-gen-btn:disabled{opacity:.4}
|
|
206
|
+
.u-menu-backdrop{position:fixed;inset:0;z-index:40}
|
|
207
|
+
.u-menu{position:absolute;bottom:calc(100% + 6px);z-index:41;display:flex;flex-direction:column;min-width:150px;padding:4px;border-radius:12px;background:var(--u-bg);border:1px solid var(--u-border);box-shadow:0 10px 30px rgba(0,0,0,.18)}
|
|
208
|
+
.u-menu-left{left:0}.u-menu-right{right:0}
|
|
209
|
+
.u-menu-title{padding:6px 12px 4px;font-size:11.5px;font-weight:600;color:var(--u-muted)}
|
|
210
|
+
.u-menu-titlerow{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:4px 6px 2px 0}
|
|
211
|
+
.u-menu-titlerow .u-menu-title{padding:2px 12px 2px}
|
|
212
|
+
.u-menu-cfg{display:inline-flex;align-items:center;justify-content:center;padding:4px;min-width:24px;min-height:24px;border:0;background:none;color:var(--u-muted);border-radius:6px}
|
|
213
|
+
.u-menu-cfg svg{width:13px;height:13px}
|
|
214
|
+
.u-menu-cfg:hover{color:var(--u-text);background:var(--u-surface-3)}
|
|
215
|
+
/* proactive options editor */
|
|
216
|
+
.u-po-help{font-size:13.5px;color:var(--u-muted);margin:0 0 10px}
|
|
217
|
+
.u-po-list{display:flex;flex-direction:column;gap:10px}
|
|
218
|
+
.u-po-row{border:1px solid var(--u-border);border-radius:12px;padding:10px;display:flex;flex-direction:column;gap:8px;background:var(--u-surface-2)}
|
|
219
|
+
.u-po-top{display:flex;align-items:center;gap:6px}
|
|
220
|
+
.u-po-label{flex:1;min-width:0;border:1px solid var(--u-border);border-radius:8px;padding:7px 10px;font:inherit;font-size:14px;background:var(--u-bg);color:var(--u-text)}
|
|
221
|
+
.u-po-text{width:100%;border:1px solid var(--u-border);border-radius:8px;padding:7px 10px;font:inherit;font-size:13.5px;background:var(--u-bg);color:var(--u-text);resize:vertical}
|
|
222
|
+
.u-po-iconwrap{position:relative;flex:none}
|
|
223
|
+
.u-po-iconbtn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;min-height:0;padding:0;border:1px solid var(--u-border);border-radius:8px;background:var(--u-bg);color:var(--u-text)}
|
|
224
|
+
.u-po-iconbtn svg{width:15px;height:15px}
|
|
225
|
+
.u-po-iconbtn:disabled{opacity:.4}
|
|
226
|
+
.u-po-iconbtn-on{border-color:var(--u-highlight);box-shadow:0 0 0 1px var(--u-highlight);color:var(--u-highlight)}
|
|
227
|
+
.u-po-remove:hover{color:var(--u-danger);border-color:var(--u-danger)}
|
|
228
|
+
.u-po-iconpick{position:absolute;top:calc(100% + 4px);left:0;z-index:5;display:grid;grid-template-columns:repeat(6,32px);gap:4px;padding:6px;background:var(--u-bg);border:1px solid var(--u-border);border-radius:10px;box-shadow:0 10px 30px rgba(0,0,0,.18)}
|
|
229
|
+
.u-po-add{margin-top:10px;border:1px dashed var(--u-border);background:transparent;border-radius:9px;padding:8px 12px;font-weight:600;color:var(--u-link);min-height:38px;width:100%}
|
|
230
|
+
.u-po-actions{display:flex;gap:8px;align-items:center;margin-top:12px;flex-wrap:wrap}
|
|
231
|
+
.u-menu-item{display:flex;align-items:center;gap:8px;width:100%;padding:8px 12px;border:0;border-radius:8px;background:none;text-align:left;font-size:14px;color:var(--u-text);min-height:36px}
|
|
232
|
+
.u-menu-item:hover{background:var(--u-surface-3)}
|
|
233
|
+
.u-menu-purpose svg{width:14px;height:14px;color:var(--u-highlight);flex:none}
|
|
234
|
+
/* inbox rows (native ClientRow) */
|
|
235
|
+
.u-row-open{position:relative}
|
|
236
|
+
.u-r-ind{position:absolute;left:3px;top:50%;transform:translateY(-50%);width:20px;display:grid;place-items:center}
|
|
237
|
+
.u-rows .u-row-open{padding-left:26px}
|
|
238
|
+
.u-r-dot{width:8px;height:8px;border-radius:50%;background:var(--u-highlight)}
|
|
239
|
+
.u-r-badge{min-width:18px;height:18px;padding:0 5px;border-radius:999px;background:var(--u-highlight);color:#fff;font-size:11px;font-weight:700;display:grid;place-items:center}
|
|
240
|
+
/* The open conversation is the only row with a colour: a clear shade and an accent bar on the left
|
|
241
|
+
edge, like WhatsApp's selected chat. Unread shows by the dot and bold name, never a tint. Built
|
|
242
|
+
from the text colour so it reads on any host theme, light or dark. */
|
|
243
|
+
.u-rows li:has(.u-row-open[aria-current="true"]){background:color-mix(in srgb,var(--u-text) 8%,var(--u-bg));box-shadow:inset 3px 0 0 var(--u-accent)}
|
|
244
|
+
.u-rows li:has(.u-row-open[aria-current="true"]) .u-row-open{background:transparent}
|
|
245
|
+
.u-r-name-unread{font-weight:700}
|
|
246
|
+
.u-r-follow,.u-r-fail{display:inline-flex;align-items:center;flex:none}
|
|
247
|
+
.u-r-follow svg,.u-r-fail svg{width:13px;height:13px}
|
|
248
|
+
.u-r-follow{color:var(--u-warn)}
|
|
249
|
+
.u-r-fail{color:var(--u-danger)}
|
|
250
|
+
.u-r-prev{display:inline-flex;align-items:center;gap:5px;max-width:100%}
|
|
251
|
+
.u-r-pico{display:inline-flex;flex:none}.u-r-pico svg{width:11px;height:11px}
|
|
252
|
+
.u-r-prev-in .u-r-ptxt{color:var(--u-text)}
|
|
253
|
+
.u-r-prev-in .u-r-pico{color:var(--u-highlight)}
|
|
254
|
+
.u-r-prev-out .u-r-ptxt,.u-r-prev-out .u-r-pico{color:var(--u-muted)}
|
|
255
|
+
.u-r-prev-ev .u-r-ptxt,.u-r-prev-ev .u-r-pico{color:var(--u-muted);font-style:italic}
|
|
256
|
+
.u-r-ptxt{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
|
|
257
|
+
.u-r-hosttags{flex:1 0 100%;display:flex;flex-wrap:wrap;gap:4px;padding:0 12px 10px 72px;margin-top:-6px}
|
|
258
|
+
.u-tag-connect{cursor:pointer;font:inherit;font-size:12px;font-weight:600;line-height:inherit}
|
|
259
|
+
.u-tag-connect:hover{border-color:var(--u-highlight);color:var(--u-highlight);background:var(--u-highlight-soft)}
|
|
260
|
+
.u-r-quick{flex:1 0 100%;display:flex;justify-content:flex-end;align-items:center;min-width:0;padding:0 12px 10px 72px}
|
|
261
|
+
.u-qsend{display:inline-flex;align-items:center;gap:6px;max-width:100%;border:1px solid var(--u-highlight);background:var(--u-highlight);color:#fff;border-radius:999px;padding:4px 11px;font-size:12px;font-weight:600;min-height:26px}
|
|
262
|
+
.u-qsend:hover:not(:disabled){filter:brightness(1.08)}
|
|
263
|
+
/* Bulk generate states in the quick-send slot (native: Generating… / Generation failed) */
|
|
264
|
+
.u-qsend.u-qsend-bulk{background:var(--u-surface-2);border-color:var(--u-border);color:var(--u-muted);cursor:default}
|
|
265
|
+
.u-qsend-busy svg{width:12px;height:12px}
|
|
266
|
+
/* Bulk generate sheet (native BulkGenerateModal) */
|
|
267
|
+
.u-bulk-head{display:flex;align-items:flex-start;gap:10px;margin-bottom:6px}
|
|
268
|
+
.u-bulk-spark{color:var(--u-highlight);display:grid;place-items:center;padding-top:9px}
|
|
269
|
+
.u-bulk-spark svg{width:18px;height:18px}
|
|
270
|
+
.u-bulk-titles{flex:1;min-width:0}
|
|
271
|
+
.u-bulk-titles h3{margin:4px 0 2px;font-size:18px}
|
|
272
|
+
.u-bulk-sub{margin:0;font-size:13.5px;color:var(--u-muted)}
|
|
273
|
+
.u-bulk-sub .u-linkbtn{font-size:13px}
|
|
274
|
+
.u-bulk-sec{margin-top:14px}
|
|
275
|
+
.u-bulk-sechead{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}
|
|
276
|
+
.u-bulk-sechead .u-linkbtn{font-size:13px}
|
|
277
|
+
.u-bulk-label{font-size:12px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--u-muted)}
|
|
278
|
+
.u-bulk-chips{display:flex;flex-wrap:wrap;gap:6px;max-height:180px;overflow:auto;padding:2px}
|
|
279
|
+
.u-bulk-empty{font-size:13px;color:var(--u-muted)}
|
|
280
|
+
.u-bulk-chip{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--u-border);background:var(--u-bg);border-radius:999px;padding:3px 10px 3px 3px;font-size:13px;color:var(--u-muted);min-height:30px;max-width:100%}
|
|
281
|
+
.u-bulk-chip-on{border-color:var(--u-highlight);background:var(--u-highlight-soft);color:var(--u-text)}
|
|
282
|
+
.u-bulk-av{width:22px;height:22px;border-radius:50%;display:grid;place-items:center;color:#fff;font-size:10px;font-weight:700;flex:none}
|
|
283
|
+
.u-bulk-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
|
284
|
+
.u-bulk-meta{font-size:11px;color:var(--u-muted)}
|
|
285
|
+
.u-bulk-prompt{width:100%;box-sizing:border-box;border:1px solid var(--u-border);border-radius:10px;padding:10px 12px;font:inherit;font-size:14px;color:var(--u-text);background:var(--u-bg);resize:vertical}
|
|
286
|
+
.u-bulk-prompt:focus{outline:none;border-color:var(--u-accent)}
|
|
287
|
+
.u-bulk-hist{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:8px}
|
|
288
|
+
.u-bulk-histlabel{font-size:12px;color:var(--u-muted)}
|
|
289
|
+
.u-bulk-histbtn{border:1px solid var(--u-border);background:var(--u-surface-2);border-radius:999px;padding:3px 10px;font-size:12px;color:var(--u-text);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
|
290
|
+
.u-bulk-foot{display:flex;justify-content:flex-end;gap:8px;margin-top:18px}
|
|
291
|
+
.u-bulk-go{display:inline-flex;align-items:center;gap:6px}
|
|
292
|
+
.u-bulk-go svg{width:14px;height:14px}
|
|
293
|
+
/* Gold shimmer ring on a ready quick reply, same as the draft cells. Countdown, sending, sent and error states drop it. */
|
|
294
|
+
.u-qsend{position:relative}
|
|
295
|
+
.u-qsend:not(.u-qsend-count):not(.u-qsend-sending):not(.u-qsend-sent):not(.u-qsend-err):not(:disabled)::before{content:"";position:absolute;inset:-2px;border-radius:999px;padding:2px;pointer-events:none;background:linear-gradient(110deg,var(--u-gold) 0%,var(--u-gold-hi) 25%,var(--u-gold) 50%,var(--u-gold-hi) 75%,var(--u-gold) 100%);background-size:250% 100%;animation:u-shimmer 3.2s linear infinite;-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);mask-composite:exclude}
|
|
296
|
+
.u-qsend svg{width:12px;height:12px;flex:none}
|
|
297
|
+
.u-qsend-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
|
|
298
|
+
.u-qsend-count{border-color:var(--u-warn);background:color-mix(in srgb,var(--u-warn) 12%,transparent);color:var(--u-warn)}
|
|
299
|
+
.u-qsend-sent{border-color:var(--u-accent);background:var(--u-accent);color:var(--u-accent-ink)}
|
|
300
|
+
.u-qsend-err{border-color:var(--u-danger);color:var(--u-danger);background:transparent}
|
|
301
|
+
.u-qsend:disabled{opacity:.9}
|
|
302
|
+
/* delivery receipts */
|
|
303
|
+
.u-rcpt{display:inline-flex;align-items:center;margin-left:4px;color:var(--u-muted)}
|
|
304
|
+
.u-rcpt svg{width:13px;height:13px}
|
|
305
|
+
.u-rcpt-ok{color:var(--u-highlight)}
|
|
306
|
+
.u-rcpt-bad{color:var(--u-danger)}
|
|
307
|
+
/* inline reply drafts under the latest client message */
|
|
308
|
+
.u-inl{align-self:flex-start;max-width:78%;display:flex;flex-direction:column;gap:6px;margin-top:2px}
|
|
309
|
+
.u-inl-h{display:flex;align-items:center;gap:4px}
|
|
310
|
+
.u-inl-toggle{display:inline-flex;align-items:center;gap:6px;border:0;background:transparent;color:var(--u-muted);font-size:12px;font-weight:600;padding:2px 6px;border-radius:6px;min-height:24px}
|
|
311
|
+
.u-inl-toggle:hover{background:var(--u-surface-3);color:var(--u-text)}
|
|
312
|
+
.u-inl-notnow{border:0;background:transparent;color:var(--u-muted);font-size:12px;padding:2px 6px;min-height:24px;border-radius:6px}
|
|
313
|
+
.u-inl-notnow:hover{color:var(--u-text);background:var(--u-surface-3)}
|
|
314
|
+
.u-inl-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;width:100%}
|
|
315
|
+
.u-inl-cell{position:relative;display:flex;flex-direction:column;align-items:flex-start;gap:2px;min-width:0;border:1px solid var(--u-border);background:var(--u-bg);border-radius:12px;padding:7px 10px;text-align:left;color:var(--u-text)}
|
|
316
|
+
/* Gold shimmer ring, same as the composer's draft cells. Reduced motion leaves a still ring. */
|
|
317
|
+
.u-inl-cell::before{content:"";position:absolute;inset:-1px;border-radius:13px;padding:1.5px;pointer-events:none;background:linear-gradient(110deg,var(--u-gold) 0%,var(--u-gold-hi) 25%,var(--u-gold) 50%,var(--u-gold-hi) 75%,var(--u-gold) 100%);background-size:250% 100%;animation:u-shimmer 3.2s linear infinite;-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);mask-composite:exclude}
|
|
318
|
+
.u-inl-cell:hover{border-color:var(--u-highlight)}
|
|
319
|
+
.u-inl-txt{font-size:13px;line-height:1.35;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
|
|
320
|
+
/* Item action row (native InlineDrafts): under client messages, and inside activity cards. */
|
|
321
|
+
.u-ia{align-self:flex-start;width:78%;display:flex;flex-direction:column;gap:6px;margin-top:2px}
|
|
322
|
+
.u-ev .u-ia{width:100%;margin-top:6px}
|
|
323
|
+
.u-ev>div{flex:1}
|
|
324
|
+
.u-ev>div{min-width:0}
|
|
325
|
+
.u-ev .u-ia svg{width:13px;height:13px;margin-top:0}
|
|
326
|
+
.u-ia-h{display:flex;flex-wrap:wrap;align-items:center;gap:2px;margin-left:-6px}
|
|
327
|
+
.u-ia-h .u-inl-toggle svg{width:13px;height:13px}
|
|
328
|
+
.u-ia-ai{display:flex;flex-direction:column;gap:6px;border:1px solid var(--u-border);background:var(--u-bg);border-radius:12px;padding:10px;min-width:min(420px,100%)}
|
|
329
|
+
.u-ia-ai-label{font-size:12.5px;font-weight:700}
|
|
330
|
+
.u-ia-ai-hint{font-size:12px;color:var(--u-muted)}
|
|
331
|
+
.u-ia-ai-note{font-size:12px;color:var(--u-warn);background:color-mix(in srgb,var(--u-warn) 10%,transparent);border-radius:8px;padding:6px 8px}
|
|
332
|
+
.u-ia-ai textarea{font:inherit;font-size:13.5px;color:var(--u-text);background:var(--u-surface-2);border:1px solid var(--u-border);border-radius:8px;padding:8px 10px;resize:vertical;min-height:64px}
|
|
333
|
+
.u-ia-ai-row{display:flex;align-items:center;gap:10px;font-size:12px}
|
|
334
|
+
.u-ia-ai-count{color:var(--u-muted);font-variant-numeric:tabular-nums}
|
|
335
|
+
.u-ia-ai-err{color:var(--u-danger)}
|
|
336
|
+
.u-cx-h4{display:flex;align-items:center;gap:6px}
|
|
337
|
+
.u-cx-info{display:inline-grid;place-items:center;width:22px;height:22px;border:0;border-radius:999px;background:transparent;color:var(--u-muted);padding:0;cursor:pointer}
|
|
338
|
+
.u-cx-info:hover{color:var(--u-highlight);background:var(--u-highlight-soft)}
|
|
339
|
+
.u-cx-info svg{width:15px;height:15px}
|
|
340
|
+
.u-cx-head{display:flex;align-items:center;gap:10px}
|
|
341
|
+
.u-cx-mark{display:inline-grid;place-items:center;width:30px;height:30px;border-radius:999px;color:#fff;flex:none}
|
|
342
|
+
.u-cx-rule{margin:10px 0}
|
|
343
|
+
.u-cx-rule h4{margin:0 0 3px;font-size:14px}
|
|
344
|
+
.u-cx-rule p{margin:0;font-size:13.5px;line-height:1.5;color:var(--u-muted)}
|
|
345
|
+
.u-cx-sec{display:block;margin-top:14px;font-size:13px;font-weight:600}
|
|
346
|
+
.u-cx-mocks{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:8px 0 10px}
|
|
347
|
+
.u-cx-col{display:flex;flex-direction:column;gap:4px;min-width:0}
|
|
348
|
+
.u-cx-label{font-size:11.5px;font-weight:500;color:var(--u-muted)}
|
|
349
|
+
.u-cx-phone{border:1px solid var(--u-border);border-radius:12px;padding:10px;display:flex;flex-direction:column;gap:8px;min-height:120px}
|
|
350
|
+
.u-cx-coach{background:var(--u-surface-2)}
|
|
351
|
+
.u-cx-coach-bub{align-self:flex-end;max-width:95%;background:var(--u-highlight);color:#fff;border-radius:12px;border-bottom-right-radius:4px;padding:8px 10px;font-size:12px;line-height:1.45}
|
|
352
|
+
.u-cx-tpl{display:inline-block;margin-top:6px;padding:2px 8px;border-radius:999px;background:rgba(255,255,255,.22);font-size:10px;font-weight:500}
|
|
353
|
+
.u-cx-client{background:#e5ddd5;border-color:#d5cdc4}
|
|
354
|
+
.u-cx-client-bub{align-self:flex-start;max-width:95%;background:#fff;color:#1c1c1e;border-radius:12px;border-top-left-radius:4px;padding:8px 10px;font-size:12px;line-height:1.45;box-shadow:0 1px 1px rgba(0,0,0,.08)}
|
|
355
|
+
.u-cx-link{display:block;margin-top:6px;color:#027eb5;font-weight:500}
|
|
356
|
+
.u-cx-meta{font-size:10px;color:var(--u-muted);text-align:center;margin-top:auto}
|
|
357
|
+
.u-cx-client .u-cx-meta{color:#7a7269}
|
|
358
|
+
.u-cx-foot{font-size:12px;line-height:1.5;color:var(--u-muted)}
|
|
359
|
+
.u-offer-who{display:flex;align-items:center;gap:8px;font-size:13.5px;color:var(--u-muted);margin:2px 0 8px}
|
|
360
|
+
.u-offer-avs{display:inline-flex}
|
|
361
|
+
.u-offer-avs .u-av{border:2px solid var(--u-bg);margin-left:-6px}
|
|
362
|
+
.u-offer-avs .u-av:first-child{margin-left:0}
|
|
363
|
+
.u-offer-list{list-style:none;margin:10px 0;padding:0;display:flex;flex-direction:column;gap:7px;font-size:13.5px}
|
|
364
|
+
.u-offer-list li{display:flex;gap:8px;align-items:flex-start}
|
|
365
|
+
.u-offer-tick{display:inline-flex;color:var(--u-accent);flex:none;margin-top:2px}
|
|
366
|
+
.u-offer-tick svg{width:15px;height:15px}
|
|
367
|
+
.u-ai-head{display:flex;align-items:flex-start;justify-content:space-between;gap:8px}
|
|
368
|
+
.u-ai-plan{display:flex;align-items:center;gap:10px;flex-wrap:wrap;border:1px solid var(--u-border);border-radius:10px;padding:8px 11px;font-size:13px;margin:0 0 10px}
|
|
369
|
+
.u-ai-plan .u-linkbtn{font-size:13px}
|
|
370
|
+
.u-ai-err{color:var(--u-danger,#b42318);font-size:12.5px;width:100%}
|
|
371
|
+
.u-ai-disclaimer{display:flex;gap:8px;align-items:flex-start;background:var(--u-highlight-soft);border-radius:10px;padding:9px 11px;font-size:12.5px;line-height:1.45;margin:6px 0 10px}
|
|
372
|
+
.u-ai-disclaimer svg{width:15px;height:15px;flex:none;margin-top:2px;color:var(--u-highlight)}
|
|
373
|
+
.u-ai-tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--u-border);margin-bottom:10px}
|
|
374
|
+
.u-ai-tab{border:0;background:transparent;padding:7px 10px;font-size:13px;font-weight:600;color:var(--u-muted);border-bottom:2px solid transparent;margin-bottom:-1px;border-radius:0}
|
|
375
|
+
.u-ai-tab-on{color:var(--u-text);border-bottom-color:var(--u-highlight)}
|
|
376
|
+
.u-ai-body{display:flex;flex-direction:column;gap:14px}
|
|
377
|
+
.u-ai-sec{display:flex;flex-direction:column;gap:6px}
|
|
378
|
+
.u-ai-sec h4{margin:0;font-size:14px}
|
|
379
|
+
.u-ai-area,.u-ai-input{font:inherit;font-size:13.5px;color:var(--u-text);background:var(--u-surface-2);border:1px solid var(--u-border);border-radius:8px;padding:8px 10px;width:100%;box-sizing:border-box}
|
|
380
|
+
.u-ai-area{resize:vertical}
|
|
381
|
+
.u-ai-hr{border:0;border-top:1px solid var(--u-border);margin:8px 0}
|
|
382
|
+
.u-ai-form{display:flex;flex-direction:column;gap:6px;border:1px solid var(--u-border);border-radius:10px;padding:10px}
|
|
383
|
+
.u-ai-form label{font-size:12.5px;font-weight:700}
|
|
384
|
+
.u-ai-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
|
|
385
|
+
.u-ai-list li{border:1px solid var(--u-border);border-radius:10px;padding:8px 10px;display:flex;flex-direction:column;gap:3px}
|
|
386
|
+
.u-ai-item-head{display:flex;align-items:center;gap:6px;font-size:13px}
|
|
387
|
+
.u-ai-check{color:var(--u-accent);display:inline-flex}
|
|
388
|
+
.u-ai-check svg{width:14px;height:14px}
|
|
389
|
+
.u-ai-tags{display:flex;flex-wrap:wrap;gap:4px}
|
|
390
|
+
.u-ai-k{font-size:11.5px;font-weight:700;color:var(--u-muted);text-transform:uppercase;letter-spacing:.04em}
|
|
391
|
+
.u-ai-v{font-size:13.5px;white-space:pre-wrap}
|
|
392
|
+
.u-ai-voice{display:flex;flex-direction:column;gap:6px}
|
|
393
|
+
.u-ai-locked{border:1px dashed var(--u-border);border-radius:10px;padding:12px;font-size:13px;color:var(--u-muted)}
|
|
394
|
+
.u-ai-locked strong{color:var(--u-text)}
|
|
395
|
+
.u-ai-field{display:flex;flex-direction:column;gap:3px;margin-top:10px}
|
|
396
|
+
.u-ai-field textarea{font:inherit;font-size:13.5px;color:var(--u-text);background:var(--u-surface-2);border:1px solid var(--u-border);border-radius:8px;padding:8px 10px;resize:vertical}
|
|
397
|
+
.u-ai-labelrow{display:flex;justify-content:space-between;gap:8px;font-size:13px;font-weight:700}
|
|
398
|
+
.u-ai-sub{margin-top:16px!important;font-size:12.5px;font-weight:700;color:var(--u-muted)}
|
|
399
|
+
.u-ai-ok{color:var(--u-accent);font-size:13px;font-weight:600}
|
|
400
|
+
.u-ai-more{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px;margin-top:16px;padding-top:12px;border-top:1px solid var(--u-border);font-size:13px;color:var(--u-muted)}
|
|
401
|
+
.u-ia-save{border:1px solid var(--u-accent);background:var(--u-accent);color:var(--u-accent-ink);border-radius:8px;padding:5px 12px;font-weight:600;font-size:13px;min-height:30px}
|
|
402
|
+
.u-ia-save:disabled{opacity:.5}
|
|
403
|
+
/* WhatsApp closed window */
|
|
404
|
+
.u-wa{display:flex;gap:8px;align-items:flex-start;padding:8px 12px;border-radius:9px;background:color-mix(in srgb,var(--u-warn) 10%,var(--u-bg));border:1px solid color-mix(in srgb,var(--u-warn) 35%,transparent);font-size:13px;line-height:1.4}
|
|
405
|
+
.u-wa-ico{display:inline-flex;color:var(--u-warn);flex:none;margin-top:2px}.u-wa-ico svg{width:14px;height:14px}
|
|
406
|
+
.u-wa-body{min-width:0}
|
|
407
|
+
.u-wa-more{display:inline-flex;align-items:center;gap:2px;border:0;background:transparent;color:var(--u-link);font-weight:600;font-size:12.5px;padding:0 4px;min-height:0;margin-left:4px}
|
|
408
|
+
.u-wa-more svg{width:12px;height:12px}
|
|
409
|
+
.u-wa-why{margin:6px 0 0;color:var(--u-muted);font-size:12.5px}
|
|
410
|
+
.u-ghost{display:flex;flex-direction:column;align-items:flex-end;gap:2px;opacity:.7}
|
|
411
|
+
.u-ghost-bub{border:1px dashed color-mix(in srgb,var(--u-out-ink) 50%,transparent);background:color-mix(in srgb,var(--u-out) 60%,transparent)}
|
|
412
|
+
.u-ghost-cut{font-weight:700}
|
|
413
|
+
/* beginning of history */
|
|
414
|
+
.u-hist-start{align-self:center;font-size:12px;color:var(--u-muted);padding:4px 0}
|
|
415
|
+
/* header badges */
|
|
416
|
+
.u-chan-badge{display:inline-flex;align-items:center;justify-content:center;position:absolute;right:-2px;bottom:-2px;width:16px;height:16px;border-radius:50%;color:#fff;border:2px solid var(--u-bg);box-sizing:content-box}
|
|
417
|
+
.u-chan-wa{background:#25d366}
|
|
418
|
+
.u-chan-sms{background:var(--u-highlight)}
|
|
419
|
+
.u-r-av{grid-row:span 3;align-self:start}
|
|
420
|
+
.u-r-av .u-av{grid-row:auto}
|
|
421
|
+
.u-av-wrap{position:relative;display:inline-flex;flex:none}
|
|
422
|
+
.u-head-status{margin-left:4px}
|
|
423
|
+
/* attachments on thread messages */
|
|
424
|
+
.u-att{display:flex;flex-wrap:wrap;gap:6px;max-width:78%}
|
|
425
|
+
.u-att-out{align-self:flex-end;justify-content:flex-end}.u-att-in{align-self:flex-start}
|
|
426
|
+
.u-att-img{border:0;background:none;padding:0;min-height:0;cursor:zoom-in}
|
|
427
|
+
.u-att-img img{display:block;max-width:220px;max-height:220px;border-radius:12px;border:1px solid var(--u-border)}
|
|
428
|
+
.u-att-desc{display:block;font-size:12px;color:var(--u-muted);max-width:220px}
|
|
429
|
+
.u-att-video{display:block;max-width:280px;max-height:320px;border-radius:12px;background:#000;object-fit:contain}
|
|
430
|
+
.u-att-audio{display:flex;flex-direction:column;gap:4px;max-width:300px}
|
|
431
|
+
.u-att-player{width:100%;max-width:300px}
|
|
432
|
+
.u-att-trans{font-size:13px;color:var(--u-muted);font-style:italic}
|
|
433
|
+
.u-lightbox{position:fixed;inset:0;z-index:60;background:rgba(0,0,0,.85);display:grid;place-items:center;padding:24px}
|
|
434
|
+
.u-lightbox img{max-width:100%;max-height:100%;border-radius:8px}
|
|
435
|
+
.u-lightbox-x{position:absolute;top:16px;right:16px;width:40px;height:40px;border-radius:999px;border:0;background:rgba(255,255,255,.15);color:#fff;display:grid;place-items:center}
|
|
436
|
+
.u-lightbox-x svg{width:18px;height:18px}
|
|
437
|
+
.u-att-file{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border-radius:999px;background:var(--u-bg);border:1px solid var(--u-border);font-size:13px;color:var(--u-link);text-decoration:none}
|
|
438
|
+
.u-att-file svg{width:14px;height:14px}
|
|
439
|
+
.u-editor{width:100%;border:1px solid var(--u-border);border-radius:var(--u-radius);padding:10px 12px;min-height:64px;font:inherit;font-size:14.5px;background:var(--u-bg);color:var(--u-text);resize:vertical}
|
|
440
|
+
.u-editor::placeholder{color:var(--u-muted)}
|
|
441
|
+
.u-editor-rich{min-height:64px;max-height:220px;overflow-y:auto;white-space:normal;word-break:break-word;line-height:1.5}
|
|
442
|
+
.u-editor-rich:empty::before{content:attr(data-placeholder);color:var(--u-muted);pointer-events:none}
|
|
443
|
+
.u-editor-rich[aria-disabled="true"]{opacity:.6}
|
|
444
|
+
/* Draft pills, ported from native: one per clause, hue hashed from the text, × drops it. */
|
|
445
|
+
.u-seg{display:inline;padding:1px 2px;margin:0 2px;border-radius:3px;background:hsl(var(--u-seg-h) 55% var(--u-seg-l));color:var(--u-text);font-weight:500;user-select:none;transition:opacity .15s ease}
|
|
446
|
+
.u-seg:hover{opacity:.85}
|
|
447
|
+
/* Stock intro: no pill highlight, the text itself shimmers gold (gradient clipped to the glyphs). Reduced motion leaves a still gold gradient. */
|
|
448
|
+
.u-seg-lock{cursor:default;user-select:text;padding:0;margin:0;border-radius:0;font-weight:600;background:linear-gradient(110deg,var(--u-gold-ink) 0%,var(--u-gold-ink-hi) 30%,var(--u-gold-ink) 50%,var(--u-gold-ink-hi) 70%,var(--u-gold-ink) 100%);background-size:250% 100%;-webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;animation:u-shimmer 4s linear infinite}
|
|
449
|
+
.u-seg-lock:hover{opacity:1}
|
|
450
|
+
.u-seg-x{display:inline-flex;align-items:center;justify-content:center;margin-left:4px;padding:0 8px;min-width:24px;min-height:22px;cursor:pointer;font-size:15px;font-weight:700;color:#111;background:rgba(255,200,0,.8);border-radius:999px;line-height:1;vertical-align:middle;touch-action:manipulation;-webkit-tap-highlight-color:transparent}
|
|
451
|
+
.u-seg-x:hover,.u-seg-x:active,.u-seg-x:focus-visible{color:#fff;background:#c00;outline:none}
|
|
452
|
+
.u-editor:disabled{opacity:.6}
|
|
453
|
+
.u-send{border:0;background:var(--u-accent);color:var(--u-accent-ink);font-weight:700;border-radius:9px;padding:8px 16px;min-height:40px}
|
|
454
|
+
.u-send:disabled{opacity:.45}
|
|
455
|
+
.u-gen{border:1px solid var(--u-border);background:var(--u-bg);border-radius:9px;padding:8px 14px;font-weight:600;min-height:40px}
|
|
456
|
+
.u-gen:disabled{opacity:.5}
|
|
457
|
+
.u-note{margin-top:8px;border-radius:9px;padding:9px 12px;font-size:13.5px;display:flex;flex-wrap:wrap;gap:6px 12px;align-items:center}
|
|
458
|
+
.u-note-err{background:color-mix(in srgb,var(--u-danger) 9%,var(--u-bg));border:1px solid color-mix(in srgb,var(--u-danger) 35%,transparent)}
|
|
459
|
+
.u-note-warn{background:color-mix(in srgb,var(--u-warn) 10%,var(--u-bg));border:1px solid color-mix(in srgb,var(--u-warn) 35%,transparent)}
|
|
460
|
+
.u-note-ok{background:var(--u-highlight-soft)}
|
|
461
|
+
.u-banner{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;padding:10px 16px;font-size:14px;border-bottom:1px solid var(--u-border);background:var(--u-accent-soft)}
|
|
462
|
+
.u-headbtn{border:1px solid var(--u-border);background:var(--u-bg);border-radius:8px;padding:6px 11px;font-size:14px;font-weight:600;min-height:34px}
|
|
463
|
+
.u-headbtn:disabled{opacity:.5}
|
|
464
|
+
.u-connect{margin-left:4px;display:inline-flex;align-items:center;gap:7px;flex:none}
|
|
465
|
+
/* AI settings + full screen: the right end of the conversation header (no panel header row). */
|
|
466
|
+
.u-head-acts{margin-left:auto;display:inline-flex;align-items:center;gap:6px;flex:none}
|
|
467
|
+
.u-chan ~ .u-head-acts{margin-left:6px}
|
|
468
|
+
.u-pane-head-empty{justify-content:flex-end;min-height:62px;box-sizing:border-box}
|
|
469
|
+
/* On wide panels the toolbar leaves them to the conversation header. */
|
|
470
|
+
.u-toolbar-acts{display:none}
|
|
471
|
+
.u-toolbar .u-addbtn{flex:none}
|
|
472
|
+
.u-connect svg{flex:none}
|
|
473
|
+
.u-example{width:100%;border:1px dashed var(--u-border);border-radius:12px;padding:12px;background:var(--u-surface-2);display:flex;flex-direction:column}
|
|
474
|
+
.u-ex-lab{font-size:11.5px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--u-muted);margin-bottom:6px}
|
|
475
|
+
.u-sheet-wrap{position:absolute;inset:0;background:rgba(10,10,10,.45);display:grid;place-items:center;padding:16px;z-index:5}
|
|
476
|
+
.u-sheet{width:min(560px,100%);max-height:100%;overflow:auto;background:var(--u-bg);color:var(--u-text);border:1px solid var(--u-border);border-radius:16px;box-shadow:0 18px 50px rgba(0,0,0,.25);padding:20px;outline:none}
|
|
477
|
+
.u-eyebrow{font-size:12px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--u-muted)}
|
|
478
|
+
.u-sheet h3{font-size:21px;margin:6px 0 8px}
|
|
479
|
+
.u-lede{font-size:14.5px;color:var(--u-muted)}
|
|
480
|
+
.u-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:18px;align-items:center}
|
|
481
|
+
.u-secondary{border:1px solid var(--u-border);background:var(--u-bg);border-radius:9px;padding:8px 14px;font-weight:600;min-height:40px}
|
|
482
|
+
.u-steps{display:flex;gap:6px;margin-bottom:12px}
|
|
483
|
+
.u-steps span{flex:1;height:4px;border-radius:999px;background:var(--u-surface-3)}
|
|
484
|
+
.u-steps span.u-on{background:var(--u-highlight)}
|
|
485
|
+
.u-plan{margin-top:14px;border:1px solid var(--u-highlight);border-radius:12px;padding:14px;background:var(--u-highlight-soft)}
|
|
486
|
+
.u-plan-name{font-weight:700;font-size:15px}
|
|
487
|
+
.u-plan-price{font-size:30px;font-weight:700;margin-top:2px}
|
|
488
|
+
.u-plan-price small{font-size:15px;font-weight:500;color:var(--u-muted)}
|
|
489
|
+
.u-plan-vs{font-size:13.5px;color:var(--u-muted)}
|
|
490
|
+
.u-feats{margin:12px 0 0;padding-left:18px;font-size:14px}
|
|
491
|
+
.u-feats li{margin:3px 0}
|
|
492
|
+
.u-chanbox{margin-top:12px;border:1px solid var(--u-border);border-radius:12px;padding:11px 13px}
|
|
493
|
+
.u-chanbox h4{font-size:15px}
|
|
494
|
+
.u-chanbox p{font-size:14px;margin-top:4px;color:var(--u-text)}
|
|
495
|
+
.u-tick{display:flex;gap:10px;align-items:flex-start;margin-top:12px;font-size:14.5px}
|
|
496
|
+
.u-tick input{width:20px;height:20px;margin-top:1px;accent-color:var(--u-highlight)}
|
|
497
|
+
.u-field{margin-top:12px;display:flex;flex-direction:column;gap:5px}
|
|
498
|
+
.u-field>label,.u-field>span:first-child{font-size:13.5px;font-weight:600}
|
|
499
|
+
.u-field select{border:1px solid var(--u-border);background:var(--u-bg);color:var(--u-text);border-radius:9px;padding:9px 11px;font:inherit;min-height:42px}
|
|
500
|
+
.u-field input{border:1px solid var(--u-border);background:var(--u-bg);color:var(--u-text);border-radius:9px;padding:9px 11px;font:inherit;min-height:42px}
|
|
501
|
+
.u-field input[aria-invalid="true"]{border-color:var(--u-danger)}
|
|
502
|
+
.u-hint{font-size:13px;color:var(--u-muted)}
|
|
503
|
+
.u-err{font-size:13px;color:var(--u-danger)}
|
|
504
|
+
.u-chanpick{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
|
|
505
|
+
.u-chanpick button{border:1px solid var(--u-border);background:var(--u-bg);border-radius:10px;padding:9px;text-align:left;min-height:56px}
|
|
506
|
+
.u-chanpick button[aria-checked="true"]{border-color:var(--u-highlight);box-shadow:0 0 0 1px var(--u-highlight)}
|
|
507
|
+
.u-chanpick b{display:block;font-size:14.5px}
|
|
508
|
+
.u-chanpick small{font-size:12.5px;color:var(--u-muted)}
|
|
509
|
+
@media (prefers-reduced-motion:reduce){.uplift *{transition:none!important;animation:none!important}}
|
|
510
|
+
@container panel (max-width:759px){
|
|
511
|
+
.u-cx-mocks{grid-template-columns:1fr}
|
|
512
|
+
.u-inl-grid{grid-template-columns:1fr}
|
|
513
|
+
.u-ia{width:100%}
|
|
514
|
+
.u-split{grid-template-columns:1fr;height:min(80vh,720px)}
|
|
515
|
+
.u-split.u-show-thread .u-list{display:none}
|
|
516
|
+
.u-split:not(.u-show-thread) .u-pane{display:none}
|
|
517
|
+
.u-back{display:inline-flex}
|
|
518
|
+
.u-toolbar-acts{display:inline-flex;flex:none;margin-left:auto}
|
|
519
|
+
.u-toolbar-acts .u-head-acts{margin-left:0}
|
|
520
|
+
/* Phone widths: the toolbar wraps its buttons rather than cutting them off; the conversation header
|
|
521
|
+
keeps name, Connect and the buttons on one line by dropping the phone number and Connect's label. */
|
|
522
|
+
.u-toolbar{flex-wrap:wrap;row-gap:6px}
|
|
523
|
+
.u-sortgroup button{padding:4px 7px}
|
|
524
|
+
.u-pane-head{gap:8px;padding:10px 12px}
|
|
525
|
+
.u-pane-head .u-chan{display:none}
|
|
526
|
+
.u-who{flex:0 1 auto}
|
|
527
|
+
.u-who strong,.u-who small{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
|
|
528
|
+
.u-connect{padding:6px 9px}
|
|
529
|
+
.u-connect span{display:none}
|
|
530
|
+
.u-ag-grid{grid-template-columns:1fr}
|
|
531
|
+
.u-c-actions .u-meta{flex-basis:100%}
|
|
532
|
+
.u-sheet-wrap{padding:0}
|
|
533
|
+
.u-sheet{width:100%;height:100%;border-radius:0}
|
|
534
|
+
}
|
|
535
|
+
`;
|
|
536
|
+
/** Add the panel stylesheet to `doc` once. Safe to call on every render. */
|
|
537
|
+
export function injectStyles(doc = typeof document === "undefined" ? undefined : document) {
|
|
538
|
+
if (!doc || doc.getElementById(STYLE_ELEMENT_ID))
|
|
539
|
+
return;
|
|
540
|
+
const el = doc.createElement("style");
|
|
541
|
+
el.id = STYLE_ELEMENT_ID;
|
|
542
|
+
el.textContent = upliftStyles;
|
|
543
|
+
doc.head.appendChild(el);
|
|
544
|
+
}
|
|
545
|
+
//# sourceMappingURL=styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../src/styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AAExD,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2gB3B,CAAC;AAEF,4EAA4E;AAC5E,MAAM,UAAU,YAAY,CAAC,MAA4B,OAAO,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;IAC7G,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,gBAAgB,CAAC;QAAE,OAAO;IACzD,MAAM,EAAE,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACtC,EAAE,CAAC,EAAE,GAAG,gBAAgB,CAAC;IACzB,EAAE,CAAC,WAAW,GAAG,YAAY,CAAC;IAC9B,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AAC3B,CAAC"}
|
package/dist/time.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare function isSameDay(a: Date, b: Date): boolean;
|
|
2
|
+
/** "5 Oct", or "5 Oct 2025" when the year differs from `now`. */
|
|
3
|
+
export declare function shortDate(d: Date, now?: Date): string;
|
|
4
|
+
/** Compact age for list rows: "now", "35m", "2h", "4d", "3w", then a short date. Empty for null. */
|
|
5
|
+
export declare function relativeShort(iso: string | null | undefined, now?: Date): string;
|
|
6
|
+
/** Sentence-ready age: "just now", "35m ago", "4d ago", "3w ago", then "on 5 Oct". Empty for null. */
|
|
7
|
+
export declare function relativeAgo(iso: string | null | undefined, now?: Date): string;
|
|
8
|
+
/** Day separator text: "Today", "Yesterday", a weekday inside the last week, else a short date. */
|
|
9
|
+
export declare function dayLabel(iso: string, now?: Date): string;
|
|
10
|
+
/** Local 24-hour clock, "07:02". */
|
|
11
|
+
export declare function clockLabel(iso: string | null | undefined): string;
|
|
12
|
+
/** Local calendar-day key for grouping, "2026-10-05". */
|
|
13
|
+
export declare function dayKey(iso: string | null | undefined): string;
|
|
14
|
+
//# sourceMappingURL=time.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../src/time.ts"],"names":[],"mappings":"AAeA,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,OAAO,CAEnD;AAED,iEAAiE;AACjE,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,CAGjE;AAED,oGAAoG;AACpG,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,CAa5F;AAED,sGAAsG;AACtG,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,CAK1F;AAED,mGAAmG;AACnG,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,CAQpE;AAED,oCAAoC;AACpC,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAIjE;AAED,yDAAyD;AACzD,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAI7D"}
|