@howssatoshi/quantumcss 1.5.2 → 1.6.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.
@@ -819,4 +819,965 @@ body.light-mode .table tbody tr:hover {
819
819
 
820
820
  .overflow-y-auto {
821
821
  overflow-y: auto;
822
+ }
823
+
824
+ /* ============================================================================
825
+ APP LAYOUT PATTERNS
826
+ Standardized layout components for dashboard and admin applications
827
+ ============================================================================ */
828
+
829
+ /* Main app layout - sidebar + content grid */
830
+ .app-layout {
831
+ display: grid;
832
+ grid-template-columns: 260px minmax(0, 1fr);
833
+ height: 100vh;
834
+ background: var(--bg-primary, #08081a);
835
+ overflow: hidden;
836
+ max-width: 100vw;
837
+ }
838
+
839
+ .app-layout-narrow {
840
+ grid-template-columns: 80px minmax(0, 1fr);
841
+ }
842
+
843
+ .app-layout-wide {
844
+ grid-template-columns: 320px minmax(0, 1fr);
845
+ }
846
+
847
+ /* Sidebar navigation container */
848
+ .sidebar {
849
+ background: linear-gradient(180deg, rgba(15, 23, 42, 0.98) 0%, rgba(8, 8, 26, 0.98) 100%);
850
+ border-right: 1px solid rgba(255, 255, 255, 0.08);
851
+ padding: 1.5rem;
852
+ display: flex;
853
+ flex-direction: column;
854
+ overflow-y: auto;
855
+ overflow-x: hidden;
856
+ }
857
+
858
+ /* Main content area */
859
+ .main-content {
860
+ padding: 1.5rem 2rem;
861
+ overflow-y: auto;
862
+ overflow-x: hidden;
863
+ }
864
+
865
+ /* Top navigation bar */
866
+ .top-nav {
867
+ display: flex;
868
+ justify-content: space-between;
869
+ align-items: center;
870
+ margin-bottom: 2rem;
871
+ padding: 1rem 1.5rem;
872
+ background: rgba(255, 255, 255, 0.03);
873
+ border: 1px solid rgba(255, 255, 255, 0.08);
874
+ border-radius: 1rem;
875
+ }
876
+
877
+ /* Top navigation actions container */
878
+ .top-nav-actions {
879
+ display: flex;
880
+ align-items: center;
881
+ gap: 0.75rem;
882
+ }
883
+
884
+ /* Page header with actions */
885
+ .page-header {
886
+ display: flex;
887
+ justify-content: space-between;
888
+ align-items: center;
889
+ margin-bottom: 2rem;
890
+ }
891
+
892
+ /* Light mode overrides for layout */
893
+ body.light-mode .sidebar {
894
+ background: linear-gradient(180deg, #ffffff 0%, #f8fafc 100%);
895
+ border-right-color: #e2e8f0;
896
+ }
897
+
898
+ body.light-mode .top-nav {
899
+ background: #ffffff;
900
+ border-color: #e2e8f0;
901
+ }
902
+
903
+ /* Responsive layout adjustments */
904
+ @media (max-width: 1024px) {
905
+ .app-layout {
906
+ grid-template-columns: 80px 1fr;
907
+ }
908
+
909
+ .sidebar {
910
+ padding: 1rem;
911
+ }
912
+ }
913
+
914
+ @media (max-width: 768px) {
915
+ .app-layout {
916
+ grid-template-columns: 1fr;
917
+ }
918
+
919
+ .sidebar {
920
+ display: none;
921
+ }
922
+
923
+ .main-content {
924
+ padding: 1rem;
925
+ }
926
+
927
+ .page-header {
928
+ flex-direction: column;
929
+ align-items: flex-start;
930
+ gap: 1rem;
931
+ }
932
+ }
933
+
934
+ /* ============================================================================
935
+ NAVIGATION PATTERNS
936
+ Sidebar navigation items and sections
937
+ ============================================================================ */
938
+
939
+ /* Navigation section container */
940
+ .nav-section {
941
+ margin-bottom: 1.5rem;
942
+ }
943
+
944
+ /* Navigation section title */
945
+ .nav-section-title {
946
+ font-size: 0.7rem;
947
+ font-weight: 700;
948
+ text-transform: uppercase;
949
+ letter-spacing: 0.15em;
950
+ color: var(--text-muted, #64748b);
951
+ margin-bottom: 0.75rem;
952
+ padding-left: 0.75rem;
953
+ }
954
+
955
+ /* Navigation item */
956
+ .nav-item {
957
+ display: flex;
958
+ align-items: center;
959
+ gap: 0.875rem;
960
+ padding: 0.75rem;
961
+ border-radius: 0.625rem;
962
+ color: var(--text-secondary, #94a3b8);
963
+ font-size: 0.875rem;
964
+ cursor: pointer;
965
+ transition: all 0.2s ease;
966
+ margin-bottom: 0.25rem;
967
+ text-decoration: none;
968
+ border: none;
969
+ background: transparent;
970
+ width: 100%;
971
+ text-align: left;
972
+ }
973
+
974
+ .nav-item:hover {
975
+ background: rgba(255, 255, 255, 0.05);
976
+ color: var(--text-primary, #f1f5f9);
977
+ }
978
+
979
+ .nav-item.active {
980
+ background: rgba(0, 212, 255, 0.12);
981
+ color: var(--color-starlight, #00d4ff);
982
+ }
983
+
984
+ /* Constrain nav item icons - prevent oversized icons */
985
+ .nav-item svg {
986
+ width: 1.125rem;
987
+ height: 1.125rem;
988
+ max-width: 1.125rem;
989
+ max-height: 1.125rem;
990
+ flex-shrink: 0;
991
+ }
992
+
993
+ /* Sidebar scrollbar styling to prevent layout shift */
994
+ .sidebar::-webkit-scrollbar {
995
+ width: 4px;
996
+ }
997
+
998
+ .sidebar::-webkit-scrollbar-track {
999
+ background: transparent;
1000
+ }
1001
+
1002
+ .sidebar::-webkit-scrollbar-thumb {
1003
+ background: rgba(255, 255, 255, 0.1);
1004
+ border-radius: 2px;
1005
+ }
1006
+
1007
+ body.light-mode .sidebar::-webkit-scrollbar-thumb {
1008
+ background: #cbd5e1;
1009
+ }
1010
+
1011
+ /* Navigation badge (count) */
1012
+ .nav-badge {
1013
+ margin-left: auto;
1014
+ font-size: 0.7rem;
1015
+ font-weight: 600;
1016
+ padding: 0.125rem 0.5rem;
1017
+ border-radius: 9999px;
1018
+ background: rgba(239, 68, 68, 0.2);
1019
+ color: #f87171;
1020
+ }
1021
+
1022
+ /* Light mode overrides for navigation */
1023
+ body.light-mode .nav-item:hover {
1024
+ background: #f1f5f9;
1025
+ color: #0f172a;
1026
+ }
1027
+
1028
+ body.light-mode .nav-section-title {
1029
+ color: #64748b;
1030
+ }
1031
+
1032
+ /* ============================================================================
1033
+ STAT CARDS
1034
+ Dashboard metric cards with icons and values
1035
+ ============================================================================ */
1036
+
1037
+ /* Stats grid layout */
1038
+ .stats-grid {
1039
+ display: grid;
1040
+ grid-template-columns: repeat(4, 1fr);
1041
+ gap: 1.5rem;
1042
+ margin-bottom: 2rem;
1043
+ }
1044
+
1045
+ /* Individual stat card */
1046
+ .stat-card {
1047
+ background: rgba(255, 255, 255, 0.03);
1048
+ border: 1px solid rgba(255, 255, 255, 0.08);
1049
+ border-radius: 1rem;
1050
+ padding: 1.5rem;
1051
+ transition: all 0.3s ease;
1052
+ }
1053
+
1054
+ .stat-card:hover {
1055
+ background: rgba(255, 255, 255, 0.05);
1056
+ transform: translateY(-2px);
1057
+ }
1058
+
1059
+ /* Stat card header with icon and trend */
1060
+ .stat-header {
1061
+ display: flex;
1062
+ justify-content: space-between;
1063
+ align-items: flex-start;
1064
+ margin-bottom: 1rem;
1065
+ }
1066
+
1067
+ /* Icon wrapper for stat cards */
1068
+ .stat-icon {
1069
+ width: 48px;
1070
+ height: 48px;
1071
+ border-radius: 12px;
1072
+ display: flex;
1073
+ align-items: center;
1074
+ justify-content: center;
1075
+ }
1076
+
1077
+ /* Icon color variants */
1078
+ .stat-icon-blue {
1079
+ background: rgba(59, 130, 246, 0.15);
1080
+ color: #60a5fa;
1081
+ }
1082
+
1083
+ .stat-icon-green {
1084
+ background: rgba(16, 185, 129, 0.15);
1085
+ color: #34d399;
1086
+ }
1087
+
1088
+ .stat-icon-orange {
1089
+ background: rgba(249, 115, 22, 0.15);
1090
+ color: #fb923c;
1091
+ }
1092
+
1093
+ .stat-icon-purple {
1094
+ background: rgba(139, 92, 246, 0.15);
1095
+ color: #a78bfa;
1096
+ }
1097
+
1098
+ .stat-icon-red {
1099
+ background: rgba(239, 68, 68, 0.15);
1100
+ color: #f87171;
1101
+ }
1102
+
1103
+ /* Stat value display */
1104
+ .stat-value {
1105
+ font-size: 1.875rem;
1106
+ font-weight: 700;
1107
+ color: var(--text-primary, #f1f5f9);
1108
+ margin-bottom: 0.25rem;
1109
+ }
1110
+
1111
+ /* Stat label */
1112
+ .stat-label {
1113
+ font-size: 0.875rem;
1114
+ color: var(--text-muted, #64748b);
1115
+ }
1116
+
1117
+ /* Trend indicator */
1118
+ .stat-trend {
1119
+ display: flex;
1120
+ align-items: center;
1121
+ gap: 0.25rem;
1122
+ font-size: 0.75rem;
1123
+ font-weight: 600;
1124
+ padding: 0.25rem 0.5rem;
1125
+ border-radius: 0.375rem;
1126
+ }
1127
+
1128
+ .stat-trend-up {
1129
+ background: rgba(16, 185, 129, 0.15);
1130
+ color: #34d399;
1131
+ }
1132
+
1133
+ .stat-trend-down {
1134
+ background: rgba(239, 68, 68, 0.15);
1135
+ color: #f87171;
1136
+ }
1137
+
1138
+ /* Light mode overrides for stat cards */
1139
+ body.light-mode .stat-card {
1140
+ background: #ffffff;
1141
+ border-color: #e2e8f0;
1142
+ }
1143
+
1144
+ body.light-mode .stat-card:hover {
1145
+ background: #f8fafc;
1146
+ }
1147
+
1148
+ body.light-mode .stat-icon-blue {
1149
+ background: rgba(59, 130, 246, 0.1);
1150
+ }
1151
+
1152
+ body.light-mode .stat-icon-green {
1153
+ background: rgba(16, 185, 129, 0.1);
1154
+ }
1155
+
1156
+ body.light-mode .stat-icon-orange {
1157
+ background: rgba(249, 115, 22, 0.1);
1158
+ }
1159
+
1160
+ body.light-mode .stat-icon-purple {
1161
+ background: rgba(139, 92, 246, 0.1);
1162
+ }
1163
+
1164
+ body.light-mode .stat-icon-red {
1165
+ background: rgba(239, 68, 68, 0.1);
1166
+ }
1167
+
1168
+ /* Responsive stats grid */
1169
+ @media (max-width: 1280px) {
1170
+ .stats-grid {
1171
+ grid-template-columns: repeat(2, 1fr);
1172
+ }
1173
+ }
1174
+
1175
+ @media (max-width: 768px) {
1176
+ .stats-grid {
1177
+ grid-template-columns: 1fr;
1178
+ }
1179
+ }
1180
+
1181
+ /* ============================================================================
1182
+ ICON BUTTONS
1183
+ Square and circular icon buttons
1184
+ ============================================================================ */
1185
+
1186
+ /* Base icon button */
1187
+ .icon-btn {
1188
+ width: 40px;
1189
+ height: 40px;
1190
+ border-radius: 0.625rem;
1191
+ background: rgba(255, 255, 255, 0.05);
1192
+ border: 1px solid rgba(255, 255, 255, 0.1);
1193
+ color: var(--text-secondary, #94a3b8);
1194
+ display: flex;
1195
+ align-items: center;
1196
+ justify-content: center;
1197
+ cursor: pointer;
1198
+ transition: all 0.2s ease;
1199
+ position: relative;
1200
+ }
1201
+
1202
+ .icon-btn:hover {
1203
+ background: rgba(255, 255, 255, 0.08);
1204
+ color: var(--text-primary, #f1f5f9);
1205
+ }
1206
+
1207
+ /* Circular icon button */
1208
+ .icon-btn-circle {
1209
+ border-radius: 50%;
1210
+ }
1211
+
1212
+ /* Small icon button */
1213
+ .icon-btn-sm {
1214
+ width: 32px;
1215
+ height: 32px;
1216
+ border-radius: 0.5rem;
1217
+ }
1218
+
1219
+ /* Large icon button */
1220
+ .icon-btn-lg {
1221
+ width: 48px;
1222
+ height: 48px;
1223
+ border-radius: 0.75rem;
1224
+ }
1225
+
1226
+ /* Action buttons container */
1227
+ .action-buttons {
1228
+ display: flex;
1229
+ gap: 0.5rem;
1230
+ }
1231
+
1232
+ /* Action button for tables/lists */
1233
+ .action-btn {
1234
+ width: 32px;
1235
+ height: 32px;
1236
+ border-radius: 0.5rem;
1237
+ background: rgba(255, 255, 255, 0.05);
1238
+ border: 1px solid rgba(255, 255, 255, 0.1);
1239
+ color: var(--text-muted, #64748b);
1240
+ display: flex;
1241
+ align-items: center;
1242
+ justify-content: center;
1243
+ cursor: pointer;
1244
+ transition: all 0.2s ease;
1245
+ }
1246
+
1247
+ .action-btn:hover {
1248
+ background: rgba(255, 255, 255, 0.08);
1249
+ color: var(--text-primary, #f1f5f9);
1250
+ }
1251
+
1252
+ /* Delete action button */
1253
+ .action-btn-delete:hover {
1254
+ background: rgba(239, 68, 68, 0.15);
1255
+ color: #f87171;
1256
+ border-color: rgba(239, 68, 68, 0.3);
1257
+ }
1258
+
1259
+ /* Light mode overrides for icon buttons */
1260
+ body.light-mode .icon-btn,
1261
+ body.light-mode .action-btn {
1262
+ background: #f1f5f9;
1263
+ border-color: #e2e8f0;
1264
+ color: #64748b;
1265
+ }
1266
+
1267
+ body.light-mode .icon-btn:hover,
1268
+ body.light-mode .action-btn:hover {
1269
+ background: #e2e8f0;
1270
+ color: #0f172a;
1271
+ }
1272
+
1273
+ /* ============================================================================
1274
+ THEME TOGGLE
1275
+ Theme toggle button and wrapper for sidebars
1276
+ ============================================================================ */
1277
+
1278
+ /* Theme toggle wrapper */
1279
+ .theme-toggle-wrapper {
1280
+ margin-top: auto;
1281
+ padding-top: 1.5rem;
1282
+ border-top: 1px solid rgba(255, 255, 255, 0.08);
1283
+ }
1284
+
1285
+ /* Theme toggle button */
1286
+ .theme-btn {
1287
+ width: 100%;
1288
+ display: flex;
1289
+ align-items: center;
1290
+ justify-content: center;
1291
+ gap: 0.5rem;
1292
+ padding: 0.75rem;
1293
+ background: rgba(255, 255, 255, 0.05);
1294
+ border: 1px solid rgba(255, 255, 255, 0.1);
1295
+ border-radius: 0.625rem;
1296
+ color: var(--text-secondary, #94a3b8);
1297
+ font-size: 0.875rem;
1298
+ cursor: pointer;
1299
+ transition: all 0.2s ease;
1300
+ }
1301
+
1302
+ .theme-btn:hover {
1303
+ background: rgba(255, 255, 255, 0.08);
1304
+ color: var(--text-primary, #f1f5f9);
1305
+ }
1306
+
1307
+ /* Sun/moon icon visibility */
1308
+ .sun-icon {
1309
+ display: none;
1310
+ }
1311
+
1312
+ body.light-mode .sun-icon {
1313
+ display: inline;
1314
+ }
1315
+
1316
+ body.light-mode .moon-icon {
1317
+ display: none;
1318
+ }
1319
+
1320
+ /* Light mode overrides for theme toggle */
1321
+ body.light-mode .theme-btn {
1322
+ background: #f1f5f9;
1323
+ border-color: #e2e8f0;
1324
+ color: #475569;
1325
+ }
1326
+
1327
+ body.light-mode .theme-toggle-wrapper {
1328
+ border-top-color: #e2e8f0;
1329
+ }
1330
+
1331
+ /* ============================================================================
1332
+ AVATARS
1333
+ User avatars with initials and images
1334
+ ============================================================================ */
1335
+
1336
+ /* Base avatar */
1337
+ .avatar {
1338
+ width: 40px;
1339
+ height: 40px;
1340
+ border-radius: 50%;
1341
+ background: linear-gradient(135deg, #3b82f6, var(--color-starlight, #00d4ff));
1342
+ display: flex;
1343
+ align-items: center;
1344
+ justify-content: center;
1345
+ font-weight: 600;
1346
+ font-size: 0.875rem;
1347
+ color: white;
1348
+ position: relative;
1349
+ flex-shrink: 0;
1350
+ overflow: hidden;
1351
+ }
1352
+
1353
+ .avatar img {
1354
+ width: 100%;
1355
+ height: 100%;
1356
+ object-fit: cover;
1357
+ }
1358
+
1359
+ /* Avatar sizes */
1360
+ .avatar-sm {
1361
+ width: 32px;
1362
+ height: 32px;
1363
+ font-size: 0.75rem;
1364
+ }
1365
+
1366
+ .avatar-md {
1367
+ width: 36px;
1368
+ height: 36px;
1369
+ font-size: 0.8125rem;
1370
+ }
1371
+
1372
+ .avatar-lg {
1373
+ width: 48px;
1374
+ height: 48px;
1375
+ font-size: 1rem;
1376
+ }
1377
+
1378
+ .avatar-xl {
1379
+ width: 56px;
1380
+ height: 56px;
1381
+ font-size: 1.25rem;
1382
+ }
1383
+
1384
+ /* User cell (for tables/lists) */
1385
+ .user-cell {
1386
+ display: flex;
1387
+ align-items: center;
1388
+ gap: 0.875rem;
1389
+ }
1390
+
1391
+ .user-info {
1392
+ display: flex;
1393
+ flex-direction: column;
1394
+ }
1395
+
1396
+ .user-name {
1397
+ font-weight: 600;
1398
+ color: var(--text-primary, #f1f5f9);
1399
+ margin-bottom: 0.125rem;
1400
+ }
1401
+
1402
+ .user-email {
1403
+ font-size: 0.75rem;
1404
+ color: var(--text-muted, #64748b);
1405
+ }
1406
+
1407
+ /* Light mode overrides for user info */
1408
+ body.light-mode .user-name {
1409
+ color: #0f172a;
1410
+ }
1411
+
1412
+ body.light-mode .user-email {
1413
+ color: #64748b;
1414
+ }
1415
+
1416
+ /* ============================================================================
1417
+ STATUS BADGES
1418
+ Status indicators with dots and labels
1419
+ ============================================================================ */
1420
+
1421
+ /* Base status badge */
1422
+ .status-badge {
1423
+ display: inline-flex;
1424
+ align-items: center;
1425
+ gap: 0.375rem;
1426
+ padding: 0.375rem 0.875rem;
1427
+ border-radius: 9999px;
1428
+ font-size: 0.75rem;
1429
+ font-weight: 500;
1430
+ }
1431
+
1432
+ .status-badge::before {
1433
+ content: '';
1434
+ width: 6px;
1435
+ height: 6px;
1436
+ border-radius: 50%;
1437
+ }
1438
+
1439
+ /* Status variants */
1440
+ .status-active {
1441
+ background: rgba(16, 185, 129, 0.15);
1442
+ color: #34d399;
1443
+ }
1444
+
1445
+ .status-active::before {
1446
+ background: #34d399;
1447
+ }
1448
+
1449
+ .status-pending {
1450
+ background: rgba(245, 158, 11, 0.15);
1451
+ color: #fbbf24;
1452
+ }
1453
+
1454
+ .status-pending::before {
1455
+ background: #fbbf24;
1456
+ }
1457
+
1458
+ .status-inactive {
1459
+ background: rgba(239, 68, 68, 0.15);
1460
+ color: #f87171;
1461
+ }
1462
+
1463
+ .status-inactive::before {
1464
+ background: #f87171;
1465
+ }
1466
+
1467
+ /* Role badge */
1468
+ .role-badge {
1469
+ display: inline-flex;
1470
+ padding: 0.25rem 0.75rem;
1471
+ border-radius: 0.375rem;
1472
+ font-size: 0.75rem;
1473
+ font-weight: 500;
1474
+ background: rgba(255, 255, 255, 0.05);
1475
+ color: var(--text-secondary, #94a3b8);
1476
+ }
1477
+
1478
+ .role-admin {
1479
+ background: rgba(0, 212, 255, 0.15);
1480
+ color: var(--color-starlight, #00d4ff);
1481
+ }
1482
+
1483
+ .role-moderator {
1484
+ background: rgba(139, 92, 246, 0.15);
1485
+ color: #a78bfa;
1486
+ }
1487
+
1488
+ /* Count badge */
1489
+ .badge-count {
1490
+ display: inline-flex;
1491
+ align-items: center;
1492
+ justify-content: center;
1493
+ min-width: 20px;
1494
+ height: 20px;
1495
+ padding: 0 6px;
1496
+ background: linear-gradient(135deg, var(--color-starlight, #00d4ff), #3b82f6);
1497
+ border-radius: 10px;
1498
+ font-size: 0.6875rem;
1499
+ font-weight: 700;
1500
+ color: white;
1501
+ }
1502
+
1503
+ /* Label/tag */
1504
+ .label {
1505
+ display: inline-flex;
1506
+ align-items: center;
1507
+ padding: 0.25rem 0.75rem;
1508
+ border-radius: 9999px;
1509
+ font-size: 0.75rem;
1510
+ font-weight: 500;
1511
+ margin-right: 0.5rem;
1512
+ }
1513
+
1514
+ .label-work {
1515
+ background: rgba(59, 130, 246, 0.2);
1516
+ color: #60a5fa;
1517
+ }
1518
+
1519
+ .label-personal {
1520
+ background: rgba(16, 185, 129, 0.2);
1521
+ color: #34d399;
1522
+ }
1523
+
1524
+ .label-important {
1525
+ background: rgba(239, 68, 68, 0.2);
1526
+ color: #f87171;
1527
+ }
1528
+
1529
+ /* Light mode overrides for badges */
1530
+ body.light-mode .status-active {
1531
+ background: rgba(16, 185, 129, 0.1);
1532
+ color: #059669;
1533
+ }
1534
+
1535
+ body.light-mode .status-pending {
1536
+ background: rgba(245, 158, 11, 0.1);
1537
+ color: #d97706;
1538
+ }
1539
+
1540
+ body.light-mode .status-inactive {
1541
+ background: rgba(239, 68, 68, 0.1);
1542
+ color: #dc2626;
1543
+ }
1544
+
1545
+ body.light-mode .role-badge {
1546
+ background: #f1f5f9;
1547
+ color: #475569;
1548
+ }
1549
+
1550
+ body.light-mode .role-admin {
1551
+ background: rgba(0, 212, 255, 0.1);
1552
+ color: #0284c7;
1553
+ }
1554
+
1555
+ body.light-mode .label-work {
1556
+ background: rgba(59, 130, 246, 0.1);
1557
+ color: #2563eb;
1558
+ }
1559
+
1560
+ body.light-mode .label-personal {
1561
+ background: rgba(16, 185, 129, 0.1);
1562
+ color: #059669;
1563
+ }
1564
+
1565
+ body.light-mode .label-important {
1566
+ background: rgba(239, 68, 68, 0.1);
1567
+ color: #dc2626;
1568
+ }
1569
+
1570
+ /* ============================================================================
1571
+ SEARCH INPUTS
1572
+ Search boxes with integrated icons
1573
+ ============================================================================ */
1574
+
1575
+ /* Search container */
1576
+ .search-box {
1577
+ position: relative;
1578
+ }
1579
+
1580
+ /* Search input */
1581
+ .search-input {
1582
+ width: 280px;
1583
+ padding: 0.625rem 1rem 0.625rem 2.5rem;
1584
+ background: rgba(255, 255, 255, 0.05);
1585
+ border: 1px solid rgba(255, 255, 255, 0.1);
1586
+ border-radius: 0.625rem;
1587
+ color: var(--text-primary, #f1f5f9);
1588
+ font-size: 0.875rem;
1589
+ transition: all 0.2s ease;
1590
+ }
1591
+
1592
+ .search-input:focus {
1593
+ outline: none;
1594
+ border-color: rgba(0, 212, 255, 0.5);
1595
+ background: rgba(255, 255, 255, 0.08);
1596
+ }
1597
+
1598
+ .search-input::placeholder {
1599
+ color: var(--text-muted, #64748b);
1600
+ }
1601
+
1602
+ /* Search icon */
1603
+ .search-icon {
1604
+ position: absolute;
1605
+ left: 0.875rem;
1606
+ top: 50%;
1607
+ transform: translateY(-50%);
1608
+ color: var(--text-muted, #64748b);
1609
+ pointer-events: none;
1610
+ }
1611
+
1612
+ /* Full-width search input */
1613
+ .search-input-full {
1614
+ width: 100%;
1615
+ }
1616
+
1617
+ /* Filter select (for table filters) */
1618
+ .filter-select {
1619
+ padding: 0.5rem 2rem 0.5rem 0.75rem;
1620
+ background: rgba(255, 255, 255, 0.05);
1621
+ border: 1px solid rgba(255, 255, 255, 0.1);
1622
+ border-radius: 0.5rem;
1623
+ color: var(--text-secondary, #94a3b8);
1624
+ font-size: 0.875rem;
1625
+ cursor: pointer;
1626
+ appearance: none;
1627
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%2364748b' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3E%3C/svg%3E");
1628
+ background-position: right 0.5rem center;
1629
+ background-repeat: no-repeat;
1630
+ background-size: 1.25rem;
1631
+ }
1632
+
1633
+ .filter-select:focus {
1634
+ outline: none;
1635
+ border-color: rgba(0, 212, 255, 0.5);
1636
+ }
1637
+
1638
+ /* Light mode overrides for search */
1639
+ body.light-mode .search-input,
1640
+ body.light-mode .filter-select {
1641
+ background: #f1f5f9;
1642
+ border-color: #e2e8f0;
1643
+ color: #0f172a;
1644
+ }
1645
+
1646
+ body.light-mode .search-input:focus {
1647
+ border-color: #3b82f6;
1648
+ background: #ffffff;
1649
+ }
1650
+
1651
+ body.light-mode .search-input::placeholder {
1652
+ color: #94a3b8;
1653
+ }
1654
+
1655
+ /* ============================================================================
1656
+ STATUS INDICATORS
1657
+ Online status and notification dots
1658
+ ============================================================================ */
1659
+
1660
+ /* Online status indicator */
1661
+ .online-indicator {
1662
+ position: absolute;
1663
+ bottom: 2px;
1664
+ right: 2px;
1665
+ width: 10px;
1666
+ height: 10px;
1667
+ background: #10b981;
1668
+ border-radius: 50%;
1669
+ border: 2px solid var(--bg-primary, #08081a);
1670
+ }
1671
+
1672
+ /* Away status indicator */
1673
+ .away-indicator {
1674
+ background: #f59e0b;
1675
+ }
1676
+
1677
+ /* Busy status indicator */
1678
+ .busy-indicator {
1679
+ background: #ef4444;
1680
+ }
1681
+
1682
+ /* Offline status indicator */
1683
+ .offline-indicator {
1684
+ background: #64748b;
1685
+ }
1686
+
1687
+ /* Notification dot */
1688
+ .notification-dot {
1689
+ position: absolute;
1690
+ top: 8px;
1691
+ right: 8px;
1692
+ width: 8px;
1693
+ height: 8px;
1694
+ background: #ef4444;
1695
+ border-radius: 50%;
1696
+ border: 2px solid var(--bg-primary, #08081a);
1697
+ }
1698
+
1699
+ /* Notification badge with number */
1700
+ .notification-badge {
1701
+ position: absolute;
1702
+ top: -2px;
1703
+ right: -2px;
1704
+ min-width: 18px;
1705
+ height: 18px;
1706
+ padding: 0 5px;
1707
+ background: #ef4444;
1708
+ border-radius: 9px;
1709
+ font-size: 0.6875rem;
1710
+ font-weight: 700;
1711
+ color: white;
1712
+ display: flex;
1713
+ align-items: center;
1714
+ justify-content: center;
1715
+ border: 2px solid var(--bg-primary, #08081a);
1716
+ }
1717
+
1718
+ /* Light mode overrides for indicators */
1719
+ body.light-mode .online-indicator,
1720
+ body.light-mode .notification-dot,
1721
+ body.light-mode .notification-badge {
1722
+ border-color: #ffffff;
1723
+ }
1724
+
1725
+ /* ============================================================================
1726
+ PAGINATION
1727
+ Table and list pagination controls
1728
+ ============================================================================ */
1729
+
1730
+ .pagination {
1731
+ display: flex;
1732
+ gap: 0.375rem;
1733
+ }
1734
+
1735
+ .page-btn {
1736
+ min-width: 36px;
1737
+ height: 36px;
1738
+ padding: 0 0.75rem;
1739
+ border-radius: 0.5rem;
1740
+ background: rgba(255, 255, 255, 0.05);
1741
+ border: 1px solid rgba(255, 255, 255, 0.1);
1742
+ color: var(--text-secondary, #94a3b8);
1743
+ font-size: 0.875rem;
1744
+ cursor: pointer;
1745
+ transition: all 0.2s ease;
1746
+ display: flex;
1747
+ align-items: center;
1748
+ justify-content: center;
1749
+ }
1750
+
1751
+ .page-btn:hover {
1752
+ background: rgba(255, 255, 255, 0.08);
1753
+ color: var(--text-primary, #f1f5f9);
1754
+ }
1755
+
1756
+ .page-btn.active {
1757
+ background: rgba(0, 212, 255, 0.15);
1758
+ border-color: rgba(0, 212, 255, 0.3);
1759
+ color: var(--color-starlight, #00d4ff);
1760
+ }
1761
+
1762
+ .page-btn:disabled {
1763
+ opacity: 0.5;
1764
+ cursor: not-allowed;
1765
+ }
1766
+
1767
+ /* Light mode overrides for pagination */
1768
+ body.light-mode .page-btn {
1769
+ background: #f1f5f9;
1770
+ border-color: #e2e8f0;
1771
+ color: #64748b;
1772
+ }
1773
+
1774
+ body.light-mode .page-btn:hover {
1775
+ background: #e2e8f0;
1776
+ color: #0f172a;
1777
+ }
1778
+
1779
+ body.light-mode .page-btn.active {
1780
+ background: rgba(59, 130, 246, 0.1);
1781
+ border-color: rgba(59, 130, 246, 0.3);
1782
+ color: #2563eb;
822
1783
  }