prreviewbuddy 0.52.2 → 0.53.1

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/static/shell.css CHANGED
@@ -3177,8 +3177,7 @@ a.prb-rail-item { text-decoration: none; }
3177
3177
  .prb-index[data-selecting] .prb-card-link { padding-left: 42px; }
3178
3178
  /* A ticked row is legible without finding its box, which matters most on the rows a search has
3179
3179
  just brought back into view. */
3180
- .prb-card[data-selected] { border-color: var(--brand); }
3181
- .prb-card[data-selected] .prb-card-link { background: var(--brand-muted); }
3180
+ .prb-card[data-selected] { border-color: var(--brand); background: var(--brand-muted); }
3182
3181
  /* Nothing in the row navigates while selecting, so nothing in it should look like it might. */
3183
3182
  .prb-index[data-selecting] .prb-card-link { cursor: default; }
3184
3183
 
@@ -4543,7 +4542,7 @@ a.prb-rail-item { text-decoration: none; }
4543
4542
  line-height: var(--lh-body);
4544
4543
  color: var(--pane-ink-muted);
4545
4544
  }
4546
- .prb-kiss-kept-title { margin: 0 0 4px; font-weight: 600; color: var(--pane-ink); }
4545
+ .prb-kiss-kept-title { font-weight: 600; color: var(--pane-ink); }
4547
4546
 
4548
4547
  /* What validation withdrew, in the amber the disclosure strip already uses for exactly this. */
