fraim-hub 2.0.340 → 2.0.341

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.
@@ -2696,6 +2696,13 @@ button.small { padding: 4px 10px; font-size: 12px; }
2696
2696
  matches this block's own stated intent ("bound X to keep the coach
2697
2697
  reachable at the bottom") for the one element Treatment 3 added. */
2698
2698
  #empty { max-height: calc(100vh - 160px); }
2699
+ /* Issue #1911: #pane-surface-host is the same kind of element as #empty - a
2700
+ `flex:1; min-height:0` pane child with nothing to flex-distribute against
2701
+ once .conversation loses its height constraint here. Uncapped, the Coach
2702
+ intake pushed #persistent-composer below the fold at 640px, the exact
2703
+ failure the #empty cap above was added to stop. Any future surface
2704
+ inherits the cap rather than having to rediscover it. */
2705
+ #pane-surface-host { max-height: 45vh; }
2699
2706
  #active-conv { flex: initial; overflow-y: visible; }
2700
2707
  .conv-stream { flex: initial; }
2701
2708
  /* Mobile: thread panel reverts to normal block flow; page scrolls naturally */
@@ -5767,8 +5774,8 @@ body.hub-shell { display: flex; flex-direction: column; height: 100vh; overflow:
5767
5774
  /* #1340: block-level so overflow/ellipsis actually applies (a plain inline span never
5768
5775
  establishes its own overflow box, so a long title/description used to run on past the
5769
5776
  row and visually collide with whatever came after it, including the new viz control
5770
- below). .tjd-mimic-row already carried this same fix locally; this closes the gap for
5771
- the default row too. */
5777
+ below). The teach dialog row already carried this same fix locally; this closes
5778
+ the gap for the default row too (.ci-picker-row inherits it now). */
5772
5779
  .cp-row-title { display:block; font-weight:600; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
5773
5780
  .cp-row-sub { display:block; font-size:11px; color:var(--muted); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; margin-top:1px; }
5774
5781
  .cp-row-tag { font-size:10px; color:var(--muted); background:var(--bg); border:1px solid var(--line); border-radius:4px; padding:1px 5px; flex-shrink:0; }
@@ -6462,23 +6469,19 @@ img.eh-av { object-fit: cover; background: var(--surface); }
6462
6469
  padding: 4px 12px 2px;
6463
6470
  }
6464
6471
 
6465
- /* Issue #976: Teach-new-job intake dialog */
6466
- .tjd-card { max-width:520px; max-height:calc(100vh - 48px); margin:24px auto; overflow:auto; }
6467
- .tjd-hdr { display:flex; align-items:flex-start; justify-content:space-between; gap:12px; }
6468
- .tjd-hdr h2 { margin:0; }
6469
- .tjd-body { display:flex; flex-direction:column; gap:12px; }
6470
- .tjd-form { display:flex; flex-direction:column; gap:10px; min-width:0; }
6472
+ /* Issue #976 intake controls, reused by the Coach pane surface (issue #1911).
6473
+ The dialog itself (.tjd-card/.tjd-hdr/.tjd-body/.tjd-form/.tjd-mimic*/
6474
+ .tjd-actions/.tjd-secondary) is gone with #teach-job-modal; what survives is
6475
+ the set of field, mode and error controls the panel renders instead, so the
6476
+ intake looks and validates exactly as it did before it left the overlay. */
6471
6477
  .tjd-modes { display:flex; gap:8px; }
6472
6478
  .tjd-mode { flex:1; min-width:0; padding:12px; border:1px solid var(--line); border-radius:10px; text-align:left; background:var(--surface); color:var(--text); font:inherit; cursor:pointer; }
6473
6479
  .tjd-mode[aria-pressed="true"] { border-color:var(--teach); background:var(--teach-soft); color:var(--teach); }
6474
6480
  .tjd-mode strong { display:block; font-size:13px; margin-bottom:2px; }
6475
6481
  .tjd-mode span { display:block; font-size:11.5px; color:var(--muted); }
6476
6482
  .tjd-mode[aria-pressed="true"] span { color:inherit; }
