/* 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. */ /* WAVE 41 lane stylesheets. One per lane so no lane has to edit THIS file -- index.css was the single worst coupler on the wave-41 plan. @import must precede every other at-rule, which is why this block sits above @font-face rather than at the end. */ @import "./styles/wave41/field-ui.css"; @import "./styles/wave41/rail-nav.css"; @import "./styles/wave41/relational.css"; @import "./styles/wave41/map.css"; /* ⭐ WAVE 42 lane stylesheets, landed EMPTY in the baseline commit for the same reason wave 41's were: index.css is the single worst coupler on a parallel plan, so a lane gets its own sheet and never opens this file. ⛔ THE ONE EXCEPTION IS LANE D and it is deliberate: owner instruction 11 moves Calendar's controls to a second row, and that rule must sit BESIDE `.cg-map-settings` here to inherit its spacing -- an @imported sheet loses every equal-specificity fight with this one. */ @import "./styles/wave42/hop-editor.css"; @import "./styles/wave42/rail-views.css"; @import "./styles/wave42/route-nav.css"; @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; /* ⭐ OWNER ITEM 11 (2026-08-23) — MAP-LOCAL FLOATING CHROME, its own step so it can be told apart from a DIALOG. The route planner is an `absolute` panel inside the map frame; it needs to beat the map's own contents and the selection bar (`--cg-z-menu`) and nothing else. It used to borrow `--cg-z-overlay`, which is the PORTAL step, and that is how a map panel ended up painting over the record detail. */ --cg-z-mapchrome: 65; --cg-z-drawer: 70; /* ⭐⭐ OWNER ITEM 11 — A MODAL DIALOG PORTAL'D TO : the record detail and the linked-record grid, which share `.cg-record-backdrop`. Owner: *"the Detail records when clicked should ALWAYS be at the top of every other navigation pop-up."* It was `--cg-z-drawer` (70) and the Map's route planner was 95, so opening a record from a pin painted the record UNDER the panel it was opened from — the dialog you just asked for, behind the thing you asked from. ⚠ ABOVE the shell's own layers too (`.shell-newdb`'s scrim at 80, `.shell-nav-tip` at 90), because "every other navigation pop-up" includes the ones outside the grid. */ --cg-z-record: 100; /* ⛔⛔ 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. It keeps this rule scoped to the simple field-label rows; richer controls own their own layout. */ .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; } /* W40-T25 (owner instruction 20): "See more" and "Show all" did not look clickable. The base rule above is transparent on transparent, so at rest those doors painted as bare text beside the notes they sit next to. This gives the three sites that carry them the house control shape, the one already shared by .cg-select, .cg-input and .cg-map-route-toggle: the single hairline token at rest, the shared radius, the unchanged 28px height. Border WIDTH is not touched (the base already reserves 1px of transparent border), so no control moves off its row baseline and no sibling reflows. The FILL splits by ground, not by shape. On the grid strip and the kanban lane the door sits on a wash, so the surface token lifts it. In the Hide-fields tray the ground is already surface-2 AND the hover there is the white surface, so filling at rest would leave that pair with a dead hover; the tray keeps the hairline alone and its white hover stays a real state change. Every hover in the group is left exactly as it was. ORDER IS LOAD-BEARING: these selectors are equal in specificity to the base hover below, so they sit ABOVE it and the hover still wins. */ .cg-more .cg-link-btn, .cg-link-btn.cg-kb-more { border-color: var(--lp-line); background: var(--lp-surface); } /* The kanban door is display:block inside a NON-flex container, so it spans the whole lane. Given a white fill and a hairline at that width it stops being a button and becomes a fourth CARD: .cg-kb-card is white, hairline, same radius, same full width. Content width is what makes it read as a button, and it is the same correction .cg-more already records one screen over, where flex:0 0 auto stopped "See more" stretching into a bar. Outranks the later .cg-kb-more display rule on specificity, so this one lands. inline-FLEX, not inline-block: nothing in this file sets a line-height for .cg-link-btn, so at a fixed 28px the label is centred only by the button's own internal box. That was invisible while the control was transparent and would be plain to see inside a hairline. The centred 28px pairing is the house one, carried by .cg-icon-btn and .cg-rail-toggle. */ .cg-link-btn.cg-kb-more { display: inline-flex; align-items: center; justify-content: center; padding: 0 10px; } .cg-fields-footer .cg-link-btn { border-color: var(--lp-line); } .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); } .cg-fields-section + .cg-fields-section { margin-top: 10px; padding-top: 8px; border-top: 1px solid var(--lp-line); } .cg-fields-section-title { padding: 0 10px 5px; color: var(--lp-muted); font-size: var(--lp-fs-3xs); font-weight: 700; letter-spacing: .04em; text-transform: uppercase; } /* 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), so it is a fixed cost at every level and the deepest (level-3) row needs 620 for the value box left over. 560 left only 48px there. Collision-clamped to the viewport by OverlaySurface. W40-T30, 2026-08-24: instruction 19 turned the comparisons into words and the operator went 136px to 176px, so that level-3 value box went from about 104px to about 64px. Still clear of the 48px min-width on .cg-cond-val, so 620 STANDS. It is the operator passing 192px, not this width, that would break the floor. */ 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-rename*` removed 2026-08-23 with `ViewRenameForm`, owner item 1.) */ .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 { position: relative; 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; 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; } /* ⭐ OWNER ITEM 2 — the same box as the pickers it sits beside: 30px tall, `--lp-r-md`, white ground, `--lp-fs-xs` through the row above. `.cg-select` is the shape being matched; this cannot simply BE `.cg-select` because that class is a form control's look and this is a disclosure toggle with an `is-open` state the selects have no equivalent of. */ .cg-map-route-toggle { flex: 0 0 auto; box-sizing: border-box; height: 30px; padding: 0 10px; border: 1px solid var(--lp-line); border-radius: var(--lp-r-md); background: #ffffff; color: var(--lp-ink); font: inherit; cursor: pointer; } .cg-map-route-toggle:hover, .cg-map-route-toggle.is-open { background: var(--lp-blue-tint); border-color: var(--lp-blue-deep); } .cg-map-route-toggle:focus-visible { outline: 2px solid var(--lp-blue-deep); outline-offset: 1px; } .cg-route-popover { position: absolute; /* ⛔ OWNER ITEM 11 — `--cg-z-mapchrome`, NOT `--cg-z-overlay`. This panel is `absolute` inside the map frame, not portal'd to , so it never needed the portal step; borrowing it is what put a map panel over the record detail. It still outranks the map's own contents and the `.cg-selbar` (`--cg-z-menu`), which is everything it has to beat. */ z-index: var(--cg-z-mapchrome); top: 48px; left: 12px; width: min(360px, calc(100% - 24px)); max-height: calc(100% - 60px); overflow-y: auto; padding: 10px; border: 1px solid var(--lp-line); border-radius: 7px; background: var(--lp-surface); color: var(--lp-ink); font-family: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; font-size: var(--lp-fs-xs); line-height: var(--lp-lh); box-shadow: 0 8px 24px rgba(32, 36, 51, 0.16); } .cg-route-popover button, .cg-route-popover input, .cg-route-popover select, .cg-route-popover a { font-family: inherit; } .cg-route-popover-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding-bottom: 8px; border-bottom: 1px solid var(--lp-line); } .cg-route-popover-count { color: var(--lp-muted); font-size: var(--lp-fs-3xs); white-space: nowrap; } .cg-route-empty { display: block; padding: 10px 2px 2px; color: var(--lp-muted); font-size: var(--lp-fs-2xs); line-height: 1.45; } .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. */ /* ⭐ OWNER ITEM 5 (2026-08-23) — THE CAMERA BAR MOVED FROM THE RIGHT EDGE TO THE TOP. It was a vertical stack pinned `right: 10px`, which is the map convention and is also the corner a reader reaches last on a left-to-right surface. The owner could not find it. ⭐⭐ OWNER ITEM 1, SAME DAY, SECOND CORRECTION: *"it should not be at the top left of the Map. it should be at the top MIDDLE of the map, and horizontal. Make the icon bigger so its easier to see. Make it look like a proper navigation bar."* So: centred on the frame, 34px keys with 20px glyphs (was 28 and 16), a deeper shadow so it reads as chrome floating over the map rather than as a widget printed on it, and seven keys instead of five. ⛔ THE VERTICAL BAND IS WHAT KEEPS IT OFF THE ROUTE PANEL, and that is why the arithmetic is written down rather than eyeballed: the panel is `top: 48px`, and a 34px bar at `top: 10px` ends at 44px. Four pixels of clearance, and `verify_map.py` pins the panel's own geometry, so growing this bar past 38px is a change that has to come back here and argue. ⚠ CENTRED WITH `left: 50%` PLUS A TRANSLATE rather than `inset: 0` plus `margin: auto`: the bar must not become a full-width element, because the whole strip would then swallow pointer events across the top of the map even where no key is painted. The legends stay bottom left and the credit bottom right, so nothing else moved into a taken corner. */ .cg-map-ctl { position: absolute; top: 10px; left: 50%; transform: translateX(-50%); display: flex; flex-direction: row; background: #fff; border: 1px solid var(--lp-line); border-radius: var(--lp-r-md); overflow: hidden; box-shadow: 0 2px 8px rgba(32, 36, 51, 0.16); pointer-events: auto; } .cg-map-ctl-b { width: 34px; height: 34px; display: flex; align-items: center; justify-content: center; padding: 0; border: 0; /* ⚠ THE SEPARATOR TURNED WITH THE BAR. A `border-bottom` under a ROW of buttons draws a rule along the whole underside instead of between the keys, which is how a re-orientated toolbar ends up looking underlined rather than segmented. */ border-right: 1px solid var(--lp-line); background: #fff; color: var(--lp-ink); cursor: pointer; } .cg-map-ctl-b:last-child { border-right: 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; } /* ⭐ ITEM 1 — 20px glyphs, up from 16. The zoom keys are a plus and a minus: at 16px inside a 28px key they read as hairlines, which is the "make the icon bigger so its easier to see" the owner asked for. The stroke thickens with them, or a 20px glyph drawn at 1.4 looks THINNER than the 16px one it replaced. */ .cg-map-ctl-b svg { width: 20px; height: 20px; display: block; } .cg-map-ctl-b path { fill: none; stroke: currentColor; stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; } /* The rotate arrowheads are the one FILLED mark on this bar. A stroked chevron at the end of a curve reads as a kink in the curve rather than as a direction, which on a pair of mirrored buttons is the only thing telling them apart. */ .cg-map-ctl-b path.cg-map-ctl-head { fill: currentColor; stroke: none; } .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. */ .cg-map-route { display: flex; flex-direction: column; align-items: stretch; gap: 8px; flex: 0 0 auto; width: 100%; font-size: var(--lp-fs-3xs); min-width: 0; overflow: visible; } /* OWNER ITEM 8 (2026-08-23) — THE ROUTE PANEL BUTTONS. ⛔ `.cg-map-route-go` IS DELETED, and the reason it looked amateur is that it was ONE flat 22px chip doing four different jobs: it painted "Save visit order" (the committing action), "Driving route" (a secondary re-ask), "Re-optimise" (a revert) and "Clear" (a destructive reset) identically, so the panel offered a column of interchangeable grey slabs and no hierarchy at all. Everything now uses `.cg-btn` / `--primary` / `--danger`, the SAME family every popover and dialog in this tree already commits with. That is the whole fix and it is a deletion, not a new button language (DESIGN.md §0 authorises no new one). ⚠ ONE local override, and it is geometry rather than paint: inside a 360px panel these read as full-width rows rather than inline chips. */ .cg-route-popover .cg-btn.cg-route-cta { width: 100%; min-height: 28px; text-align: center; white-space: normal; } .cg-map-geo .cg-map-geo-cta { width: 100%; } /* ⭐ OWNER ITEM 5 (2026-08-23) — THE NAME-THIS-ROUTE STEP, in the panel and not in a browser `prompt()`. Stacked because a 360px panel cannot hold a label, a text box and two buttons on one line without the buttons shrinking to unreadable stubs; the two actions then share a row, Save first because it is the one being confirmed. */ .cg-route-name { display: flex; flex-direction: column; gap: 6px; width: 100%; } .cg-route-name .cg-input { width: 100%; } .cg-route-name-actions { display: flex; gap: 6px; } .cg-route-name-actions .cg-btn { flex: 1 1 0; justify-content: center; } /* ⭐ OWNER ITEMS 8 AND 9 (2026-08-23) — SAVE AND CLEAR SHARE THE LAST ROW. Owner: *"the save route button should still be at the bottom too beside clear route button."* The Google links sit directly above it (item 8), so the panel ends: how to hand this route to Google, then the two ways to finish with it. ⛔ `.cg-route-cta`'s `width: 100%` is OVERRIDDEN here rather than simply not applied, because `Clear route` still carries that class from every other position it has ever had. Two full-width buttons cannot sit beside each other, which is the whole of item 9. */ .cg-route-foot { display: flex; gap: 6px; width: 100%; margin-top: 2px; } .cg-route-foot .cg-btn { flex: 1 1 0; width: auto; justify-content: center; text-align: center; } .cg-route-popover .cg-map-route-sum { white-space: normal; line-height: 1.45; } .cg-route-popover .cg-map-route-opt { align-items: stretch; flex-direction: column; gap: 4px; white-space: normal; } .cg-route-popover .cg-map-route-opt.cg-route-check { flex-direction: row; align-items: center; } .cg-route-popover .cg-map-route a { white-space: normal; overflow-wrap: anywhere; line-height: 1.4; } /* -- ITEM 7: the travel-mode segmented control -------------------------------- Two mutually exclusive choices, both visible, the active one marked. Deliberately NOT a toggle whose label is its own state: a control that renames itself is a different button each time you look for it, which is the argument `viewModes` already makes for the calendar's Records/Summaries popover. */ .cg-route-modes { display: flex; width: 100%; border: 1px solid var(--lp-line); border-radius: var(--lp-r-md); overflow: hidden; } .cg-route-mode { flex: 1 1 0; min-height: 26px; padding: 0 8px; border: 0; border-right: 1px solid var(--lp-line); background: var(--cg-white); color: var(--lp-muted); font: inherit; font-size: var(--lp-fs-3xs); cursor: pointer; } .cg-route-mode:last-child { border-right: 0; } .cg-route-mode:hover:not(:disabled):not(.is-on) { background: var(--cg-soft); } .cg-route-mode.is-on { background: var(--lp-primary); /* ⚠ THE INK IS SET IN THE SAME RULE AS THE DARK FILL (/design §8, the two that ship broken most). A rule that darkens a background without naming the foreground inherits the muted grey above and lands as ink-on-ink. */ color: var(--cg-white); font-weight: 500; } .cg-route-mode:disabled { /* Three channels, never opacity alone: the real `disabled` attribute is on the element. */ opacity: 0.45; cursor: not-allowed; } .cg-route-mode:focus-visible { outline: 2px solid var(--lp-blue-deep); outline-offset: -2px; } /* -- ITEM 9: the searchable record picker ------------------------------------- Expands IN PLACE rather than floating: see `RecordPicker`'s own note for why a popup listbox inside an absolutely positioned, scrolling `` 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