rssany 0.3.2 → 0.3.4

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.
Files changed (113) hide show
  1. package/.env.example +52 -52
  2. package/README.md +156 -147
  3. package/app/plugins/builtin/email.rssany.js +84 -84
  4. package/app/plugins/builtin/rss.rssany.js +164 -164
  5. package/app/statics/README.md +7 -7
  6. package/app/webui/build/200.html +36 -36
  7. package/app/webui/build/_app/immutable/assets/10.CmGYYZFR.css +1 -0
  8. package/app/webui/build/_app/immutable/assets/11.Dkz3VS_N.css +1 -0
  9. package/app/webui/build/_app/immutable/assets/14.BCCBoMGj.css +1 -0
  10. package/app/webui/build/_app/immutable/assets/6.Cm_jpHOq.css +1 -0
  11. package/app/webui/build/_app/immutable/assets/7.CJ3BjogD.css +1 -0
  12. package/app/webui/build/_app/immutable/assets/9.CATKVZ-n.css +1 -0
  13. package/app/webui/build/_app/immutable/assets/{SourcesList.D5Lso0bo.css → SourcesList.ke66uOSi.css} +1 -1
  14. package/app/webui/build/_app/immutable/assets/chevron-down.CV-KWLNP.css +1 -0
  15. package/app/webui/build/_app/immutable/chunks/{CGCMIfh3.js → 4TuV_psf.js} +1 -1
  16. package/app/webui/build/_app/immutable/chunks/{DAdOEnFb.js → B0czyjwj.js} +1 -1
  17. package/app/webui/build/_app/immutable/chunks/{CFwxUBGi.js → B553hBXT.js} +1 -1
  18. package/app/webui/build/_app/immutable/chunks/B8StT3Do.js +6 -0
  19. package/app/webui/build/_app/immutable/chunks/BI_ale1m.js +1 -0
  20. package/app/webui/build/_app/immutable/chunks/BK0ygNWX.js +2 -0
  21. package/app/webui/build/_app/immutable/chunks/{Brun6sCr.js → BZY5aksi.js} +2 -2
  22. package/app/webui/build/_app/immutable/chunks/{C8umpVpB.js → BnqaikL8.js} +1 -1
  23. package/app/webui/build/_app/immutable/chunks/BsQ08Wq_.js +1 -0
  24. package/app/webui/build/_app/immutable/chunks/C9wTDiHH.js +1 -0
  25. package/app/webui/build/_app/immutable/chunks/{B-CeeY89.js → CAKuIoAf.js} +1 -1
  26. package/app/webui/build/_app/immutable/chunks/CEWi_rGa.js +1 -0
  27. package/app/webui/build/_app/immutable/chunks/CIsxbQ9B.js +1 -0
  28. package/app/webui/build/_app/immutable/chunks/{ChUctqXA.js → Cc7aBSsN.js} +1 -1
  29. package/app/webui/build/_app/immutable/chunks/{DXDBlEGf.js → Czo-EcYU.js} +1 -1
  30. package/app/webui/build/_app/immutable/chunks/{BAJAS8BI.js → D8G961Hm.js} +1 -1
  31. package/app/webui/build/_app/immutable/chunks/{CS53ooo0.js → DIeahUKq.js} +1 -1
  32. package/app/webui/build/_app/immutable/chunks/DO5OXNYS.js +1 -0
  33. package/app/webui/build/_app/immutable/chunks/{Dr67pd7v.js → DhZZHWov.js} +1 -1
  34. package/app/webui/build/_app/immutable/chunks/{Dyvi1wBH.js → DptdhtA1.js} +1 -1
  35. package/app/webui/build/_app/immutable/chunks/{ClknbeNl.js → FDS7fbwH.js} +1 -1
  36. package/app/webui/build/_app/immutable/chunks/{DCEayuDt.js → IhDlsCxD.js} +1 -1
  37. package/app/webui/build/_app/immutable/chunks/Nd0ktDhd.js +1 -0
  38. package/app/webui/build/_app/immutable/chunks/{D6kzEN_P.js → SvdgnirT.js} +1 -1
  39. package/app/webui/build/_app/immutable/chunks/WW6La7Nt.js +2 -0
  40. package/app/webui/build/_app/immutable/chunks/{DsxvjlCC.js → pd_p3yYy.js} +5 -5
  41. package/app/webui/build/_app/immutable/chunks/qwlQuQWi.js +36 -0
  42. package/app/webui/build/_app/immutable/chunks/rNwPv4DZ.js +1 -0
  43. package/app/webui/build/_app/immutable/entry/app.CsaNbZ85.js +2 -0
  44. package/app/webui/build/_app/immutable/entry/start.BZt_oICN.js +1 -0
  45. package/app/webui/build/_app/immutable/nodes/{0.CQDkqUeN.js → 0.zuqEMBQT.js} +3 -3
  46. package/app/webui/build/_app/immutable/nodes/1.DzLFxso0.js +1 -0
  47. package/app/webui/build/_app/immutable/nodes/10.BC-1FXeC.js +1 -0
  48. package/app/webui/build/_app/immutable/nodes/11.CePwEHqu.js +3 -0
  49. package/app/webui/build/_app/immutable/nodes/12.eeQ9B6bg.js +1 -0
  50. package/app/webui/build/_app/immutable/nodes/13.BLKI9iZo.js +1 -0
  51. package/app/webui/build/_app/immutable/nodes/14.T9l5Rh19.js +1 -0
  52. package/app/webui/build/_app/immutable/nodes/15.39GHtAg1.js +1 -0
  53. package/app/webui/build/_app/immutable/nodes/{16.p6WfP435.js → 16.BO-9BBQ5.js} +2 -2
  54. package/app/webui/build/_app/immutable/nodes/17.BWRgFCUw.js +1 -0
  55. package/app/webui/build/_app/immutable/nodes/2.BOYqXdCa.js +1 -0
  56. package/app/webui/build/_app/immutable/nodes/3.CJw5Nx2o.js +1 -0
  57. package/app/webui/build/_app/immutable/nodes/5.9zgwFV6I.js +2 -0
  58. package/app/webui/build/_app/immutable/nodes/6.trFT-trT.js +2 -0
  59. package/app/webui/build/_app/immutable/nodes/7.DCqiDq6O.js +1 -0
  60. package/app/webui/build/_app/immutable/nodes/8.DG_T-wWN.js +1 -0
  61. package/app/webui/build/_app/immutable/nodes/9.FiPTezQy.js +1 -0
  62. package/app/webui/build/_app/version.json +1 -1
  63. package/bin/rssany.js +55 -3
  64. package/dist/index.js +314 -96
  65. package/dist/index.js.map +1 -1
  66. package/package.json +107 -103
  67. package/scripts/postinstall.mjs +44 -0
  68. package/scripts/reset.mjs +137 -135
  69. package/scripts/user-dir.mjs +52 -0
  70. package/app/webui/build/_app/immutable/assets/10.Dj8_pmut.css +0 -1
  71. package/app/webui/build/_app/immutable/assets/13.Qu_tY6H9.css +0 -1
  72. package/app/webui/build/_app/immutable/assets/5.B-dPiwB7.css +0 -1
  73. package/app/webui/build/_app/immutable/assets/6.B27N7pdA.css +0 -1
  74. package/app/webui/build/_app/immutable/assets/8.Cgji2b15.css +0 -1
  75. package/app/webui/build/_app/immutable/assets/9.BsCIAvn3.css +0 -1
  76. package/app/webui/build/_app/immutable/chunks/6prdYIKP.js +0 -1
  77. package/app/webui/build/_app/immutable/chunks/B2cyTHdf.js +0 -2
  78. package/app/webui/build/_app/immutable/chunks/B6WG2Sd3.js +0 -1
  79. package/app/webui/build/_app/immutable/chunks/BA4Gucnq.js +0 -1
  80. package/app/webui/build/_app/immutable/chunks/BXTsojX2.js +0 -36
  81. package/app/webui/build/_app/immutable/chunks/BkD3yAYe.js +0 -1
  82. package/app/webui/build/_app/immutable/chunks/C4uF_YIK.js +0 -1
  83. package/app/webui/build/_app/immutable/chunks/CBY2biv-.js +0 -1
  84. package/app/webui/build/_app/immutable/chunks/DAV9bzjw.js +0 -1
  85. package/app/webui/build/_app/immutable/chunks/DL3Q5sfb.js +0 -1
  86. package/app/webui/build/_app/immutable/chunks/DVa8Y-mQ.js +0 -1
  87. package/app/webui/build/_app/immutable/chunks/DoRPmqLn.js +0 -2
  88. package/app/webui/build/_app/immutable/chunks/vtBo8kBV.js +0 -1
  89. package/app/webui/build/_app/immutable/entry/app.dq7-6soi.js +0 -2
  90. package/app/webui/build/_app/immutable/entry/start.BnoTfBrB.js +0 -1
  91. package/app/webui/build/_app/immutable/nodes/1.BUa24rXB.js +0 -1
  92. package/app/webui/build/_app/immutable/nodes/10.MZgVhpGF.js +0 -1
  93. package/app/webui/build/_app/immutable/nodes/11.B39IbrZ0.js +0 -1
  94. package/app/webui/build/_app/immutable/nodes/12.B5B81dLQ.js +0 -1
  95. package/app/webui/build/_app/immutable/nodes/13.DWWcH27k.js +0 -6
  96. package/app/webui/build/_app/immutable/nodes/14.Db6eOPqq.js +0 -1
  97. package/app/webui/build/_app/immutable/nodes/15.B2jiP2VJ.js +0 -1
  98. package/app/webui/build/_app/immutable/nodes/2.AJd2163d.js +0 -1
  99. package/app/webui/build/_app/immutable/nodes/3.BZQeL-vz.js +0 -1
  100. package/app/webui/build/_app/immutable/nodes/4.BT_N8pCh.js +0 -2
  101. package/app/webui/build/_app/immutable/nodes/5.Bo_ftyqW.js +0 -2
  102. package/app/webui/build/_app/immutable/nodes/6.vOowdQUr.js +0 -1
  103. package/app/webui/build/_app/immutable/nodes/7.BfVbBKZu.js +0 -1
  104. package/app/webui/build/_app/immutable/nodes/8.BslYG5f2.js +0 -1
  105. package/app/webui/build/_app/immutable/nodes/9.DAgT-df2.js +0 -1
  106. /package/app/webui/build/_app/immutable/assets/{11.qYZMiTb0.css → 12.qYZMiTb0.css} +0 -0
  107. /package/app/webui/build/_app/immutable/assets/{12.DfJcfUWl.css → 13.DfJcfUWl.css} +0 -0
  108. /package/app/webui/build/_app/immutable/assets/{14.DfMfOrS3.css → 15.DfMfOrS3.css} +0 -0
  109. /package/app/webui/build/_app/immutable/assets/{15.nNGjXhCQ.css → 17.nNGjXhCQ.css} +0 -0
  110. /package/app/webui/build/_app/immutable/assets/{4.Di6rvlY-.css → 5.Di6rvlY-.css} +0 -0
  111. /package/app/webui/build/_app/immutable/assets/{7.CrNxmd8B.css → 8.CrNxmd8B.css} +0 -0
  112. /package/app/webui/build/_app/immutable/nodes/{17.BtYZF6FM.js → 18.BtYZF6FM.js} +0 -0
  113. /package/app/webui/build/_app/immutable/nodes/{18.BIzqhTqv.js → 4.BIzqhTqv.js} +0 -0