4549
4548
  .prb-kiss-audit {
@@ -4668,29 +4667,153 @@ a.prb-rail-item { text-decoration: none; }
4668
4667
  .prb-kiss-evidence .prb-kiss-locations { margin-top: 4px; }
4669
4668
  .prb-kiss-draft blockquote { margin: 0; font-size: var(--t-body); line-height: var(--lh-body); color: var(--pane-ink); }
4670
4669
 
4671
- /* The same control the assistant's replies carry, in this pane's light palette. Literal colours
4672
- rather than the shell's variables, because the document is light on every theme and a token
4673
- defined against the dark shell would put grey on white here. */
4674
- .prb-kiss-draft .pr-helper-chat-actions { display: flex; margin-top: 8px; }
4675
- .prb-kiss-draft .pr-helper-msg-copy {
4676
- display: inline-flex;
4670
+ /* ── KISS decisions ──
4671
+ The card's title row holds Copy and Ask Buddy as a finding's does. The footer holds what acts on
4672
+ the recommendation: Open file and Copy draft comment on the left, the decision on the right. */
4673
+ .prb-kiss-rec-title-row { display: flex; align-items: flex-start; gap: 8px; }
4674
+ .prb-kiss-rec-title-row > .prb-kiss-rec-title { flex: 1; min-width: 0; }
4675
+ .prb-kiss-rec-title:focus { outline: none; }
4676
+ .prb-kiss-rec-title:focus-visible { outline: 2px solid var(--pane-accent); outline-offset: 2px; border-radius: 4px; }
4677
+
4678
+ .prb-kiss-decision-status {
4679
+ padding: 2px 8px;
4680
+ border-radius: 999px;
4681
+ font-size: var(--t-micro);
4682
+ white-space: nowrap;
4683
+ background: rgba(15, 23, 42, 0.05);
4684
+ color: var(--pane-ink-muted);
4685
+ }
4686
+ /* Accepted in the pane's accent, declined in neutral: two ordinary answers, neither of them a
4687
+ warning. Green would say "fixed", which a decision about a suggestion is not. */
4688
+ .prb-kiss-decision-status[data-kiss-status='accepted'] { background: rgba(147, 51, 234, 0.1); color: var(--pane-accent-ink); }
4689
+ .prb-kiss-decision-status[data-kiss-status='declined'] { background: rgba(15, 23, 42, 0.08); color: var(--pane-ink); }
4690
+ .prb-kiss-stale {
4691
+ padding: 1px 7px;
4692
+ border-radius: 999px;
4693
+ border: 1px solid rgba(180, 83, 9, 0.3);
4694
+ font-size: var(--t-micro);
4695
+ color: #9a3412;
4696
+ white-space: nowrap;
4697
+ }
4698
+
4699
+ .prb-kiss-rec-actions {
4700
+ display: flex;
4701
+ flex-wrap: wrap;
4677
4702
  align-items: center;
4678
- gap: 5px;
4679
- padding: 3px 6px;
4680
- border: 0;
4681
- border-radius: 5px;
4682
- background: none;
4703
+ justify-content: space-between;
4704
+ gap: 8px 12px;
4705
+ margin-top: 14px;
4706
+ padding-top: 12px;
4707
+ border-top: 1px solid var(--pane-line);
4708
+ }
4709
+ .prb-kiss-rec-actions-aside { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; }
4710
+ .prb-kiss-decide-group { display: inline-flex; flex-wrap: wrap; gap: 6px; margin-left: auto; }
4711
+
4712
+ .prb-kiss-open-file,
4713
+ .prb-kiss-decide,
4714
+ .prb-kiss-run-again,
4715
+ .prb-kiss-fresh-run,
4716
+ .prb-kiss-run-cancel,
4717
+ .prb-kiss-decision-retry {
4718
+ padding: 5px 12px;
4719
+ border-radius: 6px;
4720
+ border: 1px solid var(--pane-line);
4721
+ background: var(--pane-surface);
4722
+ font: inherit;
4723
+ font-size: var(--t-meta);
4724
+ font-weight: 600;
4683
4725
  color: var(--pane-ink-muted);
4684
- font-family: inherit;
4685
- font-size: 11px; /* icon button, sized to its glyph, not the type scale */
4726
+ white-space: nowrap;
4727
+ cursor: pointer;
4728
+ }
4729
+ .prb-kiss-open-file:hover,
4730
+ .prb-kiss-decide:hover:not(:disabled),
4731
+ .prb-kiss-run-again:hover,
4732
+ .prb-kiss-fresh-run:hover,
4733
+ .prb-kiss-run-cancel:hover,
4734
+ .prb-kiss-decision-retry:hover { border-color: rgba(15, 23, 42, 0.3); color: var(--pane-ink); }
4735
+ .prb-kiss-decide[aria-pressed='true'] { border-color: rgba(147, 51, 234, 0.45); background: rgba(147, 51, 234, 0.08); color: var(--pane-accent-ink); }
4736
+ .prb-kiss-decide:disabled { cursor: progress; opacity: 0.6; }
4737
+ :is(.prb-kiss-open-file, .prb-kiss-decide, .prb-kiss-run-again, .prb-kiss-fresh-run, .prb-kiss-run-cancel, .prb-kiss-decision-retry):focus-visible {
4738
+ outline: 2px solid var(--pane-accent);
4739
+ outline-offset: 1px;
4740
+ }
4741
+
4742
+ /* Copy draft comment and Copy recommendations: the finding copy control with its word showing.
4743
+ The word is the label, so the hover bubble that repeats it is not drawn; after a click the
4744
+ word itself says Copied or Copy failed. */
4745
+ .prb-doc :is(.prb-kiss-rec-actions, .prb-kiss-handoff) .pr-helper-msg-copy.pr-helper-finding-copy {
4746
+ width: auto;
4747
+ height: auto;
4748
+ margin: 0;
4749
+ gap: 5px;
4750
+ padding: 5px 8px;
4751
+ font-size: var(--t-meta);
4686
4752
  font-weight: 600;
4687
- line-height: 1;
4753
+ color: var(--pane-ink-muted);
4754
+ }
4755
+ .prb-doc :is(.prb-kiss-rec-actions, .prb-kiss-handoff) .pr-helper-finding-copy::after { display: none; }
4756
+ .prb-doc :is(.prb-kiss-rec-actions, .prb-kiss-handoff) .pr-helper-msg-copy .pr-helper-msg-copy-label[hidden] { display: none; }
4757
+ .prb-doc :is(.prb-kiss-rec-actions, .prb-kiss-handoff) .pr-helper-msg-copy.copied { color: var(--pane-success); }
4758
+ .prb-doc :is(.prb-kiss-rec-actions, .prb-kiss-handoff) .pr-helper-msg-copy.failed { color: var(--pane-danger); }
4759
+ .prb-doc .prb-kiss-handoff .pr-helper-msg-copy.pr-helper-finding-copy { border: 1px solid var(--pane-line); background: var(--pane-surface); }
4760
+ .prb-doc .prb-kiss-handoff .pr-helper-msg-copy:disabled { cursor: default; opacity: 0.5; }
4761
+
4762
+ .prb-kiss-decision-error { flex-basis: 100%; margin: 0; font-size: var(--t-meta); color: #9a3412; }
4763
+ .prb-kiss-decision-retry { margin-left: 6px; padding: 2px 8px; }
4764
+
4765
+ .prb-kiss-handoff {
4766
+ display: flex;
4767
+ flex-wrap: wrap;
4768
+ align-items: center;
4769
+ gap: 6px 12px;
4770
+ margin: 0 0 16px;
4771
+ }
4772
+ .prb-kiss-handoff-note { margin: 0; font-size: var(--t-meta); line-height: var(--lh-body); color: var(--pane-ink-muted); }
4773
+ .prb-kiss-progress { margin: 0 0 14px; }
4774
+ .prb-kiss-decided { margin-top: 8px; }
4775
+
4776
+ /* Whose code the run was about, as a fact of the run beside its other facts. */
4777
+ .prb-kiss-perspective { margin-left: auto; font-size: var(--t-meta); color: var(--pane-ink-muted); white-space: nowrap; }
4778
+ .prb-doc .prb-doc-head .prb-kiss-perspective + .prb-doc-provenance { margin-left: 12px; }
4779
+ .prb-doc .prb-doc-head .prb-kiss-run-again { align-self: center; margin-left: 8px; padding: 3px 10px; }
4780
+ .prb-doc .prb-doc-head .prb-kiss-run-again + .prb-focus-toggle { margin-left: 0; }
4781
+
4782
+ .prb-kiss-run-dialog {
4783
+ width: min(440px, calc(100vw - 32px));
4784
+ padding: 18px 20px;
4785
+ border: 1px solid var(--pane-line);
4786
+ border-radius: 12px;
4787
+ background: var(--pane-surface);
4788
+ color: var(--pane-ink);
4789
+ }
4790
+ .prb-kiss-run-dialog::backdrop { background: rgba(15, 23, 42, 0.35); }
4791
+ .prb-kiss-run-dialog-title { margin: 0 0 10px; font-size: var(--t-section); font-weight: 600; }
4792
+ .prb-kiss-run-dialog .prb-kiss-run { margin: 0; }
4793
+ .prb-kiss-run-cancel { margin-top: 10px; }
4794
+
4795
+ .prb-kiss-fresh-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px !important; }
4796
+ .prb-kiss-fresh-actions .prb-kiss-fresh-dismiss { margin-top: 0; }
4797
+ .prb-kiss-fresh[data-collapsed] { padding: 8px 12px; }
4798
+ .prb-kiss-fresh[data-collapsed] p { font-size: var(--t-meta); }
4799
+ .prb-kiss-fresh[data-collapsed] .prb-kiss-fresh-run { margin-left: 6px; padding: 2px 8px; }
4800
+
4801
+ /* Complexity worth keeping: folded twice. The heading says considered reasoning is here; opened,
4802
+ each item is its decision and its reason on one row; one more click is the rationale and files. */
4803
+ .prb-kiss-justified { margin: 22px 0 0; }
4804
+ .prb-kiss-justified-summary {
4805
+ font-size: var(--t-pill);
4806
+ font-weight: 700;
4807
+ letter-spacing: 0.07em;
4808
+ text-transform: uppercase;
4809
+ color: var(--pane-ink-muted);
4688
4810
  cursor: pointer;
4689
4811
  }
4690
- .prb-kiss-draft .pr-helper-msg-copy:hover { color: var(--pane-ink); background: rgba(31, 35, 40, 0.06); }
4691
- .prb-kiss-draft .pr-helper-msg-copy.copied { color: var(--pane-success); }
4692
- .prb-kiss-draft .pr-helper-msg-copy.failed { color: var(--pane-danger); }
4693
- .prb-kiss-draft .pr-helper-msg-copy svg { display: block; }
4812
+ .prb-kiss-justified[open] > .prb-kiss-justified-summary { margin-bottom: 10px; }
4813
+ .prb-kiss-kept > .prb-kiss-kept-summary { cursor: pointer; list-style-position: outside; }
4814
+ .prb-kiss-kept-summary .prb-kiss-kept-title { margin: 0; }
4815
+ .prb-kiss-kept-reason { display: block; margin-top: 2px; color: var(--pane-ink-muted); font-weight: 400; }
4816
+ .prb-kiss-kept[open] > .prb-kiss-kept-summary { margin-bottom: 8px; }
4694
4817
 
4695
4818
  .prb-kiss-locations { margin: 12px 0 0; }
4696
4819
  .prb-kiss-locations-list { margin: 0; padding: 0; list-style: none; }
@@ -5185,7 +5308,7 @@ body .prb-body[data-focus='buddy'] .prb-msg-user { max-width: min(90%, 78ch); }
5185
5308
  Copy. Positioned as the flex child it is, the way `.prb-header .prb-menu` is, so the panel hangs
5186
5309
  off the trigger rather than off a corner of the card. The panel is in the card's flow inside the
5187
5310
  scrolling pane, so near the bottom it extends the scroll rather than being cut off. */
5188
- .prb-doc .pr-helper-issue-title-row .prb-menu {
5311
+ .prb-doc :is(.pr-helper-issue-title-row, .prb-kiss-rec-title-row) .prb-menu {
5189
5312
  position: relative;
5190
5313
  top: auto;
5191
5314
  right: auto;