blob: ced94a6d20a37b44f34762d702bc66129f968661 [file]
body {
margin: 0;
}
/* Astryx 0.2.0 reset uses zero-specificity `:where([hidden])`, so component
display declarations can make native-hidden surfaces interactive again.
Justified !important: the HTML hidden invariant must beat every component
display mode. Remove when the pinned Astryx reset enforces the same invariant. */
[hidden] {
display: none !important;
}
.detailPane {
min-width: 0;
min-height: 0;
overflow: hidden;
}
.maka-lazy-fallback {
font: var(--maka-text-heading-4);
min-width: 0;
min-height: 72px;
display: grid;
place-items: center;
padding: var(--space-4);
color: var(--muted-foreground);
text-align: center;
}
.maka-lazy-fallback[data-surface="panel"] {
min-height: 160px;
height: 100%;
}
.maka-lazy-fallback[data-surface="modal"] {
min-height: 100%;
}
.maka-lazy-fallback[data-surface="module"] {
align-self: stretch;
/* The module shell is a flex row (module-shell.css), so the fallback must
claim the main axis itself — `align-self` only stretches it vertically,
leaving the loading message shrunk to its own text width. */
flex: 1 1 auto;
min-height: min(280px, 45vh);
}
/* Form-control font inheritance is owned by the Astryx reset. */
.maka-visually-hidden {
position: absolute !important;
width: 1px !important;
height: 1px !important;
padding: 0 !important;
margin: -1px !important;
overflow: hidden !important;
clip: rect(0 0 0 0) !important;
white-space: nowrap !important;
border: 0 !important;
}
button {
transition:
background var(--duration-base) var(--ease-out-strong),
border-color var(--duration-base) var(--ease-out-strong),
color var(--duration-base) var(--ease-out-strong);
}
/* Real users' OS-level setting, one global rule (DESIGN.md §10 adjacent:
motion is feedback, and a user who asked for less of it gets less of it
everywhere, not only where a file remembered to opt out). Kept identical
to the fixture-attribute block below so the two variants cannot drift. */
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
}
/* PR-IR-04: Test-fixture-driven reduced-motion variant (per
the reduced-motion contract tests). Mirrors `prefers-reduced-motion: reduce`
via an attribute on `<html>` so e2e-fixture renders can exercise a
"reduced motion" variant without depending on the host OS
accessibility setting.
The `data-maka-reduced-motion="true"` attribute is applied by the
renderer when `MAKA_E2E_FIXTURE_REDUCED_MOTION=1` is set in the env.
Real users still get motion as configured by their OS. */
[data-maka-reduced-motion="true"] *,
[data-maka-reduced-motion="true"] *::before,
[data-maka-reduced-motion="true"] *::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
/* Scroll behavior + view transition durations also collapse */
scroll-behavior: auto !important;
}
/* E2E-fixture renders must be deterministic. We still exercise the
normal DOM for every scenario, but remove purely decorative animation,
transitions, and caret blink so the rendered state does not depend on
the exact millisecond the fixture settles. `paused` is not equivalent:
an animation with `fill-mode: backwards` would be frozen in its hidden
entry frame instead of the component's settled state. */
[data-maka-e2e-fixture="true"] *,
[data-maka-e2e-fixture="true"] *::before,
[data-maka-e2e-fixture="true"] *::after {
animation: none !important;
transition-duration: 0.01ms !important;
caret-color: transparent !important;
}
/* One scrollbar for the whole app (visual system 2.0 T5-F). Both reference
systems converged on the same recipe: a slim pill inset in a transparent
gutter, one step darker on hover, no painted track. The 2px transparent
border + content-box clip turns the 10px hit area into a 6px pill. The
few surfaces that hide or thin their own bars are more specific and keep
winning. */
* {
scrollbar-width: thin;
scrollbar-color: var(--border-strong) transparent;
}
*::-webkit-scrollbar {
width: 10px;
height: 10px;
}
*::-webkit-scrollbar-track,
*::-webkit-scrollbar-corner {
background: transparent;
}
*::-webkit-scrollbar-thumb {
border: 2px solid transparent;
border-radius: var(--radius-pill);
background: var(--border-strong);
background-clip: content-box;
}
*::-webkit-scrollbar-thumb:hover {
/* One step above --border-strong's 16%, scoped to the thumb only. */
background-color: oklch(from var(--foreground) l c h / 0.28);
}