@okjavis/nodebb-theme-javis 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,434 @@
1
+ // ===========================================================
2
+ // TOPIC CARDS – Reddit-Style Feed
3
+ // Clean, modern design with vote column
4
+ // ===========================================================
5
+
6
+ // TOPIC CARD (Main container)
7
+ .topic-card {
8
+ display: flex;
9
+ background: $jv-surface;
10
+ border-radius: $jv-radius-lg;
11
+ border: 1px solid $jv-border-subtle;
12
+ margin-bottom: $jv-space-4;
13
+ transition: border-color 0.15s ease, box-shadow 0.15s ease;
14
+ overflow: hidden;
15
+
16
+ &:hover {
17
+ border-color: $jv-border-strong;
18
+ box-shadow: $jv-shadow-soft;
19
+ }
20
+
21
+ // Deleted/scheduled states
22
+ &.deleted {
23
+ opacity: 0.5;
24
+ }
25
+
26
+ &.pinned {
27
+ border-left: 3px solid $jv-primary;
28
+ }
29
+ }
30
+
31
+ // ===========================================================
32
+ // VOTE COLUMN (Left side - Reddit style)
33
+ // ===========================================================
34
+ .vote-column {
35
+ display: flex;
36
+ flex-direction: column;
37
+ align-items: center;
38
+ justify-content: flex-start;
39
+ padding: $jv-space-6 $jv-space-4;
40
+ background: rgba(0, 0, 0, 0.02);
41
+ min-width: 44px;
42
+ gap: 2px;
43
+ }
44
+
45
+ .vote-btn {
46
+ display: flex;
47
+ align-items: center;
48
+ justify-content: center;
49
+ width: 28px;
50
+ height: 28px;
51
+ border: none;
52
+ background: transparent;
53
+ color: $jv-text-muted;
54
+ cursor: pointer;
55
+ border-radius: $jv-radius-xs;
56
+ transition: color 0.15s ease, background-color 0.15s ease;
57
+
58
+ &:hover {
59
+ background: rgba(0, 0, 0, 0.06);
60
+ }
61
+
62
+ &.vote-up:hover {
63
+ color: #ff4500; // Reddit orange-red
64
+ }
65
+
66
+ &.vote-down:hover {
67
+ color: #7193ff; // Reddit periwinkle
68
+ }
69
+
70
+ &.active.vote-up {
71
+ color: #ff4500;
72
+ }
73
+
74
+ &.active.vote-down {
75
+ color: #7193ff;
76
+ }
77
+
78
+ i {
79
+ font-size: 14px;
80
+ }
81
+ }
82
+
83
+ .vote-count {
84
+ font-size: $jv-font-size-sm;
85
+ font-weight: 600;
86
+ color: $jv-text-main;
87
+ line-height: 1;
88
+ padding: 4px 0;
89
+ }
90
+
91
+ // ===========================================================
92
+ // TOPIC CONTENT (Right side)
93
+ // ===========================================================
94
+ .topic-content {
95
+ flex: 1;
96
+ padding: $jv-space-6;
97
+ display: flex;
98
+ flex-direction: column;
99
+ gap: $jv-space-4;
100
+ min-width: 0; // Allow text truncation
101
+ }
102
+
103
+ // Meta Row (category, author, time)
104
+ .topic-meta {
105
+ display: flex;
106
+ align-items: center;
107
+ flex-wrap: wrap;
108
+ gap: $jv-space-2;
109
+ font-size: $jv-font-size-xs;
110
+ color: $jv-text-muted;
111
+
112
+ .meta-separator {
113
+ color: $jv-text-soft;
114
+ }
115
+
116
+ .author-link {
117
+ color: $jv-text-muted;
118
+ text-decoration: none;
119
+ font-weight: 500;
120
+
121
+ &:hover {
122
+ color: $jv-primary;
123
+ text-decoration: underline;
124
+ }
125
+ }
126
+
127
+ .meta-time {
128
+ color: $jv-text-soft;
129
+ }
130
+
131
+ // Category badge override
132
+ .badge {
133
+ font-size: 11px;
134
+ font-weight: 600;
135
+ padding: 2px 8px;
136
+ border-radius: $jv-radius-pill;
137
+ }
138
+ }
139
+
140
+ // Topic Title
141
+ .topic-card .topic-title {
142
+ margin: 0;
143
+ font-size: $jv-font-size-lg;
144
+ font-weight: 600;
145
+ line-height: $jv-line-height-tight;
146
+ letter-spacing: -0.01em;
147
+
148
+ a {
149
+ color: $jv-text-main;
150
+ text-decoration: none;
151
+
152
+ &:hover {
153
+ color: $jv-primary;
154
+ }
155
+ }
156
+ }
157
+
158
+ // Topic Labels/Badges
159
+ .topic-labels {
160
+ display: flex;
161
+ flex-wrap: wrap;
162
+ gap: $jv-space-2;
163
+
164
+ .topic-badge {
165
+ display: inline-flex;
166
+ align-items: center;
167
+ gap: 4px;
168
+ font-size: 11px;
169
+ font-weight: 500;
170
+ padding: 2px 8px;
171
+ border-radius: $jv-radius-xs;
172
+ background: rgba(0, 0, 0, 0.05);
173
+ color: $jv-text-muted;
174
+
175
+ &.pinned {
176
+ background: rgba(0, 81, 255, 0.1);
177
+ color: $jv-primary;
178
+ }
179
+
180
+ &.locked {
181
+ background: rgba(239, 68, 68, 0.1);
182
+ color: #ef4444;
183
+ }
184
+
185
+ &.scheduled {
186
+ background: rgba(245, 158, 11, 0.1);
187
+ color: #f59e0b;
188
+ }
189
+
190
+ &.hidden {
191
+ display: none;
192
+ }
193
+ }
194
+ }
195
+
196
+ // Tags
197
+ .topic-tags {
198
+ display: flex;
199
+ flex-wrap: wrap;
200
+ gap: $jv-space-2;
201
+
202
+ .topic-tag {
203
+ font-size: 11px;
204
+ font-weight: 500;
205
+ padding: 3px 10px;
206
+ border-radius: $jv-radius-pill;
207
+ background: rgba(0, 0, 0, 0.04);
208
+ color: $jv-text-muted;
209
+ text-decoration: none;
210
+ transition: background-color 0.15s ease, color 0.15s ease;
211
+
212
+ &:hover {
213
+ background: $jv-primary-soft;
214
+ color: $jv-primary;
215
+ }
216
+ }
217
+ }
218
+
219
+ // Thumbnail Preview
220
+ .topic-thumbnail {
221
+ display: block;
222
+ position: relative;
223
+ width: fit-content;
224
+ max-width: 100%;
225
+ border-radius: $jv-radius-md;
226
+ overflow: hidden;
227
+
228
+ img {
229
+ display: block;
230
+ max-height: 200px;
231
+ max-width: 100%;
232
+ width: auto;
233
+ object-fit: cover;
234
+ border-radius: $jv-radius-md;
235
+ }
236
+
237
+ .thumb-count {
238
+ position: absolute;
239
+ bottom: 8px;
240
+ right: 8px;
241
+ background: rgba(0, 0, 0, 0.7);
242
+ color: white;
243
+ font-size: 11px;
244
+ font-weight: 600;
245
+ padding: 2px 6px;
246
+ border-radius: $jv-radius-xs;
247
+ }
248
+ }
249
+
250
+ // Teaser/Preview Content
251
+ .topic-teaser {
252
+ font-size: $jv-font-size-sm;
253
+ color: $jv-text-muted;
254
+ line-height: $jv-line-height-base;
255
+ display: -webkit-box;
256
+ -webkit-line-clamp: 3;
257
+ -webkit-box-orient: vertical;
258
+ overflow: hidden;
259
+
260
+ // Reset any nested styles
261
+ p {
262
+ margin: 0;
263
+ }
264
+ }
265
+
266
+ // ===========================================================
267
+ // ACTION BAR (Bottom - Reddit style)
268
+ // ===========================================================
269
+ .topic-actions {
270
+ display: flex;
271
+ align-items: center;
272
+ gap: $jv-space-4;
273
+ padding-top: $jv-space-2;
274
+ margin-top: auto;
275
+ }
276
+
277
+ .action-btn {
278
+ display: inline-flex;
279
+ align-items: center;
280
+ gap: 6px;
281
+ padding: 6px 10px;
282
+ font-size: $jv-font-size-xs;
283
+ font-weight: 500;
284
+ color: $jv-text-muted;
285
+ background: transparent;
286
+ border: none;
287
+ border-radius: $jv-radius-xs;
288
+ cursor: pointer;
289
+ text-decoration: none;
290
+ transition: background-color 0.15s ease, color 0.15s ease;
291
+
292
+ &:hover {
293
+ background: rgba(0, 0, 0, 0.05);
294
+ color: $jv-text-main;
295
+ }
296
+
297
+ i {
298
+ font-size: 14px;
299
+ }
300
+ }
301
+
302
+ .action-stat {
303
+ display: inline-flex;
304
+ align-items: center;
305
+ gap: 4px;
306
+ font-size: $jv-font-size-xs;
307
+ color: $jv-text-soft;
308
+ margin-left: auto;
309
+
310
+ i {
311
+ font-size: 12px;
312
+ }
313
+ }
314
+
315
+ // ===========================================================
316
+ // RESPONSIVE ADJUSTMENTS
317
+ // ===========================================================
318
+ @media (max-width: 768px) {
319
+ .topic-card {
320
+ flex-direction: column;
321
+ }
322
+
323
+ .vote-column {
324
+ flex-direction: row;
325
+ justify-content: flex-start;
326
+ padding: $jv-space-4 $jv-space-6;
327
+ min-width: auto;
328
+ border-bottom: 1px solid $jv-border-subtle;
329
+ }
330
+
331
+ .topic-content {
332
+ padding: $jv-space-4 $jv-space-6 $jv-space-6;
333
+ }
334
+
335
+ .topic-actions {
336
+ flex-wrap: wrap;
337
+ gap: $jv-space-2;
338
+ }
339
+
340
+ .action-btn span {
341
+ display: none;
342
+ }
343
+
344
+ .action-btn i {
345
+ font-size: 16px;
346
+ }
347
+ }
348
+
349
+ // ===========================================================
350
+ // POSTS LIST ITEM (for posts_list_item.tpl)
351
+ // ===========================================================
352
+ li[component="post"].posts-list-item {
353
+ background: $jv-surface;
354
+ border-radius: $jv-radius-lg;
355
+ border: 1px solid $jv-border-subtle;
356
+ padding: $jv-space-8;
357
+ margin-bottom: $jv-space-4;
358
+ transition: border-color 0.15s ease, box-shadow 0.15s ease;
359
+
360
+ &:hover {
361
+ border-color: $jv-border-strong;
362
+ box-shadow: $jv-shadow-soft;
363
+ }
364
+ }
365
+
366
+ li[component="post"] {
367
+ .topic-title {
368
+ font-size: $jv-font-size-lg;
369
+ font-weight: 600;
370
+ margin-bottom: $jv-space-4;
371
+
372
+ a {
373
+ color: $jv-text-main;
374
+ text-decoration: none;
375
+
376
+ &:hover {
377
+ color: $jv-primary;
378
+ }
379
+ }
380
+ }
381
+
382
+ .post-body {
383
+ display: flex;
384
+ flex-direction: column;
385
+ gap: $jv-space-4;
386
+ }
387
+
388
+ .post-info {
389
+ font-size: $jv-font-size-xs;
390
+ color: $jv-text-muted;
391
+ }
392
+
393
+ .content {
394
+ font-size: $jv-font-size-sm;
395
+ line-height: $jv-line-height-base;
396
+ color: $jv-text-main;
397
+
398
+ p {
399
+ margin-bottom: $jv-space-4;
400
+ }
401
+ }
402
+
403
+ .timeago {
404
+ color: $jv-text-soft;
405
+ }
406
+ }
407
+
408
+ // ===========================================================
409
+ // TOPICS LIST WRAPPER
410
+ // ===========================================================
411
+ .topics-list {
412
+ padding: 0;
413
+ margin: 0;
414
+ }
415
+
416
+ // Category/Topic List Item (fallback for other templates)
417
+ .category-item {
418
+ background: $jv-surface;
419
+ border-radius: $jv-radius-lg;
420
+ border: 1px solid $jv-border-subtle;
421
+ padding: $jv-space-6;
422
+ margin-bottom: $jv-space-4;
423
+ transition: border-color 0.15s ease, box-shadow 0.15s ease;
424
+
425
+ &:hover {
426
+ border-color: $jv-border-strong;
427
+ box-shadow: $jv-shadow-soft;
428
+ }
429
+
430
+ // Override default border-bottom
431
+ &.border-bottom {
432
+ border-bottom: 1px solid $jv-border-subtle !important;
433
+ }
434
+ }
@@ -6,9 +6,9 @@
6
6
  .feed h2 {
7
7
  font-size: 16px;
8
8
  font-weight: 600;
9
- margin: 0 0 @jv-space-6 0;
9
+ margin: 0 0 $jv-space-6 0;
10
10
  padding: 0;
11
- color: @jv-text-main;
11
+ color: $jv-text-main;
12
12
  letter-spacing: -0.2px;
13
13
  }
