/* GENERATED by cmd/gentokens — do not edit. Source: web/internal/design. */
:root {
  --bg: #0B0710; /* page ground: the flooded near-black of a lit arcade screen. */
  --surface: #0B0710; /* resting card ground. Flat with the ground — a resting surface carries a border, not a lift — which on a lit screen means the ground itself. */
  --surface-2: #16101F; /* recessed ground for a quoted block. On screen a block recesses by lifting off the ground, which is the panel ground void shares. */
  --surface-3: #2A2233; /* the faintest recess, one step above the ground — the raised plum neutral. */
  --ink: #F5F0E6; /* primary ink, and the type colour the design language calls bone. */
  --ink-1: rgba(245,240,230,0.87); /* body ink one step below primary — the narrative's proof block sets its text at it. */
  --ink-2: rgba(245,240,230,0.78); /* secondary ink: sustained reading below the primary line. */
  --ink-3: rgba(245,240,230,0.60); /* tertiary ink: micro-labels and metadata. */
  --ink-4: rgba(245,240,230,0.36); /* quiet ink: an unsatisfied mark, and a rail's non-milestone nodes. */
  --ink-5: rgba(245,240,230,0.18); /* faintest ink: a connector, and the bar over a masked label. */
  --border: rgba(245,240,230,0.22); /* stated border on an interactive or bounded element. */
  --border-dim: rgba(245,240,230,0.10); /* structural hairline — the rule that separates without dividing. */
  --border-soft: rgba(245,240,230,0.06); /* the faintest rule, for a seam that should read as texture. */
  --rejected: #DB86FF; /* the input the form will not take, and the destructive action's own colour: 8.43:1 on the page ground, 7.86:1 on the panel, 6.45:1 on the raised plum and 6.45:1 on its own 18% tint, which is the BINDING ground rather than the page because an 18% tint composites 1.31:1 lighter than the ground it sits on. One row does the border, the ink and the tint's source, because it clears the ink floor on every one of them. Violet because every other loud hue is taken — yellow by rank, red by nothing now — and it is the one loud hue native to the plum ground; neither accent at 28.1 dE00 from shock and 46.4 from volt, and no state value at 18.61 from its nearest, stopped. */
  --rejected-tint: rgba(219,134,255,0.18); /* the rejected violet at ground weight, for the panel behind a refusal and for the resting edge under a destructive row action. Composited from rejectedHex rather than stating its own channels, so the two can never disagree about which violet is being tinted; it resolves to #301E3B over the page ground, where rejected reads at 6.45:1 and the bone ink at 13.44:1. */
  --confirmed: #2FA55C; /* the OK path — the input the form took, a success alert, an online tag, the agent answering its first poll. A finished RUN is a lifecycle position the campaign-state axis owns, at 18.6 dE00 from completed, and no surface states one in this green any more: the closed-campaigns table wore it through .bd-status--done until the board took the state chip. The value is unchanged from the green row it replaces, because that value already does exactly this job on every ground it sits on: 6.33:1 on the page ground, 5.90:1 on the panel, 4.84:1 on the raised plum, 5.17:1 on its own 18% tint. The name changed to the role because a hue is not a meaning. Neither accent at 78.9 dE00 from shock and 36.2 from volt, and the lifecycle green it must not be taken for is held off on lightness, 60 against completed's 82. */
  --confirmed-tint: rgba(47,165,92,0.18); /* the confirmed green at ground weight, the ground a confirmation is stated on. It exists because the OK half of a binary axis had no ground of its own and filled with surface-3, the raised plum every neutral panel already wears, so a confirmation stated its axis in the border alone while a refusal stated it twice. Composited from confirmedHex rather than stating its own channels, so the two can never disagree about which green is being tinted; it resolves to #11231E over the page ground, where confirmed reads at 5.17:1 and the bone ink at 14.35:1. */
  --pending: #079D9E; /* campaign state 1 of 6 and the dormant end of the in-flight arc: no agent has phoned home yet, so it is the darkest and quietest of the six at 6.01:1 on the page ground, 5.61:1 on the panel, 4.60:1 on the raised plum and 4.96:1 on its own 18% tint, the ground its chip fills. Teal because a dark cool value is what the arc's dormant end asks for, and its tightest neighbour is the one such a value has to earn: 20.67 dE00 from volt, held on lightness at 59 against 84. */
  --launching: #00F2C4; /* campaign state 2 of 6 and the middle of the in-flight arc: the token is issued and the agent has not answered yet, so it sits between pending and running on both lightness and chroma, at 13.78:1 on the page ground, 12.85:1 on the panel, 10.54:1 on the raised plum and 9.67:1 on its own 18% tint. An aqua this light has cyan on one side and the OK green on the other, and it is held off both: 22.27 dE00 from volt on chroma, 59 against 45, and 21.84 from confirmed on lightness, 86 against 60. */
  --running: #EAFF00; /* campaign state 3 of 6, the live end of the arc and the loudest value in the palette at chroma 97 and lightness 96: 17.87:1 on the page ground, 16.67:1 on the panel, 13.67:1 on the raised plum and 11.52:1 on its own 18% tint. This is the one state where the authenticated motion budget unlocks, so it has to dominate a board without being mistaken for rank: 21.73 dE00 from gold, bought on hue at 108 against 83 since both are yellows. */
  --stopped: #7881FB; /* campaign state 4 of 6: the user pulled the plug, which is neither a good outcome nor a bad one, so it is as dark as pending rather than an alarm, at 6.02:1 on the page ground, 5.61:1 on the panel, 4.60:1 on the raised plum and 4.89:1 on its own 18% tint. Periwinkle is the one loud hue left in the cool violet corner, and the figure its placement is bound by is 18.61 dE00 from rejected — over the 18.26 floor and held on lightness, 59 against 69. */
  --completed: #84E162; /* campaign state 5 of 6: the run finished, and it settles rather than shouts — chroma 73 against running's 97 and lightness 82 against 96, because a board of finished runs must not read louder than a working one. 12.29:1 on the page ground, 11.46:1 on the panel, 9.40:1 on the raised plum and 8.75:1 on its own 18% tint. Green because a good outcome is the one reading a viewer has without a legend, and it is 18.59 dE00 from confirmed, the validation green it must not be taken for: the two mean the same thing on different axes, so the separation is bought on lightness, 82 against 60. */
  --failed: #FFA5A8; /* campaign state 6 of 6: the run ended badly, in the coral rose that is all the red band leaves. A red cannot clear the four-ground floor and still read as red — TestTokens_NoRedClearsTheFloorAtFailedsLightness scans the band and takes that figure every build — so a failure states itself in the rotation that survives: 10.64:1 on the page ground, 9.93:1 on the panel, 8.14:1 on the raised plum and 7.76:1 on its own 18% tint. Its two tightest are the warm rows it could be taken for, and both clear the floor: 20.61 dE00 from mute and 20.82 from shock. */
  --pending-tint: rgba(7,157,158,0.18); /* the pending teal at ground weight: the fill of the pending chip. Composited from pendingHex rather than stating its own channels, so a chip can never be filled with a teal the axis does not carry; it resolves to #0A222A over the page ground, where pending reads at 4.96:1 and the bone ink at 14.50:1. */
  --launching-tint: rgba(0,242,196,0.18); /* the launching aqua at ground weight: the fill of the launching chip. Composited from launchingHex, so the chip and the value it states cannot disagree; it resolves to #093130 over the page ground, where launching reads at 9.67:1 and the bone ink at 12.33:1. */
  --running-tint: rgba(234,255,0,0.18); /* the running lime at ground weight: the fill of the running chip, and the loudest chip on the surface because it is the one state a live run is in. Composited from runningHex; it resolves to #33340D over the page ground, where running reads at 11.52:1 and the bone ink at 11.33:1. */
  --stopped-tint: rgba(120,129,251,0.18); /* the stopped periwinkle at ground weight: the fill of the stopped chip. Composited from stoppedHex; it resolves to #1F1D3A over the page ground, where stopped reads at 4.89:1 and the bone ink at 14.29:1. */
  --completed-tint: rgba(132,225,98,0.18); /* the completed green at ground weight: the fill of the completed chip. Composited from completedHex; it resolves to #212E1F over the page ground, where completed reads at 8.75:1 and the bone ink at 12.51:1. */
  --failed-tint: rgba(255,165,168,0.18); /* the failed coral rose at ground weight: the fill of the failed chip. Composited from failedHex; it resolves to #37232B over the page ground, where failed reads at 7.76:1 and the bone ink at 12.81:1. */
  --stopped-tint-flat: #1F1D3A; /* the stopped chip's fill where rgba does not arrive, and the tightest of the three against the legibility floor. Flattened from stopped-tint over the page ground; stopped reads 4.89:1 on it and the bone ink 14.28:1. */
  --completed-tint-flat: #212E1F; /* the completed chip's fill where rgba does not arrive. Flattened from completed-tint over the page ground; completed reads 8.76:1 on it and the bone ink 12.53:1. */
  --failed-tint-flat: #37232B; /* the failed chip's fill where rgba does not arrive. Flattened from failed-tint over the page ground; failed reads 7.79:1 on it and the bone ink 12.86:1, against 7.76:1 on the tint itself — the rounding to whole channels is the whole difference, and it is the widest of the three. */
  --console: #0B0B0E; /* the ground of a terminal transcript. It was the one dark surface on a light page; now that the page itself is near-black it sits 1.02:1 off the ground, so a block filled with it is bounded by its rule rather than by its fill — see .deploy-cmd-wrapper, which states that rule. */
  --on-dark: rgba(255,255,255,0.92); /* primary ink on the console ground. */
  --on-dark-2: rgba(255,255,255,0.58); /* secondary ink on the console ground. */
  --on-dark-3: rgba(255,255,255,0.46); /* quiet ink on the console ground. */
  --wash: rgba(245,240,230,0.02); /* faint focus wash behind an active input. */
  --void: #16101F; /* panel ground, one step off the page. */
  --shock: #FF2D6F; /* primary accent: emphasis and the interactive thing, never a campaign state and never a validation verdict. */
  --volt: #00E5FF; /* secondary accent and link ink. */
  --gold: #FFC53D; /* rank, emphasis and the focus ring — it is neither accent, which is why a ring in it survives against the elements the accents fill, and it reads at 12.65:1 on the page ground. */
  --gold-tint: rgba(255,197,61,0.18); /* gold at ground weight: the ground the cut index states its entries on, where the page has to say that a step the run found no way around is the reader's business without spending an accent on a whole block. Composited from goldHex rather than stating its own channels, so the two can never disagree about which gold is being tinted; it resolves to #372918 over the page ground, where gold reads at 8.90:1 and the bone ink at 12.37:1. The alpha is the tint family's 0.18 and not a fainter composite drawn before the family existed, because every figure this roster publishes for a tint is measured at 0.18 and none of them transfers. */
  --plum: #2A2233; /* raised neutral panel. */
  --plum2: #3A3046; /* divider and ghost-button edge. */
  --mute: #B9AFC7; /* secondary type: sustained reading below the primary line. */
  --dim: #8E85A0; /* tertiary type and input placeholders. */
  --f-display: "AutoAttack Display", Impact, Haettenschweiler, "Arial Narrow Bold", "Arial Black", sans-serif; /* display role: uppercase, skewed, black-outlined. Pinned rather than left to a bare system stack because the hero is a measured composition and Impact's proportions decide whether the objective input clears the fold; Linux and Android have no Impact, so app.css embeds an Anton subset that matches those proportions. */
  --f-body: "Helvetica Neue", Helvetica, system-ui, -apple-system, Arial, sans-serif; /* prose role, set at weight 500 with 700 for emphasis. */
  --f-data: ui-monospace, Menlo, Consolas, "Courier New", monospace; /* data and utility role: uppercase, tracked, tabular figures. Every number compared column to column — timers, run tables, prices, health readouts — is set in it so the digits align. */
  --s1: 4px; /* spacing step 1. The scale is a 4px grid shared by the authed and marketing surfaces, so one rhythm holds across the funnel seam. */
  --s2: 8px; /* spacing step 2. */
  --s3: 12px; /* spacing step 3. */
  --s4: 16px; /* spacing step 4. */
  --s5: 24px; /* spacing step 5. */
  --s6: 32px; /* spacing step 6. */
  --s7: 48px; /* spacing step 7. */
  --s8: 64px; /* spacing step 8. */
  --s9: 96px; /* spacing step 9. */
  --mk-band: 56px; /* marketing band rhythm: section padding and wide column gaps. Off the named steps at 14 grid units; shares the nav bar's height by coincidence, not by relation, so it is named separately. */
  --gutter: clamp(24px, 5vw, 80px); /* marketing page horizontal inset. */
  --screen-top: clamp(28px, 4vw, 48px); /* the authenticated screen's top inset. A row rather than a literal because two rules have to resolve to the same number: the screen itself, and the account band the layout draws above it — outside the screen, so it has to start where the screen would have. Hand-copied, the two drift on the next rhythm change and the drift is invisible until someone reads a band and a heading side by side. The ceiling is the seventh spacing step: the screen used to open under a second HUD band that carried a third of the inset, and with that band gone the screen's own top has to hold the whole of it. */
  --fs-micro: 10px; /* micro step: the running page header and the smallest label. */
  --fs-label: 11px; /* label step: uppercase micro-labels with tracking. */
  --fs-sm: 12px; /* small step: dense metadata. */
  --fs-body: 13px; /* body step. */
  --fs-base: 14px; /* base step: the document root size. */
  --fs-lg: 16px; /* large step: a lead line. */
  --fs-xl: 18px; /* extra-large step: a sub-head. */
  --fs-data-s: 22px; /* data step, small: a figure inside a dense row. */
  --fs-data-m: 28px; /* data step, medium: a hero figure. */
  --fs-data-l: 34px; /* data step, large: the ceiling for a number rendered as data. */
  --fs-hero: clamp(44px, 7vw, 76px); /* the run page's time-to-objective readout, the one number that surface exists to show. Fluid because it is the only element that may take the slack of a viewport it shares with a wrapping objective sentence. */
  --fs-display-1: clamp(40px, 6vw, 80px); /* datasheet page lead. */
  --fs-display-3: clamp(24px, 3.4vw, 38px); /* section, benchmark entry and article head. */
  --fs-display-4: clamp(22px, 2.6vw, 30px); /* sub-head, content-page h1 and auth head. */
  --fs-wordmark: clamp(22px, 3.4vw, 29px); /* the wordmark's step, and the first of the display scale's roles to become a row. It is a row rather than a clamp in the rule because its floor is 22px, which inside a font-size is the small data step: left as a literal, the no-hand-written-value oracle attributes the wordmark's minimum to a figure in a dense row, and the two would then have to move together. */
  --fs-hero-sub: clamp(20px, 2.9vw, 34px); /* the landing hero's secondary head, the line under the headline. Its ceiling is 34px, which inside a font-size is the large data step — the ceiling for a number rendered as data, and this is a sentence in the display face. */
  --fs-fighter: clamp(16px, 3vw, 28px); /* a competitor's name on a matchup card. Both ends collide: 16px is the lead-line step and 28px is the hero-figure step, and this is neither — it is a proper noun in the display face, sized to a card that holds three of them across. */
  --fs-plate: clamp(13px, 2vw, 17px); /* an uppercase label on a skewed plate or a surface cell, set in the data face. Its floor is the body step, which is prose leading in a document rather than a tracked label on a 58px square. */
  --lh-tight: 1.15; /* display and figure leading. */
  --lh-snug: 1.4; /* dense operator rows. */
  --lh-body: 1.55; /* default document leading. */
  --lh-prose: 1.7; /* long-form reading measure. */
  --ls-label: 0.06em; /* uppercase micro-label tracking: caps crowd without it. */
  --ls-tight: -0.01em; /* tightening for a large body line. */
  --ls-data: -0.02em; /* tightening for a data figure. */
  --ls-display: -0.04em; /* tightening for a display headline. */
  --shadow-float: 0 24px 64px rgba(10,10,15,0.12); /* the only elevation: a genuine overlay. Resting surfaces stay flat and liveness is a rule plus a pulse, never a lift. */
  --rule-focus: 3px solid var(--gold); /* the focus ring, on both surfaces. Composite so keyboard focus is one declaration rather than a width plus a color at every call site; gold because a ring in either accent disappears against the elements those accents already fill. */
  --scanline-display: none; /* console scanline switch. It rests at none because no surface draws one yet; the switch exists so the surface that eventually does can turn it on without editing the rule that draws it. */
  --skew-display: -8deg; /* the display-type skew: the wordmark, every page and zone title, a cabinet marquee, a campaign name in a table cell. The shallowest of the four because a heading is the widest thing that takes one, and past 8deg the last letter of a long name leaves its own line. */
  --skew-control: -10deg; /* the control skew: buttons, the lifecycle chip, the board's filter tabs and the custom checkbox. One angle for everything a pointer can hit, so a row of mixed controls reads as one rack. */
  --skew-tag: -12deg; /* the label skew: the tag and its counter-skewed inner span. Two degrees past a control because a tag is smaller and states rather than invites, and the steeper cut is what tells the two apart at a glance. It named the cardinality badge beside a yield as well, until the roster's own chips became the count. */
  --skew-mark: -14deg; /* the marker skew: the 9-14px squares — an objective-unit mark, a chain-rail mark, a beat's rail dot, a connection dot, a requirement bullet, a toast's kind mark. Steepest of the four because at 13px a shallower cut is not legible as a cut at all. */
  --sh: 22px; /* panel shear depth at 701px and up. The polygon below and the panel's own inner padding both derive from it, so it is one value rather than two that can disagree. */
  --sh-narrow: 12px; /* panel shear depth at 700px and below, where a 22px bite off a narrow column eats its own first line. It is a row rather than a literal inside a media query because a value hand-written into a custom-property declaration is the one place the no-hand-written-value oracle cannot see. */
  --shear: polygon(0 var(--sh), 100% 0, 100% calc(100% - var(--sh)), 0 100%); /* the panel clip-path. One polygon so every sheared surface takes the same angle, worn by the outer and the inner element alike; it follows whichever depth --sh currently holds, so the narrow band needs no second polygon. */
  --shear-bed: polygon(12px 0, 100% 0, calc(100% - 12px) 100%, 0 100%); /* the form field's clip-path: a parallelogram rather than the panel's shear, because a control is cut on both vertical edges and a panel on both horizontal ones. The bed and the control seated in it wear the same polygon, and the two must agree exactly or the black bed shows through on one corner — which is why this is a row and not a literal repeated at every field. Both surfaces read it: the marketing form and the campaign form are the same control. */
  --shear-plate: polygon(0 0, 100% 0, calc(100% - 9px) 100%, 0 100%); /* the label-plate clip-path: the container shear expressed as a cut rather than a transform, so a plate at the head of a block does not push its slant into the text beside it. Worn by .plate, the gold label that opens a beat's fix and marks a step the run found no way around. Its 9px cut is shallower than the panel's because a plate is one line tall and a 22px bite would cut through the type. */
  --hard: 8px 8px 0 #000; /* the standard offset shadow. Zero blur, so it reads as a printed offset rather than a lift; a panel uses drop-shadow with the same language instead, so its shadow follows the clip-path rather than the box. */
  --wrap: 1180px; /* content column maximum. */
  --hud-h-wide: 62px; /* HUD height at 960px and up, where the whole bar fits on one row. Exact against the measured header. */
  --hud-h-nav-row: 101px; /* HUD height from 900 to 959px, where the six primary links take their own row. Exact against the measured header. */
  --hud-h-menu: 116px; /* HUD height at 899px and below, where the links collapse into the pause menu. One band spans both wrap states and carries the taller of the two, overshooting by 52px until the wordmark stops fitting beside the controls: that overshoot is whitespace above an anchor target, where the same error the other way hides the heading under the sticky header. */
  --ease: cubic-bezier(0.25, 0.46, 0.45, 0.94); /* the one easing curve. A single curve makes the whole interface feel like one mechanism. */
}
