194 lines
4.6 KiB
CSS
194 lines
4.6 KiB
CSS
/*
|
|
* The CSS entry (milestone 23, ruling 1). The StyleX plugin emits the compiled
|
|
* atomic rules into their own layers; what is left here is the element reset
|
|
* those rules are written against.
|
|
*
|
|
* The reset is not optional and not cosmetic. Tailwind's preflight used to
|
|
* supply it, so every StyleX style in `admin/src` is written assuming border-box
|
|
* sizing, no default margins, unstyled lists and form controls that inherit
|
|
* their font. Deleting this block does not restore browser defaults — it
|
|
* silently changes the meaning of every size and spacing value in the app.
|
|
* Rules are limited to what this app renders; it is not a general reset.
|
|
*
|
|
* The reset lives in its own cascade layer, declared here before StyleX emits
|
|
* its own. Layer order is priority order, and unlayered author CSS outranks
|
|
* every layer: leaving these rules unlayered silently beat every StyleX rule in
|
|
* the app, whatever the selector said.
|
|
*/
|
|
|
|
@layer reset {
|
|
*,
|
|
*::before,
|
|
*::after {
|
|
box-sizing: border-box;
|
|
margin: 0;
|
|
padding: 0;
|
|
}
|
|
|
|
/*
|
|
* This is not a reproduction of Tailwind's default stack, which is gone with
|
|
* the package; text metrics drift here, which ruling 7 accepts. The symbol
|
|
* families at the end are not decoration: `Select.tsx` renders U+25BE for its
|
|
* chevron, and Segoe UI does not carry that glyph, so on Windows the stack
|
|
* has to reach a font that does before it falls back to a substitute box.
|
|
*/
|
|
html {
|
|
line-height: 1.5;
|
|
-webkit-text-size-adjust: 100%;
|
|
font-family:
|
|
system-ui,
|
|
-apple-system,
|
|
"Segoe UI",
|
|
Roboto,
|
|
"Helvetica Neue",
|
|
Arial,
|
|
sans-serif,
|
|
"Segoe UI Symbol",
|
|
"Noto Sans Symbols 2";
|
|
}
|
|
|
|
/* Headings carry their scale from StyleX, not from the user agent. */
|
|
h1,
|
|
h2,
|
|
h3,
|
|
h4,
|
|
h5,
|
|
h6 {
|
|
font-size: inherit;
|
|
font-weight: inherit;
|
|
}
|
|
|
|
ul,
|
|
ol,
|
|
menu {
|
|
list-style: none;
|
|
}
|
|
|
|
/* Links opt into colour and underline; the shell's nav wants neither. */
|
|
a {
|
|
color: inherit;
|
|
text-decoration: inherit;
|
|
}
|
|
|
|
code,
|
|
kbd,
|
|
samp,
|
|
pre {
|
|
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
|
font-size: 1em;
|
|
}
|
|
|
|
/* Without this the spinner stretches a number input taller than its row. */
|
|
::-webkit-inner-spin-button,
|
|
::-webkit-outer-spin-button {
|
|
height: auto;
|
|
}
|
|
|
|
/* Firefox draws a red glow on an invalid field; the form shows its own error. */
|
|
:-moz-ui-invalid {
|
|
box-shadow: none;
|
|
}
|
|
|
|
table {
|
|
border-collapse: collapse;
|
|
text-indent: 0;
|
|
border-color: inherit;
|
|
}
|
|
|
|
/*
|
|
* Form controls: inherit type and colour, drop the user-agent chrome, and keep
|
|
* `appearance: button` so iOS Safari honours a button's border radius.
|
|
*/
|
|
button,
|
|
input,
|
|
select,
|
|
optgroup,
|
|
textarea {
|
|
font: inherit;
|
|
letter-spacing: inherit;
|
|
color: inherit;
|
|
background-color: transparent;
|
|
border: 0 solid;
|
|
border-radius: 0;
|
|
opacity: 1;
|
|
}
|
|
|
|
button,
|
|
input[type="button"],
|
|
input[type="reset"],
|
|
input[type="submit"] {
|
|
appearance: button;
|
|
}
|
|
|
|
/* A checkbox keeps its native chrome; the rules above would erase it. */
|
|
input[type="checkbox"],
|
|
input[type="radio"] {
|
|
appearance: auto;
|
|
}
|
|
|
|
/*
|
|
* WebKit lays a date/time input out from its own pseudo-elements, and an
|
|
* empty one comes out shorter than a filled one without these. The query log
|
|
* filters are two `datetime-local` inputs sitting in a row of controls, so
|
|
* the height has to hold whether or not a value is set.
|
|
*/
|
|
::-webkit-date-and-time-value {
|
|
min-height: 1lh;
|
|
text-align: inherit;
|
|
}
|
|
|
|
::-webkit-datetime-edit {
|
|
display: inline-flex;
|
|
}
|
|
|
|
::-webkit-datetime-edit-fields-wrapper {
|
|
padding: 0;
|
|
}
|
|
|
|
::-webkit-datetime-edit,
|
|
::-webkit-datetime-edit-year-field,
|
|
::-webkit-datetime-edit-month-field,
|
|
::-webkit-datetime-edit-day-field,
|
|
::-webkit-datetime-edit-hour-field,
|
|
::-webkit-datetime-edit-minute-field,
|
|
::-webkit-datetime-edit-second-field,
|
|
::-webkit-datetime-edit-millisecond-field,
|
|
::-webkit-datetime-edit-meridiem-field {
|
|
padding-block: 0;
|
|
}
|
|
|
|
::placeholder {
|
|
opacity: 1;
|
|
}
|
|
|
|
/*
|
|
* Safari below 16.4 resolves `color-mix` against the wrong colour here and
|
|
* renders the placeholder invisible. The guard admits every engine that
|
|
* supports either a non-WebKit feature or one Safari only gained afterwards.
|
|
*/
|
|
@supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {
|
|
::placeholder {
|
|
color: color-mix(in oklab, currentcolor 50%, transparent);
|
|
}
|
|
}
|
|
|
|
/* An inline SVG leaves a baseline gap under a full-width chart. */
|
|
svg,
|
|
img,
|
|
video,
|
|
canvas {
|
|
display: block;
|
|
vertical-align: middle;
|
|
}
|
|
|
|
img,
|
|
video {
|
|
max-width: 100%;
|
|
height: auto;
|
|
}
|
|
|
|
[hidden]:not([hidden="until-found"]) {
|
|
display: none !important;
|
|
}
|
|
}
|