6477
- .tjd-mode:focus-visible,
6478
- .tjd-mimic summary:focus-visible { outline:2px solid var(--accent); outline-offset:2px; }
6479
- .tjd-new-fields { display:flex; flex-direction:column; gap:10px; }
6480
- .tjd-new-fields[hidden], .tjd-hint[hidden], #tjd-mimic-toggle[hidden] { display:none; }
6481
- .tjd-form .hm-field textarea { min-height:80px; }
6483
+ .tjd-mode:focus-visible { outline:2px solid var(--accent); outline-offset:2px; }
6484
+ .tjd-hint[hidden] { display:none; }
6482
6485
  .tjd-hint { margin:0; font-size:12px; line-height:1.45; color:var(--muted); }
6483
6486
  .tjd-field-error,
6484
6487
  .tjd-submit-error { color:var(--danger); font-size:12px; line-height:1.35; margin-top:4px; }
@@ -6487,34 +6490,52 @@ img.eh-av { object-fit: cover; background: var(--surface); }
6487
6490
  .tjd-label { display:block; font-size:12px; font-weight:600; color:var(--muted); margin-bottom:5px; }
6488
6491
  .tjd-search { width:100%; border:1px solid var(--line); border-radius:9px; padding:9px 12px; font:inherit; font-size:13px; background:var(--bg); color:var(--text); }
6489
6492
  .tjd-search:focus { outline:2px solid var(--accent); border-color:transparent; }
6490
- .tjd-card input::placeholder, .tjd-card textarea::placeholder { color:var(--muted); opacity:1; }
6491
- .tjd-mimic { min-width:0; border:1px solid var(--line); border-radius:10px; background:var(--surface); overflow:hidden; }
6492
- .tjd-mimic summary { padding:10px 12px; font-size:12px; font-weight:600; cursor:pointer; }
6493
- .tjd-mimic-head { padding:12px; border-bottom:1px solid var(--line); background:var(--surface); }
6494
- .tjd-mimic-results { overflow-y:auto; overflow-x:hidden; min-height:0; max-height:156px; padding:5px 0; }
6495
- .tjd-mimic-row { display:flex; align-items:flex-start; gap:10px; padding:9px 12px; cursor:pointer; border:0; background:transparent; width:100%; max-width:100%; min-width:0; overflow:hidden; text-align:left; color:var(--text); font-size:13px; }
6496
- .tjd-mimic-row:hover,
6497
- .tjd-mimic-row.selected { background:var(--accent-soft,rgba(0,113,227,.08)); }
6498
- .tjd-mimic-row:hover .cp-row-sub, .tjd-mimic-row.selected .cp-row-sub { color:var(--text); }
6499
- .tjd-mimic-row .cp-row-body { display:flex; flex:1 1 auto; flex-direction:column; gap:2px; min-width:0; overflow:hidden; }
6500
- .tjd-mimic-row .cp-row-title,
6501
- .tjd-mimic-row .cp-row-sub { display:block; max-width:100%; white-space:normal; overflow:hidden; text-overflow:ellipsis; overflow-wrap:anywhere; }
6502
- .tjd-mimic-row .cp-row-title { line-height:1.25; }
6503
- .tjd-mimic-row .cp-row-sub { line-height:1.35; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; }
6504
- .tjd-mimic-row .cp-row-tag { max-width:72px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; margin-top:1px; }
6505
- .tjd-mimic-empty { padding:16px 12px; color:var(--muted); font-size:12px; }
6506
- .tjd-selected-mimic { margin:10px 12px 4px; display:flex; align-items:flex-start; gap:8px; border:1px solid color-mix(in srgb,var(--accent) 42%,var(--line) 58%); background:var(--accent-soft,rgba(0,113,227,.08)); border-radius:8px; padding:8px 10px; font-size:12px; color:var(--text); }
6507
- .tjd-selected-mimic[hidden] { display:none; }
6508
- .tjd-selected-mimic span { min-width:0; flex:1; }
6509
- .tjd-selected-mimic button { border:0; background:transparent; color:var(--accent-strong); font-weight:700; cursor:pointer; padding:0; }
6510
- .tjd-actions { grid-column:1 / -1; display:flex; justify-content:flex-end; gap:10px; }
6511
- .tjd-secondary { border:1px solid var(--line); background:var(--surface); color:var(--text); border-radius:8px; padding:9px 14px; font-weight:700; cursor:pointer; }
6512
- .tjd-secondary:hover { border-color:var(--accent); }
6513
6493
 
