anentrypoint-design 0.0.121 → 0.0.122

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/community.css CHANGED
@@ -931,408 +931,1325 @@
931
931
  }
932
932
  .cm-channel-sidebar { left: 56px; }
933
933
  }
934
-
935
-
936
- /* ============================================================
937
- Overlays — toast, banner, mobile header, drawer, boot splash,
938
- context menu, command palette, emoji picker, reply bar.
939
- Added by overlays.js component surface.
940
- ============================================================ */
941
-
942
- /* ---- Toast ---- */
943
- .cm-toast {
944
- position: fixed;
945
- bottom: 24px;
946
- right: 24px;
947
- z-index: 1100;
948
- padding: 10px 14px;
949
- border-radius: var(--r-2);
950
- background: var(--bg-2);
951
- color: var(--fg);
952
- font-size: var(--fs-sm);
953
- box-shadow: 0 8px 24px color-mix(in oklab, var(--ink) 35%, transparent);
954
- display: inline-flex;
955
- align-items: center;
956
- gap: 8px;
957
- max-width: 360px;
958
- animation: cm-toast-in var(--dur-base) var(--ease);
959
- }
960
- @keyframes cm-toast-in {
961
- from { transform: translateY(8px); opacity: 0; }
962
- to { transform: translateY(0); opacity: 1; }
963
- }
964
- .cm-toast.tone-info { border-left: 3px solid var(--accent); }
965
- .cm-toast.tone-success { border-left: 3px solid var(--green-2); }
966
- .cm-toast.tone-warn { border-left: 3px solid var(--sun); }
967
- .cm-toast.tone-error { border-left: 3px solid var(--warn); }
968
-
969
- /* ---- Banner ---- */
970
- .cm-banner {
971
- display: flex;
972
- align-items: center;
973
- gap: 10px;
974
- padding: 8px 14px;
975
- background: var(--bg-2);
976
- color: var(--fg);
977
- font-size: var(--fs-sm);
978
- border-bottom: 1px solid color-mix(in oklab, var(--fg-3) 25%, transparent);
979
- }
980
- .cm-banner-msg { flex: 1; min-width: 0; }
981
- .cm-banner.tone-info { background: color-mix(in oklab, var(--accent) 14%, var(--bg-2)); }
982
- .cm-banner.tone-success { background: color-mix(in oklab, var(--green-2) 14%, var(--bg-2)); }
983
- .cm-banner.tone-warn { background: color-mix(in oklab, var(--sun) 18%, var(--bg-2)); }
984
- .cm-banner.tone-error { background: color-mix(in oklab, var(--warn) 18%, var(--bg-2)); }
985
- .cm-banner-action,
986
- .cm-banner-dismiss {
987
- background: transparent;
988
- color: inherit;
989
- border: 1px solid color-mix(in oklab, var(--fg) 22%, transparent);
990
- border-radius: var(--r-1);
991
- padding: 4px 10px;
992
- cursor: pointer;
993
- font-size: var(--fs-xs);
994
- display: inline-flex;
995
- align-items: center;
996
- gap: 4px;
997
- transition: background var(--dur-snap) var(--ease);
998
- }
999
- .cm-banner-action:hover,
1000
- .cm-banner-dismiss:hover { background: color-mix(in oklab, var(--fg) 12%, transparent); }
1001
- .cm-banner-dismiss { border: none; padding: 4px 8px; }
1002
-
1003
- /* ---- Mobile header ---- */
1004
- .cm-mobile-header {
1005
- display: flex;
1006
- align-items: center;
1007
- gap: 10px;
1008
- padding: 8px 12px;
1009
- height: 48px;
1010
- background: var(--bg-2);
1011
- color: var(--fg);
1012
- border-bottom: 1px solid color-mix(in oklab, var(--fg-3) 20%, transparent);
1013
- }
1014
- .cm-mh-btn {
1015
- background: transparent;
1016
- color: inherit;
1017
- border: none;
1018
- width: 36px;
1019
- height: 36px;
1020
- display: inline-flex;
1021
- align-items: center;
1022
- justify-content: center;
1023
- border-radius: var(--r-1);
1024
- cursor: pointer;
1025
- font-size: var(--fs-md);
1026
- transition: background var(--dur-snap) var(--ease);
1027
- }
1028
- .cm-mh-btn:hover { background: color-mix(in oklab, var(--fg) 10%, transparent); }
1029
- .cm-mh-title {
1030
- flex: 1;
1031
- min-width: 0;
1032
- font-weight: 600;
1033
- font-size: var(--fs-md);
1034
- overflow: hidden;
1035
- text-overflow: ellipsis;
1036
- white-space: nowrap;
1037
- }
1038
- @media (min-width: 769px) {
1039
- .cm-mobile-header { display: none; }
1040
- }
1041
-
1042
- /* ---- Drawer overlay ---- */
1043
- .cm-drawer-overlay {
1044
- position: fixed;
1045
- inset: 0;
1046
- z-index: 1000;
1047
- display: flex;
1048
- }
1049
- .cm-drawer-backdrop {
1050
- position: absolute;
1051
- inset: 0;
1052
- background: color-mix(in oklab, var(--ink) 55%, transparent);
1053
- animation: cm-fade-in var(--dur-base) var(--ease);
1054
- }
1055
- @keyframes cm-fade-in { from { opacity: 0 } to { opacity: 1 } }
1056
- .cm-drawer-content {
1057
- position: relative;
1058
- background: var(--bg);
1059
- color: var(--fg);
1060
- height: 100%;
1061
- width: min(320px, 86vw);
1062
- box-shadow: 0 0 24px color-mix(in oklab, var(--ink) 40%, transparent);
1063
- overflow-y: auto;
1064
- display: flex;
1065
- flex-direction: column;
1066
- animation: cm-drawer-in-l var(--dur-base) var(--ease);
1067
- }
1068
- .cm-drawer-content.side-left { margin-right: auto; }
1069
- .cm-drawer-content.side-right {
1070
- margin-left: auto;
1071
- animation-name: cm-drawer-in-r;
1072
- }
1073
- @keyframes cm-drawer-in-l { from { transform: translateX(-100%) } to { transform: translateX(0) } }
1074
- @keyframes cm-drawer-in-r { from { transform: translateX(100%) } to { transform: translateX(0) } }
1075
-
1076
- /* ---- Boot overlay ---- */
1077
- .cm-boot-overlay {
1078
- position: fixed;
1079
- inset: 0;
1080
- z-index: 1200;
1081
- background: var(--bg);
1082
- color: var(--fg);
1083
- display: flex;
1084
- flex-direction: column;
1085
- align-items: center;
1086
- justify-content: center;
1087
- gap: 16px;
1088
- padding: 24px;
1089
- }
1090
- .cm-boot-spinner {
1091
- width: 48px;
1092
- height: 48px;
1093
- border-radius: 50%;
1094
- border: 3px solid color-mix(in oklab, var(--fg) 14%, transparent);
1095
- border-top-color: var(--accent);
1096
- animation: cm-spin 0.9s linear infinite;
1097
- }
1098
- @keyframes cm-spin { to { transform: rotate(360deg); } }
1099
- .cm-boot-phase {
1100
- font-size: var(--fs-md);
1101
- color: var(--fg-2);
1102
- letter-spacing: var(--tr-tight);
1103
- }
1104
- .cm-boot-progress {
1105
- width: min(420px, 80vw);
1106
- height: 6px;
1107
- background: var(--bg-2);
1108
- border-radius: 999px;
1109
- overflow: hidden;
1110
- }
1111
- .cm-boot-bar {
1112
- height: 100%;
1113
- background: var(--accent);
1114
- transition: width var(--dur-base) var(--ease);
1115
- }
1116
- .cm-boot-error {
1117
- color: var(--warn);
1118
- font-size: var(--fs-sm);
1119
- max-width: 480px;
1120
- text-align: center;
1121
- }
1122
-
1123
- /* ---- Context menu ---- */
1124
- .cm-context-menu {
1125
- position: fixed;
1126
- z-index: 1300;
1127
- min-width: 180px;
1128
- padding: 4px;
1129
- background: var(--bg-2);
1130
- color: var(--fg);
1131
- border-radius: var(--r-2);
1132
- box-shadow: 0 8px 24px color-mix(in oklab, var(--ink) 45%, transparent);
1133
- animation: cm-fade-in var(--dur-snap) var(--ease);
1134
- }
1135
- .cm-cm-list { display: flex; flex-direction: column; gap: 1px; }
1136
- .cm-cm-item {
1137
- background: transparent;
1138
- color: inherit;
1139
- border: none;
1140
- text-align: left;
1141
- padding: 8px 10px;
1142
- border-radius: var(--r-1);
1143
- font-size: var(--fs-sm);
1144
- display: flex;
1145
- align-items: center;
1146
- gap: 8px;
1147
- cursor: pointer;
1148
- transition: background var(--dur-snap) var(--ease);
1149
- }
1150
- .cm-cm-item:hover { background: color-mix(in oklab, var(--accent) 24%, transparent); color: var(--fg); }
1151
- .cm-cm-item.danger { color: var(--warn); }
1152
- .cm-cm-item.danger:hover { background: color-mix(in oklab, var(--warn) 22%, transparent); color: var(--warn); }
1153
- .cm-cm-icon { width: 18px; display: inline-flex; justify-content: center; }
1154
- .cm-cm-label { flex: 1; min-width: 0; }
1155
- .cm-cm-sep {
1156
- height: 1px;
1157
- background: color-mix(in oklab, var(--fg-3) 22%, transparent);
1158
- margin: 4px 6px;
1159
- }
1160
-
1161
- /* ---- Command palette ---- */
1162
- .cm-command-palette-wrap {
1163
- position: fixed;
1164
- inset: 0;
1165
- z-index: 1400;
1166
- display: flex;
1167
- align-items: flex-start;
1168
- justify-content: center;
1169
- padding-top: 12vh;
1170
- }
1171
- .cm-command-palette-backdrop {
1172
- position: absolute;
1173
- inset: 0;
1174
- background: color-mix(in oklab, var(--ink) 50%, transparent);
1175
- }
1176
- .cm-command-palette {
1177
- position: relative;
1178
- width: min(560px, 92vw);
1179
- max-height: 60vh;
1180
- display: flex;
1181
- flex-direction: column;
1182
- background: var(--bg-2);
1183
- color: var(--fg);
1184
- border-radius: var(--r-2);
1185
- box-shadow: 0 16px 40px color-mix(in oklab, var(--ink) 45%, transparent);
1186
- overflow: hidden;
1187
- }
1188
- .cm-cp-input {
1189
- background: transparent;
1190
- border: none;
1191
- border-bottom: 1px solid color-mix(in oklab, var(--fg-3) 22%, transparent);
1192
- color: var(--fg);
1193
- font-size: var(--fs-md);
1194
- padding: 14px 16px;
1195
- outline: none;
1196
- font-family: var(--ff-body);
1197
- }
1198
- .cm-cp-input::placeholder { color: var(--fg-3); }
1199
- .cm-cp-list {
1200
- flex: 1;
1201
- min-height: 0;
1202
- overflow-y: auto;
1203
- padding: 6px;
1204
- display: flex;
1205
- flex-direction: column;
1206
- gap: 1px;
1207
- }
1208
- .cm-cp-item {
1209
- background: transparent;
1210
- color: inherit;
1211
- border: none;
1212
- text-align: left;
1213
- padding: 10px 12px;
1214
- border-radius: var(--r-1);
1215
- font-size: var(--fs-sm);
1216
- display: flex;
1217
- align-items: center;
1218
- gap: 10px;
1219
- cursor: pointer;
1220
- transition: background var(--dur-snap) var(--ease);
1221
- }
1222
- .cm-cp-item:hover,
1223
- .cm-cp-item.selected {
1224
- background: color-mix(in oklab, var(--accent) 22%, transparent);
1225
- }
1226
- .cm-cp-icon { width: 20px; display: inline-flex; justify-content: center; }
1227
- .cm-cp-label { flex: 1; min-width: 0; }
1228
- .cm-cp-hint { color: var(--fg-3); font-size: var(--fs-xs); }
1229
-
1230
- /* ---- Emoji picker ---- */
1231
- .cm-emoji-picker {
1232
- width: min(340px, 92vw);
1233
- max-height: 360px;
1234
- background: var(--bg-2);
1235
- color: var(--fg);
1236
- border-radius: var(--r-2);
1237
- box-shadow: 0 12px 28px color-mix(in oklab, var(--ink) 40%, transparent);
1238
- display: flex;
1239
- flex-direction: column;
1240
- overflow: hidden;
1241
- }
1242
- .cm-ep-search {
1243
- background: var(--bg-3);
1244
- border: none;
1245
- color: var(--fg);
1246
- padding: 8px 10px;
1247
- font-size: var(--fs-sm);
1248
- margin: 8px;
1249
- border-radius: var(--r-1);
1250
- outline: none;
1251
- font-family: var(--ff-body);
1252
- }
1253
- .cm-ep-search::placeholder { color: var(--fg-3); }
1254
- .cm-ep-grid {
1255
- flex: 1;
1256
- min-height: 0;
1257
- overflow-y: auto;
1258
- padding: 4px 8px 8px;
1259
- display: grid;
1260
- grid-template-columns: repeat(8, 1fr);
1261
- gap: 2px;
1262
- }
1263
- .cm-ep-category {
1264
- grid-column: 1 / -1;
1265
- font-size: var(--fs-xs);
1266
- color: var(--fg-3);
1267
- text-transform: uppercase;
1268
- letter-spacing: var(--tr-wide);
1269
- padding: 6px 2px 2px;
1270
- }
1271
- .cm-ep-btn {
1272
- background: transparent;
1273
- border: none;
1274
- cursor: pointer;
1275
- font-size: 20px;
1276
- line-height: 1;
1277
- padding: 4px;
1278
- border-radius: var(--r-1);
1279
- transition: background var(--dur-snap) var(--ease);
1280
- }
1281
- .cm-ep-btn:hover { background: color-mix(in oklab, var(--fg) 12%, transparent); }
1282
-
1283
- /* ---- Reply bar ---- */
1284
- .cm-reply-bar {
1285
- display: flex;
1286
- align-items: center;
1287
- gap: 8px;
1288
- padding: 6px 12px;
1289
- background: var(--bg-2);
1290
- color: var(--fg-2);
1291
- font-size: var(--fs-xs);
1292
- border-top: 1px solid color-mix(in oklab, var(--fg-3) 18%, transparent);
1293
- }
1294
- .cm-rb-quote { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1295
- .cm-rb-label { color: var(--fg-3); }
1296
- .cm-rb-author { color: var(--accent); font-weight: 600; }
1297
- .cm-rb-msg { color: var(--fg-3); }
1298
- .cm-rb-cancel {
1299
- background: transparent;
1300
- color: var(--fg-3);
1301
- border: none;
1302
- cursor: pointer;
1303
- padding: 2px 6px;
1304
- border-radius: var(--r-1);
1305
- transition: background var(--dur-snap) var(--ease), color var(--dur-snap) var(--ease);
1306
- }
1307
- .cm-rb-cancel:hover { background: color-mix(in oklab, var(--warn) 18%, transparent); color: var(--warn); }
1308
-
1309
- /* ---- UserPanel extra buttons (active-toggle state) ---- */
1310
- .cm-user-controls .cm-user-btn.extra.active {
1311
- background: color-mix(in oklab, var(--accent) 28%, transparent);
1312
- color: var(--accent);
1313
- }
1314
-
1315
- /* ---- VoiceUser: video stream + quality dot ---- */
1316
- .cm-voice-user-video {
1317
- width: 100%;
1318
- height: 100%;
1319
- object-fit: cover;
1320
- display: block;
1321
- border-radius: 50%;
1322
- }
1323
- .cm-voice-user-avatar { position: relative; }
1324
- .cm-voice-user-quality {
1325
- position: absolute;
1326
- top: 2px;
1327
- right: 2px;
1328
- width: 10px;
1329
- height: 10px;
1330
- border-radius: 50%;
1331
- border: 2px solid var(--bg-2);
1332
- background: var(--fg-3);
1333
- }
1334
- .cm-voice-user-quality.q-excellent { background: var(--green-2); }
1335
- .cm-voice-user-quality.q-good { background: color-mix(in oklab, var(--green-2) 70%, var(--sun)); }
1336
- .cm-voice-user-quality.q-poor { background: var(--sun); }
1337
- .cm-voice-user-quality.q-lost { background: var(--warn); }
1338
- .cm-voice-user-quality.q-unknown { background: var(--fg-3); }
934
+
935
+
936
+ /* ============================================================
937
+ Overlays — toast, banner, mobile header, drawer, boot splash,
938
+ context menu, command palette, emoji picker, reply bar.
939
+ Added by overlays.js component surface.
940
+ ============================================================ */
941
+
942
+ /* ---- Toast ---- */
943
+ .cm-toast {
944
+ position: fixed;
945
+ bottom: 24px;
946
+ right: 24px;
947
+ z-index: 1100;
948
+ padding: 10px 14px;
949
+ border-radius: var(--r-2);
950
+ background: var(--bg-2);
951
+ color: var(--fg);
952
+ font-size: var(--fs-sm);
953
+ box-shadow: 0 8px 24px color-mix(in oklab, var(--ink) 35%, transparent);
954
+ display: inline-flex;
955
+ align-items: center;
956
+ gap: 8px;
957
+ max-width: 360px;
958
+ animation: cm-toast-in var(--dur-base) var(--ease);
959
+ }
960
+ @keyframes cm-toast-in {
961
+ from { transform: translateY(8px); opacity: 0; }
962
+ to { transform: translateY(0); opacity: 1; }
963
+ }
964
+ .cm-toast.tone-info { border-left: 3px solid var(--accent); }
965
+ .cm-toast.tone-success { border-left: 3px solid var(--green-2); }
966
+ .cm-toast.tone-warn { border-left: 3px solid var(--sun); }
967
+ .cm-toast.tone-error { border-left: 3px solid var(--warn); }
968
+
969
+ /* ---- Banner ---- */
970
+ .cm-banner {
971
+ display: flex;
972
+ align-items: center;
973
+ gap: 10px;
974
+ padding: 8px 14px;
975
+ background: var(--bg-2);
976
+ color: var(--fg);
977
+ font-size: var(--fs-sm);
978
+ border-bottom: 1px solid color-mix(in oklab, var(--fg-3) 25%, transparent);
979
+ }
980
+ .cm-banner-msg { flex: 1; min-width: 0; }
981
+ .cm-banner.tone-info { background: color-mix(in oklab, var(--accent) 14%, var(--bg-2)); }
982
+ .cm-banner.tone-success { background: color-mix(in oklab, var(--green-2) 14%, var(--bg-2)); }
983
+ .cm-banner.tone-warn { background: color-mix(in oklab, var(--sun) 18%, var(--bg-2)); }
984
+ .cm-banner.tone-error { background: color-mix(in oklab, var(--warn) 18%, var(--bg-2)); }
985
+ .cm-banner-action,
986
+ .cm-banner-dismiss {
987
+ background: transparent;
988
+ color: inherit;
989
+ border: 1px solid color-mix(in oklab, var(--fg) 22%, transparent);
990
+ border-radius: var(--r-1);
991
+ padding: 4px 10px;
992
+ cursor: pointer;
993
+ font-size: var(--fs-xs);
994
+ display: inline-flex;
995
+ align-items: center;
996
+ gap: 4px;
997
+ transition: background var(--dur-snap) var(--ease);
998
+ }
999
+ .cm-banner-action:hover,
1000
+ .cm-banner-dismiss:hover { background: color-mix(in oklab, var(--fg) 12%, transparent); }
1001
+ .cm-banner-dismiss { border: none; padding: 4px 8px; }
1002
+
1003
+ /* ---- Mobile header ---- */
1004
+ .cm-mobile-header {
1005
+ display: flex;
1006
+ align-items: center;
1007
+ gap: 10px;
1008
+ padding: 8px 12px;
1009
+ height: 48px;
1010
+ background: var(--bg-2);
1011
+ color: var(--fg);
1012
+ border-bottom: 1px solid color-mix(in oklab, var(--fg-3) 20%, transparent);
1013
+ }
1014
+ .cm-mh-btn {
1015
+ background: transparent;
1016
+ color: inherit;
1017
+ border: none;
1018
+ width: 36px;
1019
+ height: 36px;
1020
+ display: inline-flex;
1021
+ align-items: center;
1022
+ justify-content: center;
1023
+ border-radius: var(--r-1);
1024
+ cursor: pointer;
1025
+ font-size: var(--fs-md);
1026
+ transition: background var(--dur-snap) var(--ease);
1027
+ }
1028
+ .cm-mh-btn:hover { background: color-mix(in oklab, var(--fg) 10%, transparent); }
1029
+ .cm-mh-title {
1030
+ flex: 1;
1031
+ min-width: 0;
1032
+ font-weight: 600;
1033
+ font-size: var(--fs-md);
1034
+ overflow: hidden;
1035
+ text-overflow: ellipsis;
1036
+ white-space: nowrap;
1037
+ }
1038
+ @media (min-width: 769px) {
1039
+ .cm-mobile-header { display: none; }
1040
+ }
1041
+
1042
+ /* ---- Drawer overlay ---- */
1043
+ .cm-drawer-overlay {
1044
+ position: fixed;
1045
+ inset: 0;
1046
+ z-index: 1000;
1047
+ display: flex;
1048
+ }
1049
+ .cm-drawer-backdrop {
1050
+ position: absolute;
1051
+ inset: 0;
1052
+ background: color-mix(in oklab, var(--ink) 55%, transparent);
1053
+ animation: cm-fade-in var(--dur-base) var(--ease);
1054
+ }
1055
+ @keyframes cm-fade-in { from { opacity: 0 } to { opacity: 1 } }
1056
+ .cm-drawer-content {
1057
+ position: relative;
1058
+ background: var(--bg);
1059
+ color: var(--fg);
1060
+ height: 100%;
1061
+ width: min(320px, 86vw);
1062
+ box-shadow: 0 0 24px color-mix(in oklab, var(--ink) 40%, transparent);
1063
+ overflow-y: auto;
1064
+ display: flex;
1065
+ flex-direction: column;
1066
+ animation: cm-drawer-in-l var(--dur-base) var(--ease);
1067
+ }
1068
+ .cm-drawer-content.side-left { margin-right: auto; }
1069
+ .cm-drawer-content.side-right {
1070
+ margin-left: auto;
1071
+ animation-name: cm-drawer-in-r;
1072
+ }
1073
+ @keyframes cm-drawer-in-l { from { transform: translateX(-100%) } to { transform: translateX(0) } }
1074
+ @keyframes cm-drawer-in-r { from { transform: translateX(100%) } to { transform: translateX(0) } }
1075
+
1076
+ /* ---- Boot overlay ---- */
1077
+ .cm-boot-overlay {
1078
+ position: fixed;
1079
+ inset: 0;
1080
+ z-index: 1200;
1081
+ background: var(--bg);
1082
+ color: var(--fg);
1083
+ display: flex;
1084
+ flex-direction: column;
1085
+ align-items: center;
1086
+ justify-content: center;
1087
+ gap: 16px;
1088
+ padding: 24px;
1089
+ }
1090
+ .cm-boot-spinner {
1091
+ width: 48px;
1092
+ height: 48px;
1093
+ border-radius: 50%;
1094
+ border: 3px solid color-mix(in oklab, var(--fg) 14%, transparent);
1095
+ border-top-color: var(--accent);
1096
+ animation: cm-spin 0.9s linear infinite;
1097
+ }
1098
+ @keyframes cm-spin { to { transform: rotate(360deg); } }
1099
+ .cm-boot-phase {
1100
+ font-size: var(--fs-md);
1101
+ color: var(--fg-2);
1102
+ letter-spacing: var(--tr-tight);
1103
+ }
1104
+ .cm-boot-progress {
1105
+ width: min(420px, 80vw);
1106
+ height: 6px;
1107
+ background: var(--bg-2);
1108
+ border-radius: 999px;
1109
+ overflow: hidden;
1110
+ }
1111
+ .cm-boot-bar {
1112
+ height: 100%;
1113
+ background: var(--accent);
1114
+ transition: width var(--dur-base) var(--ease);
1115
+ }
1116
+ .cm-boot-error {
1117
+ color: var(--warn);
1118
+ font-size: var(--fs-sm);
1119
+ max-width: 480px;
1120
+ text-align: center;
1121
+ }
1122
+
1123
+ /* ---- Context menu ---- */
1124
+ .cm-context-menu {
1125
+ position: fixed;
1126
+ z-index: 1300;
1127
+ min-width: 180px;
1128
+ padding: 4px;
1129
+ background: var(--bg-2);
1130
+ color: var(--fg);
1131
+ border-radius: var(--r-2);
1132
+ box-shadow: 0 8px 24px color-mix(in oklab, var(--ink) 45%, transparent);
1133
+ animation: cm-fade-in var(--dur-snap) var(--ease);
1134
+ }
1135
+ .cm-cm-list { display: flex; flex-direction: column; gap: 1px; }
1136
+ .cm-cm-item {
1137
+ background: transparent;
1138
+ color: inherit;
1139
+ border: none;
1140
+ text-align: left;
1141
+ padding: 8px 10px;
1142
+ border-radius: var(--r-1);
1143
+ font-size: var(--fs-sm);
1144
+ display: flex;
1145
+ align-items: center;
1146
+ gap: 8px;
1147
+ cursor: pointer;
1148
+ transition: background var(--dur-snap) var(--ease);
1149
+ }
1150
+ .cm-cm-item:hover { background: color-mix(in oklab, var(--accent) 24%, transparent); color: var(--fg); }
1151
+ .cm-cm-item.danger { color: var(--warn); }
1152
+ .cm-cm-item.danger:hover { background: color-mix(in oklab, var(--warn) 22%, transparent); color: var(--warn); }
1153
+ .cm-cm-icon { width: 18px; display: inline-flex; justify-content: center; }
1154
+ .cm-cm-label { flex: 1; min-width: 0; }
1155
+ .cm-cm-sep {
1156
+ height: 1px;
1157
+ background: color-mix(in oklab, var(--fg-3) 22%, transparent);
1158
+ margin: 4px 6px;
1159
+ }
1160
+
1161
+ /* ---- Command palette ---- */
1162
+ .cm-command-palette-wrap {
1163
+ position: fixed;
1164
+ inset: 0;
1165
+ z-index: 1400;
1166
+ display: flex;
1167
+ align-items: flex-start;
1168
+ justify-content: center;
1169
+ padding-top: 12vh;
1170
+ }
1171
+ .cm-command-palette-backdrop {
1172
+ position: absolute;
1173
+ inset: 0;
1174
+ background: color-mix(in oklab, var(--ink) 50%, transparent);
1175
+ }
1176
+ .cm-command-palette {
1177
+ position: relative;
1178
+ width: min(560px, 92vw);
1179
+ max-height: 60vh;
1180
+ display: flex;
1181
+ flex-direction: column;
1182
+ background: var(--bg-2);
1183
+ color: var(--fg);
1184
+ border-radius: var(--r-2);
1185
+ box-shadow: 0 16px 40px color-mix(in oklab, var(--ink) 45%, transparent);
1186
+ overflow: hidden;
1187
+ }
1188
+ .cm-cp-input {
1189
+ background: transparent;
1190
+ border: none;
1191
+ border-bottom: 1px solid color-mix(in oklab, var(--fg-3) 22%, transparent);
1192
+ color: var(--fg);
1193
+ font-size: var(--fs-md);
1194
+ padding: 14px 16px;
1195
+ outline: none;
1196
+ font-family: var(--ff-body);
1197
+ }
1198
+ .cm-cp-input::placeholder { color: var(--fg-3); }
1199
+ .cm-cp-list {
1200
+ flex: 1;
1201
+ min-height: 0;
1202
+ overflow-y: auto;
1203
+ padding: 6px;
1204
+ display: flex;
1205
+ flex-direction: column;
1206
+ gap: 1px;
1207
+ }
1208
+ .cm-cp-item {
1209
+ background: transparent;
1210
+ color: inherit;
1211
+ border: none;
1212
+ text-align: left;
1213
+ padding: 10px 12px;
1214
+ border-radius: var(--r-1);
1215
+ font-size: var(--fs-sm);
1216
+ display: flex;
1217
+ align-items: center;
1218
+ gap: 10px;
1219
+ cursor: pointer;
1220
+ transition: background var(--dur-snap) var(--ease);
1221
+ }
1222
+ .cm-cp-item:hover,
1223
+ .cm-cp-item.selected {
1224
+ background: color-mix(in oklab, var(--accent) 22%, transparent);
1225
+ }
1226
+ .cm-cp-icon { width: 20px; display: inline-flex; justify-content: center; }
1227
+ .cm-cp-label { flex: 1; min-width: 0; }
1228
+ .cm-cp-hint { color: var(--fg-3); font-size: var(--fs-xs); }
1229
+
1230
+ /* ---- Emoji picker ---- */
1231
+ .cm-emoji-picker {
1232
+ width: min(340px, 92vw);
1233
+ max-height: 360px;
1234
+ background: var(--bg-2);
1235
+ color: var(--fg);
1236
+ border-radius: var(--r-2);
1237
+ box-shadow: 0 12px 28px color-mix(in oklab, var(--ink) 40%, transparent);
1238
+ display: flex;
1239
+ flex-direction: column;
1240
+ overflow: hidden;
1241
+ }
1242
+ .cm-ep-search {
1243
+ background: var(--bg-3);
1244
+ border: none;
1245
+ color: var(--fg);
1246
+ padding: 8px 10px;
1247
+ font-size: var(--fs-sm);
1248
+ margin: 8px;
1249
+ border-radius: var(--r-1);
1250
+ outline: none;
1251
+ font-family: var(--ff-body);
1252
+ }
1253
+ .cm-ep-search::placeholder { color: var(--fg-3); }
1254
+ .cm-ep-grid {
1255
+ flex: 1;
1256
+ min-height: 0;
1257
+ overflow-y: auto;
1258
+ padding: 4px 8px 8px;
1259
+ display: grid;
1260
+ grid-template-columns: repeat(8, 1fr);
1261
+ gap: 2px;
1262
+ }
1263
+ .cm-ep-category {
1264
+ grid-column: 1 / -1;
1265
+ font-size: var(--fs-xs);
1266
+ color: var(--fg-3);
1267
+ text-transform: uppercase;
1268
+ letter-spacing: var(--tr-wide);
1269
+ padding: 6px 2px 2px;
1270
+ }
1271
+ .cm-ep-btn {
1272
+ background: transparent;
1273
+ border: none;
1274
+ cursor: pointer;
1275
+ font-size: 20px;
1276
+ line-height: 1;
1277
+ padding: 4px;
1278
+ border-radius: var(--r-1);
1279
+ transition: background var(--dur-snap) var(--ease);
1280
+ }
1281
+ .cm-ep-btn:hover { background: color-mix(in oklab, var(--fg) 12%, transparent); }
1282
+
1283
+ /* ---- Reply bar ---- */
1284
+ .cm-reply-bar {
1285
+ display: flex;
1286
+ align-items: center;
1287
+ gap: 8px;
1288
+ padding: 6px 12px;
1289
+ background: var(--bg-2);
1290
+ color: var(--fg-2);
1291
+ font-size: var(--fs-xs);
1292
+ border-top: 1px solid color-mix(in oklab, var(--fg-3) 18%, transparent);
1293
+ }
1294
+ .cm-rb-quote { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1295
+ .cm-rb-label { color: var(--fg-3); }
1296
+ .cm-rb-author { color: var(--accent); font-weight: 600; }
1297
+ .cm-rb-msg { color: var(--fg-3); }
1298
+ .cm-rb-cancel {
1299
+ background: transparent;
1300
+ color: var(--fg-3);
1301
+ border: none;
1302
+ cursor: pointer;
1303
+ padding: 2px 6px;
1304
+ border-radius: var(--r-1);
1305
+ transition: background var(--dur-snap) var(--ease), color var(--dur-snap) var(--ease);
1306
+ }
1307
+ .cm-rb-cancel:hover { background: color-mix(in oklab, var(--warn) 18%, transparent); color: var(--warn); }
1308
+
1309
+ /* ---- UserPanel extra buttons (active-toggle state) ---- */
1310
+ .cm-user-controls .cm-user-btn.extra.active {
1311
+ background: color-mix(in oklab, var(--accent) 28%, transparent);
1312
+ color: var(--accent);
1313
+ }
1314
+
1315
+ /* ---- VoiceUser: video stream + quality dot ---- */
1316
+ .cm-voice-user-video {
1317
+ width: 100%;
1318
+ height: 100%;
1319
+ object-fit: cover;
1320
+ display: block;
1321
+ border-radius: 50%;
1322
+ }
1323
+ .cm-voice-user-avatar { position: relative; }
1324
+ .cm-voice-user-quality {
1325
+ position: absolute;
1326
+ top: 2px;
1327
+ right: 2px;
1328
+ width: 10px;
1329
+ height: 10px;
1330
+ border-radius: 50%;
1331
+ border: 2px solid var(--bg-2);
1332
+ background: var(--fg-3);
1333
+ }
1334
+ .cm-voice-user-quality.q-excellent { background: var(--green-2); }
1335
+ .cm-voice-user-quality.q-good { background: color-mix(in oklab, var(--green-2) 70%, var(--sun)); }
1336
+ .cm-voice-user-quality.q-poor { background: var(--sun); }
1337
+ .cm-voice-user-quality.q-lost { background: var(--warn); }
1338
+ .cm-voice-user-quality.q-unknown { background: var(--fg-3); }
1339
+
1340
+ /* =========================================================
1341
+ Voice / audio / video components
1342
+ ========================================================= */
1343
+
1344
+ /* ---- PttButton ---- */
1345
+ .cm-ptt-button {
1346
+ display: inline-flex;
1347
+ align-items: center;
1348
+ gap: 8px;
1349
+ padding: 8px 16px;
1350
+ border-radius: 999px;
1351
+ border: 1px solid color-mix(in oklab, var(--fg-3) 22%, transparent);
1352
+ background: var(--bg-2);
1353
+ color: var(--fg);
1354
+ font-size: var(--fs-sm);
1355
+ font-weight: 600;
1356
+ cursor: pointer;
1357
+ user-select: none;
1358
+ transition: background var(--dur-snap) var(--ease), border-color var(--dur-snap) var(--ease), transform var(--dur-snap) var(--ease);
1359
+ }
1360
+ .cm-ptt-button:hover { background: var(--bg-3); }
1361
+ .cm-ptt-button:active { transform: scale(0.97); }
1362
+ .cm-ptt-dot {
1363
+ width: 10px; height: 10px; border-radius: 50%;
1364
+ background: var(--fg-3);
1365
+ transition: background var(--dur-snap) var(--ease), box-shadow var(--dur-snap) var(--ease);
1366
+ }
1367
+ .cm-ptt-button.idle .cm-ptt-dot { background: var(--fg-3); }
1368
+ .cm-ptt-button.live {
1369
+ background: color-mix(in oklab, var(--warn) 22%, var(--bg-2));
1370
+ border-color: color-mix(in oklab, var(--warn) 60%, transparent);
1371
+ color: var(--warn);
1372
+ animation: cm-ptt-pulse 1.1s var(--ease) infinite;
1373
+ }
1374
+ .cm-ptt-button.live .cm-ptt-dot {
1375
+ background: var(--warn);
1376
+ box-shadow: 0 0 0 4px color-mix(in oklab, var(--warn) 30%, transparent);
1377
+ }
1378
+ .cm-ptt-button.queued {
1379
+ background: color-mix(in oklab, var(--sun) 22%, var(--bg-2));
1380
+ border-color: color-mix(in oklab, var(--sun) 60%, transparent);
1381
+ color: var(--sun);
1382
+ }
1383
+ .cm-ptt-button.queued .cm-ptt-dot { background: var(--sun); }
1384
+ .cm-ptt-button.realtime,
1385
+ .cm-ptt-button.mode-realtime.realtime {
1386
+ background: color-mix(in oklab, var(--green-2) 22%, var(--bg-2));
1387
+ border-color: color-mix(in oklab, var(--green-2) 60%, transparent);
1388
+ color: var(--green-2);
1389
+ }
1390
+ .cm-ptt-button.realtime .cm-ptt-dot {
1391
+ background: var(--green-2);
1392
+ box-shadow: 0 0 0 4px color-mix(in oklab, var(--green-2) 30%, transparent);
1393
+ }
1394
+ @keyframes cm-ptt-pulse {
1395
+ 0%, 100% { box-shadow: 0 0 0 0 color-mix(in oklab, var(--warn) 40%, transparent); }
1396
+ 50% { box-shadow: 0 0 0 6px color-mix(in oklab, var(--warn) 0%, transparent); }
1397
+ }
1398
+
1399
+ /* ---- VadMeter ---- */
1400
+ .cm-vad-meter {
1401
+ display: inline-block;
1402
+ position: relative;
1403
+ background: var(--bg-3);
1404
+ border-radius: var(--r-1);
1405
+ overflow: hidden;
1406
+ }
1407
+ .cm-vad-track {
1408
+ position: relative;
1409
+ width: 100%;
1410
+ height: 100%;
1411
+ }
1412
+ .cm-vad-bar {
1413
+ position: absolute;
1414
+ top: 0; left: 0; bottom: 0;
1415
+ background: linear-gradient(90deg, var(--green-2), color-mix(in oklab, var(--green-2) 60%, var(--sun)));
1416
+ transition: width 60ms linear;
1417
+ }
1418
+ .cm-vad-bar.active {
1419
+ background: linear-gradient(90deg, var(--green-2), var(--sun));
1420
+ }
1421
+ .cm-vad-threshold {
1422
+ position: absolute;
1423
+ top: -2px; bottom: -2px;
1424
+ width: 3px;
1425
+ margin-left: -1px;
1426
+ background: var(--fg);
1427
+ border-radius: 2px;
1428
+ pointer-events: none;
1429
+ }
1430
+ .cm-vad-hit {
1431
+ position: absolute;
1432
+ inset: 0;
1433
+ cursor: ew-resize;
1434
+ background: transparent;
1435
+ }
1436
+
1437
+ /* ---- WebcamPreview ---- */
1438
+ .cm-webcam-preview {
1439
+ display: flex;
1440
+ flex-direction: column;
1441
+ gap: 6px;
1442
+ padding: 8px;
1443
+ border-radius: var(--r-2);
1444
+ background: var(--bg-2);
1445
+ border: 1px solid color-mix(in oklab, var(--fg-3) 18%, transparent);
1446
+ }
1447
+ .cm-webcam-preview.disabled .cm-wc-video {
1448
+ filter: grayscale(1) brightness(0.4);
1449
+ }
1450
+ .cm-wc-video {
1451
+ width: 100%;
1452
+ aspect-ratio: 4 / 3;
1453
+ background: var(--bg-3);
1454
+ border-radius: var(--r-1);
1455
+ object-fit: cover;
1456
+ display: block;
1457
+ }
1458
+ .cm-wc-controls {
1459
+ display: flex;
1460
+ gap: 6px;
1461
+ align-items: center;
1462
+ flex-wrap: wrap;
1463
+ }
1464
+ .cm-wc-select {
1465
+ flex: 1;
1466
+ min-width: 0;
1467
+ background: var(--bg-3);
1468
+ color: var(--fg);
1469
+ border: 1px solid color-mix(in oklab, var(--fg-3) 22%, transparent);
1470
+ border-radius: var(--r-1);
1471
+ padding: 4px 6px;
1472
+ font-size: var(--fs-xs);
1473
+ cursor: pointer;
1474
+ }
1475
+ .cm-wc-toggle {
1476
+ background: var(--bg-3);
1477
+ color: var(--fg);
1478
+ border: 1px solid color-mix(in oklab, var(--fg-3) 22%, transparent);
1479
+ border-radius: var(--r-1);
1480
+ padding: 4px 10px;
1481
+ font-size: var(--fs-xs);
1482
+ font-weight: 600;
1483
+ cursor: pointer;
1484
+ transition: background var(--dur-snap) var(--ease), color var(--dur-snap) var(--ease);
1485
+ }
1486
+ .cm-wc-toggle:hover { background: color-mix(in oklab, var(--accent) 18%, var(--bg-3)); }
1487
+ .cm-wc-toggle.on {
1488
+ background: color-mix(in oklab, var(--green-2) 22%, var(--bg-3));
1489
+ color: var(--green-2);
1490
+ border-color: color-mix(in oklab, var(--green-2) 50%, transparent);
1491
+ }
1492
+
1493
+ /* ---- AudioQueue ---- */
1494
+ .cm-audio-queue {
1495
+ display: flex;
1496
+ flex-direction: column;
1497
+ background: var(--bg-2);
1498
+ border: 1px solid color-mix(in oklab, var(--fg-3) 18%, transparent);
1499
+ border-radius: var(--r-2);
1500
+ overflow: hidden;
1501
+ }
1502
+ .cm-aq-header {
1503
+ display: flex;
1504
+ align-items: center;
1505
+ justify-content: space-between;
1506
+ padding: 6px 10px;
1507
+ background: var(--bg-3);
1508
+ border-bottom: 1px solid color-mix(in oklab, var(--fg-3) 18%, transparent);
1509
+ }
1510
+ .cm-aq-title {
1511
+ font-size: var(--fs-xs);
1512
+ font-weight: 600;
1513
+ color: var(--fg-2);
1514
+ text-transform: uppercase;
1515
+ letter-spacing: 0.04em;
1516
+ }
1517
+ .cm-aq-pause {
1518
+ background: transparent;
1519
+ color: var(--fg);
1520
+ border: 1px solid color-mix(in oklab, var(--fg-3) 22%, transparent);
1521
+ border-radius: var(--r-1);
1522
+ padding: 2px 8px;
1523
+ cursor: pointer;
1524
+ font-size: var(--fs-xs);
1525
+ }
1526
+ .cm-aq-pause:hover { background: color-mix(in oklab, var(--accent) 18%, transparent); }
1527
+ .cm-aq-list { display: flex; flex-direction: column; max-height: 240px; overflow-y: auto; }
1528
+ .cm-aq-item {
1529
+ display: flex;
1530
+ align-items: center;
1531
+ gap: 8px;
1532
+ padding: 6px 10px;
1533
+ border-bottom: 1px solid color-mix(in oklab, var(--fg-3) 10%, transparent);
1534
+ font-size: var(--fs-sm);
1535
+ color: var(--fg);
1536
+ }
1537
+ .cm-aq-item:last-child { border-bottom: none; }
1538
+ .cm-aq-item.current { background: color-mix(in oklab, var(--accent) 12%, transparent); }
1539
+ .cm-aq-item.live { background: color-mix(in oklab, var(--warn) 14%, transparent); }
1540
+ .cm-aq-dot {
1541
+ width: 8px; height: 8px;
1542
+ border-radius: 50%;
1543
+ background: var(--fg-3);
1544
+ flex: 0 0 auto;
1545
+ }
1546
+ .cm-aq-speaker { flex: 1; font-weight: 600; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1547
+ .cm-aq-dur { color: var(--fg-3); font-size: var(--fs-xs); font-variant-numeric: tabular-nums; }
1548
+ .cm-aq-live-tag {
1549
+ font-size: 10px;
1550
+ font-weight: 700;
1551
+ color: var(--warn);
1552
+ background: color-mix(in oklab, var(--warn) 18%, transparent);
1553
+ padding: 1px 6px;
1554
+ border-radius: 999px;
1555
+ letter-spacing: 0.06em;
1556
+ }
1557
+ .cm-aq-replay, .cm-aq-skip {
1558
+ background: transparent;
1559
+ color: var(--fg-2);
1560
+ border: none;
1561
+ padding: 2px 6px;
1562
+ border-radius: var(--r-1);
1563
+ cursor: pointer;
1564
+ font-size: var(--fs-sm);
1565
+ transition: background var(--dur-snap) var(--ease), color var(--dur-snap) var(--ease);
1566
+ }
1567
+ .cm-aq-replay:hover { background: color-mix(in oklab, var(--accent) 18%, transparent); color: var(--accent); }
1568
+ .cm-aq-skip:hover { background: color-mix(in oklab, var(--warn) 18%, transparent); color: var(--warn); }
1569
+
1570
+ /* ---- VoiceControls ---- */
1571
+ .cm-voice-controls {
1572
+ display: inline-flex;
1573
+ align-items: center;
1574
+ gap: 4px;
1575
+ padding: 4px;
1576
+ background: var(--bg-2);
1577
+ border: 1px solid color-mix(in oklab, var(--fg-3) 18%, transparent);
1578
+ border-radius: var(--r-2);
1579
+ }
1580
+ .cm-vc-btn {
1581
+ background: transparent;
1582
+ color: var(--fg);
1583
+ border: none;
1584
+ padding: 6px 10px;
1585
+ border-radius: var(--r-1);
1586
+ cursor: pointer;
1587
+ font-size: var(--fs-sm);
1588
+ transition: background var(--dur-snap) var(--ease), color var(--dur-snap) var(--ease);
1589
+ }
1590
+ .cm-vc-btn:hover { background: var(--bg-3); }
1591
+ .cm-vc-btn.muted {
1592
+ background: color-mix(in oklab, var(--warn) 18%, transparent);
1593
+ color: var(--warn);
1594
+ }
1595
+ .cm-vc-btn.deafened {
1596
+ background: color-mix(in oklab, var(--warn) 22%, transparent);
1597
+ color: var(--warn);
1598
+ }
1599
+ .cm-vc-btn.active {
1600
+ background: color-mix(in oklab, var(--green-2) 22%, transparent);
1601
+ color: var(--green-2);
1602
+ }
1603
+ .cm-vc-btn.danger {
1604
+ color: var(--warn);
1605
+ }
1606
+ .cm-vc-btn.danger:hover {
1607
+ background: color-mix(in oklab, var(--warn) 22%, transparent);
1608
+ }
1609
+
1610
+ /* ---- MicMonitor ---- */
1611
+ .cm-mic-monitor {
1612
+ display: flex;
1613
+ flex-direction: column;
1614
+ gap: 4px;
1615
+ padding: 6px 8px;
1616
+ background: var(--bg-2);
1617
+ border: 1px solid color-mix(in oklab, var(--fg-3) 18%, transparent);
1618
+ border-radius: var(--r-1);
1619
+ }
1620
+ .cm-mm-label {
1621
+ font-size: var(--fs-xs);
1622
+ color: var(--fg-3);
1623
+ text-transform: uppercase;
1624
+ letter-spacing: 0.04em;
1625
+ }
1626
+ .cm-mm-row {
1627
+ display: flex;
1628
+ align-items: center;
1629
+ gap: 6px;
1630
+ height: 10px;
1631
+ }
1632
+ .cm-mm-cap {
1633
+ font-size: 10px;
1634
+ color: var(--fg-3);
1635
+ width: 32px;
1636
+ flex: 0 0 auto;
1637
+ }
1638
+ .cm-mm-bar {
1639
+ height: 6px;
1640
+ border-radius: 3px;
1641
+ background: var(--fg-3);
1642
+ transition: width 60ms linear;
1643
+ min-width: 0;
1644
+ }
1645
+ .cm-mm-bar.raw { background: linear-gradient(90deg, var(--fg-3), var(--sun)); }
1646
+ .cm-mm-bar.processed { background: linear-gradient(90deg, var(--green-2), var(--accent)); }
1647
+
1648
+ /* ---- VideoLightbox ---- */
1649
+ .cm-video-lightbox {
1650
+ position: fixed;
1651
+ inset: 0;
1652
+ z-index: 1000;
1653
+ display: flex;
1654
+ align-items: center;
1655
+ justify-content: center;
1656
+ }
1657
+ .cm-vl-backdrop {
1658
+ position: absolute;
1659
+ inset: 0;
1660
+ background: color-mix(in oklab, var(--bg) 80%, black);
1661
+ backdrop-filter: blur(6px);
1662
+ cursor: pointer;
1663
+ }
1664
+ .cm-vl-content {
1665
+ position: relative;
1666
+ background: var(--bg-2);
1667
+ border: 1px solid color-mix(in oklab, var(--fg-3) 22%, transparent);
1668
+ border-radius: var(--r-2);
1669
+ padding: 16px;
1670
+ max-width: 90vw;
1671
+ max-height: 90vh;
1672
+ display: flex;
1673
+ flex-direction: column;
1674
+ gap: 8px;
1675
+ }
1676
+ .cm-vl-close {
1677
+ position: absolute;
1678
+ top: 8px; right: 8px;
1679
+ background: var(--bg-3);
1680
+ color: var(--fg);
1681
+ border: none;
1682
+ width: 28px;
1683
+ height: 28px;
1684
+ border-radius: 50%;
1685
+ cursor: pointer;
1686
+ font-size: var(--fs-sm);
1687
+ }
1688
+ .cm-vl-close:hover { background: color-mix(in oklab, var(--warn) 28%, var(--bg-3)); color: var(--warn); }
1689
+ .cm-vl-label {
1690
+ font-size: var(--fs-sm);
1691
+ color: var(--fg-2);
1692
+ font-weight: 600;
1693
+ }
1694
+ .cm-vl-video {
1695
+ max-width: 86vw;
1696
+ max-height: 80vh;
1697
+ background: black;
1698
+ border-radius: var(--r-1);
1699
+ display: block;
1700
+ }
1701
+
1702
+ /* ============================================================
1703
+ Surfaces — modals + popovers + thread panel + forum + page
1704
+ ============================================================ */
1705
+
1706
+ .cm-modal-backdrop {
1707
+ position: fixed;
1708
+ inset: 0;
1709
+ background: rgba(0, 0, 0, 0.55);
1710
+ display: flex;
1711
+ align-items: center;
1712
+ justify-content: center;
1713
+ z-index: 1000;
1714
+ }
1715
+ .cm-modal-backdrop.transparent { background: transparent; }
1716
+
1717
+ /* Thread panel */
1718
+ .cm-thread-panel {
1719
+ display: flex;
1720
+ flex-direction: column;
1721
+ width: 280px;
1722
+ min-width: 220px;
1723
+ background: var(--bg-2);
1724
+ color: var(--fg);
1725
+ border-left: 1px solid var(--bg-3);
1726
+ height: 100%;
1727
+ overflow: hidden;
1728
+ }
1729
+ .cm-tp-header {
1730
+ display: flex;
1731
+ align-items: center;
1732
+ justify-content: space-between;
1733
+ padding: 10px 12px;
1734
+ background: var(--bg-3);
1735
+ font-weight: 600;
1736
+ font-size: var(--fs-sm);
1737
+ }
1738
+ .cm-tp-title { flex: 1; }
1739
+ .cm-tp-header-actions { display: flex; gap: 4px; }
1740
+ .cm-tp-new,
1741
+ .cm-tp-close {
1742
+ background: transparent;
1743
+ color: var(--fg-2);
1744
+ border: 0;
1745
+ border-radius: 4px;
1746
+ width: 24px;
1747
+ height: 24px;
1748
+ cursor: pointer;
1749
+ font-size: 14px;
1750
+ }
1751
+ .cm-tp-new:hover,
1752
+ .cm-tp-close:hover { background: var(--bg-2); color: var(--fg); }
1753
+ .cm-tp-list { flex: 1; overflow-y: auto; padding: 4px 0; }
1754
+ .cm-tp-item {
1755
+ position: relative;
1756
+ padding: 8px 12px;
1757
+ cursor: pointer;
1758
+ border-left: 2px solid transparent;
1759
+ color: var(--fg-2);
1760
+ }
1761
+ .cm-tp-item:hover { background: var(--bg-3); color: var(--fg); }
1762
+ .cm-tp-item.active {
1763
+ background: var(--bg-3);
1764
+ border-left-color: var(--accent);
1765
+ color: var(--fg);
1766
+ }
1767
+ .cm-tp-item.unread { color: var(--fg); }
1768
+ .cm-tp-item-row {
1769
+ display: flex;
1770
+ justify-content: space-between;
1771
+ gap: 8px;
1772
+ align-items: baseline;
1773
+ }
1774
+ .cm-tp-item-title {
1775
+ font-weight: 600;
1776
+ font-size: var(--fs-sm);
1777
+ overflow: hidden;
1778
+ text-overflow: ellipsis;
1779
+ white-space: nowrap;
1780
+ flex: 1;
1781
+ }
1782
+ .cm-tp-item-time { font-size: var(--fs-xs); color: var(--fg-3); }
1783
+ .cm-tp-item-msg {
1784
+ font-size: var(--fs-xs);
1785
+ color: var(--fg-3);
1786
+ overflow: hidden;
1787
+ text-overflow: ellipsis;
1788
+ white-space: nowrap;
1789
+ margin-top: 2px;
1790
+ }
1791
+ .cm-tp-item-author { color: var(--fg-2); }
1792
+ .cm-tp-item-dot {
1793
+ position: absolute;
1794
+ top: 12px;
1795
+ right: 8px;
1796
+ width: 8px;
1797
+ height: 8px;
1798
+ border-radius: 50%;
1799
+ background: var(--accent);
1800
+ }
1801
+
1802
+ /* Forum view */
1803
+ .cm-forum-view {
1804
+ display: flex;
1805
+ flex-direction: column;
1806
+ flex: 1;
1807
+ min-height: 0;
1808
+ background: var(--bg);
1809
+ }
1810
+ .cm-fv-toolbar {
1811
+ display: flex;
1812
+ gap: 8px;
1813
+ padding: 10px 12px;
1814
+ background: var(--bg-2);
1815
+ align-items: center;
1816
+ }
1817
+ .cm-fv-search {
1818
+ flex: 1;
1819
+ padding: 6px 10px;
1820
+ background: var(--bg-3);
1821
+ border: 0;
1822
+ border-radius: 4px;
1823
+ color: var(--fg);
1824
+ font-size: var(--fs-sm);
1825
+ outline: none;
1826
+ }
1827
+ .cm-fv-search:focus { background: var(--bg); box-shadow: inset 0 0 0 1px var(--accent); }
1828
+ .cm-fv-sort {
1829
+ padding: 6px 8px;
1830
+ background: var(--bg-3);
1831
+ color: var(--fg);
1832
+ border: 0;
1833
+ border-radius: 4px;
1834
+ font-size: var(--fs-sm);
1835
+ }
1836
+ .cm-fv-new {
1837
+ padding: 6px 12px;
1838
+ background: var(--accent);
1839
+ color: var(--fg);
1840
+ border: 0;
1841
+ border-radius: 4px;
1842
+ cursor: pointer;
1843
+ font-size: var(--fs-sm);
1844
+ font-weight: 600;
1845
+ }
1846
+ .cm-fv-new:hover { filter: brightness(1.1); }
1847
+ .cm-fv-list { flex: 1; overflow-y: auto; padding: 8px 12px; }
1848
+ .cm-fv-post {
1849
+ padding: 10px 12px;
1850
+ margin-bottom: 6px;
1851
+ background: var(--bg-2);
1852
+ border-radius: 6px;
1853
+ cursor: pointer;
1854
+ border-left: 3px solid transparent;
1855
+ }
1856
+ .cm-fv-post:hover { background: var(--bg-3); border-left-color: var(--accent); }
1857
+ .cm-fv-post-head {
1858
+ display: flex;
1859
+ justify-content: space-between;
1860
+ gap: 8px;
1861
+ align-items: baseline;
1862
+ }
1863
+ .cm-fv-post-title {
1864
+ font-weight: 600;
1865
+ color: var(--fg);
1866
+ flex: 1;
1867
+ overflow: hidden;
1868
+ text-overflow: ellipsis;
1869
+ white-space: nowrap;
1870
+ }
1871
+ .cm-fv-post-meta {
1872
+ display: flex;
1873
+ gap: 8px;
1874
+ font-size: var(--fs-xs);
1875
+ color: var(--fg-3);
1876
+ }
1877
+ .cm-fv-post-author { color: var(--fg-2); }
1878
+ .cm-fv-post-snippet {
1879
+ margin-top: 4px;
1880
+ color: var(--fg-2);
1881
+ font-size: var(--fs-sm);
1882
+ overflow: hidden;
1883
+ display: -webkit-box;
1884
+ -webkit-line-clamp: 2;
1885
+ -webkit-box-orient: vertical;
1886
+ }
1887
+ .cm-fv-post-tags { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 6px; }
1888
+ .cm-fv-post-tag {
1889
+ padding: 2px 8px;
1890
+ background: var(--bg-3);
1891
+ border-radius: 10px;
1892
+ font-size: var(--fs-xs);
1893
+ color: var(--fg-2);
1894
+ }
1895
+
1896
+ /* Page view */
1897
+ .cm-page-view {
1898
+ flex: 1;
1899
+ display: flex;
1900
+ flex-direction: column;
1901
+ overflow-y: auto;
1902
+ background: var(--bg);
1903
+ padding: 20px 28px;
1904
+ }
1905
+ .cm-pv-head {
1906
+ display: flex;
1907
+ align-items: center;
1908
+ justify-content: space-between;
1909
+ margin-bottom: 16px;
1910
+ border-bottom: 1px solid var(--bg-3);
1911
+ padding-bottom: 12px;
1912
+ }
1913
+ .cm-pv-title {
1914
+ margin: 0;
1915
+ font-size: var(--fs-xl);
1916
+ font-weight: 700;
1917
+ color: var(--fg);
1918
+ }
1919
+ .cm-pv-edit {
1920
+ padding: 6px 12px;
1921
+ background: var(--bg-3);
1922
+ color: var(--fg);
1923
+ border: 0;
1924
+ border-radius: 4px;
1925
+ cursor: pointer;
1926
+ font-size: var(--fs-sm);
1927
+ }
1928
+ .cm-pv-edit:hover { background: var(--accent); }
1929
+ .cm-pv-content {
1930
+ color: var(--fg);
1931
+ font-size: var(--fs-md);
1932
+ line-height: 1.6;
1933
+ max-width: 760px;
1934
+ }
1935
+
1936
+ /* Auth modal */
1937
+ .cm-auth-modal {
1938
+ background: var(--bg-2);
1939
+ color: var(--fg);
1940
+ border-radius: 8px;
1941
+ min-width: 380px;
1942
+ max-width: 92vw;
1943
+ display: flex;
1944
+ flex-direction: column;
1945
+ overflow: hidden;
1946
+ box-shadow: 0 12px 40px rgba(0, 0, 0, 0.5);
1947
+ }
1948
+ .cm-am-head {
1949
+ display: flex;
1950
+ align-items: center;
1951
+ justify-content: space-between;
1952
+ padding: 12px 16px;
1953
+ background: var(--bg-3);
1954
+ }
1955
+ .cm-am-title { font-weight: 700; font-size: var(--fs-md); }
1956
+ .cm-am-close {
1957
+ background: transparent;
1958
+ color: var(--fg-2);
1959
+ border: 0;
1960
+ width: 28px;
1961
+ height: 28px;
1962
+ border-radius: 4px;
1963
+ cursor: pointer;
1964
+ font-size: 15px;
1965
+ }
1966
+ .cm-am-close:hover { background: var(--bg-2); color: var(--fg); }
1967
+ .cm-am-tabs {
1968
+ display: flex;
1969
+ background: var(--bg-3);
1970
+ padding: 0 8px;
1971
+ gap: 4px;
1972
+ }
1973
+ .cm-am-tab {
1974
+ flex: 1;
1975
+ padding: 8px 10px;
1976
+ background: transparent;
1977
+ color: var(--fg-2);
1978
+ border: 0;
1979
+ border-bottom: 2px solid transparent;
1980
+ cursor: pointer;
1981
+ font-size: var(--fs-sm);
1982
+ }
1983
+ .cm-am-tab:hover { color: var(--fg); }
1984
+ .cm-am-tab.active {
1985
+ color: var(--fg);
1986
+ border-bottom-color: var(--accent);
1987
+ font-weight: 600;
1988
+ }
1989
+ .cm-am-pane {
1990
+ padding: 16px;
1991
+ display: flex;
1992
+ flex-direction: column;
1993
+ gap: 10px;
1994
+ }
1995
+ .cm-am-text {
1996
+ margin: 0;
1997
+ color: var(--fg-2);
1998
+ font-size: var(--fs-sm);
1999
+ line-height: 1.5;
2000
+ }
2001
+ .cm-am-warn {
2002
+ padding: 8px 10px;
2003
+ background: var(--bg-3);
2004
+ border-left: 3px solid var(--warn);
2005
+ color: var(--fg);
2006
+ font-size: var(--fs-xs);
2007
+ border-radius: 4px;
2008
+ }
2009
+ .cm-am-textarea {
2010
+ width: 100%;
2011
+ padding: 8px 10px;
2012
+ background: var(--bg-3);
2013
+ color: var(--fg);
2014
+ border: 0;
2015
+ border-radius: 4px;
2016
+ resize: vertical;
2017
+ font-family: var(--ff-mono);
2018
+ font-size: var(--fs-sm);
2019
+ outline: none;
2020
+ }
2021
+ .cm-am-textarea:focus { box-shadow: inset 0 0 0 1px var(--accent); }
2022
+ .cm-am-btn {
2023
+ padding: 8px 14px;
2024
+ background: var(--accent);
2025
+ color: var(--fg);
2026
+ border: 0;
2027
+ border-radius: 4px;
2028
+ cursor: pointer;
2029
+ font-weight: 600;
2030
+ font-size: var(--fs-sm);
2031
+ }
2032
+ .cm-am-btn:hover { filter: brightness(1.1); }
2033
+ .cm-am-btn:disabled { opacity: 0.6; cursor: not-allowed; }
2034
+ .cm-am-error {
2035
+ margin: 0 16px 16px;
2036
+ padding: 8px 10px;
2037
+ background: var(--bg-3);
2038
+ border-left: 3px solid var(--warn);
2039
+ color: var(--warn);
2040
+ font-size: var(--fs-xs);
2041
+ border-radius: 4px;
2042
+ }
2043
+
2044
+ /* Settings popover */
2045
+ .cm-settings-popover {
2046
+ position: absolute;
2047
+ background: var(--bg-2);
2048
+ color: var(--fg);
2049
+ border-radius: 6px;
2050
+ min-width: 260px;
2051
+ max-width: 360px;
2052
+ max-height: 70vh;
2053
+ overflow-y: auto;
2054
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.5);
2055
+ padding: 4px 0;
2056
+ }
2057
+ .cm-sp-head {
2058
+ display: flex;
2059
+ align-items: center;
2060
+ justify-content: space-between;
2061
+ padding: 8px 12px;
2062
+ background: var(--bg-3);
2063
+ }
2064
+ .cm-sp-title { font-weight: 600; font-size: var(--fs-sm); }
2065
+ .cm-sp-close {
2066
+ background: transparent;
2067
+ color: var(--fg-2);
2068
+ border: 0;
2069
+ width: 22px;
2070
+ height: 22px;
2071
+ border-radius: 4px;
2072
+ cursor: pointer;
2073
+ }
2074
+ .cm-sp-close:hover { background: var(--bg-2); color: var(--fg); }
2075
+ .cm-sp-section {
2076
+ padding: 6px 0;
2077
+ border-bottom: 1px solid var(--bg-3);
2078
+ }
2079
+ .cm-sp-section:last-child { border-bottom: 0; }
2080
+ .cm-sp-section-label {
2081
+ padding: 4px 12px;
2082
+ font-size: var(--fs-xs);
2083
+ color: var(--fg-3);
2084
+ text-transform: uppercase;
2085
+ letter-spacing: var(--tr-wide);
2086
+ }
2087
+ .cm-sp-header {
2088
+ padding: 6px 12px;
2089
+ font-weight: 600;
2090
+ font-size: var(--fs-xs);
2091
+ color: var(--fg-3);
2092
+ text-transform: uppercase;
2093
+ }
2094
+ .cm-sp-text {
2095
+ padding: 4px 12px;
2096
+ font-size: var(--fs-xs);
2097
+ color: var(--fg-3);
2098
+ }
2099
+ .cm-sp-row {
2100
+ display: flex;
2101
+ align-items: center;
2102
+ justify-content: space-between;
2103
+ gap: 8px;
2104
+ padding: 6px 12px;
2105
+ font-size: var(--fs-sm);
2106
+ }
2107
+ .cm-sp-row:hover { background: var(--bg-3); }
2108
+ .cm-sp-row-label { color: var(--fg); }
2109
+ .cm-sp-toggle input[type="checkbox"] { cursor: pointer; }
2110
+ .cm-sp-select select {
2111
+ background: var(--bg-3);
2112
+ color: var(--fg);
2113
+ border: 0;
2114
+ border-radius: 4px;
2115
+ padding: 3px 6px;
2116
+ font-size: var(--fs-sm);
2117
+ }
2118
+ .cm-sp-btn {
2119
+ flex: 1;
2120
+ padding: 6px 10px;
2121
+ background: var(--bg-3);
2122
+ color: var(--fg);
2123
+ border: 0;
2124
+ border-radius: 4px;
2125
+ cursor: pointer;
2126
+ font-size: var(--fs-sm);
2127
+ }
2128
+ .cm-sp-btn:hover { background: var(--accent); }
2129
+ .cm-sp-btn.danger { color: var(--warn); }
2130
+ .cm-sp-btn.danger:hover { background: var(--warn); color: var(--bg); }
2131
+
2132
+ /* Voice settings modal */
2133
+ .cm-voice-settings-modal {
2134
+ background: var(--bg-2);
2135
+ color: var(--fg);
2136
+ border-radius: 8px;
2137
+ min-width: 440px;
2138
+ max-width: 92vw;
2139
+ max-height: 88vh;
2140
+ display: flex;
2141
+ flex-direction: column;
2142
+ overflow: hidden;
2143
+ box-shadow: 0 12px 40px rgba(0, 0, 0, 0.5);
2144
+ }
2145
+ .cm-vsm-head {
2146
+ display: flex;
2147
+ align-items: center;
2148
+ justify-content: space-between;
2149
+ padding: 12px 16px;
2150
+ background: var(--bg-3);
2151
+ flex: 0 0 auto;
2152
+ }
2153
+ .cm-vsm-title { font-weight: 700; font-size: var(--fs-md); }
2154
+ .cm-vsm-close {
2155
+ background: transparent;
2156
+ color: var(--fg-2);
2157
+ border: 0;
2158
+ width: 28px;
2159
+ height: 28px;
2160
+ border-radius: 4px;
2161
+ cursor: pointer;
2162
+ font-size: 15px;
2163
+ }
2164
+ .cm-vsm-close:hover { background: var(--bg-2); color: var(--fg); }
2165
+ .cm-vsm-section {
2166
+ padding: 10px 16px;
2167
+ border-bottom: 1px solid var(--bg-3);
2168
+ overflow-y: auto;
2169
+ }
2170
+ .cm-vsm-section:last-of-type { border-bottom: 0; }
2171
+ .cm-vsm-section-label {
2172
+ font-size: var(--fs-xs);
2173
+ color: var(--fg-3);
2174
+ text-transform: uppercase;
2175
+ letter-spacing: var(--tr-wide);
2176
+ margin-bottom: 6px;
2177
+ font-weight: 600;
2178
+ }
2179
+ .cm-vsm-row {
2180
+ display: flex;
2181
+ align-items: center;
2182
+ gap: 10px;
2183
+ padding: 6px 0;
2184
+ font-size: var(--fs-sm);
2185
+ }
2186
+ .cm-vsm-row-label { flex: 0 0 140px; color: var(--fg); }
2187
+ .cm-vsm-row select,
2188
+ .cm-vsm-row input[type="range"] { flex: 1; }
2189
+ .cm-vsm-row select {
2190
+ background: var(--bg-3);
2191
+ color: var(--fg);
2192
+ border: 0;
2193
+ border-radius: 4px;
2194
+ padding: 4px 8px;
2195
+ font-size: var(--fs-sm);
2196
+ }
2197
+ .cm-vsm-row-val {
2198
+ flex: 0 0 64px;
2199
+ text-align: right;
2200
+ color: var(--fg-2);
2201
+ font-size: var(--fs-xs);
2202
+ font-family: var(--ff-mono);
2203
+ }
2204
+ .cm-vsm-toggle input[type="checkbox"] { cursor: pointer; }
2205
+ .cm-vsm-radio {
2206
+ display: flex;
2207
+ gap: 4px;
2208
+ flex: 1;
2209
+ flex-wrap: wrap;
2210
+ }
2211
+ .cm-vsm-radio-btn {
2212
+ padding: 6px 12px;
2213
+ background: var(--bg-3);
2214
+ color: var(--fg-2);
2215
+ border: 0;
2216
+ border-radius: 4px;
2217
+ cursor: pointer;
2218
+ font-size: var(--fs-sm);
2219
+ }
2220
+ .cm-vsm-radio-btn:hover { color: var(--fg); }
2221
+ .cm-vsm-radio-btn.active {
2222
+ background: var(--accent);
2223
+ color: var(--fg);
2224
+ font-weight: 600;
2225
+ }
2226
+ .cm-vsm-admin { background: var(--bg); }
2227
+ .cm-vsm-actions {
2228
+ display: flex;
2229
+ justify-content: flex-end;
2230
+ gap: 8px;
2231
+ padding: 12px 16px;
2232
+ background: var(--bg-3);
2233
+ flex: 0 0 auto;
2234
+ }
2235
+ .cm-vsm-cancel {
2236
+ padding: 8px 16px;
2237
+ background: transparent;
2238
+ color: var(--fg-2);
2239
+ border: 0;
2240
+ border-radius: 4px;
2241
+ cursor: pointer;
2242
+ font-size: var(--fs-sm);
2243
+ }
2244
+ .cm-vsm-cancel:hover { background: var(--bg-2); color: var(--fg); }
2245
+ .cm-vsm-save {
2246
+ padding: 8px 16px;
2247
+ background: var(--green-2);
2248
+ color: var(--fg);
2249
+ border: 0;
2250
+ border-radius: 4px;
2251
+ cursor: pointer;
2252
+ font-size: var(--fs-sm);
2253
+ font-weight: 600;
2254
+ }
2255
+ .cm-vsm-save:hover { filter: brightness(1.1); }