nodebb-theme-flawless-rp 1.0.3 → 1.0.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.
package/theme.less CHANGED
@@ -1,3 +1,1029 @@
1
- @import "less/flawless-nodebb119-compat.less";
2
- /* Flawless Roleplay theme entrypoint for NodeBB 1.x/2.x LESS builds. */
3
- @import (inline) "static/styles/flawless.css";
1
+ <<<<<<< Updated upstream
2
+ /* ============================================
3
+ FLAWLESS ROLEPLAY — Underground Criminal Empire
4
+ NodeBB Theme Override
5
+ ============================================ */
6
+
7
+ /* Google Fonts Import */
8
+ @import url('https://fonts.googleapis.com/css2?family=Barlow+Condensed:wght@400;600;700&family=Barlow:wght@400;500;600&family=JetBrains+Mono:wght@400;500&display=swap');
9
+
10
+ :root {
11
+ /* ---- Backgrounds ---- */
12
+ --bs-body-bg: #0a0a0b;
13
+ --bs-body-color: #e5e7eb;
14
+ --bs-secondary-bg: #111114;
15
+ --bs-tertiary-bg: #18181c;
16
+
17
+ /* ---- Surfaces ---- */
18
+ --frp-surface: #111114;
19
+ --frp-surface-hover: #18181c;
20
+ --frp-surface-active: #1e1e24;
21
+ --frp-surface-elevated: #1a1a1f;
22
+
23
+ /* ---- Borders ---- */
24
+ --frp-border: #1e1e24;
25
+ --frp-border-subtle: #161619;
26
+ --frp-border-strong: #2a2a32;
27
+
28
+ /* ---- Primary — Gold/Amber (power, money, authority) ---- */
29
+ --frp-primary: #F59E0B;
30
+ --frp-primary-hover: #D97706;
31
+ --frp-primary-light: rgba(245, 158, 11, 0.15);
32
+ --frp-primary-glow: 0 0 20px rgba(245, 158, 11, 0.3);
33
+ --bs-primary: #F59E0B;
34
+ --bs-primary-rgb: 245, 158, 11;
35
+ --bs-link-color: #F59E0B;
36
+ --bs-link-hover-color: #D97706;
37
+
38
+ /* ---- Danger — Red ---- */
39
+ --frp-danger: #EF4444;
40
+ --frp-danger-light: rgba(239, 68, 68, 0.15);
41
+
42
+ /* ---- Success — Green ---- */
43
+ --frp-success: #22C55E;
44
+ --frp-success-light: rgba(34, 197, 94, 0.15);
45
+
46
+ /* ---- Info — Blue (law enforcement) ---- */
47
+ --frp-info: #3B82F6;
48
+ --frp-info-light: rgba(59, 130, 246, 0.15);
49
+
50
+ /* ---- Warning ---- */
51
+ --frp-warning: #F59E0B;
52
+ --frp-warning-light: rgba(245, 158, 11, 0.15);
53
+
54
+ /* ---- Muted ---- */
55
+ --frp-muted: #6B7280;
56
+ --frp-muted-light: #9CA3AF;
57
+
58
+ /* ---- Faction Colors ---- */
59
+ --frp-faction-lspd: #3B82F6;
60
+ --frp-faction-fbi: #1D4ED8;
61
+ --frp-faction-sasd: #92400E;
62
+ --frp-faction-ares: #7C3AED;
63
+ --frp-faction-sanews: #06B6D4;
64
+ --frp-faction-gov: #059669;
65
+ --frp-faction-hitman: #DC2626;
66
+ --frp-faction-medic: #F43F5E;
67
+ --frp-faction-ng: #4B5563;
68
+
69
+ /* ---- Gang Colors (from bandana hex) ---- */
70
+ --frp-gang-ghouls: #F58216;
71
+ --frp-gang-velvet: #636363;
72
+ --frp-gang-baba: #22C55E;
73
+ --frp-gang-rifa: #3B82F6;
74
+ --frp-gang-grove: #16A34A;
75
+ --frp-gang-lcn: #1F2937;
76
+
77
+ /* ---- Typography ---- */
78
+ --frp-font-display: 'Barlow Condensed', sans-serif;
79
+ --frp-font-body: 'Barlow', sans-serif;
80
+ --frp-font-mono: 'JetBrains Mono', monospace;
81
+ --bs-body-font-family: 'Barlow', sans-serif;
82
+ }
83
+
84
+ /* ============================================
85
+ GLOBAL OVERRIDES
86
+ ============================================ */
87
+
88
+ body {
89
+ background-color: #0a0a0b !important;
90
+ color: #e5e7eb;
91
+ font-family: var(--frp-font-body);
92
+ -webkit-font-smoothing: antialiased;
93
+ -moz-osx-font-smoothing: grayscale;
94
+ }
95
+
96
+ a {
97
+ color: var(--frp-primary);
98
+ text-decoration: none;
99
+ transition: color 0.15s ease;
100
+ }
101
+
102
+ a:hover {
103
+ color: var(--frp-primary-hover);
104
+ }
105
+
106
+ h1, h2, h3, h4, h5, h6 {
107
+ font-family: var(--frp-font-display);
108
+ font-weight: 700;
109
+ text-transform: uppercase;
110
+ letter-spacing: 0.5px;
111
+ color: #f3f4f6;
112
+ }
113
+
114
+ code, pre, .monospace {
115
+ font-family: var(--frp-font-mono);
116
+ }
117
+
118
+ ::selection {
119
+ background: rgba(245, 158, 11, 0.3);
120
+ color: #fff;
121
+ }
122
+
123
+ /* Scrollbar */
124
+ ::-webkit-scrollbar {
125
+ width: 8px;
126
+ height: 8px;
127
+ }
128
+
129
+ ::-webkit-scrollbar-track {
130
+ background: #0a0a0b;
131
+ }
132
+
133
+ ::-webkit-scrollbar-thumb {
134
+ background: #2a2a32;
135
+ border-radius: 4px;
136
+ }
137
+
138
+ ::-webkit-scrollbar-thumb:hover {
139
+ background: #3a3a44;
140
+ }
141
+
142
+ /* ============================================
143
+ HEADER / NAVBAR
144
+ ============================================ */
145
+
146
+ .navbar,
147
+ [component="navbar"],
148
+ header .navbar {
149
+ background: #111114 !important;
150
+ border-bottom: 1px solid var(--frp-border) !important;
151
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5);
152
+ backdrop-filter: blur(12px);
153
+ }
154
+
155
+ .navbar .navbar-brand,
156
+ [component="navbar"] .navbar-brand {
157
+ font-family: var(--frp-font-display) !important;
158
+ font-weight: 700 !important;
159
+ color: var(--frp-primary) !important;
160
+ text-transform: uppercase;
161
+ letter-spacing: 2px;
162
+ font-size: 1.3rem;
163
+ }
164
+
165
+ .navbar .nav-link,
166
+ [component="navbar"] .nav-link {
167
+ color: #9CA3AF !important;
168
+ font-family: var(--frp-font-body);
169
+ font-weight: 500;
170
+ transition: color 0.15s ease;
171
+ }
172
+
173
+ .navbar .nav-link:hover,
174
+ .navbar .nav-link.active,
175
+ [component="navbar"] .nav-link:hover,
176
+ [component="navbar"] .nav-link.active {
177
+ color: var(--frp-primary) !important;
178
+ }
179
+
180
+ .navbar .dropdown-menu,
181
+ [component="navbar"] .dropdown-menu {
182
+ background: var(--frp-surface) !important;
183
+ border: 1px solid var(--frp-border) !important;
184
+ box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
185
+ }
186
+
187
+ .navbar .dropdown-item,
188
+ [component="navbar"] .dropdown-item {
189
+ color: #e5e7eb !important;
190
+ }
191
+
192
+ .navbar .dropdown-item:hover,
193
+ [component="navbar"] .dropdown-item:hover {
194
+ background: var(--frp-surface-hover) !important;
195
+ color: var(--frp-primary) !important;
196
+ }
197
+
198
+ /* ============================================
199
+ CATEGORY LIST
200
+ ============================================ */
201
+
202
+ [component="categories/category"] {
203
+ background: var(--frp-surface) !important;
204
+ border: 1px solid var(--frp-border) !important;
205
+ border-left: 3px solid var(--frp-primary) !important;
206
+ border-radius: 4px !important;
207
+ margin-bottom: 8px !important;
208
+ transition: all 0.2s ease;
209
+ }
210
+
211
+ [component="categories/category"]:hover {
212
+ border-left-color: var(--frp-primary-hover) !important;
213
+ background: var(--frp-surface-hover) !important;
214
+ box-shadow: var(--frp-primary-glow);
215
+ }
216
+
217
+ /* Category Headers / Section Headers */
218
+ .category-header,
219
+ .section-header {
220
+ font-family: var(--frp-font-display);
221
+ font-weight: 700;
222
+ text-transform: uppercase;
223
+ letter-spacing: 2px;
224
+ color: var(--frp-primary);
225
+ border-bottom: 2px solid var(--frp-primary);
226
+ padding-bottom: 8px;
227
+ margin-bottom: 16px;
228
+ font-size: 1.1rem;
229
+ }
230
+
231
+ /* Category icons */
232
+ [component="categories/category"] .category-icon {
233
+ color: var(--frp-primary);
234
+ }
235
+
236
+ /* Category stats */
237
+ [component="categories/category"] .category-stat {
238
+ color: var(--frp-muted);
239
+ font-family: var(--frp-font-mono);
240
+ font-size: 0.8rem;
241
+ }
242
+
243
+ /* Category description */
244
+ [component="categories/category"] .category-description {
245
+ color: var(--frp-muted-light);
246
+ font-size: 0.85rem;
247
+ }
248
+
249
+ /* ============================================
250
+ TOPIC LIST
251
+ ============================================ */
252
+
253
+ component="category/topic",
254
+ [component="category"] .topic-row,
255
+ .topics-list .topic-row {
256
+ background: var(--frp-surface) !important;
257
+ border: 1px solid var(--frp-border) !important;
258
+ border-radius: 4px !important;
259
+ margin-bottom: 4px !important;
260
+ transition: all 0.15s ease;
261
+ }
262
+
263
+ .topics-list .topic-row:hover {
264
+ background: var(--frp-surface-hover) !important;
265
+ border-color: var(--frp-border-strong) !important;
266
+ }
267
+
268
+ component="category/topic" .title,
269
+ .topics-list .topic-title a {
270
+ color: #e5e7eb !important;
271
+ font-weight: 500;
272
+ }
273
+
274
+ component="category/topic" .title:hover,
275
+ .topics-list .topic-title a:hover {
276
+ color: var(--frp-primary) !important;
277
+ }
278
+
279
+ /* Pinned topics */
280
+ component="category/topic".pinned {
281
+ border-left: 3px solid var(--frp-primary) !important;
282
+ }
283
+
284
+ /* Locked topics */
285
+ component="category/topic".locked {
286
+ opacity: 0.7;
287
+ }
288
+
289
+ /* ============================================
290
+ TOPIC VIEW / POST CONTENT
291
+ ============================================ */
292
+
293
+ [component="post"],
294
+ .post-container {
295
+ background: var(--frp-surface) !important;
296
+ border: 1px solid var(--frp-border) !important;
297
+ border-radius: 4px !important;
298
+ margin-bottom: 12px !important;
299
+ }
300
+
301
+ [component="post"] .post-header {
302
+ border-bottom: 1px solid var(--frp-border);
303
+ padding-bottom: 8px;
304
+ }
305
+
306
+ [component="post"] .content,
307
+ .post-content {
308
+ color: #d1d5db;
309
+ line-height: 1.7;
310
+ }
311
+
312
+ [component="post"] .content blockquote {
313
+ border-left: 3px solid var(--frp-primary);
314
+ background: var(--frp-primary-light);
315
+ padding: 12px 16px;
316
+ border-radius: 0 4px 4px 0;
317
+ color: #e5e7eb;
318
+ }
319
+
320
+ [component="post"] .content code {
321
+ background: rgba(245, 158, 11, 0.1);
322
+ color: var(--frp-primary);
323
+ padding: 2px 6px;
324
+ border-radius: 3px;
325
+ font-family: var(--frp-font-mono);
326
+ }
327
+
328
+ [component="post"] .content pre {
329
+ background: #0d0d0f !important;
330
+ border: 1px solid var(--frp-border);
331
+ border-radius: 4px;
332
+ padding: 16px;
333
+ }
334
+
335
+ /* Post actions */
336
+ [component="post"] .post-footer .btn,
337
+ [component="post"] .actions .btn {
338
+ color: var(--frp-muted) !important;
339
+ transition: color 0.15s ease;
340
+ }
341
+
342
+ [component="post"] .post-footer .btn:hover,
343
+ [component="post"] .actions .btn:hover {
344
+ color: var(--frp-primary) !important;
345
+ }
346
+
347
+ /* ============================================
348
+ USER PROFILE / AVATAR
349
+ ============================================ */
350
+
351
+ .avatar {
352
+ border: 2px solid var(--frp-border);
353
+ border-radius: 50%;
354
+ }
355
+
356
+ /* Donator glow effects */
357
+ .avatar.donator-daisy {
358
+ border-color: #A3E635;
359
+ box-shadow: 0 0 8px rgba(163, 230, 53, 0.3);
360
+ }
361
+
362
+ .avatar.donator-rose {
363
+ border-color: #F59E0B;
364
+ box-shadow: 0 0 8px rgba(245, 158, 11, 0.3);
365
+ }
366
+
367
+ .avatar.donator-ivy {
368
+ border-color: #EF4444;
369
+ box-shadow: 0 0 12px rgba(239, 68, 68, 0.4);
370
+ animation: ivyGlow 2s ease-in-out infinite alternate;
371
+ }
372
+
373
+ @keyframes ivyGlow {
374
+ from { box-shadow: 0 0 8px rgba(239, 68, 68, 0.3); }
375
+ to { box-shadow: 0 0 16px rgba(245, 158, 11, 0.5); }
376
+ }
377
+
378
+ /* User profile page */
379
+ [component="account/profile"] {
380
+ background: var(--frp-surface) !important;
381
+ }
382
+
383
+ .profile-header {
384
+ background: linear-gradient(135deg, #111114 0%, #1a1a1f 100%);
385
+ border-bottom: 2px solid var(--frp-primary);
386
+ }
387
+
388
+ /* ============================================
389
+ SIDEBAR & WIDGETS
390
+ ============================================ */
391
+
392
+ .sidebar .widget,
393
+ [widget-area] .widget {
394
+ background: var(--frp-surface) !important;
395
+ border: 1px solid var(--frp-border) !important;
396
+ border-radius: 4px !important;
397
+ margin-bottom: 12px !important;
398
+ }
399
+
400
+ .sidebar .widget .widget-header,
401
+ [widget-area] .widget .widget-header {
402
+ font-family: var(--frp-font-display);
403
+ font-weight: 700;
404
+ text-transform: uppercase;
405
+ letter-spacing: 1px;
406
+ color: var(--frp-primary);
407
+ border-bottom: 2px solid var(--frp-primary);
408
+ padding-bottom: 8px;
409
+ margin-bottom: 12px;
410
+ font-size: 0.95rem;
411
+ }
412
+
413
+ /* ============================================
414
+ BUTTONS
415
+ ============================================ */
416
+
417
+ .btn-primary,
418
+ .btn-primary:focus {
419
+ background-color: var(--frp-primary) !important;
420
+ border-color: var(--frp-primary) !important;
421
+ color: #000 !important;
422
+ font-family: var(--frp-font-display);
423
+ font-weight: 600;
424
+ text-transform: uppercase;
425
+ letter-spacing: 1px;
426
+ transition: all 0.2s ease;
427
+ }
428
+
429
+ .btn-primary:hover {
430
+ background-color: var(--frp-primary-hover) !important;
431
+ border-color: var(--frp-primary-hover) !important;
432
+ box-shadow: var(--frp-primary-glow);
433
+ }
434
+
435
+ .btn-outline-primary {
436
+ border-color: var(--frp-primary) !important;
437
+ color: var(--frp-primary) !important;
438
+ }
439
+
440
+ .btn-outline-primary:hover {
441
+ background-color: var(--frp-primary) !important;
442
+ color: #000 !important;
443
+ }
444
+
445
+ .btn-secondary {
446
+ background-color: var(--frp-surface-active) !important;
447
+ border-color: var(--frp-border) !important;
448
+ color: #e5e7eb !important;
449
+ }
450
+
451
+ .btn-secondary:hover {
452
+ background-color: var(--frp-surface-hover) !important;
453
+ border-color: var(--frp-border-strong) !important;
454
+ }
455
+
456
+ .btn-danger {
457
+ background-color: var(--frp-danger) !important;
458
+ border-color: var(--frp-danger) !important;
459
+ }
460
+
461
+ .btn-success {
462
+ background-color: var(--frp-success) !important;
463
+ border-color: var(--frp-success) !important;
464
+ }
465
+
466
+ /* ============================================
467
+ FORMS & INPUTS
468
+ ============================================ */
469
+
470
+ .form-control,
471
+ .form-select,
472
+ input[type="text"],
473
+ input[type="email"],
474
+ input[type="password"],
475
+ textarea,
476
+ select {
477
+ background-color: #0d0d0f !important;
478
+ border: 1px solid var(--frp-border) !important;
479
+ color: #e5e7eb !important;
480
+ font-family: var(--frp-font-body);
481
+ border-radius: 4px;
482
+ transition: border-color 0.15s ease;
483
+ }
484
+
485
+ .form-control:focus,
486
+ .form-select:focus,
487
+ input:focus,
488
+ textarea:focus,
489
+ select:focus {
490
+ border-color: var(--frp-primary) !important;
491
+ box-shadow: 0 0 0 3px var(--frp-primary-light) !important;
492
+ outline: none;
493
+ }
494
+
495
+ .form-control::placeholder {
496
+ color: var(--frp-muted) !important;
497
+ }
498
+
499
+ /* ============================================
500
+ CARDS & PANELS
501
+ ============================================ */
502
+
503
+ .card {
504
+ background: var(--frp-surface) !important;
505
+ border: 1px solid var(--frp-border) !important;
506
+ border-radius: 4px !important;
507
+ }
508
+
509
+ .card-header {
510
+ background: var(--frp-surface-hover) !important;
511
+ border-bottom: 1px solid var(--frp-border) !important;
512
+ font-family: var(--frp-font-display);
513
+ font-weight: 600;
514
+ text-transform: uppercase;
515
+ letter-spacing: 1px;
516
+ }
517
+
518
+ .card-footer {
519
+ background: var(--frp-surface-hover) !important;
520
+ border-top: 1px solid var(--frp-border) !important;
521
+ }
522
+
523
+ /* ============================================
524
+ MODALS
525
+ ============================================ */
526
+
527
+ .modal-content {
528
+ background: var(--frp-surface) !important;
529
+ border: 1px solid var(--frp-border) !important;
530
+ }
531
+
532
+ .modal-header {
533
+ border-bottom: 1px solid var(--frp-border) !important;
534
+ }
535
+
536
+ .modal-footer {
537
+ border-top: 1px solid var(--frp-border) !important;
538
+ }
539
+
540
+ /* ============================================
541
+ PAGINATION
542
+ ============================================ */
543
+
544
+ .pagination .page-link {
545
+ background: var(--frp-surface) !important;
546
+ border-color: var(--frp-border) !important;
547
+ color: #e5e7eb !important;
548
+ }
549
+
550
+ .pagination .page-link:hover {
551
+ background: var(--frp-surface-hover) !important;
552
+ color: var(--frp-primary) !important;
553
+ }
554
+
555
+ .pagination .page-item.active .page-link {
556
+ background: var(--frp-primary) !important;
557
+ border-color: var(--frp-primary) !important;
558
+ color: #000 !important;
559
+ }
560
+
561
+ /* ============================================
562
+ BREADCRUMBS
563
+ ============================================ */
564
+
565
+ .breadcrumb {
566
+ background: transparent !important;
567
+ padding: 8px 0;
568
+ }
569
+
570
+ .breadcrumb-item a {
571
+ color: var(--frp-muted-light) !important;
572
+ }
573
+
574
+ .breadcrumb-item a:hover {
575
+ color: var(--frp-primary) !important;
576
+ }
577
+
578
+ .breadcrumb-item.active {
579
+ color: var(--frp-primary) !important;
580
+ }
581
+
582
+ .breadcrumb-item + .breadcrumb-item::before {
583
+ color: var(--frp-muted) !important;
584
+ }
585
+
586
+ /* ============================================
587
+ ALERTS & NOTIFICATIONS
588
+ ============================================ */
589
+
590
+ .alert-success {
591
+ background: var(--frp-success-light) !important;
592
+ border-color: var(--frp-success) !important;
593
+ color: var(--frp-success) !important;
594
+ }
595
+
596
+ .alert-danger {
597
+ background: var(--frp-danger-light) !important;
598
+ border-color: var(--frp-danger) !important;
599
+ color: var(--frp-danger) !important;
600
+ }
601
+
602
+ .alert-warning {
603
+ background: var(--frp-warning-light) !important;
604
+ border-color: var(--frp-warning) !important;
605
+ color: var(--frp-warning) !important;
606
+ }
607
+
608
+ .alert-info {
609
+ background: var(--frp-info-light) !important;
610
+ border-color: var(--frp-info) !important;
611
+ color: var(--frp-info) !important;
612
+ }
613
+
614
+ /* ============================================
615
+ BADGES & LABELS
616
+ ============================================ */
617
+
618
+ .badge {
619
+ font-family: var(--frp-font-display);
620
+ font-weight: 600;
621
+ text-transform: uppercase;
622
+ letter-spacing: 0.5px;
623
+ }
624
+
625
+ .badge.badge-primary,
626
+ .badge.bg-primary {
627
+ background: var(--frp-primary) !important;
628
+ color: #000 !important;
629
+ }
630
+
631
+ /* Faction badges */
632
+ .badge-faction-lspd { background: var(--frp-faction-lspd) !important; }
633
+ .badge-faction-fbi { background: var(--frp-faction-fbi) !important; }
634
+ .badge-faction-sasd { background: var(--frp-faction-sasd) !important; }
635
+ .badge-faction-ares { background: var(--frp-faction-ares) !important; }
636
+ .badge-faction-sanews { background: var(--frp-faction-sanews) !important; }
637
+ .badge-faction-gov { background: var(--frp-faction-gov) !important; }
638
+ .badge-faction-hitman { background: var(--frp-faction-hitman) !important; }
639
+ .badge-faction-medic { background: var(--frp-faction-medic) !important; }
640
+ .badge-faction-ng { background: var(--frp-faction-ng) !important; }
641
+
642
+ /* Gang badges */
643
+ .badge-gang-ghouls { background: var(--frp-gang-ghouls) !important; }
644
+ .badge-gang-velvet { background: var(--frp-gang-velvet) !important; }
645
+ .badge-gang-baba { background: var(--frp-gang-baba) !important; }
646
+ .badge-gang-rifa { background: var(--frp-gang-rifa) !important; }
647
+ .badge-gang-grove { background: var(--frp-gang-grove) !important; }
648
+ .badge-gang-lcn { background: var(--frp-gang-lcn) !important; }
649
+
650
+ /* VIP badges */
651
+ .badge-vip-daisy {
652
+ background: linear-gradient(135deg, #A3E635, #65A30D) !important;
653
+ color: #000 !important;
654
+ }
655
+
656
+ .badge-vip-rose {
657
+ background: linear-gradient(135deg, #F59E0B, #D97706) !important;
658
+ color: #000 !important;
659
+ }
660
+
661
+ .badge-vip-ivy {
662
+ background: linear-gradient(135deg, #EF4444, #DC2626) !important;
663
+ color: #fff !important;
664
+ animation: ivyBadgeGlow 2s ease-in-out infinite alternate;
665
+ }
666
+
667
+ @keyframes ivyBadgeGlow {
668
+ from { box-shadow: 0 0 4px rgba(239, 68, 68, 0.3); }
669
+ to { box-shadow: 0 0 12px rgba(245, 158, 11, 0.5); }
670
+ }
671
+
672
+ /* ============================================
673
+ TABLES
674
+ ============================================ */
675
+
676
+ .table,
677
+ table {
678
+ --bs-table-bg: var(--frp-surface);
679
+ --bs-table-border-color: var(--frp-border);
680
+ color: #e5e7eb;
681
+ }
682
+
683
+ .table thead th {
684
+ background: var(--frp-surface-hover) !important;
685
+ border-bottom: 2px solid var(--frp-primary) !important;
686
+ font-family: var(--frp-font-display);
687
+ font-weight: 600;
688
+ text-transform: uppercase;
689
+ letter-spacing: 0.5px;
690
+ color: var(--frp-primary);
691
+ font-size: 0.85rem;
692
+ }
693
+
694
+ .table tbody tr {
695
+ border-bottom: 1px solid var(--frp-border);
696
+ }
697
+
698
+ .table tbody tr:hover {
699
+ background: var(--frp-surface-hover) !important;
700
+ }
701
+
702
+ .table-striped tbody tr:nth-of-type(odd) {
703
+ background: rgba(17, 17, 20, 0.5) !important;
704
+ }
705
+
706
+ /* ============================================
707
+ FOOTER
708
+ ============================================ */
709
+
710
+ footer,
711
+ [component="footer"] {
712
+ background: #0a0a0b !important;
713
+ border-top: 1px solid var(--frp-border) !important;
714
+ color: var(--frp-muted);
715
+ }
716
+
717
+ footer a {
718
+ color: var(--frp-muted-light) !important;
719
+ }
720
+
721
+ footer a:hover {
722
+ color: var(--frp-primary) !important;
723
+ }
724
+
725
+ /* ============================================
726
+ COMPOSER (Post Editor)
727
+ ============================================ */
728
+
729
+ .composer {
730
+ background: var(--frp-surface) !important;
731
+ border: 1px solid var(--frp-border) !important;
732
+ }
733
+
734
+ .composer .title-container input {
735
+ background: #0d0d0f !important;
736
+ border: 1px solid var(--frp-border) !important;
737
+ color: #e5e7eb !important;
738
+ }
739
+
740
+ .composer .write-container textarea,
741
+ .composer .preview-container {
742
+ background: #0d0d0f !important;
743
+ color: #e5e7eb !important;
744
+ }
745
+
746
+ .composer .formatting-bar {
747
+ background: var(--frp-surface-hover) !important;
748
+ border-bottom: 1px solid var(--frp-border) !important;
749
+ }
750
+
751
+ .composer .formatting-bar .btn {
752
+ color: var(--frp-muted-light) !important;
753
+ }
754
+
755
+ .composer .formatting-bar .btn:hover {
756
+ color: var(--frp-primary) !important;
757
+ }
758
+
759
+ /* ============================================
760
+ CHAT
761
+ ============================================ */
762
+
763
+ [component="chat"] {
764
+ background: var(--frp-surface) !important;
765
+ }
766
+
767
+ [component="chat/message"] {
768
+ border-bottom: 1px solid var(--frp-border);
769
+ }
770
+
771
+ /* ============================================
772
+ SEARCH
773
+ ============================================ */
774
+
775
+ .search-results .search-result {
776
+ background: var(--frp-surface) !important;
777
+ border: 1px solid var(--frp-border) !important;
778
+ border-radius: 4px;
779
+ margin-bottom: 8px;
780
+ }
781
+
782
+ .search-results .search-result:hover {
783
+ border-color: var(--frp-primary) !important;
784
+ }
785
+
786
+ /* ============================================
787
+ ADMIN CONTROL PANEL (ACP) — Minimal overrides
788
+ ============================================ */
789
+
790
+ .acp-page {
791
+ background: #0a0a0b;
792
+ }
793
+
794
+ /* ============================================
795
+ LOADING / SPINNER
796
+ ============================================ */
797
+
798
+ .loading-indicator {
799
+ border-color: var(--frp-primary) transparent transparent transparent !important;
800
+ }
801
+
802
+ /* ============================================
803
+ TOOLTIPS & POPOVERS
804
+ ============================================ */
805
+
806
+ .tooltip-inner {
807
+ background: var(--frp-surface-elevated) !important;
808
+ border: 1px solid var(--frp-border);
809
+ color: #e5e7eb;
810
+ }
811
+
812
+ .popover {
813
+ background: var(--frp-surface) !important;
814
+ border: 1px solid var(--frp-border) !important;
815
+ }
816
+
817
+ /* ============================================
818
+ CUSTOM: SERVER STATUS WIDGET
819
+ ============================================ */
820
+
821
+ .frp-server-status {
822
+ background: var(--frp-surface) !important;
823
+ border: 1px solid var(--frp-border) !important;
824
+ border-radius: 4px;
825
+ }
826
+
827
+ .frp-server-status .status-online {
828
+ color: var(--frp-success);
829
+ }
830
+
831
+ .frp-server-status .status-offline {
832
+ color: var(--frp-danger);
833
+ }
834
+
835
+ @keyframes pulse {
836
+ 0%, 100% { opacity: 1; }
837
+ 50% { opacity: 0.5; }
838
+ }
839
+
840
+ /* ============================================
841
+ CUSTOM: GAME STATS PROFILE CARD
842
+ ============================================ */
843
+
844
+ .frp-game-stats {
845
+ background: var(--frp-surface) !important;
846
+ border: 1px solid var(--frp-border) !important;
847
+ border-radius: 4px;
848
+ }
849
+
850
+ .frp-game-stats .card-header {
851
+ font-family: var(--frp-font-display);
852
+ color: var(--frp-primary);
853
+ text-transform: uppercase;
854
+ letter-spacing: 1px;
855
+ }
856
+
857
+ .frp-game-stats .stat-item {
858
+ padding: 8px 0;
859
+ border-bottom: 1px solid var(--frp-border);
860
+ }
861
+
862
+ .frp-game-stats .stat-item:last-child {
863
+ border-bottom: none;
864
+ }
865
+
866
+ .frp-game-stats .stat-label {
867
+ color: var(--frp-muted);
868
+ font-size: 0.8rem;
869
+ text-transform: uppercase;
870
+ letter-spacing: 0.5px;
871
+ display: block;
872
+ }
873
+
874
+ .frp-game-stats .stat-value {
875
+ color: #e5e7eb;
876
+ font-family: var(--frp-font-mono);
877
+ font-size: 1rem;
878
+ font-weight: 500;
879
+ }
880
+
881
+ /* ============================================
882
+ CUSTOM: DONATION STORE
883
+ ============================================ */
884
+
885
+ .frp-store-item {
886
+ background: var(--frp-surface);
887
+ border: 1px solid var(--frp-border);
888
+ border-radius: 4px;
889
+ padding: 20px;
890
+ transition: all 0.2s ease;
891
+ position: relative;
892
+ overflow: hidden;
893
+ }
894
+
895
+ .frp-store-item:hover {
896
+ border-color: var(--frp-primary);
897
+ box-shadow: var(--frp-primary-glow);
898
+ transform: translateY(-2px);
899
+ }
900
+
901
+ .frp-store-item.tier-daisy {
902
+ border-top: 3px solid #A3E635;
903
+ }
904
+
905
+ .frp-store-item.tier-rose {
906
+ border-top: 3px solid #F59E0B;
907
+ }
908
+
909
+ .frp-store-item.tier-ivy {
910
+ border-top: 3px solid #EF4444;
911
+ }
912
+
913
+ .frp-store-item .price {
914
+ font-family: var(--frp-font-display);
915
+ font-size: 1.5rem;
916
+ font-weight: 700;
917
+ color: var(--frp-primary);
918
+ }
919
+
920
+ .frp-store-item .price .currency {
921
+ font-size: 0.9rem;
922
+ color: var(--frp-muted);
923
+ }
924
+
925
+ /* ============================================
926
+ CUSTOM: RECENT THREADS WIDGET
927
+ ============================================ */
928
+
929
+ .frp-latest-widget {
930
+ background: var(--frp-surface);
931
+ border: 1px solid var(--frp-border);
932
+ border-radius: 4px;
933
+ padding: 16px;
934
+ }
935
+
936
+ .frp-latest-widget h4 {
937
+ font-family: var(--frp-font-display);
938
+ color: var(--frp-primary);
939
+ text-transform: uppercase;
940
+ letter-spacing: 1px;
941
+ border-bottom: 2px solid var(--frp-primary);
942
+ padding-bottom: 8px;
943
+ margin-bottom: 12px;
944
+ font-size: 0.95rem;
945
+ }
946
+
947
+ .frp-latest-widget .topic-item {
948
+ padding: 8px 0;
949
+ border-bottom: 1px solid var(--frp-border);
950
+ }
951
+
952
+ .frp-latest-widget .topic-item:last-child {
953
+ border-bottom: none;
954
+ }
955
+
956
+ .frp-latest-widget .topic-item a {
957
+ color: #e5e7eb;
958
+ font-size: 0.9rem;
959
+ }
960
+
961
+ .frp-latest-widget .topic-item a:hover {
962
+ color: var(--frp-primary);
963
+ }
964
+
965
+ .frp-latest-widget .topic-meta {
966
+ font-size: 0.75rem;
967
+ color: var(--frp-muted);
968
+ margin-top: 2px;
969
+ }
970
+
971
+ /* ============================================
972
+ RESPONSIVE ADJUSTMENTS
973
+ ============================================ */
974
+
975
+ @media (max-width: 768px) {
976
+ .navbar .navbar-brand {
977
+ font-size: 1rem;
978
+ letter-spacing: 1px;
979
+ }
980
+
981
+ [component="categories/category"] {
982
+ border-left-width: 2px !important;
983
+ }
984
+
985
+ .frp-store-item {
986
+ padding: 12px;
987
+ }
988
+
989
+ .frp-game-stats .row {
990
+ flex-direction: column;
991
+ }
992
+ }
993
+
994
+ @media (max-width: 480px) {
995
+ h1, h2 {
996
+ font-size: 1.2rem;
997
+ }
998
+
999
+ .frp-store-item .price {
1000
+ font-size: 1.2rem;
1001
+ }
1002
+ }
1003
+
1004
+ /* ============================================
1005
+ UTILITY CLASSES
1006
+ ============================================ */
1007
+
1008
+ .text-gold { color: var(--frp-primary) !important; }
1009
+ .text-danger-frp { color: var(--frp-danger) !important; }
1010
+ .text-success-frp { color: var(--frp-success) !important; }
1011
+ .text-info-frp { color: var(--frp-info) !important; }
1012
+ .text-muted-frp { color: var(--frp-muted) !important; }
1013
+
1014
+ .bg-surface { background: var(--frp-surface) !important; }
1015
+ .bg-surface-hover { background: var(--frp-surface-hover) !important; }
1016
+
1017
+ .border-gold { border-color: var(--frp-primary) !important; }
1018
+ .border-frp { border-color: var(--frp-border) !important; }
1019
+
1020
+ .glow-gold { box-shadow: var(--frp-primary-glow); }
1021
+
1022
+ .font-display { font-family: var(--frp-font-display) !important; }
1023
+ .font-body { font-family: var(--frp-font-body) !important; }
1024
+ .font-mono { font-family: var(--frp-font-mono) !important; }
1025
+ =======
1026
+ @import "less/flawless-nodebb119-compat.less";
1027
+ /* Flawless Roleplay theme entrypoint for NodeBB 1.x/2.x LESS builds. */
1028
+ @import (inline) "static/styles/flawless.css";
1029
+ >>>>>>> Stashed changes