[{"data":1,"prerenderedAt":1161},["ShallowReactive",2],{"doc-page:adr\u002F0013-operational-status-ramp":3},{"data":4,"body":7,"toc":1145},{"title":5,"description":6},"ADR 0013 — an operational status ramp, separate from the semantic palette","",{"type":8,"children":9},"root",[10,18,44,51,132,152,212,224,229,235,261,268,288,482,494,538,571,577,670,698,716,722,751,853,872,878,884,933,939,1022,1028,1080,1086],{"type":11,"tag":12,"props":13,"children":15},"element","h1",{"id":14},"adr-0013-an-operational-status-ramp-separate-from-the-semantic-palette",[16],{"type":17,"value":5},"text",{"type":11,"tag":19,"props":20,"children":21},"ul",{},[22,34],{"type":11,"tag":23,"props":24,"children":25},"li",{},[26,32],{"type":11,"tag":27,"props":28,"children":29},"strong",{},[30],{"type":17,"value":31},"Date",{"type":17,"value":33},": 2026-09-08",{"type":11,"tag":23,"props":35,"children":36},{},[37,42],{"type":11,"tag":27,"props":38,"children":39},{},[40],{"type":17,"value":41},"Status",{"type":17,"value":43},": Accepted",{"type":11,"tag":45,"props":46,"children":48},"h2",{"id":47},"context",[49],{"type":17,"value":50},"Context",{"type":11,"tag":52,"props":53,"children":54},"p",{},[55,62,64,69,71,77,79,85,87,93,94,100,101,107,109,115,117,123,124,130],{"type":11,"tag":56,"props":57,"children":59},"code",{"className":58},[],[60],{"type":17,"value":61},"color.semantic",{"type":17,"value":63}," is a five-slot ",{"type":11,"tag":27,"props":65,"children":66},{},[67],{"type":17,"value":68},"sentiment",{"type":17,"value":70}," palette — ",{"type":11,"tag":56,"props":72,"children":74},{"className":73},[],[75],{"type":17,"value":76},"success",{"type":17,"value":78},", ",{"type":11,"tag":56,"props":80,"children":82},{"className":81},[],[83],{"type":17,"value":84},"warning",{"type":17,"value":86},",\n",{"type":11,"tag":56,"props":88,"children":90},{"className":89},[],[91],{"type":17,"value":92},"danger",{"type":17,"value":78},{"type":11,"tag":56,"props":95,"children":97},{"className":96},[],[98],{"type":17,"value":99},"error",{"type":17,"value":78},{"type":11,"tag":56,"props":102,"children":104},{"className":103},[],[105],{"type":17,"value":106},"info",{"type":17,"value":108}," — tuned for editorial and BI surfaces. It maps cleanly\nonto Power BI's ",{"type":11,"tag":56,"props":110,"children":112},{"className":111},[],[113],{"type":17,"value":114},"good",{"type":17,"value":116}," \u002F ",{"type":11,"tag":56,"props":118,"children":120},{"className":119},[],[121],{"type":17,"value":122},"neutral",{"type":17,"value":116},{"type":11,"tag":56,"props":125,"children":127},{"className":126},[],[128],{"type":17,"value":129},"bad",{"type":17,"value":131},", and onto the \"this form field is\nwrong\" class of UI. It has served every consumer so far.",{"type":11,"tag":52,"props":133,"children":134},{},[135,137,143,145,150],{"type":17,"value":136},"Building the Nagios Core overlay (",{"type":11,"tag":56,"props":138,"children":140},{"className":139},[],[141],{"type":17,"value":142},"nagios-stack",{"type":17,"value":144},") showed it cannot serve a\n",{"type":11,"tag":27,"props":146,"children":147},{},[148],{"type":17,"value":149},"monitoring",{"type":17,"value":151}," surface, for two reasons that are properties of the palette\nrather than of that consumer:",{"type":11,"tag":153,"props":154,"children":155},"ol",{},[156,186],{"type":11,"tag":23,"props":157,"children":158},{},[159,176,178,184],{"type":11,"tag":27,"props":160,"children":161},{},[162,168,170],{"type":11,"tag":56,"props":163,"children":165},{"className":164},[],[166],{"type":17,"value":167},"semantic.success",{"type":17,"value":169}," is ",{"type":11,"tag":56,"props":171,"children":173},{"className":172},[],[174],{"type":17,"value":175},"#3D5328",{"type":17,"value":177},", a deep low-chroma olive chosen to clear\nAAA as ",{"type":11,"tag":179,"props":180,"children":181},"em",{},[182],{"type":17,"value":183},"text on white",{"type":17,"value":185},". Used as a cell tint it loses its hue almost\nentirely and reads grey-green. On a status table it stops saying \"healthy\".",{"type":11,"tag":23,"props":187,"children":188},{},[189,194,196,202,204,210],{"type":11,"tag":27,"props":190,"children":191},{},[192],{"type":17,"value":193},"There is no orange.",{"type":17,"value":195}," A monitoring surface needs UNKNOWN — the check\nproduced no verdict — to be distinct from both WARNING and CRITICAL. With no\norange available, that consumer reached for ",{"type":11,"tag":56,"props":197,"children":199},{"className":198},[],[200],{"type":17,"value":201},"chart.5",{"type":17,"value":203}," ",{"type":11,"tag":56,"props":205,"children":207},{"className":206},[],[208],{"type":17,"value":209},"#8C5A3C",{"type":17,"value":211},", a clay\nbrown, which reads as a weak red and collides with CRITICAL. PENDING's\nneutral grey then sat too close to that near-grey brown, so PENDING read as\nUNKNOWN.",{"type":11,"tag":52,"props":213,"children":214},{},[215,217,222],{"type":17,"value":216},"Both failures survived review because the code looked entirely reasonable: it\nreferenced canonical tokens throughout and passed every contrast check. What it\nfailed was legibility ",{"type":11,"tag":179,"props":218,"children":219},{},[220],{"type":17,"value":221},"as a ramp",{"type":17,"value":223},", which nothing in the system was measuring.",{"type":11,"tag":52,"props":225,"children":226},{},[227],{"type":17,"value":228},"The gap is not Nagios-specific. Any operational surface — corridor control state,\ndetector host inventory, a Fabric operations report — needs the same five\nstates, and today each would invent its own colours.",{"type":11,"tag":45,"props":230,"children":232},{"id":231},"decision",[233],{"type":17,"value":234},"Decision",{"type":11,"tag":52,"props":236,"children":237},{},[238,259],{"type":11,"tag":27,"props":239,"children":240},{},[241,243,249,251,257],{"type":17,"value":242},"Add ",{"type":11,"tag":56,"props":244,"children":246},{"className":245},[],[247],{"type":17,"value":248},"themes.\u003Ctheme>.status",{"type":17,"value":250},", a five-state operational ramp, as a first-class\ntoken family alongside ",{"type":11,"tag":56,"props":252,"children":254},{"className":253},[],[255],{"type":17,"value":256},"semantic",{"type":17,"value":258},".",{"type":17,"value":260}," It is not a rename of the semantic palette\nand does not replace it: sentiment answers \"is this good or bad\", status answers\n\"what state is this system in\".",{"type":11,"tag":262,"props":263,"children":265},"h3",{"id":264},"the-five-states-and-where-the-hues-come-from",[266],{"type":17,"value":267},"The five states, and where the hues come from",{"type":11,"tag":52,"props":269,"children":270},{},[271,273,278,280,286],{"type":17,"value":272},"Hues track the colours ",{"type":11,"tag":27,"props":274,"children":275},{},[276],{"type":17,"value":277},"Nagios Core itself ships",{"type":17,"value":279}," (",{"type":11,"tag":56,"props":281,"children":283},{"className":282},[],[284],{"type":17,"value":285},"html\u002Fstylesheets\u002Fstatus.css",{"type":17,"value":287},"):",{"type":11,"tag":289,"props":290,"children":291},"table",{},[292,316],{"type":11,"tag":293,"props":294,"children":295},"thead",{},[296],{"type":11,"tag":297,"props":298,"children":299},"tr",{},[300,306,311],{"type":11,"tag":301,"props":302,"children":303},"th",{},[304],{"type":17,"value":305},"State",{"type":11,"tag":301,"props":307,"children":308},{},[309],{"type":17,"value":310},"Nagios",{"type":11,"tag":301,"props":312,"children":313},{},[314],{"type":17,"value":315},"Meaning",{"type":11,"tag":317,"props":318,"children":319},"tbody",{},[320,349,376,404,432,460],{"type":11,"tag":297,"props":321,"children":322},{},[323,333,344],{"type":11,"tag":324,"props":325,"children":326},"td",{},[327],{"type":11,"tag":56,"props":328,"children":330},{"className":329},[],[331],{"type":17,"value":332},"ok",{"type":11,"tag":324,"props":334,"children":335},{},[336,342],{"type":11,"tag":56,"props":337,"children":339},{"className":338},[],[340],{"type":17,"value":341},"#33FF00",{"type":17,"value":343}," green",{"type":11,"tag":324,"props":345,"children":346},{},[347],{"type":17,"value":348},"healthy \u002F up",{"type":11,"tag":297,"props":350,"children":351},{},[352,360,371],{"type":11,"tag":324,"props":353,"children":354},{},[355],{"type":11,"tag":56,"props":356,"children":358},{"className":357},[],[359],{"type":17,"value":84},{"type":11,"tag":324,"props":361,"children":362},{},[363,369],{"type":11,"tag":56,"props":364,"children":366},{"className":365},[],[367],{"type":17,"value":368},"#FFFF00",{"type":17,"value":370}," yellow",{"type":11,"tag":324,"props":372,"children":373},{},[374],{"type":17,"value":375},"degraded, still serving",{"type":11,"tag":297,"props":377,"children":378},{},[379,388,399],{"type":11,"tag":324,"props":380,"children":381},{},[382],{"type":11,"tag":56,"props":383,"children":385},{"className":384},[],[386],{"type":17,"value":387},"unknown",{"type":11,"tag":324,"props":389,"children":390},{},[391,397],{"type":11,"tag":56,"props":392,"children":394},{"className":393},[],[395],{"type":17,"value":396},"#FF9900",{"type":17,"value":398}," orange",{"type":11,"tag":324,"props":400,"children":401},{},[402],{"type":17,"value":403},"the check produced no verdict",{"type":11,"tag":297,"props":405,"children":406},{},[407,416,427],{"type":11,"tag":324,"props":408,"children":409},{},[410],{"type":11,"tag":56,"props":411,"children":413},{"className":412},[],[414],{"type":17,"value":415},"critical",{"type":11,"tag":324,"props":417,"children":418},{},[419,425],{"type":11,"tag":56,"props":420,"children":422},{"className":421},[],[423],{"type":17,"value":424},"#F83838",{"type":17,"value":426}," red",{"type":11,"tag":324,"props":428,"children":429},{},[430],{"type":17,"value":431},"failed \u002F down",{"type":11,"tag":297,"props":433,"children":434},{},[435,444,455],{"type":11,"tag":324,"props":436,"children":437},{},[438],{"type":11,"tag":56,"props":439,"children":441},{"className":440},[],[442],{"type":17,"value":443},"pending",{"type":11,"tag":324,"props":445,"children":446},{},[447,453],{"type":11,"tag":56,"props":448,"children":450},{"className":449},[],[451],{"type":17,"value":452},"#ACACAC",{"type":17,"value":454}," grey",{"type":11,"tag":324,"props":456,"children":457},{},[458],{"type":17,"value":459},"not yet checked",{"type":11,"tag":297,"props":461,"children":462},{},[463,472,477],{"type":11,"tag":324,"props":464,"children":465},{},[466],{"type":11,"tag":56,"props":467,"children":469},{"className":468},[],[470],{"type":17,"value":471},"maintenance",{"type":11,"tag":324,"props":473,"children":474},{},[475],{"type":17,"value":476},"— (TTI blue)",{"type":11,"tag":324,"props":478,"children":479},{},[480],{"type":17,"value":481},"planned downtime — expected, not a fault",{"type":11,"tag":52,"props":483,"children":484},{},[485,487,492],{"type":17,"value":486},"That ordering — green → yellow → orange → red — is decades of operator muscle\nmemory. Inventing a prettier ramp would be a legibility regression dressed as a\nbrand win, so the hues are inherited and only the ",{"type":11,"tag":179,"props":488,"children":489},{},[490],{"type":17,"value":491},"rendering",{"type":17,"value":493}," is TTI's.",{"type":11,"tag":52,"props":495,"children":496},{},[497,507,509,514,516,522,523,529,531,536],{"type":11,"tag":27,"props":498,"children":499},{},[500,505],{"type":11,"tag":56,"props":501,"children":503},{"className":502},[],[504],{"type":17,"value":471},{"type":17,"value":506}," is the one exception",{"type":17,"value":508},", added 2026-09-08. Nagios ships no colour\nfor it, because it is not a point on the severity ramp at all: it means\n",{"type":11,"tag":179,"props":510,"children":511},{},[512],{"type":17,"value":513},"expected, not a fault",{"type":17,"value":515},". It therefore takes TTI's own blue — the hue of\n",{"type":11,"tag":56,"props":517,"children":519},{"className":518},[],[520],{"type":17,"value":521},"brand.secondary",{"type":17,"value":203},{"type":11,"tag":56,"props":524,"children":526},{"className":525},[],[527],{"type":17,"value":528},"#15457E",{"type":17,"value":530},", at 255.2° — which is far from all five severity\nhues and is the conventional colour for planned work across monitoring tools.\nIt is exempt from the severity-weight rule for the same reason ",{"type":11,"tag":56,"props":532,"children":534},{"className":533},[],[535],{"type":17,"value":332},{"type":17,"value":537}," is: it is\nnot on the ramp.",{"type":11,"tag":52,"props":539,"children":540},{},[541,543,548,549,555,557,562,563,569],{"type":17,"value":542},"The state earns its place from Nagios alone. Core already distinguishes\n",{"type":11,"tag":27,"props":544,"children":545},{},[546],{"type":17,"value":547},"acknowledged",{"type":17,"value":279},{"type":11,"tag":56,"props":550,"children":552},{"className":551},[],[553],{"type":17,"value":554},"…ACK",{"type":17,"value":556},") from ",{"type":11,"tag":27,"props":558,"children":559},{},[560],{"type":17,"value":561},"in scheduled downtime",{"type":17,"value":279},{"type":11,"tag":56,"props":564,"children":566},{"className":565},[],[567],{"type":17,"value":568},"…SCHED",{"type":17,"value":570},"), and those\nare different facts: one means somebody is on it, the other means we planned\nthis. Collapsing both into one \"handled\" grey — as the first consumer did —\nthrows away the distinction an operator most wants at 3am.",{"type":11,"tag":262,"props":572,"children":574},{"id":573},"three-roles-per-state",[575],{"type":17,"value":576},"Three roles per state",{"type":11,"tag":289,"props":578,"children":579},{},[580,601],{"type":11,"tag":293,"props":581,"children":582},{},[583],{"type":11,"tag":297,"props":584,"children":585},{},[586,591,596],{"type":11,"tag":301,"props":587,"children":588},{},[589],{"type":17,"value":590},"Role",{"type":11,"tag":301,"props":592,"children":593},{},[594],{"type":17,"value":595},"Token",{"type":11,"tag":301,"props":597,"children":598},{},[599],{"type":17,"value":600},"Where it goes",{"type":11,"tag":317,"props":602,"children":603},{},[604,626,648],{"type":11,"tag":297,"props":605,"children":606},{},[607,612,621],{"type":11,"tag":324,"props":608,"children":609},{},[610],{"type":17,"value":611},"base",{"type":11,"tag":324,"props":613,"children":614},{},[615],{"type":11,"tag":56,"props":616,"children":618},{"className":617},[],[619],{"type":17,"value":620},"--status-\u003Cs>",{"type":11,"tag":324,"props":622,"children":623},{},[624],{"type":17,"value":625},"text, edges, the identity colour",{"type":11,"tag":297,"props":627,"children":628},{},[629,634,643],{"type":11,"tag":324,"props":630,"children":631},{},[632],{"type":17,"value":633},"fill",{"type":11,"tag":324,"props":635,"children":636},{},[637],{"type":11,"tag":56,"props":638,"children":640},{"className":639},[],[641],{"type":17,"value":642},"--status-\u003Cs>-fill",{"type":11,"tag":324,"props":644,"children":645},{},[646],{"type":17,"value":647},"a status chip",{"type":11,"tag":297,"props":649,"children":650},{},[651,656,665],{"type":11,"tag":324,"props":652,"children":653},{},[654],{"type":17,"value":655},"ink",{"type":11,"tag":324,"props":657,"children":658},{},[659],{"type":11,"tag":56,"props":660,"children":662},{"className":661},[],[663],{"type":17,"value":664},"--status-\u003Cs>-ink",{"type":11,"tag":324,"props":666,"children":667},{},[668],{"type":17,"value":669},"the word inside that fill",{"type":11,"tag":52,"props":671,"children":672},{},[673,675,680,682,688,690,696],{"type":17,"value":674},"Three roles rather than one because on a light surface the two jobs pull apart:\na colour dark enough to be legible ",{"type":11,"tag":179,"props":676,"children":677},{},[678],{"type":17,"value":679},"as text on white",{"type":17,"value":681}," is necessarily dark, and\ndark yellow is olive while dark orange is brown. Hue has to live in the fill,\nwhich is exactly how Core itself works — ",{"type":11,"tag":56,"props":683,"children":685},{"className":684},[],[686],{"type":17,"value":687},".statusOK",{"type":17,"value":689}," carries a\n",{"type":11,"tag":56,"props":691,"children":693},{"className":692},[],[694],{"type":17,"value":695},"background-color",{"type":17,"value":697},", not a text colour.",{"type":11,"tag":52,"props":699,"children":700},{},[701,707,709,714],{"type":11,"tag":56,"props":702,"children":704},{"className":703},[],[705],{"type":17,"value":706},"tti-hc",{"type":17,"value":708}," renders ",{"type":11,"tag":27,"props":710,"children":711},{},[712],{"type":17,"value":713},"outlined",{"type":17,"value":715}," chips: fill is the page surface and ink is the\nbase, so no state depends on a colour-on-colour pair, and every base clears AAA.",{"type":11,"tag":262,"props":717,"children":719},{"id":718},"the-rules-and-the-guard",[720],{"type":17,"value":721},"The rules, and the guard",{"type":11,"tag":52,"props":723,"children":724},{},[725,727,733,735,741,743,749],{"type":17,"value":726},"Values were derived in OKLCH — hue fixed per state, lightness solved for\ncontrast, chroma pushed as far as sRGB allows under a cap — and are now\nauthored in ",{"type":11,"tag":56,"props":728,"children":730},{"className":729},[],[731],{"type":17,"value":732},"tokens.json",{"type":17,"value":734}," like every other token. ",{"type":11,"tag":56,"props":736,"children":738},{"className":737},[],[739],{"type":17,"value":740},"scripts\u002Faudit-status-palette.mjs",{"type":17,"value":742},"\n(",{"type":11,"tag":56,"props":744,"children":746},{"className":745},[],[747],{"type":17,"value":748},"npm run audit:status",{"type":17,"value":750},") re-derives the constraints from the authored values:",{"type":11,"tag":153,"props":752,"children":753},{},[754,764,774,818,836],{"type":11,"tag":23,"props":755,"children":756},{},[757,762],{"type":11,"tag":27,"props":758,"children":759},{},[760],{"type":17,"value":761},"Hue identity",{"type":17,"value":763}," within 14° of the Nagios hue. UNKNOWN carries a documented\n−12.6° offset: stock sits at 64.6°, brand gold at ~80°, and in dark mode a\nstock-hue UNKNOWN chip read as a cousin of the gold keyline.",{"type":11,"tag":23,"props":765,"children":766},{},[767,772],{"type":11,"tag":27,"props":768,"children":769},{},[770],{"type":17,"value":771},"Separation",{"type":17,"value":773}," — any two chips ≥ 0.075 apart in OKLab. A flat chip lightness\nonce left UNKNOWN and CRITICAL 0.043 apart: pale orange beside pale salmon.",{"type":11,"tag":23,"props":775,"children":776},{},[777,782,784,789,791,796,798,802,804,809,811,816],{"type":11,"tag":27,"props":778,"children":779},{},[780],{"type":17,"value":781},"Severity order",{"type":17,"value":783}," — chip lightness descends across the ",{"type":11,"tag":27,"props":785,"children":786},{},[787],{"type":17,"value":788},"warm hues",{"type":17,"value":790},",\nwarning → unknown → critical, so severity reads as ",{"type":11,"tag":179,"props":792,"children":793},{},[794],{"type":17,"value":795},"weight",{"type":17,"value":797}," as well as hue.\nThat second channel is what carries the ramp for a reader who cannot\nseparate the hues at all.",{"type":11,"tag":799,"props":800,"children":801},"br",{},[],{"type":17,"value":803},"It deliberately stops short of ",{"type":11,"tag":56,"props":805,"children":807},{"className":806},[],[808],{"type":17,"value":332},{"type":17,"value":810},". The rule was first written as\nok → warning → unknown → critical, and that was wrong: sRGB gives each hue a\nvery different lightness at full chroma (yellow ~0.97, green ~0.87, orange\n~0.77, red ~0.64), so a monotonic ramp across all four forces yellow ",{"type":11,"tag":179,"props":812,"children":813},{},[814],{"type":17,"value":815},"below",{"type":17,"value":817},"\ngreen — where it stops being yellow and turns olive. Hue identity outranks\nweight ordering. The ordering exists to keep adjacent warm hues apart, which\nis where the collision actually was; green is far enough away in hue that\nits weight does not matter.",{"type":11,"tag":23,"props":819,"children":820},{},[821,826,828,834],{"type":11,"tag":27,"props":822,"children":823},{},[824],{"type":17,"value":825},"Brand distance",{"type":17,"value":827}," — no status colour within 0.10 OKLab of brand maroon. An\nunconstrained solve put CRITICAL at ",{"type":11,"tag":56,"props":829,"children":831},{"className":830},[],[832],{"type":17,"value":833},"#77020b",{"type":17,"value":835},", 0.076 from maroon: it painted\n\"down\" the colour of the chrome. Gold proximity is advisory only — WARNING is\nyellow and TTI's yellow is gold, which is a coincidence of hue, not of\nmeaning.",{"type":11,"tag":23,"props":837,"children":838},{},[839,844,846,851],{"type":11,"tag":27,"props":840,"children":841},{},[842],{"type":17,"value":843},"WCAG 2.2",{"type":17,"value":845}," — AA (4.5:1) is the floor for ink-on-fill and base-on-page;\n",{"type":11,"tag":56,"props":847,"children":849},{"className":848},[],[850],{"type":17,"value":706},{"type":17,"value":852}," is held to AAA (7:1). AAA elsewhere is reported, not enforced: the\nheaviest chips cannot reach 7:1 without lightening enough to break rule 3.\nThat trade is deliberate and visible in the audit output rather than silent.",{"type":11,"tag":52,"props":854,"children":855},{},[856,862,864,870],{"type":11,"tag":56,"props":857,"children":859},{"className":858},[],[860],{"type":17,"value":861},"1.4.11",{"type":17,"value":863}," (non-text contrast) is why consumers pair every chip with an edge in\nits base colour: the chip is a graphical object carrying meaning, so it must\nwork as a shape. ",{"type":11,"tag":56,"props":865,"children":867},{"className":866},[],[868],{"type":17,"value":869},"1.4.1",{"type":17,"value":871}," (use of colour) is satisfied by consumers always\nrendering the state's word alongside — which is what makes it safe to lean on\nhue this hard.",{"type":11,"tag":45,"props":873,"children":875},{"id":874},"consequences",[876],{"type":17,"value":877},"Consequences",{"type":11,"tag":262,"props":879,"children":881},{"id":880},"positive",[882],{"type":17,"value":883},"Positive",{"type":11,"tag":19,"props":885,"children":886},{},[887,907,928],{"type":11,"tag":23,"props":888,"children":889},{},[890,892,897,899,905],{"type":17,"value":891},"Operational surfaces stop inventing colours. ",{"type":11,"tag":56,"props":893,"children":895},{"className":894},[],[896],{"type":17,"value":142},{"type":17,"value":898}," was about to ship\na locally-minted palette; it now consumes ",{"type":11,"tag":56,"props":900,"children":902},{"className":901},[],[903],{"type":17,"value":904},"--status-*",{"type":17,"value":906}," like anything else.",{"type":11,"tag":23,"props":908,"children":909},{},[910,912,918,920,926],{"type":17,"value":911},"The ramp is measured, not asserted. ",{"type":11,"tag":56,"props":913,"children":915},{"className":914},[],[916],{"type":17,"value":917},"audit:status",{"type":17,"value":919}," runs without a browser or\na Nuxt build, so it can gate every commit — unlike ",{"type":11,"tag":56,"props":921,"children":923},{"className":922},[],[924],{"type":17,"value":925},"audit:contrast",{"type":17,"value":927},", which\nneeds both and only sees pairs the audit page happens to render.",{"type":11,"tag":23,"props":929,"children":930},{},[931],{"type":17,"value":932},"The failure modes are written down where the next person will hit them.",{"type":11,"tag":262,"props":934,"children":936},{"id":935},"negative",[937],{"type":17,"value":938},"Negative",{"type":11,"tag":19,"props":940,"children":941},{},[942,959],{"type":11,"tag":23,"props":943,"children":944},{},[945,950,952,957],{"type":11,"tag":27,"props":946,"children":947},{},[948],{"type":17,"value":949},"Five more slots per theme × three themes = 45 new tokens.",{"type":17,"value":951}," Real growth in\n",{"type":11,"tag":56,"props":953,"children":955},{"className":954},[],[956],{"type":17,"value":732},{"type":17,"value":958},". Justified because the alternative is each consumer minting\nfive colours privately, which is the drift class the kit exists to end.",{"type":11,"tag":23,"props":960,"children":961},{},[962,967,968,974,976,982,984,990,992,998,1000,1005,1007,1013,1015,1020],{"type":11,"tag":27,"props":963,"children":964},{},[965],{"type":17,"value":966},"Two families that look similar from a distance.",{"type":17,"value":203},{"type":11,"tag":56,"props":969,"children":971},{"className":970},[],[972],{"type":17,"value":973},"semantic.error",{"type":17,"value":975}," and\n",{"type":11,"tag":56,"props":977,"children":979},{"className":978},[],[980],{"type":17,"value":981},"status.critical",{"type":17,"value":983}," are the same value in ",{"type":11,"tag":56,"props":985,"children":987},{"className":986},[],[988],{"type":17,"value":989},"tti",{"type":17,"value":991}," and deliberately diverge in\n",{"type":11,"tag":56,"props":993,"children":995},{"className":994},[],[996],{"type":17,"value":997},"tti-dark",{"type":17,"value":999},". Consumers must pick by ",{"type":11,"tag":179,"props":1001,"children":1002},{},[1003],{"type":17,"value":1004},"role",{"type":17,"value":1006},", not by which hex looks right. The\n",{"type":11,"tag":56,"props":1008,"children":1010},{"className":1009},[],[1011],{"type":17,"value":1012},"$description",{"type":17,"value":1014}," on ",{"type":11,"tag":56,"props":1016,"children":1018},{"className":1017},[],[1019],{"type":17,"value":981},{"type":17,"value":1021}," says so explicitly.",{"type":11,"tag":262,"props":1023,"children":1025},{"id":1024},"deliberately-not-done",[1026],{"type":17,"value":1027},"Deliberately not done",{"type":11,"tag":52,"props":1029,"children":1030},{},[1031,1055,1057,1063,1065,1071,1073,1078],{"type":11,"tag":27,"props":1032,"children":1033},{},[1034,1036,1041,1042,1047,1048,1053],{"type":17,"value":1035},"Power BI's ",{"type":11,"tag":56,"props":1037,"children":1039},{"className":1038},[],[1040],{"type":17,"value":114},{"type":17,"value":116},{"type":11,"tag":56,"props":1043,"children":1045},{"className":1044},[],[1046],{"type":17,"value":122},{"type":17,"value":116},{"type":11,"tag":56,"props":1049,"children":1051},{"className":1050},[],[1052],{"type":17,"value":129},{"type":17,"value":1054}," still resolve to the semantic palette,\nnot to status.",{"type":17,"value":1056}," Re-pointing them would change the appearance of every report\nalready built on ",{"type":11,"tag":56,"props":1058,"children":1060},{"className":1059},[],[1061],{"type":17,"value":1062},"tti-theme.json",{"type":17,"value":1064},", and sentiment is arguably the right frame for\na KPI card anyway. If an operations-focused Fabric report needs the status ramp,\nthe better move is a ",{"type":11,"tag":56,"props":1066,"children":1068},{"className":1067},[],[1069],{"type":17,"value":1070},"tti-theme-ops.json",{"type":17,"value":1072}," lane rather than redefining ",{"type":11,"tag":56,"props":1074,"children":1076},{"className":1075},[],[1077],{"type":17,"value":114},{"type":17,"value":1079}," for\neveryone. Left as an open decision, not an oversight.",{"type":11,"tag":45,"props":1081,"children":1083},{"id":1082},"related",[1084],{"type":17,"value":1085},"Related",{"type":11,"tag":19,"props":1087,"children":1088},{},[1089,1101,1112,1127],{"type":11,"tag":23,"props":1090,"children":1091},{},[1092,1099],{"type":11,"tag":1093,"props":1094,"children":1096},"a",{"href":1095},"\u002Fdocs\u002Fadr\u002F0005-three-theme-palette",[1097],{"type":17,"value":1098},"ADR 0005",{"type":17,"value":1100}," — the three-theme system this extends",{"type":11,"tag":23,"props":1102,"children":1103},{},[1104,1110],{"type":11,"tag":1093,"props":1105,"children":1107},{"href":1106},"\u002Fdocs\u002Fadr\u002F0009-bi-design-system-source-of-truth",[1108],{"type":17,"value":1109},"ADR 0009",{"type":17,"value":1111}," — tti-ux as the single\nsource of truth for TTI's visual identity, including the BI surface; this ADR\nis that principle applied to a consumer that would otherwise have forked",{"type":11,"tag":23,"props":1113,"children":1114},{},[1115,1125],{"type":11,"tag":1093,"props":1116,"children":1118},{"href":1117},"\u002Fdesign\u002Fpalette",[1119],{"type":11,"tag":56,"props":1120,"children":1122},{"className":1121},[],[1123],{"type":17,"value":1124},"design\u002Fpalette.md",{"type":17,"value":1126}," — palette doctrine",{"type":11,"tag":23,"props":1128,"children":1129},{},[1130,1135,1137,1143],{"type":11,"tag":56,"props":1131,"children":1133},{"className":1132},[],[1134],{"type":17,"value":142},{"type":17,"value":1136}," — the first consumer; its ",{"type":11,"tag":56,"props":1138,"children":1140},{"className":1139},[],[1141],{"type":17,"value":1142},"docs\u002FCONTRACT.md",{"type":17,"value":1144}," records how the\nramp is applied to stock Nagios Core CGI",{"title":6,"searchDepth":1146,"depth":1146,"links":1147},2,[1148,1149,1155,1160],{"id":47,"depth":1146,"text":50},{"id":231,"depth":1146,"text":234,"children":1150},[1151,1153,1154],{"id":264,"depth":1152,"text":267},3,{"id":573,"depth":1152,"text":576},{"id":718,"depth":1152,"text":721},{"id":874,"depth":1146,"text":877,"children":1156},[1157,1158,1159],{"id":880,"depth":1152,"text":883},{"id":935,"depth":1152,"text":938},{"id":1024,"depth":1152,"text":1027},{"id":1082,"depth":1146,"text":1085},1793301476152]