Tighten sidebar density and correct its rest and hover colours

7b8d4c499dd5 · AtlantisPleb · · parent 2d12d621c1d9

Tighten sidebar density and correct its rest and hover colours

Measured against the reference rather than estimated, which is what the
previous pass got wrong.

Section headings were uppercased with letter-spacing. The reference uses
sentence case at the same size and weight as a row, because a section
heading is a row you can click, not a label shouting a word the reader
already scanned past.

Rows were 36px tall with 6px of block padding and 4px between them, so
roughly half the sidebar's height went on space between things rather than
on things. They are 32px now (30px nested) sitting 1px apart, with the
inset moved from the row's padding to its margin so the hit target reaches
the full width.

Hover was jumping straight to the brightest ink, which made every hover
look like a selection. Rest stays at --text-muted (#8a8f98) and hover moves
one step to --text-body (#d0d6e0); only the current row gets
--text-primary. Hover background is now a wash rather than an opaque rung,
so it reads as a state on the surface instead of a different surface.

The sidebar sits on the page background rather than its own panel colour,
and the content column has room to be a column: text starting immediately
against the divider read as an overflow of the sidebar rather than as its
own measure.

Carets moved to the trailing edge, where the eye lands after reading the
label rather than before it.

Deploy story

What this commit did to the running system — joined from the forge receipt chain, the part a commit page elsewhere cannot show.

Not deployed through the forge lane

No push, promotion, build, or deploy receipt references this commit (receipts are scanned over a bounded recent window). Changes shipped by full node replacement carry their proof in the release gate receipt instead.

Changed files

  • modified assets/css/app.css
  • modified assets/css/openagents.css

Diff

2 files changed, +57 -26

assets/css/app.css modified +33 -24

@@ -265,12 +265,15 @@

265 265
  position: relative;
266 266
  display: flex;
267 267
  align-items: center;
268
  gap: 10px;
269
  min-height: 36px;
270
  margin-inline: 6px;
271
  padding-inline: 14px;
272
  padding-block: 6px;
273
  border-radius: 10px;
268
  gap: 8px;
269
  /* 32px rows sitting 1px apart. The previous 36px row with 6px of block
270
     padding and 4px between rows spent roughly half the sidebar's height on
271
     space between things rather than on the things. */
272
  min-height: 32px;
273
  margin-inline: 12px;
274
  padding-inline: 8px;
275
  padding-block: 0;
276
  border-radius: 6px;
274 277
  /* Rest dim, brighten on hover. A sidebar is a list of places you are not, so
275 278
     at full brightness every row competes with the page for attention. The
276 279
     current row and the hovered row are the two that earn it. */

@@ -285,10 +288,10 @@

285 288
286 289
@media (hover: hover) {
287 290
  .sidebar-row:hover {
288
    background: var(--ink-raised);
289
    /* Was a hardcoded #fff, which is white-on-near-white in light mode. The ink
290
       token flips with the theme. */
291
    color: var(--text-primary);
291
    background: var(--wash-hover);
292
    /* One step up from rest, not all the way to primary. Jumping straight to
293
       the brightest ink made every hover look like a selection. */
294
    color: var(--text-body);
292 295
  }
293 296
}
294 297

@@ -367,14 +370,17 @@

367 370
  top: 0;
368 371
  display: flex;
369 372
  align-items: center;
370
  min-height: 32px;
371
  padding-inline: 16px;
373
  /* A section heading is a row you can click, so it is sized like one: same
374
     height, same type, sentence case. Uppercasing it with tracking made it
375
     shout a word the reader already scanned past. */
376
  min-height: 36px;
377
  margin-inline: 12px;
378
  padding-inline: 8px;
372 379
  background: var(--ink-surface);
373 380
  color: var(--text-muted);
374
  font-size: 0.75rem;
375
  font-weight: 600;
376
  letter-spacing: 0.06em;
377
  text-transform: uppercase;
381
  font-size: 0.875rem;
382
  font-weight: 400;
383
  line-height: 1.25rem;
378 384
}
379 385
380 386
.sidebar-footer {

@@ -397,13 +403,13 @@

397 403
398 404
.docs-sidebar {
399 405
  display: flex;
400
  width: 260px;
406
  width: 280px;
401 407
  flex: none;
402 408
  flex-direction: column;
403
  gap: 12px;
404
  border-right: 1px solid var(--ink-raised);
405
  background: var(--ink-surface);
406
  padding: 16px 0;
409
  gap: 8px;
410
  border-right: 1px solid var(--line);
411
  background: var(--ink-void);
412
  padding: 12px 0;
407 413
}
408 414
409 415
.docs-sidebar__header {

@@ -417,7 +423,7 @@

417 423
  display: flex;
418 424
  flex: 1;
419 425
  flex-direction: column;
420
  gap: 20px;
426
  gap: 2px;
421 427
  overflow-y: auto;
422 428
  overscroll-behavior: none;
423 429
}

@@ -425,7 +431,7 @@

425 431
.docs-sidebar__section {
426 432
  display: flex;
427 433
  flex-direction: column;
428
  gap: 4px;
434
  gap: 1px;
429 435
}
430 436
431 437
.docs-sidebar__section-title {

@@ -460,7 +466,10 @@

460 466
  flex: 1;
461 467
  overflow-y: auto;
462 468
  overscroll-behavior: none;
463
  padding: 32px;
469
  /* The column is centred in whatever space is left rather than pinned to the
470
     sidebar. Text starting immediately against a rule reads as an overflow of
471
     the sidebar rather than as its own column. */
472
  padding: 40px 64px 96px;
464 473
}
465 474
466 475
/* Chat UI (OpenAgents) */
assets/css/openagents.css modified +24 -2

@@ -2085,7 +2085,7 @@

2085 2085
  .sidebar-section {
2086 2086
    display: flex;
2087 2087
    flex-direction: column;
2088
    gap: 2px;
2088
    gap: 1px;
2089 2089
  }
2090 2090
2091 2091
  .sidebar-section__summary {

@@ -2095,6 +2095,21 @@

2095 2095
    cursor: pointer;
2096 2096
    list-style: none;
2097 2097
    user-select: none;
2098
    border-radius: 6px;
2099
    transition: color 150ms var(--ease);
2100
  }
2101
2102
  @media (hover: hover) {
2103
    .sidebar-section__summary:hover {
2104
      color: var(--text-body);
2105
    }
2106
  }
2107
2108
  /* The caret is a disclosure indicator, so it sits on the trailing edge where
2109
     the eye lands after reading the label, not before it. */
2110
  .sidebar-section__caret {
2111
    order: 2;
2112
    margin-left: auto;
2098 2113
  }
2099 2114
2100 2115
  /* Safari draws its own triangle unless this is removed. */

@@ -2123,7 +2138,14 @@

2123 2138
  .sidebar-section__items {
2124 2139
    display: flex;
2125 2140
    flex-direction: column;
2126
    gap: 2px;
2141
    gap: 1px;
2142
    /* Nested rows are one step shorter than the heading above them, which is
2143
       what makes the hierarchy readable without indenting everything. */
2144
    padding-block: 1px 6px;
2145
  }
2146
2147
  .sidebar-section__items .sidebar-row {
2148
    min-height: 30px;
2127 2149
  }
2128 2150
2129 2151
  @media (prefers-reduced-motion: reduce) {

This page updates live while a promote is in flight · changelog