isaikr 0.0.1

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 (51) hide show
  1. package/README.md +35 -0
  2. package/cdn/api.js +19 -0
  3. package/cdn/character.js +254 -0
  4. package/cdn/chat.js +33 -0
  5. package/cdn/code-editor.js +1131 -0
  6. package/cdn/community-compose.js +270 -0
  7. package/cdn/games/2048/index.html +12 -0
  8. package/cdn/games/breakout/index.html +13 -0
  9. package/cdn/games/clicker/index.html +26 -0
  10. package/cdn/games/flappy/index.html +11 -0
  11. package/cdn/games/memory/index.html +34 -0
  12. package/cdn/games/pong/index.html +13 -0
  13. package/cdn/games/reaction/index.html +38 -0
  14. package/cdn/games/runner/index.html +11 -0
  15. package/cdn/games/snake/index.html +11 -0
  16. package/cdn/games/tetris/index.html +14 -0
  17. package/cdn/games/whack/index.html +8 -0
  18. package/cdn/go.js +126 -0
  19. package/cdn/go2.js +127 -0
  20. package/cdn/header3_behavior.js +1167 -0
  21. package/cdn/header3_layout.js +1004 -0
  22. package/cdn/header3_layout.js.bak +1004 -0
  23. package/cdn/header3_style.css +3524 -0
  24. package/cdn/header3_style.css.bak +3514 -0
  25. package/cdn/lang.js +198 -0
  26. package/cdn/loading.js +143 -0
  27. package/cdn/loading2.js +144 -0
  28. package/cdn/local-model.js +2941 -0
  29. package/cdn/main.js +4 -0
  30. package/cdn/main_asset.js +1849 -0
  31. package/cdn/main_asset.js.bak +6999 -0
  32. package/cdn/main_index.css +287 -0
  33. package/cdn/re_board3.css +733 -0
  34. package/cdn/re_board3.js +734 -0
  35. package/cdn/re_chat_tts.js +652 -0
  36. package/cdn/re_local_runtime.js +2246 -0
  37. package/cdn/re_local_runtime.js.bak +2246 -0
  38. package/cdn/re_share.js +577 -0
  39. package/cdn/re_voice.js +542 -0
  40. package/cdn/utils.js +36 -0
  41. package/cdn/view.js +321 -0
  42. package/header3_behavior.js +804 -0
  43. package/header3_layout.js +998 -0
  44. package/header3_style.css +2740 -0
  45. package/index.js +0 -0
  46. package/lang.js +179 -0
  47. package/main_asset.js +2416 -0
  48. package/main_index.css +274 -0
  49. package/package.json +14 -0
  50. package/re_chat_tts.js +1419 -0
  51. package/re_voice.js +430 -0
