anentrypoint-design 0.0.141 → 0.0.142

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/dist/247420.css CHANGED
@@ -177,7 +177,8 @@
177
177
  outline-offset: 2px;
178
178
  }
179
179
 
180
- .ds-247420[data-theme="ink"] {
180
+ .ds-247420[data-theme="ink"],
181
+ .ds-247420[data-theme="dark"] {
181
182
  --bg: var(--ink);
182
183
  --bg-2: var(--ink-2);
183
184
  --bg-3: #464650;
@@ -945,17 +946,18 @@
945
946
 
946
947
  /* File Grid */
947
948
  .ds-247420 .ds-file-grid {
948
- display: grid;
949
- grid-template-columns: 1fr;
950
- gap: var(--space-2);
949
+ display: flex;
950
+ flex-direction: column;
951
+ gap: 3px;
951
952
  }
952
953
  .ds-247420 .ds-file-row {
953
- grid-template-columns: 24px 1fr auto;
954
+ grid-template-columns: 22px minmax(0, 1fr) auto;
954
955
  gap: 10px; padding: 10px 12px;
955
956
  font-size: var(--fs-xs);
956
957
  }
957
- .ds-247420 .ds-file-row .name { font-size: var(--fs-sm); }
958
- .ds-247420 .ds-file-row .size { font-size: var(--fs-micro); }
958
+ /* On mobile, fold meta under the title and keep actions inline. */
959
+ .ds-247420 .ds-file-row .ds-file-meta { font-size: var(--fs-micro); }
960
+ .ds-247420 .ds-file-row .ds-file-actions { opacity: 1; }
959
961
 
960
962
  /* Chat */
961
963
  .ds-247420 .chat-stack { max-width: 100%; min-width: 0; }
@@ -1061,14 +1063,9 @@
1061
1063
  .ds-247420 h2, .ds-247420 .t-h2 { font-size: clamp(20px, 4cqi, 36px); }
1062
1064
  .ds-247420 h3, .ds-247420 .t-h3 { font-size: clamp(18px, 3.5cqi, 28px); }
1063
1065
 
1064
- /* File Grid2-3 columns on tablet */
1065
- .ds-247420 .ds-file-grid {
1066
- display: grid;
1067
- grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
1068
- gap: var(--space-3);
1069
- }
1066
+ /* File listsingle column rows on tablet (cards only via data-columns) */
1070
1067
  .ds-247420 .ds-file-row {
1071
- grid-template-columns: 24px 1fr auto;
1068
+ grid-template-columns: 24px minmax(0, 1fr) auto auto;
1072
1069
  gap: 12px; padding: 12px 14px;
1073
1070
  }
1074
1071
 
@@ -1110,13 +1107,6 @@
1110
1107
  Desktop Breakpoint Enhancements (1025px and up)
1111
1108
  ────────────────────────────────────────────────────────────────────── */
1112
1109
  @media (min-width: 1025px) {
1113
- /* File Grid — 3-4 columns on desktop */
1114
- .ds-247420 .ds-file-grid {
1115
- display: grid;
1116
- grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
1117
- gap: var(--space-4);
1118
- }
1119
-
1120
1110
  /* Chat Bubbles */
1121
1111
  .ds-247420 .chat-stack { max-width: min(70%, 480px); }
1122
1112
  .ds-247420 .chat-bubble {
@@ -1145,43 +1135,341 @@
1145
1135
  File surface — responsive grid + row layouts
1146
1136
  ============================================================ */
1147
1137
 
1148
- /* Default file grid — auto-responsive with CSS Grid */
1138
+ /* Default file grid — a vertical list of rows. Each row lays out its own
1139
+ columns internally; the container only stacks them. Card mode (multi-column)
1140
+ is opt-in via [data-columns]. */
1149
1141
  .ds-247420 .ds-file-grid {
1150
- display: grid;
1151
- grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
1152
- gap: var(--space-4);
1153
- /* Responsive via container queries in media breakpoints below */
1142
+ display: flex;
1143
+ flex-direction: column;
1144
+ gap: 4px;
1154
1145
  }
1155
1146
 
1156
- /* File row — linear layout (used in list view) */
1147
+ /* File row — linear layout (icon · title · meta · actions) */
1157
1148
  .ds-247420 .ds-file-row {
1158
- display: grid; grid-template-columns: 28px minmax(0, 1fr) auto auto;
1149
+ display: grid; grid-template-columns: 26px minmax(0, 1fr) auto auto;
1159
1150
  gap: 14px; align-items: center;
1160
- padding: 12px 18px; background: var(--bg);
1151
+ padding: 11px 16px; background: var(--bg);
1152
+ border: var(--bw-hair) solid transparent;
1161
1153
  border-radius: var(--r-2); color: var(--fg);
1162
- transition: background var(--dur-snap) var(--ease);
1154
+ cursor: pointer;
1155
+ transition: background var(--dur-snap) var(--ease),
1156
+ border-color var(--dur-snap) var(--ease),
1157
+ transform var(--dur-snap) var(--ease);
1158
+ }
1159
+ .ds-247420 .ds-file-row:hover {
1160
+ background: var(--bg-2);
1161
+ border-color: var(--rule);
1162
+ }
1163
+ .ds-247420 .ds-file-row:active { transform: translateY(1px); }
1164
+ .ds-247420 .ds-file-row.active { background: var(--accent-tint); border-color: var(--accent); }
1165
+ .ds-247420 .ds-file-row[data-file-type="dir"] { border-left-width: 3px; border-left-color: var(--accent); }
1166
+ .ds-247420 .ds-file-row[data-file-type="image"] { border-left-width: 3px; border-left-color: var(--mascot); }
1167
+ .ds-247420 .ds-file-row[data-file-type="video"] { border-left-width: 3px; border-left-color: var(--purple-2); }
1168
+ .ds-247420 .ds-file-row[data-file-type="audio"] { border-left-width: 3px; border-left-color: var(--sky); }
1169
+ .ds-247420 .ds-file-row[data-file-type="code"] { border-left-width: 3px; border-left-color: var(--green-2); }
1170
+ .ds-247420 .ds-file-row[data-file-type="text"] { border-left-width: 3px; border-left-color: var(--ink-3); }
1171
+ .ds-247420 .ds-file-row[data-file-type="archive"] { border-left-width: 3px; border-left-color: var(--flame); }
1172
+ .ds-247420 .ds-file-row[data-file-type="document"] { border-left-width: 3px; border-left-color: var(--sun); }
1173
+ .ds-247420 .ds-file-row[data-file-type="symlink"] { border-left-width: 3px; border-left-color: var(--purple); }
1174
+ .ds-247420 .ds-file-row[data-file-type="other"] { border-left-width: 3px; border-left-color: var(--fg-3); }
1175
+
1176
+ /* Row internals — these are the classes FileRow actually renders. */
1177
+ .ds-247420 .ds-file-row .title {
1178
+ font-weight: 500; font-size: var(--fs-sm);
1179
+ overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
1180
+ min-width: 0;
1181
+ }
1182
+ .ds-247420 .ds-file-row .code {
1183
+ font-family: var(--ff-mono); font-size: var(--fs-micro);
1184
+ color: var(--fg-3);
1185
+ }
1186
+ .ds-247420 .ds-file-row .ds-file-meta {
1187
+ font-family: var(--ff-mono); font-size: var(--fs-xs);
1188
+ color: var(--fg-3); white-space: nowrap;
1163
1189
  }
1164
- .ds-247420 .ds-file-row + .ds-file-row { margin-top: 3px; }
1165
- .ds-247420 .ds-file-row:hover { background: var(--bg-2); }
1166
- .ds-247420 .ds-file-row[data-file-type="dir"] { border-left: 3px solid var(--accent); padding-left: 11px; }
1167
- .ds-247420 .ds-file-row[data-file-type="image"] { border-left: 3px solid var(--mascot); padding-left: 11px; }
1168
- .ds-247420 .ds-file-row[data-file-type="video"] { border-left: 3px solid var(--purple-2); padding-left: 11px; }
1169
- .ds-247420 .ds-file-row[data-file-type="audio"] { border-left: 3px solid var(--sky); padding-left: 11px; }
1170
- .ds-247420 .ds-file-row[data-file-type="code"] { border-left: 3px solid var(--green-2); padding-left: 11px; }
1171
- .ds-247420 .ds-file-row[data-file-type="text"] { border-left: 3px solid var(--ink-3); padding-left: 11px; }
1172
- .ds-247420 .ds-file-row[data-file-type="archive"] { border-left: 3px solid var(--flame); padding-left: 11px; }
1173
- .ds-247420 .ds-file-row[data-file-type="document"] { border-left: 3px solid var(--sun); padding-left: 11px; }
1174
- .ds-247420 .ds-file-row[data-file-type="other"] { border-left: 3px solid var(--fg-3); padding-left: 11px; }
1175
- .ds-247420 .ds-file-row .name { font-weight: 500; font-size: var(--fs-sm); }
1176
- .ds-247420 .ds-file-row .size { font-family: var(--ff-mono); font-size: var(--fs-xs); color: var(--fg-3); }
1177
- .ds-247420 .ds-file-row .time { font-family: var(--ff-mono); font-size: var(--fs-xs); color: var(--fg-3); }
1178
-
1179
- /* File griddata-columns attribute (explicit column override) */
1190
+
1191
+ /* File icon glyph chip, tinted per type. */
1192
+ .ds-247420 .ds-file-icon {
1193
+ display: inline-flex; align-items: center; justify-content: center;
1194
+ width: 26px; height: 26px; font-size: 15px; line-height: 1;
1195
+ color: var(--fg-2);
1196
+ }
1197
+ .ds-247420 .ds-file-row[data-file-type="dir"] .ds-file-icon { color: var(--accent); }
1198
+ .ds-247420 .ds-file-row[data-file-type="image"] .ds-file-icon { color: var(--mascot); }
1199
+ .ds-247420 .ds-file-row[data-file-type="video"] .ds-file-icon { color: var(--purple-2); }
1200
+ .ds-247420 .ds-file-row[data-file-type="audio"] .ds-file-icon { color: var(--sky); }
1201
+ .ds-247420 .ds-file-row[data-file-type="code"] .ds-file-icon { color: var(--green-2); }
1202
+ .ds-247420 .ds-file-row[data-file-type="archive"] .ds-file-icon { color: var(--flame); }
1203
+ .ds-247420 .ds-file-row[data-file-type="document"] .ds-file-icon { color: var(--sun); }
1204
+
1205
+ /* Row actionshidden until hover/focus, revealed without layout shift. */
1206
+ .ds-247420 .ds-file-actions {
1207
+ display: inline-flex; gap: 2px; align-items: center;
1208
+ opacity: 0; transition: opacity var(--dur-base) var(--ease);
1209
+ }
1210
+ .ds-247420 .ds-file-row:hover .ds-file-actions,
1211
+ .ds-247420 .ds-file-row:focus-within .ds-file-actions { opacity: 1; }
1212
+ .ds-247420 .ds-file-act {
1213
+ display: inline-flex; align-items: center; justify-content: center;
1214
+ width: 28px; height: 28px; padding: 0;
1215
+ background: transparent; border: 0; border-radius: var(--r-1);
1216
+ color: var(--fg-3); font-size: 14px; cursor: pointer;
1217
+ transition: background var(--dur-snap) var(--ease), color var(--dur-snap) var(--ease);
1218
+ }
1219
+ .ds-247420 .ds-file-act:hover { background: var(--bg-3); color: var(--fg); }
1220
+ .ds-247420 .ds-file-act-warn:hover { background: color-mix(in oklab, var(--warn) 18%, var(--bg)); color: var(--warn); }
1221
+
1222
+ /* Card mode — opt-in via data-columns; switches the list to a grid. */
1223
+ .ds-247420 .ds-file-grid[data-columns] { display: grid; gap: var(--space-3); }
1180
1224
  .ds-247420 .ds-file-grid[data-columns="1"] { grid-template-columns: 1fr; }
1181
1225
  .ds-247420 .ds-file-grid[data-columns="2"] { grid-template-columns: repeat(2, 1fr); }
1182
1226
  .ds-247420 .ds-file-grid[data-columns="3"] { grid-template-columns: repeat(3, 1fr); }
1183
1227
  .ds-247420 .ds-file-grid[data-columns="4"] { grid-template-columns: repeat(4, 1fr); }
1184
1228
 
1229
+ /* ============================================================
1230
+ File browser surface — stage, toolbar, breadcrumb, dropzone,
1231
+ upload progress, empty state, modals, preview. Authored for
1232
+ fsbrowse but lives in the shared kit under .ds-247420 scope.
1233
+ ============================================================ */
1234
+
1235
+ /* Stage — the scrollable content column. */
1236
+ .ds-247420 .ds-file-stage {
1237
+ display: flex; flex-direction: column; gap: var(--space-3);
1238
+ width: 100%; max-width: 920px; margin: 0 auto;
1239
+ padding: var(--space-2) var(--space-3) var(--space-4);
1240
+ }
1241
+ /* When the stage is the app-main child, the shell already supplies top
1242
+ padding — collapse the stage's own so content isn't pushed down. */
1243
+ .ds-247420 .app-main > div > .ds-file-stage,
1244
+ .ds-247420 .app-main .ds-file-stage { padding-top: 0; }
1245
+
1246
+ /* Breadcrumb path */
1247
+ .ds-247420 .ds-crumb-path {
1248
+ display: flex; align-items: center; flex-wrap: wrap; gap: 2px;
1249
+ font-size: var(--fs-sm);
1250
+ }
1251
+ .ds-247420 .ds-crumb-seg {
1252
+ background: transparent; border: 0; cursor: pointer;
1253
+ padding: 4px 8px; border-radius: var(--r-1);
1254
+ color: var(--fg-3); font-family: inherit; font-size: var(--fs-sm);
1255
+ transition: background var(--dur-snap) var(--ease), color var(--dur-snap) var(--ease);
1256
+ }
1257
+ .ds-247420 .ds-crumb-seg:hover { background: var(--bg-2); color: var(--fg); }
1258
+ .ds-247420 .ds-crumb-seg.leaf { color: var(--fg); font-weight: 600; }
1259
+ .ds-247420 .ds-crumb-sep { color: var(--fg-3); opacity: 0.6; user-select: none; }
1260
+
1261
+ /* Toolbar */
1262
+ .ds-247420 .ds-file-toolbar {
1263
+ display: flex; align-items: center; justify-content: space-between;
1264
+ gap: var(--space-2); flex-wrap: wrap;
1265
+ }
1266
+ .ds-247420 .ds-file-toolbar-left,
1267
+ .ds-247420 .ds-file-toolbar-right {
1268
+ display: flex; align-items: center; gap: var(--space-2); flex-wrap: wrap;
1269
+ }
1270
+ .ds-247420 .ds-meta-mono {
1271
+ font-family: var(--ff-mono); font-size: var(--fs-xs);
1272
+ color: var(--fg-3); letter-spacing: var(--tr-caps);
1273
+ }
1274
+
1275
+ /* Error banner — dismissible toast row. */
1276
+ .ds-247420 .ds-error-banner {
1277
+ padding: 10px 14px; border-radius: var(--r-2);
1278
+ background: color-mix(in oklab, var(--warn) 14%, var(--bg));
1279
+ border: var(--bw-hair) solid color-mix(in oklab, var(--warn) 40%, transparent);
1280
+ color: var(--warn); font-size: var(--fs-sm); cursor: pointer;
1281
+ }
1282
+ .ds-247420 .ds-error-banner:hover { background: color-mix(in oklab, var(--warn) 20%, var(--bg)); }
1283
+
1284
+ /* Dropzone */
1285
+ .ds-247420 .ds-dropzone {
1286
+ border: var(--bw-rule) dashed var(--rule);
1287
+ border-radius: var(--r-3); background: var(--bg);
1288
+ transition: border-color var(--dur-base) var(--ease), background var(--dur-base) var(--ease);
1289
+ }
1290
+ .ds-247420 .ds-dropzone-inner {
1291
+ display: flex; align-items: center; justify-content: center;
1292
+ gap: var(--space-2); flex-wrap: wrap;
1293
+ padding: var(--space-4) var(--space-3); text-align: center;
1294
+ }
1295
+ .ds-247420 .ds-dropzone-glyph { font-size: 22px; color: var(--fg-3); }
1296
+ .ds-247420 .ds-dropzone-label { font-size: var(--fs-sm); color: var(--fg-3); }
1297
+ .ds-247420 .ds-dropzone.dragover {
1298
+ border-color: var(--accent);
1299
+ background: var(--accent-tint);
1300
+ }
1301
+ @media (prefers-reduced-motion: no-preference) {
1302
+ .ds-247420 .ds-dropzone.dragover { animation: ds-dropzone-pulse 1.1s var(--ease) infinite; }
1303
+ }
1304
+ .ds-247420 .ds-dropzone.dragover .ds-dropzone-glyph,
1305
+ .ds-247420 .ds-dropzone.dragover .ds-dropzone-label { color: var(--accent); }
1306
+ @keyframes ds-dropzone-pulse {
1307
+ 0%, 100% { border-color: var(--accent); }
1308
+ 50% { border-color: color-mix(in oklab, var(--accent) 45%, transparent); }
1309
+ }
1310
+
1311
+ /* Upload progress */
1312
+ .ds-247420 .ds-upload-progress { display: flex; flex-direction: column; gap: 6px; }
1313
+ .ds-247420 .ds-upload-item {
1314
+ display: grid; grid-template-columns: minmax(0, 1fr) 120px 44px;
1315
+ gap: var(--space-2); align-items: center;
1316
+ padding: 8px 12px; border-radius: var(--r-2);
1317
+ background: var(--bg-2); font-size: var(--fs-xs);
1318
+ }
1319
+ .ds-247420 .ds-upload-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1320
+ .ds-247420 .ds-upload-bar {
1321
+ height: 6px; border-radius: var(--r-pill);
1322
+ background: var(--bg-3); overflow: hidden;
1323
+ }
1324
+ .ds-247420 .ds-upload-fill {
1325
+ display: block; height: 100%; width: 0;
1326
+ background: var(--accent); border-radius: var(--r-pill);
1327
+ transition: width var(--dur-base) var(--ease);
1328
+ }
1329
+ .ds-247420 .ds-upload-pct {
1330
+ font-family: var(--ff-mono); font-size: var(--fs-micro);
1331
+ color: var(--fg-3); text-align: right;
1332
+ }
1333
+ .ds-247420 .ds-upload-item.done .ds-upload-fill { background: var(--success); }
1334
+ .ds-247420 .ds-upload-item.done .ds-upload-pct { color: var(--success); }
1335
+ .ds-247420 .ds-upload-item.error .ds-upload-fill { background: var(--warn); }
1336
+ .ds-247420 .ds-upload-item.error .ds-upload-pct { color: var(--warn); }
1337
+
1338
+ /* Empty state */
1339
+ .ds-247420 .ds-file-empty {
1340
+ display: flex; flex-direction: column; align-items: center; justify-content: center;
1341
+ gap: var(--space-2); padding: var(--space-6) var(--space-3);
1342
+ color: var(--fg-3); text-align: center;
1343
+ }
1344
+ .ds-247420 .ds-file-empty-glyph { font-size: 34px; opacity: 0.55; }
1345
+ .ds-247420 .ds-file-empty-text { font-size: var(--fs-sm); }
1346
+
1347
+ /* ── Modals ───────────────────────────────────────────────── */
1348
+ .ds-247420 .ds-modal-backdrop {
1349
+ position: fixed; inset: 0; z-index: var(--z-modal, 800);
1350
+ display: flex; align-items: center; justify-content: center;
1351
+ padding: var(--space-3);
1352
+ background: color-mix(in oklab, var(--ink) 55%, transparent);
1353
+ backdrop-filter: blur(3px);
1354
+ }
1355
+ @media (prefers-reduced-motion: no-preference) {
1356
+ .ds-247420 .ds-modal-backdrop { animation: ds-modal-fade var(--dur-base) var(--ease); }
1357
+ }
1358
+ @keyframes ds-modal-fade { from { opacity: 0; } to { opacity: 1; } }
1359
+ .ds-247420 .ds-modal {
1360
+ display: flex; flex-direction: column;
1361
+ width: 100%; max-width: 460px; max-height: calc(100vh - 2 * var(--space-4));
1362
+ background: var(--bg); color: var(--fg);
1363
+ border: var(--bw-hair) solid var(--rule);
1364
+ border-radius: var(--r-3); box-shadow: var(--shadow-3);
1365
+ overflow: hidden;
1366
+ }
1367
+ @media (prefers-reduced-motion: no-preference) {
1368
+ .ds-247420 .ds-modal { animation: ds-modal-rise var(--dur-base) var(--ease); }
1369
+ }
1370
+ @keyframes ds-modal-rise {
1371
+ from { opacity: 0; transform: translateY(8px) scale(0.98); }
1372
+ to { opacity: 1; transform: none; }
1373
+ }
1374
+ .ds-247420 .ds-modal-small { max-width: 380px; }
1375
+ .ds-247420 .ds-modal-preview { max-width: 880px; }
1376
+ .ds-247420 .ds-modal-head {
1377
+ padding: var(--space-3) var(--space-4);
1378
+ font-weight: 600; font-size: var(--fs-body);
1379
+ border-bottom: var(--bw-hair) solid var(--rule);
1380
+ }
1381
+ .ds-247420 .ds-modal-body { padding: var(--space-4); overflow: auto; font-size: var(--fs-sm); }
1382
+ .ds-247420 .ds-modal-actions {
1383
+ display: flex; justify-content: flex-end; gap: var(--space-2);
1384
+ padding: var(--space-3) var(--space-4);
1385
+ border-top: var(--bw-hair) solid var(--rule);
1386
+ }
1387
+ .ds-247420 .ds-modal-input {
1388
+ width: 100%; padding: 10px 12px;
1389
+ background: var(--bg-2); border: var(--bw-hair) solid var(--rule);
1390
+ border-radius: var(--r-2); color: var(--fg);
1391
+ font-family: inherit; font-size: var(--fs-sm);
1392
+ }
1393
+ .ds-247420 .ds-modal-input:focus { outline: 2px solid var(--accent); outline-offset: 1px; }
1394
+ .ds-247420 .btn-primary.danger {
1395
+ background: var(--warn);
1396
+ border-color: var(--warn);
1397
+ color: #fff;
1398
+ }
1399
+
1400
+ /* ── Preview ──────────────────────────────────────────────── */
1401
+ .ds-247420 .ds-preview-head {
1402
+ display: flex; align-items: center; gap: var(--space-3);
1403
+ padding: var(--space-3) var(--space-4);
1404
+ border-bottom: var(--bw-hair) solid var(--rule);
1405
+ }
1406
+ .ds-247420 .ds-preview-name {
1407
+ font-weight: 600; font-size: var(--fs-body);
1408
+ overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0;
1409
+ }
1410
+ .ds-247420 .ds-preview-meta {
1411
+ font-family: var(--ff-mono); font-size: var(--fs-xs);
1412
+ color: var(--fg-3); white-space: nowrap;
1413
+ }
1414
+ .ds-247420 .ds-preview-actions { display: inline-flex; gap: 2px; margin-left: auto; }
1415
+ .ds-247420 .ds-preview-body {
1416
+ flex: 1; min-height: 0; overflow: auto;
1417
+ padding: var(--space-3) var(--space-4);
1418
+ display: flex; flex-direction: column;
1419
+ }
1420
+ .ds-247420 .ds-preview-media {
1421
+ max-width: 100%; max-height: 70vh; margin: 0 auto;
1422
+ border-radius: var(--r-2); object-fit: contain;
1423
+ }
1424
+ .ds-247420 .ds-preview-audio { width: 100%; }
1425
+ .ds-247420 .ds-preview-code,
1426
+ .ds-247420 .ds-preview-text {
1427
+ margin: 0; flex: 1; min-height: 0; overflow: auto;
1428
+ padding: var(--space-3);
1429
+ background: var(--ink); color: var(--paper);
1430
+ border-radius: var(--r-2);
1431
+ font-family: var(--ff-mono); font-size: var(--fs-xs); line-height: var(--lh-base);
1432
+ white-space: pre; tab-size: 2;
1433
+ }
1434
+ .ds-247420 .ds-preview-text { white-space: pre-wrap; word-break: break-word; }
1435
+ .ds-247420 .ds-preview-code code, .ds-247420 .ds-preview-text code { font: inherit; color: inherit; background: none; }
1436
+ .ds-247420 .ds-preview-truncated {
1437
+ margin-top: var(--space-2); padding-top: var(--space-2);
1438
+ border-top: var(--bw-hair) solid color-mix(in oklab, var(--paper) 20%, transparent);
1439
+ color: var(--paper-3); font-size: var(--fs-micro);
1440
+ }
1441
+ .ds-247420 .ds-preview-fallback {
1442
+ display: flex; flex-direction: column; align-items: center; justify-content: center;
1443
+ gap: var(--space-2); padding: var(--space-6); color: var(--fg-3);
1444
+ }
1445
+ .ds-247420 .ds-preview-glyph { font-size: 34px; opacity: 0.6; }
1446
+
1447
+ /* Thin scrollbars inside preview bodies. */
1448
+ .ds-247420 .ds-preview-code, .ds-247420 .ds-preview-text, .ds-247420 .ds-modal-body, .ds-247420 .ds-preview-body {
1449
+ scrollbar-width: thin;
1450
+ }
1451
+ .ds-247420 .ds-preview-code::-webkit-scrollbar,
1452
+ .ds-247420 .ds-preview-text::-webkit-scrollbar,
1453
+ .ds-247420 .ds-preview-body::-webkit-scrollbar,
1454
+ .ds-247420 .ds-modal-body::-webkit-scrollbar { width: 10px; height: 10px; }
1455
+ .ds-247420 .ds-preview-code::-webkit-scrollbar-thumb,
1456
+ .ds-247420 .ds-preview-text::-webkit-scrollbar-thumb {
1457
+ background: color-mix(in oklab, var(--paper) 28%, transparent);
1458
+ border-radius: var(--r-pill); border: 2px solid transparent; background-clip: padding-box;
1459
+ }
1460
+ .ds-247420 .ds-preview-body::-webkit-scrollbar-thumb,
1461
+ .ds-247420 .ds-modal-body::-webkit-scrollbar-thumb {
1462
+ background: var(--bg-3); border-radius: var(--r-pill);
1463
+ }
1464
+
1465
+ /* Mobile — modals go near-fullscreen, preview media shrinks. */
1466
+ @media (max-width: 560px) {
1467
+ .ds-247420 .ds-modal { max-width: 100%; max-height: calc(100vh - 2 * var(--space-3)); }
1468
+ .ds-247420 .ds-modal-preview { width: 100%; height: calc(100vh - 2 * var(--space-3)); max-height: none; }
1469
+ .ds-247420 .ds-preview-media { max-height: 50vh; }
1470
+ .ds-247420 .ds-file-stage { padding: var(--space-3) var(--space-2); }
1471
+ }
1472
+
1185
1473
  /* ============================================================
1186
1474
  Theme toggle (segmented + compact) — bound to src/theme.js
1187
1475
  ============================================================ */