File size: 10,418 Bytes
f546440 1f123e1 f546440 1f123e1 f546440 1f123e1 f546440 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 | /* settings/perms.css β wave 33 (owner item 11, W33-T34/T38).
*
* β CONTRACT C4: `index.css` is lane B's. Everything the permission editor's
* per-database DISCLOSURE needs is new, so it lives here and is imported by
* `PermsEditor.tsx` β the established practice (`query.css`, `navExtras.css`,
* `SwipeView.css`). Nothing in this file redefines an `index.css` rule; it only
* styles classes that did not exist before this wave.
*
* WHY A DISCLOSURE AT ALL. Owner, 2026-08-14: *"the database should not show all
* immediately the detail (for filter or hide fields), the user should have the
* ability to see ALL databases"*. Those two clauses pull against each other β
* more databases, less detail per database β and an accordion is what satisfies
* both. Before wave 33 the list was a fixed TWO and every panel rendered inline;
* it is now every database the tenant has.
*/
/* The trailing controls of a module head, grouped as ONE flex child so the
`space-between` rule in `index.css` still sees exactly two children. */
.set-perm-headend {
display: flex;
align-items: center;
gap: 10px;
flex: none;
}
/* Smaller and quieter than a primary action: this button reveals detail, it does
not commit anything. It borrows `.set-secondary`'s border, surface and focus
ring rather than restating them β a second definition of the button chrome is a
second place for the focus ring to go missing.
β STILL LIVE, and only in the agent editor. Wave 40 replaced the account
editor's accordion with a full-pane room (`.set-perm-edit` below); the agent
editor mounts the same list without `onEdit` and keeps this disclosure. */
.set-perm-disclose {
font-size: var(--lp-fs-2xs);
padding: 3px 9px;
white-space: nowrap;
}
/* The open state reads as pressed, so a scrolled-away head still says which
database owns the panels below it. */
.set-perm-disclose[aria-expanded="true"] {
border-color: var(--lp-blue-deep);
color: var(--lp-blue-deep);
}
/* ββ wave 40, owner instruction 7 (W40-T14): the row's ONE way in, and the room
it opens ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
*
* WHY THE ACCORDION BECAME A ROOM. Wave 33's disclosure answered "show every
* database, not every panel", and it did β while the list was two rows. It is now
* every database the tenant has, and a filter builder unfolded inside one row of
* that list reads as a menu that failed to close. Owner: *"Edit opens the whole
* database's Fields and Filters to toggle, with a Back button to return."*
*/
/* Sized and quietened like the disclosure it replaces, and borrowing
`.set-secondary`'s border, surface and focus ring for the same reason that one
does: a second definition of the button chrome is a second place for the focus
ring to go missing. */
.set-perm-edit {
font-size: var(--lp-fs-2xs);
padding: 3px 9px;
white-space: nowrap;
}
/* The way out and the name of the room share one line, so the reader learns
where they are and how to leave in a single glance. `baseline` rather than
`center`: the title's cap height should sit on the button's label, which is
the alignment every other head on this page uses. */
.set-dbperm-head {
display: flex;
align-items: baseline;
gap: 12px;
margin-bottom: 16px;
}
/* The chevron rides with the words rather than beside them. */
.set-dbperm-back { display: inline-flex; align-items: center; gap: 6px; flex: none; }
/* `.set-h4` carries block margins meant for a heading that starts a section; here
it is a flex item on the head's own line. */
.set-dbperm-title { margin: 0; min-width: 0; }
/* β W40-T16 β `.set-dbperm-metrics` IS DELETED WITH THE BOX IT SPACED. Owner instruction 13
folded the blanket Metrics checkbox into the Hide-fields list as one row per metric, so the
rule had no element left to apply to. A rule that matches nothing is how a stylesheet ends up
describing a screen that no longer exists. */
/* THE PANELS STACK, one decision per eye level. A grid rather than a column flex
box on purpose: `.set-perm-pop` carries `flex: 1 1 320px` for the side-by-side
accordion, and flex properties are inert on a GRID item, so this container gets
the stacking it wants without redefining a rule that belongs to `index.css`. */
.set-dbperm-panels {
display: grid;
grid-template-columns: minmax(0, 1fr);
gap: 14px;
}
/* ββ wave 40, owner instructions 8 + 9 + 10 (W40-T15): the account page stops
shouting, and Save sits where the hand is ββββββββββββββββββββββββββββββββββ
*
* Three complaints, one page. The header put an exit, a person and two chips on
* one flex row; the reset-password control was split across a two-column grid
* with its consequence read BEFORE the button that causes it; and a long access
* list had its only Save at the bottom.
*
* β EVERY SELECTOR BELOW THAT OVERRIDES AN `index.css` DEFAULT CARRIES TWO
* CLASSES ON PURPOSE. A single-class rule here would tie at 0-1-0 with the rule
* it means to beat, and the winner would then be vite's import order across two
* stylesheets β a thing no reader of either file can see. Nothing in `index.css`
* is edited or restated; these only bound the new arrangement.
*/
/* --- instruction 9c: the way out is page chrome, on its own line ----------- */
/* The quiet-button register this system already uses (`.shell-newfolder`: muted
ink, wash on hover, nothing else), with the native chrome reset in the BASE
rule as `DESIGN.md` Β§4 requires. β `font: inherit` FIRST and the size after
it: a shorthand declared below its own longhands re-expands and undoes them,
which is the Alerts-button scar `verify_ui.py`'s R5b cascade check exists to
catch. The negative left margin is optical, not spacing β it pulls the
chevron out to the page's text edge so the label starts where the title does. */
.set-perm-back {
display: inline-flex;
align-items: center;
gap: 6px;
border: 0;
background: transparent;
font: inherit;
font-size: var(--lp-fs-2xs);
color: var(--lp-muted);
padding: 4px 8px;
margin: 0 0 10px -8px;
border-radius: var(--lp-r-sm);
cursor: pointer;
}
.set-perm-back:hover { background: var(--lp-wash); color: var(--lp-ink); }
.set-perm-back:focus-visible { outline: 2px solid var(--lp-blue-deep); outline-offset: 1px; }
/* The identity is the page TITLE now, so it owns the space under the head
rather than sharing a row with the exit. */
.set-perm-ident { margin-bottom: 16px; }
/* The chips sit beside the name, which is where `index.css` already argued they
belong: pushed to the far end they read as a status of the dialog rather than
of the person.
β `baseline`, NOT the `center` the old head used, and the difference is which
sibling the chip is beside. On that row the chip sat next to a TWO-LINE block
(name over username) and index.css records the reason for centring it: a chip
top-aligned against two lines looks dropped. Here its sibling is the one-line
title, so the chip's text sits on the title's baseline, which is the alignment
`.set-perm-modhead` and `.set-dbperm-head` already use for a heading and a
smaller control on one line. The username moved out of this row entirely. */
.set-perm-nameline {
display: flex;
align-items: baseline;
flex-wrap: wrap;
gap: 10px;
}
/* --- instruction 9a + 9b: the password group reads top to bottom ----------- */
/* Label, box and button on one line and one baseline; the consequence under
them. `flex-end` rather than `baseline` because the label sits ABOVE the box:
what has to line up is the bottom of the input and the bottom of the button,
which are both 32px tall. */
.set-pw-row {
display: flex;
align-items: flex-end;
flex-wrap: wrap;
gap: 12px;
}
/* `.set-field` carries 13px of bottom margin meant for stacked form rows; here
it would lift the box off the button's baseline. The width keeps the box the
size a password is, instead of letting it stretch the whole card. */
.set-pw-group .set-pw-field { flex: 1 1 220px; max-width: 320px; margin-bottom: 0; }
/* The gap goes ABOVE the sentence now that the sentence is last. */
.set-perms .set-pw-note { margin: 8px 0 0; }
/* --- instruction 10: Save access at the head of the section too ------------ */
/* The trailing controls of the Access head, grouped as ONE flex child so
`index.css`'s `space-between` on `.set-perm-sect` still sees exactly two. */
.set-perm-sectend {
display: flex;
align-items: center;
gap: 8px;
flex: none;
}
/* Sized to the copy door beside it rather than to the 32px action row at the
bottom of the page: controls sharing a row share a height (`DESIGN.md` Β§4),
and this one is riding a heading's line. It stays `.set-primary` in colour,
because it commits the same write the bottom button commits. */
.set-perms .set-perm-savetop {
height: 28px;
padding: 0 12px;
font-size: var(--lp-fs-2xs);
}
/* --- instruction 8: "Database" and "Module" ------------------------------- */
/* A label for a group of cards, one step quieter than the `Access` heading it
sits under, so the reader gets the hierarchy from weight rather than from
indentation. Sentence case: the product has no ALL-CAPS chrome.
β The bottom margin is deliberately small because `.set-perm-mod` brings 14px
of its own top margin and adjacent margins collapse to the larger β anything
under 14px here has no effect at all, so 4px says "as tight as the card
allows" rather than pretending to a number the layout cannot honour. */
.set-perms .set-perm-group {
margin: 22px 0 4px;
font-size: var(--lp-fs-2xs);
color: var(--lp-muted);
}
@media (max-width: 640px) {
/* The head wraps before the label truncates: a database name is the one thing
in this row that cannot be guessed from context. */
.set-perm-headend { flex-wrap: wrap; justify-content: flex-end; }
.set-dbperm-head { flex-wrap: wrap; }
/* The Access heading keeps its own line and the two controls take the next
one, rather than the copy door and Save being crushed into a strip beside
the word. */
.set-perm-sectend { flex-wrap: wrap; justify-content: flex-end; }
}
|