6514
- @media (max-width: 760px) {
6515
- .tjd-card { width:calc(100vw - 24px); margin:18px auto; max-height:calc(100vh - 36px); overflow:auto; }
6516
- .tjd-body { padding:16px; }
6517
- .tjd-actions { position:sticky; bottom:0; background:var(--surface); padding-top:10px; }
6494
+ /* Issue #1911 R16: the reusable main-pane slot. It is a plain flex column that
6495
+ fills the pane above the always-docked composer, so a surface only has to
6496
+ describe its own content, not how to occupy the pane. */
6497
+ .pane-surface-host { flex:1; min-height:0; min-width:0; display:flex; flex-direction:column; overflow:hidden; }
6498
+ .pane-surface-host[hidden] { display:none; }
6499
+ /* Where a surface reports a composer-level validation failure (R10). */
6500
+ .pane-surface-composer-error { color:var(--danger); font-size:12px; line-height:1.35; margin-bottom:6px; }
6501
+ .pane-surface-composer-error:empty { display:none; }
6502
+
6503
+ /* Issue #1911 Treatment B: the Coach intake panel. Every control inside it is
6504
+ an existing one (.tjd-modes/.hm-field/.cp-row); these rules only give the
6505
+ panel the pane's width and keep the picker scrolling inside itself, so the
6506
+ mode control and the scope note stay on screen while jobs are browsed (R9). */
6507
+ .ci-card { flex:1; min-height:0; overflow:hidden; display:flex; flex-direction:column; gap:12px; padding:2px 2px 8px; }
6508
+ .ci-card-hdr { display:flex; align-items:baseline; gap:10px; flex-shrink:0; }
6509
+ .ci-card-hdr h3 { margin:0; font-size:16px; font-weight:700; color:var(--text); }
6510
+ .ci-card-hdr p { margin:0; font-size:12px; color:var(--muted); }
6511
+ .ci-new-fields { flex-shrink:0; }
6512
+ .ci-card .tjd-modes, .ci-card > .tjd-hint, .ci-card > .tjd-submit-error { flex-shrink:0; }
6513
+ /* R9: the picker takes whatever height the pane has left and scrolls inside
6514
+ itself, so the mode control and the scope note never leave the screen. */
6515
+ .ci-picker { min-width:0; border:1px solid var(--line); border-radius:10px; background:var(--surface); overflow:hidden; display:flex; flex-direction:column; flex:1 1 auto; min-height:132px; }
6516
+ .ci-picker-head { padding:10px 12px; border-bottom:1px solid var(--line); background:var(--surface); flex-shrink:0; }
6517
+ .ci-picker-list { flex:1 1 auto; overflow-y:auto; overflow-x:hidden; min-height:0; padding:4px 0; }
6518
+ .ci-picker-row { align-items:flex-start; }
6519
+ .ci-picker-row.selected { background:var(--accent-soft,rgba(0,113,227,.08)); }
6520
+ .ci-picker-row.selected .cp-row-sub { color:var(--text); }
6521
+ .ci-picker-row:focus-visible { outline:2px solid var(--accent); outline-offset:-2px; }
6522
+ .ci-picker-row .cp-row-body { display:flex; flex:1 1 auto; flex-direction:column; gap:2px; min-width:0; overflow:hidden; }
6523
+ .ci-picker-row .cp-row-title,
6524
+ .ci-picker-row .cp-row-sub { display:block; max-width:100%; white-space:normal; overflow:hidden; text-overflow:ellipsis; overflow-wrap:anywhere; }
6525
+ .ci-picker-row .cp-row-title { line-height:1.25; }
6526
+ .ci-picker-row .cp-row-sub { line-height:1.35; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; }
6527
+ .ci-picker-row .cp-row-tag { max-width:72px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; margin-top:1px; }
6528
+ .ci-picker-empty { padding:16px 12px; color:var(--muted); font-size:12px; }
6529
+ .ci-picker-empty[hidden] { display:none; }
6530
+
6531
+ /* Open question 3, resolved: below the breakpoint .composer-footer already
6532
+ targets, Job name and Owner stack and the picker gives up height so the mode
6533
+ control stays reachable without scrolling the panel. */
6534
+ @media (max-width: 650px) {
6535
+ .ci-card { gap:10px; }
6536
+ .ci-new-fields { flex-direction:column; }
6537
+ .ci-picker { flex:0 1 auto; max-height:200px; min-height:104px; }
6538
+ .tjd-modes { flex-direction:column; }
6518
6539
  }
6519
6540
  /* ─── End Issue #945 ─────────────────────────────────────────────────────── */
6520
6541