@youasked/react 0.4.1 → 0.5.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/dist/YouAsked.d.ts +1 -1
- package/dist/client.d.ts +18 -2
- package/dist/index.js +79 -21
- package/dist/shared.d.ts +1 -1
- package/dist/styles.d.ts +1 -1
- package/package.json +1 -1
package/dist/YouAsked.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type ReactNode } from "react";
|
|
2
2
|
import { type YouAskedUser } from "./client";
|
|
3
3
|
import { type Appearance } from "./theme";
|
|
4
|
-
export declare const DEFAULT_API_URL = "https://
|
|
4
|
+
export declare const DEFAULT_API_URL = "https://api.youasked.dev";
|
|
5
5
|
export type YouAskedProps = {
|
|
6
6
|
/** Publishable key (ya_pub_…). Safe to ship in client code. Not needed with `demo`. */
|
|
7
7
|
appKey?: string;
|
package/dist/client.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type Status = "open" | "planned" | "in_progress" | "shipped" | "declined";
|
|
1
|
+
export type Status = "open" | "planned" | "in_progress" | "shipped" | "declined" | "pending";
|
|
2
2
|
export type FeatureRequest = {
|
|
3
3
|
id: string;
|
|
4
4
|
/** Shown as YA-12; commits and PRs that say "closes YA-12" ship it. */
|
|
@@ -15,6 +15,9 @@ export type FeatureRequest = {
|
|
|
15
15
|
path?: string;
|
|
16
16
|
topic?: string;
|
|
17
17
|
} | null;
|
|
18
|
+
/** Set when the team found this ask elsewhere ("reddit" or "appstore") and added it. */
|
|
19
|
+
source?: string;
|
|
20
|
+
sourceUrl?: string | null;
|
|
18
21
|
/** First name of the person who asked, when they opted in to being thanked and it has shipped. */
|
|
19
22
|
creditName: string | null;
|
|
20
23
|
createdAt: number;
|
|
@@ -65,6 +68,7 @@ export type Config = {
|
|
|
65
68
|
canCredit: boolean;
|
|
66
69
|
unseen: Notice[];
|
|
67
70
|
whatsNew: WhatsNew | null;
|
|
71
|
+
mode?: "test" | "live";
|
|
68
72
|
};
|
|
69
73
|
export type NewRequest = {
|
|
70
74
|
title: string;
|
|
@@ -83,6 +87,8 @@ export type RequestDetail = {
|
|
|
83
87
|
attachments?: Attachment[];
|
|
84
88
|
/** Whether this person asked to try it before it ships. */
|
|
85
89
|
earlyAccess?: boolean;
|
|
90
|
+
/** The person wrote it and nobody else has joined in yet, so they can take it back. */
|
|
91
|
+
canDelete?: boolean;
|
|
86
92
|
redirect?: string;
|
|
87
93
|
};
|
|
88
94
|
export type YouAskedUser = {
|
|
@@ -92,7 +98,11 @@ export type YouAskedUser = {
|
|
|
92
98
|
};
|
|
93
99
|
export declare class YouAskedError extends Error {
|
|
94
100
|
code: string;
|
|
95
|
-
|
|
101
|
+
/** A ready-to-show sentence from the server, when it sent one (spam and rate-limit answers do). */
|
|
102
|
+
detail?: string | undefined;
|
|
103
|
+
constructor(code: string,
|
|
104
|
+
/** A ready-to-show sentence from the server, when it sent one (spam and rate-limit answers do). */
|
|
105
|
+
detail?: string | undefined);
|
|
96
106
|
}
|
|
97
107
|
export type ClientOptions = {
|
|
98
108
|
appKey: string;
|
|
@@ -122,6 +132,9 @@ export declare function createClient({ appKey, apiUrl, user, signature }: Client
|
|
|
122
132
|
path?: string;
|
|
123
133
|
topic?: string;
|
|
124
134
|
} | null;
|
|
135
|
+
/** Set when the team found this ask elsewhere ("reddit" or "appstore") and added it. */
|
|
136
|
+
source?: string;
|
|
137
|
+
sourceUrl?: string | null;
|
|
125
138
|
/** First name of the person who asked, when they opted in to being thanked and it has shipped. */
|
|
126
139
|
creditName: string | null;
|
|
127
140
|
createdAt: number;
|
|
@@ -129,6 +142,9 @@ export declare function createClient({ appKey, apiUrl, user, signature }: Client
|
|
|
129
142
|
mine: boolean;
|
|
130
143
|
}>;
|
|
131
144
|
upload: (image: Blob) => Promise<Attachment>;
|
|
145
|
+
remove: (id: string) => Promise<{
|
|
146
|
+
ok: true;
|
|
147
|
+
}>;
|
|
132
148
|
earlyAccess: (id: string) => Promise<{
|
|
133
149
|
earlyAccess: boolean;
|
|
134
150
|
}>;
|
package/dist/index.js
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
3
|
// src/YouAsked.tsx
|
|
4
|
-
import { useCallback as useCallback2, useEffect as useEffect3, useMemo, useRef as useRef3, useState as useState3 } from "react";
|
|
4
|
+
import { useCallback as useCallback2, useEffect as useEffect3, useMemo, useRef as useRef3, useState as useState3, useSyncExternalStore } from "react";
|
|
5
5
|
import { createPortal } from "react-dom";
|
|
6
6
|
|
|
7
7
|
// src/client.ts
|
|
8
8
|
var YouAskedError = class extends Error {
|
|
9
|
-
constructor(code) {
|
|
9
|
+
constructor(code, detail) {
|
|
10
10
|
super(code);
|
|
11
11
|
this.code = code;
|
|
12
|
+
this.detail = detail;
|
|
12
13
|
}
|
|
13
14
|
};
|
|
14
15
|
var ANON_KEY = "youasked:anon";
|
|
@@ -48,14 +49,14 @@ function createClient({ appKey, apiUrl, user, signature }) {
|
|
|
48
49
|
if (json) h["content-type"] = "application/json";
|
|
49
50
|
return h;
|
|
50
51
|
}
|
|
51
|
-
async function call(path, body, raw) {
|
|
52
|
+
async function call(path, body, raw, method) {
|
|
52
53
|
const res = await fetch(base2 + path, {
|
|
53
|
-
method: body === void 0 && !raw ? "GET" : "POST",
|
|
54
|
+
method: method ?? (body === void 0 && !raw ? "GET" : "POST"),
|
|
54
55
|
headers: raw ? { ...headers(false), "content-type": raw.type } : headers(body !== void 0),
|
|
55
56
|
body: raw ?? (body === void 0 ? void 0 : JSON.stringify(body))
|
|
56
57
|
});
|
|
57
58
|
const data = await res.json().catch(() => ({}));
|
|
58
|
-
if (!res.ok) throw new YouAskedError(data.error ?? `http_${res.status}
|
|
59
|
+
if (!res.ok) throw new YouAskedError(data.error ?? `http_${res.status}`, data.message);
|
|
59
60
|
return data;
|
|
60
61
|
}
|
|
61
62
|
return {
|
|
@@ -68,6 +69,7 @@ function createClient({ appKey, apiUrl, user, signature }) {
|
|
|
68
69
|
attachments: d.attachments ?? []
|
|
69
70
|
})),
|
|
70
71
|
upload: (image) => call("/uploads", void 0, image),
|
|
72
|
+
remove: (id) => call(`/requests/${encodeURIComponent(id)}`, void 0, void 0, "DELETE"),
|
|
71
73
|
earlyAccess: (id) => call(`/requests/${encodeURIComponent(id)}/early-access`, {}),
|
|
72
74
|
whatsNewSeen: () => call("/whats-new/seen", {}),
|
|
73
75
|
vote: (id) => call(`/requests/${encodeURIComponent(id)}/vote`, {}),
|
|
@@ -234,7 +236,20 @@ function createDemoClient(appName = "Acme") {
|
|
|
234
236
|
await wait();
|
|
235
237
|
const r = find(id);
|
|
236
238
|
if (!r) throw new YouAskedError("not_found");
|
|
237
|
-
|
|
239
|
+
const othersJoined = r.votes > (r.mine && r.voted ? 1 : 0) || r.comments_.some((c) => !c.mine);
|
|
240
|
+
return {
|
|
241
|
+
request: view(r),
|
|
242
|
+
comments: [...r.comments_],
|
|
243
|
+
attachments: [...r.attachments_],
|
|
244
|
+
earlyAccess: r.early,
|
|
245
|
+
canDelete: Boolean(r.mine) && (r.status === "open" || r.status === "pending") && !othersJoined
|
|
246
|
+
};
|
|
247
|
+
},
|
|
248
|
+
async remove(id) {
|
|
249
|
+
await wait();
|
|
250
|
+
const i = store.findIndex((r) => r.id === id);
|
|
251
|
+
if (i >= 0) store.splice(i, 1);
|
|
252
|
+
return { ok: true };
|
|
238
253
|
},
|
|
239
254
|
async create(input) {
|
|
240
255
|
await wait(650);
|
|
@@ -392,6 +407,9 @@ box-shadow:0 0 0 1px var(--_border),0 24px 70px rgba(0,0,0,.22);padding-bottom:0
|
|
|
392
407
|
.ya-link{display:inline-flex;align-items:center;gap:2px;font-size:14px;font-weight:600;color:var(--_accent);padding:6px 8px;border-radius:10px;flex:none}
|
|
393
408
|
.ya-link svg{width:15px;height:15px}
|
|
394
409
|
.ya-link:hover{background:var(--_tint)}
|
|
410
|
+
.ya-delete-row{display:flex;align-items:center;flex-wrap:wrap;gap:4px}
|
|
411
|
+
.ya-link-quiet{color:var(--_muted);font-weight:500;padding-left:0}
|
|
412
|
+
.ya-link-danger{color:#e5484d}
|
|
395
413
|
.ya-avatar{display:block;flex:none;border-radius:24%;object-fit:cover;background:var(--_surface)}
|
|
396
414
|
|
|
397
415
|
/* ---------- body, lists */
|
|
@@ -806,7 +824,8 @@ var STATUS_LABEL = {
|
|
|
806
824
|
planned: "Planned",
|
|
807
825
|
in_progress: "In progress",
|
|
808
826
|
shipped: "Shipped",
|
|
809
|
-
declined: "Not planned"
|
|
827
|
+
declined: "Not planned",
|
|
828
|
+
pending: "Awaiting approval"
|
|
810
829
|
};
|
|
811
830
|
function StatusPill({ status }) {
|
|
812
831
|
return /* @__PURE__ */ jsxs2("span", { className: "ya-pill", "data-s": status, children: [
|
|
@@ -852,13 +871,16 @@ function useLoad(load, deps) {
|
|
|
852
871
|
}, deps);
|
|
853
872
|
return { data, error, setData };
|
|
854
873
|
}
|
|
855
|
-
function errorText(code) {
|
|
874
|
+
function errorText(code, detail) {
|
|
875
|
+
if (detail) return detail;
|
|
856
876
|
switch (code) {
|
|
857
877
|
case "signature_required":
|
|
858
878
|
case "bad_signature":
|
|
859
879
|
return "We couldn't confirm who you are. Refresh the page and try again.";
|
|
860
880
|
case "slow_down":
|
|
861
881
|
return "That's a lot of requests in an hour. Try again a bit later.";
|
|
882
|
+
case "looks_like_spam":
|
|
883
|
+
return "That looks like spam, so we didn't post it. Reword it and try again.";
|
|
862
884
|
case "title_too_short":
|
|
863
885
|
return "Add a few more words so others know what you mean.";
|
|
864
886
|
case "network":
|
|
@@ -1074,7 +1096,7 @@ function Home({ route, setRoute, onClose }) {
|
|
|
1074
1096
|
} catch (err) {
|
|
1075
1097
|
setThread((th) => [
|
|
1076
1098
|
...th.filter((t) => t.kind !== "typing" && !(t.kind === "out" && t.text === message)),
|
|
1077
|
-
{ kind: "error", text: errorText(err instanceof YouAskedError ? err.code : "network") }
|
|
1099
|
+
{ kind: "error", text: errorText(err instanceof YouAskedError ? err.code : "network", err instanceof YouAskedError ? err.detail : void 0) }
|
|
1078
1100
|
]);
|
|
1079
1101
|
setText(message);
|
|
1080
1102
|
setShots(attached);
|
|
@@ -1310,6 +1332,21 @@ function Detail({ id, setRoute, onClose }) {
|
|
|
1310
1332
|
const [voted, setVoted] = useState2(null);
|
|
1311
1333
|
const [early, setEarly] = useState2(false);
|
|
1312
1334
|
useEffect2(() => setEarly(Boolean(data?.earlyAccess)), [data?.earlyAccess]);
|
|
1335
|
+
const [confirmDelete, setConfirmDelete] = useState2(false);
|
|
1336
|
+
const [deleting, setDeleting] = useState2(false);
|
|
1337
|
+
const [deleteError, setDeleteError] = useState2(null);
|
|
1338
|
+
const remove = async () => {
|
|
1339
|
+
if (!data?.request || deleting) return;
|
|
1340
|
+
setDeleting(true);
|
|
1341
|
+
setDeleteError(null);
|
|
1342
|
+
try {
|
|
1343
|
+
await client.remove(data.request.id);
|
|
1344
|
+
setRoute({ view: "mine" });
|
|
1345
|
+
} catch (err) {
|
|
1346
|
+
setDeleteError(errorText(err instanceof YouAskedError ? err.code : "network", err instanceof YouAskedError ? err.detail : void 0));
|
|
1347
|
+
setDeleting(false);
|
|
1348
|
+
}
|
|
1349
|
+
};
|
|
1313
1350
|
const toggleEarly = async () => {
|
|
1314
1351
|
if (!data?.request) return;
|
|
1315
1352
|
const before = early;
|
|
@@ -1335,7 +1372,7 @@ function Detail({ id, setRoute, onClose }) {
|
|
|
1335
1372
|
setData({ ...data, comments: [...comments, c], request: { ...request, comments: request.comments + 1 } });
|
|
1336
1373
|
setReply("");
|
|
1337
1374
|
} catch (err) {
|
|
1338
|
-
setReplyError(errorText(err instanceof YouAskedError ? err.code : "network"));
|
|
1375
|
+
setReplyError(errorText(err instanceof YouAskedError ? err.code : "network", err instanceof YouAskedError ? err.detail : void 0));
|
|
1339
1376
|
} finally {
|
|
1340
1377
|
setSending(false);
|
|
1341
1378
|
}
|
|
@@ -1362,7 +1399,19 @@ function Detail({ id, setRoute, onClose }) {
|
|
|
1362
1399
|
] }),
|
|
1363
1400
|
/* @__PURE__ */ jsx3("span", { className: "ya-switch", "aria-hidden": "true" })
|
|
1364
1401
|
] }),
|
|
1402
|
+
request.source && /* @__PURE__ */ jsxs3("p", { className: "ya-note", children: [
|
|
1403
|
+
"Also asked",
|
|
1404
|
+
" ",
|
|
1405
|
+
request.sourceUrl ? /* @__PURE__ */ jsx3("a", { href: request.sourceUrl, target: "_blank", rel: "noopener noreferrer", children: request.source === "reddit" ? "on Reddit" : "in App Store reviews" }) : request.source === "reddit" ? "on Reddit" : "in App Store reviews",
|
|
1406
|
+
"."
|
|
1407
|
+
] }),
|
|
1365
1408
|
request.mine && request.status !== "shipped" && /* @__PURE__ */ jsx3("p", { className: "ya-note", children: "You asked for this. We'll tell you here when it ships." }),
|
|
1409
|
+
data?.canDelete && (confirmDelete ? /* @__PURE__ */ jsxs3("p", { className: "ya-note ya-delete-row", children: [
|
|
1410
|
+
"Delete this request? This can't be undone.",
|
|
1411
|
+
/* @__PURE__ */ jsx3("button", { type: "button", className: "ya-link ya-link-danger", onClick: remove, disabled: deleting, children: deleting ? "Deleting\u2026" : "Delete" }),
|
|
1412
|
+
/* @__PURE__ */ jsx3("button", { type: "button", className: "ya-link", onClick: () => setConfirmDelete(false), disabled: deleting, children: "Keep it" })
|
|
1413
|
+
] }) : /* @__PURE__ */ jsx3("p", { className: "ya-note ya-delete-row", children: /* @__PURE__ */ jsx3("button", { type: "button", className: "ya-link ya-link-quiet", onClick: () => setConfirmDelete(true), children: "Delete my request" }) })),
|
|
1414
|
+
deleteError && /* @__PURE__ */ jsx3("p", { className: "ya-note", role: "alert", children: deleteError }),
|
|
1366
1415
|
request.status === "shipped" && /* @__PURE__ */ jsxs3("div", { className: "ya-callout", "data-tone": "success", children: [
|
|
1367
1416
|
/* @__PURE__ */ jsx3(IconCheck, {}),
|
|
1368
1417
|
/* @__PURE__ */ jsxs3("span", { children: [
|
|
@@ -1440,7 +1489,8 @@ function Mine({ setRoute, onClose }) {
|
|
|
1440
1489
|
|
|
1441
1490
|
// src/YouAsked.tsx
|
|
1442
1491
|
import { Fragment as Fragment2, jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
1443
|
-
var
|
|
1492
|
+
var warnedTestMode = false;
|
|
1493
|
+
var DEFAULT_API_URL = "https://api.youasked.dev";
|
|
1444
1494
|
function lastWhatsNew(key) {
|
|
1445
1495
|
try {
|
|
1446
1496
|
return key ? Number(localStorage.getItem(key)) || 0 : 0;
|
|
@@ -1481,6 +1531,7 @@ function YouAsked({
|
|
|
1481
1531
|
const [mounted, setMounted] = useState3(false);
|
|
1482
1532
|
const [route, setRoute] = useState3(null);
|
|
1483
1533
|
const [config, setConfig] = useState3(null);
|
|
1534
|
+
const [testMode, setTestMode] = useState3(false);
|
|
1484
1535
|
const [whatsNew, setWhatsNew] = useState3(null);
|
|
1485
1536
|
const [whatsNewToast, setWhatsNewToast] = useState3(false);
|
|
1486
1537
|
const [capture, setCapture] = useState3(null);
|
|
@@ -1505,7 +1556,13 @@ function YouAsked({
|
|
|
1505
1556
|
setConfig(c);
|
|
1506
1557
|
setWhatsNew(news);
|
|
1507
1558
|
setWhatsNewToast(Boolean(news) && c.unseen.filter((n) => !coveredBy(news, n)).length === 0);
|
|
1508
|
-
}).catch(() => {
|
|
1559
|
+
}).catch((err) => {
|
|
1560
|
+
if (!alive || !(err instanceof YouAskedError) || err.code !== "test_mode") return;
|
|
1561
|
+
setTestMode(true);
|
|
1562
|
+
if (!warnedTestMode) {
|
|
1563
|
+
warnedTestMode = true;
|
|
1564
|
+
console.warn(`[youasked] ${err.detail ?? "This app is in test mode. It works on localhost until it's on a paid plan."}`);
|
|
1565
|
+
}
|
|
1509
1566
|
});
|
|
1510
1567
|
return () => {
|
|
1511
1568
|
alive = false;
|
|
@@ -1588,6 +1645,7 @@ function YouAsked({
|
|
|
1588
1645
|
);
|
|
1589
1646
|
const standing = unseen.filter((n) => !coveredBy(whatsNew, n));
|
|
1590
1647
|
const notice = standing.find((n) => n.kind === "shipped") ?? standing.find((n) => n.kind === "reply");
|
|
1648
|
+
if (testMode) return /* @__PURE__ */ jsx4(YouAskedContext.Provider, { value, children });
|
|
1591
1649
|
return /* @__PURE__ */ jsxs4(YouAskedContext.Provider, { value, children: [
|
|
1592
1650
|
children,
|
|
1593
1651
|
mounted && createPortal(
|
|
@@ -1681,15 +1739,15 @@ function useTokens(appearance, mounted) {
|
|
|
1681
1739
|
return tokens;
|
|
1682
1740
|
}
|
|
1683
1741
|
function useMedia(query) {
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1742
|
+
return useSyncExternalStore(
|
|
1743
|
+
(onChange) => {
|
|
1744
|
+
const m = window.matchMedia(query);
|
|
1745
|
+
m.addEventListener("change", onChange);
|
|
1746
|
+
return () => m.removeEventListener("change", onChange);
|
|
1747
|
+
},
|
|
1748
|
+
() => window.matchMedia(query).matches,
|
|
1749
|
+
() => false
|
|
1750
|
+
);
|
|
1693
1751
|
}
|
|
1694
1752
|
function Panel({
|
|
1695
1753
|
route,
|
package/dist/shared.d.ts
CHANGED
|
@@ -33,7 +33,7 @@ export declare function useLoad<T>(load: () => Promise<T>, deps: unknown[]): {
|
|
|
33
33
|
error: string | null;
|
|
34
34
|
setData: import("react").Dispatch<import("react").SetStateAction<T | null>>;
|
|
35
35
|
};
|
|
36
|
-
export declare function errorText(code: string | null): string;
|
|
36
|
+
export declare function errorText(code: string | null, detail?: string): string;
|
|
37
37
|
export declare function whatsNewHeading(total: number): string;
|
|
38
38
|
export declare function ago(t: number): string;
|
|
39
39
|
/** The app's own icon, or nothing. A guessed letter tile looks generic, so it's never drawn. */
|
package/dist/styles.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const css = "\n.ya-scope{--_bg:var(--ya-bg);--_fg:var(--ya-fg);--_accent:var(--ya-accent);--_accent-fg:var(--ya-accent-fg);\n--_muted:var(--ya-muted,color-mix(in srgb,var(--ya-fg) 58%,var(--ya-bg)));\n--_surface:var(--ya-surface,color-mix(in srgb,var(--ya-fg) 5%,var(--ya-bg)));\n--_border:var(--ya-border,color-mix(in srgb,var(--ya-fg) 11%,var(--ya-bg)));\n--_tint:color-mix(in srgb,var(--_accent) 12%,transparent);\n--_radius:var(--ya-radius,14px);--_offset:var(--ya-offset,20px);--_green:#16a34a;--_amber:#c26a04;\nfont-family:var(--ya-font,inherit);color:var(--_fg);font-size:15px;line-height:1.45;letter-spacing:normal;text-align:left;-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent}\n.ya-scope[data-ya-mode=dark]{--_green:#3fd07f;--_amber:#f2a93b}\n.ya-scope :where(*,*::before,*::after){box-sizing:border-box}\n/* :where() keeps the reset at class-level specificity, so component rules below win. */\n.ya-scope :where(button){font:inherit;color:inherit;background:none;border:0;margin:0;padding:0;cursor:pointer;text-align:inherit;letter-spacing:inherit}\n.ya-scope :where(button:disabled){cursor:default}\n.ya-scope :where(h2,h3,p,ul){margin:0;padding:0}\n.ya-scope :focus-visible{outline:2px solid var(--_accent);outline-offset:2px}\n.ya-scope :where(svg){display:block;flex:none}\n.ya-inline{display:block}\n.ya-overlay[hidden]{display:none}\nspan.ya-inline{display:inline-block}\n\n/* ---------- overlay: bottom sheet on phones */\n.ya-overlay{position:fixed;inset:0;z-index:2147483600;display:flex;align-items:flex-end;justify-content:center}\n.ya-backdrop{position:absolute;inset:0;background:rgba(8,10,20,.42);animation:ya-fade .25s ease-out}\n.ya-panel{position:relative;width:100%;max-width:520px;height:min(90vh,760px);height:min(90dvh,760px);background:var(--_bg);color:var(--_fg);\nborder-radius:calc(var(--_radius) + 10px) calc(var(--_radius) + 10px) 0 0;box-shadow:0 -10px 40px rgba(0,0,0,.18);\ndisplay:flex;flex-direction:column;overflow:hidden;animation:ya-sheet-in .42s cubic-bezier(.2,.9,.25,1);padding-bottom:env(safe-area-inset-bottom)}\n.ya-panel:focus{outline:none}\n.ya-grab-zone{flex:none;padding:7px 0 0;cursor:grab;touch-action:none}\n.ya-grab{width:38px;height:5px;border-radius:3px;background:color-mix(in srgb,var(--_fg) 20%,var(--_bg));margin:0 auto}\n.ya-overlay[data-closing] .ya-panel{animation:ya-sheet-out .2s ease-in forwards}\n.ya-overlay[data-closing] .ya-backdrop{animation:ya-fade-out .2s ease-in forwards}\n\n/* ---------- desktop: a panel anchored to the corner, like a chat window */\n@media (min-width:640px){\n.ya-overlay{align-items:flex-end;justify-content:flex-end;padding:0 20px calc(var(--_offset) + env(safe-area-inset-bottom))}\n.ya-overlay[data-launcher]{padding-bottom:calc(var(--_offset) + 68px + env(safe-area-inset-bottom))}\n.ya-overlay[data-pos=bottom-left]{justify-content:flex-start}\n.ya-backdrop{background:transparent;animation:none}\n.ya-panel{width:400px;max-width:calc(100vw - 40px);height:min(680px,calc(100vh - var(--_offset) - 110px));border-radius:calc(var(--_radius) + 8px);\nbox-shadow:0 0 0 1px var(--_border),0 24px 70px rgba(0,0,0,.22);padding-bottom:0;transform-origin:bottom right;animation:ya-pop-in .28s cubic-bezier(.16,1,.3,1)}\n.ya-overlay[data-pos=bottom-left] .ya-panel{transform-origin:bottom left}\n.ya-overlay[data-closing] .ya-panel{animation:ya-pop-out .18s ease-in forwards}\n.ya-grab-zone{display:none}\n}\n\n/* ---------- header */\n.ya-head{display:flex;align-items:center;gap:10px;padding:12px 12px 10px 18px;flex:none;touch-action:none}\n.ya-head-back{padding-left:8px}\n.ya-head-text{flex:1;min-width:0}\n.ya-h{font-size:17px;font-weight:700;letter-spacing:-.015em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.25}\n.ya-sub{font-size:12.5px;color:var(--_muted);margin-top:1px}\n.ya-icon-btn{width:34px;height:34px;border-radius:999px;display:grid;place-items:center;color:var(--_muted);flex:none;background:var(--_surface)}\n.ya-icon-btn:hover{color:var(--_fg)}\n.ya-head-back .ya-icon-btn:first-child{background:none}\n.ya-link{display:inline-flex;align-items:center;gap:2px;font-size:14px;font-weight:600;color:var(--_accent);padding:6px 8px;border-radius:10px;flex:none}\n.ya-link svg{width:15px;height:15px}\n.ya-link:hover{background:var(--_tint)}\n.ya-avatar{display:block;flex:none;border-radius:24%;object-fit:cover;background:var(--_surface)}\n\n/* ---------- body, lists */\n.ya-body{flex:1;min-height:0;overflow-y:auto;padding:6px 16px 18px;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}\n.ya-list{list-style:none;display:flex;flex-direction:column;gap:8px}\n.ya-row{display:flex;gap:12px;align-items:center;padding:10px 12px;border-radius:var(--_radius);background:var(--_surface)}\n.ya-row-sm{padding:8px 10px;gap:10px}\n.ya-row-main{flex:1;min-width:0;display:block;padding:2px 0}\n.ya-row-title{font-weight:600;font-size:15px;line-height:1.35;overflow-wrap:anywhere;display:block}\n.ya-row-sm .ya-row-title{font-size:14.5px}\n.ya-meta{display:flex;align-items:center;gap:8px;margin-top:5px;font-size:12.5px;color:var(--_muted);flex-wrap:wrap}\n.ya-meta svg{width:13px;height:13px}\n.ya-meta span{display:inline-flex;align-items:center;gap:4px}\n\n.ya-vote{flex:none;width:46px;padding:6px 0 5px;border-radius:calc(var(--_radius) - 4px);background:var(--_bg);border:1px solid var(--_border);display:flex;flex-direction:column;align-items:center;font-weight:700;font-size:14px;line-height:1.2;color:var(--_fg);transition:transform .12s,background .15s,border-color .15s,color .15s;font-variant-numeric:tabular-nums}\n.ya-vote-sm{width:40px;padding:4px 0 3px;font-size:13px}\n.ya-vote svg{width:16px;height:16px}\n.ya-vote-sm svg{width:14px;height:14px}\n.ya-vote:hover{border-color:var(--_accent)}\n.ya-vote[aria-pressed=true]{background:var(--_accent);border-color:var(--_accent);color:var(--_accent-fg)}\n.ya-vote:active,.ya-bigvote:active,.ya-btn:active,.ya-fab:active,.ya-send:active,.ya-askbar:active,.ya-pillbtn:active,.ya-iconbtn:active{transform:scale(.95)}\n\n.ya-pill{display:inline-flex;align-items:center;gap:5px;padding:2px 8px;border-radius:999px;font-size:12px;font-weight:650;background:var(--_bg);color:var(--_muted);white-space:nowrap}\n.ya-pill[data-s=planned]{background:var(--_tint);color:var(--_accent)}\n.ya-pill[data-s=in_progress]{background:color-mix(in srgb,var(--_amber) 16%,transparent);color:var(--_amber)}\n.ya-pill[data-s=shipped]{background:color-mix(in srgb,var(--_green) 15%,transparent);color:var(--_green)}\n\n/* ---------- home: chat */\n.ya-chat{display:flex;flex-direction:column;gap:10px;padding-top:4px}\n.ya-bubble{max-width:86%;padding:10px 14px;border-radius:20px;font-size:15px;line-height:1.4;overflow-wrap:anywhere;animation:ya-bubble .3s cubic-bezier(.2,.9,.3,1.2);display:flex;flex-direction:column;gap:6px;align-items:flex-start}\n.ya-bubble b{font-weight:650}\n.ya-bubble-in{align-self:flex-start;background:var(--_surface);border-bottom-left-radius:6px}\n.ya-bubble-out{align-self:flex-end;background:var(--_accent);color:var(--_accent-fg);border-bottom-right-radius:6px;white-space:pre-wrap}\n.ya-bubble-win{background:color-mix(in srgb,var(--_green) 12%,var(--_bg))}\n.ya-bubble-error{background:color-mix(in srgb,#e5484d 12%,var(--_bg))}\n.ya-bubble-link{font-size:14px;font-weight:650;color:var(--_accent);padding:2px 0}\n.ya-bubble-img{display:block;width:100%;max-width:220px;border-radius:12px;margin-bottom:2px;box-shadow:0 0 0 1px color-mix(in srgb,var(--_accent-fg) 25%,transparent)}\n.ya-bubble-news{position:relative;align-self:stretch;max-width:100%;gap:8px}\n.ya-news{list-style:none;width:100%;display:flex;flex-direction:column}\n.ya-news button{display:flex;align-items:center;gap:10px;width:100%;padding:8px 0;border-top:1px solid color-mix(in srgb,var(--_fg) 9%,transparent);text-align:left}\n.ya-news li:first-child button{border-top:0}\n.ya-news > li > button > svg:last-child{color:var(--_muted);width:16px;height:16px}\n.ya-news-text{flex:1;min-width:0;display:flex;flex-direction:column}\n.ya-news-title{font-size:14.5px;font-weight:600;line-height:1.3}\n.ya-news-you{font-size:12px;font-weight:650;color:var(--_green)}\n/* A short burst from the corner. Hidden by default, so reduced motion (animation off) shows nothing. */\n.ya-confetti{position:absolute;top:14px;right:18px;width:0;height:0;pointer-events:none}\n.ya-confetti i{position:absolute;left:-3px;top:-3px;width:6px;height:9px;border-radius:2px;opacity:0;animation:ya-confetti .95s cubic-bezier(.2,.7,.3,1) both}\n.ya-typing{flex-direction:row;gap:4px;padding:14px 16px}\n.ya-typing span{width:7px;height:7px;border-radius:50%;background:var(--_muted);animation:ya-dot 1s infinite ease-in-out}\n.ya-typing span:nth-child(2){animation-delay:.15s}\n.ya-typing span:nth-child(3){animation-delay:.3s}\n.ya-chip{align-self:center;margin-top:6px;font-size:13.5px;font-weight:600;color:var(--_accent);padding:8px 14px;border-radius:999px;background:var(--_tint)}\n.ya-section{margin-top:12px}\n.ya-section-head{display:flex;align-items:center;justify-content:space-between;margin:0 0 8px}\n.ya-section-head h3{font-size:13px;font-weight:650;color:var(--_muted)}\n.ya-shipped{list-style:none;display:flex;flex-direction:column}\n.ya-shipped button{display:flex;align-items:center;gap:10px;width:100%;padding:9px 2px;border-bottom:1px solid var(--_border)}\n.ya-shipped li:last-child button{border-bottom:0}\n.ya-shipped-dot{width:22px;height:22px;border-radius:50%;display:grid;place-items:center;background:color-mix(in srgb,var(--_green) 16%,transparent);color:var(--_green);flex:none}\n.ya-shipped-title{flex:1;min-width:0;font-size:14.5px;font-weight:550;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n.ya-shipped-when{font-size:12.5px;color:var(--_muted);flex:none}\n.ya-note{font-size:13.5px;color:var(--_muted);margin-top:10px}\n\n.ya-composer-wrap{flex:none;padding:8px 12px 12px;background:var(--_bg);border-top:1px solid var(--_border)}\n.ya-tray{padding:10px;margin-bottom:8px;border-radius:calc(var(--_radius) + 2px);background:var(--_tint);animation:ya-tray .22s cubic-bezier(.2,.9,.3,1)}\n.ya-tray-h{font-size:13px;font-weight:650;margin:0 2px 8px}\n.ya-tray .ya-row{background:var(--_bg)}\n.ya-composer{display:flex;align-items:flex-end;gap:8px;padding:5px 5px 5px 16px;border-radius:24px;background:var(--_surface);border:1.5px solid transparent;transition:border-color .15s}\n.ya-composer:focus-within{border-color:color-mix(in srgb,var(--_accent) 55%,transparent)}\n.ya-composer-bar{flex:none;margin:8px 12px 12px}\n.ya-composer-input{flex:1;min-width:0;border:0;outline:none;background:none;resize:none;font:inherit;font-size:16px;line-height:1.4;color:var(--_fg);padding:7px 0;margin:0;min-height:calc(1.4em + 14px);max-height:132px;overflow-y:auto}\n.ya-composer-input::placeholder{color:var(--_muted);opacity:1}\n.ya-composer-input:focus-visible{outline:none}\n.ya-send{width:36px;height:36px;border-radius:50%;display:grid;place-items:center;background:var(--_accent);color:var(--_accent-fg);flex:none;transition:opacity .15s,transform .12s}\n.ya-send svg{width:18px;height:18px}\n.ya-send:disabled{opacity:.3}\n.ya-shots{list-style:none;display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px;animation:ya-tray .22s cubic-bezier(.2,.9,.3,1)}\n.ya-shot{display:flex;align-items:center;gap:8px;padding:4px 4px 4px 4px;border-radius:14px;background:var(--_surface);font-size:13px;font-weight:600;max-width:100%}\n.ya-shot img{display:block;width:40px;height:40px;border-radius:10px;object-fit:cover;object-position:top;flex:none;box-shadow:0 0 0 1px var(--_border)}\n.ya-shot span{padding-right:2px}\n.ya-shot-x{width:24px;height:24px;border-radius:50%;display:grid;place-items:center;color:var(--_muted);flex:none}\n.ya-shot-x:hover{color:var(--_fg);background:var(--_border)}\n.ya-shot-x svg{width:13px;height:13px}\n.ya-tools{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:8px;min-height:32px}\n.ya-tool{display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 12px 0 9px;border-radius:999px;background:var(--_tint);color:var(--_accent);font-size:13.5px;font-weight:650;transition:transform .12s,opacity .15s;flex:none}\n.ya-tool svg{width:16px;height:16px}\n.ya-tool:disabled{opacity:.4}\n.ya-tool:active{transform:scale(.96)}\n.ya-switch-row{display:inline-flex;align-items:center;gap:8px;font-size:13px;font-weight:600;color:var(--_muted);padding:4px 0 4px 8px;min-width:0;animation:ya-tray .2s ease-out}\n.ya-switch-row[aria-checked=true]{color:var(--_fg)}\n.ya-switch{position:relative;width:34px;height:20px;border-radius:999px;background:color-mix(in srgb,var(--_fg) 18%,var(--_bg));flex:none;transition:background .18s}\n.ya-switch::after{content:\"\";position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.3);transition:transform .2s cubic-bezier(.3,1.3,.5,1)}\n[aria-checked=true] > .ya-switch{background:var(--_accent)}\n[aria-checked=true] > .ya-switch::after{transform:translateX(14px)}\n.ya-mark{text-align:center;font-size:11.5px;color:var(--_muted);margin-top:8px}\n\n\n.ya-bubble-kicker{font-size:12.5px;font-weight:650;color:var(--_muted)}\n.ya-detail-meta{display:flex;align-items:center;gap:8px}\n.ya-ref{font-size:12px;font-weight:650;color:var(--_muted);font-variant-numeric:tabular-nums;letter-spacing:.02em}\n.ya-thread{display:flex;flex-direction:column;gap:12px;margin-top:8px}\n.ya-msg{display:flex;gap:8px;align-items:flex-end;max-width:92%}\n.ya-msg .ya-avatar{border-radius:50%;margin-bottom:2px}\n.ya-msg-body{display:flex;flex-direction:column;gap:3px;min-width:0}\n.ya-msg-body .ya-bubble{max-width:100%;animation:none}\n.ya-msg-out{align-self:flex-end;flex-direction:column;align-items:flex-end;gap:3px}\n.ya-msg-out .ya-bubble{max-width:100%;animation:none}\n.ya-msg-meta{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--_muted);padding:0 4px}\n.ya-msg-meta b{color:var(--_fg);font-weight:650}\n/* ---------- board, detail */\n.ya-tabs{display:flex;gap:2px;margin:0 16px 8px;padding:3px;background:var(--_surface);border-radius:calc(var(--_radius) - 2px);flex:none}\n.ya-tab{flex:1;padding:7px 0;border-radius:calc(var(--_radius) - 5px);font-size:14px;font-weight:600;color:var(--_muted);text-align:center;transition:background .15s,color .15s}\n.ya-tab[aria-selected=true]{background:var(--_bg);color:var(--_fg);box-shadow:0 1px 3px rgba(0,0,0,.1)}\n.ya-foot{padding:12px 16px 14px;border-top:1px solid var(--_border);display:flex;flex-direction:column;gap:9px;flex:none;background:var(--_bg)}\n.ya-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:48px;padding:0 18px;border-radius:var(--_radius);background:var(--_accent);color:var(--_accent-fg);font-weight:650;font-size:15px;width:100%;transition:opacity .15s,transform .12s;white-space:nowrap}\n.ya-btn svg{width:18px;height:18px}\n.ya-btn:disabled{opacity:.4}\n.ya-btn-sm{height:38px;width:auto;padding:0 14px;font-size:14px;border-radius:calc(var(--_radius) - 3px)}\n.ya-btn-ghost{background:var(--_surface);color:var(--_fg)}\n.ya-callout{display:flex;gap:10px;align-items:flex-start;padding:12px 14px;border-radius:var(--_radius);font-size:14px;margin-top:14px;line-height:1.4;background:color-mix(in srgb,var(--_green) 12%,var(--_bg))}\n.ya-callout svg{width:18px;height:18px;margin-top:1px;color:var(--_green)}\n.ya-callout b{font-weight:650}\n.ya-detail-title{font-size:21px;font-weight:700;letter-spacing:-.015em;margin:10px 0 8px;overflow-wrap:anywhere;line-height:1.28}\n.ya-text{white-space:pre-wrap;overflow-wrap:anywhere;font-size:15px;color:var(--_fg)}\n.ya-text-muted{color:var(--_muted)}\n.ya-bigvote{margin-top:16px;display:inline-flex;align-items:center;gap:8px;height:40px;padding:0 16px 0 12px;border-radius:999px;border:1px solid var(--_border);font-weight:650;font-size:14.5px;transition:transform .12s,background .15s,color .15s;font-variant-numeric:tabular-nums}\n.ya-bigvote svg{width:17px;height:17px}\n.ya-bigvote[aria-pressed=true]{background:var(--_accent);border-color:var(--_accent);color:var(--_accent-fg)}\n.ya-attachments{display:flex;flex-direction:column;gap:8px;margin-top:12px}\n.ya-attachments a{display:block;border-radius:var(--_radius);overflow:hidden;box-shadow:0 0 0 1px var(--_border)}\n.ya-attachments img{display:block;width:100%;height:auto;max-height:340px;object-fit:cover;object-position:top}\n.ya-early{display:flex;align-items:center;gap:12px;width:100%;margin-top:12px;padding:10px 14px 10px 12px;border-radius:var(--_radius);background:var(--_surface);animation:ya-tray .22s cubic-bezier(.2,.9,.3,1)}\n.ya-early .ya-card-icon{width:32px;height:32px}\n.ya-early[aria-checked=true] .ya-card-icon{background:var(--_accent);color:var(--_accent-fg)}\n.ya-credit{display:block;margin-top:2px;color:var(--_muted)}\n.ya-section-h{font-size:13px;font-weight:650;color:var(--_muted);margin:26px 0 4px}\n.ya-comment{padding:11px 0;border-bottom:1px solid var(--_border)}\n.ya-comment:last-child{border-bottom:0}\n.ya-comment-who{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:650;margin-bottom:3px}\n.ya-comment-who time{font-weight:400;color:var(--_muted)}\n.ya-team{font-size:11px;font-weight:700;padding:1px 7px;border-radius:999px;background:var(--_accent);color:var(--_accent-fg)}\n.ya-empty{text-align:center;padding:44px 16px;color:var(--_muted)}\n.ya-empty b{display:block;color:var(--_fg);font-size:16px;margin-bottom:4px}\n.ya-skel{height:58px;border-radius:var(--_radius);background:var(--_surface);animation:ya-pulse 1.3s ease-in-out infinite}\n\n/* ---------- launcher, toast */\n.ya-fab{position:fixed;z-index:2147483650;bottom:calc(var(--_offset) + env(safe-area-inset-bottom));right:20px;height:56px;min-width:56px;padding:0;border-radius:999px;background:var(--_accent);color:var(--_accent-fg);display:flex;align-items:center;justify-content:center;gap:8px;font-weight:650;font-size:15px;box-shadow:0 10px 30px color-mix(in srgb,var(--_accent) 35%,rgba(0,0,0,.25));transition:transform .15s}\n.ya-fab-label{padding:0 20px 0 16px}\n.ya-fab-icon{display:grid;place-items:center}\n.ya-fab svg{width:26px;height:26px}\n.ya-fab[data-open] svg{width:22px;height:22px}\n.ya-fab[data-pos=bottom-left]{right:auto;left:20px}\n.ya-fab .ya-dot{position:absolute;top:4px;right:4px}\n.ya-fab-label .ya-dot{position:static}\n@media (max-width:639px){.ya-fab[data-open]{display:none}}\n.ya-dot{width:10px;height:10px;border-radius:50%;background:#ff3b30;box-shadow:0 0 0 2px var(--_bg)}\n\n.ya-toast{position:fixed;z-index:2147483550;right:20px;bottom:calc(var(--_offset) + 68px + env(safe-area-inset-bottom));width:min(370px,calc(100vw - 32px));background:var(--_bg);color:var(--_fg);border:1px solid var(--_border);border-radius:calc(var(--_radius) + 6px);box-shadow:0 20px 60px rgba(0,0,0,.25);padding:16px 16px 14px;animation:ya-pop .45s cubic-bezier(.34,1.36,.64,1)}\n.ya-toast[data-pos=bottom-left]{right:auto;left:20px}\n.ya-toast[data-trigger=none]{bottom:calc(var(--_offset) + env(safe-area-inset-bottom))}\n@media (max-width:480px){.ya-toast,.ya-toast[data-pos=bottom-left]{left:16px;right:16px;width:auto}}\n.ya-toast-top{display:flex;align-items:center;justify-content:space-between;gap:8px}\n.ya-toast-kicker{font-size:12.5px;font-weight:650;color:var(--_muted)}\n.ya-toast-title{font-size:17px;font-weight:750;letter-spacing:-.01em;margin-top:3px;overflow-wrap:anywhere;line-height:1.3}\n.ya-live{display:inline-flex;align-items:center;gap:6px;font-size:14px;font-weight:700;color:var(--_green)}\n.ya-toast .ya-live{margin-top:8px}\n.ya-live svg{width:15px;height:15px}\n.ya-toast-note{font-size:13.5px;color:var(--_muted);margin-top:6px;overflow-wrap:anywhere}\n.ya-toast-actions{display:flex;gap:8px;margin-top:12px}\n.ya-toast-quote{color:var(--_fg);display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}\n.ya-toast .ya-icon-btn{width:30px;height:30px;margin:-6px -6px 0 0;background:none}\n\n/* ---------- inline entry points */\n.ya-askbar{display:flex;align-items:center;gap:12px;width:100%;padding:8px 8px 8px 10px;border-radius:999px;background:var(--_bg);border:1px solid var(--_border);color:var(--_muted);font-size:15.5px;text-align:left;box-shadow:0 1px 2px rgba(0,0,0,.04);transition:border-color .15s,transform .12s}\n.ya-askbar:hover{border-color:color-mix(in srgb,var(--_accent) 50%,var(--_border))}\n.ya-askbar .ya-avatar{border-radius:30%}\n.ya-askbar-glyph{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;background:var(--_tint);color:var(--_accent);flex:none}\n.ya-askbar-glyph svg{width:18px;height:18px}\n.ya-askbar-text{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n.ya-askbar-send{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;background:var(--_accent);color:var(--_accent-fg);flex:none}\n.ya-askbar-send svg{width:17px;height:17px}\n.ya-badge{min-width:20px;height:20px;padding:0 6px;border-radius:999px;background:#ff3b30;color:#fff;font-size:12px;font-weight:700;display:inline-grid;place-items:center;flex:none}\n\n.ya-card{background:var(--_bg);border-radius:calc(var(--_radius) + 6px);padding:16px;display:flex;flex-direction:column;gap:12px}\n.ya-card-head{display:flex;align-items:center;gap:12px}\n.ya-card-icon{width:36px;height:36px;border-radius:30%;display:grid;place-items:center;background:var(--_tint);color:var(--_accent);flex:none}\n.ya-card-icon svg{width:19px;height:19px}\n.ya-card-title{font-size:16px;font-weight:700;letter-spacing:-.01em}\n.ya-card-sub{font-size:13px;color:var(--_muted);margin-top:1px}\n.ya-card-win{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:var(--_radius);background:color-mix(in srgb,var(--_green) 12%,var(--_bg));font-size:14px;text-align:left}\n.ya-card-win > span:nth-child(2){flex:1;min-width:0}\n.ya-card-win b{font-weight:650}\n.ya-card-actions{display:flex;gap:8px}\n.ya-card-actions .ya-btn{flex:1}\n\n.ya-pillbtn{display:inline-flex;align-items:center;gap:8px;height:40px;padding:0 16px 0 13px;border-radius:999px;background:var(--_tint);color:var(--_accent);font-weight:650;font-size:14.5px;transition:transform .12s}\n.ya-pillbtn svg{width:18px;height:18px}\n.ya-pillbtn .ya-badge{margin-right:-6px}\n.ya-iconbtn{position:relative;width:40px;height:40px;border-radius:50%;display:grid;place-items:center;background:var(--_surface);color:var(--_fg);transition:transform .12s}\n.ya-iconbtn svg{width:21px;height:21px}\n.ya-iconbtn .ya-dot{position:absolute;top:1px;right:1px;width:9px;height:9px}\n.ya-menurow{display:flex;align-items:center;gap:12px;width:100%;padding:12px 14px;border-radius:var(--_radius);background:var(--_bg);text-align:left;color:var(--_fg)}\n.ya-menurow > svg{color:var(--_muted);width:17px;height:17px}\n.ya-menurow .ya-card-icon{width:32px;height:32px}\n.ya-menurow-text{flex:1;min-width:0;display:flex;flex-direction:column}\n.ya-menurow-label{font-size:15.5px;font-weight:600}\n.ya-menurow-sub{font-size:13px;color:var(--_muted)}\n\n.ya-askabout{display:inline-flex;align-items:center;gap:6px;font-size:13.5px;line-height:1.3;color:var(--_muted);padding:2px 0;border-radius:6px;text-decoration:underline;text-decoration-color:transparent;text-underline-offset:3px;transition:color .15s,text-decoration-color .15s}\n.ya-askabout svg{width:14px;height:14px;color:var(--_accent)}\n.ya-askabout:hover{color:var(--_fg);text-decoration-color:currentColor}\n.ya-askforit{display:inline-flex;align-items:center;flex-wrap:wrap;gap:4px 8px;font-size:14.5px;color:var(--_muted);padding:4px 0;text-align:left}\n.ya-askforit b{white-space:nowrap;display:inline-flex;align-items:center;gap:1px;font-weight:650;color:var(--_accent);padding:3px 6px 3px 12px;border-radius:999px;background:var(--_tint);transition:transform .12s}\n.ya-askforit b svg{width:15px;height:15px}\n.ya-askforit:active b{transform:scale(.96)}\n\n/* ---------- show us: draw on the page */\n.ya-capture{position:fixed;inset:0;z-index:2147483640;animation:ya-fade .18s ease-out}\n.ya-capture-sample{position:absolute;color:var(--_accent);width:0;height:0;overflow:hidden}\n.ya-capture-surface{position:absolute;inset:0;background:rgba(8,10,20,.2);cursor:crosshair;touch-action:none;-webkit-user-select:none;user-select:none}\n.ya-capture-box{position:absolute;border:3px solid var(--_accent);border-radius:8px;background:var(--_tint);box-shadow:0 0 0 2px rgba(255,255,255,.92);pointer-events:none}\n.ya-capture-hint{position:absolute;top:calc(14px + env(safe-area-inset-top));left:50%;transform:translateX(-50%);max-width:calc(100vw - 24px);white-space:nowrap;padding:9px 16px;border-radius:999px;background:var(--_bg);color:var(--_fg);font-size:14px;font-weight:650;text-align:center;box-shadow:0 6px 24px rgba(0,0,0,.25);pointer-events:none;animation:ya-pop .35s cubic-bezier(.34,1.36,.64,1)}\n.ya-capture-bar{position:absolute;left:50%;transform:translateX(-50%);bottom:calc(18px + env(safe-area-inset-bottom));display:flex;gap:8px;padding:8px;border-radius:calc(var(--_radius) + 8px);background:var(--_bg);box-shadow:0 10px 40px rgba(0,0,0,.3),0 0 0 1px var(--_border)}\n.ya-capture-bar .ya-btn{min-width:84px}\n.ya-capture[data-busy] .ya-capture-surface{cursor:progress}\n\n.ya-embed{position:relative;display:flex;flex-direction:column;background:var(--_bg);border-radius:calc(var(--_radius) + 6px);overflow:hidden;border:1px solid var(--_border)}\n\n.ya-sr{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}\n\n@keyframes ya-sheet-in{from{transform:translateY(100%)}}\n@keyframes ya-sheet-out{to{transform:translateY(100%)}}\n@keyframes ya-pop-in{from{transform:translateY(12px) scale(.96);opacity:0}}\n@keyframes ya-pop-out{to{transform:translateY(8px) scale(.97);opacity:0}}\n@keyframes ya-fade{from{opacity:0}}\n@keyframes ya-fade-out{to{opacity:0}}\n@keyframes ya-pop{from{transform:translateY(14px) scale(.96);opacity:0}}\n@keyframes ya-bubble{from{transform:translateY(8px) scale(.97);opacity:0}}\n@keyframes ya-tray{from{transform:translateY(6px);opacity:0}}\n@keyframes ya-dot{0%,80%,100%{transform:translateY(0);opacity:.5}40%{transform:translateY(-4px);opacity:1}}\n@keyframes ya-confetti{0%{opacity:1;transform:translate(0,0) rotate(0) scale(.6)}70%{opacity:1}100%{opacity:0;transform:translate(var(--x),var(--y)) rotate(var(--r)) scale(1)}}\n@keyframes ya-pulse{50%{opacity:.5}}\n@media (prefers-reduced-motion:reduce){.ya-scope *{animation:none!important;transition:none!important}}\n";
|
|
1
|
+
export declare const css = "\n.ya-scope{--_bg:var(--ya-bg);--_fg:var(--ya-fg);--_accent:var(--ya-accent);--_accent-fg:var(--ya-accent-fg);\n--_muted:var(--ya-muted,color-mix(in srgb,var(--ya-fg) 58%,var(--ya-bg)));\n--_surface:var(--ya-surface,color-mix(in srgb,var(--ya-fg) 5%,var(--ya-bg)));\n--_border:var(--ya-border,color-mix(in srgb,var(--ya-fg) 11%,var(--ya-bg)));\n--_tint:color-mix(in srgb,var(--_accent) 12%,transparent);\n--_radius:var(--ya-radius,14px);--_offset:var(--ya-offset,20px);--_green:#16a34a;--_amber:#c26a04;\nfont-family:var(--ya-font,inherit);color:var(--_fg);font-size:15px;line-height:1.45;letter-spacing:normal;text-align:left;-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent}\n.ya-scope[data-ya-mode=dark]{--_green:#3fd07f;--_amber:#f2a93b}\n.ya-scope :where(*,*::before,*::after){box-sizing:border-box}\n/* :where() keeps the reset at class-level specificity, so component rules below win. */\n.ya-scope :where(button){font:inherit;color:inherit;background:none;border:0;margin:0;padding:0;cursor:pointer;text-align:inherit;letter-spacing:inherit}\n.ya-scope :where(button:disabled){cursor:default}\n.ya-scope :where(h2,h3,p,ul){margin:0;padding:0}\n.ya-scope :focus-visible{outline:2px solid var(--_accent);outline-offset:2px}\n.ya-scope :where(svg){display:block;flex:none}\n.ya-inline{display:block}\n.ya-overlay[hidden]{display:none}\nspan.ya-inline{display:inline-block}\n\n/* ---------- overlay: bottom sheet on phones */\n.ya-overlay{position:fixed;inset:0;z-index:2147483600;display:flex;align-items:flex-end;justify-content:center}\n.ya-backdrop{position:absolute;inset:0;background:rgba(8,10,20,.42);animation:ya-fade .25s ease-out}\n.ya-panel{position:relative;width:100%;max-width:520px;height:min(90vh,760px);height:min(90dvh,760px);background:var(--_bg);color:var(--_fg);\nborder-radius:calc(var(--_radius) + 10px) calc(var(--_radius) + 10px) 0 0;box-shadow:0 -10px 40px rgba(0,0,0,.18);\ndisplay:flex;flex-direction:column;overflow:hidden;animation:ya-sheet-in .42s cubic-bezier(.2,.9,.25,1);padding-bottom:env(safe-area-inset-bottom)}\n.ya-panel:focus{outline:none}\n.ya-grab-zone{flex:none;padding:7px 0 0;cursor:grab;touch-action:none}\n.ya-grab{width:38px;height:5px;border-radius:3px;background:color-mix(in srgb,var(--_fg) 20%,var(--_bg));margin:0 auto}\n.ya-overlay[data-closing] .ya-panel{animation:ya-sheet-out .2s ease-in forwards}\n.ya-overlay[data-closing] .ya-backdrop{animation:ya-fade-out .2s ease-in forwards}\n\n/* ---------- desktop: a panel anchored to the corner, like a chat window */\n@media (min-width:640px){\n.ya-overlay{align-items:flex-end;justify-content:flex-end;padding:0 20px calc(var(--_offset) + env(safe-area-inset-bottom))}\n.ya-overlay[data-launcher]{padding-bottom:calc(var(--_offset) + 68px + env(safe-area-inset-bottom))}\n.ya-overlay[data-pos=bottom-left]{justify-content:flex-start}\n.ya-backdrop{background:transparent;animation:none}\n.ya-panel{width:400px;max-width:calc(100vw - 40px);height:min(680px,calc(100vh - var(--_offset) - 110px));border-radius:calc(var(--_radius) + 8px);\nbox-shadow:0 0 0 1px var(--_border),0 24px 70px rgba(0,0,0,.22);padding-bottom:0;transform-origin:bottom right;animation:ya-pop-in .28s cubic-bezier(.16,1,.3,1)}\n.ya-overlay[data-pos=bottom-left] .ya-panel{transform-origin:bottom left}\n.ya-overlay[data-closing] .ya-panel{animation:ya-pop-out .18s ease-in forwards}\n.ya-grab-zone{display:none}\n}\n\n/* ---------- header */\n.ya-head{display:flex;align-items:center;gap:10px;padding:12px 12px 10px 18px;flex:none;touch-action:none}\n.ya-head-back{padding-left:8px}\n.ya-head-text{flex:1;min-width:0}\n.ya-h{font-size:17px;font-weight:700;letter-spacing:-.015em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.25}\n.ya-sub{font-size:12.5px;color:var(--_muted);margin-top:1px}\n.ya-icon-btn{width:34px;height:34px;border-radius:999px;display:grid;place-items:center;color:var(--_muted);flex:none;background:var(--_surface)}\n.ya-icon-btn:hover{color:var(--_fg)}\n.ya-head-back .ya-icon-btn:first-child{background:none}\n.ya-link{display:inline-flex;align-items:center;gap:2px;font-size:14px;font-weight:600;color:var(--_accent);padding:6px 8px;border-radius:10px;flex:none}\n.ya-link svg{width:15px;height:15px}\n.ya-link:hover{background:var(--_tint)}\n.ya-delete-row{display:flex;align-items:center;flex-wrap:wrap;gap:4px}\n.ya-link-quiet{color:var(--_muted);font-weight:500;padding-left:0}\n.ya-link-danger{color:#e5484d}\n.ya-avatar{display:block;flex:none;border-radius:24%;object-fit:cover;background:var(--_surface)}\n\n/* ---------- body, lists */\n.ya-body{flex:1;min-height:0;overflow-y:auto;padding:6px 16px 18px;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}\n.ya-list{list-style:none;display:flex;flex-direction:column;gap:8px}\n.ya-row{display:flex;gap:12px;align-items:center;padding:10px 12px;border-radius:var(--_radius);background:var(--_surface)}\n.ya-row-sm{padding:8px 10px;gap:10px}\n.ya-row-main{flex:1;min-width:0;display:block;padding:2px 0}\n.ya-row-title{font-weight:600;font-size:15px;line-height:1.35;overflow-wrap:anywhere;display:block}\n.ya-row-sm .ya-row-title{font-size:14.5px}\n.ya-meta{display:flex;align-items:center;gap:8px;margin-top:5px;font-size:12.5px;color:var(--_muted);flex-wrap:wrap}\n.ya-meta svg{width:13px;height:13px}\n.ya-meta span{display:inline-flex;align-items:center;gap:4px}\n\n.ya-vote{flex:none;width:46px;padding:6px 0 5px;border-radius:calc(var(--_radius) - 4px);background:var(--_bg);border:1px solid var(--_border);display:flex;flex-direction:column;align-items:center;font-weight:700;font-size:14px;line-height:1.2;color:var(--_fg);transition:transform .12s,background .15s,border-color .15s,color .15s;font-variant-numeric:tabular-nums}\n.ya-vote-sm{width:40px;padding:4px 0 3px;font-size:13px}\n.ya-vote svg{width:16px;height:16px}\n.ya-vote-sm svg{width:14px;height:14px}\n.ya-vote:hover{border-color:var(--_accent)}\n.ya-vote[aria-pressed=true]{background:var(--_accent);border-color:var(--_accent);color:var(--_accent-fg)}\n.ya-vote:active,.ya-bigvote:active,.ya-btn:active,.ya-fab:active,.ya-send:active,.ya-askbar:active,.ya-pillbtn:active,.ya-iconbtn:active{transform:scale(.95)}\n\n.ya-pill{display:inline-flex;align-items:center;gap:5px;padding:2px 8px;border-radius:999px;font-size:12px;font-weight:650;background:var(--_bg);color:var(--_muted);white-space:nowrap}\n.ya-pill[data-s=planned]{background:var(--_tint);color:var(--_accent)}\n.ya-pill[data-s=in_progress]{background:color-mix(in srgb,var(--_amber) 16%,transparent);color:var(--_amber)}\n.ya-pill[data-s=shipped]{background:color-mix(in srgb,var(--_green) 15%,transparent);color:var(--_green)}\n\n/* ---------- home: chat */\n.ya-chat{display:flex;flex-direction:column;gap:10px;padding-top:4px}\n.ya-bubble{max-width:86%;padding:10px 14px;border-radius:20px;font-size:15px;line-height:1.4;overflow-wrap:anywhere;animation:ya-bubble .3s cubic-bezier(.2,.9,.3,1.2);display:flex;flex-direction:column;gap:6px;align-items:flex-start}\n.ya-bubble b{font-weight:650}\n.ya-bubble-in{align-self:flex-start;background:var(--_surface);border-bottom-left-radius:6px}\n.ya-bubble-out{align-self:flex-end;background:var(--_accent);color:var(--_accent-fg);border-bottom-right-radius:6px;white-space:pre-wrap}\n.ya-bubble-win{background:color-mix(in srgb,var(--_green) 12%,var(--_bg))}\n.ya-bubble-error{background:color-mix(in srgb,#e5484d 12%,var(--_bg))}\n.ya-bubble-link{font-size:14px;font-weight:650;color:var(--_accent);padding:2px 0}\n.ya-bubble-img{display:block;width:100%;max-width:220px;border-radius:12px;margin-bottom:2px;box-shadow:0 0 0 1px color-mix(in srgb,var(--_accent-fg) 25%,transparent)}\n.ya-bubble-news{position:relative;align-self:stretch;max-width:100%;gap:8px}\n.ya-news{list-style:none;width:100%;display:flex;flex-direction:column}\n.ya-news button{display:flex;align-items:center;gap:10px;width:100%;padding:8px 0;border-top:1px solid color-mix(in srgb,var(--_fg) 9%,transparent);text-align:left}\n.ya-news li:first-child button{border-top:0}\n.ya-news > li > button > svg:last-child{color:var(--_muted);width:16px;height:16px}\n.ya-news-text{flex:1;min-width:0;display:flex;flex-direction:column}\n.ya-news-title{font-size:14.5px;font-weight:600;line-height:1.3}\n.ya-news-you{font-size:12px;font-weight:650;color:var(--_green)}\n/* A short burst from the corner. Hidden by default, so reduced motion (animation off) shows nothing. */\n.ya-confetti{position:absolute;top:14px;right:18px;width:0;height:0;pointer-events:none}\n.ya-confetti i{position:absolute;left:-3px;top:-3px;width:6px;height:9px;border-radius:2px;opacity:0;animation:ya-confetti .95s cubic-bezier(.2,.7,.3,1) both}\n.ya-typing{flex-direction:row;gap:4px;padding:14px 16px}\n.ya-typing span{width:7px;height:7px;border-radius:50%;background:var(--_muted);animation:ya-dot 1s infinite ease-in-out}\n.ya-typing span:nth-child(2){animation-delay:.15s}\n.ya-typing span:nth-child(3){animation-delay:.3s}\n.ya-chip{align-self:center;margin-top:6px;font-size:13.5px;font-weight:600;color:var(--_accent);padding:8px 14px;border-radius:999px;background:var(--_tint)}\n.ya-section{margin-top:12px}\n.ya-section-head{display:flex;align-items:center;justify-content:space-between;margin:0 0 8px}\n.ya-section-head h3{font-size:13px;font-weight:650;color:var(--_muted)}\n.ya-shipped{list-style:none;display:flex;flex-direction:column}\n.ya-shipped button{display:flex;align-items:center;gap:10px;width:100%;padding:9px 2px;border-bottom:1px solid var(--_border)}\n.ya-shipped li:last-child button{border-bottom:0}\n.ya-shipped-dot{width:22px;height:22px;border-radius:50%;display:grid;place-items:center;background:color-mix(in srgb,var(--_green) 16%,transparent);color:var(--_green);flex:none}\n.ya-shipped-title{flex:1;min-width:0;font-size:14.5px;font-weight:550;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n.ya-shipped-when{font-size:12.5px;color:var(--_muted);flex:none}\n.ya-note{font-size:13.5px;color:var(--_muted);margin-top:10px}\n\n.ya-composer-wrap{flex:none;padding:8px 12px 12px;background:var(--_bg);border-top:1px solid var(--_border)}\n.ya-tray{padding:10px;margin-bottom:8px;border-radius:calc(var(--_radius) + 2px);background:var(--_tint);animation:ya-tray .22s cubic-bezier(.2,.9,.3,1)}\n.ya-tray-h{font-size:13px;font-weight:650;margin:0 2px 8px}\n.ya-tray .ya-row{background:var(--_bg)}\n.ya-composer{display:flex;align-items:flex-end;gap:8px;padding:5px 5px 5px 16px;border-radius:24px;background:var(--_surface);border:1.5px solid transparent;transition:border-color .15s}\n.ya-composer:focus-within{border-color:color-mix(in srgb,var(--_accent) 55%,transparent)}\n.ya-composer-bar{flex:none;margin:8px 12px 12px}\n.ya-composer-input{flex:1;min-width:0;border:0;outline:none;background:none;resize:none;font:inherit;font-size:16px;line-height:1.4;color:var(--_fg);padding:7px 0;margin:0;min-height:calc(1.4em + 14px);max-height:132px;overflow-y:auto}\n.ya-composer-input::placeholder{color:var(--_muted);opacity:1}\n.ya-composer-input:focus-visible{outline:none}\n.ya-send{width:36px;height:36px;border-radius:50%;display:grid;place-items:center;background:var(--_accent);color:var(--_accent-fg);flex:none;transition:opacity .15s,transform .12s}\n.ya-send svg{width:18px;height:18px}\n.ya-send:disabled{opacity:.3}\n.ya-shots{list-style:none;display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px;animation:ya-tray .22s cubic-bezier(.2,.9,.3,1)}\n.ya-shot{display:flex;align-items:center;gap:8px;padding:4px 4px 4px 4px;border-radius:14px;background:var(--_surface);font-size:13px;font-weight:600;max-width:100%}\n.ya-shot img{display:block;width:40px;height:40px;border-radius:10px;object-fit:cover;object-position:top;flex:none;box-shadow:0 0 0 1px var(--_border)}\n.ya-shot span{padding-right:2px}\n.ya-shot-x{width:24px;height:24px;border-radius:50%;display:grid;place-items:center;color:var(--_muted);flex:none}\n.ya-shot-x:hover{color:var(--_fg);background:var(--_border)}\n.ya-shot-x svg{width:13px;height:13px}\n.ya-tools{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:8px;min-height:32px}\n.ya-tool{display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 12px 0 9px;border-radius:999px;background:var(--_tint);color:var(--_accent);font-size:13.5px;font-weight:650;transition:transform .12s,opacity .15s;flex:none}\n.ya-tool svg{width:16px;height:16px}\n.ya-tool:disabled{opacity:.4}\n.ya-tool:active{transform:scale(.96)}\n.ya-switch-row{display:inline-flex;align-items:center;gap:8px;font-size:13px;font-weight:600;color:var(--_muted);padding:4px 0 4px 8px;min-width:0;animation:ya-tray .2s ease-out}\n.ya-switch-row[aria-checked=true]{color:var(--_fg)}\n.ya-switch{position:relative;width:34px;height:20px;border-radius:999px;background:color-mix(in srgb,var(--_fg) 18%,var(--_bg));flex:none;transition:background .18s}\n.ya-switch::after{content:\"\";position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.3);transition:transform .2s cubic-bezier(.3,1.3,.5,1)}\n[aria-checked=true] > .ya-switch{background:var(--_accent)}\n[aria-checked=true] > .ya-switch::after{transform:translateX(14px)}\n.ya-mark{text-align:center;font-size:11.5px;color:var(--_muted);margin-top:8px}\n\n\n.ya-bubble-kicker{font-size:12.5px;font-weight:650;color:var(--_muted)}\n.ya-detail-meta{display:flex;align-items:center;gap:8px}\n.ya-ref{font-size:12px;font-weight:650;color:var(--_muted);font-variant-numeric:tabular-nums;letter-spacing:.02em}\n.ya-thread{display:flex;flex-direction:column;gap:12px;margin-top:8px}\n.ya-msg{display:flex;gap:8px;align-items:flex-end;max-width:92%}\n.ya-msg .ya-avatar{border-radius:50%;margin-bottom:2px}\n.ya-msg-body{display:flex;flex-direction:column;gap:3px;min-width:0}\n.ya-msg-body .ya-bubble{max-width:100%;animation:none}\n.ya-msg-out{align-self:flex-end;flex-direction:column;align-items:flex-end;gap:3px}\n.ya-msg-out .ya-bubble{max-width:100%;animation:none}\n.ya-msg-meta{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--_muted);padding:0 4px}\n.ya-msg-meta b{color:var(--_fg);font-weight:650}\n/* ---------- board, detail */\n.ya-tabs{display:flex;gap:2px;margin:0 16px 8px;padding:3px;background:var(--_surface);border-radius:calc(var(--_radius) - 2px);flex:none}\n.ya-tab{flex:1;padding:7px 0;border-radius:calc(var(--_radius) - 5px);font-size:14px;font-weight:600;color:var(--_muted);text-align:center;transition:background .15s,color .15s}\n.ya-tab[aria-selected=true]{background:var(--_bg);color:var(--_fg);box-shadow:0 1px 3px rgba(0,0,0,.1)}\n.ya-foot{padding:12px 16px 14px;border-top:1px solid var(--_border);display:flex;flex-direction:column;gap:9px;flex:none;background:var(--_bg)}\n.ya-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:48px;padding:0 18px;border-radius:var(--_radius);background:var(--_accent);color:var(--_accent-fg);font-weight:650;font-size:15px;width:100%;transition:opacity .15s,transform .12s;white-space:nowrap}\n.ya-btn svg{width:18px;height:18px}\n.ya-btn:disabled{opacity:.4}\n.ya-btn-sm{height:38px;width:auto;padding:0 14px;font-size:14px;border-radius:calc(var(--_radius) - 3px)}\n.ya-btn-ghost{background:var(--_surface);color:var(--_fg)}\n.ya-callout{display:flex;gap:10px;align-items:flex-start;padding:12px 14px;border-radius:var(--_radius);font-size:14px;margin-top:14px;line-height:1.4;background:color-mix(in srgb,var(--_green) 12%,var(--_bg))}\n.ya-callout svg{width:18px;height:18px;margin-top:1px;color:var(--_green)}\n.ya-callout b{font-weight:650}\n.ya-detail-title{font-size:21px;font-weight:700;letter-spacing:-.015em;margin:10px 0 8px;overflow-wrap:anywhere;line-height:1.28}\n.ya-text{white-space:pre-wrap;overflow-wrap:anywhere;font-size:15px;color:var(--_fg)}\n.ya-text-muted{color:var(--_muted)}\n.ya-bigvote{margin-top:16px;display:inline-flex;align-items:center;gap:8px;height:40px;padding:0 16px 0 12px;border-radius:999px;border:1px solid var(--_border);font-weight:650;font-size:14.5px;transition:transform .12s,background .15s,color .15s;font-variant-numeric:tabular-nums}\n.ya-bigvote svg{width:17px;height:17px}\n.ya-bigvote[aria-pressed=true]{background:var(--_accent);border-color:var(--_accent);color:var(--_accent-fg)}\n.ya-attachments{display:flex;flex-direction:column;gap:8px;margin-top:12px}\n.ya-attachments a{display:block;border-radius:var(--_radius);overflow:hidden;box-shadow:0 0 0 1px var(--_border)}\n.ya-attachments img{display:block;width:100%;height:auto;max-height:340px;object-fit:cover;object-position:top}\n.ya-early{display:flex;align-items:center;gap:12px;width:100%;margin-top:12px;padding:10px 14px 10px 12px;border-radius:var(--_radius);background:var(--_surface);animation:ya-tray .22s cubic-bezier(.2,.9,.3,1)}\n.ya-early .ya-card-icon{width:32px;height:32px}\n.ya-early[aria-checked=true] .ya-card-icon{background:var(--_accent);color:var(--_accent-fg)}\n.ya-credit{display:block;margin-top:2px;color:var(--_muted)}\n.ya-section-h{font-size:13px;font-weight:650;color:var(--_muted);margin:26px 0 4px}\n.ya-comment{padding:11px 0;border-bottom:1px solid var(--_border)}\n.ya-comment:last-child{border-bottom:0}\n.ya-comment-who{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:650;margin-bottom:3px}\n.ya-comment-who time{font-weight:400;color:var(--_muted)}\n.ya-team{font-size:11px;font-weight:700;padding:1px 7px;border-radius:999px;background:var(--_accent);color:var(--_accent-fg)}\n.ya-empty{text-align:center;padding:44px 16px;color:var(--_muted)}\n.ya-empty b{display:block;color:var(--_fg);font-size:16px;margin-bottom:4px}\n.ya-skel{height:58px;border-radius:var(--_radius);background:var(--_surface);animation:ya-pulse 1.3s ease-in-out infinite}\n\n/* ---------- launcher, toast */\n.ya-fab{position:fixed;z-index:2147483650;bottom:calc(var(--_offset) + env(safe-area-inset-bottom));right:20px;height:56px;min-width:56px;padding:0;border-radius:999px;background:var(--_accent);color:var(--_accent-fg);display:flex;align-items:center;justify-content:center;gap:8px;font-weight:650;font-size:15px;box-shadow:0 10px 30px color-mix(in srgb,var(--_accent) 35%,rgba(0,0,0,.25));transition:transform .15s}\n.ya-fab-label{padding:0 20px 0 16px}\n.ya-fab-icon{display:grid;place-items:center}\n.ya-fab svg{width:26px;height:26px}\n.ya-fab[data-open] svg{width:22px;height:22px}\n.ya-fab[data-pos=bottom-left]{right:auto;left:20px}\n.ya-fab .ya-dot{position:absolute;top:4px;right:4px}\n.ya-fab-label .ya-dot{position:static}\n@media (max-width:639px){.ya-fab[data-open]{display:none}}\n.ya-dot{width:10px;height:10px;border-radius:50%;background:#ff3b30;box-shadow:0 0 0 2px var(--_bg)}\n\n.ya-toast{position:fixed;z-index:2147483550;right:20px;bottom:calc(var(--_offset) + 68px + env(safe-area-inset-bottom));width:min(370px,calc(100vw - 32px));background:var(--_bg);color:var(--_fg);border:1px solid var(--_border);border-radius:calc(var(--_radius) + 6px);box-shadow:0 20px 60px rgba(0,0,0,.25);padding:16px 16px 14px;animation:ya-pop .45s cubic-bezier(.34,1.36,.64,1)}\n.ya-toast[data-pos=bottom-left]{right:auto;left:20px}\n.ya-toast[data-trigger=none]{bottom:calc(var(--_offset) + env(safe-area-inset-bottom))}\n@media (max-width:480px){.ya-toast,.ya-toast[data-pos=bottom-left]{left:16px;right:16px;width:auto}}\n.ya-toast-top{display:flex;align-items:center;justify-content:space-between;gap:8px}\n.ya-toast-kicker{font-size:12.5px;font-weight:650;color:var(--_muted)}\n.ya-toast-title{font-size:17px;font-weight:750;letter-spacing:-.01em;margin-top:3px;overflow-wrap:anywhere;line-height:1.3}\n.ya-live{display:inline-flex;align-items:center;gap:6px;font-size:14px;font-weight:700;color:var(--_green)}\n.ya-toast .ya-live{margin-top:8px}\n.ya-live svg{width:15px;height:15px}\n.ya-toast-note{font-size:13.5px;color:var(--_muted);margin-top:6px;overflow-wrap:anywhere}\n.ya-toast-actions{display:flex;gap:8px;margin-top:12px}\n.ya-toast-quote{color:var(--_fg);display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}\n.ya-toast .ya-icon-btn{width:30px;height:30px;margin:-6px -6px 0 0;background:none}\n\n/* ---------- inline entry points */\n.ya-askbar{display:flex;align-items:center;gap:12px;width:100%;padding:8px 8px 8px 10px;border-radius:999px;background:var(--_bg);border:1px solid var(--_border);color:var(--_muted);font-size:15.5px;text-align:left;box-shadow:0 1px 2px rgba(0,0,0,.04);transition:border-color .15s,transform .12s}\n.ya-askbar:hover{border-color:color-mix(in srgb,var(--_accent) 50%,var(--_border))}\n.ya-askbar .ya-avatar{border-radius:30%}\n.ya-askbar-glyph{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;background:var(--_tint);color:var(--_accent);flex:none}\n.ya-askbar-glyph svg{width:18px;height:18px}\n.ya-askbar-text{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n.ya-askbar-send{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;background:var(--_accent);color:var(--_accent-fg);flex:none}\n.ya-askbar-send svg{width:17px;height:17px}\n.ya-badge{min-width:20px;height:20px;padding:0 6px;border-radius:999px;background:#ff3b30;color:#fff;font-size:12px;font-weight:700;display:inline-grid;place-items:center;flex:none}\n\n.ya-card{background:var(--_bg);border-radius:calc(var(--_radius) + 6px);padding:16px;display:flex;flex-direction:column;gap:12px}\n.ya-card-head{display:flex;align-items:center;gap:12px}\n.ya-card-icon{width:36px;height:36px;border-radius:30%;display:grid;place-items:center;background:var(--_tint);color:var(--_accent);flex:none}\n.ya-card-icon svg{width:19px;height:19px}\n.ya-card-title{font-size:16px;font-weight:700;letter-spacing:-.01em}\n.ya-card-sub{font-size:13px;color:var(--_muted);margin-top:1px}\n.ya-card-win{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:var(--_radius);background:color-mix(in srgb,var(--_green) 12%,var(--_bg));font-size:14px;text-align:left}\n.ya-card-win > span:nth-child(2){flex:1;min-width:0}\n.ya-card-win b{font-weight:650}\n.ya-card-actions{display:flex;gap:8px}\n.ya-card-actions .ya-btn{flex:1}\n\n.ya-pillbtn{display:inline-flex;align-items:center;gap:8px;height:40px;padding:0 16px 0 13px;border-radius:999px;background:var(--_tint);color:var(--_accent);font-weight:650;font-size:14.5px;transition:transform .12s}\n.ya-pillbtn svg{width:18px;height:18px}\n.ya-pillbtn .ya-badge{margin-right:-6px}\n.ya-iconbtn{position:relative;width:40px;height:40px;border-radius:50%;display:grid;place-items:center;background:var(--_surface);color:var(--_fg);transition:transform .12s}\n.ya-iconbtn svg{width:21px;height:21px}\n.ya-iconbtn .ya-dot{position:absolute;top:1px;right:1px;width:9px;height:9px}\n.ya-menurow{display:flex;align-items:center;gap:12px;width:100%;padding:12px 14px;border-radius:var(--_radius);background:var(--_bg);text-align:left;color:var(--_fg)}\n.ya-menurow > svg{color:var(--_muted);width:17px;height:17px}\n.ya-menurow .ya-card-icon{width:32px;height:32px}\n.ya-menurow-text{flex:1;min-width:0;display:flex;flex-direction:column}\n.ya-menurow-label{font-size:15.5px;font-weight:600}\n.ya-menurow-sub{font-size:13px;color:var(--_muted)}\n\n.ya-askabout{display:inline-flex;align-items:center;gap:6px;font-size:13.5px;line-height:1.3;color:var(--_muted);padding:2px 0;border-radius:6px;text-decoration:underline;text-decoration-color:transparent;text-underline-offset:3px;transition:color .15s,text-decoration-color .15s}\n.ya-askabout svg{width:14px;height:14px;color:var(--_accent)}\n.ya-askabout:hover{color:var(--_fg);text-decoration-color:currentColor}\n.ya-askforit{display:inline-flex;align-items:center;flex-wrap:wrap;gap:4px 8px;font-size:14.5px;color:var(--_muted);padding:4px 0;text-align:left}\n.ya-askforit b{white-space:nowrap;display:inline-flex;align-items:center;gap:1px;font-weight:650;color:var(--_accent);padding:3px 6px 3px 12px;border-radius:999px;background:var(--_tint);transition:transform .12s}\n.ya-askforit b svg{width:15px;height:15px}\n.ya-askforit:active b{transform:scale(.96)}\n\n/* ---------- show us: draw on the page */\n.ya-capture{position:fixed;inset:0;z-index:2147483640;animation:ya-fade .18s ease-out}\n.ya-capture-sample{position:absolute;color:var(--_accent);width:0;height:0;overflow:hidden}\n.ya-capture-surface{position:absolute;inset:0;background:rgba(8,10,20,.2);cursor:crosshair;touch-action:none;-webkit-user-select:none;user-select:none}\n.ya-capture-box{position:absolute;border:3px solid var(--_accent);border-radius:8px;background:var(--_tint);box-shadow:0 0 0 2px rgba(255,255,255,.92);pointer-events:none}\n.ya-capture-hint{position:absolute;top:calc(14px + env(safe-area-inset-top));left:50%;transform:translateX(-50%);max-width:calc(100vw - 24px);white-space:nowrap;padding:9px 16px;border-radius:999px;background:var(--_bg);color:var(--_fg);font-size:14px;font-weight:650;text-align:center;box-shadow:0 6px 24px rgba(0,0,0,.25);pointer-events:none;animation:ya-pop .35s cubic-bezier(.34,1.36,.64,1)}\n.ya-capture-bar{position:absolute;left:50%;transform:translateX(-50%);bottom:calc(18px + env(safe-area-inset-bottom));display:flex;gap:8px;padding:8px;border-radius:calc(var(--_radius) + 8px);background:var(--_bg);box-shadow:0 10px 40px rgba(0,0,0,.3),0 0 0 1px var(--_border)}\n.ya-capture-bar .ya-btn{min-width:84px}\n.ya-capture[data-busy] .ya-capture-surface{cursor:progress}\n\n.ya-embed{position:relative;display:flex;flex-direction:column;background:var(--_bg);border-radius:calc(var(--_radius) + 6px);overflow:hidden;border:1px solid var(--_border)}\n\n.ya-sr{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}\n\n@keyframes ya-sheet-in{from{transform:translateY(100%)}}\n@keyframes ya-sheet-out{to{transform:translateY(100%)}}\n@keyframes ya-pop-in{from{transform:translateY(12px) scale(.96);opacity:0}}\n@keyframes ya-pop-out{to{transform:translateY(8px) scale(.97);opacity:0}}\n@keyframes ya-fade{from{opacity:0}}\n@keyframes ya-fade-out{to{opacity:0}}\n@keyframes ya-pop{from{transform:translateY(14px) scale(.96);opacity:0}}\n@keyframes ya-bubble{from{transform:translateY(8px) scale(.97);opacity:0}}\n@keyframes ya-tray{from{transform:translateY(6px);opacity:0}}\n@keyframes ya-dot{0%,80%,100%{transform:translateY(0);opacity:.5}40%{transform:translateY(-4px);opacity:1}}\n@keyframes ya-confetti{0%{opacity:1;transform:translate(0,0) rotate(0) scale(.6)}70%{opacity:1}100%{opacity:0;transform:translate(var(--x),var(--y)) rotate(var(--r)) scale(1)}}\n@keyframes ya-pulse{50%{opacity:.5}}\n@media (prefers-reduced-motion:reduce){.ya-scope *{animation:none!important;transition:none!important}}\n";
|
|
2
2
|
export declare function injectStyles(): void;
|