@wendellresearch-ai/benchwarmers 0.4.0 → 0.5.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.
package/ui/bench.css CHANGED
@@ -283,9 +283,21 @@ dialog h2 { margin: 0 0 .2rem; font-size: 1.375rem; font-weight: 700; }
283
283
  :is(dialog, .form-panel) .rules { font-size: .875rem; color: var(--muted); margin: .35rem 0 0; }
284
284
  :is(dialog, .form-panel) label.check { display: flex; align-items: center; gap: .5rem; margin-top: 1rem; cursor: pointer; }
285
285
  :is(dialog, .form-panel) fieldset { border: 0; padding: 0; margin: 1rem 0 0; }
286
- :is(dialog, .form-panel) .members { display: grid; grid-template-columns: repeat(auto-fill, minmax(14rem, 1fr)); gap: 0 1rem;
287
- max-height: 14rem; overflow: auto; }
288
- :is(dialog, .form-panel) .members label.check { margin-top: .35rem; font-size: .875rem; }
286
+ :is(dialog, .form-panel) .members { max-height: 18rem; overflow: auto; border-top: 1px solid var(--line); }
287
+ /* One row per model: its name and what it holds, then a chip per provider it
288
+ is on, each ticking that alias (bench.js fillForm). */
289
+ :is(dialog, .form-panel) .members .m-row { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: .2rem 1rem;
290
+ align-items: center; padding: .4rem 0; border-bottom: 1px solid var(--line); }
291
+ :is(dialog, .form-panel) .members .m-name { display: flex; flex-wrap: wrap; align-items: baseline; gap: 0 .5rem;
292
+ font-size: .875rem; overflow-wrap: anywhere; }
293
+ :is(dialog, .form-panel) .members .m-facts { color: var(--muted); font-size: .8125rem; }
294
+ :is(dialog, .form-panel) .members .m-routes { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: .3rem; }
295
+ :is(dialog, .form-panel) .members label.check { margin-top: 0; font-size: .8125rem; gap: .3rem; padding: .15rem .5rem;
296
+ border: 1px solid var(--line); border-radius: var(--radius); background: var(--paper-2); }
297
+ :is(dialog, .form-panel) .members label.check:has(input:checked) { border-color: var(--bench-seat, var(--brand));
298
+ background: var(--band); }
299
+ #c-form .seats { min-height: 2rem; }
300
+ #c-form .seat .k.after { margin: 0 0 0 .4rem; }
289
301
  :is(dialog, .form-panel) input.member-filter { font-size: .9375rem; padding: .4rem .6rem; margin-bottom: .2rem; }
290
302
  :is(dialog, .form-panel) .members input:disabled + span { color: var(--muted); }
