/* AIOS web -- global reset. Full-bleed grid, no page chrome. */ /* Inter, EMBEDDED (owner item 1, 2026-07-27): the grid runs inside a sandboxed iframe that never inherits the host page's fonts, so 'font-family: Inter' silently fell back to Segoe UI while the surrounding app rendered Inter -- the 'fonts aren't consistent' complaint. A data: URI (latin variable 400-700, 48 KB) rather than a Google Fonts @import so the embed stays self-contained: it renders identically on the Space, offline, and under headless QA -- and the FITS label-width assertions measure the font users actually see. */ @font-face { font-family: "Inter"; font-style: normal; font-weight: 400 700; font-display: swap; src: url(data:font/woff2;base64,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) format("woff2"); } * { box-sizing: border-box; } :root { /* ⛔ THE OLD NAVY/GOLD PALETTE IS NOW AN ALIAS LAYER, NOT A SECOND PALETTE. ⚠ AND A COLOUR AUDIT THAT GREPS ONLY HEX IS INCOMPLETE. Four rules carried the same palette as DECIMAL rgba() — `rgba(31, 78, 120, .35)` IS #1F4E78 — and survived the hex sweep untouched, then reappeared in the built bundle as `#1f4e7859` because the minifier folds rgba into 8-digit hex. Search every notation a colour can be written in, and verify against the BUILT artifact rather than the source. These were hard-coded hex (#1f4e78 navy, #c8a24b gold) from before the Loopable rebrand, and 55 rules still referenced them — so the shell painted TWO palettes at once: pastel almost everywhere, navy and gold accents scattered through it. That mixture is what "why is the web so ugly" was actually describing. Aliasing beats rewriting all 55 call sites: the semantic names (`--cg-line`, `--cg-panel`) stay meaningful inside the grid, the mapping is legible in ONE place, and no usage can be missed. Deleting the names would have been a bigger diff with more ways to get it wrong. Per the brand rule, anything that reads as TEXT, a STROKE or a chart line takes the `-deep` weight; flat surfaces take the pastel base. */ --cg-navy: var(--lp-blue-solid); --cg-gold: var(--lp-yellow-deep); --cg-ink: var(--lp-ink); --cg-text: var(--lp-ink); --cg-muted: var(--lp-muted); --cg-line: var(--lp-line); --cg-soft: var(--lp-surface-2); --cg-panel: var(--lp-wash); --cg-white: var(--lp-surface); --cg-danger: var(--lp-red-deep); /* Hover must be DARKER than the base, and Loopable defines no darker blue, so it is derived rather than invented — a new literal here would re-create the exact problem this block just removed. */ --cg-primary-hover: color-mix(in srgb, var(--lp-blue-solid) 82%, #000); /* --cg-note-ink removed by wave-10 item 9: its only consumer was the .cg-view-note band, which the item deleted. The rail's description line is muted grey (--lp-muted), not this yellow-on-yellow ink, so there was nothing left to carry it. */ --cg-z-editor: 40; --cg-z-menu: 50; --cg-z-column: 60; --cg-z-drawer: 70; /* ⛔⛔ THE PORTAL'D OVERLAY STEP, AND IT IS ABOVE THE DIALOG STEP ON PURPOSE. `AnchoredOverlay` renders through `BodyPortal` — a DIRECT CHILD OF , so it resolves in the ROOT stacking context and its z-index competes with the app's dialogs rather than with the surface it was opened from. `.cg-fsel-pop` carries `.cg-pop` (50) and `.set-backdrop` is 70, so every field picker opened inside Manage user PAINTED UNDERNEATH THE SETTINGS DIALOG: open, visible, 232x263px, and behind. `document.elementFromPoint` at the popover's own centre returned `.cg-cond-row` — an element of the dialog — so every click landed on the dialog. MEASURED on the deployed build, not deduced. ⚠ WHY THE OP DROPDOWN NEXT TO IT WORKED AND HID THIS FOR SO LONG: it is a native ``. The ::-webkit-color-swatch / ::-moz-color-swatch rules that used to strip the native chrome are GONE with the input — a dead vendor pseudo-element is the kind of thing that reads as load-bearing to the next person. Same 24px circle in the same slot; the fill arrives as an inline style because it is DATA (the option's colour), not a token. */ .cg-option-color { width: 24px; height: 24px; padding: 0; border: 1px solid var(--lp-line); border-radius: 50%; background: #fff; cursor: pointer; } .cg-option-color:focus-visible { outline: 2px solid var(--lp-blue-deep); outline-offset: 1px; } .cg-option-color:disabled { cursor: default; opacity: 0.35; } /* The ten brand swatches (R5): each hue's `-tint` on the top row, its `-pastel` beneath, so the grid reads as five columns of one hue rather than ten unrelated dots. */ .cg-swatch-pop { padding: 8px; } .cg-swatch-grid { display: grid; grid-template-columns: repeat(5, 28px); gap: 6px; } .cg-swatch { display: inline-grid; place-items: center; width: 28px; height: 28px; padding: 0; border: 1px solid rgba(20, 24, 40, 0.12); border-radius: var(--lp-r-md); cursor: pointer; } .cg-swatch:hover { border-color: rgba(20, 24, 40, 0.34); } .cg-swatch.is-on { border-color: var(--lp-ink); } .cg-swatch:focus-visible { outline: 2px solid var(--lp-blue-deep); outline-offset: 1px; } .cg-option-name { min-width: 0; height: 31px; } .cg-option-remove { display: inline-grid; place-items: center; width: 28px; height: 28px; padding: 0; border: 0; border-radius: var(--lp-r-sm); background: transparent; color: var(--lp-muted); cursor: pointer; } .cg-option-remove:hover { background: var(--lp-red-tint); color: var(--lp-red-deep); } .cg-option-remove svg { width: 14px; height: 14px; fill: none; stroke: currentColor; stroke-width: 1.6; stroke-linecap: round; } .cg-option-add { justify-self: start; padding: 2px 0; border: 0; background: transparent; color: var(--lp-blue-solid); font: inherit; font-size: var(--lp-fs-2xs); font-weight: 600; cursor: pointer; } .cg-option-add:hover { text-decoration: underline; } .cg-field-hint { display: block; font-size: var(--lp-fs-3xs); line-height: 1.45; color: #8a8a96; padding: 2px 0 4px; } .cg-rollup-conditions { display: grid; gap: 8px; } .cg-rollup-conditions__head { display: flex; align-items: center; justify-content: space-between; gap: 10px; color: var(--cg-text); font-size: var(--lp-fs-2xs); font-weight: 650; } .cg-rollup-conditions__head .cg-btn { min-height: 28px; padding: 4px 9px; } .cg-rollup-condition { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) 30px; align-items: center; gap: 6px; } .cg-rollup-condition > input { grid-column: 1 / span 2; } .cg-rollup-condition .cg-icon-btn { width: 30px; height: 30px; } /* ── WAVE 28 · R4 / C1 (session C) — the set-statistic threshold's input ────────────────────── A condition row is a 3-column grid (field, operator, remove) and the ordinary value input already spans the first two on a second line. The sigma input needs the same span PLUS its unit beside it: the number is meaningless alone, and the sign is load-bearing (negative reads BELOW the mean), so a bare box would be a control that will not say what it sets ([[wrong-parent-not-broken-control]]). ⚠ `grid-column` on the LABEL, not on its input: the input is now a grandchild of the row, so the `.cg-rollup-condition > input` rule above no longer reaches it — which is the trap that turns an extra child into an extra column. */ .cg-rollup-condition > .cg-cond-ref { grid-column: 1 / span 2; display: grid; grid-template-columns: 84px minmax(0, 1fr); align-items: center; gap: 8px; } .cg-rollup-condition > .cg-cond-ref > span { color: var(--cg-muted); font-size: var(--lp-fs-2xs); line-height: 1.35; } /* why a control is unavailable, in the place the control would have been. An empty popover reads as broken; a sentence reads as a decision (CG-3). */ .cg-pop-note { font-size: var(--lp-fs-2xs); line-height: 1.45; color: #6b6b76; padding: 2px 8px 8px; max-width: 260px; } /* checkbox / radio rows */ .cg-check-row, .cg-radio-row { display: flex; align-items: center; gap: 9px; padding: 6px 8px; border-radius: var(--lp-r-md); cursor: pointer; } .cg-check-row:hover, .cg-radio-row:hover { background: var(--lp-surface-2); } .cg-check-row input, .cg-radio-row input { accent-color: var(--lp-blue-deep); width: 15px; height: 15px; cursor: pointer; flex: 0 0 auto; } .cg-check-row.is-locked { cursor: default; } .cg-check-row.is-locked:hover { background: transparent; } /* Item 12 (2026-08-02) — a HIDDEN field's row reads as hidden. The checkbox already carried the state; at 15px it is the smallest thing in the row and you have to look for it, so a list with four columns hidden looked identical to one with none. Muted ink only — never a strike-through or a fill: the row is still a live control and both of those read as "disabled", which the locked row genuinely is. */ .cg-check-row.is-off .cg-check-label, .cg-check-row.is-off .cg-type-icon { color: var(--lp-muted); } /* ---- owner item 23 — the six-dot reorder grip in the Hide-fields panel ------------------- Quiet until the row is hovered: a column of grips down a 20-field list competes with the checkboxes for the same glance, and the handle only matters once you have decided to move something. It stays LAID OUT at all times (opacity, never display) so nothing shifts sideways under the pointer as you move down the list. */ .cg-field-grip { flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center; width: 14px; height: 18px; padding: 0; border: 0; background: none; /* ⚠ MEASURED, then corrected. This was `--lp-line` at rest — the hairline token — and the first 3x shot showed six dots that were effectively invisible until hovered. "Quiet" was the intent and "absent" was the result, and the owner asked for a SIX-DOT HANDLE, so an affordance nobody can see is not a subtler version of the item, it is a missing one. Muted ink at 55% keeps it recessive against the label while staying legible at rest. */ color: var(--lp-muted); opacity: 0.55; cursor: grab; transition: opacity 0.12s ease; } .cg-check-row:hover .cg-field-grip { opacity: 1; } .cg-field-grip:active { cursor: grabbing; } /* The locked row and the search-narrowed list both keep the handle in place but inert — the aria-label and title say which of the two it is. Dimmer than the resting state, so "cannot be dragged" is visible rather than only discoverable by trying. */ .cg-check-row.is-locked .cg-field-grip, .cg-field-grip:not([draggable="true"]) { cursor: default; opacity: 0.3; } .cg-check-row.is-locked:hover .cg-field-grip, .cg-check-row:hover .cg-field-grip:not([draggable="true"]) { opacity: 0.3; } .cg-field-grip:focus-visible { outline: 2px solid var(--lp-blue-deep); outline-offset: 1px; border-radius: var(--lp-r-sm); color: var(--lp-muted); } /* The row in flight, and the row it would land on. The drop marker is a LINE, not a fill: a filled target reads as "this row is selected", which is the other thing this list does. */ .cg-check-row.is-dragging { opacity: 0.45; } .cg-check-row.is-drop-target { box-shadow: inset 0 2px 0 -1px var(--lp-blue-deep); } /* Wave-8 I18/I20 — the field-type and display-mode marks (icons.tsx). Muted so they read as a quiet TYPE cue beside the label rather than competing with it; `flex: 0 0 auto` keeps a long field name from squashing the glyph, and the gap is the row's own so the icon sits in the same rhythm as the checkbox. */ .cg-type-icon, .cg-mode-icon { flex: 0 0 auto; color: #6b7280; } .cg-radio-row input:checked ~ .cg-mode-icon, .cg-check-row input:checked ~ .cg-type-icon { color: #202433; } .cg-check-label { flex: 1 1 auto; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } /* wave17 GRID — owner item 8. A radio row may carry a line of help under its name, which the ellipsis rules above would clip to nothing. Scoped to `.cg-radio-row` so the checkbox lists (fields, totals, comparisons — long labels in a narrow panel) keep their single-line truncation, which is right for a NAME and wrong for a SENTENCE. */ .cg-radio-row .cg-check-label { white-space: normal; overflow: visible; } .cg-radio-help { display: block; padding: 2px 0 0; max-width: 220px; } /* R7 (2026-08-02) — the RADIO rows never got the treatment their checkbox twins have had since wave 2, and they are the ones that list FIELD LABELS (the Group-by popover): a two-line "Estimated missed revenue, last 12 months" pushed the row below it out of the rhythm and made the radio look mis-aligned with its own text. ⚠ `:not([class])` is load-bearing, not tidiness. `.cg-radio-row > span` alone is (0,1,1) and therefore OUTRANKS `.cg-perm-label` (0,1,0) — the view-permission rows whose span deliberately stacks a LABEL over a two-line blurb. That rule would have clipped every explanation in the permissions pane to one ellipsised line. Caught by walking every `cg-radio-row` call site rather than by an assertion; all eleven others are bare spans. */ .cg-radio-row > span:not([class]) { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .cg-lock-tag { font-size: var(--lp-fs-3xs); font-weight: 600; letter-spacing: normal; /* item 11: sentence case, and the 10px one-off gives way to the 3xs token. */ color: var(--lp-yellow-deep); background: var(--lp-yellow-tint); border-radius: var(--lp-r-sm); padding: 2px 6px; } .cg-pop-footer { display: flex; gap: 4px; margin-top: 4px; padding-top: 6px; border-top: 1px solid var(--lp-line); } .cg-link-btn { flex: 1 1 auto; height: 28px; border: 1px solid transparent; border-radius: var(--lp-r-md); background: transparent; color: var(--lp-ink); font: inherit; font-size: var(--lp-fs-xs); /* R7 — a fixed 28px height with a label free to wrap is the worst of both: the second line is CLIPPED rather than shown. Every label here is ours ("Show all", "+ Add condition group", "Copy from another view"), so one line is always the right answer. */ white-space: nowrap; cursor: pointer; } .cg-link-btn:hover { background: var(--lp-blue-tint); } /* Item 12 (2026-08-02) — the Hide-fields panel's bulk row, boxed. `--lp-surface-2` is the app's one "quiet slot" fill (the record modal's read-only rows use it for the same reason), so the pair reads as a tray under the list rather than as two more rows of it. The box replaces the hairline: keeping both would draw two separators for one boundary. */ .cg-fields-footer { margin-top: 6px; padding: 4px; border-top: 0; border-radius: var(--lp-r-md); background: var(--lp-surface-2); } .cg-fields-footer .cg-link-btn:hover { /* on the grey tray the blue-tint hover reads as a selection; white reads as "this is the button", which is what a hover on a tray needs to say. */ background: var(--lp-surface); } /* search */ .cg-search { position: relative; display: inline-flex; align-items: center; /* `min-width: auto` is a flex item's DEFAULT and it refuses to shrink below its content, which is what pushed the record count out of the toolbar's visible box at the widths the grid actually runs at. ⭐ W36-T54: that width was `984px with the outer nav open` and is now **752px with both rails open at a 1440 window** (1440 - 344 - 344), so the pressure this rule absorbs is 232px greater than when it was written. Same trap as `.cg-select`. The search is the one control that degrades gracefully when narrowed, so it absorbs the pressure instead of the count. */ min-width: 0; /* ⚠ item 14 (2026-08-02): was `flex: 1 1 auto` while this sat AFTER `.cg-tb-spacer`, where growing was harmless — it and the spacer were the only two flexible items and the input's own `max-width` capped the result. Now that it sits INSIDE the left cluster, growing would split the slack with the spacer and strand the count mid-strip. It never grows and still shrinks first, which is the sentence above, unchanged in intent. */ flex: 0 1 auto; margin-left: 4px; } .cg-search-icon { position: absolute; left: 9px; display: inline-flex; color: #8a8a96; pointer-events: none; } .cg-search-input { /* item 14: `width: 100%` measured the (previously growing) wrapper; now the INPUT carries the size and the wrapper is content-sized around it, so the two cannot disagree about where the control ends and leave a dead strip after the box. */ width: 210px; max-width: 100%; min-width: 0; height: 30px; padding: 0 26px 0 30px; border: 1px solid var(--lp-line); border-radius: var(--lp-r-md); background: #ffffff; font: inherit; font-size: var(--lp-fs-xs); color: var(--lp-ink); transition: border-color 0.12s ease, box-shadow 0.12s ease; } .cg-search-input::placeholder { color: #a2a2ac; } .cg-search-input:focus { outline: none; border-color: var(--lp-blue-deep); box-shadow: 0 0 0 3px rgba(157, 191, 242, 0.45); } .cg-search-clear { position: absolute; right: 6px; width: 18px; height: 18px; display: inline-flex; align-items: center; justify-content: center; border: none; border-radius: 50%; background: transparent; color: #8a8a96; font-size: var(--lp-fs-md); line-height: 1; cursor: pointer; } .cg-search-clear:hover { background: #eceef1; color: #5a5a66; } /* record count */ .cg-count { margin-left: 12px; color: #8a8a96; font-size: var(--lp-fs-xs); font-variant-numeric: tabular-nums; white-space: nowrap; /* The count states how much data is on screen out of how much exists. It is the one thing in this strip that must never be the part that gets pushed out, so it never shrinks. */ flex: 0 0 auto; } /* A windowed count is long ("showing 200 of 5,728 records (filtered from 201,558)"). At the width the grid runs at with the outer nav open there is not room for it beside all six controls, so below a threshold the scope clause drops and the full text stays on hover. A media query works here because the grid renders in its OWN iframe: the iframe width IS the container width, so this needs no ResizeObserver. */ .cg-count-compact { display: none; } /* W36-T54 — `@container`, not `@media`: the number is what the TOOLBAR needs, and the toolbar is `window - both rails` wide, never the window. See the note on `.cg-toolbar`. */ @container cgtoolbar (max-width: 1180px) { .cg-count-full { display: none; } .cg-count-compact { display: inline; } } /* ------------------------------------------------------------------------- */ /* Filter / Sort condition builders (Batch 2). Wide popover, one row per */ /* condition: prefix + field-select + op-select + value(s) + remove. */ /* ------------------------------------------------------------------------- */ .cg-pop--wide { /* 620px. Derived, not taste: the OPERATOR select must never clip its label (see .cg-cond-op) which costs 136px at every level, so the deepest (level-3) row needs 620 to still leave a ~104px value box — measured, and no worse than the ~114px it had before the operator was widened. 560 left only 48px there. Collision-clamped to the viewport by OverlaySurface. */ width: 620px; min-width: min(620px, calc(100vw - 16px)); } .cg-builder-empty { padding: 4px 8px 10px; color: #8a8a96; font-size: var(--lp-fs-xs); } /* One line of a condition level = [prefix | leaf-row OR nested group]. The prefix is "Where" (first), the and/or SELECT (second — one conjunction per level, Airtable-style), or a muted echo of it (third onwards). */ .cg-cond-line { display: flex; align-items: flex-start; /* keeps the prefix level with a group's first line */ gap: 6px; padding: 4px 8px; } .cg-cond-row { flex: 1 1 auto; min-width: 0; display: flex; align-items: center; gap: 6px; } .cg-cond-prefix { flex: 0 0 auto; width: 52px; color: #8a8a96; font-size: var(--lp-fs-2xs); text-align: right; white-space: nowrap; line-height: 30px; /* align with the 30px controls beside it */ } /* the and/or picker — sized so "and" + the native arrow both fit (a 44px box clipped it to "c"), and aligned to the prefix column beside it */ .cg-cond-conj { flex: 0 0 58px; padding: 0 2px 0 6px; } .cg-cond-conj-echo { font-variant: none; } /* --- nested CONDITION GROUP (Airtable's "Add condition group") ------------- */ .cg-cond-group { flex: 1 1 auto; min-width: 0; display: block; border: 1px solid var(--lp-line); border-radius: var(--lp-r-md); background: rgba(20, 24, 40, 0.045); } .cg-cond-group-head { display: flex; align-items: center; gap: 6px; padding: 5px 6px 3px 10px; } .cg-cond-group-sum { flex: 1 1 auto; min-width: 0; color: #8a8a96; font-size: var(--lp-fs-2xs); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .cg-cond-group-body { display: block; padding-bottom: 2px; } /* inside a group the prefix column narrows — nesting already conveys grouping. Widths tuned so a LEVEL-3 row still yields a usable value box (measured). */ .cg-cond-group-body .cg-cond-line { padding: 2px 6px; } .cg-cond-group-body .cg-cond-prefix { width: 54px; flex-basis: 54px; } .cg-cond-group-body .cg-cond-conj { flex-basis: 54px; } /* field names are tenant content and MAY truncate, so nesting costs them width first. The operator deliberately has NO nested override — see .cg-cond-op. */ .cg-cond-group-body .cg-cond-field { flex-basis: 96px; } /* shared select + input control skin. box-sizing + min-width:0 are load-bearing, not cosmetic: a flex item defaults to min-width:auto, so a lays its picker arrow INSIDE the content box, so the readable text width is clientWidth - paddingLeft - paddingRight - ARROW with ARROW measured at 20.1px in Chrome at this skin (probe: clone the control into an auto-width slot; intrinsic - widestOptionText - padding - border). Widest labels at 12.5px Inter: operator "does not contain" = 92.9px, field "Days since order" = 91.0px. 92.9 + 20.1 + 16 padding + 2 border = 131 -> 136 with slack for a fallback font. At 104px the operator rendered "is on or befo" and "does not co" with the tail under the arrow. NOTE: padding-right does NOT fix this — it shrinks the content box and clips MORE. Width is the only lever short of appearance:none. */ /* ⚠ EXPLICIT min-widths on every condition select (2026-07-27). A flex line breaks on each item's hypothetical size = max(flex-basis, min-width), and `min-width:auto` on a `, which stretched to the flex line on its own. A button is content-sized, so it needs telling: full width, and the `.cg-fsel-label` ellipsis carries "Insert a field reference…" at the narrow end. */ .cg-formula-insert .cg-fsel { flex: 1 1 auto; min-width: 0; } .cg-formula-error { color: #8b1a14; } /* Item 11 — rating stars (picker buttons + static rows). */ .cg-stars { display: inline-flex; gap: 2px; align-items: center; padding: 4px 2px; } .cg-star-btn { border: 0; background: none; padding: 2px; cursor: pointer; line-height: 0; border-radius: 3px; } .cg-star-btn:hover { background: color-mix(in srgb, var(--lp-yellow) 30%, transparent); } .cg-star-btn:focus-visible { outline: 2px solid var(--lp-blue-solid); outline-offset: 1px; } .cg-stars--static { padding: 0; } .cg-rating-max { width: 72px; } /* Items 1/2 — menu panes. */ .cg-desc-default { background: #f3f5f8; border-radius: var(--lp-r-sm); padding: 6px 8px; white-space: pre-line; } /* Item 11 — the drawer's actionable links + checkbox. */ .cg-detail-action { display: inline-block; margin-top: 4px; font-size: var(--lp-fs-2xs); color: var(--lp-blue-solid); text-decoration: none; } .cg-detail-action:hover { text-decoration: underline; } .cg-detail-checkbox { justify-self: start; width: 15px; height: 15px; accent-color: var(--lp-blue-solid); } /* ===== Wave 6 (2026-07-28) — view modes, add-field "+", scope, retype ===== */ /* Item 10 — the toolbar's mode switcher. Wave-7 item W12: the segmented control is gone — the switcher is the shared toolbar Popover (`.cg-tb-btn` family); only the wrapper and the per-mode field select remain. */ .cg-modes { display: inline-flex; align-items: center; gap: 6px; } .cg-mode-field { max-width: 150px; } .cg-mode-empty { padding: 28px 16px; color: #6a6f78; font-size: var(--lp-fs-xs); } /* Item 10 — LIST view. */ .cg-listview { height: 100%; overflow: auto; background: #fff; } .cg-lv-group { display: flex; align-items: center; gap: 8px; width: 100%; border: 0; border-bottom: 1px solid #e4e7eb; background: #eef0f3; padding: 7px 12px; font: inherit; font-size: var(--lp-fs-xs); font-weight: 600; color: var(--lp-ink); cursor: pointer; text-align: left; } .cg-lv-chev { font-size: var(--lp-fs-4xs); color: #6a6f78; } .cg-lv-count { color: #6a6f78; font-weight: 500; } .cg-lv-row { display: flex; align-items: baseline; gap: 14px; width: 100%; border: 0; border-bottom: 1px solid #eef0f3; background: #fff; padding: 8px 12px; font: inherit; cursor: pointer; text-align: left; } .cg-lv-row:hover { background: #f7f8fa; } .cg-lv-title { flex: 0 0 220px; font-size: var(--lp-fs-xs); font-weight: 600; color: #1f2733; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .cg-lv-cells { display: flex; flex-wrap: wrap; gap: 4px 16px; min-width: 0; } .cg-lv-cell { display: inline-flex; gap: 5px; align-items: baseline; max-width: 260px; } /* --------------------------------------------------------------------------- Item 11 (2026-08-02) — the uppercase sweep. THE RULE, applied at all 13 sites: Every one of them was the same micro-kicker — 3xs + 600 + positive tracking + `text-transform: uppercase` — and the owner wants sentence case. Deleting the transform alone is not the fix: caps carry ~30% more optical weight than lowercase at the same px, and the positive letter-spacing only exists BECAUSE caps need opening up. Left as-is, an 11px muted label becomes genuinely hard to read and the tracking reads as loose. So each site takes three changes together: 3xs -> 2xs (one step up, buying back what the caps were carrying) letter-spacing -> normal (tracking is a caps device) font-weight: 600 STAYS (it is what still says "label, not value") TWO SITES STAY AT 3xs, and both were decided by looking at the rendered page rather than by applying the rule (A/B'd live on the Space, 2026-08-02): `.cg-lock-tag` — a pill annotating 13px text; it must stay smaller than what it annotates, and it sits inches from the sentence-case `Pre-set` chip, which is now its typographic twin. `.cg-lv-k` BELOW — the "caps were carrying legibility" argument does NOT apply to it. Every other site is a LONE kicker with nothing beside it; this one always sits immediately left of its value, so the pair itself carries the legibility. Side by side, 3xs is the better of the two: the size step reinforces the label/value split that colour already states (at 2xs the distinction leans on colour alone), and it keeps the density the list view exists for — a 2xs key wraps pairs onto a second line sooner. The source strings were ALREADY sentence case everywhere ("Filter", "Sort", "Notes", "Locked"), so this file was the whole of the bug. Kanban is untouched by all of this: `.cg-kb-cell .cg-lv-k` (0,2,0) already overrode both the size and the transform, so those cards were never uppercase. --------------------------------------------------------------------------- */ .cg-lv-k { font-size: var(--lp-fs-3xs); color: #8a8f98; white-space: nowrap; } .cg-lv-v { font-size: var(--lp-fs-xs); color: var(--lp-ink); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } /* Item 10 — CALENDAR view. */ .cg-calview { height: 100%; overflow: auto; background: #fff; padding: 10px 12px; } .cg-cal-bar { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; } .cg-cal-nav { padding: 2px 9px; } .cg-cal-title { font-size: var(--lp-fs-sm); font-weight: 600; color: #1f2733; min-width: 130px; } .cg-cal-note { font-size: var(--lp-fs-2xs); color: #6a6f78; } .cg-cal-nodate { margin-left: auto; font-size: var(--lp-fs-2xs); color: #8a5b14; background: #fbeedb; border-radius: var(--lp-r-lg); padding: 2px 10px; } .cg-cal-grid { display: grid; grid-template-columns: repeat(7, 1fr); border-left: 1px solid #e4e7eb; border-top: 1px solid #e4e7eb; } .cg-cal-dow { padding: 4px 6px; font-size: var(--lp-fs-2xs); color: #8a8f98; border-right: 1px solid #e4e7eb; border-bottom: 1px solid #e4e7eb; background: #f7f8fa; } .cg-cal-cell { min-height: 86px; max-height: 150px; overflow: auto; padding: 3px 4px; border-right: 1px solid #e4e7eb; border-bottom: 1px solid #e4e7eb; } .cg-cal-cell.is-blank { background: var(--lp-wash); } .cg-cal-cell.is-today { background: color-mix(in srgb, var(--lp-yellow) 20%, transparent); } .cg-cal-day { font-size: var(--lp-fs-3xs); color: #6a6f78; margin: 0 0 3px 2px; } .cg-cal-chip { display: block; width: 100%; border: 0; border-radius: 3px; background: #e7f0fa; color: var(--lp-blue-solid); font: inherit; font-size: var(--lp-fs-3xs); text-align: left; padding: 2px 6px; margin-bottom: 2px; cursor: pointer; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .cg-cal-chip:hover { background: #d9e7f6; } /* Item 10 — KANBAN view. */ .cg-kbview { height: 100%; overflow: hidden; display: flex; flex-direction: column; background: #f7f8fa; } .cg-kb-note { padding: 6px 12px; font-family: inherit; font-size: var(--lp-fs-2xs); color: #6a6f78; background: #fff; border-bottom: 1px solid #e4e7eb; } .cg-kb-lanes { flex: 1; display: flex; gap: 10px; overflow-x: auto; overflow-y: hidden; padding: 10px 12px; } /* ⭐ Wave-18 item 1a — THE LANE IS 250px WIDE EVEN WHEN A VALUE ISN'T. `flex: 0 0 250px` sets the BASIS, not the width: a flex item's `min-width` defaults to `auto`, which in a row container resolves to the item's MIN-CONTENT width, and min-content floors the basis. One 80-character unbroken string inside a card therefore made the lane ~700px wide and pushed every other lane off the board — the board scrolled horizontally because of CONTENT, which it must never do (only lanes x 250px may make it scroll). `min-width: 0` is the whole fix at THIS level; it hands the overflow down to the card, where the two rules below turn it into a wrap/ellipsis instead of a spill. */ .cg-kb-lane { flex: 0 0 250px; min-width: 0; display: flex; flex-direction: column; background: #eef0f3; border-radius: var(--lp-r-md); max-height: 100%; } /* ═══ W26-C ITEM 12 (R8) — the "Add option" lane ═══ A lane-shaped slot at the end of the rail, deliberately QUIETER than a real lane: dashed and unfilled, so the board still reads as "these are the stages" and the door does not look like a stage with nothing in it. It borrows `.cg-kb-lane`'s 250px basis so the rail's rhythm holds, and drops the filled background that would make it a fourth column of content. `align-self: flex-start` keeps it the height of its button instead of stretching to the tallest lane — a full-height dashed rectangle beside three lanes of cards reads as an empty stage, which is the one thing it must not say. */ .cg-kb-lane--add { background: none; border: 1px dashed #d4d8de; align-self: flex-start; padding: 6px; } .cg-kb-addopt { width: 100%; border: 0; background: none; padding: 6px 8px; font: inherit; font-size: var(--lp-fs-xs); font-weight: 500; color: var(--lp-muted); text-align: left; border-radius: var(--lp-r-sm); cursor: pointer; } .cg-kb-addopt:hover { background: #eef0f3; color: var(--lp-ink); } /* ═══ end W26-C ITEM 12 ═══ */ .cg-kb-head { display: flex; align-items: center; gap: 8px; padding: 8px 10px 4px; } /* Item 1a — the lane HEAD is the third place a long string reaches, and the only one whose string is a field's OPTION rather than a record's value. Found by screenshot, not by reading: with the lane pinned to 250px the pill stopped widening the board and started painting ACROSS the two lanes to its right, which is the same bug wearing different clothes. The pill ellipsizes; the count beside it does not shrink at all, because a truncated "1,534" would be a wrong number rather than a shortened label. */ .cg-kb-pill { font-size: var(--lp-fs-3xs); font-weight: 600; border-radius: var(--lp-r-lg); padding: 2px 9px; background: #dfe3e8; color: var(--lp-ink); min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .cg-kb-count { font-family: inherit; font-size: var(--lp-fs-2xs); color: #6a6f78; font-variant-numeric: tabular-nums; flex: 0 0 auto; } .cg-kb-cards { flex: 1; overflow-y: auto; padding: 4px 8px 10px; } .cg-kb-card { background: #fff; border: 1px solid #e0e3e8; border-radius: var(--lp-r-md); padding: 7px 9px; margin-bottom: 6px; box-shadow: 0 1px 1px rgba(16, 24, 32, 0.04); } .cg-kb-card.is-draggable { cursor: grab; } /* Item 1a, the title. `anywhere` rather than `break-word`: the two break identically on the PAINTED line, but only `anywhere` also shrinks the element's MIN-CONTENT size, and min-content is what the lane above was being floored by. `break-word` here would wrap the text and still report a 700px minimum to the ancestors — the lane would be fixed by its own `min-width: 0` and the card would then overflow it instead. */ .cg-kb-title { display: block; width: 100%; border: 0; background: none; padding: 0 0 2px; font: inherit; font-size: var(--lp-fs-xs); font-weight: 600; color: #1f2733; text-align: left; cursor: pointer; overflow-wrap: anywhere; } .cg-kb-title:hover { color: var(--lp-blue-solid); text-decoration: underline; } .cg-kb-cell { display: flex; gap: 6px; align-items: baseline; font-family: inherit; font-size: var(--lp-fs-xs); /* Item 1a — the second floor. The row is itself a flex item of the card's column, and it is a flex CONTAINER for the key/value pair below; without this the pair's min-content width reaches the lane through it. */ min-width: 0; } /* The `text-transform: none` / `letter-spacing: normal` this block used to carry came off with item 11 — `.cg-lv-k` no longer uppercases anything, so overriding it here would be a reset of a rule that no longer exists. The font-size override stays: kanban cards read at card size, not list-row size. */ /* Item 1a — the LAST floor, and the only one that can be lowered here rather than on the base rule. `.cg-lv-k` `:3477` / `.cg-lv-v` `:3482` are SHARED with ListView, whose `.cg-lv-cell` caps itself at 260px and therefore never had this bug; putting `min-width: 0` there would change every list row to fix a kanban card. Scoped to `.cg-kb-cell`, the blast radius is the board. What each mode does with the extra freedom, and why they differ: UNCLAMPED — the base rule's `white-space: nowrap; overflow: hidden; text-overflow: ellipsis` still applies, and it had been dead code: an ellipsis can only appear once the box is ALLOWED to be narrower than its text, which `min-width: auto` forbade. So the fix here is `min-width: 0` alone, and the value finally truncates on one line as it always claimed to. CLAMPED — the C-DISP rule at the bottom of this file switches to `white-space: normal` for its 2-line clamp, and an unbroken "aaaa..." is ONE word: normal wrapping has nowhere to break it, so min-content stayed the full string even at `min-width: 0`. That is what `overflow-wrap: anywhere` is for; without it the clamp shows one enormous line. */ .cg-kb-cell .cg-lv-k, .cg-kb-cell .cg-lv-v { font-family: inherit; font-size: var(--lp-fs-xs); line-height: 1.35; min-width: 0; overflow-wrap: anywhere; } /* ⛔ W29-T80 — a CHOICE value on a card is a tinted chip, as it is on the canvas, in the record panel and on the lane header. The colours are INLINE (they come from the field's stored `optionColors` and are per-option, so they cannot live in a stylesheet); this rule is only the chip's shape. Kept beside the pair above because it must inherit the same wrap behaviour — a long option label has to break inside the chip rather than widen the card. */ .cg-kb-cell .cg-kb-chip { border: 1px solid transparent; border-radius: 999px; padding: 0 8px; line-height: 1.5; font-weight: 500; /* `inline-block`, not `inline`: an inline box ignores the vertical padding above and the tint would paint outside the row it belongs to. */ display: inline-block; max-width: 100%; } /* ⚠ WHICH OF THE TWO SHRINKS, and why `min-width: 0` alone was not the answer. Both children default to `flex-shrink: 1`, and flexbox distributes shrinkage in proportion to BASE SIZE — so once `min-width: 0` let them shrink at all, the 80-character value (base ~500px) dragged the "Long value" label (base ~62px) down to about 24px with it, and a `nowrap` label in a 24px box paints straight over the value it is labelling. The first screenshot showed exactly that, and it is a regression the previous rule introduced rather than a pre-existing bug. The label is not a candidate for shrinking: it is short by design and it is the only thing saying WHAT the value is. So it keeps its width (`flex: 0 0 auto`) and the value absorbs all of it — with a `max-width` for the one case that argument does not cover, a label that is itself the long string, where the cap bites and the base rule's `nowrap` ellipsis finishes it. */ .cg-kb-cell .cg-lv-k { color: var(--lp-muted); font-weight: 500; flex: 0 0 auto; max-width: 45%; overflow: hidden; text-overflow: ellipsis; } .cg-kb-cell .cg-lv-v { flex: 1 1 auto; } /* ═══ W26-C ITEM 11 — a url/email/phone value on a card is a LINK ═══ It carries `.cg-lv-v` as well, so every rule above still shapes it — the clamp, the flex share, the wrap. This block is only the link's own affordance, and it deliberately does NOT set a colour of its own: the card's values read as one column of text, and a blue line in the middle of three grey ones announces itself louder than the record title above it. The underline appears on hover/focus, which is where the reader is asking the question. The `:focus-visible` half is not decoration — the card is a click target, so without a visible focus ring the keyboard user cannot tell whether Enter will follow the link or open the record. */ .cg-kb-cell .cg-kb-link { color: inherit; text-decoration: none; cursor: pointer; } .cg-kb-cell .cg-kb-link:hover, .cg-kb-cell .cg-kb-link:focus-visible { color: var(--lp-blue-solid); text-decoration: underline; } /* ═══ end W26-C ITEM 11 ═══ */ .cg-kb-more { display: block; margin: 2px 0 4px; } /* Item 4 — the header-row "+" (insert at end). */ .cg-add-field-btn { width: 34px; height: 35px; border: 0; border-left: 1px solid #e4e7eb; border-bottom: 1px solid #e4e7eb; background: #fff; color: #6a6f78; font-size: var(--lp-fs-md); line-height: 1; cursor: pointer; } .cg-add-field-btn:hover { background: #f3f5f8; color: var(--lp-blue-solid); } /* Item 9c — the scope control + the Fields panel's cohort chip. */ .cg-scope-tag { background: #e7f0fa; color: var(--lp-blue-solid); } /* Wave-6 INTEGRATION FIX (HOST, per the integration sequence's trivial-fix provision): the leftmost mode switcher overflows the outer-nav-open width by ~200px, shoving the record count out of the toolbar (QA: conditions count-fit + measures toolbar-984 legs, measured overflow 203/183px). ⭐ W36-T54 — THE SAME DEFECT RECURRED AT THE SAME PLACE FOR A NEW REASON and is worth the cross-reference: at 344px rails the strip is 752px, the labelled controls wanted 864px, and the count sat 102px past the right edge. The wave-6 fix was a wrap; the wave-15 fix was icon collapse; what neither could do was NOTICE, because both thresholds were asking the window. They ask the strip now. At narrow widths the toolbar WRAPS — the count stays visible inside it on a second row; the fixed 44px height becomes a minimum so the flex column below simply yields the extra row's height. */ /* ⭐ Wave-15 item 11 — the toolbar COLLAPSES TO ICONS instead of wrapping or scrolling. This block used to say `flex-wrap: wrap; height: auto` — a second toolbar row, which pushed the grid down and made the strip's height depend on the window. The owner asked for neither that nor a scrollbar: the controls give up their WORDS first, because a filter funnel and a sort glyph are recognisable and "Filter · 2" is not worth 60px of a 44px strip. ⛔⛔ W36-T54 — THE PARAGRAPH THAT STOOD HERE ARGUED FOR `@media` OVER `@container` AND ITS PREMISE IS DEAD: *"the grid renders in its OWN iframe, so the iframe width IS the container width"*. It was true in the Streamlit host and has not been true since that host was deleted — the React shell mounts `CustomerGrid` directly beside the rails. The reasoning is kept rather than erased because it is a live warning to the next reader: an argument can stay internally sound long after the world it described stopped existing, and nothing in the battery re-checks a premise. The full measurement and the containment safety check are on `.cg-toolbar` itself. The name survives in `title` + `aria-label` on every collapsed button (see Popover.tsx) — `display: none` removes a label from the accessibility tree, so the aria half is what keeps these from becoming unnamed buttons rather than a nicety. Arithmetic, so the steps are not taste: a labelled control is ~95-125px (18 padding + 14 icon + 6 gap + label + 6 gap + 10 chevron); seven of them plus a 214px search plus the count is ~1070-1170px, which is why 1080 is where the first step lands. Icon-only takes each to 48px, so the same seven fit in ~336px and the strip is comfortable to ~600px. */ @container cgtoolbar (max-width: 1080px) { .cg-tb-label { display: none; } /* Tighter without the words, or the icons sit in a lot of empty box. */ .cg-tb-btn { padding: 0 7px; gap: 4px; } /* ⚠ Text-only toolbar buttons keep their words at every width — they have NO icon to fall back to, so collapsing them would leave an empty, clickable box. They are what `.cg-tb-label` exists to distinguish; this makes the exemption explicit rather than relying on the label span's absence. */ .cg-tb-addcust, .cg-mode-field { padding: 0 9px; } } /* The second step, for the genuinely cramped case (a narrow embed, or 50%/67% browser zoom, which scales the LAYOUT viewport and therefore trips these queries exactly as a small window does). The chevron is the least informative glyph in the button — it says "this opens", which the icon plus a click already teaches — so it goes before anything that names a control. ⭐ W36-T54 — 760 -> 480, AND BOTH THE UNIT AND THE NUMBER MOVED. As a WINDOW query, 760 named a small laptop. As a CONTAINER query it names this strip, which is `window - both rails`: at a 1440 window with two 344px rails that is 752px, INSIDE the old 760, so leaving it would have stripped the chevrons off every control on an ordinary screen. ⛔⛔ AND THE REPLACEMENT WAS MEASURED, AFTER AN ARITHMETIC ONE WAS WRONG — which is this ticket's own lesson applied to itself. The first attempt was 660, from the sums three lines up (7 icon controls x ~48 + a 214px search floor + a ~93px count ~= 650). A width sweep on the deployed build then said two things the sums did not: · ⛔ **A CONTAINER QUERY MEASURES THE CONTENT BOX, NOT `clientWidth`.** `.cg-toolbar` carries `padding: 0 10px`, so a `660px` threshold fires at a 680px STRIP — every one of these numbers is 20px tighter than it reads. Chevrons vanished at a 1368 window, i.e. on the 1366-wide laptops that are the single most common screen this product runs on. · the strip does not actually OVERFLOW until ~357px of content (measured: 392 -> over 0, 312 -> over 45), because `.cg-search` shrinks first and absorbs the slack, so `scrollWidth == clientWidth` all the way down. Add the chevrons back (~80px over seven buttons) and the true floor with them is ~440. 480 sits above that floor with room and far below any real laptop: chevrons survive to a 500px strip, so a 1366 window keeps them and the W36-T05 agent-panel case (strip 483, content 463) gives them up, which is exactly the "genuinely cramped" case this step was written for. */ @container cgtoolbar (max-width: 480px) { .cg-tb-btn > svg:last-child { display: none; } .cg-tb-btn { padding: 0 6px; gap: 0; } /* The search keeps a usable floor instead of shrinking to its own icon. */ .cg-search-input { width: 120px; } } /* ===== Wave 7 (2026-07-28) — CLIENT items (customer-grid only) ============= */ /* Item W4 (contract C6) — column-menu action icons + thin-divider grouping. Item 19 (2026-08-02) extends the same row shape to the VIEW menu: one icon column, one line, no wraps. Two menus that do the same kind of thing now look like each other. */ .cg-column-actions button, .cg-view-menu button { display: flex; align-items: center; gap: 8px; } /* R7 — a menu row is ONE LINE. `.cg-mi-text` may ellipsis (it never should at these widths; it is the backstop that keeps a long label from growing the panel past its ceiling). */ .cg-column-actions button, .cg-view-menu button { white-space: nowrap; } /* ⚠ The export pane's title is "Export " — TENANT CONTENT under the same nowrap, which without this would run straight out of the panel's 260px ceiling. Caught by walking my own item-19 change rather than by an assertion; the menu rows beside it are all closed vocabulary and genuinely need nothing. */ .cg-view-menu .cg-pop-title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .cg-mi-text { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; } .cg-view-menu button:hover:not(:disabled) .cg-mi-ic, .cg-view-menu button.is-danger .cg-mi-ic { color: inherit; } .cg-mi-ic { display: inline-flex; align-items: center; justify-content: center; width: 16px; height: 16px; flex: 0 0 16px; color: var(--cg-muted); } .cg-column-actions button:hover:not(:disabled) .cg-mi-ic, .cg-column-actions button.is-danger .cg-mi-ic { color: inherit; } .cg-menu-sep { height: 1px; margin: 4px 2px; background: var(--cg-line); } /* Item W9 — the Fields panel's permanent-delete affordance. Hidden until the row is hovered/focused (the panel is a dense list; twenty always-on trash cans read as danger, one on the row under the pointer reads as an action). */ .cg-check-del { display: inline-flex; align-items: center; margin-left: auto; padding: 2px 4px; border: 0; border-radius: var(--lp-r-sm); background: transparent; color: var(--cg-muted); font: inherit; font-size: var(--lp-fs-3xs); cursor: pointer; opacity: 0; } .cg-check-row:hover .cg-check-del, .cg-check-del:focus-visible, .cg-check-del.is-armed { opacity: 1; } .cg-check-del:hover, .cg-check-del.is-armed { color: var(--cg-danger); } .cg-check-del.is-armed { font-weight: 600; white-space: nowrap; } .cg-check-del:focus-visible { outline: 2px solid color-mix(in srgb, var(--lp-blue-solid) 35%, transparent); outline-offset: -1px; } /* Item W14 — the whole kanban card opens the record (title is a span now; the card itself is the button). */ .cg-kb-card { cursor: pointer; } .cg-kb-card.is-draggable { cursor: grab; } .cg-kb-card:hover .cg-kb-title { color: var(--lp-blue-solid); text-decoration: underline; } .cg-kb-card:focus-visible { outline: 2px solid color-mix(in srgb, var(--lp-blue-solid) 35%, transparent); outline-offset: 1px; } /* Item W11c (C3) — the MAP view: SVG scatter over a coarse US outline, pins in brand navy, hover/focus in gold. */ .cg-mapview { height: 100%; overflow: auto; background: #fff; padding: 10px 12px; display: flex; flex-direction: column; } .cg-map-bar { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; /* I18-R adds the route controls here; they only appear with a multi-pin selection, and when they do the row must wrap rather than push the gesture hint off the edge. */ flex-wrap: wrap; row-gap: 6px; } .cg-map-hint { color: var(--lp-muted); font-size: var(--lp-fs-3xs); margin-left: auto; /* the gesture hint trails right; the counts lead left */ flex: 0 0 auto; } .cg-map-count strong { font-weight: 600; color: var(--lp-ink); } /* Wave-9 I18 — the per-pin Google hand-off, shown when exactly one pin is selected. Text links on purpose: they navigate away, and dressing a navigation up as a button is how people end up not knowing they left. */ .cg-map-go { display: inline-flex; align-items: center; gap: 10px; flex: 0 0 auto; font-size: var(--lp-fs-3xs); max-width: 46%; } .cg-map-go a { color: var(--lp-blue-solid); text-decoration: none; border-bottom: 1px solid transparent; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; /* ⚠ A flex child defaults to min-width:auto, so it refuses to shrink below its own content and blows past max-width instead of ellipsizing. Real customer names are long; without this the link pushes the gesture hint out of the row rather than truncating. */ min-width: 0; } .cg-map-go a:hover { border-bottom-color: var(--lp-blue-deep); } .cg-map-go a:focus-visible { outline: 2px solid var(--lp-blue-deep); outline-offset: 2px; border-radius: 2px; } .cg-map-frame { position: relative; /* the legends float over the map, never in the flow */ flex: 1; min-height: 0; border: 1px solid var(--lp-line); border-radius: 6px; background: var(--lp-wash); overflow: hidden; } .cg-map-frame:focus-visible { outline: 2px solid var(--lp-blue-deep); outline-offset: -2px; } /* Wave-9 I18 — the camera controls. The owner's note was that "Fit to data" looked ugly, and it did: a `.cg-link-btn` (the full-width builder-footer link) forced into shape by width/padding overrides, transparent and borderless, adrift in a row of grey text. It is a proper control cluster now — the affordance every map has, floated top-right, clear of where a marquee drag naturally starts. ⚠ It lives OUTSIDE the : a mousedown on a button inside it would start a pan. And it sets pointer-events back to auto because `.cg-map-legends` — its sibling over the same frame — deliberately has none. Colours are `--lp-*` variables only, never literals, so HOST's C1 token pass flows through here for free. */ .cg-map-ctl { position: absolute; top: 10px; right: 10px; display: flex; flex-direction: column; background: #fff; border: 1px solid var(--lp-line); border-radius: 6px; overflow: hidden; box-shadow: 0 1px 3px rgba(32, 36, 51, 0.1); pointer-events: auto; } .cg-map-ctl-b { width: 28px; height: 28px; display: flex; align-items: center; justify-content: center; padding: 0; border: 0; border-bottom: 1px solid var(--lp-line); background: #fff; color: var(--lp-ink); cursor: pointer; } .cg-map-ctl-b:last-child { border-bottom: 0; } .cg-map-ctl-b:hover:not(:disabled) { background: var(--lp-blue-tint); } .cg-map-ctl-b:disabled { color: var(--lp-line); cursor: default; } .cg-map-ctl-b:focus-visible { outline: 2px solid var(--lp-blue-deep); outline-offset: -2px; } /* The Google hand-off sits in the same cluster and must read as one of the controls, not as a link — it is an only because it navigates. */ a.cg-map-ctl-b { text-decoration: none; } .cg-map-ctl-b svg { width: 16px; height: 16px; display: block; } .cg-map-ctl-b path { fill: none; stroke: currentColor; stroke-width: 1.4; stroke-linecap: round; stroke-linejoin: round; } .cg-map-frame svg.cg-map-svg { width: 100%; height: 100%; display: block; cursor: grab; touch-action: none; /* pointer events own the gesture, not the browser's pan */ } .cg-map-svg:active { cursor: grabbing; } .cg-map-svg.is-selecting { cursor: crosshair; } /* I6 — the basemap reads as a MAP: water wash, land fill, hairline graticule. */ .cg-map-water { fill: #F2F6FB; } /* ⚠ Wave-9 I18 — NO `vector-effect: non-scaling-stroke` HERE, on purpose. MapView hands every in-group stroke `hairline(w, k)` (= w/k), which already cancels the zoom. This rule ALSO carried non-scaling-stroke, so the zoom was cancelled twice and the coastline got thinner the further you zoomed IN: 0.89 CSS px fitted, 0.445 at 2x, 0.089 at 10x, 0.015 at the cap — the "blurry when zoomed" bug. `hairline()` is the map's ONE stroke mechanism and `scalingConflicts()` in mapProjection.ts gates this file so it cannot return. */ .cg-map-land { fill: #FFFFFF; stroke: #C8D2E0; stroke-linejoin: round; } .cg-map-lake { fill: #F2F6FB; stroke: #C8D2E0; } .cg-map-grat { stroke: rgba(32, 36, 51, 0.07); fill: none; } .cg-map-pin { cursor: pointer; } .cg-map-pin:focus-visible { outline: none; } .cg-map-pin.is-hover, .cg-map-pin.is-selected { paint-order: stroke; } .cg-map-marquee { fill: rgba(157, 191, 242, 0.22); stroke: var(--lp-blue-deep); stroke-width: 1; stroke-dasharray: 4 3; pointer-events: none; } /* I3/I5 legends — floated bottom-left, scrollable, never covering the whole map. */ .cg-map-legends { position: absolute; left: 10px; bottom: 10px; display: flex; flex-direction: column; gap: 6px; max-height: calc(100% - 20px); overflow: auto; pointer-events: none; /* the map keeps the drag; the legend is a readout */ } .cg-map-legend { background: rgba(255, 255, 255, 0.94); border: 1px solid var(--lp-line); border-radius: 6px; padding: 7px 9px; font-size: var(--lp-fs-3xs); max-width: 260px; } .cg-map-legend-t { font-weight: 600; color: var(--lp-ink); margin-bottom: 4px; } .cg-map-legend-row { display: flex; align-items: center; gap: 6px; padding: 1px 0; } .cg-map-swatch { flex: 0 0 auto; width: 10px; height: 10px; border-radius: 50%; border: 1px solid; } .cg-map-legend-k { flex: 1 1 auto; color: var(--lp-ink); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .cg-map-legend-n { flex: 0 0 auto; color: var(--lp-muted); font-variant-numeric: tabular-nums; } .cg-map-legend-note { margin-top: 4px; color: var(--lp-muted); line-height: 1.35; } .cg-map-sizerow { display: flex; align-items: flex-end; gap: 10px; } .cg-map-sizeitem { display: flex; flex-direction: column; align-items: center; gap: 2px; } .cg-map-sizeitem .cg-map-legend-k { flex: 0 0 auto; font-variant-numeric: tabular-nums; } /* Wave-9 I18 — the hover card, replacing the bare floating label. Drawn inside the SVG in screen space (the viewBox letterboxes, so an HTML overlay would have to re-derive the rendered scale). pointer-events stay off: a hover surface that can swallow the next click is a logged scar. */ .cg-map-card { pointer-events: none; } .cg-map-card rect { fill: #fff; stroke: var(--lp-line); stroke-width: 1; } .cg-map-card-t { font: 600 var(--lp-fs-3xs) Inter, sans-serif; fill: var(--lp-ink); } .cg-map-card-l { font: 400 var(--lp-fs-3xs) Inter, sans-serif; fill: var(--lp-muted); } /* Wave-9 I18-R — the route planner. Sequencing is ours (free arithmetic); the roads are Google's, reached by the same key-less URL as the rest of the hand-off. Nothing here fetches anything. */ .cg-map-route { display: inline-flex; align-items: center; gap: 10px; flex: 0 1 auto; font-size: var(--lp-fs-3xs); min-width: 0; } .cg-map-route-go { flex: 0 0 auto; height: 22px; padding: 0 9px; border: 1px solid var(--lp-line); border-radius: 5px; background: #fff; color: var(--lp-ink); font: inherit; cursor: pointer; } .cg-map-route-go:hover:not(:disabled) { background: var(--lp-blue-tint); } .cg-map-route-go:disabled { color: var(--lp-muted); cursor: default; } .cg-map-route-go:focus-visible { outline: 2px solid var(--lp-blue-deep); outline-offset: 1px; } .cg-map-route-sum { flex: 0 0 auto; color: var(--lp-ink); font-variant-numeric: tabular-nums; } .cg-map-route-sum strong { font-weight: 600; } /* The distance is a sum of straight lines. The caveat rides beside the number, never in a tooltip — a qualifier nobody sees is a qualifier nobody made. */ .cg-map-route-note { color: var(--lp-muted); font-variant-numeric: normal; } .cg-map-route-opt { display: inline-flex; align-items: center; gap: 5px; flex: 0 0 auto; color: var(--lp-muted); white-space: nowrap; } .cg-map-route-opt input[type="checkbox"] { margin: 0; } .cg-map-route-start { max-width: 168px; height: 22px; border: 1px solid var(--lp-line); border-radius: 5px; background: #fff; color: var(--lp-ink); font: inherit; font-size: var(--lp-fs-3xs); } .cg-map-route a { color: var(--lp-blue-solid); text-decoration: none; border-bottom: 1px solid transparent; /* Deliberately NOT ellipsized. This link carries the "(first 11 of 23)" truncation notice, and clipping the sentence that admits a limit is how a limit stops being admitted. The bar wraps instead. */ white-space: nowrap; flex: 0 0 auto; } .cg-map-route a:hover { border-bottom-color: var(--lp-blue-deep); } .cg-map-route a:focus-visible { outline: 2px solid var(--lp-blue-deep); outline-offset: 2px; border-radius: 2px; } /* The path itself: dashed, so it never reads as a road that exists. */ .cg-map-route-line { fill: none; stroke: var(--lp-blue-solid); /* ⚠ NO stroke-dasharray here — it is in USER units and would be multiplied by the zoom. MapView hands it in via dashPattern(), pre-divided by k. */ stroke-linejoin: round; stroke-linecap: round; } .cg-map-stopno { pointer-events: none; } .cg-map-stopno circle { fill: var(--lp-blue-solid); stroke: #fff; stroke-width: 1.5; } .cg-map-stopno text { font: 600 var(--lp-fs-5xs) Inter, sans-serif; fill: #fff; } /* Item W1c (C1) — the partial-pool count: muted, with a quiet pulsing dot as the whole progress affordance (pure CSS; no spinner, no emoji). */ .cg-count-partial { display: inline-flex; align-items: center; gap: 6px; color: var(--cg-muted); } /* wave17 GRID — item 3 / owner R6. `.cg-count-loaddot` (a 6px gold disc pulsing on its own `@keyframes cg-loaddot`) stood here and is DELETED, not merely unused: the count chip now wears `.lp-spin` like every other wait in the product, and a second loading animation left in the stylesheet is how one surface quietly keeps its own dialect. Both the rule and its keyframes went; nothing references either. R6 is a CONSISTENCY ruling, which is why deleting a perfectly good affordance is the point rather than collateral. */ /* wave17 GRID — item 3 / R6: a container whose ONLY child is the spinner CENTRES it. These four are text boxes that now hold a single 14px mark, and a bare ring pinned to the left of an 18px-padded card reads as a rendering artefact rather than as a wait. Scoped to `:only-child` so a spinner sitting BESIDE content (the toolbar count chip) keeps its inline flow. Layout only — size, colour and animation stay SHELL's under C-SPIN. */ .cg-ts-note > .lp-spin:only-child, .cg-ch-empty > .lp-spin:only-child, .cg-ch-loading > .lp-spin:only-child, .cg-record-comment-state > .lp-spin:only-child { display: block; margin: 2px auto; } /* Item W2 (C2) — the export format pane's small title line above the menuitems. */ .cg-export-title { padding: 4px 8px 6px; margin: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 200px; } /* ------------------------------------------------------------------------- */ /* Wave-8 I19c (C2) — the Dashboard display mode: a per-view board of charts */ /* over the SAME pipeline rows the grid paints. Hand-rolled SVG, no library. */ /* ------------------------------------------------------------------------- */ .cg-dashview { height: 100%; overflow: auto; background: var(--lp-wash); padding: 10px 12px; display: flex; flex-direction: column; } .cg-dash-bar { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; } .cg-dash-add { flex: 0 0 auto; margin-left: auto; } .cg-dash-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 10px; align-content: start; } .cg-ch-card { /* ⚠ WAS `var(--lp-bg)`, A TOKEN THAT IS DEFINED NOWHERE — so every chart card rendered with NO background at all. CSS resolves an unknown custom property to nothing and carries on silently, which is why a missing token is worse than a wrong one: there is no error, just a surface that quietly is not there. Gated below by the token-parity check. */ background: var(--lp-surface); border: 1px solid var(--lp-line); border-radius: var(--lp-r-lg); padding: 8px 10px 6px; display: flex; flex-direction: column; min-width: 0; } .cg-ch-head { display: flex; align-items: center; gap: 4px; } .cg-ch-title { flex: 1 1 auto; font-size: var(--lp-fs-xs); font-weight: 600; color: var(--lp-ink); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .cg-ch-cfg, .cg-ch-del { flex: 0 0 auto; font-size: var(--lp-fs-sm); } .cg-ch-cfgbody { display: flex; flex-direction: column; gap: 4px; padding: 6px 0 4px; border-bottom: 1px solid var(--lp-line); margin-bottom: 4px; } .cg-ch-row { display: flex; align-items: center; gap: 6px; font-size: var(--lp-fs-3xs); } .cg-ch-row > span { flex: 0 0 54px; color: var(--lp-muted); } .cg-ch-row .cg-select, .cg-ch-row .cg-input { flex: 1 1 auto; min-width: 0; height: 26px; } .cg-ch-svg { width: 100%; height: auto; display: block; } .cg-ch-bar, .cg-ch-slice { transition: opacity 0.1s ease; } .cg-ch-bar:hover, .cg-ch-slice:hover { opacity: 0.78; } .cg-ch-area { opacity: 0.34; } .cg-ch-line { stroke-width: 1.6; stroke-linejoin: round; stroke-linecap: round; } .cg-ch-tick, .cg-ch-leg { font: var(--lp-fs-4xs) Inter, sans-serif; fill: var(--lp-muted); } .cg-ch-leg-n { font-variant-numeric: tabular-nums; } .cg-ch-empty-t { font: var(--lp-fs-3xs) Inter, sans-serif; fill: var(--lp-muted); } .cg-ch-empty { padding: 18px 6px; color: var(--lp-muted); font-size: var(--lp-fs-3xs); line-height: 1.4; } .cg-ch-kpi { display: flex; flex-direction: column; gap: 2px; padding: 14px 2px 10px; } .cg-ch-kpi-v { font-size: var(--lp-fs-xl); font-weight: 600; color: var(--lp-ink); font-variant-numeric: tabular-nums; line-height: 1.1; } .cg-ch-kpi-n { font-size: var(--lp-fs-3xs); color: var(--lp-muted); } .cg-ch-foot { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 4px; padding-top: 4px; border-top: 1px solid var(--lp-line); font-size: var(--lp-fs-3xs); color: var(--lp-muted); font-variant-numeric: tabular-nums; } /* Wave-8 I12c (C5) — the record drawer's Documents section. */ .cg-docs-empty, .cg-docs-cap { color: var(--lp-muted); font-size: var(--lp-fs-3xs); } .cg-docs-list { list-style: none; margin: 0; padding: 0; } .cg-docs-row { display: flex; align-items: baseline; gap: 6px; padding: 3px 0; border-bottom: 1px solid var(--lp-line); } .cg-docs-row:last-child { border-bottom: none; } .cg-docs-name { flex: 1 1 auto; text-align: left; padding: 0; height: auto; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .cg-docs-meta { flex: 0 0 auto; color: var(--lp-muted); font-size: var(--lp-fs-3xs); font-variant-numeric: tabular-nums; } .cg-docs-del { flex: 0 0 auto; border: 1px solid transparent; border-radius: var(--lp-r-sm); background: transparent; color: var(--lp-muted); font: inherit; font-size: var(--lp-fs-2xs); line-height: 1; padding: 2px 5px; cursor: pointer; } .cg-docs-del:hover { color: var(--lp-red-deep); background: var(--lp-red-tint); } .cg-docs-del.is-armed { color: var(--lp-red-deep); background: var(--lp-red-tint); border-color: var(--lp-red); font-size: var(--lp-fs-3xs); } .cg-docs-add { display: flex; flex-direction: column; gap: 3px; margin-top: 8px; } .cg-docs-file { font-size: var(--lp-fs-3xs); color: var(--lp-ink); } .cg-docs-error { margin-top: 6px; padding: 5px 7px; border: 1px solid var(--lp-red); border-radius: var(--lp-r-md); background: var(--lp-red-tint); color: var(--lp-red-deep); font-size: var(--lp-fs-3xs); line-height: 1.4; } /* Wave-8 I11c (C4) — folders in the Views rail. */ .cg-fold-new { padding: 2px 8px 4px; } .cg-fold, .cg-fold-root { border-radius: 6px; } /* ⭐⭐ WAVE 34 · T22 (ruling R4) — WHILE A VIEW IS BEING DRAGGED, THE ROOT SECTION HAS A BODY. Off-drag this rule does not apply at all, so the rail keeps the exact layout it has today; the class is only on the root group and only while `viewDrag !== null` (ViewSidebar). · `min-height` is the EMPTY case: a user who filed every view into folders had a zero-pixel drop target and no way to unfile anything. · `padding-bottom` is the POPULATED case, which is the one nobody had noticed. This element has no padding of its own, so its box is exactly the union of its rows, and every row claims the drag for reordering via `stopPropagation`. Without a strip BELOW the last row there is no pixel anywhere that means "file this at the top level". ⚠ IT SETS NO PAINT, DELIBERATELY. `.cg-fold-root.is-drop` immediately below is the hover state and must keep winning; declaring a background or outline here would fight it at equal specificity and the "you are about to drop here" tint would depend on rule order. The area is this rule's job, the picture is that one's. ⚠ COST, STATED: the "Shared with me" group (the only thing rendered after root) shifts down by this padding for the duration of a drag. That is the price of not reserving the space permanently, and a transient shift under the cursor reads as the target opening up. */ .cg-fold-root.is-viewdrop { min-height: 30px; padding-bottom: 20px; } .cg-fold.is-drop, .cg-fold-root.is-drop { background: var(--lp-blue-tint); outline: 1px dashed var(--lp-blue-deep); outline-offset: -1px; } .cg-fold-head { display: flex; align-items: center; gap: 2px; padding: 1px 2px; } .cg-fold-toggle { flex: 1 1 auto; display: flex; align-items: center; /* 6px → 8px: the SAME gap `.cg-view-main` uses. Half of item 2's alignment fix — see the measured numbers on `padding` below. */ gap: 8px; min-width: 0; /* the disclosure chevron is positioned against this box */ position: relative; border: none; background: transparent; font: inherit; /* Wave-10 item 2 (SC-1): 11px → 13px, the SAME size as the view rows under it. Weight still distinguishes the folder heading; the name itself is promoted to primary ink below while the chevron/count retain this muted control colour. */ font-size: var(--lp-fs-xs); font-weight: 600; color: var(--lp-muted); text-align: left; /* Item 2's INDENT half — MEASURED, not reasoned about (the brief's own padding-only analysis reached the wrong answer, and the wrong direction, so this is the number the browser reported). Before, text start relative to the rail's left edge: root view name 41.00px FOLDER HEADER name 48.36px ← 7.4px further RIGHT than a sibling root view nested view name 53.00px ← only 4.6px further right than its own parent So a folder header was indented deeper than the top-level rows it sits among, while its children were barely indented under it: the tree read flat, and slightly inverted. The cause is the disclosure chevron, which took inline space ahead of the folder's mark that view rows have no equivalent of — NOT the paddings. The fix takes the chevron OUT of flow into the rail's 8px gutter (nothing on this rail clips overflow, checked) and matches the mark box to the view rows'. left-padding 7 + head-padding 2 + rail-padding 8 = 17px, exactly where a view row's mark starts. */ padding: 4px 6px 4px 7px; border-radius: var(--lp-r-md); cursor: pointer; } .cg-fold-toggle:hover { background: var(--lp-blue-tint); color: var(--lp-ink); } .cg-fold-chev { position: absolute; left: -8px; top: 50%; transform: translateY(-50%); transition: transform 0.12s ease; font-size: var(--lp-fs-4xs); } /* ⚠ the translate MUST be repeated, not appended: `transform` is ONE property, so a bare `rotate(-90deg)` here would drop the centring and the collapsed chevron would jump half its own height. Measured both states in the harness. */ .cg-fold-chev.is-shut { transform: translateY(-50%) rotate(-90deg); } .cg-fold-name { flex: 1 1 auto; overflow: hidden; color: var(--lp-ink); text-overflow: ellipsis; white-space: nowrap; } /* wave17 GRID — owner item 11a: the folder count is smaller and grey. ⚠ IDENTICAL to `.shell-nav-foldercount`'s wave17 treatment, token for token, and that is the item rather than a coincidence: item 11 asks BOTH rails for it, and the DB nav and the Views rail sit one above the other. `--lp-muted` unchanged — it already IS the grey, and a lighter literal invented here would have nowhere legal to live and would put the two rails a shade apart, which is the symmetry complaint wave 14 was answering. Shrinking the type does the lightening. */ .cg-fold-count { flex: 0 0 auto; font-size: var(--lp-fs-3xs); font-weight: 400; color: var(--lp-muted); font-variant-numeric: tabular-nums; } .cg-fold-rename { flex: 1 1 auto; height: 24px; font-weight: 400; } .cg-fold-empty { padding: 4px 10px 6px 24px; color: var(--lp-muted); font-size: var(--lp-fs-3xs); } .cg-fold .cg-view-row { margin-left: 12px; } .cg-fold-skipped { display: flex; flex-direction: column; gap: 2px; } .cg-fold-skip { color: var(--lp-yellow-deep); } .cg-fold-addpop { max-width: 320px; } .cg-menu-item--danger.is-armed { background: var(--lp-red-tint); color: var(--lp-red-deep); } /* --------------------------------------------------------------------------- Wave-9 CLIENT — I13 (views header deleted) · I14 ("+ Create new…" flyout) · I15 (folder icons). Appended at the END of the file: the `.cg-map*` block (~2130) belongs to the MAP session and the shell block (~1650-1760) to HOST, so a new `.cg-*` rule goes here rather than beside its cousins mid-file. --------------------------------------------------------------------------- */ /* I13 — the save state keeps its ANNOUNCEMENT after losing its pixels. The clip-rect idiom rather than `display:none` on purpose: a hidden element is not announced, and an aria-live region that is never announced is just dead markup. */ .cg-sr-only { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0; } /* I14 — the two create doors, stacked and LEFT-ALIGNED (the owner's word). `.cg-link-btn` is a ` plus a changed label while a save is in flight. ⛔ WHY A BUTTON NEEDED ITS OWN MODIFIER RATHER THAN BARE `.lp-spin`: the shared mark is a fixed **14px**, and its own comment says that size is "sized to sit BESIDE things". A fixed pixel ring beside text that is `--lp-fs-xs` is a mark that stops agreeing with its label the next time the type scale moves. `1em` ties it to the button's own type size instead, so the ring and the word are the same height BY CONSTRUCTION and nothing shifts between idle and busy — which is the whole point of a state whose job is to reassure. ⚠ `currentColor` for the track: this rides both `.set-primary` (white ink on purple) and `.set-secondary` (dark ink on white), and a fixed grey would vanish on one of them. The leading arc keeps the brand purple from `.lp-spin` (wave 34 R2) except on the primary button, where purple-on-purple is invisible — there it becomes the button's own ink. ⚠ The buttons already CENTRE their content, so no flex change is needed here; the gap is the only geometry this adds. */ /* ⭐ WAVE 37 · T48 — the SUSPENSE fallback for a lazily-loaded surface. Distinct from the boot skeleton in `index.html`, and the difference is WHEN each can exist: that one paints before any CSS or JS has arrived and must therefore be inline; this one only ever renders after the app has mounted, so it may use the tokens. Deliberately empty and calm — by this point the shell, the rail and the toolbar are already on screen, and the only thing still arriving is the surface. */ .lp-boot { width: 100%; height: 100%; background: var(--lp-wash); } .set-btn-spin { width: 1em; height: 1em; margin-right: 6px; vertical-align: -0.125em; flex: none; } .set-primary .set-btn-spin { border-top-color: currentColor; } .set-primary, .set-secondary { height: 32px; padding: 0 14px; border-radius: var(--lp-r-sm); font: inherit; font-size: var(--lp-fs-xs); font-weight: 600; cursor: pointer; } /* Wave-15 C-BOLD (R7): the primary action reads `--lp-primary`, and its hover reads the published hover shade. ⚠ The hover was `--lp-ink` — near-black — which was defensible under a blue base and is not under a purple one: it stopped being a shade of the button and became a different button. */ .set-primary { border: 1px solid var(--lp-primary); background: var(--lp-primary); color: var(--lp-surface); } .set-primary:hover:enabled { background: var(--lp-primary-hover); border-color: var(--lp-primary-hover); } .set-secondary { border: 1px solid var(--lp-line); background: var(--lp-surface); color: var(--lp-ink); } .set-secondary:hover:enabled { border-color: var(--lp-blue-deep); } .set-primary:disabled, .set-secondary:disabled { opacity: 0.5; cursor: default; } /* ⭐⭐ WAVE 37 · T05 — AND THE IN-FLIGHT MARK IS EXEMPT FROM THAT FADE, WHICH I FOUND BY LOOKING AT IT RATHER THAN BY MEASURING IT. A saving button is `disabled` for the whole flight, so the 0.5 above was halving the one element whose entire job is to be seen. On `.set-primary` (white ring on purple) it survived; on `.set-secondary` the ring went pale enough to read as an artifact. ⛔ The BUTTON keeps its fade — it must still look unavailable — and only the ring is restored: `opacity: 1` on a child cannot exceed a faded parent's alpha in CSS, so the fade is undone where it is applied instead. The two states stay distinguishable AND the signal stays legible. ⚠ The measurement said "nothing moves and the animation runs" and every number was right. It could not say the mark was hard to SEE, which is why this ticket's `done-when` asks for a person and not a count. */ .set-primary:disabled:has(.set-btn-spin), .set-secondary:disabled:has(.set-btn-spin) { opacity: 0.72; } .set-secondary:disabled .set-btn-spin { border-top-color: var(--lp-primary); } /* Split from `.set-secondary`'s ring on purpose — see `.login-submit:focus-visible` for the one statement of the rule. A secondary button is not a primary and keeps the file-wide blue. */ .set-primary:focus-visible { outline: 2px solid var(--lp-primary); outline-offset: 1px; } .set-secondary:focus-visible { outline: 2px solid var(--lp-blue-deep); outline-offset: 1px; } .set-add { margin-top: 16px; } /* The password block. The red hairline is the only signal that it revokes every session the account has open — the sentence above the button says it in words, and this says it before the words are read. */ .set-danger { margin-top: 18px; padding-top: 14px; border-top: 1px solid var(--lp-red-deep); } /* --- R9: the permission editor (settings/PermsEditor) ----------------------- A FULL-PANE TAKEOVER of the modal body, so the layout job here is small and specific: give the page a head that keeps the way out visible, stack one card per module, and let the grid's OWN panels sit inside those cards at their own size. The panels bring their entire appearance with them (`.cg-pop` and the `.cg-*` rules under it) — that is contract C-KIT working, and it is why there is no condition-builder styling in this block. Nothing here restyles a `.cg-*` rule; the two classes below only bound the box those panels sit in. */ .set-perms { position: relative; } .set-perm-head { display: flex; align-items: center; gap: 14px; margin-bottom: 16px; /* wave17 R7 — the head carries the role and status chips now, so it wraps rather than crushing the name on a narrow modal. `center` replaces `flex-start`: chips beside a two-line name look dropped when top-aligned. */ flex-wrap: wrap; } /* ⚠ The chips sit BESIDE the name, not at the far end. The first version pushed them right with `margin-left: auto` and the screenshot settled it: on an 880px modal "Member" ended up an inch from anything it described, reading as a status of the dialog rather than of the person. Both other places a role is shown (the identity header, the account cards) put the chip next to the name; a third arrangement for the same fact is drift, not variety. */ .set-perm-who { min-width: 0; } /* The `.set-h` default carries 14px of bottom margin meant for a pane title that starts a block; here the username sits directly under it. */ .set-perm-title { margin: 0; } .set-perm-banner { margin-bottom: 14px; } .set-perm-intro { margin: 0 0 16px; max-width: 68ch; line-height: var(--lp-lh); } .set-perm-mod { margin-top: 14px; } .set-perm-modhead { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; } .set-perm-toggle { padding: 0; } .set-perm-modname { font-size: var(--lp-fs-sm); font-weight: 620; } /* The rule in one phrase, beside the switch that sets it. Muted because it is a restatement of the controls below, never a control itself. */ .set-perm-sum { flex: none; font-size: var(--lp-fs-2xs); color: var(--lp-muted); font-variant-numeric: tabular-nums; } .set-perm-panels { display: flex; flex-wrap: wrap; align-items: flex-start; gap: 14px; margin-top: 14px; } /* The kit's panels are popover-sized by design. Given a real width here they read as two cards of one section rather than two menus that failed to close; `flex: 1 1 320px` lets them sit side by side on a wide modal and stack on a narrow one without a media query. */ .set-perm-pop { flex: 1 1 320px; max-width: 100%; } .set-perm-actions { align-items: center; margin-top: 20px; } .set-perm-dirty { margin: 0; } /* ⛔ `.set-user-door` IS GONE WITH THE TABLE (wave 17 R7). It existed to make a