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