typebulb 0.27.2 → 0.28.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.
@@ -810,7 +810,7 @@ a.server-port:hover { text-decoration: underline; }
810
810
  the popover cap, plain auto rows compress to each row's min-height contribution, so a full-text
811
811
  row's snippet line bleeds under the next row as overlapping text. max-content tracks never
812
812
  compress; the list scrolls, rows keep their content height. */
813
- .bulb-list { display: grid; grid-template-columns: auto 1fr auto auto auto; grid-auto-rows: max-content; column-gap: .6rem; row-gap: .15rem; align-items: center; align-content: start; padding-right: 4px; flex: 1; min-height: 0; overflow-y: auto; }
813
+ .bulb-list { display: grid; grid-template-columns: auto 1fr auto auto auto auto; grid-auto-rows: max-content; column-gap: .6rem; row-gap: .15rem; align-items: center; align-content: start; padding-right: 4px; flex: 1; min-height: 0; overflow-y: auto; }
814
814
  /* A stopped bulb's name isn't a link (no running URL), so it stays plain foreground. */
815
815
  .server-name.stopped { color: var(--fg); }
816
816
  /* Downloaded-bulb rows (TB-Agent-Mirror.md): the user link — the folder/user slug (`samples`) in
@@ -865,6 +865,22 @@ a.server-port:hover { text-decoration: underline; }
865
865
  .bulb-launch.launching { visibility: visible; border-color: var(--fold-marker); }
866
866
  .server-stop { color: var(--muted); }
867
867
  .server-stop:hover { color: var(--err); border-color: var(--err); }
868
+ /* push/pull verbs (TB-Push-Pull.md, Mirror surface): borderless quiet icons in one cell —
869
+ frequency earns mutedness, so like the play button they're hover/keyboard-revealed
870
+ (visibility reserves the slot; columns never shift). Accent on hover marks the live control. */
871
+ .sync-cell { display: inline-flex; gap: .15rem; justify-self: center; }
872
+ .sync-btn {
873
+ font: inherit; appearance: none; margin: 0; padding: 0 .1rem; cursor: pointer;
874
+ background: transparent; border: none; color: var(--muted);
875
+ display: inline-flex; align-items: center; visibility: hidden;
876
+ }
877
+ .server-row:hover .sync-btn, .server-row.active .sync-btn { visibility: visible; }
878
+ .sync-btn:hover { color: var(--accent); }
879
+ /* In-flight: stays visible (hover-independent) and shimmers, same contract as .bulb-launch.launching;
880
+ the ✓ beat after success likewise holds its slot so the arrow's return doesn't shift columns. */
881
+ .sync-btn.busy, .sync-btn.done { visibility: visible; }
882
+ .sync-btn.done { color: var(--fold-marker); }
883
+ .btn-icon-sm { width: 13px; height: 13px; }
868
884
  /* Elevation prompt (VS-Code-Workspace-Trust style) — a modal over the whole view, since a
869
885
  denied capability is worth interrupting for. Backdrop dims; the card holds the choice. */
870
886
  .trust-back {