loopable / web /src /query /query.css
fsanyoto's picture
Deploy AIOS web (React glide grid + FastAPI slice)
609fb78 verified
Raw
History Blame Contribute Delete
6.29 kB
/* ---------------------------------------------------------------------------
query/query.css β€” the Query module's own stylesheet (WAVE 32 item 7, R1).
Shipped BESIDE its component (the `FormInterface.css` / `RecordDetail.css`
precedent) rather than added to `index.css`, which belongs to another lane
this wave. Vite carries the import; `verify_ui`'s node shim already stubs
`require("*.css")` for exactly this shape.
β›” EVERY FONT SIZE IS A `--lp-fs-*` TOKEN AND EVERY COLOUR A `--lp-*` TOKEN.
Wave-21 R5 is gated app-wide over every CSS file under src, not just
index.css, and a literal here reds `web_ui` for the whole tree. Spacing
follows the `.shell-conn` page it sits beside, so the two pages feel like one
product. No emojis, no ALL-CAPS chrome (DESIGN.md R6).
β›”β›” AND DO NOT WRITE A `**` GLOB IN THIS COMMENT. The sentence above used to
name the gate's scope as a literal path glob, and the `**` + `/` in it spells
the CSS COMMENT TERMINATOR β€” so the comment ended in the middle of its own
explanation, every line after it became stray tokens, and `lightningcss`
died on the first backtick it then met (`Unexpected token Delim`). `tsc`
passed, `vite` transformed all 1,014 modules, and the build failed in the
MINIFIER β€” so the error surfaced nowhere near the sentence that caused it.
Found by `web_build` in wave 32's QA, and it blocked the deploy outright.
⚠ Backticks are NOT the problem: nine other stylesheets in this tree carry
them happily. Nothing may contain the two characters that close a comment.
--------------------------------------------------------------------------- */
.qy-page {
height: 100%;
overflow-y: auto;
padding: 34px 44px 56px;
box-sizing: border-box;
background: var(--lp-wash);
}
.qy-title {
margin: 0 0 6px;
font-size: var(--lp-fs-lg);
font-weight: 650;
color: var(--lp-ink);
}
.qy-lede {
margin: 0 0 22px;
max-width: 62ch;
font-size: var(--lp-fs-sm);
line-height: var(--lp-lh);
color: var(--lp-muted);
}
.qy-sub {
margin: 30px 0 12px;
font-size: var(--lp-fs-md);
font-weight: 650;
color: var(--lp-ink);
}
/* ── the ask row ─────────────────────────────────────────────────────────── */
.qy-ask {
display: flex;
flex-wrap: wrap;
align-items: flex-end;
gap: 12px;
max-width: 940px;
}
.qy-field {
display: flex;
flex-direction: column;
gap: 5px;
min-width: 180px;
}
.qy-field--grow {
flex: 1 1 380px;
}
.qy-label {
font-size: var(--lp-fs-2xs);
font-weight: 600;
color: var(--lp-muted);
}
.qy-select,
.qy-input {
box-sizing: border-box;
width: 100%;
padding: 8px 11px;
border: 1px solid var(--lp-line);
border-radius: var(--lp-r-md);
background: var(--lp-surface);
color: var(--lp-ink);
font-size: var(--lp-fs-sm);
font-family: inherit;
}
.qy-select:focus-visible,
.qy-input:focus-visible {
outline: 2px solid var(--lp-blue-solid);
outline-offset: 1px;
}
/* ── buttons ─────────────────────────────────────────────────────────────── */
.qy-btn {
padding: 8px 14px;
border: 1px solid var(--lp-line);
border-radius: var(--lp-r-md);
background: var(--lp-surface);
color: var(--lp-ink);
font-size: var(--lp-fs-sm);
font-family: inherit;
font-weight: 600;
cursor: pointer;
}
.qy-btn:hover:not(:disabled) {
background: var(--lp-surface-2);
}
.qy-btn:disabled {
opacity: 0.55;
cursor: default;
}
.qy-btn--primary {
border-color: transparent;
background: var(--lp-blue-solid);
color: var(--lp-surface);
}
.qy-btn--primary:hover:not(:disabled) {
background: color-mix(in srgb, var(--lp-blue-solid) 82%, #000);
}
.qy-btn--quiet {
border-color: transparent;
background: transparent;
color: var(--lp-muted);
font-weight: 500;
}
.qy-btn--quiet:hover {
color: var(--lp-red-deep);
background: transparent;
}
/* ── the answer, and the read-back that is the point of it ───────────────── */
.qy-answer {
max-width: 940px;
margin: 20px 0 0;
padding: 16px 18px;
border: 1px solid var(--lp-line);
border-left: 3px solid var(--lp-blue-solid);
border-radius: var(--lp-r-md);
background: var(--lp-surface);
}
.qy-answer.is-refused {
border-left-color: var(--lp-yellow-deep);
}
.qy-answer-head {
margin: 0 0 6px;
font-size: var(--lp-fs-2xs);
font-weight: 650;
color: var(--lp-muted);
}
.qy-answer-body {
margin: 0;
max-width: 78ch;
font-size: var(--lp-fs-sm);
line-height: var(--lp-lh);
color: var(--lp-ink);
}
.qy-answer-acts {
display: flex;
gap: 10px;
margin-top: 14px;
}
/* ── the saved list ──────────────────────────────────────────────────────── */
.qy-note {
max-width: 62ch;
margin: 14px 0 0;
font-size: var(--lp-fs-sm);
line-height: var(--lp-lh);
color: var(--lp-muted);
}
.qy-note.is-warn {
color: var(--lp-red-deep);
}
.qy-list {
display: flex;
flex-direction: column;
gap: 10px;
max-width: 940px;
margin: 0;
padding: 0;
list-style: none;
}
.qy-row {
padding: 14px 16px;
border: 1px solid var(--lp-line);
border-radius: var(--lp-r-md);
background: var(--lp-surface);
}
.qy-row-main {
display: flex;
flex-wrap: wrap;
align-items: baseline;
gap: 10px;
}
.qy-row-open {
padding: 0;
border: 0;
background: transparent;
color: var(--lp-blue-solid);
font-size: var(--lp-fs-md);
font-family: inherit;
font-weight: 650;
cursor: pointer;
text-align: left;
}
.qy-row-open:hover {
text-decoration: underline;
}
.qy-row-meta {
font-size: var(--lp-fs-2xs);
color: var(--lp-muted);
}
.qy-row-q {
margin: 6px 0 0;
max-width: 78ch;
font-size: var(--lp-fs-sm);
font-style: italic;
color: var(--lp-ink);
}
.qy-row-explain {
margin: 4px 0 0;
max-width: 78ch;
font-size: var(--lp-fs-2xs);
line-height: var(--lp-lh);
color: var(--lp-muted);
}
.qy-row-acts {
display: flex;
gap: 8px;
margin-top: 12px;
}