/* MIR design system 1.6.0 (adopted, 2026-10-04).
   Written by build.py from mir_system.json: do not edit.
   One unit is one px at scale 1. Tones follow the finish: Dark by default, Light when the
   viewer asks for it (prefers-color-scheme) or the root says so (data-theme). */
:root {

  /* unit: Three steps. Every structural size is a whole number of modules; every layout size a whole number of bases. */
  --mir-unit-hair: 1px;
  --mir-unit-module: 4px;
  --mir-unit-base: 8px;

  /* grid: The lattice. A cell and a gutter make a pitch; the panel is a whole number of pitches plus one gutter. */
  --mir-grid-cell-bases: 13;
  --mir-grid-gutter-bases: 5;
  --mir-grid-cols: 10;
  --mir-grid-rows: 4;
  --mir-grid-display-rows: 1;
  --mir-grid-cell: 104px;
  --mir-grid-gutter: 40px;
  --mir-grid-pitch: 144px;
  --mir-grid-rim: 20px;
  --mir-grid-frame: 40px;

  /* panel: The instrument's surface. Ten tiles by five, in a rim. */
  --mir-panel-width: 1480px;
  --mir-panel-height: 760px;
  --mir-panel-aspect: 1.947368;
  --mir-panel-display-x0: 40px;
  --mir-panel-display-y0: 40px;
  --mir-panel-knob-x0: 92px;
  --mir-panel-knob-y0: 236px;

  /* knob: Forty identical controls. Each turns the full circle, without end, and presses. What a control is assigned decides how its value answers: its profile. The ring, fixed to the panel, shows the value; the display's row says it exactly. Geometry from the Figma master, in every body (call one_knob, decided 2026-09-26). */
  --mir-knob-capability-rotation: 360deg;
  --mir-knob-ring-places: 24;
  --mir-knob-ring-step: 15deg;
  --mir-knob-mark-diameter: 4px;
  --mir-knob-ring-radius: 50px;
  --mir-knob-ring-chord: 13.052619px;
  --mir-knob-ring-clear: 9.052619px;
  --mir-knob-body-radius: 44px;
  --mir-knob-body-diameter: 88px;
  --mir-knob-pointer-diameter: 4px;
  --mir-knob-pointer-radius: 38px;
  --mir-knob-profile-bounded-steps: 20;
  --mir-knob-profile-bounded-sweep: 300deg;
  --mir-knob-profile-bounded-marks: 21;
  --mir-knob-profile-bounded-start: -150deg;
  --mir-knob-profile-bounded-dead: 60deg;
  --mir-knob-profile-bounded-value-step: 0.05;
  --mir-knob-profile-bipolar-center: 10;
  --mir-knob-profile-cyclic-options-max: 24;
  --mir-knob-profile-stepped-steps-max: 21;

  /* knob_app: The app's knob today (web and native agree; a test holds them together). One module of margin sits between the cell's edge and the ring, so everything is one module smaller, and the ring has 16 places. The native panel's port takes the master's knob (call one_knob, decided 2026-09-26); until it does, these are the app's. */
  --mir-knob-app-ring-places: 16;
  --mir-knob-app-ring-step: 22.5deg;
  --mir-knob-app-ring-radius: 46px;
  --mir-knob-app-profile-bounded-steps: 12;
  --mir-knob-app-profile-bounded-sweep: 270deg;
  --mir-knob-app-profile-bounded-marks: 13;
  --mir-knob-app-profile-bounded-value-step: 0.083333;
  --mir-knob-app-body-radius: 40px;
  --mir-knob-app-body-diameter: 80px;
  --mir-knob-app-pointer-radius: 34px;
  --mir-knob-app-mark-radius-drawn: 2.5px;

  /* type: Two faces, three roles. The panel's face is a lattice of dots: seven tall, five wide, every glyph on one lattice. It sets labels and changing values; the reading face sets what is read. */
  --mir-type-panel-family: "Matrix Sans Print";
  --mir-type-panel-weight: 400;
  --mir-type-panel-dots-per-size: 10;
  --mir-type-panel-cap-dots: 7;
  --mir-type-panel-x-dots: 5;
  --mir-type-panel-advance-dots: 6;
  --mir-type-panel-dot-fill: 0.96;
  --mir-type-panel-size: 12px;
  --mir-type-panel-line: 16px;
  --mir-type-panel-dot-pitch: 1.2px;
  --mir-type-panel-dot: 1.152px;
  --mir-type-panel-cap: 8.4px;
  --mir-type-panel-x: 6px;
  --mir-type-panel-advance: 7.2px;
  --mir-type-panel-measure: 14.444444;
  --mir-type-role-label-face: "Matrix Sans Print";
  --mir-type-role-value-face: "Matrix Sans Print";
  --mir-type-role-value-cells: 6;
  --mir-type-size-p10: 10px;
  --mir-type-size-p12: 12px;
  --mir-type-size-p15: 15px;
  --mir-type-size-p20: 20px;
  --mir-type-size-p30: 30px;
  --mir-type-size-p40: 40px;
  --mir-type-reading-family: "Inter";
  --mir-type-reading-x-height: 0.545898;
  --mir-type-reading-beside: 11px;
  --mir-type-reading-beside-line: 16px;
  --mir-type-reading-size: 16px;
  --mir-type-reading-line: 24px;
  --mir-type-reading-small: 13px;
  --mir-type-reading-small-line: 20px;
  --mir-type-reading-measure: 65;

  /* display: A display is one cell: a title, then four rows of label and value. Capitals are given a box one base tall; every baseline lands on a module. */
  --mir-display-rows: 4;
  --mir-display-cap-box: 8px;
  --mir-display-title-gap: 24px;
  --mir-display-row-gap: 12px;
  --mir-display-row-pitch: 20px;
  --mir-display-title-baseline: 8px;
  --mir-display-row-baseline: 40px;
  --mir-display-last-baseline: 100px;
  --mir-display-foot: 4px;

  /* display_app: The app's display text today: smaller, and two sizes. */
  --mir-display-app-title-size: 10px;
  --mir-display-app-title-tracking: 1.5px;
  --mir-display-app-row-size: 11px;
  --mir-display-app-row-pitch: 18.84375px;
  --mir-display-app-title-dot-pitch: 1px;
  --mir-display-app-row-dot-pitch: 1.1px;

  /* band: The words' line: the displays' title row across the ten columns (decision 2026-09-05). Closed, it shows the titles; open, the words at the reference size. No box and no field: words and a caret on the titles' line. */
  --mir-band-x: 40px;
  --mir-band-width: 1400px;
  --mir-band-baseline: 48px;
  --mir-band-line: 16px;
  --mir-band-top: 36px;
  --mir-band-size: 12px;
  --mir-band-measure: 194.444444;
  --mir-band-caret: 1px;

  /* light: Light is the language. A state is a level of light, white; four accents carry the same light in a hue. Levels are linear shares of full light. The ordinary light is the lamp: cool, the white it has always been, or warm, the player's choice (light.lamp, decided 2026-10-02). */
  --mir-light-level-ready: 0.25;

  /* band: The words' line: the displays' title row across the ten columns (decision 2026-09-05). Closed, it shows the titles; open, the words at the reference size. No box and no field: words and a caret on the titles' line. */
  --mir-band-level-bright: 0.25;
  --mir-band-level-quiet: 0.12;
  --mir-band-level-quiet-app: 0.08;

  /* finish: A finish is a real material in a real room, tuned by the founder in the finish tuner. Its values live with the renderer (look.ts APP); the system records what they come to on screen. */
  --mir-finish-dark-deck: #1a1a1a;

  /* tone: Flat color, for everything that is not the rendered panel: cards, pages, these pages. A tone starts from a level of light over a finish's deck, encoded for the screen. On Dark the level adds to the deck's light, and the tones are that model's (the cards' and the pages'; what the rendered panel shows, brighter, is `tone.dark.shown_*`, measured, for what sits on the panel); on Light, whose marks are lights too since 2026-09-29, the tones are measured on the app's own render (the silver studio's gain is not the black's). The gain, the floors and any perceptual correction are design choices, recorded as seeds. */
  --mir-tone-gain-dark: 2.25;
  --mir-tone-dark-ground: #1a1a1a;

  /* band: The words' line: the displays' title row across the ten columns (decision 2026-09-05). Closed, it shows the titles; open, the words at the reference size. No box and no field: words and a caret on the titles' line. */
  --mir-band-quiet-contrast-dark: 5.451603;

  /* tone: Flat color, for everything that is not the rendered panel: cards, pages, these pages. A tone starts from a level of light over a finish's deck, encoded for the screen. On Dark the level adds to the deck's light, and the tones are that model's (the cards' and the pages'; what the rendered panel shows, brighter, is `tone.dark.shown_*`, measured, for what sits on the panel); on Light, whose marks are lights too since 2026-09-29, the tones are measured on the app's own render (the silver studio's gain is not the black's). The gain, the floors and any perceptual correction are design choices, recorded as seeds. */
  --mir-tone-light-label: #f7f7f7;

  /* finish: A finish is a real material in a real room, tuned by the founder in the finish tuner. Its values live with the renderer (look.ts APP); the system records what they come to on screen. */
  --mir-finish-light-deck: #b9b9b9;

  /* tone: Flat color, for everything that is not the rendered panel: cards, pages, these pages. A tone starts from a level of light over a finish's deck, encoded for the screen. On Dark the level adds to the deck's light, and the tones are that model's (the cards' and the pages'; what the rendered panel shows, brighter, is `tone.dark.shown_*`, measured, for what sits on the panel); on Light, whose marks are lights too since 2026-09-29, the tones are measured on the app's own render (the silver studio's gain is not the black's). The gain, the floors and any perceptual correction are design choices, recorded as seeds. */
  --mir-tone-light-ground: #b9b9b9;

  /* band: The words' line: the displays' title row across the ten columns (decision 2026-09-05). Closed, it shows the titles; open, the words at the reference size. No box and no field: words and a caret on the titles' line. */
  --mir-band-quiet-contrast-light: 1.83147;

  /* sequencer: The same forty controls in the sequencer's mode (decision 2026-09-07): 32 steps on the first eight columns, read row by row; the ninth column is the whole sequencer; the tenth stays MAIN, turns and presses alike. How they light is the sequencer contract. */
  --mir-sequencer-step-cols: 8;
  --mir-sequencer-steps: 32;
  --mir-sequencer-note-steps: 49;
  --mir-sequencer-length-steps: 32;

  /* mark: The mark is a square wave that spells its name. Eight blocks, low and high in turn: five are the m, one the i, two the r. Blocks kiss at their corners; each kiss grows a neck. */
  --mir-mark-block: 24px;
  --mir-mark-kiss: 1px;
  --mir-mark-radius: 4px;
  --mir-mark-radius-steps: 12;
  --mir-mark-pitch: 23px;
  --mir-mark-gap: 11px;
  --mir-mark-neck: 4.727922px;
  --mir-mark-clear: 24px;
  --mir-mark-word-blocks: 8;
  --mir-mark-word-m: 116px;
  --mir-mark-word-i: 24px;
  --mir-mark-word-r: 47px;
  --mir-mark-word-width: 209px;
  --mir-mark-word-height: 47px;
  --mir-mark-symbol-blocks: 5;
  --mir-mark-symbol-cols: 5;
  --mir-mark-symbol-rows: 3;
  --mir-mark-symbol-knobs-per-block: 2;
  --mir-mark-symbol-width: 116px;
  --mir-mark-symbol-height: 70px;
  --mir-mark-small-kiss-1x: 209px;
  --mir-mark-small-kiss-2x: 104.5px;
  --mir-mark-small-neck-1x: 88.410933px;
  --mir-mark-small-neck-2x: 44.205466px;
  --mir-mark-min-word: 209px;
  --mir-mark-min-word-1x: 209px;
  --mir-mark-min-word-2x: 104.5px;
  --mir-mark-min-symbol: 116px;
  --mir-mark-min-symbol-1x: 116px;
  --mir-mark-min-symbol-2x: 58px;
  --mir-mark-fit-block-min: 3;
  --mir-mark-fit-pixel-block: 6;
  --mir-mark-fit-kiss-min: 1;
  --mir-mark-fit-word-block-min: 6;
  --mir-mark-fit-free: 4;
  --mir-mark-fit-kiss-share: 0.041667;
  --mir-mark-fit-corner-share: 0.166667;
  --mir-mark-line-ink: 15.396;
  --mir-mark-line-bearing: 0.052;
  --mir-mark-line-size: 13.574955px;
  --mir-mark-line-lead: 0.705898px;

  /* space: Distances for everything that is not the lattice: cards, rows, text. Six steps, named by their modules. Larger distances are the lattice's own. */
  --mir-space-m6: 24px;

  /* chrome: What MIR draws beside the lattice: the cards, a menu MIR draws, the strips, the toast. The lattice under other conditions: a card is a width of the family and its content stands on the lattice's columns; its rhythm is the founder's; its corners are the system's three. The chrome is drawn in window points and does not scale with the panel. On the system's measures (call chrome_measure, decided 2026-09-26). It speaks by role (call one_face, decided 2026-09-27; its test made semantic by Astra's pre-final): what the instrument names or states, and the player scans and acts on, is in the panel's face at the panel's size, whatever its length (a title, a heading, a label, a value, a name, a wrapped port name, a key, a chip, a button, a menu item); what explains is read, in the reading face: a hint or a one sentence note beside the rows at type.reading.beside on the panel's line, at the label's level; a passage of explanation at type.reading.small on its line; the acknowledgements' notices at type.reading.beside. Its ground is the finish's deck (Dark neutral, tone.dark.ground; Light, tone.light.ground) and Dark's text the panel's marks' tones (2026-09-29, the founder's first look); Light's text waits for the answer on Light's marks. */
  --mir-chrome-card-about-gap: 24px;

  /* mark: The mark is a square wave that spells its name. Eight blocks, low and high in turn: five are the m, one the i, two the r. Blocks kiss at their corners; each kiss grows a neck. */
  --mir-mark-line-gap: 24px;
  --mir-mark-lockup-gap: 88px;
  --mir-mark-lockup-symbol-scale: 0.671429;
  --mir-mark-lockup-width: 374.885714px;
  --mir-mark-icon-canvas: 1024px;
  --mir-mark-icon-body: 824px;
  --mir-mark-icon-width: 722.88px;
  --mir-mark-icon-scale: 6.231724;
  --mir-mark-icon-share: 0.705937;
  --mir-mark-icon-pixels: 5;
  --mir-mark-icon-symbol: 580;
  --mir-mark-icon-full: 720.776699px;
  --mir-mark-icon-fill: #e6e9e9;
  --mir-mark-icon-ink: #000000;

  /* light: Light is the language. A state is a level of light, white; four accents carry the same light in a hue. Levels are linear shares of full light. The ordinary light is the lamp: cool, the white it has always been, or warm, the player's choice (light.lamp, decided 2026-10-02). */
  --mir-light-level-active: 1;
  --mir-light-level-label: 0.12;
  --mir-light-level-dim: 0.05;
  --mir-light-level-available: 0.02;
  --mir-light-level-off: 0;
  --mir-light-level-option: 0.02;
  --mir-light-stops-ready: -2;
  --mir-light-stops-label: -3.058894;
  --mir-light-stops-dim: -4.321928;
  --mir-light-stops-option: -5.643856;
  --mir-light-stops-available: -5.643856;
  --mir-light-factor-focus-others: 0.3;
  --mir-light-factor-band-recede: 0.36;
  --mir-light-factor-band-ghost: 0.64;
  --mir-light-factor-disabled: 0.35;
  --mir-light-factor-inactive: 0.2;
  --mir-light-factor-follow: 0.75;
  --mir-light-factor-shown-others: 0.08;
  --mir-light-ink-knee: 0.1;
  --mir-light-ink-active: 0.999955;
  --mir-light-ink-ready: 0.917915;
  --mir-light-ink-label: 0.698806;
  --mir-light-ink-dim: 0.393469;
  --mir-light-ink-available: 0.181269;
  --mir-light-lamp-cool: #ffffff;
  --mir-light-lamp-warm: #ffdba9;
  --mir-light-lamp-warm-on-light: #ffeacc;
  --mir-light-lamp-warm-dark: 13.225235;
  --mir-light-lamp-warm-light: 1.490939;
  --mir-light-lamp-cool-light: 1.962067;
  --mir-light-lamp-warm-on-light-light: 1.67178;

  /* tone: Flat color, for everything that is not the rendered panel: cards, pages, these pages. A tone starts from a level of light over a finish's deck, encoded for the screen. On Dark the level adds to the deck's light, and the tones are that model's (the cards' and the pages'; what the rendered panel shows, brighter, is `tone.dark.shown_*`, measured, for what sits on the panel); on Light, whose marks are lights too since 2026-09-29, the tones are measured on the app's own render (the silver studio's gain is not the black's). The gain, the floors and any perceptual correction are design choices, recorded as seeds. */
  --mir-tone-gain-light: 0.8;
  --mir-tone-dark-active: #ffffff;
  --mir-tone-dark-ready: #c6c6c6;
  --mir-tone-dark-label: #909090;
  --mir-tone-dark-dim: #626262;
  --mir-tone-dark-available: #424242;
  --mir-tone-dark-option: #424242;
  --mir-tone-dark-ready-contrast: 10.189181;
  --mir-tone-dark-lit-contrast: 5.883517;
  --mir-tone-dark-option-contrast: 1.731818;
  --mir-tone-dark-available-contrast: 1.731818;
  --mir-tone-dark-label-contrast: 5.451603;
  --mir-tone-dark-label-contrast-no-gain: 2.985861;
  --mir-tone-dark-shown-ready: #f4f4f4;
  --mir-tone-dark-shown-label: #c8c8c8;
  --mir-tone-dark-shown-dim: #858585;
  --mir-tone-dark-shown-label-contrast: 10.402491;
  --mir-tone-light-active: #fefefe;
  --mir-tone-light-ready: #fbfbfb;
  --mir-tone-light-dim: #e3e3e3;
  --mir-tone-light-available: #b7b7b7;
  --mir-tone-light-option: #ededed;
  --mir-tone-light-ready-contrast: 1.896078;
  --mir-tone-light-lit-contrast: 1.938157;
  --mir-tone-light-option-contrast: 1.675929;
  --mir-tone-light-available-contrast: 1.022192;
  --mir-tone-light-label-contrast: 1.83147;

  /* accent: Four meanings, each with a hue family: the pattern green, a modulation lane amber, learn blue, record red. The meanings are settled, and the hues (call accent_hues, decided 2026-09-27): the brand's own, direction A as the start, and the founder may still move a tone. A meaning keeps its hue family on every finish; its lightness and chroma answer the finish; an essential distinction also survives without hue. The panel's lights take vivid hues, one colour each on both finishes (accent.light, call lights_colour, decided 2026-10-02): the tones the founder kept for himself to move. */
  --mir-accent-tint-purity: 1;
  --mir-accent-brand-dark-playhead: #88c09f;
  --mir-accent-brand-dark-modulation: #e3be7b;
  --mir-accent-brand-dark-learn: #7db2d5;
  --mir-accent-brand-dark-record: #e57255;
  --mir-accent-light-learn: #4edbfe;

  /* motion: Light follows in four times; a knob is a physical object on three springs. Every number here was tuned in the running instrument and is recorded, not derived. */
  --mir-motion-pulse-low: 0.35;

  /* accent: Four meanings, each with a hue family: the pattern green, a modulation lane amber, learn blue, record red. The meanings are settled, and the hues (call accent_hues, decided 2026-09-27): the brand's own, direction A as the start, and the founder may still move a tone. A meaning keeps its hue family on every finish; its lightness and chroma answer the finish; an essential distinction also survives without hue. The panel's lights take vivid hues, one colour each on both finishes (accent.light, call lights_colour, decided 2026-10-02): the tones the founder kept for himself to move. */
  --mir-accent-state-dark-learn-low: 8.623815;
  --mir-accent-light-record: #dd324a;
  --mir-accent-state-dark-record-low: 3.234035;
  --mir-accent-state-light-learn-low: 1.160745;
  --mir-accent-state-light-record-low: 1.80789;
  --mir-accent-light-playhead: #31f1a4;
  --mir-accent-state-dark-following: 5.560076;
  --mir-accent-state-light-following: 1.139762;
  --mir-accent-brand-light-playhead: #3d7757;
  --mir-accent-brand-light-modulation: #9b6d23;
  --mir-accent-brand-light-learn: #34698c;
  --mir-accent-brand-light-record: #b63d26;
  --mir-accent-contrast-brand-dark-playhead: 8.367553;
  --mir-accent-contrast-brand-dark-modulation: 9.911565;
  --mir-accent-contrast-brand-dark-learn: 7.642467;
  --mir-accent-contrast-brand-dark-record: 5.678907;
  --mir-accent-contrast-brand-light-playhead: 2.696151;
  --mir-accent-contrast-brand-light-modulation: 2.315013;
  --mir-accent-contrast-brand-light-learn: 3.019517;
  --mir-accent-contrast-brand-light-record: 2.906323;
  --mir-accent-contrast-held-dark-playhead: 11.809068;
  --mir-accent-light-modulation: #fdc522;
  --mir-accent-contrast-held-dark-modulation: 10.928367;
  --mir-accent-contrast-held-dark-learn: 10.681035;
  --mir-accent-contrast-held-dark-record: 3.83687;
  --mir-accent-contrast-held-light-playhead: 1.331289;
  --mir-accent-contrast-held-light-modulation: 1.232003;
  --mir-accent-contrast-held-light-learn: 1.20412;
  --mir-accent-contrast-held-light-record: 2.311886;

  /* floor: The least a thing needs to be read. Floors are enforced: the gate fails below them. */
  --mir-floor-text: 4.5;
  --mir-floor-state: 3;
  --mir-floor-dot: 2;
  --mir-floor-light-lit: 1.6;

  /* space: Distances for everything that is not the lattice: cards, rows, text. Six steps, named by their modules. Larger distances are the lattice's own. */
  --mir-space-m1: 4px;
  --mir-space-m2: 8px;
  --mir-space-m3: 12px;
  --mir-space-m4: 16px;
  --mir-space-m10: 40px;

  /* radius: Corners. A control's corner is the mark's: one module. A corner that holds another is larger by the space between them. */
  --mir-radius-control: 4px;
  --mir-radius-menu: 8px;
  --mir-radius-card: 12px;

  /* control: Heights for the app's own controls, outside the panel. */
  --mir-control-small: 24px;
  --mir-control-row: 32px;

  /* chrome: What MIR draws beside the lattice: the cards, a menu MIR draws, the strips, the toast. The lattice under other conditions: a card is a width of the family and its content stands on the lattice's columns; its rhythm is the founder's; its corners are the system's three. The chrome is drawn in window points and does not scale with the panel. On the system's measures (call chrome_measure, decided 2026-09-26). It speaks by role (call one_face, decided 2026-09-27; its test made semantic by Astra's pre-final): what the instrument names or states, and the player scans and acts on, is in the panel's face at the panel's size, whatever its length (a title, a heading, a label, a value, a name, a wrapped port name, a key, a chip, a button, a menu item); what explains is read, in the reading face: a hint or a one sentence note beside the rows at type.reading.beside on the panel's line, at the label's level; a passage of explanation at type.reading.small on its line; the acknowledgements' notices at type.reading.beside. Its ground is the finish's deck (Dark neutral, tone.dark.ground; Light, tone.light.ground) and Dark's text the panel's marks' tones (2026-09-29, the founder's first look); Light's text waits for the answer on Light's marks. */
  --mir-chrome-card-inset: 40px;
  --mir-chrome-card-inset-block: 24px;
  --mir-chrome-card-corner: 12px;
  --mir-chrome-card-height-max: 680px;

  /* layout: Any surface is the same lattice under other conditions: n columns is n pitches and a gutter. A page, a card, a module and the panel are all widths of this one family. */
  --mir-layout-w4: 616px;

  /* chrome: What MIR draws beside the lattice: the cards, a menu MIR draws, the strips, the toast. The lattice under other conditions: a card is a width of the family and its content stands on the lattice's columns; its rhythm is the founder's; its corners are the system's three. The chrome is drawn in window points and does not scale with the panel. On the system's measures (call chrome_measure, decided 2026-09-26). It speaks by role (call one_face, decided 2026-09-27; its test made semantic by Astra's pre-final): what the instrument names or states, and the player scans and acts on, is in the panel's face at the panel's size, whatever its length (a title, a heading, a label, a value, a name, a wrapped port name, a key, a chip, a button, a menu item); what explains is read, in the reading face: a hint or a one sentence note beside the rows at type.reading.beside on the panel's line, at the label's level; a passage of explanation at type.reading.small on its line; the acknowledgements' notices at type.reading.beside. Its ground is the finish's deck (Dark neutral, tone.dark.ground; Light, tone.light.ground) and Dark's text the panel's marks' tones (2026-09-29, the founder's first look); Light's text waits for the answer on Light's marks. */
  --mir-chrome-card-width-settings: 616px;

  /* layout: Any surface is the same lattice under other conditions: n columns is n pitches and a gutter. A page, a card, a module and the panel are all widths of this one family. */
  --mir-layout-w6: 904px;

  /* chrome: What MIR draws beside the lattice: the cards, a menu MIR draws, the strips, the toast. The lattice under other conditions: a card is a width of the family and its content stands on the lattice's columns; its rhythm is the founder's; its corners are the system's three. The chrome is drawn in window points and does not scale with the panel. On the system's measures (call chrome_measure, decided 2026-09-26). It speaks by role (call one_face, decided 2026-09-27; its test made semantic by Astra's pre-final): what the instrument names or states, and the player scans and acts on, is in the panel's face at the panel's size, whatever its length (a title, a heading, a label, a value, a name, a wrapped port name, a key, a chip, a button, a menu item); what explains is read, in the reading face: a hint or a one sentence note beside the rows at type.reading.beside on the panel's line, at the label's level; a passage of explanation at type.reading.small on its line; the acknowledgements' notices at type.reading.beside. Its ground is the finish's deck (Dark neutral, tone.dark.ground; Light, tone.light.ground) and Dark's text the panel's marks' tones (2026-09-29, the founder's first look); Light's text waits for the answer on Light's marks. */
  --mir-chrome-card-width-shortcuts: 904px;

  /* layout: Any surface is the same lattice under other conditions: n columns is n pitches and a gutter. A page, a card, a module and the panel are all widths of this one family. */
  --mir-layout-w2: 328px;

  /* chrome: What MIR draws beside the lattice: the cards, a menu MIR draws, the strips, the toast. The lattice under other conditions: a card is a width of the family and its content stands on the lattice's columns; its rhythm is the founder's; its corners are the system's three. The chrome is drawn in window points and does not scale with the panel. On the system's measures (call chrome_measure, decided 2026-09-26). It speaks by role (call one_face, decided 2026-09-27; its test made semantic by Astra's pre-final): what the instrument names or states, and the player scans and acts on, is in the panel's face at the panel's size, whatever its length (a title, a heading, a label, a value, a name, a wrapped port name, a key, a chip, a button, a menu item); what explains is read, in the reading face: a hint or a one sentence note beside the rows at type.reading.beside on the panel's line, at the label's level; a passage of explanation at type.reading.small on its line; the acknowledgements' notices at type.reading.beside. Its ground is the finish's deck (Dark neutral, tone.dark.ground; Light, tone.light.ground) and Dark's text the panel's marks' tones (2026-09-29, the founder's first look); Light's text waits for the answer on Light's marks. */
  --mir-chrome-card-width-about-card: 328px;
  --mir-chrome-card-width-list: 616px;
  --mir-chrome-card-height-about-card: 328px;
  --mir-chrome-card-content-settings: 536px;
  --mir-chrome-card-content-shortcuts: 824px;
  --mir-chrome-card-content-about-card: 248px;
  --mir-chrome-card-row-air: 8px;
  --mir-chrome-card-row-control: 48px;
  --mir-chrome-card-row-text: 32px;
  --mir-chrome-card-row-heading: 8px;
  --mir-chrome-card-row-section: 16px;
  --mir-chrome-card-close: 24px;
  --mir-chrome-card-key: 24px;
  --mir-chrome-card-chip: 24px;
  --mir-chrome-card-chip-gap: 8px;
  --mir-chrome-card-chips: 248px;
  --mir-chrome-card-port: 248px;
  --mir-chrome-card-slider: 104px;
  --mir-chrome-card-button-corner: 4px;
  --mir-chrome-card-about-foot: 40px;
  --mir-chrome-card-about-inset: 40px;
  --mir-chrome-card-about-top: 36px;

  /* layout: Any surface is the same lattice under other conditions: n columns is n pitches and a gutter. A page, a card, a module and the panel are all widths of this one family. */
  --mir-layout-w1: 184px;

  /* chrome: What MIR draws beside the lattice: the cards, a menu MIR draws, the strips, the toast. The lattice under other conditions: a card is a width of the family and its content stands on the lattice's columns; its rhythm is the founder's; its corners are the system's three. The chrome is drawn in window points and does not scale with the panel. On the system's measures (call chrome_measure, decided 2026-09-26). It speaks by role (call one_face, decided 2026-09-27; its test made semantic by Astra's pre-final): what the instrument names or states, and the player scans and acts on, is in the panel's face at the panel's size, whatever its length (a title, a heading, a label, a value, a name, a wrapped port name, a key, a chip, a button, a menu item); what explains is read, in the reading face: a hint or a one sentence note beside the rows at type.reading.beside on the panel's line, at the label's level; a passage of explanation at type.reading.small on its line; the acknowledgements' notices at type.reading.beside. Its ground is the finish's deck (Dark neutral, tone.dark.ground; Light, tone.light.ground) and Dark's text the panel's marks' tones (2026-09-29, the founder's first look); Light's text waits for the answer on Light's marks. */
  --mir-chrome-menu-width: 184px;
  --mir-chrome-menu-inset: 4px;
  --mir-chrome-menu-corner: 8px;
  --mir-chrome-menu-item: 32px;
  --mir-chrome-menu-item-inset: 12px;
  --mir-chrome-menu-item-corner: 4px;
  --mir-chrome-strip-height: 24px;
  --mir-chrome-strip-corner: 12px;
  --mir-chrome-strip-top: 8px;
  --mir-chrome-strip-inset: 16px;
  --mir-chrome-strip-bar: 24px;
  --mir-chrome-strip-light: 8px;

  /* motion: Light follows in four times; a knob is a physical object on three springs. Every number here was tuned in the running instrument and is recorded, not derived. */
  --mir-motion-time-change: 140ms;

  /* chrome: What MIR draws beside the lattice: the cards, a menu MIR draws, the strips, the toast. The lattice under other conditions: a card is a width of the family and its content stands on the lattice's columns; its rhythm is the founder's; its corners are the system's three. The chrome is drawn in window points and does not scale with the panel. On the system's measures (call chrome_measure, decided 2026-09-26). It speaks by role (call one_face, decided 2026-09-27; its test made semantic by Astra's pre-final): what the instrument names or states, and the player scans and acts on, is in the panel's face at the panel's size, whatever its length (a title, a heading, a label, a value, a name, a wrapped port name, a key, a chip, a button, a menu item); what explains is read, in the reading face: a hint or a one sentence note beside the rows at type.reading.beside on the panel's line, at the label's level; a passage of explanation at type.reading.small on its line; the acknowledgements' notices at type.reading.beside. Its ground is the finish's deck (Dark neutral, tone.dark.ground; Light, tone.light.ground) and Dark's text the panel's marks' tones (2026-09-29, the founder's first look); Light's text waits for the answer on Light's marks. */
  --mir-chrome-strip-toast-in: 140ms;
  --mir-chrome-strip-toast-stay: 3500ms;
  --mir-chrome-scrim-dim: 0.5;
  --mir-chrome-scrim-blur: 1.5px;

  /* motion: Light follows in four times; a knob is a physical object on three springs. Every number here was tuned in the running instrument and is recorded, not derived. */
  --mir-motion-time-step: 35ms;
  --mir-motion-time-band: 400ms;
  --mir-motion-time-wake: 600ms;
  --mir-motion-curve-ease: cubic-bezier(0.25, 0.1, 0.25, 1);
  --mir-motion-curve-pulse: cubic-bezier(0.42, 0, 0.58, 1);
  --mir-motion-pulse-period: 1000ms;
  --mir-motion-pulse-record-beats: 1;
  --mir-motion-spring-damping: 1;
  --mir-motion-spring-settle: 6;
  --mir-motion-spring-stop: 8;
  --mir-motion-spring-detent: 14;
  --mir-motion-knob-turn: 1.62;
  --mir-motion-knob-detent: 28;
  --mir-motion-knob-fine: 0.2;
  --mir-motion-knob-wheel: 0.02;
  --mir-motion-knob-tap: 3;
  --mir-motion-knob-hold: 500ms;
  --mir-motion-knob-friction: 6;
  --mir-motion-knob-flick: 90;
  --mir-motion-knob-coast-floor: 2;
  --mir-motion-knob-impact: 360;
  --mir-motion-knob-coast-half: 115.52453ms;
  --mir-motion-knob-stop-lean: 6deg;
  --mir-motion-knob-near: 0.4;
  --mir-motion-knob-near-reach: 1.5;
  --mir-motion-knob-near-reach-u: 78px;
  --mir-motion-knob-full-sweep: 166.666667;
  --mir-motion-mark-block: 480ms;
  --mir-motion-mark-stagger: 150ms;
  --mir-motion-mark-overshoot: 0.6;
  --mir-motion-mark-settle: 260ms;
  --mir-motion-mark-snap: 260ms;
  --mir-motion-mark-hold: 900ms;
  --mir-motion-mark-blur: 0.8px;
  --mir-motion-mark-contrast: 20;
  --mir-motion-mark-threshold: 11;
  --mir-motion-mark-inset: 0.05px;
  --mir-motion-mark-pulse: 0.2px;
  --mir-motion-mark-pull: 0px;
  --mir-motion-mark-squash: 0.02;
  --mir-motion-mark-arrive: 1530ms;
  --mir-motion-mark-total: 2950ms;
  --mir-motion-launch-dark: 400ms;
  --mir-motion-launch-stagger: 150ms;
  --mir-motion-launch-cell: 60ms;
  --mir-motion-launch-fill: 420ms;
  --mir-motion-launch-hold: 600ms;
  --mir-motion-launch-release-col: 35ms;
  --mir-motion-launch-release-row: 15ms;
  --mir-motion-launch-ring-settle: 480ms;

  /* layout: Any surface is the same lattice under other conditions: n columns is n pitches and a gutter. A page, a card, a module and the panel are all widths of this one family. */
  --mir-layout-w3: 472px;
  --mir-layout-w5: 760px;
  --mir-layout-w7: 1048px;
  --mir-layout-w8: 1192px;
  --mir-layout-w10: 1480px;
  --mir-layout-w13: 1912px;

  /* page: Print. An A4 sheet is seven columns by ten rows of the lattice at a fifth of a millimetre per unit. */
  --mir-page-a4-scale: 0.2;
  --mir-page-a4-cols: 7;
  --mir-page-a4-rows: 10;
  --mir-page-a4-width: 209.6mm;
  --mir-page-a4-height: 296mm;
  --mir-page-a4-base: 1.6mm;
  --mir-page-a4-cell: 20.8mm;
  --mir-page-a4-gutter: 8mm;

  /* unit_module: Expansion units, on the lattice (call double_unit, decided 2026-09-26, subject to packaging): a unit of n columns is n pitches and a gutter wide, and the panel's height tall. */
  --mir-unit-module-single-width: 184px;
  --mir-unit-module-double-width: 328px;
  --mir-unit-module-double-pitch: 144px;
  --mir-unit-module-height: 760px;

  /* unit_module_drawn: Expansion units as the founder drew them. The drawing is to follow the lattice (call double_unit); until it does, the gate holds the record of the drawing to these. */
  --mir-unit-module-drawn-single-width: 184px;
  --mir-unit-module-drawn-double-width: 312px;
  --mir-unit-module-drawn-double-pitch: 128px;
  --mir-unit-module-drawn-height: 748.0672px;

  /* rear: The rear wall, seen from behind: fifteen connectors in four groups, the power, the sound out, MIDI and the control voltages. On the lattice (call rear_lattice, decided 2026-09-26): every centre on a half pitch, a column's centre or a gutter's, from behind one end's knob column to behind the other's; the groups set apart by empty places, the power by two. The openings are the parts'; nominal until engineering releases them. */
  --mir-rear-step: 72px;
  --mir-rear-first: 92px;
  --mir-rear-last: 1388px;
  --mir-rear-centre: 48px;
  --mir-rear-legend: 88px;

  /* rear_drawn: The rear as the founder's wireframe draws it: the four groups spread evenly, their centres on thirds of a unit, the record in sources/figma_mir_page.json. */
  --mir-rear-drawn-height: 116px;

  /* window: The panel is one canvas, scaled whole. Preferred sizes put the module on whole device pixels; the window offers them and any size stays possible (call clean_scales, decided 2026-09-26). Strokes, circles and glyphs need their own look at any size. */
  --mir-window-scale-step-1x: 0.25;
  --mir-window-scale-step-2x: 0.125;
  --mir-window-min-scale: 0.5;
  --mir-window-min-width: 740px;
  --mir-window-min-height: 380px;
  --mir-window-min-scale-1x: 0.75;
  --mir-window-about-margin-least: 26px;
  --mir-window-min-width-1x: 1110px;
  --mir-window-min-height-1x: 570px;
  --mir-window-plugin-scale: 0.75;
  --mir-window-plugin-module-2x: 6;
  --mir-window-type-scale-2x: 1.25;
  --mir-window-type-dot-2x: 3;
  --mir-window-min-dot-2x: 1.2;

  /* object: The hardware. One unit is the scale in millimeters; every dimension on the top is the panel's, times the scale. Values are exact (a fraction where the decimal repeats) and shown to the nanometer. They are nominal: each feature takes its tolerance at engineering release. */
  --mir-object-width: 480mm;
  --mir-object-scale: 0.324324;
  --mir-object-depth: 246.486486mm;
  --mir-object-module: 1.297297mm;
  --mir-object-base: 2.594595mm;
  --mir-object-cell: 33.72973mm;
  --mir-object-gutter: 12.972973mm;
  --mir-object-pitch: 46.702703mm;
  --mir-object-rim: 6.486486mm;
  --mir-object-knob: 28.540541mm;
  --mir-object-between-knobs: 18.162162mm;
  --mir-object-ring-radius: 16.216216mm;
  --mir-object-mark: 1.297297mm;
  --mir-object-mark-pitch: 4.233282mm;
  --mir-object-pointer-radius: 12.324324mm;
  --mir-object-type-size: 3.891892mm;
  --mir-object-type-cap: 2.724324mm;
  --mir-object-type-dot-pitch: 0.389189mm;
  --mir-object-type-dot: 0.373622mm;
  --mir-object-rear-step: 23.351351mm;
  --mir-object-rear-span: 420.324324mm;
  --mir-object-rear-centre: 15.567568mm;
  --mir-object-rear-drawn-height: 37.621622mm;
  --mir-object-height: 34mm;
  --mir-object-height-u: 104.833333px;
  --mir-object-knob-height: 10.8mm;
  --mir-object-knob-height-u: 33.3px;
  --mir-object-wall: 3mm;
  --mir-object-roof: 3mm;
  --mir-object-corner: 1.8mm;
  --mir-object-corner-u: 5.55px;
  --mir-object-edge: 0.55mm;
  --mir-object-knob-edge: 0.35mm;
  --mir-object-reveal: 0.05mm;
  --mir-object-press: 0.45mm;
  --mir-object-shaft: 6mm;

  /* the finish in use */
  color-scheme: dark;
  --mir-ground: var(--mir-tone-dark-ground);
  --mir-active: var(--mir-tone-dark-active);
  --mir-ready: var(--mir-tone-dark-ready);
  --mir-label: var(--mir-tone-dark-label);
  --mir-dim: var(--mir-tone-dark-dim);
  --mir-option: var(--mir-tone-dark-option);
  --mir-available: var(--mir-tone-dark-available);
  --mir-playhead: var(--mir-accent-brand-dark-playhead);
  --mir-modulation: var(--mir-accent-brand-dark-modulation);
  --mir-learn: var(--mir-accent-brand-dark-learn);
  --mir-record: var(--mir-accent-brand-dark-record);
}
@media (prefers-color-scheme: light) {
  :root:not([data-theme="dark"]) {
    color-scheme: light;
    --mir-ground: var(--mir-tone-light-ground);
    --mir-active: var(--mir-tone-light-active);
    --mir-ready: var(--mir-tone-light-ready);
    --mir-label: var(--mir-tone-light-label);
    --mir-dim: var(--mir-tone-light-dim);
    --mir-option: var(--mir-tone-light-option);
    --mir-available: var(--mir-tone-light-available);
    --mir-playhead: var(--mir-accent-brand-light-playhead);
    --mir-modulation: var(--mir-accent-brand-light-modulation);
    --mir-learn: var(--mir-accent-brand-light-learn);
    --mir-record: var(--mir-accent-brand-light-record);
  }
}
:root[data-theme="light"] {
  color-scheme: light;
  --mir-ground: var(--mir-tone-light-ground);
  --mir-active: var(--mir-tone-light-active);
  --mir-ready: var(--mir-tone-light-ready);
  --mir-label: var(--mir-tone-light-label);
  --mir-dim: var(--mir-tone-light-dim);
  --mir-option: var(--mir-tone-light-option);
  --mir-available: var(--mir-tone-light-available);
  --mir-playhead: var(--mir-accent-brand-light-playhead);
  --mir-modulation: var(--mir-accent-brand-light-modulation);
  --mir-learn: var(--mir-accent-brand-light-learn);
  --mir-record: var(--mir-accent-brand-light-record);
}
