vibespot 0.4.4 → 0.5.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.
package/ui/styles.css CHANGED
@@ -45,6 +45,7 @@
45
45
  /* Layout */
46
46
  --topbar-h: 56px;
47
47
  --statusbar-h: 28px;
48
+ --rail-w: 48px;
48
49
  }
49
50
 
50
51
  * { margin: 0; padding: 0; box-sizing: border-box; }
@@ -61,6 +62,17 @@ html, body {
61
62
  -moz-osx-font-smoothing: grayscale;
62
63
  }
63
64
 
65
+ body { display: flex; }
66
+
67
+ .app-body {
68
+ flex: 1;
69
+ min-width: 0;
70
+ position: relative;
71
+ display: flex;
72
+ flex-direction: column;
73
+ height: 100vh;
74
+ }
75
+
64
76
  .hidden { display: none !important; }
65
77
  .app { display: contents; }
66
78
 
@@ -78,154 +90,7 @@ html, body {
78
90
  ================================================================ */
79
91
  .setup {
80
92
  height: 100vh;
81
- display: flex;
82
- overflow: hidden;
83
- }
84
-
85
- /* Sidebar — project list */
86
- .setup-sidebar {
87
- width: 260px;
88
- min-width: 260px;
89
- display: flex;
90
- flex-direction: column;
91
- background: var(--bg-panel-solid);
92
- border-right: 1px solid var(--border);
93
- padding-top: var(--topbar-h);
94
- }
95
-
96
- .setup-sidebar__header {
97
- display: flex;
98
- align-items: center;
99
- justify-content: space-between;
100
- padding: 16px 16px 12px;
101
- font-size: 11px;
102
- font-weight: 600;
103
- text-transform: uppercase;
104
- letter-spacing: 0.08em;
105
- color: var(--text-dim);
106
- }
107
-
108
- .setup-sidebar__count {
109
- background: var(--bg-active);
110
- color: var(--text-dim);
111
- padding: 1px 7px;
112
- border-radius: var(--radius-pill);
113
- font-size: 11px;
114
- }
115
-
116
- .setup-sidebar__list {
117
- flex: 1;
118
- overflow-y: auto;
119
- padding: 0 8px;
120
- }
121
-
122
- .setup-sidebar__item {
123
- display: flex;
124
- align-items: center;
125
- width: 100%;
126
- border-radius: 8px;
127
- transition: all 0.15s;
128
- position: relative;
129
- }
130
- .setup-sidebar__item:hover {
131
- background: var(--bg-hover);
132
- }
133
- .setup-sidebar__item-open {
134
- display: flex;
135
- align-items: center;
136
- gap: 10px;
137
- flex: 1;
138
- min-width: 0;
139
- padding: 10px 12px;
140
- border: none;
141
- background: none;
142
- color: var(--text);
143
- font-family: var(--font);
144
- font-size: 13px;
145
- text-align: left;
146
- cursor: pointer;
147
- }
148
- .setup-sidebar__item-delete {
149
- opacity: 0;
150
- border: none;
151
- background: none;
152
- color: var(--text-muted);
153
- font-size: 18px;
154
- line-height: 1;
155
- cursor: pointer;
156
- padding: 4px 10px 4px 4px;
157
- flex-shrink: 0;
158
- transition: opacity 0.1s, color 0.1s;
159
- }
160
- .setup-sidebar__item:hover .setup-sidebar__item-delete { opacity: 1; }
161
- .setup-sidebar__item-delete:hover { color: var(--error); }
162
-
163
- .setup-sidebar__item-icon {
164
- width: 28px;
165
- height: 28px;
166
- display: flex;
167
- align-items: center;
168
- justify-content: center;
169
- border-radius: 8px;
170
- background: var(--accent-tint);
171
- color: var(--accent);
172
- font-size: 12px;
173
- font-weight: 600;
174
- flex-shrink: 0;
175
- }
176
-
177
- .setup-sidebar__item-info {
178
- flex: 1;
179
- min-width: 0;
180
- }
181
-
182
- .setup-sidebar__item-name {
183
- display: block;
184
- font-weight: 500;
185
- font-size: 13px;
186
- white-space: nowrap;
187
93
  overflow: hidden;
188
- text-overflow: ellipsis;
189
- }
190
-
191
- .setup-sidebar__item-meta {
192
- display: block;
193
- font-size: 11px;
194
- color: var(--text-muted);
195
- margin-top: 1px;
196
- }
197
-
198
- .setup-sidebar__empty {
199
- padding: 20px 16px;
200
- text-align: center;
201
- font-size: 13px;
202
- color: var(--text-muted);
203
- line-height: 1.5;
204
- }
205
-
206
- .setup-sidebar__footer {
207
- padding: 12px;
208
- border-top: 1px solid var(--border);
209
- }
210
-
211
- .setup-sidebar__settings-btn {
212
- display: flex;
213
- align-items: center;
214
- gap: 8px;
215
- width: 100%;
216
- padding: 8px 12px;
217
- border: none;
218
- background: none;
219
- color: var(--text-dim);
220
- font-family: var(--font);
221
- font-size: 13px;
222
- cursor: pointer;
223
- border-radius: 8px;
224
- transition: all 0.15s;
225
- }
226
- .setup-sidebar__settings-btn:hover {
227
- background: var(--bg-hover);
228
- color: var(--text);
229
94
  }
230
95
 
231
96
  /* Main content area */
@@ -403,6 +268,7 @@ html, body {
403
268
 
404
269
  @keyframes spin { to { transform: rotate(360deg); } }
405
270
 
271
+
406
272
  .setup__error {
407
273
  padding: 10px 14px;
408
274
  border-radius: var(--radius);
@@ -945,6 +811,60 @@ html, body {
945
811
  margin-bottom: 20px;
946
812
  padding-left: 24px;
947
813
  }
814
+ .confirm-dialog__toggle {
815
+ display: flex;
816
+ align-items: center;
817
+ gap: 10px;
818
+ cursor: pointer;
819
+ margin-bottom: 4px;
820
+ }
821
+ .confirm-dialog__toggle-switch {
822
+ position: relative;
823
+ width: 36px;
824
+ height: 20px;
825
+ flex-shrink: 0;
826
+ }
827
+ .confirm-dialog__toggle-switch input {
828
+ opacity: 0;
829
+ width: 0;
830
+ height: 0;
831
+ }
832
+ .confirm-dialog__toggle-slider {
833
+ position: absolute;
834
+ inset: 0;
835
+ background: var(--bg-input);
836
+ border-radius: 20px;
837
+ border: 1px solid var(--border);
838
+ transition: background 0.2s;
839
+ }
840
+ .confirm-dialog__toggle-slider::before {
841
+ content: "";
842
+ position: absolute;
843
+ width: 14px;
844
+ height: 14px;
845
+ left: 2px;
846
+ bottom: 2px;
847
+ background: var(--text-dim);
848
+ border-radius: 50%;
849
+ transition: transform 0.2s, background 0.2s;
850
+ }
851
+ .confirm-dialog__toggle-switch input:checked + .confirm-dialog__toggle-slider {
852
+ background: var(--error);
853
+ }
854
+ .confirm-dialog__toggle-switch input:checked + .confirm-dialog__toggle-slider::before {
855
+ transform: translateX(16px);
856
+ background: white;
857
+ }
858
+ .confirm-dialog__toggle-label {
859
+ font-size: 13px;
860
+ color: var(--text-dim);
861
+ }
862
+ .confirm-dialog__toggle-warn {
863
+ font-size: 11px;
864
+ color: var(--error);
865
+ padding-left: 46px;
866
+ margin-bottom: 16px;
867
+ }
948
868
  .confirm-dialog__input {
949
869
  width: 100%;
950
870
  padding: 8px 12px;
@@ -1036,6 +956,7 @@ html, body {
1036
956
  flex-direction: column;
1037
957
  background: var(--bg-panel-solid);
1038
958
  border-right: 1px solid var(--border);
959
+ position: relative;
1039
960
  }
1040
961
 
1041
962
  .panel--right {
@@ -1057,28 +978,101 @@ html, body {
1057
978
  }
1058
979
 
1059
980
  /* ================================================================
1060
- MODULE LIST
981
+ MODULE BAR (button at top of left panel)
1061
982
  ================================================================ */
1062
- .module-list {
983
+ .module-bar {
1063
984
  border-bottom: 1px solid var(--border);
1064
- max-height: 200px;
1065
- overflow-y: auto;
985
+ padding: 8px 12px;
986
+ flex-shrink: 0;
1066
987
  }
1067
988
 
1068
- .module-list__header {
989
+ .module-bar__btn {
1069
990
  display: flex;
1070
991
  align-items: center;
1071
- justify-content: space-between;
1072
- padding: 10px 16px;
992
+ gap: 8px;
993
+ width: 100%;
994
+ padding: 8px 12px;
995
+ background: var(--bg-input);
996
+ border: 1px solid var(--border);
997
+ border-radius: var(--radius);
998
+ color: var(--text);
999
+ cursor: pointer;
1073
1000
  font-family: var(--font);
1001
+ font-size: 13px;
1002
+ font-weight: 500;
1003
+ transition: all 0.15s;
1004
+ }
1005
+
1006
+ .module-bar__btn:hover {
1007
+ border-color: var(--accent);
1008
+ background: var(--accent-tint);
1009
+ }
1010
+
1011
+ .module-bar__btn svg {
1012
+ color: var(--text-dim);
1013
+ flex-shrink: 0;
1014
+ }
1015
+
1016
+ .module-bar__count {
1017
+ margin-left: auto;
1018
+ background: var(--bg-active);
1019
+ color: var(--text-dim);
1020
+ padding: 1px 7px;
1021
+ border-radius: var(--radius-pill);
1074
1022
  font-size: 11px;
1023
+ }
1024
+
1025
+ /* ================================================================
1026
+ MODULE SLIDEOUT (overlays chat from the left)
1027
+ ================================================================ */
1028
+ .module-slideout {
1029
+ position: absolute;
1030
+ top: 0;
1031
+ left: 0;
1032
+ width: 100%;
1033
+ height: 100%;
1034
+ background: var(--bg-panel-solid);
1035
+ z-index: 50;
1036
+ display: flex;
1037
+ flex-direction: column;
1038
+ transform: translateX(-100%);
1039
+ transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);
1040
+ pointer-events: none;
1041
+ }
1042
+
1043
+ .module-slideout.open {
1044
+ transform: translateX(0);
1045
+ pointer-events: auto;
1046
+ }
1047
+
1048
+ .module-slideout__view {
1049
+ display: flex;
1050
+ flex-direction: column;
1051
+ flex: 1;
1052
+ min-height: 0;
1053
+ }
1054
+
1055
+ .module-slideout__view.hidden {
1056
+ display: none;
1057
+ }
1058
+
1059
+ .module-slideout__header {
1060
+ display: flex;
1061
+ align-items: center;
1062
+ gap: 8px;
1063
+ padding: 12px 16px;
1064
+ border-bottom: 1px solid var(--border);
1065
+ flex-shrink: 0;
1066
+ }
1067
+
1068
+ .module-slideout__title {
1069
+ font-family: var(--font-display);
1070
+ font-size: 14px;
1075
1071
  font-weight: 600;
1076
- text-transform: uppercase;
1077
- letter-spacing: 0.08em;
1078
- color: var(--text-dim);
1072
+ color: var(--text);
1079
1073
  }
1080
1074
 
1081
- .module-list__count {
1075
+ .module-slideout__count {
1082
1076
  background: var(--bg-active);
1083
1077
  color: var(--text-dim);
1084
1078
  padding: 1px 7px;
@@ -1086,13 +1080,13 @@ html, body {
1086
1080
  font-size: 11px;
1087
1081
  }
1088
1082
 
1089
- .module-list__add-btn {
1083
+ .module-slideout__add {
1090
1084
  margin-left: auto;
1091
1085
  background: none;
1092
1086
  border: 1px solid var(--border);
1093
1087
  color: var(--text-dim);
1094
- width: 22px;
1095
- height: 22px;
1088
+ width: 24px;
1089
+ height: 24px;
1096
1090
  border-radius: var(--radius-sm);
1097
1091
  cursor: pointer;
1098
1092
  font-size: 14px;
@@ -1102,26 +1096,76 @@ html, body {
1102
1096
  transition: all 0.15s;
1103
1097
  }
1104
1098
 
1105
- .module-list__add-btn:hover {
1099
+ .module-slideout__add:hover {
1106
1100
  border-color: var(--accent);
1107
1101
  color: var(--accent);
1108
1102
  }
1109
1103
 
1110
- /* Module library dropdown */
1111
- .module-library-dropdown {
1112
- position: relative;
1113
- background: var(--bg-panel-solid);
1114
- border: 1px solid var(--border);
1115
- border-radius: var(--radius);
1116
- margin: 0 8px 8px;
1117
- max-height: 180px;
1118
- overflow-y: auto;
1119
- }
1120
-
1121
- .module-library-dropdown__empty {
1122
- padding: 12px;
1123
- font-size: 12px;
1124
- color: var(--text-dim);
1104
+ .module-slideout__close {
1105
+ width: 24px;
1106
+ height: 24px;
1107
+ display: flex;
1108
+ align-items: center;
1109
+ justify-content: center;
1110
+ background: none;
1111
+ border: none;
1112
+ color: var(--text-dim);
1113
+ font-size: 18px;
1114
+ cursor: pointer;
1115
+ border-radius: var(--radius-sm);
1116
+ flex-shrink: 0;
1117
+ }
1118
+
1119
+ .module-slideout__close:hover {
1120
+ background: var(--bg-hover);
1121
+ color: var(--text);
1122
+ }
1123
+
1124
+ .module-slideout__back {
1125
+ background: none;
1126
+ border: none;
1127
+ color: var(--text-dim);
1128
+ font-size: 18px;
1129
+ cursor: pointer;
1130
+ padding: 2px 4px;
1131
+ border-radius: var(--radius-sm);
1132
+ transition: color 0.15s;
1133
+ }
1134
+
1135
+ .module-slideout__back:hover {
1136
+ color: var(--text);
1137
+ }
1138
+
1139
+ .module-slideout__items {
1140
+ flex: 1;
1141
+ overflow-y: auto;
1142
+ padding: 8px;
1143
+ }
1144
+
1145
+ .module-slideout .module-library-dropdown {
1146
+ margin: 0 8px 8px;
1147
+ }
1148
+
1149
+ .module-slideout .field-editor__content {
1150
+ flex: 1;
1151
+ overflow-y: auto;
1152
+ }
1153
+
1154
+ /* Module library dropdown */
1155
+ .module-library-dropdown {
1156
+ position: relative;
1157
+ background: var(--bg-panel-solid);
1158
+ border: 1px solid var(--border);
1159
+ border-radius: var(--radius);
1160
+ margin: 0 8px 8px;
1161
+ max-height: 180px;
1162
+ overflow-y: auto;
1163
+ }
1164
+
1165
+ .module-library-dropdown__empty {
1166
+ padding: 12px;
1167
+ font-size: 12px;
1168
+ color: var(--text-dim);
1125
1169
  text-align: center;
1126
1170
  }
1127
1171
 
@@ -1153,18 +1197,14 @@ html, body {
1153
1197
  color: var(--text-dim);
1154
1198
  }
1155
1199
 
1156
- .module-list__items {
1157
- padding: 0 8px 8px;
1158
- }
1159
-
1160
1200
  .module-item {
1161
1201
  display: flex;
1162
1202
  align-items: center;
1163
- gap: 8px;
1164
- padding: 6px 8px;
1203
+ gap: 10px;
1204
+ padding: 10px 12px;
1165
1205
  border-radius: 8px;
1166
1206
  cursor: pointer;
1167
- font-size: 13px;
1207
+ font-size: 14px;
1168
1208
  color: var(--text-dim);
1169
1209
  transition: all 0.15s;
1170
1210
  }
@@ -1178,38 +1218,61 @@ html, body {
1178
1218
  }
1179
1219
 
1180
1220
  .module-item__drag {
1181
- cursor: grab;
1182
- color: var(--accent);
1183
- opacity: 0.5;
1184
- font-size: 11px;
1221
+ color: var(--text-muted);
1222
+ font-size: 14px;
1185
1223
  line-height: 1;
1224
+ pointer-events: none;
1186
1225
  }
1187
- .module-item:hover .module-item__drag { opacity: 1; }
1188
1226
 
1189
1227
  .module-item__name { flex: 1; }
1190
1228
 
1191
1229
  .module-item__edit {
1192
1230
  opacity: 0;
1193
1231
  color: var(--accent);
1194
- font-size: 12px;
1232
+ font-size: 20px;
1195
1233
  cursor: pointer;
1196
- padding: 2px;
1197
- transition: opacity 0.1s;
1234
+ width: 32px;
1235
+ height: 32px;
1236
+ display: flex;
1237
+ align-items: center;
1238
+ justify-content: center;
1239
+ border-radius: 6px;
1240
+ transition: opacity 0.1s, background 0.1s;
1198
1241
  }
1199
1242
  .module-item:hover .module-item__edit { opacity: 1; }
1200
- .module-item__edit:hover { color: var(--accent-hover); }
1243
+ .module-item__edit:hover { color: var(--accent-hover); background: var(--bg-hover); }
1201
1244
 
1202
1245
  .module-item__delete {
1203
1246
  opacity: 0;
1204
1247
  color: var(--accent);
1205
- font-size: 15px;
1248
+ font-size: 22px;
1206
1249
  cursor: pointer;
1207
- padding: 2px;
1208
- transition: opacity 0.1s;
1250
+ width: 32px;
1251
+ height: 32px;
1252
+ display: flex;
1253
+ align-items: center;
1254
+ justify-content: center;
1255
+ border-radius: 6px;
1256
+ transition: opacity 0.1s, background 0.1s;
1209
1257
  line-height: 1;
1210
1258
  }
1211
1259
  .module-item:hover .module-item__delete { opacity: 1; }
1212
- .module-item__delete:hover { color: var(--accent-hover); }
1260
+ .module-item__delete:hover { color: var(--accent-hover); background: var(--bg-hover); }
1261
+
1262
+ /* Drag-and-drop animation */
1263
+ .module-item--dragging {
1264
+ opacity: 0.85;
1265
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.3);
1266
+ z-index: 100;
1267
+ position: relative;
1268
+ background: var(--bg-panel-solid);
1269
+ border: 1px solid var(--accent-glow);
1270
+ border-radius: 8px;
1271
+ }
1272
+
1273
+ .module-item--placeholder {
1274
+ transition: transform 0.2s cubic-bezier(0.2, 0, 0, 1);
1275
+ }
1213
1276
 
1214
1277
  /* ================================================================
1215
1278
  CHAT
@@ -1332,7 +1395,7 @@ html, body {
1332
1395
  .chat-msg {
1333
1396
  display: flex;
1334
1397
  align-items: flex-start;
1335
- gap: 10px;
1398
+ gap: 6px;
1336
1399
  margin-bottom: 16px;
1337
1400
  animation: fadeIn 0.2s ease;
1338
1401
  }
@@ -1353,14 +1416,14 @@ html, body {
1353
1416
  .chat-msg--user .chat-msg__bubble {
1354
1417
  background: var(--accent-gradient);
1355
1418
  color: white;
1356
- border-radius: 16px 16px 4px 16px;
1419
+ border-radius: 16px 4px 16px 16px;
1357
1420
  max-width: 85%;
1358
1421
  }
1359
1422
 
1360
1423
  .chat-msg--assistant .chat-msg__bubble {
1361
1424
  background: var(--bg-input);
1362
1425
  color: var(--text);
1363
- border-radius: 16px 16px 16px 4px;
1426
+ border-radius: 4px 16px 16px 16px;
1364
1427
  max-width: 95%;
1365
1428
  border: 1px solid var(--border);
1366
1429
  }
@@ -1377,6 +1440,7 @@ html, body {
1377
1440
  font-weight: 600;
1378
1441
  flex-shrink: 0;
1379
1442
  font-family: var(--font-display);
1443
+ margin-top: 20px;
1380
1444
  }
1381
1445
  .chat-msg__avatar--user {
1382
1446
  background: var(--accent-gradient);
@@ -1394,6 +1458,15 @@ html, body {
1394
1458
  min-width: 0;
1395
1459
  }
1396
1460
 
1461
+ .chat-msg--user .chat-msg__content {
1462
+ flex: 0 1 auto;
1463
+ text-align: right;
1464
+ }
1465
+
1466
+ .chat-msg--user .chat-msg__meta {
1467
+ text-align: right;
1468
+ }
1469
+
1397
1470
  /* Header (sender + time) */
1398
1471
  .chat-msg__header {
1399
1472
  display: flex;
@@ -1659,52 +1732,11 @@ html, body {
1659
1732
  }
1660
1733
 
1661
1734
  /* ================================================================
1662
- FIELD EDITOR SIDEBAR
1735
+ FIELD EDITOR (inside module slideout)
1663
1736
  ================================================================ */
1664
- .field-editor {
1665
- width: 0;
1666
- overflow: hidden;
1667
- background: var(--bg-panel-solid);
1668
- border-left: 1px solid var(--border);
1669
- transition: width 0.2s ease;
1670
- flex-shrink: 0;
1671
- }
1672
-
1673
- .field-editor.open { width: 280px; }
1674
-
1675
- .field-editor__header {
1676
- display: flex;
1677
- align-items: center;
1678
- justify-content: space-between;
1679
- padding: 12px 16px;
1680
- border-bottom: 1px solid var(--border);
1681
- }
1682
-
1683
- .field-editor__header h3 {
1684
- font-family: var(--font-display);
1685
- font-size: 14px;
1686
- font-weight: 600;
1687
- }
1688
-
1689
- .field-editor__close {
1690
- width: 24px;
1691
- height: 24px;
1692
- display: flex;
1693
- align-items: center;
1694
- justify-content: center;
1695
- background: none;
1696
- border: none;
1697
- color: var(--text-dim);
1698
- font-size: 18px;
1699
- cursor: pointer;
1700
- border-radius: var(--radius-sm);
1701
- }
1702
- .field-editor__close:hover { background: var(--bg-hover); color: var(--text); }
1703
-
1704
1737
  .field-editor__content {
1705
1738
  padding: 12px 16px;
1706
1739
  overflow-y: auto;
1707
- max-height: calc(100vh - var(--topbar-h) - var(--statusbar-h) - 50px);
1708
1740
  }
1709
1741
 
1710
1742
  /* Field editor items */
@@ -2337,7 +2369,7 @@ html, body {
2337
2369
  .setup-topbar {
2338
2370
  position: fixed;
2339
2371
  top: 0;
2340
- left: 0;
2372
+ left: 220px;
2341
2373
  right: 0;
2342
2374
  height: var(--topbar-h);
2343
2375
  display: flex;
@@ -2674,3 +2706,406 @@ html, body {
2674
2706
  .deploy-success__link:hover {
2675
2707
  filter: brightness(1.1);
2676
2708
  }
2709
+
2710
+ /* ================================================================
2711
+ PROJECT RAIL (Discord-style persistent sidebar)
2712
+ ================================================================ */
2713
+ .project-rail {
2714
+ width: var(--rail-w);
2715
+ min-width: var(--rail-w);
2716
+ height: 100vh;
2717
+ background: var(--bg);
2718
+ border-right: 1px solid var(--border);
2719
+ display: flex;
2720
+ flex-direction: column;
2721
+ align-items: center;
2722
+ padding: 12px 0;
2723
+ gap: 4px;
2724
+ overflow-y: auto;
2725
+ overflow-x: hidden;
2726
+ z-index: 100;
2727
+ transition: width 0.2s ease, min-width 0.2s ease;
2728
+ }
2729
+
2730
+ /* Expanded state (setup screen) */
2731
+ .project-rail--expanded {
2732
+ width: 220px;
2733
+ min-width: 220px;
2734
+ align-items: stretch;
2735
+ padding: 0;
2736
+ }
2737
+
2738
+ .project-rail__header {
2739
+ display: none;
2740
+ }
2741
+
2742
+ .project-rail--expanded .project-rail__header {
2743
+ display: flex;
2744
+ align-items: center;
2745
+ justify-content: space-between;
2746
+ padding: 16px 16px 8px;
2747
+ flex-shrink: 0;
2748
+ }
2749
+
2750
+ .project-rail__title {
2751
+ font-family: var(--font-display);
2752
+ font-size: 14px;
2753
+ font-weight: 600;
2754
+ color: var(--text);
2755
+ }
2756
+
2757
+ .project-rail__count {
2758
+ background: var(--bg-active);
2759
+ color: var(--text-dim);
2760
+ padding: 1px 7px;
2761
+ border-radius: var(--radius-pill);
2762
+ font-size: 11px;
2763
+ }
2764
+
2765
+ .project-rail__footer {
2766
+ display: none;
2767
+ margin-top: auto;
2768
+ border-top: 1px solid var(--border);
2769
+ padding: 8px;
2770
+ flex-shrink: 0;
2771
+ }
2772
+
2773
+ .project-rail--expanded .project-rail__footer {
2774
+ display: flex;
2775
+ flex-direction: column;
2776
+ gap: 4px;
2777
+ }
2778
+
2779
+ .project-rail__settings-btn {
2780
+ display: flex;
2781
+ align-items: center;
2782
+ gap: 8px;
2783
+ width: 100%;
2784
+ padding: 8px 12px;
2785
+ border: none;
2786
+ background: none;
2787
+ color: var(--text-dim);
2788
+ font-family: var(--font);
2789
+ font-size: 13px;
2790
+ cursor: pointer;
2791
+ border-radius: 8px;
2792
+ transition: all 0.15s;
2793
+ }
2794
+
2795
+ .project-rail__settings-btn:hover {
2796
+ background: var(--bg-hover);
2797
+ color: var(--text);
2798
+ }
2799
+
2800
+ .project-rail__settings-label {
2801
+ display: none;
2802
+ }
2803
+
2804
+ .project-rail--expanded .project-rail__settings-label {
2805
+ display: inline;
2806
+ }
2807
+
2808
+ .project-rail--expanded .project-rail__add {
2809
+ width: calc(100% - 16px);
2810
+ margin-left: 8px;
2811
+ margin-right: 8px;
2812
+ border-radius: 8px;
2813
+ height: 36px;
2814
+ }
2815
+
2816
+ .project-rail__items {
2817
+ display: flex;
2818
+ flex-direction: column;
2819
+ align-items: center;
2820
+ gap: 4px;
2821
+ width: 100%;
2822
+ overflow-y: auto;
2823
+ }
2824
+
2825
+ .project-rail--expanded .project-rail__items {
2826
+ padding: 4px 8px;
2827
+ gap: 2px;
2828
+ }
2829
+
2830
+ .project-rail__item {
2831
+ width: 36px;
2832
+ height: 36px;
2833
+ border-radius: 50%;
2834
+ border: none;
2835
+ display: flex;
2836
+ align-items: center;
2837
+ justify-content: center;
2838
+ font-size: 13px;
2839
+ font-weight: 600;
2840
+ font-family: var(--font-display);
2841
+ background: var(--bg-input);
2842
+ color: var(--text-dim);
2843
+ cursor: pointer;
2844
+ transition: border-radius 0.2s, background 0.2s;
2845
+ }
2846
+
2847
+ .project-rail__item:hover {
2848
+ border-radius: 30%;
2849
+ background: var(--accent-tint);
2850
+ color: var(--text);
2851
+ }
2852
+
2853
+ .project-rail__item--active {
2854
+ background: var(--accent-gradient);
2855
+ color: white;
2856
+ border-radius: 30%;
2857
+ }
2858
+
2859
+ /* Expanded item (bubble + name + meta) */
2860
+ .project-rail--expanded .project-rail__item {
2861
+ width: 100%;
2862
+ border-radius: var(--radius-sm);
2863
+ height: auto;
2864
+ padding: 8px 10px;
2865
+ gap: 10px;
2866
+ justify-content: flex-start;
2867
+ }
2868
+
2869
+ .project-rail--expanded .project-rail__item--active {
2870
+ border-radius: var(--radius-sm);
2871
+ }
2872
+
2873
+ .project-rail__item-bubble {
2874
+ width: 28px;
2875
+ height: 28px;
2876
+ border-radius: 8px;
2877
+ background: var(--accent-tint);
2878
+ color: var(--accent);
2879
+ font-size: 12px;
2880
+ font-weight: 600;
2881
+ display: flex;
2882
+ align-items: center;
2883
+ justify-content: center;
2884
+ flex-shrink: 0;
2885
+ font-family: var(--font-display);
2886
+ }
2887
+
2888
+ .project-rail__item--active .project-rail__item-bubble {
2889
+ background: rgba(255,255,255,0.2);
2890
+ color: white;
2891
+ }
2892
+
2893
+ .project-rail__item-info {
2894
+ display: none;
2895
+ flex-direction: column;
2896
+ gap: 2px;
2897
+ flex: 1;
2898
+ min-width: 0;
2899
+ }
2900
+
2901
+ .project-rail--expanded .project-rail__item-info {
2902
+ display: flex;
2903
+ }
2904
+
2905
+ .project-rail__item-name {
2906
+ font-size: 13px;
2907
+ font-weight: 500;
2908
+ white-space: nowrap;
2909
+ overflow: hidden;
2910
+ text-overflow: ellipsis;
2911
+ color: var(--text);
2912
+ }
2913
+
2914
+ .project-rail__item-meta {
2915
+ font-size: 11px;
2916
+ color: var(--text-muted);
2917
+ }
2918
+
2919
+ .project-rail__item-delete {
2920
+ display: none;
2921
+ align-items: center;
2922
+ justify-content: center;
2923
+ border: none;
2924
+ background: none;
2925
+ color: var(--text-muted);
2926
+ font-size: 18px;
2927
+ line-height: 1;
2928
+ cursor: pointer;
2929
+ padding: 2px 4px;
2930
+ flex-shrink: 0;
2931
+ border-radius: var(--radius-sm);
2932
+ transition: color 0.1s;
2933
+ }
2934
+
2935
+ .project-rail--expanded .project-rail__item:hover .project-rail__item-delete {
2936
+ display: flex;
2937
+ }
2938
+
2939
+ .project-rail__item-delete:hover {
2940
+ color: var(--error);
2941
+ }
2942
+
2943
+ .project-rail__empty {
2944
+ padding: 20px 16px;
2945
+ text-align: center;
2946
+ font-size: 13px;
2947
+ color: var(--text-muted);
2948
+ line-height: 1.5;
2949
+ }
2950
+
2951
+ .project-rail__loading {
2952
+ display: flex;
2953
+ flex-direction: column;
2954
+ align-items: center;
2955
+ gap: 12px;
2956
+ padding: 32px 16px;
2957
+ color: var(--text-dim);
2958
+ font-size: 13px;
2959
+ }
2960
+
2961
+ /* Tooltip (multi-line, positioned via JS) */
2962
+ .project-rail__tooltip {
2963
+ position: fixed;
2964
+ left: calc(var(--rail-w) + 8px);
2965
+ background: var(--bg-panel-solid);
2966
+ color: var(--text);
2967
+ padding: 8px 12px;
2968
+ border-radius: 8px;
2969
+ font-size: 12px;
2970
+ white-space: nowrap;
2971
+ opacity: 0;
2972
+ pointer-events: none;
2973
+ transition: opacity 0.15s;
2974
+ border: 1px solid var(--border);
2975
+ z-index: 200;
2976
+ line-height: 1.5;
2977
+ }
2978
+
2979
+ .project-rail__tooltip--visible {
2980
+ opacity: 1;
2981
+ }
2982
+
2983
+ .project-rail__tooltip-name {
2984
+ font-weight: 600;
2985
+ font-size: 13px;
2986
+ color: var(--text);
2987
+ }
2988
+
2989
+ .project-rail__tooltip-stats {
2990
+ color: var(--text-dim);
2991
+ font-size: 11px;
2992
+ }
2993
+
2994
+ .project-rail__add {
2995
+ width: 36px;
2996
+ height: 36px;
2997
+ border-radius: 50%;
2998
+ border: 2px dashed var(--border);
2999
+ background: transparent;
3000
+ color: var(--text-dim);
3001
+ font-size: 18px;
3002
+ cursor: pointer;
3003
+ margin-top: 4px;
3004
+ flex-shrink: 0;
3005
+ }
3006
+
3007
+ .project-rail__add:hover {
3008
+ border-color: var(--accent);
3009
+ color: var(--accent);
3010
+ }
3011
+
3012
+ /* ================================================================
3013
+ BRAND ASSET TOGGLE (Humanify)
3014
+ ================================================================ */
3015
+ .brand-asset-toggle {
3016
+ display: flex;
3017
+ align-items: center;
3018
+ gap: 10px;
3019
+ padding: 8px 0;
3020
+ }
3021
+
3022
+ .brand-asset-toggle__switch {
3023
+ position: relative;
3024
+ width: 36px;
3025
+ height: 20px;
3026
+ cursor: pointer;
3027
+ flex-shrink: 0;
3028
+ }
3029
+
3030
+ .brand-asset-toggle__switch input {
3031
+ opacity: 0;
3032
+ width: 0;
3033
+ height: 0;
3034
+ }
3035
+
3036
+ .brand-asset-toggle__slider {
3037
+ position: absolute;
3038
+ inset: 0;
3039
+ background: var(--bg-input);
3040
+ border-radius: 20px;
3041
+ border: 1px solid var(--border);
3042
+ transition: background 0.2s;
3043
+ }
3044
+
3045
+ .brand-asset-toggle__slider::before {
3046
+ content: "";
3047
+ position: absolute;
3048
+ width: 14px;
3049
+ height: 14px;
3050
+ left: 2px;
3051
+ bottom: 2px;
3052
+ background: var(--text-dim);
3053
+ border-radius: 50%;
3054
+ transition: transform 0.2s, background 0.2s;
3055
+ }
3056
+
3057
+ .brand-asset-toggle__switch input:checked + .brand-asset-toggle__slider {
3058
+ background: var(--accent);
3059
+ }
3060
+
3061
+ .brand-asset-toggle__switch input:checked + .brand-asset-toggle__slider::before {
3062
+ transform: translateX(16px);
3063
+ background: white;
3064
+ }
3065
+
3066
+ .brand-asset-toggle__label {
3067
+ font-size: 13px;
3068
+ font-weight: 500;
3069
+ color: var(--text);
3070
+ }
3071
+
3072
+ .brand-asset-toggle__tooltip {
3073
+ width: 18px;
3074
+ height: 18px;
3075
+ border-radius: 50%;
3076
+ background: var(--bg-input);
3077
+ border: 1px solid var(--border);
3078
+ color: var(--text-dim);
3079
+ font-size: 11px;
3080
+ display: flex;
3081
+ align-items: center;
3082
+ justify-content: center;
3083
+ cursor: help;
3084
+ position: relative;
3085
+ flex-shrink: 0;
3086
+ }
3087
+
3088
+ .brand-asset-toggle__tooltip::after {
3089
+ content: attr(data-tooltip);
3090
+ position: absolute;
3091
+ left: calc(100% + 8px);
3092
+ top: 50%;
3093
+ transform: translateY(-50%);
3094
+ background: var(--bg-panel-solid);
3095
+ color: var(--text);
3096
+ padding: 8px 12px;
3097
+ border-radius: 8px;
3098
+ font-size: 12px;
3099
+ line-height: 1.4;
3100
+ width: 260px;
3101
+ white-space: normal;
3102
+ opacity: 0;
3103
+ pointer-events: none;
3104
+ transition: opacity 0.15s;
3105
+ border: 1px solid var(--border);
3106
+ z-index: 200;
3107
+ }
3108
+
3109
+ .brand-asset-toggle__tooltip:hover::after {
3110
+ opacity: 1;
3111
+ }