[{"data":1,"prerenderedAt":1234},["ShallowReactive",2],{"cycle-doc-design-c140-handon-qnative.md":3},{"cycle":4,"project":7,"path":10,"title":11,"toc":12,"ast":19},{"id":5,"title":6},"c140","Surface Evaluation",{"id":8,"label":9},"design","Design","handon-qnative.md","Hand-on to qnative: the QGUIkit cleanup (c140 D14)",[13,14,15,16,17,18],"1 · The crate takes its name (D1, D2)","2 · The four small items (D13)","3 · What leaves the crate, what comes in (D9)","4 · The web's names (D8)","5 · Tokens everywhere, motion added, a lint (D5)","Not in this cycle",{"type":20,"children":21},"root",[22,122,132,138,240,245,497,507,512,716,721,901,906,1163,1173,1178],{"type":23,"tag":24,"props":25,"children":26},"element","p",{},[27,34,36,41,43,48,50,57,59,65,67,73,75,80,82,93,95,105,107,113,115,120],{"type":23,"tag":28,"props":29,"children":30},"strong",{},[31],{"type":32,"value":33},"text","2026-11-12.",{"type":32,"value":35}," ",{"type":23,"tag":28,"props":37,"children":38},{},[39],{"type":32,"value":40},"For:",{"type":32,"value":42}," the qnative cycle that carries c140's code rulings, opened ",{"type":23,"tag":28,"props":44,"children":45},{},[46],{"type":32,"value":47},"after the merge thread is done",{"type":32,"value":49},". Before starting, check that qnative ",{"type":23,"tag":51,"props":52,"children":54},"code",{"className":53},[],[55],{"type":32,"value":56},"main",{"type":32,"value":58}," has the c3, c6 and c7 branches merged (",{"type":23,"tag":51,"props":60,"children":62},{"className":61},[],[63],{"type":32,"value":64},"git branch -a",{"type":32,"value":66},", ",{"type":23,"tag":51,"props":68,"children":70},{"className":69},[],[71],{"type":32,"value":72},"git log",{"type":32,"value":74},"). ",{"type":23,"tag":28,"props":76,"children":77},{},[78],{"type":32,"value":79},"Reads first:",{"type":32,"value":81}," c140's ",{"type":23,"tag":83,"props":84,"children":86},"a",{"href":85},"review-1",[87],{"type":23,"tag":51,"props":88,"children":90},{"className":89},[],[91],{"type":32,"value":92},"review-1.md",{"type":32,"value":94}," § Ruled, ",{"type":23,"tag":83,"props":96,"children":98},{"href":97},"findings",[99],{"type":23,"tag":51,"props":100,"children":102},{"className":101},[],[103],{"type":32,"value":104},"findings.md",{"type":32,"value":106},", and the evidence on ",{"type":23,"tag":83,"props":108,"children":110},{"href":109},"\u002Fcycles\u002Fdesign\u002Fc140\u002Fscorecard",[111],{"type":32,"value":112},"Two Surfaces, Scored",{"type":32,"value":114},". ",{"type":23,"tag":28,"props":116,"children":117},{},[118],{"type":32,"value":119},"Read at:",{"type":32,"value":121}," qnative e609f42. Re-read any line number below at the merged head.",{"type":23,"tag":24,"props":123,"children":124},{},[125,130],{"type":23,"tag":28,"props":126,"children":127},{},[128],{"type":32,"value":129},"What it is.",{"type":32,"value":131}," The design rulings of 2026-11-12, in Mark's order (D14). There are five steps, with a review stop after step 2 and at the end. Design is the driver; the rulings are not reopened here.",{"type":23,"tag":133,"props":134,"children":136},"h2",{"id":135},"_1-the-crate-takes-its-name-d1-d2",[137],{"type":32,"value":13},{"type":23,"tag":139,"props":140,"children":141},"ul",{},[142,201,222,235],{"type":23,"tag":143,"props":144,"children":145},"li",{},[146,152,154,160,162,168,170,176,178,184,185,191,193,199],{"type":23,"tag":51,"props":147,"children":149},{"className":148},[],[150],{"type":32,"value":151},"crates\u002Flayer",{"type":32,"value":153}," → ",{"type":23,"tag":51,"props":155,"children":157},{"className":156},[],[158],{"type":32,"value":159},"crates\u002Fqguikit",{"type":32,"value":161},". Update the workspace ",{"type":23,"tag":51,"props":163,"children":165},{"className":164},[],[166],{"type":32,"value":167},"Cargo.toml",{"type":32,"value":169}," and every ",{"type":23,"tag":51,"props":171,"children":173},{"className":172},[],[174],{"type":32,"value":175},"use layer::",{"type":32,"value":177}," in ",{"type":23,"tag":51,"props":179,"children":181},{"className":180},[],[182],{"type":32,"value":183},"app",{"type":32,"value":66},{"type":23,"tag":51,"props":186,"children":188},{"className":187},[],[189],{"type":32,"value":190},"stories",{"type":32,"value":192}," and ",{"type":23,"tag":51,"props":194,"children":196},{"className":195},[],[197],{"type":32,"value":198},"devmode",{"type":32,"value":200},".",{"type":23,"tag":143,"props":202,"children":203},{},[204,206,212,214,220],{"type":32,"value":205},"The crate's doc comment (",{"type":23,"tag":51,"props":207,"children":209},{"className":208},[],[210],{"type":32,"value":211},"lib.rs",{"type":32,"value":213},") says QGUIkit is our component library: GPUI Kit draws the shell, GPUI is the framework, and Vue is the other surface (design ",{"type":23,"tag":51,"props":215,"children":217},{"className":216},[],[218],{"type":32,"value":219},"brand\u002Fglossary.md",{"type":32,"value":221},", Surface).",{"type":23,"tag":143,"props":223,"children":224},{},[225,227,233],{"type":32,"value":226},"CLAUDE.md, the README and ",{"type":23,"tag":51,"props":228,"children":230},{"className":229},[],[231],{"type":32,"value":232},"\u002Fgpui-story",{"type":32,"value":234},"'s paths follow.",{"type":23,"tag":143,"props":236,"children":237},{},[238],{"type":32,"value":239},"The app's name stays provisional (c0). QGUIkit is the library's name, not the app's.",{"type":23,"tag":133,"props":241,"children":243},{"id":242},"_2-the-four-small-items-d13",[244],{"type":32,"value":14},{"type":23,"tag":246,"props":247,"children":248},"ol",{},[249,275,332,447],{"type":23,"tag":143,"props":250,"children":251},{},[252,257,259,265,267,273],{"type":23,"tag":28,"props":253,"children":254},{},[255],{"type":32,"value":256},"The specs.",{"type":32,"value":258}," Copy ",{"type":23,"tag":51,"props":260,"children":262},{"className":261},[],[263],{"type":32,"value":264},"..\u002Fdesign\u002Fcycles\u002Fc140.surface-evaluation\u002Frescued-specs\u002Fspec-*.md",{"type":32,"value":266}," (ten files, about 400 KB) into ",{"type":23,"tag":51,"props":268,"children":270},{"className":269},[],[271],{"type":32,"value":272},"cycles\u002Fc2.expressive-range\u002Fspecs\u002F",{"type":32,"value":274}," and commit them. Point c2's CYCLE.md \"A spec first\" lines at them. Leave design's copy until c140 closes.",{"type":23,"tag":143,"props":276,"children":277},{},[278,283,285,291,293,299,300,306,308,314,316,322,324,330],{"type":23,"tag":28,"props":279,"children":280},{},[281],{"type":32,"value":282},"The bridge fixture.",{"type":32,"value":284}," Copy qnative c4's ",{"type":23,"tag":51,"props":286,"children":288},{"className":287},[],[289],{"type":32,"value":290},"it_contact",{"type":32,"value":292}," (",{"type":23,"tag":51,"props":294,"children":296},{"className":295},[],[297],{"type":32,"value":298},"crates\u002Ffixtures\u002Fbridge\u002Fpilot.json",{"type":32,"value":66},{"type":23,"tag":51,"props":301,"children":303},{"className":302},[],[304],{"type":32,"value":305},"crates\u002Ftypes\u002Fsrc\u002Fbridge.rs:62",{"type":32,"value":307},") into design's ",{"type":23,"tag":51,"props":309,"children":311},{"className":310},[],[312],{"type":32,"value":313},"app\u002Fdata\u002Fworlds\u002Fbridge\u002Fpilot.json",{"type":32,"value":315}," and its ",{"type":23,"tag":51,"props":317,"children":319},{"className":318},[],[320],{"type":32,"value":321},"types.ts",{"type":32,"value":323},", so ",{"type":23,"tag":51,"props":325,"children":327},{"className":326},[],[328],{"type":32,"value":329},"sync-bridge.sh",{"type":32,"value":331}," cannot delete it. Then decide which repo is the bridge's source and say it in both READMEs.",{"type":23,"tag":143,"props":333,"children":334},{},[335,340],{"type":23,"tag":28,"props":336,"children":337},{},[338],{"type":32,"value":339},"Six flaws, one commit:",{"type":23,"tag":139,"props":341,"children":342},{},[343,369,388,407,425,436],{"type":23,"tag":143,"props":344,"children":345},{},[346,352,354,360,362,368],{"type":23,"tag":51,"props":347,"children":349},{"className":348},[],[350],{"type":32,"value":351},"app\u002Fsrc\u002Fpages\u002Fharness.rs:280",{"type":32,"value":353},": the Skills table's ",{"type":23,"tag":51,"props":355,"children":357},{"className":356},[],[358],{"type":32,"value":359},".qp(\"mcp.tool\").sticky_top(…)",{"type":32,"value":361}," is a copy from the table above; keep one ",{"type":23,"tag":51,"props":363,"children":365},{"className":364},[],[366],{"type":32,"value":367},".qp(\"harness.skill\")",{"type":32,"value":200},{"type":23,"tag":143,"props":370,"children":371},{},[372,378,380,386],{"type":23,"tag":51,"props":373,"children":375},{"className":374},[],[376],{"type":32,"value":377},"layer\u002Fsrc\u002Ftable.rs:734",{"type":32,"value":379},": the empty box's ",{"type":23,"tag":51,"props":381,"children":383},{"className":382},[],[384],{"type":32,"value":385},"rgb(0xE8E8E8)",{"type":32,"value":387}," → a role, so it themes in dark mode.",{"type":23,"tag":143,"props":389,"children":390},{},[391,397,399,405],{"type":23,"tag":51,"props":392,"children":394},{"className":393},[],[395],{"type":32,"value":396},"app\u002Fsrc\u002Fpages\u002Faccount.rs:119",{"type":32,"value":398},": ",{"type":23,"tag":51,"props":400,"children":402},{"className":401},[],[403],{"type":32,"value":404},"GRAPE_500",{"type":32,"value":406}," on hover → the role, as dark mode wants GRAPE_400.",{"type":23,"tag":143,"props":408,"children":409},{},[410,416,417,423],{"type":23,"tag":51,"props":411,"children":413},{"className":412},[],[414],{"type":32,"value":415},"app\u002Fsrc\u002Fpages\u002Finbox.rs:53–55",{"type":32,"value":398},{"type":23,"tag":51,"props":418,"children":420},{"className":419},[],[421],{"type":32,"value":422},"unwrap_or_default()",{"type":32,"value":424}," on the store reads draws an SQLite error as \"Nothing yet\". Draw the failed state instead.",{"type":23,"tag":143,"props":426,"children":427},{},[428,434],{"type":23,"tag":51,"props":429,"children":431},{"className":430},[],[432],{"type":32,"value":433},"app\u002Fsrc\u002Fpages\u002Fsensor.rs",{"type":32,"value":435}," (around 160–170): cycle ids (\"design c132 D10\", \"c131 D17\") in UI copy. Say what the person needs; keep the ids in comments.",{"type":23,"tag":143,"props":437,"children":438},{},[439,445],{"type":23,"tag":51,"props":440,"children":442},{"className":441},[],[443],{"type":32,"value":444},"layer\u002Fsrc\u002Fscorecard.rs:82, 84",{"type":32,"value":446},": the two stale rows (the sticky header and the expand row's keyboard, both built by D19). Add a row for DataHistoryGraph (c5).",{"type":23,"tag":143,"props":448,"children":449},{},[450,455,457,463,465,471,473,479,481,487,489,495],{"type":23,"tag":28,"props":451,"children":452},{},[453],{"type":32,"value":454},"The token drift check.",{"type":32,"value":456}," Add ",{"type":23,"tag":51,"props":458,"children":460},{"className":459},[],[461],{"type":32,"value":462},"--check",{"type":32,"value":464}," to ",{"type":23,"tag":51,"props":466,"children":468},{"className":467},[],[469],{"type":32,"value":470},"..\u002Fdesign\u002Fscripts\u002Ftokens-to-kit.mjs",{"type":32,"value":472},": build both outputs in memory and fail on a diff, against the layer at the tag stamped in ",{"type":23,"tag":51,"props":474,"children":476},{"className":475},[],[477],{"type":32,"value":478},"tokens.rs",{"type":32,"value":480},". Add a CI step in ",{"type":23,"tag":51,"props":482,"children":484},{"className":483},[],[485],{"type":32,"value":486},".github\u002Fworkflows\u002Fbuild.yml",{"type":32,"value":488}," that checks out ",{"type":23,"tag":51,"props":490,"children":492},{"className":491},[],[493],{"type":32,"value":494},"q-nuxt-layer",{"type":32,"value":496}," at that tag. The read-only comparison c140's token reader wrote is a starting point. It was in a session scratchpad, so write it again if it's gone.",{"type":23,"tag":24,"props":498,"children":499},{},[500,505],{"type":23,"tag":28,"props":501,"children":502},{},[503],{"type":32,"value":504},"Review stop 1",{"type":32,"value":506}," after step 2: the commits, CI on three systems, and anything step 1 broke.",{"type":23,"tag":133,"props":508,"children":510},{"id":509},"_3-what-leaves-the-crate-what-comes-in-d9",[511],{"type":32,"value":15},{"type":23,"tag":139,"props":513,"children":514},{},[515,583,608,662],{"type":23,"tag":143,"props":516,"children":517},{},[518,523],{"type":23,"tag":28,"props":519,"children":520},{},[521],{"type":32,"value":522},"Out:",{"type":23,"tag":139,"props":524,"children":525},{},[526,554],{"type":23,"tag":143,"props":527,"children":528},{},[529,531,537,539,544,546,552],{"type":32,"value":530},"The tour engine (",{"type":23,"tag":51,"props":532,"children":534},{"className":533},[],[535],{"type":32,"value":536},"tour.rs",{"type":32,"value":538},": the registry, the overlay, the glide) moves to its own crate or an ",{"type":23,"tag":51,"props":540,"children":542},{"className":541},[],[543],{"type":32,"value":183},{"type":32,"value":545}," module. ",{"type":23,"tag":51,"props":547,"children":549},{"className":548},[],[550],{"type":32,"value":551},".qp_id()",{"type":32,"value":553}," stays a thin trait the components call.",{"type":23,"tag":143,"props":555,"children":556},{},[557,559,565,567,573,575,581],{"type":32,"value":558},"The 17-entry harness registry and its alias resolver (",{"type":23,"tag":51,"props":560,"children":562},{"className":561},[],[563],{"type":32,"value":564},"ux.rs:235–269",{"type":32,"value":566},") and ",{"type":23,"tag":51,"props":568,"children":570},{"className":569},[],[571],{"type":32,"value":572},"workspace_mark",{"type":32,"value":574},"'s git-remote parser (",{"type":23,"tag":51,"props":576,"children":578},{"className":577},[],[579],{"type":32,"value":580},"data\u002Fsurface.rs:81",{"type":32,"value":582},") move into the app's data.",{"type":23,"tag":143,"props":584,"children":585},{},[586,591,592,598,600,606],{"type":23,"tag":28,"props":587,"children":588},{},[589],{"type":32,"value":590},"The doc pages:",{"type":32,"value":35},{"type":23,"tag":51,"props":593,"children":595},{"className":594},[],[596],{"type":32,"value":597},"pub mod demos",{"type":32,"value":599}," (2,364 lines) moves to a docs crate, which devmode and stories depend on. The component crate ships no docs (design ",{"type":23,"tag":51,"props":601,"children":603},{"className":602},[],[604],{"type":32,"value":605},"component_philosophy.md",{"type":32,"value":607}," § Documentation architecture).",{"type":23,"tag":143,"props":609,"children":610},{},[611,616,617,623,624,630,631,637,639,645,646,652,654,660],{"type":23,"tag":28,"props":612,"children":613},{},[614],{"type":32,"value":615},"In, from the pages:",{"type":32,"value":35},{"type":23,"tag":51,"props":618,"children":620},{"className":619},[],[621],{"type":32,"value":622},"section()",{"type":32,"value":192},{"type":23,"tag":51,"props":625,"children":627},{"className":626},[],[628],{"type":32,"value":629},"failed()",{"type":32,"value":292},{"type":23,"tag":51,"props":632,"children":634},{"className":633},[],[635],{"type":32,"value":636},"pages\u002Fmod.rs",{"type":32,"value":638},"), ",{"type":23,"tag":51,"props":640,"children":642},{"className":641},[],[643],{"type":32,"value":644},"absence_box",{"type":32,"value":66},{"type":23,"tag":51,"props":647,"children":649},{"className":648},[],[650],{"type":32,"value":651},"severity_pill",{"type":32,"value":653}," (inbox), ",{"type":23,"tag":51,"props":655,"children":657},{"className":656},[],[658],{"type":32,"value":659},"outcome_tag",{"type":32,"value":661}," (tools), the lede (copied into seven detail pages), the primary text link (three copies). Each gets a doc page and a scorecard row.",{"type":23,"tag":143,"props":663,"children":664},{},[665,670,671,677,678,684,685,691,692,698,700,706,708,714],{"type":23,"tag":28,"props":666,"children":667},{},[668],{"type":32,"value":669},"Helpers:",{"type":32,"value":35},{"type":23,"tag":51,"props":672,"children":674},{"className":673},[],[675],{"type":32,"value":676},"pct",{"type":32,"value":66},{"type":23,"tag":51,"props":679,"children":681},{"className":680},[],[682],{"type":32,"value":683},"short",{"type":32,"value":66},{"type":23,"tag":51,"props":686,"children":688},{"className":687},[],[689],{"type":32,"value":690},"plural",{"type":32,"value":66},{"type":23,"tag":51,"props":693,"children":695},{"className":694},[],[696],{"type":32,"value":697},"short_date",{"type":32,"value":699}," and skill.rs's ",{"type":23,"tag":51,"props":701,"children":703},{"className":702},[],[704],{"type":32,"value":705},"bytes",{"type":32,"value":707}," move into ",{"type":23,"tag":51,"props":709,"children":711},{"className":710},[],[712],{"type":32,"value":713},"qguikit::data::format",{"type":32,"value":715},". There should be one of each.",{"type":23,"tag":133,"props":717,"children":719},{"id":718},"_4-the-webs-names-d8",[720],{"type":32,"value":16},{"type":23,"tag":139,"props":722,"children":723},{},[724,875,888],{"type":23,"tag":143,"props":725,"children":726},{},[727,729,735,736,742,744,861,865,867,873],{"type":32,"value":728},"Every QGUIkit component takes its Vue name, with the ",{"type":23,"tag":51,"props":730,"children":732},{"className":731},[],[733],{"type":32,"value":734},"Data",{"type":32,"value":192},{"type":23,"tag":51,"props":737,"children":739},{"className":738},[],[740],{"type":32,"value":741},"Ux",{"type":32,"value":743}," prefixes. For example:",{"type":23,"tag":139,"props":745,"children":746},{},[747,763,779,795,811,827,845],{"type":23,"tag":143,"props":748,"children":749},{},[750,756,757],{"type":23,"tag":51,"props":751,"children":753},{"className":752},[],[754],{"type":32,"value":755},"RankedBars",{"type":32,"value":153},{"type":23,"tag":51,"props":758,"children":760},{"className":759},[],[761],{"type":32,"value":762},"DataRankedBars",{"type":23,"tag":143,"props":764,"children":765},{},[766,772,773],{"type":23,"tag":51,"props":767,"children":769},{"className":768},[],[770],{"type":32,"value":771},"SegmentBar",{"type":32,"value":153},{"type":23,"tag":51,"props":774,"children":776},{"className":775},[],[777],{"type":32,"value":778},"DataSegmentBar",{"type":23,"tag":143,"props":780,"children":781},{},[782,788,789],{"type":23,"tag":51,"props":783,"children":785},{"className":784},[],[786],{"type":32,"value":787},"DonutChart",{"type":32,"value":153},{"type":23,"tag":51,"props":790,"children":792},{"className":791},[],[793],{"type":32,"value":794},"DataDonutChart",{"type":23,"tag":143,"props":796,"children":797},{},[798,804,805],{"type":23,"tag":51,"props":799,"children":801},{"className":800},[],[802],{"type":32,"value":803},"SurfacePanel",{"type":32,"value":153},{"type":23,"tag":51,"props":806,"children":808},{"className":807},[],[809],{"type":32,"value":810},"DataSurfacePanel",{"type":23,"tag":143,"props":812,"children":813},{},[814,820,821],{"type":23,"tag":51,"props":815,"children":817},{"className":816},[],[818],{"type":32,"value":819},"MetricValue",{"type":32,"value":153},{"type":23,"tag":51,"props":822,"children":824},{"className":823},[],[825],{"type":32,"value":826},"DataMetricValue",{"type":23,"tag":143,"props":828,"children":829},{},[830,836,837,843],{"type":23,"tag":51,"props":831,"children":833},{"className":832},[],[834],{"type":32,"value":835},"stroke_button()",{"type":32,"value":153},{"type":23,"tag":51,"props":838,"children":840},{"className":839},[],[841],{"type":32,"value":842},"UxButton",{"type":32,"value":844}," with its stroke variant",{"type":23,"tag":143,"props":846,"children":847},{},[848,854,855],{"type":23,"tag":51,"props":849,"children":851},{"className":850},[],[852],{"type":32,"value":853},"tab_group()",{"type":32,"value":153},{"type":23,"tag":51,"props":856,"children":858},{"className":857},[],[859],{"type":32,"value":860},"UxTabGroup",{"type":23,"tag":862,"props":863,"children":864},"br",{},[],{"type":32,"value":866},"The full list comes from the scorecard's ",{"type":23,"tag":51,"props":868,"children":870},{"className":869},[],[871],{"type":32,"value":872},"web",{"type":32,"value":874}," column.",{"type":23,"tag":143,"props":876,"children":877},{},[878,880,886],{"type":32,"value":879},"Keep a ",{"type":23,"tag":51,"props":881,"children":883},{"className":882},[],[884],{"type":32,"value":885},"#[deprecated]",{"type":32,"value":887}," alias per old name for one release.",{"type":23,"tag":143,"props":889,"children":890},{},[891,893,899],{"type":32,"value":892},"The scorecard gets a ",{"type":23,"tag":51,"props":894,"children":896},{"className":895},[],[897],{"type":32,"value":898},"rust",{"type":32,"value":900}," column so the map is a lookup.",{"type":23,"tag":133,"props":902,"children":904},{"id":903},"_5-tokens-everywhere-motion-added-a-lint-d5",[905],{"type":32,"value":17},{"type":23,"tag":139,"props":907,"children":908},{},[909,954,979,1029,1103],{"type":23,"tag":143,"props":910,"children":911},{},[912,917],{"type":23,"tag":28,"props":913,"children":914},{},[915],{"type":32,"value":916},"Type:",{"type":23,"tag":139,"props":918,"children":919},{},[920,949],{"type":23,"tag":143,"props":921,"children":922},{},[923,925,931,933,939,941,947],{"type":32,"value":924},"433 ",{"type":23,"tag":51,"props":926,"children":928},{"className":927},[],[929],{"type":32,"value":930},"text_size(px(literal))",{"type":32,"value":932}," and 156 ",{"type":23,"tag":51,"props":934,"children":936},{"className":935},[],[937],{"type":32,"value":938},"line_height(px(literal))",{"type":32,"value":940}," become the ",{"type":23,"tag":51,"props":942,"children":944},{"className":943},[],[945],{"type":32,"value":946},"text::T*",{"type":32,"value":948}," pairs, as devmode already does.",{"type":23,"tag":143,"props":950,"children":951},{},[952],{"type":32,"value":953},"The off-scale values (px 10, 12.8; line heights 22.75, 24.375, 47.5) are decided one by one: fold each to a step, or ask design for one.",{"type":23,"tag":143,"props":955,"children":956},{},[957,962,964,970,972,978],{"type":23,"tag":28,"props":958,"children":959},{},[960],{"type":32,"value":961},"Radius:",{"type":32,"value":963}," 52 ",{"type":23,"tag":51,"props":965,"children":967},{"className":966},[],[968],{"type":32,"value":969},"rounded(px(literal))",{"type":32,"value":971}," become ",{"type":23,"tag":51,"props":973,"children":975},{"className":974},[],[976],{"type":32,"value":977},"radius::R*",{"type":32,"value":200},{"type":23,"tag":143,"props":980,"children":981},{},[982,987],{"type":23,"tag":28,"props":983,"children":984},{},[985],{"type":32,"value":986},"Colour leftovers:",{"type":23,"tag":139,"props":988,"children":989},{},[990,1003,1008],{"type":23,"tag":143,"props":991,"children":992},{},[993,995,1001],{"type":32,"value":994},"the 14 hex literals (six of them off the palette: give the tour's ",{"type":23,"tag":51,"props":996,"children":998},{"className":997},[],[999],{"type":32,"value":1000},"0x0099FF",{"type":32,"value":1002}," a role);",{"type":23,"tag":143,"props":1004,"children":1005},{},[1006],{"type":32,"value":1007},"the 14 raw palette constants that do not theme;",{"type":23,"tag":143,"props":1009,"children":1010},{},[1011,1013,1019,1021,1027],{"type":32,"value":1012},"the 51 ",{"type":23,"tag":51,"props":1014,"children":1016},{"className":1015},[],[1017],{"type":32,"value":1018},".opacity()",{"type":32,"value":1020}," calls → ",{"type":23,"tag":51,"props":1022,"children":1024},{"className":1023},[],[1025],{"type":32,"value":1026},"qp_alpha",{"type":32,"value":1028}," where it is meant.",{"type":23,"tag":143,"props":1030,"children":1031},{},[1032,1037],{"type":23,"tag":28,"props":1033,"children":1034},{},[1035],{"type":32,"value":1036},"Motion (all three repos):",{"type":23,"tag":139,"props":1038,"children":1039},{},[1040,1053,1064,1091],{"type":23,"tag":143,"props":1041,"children":1042},{},[1043,1045,1051],{"type":32,"value":1044},"Add tokens to the layer's ",{"type":23,"tag":51,"props":1046,"children":1048},{"className":1047},[],[1049],{"type":32,"value":1050},"tokens.json",{"type":32,"value":1052},": fast, base, slow and the one easing.",{"type":23,"tag":143,"props":1054,"children":1055},{},[1056,1058,1063],{"type":32,"value":1057},"The bridge emits them to ",{"type":23,"tag":51,"props":1059,"children":1061},{"className":1060},[],[1062],{"type":32,"value":478},{"type":32,"value":200},{"type":23,"tag":143,"props":1065,"children":1066},{},[1067,1069,1075,1076,1082,1084,1090],{"type":32,"value":1068},"Replace the table's ",{"type":23,"tag":51,"props":1070,"children":1072},{"className":1071},[],[1073],{"type":32,"value":1074},"BORN_FADE",{"type":32,"value":192},{"type":23,"tag":51,"props":1077,"children":1079},{"className":1078},[],[1080],{"type":32,"value":1081},"GROW_MS",{"type":32,"value":1083}," and the duplicate ",{"type":23,"tag":51,"props":1085,"children":1087},{"className":1086},[],[1088],{"type":32,"value":1089},"ease_in_out_quint",{"type":32,"value":200},{"type":23,"tag":143,"props":1092,"children":1093},{},[1094,1096,1101],{"type":32,"value":1095},"Design rewrites ",{"type":23,"tag":51,"props":1097,"children":1099},{"className":1098},[],[1100],{"type":32,"value":605},{"type":32,"value":1102},"'s 200 \u002F 500 ms rule to what the web does (it uses 300 ms most).",{"type":23,"tag":143,"props":1104,"children":1105},{},[1106,1111,1113],{"type":23,"tag":28,"props":1107,"children":1108},{},[1109],{"type":32,"value":1110},"The lint",{"type":32,"value":1112}," (a script in CI) refuses:\n",{"type":23,"tag":139,"props":1114,"children":1115},{},[1116,1128,1138,1148,1153],{"type":23,"tag":143,"props":1117,"children":1118},{},[1119,1121,1126],{"type":32,"value":1120},"hex outside ",{"type":23,"tag":51,"props":1122,"children":1124},{"className":1123},[],[1125],{"type":32,"value":478},{"type":32,"value":1127},";",{"type":23,"tag":143,"props":1129,"children":1130},{},[1131,1137],{"type":23,"tag":51,"props":1132,"children":1134},{"className":1133},[],[1135],{"type":32,"value":1136},"text_size(px(\u003Cliteral>))",{"type":32,"value":1127},{"type":23,"tag":143,"props":1139,"children":1140},{},[1141,1147],{"type":23,"tag":51,"props":1142,"children":1144},{"className":1143},[],[1145],{"type":32,"value":1146},"rounded(px(\u003Cliteral>))",{"type":32,"value":1127},{"type":23,"tag":143,"props":1149,"children":1150},{},[1151],{"type":32,"value":1152},"cycle ids in UI strings;",{"type":23,"tag":143,"props":1154,"children":1155},{},[1156,1161],{"type":23,"tag":51,"props":1157,"children":1159},{"className":1158},[],[1160],{"type":32,"value":422},{"type":32,"value":1162}," on store reads.",{"type":23,"tag":24,"props":1164,"children":1165},{},[1166,1171],{"type":23,"tag":28,"props":1167,"children":1168},{},[1169],{"type":32,"value":1170},"Review stop 2",{"type":32,"value":1172}," at the end: the budget with strobe, against c2's readings (the rename and moves should cost nothing); captures per world compared with the atlas; the calls.",{"type":23,"tag":133,"props":1174,"children":1176},{"id":1175},"not-in-this-cycle",[1177],{"type":32,"value":18},{"type":23,"tag":139,"props":1179,"children":1180},{},[1181,1191,1201,1211],{"type":23,"tag":143,"props":1182,"children":1183},{},[1184,1189],{"type":23,"tag":28,"props":1185,"children":1186},{},[1187],{"type":32,"value":1188},"The slot equivalents (D6):",{"type":32,"value":1190}," named in the docs now; the APIs change when a component is next touched.",{"type":23,"tag":143,"props":1192,"children":1193},{},[1194,1199],{"type":23,"tag":28,"props":1195,"children":1196},{},[1197],{"type":32,"value":1198},"Keyboard and focus (D7):",{"type":32,"value":1200}," after V1 ships.",{"type":23,"tag":143,"props":1202,"children":1203},{},[1204,1209],{"type":23,"tag":28,"props":1205,"children":1206},{},[1207],{"type":32,"value":1208},"The parity register and the Surfaces panels (D3, D10):",{"type":32,"value":1210}," design c141.",{"type":23,"tag":143,"props":1212,"children":1213},{},[1214,1232],{"type":23,"tag":28,"props":1215,"children":1216},{},[1217,1223,1224,1230],{"type":23,"tag":51,"props":1218,"children":1220},{"className":1219},[],[1221],{"type":32,"value":1222},"\u002Fnative-port",{"type":32,"value":192},{"type":23,"tag":51,"props":1225,"children":1227},{"className":1226},[],[1228],{"type":32,"value":1229},"spec-measure",{"type":32,"value":1231}," (D11):",{"type":32,"value":1233}," design's skill and script. If they land first, use them here.",1794599292079]