memlnaut-nisps/manifold/src/styles/primitives.css

73 lines
2.1 KiB
CSS
Raw Normal View History

/**
* Manifold primitive component styles.
*
* Range-input pseudo-elements (track + thumb) can't be expressed via React
* inline styles, so the Slider and ControlAxis primitives rely on these
* className hooks. The dynamic bits are passed as inline CSS custom properties:
* - Slider: `--mf-pct` (0..1 fill ratio for the track gradient)
* - ControlAxis: `--mf-axis-accent` (per-axis track/thumb accent colour)
*
* Import this once at the app root (it is re-exported as a side-effect from
* `primitives/index.ts`, so importing the barrel is enough), or add it to your
* global stylesheet manifest alongside the design tokens.
*/
/* ---- Slider (.mf-slider-input) ---- */
/* Base reset so the custom track/thumb styling applies even when a consumer
doesn't set these inline (e.g. OutputControlRow's held slider). The colored
fill tracks `--mf-pct` (0..1); it falls back to 0 if a consumer forgets it. */
.mf-slider-input {
-webkit-appearance: none;
appearance: none;
background: transparent;
}
.mf-slider-input::-webkit-slider-runnable-track {
height: 4px;
border-radius: 999px;
background: linear-gradient(
to right,
var(--accent) 0%,
var(--accent) calc(var(--mf-pct, 0) * 100%),
var(--bg-3) 0%
);
}
.mf-slider-input::-moz-range-track {
height: 4px;
border-radius: 999px;
background: var(--bg-3);
}
.mf-slider-input::-moz-range-progress {
height: 4px;
border-radius: 999px;
background: var(--accent);
}
.mf-slider-input::-webkit-slider-thumb {
-webkit-appearance: none;
appearance: none;
width: 16px;
height: 16px;
border-radius: 50%;
background: var(--accent);
margin-top: -6px;
box-shadow: 0 0 8px var(--glow-accent);
cursor: pointer;
transition: transform var(--dur-fast) var(--ease);
}
.mf-slider-input::-moz-range-thumb {
width: 16px;
height: 16px;
border-radius: 50%;
background: var(--accent);
border: none;
box-shadow: 0 0 8px var(--glow-accent);
}
.mf-slider-input:hover::-webkit-slider-thumb {
transform: scale(1.15);
}
.mf-slider-input:focus {
outline: none;
}
.mf-slider-input:focus::-webkit-slider-thumb {
box-shadow: 0 0 0 3px var(--glow-focus);
}