291
303
  /* Ruled out by the collection's tags (bench.js applyTags): greyed; a ticked
@@ -300,7 +312,8 @@ dialog h2 { margin: 0 0 .2rem; font-size: 1.375rem; font-weight: 700; }
300
312
  :is(dialog, .form-panel) .profile .chip { margin-right: .25rem; }
301
313
  :is(dialog, .form-panel) .profile .src { font-size: .75rem; color: var(--muted); }
302
314
  :is(dialog, .form-panel) .settings { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 1rem; }
303
- @media (max-width: 40rem) { :is(dialog, .form-panel) .settings { grid-template-columns: minmax(0, 1fr); } }
315
+ @media (max-width: 40rem) { :is(dialog, .form-panel) :is(.settings, .members .m-row) { grid-template-columns: minmax(0, 1fr); }
316
+ :is(dialog, .form-panel) .members .m-routes { justify-content: flex-start; } }
304
317
  :is(dialog, .form-panel) fieldset label.check { margin-top: .4rem; flex-wrap: wrap; }
305
318
  :is(dialog, .form-panel) fieldset label.check .muted { font-size: .875rem; }
306
319
  :is(dialog, .form-panel) .errors { color: var(--err); font-size: .9375rem; margin: .8rem 0 0; }
@@ -384,6 +397,40 @@ pre.log { background: var(--log-ground, var(--ink-deep)); color: var(--log-ink,
384
397
  white-space: pre-wrap; margin: .5rem 0 0; }
385
398
  pre.log.answer { max-height: 40vh; }
386
399
 
400
+ /* Quota: a tile per provider, as many columns as fit; a group of windows (a
401
+ 5-hour and a weekly limit of one model group) boxed together; a meter of
402
+ ten segments filled like a bar. */
403
+ .q-tiles { display: grid; grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr)); gap: .75rem; align-items: start; margin-top: .75rem; }
404
+ .q-tile { display: flex; flex-direction: column; gap: .45rem; padding: .75rem .85rem; background: var(--panel);
405
+ border: 1px solid var(--line); border-radius: var(--radius); cursor: grab; }
406
+ .q-tile:focus-visible { outline: 2px solid var(--ink); outline-offset: 2px; }
407
+ .q-tile.out { border-color: var(--err); }
408
+ .q-tile.dragging { opacity: .45; }
409
+ .q-tile .q-head { display: flex; justify-content: space-between; align-items: baseline; gap: .5rem; }
410
+ .q-tile .nm { font-size: 1.0625rem; }
411
+ .q-tag, .q-small { font-size: .8125rem; color: var(--muted); }
412
+ .q-group { border: 1px solid var(--line); border-radius: var(--radius); padding: .45rem .55rem .55rem; display: flex; flex-direction: column; gap: .3rem; }
413
+ .q-group.bare { border: 0; padding: 0; }
414
+ .q-group h4 { margin: 0; font-size: .8125rem; font-weight: 500; color: var(--muted); }
415
+ .q-line { display: flex; justify-content: space-between; gap: .5rem; font-size: .875rem; }
416
+ .q-line b { font-weight: 600; }
417
+ .q-line .mono { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
418
+ .segs { display: flex; gap: 2px; }
419
+ .segs span { flex: 1; height: .5rem; border-radius: 2px; background: var(--step-1); overflow: hidden; }
420
+ .segs i { display: block; height: 100%; background: var(--ok); }
421
+ .segs.warn i { background: var(--warn); }
422
+ .segs.err i { background: var(--err); }
423
+ .q-rest { font-size: .8125rem; background: var(--warn-ground); border-radius: var(--radius); padding: .2rem .45rem; }
424
+ .warn-t { color: var(--warn); }
425
+ .q-msg { font-size: .8125rem; }
426
+ .q-msg:empty { display: none; }
427
+ .q-tile .q-foot { display: flex; flex-wrap: wrap; gap: .4rem; justify-content: flex-end; margin-top: auto;
428
+ padding-top: .5rem; border-top: 1px solid var(--line); }
429
+ .q-tile .q-foot .chip { margin-left: .2rem; font-size: .75rem; }
430
+ .q-legend { display: flex; flex-wrap: wrap; gap: 1rem; font-size: .875rem; margin: 0 0 .4rem; }
431
+ .q-legend i { display: inline-block; width: .8rem; height: .7rem; border-radius: 2px; margin-right: .35rem; vertical-align: -1px; }
432
+ #q-models { max-width: min(48rem, 94vw); }
433
+
387
434
  /* Benchmarks charts (Observable Plot) */
388
435
  .chart { margin: .5rem 0 .75rem; overflow-x: auto; }
389
436
  .chart.muted { font-size: .875rem; }
@@ -394,10 +441,26 @@ h3.chart-head { font-size: 1rem; margin: 1rem 0 .2rem; }
394
441
  .list-actions { display: flex; align-items: center; gap: 1rem; margin: .75rem 0; flex-wrap: wrap; }
395
442
  .list-actions .done { margin: 0; color: var(--ok); font-size: .9375rem; }
396
443
  .list-actions .errors { color: var(--err); font-size: .9375rem; }
397
- button.c-row { width: 100%; text-align: left; font: inherit; color: inherit; background: none; border: 0;
398
- border-radius: var(--radius); cursor: pointer; }
444
+ button.c-row { width: calc(100% + 1.5rem); padding: .9rem .75rem; text-align: left; font: inherit; color: inherit;
445
+ background: none; border: 0; border-top: 1px solid var(--line); border-radius: 0; cursor: pointer; }
446
+ button.c-row:first-child { border-top: 0; }
399
447
  button.c-row:hover, button.c-row:focus-visible { background: var(--step-1); }
400
448
  .c-row .open-hint { color: var(--muted); font-size: .875rem; white-space: nowrap; }
449
+ .c-row .top { display: flex; flex-wrap: wrap; align-items: baseline; gap: .3rem; }
450
+ .c-row .top .alias { font-size: 1.125rem; font-weight: 500; margin-right: .5rem; }
451
+ .c-row .desc { margin: .1rem 0 0; max-width: 75ch; }
452
+ .c-row .together { margin: 0; font-size: .9375rem; max-width: 80ch; }
453
+ /* The panel as it sits: each member a seat topped in the bench's colour, as
454
+ the header's bench is; an explorer seat empty and dashed; the merger outlined
455
+ after an arrow. The bordered seats trade padding for border, so all are one size. */
456
+ :is(.c-row, #c-form) .seats { display: flex; flex-wrap: wrap; align-items: center; gap: .4rem; margin: .6rem 0 .5rem; }
457
+ :is(.c-row, #c-form) .seat { font-family: var(--font-mono); font-size: .8125rem; padding: .3rem .6rem; background: var(--band);
458
+ border-top: 3px solid var(--bench-seat, var(--brand)); border-radius: var(--radius); }
459
+ :is(.c-row, #c-form) .seat:is(.explorer, .merger) { background: transparent; border: 1px dashed var(--muted); color: var(--muted);
460
+ padding: calc(.3rem + 2px) calc(.6rem - 1px) calc(.3rem - 1px); }
461
+ .c-row .seat.merger { border-style: solid; border-color: var(--ink); color: var(--ink); }
462
+ :is(.c-row, #c-form) .seat .k { font-family: var(--font-display); color: var(--muted); margin-right: .35rem; }
463
+ .c-row .merge { display: inline-flex; align-items: center; gap: .4rem; color: var(--muted); }
401
464
  /* suggested collection tags under the field */
402
465
  .tag-picks { display: flex; flex-wrap: wrap; gap: .35rem; margin-top: .45rem; }
403
466
  .tag-picks .chip { cursor: pointer; border: 0; font-family: inherit; }
@@ -424,6 +487,8 @@ dialog .pick { display: flex; gap: 1.5rem; }
424
487
  .ep .acts { justify-content: flex-start; }
425
488
  details.key dl { grid-template-columns: minmax(0, 1fr); }
426
489
  .toolbar input[type=search] { min-width: 0; width: 100%; }
490
+ button.c-row { grid-template-columns: minmax(0, 1fr); } /* the seats get the width; the whole row opens */
491
+ .c-row .open-hint { display: none; }
427
492
  }
428
493
  @media (prefers-reduced-motion: reduce) {
429
494
  * { transition: none !important; }