@@ -1,5 +1,5 @@
1
- // 内置 RSS/Atom/JSON Feed:通过浏览器(Puppeteer)拉取 Feed URL,再用 rss-parser 解析;
2
- // 与站点插件一致走 Chrome,便于应对需浏览器环境或代理的场景;XML 使用 HTTP 响应原文(useHttpResponseBody)。
1
+ // 内置 RSS/Atom/JSON Feed:通过浏览器(Puppeteer)拉取 Feed URL,再用 rss-parser 解析;
2
+ // 与站点插件一致走 Chrome,便于应对需浏览器环境或代理的场景;XML 使用 HTTP 响应原文(useHttpResponseBody)。
3
3
  export const id = "__rss__";
4
4
  export const name = "RSS Feed";
5
5
  export const pattern = /^https:\/\//;
@@ -7,167 +7,167 @@ export const match = looksLikeFeed;
7
7
  export const priority = 20;
8
8
  export const refreshInterval = "1h";
9
9
 
10
- const UA = "RssAny/1.0 (+https://github.com/joohw/rssany)";
11
-
12
- const IMAGE_TYPE_RE = /^image\//i;
13
- const IMAGE_EXT_IN_PATH_RE = /\.(jpg|jpeg|png|gif|webp|avif|svg)(\?|#|$)/i;
14
-
15
- function trimUrl(s) {
16
- if (typeof s !== "string") return undefined;
17
- const t = s.trim();
18
- return t || undefined;
19
- }
20
-
21
- /** rss-parser 常把多位作者压成一段逗号(或中文逗号)分隔文本,拆成数组入库。 */
22
- function authorsFromCommaText(authorRaw) {
23
- if (typeof authorRaw !== "string") return undefined;
24
- const parts = authorRaw
25
- .split(/[,,]/)
26
- .map((s) => s.trim())
27
- .filter(Boolean);
28
- return parts.length > 0 ? parts : undefined;
29
- }
30
-
31
- /** 从 rss-parser 条目上尽量取出配图 URL(入库用 imageUrl,与 Gateway 的 cover_img 对齐)。 */
32
- function extractItemImageUrl(item) {
33
- const enc = item.enclosure;
34
- if (enc && typeof enc.url === "string") {
35
- const u = trimUrl(enc.url);
36
- const t = typeof enc.type === "string" ? enc.type : "";
37
- if (u && (IMAGE_TYPE_RE.test(t) || (!t && IMAGE_EXT_IN_PATH_RE.test(u)))) {
38
- return u;
39
- }
40
- }
41
-
42
- const itunesImg = item.itunes && typeof item.itunes.image === "string" ? item.itunes.image : undefined;
43
- const fromItunes = trimUrl(itunesImg);
44
- if (fromItunes) return fromItunes;
45
-
46
- const thumbs = item.mediaThumbnail;
47
- if (Array.isArray(thumbs) && thumbs[0]?.$) {
48
- const u = trimUrl(thumbs[0].$.url ?? thumbs[0].$.href);
49
- if (u) return u;
50
- }
51
-
52
- const mediaBlocks = item.mediaContent;
53
- if (Array.isArray(mediaBlocks)) {
54
- for (const block of mediaBlocks) {
55
- const $ = block && block.$;
56
- if (!$ || typeof $.url !== "string") continue;
57
- const medium = $.medium;
58
- const ctype = typeof $.type === "string" ? $.type : "";
59
- if (medium === "image" || IMAGE_TYPE_RE.test(ctype)) {
60
- const u = trimUrl($.url);
61
- if (u) return u;
62
- }
63
- }
64
- }
65
-
66
- const atomLinks = item.atomLinks;
67
- if (Array.isArray(atomLinks)) {
68
- for (const l of atomLinks) {
69
- const $ = l && l.$;
70
- if (!$ || typeof $.href !== "string") continue;
71
- const rel = String($.rel || "").toLowerCase();
72
- const ctype = String($.type || "").toLowerCase();
73
- if (rel === "enclosure" && ctype.startsWith("image/")) {
74
- const u = trimUrl($.href);
75
- if (u) return u;
76
- }
77
- }
78
- }
79
-
80
- const fromHtml =
81
- firstImgSrcFromHtml(item.content) ||
82
- firstImgSrcFromHtml(item.summary) ||
83
- firstImgSrcFromHtml(item["content:encoded"]) ||
84
- firstImgSrcFromHtml(item.contentSnippet);
85
- if (fromHtml && /^https:\/\//i.test(fromHtml)) {
86
- return fromHtml;
87
- }
88
-
89
- return undefined;
90
- }
91
-
92
- function firstImgSrcFromHtml(html) {
93
- if (typeof html !== "string" || !html) return undefined;
94
- const m = html.match(/<img[^>]+src\s*=\s*["']([^"']+)["']/i);
95
- return m ? trimUrl(m[1]) : undefined;
96
- }
97
-
98
- async function fetchFeedXml(url, ctx) {
99
- const fetchHtml = ctx.fetchHtml;
100
- if (typeof fetchHtml !== "function") {
101
- throw new Error("RSS 插件需要 ctx.fetchHtml(请通过 feeder / buildSourceContext 调用)");
102
- }
103
- const { html } = await fetchHtml(url, {
104
- waitMs: 800,
105
- purify: false,
106
- useHttpResponseBody: true,
107
- });
108
- return html;
109
- }
110
-
111
- export async function fetchItems(sourceId, ctx) {
112
- const { deps } = ctx;
113
- const xml = await fetchFeedXml(sourceId, ctx);
114
- const parser = new deps.RssParser({
115
- timeout: 30_000,
116
- headers: {
117
- "User-Agent": UA,
118
- Accept: "application/rss+xml,application/atom+xml,application/json,application/xml,text/xml,*/*",
119
- },
120
- customFields: {
121
- item: [
122
- ["media:thumbnail", "mediaThumbnail", { keepArray: true }],
123
- ["media:content", "mediaContent", { keepArray: true }],
124
- ["link", "atomLinks", { keepArray: true }],
125
- ],
126
- },
127
- });
128
- const feed = await parser.parseString(xml);
129
- return (feed.items ?? []).map((item) => {
130
- const link = item.link ?? item.guid ?? sourceId;
131
- const guid = item.guid ?? deps.createHash("sha256").update(link).digest("hex");
132
- const pubDate =
133
- item.pubDate != null
134
- ? new Date(item.pubDate)
135
- : item.isoDate != null
136
- ? new Date(item.isoDate)
137
- : new Date();
138
- const authorRaw =
139
- typeof item.creator === "string" ? item.creator : typeof item.author === "string" ? item.author : undefined;
140
- const author = authorsFromCommaText(authorRaw);
141
- const summary =
142
- typeof item.summary === "string" ? item.summary : typeof item.contentSnippet === "string" ? item.contentSnippet : undefined;
143
- const content =
144
- typeof item.content === "string" ? item.content : typeof item["content:encoded"] === "string" ? item["content:encoded"] : undefined;
145
- const imageUrl = extractItemImageUrl(item);
146
- const base = {
147
- guid,
148
- title: item.title ?? "",
149
- link,
150
- pubDate,
151
- author,
152
- summary,
153
- content,
154
- };
155
- if (!imageUrl) return base;
156
- return { ...base, imageUrl, cover_img: imageUrl };
157
- });
10
+ const UA = "RssAny/1.0 (+https://github.com/joohw/rssany)";
11
+
12
+ const IMAGE_TYPE_RE = /^image\//i;
13
+ const IMAGE_EXT_IN_PATH_RE = /\.(jpg|jpeg|png|gif|webp|avif|svg)(\?|#|$)/i;
14
+
15
+ function trimUrl(s) {
16
+ if (typeof s !== "string") return undefined;
17
+ const t = s.trim();
18
+ return t || undefined;
19
+ }
20
+
21
+ /** rss-parser 常把多位作者压成一段逗号(或中文逗号)分隔文本,拆成数组入库。 */
22
+ function authorsFromCommaText(authorRaw) {
23
+ if (typeof authorRaw !== "string") return undefined;
24
+ const parts = authorRaw
25
+ .split(/[,,]/)
26
+ .map((s) => s.trim())
27
+ .filter(Boolean);
28
+ return parts.length > 0 ? parts : undefined;
29
+ }
30
+
31
+ /** 从 rss-parser 条目上尽量取出配图 URL(入库用 imageUrl,与 Gateway 的 cover_img 对齐)。 */
32
+ function extractItemImageUrl(item) {
33
+ const enc = item.enclosure;
34
+ if (enc && typeof enc.url === "string") {
35
+ const u = trimUrl(enc.url);
36
+ const t = typeof enc.type === "string" ? enc.type : "";
37
+ if (u && (IMAGE_TYPE_RE.test(t) || (!t && IMAGE_EXT_IN_PATH_RE.test(u)))) {
38
+ return u;
39
+ }
40
+ }
41
+
42
+ const itunesImg = item.itunes && typeof item.itunes.image === "string" ? item.itunes.image : undefined;
43
+ const fromItunes = trimUrl(itunesImg);
44
+ if (fromItunes) return fromItunes;
45
+
46
+ const thumbs = item.mediaThumbnail;
47
+ if (Array.isArray(thumbs) && thumbs[0]?.$) {
48
+ const u = trimUrl(thumbs[0].$.url ?? thumbs[0].$.href);
49
+ if (u) return u;
50
+ }
51
+
52
+ const mediaBlocks = item.mediaContent;
53
+ if (Array.isArray(mediaBlocks)) {
54
+ for (const block of mediaBlocks) {
55
+ const $ = block && block.$;
56
+ if (!$ || typeof $.url !== "string") continue;
57
+ const medium = $.medium;
58
+ const ctype = typeof $.type === "string" ? $.type : "";
59
+ if (medium === "image" || IMAGE_TYPE_RE.test(ctype)) {
60
+ const u = trimUrl($.url);
61
+ if (u) return u;
62
+ }
63
+ }
64
+ }
65
+
66
+ const atomLinks = item.atomLinks;
67
+ if (Array.isArray(atomLinks)) {
68
+ for (const l of atomLinks) {
69
+ const $ = l && l.$;
70
+ if (!$ || typeof $.href !== "string") continue;
71
+ const rel = String($.rel || "").toLowerCase();
72
+ const ctype = String($.type || "").toLowerCase();
73
+ if (rel === "enclosure" && ctype.startsWith("image/")) {
74
+ const u = trimUrl($.href);
75
+ if (u) return u;
76
+ }
77
+ }
78
+ }
79
+
80
+ const fromHtml =
81
+ firstImgSrcFromHtml(item.content) ||
82
+ firstImgSrcFromHtml(item.summary) ||
83
+ firstImgSrcFromHtml(item["content:encoded"]) ||
84
+ firstImgSrcFromHtml(item.contentSnippet);
85
+ if (fromHtml && /^https:\/\//i.test(fromHtml)) {
86
+ return fromHtml;
87
+ }
88
+
89
+ return undefined;
90
+ }
91
+
92
+ function firstImgSrcFromHtml(html) {
93
+ if (typeof html !== "string" || !html) return undefined;
94
+ const m = html.match(/<img[^>]+src\s*=\s*["']([^"']+)["']/i);
95
+ return m ? trimUrl(m[1]) : undefined;
96
+ }
97
+
98
+ async function fetchFeedXml(url, ctx) {
99
+ const fetchHtml = ctx.fetchHtml;
100
+ if (typeof fetchHtml !== "function") {
101
+ throw new Error("RSS 插件需要 ctx.fetchHtml(请通过 feeder / buildSourceContext 调用)");
102
+ }
103
+ const { html } = await fetchHtml(url, {
104
+ waitMs: 800,
105
+ purify: false,
106
+ useHttpResponseBody: true,
107
+ });
108
+ return html;
109
+ }
110
+
111
+ export async function fetchItems(sourceId, ctx) {
112
+ const { deps } = ctx;
113
+ const xml = await fetchFeedXml(sourceId, ctx);
114
+ const parser = new deps.RssParser({
115
+ timeout: 30_000,
116
+ headers: {
117
+ "User-Agent": UA,
118
+ Accept: "application/rss+xml,application/atom+xml,application/json,application/xml,text/xml,*/*",
119
+ },
120
+ customFields: {
121
+ item: [
122
+ ["media:thumbnail", "mediaThumbnail", { keepArray: true }],
123
+ ["media:content", "mediaContent", { keepArray: true }],
124
+ ["link", "atomLinks", { keepArray: true }],
125
+ ],
126
+ },
127
+ });
128
+ const feed = await parser.parseString(xml);
129
+ return (feed.items ?? []).map((item) => {
130
+ const link = item.link ?? item.guid ?? sourceId;
131
+ const guid = item.guid ?? deps.createHash("sha256").update(link).digest("hex");
132
+ const pubDate =
133
+ item.pubDate != null
134
+ ? new Date(item.pubDate)
135
+ : item.isoDate != null
136
+ ? new Date(item.isoDate)
137
+ : new Date();
138
+ const authorRaw =
139
+ typeof item.creator === "string" ? item.creator : typeof item.author === "string" ? item.author : undefined;
140
+ const author = authorsFromCommaText(authorRaw);
141
+ const summary =
142
+ typeof item.summary === "string" ? item.summary : typeof item.contentSnippet === "string" ? item.contentSnippet : undefined;
143
+ const content =
144
+ typeof item.content === "string" ? item.content : typeof item["content:encoded"] === "string" ? item["content:encoded"] : undefined;
145
+ const imageUrl = extractItemImageUrl(item);
146
+ const base = {
147
+ guid,
148
+ title: item.title ?? "",
149
+ link,
150
+ pubDate,
151
+ author,
152
+ summary,
153
+ content,
154
+ };
155
+ if (!imageUrl) return base;
156
+ return { ...base, imageUrl, cover_img: imageUrl };
157
+ });
158
158
  }
159
159
 
160
- function looksLikeFeed(url) {
161
- const lower = url.toLowerCase();
162
- return (
163
- lower.includes("/feed") ||
164
- lower.includes("/rss") ||
165
- lower.includes("/atom") ||
166
- lower.endsWith(".xml") ||
167
- lower.endsWith(".rss") ||
168
- lower.endsWith(".atom") ||
169
- lower.includes("format=rss") ||
170
- lower.includes("format=atom") ||
171
- lower.includes("output=rss")
172
- );
173
- }
160
+ function looksLikeFeed(url) {
161
+ const lower = url.toLowerCase();
162
+ return (
163
+ lower.includes("/feed") ||
164
+ lower.includes("/rss") ||
165
+ lower.includes("/atom") ||
166
+ lower.endsWith(".xml") ||
167
+ lower.endsWith(".rss") ||
168
+ lower.endsWith(".atom") ||
169
+ lower.includes("format=rss") ||
170
+ lower.includes("format=atom") ||
171
+ lower.includes("output=rss")
172
+ );
173
+ }
@@ -1,7 +1,7 @@
1
- # statics
2
-
3
- 静态 HTML 页面:home(首页)、401、404。
4
-
5
- - **home.html**:首页,含 Try This 示例链接;下方「需登录的站点」从 `/plugins` 拉取,每个站点可点击「打开登录页」调用 `POST /auth/ensure?siteId=...` 批量做登录。
6
- - **401.html**:需登录时返回;占位符 `{{listUrl}}` 由 router 注入为失败请求的订阅地址;页内「打开有头登录页」按钮调用 `POST /auth/ensure?url=...` 弹出有头浏览器完成登录。
7
- - **404.html**:无匹配站点时返回。
1
+ # statics
2
+
3
+ 静态 HTML 页面:home(首页)、401、404。
4
+
5
+ - **home.html**:首页,含 Try This 示例链接;下方「需登录的站点」从 `/plugins` 拉取,每个站点可点击「打开登录页」调用 `POST /auth/ensure?siteId=...` 批量做登录。
6
+ - **401.html**:需登录时返回;占位符 `{{listUrl}}` 由 router 注入为失败请求的订阅地址;页内「打开有头登录页」按钮调用 `POST /auth/ensure?url=...` 弹出有头浏览器完成登录。
7
+ - **404.html**:无匹配站点时返回。
@@ -1,51 +1,51 @@
1
- <!doctype html>
2
- <html lang="zh-CN">
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width, initial-scale=1" />
6
- <link rel="preconnect" href="https://fonts.googleapis.com" />
7
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
8
- <link
9
- href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"
10
- rel="stylesheet"
11
- />
12
- <link rel="icon" href="/favicon.ico" sizes="32x32" />
13
- <link rel="icon" href="/favicon.png" type="image/png" />
14
- <link rel="apple-touch-icon" href="/apple-touch-icon.png" />
15
- <link href="/_app/immutable/entry/start.BnoTfBrB.js" rel="modulepreload">
16
- <link href="/_app/immutable/chunks/Dr67pd7v.js" rel="modulepreload">
17
- <link href="/_app/immutable/chunks/vtBo8kBV.js" rel="modulepreload">
18
- <link href="/_app/immutable/chunks/ClknbeNl.js" rel="modulepreload">
1
+ <!doctype html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
7
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
8
+ <link
9
+ href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"
10
+ rel="stylesheet"
11
+ />
12
+ <link rel="icon" href="/favicon.ico" sizes="32x32" />
13
+ <link rel="icon" href="/favicon.png" type="image/png" />
14
+ <link rel="apple-touch-icon" href="/apple-touch-icon.png" />
15
+ <link href="/_app/immutable/entry/start.BZt_oICN.js" rel="modulepreload">
16
+ <link href="/_app/immutable/chunks/DhZZHWov.js" rel="modulepreload">
17
+ <link href="/_app/immutable/chunks/BsQ08Wq_.js" rel="modulepreload">
18
+ <link href="/_app/immutable/chunks/FDS7fbwH.js" rel="modulepreload">
19
19
  <link href="/_app/immutable/chunks/BUApaBEI.js" rel="modulepreload">
20
- <link href="/_app/immutable/chunks/Dyvi1wBH.js" rel="modulepreload">
21
- <link href="/_app/immutable/entry/app.dq7-6soi.js" rel="modulepreload">
22
- <link href="/_app/immutable/chunks/B2cyTHdf.js" rel="modulepreload">
23
- <link href="/_app/immutable/chunks/CS53ooo0.js" rel="modulepreload">
24
- <link href="/_app/immutable/chunks/BkD3yAYe.js" rel="modulepreload">
25
- <link href="/_app/immutable/chunks/C4uF_YIK.js" rel="modulepreload">
26
- <link href="/_app/immutable/chunks/B-CeeY89.js" rel="modulepreload">
27
- <link href="/_app/immutable/chunks/BAJAS8BI.js" rel="modulepreload">
28
- <link href="/_app/immutable/chunks/B6WG2Sd3.js" rel="modulepreload">
29
-
30
- </head>
31
- <body>
20
+ <link href="/_app/immutable/chunks/DptdhtA1.js" rel="modulepreload">
21
+ <link href="/_app/immutable/entry/app.CsaNbZ85.js" rel="modulepreload">
22
+ <link href="/_app/immutable/chunks/BK0ygNWX.js" rel="modulepreload">
23
+ <link href="/_app/immutable/chunks/DIeahUKq.js" rel="modulepreload">
24
+ <link href="/_app/immutable/chunks/rNwPv4DZ.js" rel="modulepreload">
25
+ <link href="/_app/immutable/chunks/C9wTDiHH.js" rel="modulepreload">
26
+ <link href="/_app/immutable/chunks/CAKuIoAf.js" rel="modulepreload">
27
+ <link href="/_app/immutable/chunks/D8G961Hm.js" rel="modulepreload">
28
+ <link href="/_app/immutable/chunks/BI_ale1m.js" rel="modulepreload">
29
+
30
+ </head>
31
+ <body>
32
32
  <div id="svelte">
33
33
  <script>
34
34
  {
35
- __sveltekit_dhz4pi = {
35
+ __sveltekit_c0lzti = {
36
36
  base: ""
37
37
  };
38
38
 
39
39
  const element = document.currentScript.parentElement;
40
40
 
41
41
  Promise.all([
42
- import("/_app/immutable/entry/start.BnoTfBrB.js"),
43
- import("/_app/immutable/entry/app.dq7-6soi.js")
42
+ import("/_app/immutable/entry/start.BZt_oICN.js"),
43
+ import("/_app/immutable/entry/app.CsaNbZ85.js")
44
44
  ]).then(([kit, app]) => {
45
45
  kit.start(app, element);
46
46
  });
47
47
  }
48
48
  </script>
49
- </div>
50
- </body>
51
- </html>
49
+ </div>
50
+ </body>
51
+ </html>
@@ -0,0 +1 @@
1
+ .feed-wrap.svelte-jqd85f{margin-top:calc(-1 * var(--main-padding-top));width:100%;max-width:42rem}.feed-col.svelte-jqd85f{padding:0}.feed-header.svelte-jqd85f{padding:var(--main-padding-top) 0 .875rem;flex-shrink:0;border-bottom:1px solid var(--color-border-muted)}.feed-header.svelte-jqd85f h2:where(.svelte-jqd85f){font-size:.9375rem;font-weight:600;margin:0 0 .25rem;color:var(--color-foreground)}.page-desc.svelte-jqd85f{font-size:.75rem;color:var(--color-muted-foreground-soft);margin:0}.state.svelte-jqd85f{padding:2rem;text-align:center;color:var(--color-muted-foreground);font-size:.875rem}.body.svelte-jqd85f{flex:1;overflow:visible;padding:1rem 0}.section-title.svelte-jqd85f{font-size:.8125rem;font-weight:600;color:var(--color-muted-foreground);margin:0 0 .25rem}.hint.svelte-jqd85f{font-size:.75rem;color:var(--color-muted-foreground-soft);margin:0 0 .5rem}.pipeline-section.svelte-jqd85f{margin-bottom:1.5rem}.step-list.svelte-jqd85f{display:flex;flex-direction:column;gap:0;border:1px solid var(--color-border);border-radius:var(--radius-sm);overflow:hidden}.step-row.svelte-jqd85f{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;background:var(--color-card);border-bottom:1px solid var(--color-border);cursor:grab}.step-row.svelte-jqd85f:last-child{border-bottom:none}.step-row.dragging.svelte-jqd85f{opacity:.5;cursor:grabbing}.drag-handle.svelte-jqd85f{color:var(--color-muted-foreground-soft);font-size:.875rem;cursor:grab;-webkit-user-select:none;user-select:none}.toggle-wrap.svelte-jqd85f{display:flex;align-items:center;cursor:pointer}.toggle-wrap.svelte-jqd85f input:where(.svelte-jqd85f){position:absolute;opacity:0;width:0;height:0}.toggle-slider.svelte-jqd85f{width:36px;height:20px;background:var(--color-input);border-radius:10px;transition:background .2s}.toggle-slider.svelte-jqd85f:after{content:"";display:block;width:16px;height:16px;background:var(--color-card-elevated);border-radius:50%;margin:2px 0 0 2px;transition:transform .2s;box-shadow:0 1px 2px #00000059}.toggle-wrap.svelte-jqd85f input:where(.svelte-jqd85f):checked+.toggle-slider:where(.svelte-jqd85f){background:var(--color-success)}.toggle-wrap.svelte-jqd85f input:where(.svelte-jqd85f):checked+.toggle-slider:where(.svelte-jqd85f):after{transform:translate(16px)}.step-label.svelte-jqd85f{flex:1;font-size:.875rem;min-width:0;color:var(--color-foreground)}.btn-add.svelte-jqd85f{margin-top:.5rem;padding:.35rem .75rem;font-size:.8125rem;color:var(--color-muted-foreground);background:var(--color-muted);border:1px solid var(--color-border);border-radius:4px;cursor:pointer}.btn-add.svelte-jqd85f:hover:not(:disabled){background:var(--color-accent)}.save-row.svelte-jqd85f{margin-top:1rem}.btn.svelte-jqd85f{padding:.5rem 1rem;font-size:.875rem;border-radius:var(--radius-sm);cursor:pointer;border:none}.btn-primary.svelte-jqd85f{background:var(--color-primary);color:var(--color-primary-foreground)}.btn-primary.svelte-jqd85f:hover:not(:disabled){background:var(--color-primary-hover)}.btn.svelte-jqd85f:disabled{opacity:.6;cursor:not-allowed}@media(max-width:600px){.feed-wrap.svelte-jqd85f{max-width:100%}}
@@ -0,0 +1 @@
1
+ .feed-wrap.svelte-1f24zj{margin-top:calc(-1 * var(--main-padding-top));width:100%;max-width:42rem}.feed-col.svelte-1f24zj{padding:0}.body.svelte-1f24zj{overflow:visible;padding:var(--main-padding-top) 0 1rem}.intro.svelte-1f24zj{color:var(--color-muted-foreground-strong);margin:0 0 1.25rem;line-height:1.5;font-size:.875rem}.intro.svelte-1f24zj code:where(.svelte-1f24zj){font-size:.8125rem}.section-title.svelte-1f24zj{font-size:.8125rem;font-weight:600;color:var(--color-muted-foreground);margin:0 0 .5rem}.form-section.svelte-1f24zj{margin-bottom:1.25rem}.text-input.svelte-1f24zj{width:100%;box-sizing:border-box;padding:.5rem .75rem;font-size:.875rem;border:1px solid var(--color-input);border-radius:var(--radius-sm);background:var(--color-card-elevated);color:var(--color-foreground)}.text-input.svelte-1f24zj::placeholder{color:var(--color-muted-foreground-soft)}.proxy-select-trigger{display:inline-flex;align-items:center;justify-content:space-between;gap:.5rem;width:100%;box-sizing:border-box;padding:.5rem .75rem;font-size:.875rem;border:1px solid var(--color-input);border-radius:var(--radius-sm);background:var(--color-card-elevated);color:var(--color-foreground);font-family:inherit;cursor:pointer}.proxy-select-trigger span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.proxy-select-trigger:focus-visible{border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-light)}.proxy-select-content{z-index:140;width:var(--bits-select-anchor-width);max-width:min(42rem,calc(100vw - 2rem));padding:.25rem;background:var(--color-card-elevated);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-panel)}.proxy-select-viewport{display:flex;flex-direction:column;gap:.05rem;max-height:16rem;overflow:auto}.proxy-select-item{display:flex;align-items:center;min-height:2rem;padding:.4rem .6rem;font-size:.8125rem;line-height:1.25;color:var(--color-foreground);border-radius:var(--radius-sm);outline:none;cursor:pointer;word-break:break-all}.proxy-select-item[data-highlighted]{background:var(--color-muted)}.proxy-select-item[data-selected]{color:var(--color-primary);background:var(--color-primary-light)}.hint.svelte-1f24zj{font-size:.75rem;color:var(--color-muted-foreground-soft);margin:.5rem 0 0;line-height:1.45}.btn-row.svelte-1f24zj{display:flex;gap:.75rem}.btn.svelte-1f24zj{padding:.5rem 1rem;font-size:.875rem;border-radius:6px;cursor:pointer;border:none}.btn-primary.svelte-1f24zj{background:var(--color-primary);color:var(--color-primary-foreground)}.btn-primary.svelte-1f24zj:hover:not(:disabled){background:var(--color-primary-hover)}.btn.svelte-1f24zj:disabled{opacity:.6;cursor:not-allowed}@media(max-width:600px){.feed-wrap.svelte-1f24zj{max-width:100%}}
@@ -0,0 +1 @@
1
+ .feed-wrap.svelte-1lsf4ps{--feed-sticky-gap-after: 0;margin-top:calc(-1 * var(--main-padding-top));width:100%;max-width:100%;display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}.feed-col.svelte-1lsf4ps{flex:1;display:flex;flex-direction:column;overflow:hidden;min-height:0;background:transparent}.feed-toolbar-block.svelte-1lsf4ps{flex-shrink:0;padding-top:var(--main-padding-top);padding-bottom:var(--feed-sticky-gap-after)}.feed-toolbar-block.svelte-1lsf4ps .admin-feed-header{min-height:4.1rem}.log-filter-input.svelte-1lsf4ps{width:min(16rem,34vw)}.log-level-trigger.svelte-1lsf4ps{width:7.25rem;min-width:7.25rem;height:2.25rem;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:space-between;gap:.5rem;padding:.45rem .65rem;font-size:.8125rem;font-family:inherit;color:var(--color-foreground);background:var(--color-card-elevated);border:1px solid var(--color-input);border-radius:6px;flex-shrink:0;cursor:pointer;font-variant-numeric:tabular-nums;transition:border-color .15s,background .15s,box-shadow .15s}.log-level-trigger.svelte-1lsf4ps:hover{border-color:var(--color-border)}.log-level-trigger.svelte-1lsf4ps:focus-visible{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-light)}.log-level-label.svelte-1lsf4ps{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.log-level-trigger.svelte-1lsf4ps svg{flex-shrink:0;color:var(--color-muted-foreground)}.log-level-content{z-index:120;min-width:7rem;padding:.25rem;background:var(--color-card-elevated);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-panel)}.log-level-viewport{display:flex;flex-direction:column;gap:.05rem}.log-level-item{display:flex;align-items:center;min-height:1.85rem;padding:.35rem .55rem;font-size:.8125rem;line-height:1.25;color:var(--color-foreground);border-radius:var(--radius-sm);outline:none;cursor:pointer;font-variant-numeric:tabular-nums}.log-level-item[data-highlighted]{background:var(--color-muted)}.log-level-item[data-selected]{color:var(--color-primary);background:var(--color-primary-light)}.log-body-scroll.svelte-1lsf4ps,.log-has-data.svelte-1lsf4ps{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}.log-table-scroll.svelte-1lsf4ps{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;overscroll-behavior-y:contain;-webkit-overflow-scrolling:touch}.log-table-scroll.svelte-1lsf4ps::-webkit-scrollbar{width:4px}.log-table-scroll.svelte-1lsf4ps::-webkit-scrollbar-thumb{background:var(--color-scrollbar-thumb);border-radius:2px}.btn.svelte-1lsf4ps{display:inline-flex;align-items:center;padding:.4rem .9rem;border:none;border-radius:var(--radius-sm);cursor:pointer;font-size:.875rem;font-family:inherit;transition:background .15s}.btn-primary.svelte-1lsf4ps{background:var(--color-primary);color:var(--color-primary-foreground)}.btn-primary.svelte-1lsf4ps:hover:not(:disabled){background:var(--color-primary-hover)}.btn-secondary.svelte-1lsf4ps{background:var(--color-muted);color:var(--color-foreground);border:1px solid var(--color-border)}.btn-secondary.svelte-1lsf4ps:hover:not(:disabled){background:var(--color-accent)}.btn.svelte-1lsf4ps:disabled{opacity:.4;cursor:not-allowed}.btn-sm.svelte-1lsf4ps{padding:.25rem .5rem;font-size:.75rem}.table-wrap.svelte-1lsf4ps{width:100%}table.svelte-1lsf4ps{width:100%;table-layout:fixed;border-collapse:collapse}thead.svelte-1lsf4ps th:where(.svelte-1lsf4ps){position:sticky;top:0;z-index:3;background:var(--color-card-elevated);font-size:.72rem;font-weight:600;color:var(--color-muted-foreground);text-transform:uppercase;letter-spacing:.04em;padding:.5rem .75rem;text-align:left;border-bottom:1px solid var(--color-border);box-shadow:0 1px 0 var(--color-border)}tbody.svelte-1lsf4ps tr:where(.svelte-1lsf4ps){border-bottom:1px solid var(--color-border-muted)}tbody.svelte-1lsf4ps tr:where(.svelte-1lsf4ps):hover{background:var(--color-muted)}tbody.svelte-1lsf4ps td:where(.svelte-1lsf4ps){padding:.5rem .75rem;font-size:.8125rem;vertical-align:middle}.th-time.svelte-1lsf4ps{width:130px}.th-level.svelte-1lsf4ps{width:68px}.th-cat.svelte-1lsf4ps{width:7rem;max-width:28vw}.th-msg.svelte-1lsf4ps{min-width:0}.log-row.svelte-1lsf4ps{cursor:pointer}.log-row.svelte-1lsf4ps:focus{outline:1px dotted var(--color-muted-foreground);outline-offset:-1px}.td-time.svelte-1lsf4ps{color:var(--color-muted-foreground);white-space:nowrap}.td-level.svelte-1lsf4ps{white-space:nowrap}.badge.svelte-1lsf4ps{display:inline-block;padding:.12rem .4rem;border-radius:4px;font-size:.7rem;font-weight:500}.badge.level-error.svelte-1lsf4ps{background:color-mix(in srgb,var(--color-destructive) 18%,transparent);color:var(--color-destructive);border:1px solid color-mix(in srgb,var(--color-destructive) 45%,transparent)}.badge.level-warn.svelte-1lsf4ps{background:#eab30824;color:#fbbf24;border:1px solid rgba(234,179,8,.35)}.badge.level-info.svelte-1lsf4ps{background:var(--color-primary-light);color:var(--color-primary-hover);border:1px solid color-mix(in srgb,var(--color-primary) 40%,transparent)}.badge.level-debug.svelte-1lsf4ps{background:var(--color-muted);color:var(--color-muted-foreground-strong);border:1px solid var(--color-border)}.td-cat.svelte-1lsf4ps{color:var(--color-muted-foreground-strong)}.td-msg.svelte-1lsf4ps{word-break:break-word;max-width:320px}.payload-row.svelte-1lsf4ps td:where(.svelte-1lsf4ps){padding:.25rem .75rem .65rem;background:transparent;border-bottom:1px solid var(--color-border-muted);vertical-align:top}.payload-content.svelte-1lsf4ps{margin:0;padding:0;font-family:Menlo,Monaco,Consolas,monospace;font-size:.72rem;line-height:1.5;background:transparent;border:none;border-radius:0;overflow-x:auto;max-height:200px;overflow-y:auto;white-space:pre-wrap;word-break:break-all;color:var(--color-muted-foreground-strong)}.log-toolbar.svelte-1lsf4ps{display:flex;align-items:center;justify-content:space-between;padding:.65rem 0 .85rem;flex-shrink:0}.pagination-info.svelte-1lsf4ps{font-size:.8125rem;color:var(--color-muted-foreground)}.pagination-btns.svelte-1lsf4ps{display:flex;gap:.5rem}.state.svelte-1lsf4ps{flex:1;display:flex;align-items:center;justify-content:center;text-align:center;padding:3rem 1.5rem;color:var(--color-muted-foreground-soft);font-size:.875rem}.state.err.svelte-1lsf4ps{flex:1;align-self:stretch;color:var(--color-destructive);background:color-mix(in srgb,var(--color-destructive) 12%,transparent);border-radius:var(--radius-md);padding:1rem;margin:.75rem 0}@media(max-width:720px){.feed-wrap.svelte-1lsf4ps{max-width:100%}.payload-row.svelte-1lsf4ps td:where(.svelte-1lsf4ps){padding-left:.5rem}.payload-row.svelte-1lsf4ps td[colspan="4"]:where(.svelte-1lsf4ps){padding-left:.5rem}}
@@ -0,0 +1 @@
1
+ .feed-wrap.svelte-bhaf7m{margin-top:calc(-1 * var(--main-padding-top));width:100%;max-width:42rem}.feed-col.svelte-bhaf7m{padding:0}.body.svelte-bhaf7m{overflow:visible;padding:var(--main-padding-top) 0 1rem}.intro.svelte-bhaf7m{color:var(--color-muted-foreground-strong);margin:0 0 1.25rem;line-height:1.5;font-size:.875rem}.intro.svelte-bhaf7m code:where(.svelte-bhaf7m){font-size:.8125rem}.section-title.svelte-bhaf7m{font-size:.8125rem;font-weight:600;color:var(--color-muted-foreground);margin:0 0 .5rem}.form-section.svelte-bhaf7m{margin-bottom:1.25rem}.url-input.svelte-bhaf7m{width:100%;box-sizing:border-box;padding:.5rem .75rem;font-size:.875rem;border:1px solid var(--color-input);border-radius:var(--radius-sm);background:var(--color-card-elevated);color:var(--color-foreground)}.url-input.svelte-bhaf7m::placeholder{color:var(--color-muted-foreground-soft)}.hint.svelte-bhaf7m{font-size:.75rem;color:var(--color-muted-foreground-soft);margin:.5rem 0 0;line-height:1.45}.btn-row.svelte-bhaf7m{display:flex;gap:.75rem;flex-wrap:wrap}.btn.svelte-bhaf7m{padding:.5rem 1rem;font-size:.875rem;border-radius:6px;cursor:pointer;border:none}.btn-primary.svelte-bhaf7m{background:var(--color-primary);color:var(--color-primary-foreground)}.btn-primary.svelte-bhaf7m:hover:not(:disabled){background:var(--color-primary-hover)}.btn-secondary.svelte-bhaf7m{background:var(--color-muted);color:var(--color-foreground);border:1px solid var(--color-border)}.btn-secondary.svelte-bhaf7m:hover:not(:disabled){background:var(--color-accent)}.btn.svelte-bhaf7m:disabled{opacity:.6;cursor:not-allowed}@media(max-width:600px){.feed-wrap.svelte-bhaf7m{max-width:100%}}
@@ -0,0 +1 @@
1
+ .feed-wrap.svelte-1a0dvmg{margin-top:calc(-1 * var(--main-padding-top));width:100%;max-width:42rem}.feed-col.svelte-1a0dvmg{padding:0}.body.svelte-1a0dvmg{overflow:visible;padding:var(--main-padding-top) 0 1rem}.intro.svelte-1a0dvmg{color:var(--color-muted-foreground-strong);margin:0 0 1.25rem;line-height:1.5;font-size:.875rem}.section-title.svelte-1a0dvmg{font-size:.8125rem;font-weight:600;color:var(--color-muted-foreground);margin:0 0 .5rem}.form-section.svelte-1a0dvmg{margin-bottom:1.25rem}.text-input.svelte-1a0dvmg{width:100%;box-sizing:border-box;padding:.5rem .75rem;font-size:.875rem;border:1px solid var(--color-input);border-radius:var(--radius-sm);background:var(--color-card-elevated);color:var(--color-foreground)}.text-input.svelte-1a0dvmg::placeholder{color:var(--color-muted-foreground-soft)}.hint.svelte-1a0dvmg{font-size:.75rem;color:var(--color-muted-foreground-soft);margin:.5rem 0 0;line-height:1.45}.btn-row.svelte-1a0dvmg{display:flex;gap:.75rem}.btn.svelte-1a0dvmg{padding:.5rem 1rem;font-size:.875rem;border-radius:6px;cursor:pointer;border:none}.btn-primary.svelte-1a0dvmg{background:var(--color-primary);color:var(--color-primary-foreground)}.btn-primary.svelte-1a0dvmg:hover:not(:disabled){background:var(--color-primary-hover)}.btn-secondary.svelte-1a0dvmg{background:var(--color-muted);color:var(--color-foreground);border:1px solid var(--color-border)}.btn-secondary.svelte-1a0dvmg:hover:not(:disabled){background:var(--color-accent)}.btn.svelte-1a0dvmg:disabled{opacity:.6;cursor:not-allowed}@media(max-width:600px){.feed-wrap.svelte-1a0dvmg{max-width:100%}}
@@ -0,0 +1 @@
1
+ .feed-wrap.svelte-1x680s0{margin-top:calc(-1 * var(--main-padding-top));width:100%;max-width:42rem}.feed-col.svelte-1x680s0{padding:0}.feed-header.svelte-1x680s0{padding:var(--main-padding-top) 0 .875rem;flex-shrink:0;border-bottom:1px solid var(--color-border-muted)}.feed-header.svelte-1x680s0 h2:where(.svelte-1x680s0){font-size:.9375rem;font-weight:600;margin:0 0 .25rem;color:var(--color-foreground)}.page-desc.svelte-1x680s0{font-size:.75rem;color:var(--color-muted-foreground-soft);margin:0;line-height:1.5}.body.svelte-1x680s0{flex:1;overflow:visible;padding:1rem 0}.url-row.svelte-1x680s0{display:flex;gap:.5rem;margin-bottom:.75rem}.url-row.svelte-1x680s0 input:where(.svelte-1x680s0){flex:1;padding:.65rem 1rem;border:1px solid var(--color-input);border-radius:var(--radius-md);font-size:.9375rem;outline:none;transition:border .15s,box-shadow .15s;min-width:0;background:var(--color-card-elevated);color:var(--color-foreground);font-family:inherit}.url-row.svelte-1x680s0 input:where(.svelte-1x680s0):focus{border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-light)}.action-row.svelte-1x680s0{display:flex;justify-content:flex-start;margin-bottom:.75rem}.action-row.svelte-1x680s0 button:where(.svelte-1x680s0){padding:.65rem 1.375rem;background:var(--color-primary);color:var(--color-primary-foreground);border:none;border-radius:8px;cursor:pointer;font-size:.9rem;font-family:inherit;white-space:nowrap;transition:background .15s}.action-row.svelte-1x680s0 button:where(.svelte-1x680s0):hover:not(:disabled){background:var(--color-primary-hover)}.action-row.svelte-1x680s0 button:where(.svelte-1x680s0):disabled{opacity:.65;cursor:not-allowed}.result-error.svelte-1x680s0{margin-top:1rem;width:100%;padding:.75rem 1rem;border-radius:var(--radius-md);background:color-mix(in srgb,var(--color-destructive, #c00) 12%,transparent);color:var(--color-foreground);font-size:.8125rem;white-space:pre-wrap;word-break:break-word}.result-wrap.svelte-1x680s0{margin-top:1rem;width:100%}.result-label.svelte-1x680s0{font-size:.75rem;font-weight:600;color:var(--color-muted-foreground);margin:0 0 .4rem}.result-json.svelte-1x680s0{margin:0;padding:1rem;max-height:min(70vh,520px);overflow:auto;font-size:.75rem;line-height:1.45;border-radius:var(--radius-md);border:1px solid var(--color-input);background:var(--color-muted);color:var(--color-foreground)}.proxy-row.svelte-1x680s0{margin-bottom:.75rem}.proxy-select-trigger{display:inline-flex;align-items:center;justify-content:space-between;gap:.5rem;width:100%;box-sizing:border-box;padding:.55rem 1rem;border:1px solid var(--color-input);border-radius:var(--radius-md);font-size:.8125rem;outline:none;transition:border .15s,box-shadow .15s;background:var(--color-card-elevated);color:var(--color-foreground);font-family:inherit;cursor:pointer}.proxy-select-trigger:focus-visible{border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-light)}.proxy-select-trigger span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.proxy-select-content{z-index:140;width:var(--bits-select-anchor-width);max-width:min(42rem,calc(100vw - 2rem));padding:.25rem;background:var(--color-card-elevated);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-panel)}.proxy-select-viewport{display:flex;flex-direction:column;gap:.05rem;max-height:16rem;overflow:auto}.proxy-select-item{display:flex;align-items:center;min-height:2rem;padding:.4rem .6rem;font-size:.8125rem;line-height:1.25;color:var(--color-foreground);border-radius:var(--radius-sm);outline:none;cursor:pointer;word-break:break-all}.proxy-select-item[data-highlighted]{background:var(--color-muted)}.proxy-select-item[data-selected]{color:var(--color-primary);background:var(--color-primary-light)}.field-hint.svelte-1x680s0{margin:.4rem 0 0;font-size:.75rem;color:var(--color-muted-foreground-soft);line-height:1.4}@media(max-width:600px){.feed-wrap.svelte-1x680s0{max-width:100%}}
@@ -1 +1 @@
1
- .feed-wrap.svelte-1beoyzy{--feed-sticky-gap-after: 0;margin-top:calc(-1 * var(--main-padding-top));margin-left:calc(-1 * var(--shell-gutter));margin-right:calc(-1 * var(--shell-gutter));width:calc(100% + 2 * var(--shell-gutter));max-width:none;box-sizing:border-box;display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}.feed-col.svelte-1beoyzy{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden;background:transparent}.feed-toolbar-block.svelte-1beoyzy{flex-shrink:0;padding-top:var(--main-padding-top);padding-bottom:var(--feed-sticky-gap-after);padding-inline:var(--shell-gutter);box-sizing:border-box}.feed-body-scroll.svelte-1beoyzy{flex:1;min-height:0;display:flex;flex-direction:column;overflow-y:auto;overflow-x:auto;overscroll-behavior-y:contain;-webkit-overflow-scrolling:touch}.feed-header.svelte-1beoyzy{display:flex;align-items:center;gap:.75rem;padding:.75rem 0;flex-shrink:0}.header-left.svelte-1beoyzy{display:flex;align-items:center;gap:.5rem;flex:0 1 auto;min-width:0}.header-right.svelte-1beoyzy{display:flex;align-items:center;gap:.5rem;flex-shrink:0;margin-left:auto}.filter-input.svelte-1beoyzy{flex:0 1 auto;width:100%;min-width:6.5rem;max-width:12rem;padding:.35rem .6rem;font-size:.8125rem;border:1px solid var(--color-input);border-radius:var(--radius-sm);outline:none;background:var(--color-card-elevated);color:var(--color-foreground);transition:border-color .15s,background .15s}.filter-input.svelte-1beoyzy:focus{border-color:var(--color-primary);background:var(--color-card)}.filter-input.svelte-1beoyzy::placeholder{color:var(--color-muted-foreground-soft)}.btn-sort{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;padding:0;flex-shrink:0;font:inherit;color:var(--color-muted-foreground-strong);background:transparent;border:1px solid var(--color-input);border-radius:var(--radius-sm);box-shadow:none;cursor:pointer;transition:color .15s,border-color .15s,background .15s}.btn-sort:hover{color:var(--color-primary);border-color:var(--color-primary);background:transparent}.btn-sort:focus-visible{outline:2px solid color-mix(in srgb,var(--color-primary) 45%,transparent);outline-offset:1px}.sort-menu{min-width:10.5rem;padding:.3rem;box-sizing:border-box}.sort-menu-item.svelte-1beoyzy{display:flex;align-items:center;justify-content:space-between;gap:.5rem;width:100%;padding:.4rem .55rem;font-size:.8125rem;text-align:left;border:none;border-radius:6px;cursor:pointer;background:transparent;color:var(--color-muted-foreground-strong);transition:background .12s,color .12s}.sort-menu-item.svelte-1beoyzy:hover{background:var(--color-muted);color:var(--color-accent-foreground)}.sort-menu-item.active.svelte-1beoyzy{color:var(--color-primary);font-weight:500}.sort-menu-dir.svelte-1beoyzy{font-size:.75rem;font-variant-numeric:tabular-nums;opacity:.9}.btn-add.svelte-1beoyzy{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;padding:0;flex-shrink:0;color:var(--color-primary-foreground);background:var(--color-primary);border:none;border-radius:var(--radius-sm);cursor:pointer;transition:opacity .15s,background .15s}.btn-add.svelte-1beoyzy:hover{opacity:.9;background:var(--color-primary-hover, var(--color-primary))}.dropdown-panel{z-index:50;background:var(--color-card);border:1px solid var(--color-border);border-radius:var(--radius-sm);box-shadow:var(--shadow-panel)}.more-menu{width:11.5rem;min-width:11.5rem;padding:.25rem;box-sizing:border-box}.more-menu-item.svelte-1beoyzy{display:flex;align-items:center;gap:.5rem;width:100%;padding:.4rem .65rem;font-size:.8125rem;text-align:left;border:none;border-radius:6px;cursor:pointer;background:transparent;color:var(--color-muted-foreground-strong);text-decoration:none;transition:background .15s,color .15s}.more-menu-item.svelte-1beoyzy:hover:not(:disabled){background:var(--color-muted);color:var(--color-accent-foreground)}.more-menu-item.svelte-1beoyzy:disabled{opacity:.6;cursor:not-allowed}.more-menu-item-danger.svelte-1beoyzy:hover:not(:disabled){color:var(--color-destructive);background:color-mix(in srgb,var(--color-destructive) 14%,transparent)}.more-menu-item-remove.svelte-1beoyzy{color:var(--color-destructive)}.more-menu-item-remove.svelte-1beoyzy svg{color:var(--color-destructive)}.more-menu-item-remove.svelte-1beoyzy:hover:not(:disabled){background:color-mix(in srgb,var(--color-destructive) 14%,transparent);color:var(--color-destructive)}.more-menu-item.pulling.svelte-1beoyzy svg{animation:svelte-1beoyzy-spin .8s linear infinite}.state.svelte-1beoyzy{flex:1;display:flex;align-items:center;justify-content:center;text-align:center;padding:1.5rem calc(var(--shell-gutter) + 1rem);color:var(--color-muted-foreground);font-size:.875rem;gap:.25rem}.state.error.svelte-1beoyzy{color:var(--color-destructive)}.link-btn.svelte-1beoyzy{background:none;border:none;padding:0;color:var(--color-primary);font-size:inherit;cursor:pointer;text-decoration:underline}.link-btn.svelte-1beoyzy:hover{text-decoration:underline}.feed-body-scroll.svelte-1beoyzy>.list:where(.svelte-1beoyzy){flex-shrink:0}.list.svelte-1beoyzy{min-width:0;width:100%;display:flex;flex-direction:column;border-top:1px solid var(--color-border-muted)}.row-grid.svelte-1beoyzy{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.5rem .75rem;align-items:center;padding:.55rem var(--shell-gutter);box-sizing:border-box}.card.svelte-1beoyzy{border-bottom:1px solid var(--color-border-muted);transition:background .15s;cursor:pointer}.card.svelte-1beoyzy:hover{background:var(--color-muted)}.card.svelte-1beoyzy:focus-visible{outline:1px solid color-mix(in srgb,var(--color-primary) 55%,transparent);outline-offset:-1px}.card.svelte-1beoyzy:last-child{border-bottom:none}.cell-title.svelte-1beoyzy{min-width:0}.title-block.svelte-1beoyzy{display:flex;align-items:center;gap:.35rem;min-width:0;max-width:100%;width:100%;box-sizing:border-box;color:inherit}.title-line.svelte-1beoyzy{display:flex;align-items:baseline;gap:.35rem;min-width:0;flex:1 1 0%}.title-item-count.svelte-1beoyzy{flex-shrink:0;font-size:.72rem;font-weight:500;font-variant-numeric:tabular-nums;color:var(--color-muted-foreground-soft);line-height:1.2}.source-title-favicon-slot.svelte-1beoyzy{flex-shrink:0;box-sizing:border-box;width:1rem;height:1rem;border-radius:3px;background:transparent;overflow:hidden}.source-title-favicon.svelte-1beoyzy{display:block;width:100%;height:100%;object-fit:contain}.title-text.svelte-1beoyzy{font-size:.875rem;font-weight:500;line-height:1.2;color:var(--color-foreground);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.cell-actions.svelte-1beoyzy{display:inline-flex;align-items:center;justify-content:flex-end;flex-shrink:0}@keyframes svelte-1beoyzy-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.btn-icon{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;padding:0;color:var(--color-muted-foreground);background:transparent;border:none;border-radius:var(--radius-sm);cursor:pointer;transition:color .15s,background .15s}.btn-icon:hover{color:var(--color-foreground);background:var(--color-muted)}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000059;z-index:100}.modal{position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);background:var(--color-card-elevated);border-radius:10px;width:calc(100% - 2rem);max-width:460px;box-shadow:var(--shadow-panel);border:1px solid var(--color-border);display:flex;flex-direction:column;overflow:hidden;z-index:101}.modal .modal-header.svelte-1beoyzy{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem .75rem;border-bottom:1px solid var(--color-border-muted)}.modal-title{font-size:.9375rem;font-weight:600;margin:0;color:var(--color-foreground)}.modal-close{background:none;border:none;padding:.25rem;font-size:1rem;color:var(--color-muted-foreground);cursor:pointer;line-height:1;border-radius:4px}.modal-close:hover{color:var(--color-foreground);background:var(--color-muted)}.modal-body.svelte-1beoyzy{padding:1rem 1.25rem;display:flex;flex-direction:column;gap:.75rem}.field.svelte-1beoyzy{display:flex;flex-direction:column;gap:.3rem}.field-row.svelte-1beoyzy{display:grid;grid-template-columns:1fr 1fr;gap:.75rem}.field-label.svelte-1beoyzy{font-size:.8rem;font-weight:500;color:var(--color-muted-foreground-strong)}.required.svelte-1beoyzy{color:var(--color-destructive)}.ref-input-wrap.svelte-1beoyzy{display:flex;align-items:center;gap:.35rem;width:100%}.ref-input-wrap.svelte-1beoyzy .field-input:where(.svelte-1beoyzy){flex:1;min-width:0}.parse-hints.svelte-1beoyzy{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem .5rem}.parse-hint.svelte-1beoyzy{display:inline-flex;align-items:center;gap:.3rem;padding:.2rem .45rem;font-size:.72rem;font-weight:500;color:var(--color-muted-foreground-soft);border-radius:5px;border:1px solid transparent;background:transparent;transition:color .15s,border-color .15s,background .15s}.parse-hint.active.svelte-1beoyzy{color:var(--color-primary);border-color:color-mix(in srgb,var(--color-primary) 35%,transparent);background:color-mix(in srgb,var(--color-primary) 10%,transparent)}.field-input.svelte-1beoyzy{padding:.4rem .65rem;font-size:.875rem;border:1px solid var(--color-input);border-radius:var(--radius-sm);outline:none;background:var(--color-card);color:var(--color-foreground);font-family:inherit;transition:border-color .15s,background .15s;width:100%}.field-input.svelte-1beoyzy:focus{border-color:var(--color-primary);background:var(--color-card-elevated)}.field-input--weight.svelte-1beoyzy{-moz-appearance:textfield}.field-input--weight.svelte-1beoyzy::-webkit-outer-spin-button,.field-input--weight.svelte-1beoyzy::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.save-error.svelte-1beoyzy{font-size:.8rem;color:var(--color-destructive);margin:0}.modal-footer.svelte-1beoyzy{display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:.75rem 1.25rem;border-top:1px solid var(--color-border-muted)}.remove-dialog-footer.svelte-1beoyzy{justify-content:flex-end}.remove-dialog-text.svelte-1beoyzy{margin:0;font-size:.875rem;line-height:1.5;color:var(--color-foreground)}.remove-dialog-target.svelte-1beoyzy{margin:0;margin-top:.5rem;font-size:.8125rem;color:var(--color-muted-foreground-strong);word-break:break-all}.modal-footer-left.svelte-1beoyzy{display:flex;align-items:center}.modal-footer-right.svelte-1beoyzy{display:flex;align-items:center;gap:.5rem}.btn-delete.svelte-1beoyzy{display:inline-flex;align-items:center;gap:.3rem;padding:.4rem .8rem;font-size:.875rem;color:var(--color-destructive);background:transparent;border:1px solid color-mix(in srgb,var(--color-destructive) 45%,transparent);border-radius:var(--radius-sm);cursor:pointer;transition:background .15s}.btn-delete.svelte-1beoyzy:hover:not(:disabled){background:color-mix(in srgb,var(--color-destructive) 12%,transparent)}.confirm-delete-row.svelte-1beoyzy{display:inline-flex;align-items:center;gap:.4rem;font-size:.8rem}.confirm-delete-text.svelte-1beoyzy{color:var(--color-destructive);font-weight:500}.btn-confirm-yes.svelte-1beoyzy{padding:.3rem .7rem;font-size:.8rem;color:var(--color-destructive-foreground);background:var(--color-destructive);border:none;border-radius:5px;cursor:pointer}.btn-confirm-yes.svelte-1beoyzy:disabled{opacity:.6;cursor:not-allowed}.btn-confirm-no.svelte-1beoyzy{padding:.3rem .6rem;font-size:.8rem;color:var(--color-foreground);background:var(--color-muted);border:1px solid var(--color-border);border-radius:5px;cursor:pointer}.btn-cancel{padding:.4rem 1rem;font-size:.875rem;color:var(--color-foreground);background:var(--color-muted);border:1px solid var(--color-border);border-radius:var(--radius-sm);cursor:pointer}.btn-cancel:hover:not(:disabled){background:var(--color-accent)}.btn-save.svelte-1beoyzy{padding:.4rem 1.2rem;font-size:.875rem;color:var(--color-primary-foreground);background:var(--color-primary);border:none;border-radius:6px;cursor:pointer;transition:opacity .15s}.btn-save.svelte-1beoyzy:hover:not(:disabled){opacity:.85}.btn-save.svelte-1beoyzy:disabled{opacity:.6;cursor:not-allowed}@media(max-width:600px){.feed-wrap.svelte-1beoyzy{max-width:100%}.field-row.svelte-1beoyzy{grid-template-columns:1fr}}
1
+ .feed-wrap.svelte-1beoyzy{--feed-sticky-gap-after: 0;margin-top:calc(-1 * var(--main-padding-top));margin-left:calc(-1 * var(--shell-gutter));margin-right:calc(-1 * var(--shell-gutter));width:calc(100% + 2 * var(--shell-gutter));max-width:none;box-sizing:border-box;display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}.feed-col.svelte-1beoyzy{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden;background:transparent}.feed-toolbar-block.svelte-1beoyzy{flex-shrink:0;padding-top:var(--main-padding-top);padding-bottom:var(--feed-sticky-gap-after);padding-inline:var(--shell-gutter);box-sizing:border-box}.feed-body-scroll.svelte-1beoyzy{flex:1;min-height:0;display:flex;flex-direction:column;overflow-y:auto;overflow-x:auto;overscroll-behavior-y:contain;-webkit-overflow-scrolling:touch}.feed-header.svelte-1beoyzy{display:flex;align-items:center;gap:.75rem;padding:.75rem 0;flex-shrink:0}.header-left.svelte-1beoyzy{display:flex;align-items:center;gap:.5rem;flex:0 1 auto;min-width:0}.header-right.svelte-1beoyzy{display:flex;align-items:center;gap:.5rem;flex-shrink:0;margin-left:auto}.filter-input.svelte-1beoyzy{flex:0 1 auto;width:100%;min-width:6.5rem;max-width:12rem;padding:.35rem .6rem;font-size:.8125rem;border:1px solid var(--color-input);border-radius:var(--radius-sm);outline:none;background:var(--color-card-elevated);color:var(--color-foreground);transition:border-color .15s,background .15s}.filter-input.svelte-1beoyzy:focus{border-color:var(--color-primary);background:var(--color-card)}.filter-input.svelte-1beoyzy::placeholder{color:var(--color-muted-foreground-soft)}.btn-sort{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;padding:0;flex-shrink:0;font:inherit;color:var(--color-muted-foreground-strong);background:transparent;border:1px solid var(--color-input);border-radius:var(--radius-sm);box-shadow:none;cursor:pointer;transition:color .15s,border-color .15s,background .15s}.btn-sort:hover{color:var(--color-primary);border-color:var(--color-primary);background:transparent}.btn-sort:focus-visible{outline:2px solid color-mix(in srgb,var(--color-primary) 45%,transparent);outline-offset:1px}.sort-menu{min-width:10.5rem;padding:.3rem;box-sizing:border-box}.sort-menu-item.svelte-1beoyzy{display:flex;align-items:center;justify-content:space-between;gap:.5rem;width:100%;padding:.4rem .55rem;font-size:.8125rem;text-align:left;border:none;border-radius:6px;cursor:pointer;background:transparent;color:var(--color-muted-foreground-strong);transition:background .12s,color .12s}.sort-menu-item.svelte-1beoyzy:hover{background:var(--color-muted);color:var(--color-accent-foreground)}.sort-menu-item.active.svelte-1beoyzy{color:var(--color-primary);font-weight:500}.sort-menu-dir.svelte-1beoyzy{font-size:.75rem;font-variant-numeric:tabular-nums;opacity:.9}.btn-add.svelte-1beoyzy{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;padding:0;flex-shrink:0;color:var(--color-primary-foreground);background:var(--color-primary);border:none;border-radius:var(--radius-sm);cursor:pointer;transition:opacity .15s,background .15s}.btn-add.svelte-1beoyzy:hover{opacity:.9;background:var(--color-primary-hover, var(--color-primary))}.dropdown-panel{z-index:50;background:var(--color-card);border:1px solid var(--color-border);border-radius:var(--radius-sm);box-shadow:var(--shadow-panel)}.more-menu{width:11.5rem;min-width:11.5rem;padding:.25rem;box-sizing:border-box}.more-menu-item.svelte-1beoyzy{display:flex;align-items:center;gap:.5rem;width:100%;padding:.4rem .65rem;font-size:.8125rem;text-align:left;border:none;border-radius:6px;cursor:pointer;background:transparent;color:var(--color-muted-foreground-strong);text-decoration:none;transition:background .15s,color .15s}.more-menu-item.svelte-1beoyzy:hover:not(:disabled){background:var(--color-muted);color:var(--color-accent-foreground)}.more-menu-item.svelte-1beoyzy:disabled{opacity:.6;cursor:not-allowed}.more-menu-item-danger.svelte-1beoyzy:hover:not(:disabled){color:var(--color-destructive);background:color-mix(in srgb,var(--color-destructive) 14%,transparent)}.more-menu-item-remove.svelte-1beoyzy{color:var(--color-destructive)}.more-menu-item-remove.svelte-1beoyzy svg{color:var(--color-destructive)}.more-menu-item-remove.svelte-1beoyzy:hover:not(:disabled){background:color-mix(in srgb,var(--color-destructive) 14%,transparent);color:var(--color-destructive)}.more-menu-item.pulling.svelte-1beoyzy svg{animation:svelte-1beoyzy-spin .8s linear infinite}.state.svelte-1beoyzy{flex:1;display:flex;align-items:center;justify-content:center;text-align:center;padding:1.5rem calc(var(--shell-gutter) + 1rem);color:var(--color-muted-foreground);font-size:.875rem;gap:.25rem}.state.error.svelte-1beoyzy{color:var(--color-destructive)}.link-btn.svelte-1beoyzy{background:none;border:none;padding:0;color:var(--color-primary);font-size:inherit;cursor:pointer;text-decoration:underline}.link-btn.svelte-1beoyzy:hover{text-decoration:underline}.feed-body-scroll.svelte-1beoyzy>.list:where(.svelte-1beoyzy){flex-shrink:0}.list.svelte-1beoyzy{min-width:0;width:100%;display:flex;flex-direction:column;border-top:1px solid var(--color-border-muted)}.row-grid.svelte-1beoyzy{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.5rem .75rem;align-items:center;padding:.55rem var(--shell-gutter);box-sizing:border-box}.card.svelte-1beoyzy{border-bottom:1px solid var(--color-border-muted);transition:background .15s;cursor:pointer}.card.svelte-1beoyzy:hover{background:var(--color-muted)}.card.svelte-1beoyzy:focus-visible{outline:1px solid color-mix(in srgb,var(--color-primary) 55%,transparent);outline-offset:-1px}.card.svelte-1beoyzy:last-child{border-bottom:none}.cell-title.svelte-1beoyzy{min-width:0}.title-block.svelte-1beoyzy{display:flex;align-items:center;gap:.35rem;min-width:0;max-width:100%;width:100%;box-sizing:border-box;color:inherit}.title-line.svelte-1beoyzy{display:flex;align-items:baseline;gap:.35rem;min-width:0;flex:1 1 0%}.title-item-count.svelte-1beoyzy{flex-shrink:0;font-size:.72rem;font-weight:500;font-variant-numeric:tabular-nums;color:var(--color-muted-foreground-soft);line-height:1.2}.source-title-favicon-slot.svelte-1beoyzy{flex-shrink:0;box-sizing:border-box;width:1rem;height:1rem;border-radius:3px;background:transparent;overflow:hidden}.source-title-favicon.svelte-1beoyzy{display:block;width:100%;height:100%;object-fit:contain}.title-text.svelte-1beoyzy{font-size:.875rem;font-weight:500;line-height:1.2;color:var(--color-foreground);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.cell-actions.svelte-1beoyzy{display:inline-flex;align-items:center;justify-content:flex-end;flex-shrink:0}@keyframes svelte-1beoyzy-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.btn-icon{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;padding:0;color:var(--color-muted-foreground);background:transparent;border:none;border-radius:var(--radius-sm);cursor:pointer;transition:color .15s,background .15s}.btn-icon:hover{color:var(--color-foreground);background:var(--color-muted)}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000059;z-index:100}.modal{position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);background:var(--color-card-elevated);border-radius:10px;width:calc(100% - 2rem);max-width:460px;box-shadow:var(--shadow-panel);border:1px solid var(--color-border);display:flex;flex-direction:column;overflow:hidden;z-index:101}.modal .modal-header.svelte-1beoyzy{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem .75rem;border-bottom:1px solid var(--color-border-muted)}.modal-title{font-size:.9375rem;font-weight:600;margin:0;color:var(--color-foreground)}.modal-close{background:none;border:none;padding:.25rem;font-size:1rem;color:var(--color-muted-foreground);cursor:pointer;line-height:1;border-radius:4px}.modal-close:hover{color:var(--color-foreground);background:var(--color-muted)}.modal-body.svelte-1beoyzy{padding:1rem 1.25rem;display:flex;flex-direction:column;gap:.75rem}.field.svelte-1beoyzy{display:flex;flex-direction:column;gap:.3rem}.field-row.svelte-1beoyzy{display:grid;grid-template-columns:1fr 1fr;gap:.75rem}.field-label.svelte-1beoyzy{font-size:.8rem;font-weight:500;color:var(--color-muted-foreground-strong)}.required.svelte-1beoyzy{color:var(--color-destructive)}.ref-input-wrap.svelte-1beoyzy{display:flex;align-items:center;gap:.35rem;width:100%}.ref-input-wrap.svelte-1beoyzy .field-input:where(.svelte-1beoyzy){flex:1;min-width:0}.parse-hints.svelte-1beoyzy{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem .5rem}.parse-hint.svelte-1beoyzy{display:inline-flex;align-items:center;gap:.3rem;padding:.2rem .45rem;font-size:.72rem;font-weight:500;color:var(--color-muted-foreground-soft);border-radius:5px;border:1px solid transparent;background:transparent;transition:color .15s,border-color .15s,background .15s}.parse-hint.active.svelte-1beoyzy{color:var(--color-primary);border-color:color-mix(in srgb,var(--color-primary) 35%,transparent);background:color-mix(in srgb,var(--color-primary) 10%,transparent)}.field-input.svelte-1beoyzy{padding:.4rem .65rem;font-size:.875rem;border:1px solid var(--color-input);border-radius:var(--radius-sm);outline:none;background:var(--color-card);color:var(--color-foreground);font-family:inherit;transition:border-color .15s,background .15s;width:100%}.field-input.svelte-1beoyzy:focus{border-color:var(--color-primary);background:var(--color-card-elevated)}.source-modal-select-trigger{display:inline-flex;align-items:center;justify-content:space-between;gap:.5rem;width:100%;padding:.4rem .65rem;font-size:.875rem;border:1px solid var(--color-input);border-radius:var(--radius-sm);outline:none;background:var(--color-card);color:var(--color-foreground);font-family:inherit;cursor:pointer;transition:border-color .15s,background .15s}.source-modal-select-trigger:focus-visible{border-color:var(--color-primary);background:var(--color-card-elevated);box-shadow:0 0 0 3px var(--color-primary-light)}.source-modal-select-trigger span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.source-modal-select-content{z-index:140;width:var(--bits-select-anchor-width);max-width:min(34rem,calc(100vw - 2rem));padding:.25rem;background:var(--color-card-elevated);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-panel)}.source-modal-select-viewport{display:flex;flex-direction:column;gap:.05rem;max-height:16rem;overflow:auto}.source-modal-select-item{display:flex;align-items:center;min-height:2rem;padding:.4rem .6rem;font-size:.8125rem;line-height:1.25;color:var(--color-foreground);border-radius:var(--radius-sm);outline:none;cursor:pointer;word-break:break-all}.source-modal-select-item[data-highlighted]{background:var(--color-muted)}.source-modal-select-item[data-selected]{color:var(--color-primary);background:var(--color-primary-light)}.field-hint.svelte-1beoyzy{margin:0;font-size:.75rem;color:var(--color-muted-foreground-soft);line-height:1.4}.field-input--weight.svelte-1beoyzy{-moz-appearance:textfield}.field-input--weight.svelte-1beoyzy::-webkit-outer-spin-button,.field-input--weight.svelte-1beoyzy::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.save-error.svelte-1beoyzy{font-size:.8rem;color:var(--color-destructive);margin:0}.modal-footer.svelte-1beoyzy{display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:.75rem 1.25rem;border-top:1px solid var(--color-border-muted)}.remove-dialog-footer.svelte-1beoyzy{justify-content:flex-end}.remove-dialog-text.svelte-1beoyzy{margin:0;font-size:.875rem;line-height:1.5;color:var(--color-foreground)}.remove-dialog-target.svelte-1beoyzy{margin:0;margin-top:.5rem;font-size:.8125rem;color:var(--color-muted-foreground-strong);word-break:break-all}.modal-footer-left.svelte-1beoyzy{display:flex;align-items:center}.modal-footer-right.svelte-1beoyzy{display:flex;align-items:center;gap:.5rem}.btn-delete.svelte-1beoyzy{display:inline-flex;align-items:center;gap:.3rem;padding:.4rem .8rem;font-size:.875rem;color:var(--color-destructive);background:transparent;border:1px solid color-mix(in srgb,var(--color-destructive) 45%,transparent);border-radius:var(--radius-sm);cursor:pointer;transition:background .15s}.btn-delete.svelte-1beoyzy:hover:not(:disabled){background:color-mix(in srgb,var(--color-destructive) 12%,transparent)}.confirm-delete-row.svelte-1beoyzy{display:inline-flex;align-items:center;gap:.4rem;font-size:.8rem}.confirm-delete-text.svelte-1beoyzy{color:var(--color-destructive);font-weight:500}.btn-confirm-yes.svelte-1beoyzy{padding:.3rem .7rem;font-size:.8rem;color:var(--color-destructive-foreground);background:var(--color-destructive);border:none;border-radius:5px;cursor:pointer}.btn-confirm-yes.svelte-1beoyzy:disabled{opacity:.6;cursor:not-allowed}.btn-confirm-no.svelte-1beoyzy{padding:.3rem .6rem;font-size:.8rem;color:var(--color-foreground);background:var(--color-muted);border:1px solid var(--color-border);border-radius:5px;cursor:pointer}.btn-cancel{padding:.4rem 1rem;font-size:.875rem;color:var(--color-foreground);background:var(--color-muted);border:1px solid var(--color-border);border-radius:var(--radius-sm);cursor:pointer}.btn-cancel:hover:not(:disabled){background:var(--color-accent)}.btn-save.svelte-1beoyzy{padding:.4rem 1.2rem;font-size:.875rem;color:var(--color-primary-foreground);background:var(--color-primary);border:none;border-radius:6px;cursor:pointer;transition:opacity .15s}.btn-save.svelte-1beoyzy:hover:not(:disabled){opacity:.85}.btn-save.svelte-1beoyzy:disabled{opacity:.6;cursor:not-allowed}@media(max-width:600px){.feed-wrap.svelte-1beoyzy{max-width:100%}.field-row.svelte-1beoyzy{grid-template-columns:1fr}}
@@ -0,0 +1 @@
1
+ [data-select-viewport],[data-combobox-viewport]{scrollbar-width:none!important;-ms-overflow-style:none!important;-webkit-overflow-scrolling:touch!important}[data-combobox-viewport]::-webkit-scrollbar{display:none!important}[data-select-viewport]::-webkit-scrollbar{display:none!important}
@@ -1 +1 @@
1
- import{w as a}from"./ClknbeNl.js";let t=null;const s=a({msg:"",type:""});function m(e,o=""){s.set({msg:e,type:o}),t&&clearTimeout(t),t=setTimeout(()=>s.set({msg:"",type:""}),3500)}export{m as s,s as t};
1
+ import{w as a}from"./FDS7fbwH.js";let t=null;const s=a({msg:"",type:""});function m(e,o=""){s.set({msg:e,type:o}),t&&clearTimeout(t),t=setTimeout(()=>s.set({msg:"",type:""}),3500)}export{m as s,s as t};