anentrypoint-design 0.0.369 → 0.0.371
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/chat.css +128 -0
- package/dist/247420.css +454 -1
- package/dist/247420.js +27 -27
- package/package.json +1 -1
- package/src/components/chat-message-parts.js +42 -4
- package/src/components/chat-minimap.js +309 -0
- package/src/components/chat.js +2 -1
- package/src/components/editor-primitives.js +41 -14
- package/src/components/files-modals.js +44 -4
- package/src/components/git-status.js +22 -6
- package/src/components/interaction-primitives.js +27 -0
- package/src/components/models-config.js +229 -0
- package/src/components/plugins-config.js +154 -0
- package/src/components/sessions.js +138 -38
- package/src/components/skills-config.js +188 -0
- package/src/components/voice.js +41 -0
- package/src/components.js +12 -2
- package/src/css/app-shell/chat-polish.css +25 -0
- package/src/css/app-shell/files.css +18 -0
- package/src/css/app-shell/models-config.css +93 -0
- package/src/css/app-shell/plugins-config.css +139 -0
- package/src/css/app-shell/skills-config.css +27 -0
- package/src/file-mention.js +142 -0
- package/src/index.js +6 -0
- package/src/math.js +158 -0
- package/src/mermaid.js +105 -0
package/chat.css
CHANGED
|
@@ -503,6 +503,55 @@
|
|
|
503
503
|
.ds-session-state { padding: var(--space-5) var(--space-3); text-align: center; color: var(--fg-3); font-size: var(--fs-sm); }
|
|
504
504
|
.ds-session-state-error { color: var(--flame); }
|
|
505
505
|
|
|
506
|
+
/* Fork/branch tree nesting — child sessions indent under their parent with a
|
|
507
|
+
collapse toggle and a small branch glyph, mirroring pi-web's SessionSidebar
|
|
508
|
+
tree without reimplementing its inline-style React component. */
|
|
509
|
+
.ds-session-row-nested { position: relative; }
|
|
510
|
+
.ds-session-tree-toggle {
|
|
511
|
+
flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center;
|
|
512
|
+
width: 16px; height: 16px; padding: 0; background: none; border: none;
|
|
513
|
+
color: var(--fg-3); cursor: pointer; transform: rotate(0deg); transition: transform var(--dur-snap) var(--ease);
|
|
514
|
+
}
|
|
515
|
+
.ds-session-tree-toggle.open { transform: rotate(90deg); }
|
|
516
|
+
.ds-session-tree-toggle:hover { color: var(--fg); }
|
|
517
|
+
.ds-session-fork-icon { flex: 0 0 auto; display: inline-flex; color: var(--fg-3); }
|
|
518
|
+
|
|
519
|
+
/* Hover-revealed rename/delete row actions. */
|
|
520
|
+
.ds-session-row-actions { flex: 0 0 auto; display: none; align-items: center; gap: var(--space-1); }
|
|
521
|
+
.ds-session-row:hover .ds-session-row-actions,
|
|
522
|
+
.ds-session-row:focus-within .ds-session-row-actions { display: flex; }
|
|
523
|
+
.ds-session-row-action {
|
|
524
|
+
display: inline-flex; align-items: center; justify-content: center;
|
|
525
|
+
width: 24px; height: 24px; padding: 0; background: var(--bg-2); border: var(--border-w) solid var(--border);
|
|
526
|
+
border-radius: var(--r-1); color: var(--fg-3); cursor: pointer;
|
|
527
|
+
}
|
|
528
|
+
.ds-session-row-action:hover { background: var(--bg-3); color: var(--fg); border-color: var(--fg-3); }
|
|
529
|
+
.ds-session-row-action-danger:hover { background: color-mix(in srgb, var(--flame) 12%, var(--bg-2)); color: var(--flame); border-color: var(--flame); }
|
|
530
|
+
@media (pointer: coarse) { .ds-session-row-action { min-width: 44px; min-height: 44px; } }
|
|
531
|
+
|
|
532
|
+
/* Inline rename — the row's title area swaps for a text input at the same
|
|
533
|
+
height; no modal, matches the row-in-place edit pattern used elsewhere. */
|
|
534
|
+
.ds-session-rename-input {
|
|
535
|
+
flex: 1; min-width: 0; font-size: var(--fs-sm); font-family: inherit; color: var(--fg);
|
|
536
|
+
background: var(--bg); border: var(--border-w) solid var(--accent); border-radius: var(--r-1);
|
|
537
|
+
padding: var(--space-1) var(--space-2);
|
|
538
|
+
}
|
|
539
|
+
.ds-session-rename-input:focus { outline: none; }
|
|
540
|
+
|
|
541
|
+
/* Inline delete confirm — same row height, two flat buttons, no modal;
|
|
542
|
+
mirrors SessionDashboard's arm-then-confirm bulk-stop control. */
|
|
543
|
+
.ds-session-confirm-msg { flex: 1; min-width: 0; font-size: var(--fs-sm); color: var(--fg); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
544
|
+
.ds-session-confirm-actions { flex: 0 0 auto; display: flex; gap: var(--space-1); }
|
|
545
|
+
.ds-session-confirm-delete, .ds-session-confirm-cancel {
|
|
546
|
+
font-size: var(--fs-tiny); font-weight: 600; padding: var(--space-1) var(--space-2);
|
|
547
|
+
border-radius: var(--r-1); cursor: pointer;
|
|
548
|
+
}
|
|
549
|
+
.ds-session-confirm-delete { background: var(--flame); border: none; color: var(--bg); }
|
|
550
|
+
.ds-session-confirm-delete:hover { filter: brightness(1.1); }
|
|
551
|
+
.ds-session-confirm-cancel { background: var(--bg-2); border: var(--border-w) solid var(--border); color: var(--fg-2); }
|
|
552
|
+
.ds-session-confirm-cancel:hover { background: var(--bg-3); color: var(--fg); }
|
|
553
|
+
@media (pointer: coarse) { .ds-session-confirm-delete, .ds-session-confirm-cancel { min-height: 44px; } }
|
|
554
|
+
|
|
506
555
|
/* ----------------------------------------------------------------------------
|
|
507
556
|
SessionDashboard — grid of live-session cards.
|
|
508
557
|
---------------------------------------------------------------------------- */
|
|
@@ -1212,3 +1261,82 @@ button.chat-composer-context:focus-visible { outline: var(--focus-w) solid var(-
|
|
|
1212
1261
|
filter: none;
|
|
1213
1262
|
}
|
|
1214
1263
|
.chat-composer .send.cancel:active { filter: brightness(0.96); }
|
|
1264
|
+
|
|
1265
|
+
/* ChatMinimap — scroll-position density overview beside a chat thread.
|
|
1266
|
+
Purely token-driven (no raw color literals — see lintTokensOrThrow). Dot
|
|
1267
|
+
position/tooltip offsets are set imperatively in JS (chat-minimap.js) since
|
|
1268
|
+
they are per-render numeric layout, not a static rule. */
|
|
1269
|
+
.chat-minimap {
|
|
1270
|
+
position: relative;
|
|
1271
|
+
flex-shrink: 0;
|
|
1272
|
+
align-self: stretch;
|
|
1273
|
+
cursor: default;
|
|
1274
|
+
user-select: none;
|
|
1275
|
+
border-left: var(--bw-hair) solid var(--rule);
|
|
1276
|
+
background: var(--bg-2);
|
|
1277
|
+
overflow: visible;
|
|
1278
|
+
}
|
|
1279
|
+
.chat-minimap-viewport {
|
|
1280
|
+
position: absolute;
|
|
1281
|
+
left: 0;
|
|
1282
|
+
right: 0;
|
|
1283
|
+
background: color-mix(in oklab, var(--fg-3) 12%, transparent);
|
|
1284
|
+
border-top: var(--bw-hair) solid var(--rule);
|
|
1285
|
+
border-bottom: var(--bw-hair) solid var(--rule);
|
|
1286
|
+
pointer-events: none;
|
|
1287
|
+
z-index: 1;
|
|
1288
|
+
}
|
|
1289
|
+
.chat-minimap-centerline {
|
|
1290
|
+
position: absolute;
|
|
1291
|
+
left: 50%;
|
|
1292
|
+
top: 0;
|
|
1293
|
+
bottom: 0;
|
|
1294
|
+
width: 1px;
|
|
1295
|
+
background: var(--rule);
|
|
1296
|
+
transform: translateX(-50%);
|
|
1297
|
+
z-index: 0;
|
|
1298
|
+
}
|
|
1299
|
+
.chat-minimap-dot {
|
|
1300
|
+
position: absolute;
|
|
1301
|
+
left: 50%;
|
|
1302
|
+
width: 6px;
|
|
1303
|
+
height: 6px;
|
|
1304
|
+
border-radius: var(--r-pill, 999px);
|
|
1305
|
+
transform: translate(-50%, -50%) scale(1);
|
|
1306
|
+
transition: transform 0.1s;
|
|
1307
|
+
z-index: 2;
|
|
1308
|
+
}
|
|
1309
|
+
.chat-minimap-dot.is-user {
|
|
1310
|
+
background: color-mix(in oklab, var(--accent) 18%, transparent);
|
|
1311
|
+
border: 1.5px solid color-mix(in oklab, var(--accent) 70%, transparent);
|
|
1312
|
+
}
|
|
1313
|
+
.chat-minimap-dot.is-assistant {
|
|
1314
|
+
background: color-mix(in oklab, var(--fg-3) 12%, transparent);
|
|
1315
|
+
border: 1.5px solid color-mix(in oklab, var(--fg-3) 50%, transparent);
|
|
1316
|
+
}
|
|
1317
|
+
.chat-minimap-dot.is-nearest { transform: translate(-50%, -50%) scale(1.6); }
|
|
1318
|
+
.chat-minimap-tooltip {
|
|
1319
|
+
position: absolute;
|
|
1320
|
+
right: 100%;
|
|
1321
|
+
margin-right: var(--space-1);
|
|
1322
|
+
background: var(--bg);
|
|
1323
|
+
border-top: var(--bw-hair) solid var(--rule);
|
|
1324
|
+
border-right: var(--bw-hair) solid var(--rule);
|
|
1325
|
+
border-bottom: var(--bw-hair) solid var(--rule);
|
|
1326
|
+
border-left: 2px solid var(--fg-3);
|
|
1327
|
+
border-radius: var(--r-1);
|
|
1328
|
+
padding: calc(var(--space-1) / 2) var(--space-2);
|
|
1329
|
+
z-index: 100;
|
|
1330
|
+
pointer-events: none;
|
|
1331
|
+
opacity: 0.45;
|
|
1332
|
+
font-size: var(--fs-tiny);
|
|
1333
|
+
color: var(--fg-3);
|
|
1334
|
+
line-height: 1.4;
|
|
1335
|
+
white-space: nowrap;
|
|
1336
|
+
overflow: hidden;
|
|
1337
|
+
text-overflow: ellipsis;
|
|
1338
|
+
transition: top 0.1s, opacity 0.1s;
|
|
1339
|
+
}
|
|
1340
|
+
.chat-minimap-tooltip.is-user { border-left-color: color-mix(in oklab, var(--accent) 70%, transparent); }
|
|
1341
|
+
.chat-minimap-tooltip.is-assistant { border-left-color: color-mix(in oklab, var(--fg-3) 50%, transparent); }
|
|
1342
|
+
.chat-minimap-tooltip.is-nearest { opacity: 1; color: var(--fg); }
|
package/dist/247420.css
CHANGED
|
@@ -2812,6 +2812,24 @@
|
|
|
2812
2812
|
}
|
|
2813
2813
|
.ds-247420 .ds-preview-text { white-space: pre-wrap; word-break: break-word; }
|
|
2814
2814
|
.ds-247420 .ds-preview-code code, .ds-247420 .ds-preview-text code { font: inherit; color: inherit; background: none; }
|
|
2815
|
+
/* wrap-lines toggle (ported from pi-web's DisplayMode word-wrap control) */
|
|
2816
|
+
.ds-247420 .ds-preview-code.is-wrapped { white-space: pre-wrap; overflow-wrap: anywhere; }
|
|
2817
|
+
.ds-247420 .ds-preview-wrap-toggle.active { color: var(--paper); background: color-mix(in oklab, var(--paper) 18%, transparent); }
|
|
2818
|
+
/* source/preview mode switch (ported from pi-web's markdown/HTML DisplayMode
|
|
2819
|
+
tabs) — the host supplies already-rendered, already-sanitized HTML via
|
|
2820
|
+
`previewHtml`; this component only toggles visibility. */
|
|
2821
|
+
.ds-247420 .ds-preview-mode-switch { display: inline-flex; gap: var(--space-1); margin-right: var(--space-1); }
|
|
2822
|
+
.ds-247420 .ds-preview-mode-btn {
|
|
2823
|
+
font-family: var(--ff-mono); font-size: var(--fs-micro);
|
|
2824
|
+
padding: var(--space-1) var(--space-2); border-radius: var(--r-1);
|
|
2825
|
+
color: var(--paper-3); background: none; border: none; cursor: pointer;
|
|
2826
|
+
}
|
|
2827
|
+
.ds-247420 .ds-preview-mode-btn.active { color: var(--paper); background: color-mix(in oklab, var(--paper) 18%, transparent); }
|
|
2828
|
+
.ds-247420 .ds-preview-html {
|
|
2829
|
+
flex: 1; min-height: 0; overflow: auto;
|
|
2830
|
+
padding: var(--space-3) var(--space-4);
|
|
2831
|
+
background: var(--bg-0); border-radius: var(--r-2);
|
|
2832
|
+
}
|
|
2815
2833
|
.ds-247420 .ds-preview-truncated {
|
|
2816
2834
|
margin-top: var(--space-2); padding-top: var(--space-2);
|
|
2817
2835
|
border-top: var(--bw-hair) solid color-mix(in oklab, var(--paper) 20%, transparent);
|
|
@@ -3154,6 +3172,31 @@
|
|
|
3154
3172
|
.ds-247420 .chat-bubble.chat-md th { background: color-mix(in oklab, var(--fg) 5%, transparent); font-weight: 600; }
|
|
3155
3173
|
.ds-247420 .chat-bubble.chat-md hr { border: 0; border-top: var(--bw-hair) solid var(--rule); margin: 12px 0; }
|
|
3156
3174
|
|
|
3175
|
+
/* Mermaid diagram blocks — rendered SVG swapped in over the fenced source by
|
|
3176
|
+
src/mermaid.js's renderMermaidBlocksUnder(); the source .pre stays in the
|
|
3177
|
+
DOM (display:none) behind a source/diagram toggle button. */
|
|
3178
|
+
.ds-247420 .ds-mermaid-block {
|
|
3179
|
+
position: relative; margin: var(--space-2) 0;
|
|
3180
|
+
border: 1px solid color-mix(in oklab, var(--fg) 12%, transparent);
|
|
3181
|
+
border-radius: var(--r-1); background: var(--bg); padding: 12px 16px;
|
|
3182
|
+
}
|
|
3183
|
+
.ds-247420 .ds-mermaid-diagram { overflow-x: auto; display: flex; justify-content: center; }
|
|
3184
|
+
.ds-247420 .ds-mermaid-diagram svg { max-width: 100%; height: auto; }
|
|
3185
|
+
.ds-247420 .ds-mermaid-toggle {
|
|
3186
|
+
position: absolute; top: 6px; right: 6px;
|
|
3187
|
+
font: inherit; font-size: var(--fs-xs); line-height: 1;
|
|
3188
|
+
background: color-mix(in oklab, var(--fg) 8%, transparent);
|
|
3189
|
+
color: var(--fg); border: none; border-radius: var(--r-1);
|
|
3190
|
+
padding: 4px 8px; cursor: pointer;
|
|
3191
|
+
}
|
|
3192
|
+
.ds-247420 .ds-mermaid-toggle:hover { background: color-mix(in oklab, var(--fg) 14%, transparent); }
|
|
3193
|
+
|
|
3194
|
+
/* Inline/display math — KaTeX HTML swapped into text nodes by
|
|
3195
|
+
src/math.js's renderMathBlocksUnder(). Display math centers on its own line;
|
|
3196
|
+
inline math sits within running text. */
|
|
3197
|
+
.ds-247420 .ds-math-display { display: block; margin: var(--space-2) 0; text-align: center; overflow-x: auto; }
|
|
3198
|
+
.ds-247420 .ds-math-inline { display: inline-block; }
|
|
3199
|
+
|
|
3157
3200
|
.ds-247420 .chat-msg .chat-bubble.chat-code,
|
|
3158
3201
|
.ds-247420 .chat-msg.you .chat-bubble.chat-code,
|
|
3159
3202
|
.ds-247420 .chat-bubble.chat-code {
|
|
@@ -5607,6 +5650,265 @@
|
|
|
5607
5650
|
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
|
|
5608
5651
|
}
|
|
5609
5652
|
.ds-247420 .ds-dropdown-item[aria-disabled="true"] .ds-wts-item-branch { color: var(--fg); font-weight: 600; }
|
|
5653
|
+
/* ============================================================
|
|
5654
|
+
PluginsConfig — plugin/extension list + detail modal.
|
|
5655
|
+
============================================================ */
|
|
5656
|
+
|
|
5657
|
+
.ds-247420 .ds-plugins-overlay {
|
|
5658
|
+
position: fixed; inset: 0; z-index: var(--z-modal, 1000);
|
|
5659
|
+
background: color-mix(in oklab, var(--ink) 35%, transparent);
|
|
5660
|
+
display: flex; align-items: center; justify-content: center;
|
|
5661
|
+
padding: var(--space-3);
|
|
5662
|
+
}
|
|
5663
|
+
.ds-247420 .ds-plugins-modal {
|
|
5664
|
+
width: min(860px, 100%); height: min(76vh, 720px);
|
|
5665
|
+
background: var(--bg); border: var(--bw-hair) solid var(--rule); border-radius: var(--r-3);
|
|
5666
|
+
display: flex; flex-direction: column; overflow: hidden;
|
|
5667
|
+
box-shadow: var(--shadow-3, 0 8px 32px rgba(0,0,0,0.18));
|
|
5668
|
+
}
|
|
5669
|
+
.ds-247420 .ds-plugins-header {
|
|
5670
|
+
display: flex; align-items: center; justify-content: space-between;
|
|
5671
|
+
padding: var(--space-3) var(--space-4);
|
|
5672
|
+
border-bottom: var(--bw-hair) solid var(--rule); flex: 0 0 auto;
|
|
5673
|
+
}
|
|
5674
|
+
.ds-247420 .ds-plugins-title { font-size: var(--fs-md); font-weight: 700; color: var(--fg); }
|
|
5675
|
+
.ds-247420 .ds-plugins-close {
|
|
5676
|
+
background: none; border: none; color: var(--fg-3); cursor: pointer;
|
|
5677
|
+
font-size: 20px; line-height: 1; padding: 2px 6px; border-radius: var(--r-1);
|
|
5678
|
+
}
|
|
5679
|
+
.ds-247420 .ds-plugins-close:hover { background: var(--bg-2); color: var(--fg); }
|
|
5680
|
+
.ds-247420 .ds-plugins-close:focus-visible { outline: var(--focus-w) solid var(--focus-color); outline-offset: var(--focus-offset); }
|
|
5681
|
+
|
|
5682
|
+
.ds-247420 .ds-plugins-body { flex: 1 1 auto; display: flex; overflow: hidden; }
|
|
5683
|
+
|
|
5684
|
+
.ds-247420 .ds-plugins-sidebar {
|
|
5685
|
+
width: 245px; flex: 0 0 auto; overflow-y: auto;
|
|
5686
|
+
border-right: var(--bw-hair) solid var(--rule); background: var(--bg-2);
|
|
5687
|
+
padding: var(--space-2);
|
|
5688
|
+
}
|
|
5689
|
+
.ds-247420 .ds-plugins-sidebar-status {
|
|
5690
|
+
padding: var(--space-3) var(--space-2); font-size: var(--fs-sm); color: var(--fg-3);
|
|
5691
|
+
}
|
|
5692
|
+
.ds-247420 .ds-plugins-sidebar-status.ds-plugins-status-error { color: var(--flame); }
|
|
5693
|
+
.ds-247420 .ds-plugins-list { display: flex; flex-direction: column; gap: 2px; }
|
|
5694
|
+
|
|
5695
|
+
.ds-247420 .ds-plugins-row {
|
|
5696
|
+
display: flex; align-items: center; gap: 8px; width: 100%;
|
|
5697
|
+
padding: var(--space-2); border-radius: var(--r-2);
|
|
5698
|
+
background: none; border: var(--bw-hair) solid transparent; text-align: left; cursor: pointer;
|
|
5699
|
+
color: var(--fg); font: inherit;
|
|
5700
|
+
transition: background var(--dur-snap) var(--ease), border-color var(--dur-snap) var(--ease);
|
|
5701
|
+
}
|
|
5702
|
+
.ds-247420 .ds-plugins-row:hover { background: var(--bg-3, var(--bg)); }
|
|
5703
|
+
.ds-247420 .ds-plugins-row.active { background: var(--accent-tint); border-color: var(--accent); }
|
|
5704
|
+
.ds-247420 .ds-plugins-row:focus-visible { outline: var(--focus-w) solid var(--focus-color); outline-offset: var(--focus-offset); }
|
|
5705
|
+
|
|
5706
|
+
.ds-247420 .ds-plugins-row-body { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
|
|
5707
|
+
.ds-247420 .ds-plugins-row-name {
|
|
5708
|
+
font-family: var(--ff-mono); font-size: var(--fs-sm); color: var(--fg);
|
|
5709
|
+
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
|
|
5710
|
+
}
|
|
5711
|
+
.ds-247420 .ds-plugins-row-meta {
|
|
5712
|
+
font-size: var(--fs-micro); color: var(--fg-3);
|
|
5713
|
+
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
|
|
5714
|
+
}
|
|
5715
|
+
.ds-247420 .ds-plugins-row-busy { flex: 0 0 auto; font-size: var(--fs-micro); color: var(--fg-3); }
|
|
5716
|
+
|
|
5717
|
+
.ds-247420 .ds-plugins-dot {
|
|
5718
|
+
flex: 0 0 auto; width: 7px; height: 7px; border-radius: 50%;
|
|
5719
|
+
}
|
|
5720
|
+
.ds-247420 .ds-plugins-dot.tone-add { background: var(--green-2); }
|
|
5721
|
+
.ds-247420 .ds-plugins-dot.tone-delete { background: var(--flame); }
|
|
5722
|
+
.ds-247420 .ds-plugins-dot.tone-neutral { background: var(--fg-3); }
|
|
5723
|
+
|
|
5724
|
+
.ds-247420 .ds-plugins-main { flex: 1 1 auto; overflow-y: auto; padding: var(--space-4); }
|
|
5725
|
+
|
|
5726
|
+
.ds-247420 .ds-plugins-empty {
|
|
5727
|
+
height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center;
|
|
5728
|
+
gap: var(--space-2); color: var(--fg-3);
|
|
5729
|
+
}
|
|
5730
|
+
|
|
5731
|
+
.ds-247420 .ds-plugins-detail { display: flex; flex-direction: column; gap: var(--space-4); max-width: 640px; }
|
|
5732
|
+
.ds-247420 .ds-plugins-detail-head {
|
|
5733
|
+
display: flex; align-items: center; justify-content: space-between; gap: var(--space-3); flex-wrap: wrap;
|
|
5734
|
+
}
|
|
5735
|
+
.ds-247420 .ds-plugins-detail-title { display: flex; align-items: center; gap: 8px; min-width: 0; }
|
|
5736
|
+
.ds-247420 .ds-plugins-detail-title .name {
|
|
5737
|
+
font-family: var(--ff-mono); font-size: var(--fs-md); font-weight: 600; color: var(--fg);
|
|
5738
|
+
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
|
|
5739
|
+
}
|
|
5740
|
+
.ds-247420 .ds-plugins-version { font-size: var(--fs-micro); color: var(--fg-3); }
|
|
5741
|
+
|
|
5742
|
+
.ds-247420 .ds-plugins-toggle {
|
|
5743
|
+
flex: 0 0 auto; width: 40px; height: 22px; border-radius: 11px; border: none; padding: 0;
|
|
5744
|
+
background: var(--rule); position: relative; cursor: pointer;
|
|
5745
|
+
transition: background var(--dur-snap) var(--ease);
|
|
5746
|
+
}
|
|
5747
|
+
.ds-247420 .ds-plugins-toggle.on { background: var(--accent); }
|
|
5748
|
+
.ds-247420 .ds-plugins-toggle[disabled] { cursor: wait; opacity: 0.65; }
|
|
5749
|
+
.ds-247420 .ds-plugins-toggle-knob {
|
|
5750
|
+
position: absolute; top: 3px; left: 3px; width: 16px; height: 16px; border-radius: 50%;
|
|
5751
|
+
background: var(--bg); box-shadow: var(--shadow-1, 0 1px 4px rgba(0,0,0,0.22));
|
|
5752
|
+
transition: left var(--dur-snap) var(--ease);
|
|
5753
|
+
}
|
|
5754
|
+
.ds-247420 .ds-plugins-toggle.on .ds-plugins-toggle-knob { left: 21px; }
|
|
5755
|
+
|
|
5756
|
+
.ds-247420 .ds-plugins-fact-grid {
|
|
5757
|
+
display: grid; grid-template-columns: minmax(96px, 130px) minmax(0, 1fr);
|
|
5758
|
+
gap: 9px var(--space-3); font-size: var(--fs-sm);
|
|
5759
|
+
}
|
|
5760
|
+
.ds-247420 .ds-plugins-fact-label { color: var(--fg-3); }
|
|
5761
|
+
.ds-247420 .ds-plugins-fact-value { color: var(--fg-2); }
|
|
5762
|
+
.ds-247420 .ds-plugins-fact-value.ds-plugins-mono { font-family: var(--ff-mono); overflow-wrap: anywhere; }
|
|
5763
|
+
.ds-247420 .ds-plugins-fact-value.tone-text-add { color: var(--green-2); }
|
|
5764
|
+
.ds-247420 .ds-plugins-fact-value.tone-text-delete { color: var(--flame); }
|
|
5765
|
+
.ds-247420 .ds-plugins-fact-value.tone-text-neutral { color: var(--fg-3); }
|
|
5766
|
+
|
|
5767
|
+
.ds-247420 .ds-plugins-group-label {
|
|
5768
|
+
font-size: var(--fs-micro); font-weight: 600; color: var(--fg-3);
|
|
5769
|
+
text-transform: uppercase; letter-spacing: 0.02em; margin-bottom: 6px;
|
|
5770
|
+
}
|
|
5771
|
+
.ds-247420 .ds-plugins-requires-list { display: flex; flex-wrap: wrap; gap: 6px; }
|
|
5772
|
+
.ds-247420 .ds-plugins-chip {
|
|
5773
|
+
font-family: var(--ff-mono); font-size: var(--fs-micro); color: var(--fg-2);
|
|
5774
|
+
border: var(--bw-hair) solid var(--rule); border-radius: var(--r-1); padding: 2px 7px;
|
|
5775
|
+
}
|
|
5776
|
+
.ds-247420 .ds-plugins-requires-empty { font-size: var(--fs-sm); color: var(--fg-3); }
|
|
5777
|
+
|
|
5778
|
+
.ds-247420 .ds-plugins-detail-actions { display: flex; gap: var(--space-2); }
|
|
5779
|
+
.ds-247420 .ds-plugins-btn {
|
|
5780
|
+
padding: 6px 12px; background: none; border: var(--bw-hair) solid var(--rule); border-radius: var(--r-2);
|
|
5781
|
+
color: var(--fg-2); cursor: pointer; font-size: var(--fs-sm);
|
|
5782
|
+
}
|
|
5783
|
+
.ds-247420 .ds-plugins-btn:hover { background: var(--bg-2); }
|
|
5784
|
+
.ds-247420 .ds-plugins-btn[disabled] { cursor: not-allowed; opacity: 0.5; }
|
|
5785
|
+
|
|
5786
|
+
.ds-247420 .ds-plugins-footer {
|
|
5787
|
+
display: flex; align-items: center; justify-content: flex-end;
|
|
5788
|
+
padding: var(--space-2) var(--space-4);
|
|
5789
|
+
border-top: var(--bw-hair) solid var(--rule); flex: 0 0 auto;
|
|
5790
|
+
}
|
|
5791
|
+
.ds-247420 .ds-plugins-footer-count { font-size: var(--fs-micro); color: var(--fg-3); }
|
|
5792
|
+
/* ============================================================
|
|
5793
|
+
ModelsConfig — provider/model availability panel.
|
|
5794
|
+
============================================================ */
|
|
5795
|
+
.ds-247420 .ds-mc { display: flex; flex-direction: column; gap: var(--space-3); }
|
|
5796
|
+
|
|
5797
|
+
.ds-247420 .ds-mc-loading, .ds-247420 .ds-mc-empty {
|
|
5798
|
+
display: flex; flex-direction: column; align-items: center; justify-content: center;
|
|
5799
|
+
gap: var(--space-2); padding: var(--space-6) var(--space-3);
|
|
5800
|
+
color: var(--fg-3); text-align: center;
|
|
5801
|
+
}
|
|
5802
|
+
.ds-247420 .ds-mc-empty-hint { font-size: var(--fs-xs); color: var(--fg-3); }
|
|
5803
|
+
|
|
5804
|
+
/* Summary bar: totals + last-checked + refresh/rebuild actions. */
|
|
5805
|
+
.ds-247420 .ds-mc-summary {
|
|
5806
|
+
display: flex; align-items: center; justify-content: space-between; gap: var(--space-3);
|
|
5807
|
+
flex-wrap: wrap;
|
|
5808
|
+
}
|
|
5809
|
+
.ds-247420 .ds-mc-summary-facts { display: flex; gap: var(--space-3); font-size: var(--fs-sm); color: var(--fg-2); }
|
|
5810
|
+
.ds-247420 .ds-mc-summary-ts { color: var(--fg-3); }
|
|
5811
|
+
.ds-247420 .ds-mc-summary-actions { display: flex; align-items: center; gap: var(--space-2); }
|
|
5812
|
+
.ds-247420 .ds-mc-rebuild-error { font-size: var(--fs-xs); color: var(--flame); }
|
|
5813
|
+
|
|
5814
|
+
/* Two-pane body: provider tree (left) + model detail (right). */
|
|
5815
|
+
.ds-247420 .ds-mc-body {
|
|
5816
|
+
display: grid; grid-template-columns: minmax(220px, 300px) 1fr; gap: var(--space-3);
|
|
5817
|
+
align-items: start;
|
|
5818
|
+
}
|
|
5819
|
+
@media (max-width: 720px) {
|
|
5820
|
+
.ds-247420 .ds-mc-body { grid-template-columns: 1fr; }
|
|
5821
|
+
}
|
|
5822
|
+
|
|
5823
|
+
.ds-247420 .ds-mc-tree { display: flex; flex-direction: column; gap: 2px; }
|
|
5824
|
+
.ds-247420 .ds-mc-tree-group + .ds-mc-tree-group { margin-top: 2px; }
|
|
5825
|
+
|
|
5826
|
+
.ds-247420 .ds-mc-key-chip {
|
|
5827
|
+
font-family: var(--ff-mono); font-size: var(--fs-micro); font-weight: 700;
|
|
5828
|
+
padding: 1px 6px; border-radius: var(--r-1);
|
|
5829
|
+
}
|
|
5830
|
+
.ds-247420 .ds-mc-key-chip.tone-ok { color: var(--green-2); background: var(--green-tint); }
|
|
5831
|
+
.ds-247420 .ds-mc-key-chip.tone-fail { color: var(--fg-3); background: var(--bg-3); }
|
|
5832
|
+
|
|
5833
|
+
.ds-247420 .ds-mc-sampler {
|
|
5834
|
+
display: inline-block; margin: 2px 0 4px 12px;
|
|
5835
|
+
font-size: var(--fs-micro); padding: 1px 6px; border-radius: var(--r-1);
|
|
5836
|
+
}
|
|
5837
|
+
.ds-247420 .ds-mc-sampler.tone-ok { color: var(--green-2); background: var(--green-tint); }
|
|
5838
|
+
.ds-247420 .ds-mc-sampler.tone-fail { color: var(--ink); background: var(--sun); }
|
|
5839
|
+
|
|
5840
|
+
/* Detail pane */
|
|
5841
|
+
.ds-247420 .ds-mc-detail-empty { padding: var(--space-3); color: var(--fg-3); font-size: var(--fs-sm); }
|
|
5842
|
+
.ds-247420 .ds-mc-detail-head {
|
|
5843
|
+
display: flex; align-items: center; gap: var(--space-2);
|
|
5844
|
+
margin-bottom: var(--space-2);
|
|
5845
|
+
}
|
|
5846
|
+
.ds-247420 .ds-mc-detail-title { font-family: var(--ff-mono); font-size: var(--fs-base); font-weight: 700; }
|
|
5847
|
+
|
|
5848
|
+
.ds-247420 .ds-mc-discovery-error {
|
|
5849
|
+
display: flex; align-items: center; gap: var(--space-1-75);
|
|
5850
|
+
padding: var(--space-1-75) var(--space-2);
|
|
5851
|
+
margin-bottom: var(--space-2);
|
|
5852
|
+
color: var(--flame); background: color-mix(in oklab, var(--flame) 12%, transparent);
|
|
5853
|
+
border-radius: var(--r-1); font-size: var(--fs-xs);
|
|
5854
|
+
}
|
|
5855
|
+
|
|
5856
|
+
.ds-247420 .ds-mc-model-list { display: flex; flex-direction: column; gap: var(--space-2); }
|
|
5857
|
+
.ds-247420 .ds-mc-model-row {
|
|
5858
|
+
padding: var(--space-2); border: var(--bw-hair) solid var(--rule); border-radius: var(--r-2);
|
|
5859
|
+
}
|
|
5860
|
+
.ds-247420 .ds-mc-model-row.active { border-color: var(--accent); background: var(--accent-tint); }
|
|
5861
|
+
.ds-247420 .ds-mc-model-head {
|
|
5862
|
+
display: flex; align-items: center; gap: var(--space-2); flex-wrap: wrap;
|
|
5863
|
+
margin-bottom: var(--space-1-75);
|
|
5864
|
+
}
|
|
5865
|
+
.ds-247420 .ds-mc-model-id { font-family: var(--ff-mono); font-size: var(--fs-sm); font-weight: 600; }
|
|
5866
|
+
.ds-247420 .ds-mc-model-via { font-size: var(--fs-micro); color: var(--fg-3); }
|
|
5867
|
+
.ds-247420 .ds-mc-usable-chip {
|
|
5868
|
+
font-size: var(--fs-micro); font-weight: 700; padding: 1px 6px; border-radius: var(--r-1);
|
|
5869
|
+
margin-left: auto;
|
|
5870
|
+
}
|
|
5871
|
+
.ds-247420 .ds-mc-usable-chip.tone-ok { color: var(--green-2); background: var(--green-tint); }
|
|
5872
|
+
.ds-247420 .ds-mc-usable-chip.tone-fail { color: var(--fg-3); background: var(--bg-3); }
|
|
5873
|
+
|
|
5874
|
+
/* 7-mode availability grid — one chip per mode, wraps on narrow panes. */
|
|
5875
|
+
.ds-247420 .ds-mc-mode-grid { display: flex; flex-wrap: wrap; gap: 4px; }
|
|
5876
|
+
.ds-247420 .ds-mc-chip {
|
|
5877
|
+
font-family: var(--ff-mono); font-size: var(--fs-micro); font-weight: 600;
|
|
5878
|
+
padding: 2px 7px; border-radius: var(--r-1);
|
|
5879
|
+
border: var(--bw-hair) solid transparent;
|
|
5880
|
+
}
|
|
5881
|
+
.ds-247420 .ds-mc-chip.tone-ok { color: var(--green-2); background: var(--green-tint); }
|
|
5882
|
+
.ds-247420 .ds-mc-chip.tone-fail { color: var(--on-color); background: var(--flame); }
|
|
5883
|
+
.ds-247420 .ds-mc-chip.tone-skip { color: var(--fg-3); background: var(--bg-3); }
|
|
5884
|
+
.ds-247420 .ds-mc-chip.tone-unknown { color: var(--fg-3); background: none; border-color: var(--rule); opacity: 0.6; }
|
|
5885
|
+
/* ============================================================
|
|
5886
|
+
SkillsConfig — skill list + detail panel. Shares chrome with
|
|
5887
|
+
PluginsConfig (.ds-plugins-overlay/-modal/-header/-body/-sidebar/-list/
|
|
5888
|
+
-row/-dot/-main/-detail/-toggle/-fact-grid/-chip/-footer); the classes
|
|
5889
|
+
below are the skills-specific additions only.
|
|
5890
|
+
============================================================ */
|
|
5891
|
+
|
|
5892
|
+
.ds-247420 .ds-skills-search-row {
|
|
5893
|
+
padding: var(--space-2) var(--space-4);
|
|
5894
|
+
border-bottom: var(--bw-hair) solid var(--rule); flex: 0 0 auto;
|
|
5895
|
+
}
|
|
5896
|
+
|
|
5897
|
+
.ds-247420 .ds-skills-group { margin-bottom: var(--space-2); }
|
|
5898
|
+
.ds-247420 .ds-skills-group-label {
|
|
5899
|
+
padding: var(--space-2) var(--space-2) 3px;
|
|
5900
|
+
font-size: var(--fs-micro); font-weight: 600; color: var(--fg-3);
|
|
5901
|
+
text-transform: uppercase; letter-spacing: 0.06em;
|
|
5902
|
+
}
|
|
5903
|
+
|
|
5904
|
+
.ds-247420 .ds-skills-description { font-size: var(--fs-sm); color: var(--fg-2); line-height: 1.5; }
|
|
5905
|
+
|
|
5906
|
+
.ds-247420 .ds-skills-body-group { display: flex; flex-direction: column; }
|
|
5907
|
+
.ds-247420 .ds-skills-body-preview {
|
|
5908
|
+
font-family: var(--ff-mono); font-size: var(--fs-micro); color: var(--fg-2);
|
|
5909
|
+
background: var(--bg-2); border: var(--bw-hair) solid var(--rule); border-radius: var(--r-2);
|
|
5910
|
+
padding: var(--space-3); overflow: auto; max-height: 260px; white-space: pre-wrap; word-break: break-word;
|
|
5911
|
+
}
|
|
5610
5912
|
|
|
5611
5913
|
/* community.css */
|
|
5612
5914
|
/* ============================================================
|
|
@@ -7761,6 +8063,55 @@
|
|
|
7761
8063
|
.ds-247420 .ds-session-state { padding: var(--space-5) var(--space-3); text-align: center; color: var(--fg-3); font-size: var(--fs-sm); }
|
|
7762
8064
|
.ds-247420 .ds-session-state-error { color: var(--flame); }
|
|
7763
8065
|
|
|
8066
|
+
/* Fork/branch tree nesting — child sessions indent under their parent with a
|
|
8067
|
+
collapse toggle and a small branch glyph, mirroring pi-web's SessionSidebar
|
|
8068
|
+
tree without reimplementing its inline-style React component. */
|
|
8069
|
+
.ds-247420 .ds-session-row-nested { position: relative; }
|
|
8070
|
+
.ds-247420 .ds-session-tree-toggle {
|
|
8071
|
+
flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center;
|
|
8072
|
+
width: 16px; height: 16px; padding: 0; background: none; border: none;
|
|
8073
|
+
color: var(--fg-3); cursor: pointer; transform: rotate(0deg); transition: transform var(--dur-snap) var(--ease);
|
|
8074
|
+
}
|
|
8075
|
+
.ds-247420 .ds-session-tree-toggle.open { transform: rotate(90deg); }
|
|
8076
|
+
.ds-247420 .ds-session-tree-toggle:hover { color: var(--fg); }
|
|
8077
|
+
.ds-247420 .ds-session-fork-icon { flex: 0 0 auto; display: inline-flex; color: var(--fg-3); }
|
|
8078
|
+
|
|
8079
|
+
/* Hover-revealed rename/delete row actions. */
|
|
8080
|
+
.ds-247420 .ds-session-row-actions { flex: 0 0 auto; display: none; align-items: center; gap: var(--space-1); }
|
|
8081
|
+
.ds-247420 .ds-session-row:hover .ds-session-row-actions,
|
|
8082
|
+
.ds-247420 .ds-session-row:focus-within .ds-session-row-actions { display: flex; }
|
|
8083
|
+
.ds-247420 .ds-session-row-action {
|
|
8084
|
+
display: inline-flex; align-items: center; justify-content: center;
|
|
8085
|
+
width: 24px; height: 24px; padding: 0; background: var(--bg-2); border: var(--border-w) solid var(--border);
|
|
8086
|
+
border-radius: var(--r-1); color: var(--fg-3); cursor: pointer;
|
|
8087
|
+
}
|
|
8088
|
+
.ds-247420 .ds-session-row-action:hover { background: var(--bg-3); color: var(--fg); border-color: var(--fg-3); }
|
|
8089
|
+
.ds-247420 .ds-session-row-action-danger:hover { background: color-mix(in srgb, var(--flame) 12%, var(--bg-2)); color: var(--flame); border-color: var(--flame); }
|
|
8090
|
+
@media (pointer: coarse) { .ds-247420 .ds-session-row-action { min-width: 44px; min-height: 44px; } }
|
|
8091
|
+
|
|
8092
|
+
/* Inline rename — the row's title area swaps for a text input at the same
|
|
8093
|
+
height; no modal, matches the row-in-place edit pattern used elsewhere. */
|
|
8094
|
+
.ds-247420 .ds-session-rename-input {
|
|
8095
|
+
flex: 1; min-width: 0; font-size: var(--fs-sm); font-family: inherit; color: var(--fg);
|
|
8096
|
+
background: var(--bg); border: var(--border-w) solid var(--accent); border-radius: var(--r-1);
|
|
8097
|
+
padding: var(--space-1) var(--space-2);
|
|
8098
|
+
}
|
|
8099
|
+
.ds-247420 .ds-session-rename-input:focus { outline: none; }
|
|
8100
|
+
|
|
8101
|
+
/* Inline delete confirm — same row height, two flat buttons, no modal;
|
|
8102
|
+
mirrors SessionDashboard's arm-then-confirm bulk-stop control. */
|
|
8103
|
+
.ds-247420 .ds-session-confirm-msg { flex: 1; min-width: 0; font-size: var(--fs-sm); color: var(--fg); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
8104
|
+
.ds-247420 .ds-session-confirm-actions { flex: 0 0 auto; display: flex; gap: var(--space-1); }
|
|
8105
|
+
.ds-247420 .ds-session-confirm-delete, .ds-247420 .ds-session-confirm-cancel {
|
|
8106
|
+
font-size: var(--fs-tiny); font-weight: 600; padding: var(--space-1) var(--space-2);
|
|
8107
|
+
border-radius: var(--r-1); cursor: pointer;
|
|
8108
|
+
}
|
|
8109
|
+
.ds-247420 .ds-session-confirm-delete { background: var(--flame); border: none; color: var(--bg); }
|
|
8110
|
+
.ds-247420 .ds-session-confirm-delete:hover { filter: brightness(1.1); }
|
|
8111
|
+
.ds-247420 .ds-session-confirm-cancel { background: var(--bg-2); border: var(--border-w) solid var(--border); color: var(--fg-2); }
|
|
8112
|
+
.ds-247420 .ds-session-confirm-cancel:hover { background: var(--bg-3); color: var(--fg); }
|
|
8113
|
+
@media (pointer: coarse) { .ds-247420 .ds-session-confirm-delete, .ds-247420 .ds-session-confirm-cancel { min-height: 44px; } }
|
|
8114
|
+
|
|
7764
8115
|
/* ----------------------------------------------------------------------------
|
|
7765
8116
|
SessionDashboard — grid of live-session cards.
|
|
7766
8117
|
---------------------------------------------------------------------------- */
|
|
@@ -8470,6 +8821,85 @@
|
|
|
8470
8821
|
}
|
|
8471
8822
|
.ds-247420 .chat-composer .send.cancel:active { filter: brightness(0.96); }
|
|
8472
8823
|
|
|
8824
|
+
/* ChatMinimap — scroll-position density overview beside a chat thread.
|
|
8825
|
+
Purely token-driven (no raw color literals — see lintTokensOrThrow). Dot
|
|
8826
|
+
position/tooltip offsets are set imperatively in JS (chat-minimap.js) since
|
|
8827
|
+
they are per-render numeric layout, not a static rule. */
|
|
8828
|
+
.ds-247420 .chat-minimap {
|
|
8829
|
+
position: relative;
|
|
8830
|
+
flex-shrink: 0;
|
|
8831
|
+
align-self: stretch;
|
|
8832
|
+
cursor: default;
|
|
8833
|
+
user-select: none;
|
|
8834
|
+
border-left: var(--bw-hair) solid var(--rule);
|
|
8835
|
+
background: var(--bg-2);
|
|
8836
|
+
overflow: visible;
|
|
8837
|
+
}
|
|
8838
|
+
.ds-247420 .chat-minimap-viewport {
|
|
8839
|
+
position: absolute;
|
|
8840
|
+
left: 0;
|
|
8841
|
+
right: 0;
|
|
8842
|
+
background: color-mix(in oklab, var(--fg-3) 12%, transparent);
|
|
8843
|
+
border-top: var(--bw-hair) solid var(--rule);
|
|
8844
|
+
border-bottom: var(--bw-hair) solid var(--rule);
|
|
8845
|
+
pointer-events: none;
|
|
8846
|
+
z-index: 1;
|
|
8847
|
+
}
|
|
8848
|
+
.ds-247420 .chat-minimap-centerline {
|
|
8849
|
+
position: absolute;
|
|
8850
|
+
left: 50%;
|
|
8851
|
+
top: 0;
|
|
8852
|
+
bottom: 0;
|
|
8853
|
+
width: 1px;
|
|
8854
|
+
background: var(--rule);
|
|
8855
|
+
transform: translateX(-50%);
|
|
8856
|
+
z-index: 0;
|
|
8857
|
+
}
|
|
8858
|
+
.ds-247420 .chat-minimap-dot {
|
|
8859
|
+
position: absolute;
|
|
8860
|
+
left: 50%;
|
|
8861
|
+
width: 6px;
|
|
8862
|
+
height: 6px;
|
|
8863
|
+
border-radius: var(--r-pill, 999px);
|
|
8864
|
+
transform: translate(-50%, -50%) scale(1);
|
|
8865
|
+
transition: transform 0.1s;
|
|
8866
|
+
z-index: 2;
|
|
8867
|
+
}
|
|
8868
|
+
.ds-247420 .chat-minimap-dot.is-user {
|
|
8869
|
+
background: color-mix(in oklab, var(--accent) 18%, transparent);
|
|
8870
|
+
border: 1.5px solid color-mix(in oklab, var(--accent) 70%, transparent);
|
|
8871
|
+
}
|
|
8872
|
+
.ds-247420 .chat-minimap-dot.is-assistant {
|
|
8873
|
+
background: color-mix(in oklab, var(--fg-3) 12%, transparent);
|
|
8874
|
+
border: 1.5px solid color-mix(in oklab, var(--fg-3) 50%, transparent);
|
|
8875
|
+
}
|
|
8876
|
+
.ds-247420 .chat-minimap-dot.is-nearest { transform: translate(-50%, -50%) scale(1.6); }
|
|
8877
|
+
.ds-247420 .chat-minimap-tooltip {
|
|
8878
|
+
position: absolute;
|
|
8879
|
+
right: 100%;
|
|
8880
|
+
margin-right: var(--space-1);
|
|
8881
|
+
background: var(--bg);
|
|
8882
|
+
border-top: var(--bw-hair) solid var(--rule);
|
|
8883
|
+
border-right: var(--bw-hair) solid var(--rule);
|
|
8884
|
+
border-bottom: var(--bw-hair) solid var(--rule);
|
|
8885
|
+
border-left: 2px solid var(--fg-3);
|
|
8886
|
+
border-radius: var(--r-1);
|
|
8887
|
+
padding: calc(var(--space-1) / 2) var(--space-2);
|
|
8888
|
+
z-index: 100;
|
|
8889
|
+
pointer-events: none;
|
|
8890
|
+
opacity: 0.45;
|
|
8891
|
+
font-size: var(--fs-tiny);
|
|
8892
|
+
color: var(--fg-3);
|
|
8893
|
+
line-height: 1.4;
|
|
8894
|
+
white-space: nowrap;
|
|
8895
|
+
overflow: hidden;
|
|
8896
|
+
text-overflow: ellipsis;
|
|
8897
|
+
transition: top 0.1s, opacity 0.1s;
|
|
8898
|
+
}
|
|
8899
|
+
.ds-247420 .chat-minimap-tooltip.is-user { border-left-color: color-mix(in oklab, var(--accent) 70%, transparent); }
|
|
8900
|
+
.ds-247420 .chat-minimap-tooltip.is-assistant { border-left-color: color-mix(in oklab, var(--fg-3) 50%, transparent); }
|
|
8901
|
+
.ds-247420 .chat-minimap-tooltip.is-nearest { opacity: 1; color: var(--fg); }
|
|
8902
|
+
|
|
8473
8903
|
/* editor-primitives.css */
|
|
8474
8904
|
/* editor-primitives.css — chrome for in-engine editors, inspectors, IDEs,
|
|
8475
8905
|
debug HUDs. All rules under .ds-247420 scope (build prefixes). Tokens
|
|
@@ -8612,15 +9042,38 @@
|
|
|
8612
9042
|
@media (prefers-reduced-motion: reduce) {
|
|
8613
9043
|
.ds-247420 .ds-ep-tab-indicator { transition: none; }
|
|
8614
9044
|
}
|
|
9045
|
+
/* scroll: content-sized tabs (min/max-width, no stretch) so overflow-x on the
|
|
9046
|
+
head has real per-tab width to scroll against — the pi-web TabBar shape for
|
|
9047
|
+
an unbounded open-file/open-session strip, vs. the default fixed small set
|
|
9048
|
+
that stretches evenly across the available width. */
|
|
9049
|
+
.ds-247420 .ds-ep-tabs-head.scroll .ds-ep-tab-wrap { flex: 0 0 auto; min-width: 80px; max-width: 180px; }
|
|
9050
|
+
.ds-247420 .ds-ep-tabs-head.scroll .ds-ep-tab { flex: 1; min-width: 0; }
|
|
9051
|
+
.ds-247420 .ds-ep-tab-wrap { display: flex; align-items: stretch; flex: 1; min-width: 0; }
|
|
8615
9052
|
.ds-247420 .ds-ep-tab {
|
|
8616
|
-
flex: 1; appearance: none; background: transparent; border: 0;
|
|
9053
|
+
flex: 1; min-width: 0; appearance: none; background: transparent; border: 0;
|
|
8617
9054
|
border-bottom: 2px solid transparent;
|
|
8618
9055
|
color: var(--panel-text-3);
|
|
8619
9056
|
padding: 8px 10px;
|
|
8620
9057
|
font: inherit; cursor: pointer;
|
|
9058
|
+
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
|
|
8621
9059
|
transition: color var(--dur-snap, 80ms) var(--ease, ease), border-color var(--dur-snap, 80ms) var(--ease, ease);
|
|
8622
9060
|
}
|
|
8623
9061
|
.ds-247420 .ds-ep-tab:hover { color: var(--panel-text-2); }
|
|
9062
|
+
/* Close button — hidden until hover/focus within the tab, matching pi-web's
|
|
9063
|
+
hover-reveal close affordance; always visible on the active tab so touch/
|
|
9064
|
+
keyboard users without hover can still find it. */
|
|
9065
|
+
.ds-247420 .ds-ep-tab-close {
|
|
9066
|
+
appearance: none; background: transparent; border: 0; border-radius: var(--r-0);
|
|
9067
|
+
display: flex; align-items: center; justify-content: center;
|
|
9068
|
+
width: 22px; height: 22px; margin: var(--space-1-75) var(--space-1) var(--space-1-75) 0; padding: 0;
|
|
9069
|
+
flex-shrink: 0; color: var(--panel-text-3); cursor: pointer;
|
|
9070
|
+
opacity: 0; transition: opacity var(--dur-snap, 80ms) var(--ease, ease), background var(--dur-snap, 80ms) var(--ease, ease), color var(--dur-snap, 80ms) var(--ease, ease);
|
|
9071
|
+
}
|
|
9072
|
+
.ds-247420 .ds-ep-tab-wrap:hover .ds-ep-tab-close,
|
|
9073
|
+
.ds-247420 .ds-ep-tab-wrap:focus-within .ds-ep-tab-close,
|
|
9074
|
+
.ds-247420 .ds-ep-tab-wrap.active .ds-ep-tab-close { opacity: 1; }
|
|
9075
|
+
.ds-247420 .ds-ep-tab-close:hover { background: var(--panel-2); color: var(--panel-text-1); }
|
|
9076
|
+
.ds-247420 .ds-ep-tab-close:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; opacity: 1; }
|
|
8624
9077
|
.ds-247420 .ds-ep-tab.active {
|
|
8625
9078
|
color: var(--accent);
|
|
8626
9079
|
border-bottom-color: var(--accent);
|