@@ -0,0 +1,733 @@
1
+ [x-cloak] { display: none !important; }
2
+
3
+ #board-container { background-color: var(--bg-main, #ffffff); color: var(--text-main, #1a1a1a); width: 100%; position: relative; z-index: 50; padding-bottom: 80px; transition: background-color 0.3s, color 0.3s; }
4
+ body.theme-dark #board-container, body.theme-midnight #board-container { background-color: var(--bg-main, #050505) !important; color: var(--text-main, #e5e5e5) !important; }
5
+
6
+ .market-heatmap-host {
7
+ position: absolute;
8
+ inset: 0;
9
+ width: 100% !important;
10
+ height: 100% !important;
11
+ min-height: 100% !important;
12
+ overflow: hidden;
13
+ background: #0a0a0c;
14
+ }
15
+
16
+ .market-heatmap-host .tradingview-widget-container,
17
+ .market-heatmap-host .tradingview-widget-container__widget,
18
+ .market-heatmap-host iframe {
19
+ width: 100% !important;
20
+ height: 100% !important;
21
+ min-height: 100% !important;
22
+ display: block !important;
23
+ }
24
+
25
+ .market-heatmap-host .tradingview-widget-copyright {
26
+ display: none !important;
27
+ }
28
+
29
+ .masonry-grid { display: block !important; width: 100% !important; position: relative; }
30
+ .masonry-item { width: 48%; margin-bottom: 16px; display: inline-block; vertical-align: top; break-inside: avoid; }
31
+ @media (min-width: 1200px) { .masonry-item { width: 15.8%; } }
32
+
33
+ .store-card, .forum-card { background-color: var(--bg-island, #ffffff); border-radius: 32px; overflow: hidden; display: flex; flex-direction: column; transition: transform 0.2s ease, box-shadow 0.2s ease; box-shadow: 0 4px 20px rgba(0,0,0,0.04); border: 1px solid rgba(0,0,0,0.02); cursor: pointer; }
34
+ body.theme-dark .store-card, body.theme-dark .forum-card { background-color: var(--bg-island, #111111); box-shadow: 0 4px 20px rgba(0,0,0,0.3); border: 1px solid rgba(255,255,255,0.05); }
35
+ .store-card:hover, .forum-card:hover { transform: translateY(-3px); box-shadow: 0 15px 35px rgba(0,0,0,0.12); }
36
+
37
+ .gallery-card { border-radius: 28px; position: relative; padding: 6px; background-color: var(--bg-island); cursor: pointer; }
38
+ .gallery-img-box { position: relative; border-radius: 24px; overflow: hidden; display: flex; align-items: center; justify-content: center; }
39
+
40
+ .gallery-img-box img { width: 100%; height: auto; display: block; border-radius: 24px; object-fit: cover; }
41
+ .forum-card-img-wrap img { width: 100%; height: auto; display: block; border-radius: 16px; object-fit: cover; }
42
+
43
+ .gallery-info-overlay { position: absolute; bottom: 8px; left: 8px; width: fit-content; max-width: 90%; background: rgba(0, 0, 0, 0.85); backdrop-filter: blur(8px); padding: 6px 12px 6px 6px; border-radius: 99px; display: flex; align-items: center; gap: 8px; color: white; }
44
+ .gallery-chat-btn-wrap { position: absolute; right: 10px; bottom: 10px; z-index: 3; }
45
+ .gallery-chat-btn {
46
+ width: 36px;
47
+ height: 36px;
48
+ border-radius: 999px;
49
+ padding: 0;
50
+ border: 1px solid rgba(255,255,255,0.22);
51
+ background: rgba(0,0,0,0.72);
52
+ color: #ffffff;
53
+ display: inline-flex;
54
+ align-items: center;
55
+ justify-content: center;
56
+ gap: 0;
57
+ font-size: 16px;
58
+ transition: all 0.2s ease;
59
+ box-shadow: 0 8px 20px rgba(0,0,0,0.25);
60
+ }
61
+ .gallery-chat-btn:hover {
62
+ transform: translateY(-1px);
63
+ background: rgba(255,255,255,0.92);
64
+ color: #111111;
65
+ border-color: rgba(255,255,255,0.92);
66
+ }
67
+
68
+ body.character-chat-open {
69
+ overflow: hidden !important;
70
+ }
71
+ .character-chat-overlay {
72
+ position: fixed;
73
+ inset: 0;
74
+ z-index: 1200;
75
+ overflow: hidden;
76
+ background: #000000;
77
+ }
78
+ .character-chat-bg {
79
+ position: absolute;
80
+ inset: 0;
81
+ background-size: cover;
82
+ background-position: center;
83
+ background-repeat: no-repeat;
84
+ filter: blur(14px);
85
+ transform: scale(1.08);
86
+ opacity: 0.9;
87
+ }
88
+ .character-chat-dim {
89
+ position: absolute;
90
+ inset: 0;
91
+ background: linear-gradient(180deg, rgba(0,0,0,0.56) 0%, rgba(0,0,0,0.75) 38%, rgba(0,0,0,0.9) 100%);
92
+ }
93
+ .character-chat-shell {
94
+ position: relative;
95
+ z-index: 2;
96
+ height: 100%;
97
+ display: flex;
98
+ flex-direction: column;
99
+ }
100
+ .character-chat-topbar {
101
+ display: flex;
102
+ align-items: center;
103
+ justify-content: space-between;
104
+ gap: 10px;
105
+ padding: 14px 16px 10px 16px;
106
+ }
107
+ .character-chat-title {
108
+ color: #ffffff;
109
+ font-weight: 700;
110
+ font-size: 14px;
111
+ max-width: 80vw;
112
+ white-space: nowrap;
113
+ overflow: hidden;
114
+ text-overflow: ellipsis;
115
+ }
116
+ .character-chat-close {
117
+ width: 36px;
118
+ height: 36px;
119
+ border-radius: 999px;
120
+ border: 1px solid rgba(255,255,255,0.2);
121
+ background: rgba(0,0,0,0.45);
122
+ color: #ffffff;
123
+ font-size: 18px;
124
+ display: inline-flex;
125
+ align-items: center;
126
+ justify-content: center;
127
+ }
128
+ .character-chat-prompt-chip {
129
+ margin: 0 16px;
130
+ padding: 9px 12px;
131
+ border-radius: 12px;
132
+ border: 1px solid rgba(255,255,255,0.14);
133
+ background: rgba(0,0,0,0.32);
134
+ color: rgba(255,255,255,0.9);
135
+ font-size: 12px;
136
+ line-height: 1.4;
137
+ display: -webkit-box;
138
+ -webkit-line-clamp: 2;
139
+ -webkit-box-orient: vertical;
140
+ overflow: hidden;
141
+ }
142
+ .character-chat-feed {
143
+ flex: 1;
144
+ overflow-y: auto;
145
+ padding: 14px 16px 20px 16px;
146
+ display: flex;
147
+ flex-direction: column;
148
+ gap: 10px;
149
+ position: relative;
150
+ background-size: cover;
151
+ background-position: center;
152
+ background-repeat: no-repeat;
153
+ }
154
+ .character-chat-feed::before {
155
+ content: '';
156
+ position: absolute;
157
+ inset: 0;
158
+ background: rgba(0,0,0,0.35);
159
+ pointer-events: none;
160
+ }
161
+ .character-chat-feed > * {
162
+ position: relative;
163
+ z-index: 1;
164
+ }
165
+ .character-chat-row {
166
+ display: flex;
167
+ }
168
+ .character-chat-row.assistant {
169
+ justify-content: flex-start;
170
+ }
171
+ .character-chat-row.user {
172
+ justify-content: flex-end;
173
+ }
174
+ .character-chat-bubble {
175
+ max-width: min(78vw, 560px);
176
+ border-radius: 16px;
177
+ padding: 10px 12px;
178
+ font-size: 13px;
179
+ line-height: 1.55;
180
+ white-space: pre-wrap;
181
+ word-break: break-word;
182
+ box-shadow: 0 10px 28px rgba(0,0,0,0.18);
183
+ backdrop-filter: blur(8px);
184
+ }
185
+ .character-chat-row.assistant .character-chat-bubble {
186
+ background: rgba(255,255,255,0.9);
187
+ color: #0f172a;
188
+ border: 1px solid rgba(255,255,255,0.42);
189
+ }
190
+ .character-chat-row.user .character-chat-bubble {
191
+ background: rgba(37,99,235,0.86);
192
+ color: #ffffff;
193
+ border: 1px solid rgba(147,197,253,0.48);
194
+ }
195
+ .character-chat-composer {
196
+ padding: 10px 12px 14px 12px;
197
+ border-top: 1px solid rgba(255,255,255,0.12);
198
+ background: rgba(0,0,0,0.25);
199
+ display: flex;
200
+ gap: 8px;
201
+ align-items: flex-end;
202
+ }
203
+ .character-chat-input {
204
+ flex: 1;
205
+ min-height: 46px;
206
+ max-height: 130px;
207
+ resize: none;
208
+ border-radius: 14px;
209
+ border: 1px solid rgba(255,255,255,0.22);
210
+ background: rgba(255,255,255,0.1);
211
+ color: #ffffff;
212
+ padding: 10px 12px;
213
+ font-size: 13px;
214
+ line-height: 1.45;
215
+ outline: none;
216
+ }
217
+ .character-chat-input::placeholder {
218
+ color: rgba(255,255,255,0.72);
219
+ }
220
+ .character-chat-send {
221
+ height: 46px;
222
+ min-width: 46px;
223
+ border-radius: 14px;
224
+ border: 1px solid rgba(255,255,255,0.22);
225
+ background: rgba(255,255,255,0.15);
226
+ color: #ffffff;
227
+ display: inline-flex;
228
+ align-items: center;
229
+ justify-content: center;
230
+ font-size: 18px;
231
+ transition: all 0.2s ease;
232
+ }
233
+ .character-chat-send:disabled {
234
+ opacity: 0.45;
235
+ cursor: default;
236
+ }
237
+ .character-chat-send:not(:disabled):hover {
238
+ background: rgba(255,255,255,0.95);
239
+ color: #111111;
240
+ transform: translateY(-1px);
241
+ }
242
+
243
+ .forum-meta-bar { background-color: rgba(0, 0, 0, 0.02); padding: 14px 18px; margin-top: auto; font-size: 0.75rem; color: var(--text-dim); display: flex; align-items: center; justify-content: space-between; }
244
+
245
+ .board-layout { display: flex; align-items: stretch; width: 100%; gap: 0 !important; padding: 0 12px !important; box-sizing: border-box; }
246
+ .board-left-nav {
247
+ width: 78px;
248
+ min-width: 78px;
249
+ flex: 0 0 78px;
250
+ display: none !important;
251
+ justify-content: center;
252
+ padding-top: 0;
253
+ align-self: stretch;
254
+ position: relative !important;
255
+ left: auto !important;
256
+ right: auto !important;
257
+ top: auto !important;
258
+ bottom: auto !important;
259
+ height: auto !important;
260
+ inset: auto !important;
261
+ pointer-events: auto !important;
262
+ z-index: 20;
263
+ }
264
+ .board-main-content { flex: 1 1 auto; min-width: 0; }
265
+
266
+ .nav-scroll-container {
267
+ display: flex;
268
+ flex-direction: column;
269
+ align-items: center;
270
+ overflow-y: auto;
271
+ overflow-x: hidden;
272
+ -webkit-overflow-scrolling: touch;
273
+ gap: 0.9rem;
274
+ justify-content: flex-start;
275
+ padding: 0.85rem 0.4rem;
276
+ width: 100%;
277
+ max-height: calc(100vh - 24px);
278
+ background: #ffffff !important;
279
+ box-sizing: border-box;
280
+ scrollbar-width: thin;
281
+ scrollbar-color: rgba(0, 0, 0, 0.28) transparent;
282
+ scrollbar-gutter: stable both-edges;
283
+ }
284
+ .board-left-nav .nav-scroll-container {
285
+ position: sticky !important;
286
+ top: 12px !important;
287
+ align-self: flex-start;
288
+ max-height: calc(100vh - 24px);
289
+ border-radius: 0 !important;
290
+ border: 1px solid rgba(0, 0, 0, 0.08) !important;
291
+ box-shadow: 0 8px 22px rgba(0, 0, 0, 0.06) !important;
292
+ overflow-x: hidden !important;
293
+ }
294
+ body.theme-dark .board-left-nav .nav-scroll-container,
295
+ body.theme-midnight .board-left-nav .nav-scroll-container {
296
+ background: #ffffff !important;
297
+ border-color: rgba(0, 0, 0, 0.08) !important;
298
+ box-shadow: 0 8px 22px rgba(0, 0, 0, 0.10) !important;
299
+ }
300
+ .nav-scroll-container::-webkit-scrollbar { width: 6px; display: block; }
301
+ .nav-scroll-container::-webkit-scrollbar-track { background: transparent; }
302
+ .nav-scroll-container::-webkit-scrollbar-thumb { background: rgba(0, 0, 0, 0.24); border-radius: 999px; }
303
+ .nav-scroll-container::-webkit-scrollbar-thumb:hover { background: rgba(0, 0, 0, 0.38); }
304
+
305
+ @media (min-width: 768px) {
306
+ .board-layout {
307
+ padding: 0 16px !important;
308
+ box-sizing: border-box;
309
+ }
310
+ .board-left-nav {
311
+ position: relative !important;
312
+ left: auto !important;
313
+ right: auto !important;
314
+ top: auto !important;
315
+ height: auto !important;
316
+ z-index: 20;
317
+ padding-top: 0;
318
+ pointer-events: auto;
319
+ }
320
+ .board-left-nav .nav-scroll-container {
321
+ position: sticky;
322
+ top: 12px;
323
+ max-height: calc(100vh - 24px);
324
+ pointer-events: auto;
325
+ }
326
+ }
327
+ @media (min-width: 901px) {
328
+ .board-left-nav {
329
+ display: none !important;
330
+ }
331
+ .board-layout {
332
+ gap: 0 !important;
333
+ padding: 0 12px !important;
334
+ }
335
+ }
336
+
337
+ @media (max-width: 767px) {
338
+ .board-layout { display: flex; padding: 0 8px !important; min-width: 0; box-sizing: border-box; gap: 0 !important; }
339
+ .board-left-nav {
340
+ width: 58px;
341
+ min-width: 58px;
342
+ flex: 0 0 58px;
343
+ display: none !important;
344
+ position: relative !important;
345
+ left: auto !important;
346
+ right: auto !important;
347
+ top: auto !important;
348
+ height: auto !important;
349
+ align-self: stretch;
350
+ padding-top: 0;
351
+ z-index: 20;
352
+ pointer-events: auto;
353
+ }
354
+ .board-main-content { width: 100%; flex: 1 1 auto; min-width: 0; }
355
+ .nav-scroll-container {
356
+ flex-direction: column;
357
+ overflow-y: auto;
358
+ overflow-x: hidden;
359
+ white-space: normal;
360
+ gap: 0.55rem;
361
+ padding: 0.65rem 0.15rem;
362
+ max-height: calc(100vh - 16px);
363
+ justify-content: flex-start;
364
+ }
365
+ .board-left-nav .nav-scroll-container { position: sticky; top: 8px; pointer-events: auto; }
366
+ .nav-icon-btn { width: 40px !important; height: 40px !important; font-size: 19px !important; border-radius: 14px !important; }
367
+ }
368
+
369
+ .nav-icon-btn { width: 48px; height: 48px; font-size: 22px; color: #5f5f5f; background: transparent; border-radius: 20px; display: flex; align-items: center; justify-content: center; transition: all 0.2s cubic-bezier(0.25, 0.8, 0.25, 1); flex-shrink: 0; }
370
+ .nav-icon-btn.active { color: #111111; background: rgba(0,0,0,0.06); transform: scale(1.05); box-shadow: 0 4px 12px rgba(0,0,0,0.05); }
371
+ .board-left-nav .nav-icon-btn { color: #5f5f5f !important; }
372
+ .board-left-nav .nav-icon-btn.active { color: #111111 !important; background: rgba(0,0,0,0.06) !important; }
373
+
374
+ .board-news-nav-wrap {
375
+ width: 100%;
376
+ padding: 24px 16px 0 16px;
377
+ box-sizing: border-box;
378
+ }
379
+ .board-news-nav-container {
380
+ background: var(--bg-island, #ffffff);
381
+ box-shadow: 0 4px 20px rgba(0,0,0,0.04);
382
+ border: 1px solid rgba(0,0,0,0.04);
383
+ border-radius: 9999px;
384
+ height: 50px;
385
+ display: flex;
386
+ align-items: center;
387
+ justify-content: center;
388
+ position: relative;
389
+ overflow: hidden;
390
+ transition: all 0.3s ease;
391
+ margin: 0 auto;
392
+ width: 100%;
393
+ max-width: 560px;
394
+ }
395
+ body.theme-dark .board-news-nav-container,
396
+ body.theme-midnight .board-news-nav-container {
397
+ border-color: rgba(255,255,255,0.06);
398
+ box-shadow: 0 8px 24px rgba(0,0,0,0.24);
399
+ }
400
+ .board-news-scroll-area {
401
+ display: flex;
402
+ align-items: center;
403
+ gap: 6px;
404
+ padding: 0 8px;
405
+ width: 100%;
406
+ height: 100%;
407
+ overflow-x: auto;
408
+ white-space: nowrap;
409
+ opacity: 1;
410
+ transition: opacity 0.2s;
411
+ }
412
+ .board-news-nav-container.search-mode .board-news-scroll-area {
413
+ display: none;
414
+ }
415
+ .news-search-input-area {
416
+ display: none;
417
+ width: 100%;
418
+ height: 100%;
419
+ align-items: center;
420
+ padding: 0 16px;
421
+ }
422
+ .board-news-nav-container.search-mode .news-search-input-area {
423
+ display: flex;
424
+ animation: fadeIn 0.3s ease;
425
+ }
426
+ .board-news-icon-btn {
427
+ width: 36px;
428
+ height: 36px;
429
+ font-size: 1.05rem;
430
+ border-radius: 50%;
431
+ flex-shrink: 0;
432
+ color: var(--text-dim, #6b7280);
433
+ background: transparent;
434
+ display: flex;
435
+ align-items: center;
436
+ justify-content: center;
437
+ transition: all 0.2s ease;
438
+ border: none;
439
+ outline: none;
440
+ }
441
+ .board-news-icon-btn:hover {
442
+ background-color: rgba(127,127,127, 0.1);
443
+ color: var(--text-main, #111);
444
+ }
445
+ .board-news-icon-btn.active {
446
+ background-color: var(--text-main, #111);
447
+ color: var(--bg-main, #fff);
448
+ box-shadow: 0 4px 12px rgba(0,0,0,0.15);
449
+ }
450
+ body.theme-dark .board-news-icon-btn.active,
451
+ body.theme-midnight .board-news-icon-btn.active {
452
+ background-color: #ffffff;
453
+ color: #111111;
454
+ }
455
+ #board-news-nav-bar {
456
+ position: relative;
457
+ overflow: hidden;
458
+ }
459
+ .board-spirit-notice {
460
+ position: absolute;
461
+ inset: 0;
462
+ border-radius: inherit;
463
+ display: flex;
464
+ align-items: center;
465
+ justify-content: center;
466
+ padding: 0 16px;
467
+ text-align: center;
468
+ white-space: nowrap;
469
+ overflow: hidden;
470
+ text-overflow: ellipsis;
471
+ word-break: keep-all;
472
+ font-size: 13px;
473
+ font-weight: 700;
474
+ line-height: 1.25;
475
+ letter-spacing: -0.01em;
476
+ font-family: inherit;
477
+ color: var(--text-main, #111111);
478
+ background: var(--bg-island, #ffffff);
479
+ opacity: 0;
480
+ visibility: hidden;
481
+ pointer-events: none;
482
+ z-index: 8;
483
+ transition: opacity 0.25s ease, visibility 0s linear 0.25s;
484
+ }
485
+ .board-spirit-notice.show {
486
+ opacity: 1;
487
+ visibility: visible;
488
+ pointer-events: auto;
489
+ cursor: pointer;
490
+ transition-delay: 0s;
491
+ }
492
+ .board-spirit-notice.fade-out {
493
+ opacity: 0;
494
+ transition: opacity 0.6s ease, visibility 0s linear 0.6s;
495
+ }
496
+ @media (max-width: 768px) {
497
+ .board-spirit-notice {
498
+ font-size: 12px;
499
+ padding: 0 12px;
500
+ }
501
+ }
502
+
503
+ .scrollbar-hide::-webkit-scrollbar { display: none; }
504
+ .scrollbar-hide { -ms-overflow-style: none; scrollbar-width: none; }
505
+
506
+ @media (max-width: 900px) {
507
+ .board-news-nav-wrap {
508
+ padding: 24px 16px 0 16px;
509
+ }
510
+ .board-main-content {
511
+ width: 100% !important;
512
+ flex: 1 1 auto !important;
513
+ min-width: 0 !important;
514
+ }
515
+ }
516
+
517
+ .cat-nav-container {
518
+ border-radius: 9999px;
519
+ height: 56px;
520
+ display: flex; align-items: center; justify-content: center;
521
+ position: relative; overflow: hidden;
522
+ transition: all 0.3s ease;
523
+ margin: 0 auto;
524
+ width: 100%; max-width: 800px;
525
+ border: 1px solid rgba(255, 255, 255, 0.14) !important;
526
+ background: rgba(10, 10, 11, 0.52) !important;
527
+ }
528
+
529
+ .cat-scroll-area {
530
+ display: flex; align-items: center; gap: 8px;
531
+ padding: 0 10px;
532
+ width: 100%; height: 100%;
533
+ overflow-x: auto; white-space: nowrap;
534
+ opacity: 1; transition: opacity 0.2s;
535
+ }
536
+ .cat-nav-container.search-mode .cat-scroll-area { display: none; }
537
+
538
+ .search-input-area {
539
+ display: none; width: 100%; height: 100%;
540
+ align-items: center; padding: 0 20px;
541
+ }
542
+ .cat-nav-container.search-mode .search-input-area { display: flex; animation: fadeIn 0.3s ease; }
543
+
544
+ .cat-btn-chip,
545
+ .cat-icon-btn {
546
+ width: 42px; height: 42px; font-size: 1.25rem;
547
+ border-radius: 50%; flex-shrink: 0;
548
+ color: var(--text-dim, #6b7280); background: transparent;
549
+ display: flex; align-items: center; justify-content: center;
550
+ transition: all 0.2s;
551
+ }
552
+ .cat-btn-chip:hover,
553
+ .cat-icon-btn:hover { background-color: rgba(127,127,127, 0.1); color: var(--text-main, #111); }
554
+ .cat-btn-chip.active,
555
+ .cat-icon-btn.active {
556
+ background-color: var(--text-main, #111);
557
+ color: var(--bg-main, #fff);
558
+ box-shadow: 0 4px 12px rgba(0,0,0,0.15);
559
+ }
560
+
561
+ /* [Modal & Form] */
562
+ .modal-box {
563
+ background-color: var(--bg-island, #ffffff);
564
+ color: var(--text-main, #111);
565
+ box-shadow: 0 25px 60px rgba(0,0,0,0.3);
566
+ }
567
+ .input-field {
568
+ background-color: var(--bg-main, #f3f4f6);
569
+ color: var(--text-main, #111);
570
+ border: 1px solid transparent;
571
+ }
572
+ body.theme-dark .input-field { border-color: rgba(255,255,255,0.05) !important; }
573
+
574
+ .cat-opt {
575
+ min-width: 60px; flex-shrink: 0;
576
+ display: flex; flex-direction: column; align-items: center;
577
+ padding: 8px; border-radius: 12px; cursor: pointer; transition: all 0.2s;
578
+ }
579
+ .cat-opt.selected { background: var(--text-main, #111); color: var(--bg-main, #fff); }
580
+
581
+ .txt-primary { color: var(--text-main, #111); }
582
+ .txt-sub { color: var(--text-dim, #6b7280); }
583
+
584
+ .custom-scrollbar::-webkit-scrollbar { height: 4px; }
585
+ .custom-scrollbar::-webkit-scrollbar-track { background: transparent; }
586
+ .custom-scrollbar::-webkit-scrollbar-thumb { background-color: rgba(0, 0, 0, 0.2); border-radius: 10px; }
587
+ body.theme-dark .custom-scrollbar::-webkit-scrollbar-thumb { background-color: rgba(255, 255, 255, 0.2); }
588
+ .no-scrollbar::-webkit-scrollbar { display: none; }
589
+
590
+ .loading-sentinel { height: 20px; width: 100%; display: flex; justify-content: center; padding: 20px; }
591
+ .loading-sentinel.active::after { content: ''; width: 24px; height: 24px; border: 2px solid var(--text-dim); border-top-color: transparent; border-radius: 50%; animation: spin 1s linear infinite; }
592
+ @keyframes spin { to { transform: rotate(360deg); } }
593
+ @keyframes fadeIn { from { opacity: 0; transform: translateY(5px); } to { opacity: 1; transform: translateY(0); } }
594
+
595
+ .pinterest-grid {
596
+ width: 100%;
597
+ }
598
+
599
+ .gallery-pin-card {
600
+ break-inside: avoid;
601
+ margin-bottom: 16px;
602
+ cursor: zoom-in;
603
+ }
604
+
605
+ .gallery-pin-frame {
606
+ position: relative;
607
+ overflow: hidden;
608
+ border-radius: 16px;
609
+ background: rgba(255,255,255,0.04);
610
+ box-shadow: 0 8px 22px rgba(0,0,0,0.10);
611
+ border: 1px solid rgba(255,255,255,0.06);
612
+ transform: translateZ(0);
613
+ }
614
+
615
+ .gallery-pin-image {
616
+ width: 100%;
617
+ display: block;
618
+ height: auto;
619
+ object-fit: cover;
620
+ }
621
+
622
+ .gallery-pin-overlay {
623
+ position: absolute;
624
+ inset: 0;
625
+ display: flex;
626
+ flex-direction: column;
627
+ justify-content: space-between;
628
+ padding: 12px;
629
+ opacity: 0;
630
+ background: linear-gradient(180deg, rgba(0,0,0,0.06) 0%, rgba(0,0,0,0.30) 100%);
631
+ transition: opacity 0.18s ease;
632
+ pointer-events: none;
633
+ }
634
+
635
+ .gallery-pin-card:hover .gallery-pin-overlay,
636
+ .gallery-pin-card:focus-within .gallery-pin-overlay {
637
+ opacity: 1;
638
+ }
639
+
640
+ .gallery-pin-top {
641
+ display: flex;
642
+ justify-content: flex-end;
643
+ }
644
+
645
+ .gallery-pin-save {
646
+ display: inline-flex;
647
+ align-items: center;
648
+ gap: 6px;
649
+ padding: 9px 13px;
650
+ border-radius: 999px;
651
+ border: 1px solid rgba(255,255,255,0.14);
652
+ background: rgba(230, 0, 35, 0.92);
653
+ color: #ffffff;
654
+ font-size: 12px;
655
+ font-weight: 700;
656
+ pointer-events: auto;
657
+ box-shadow: 0 8px 18px rgba(0,0,0,0.20);
658
+ transition: transform 0.16s ease, background 0.16s ease;
659
+ }
660
+
661
+ .gallery-pin-save:hover {
662
+ background: rgba(210, 0, 30, 0.98);
663
+ transform: translateY(-1px);
664
+ }
665
+
666
+ .gallery-pin-bottom {
667
+ display: flex;
668
+ align-items: flex-end;
669
+ justify-content: space-between;
670
+ gap: 12px;
671
+ min-width: 0;
672
+ }
673
+
674
+ .gallery-pin-user {
675
+ display: flex;
676
+ align-items: center;
677
+ gap: 8px;
678
+ min-width: 0;
679
+ }
680
+
681
+ .gallery-pin-avatar {
682
+ width: 30px;
683
+ height: 30px;
684
+ border-radius: 999px;
685
+ object-fit: cover;
686
+ border: 1px solid rgba(255,255,255,0.18);
687
+ flex-shrink: 0;
688
+ pointer-events: auto;
689
+ }
690
+
691
+ .gallery-pin-user-text {
692
+ display: flex;
693
+ flex-direction: column;
694
+ min-width: 0;
695
+ }
696
+
697
+ .gallery-pin-name {
698
+ color: #ffffff;
699
+ font-size: 12px;
700
+ font-weight: 700;
701
+ line-height: 1.15;
702
+ white-space: nowrap;
703
+ overflow: hidden;
704
+ text-overflow: ellipsis;
705
+ max-width: 130px;
706
+ }
707
+
708
+ .gallery-pin-meta {
709
+ color: rgba(255,255,255,0.72);
710
+ font-size: 10px;
711
+ line-height: 1.15;
712
+ }
713
+
714
+ .gallery-pin-chat {
715
+ width: 36px;
716
+ height: 36px;
717
+ border-radius: 999px;
718
+ border: 1px solid rgba(255,255,255,0.16);
719
+ background: rgba(255,255,255,0.16);
720
+ color: #ffffff;
721
+ display: inline-flex;
722
+ align-items: center;
723
+ justify-content: center;
724
+ pointer-events: auto;
725
+ transition: background 0.16s ease, transform 0.16s ease, color 0.16s ease;
726
+ flex-shrink: 0;
727
+ }
728
+
729
+ .gallery-pin-chat:hover {
730
+ background: rgba(255,255,255,0.92);
731
+ color: #111111;
732
+ transform: translateY(-1px);
733
+ }