nodebb-theme-flawless-rp 1.0.4 → 1.0.6

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 (3) hide show
  1. package/package.json +1 -1
  2. package/theme.json +1 -11
  3. package/theme.less +2 -1029
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "nodebb-theme-flawless-rp",
3
3
  "type": "theme",
4
- "version": "1.0.4",
4
+ "version": "1.0.6",
5
5
  "description": "Flawless Roleplay — Underground Criminal Empire theme for NodeBB. Dark obsidian backgrounds, gold/amber accents, Barlow Condensed typography.",
6
6
  "author": "Flawless Roleplay Team",
7
7
  "license": "MIT",
package/theme.json CHANGED
@@ -1,18 +1,8 @@
1
1
  {
2
2
  "id": "nodebb-theme-flawless-rp",
3
3
  "name": "Flawless Roleplay",
4
- <<<<<<< Updated upstream
5
4
  "description": "Flawless Roleplay — Underground Criminal Empire theme for NodeBB.",
6
5
  "url": "https://www.npmjs.com/package/nodebb-theme-flawless-rp",
7
6
  "baseTheme": "nodebb-theme-persona",
8
7
  "templates": "templates"
9
- }
10
- =======
11
- "description": "Dark SA-MP roleplay theme with obsidian surfaces and amber/gold accents.",
12
- "url": "https://github.com/tsarchghs/213112321",
13
- "screenshot": "screenshot.png",
14
- "templates": "templates",
15
- "staticDir": "static",
16
- "baseTheme": "nodebb-theme-persona"
17
- }
18
- >>>>>>> Stashed changes
8
+ }
package/theme.less CHANGED
@@ -1,1029 +1,2 @@
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
1
+ @import "../../nodebb-theme-persona/theme";
2
+ @import "less/flawless";