@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.
@@ -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://youasked-api.adenteo.workers.dev";
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
- constructor(code: string);
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
- return { request: view(r), comments: [...r.comments_], attachments: [...r.attachments_], earlyAccess: r.early };
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 DEFAULT_API_URL = "https://youasked-api.adenteo.workers.dev";
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
- const [matches, setMatches] = useState3(() => typeof window !== "undefined" && window.matchMedia(query).matches);
1685
- useEffect3(() => {
1686
- const m = window.matchMedia(query);
1687
- const on = () => setMatches(m.matches);
1688
- on();
1689
- m.addEventListener("change", on);
1690
- return () => m.removeEventListener("change", on);
1691
- }, [query]);
1692
- return matches;
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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@youasked/react",
3
- "version": "0.4.1",
3
+ "version": "0.5.0",
4
4
  "description": "Feature requests your users can vote on, and a 'you asked, it's live' moment when you ship.",
5
5
  "license": "MIT",
6
6
  "type": "module",