14
14
 
@@ -40,9 +40,9 @@ li[component="categories/category"] {
40
40
 
41
41
  // Parent title
42
42
  .title {
43
- font-size: @jv-font-size-base;
43
+ font-size: $jv-font-size-base;
44
44
  font-weight: 600;
45
- color: @jv-text-main;
45
+ color: $jv-text-main;
46
46
  margin-bottom: 4px;
47
47
  display: flex;
48
48
  align-items: center;
@@ -53,20 +53,20 @@ li[component="categories/category"] {
53
53
  color: inherit;
54
54
 
55
55
  &:hover {
56
- color: @jv-primary;
56
+ color: $jv-primary;
57
57
  }
58
58
  }
59
59
 
60
60
  i {
61
- font-size: @jv-font-size-base;
61
+ font-size: $jv-font-size-base;
62
62
  opacity: 0.95;
63
63
  }
64
64
  }
65
65
 
66
66
  // Category description
67
67
  .description {
68
- font-size: @jv-font-size-sm;
69
- color: @jv-text-muted;
68
+ font-size: $jv-font-size-sm;
69
+ color: $jv-text-muted;
70
70
  line-height: 1.45;
71
71
  margin-bottom: 10px;
72
72
  max-width: 92%;
@@ -111,11 +111,11 @@ li[component="categories/category"] .category-children {
111
111
  // Hover state: blue dot + blue text
112
112
  &:hover {
113
113
  i {
114
- color: @jv-primary;
114
+ color: $jv-primary;
115
115
  }
116
116
 
117
117
  a {
118
- color: @jv-primary;
118
+ color: $jv-primary;
119
119
  }
120
120
  }
121
121
  }