[{"data":1,"prerenderedAt":4754},["ShallowReactive",2],{"design-doc:roadmap":3},{"data":4,"body":7,"toc":4701},{"title":5,"description":6},"tux roadmap","What's missing from tti-ux today, ordered by impact. Adapted from the\naggieux batch-roadmap (which was React\u002FJSX-specific) into a Vue +\nNuxt-shaped backlog. Each entry lists a working name, what it covers,\nand any shipped neighbors that already partly fill the gap.",{"type":8,"children":9},"root",[10,18,23,81,85,92,97,104,109,176,182,232,238,265,384,404,407,413,419,432,555,561,566,621,624,630,636,745,751,756,838,841,847,853,904,910,1042,1045,1051,1057,1078,1156,1168,1189,1231,1234,1240,1245,1394,1397,1403,1415,1421,1426,1533,1539,1544,1612,1618,1623,1674,1680,1685,1769,1775,1780,1869,1875,1914,1920,1936,1942,1947,2009,2012,2024,2032,2053,2061,2123,2131,2192,2200,2223,2231,2274,2280,2338,2344,2349,2442,2469,2472,2478,2495,2501,2630,2636,2773,2779,2917,2923,2939,2983,2988,2993,3052,3062,3084,3284,3301,3451,3454,3460,3479,3487,3558,3568,3657,3665,3689,3721,3724,3730,3781,4097,4102,4107,4186,4189,4195,4200,4210,4279,4296,4401,4493,4553,4556,4562,4567,4577,4616,4626,4696],{"type":11,"tag":12,"props":13,"children":15},"element","h1",{"id":14},"tux-roadmap",[16],{"type":17,"value":5},"text",{"type":11,"tag":19,"props":20,"children":21},"p",{},[22],{"type":17,"value":6},{"type":11,"tag":19,"props":24,"children":25},{},[26,28,40,42,48,50,59,61,67,69,79],{"type":17,"value":27},"When you ship one, register it in\n",{"type":11,"tag":29,"props":30,"children":32},"a",{"href":31},"..\u002Fapp\u002Futils\u002FtuxCatalog.ts",[33],{"type":11,"tag":34,"props":35,"children":37},"code",{"className":36},[],[38],{"type":17,"value":39},"app\u002Futils\u002FtuxCatalog.ts",{"type":17,"value":41}," (which drives the\nsidebar nav, the ",{"type":11,"tag":34,"props":43,"children":45},{"className":44},[],[46],{"type":17,"value":47},"\u002Fcomponents",{"type":17,"value":49}," index grid, and the homepage count) and add\na row to the doctrine table in ",{"type":11,"tag":29,"props":51,"children":53},{"href":52},"components.md",[54],{"type":11,"tag":34,"props":55,"children":57},{"className":56},[],[58],{"type":17,"value":52},{"type":17,"value":60},".\n",{"type":11,"tag":34,"props":62,"children":64},{"className":63},[],[65],{"type":17,"value":66},"tests\u002Ftux-catalog.test.ts",{"type":17,"value":68}," fails CI until both agree with the filesystem.\nUpdate ",{"type":11,"tag":29,"props":70,"children":72},{"href":71},"..\u002FCHANGELOG.md",[73],{"type":11,"tag":34,"props":74,"children":76},{"className":75},[],[77],{"type":17,"value":78},"CHANGELOG.md",{"type":17,"value":80}," under Unreleased.",{"type":11,"tag":82,"props":83,"children":84},"hr",{},[],{"type":11,"tag":86,"props":87,"children":89},"h2",{"id":88},"priority-a-high-value-system-level-closed-2026-04-29",[90],{"type":17,"value":91},"Priority A — High-value system-level — ✅ closed 2026-04-29",{"type":11,"tag":19,"props":93,"children":94},{},[95],{"type":17,"value":96},"All three sub-families shipped in one batch. See CHANGELOG\n\"Priority A roadmap batch (2026-04-29)\" for the full inventory.",{"type":11,"tag":98,"props":99,"children":101},"h3",{"id":100},"status-states-shipped",[102],{"type":17,"value":103},"Status states — ✅ shipped",{"type":11,"tag":19,"props":105,"children":106},{},[107],{"type":17,"value":108},"The \"what shows when nothing's there \u002F something broke \u002F something's\nloading\" family. Closes a real product gap.",{"type":11,"tag":110,"props":111,"children":112},"ul",{},[113,129,142,163],{"type":11,"tag":114,"props":115,"children":116},"li",{},[117,127],{"type":11,"tag":118,"props":119,"children":120},"del",{},[121],{"type":11,"tag":122,"props":123,"children":124},"strong",{},[125],{"type":17,"value":126},"TuxEmptyState",{"type":17,"value":128}," — shipped (no-data placeholder).",{"type":11,"tag":114,"props":130,"children":131},{},[132,140],{"type":11,"tag":118,"props":133,"children":134},{},[135],{"type":11,"tag":122,"props":136,"children":137},{},[138],{"type":17,"value":139},"TuxErrorPage",{"type":17,"value":141}," — shipped 2026-04-29; 404 \u002F 500 \u002F 403 \u002F 503\ntemplates with editorial header + recovery actions.",{"type":11,"tag":114,"props":143,"children":144},{},[145,153,155,161],{"type":11,"tag":118,"props":146,"children":147},{},[148],{"type":11,"tag":122,"props":149,"children":150},{},[151],{"type":17,"value":152},"TuxSkeleton",{"type":17,"value":154}," — shipped 2026-04-29; shimmer \u002F pulse \u002F never\nmodes; six composed presets; honors ",{"type":11,"tag":34,"props":156,"children":158},{"className":157},[],[159],{"type":17,"value":160},"prefers-reduced-motion",{"type":17,"value":162},".",{"type":11,"tag":114,"props":164,"children":165},{},[166,174],{"type":11,"tag":118,"props":167,"children":168},{},[169],{"type":11,"tag":122,"props":170,"children":171},{},[172],{"type":17,"value":173},"TuxStepper",{"type":17,"value":175}," — shipped 2026-04-29; numbered-circle indicator,\nhorizontal\u002Fvertical with container-query collapse, error-status\noverride per step.",{"type":11,"tag":98,"props":177,"children":179},{"id":178},"banners-tags-shipped",[180],{"type":17,"value":181},"Banners & tags — ✅ shipped",{"type":11,"tag":110,"props":183,"children":184},{},[185,206,219],{"type":11,"tag":114,"props":186,"children":187},{},[188,196,198,204],{"type":11,"tag":118,"props":189,"children":190},{},[191],{"type":11,"tag":122,"props":192,"children":193},{},[194],{"type":17,"value":195},"TuxAnnouncementBanner",{"type":17,"value":197}," — shipped 2026-04-29; localStorage-\nbacked dismissal; four tones; ",{"type":11,"tag":34,"props":199,"children":201},{"className":200},[],[202],{"type":17,"value":203},"urgent",{"type":17,"value":205}," reserves the maroon fill.",{"type":11,"tag":114,"props":207,"children":208},{},[209,217],{"type":11,"tag":118,"props":210,"children":211},{},[212],{"type":11,"tag":122,"props":213,"children":214},{},[215],{"type":17,"value":216},"TuxCookieConsent",{"type":17,"value":218}," — shipped 2026-04-29; bottom-right or\nbottom-strip; surface only (host owns categories via slot);\ndecision persisted + emitted.",{"type":11,"tag":114,"props":220,"children":221},{},[222,230],{"type":11,"tag":118,"props":223,"children":224},{},[225],{"type":11,"tag":122,"props":226,"children":227},{},[228],{"type":17,"value":229},"TuxBetaRibbon",{"type":17,"value":231}," — shipped 2026-04-29; corner ribbon · top\nstripe · inline pill; preview\u002Fbeta\u002Fdev tones.",{"type":11,"tag":98,"props":233,"children":235},{"id":234},"form-primitives-reference-shipped",[236],{"type":17,"value":237},"Form primitives reference — ✅ shipped",{"type":11,"tag":19,"props":239,"children":240},{},[241,243,249,251,256,258,263],{"type":17,"value":242},"The roadmap's intent was breaking the inline ",{"type":11,"tag":34,"props":244,"children":246},{"className":245},[],[247],{"type":17,"value":248},"\u002Fforms",{"type":17,"value":250}," catch-all\ninto per-primitive state-matrix pages, ",{"type":11,"tag":122,"props":252,"children":253},{},[254],{"type":17,"value":255},"not",{"type":17,"value":257}," new Tux* wrappers\n(the existing ",{"type":11,"tag":34,"props":259,"children":261},{"className":260},[],[262],{"type":17,"value":248},{"type":17,"value":264}," explicitly stated \"No Tux wrappers here yet\"\nbecause Nuxt UI's form primitives don't need brand deviation). The\nTux*-prefixed names below were renamed at delivery to plain\nsection titles.",{"type":11,"tag":110,"props":266,"children":267},{},[268,288,307,326,345,364],{"type":11,"tag":114,"props":269,"children":270},{},[271,279,281,287],{"type":11,"tag":118,"props":272,"children":273},{},[274],{"type":11,"tag":122,"props":275,"children":276},{},[277],{"type":17,"value":278},"TuxTextField",{"type":17,"value":280}," → ships as ",{"type":11,"tag":29,"props":282,"children":284},{"href":283},"app\u002Fpages\u002Fforms\u002Ftext-field.vue",[285],{"type":17,"value":286},"\u002Fforms\u002Ftext-field",{"type":17,"value":162},{"type":11,"tag":114,"props":289,"children":290},{},[291,299,300,306],{"type":11,"tag":118,"props":292,"children":293},{},[294],{"type":11,"tag":122,"props":295,"children":296},{},[297],{"type":17,"value":298},"TuxSelect",{"type":17,"value":280},{"type":11,"tag":29,"props":301,"children":303},{"href":302},"app\u002Fpages\u002Fforms\u002Fselect.vue",[304],{"type":17,"value":305},"\u002Fforms\u002Fselect",{"type":17,"value":162},{"type":11,"tag":114,"props":308,"children":309},{},[310,318,319,325],{"type":11,"tag":118,"props":311,"children":312},{},[313],{"type":11,"tag":122,"props":314,"children":315},{},[316],{"type":17,"value":317},"TuxChoice",{"type":17,"value":280},{"type":11,"tag":29,"props":320,"children":322},{"href":321},"app\u002Fpages\u002Fforms\u002Fchoice.vue",[323],{"type":17,"value":324},"\u002Fforms\u002Fchoice",{"type":17,"value":162},{"type":11,"tag":114,"props":327,"children":328},{},[329,337,338,344],{"type":11,"tag":118,"props":330,"children":331},{},[332],{"type":11,"tag":122,"props":333,"children":334},{},[335],{"type":17,"value":336},"TuxDatePicker",{"type":17,"value":280},{"type":11,"tag":29,"props":339,"children":341},{"href":340},"app\u002Fpages\u002Fforms\u002Fdate-picker.vue",[342],{"type":17,"value":343},"\u002Fforms\u002Fdate-picker",{"type":17,"value":162},{"type":11,"tag":114,"props":346,"children":347},{},[348,356,357,363],{"type":11,"tag":118,"props":349,"children":350},{},[351],{"type":11,"tag":122,"props":352,"children":353},{},[354],{"type":17,"value":355},"TuxFileUpload",{"type":17,"value":280},{"type":11,"tag":29,"props":358,"children":360},{"href":359},"app\u002Fpages\u002Fforms\u002Ffile-upload.vue",[361],{"type":17,"value":362},"\u002Fforms\u002Ffile-upload",{"type":17,"value":162},{"type":11,"tag":114,"props":365,"children":366},{},[367,375,376,382],{"type":11,"tag":118,"props":368,"children":369},{},[370],{"type":11,"tag":122,"props":371,"children":372},{},[373],{"type":17,"value":374},"TuxInlineValidation",{"type":17,"value":280},{"type":11,"tag":29,"props":377,"children":379},{"href":378},"app\u002Fpages\u002Fforms\u002Finline-validation.vue",[380],{"type":17,"value":381},"\u002Fforms\u002Finline-validation",{"type":17,"value":383}," — masked inputs (phone, NIH grant ID), live character counter, async availability check.",{"type":11,"tag":19,"props":385,"children":386},{},[387,389,395,397,402],{"type":17,"value":388},"The legacy all-in-one form demo lives at\n",{"type":11,"tag":29,"props":390,"children":392},{"href":391},"app\u002Fpages\u002Fforms\u002Fall-in-one.vue",[393],{"type":17,"value":394},"\u002Fforms\u002Fall-in-one",{"type":17,"value":396},"; ",{"type":11,"tag":34,"props":398,"children":400},{"className":399},[],[401],{"type":17,"value":248},{"type":17,"value":403},"\nitself is now a landing tile page.",{"type":11,"tag":82,"props":405,"children":406},{},[],{"type":11,"tag":86,"props":408,"children":410},{"id":409},"priority-b-data-patterns",[411],{"type":17,"value":412},"Priority B — Data patterns",{"type":11,"tag":98,"props":414,"children":416},{"id":415},"charts-data-viz-closed-2026-05-22",[417],{"type":17,"value":418},"Charts & data viz — ✅ closed 2026-05-22",{"type":11,"tag":19,"props":420,"children":421},{},[422,424,430],{"type":17,"value":423},"TTI is a research institute — charting is the most under-served family\nin the catalog. Note: simple cases compose ",{"type":11,"tag":34,"props":425,"children":427},{"className":426},[],[428],{"type":17,"value":429},"TuxVizEmbed",{"type":17,"value":431}," + a Tableau\nor Superset URL. These were for first-class native rendering.",{"type":11,"tag":110,"props":433,"children":434},{},[435,448,461,485,498,530],{"type":11,"tag":114,"props":436,"children":437},{},[438,446],{"type":11,"tag":118,"props":439,"children":440},{},[441],{"type":11,"tag":122,"props":442,"children":443},{},[444],{"type":17,"value":445},"TuxSparkline",{"type":17,"value":447}," — shipped (inline mini trend line, no axes;\npairs with TuxBigStat \u002F TuxFactoid for KPI rows).",{"type":11,"tag":114,"props":449,"children":450},{},[451,459],{"type":11,"tag":118,"props":452,"children":453},{},[454],{"type":11,"tag":122,"props":455,"children":456},{},[457],{"type":17,"value":458},"TuxChartBar",{"type":17,"value":460}," — shipped 2026-05-22; vertical + horizontal,\ngrouped + stacked, comparison overlay for projections-vs-actuals.",{"type":11,"tag":114,"props":462,"children":463},{},[464,472,474,484],{"type":11,"tag":118,"props":465,"children":466},{},[467],{"type":11,"tag":122,"props":468,"children":469},{},[470],{"type":17,"value":471},"TuxChartLine",{"type":17,"value":473}," — shipped 2026-05-21; native SVG single +\nmulti-series, end-of-line value labels (default), optional\nprevious-period dashed overlay, optional confidence band, markers,\nauto-derived screen-reader summary, brush selector. See\n",{"type":11,"tag":29,"props":475,"children":477},{"href":476},"..\u002Fapp\u002Fpages\u002Fvisualizations\u002Fchart-line.vue",[478],{"type":11,"tag":34,"props":479,"children":481},{"className":480},[],[482],{"type":17,"value":483},"\u002Fvisualizations\u002Fchart-line",{"type":17,"value":162},{"type":11,"tag":114,"props":486,"children":487},{},[488,496],{"type":11,"tag":118,"props":489,"children":490},{},[491],{"type":11,"tag":122,"props":492,"children":493},{},[494],{"type":17,"value":495},"TuxChartScatter",{"type":17,"value":497}," — shipped 2026-05-22; bivariate scatter with\nlinear-regression trendline + R², bubble-chart mode via per-point\nsize.",{"type":11,"tag":114,"props":499,"children":500},{},[501,509,511,517,519,529],{"type":11,"tag":118,"props":502,"children":503},{},[504],{"type":11,"tag":122,"props":505,"children":506},{},[507],{"type":17,"value":508},"TuxStatComparison",{"type":17,"value":510}," — shipped 2026-05-21; before\u002Fafter stat\nblock with delta + tone, direct\u002Finvert\u002Fneutral polarity, three\nlayouts (row\u002Fstack\u002Finline). Pairs with ",{"type":11,"tag":34,"props":512,"children":514},{"className":513},[],[515],{"type":17,"value":516},"TuxBigStat",{"type":17,"value":518},". See\n",{"type":11,"tag":29,"props":520,"children":522},{"href":521},"..\u002Fapp\u002Fpages\u002Fcomponents\u002Fstat-comparison.vue",[523],{"type":11,"tag":34,"props":524,"children":526},{"className":525},[],[527],{"type":17,"value":528},"\u002Fcomponents\u002Fstat-comparison",{"type":17,"value":162},{"type":11,"tag":114,"props":531,"children":532},{},[533,541,543,553],{"type":11,"tag":118,"props":534,"children":535},{},[536],{"type":11,"tag":122,"props":537,"children":538},{},[539],{"type":17,"value":540},"chart-foundations doc",{"type":17,"value":542}," — shipped 2026-05-21 as\n",{"type":11,"tag":29,"props":544,"children":546},{"href":545},"chart-foundations.md",[547],{"type":11,"tag":34,"props":548,"children":550},{"className":549},[],[551],{"type":17,"value":552},"design\u002Fchart-foundations.md",{"type":17,"value":554},". Palette,\naxis\u002Fgrid\u002Flegend tokens, in-bar vs above value labels, end-of-line\ndefault, previous-period overlay, confidence bands, brush selector,\nKPI strip composition, accessibility (SR summaries + alt-text\npatterns).",{"type":11,"tag":98,"props":556,"children":558},{"id":557},"map-geospatial-closed-2026-05-22",[559],{"type":17,"value":560},"Map & geospatial — ✅ closed 2026-05-22",{"type":11,"tag":19,"props":562,"children":563},{},[564],{"type":17,"value":565},"TTI does heavy GIS work. Cluster shipped as sprint 3 of the four-family\nexpansion alongside identity + research-publishing + forms-wrapper.",{"type":11,"tag":110,"props":567,"children":568},{},[569,582,595,608],{"type":11,"tag":114,"props":570,"children":571},{},[572,580],{"type":11,"tag":118,"props":573,"children":574},{},[575],{"type":11,"tag":122,"props":576,"children":577},{},[578],{"type":17,"value":579},"TuxMapEmbed",{"type":17,"value":581}," — shipped 2026-05-22; Mapbox \u002F Leaflet wrapper\nwith TTI tokens (basemap palette, marker styles, popup chrome).",{"type":11,"tag":114,"props":583,"children":584},{},[585,593],{"type":11,"tag":118,"props":586,"children":587},{},[588],{"type":11,"tag":122,"props":589,"children":590},{},[591],{"type":17,"value":592},"TuxMapLegend",{"type":17,"value":594}," — shipped 2026-05-22; choropleth legend with\nthe editorial maroon rule.",{"type":11,"tag":114,"props":596,"children":597},{},[598,606],{"type":11,"tag":118,"props":599,"children":600},{},[601],{"type":11,"tag":122,"props":602,"children":603},{},[604],{"type":17,"value":605},"TuxMapMarker",{"type":17,"value":607}," — shipped 2026-05-22; branded marker with\ncluster + popup affordances.",{"type":11,"tag":114,"props":609,"children":610},{},[611,619],{"type":11,"tag":118,"props":612,"children":613},{},[614],{"type":11,"tag":122,"props":615,"children":616},{},[617],{"type":17,"value":618},"TuxCorridorStrip",{"type":17,"value":620}," — shipped 2026-05-22; linear \"strip map\"\ndiagram for highway-corridor reports.",{"type":11,"tag":82,"props":622,"children":623},{},[],{"type":11,"tag":86,"props":625,"children":627},{"id":626},"priority-c-navigation-gaps",[628],{"type":17,"value":629},"Priority C — Navigation gaps",{"type":11,"tag":98,"props":631,"children":633},{"id":632},"tabs-sectioning",[634],{"type":17,"value":635},"Tabs & sectioning",{"type":11,"tag":110,"props":637,"children":638},{},[639,705],{"type":11,"tag":114,"props":640,"children":641},{},[642,650,652,660,662,668,670,676,678,684,686,692,694,704],{"type":11,"tag":118,"props":643,"children":644},{},[645],{"type":11,"tag":122,"props":646,"children":647},{},[648],{"type":17,"value":649},"TuxTabsHorizontal",{"type":17,"value":651}," \u002F ",{"type":11,"tag":118,"props":653,"children":654},{},[655],{"type":11,"tag":122,"props":656,"children":657},{},[658],{"type":17,"value":659},"TuxTabsVertical",{"type":17,"value":661}," — shipped\n2026-05-21 as ",{"type":11,"tag":34,"props":663,"children":665},{"className":664},[],[666],{"type":17,"value":667},"TuxTabs",{"type":17,"value":669}," (single component, ",{"type":11,"tag":34,"props":671,"children":673},{"className":672},[],[674],{"type":17,"value":675},"orientation",{"type":17,"value":677}," prop\ncovers both). Wraps ",{"type":11,"tag":34,"props":679,"children":681},{"className":680},[],[682],{"type":17,"value":683},"UTabs",{"type":17,"value":685},"; adds maroon active underline + ",{"type":11,"tag":34,"props":687,"children":689},{"className":688},[],[690],{"type":17,"value":691},"bold",{"type":17,"value":693},"\nintent for eyebrow-rhythm contexts. See\n",{"type":11,"tag":29,"props":695,"children":697},{"href":696},"..\u002Fapp\u002Fpages\u002Fcomponents\u002Ftabs.vue",[698],{"type":11,"tag":34,"props":699,"children":701},{"className":700},[],[702],{"type":17,"value":703},"\u002Fcomponents\u002Ftabs",{"type":17,"value":162},{"type":11,"tag":114,"props":706,"children":707},{},[708,716,718,724,726,732,734,744],{"type":11,"tag":118,"props":709,"children":710},{},[711],{"type":11,"tag":122,"props":712,"children":713},{},[714],{"type":17,"value":715},"TuxSideSheet",{"type":17,"value":717}," — shipped 2026-05-14 as ",{"type":11,"tag":34,"props":719,"children":721},{"className":720},[],[722],{"type":17,"value":723},"TuxSlideover",{"type":17,"value":725},". Three\nsides (right · left · bottom), built on the native ",{"type":11,"tag":34,"props":727,"children":729},{"className":728},[],[730],{"type":17,"value":731},"\u003Cdialog>",{"type":17,"value":733},",\nBatch-J ease-corridor slide animation. See\n",{"type":11,"tag":29,"props":735,"children":737},{"href":736},"..\u002Fapp\u002Fpages\u002Fcomponents\u002Fslideover.vue",[738],{"type":11,"tag":34,"props":739,"children":741},{"className":740},[],[742],{"type":17,"value":743},"\u002Fcomponents\u002Fslideover",{"type":17,"value":162},{"type":11,"tag":98,"props":746,"children":748},{"id":747},"pagination-extras-shipped-2026-05-21",[749],{"type":17,"value":750},"Pagination extras — ✅ shipped 2026-05-21",{"type":11,"tag":19,"props":752,"children":753},{},[754],{"type":17,"value":755},"We have basic numbered pagination only — was. Now three more.",{"type":11,"tag":110,"props":757,"children":758},{},[759,783,814],{"type":11,"tag":114,"props":760,"children":761},{},[762,770,772,782],{"type":11,"tag":118,"props":763,"children":764},{},[765],{"type":11,"tag":122,"props":766,"children":767},{},[768],{"type":17,"value":769},"TuxLoadMore",{"type":17,"value":771}," — shipped 2026-05-21; explicit button with\nremaining count + terminal divider on completion. SEO-friendly\nmiddle ground between paginated and infinite. See\n",{"type":11,"tag":29,"props":773,"children":775},{"href":774},"..\u002Fapp\u002Fpages\u002Fcomponents\u002Fload-more.vue",[776],{"type":11,"tag":34,"props":777,"children":779},{"className":778},[],[780],{"type":17,"value":781},"\u002Fcomponents\u002Fload-more",{"type":17,"value":162},{"type":11,"tag":114,"props":784,"children":785},{},[786,794,796,801,803,813],{"type":11,"tag":118,"props":787,"children":788},{},[789],{"type":11,"tag":122,"props":790,"children":791},{},[792],{"type":17,"value":793},"TuxInfiniteScroll",{"type":17,"value":795}," — shipped 2026-05-21; IntersectionObserver\nsentinel + loading state; honors ",{"type":11,"tag":34,"props":797,"children":799},{"className":798},[],[800],{"type":17,"value":160},{"type":17,"value":802}," with\nexplicit-button fallback. See\n",{"type":11,"tag":29,"props":804,"children":806},{"href":805},"..\u002Fapp\u002Fpages\u002Fcomponents\u002Finfinite-scroll.vue",[807],{"type":11,"tag":34,"props":808,"children":810},{"className":809},[],[811],{"type":17,"value":812},"\u002Fcomponents\u002Finfinite-scroll",{"type":17,"value":162},{"type":11,"tag":114,"props":815,"children":816},{},[817,825,827,837],{"type":11,"tag":118,"props":818,"children":819},{},[820],{"type":11,"tag":122,"props":821,"children":822},{},[823],{"type":17,"value":824},"TuxResultCount",{"type":17,"value":826}," — shipped 2026-05-21; \"Showing 1–24 of 412\ncorridors · 24 per page.\" Pairs with any of the three pager\ncomponents. See\n",{"type":11,"tag":29,"props":828,"children":830},{"href":829},"..\u002Fapp\u002Fpages\u002Fcomponents\u002Fresult-count.vue",[831],{"type":11,"tag":34,"props":832,"children":834},{"className":833},[],[835],{"type":17,"value":836},"\u002Fcomponents\u002Fresult-count",{"type":17,"value":162},{"type":11,"tag":82,"props":839,"children":840},{},[],{"type":11,"tag":86,"props":842,"children":844},{"id":843},"priority-d-content-patterns",[845],{"type":17,"value":846},"Priority D — Content patterns",{"type":11,"tag":98,"props":848,"children":850},{"id":849},"comments-feedback",[851],{"type":17,"value":852},"Comments & feedback",{"type":11,"tag":110,"props":854,"children":855},{},[856,880],{"type":11,"tag":114,"props":857,"children":858},{},[859,867,869,879],{"type":11,"tag":118,"props":860,"children":861},{},[862],{"type":11,"tag":122,"props":863,"children":864},{},[865],{"type":17,"value":866},"TuxCommentThread",{"type":17,"value":868}," — shipped 2026-05-26; peer-review \u002F\neditorial-comment threads with reply, resolve, @mention. Stateless\nrenderer over a v-modeled array; host owns persistence. See\n",{"type":11,"tag":29,"props":870,"children":872},{"href":871},"..\u002Fapp\u002Fpages\u002Fcomponents\u002Fcomment-thread.vue",[873],{"type":11,"tag":34,"props":874,"children":876},{"className":875},[],[877],{"type":17,"value":878},"\u002Fcomponents\u002Fcomment-thread",{"type":17,"value":162},{"type":11,"tag":114,"props":881,"children":882},{},[883,891,893,903],{"type":11,"tag":118,"props":884,"children":885},{},[886],{"type":11,"tag":122,"props":887,"children":888},{},[889],{"type":17,"value":890},"TuxReactionBar",{"type":17,"value":892}," — shipped 2026-05-21; light-touch\nacknowledgement strip (helpful · question · disagree default, fully\nconfigurable). v-modeled active reactions + display-only counts.\nSee ",{"type":11,"tag":29,"props":894,"children":896},{"href":895},"..\u002Fapp\u002Fpages\u002Fcomponents\u002Freaction-bar.vue",[897],{"type":11,"tag":34,"props":898,"children":900},{"className":899},[],[901],{"type":17,"value":902},"\u002Fcomponents\u002Freaction-bar",{"type":17,"value":162},{"type":11,"tag":98,"props":905,"children":907},{"id":906},"tooltips-help",[908],{"type":17,"value":909},"Tooltips & help",{"type":11,"tag":110,"props":911,"children":912},{},[913,952,977],{"type":11,"tag":114,"props":914,"children":915},{},[916,924,926,932,934,940,941,951],{"type":11,"tag":118,"props":917,"children":918},{},[919],{"type":11,"tag":122,"props":920,"children":921},{},[922],{"type":17,"value":923},"TuxTooltip",{"type":17,"value":925}," — shipped 2026-05-21; wraps ",{"type":11,"tag":34,"props":927,"children":929},{"className":928},[],[930],{"type":17,"value":931},"UTooltip",{"type":17,"value":933},". Adds\noptional title + hairline rule + tuned max-width (~22ch) + shortcut\nglyphs via ",{"type":11,"tag":34,"props":935,"children":937},{"className":936},[],[938],{"type":17,"value":939},"kbds",{"type":17,"value":518},{"type":11,"tag":29,"props":942,"children":944},{"href":943},"..\u002Fapp\u002Fpages\u002Fcomponents\u002Ftooltip.vue",[945],{"type":11,"tag":34,"props":946,"children":948},{"className":947},[],[949],{"type":17,"value":950},"\u002Fcomponents\u002Ftooltip",{"type":17,"value":162},{"type":11,"tag":114,"props":953,"children":954},{},[955,963,965,975],{"type":11,"tag":118,"props":956,"children":957},{},[958],{"type":11,"tag":122,"props":959,"children":960},{},[961],{"type":17,"value":962},"TuxPopover",{"type":17,"value":964}," — shipped 2026-05-26; title + body + optional\nactions panel. Click mode by default (hover-with-actions is bad UX);\nthree width tiers; maroon hairline under title. See\n",{"type":11,"tag":29,"props":966,"children":968},{"href":967},"..\u002Fapp\u002Fpages\u002Fcomponents\u002Fpopover.vue",[969],{"type":11,"tag":34,"props":970,"children":972},{"className":971},[],[973],{"type":17,"value":974},"\u002Fcomponents\u002Fpopover",{"type":17,"value":976},". The\n\"two consumer surfaces\" bar was already cleared (~7 UPopover-\ndirect call sites existed at ship time).",{"type":11,"tag":114,"props":978,"children":979},{},[980,988,990,996,998,1004,1006,1012,1014,1020,1022,1032,1034,1040],{"type":11,"tag":118,"props":981,"children":982},{},[983],{"type":11,"tag":122,"props":984,"children":985},{},[986],{"type":17,"value":987},"TuxKeyboardShortcuts",{"type":17,"value":989}," — shipped 2026-05-14 as\n",{"type":11,"tag":34,"props":991,"children":993},{"className":992},[],[994],{"type":17,"value":995},"TuxShortcutsHelp",{"type":17,"value":997},". Modal overlay triggered by ",{"type":11,"tag":34,"props":999,"children":1001},{"className":1000},[],[1002],{"type":17,"value":1003},"?",{"type":17,"value":1005},", auto-classifies\ncombo vs sequence rows, uses ",{"type":11,"tag":34,"props":1007,"children":1009},{"className":1008},[],[1010],{"type":17,"value":1011},"TuxKbd",{"type":17,"value":1013}," for every key glyph. Mounted\nglobally in ",{"type":11,"tag":34,"props":1015,"children":1017},{"className":1016},[],[1018],{"type":17,"value":1019},"app.vue",{"type":17,"value":1021}," alongside the command palette. See\n",{"type":11,"tag":29,"props":1023,"children":1025},{"href":1024},"..\u002Fapp\u002Fpages\u002Fcomponents\u002Fkbd.vue",[1026],{"type":11,"tag":34,"props":1027,"children":1029},{"className":1028},[],[1030],{"type":17,"value":1031},"\u002Fcomponents\u002Fkbd",{"type":17,"value":1033}," for the kbd\nprimitive and the shell's ",{"type":11,"tag":34,"props":1035,"children":1037},{"className":1036},[],[1038],{"type":17,"value":1039},"defineShortcuts",{"type":17,"value":1041}," block for the wired\nbindings.",{"type":11,"tag":82,"props":1043,"children":1044},{},[],{"type":11,"tag":86,"props":1046,"children":1048},{"id":1047},"priority-e-foundations-meta",[1049],{"type":17,"value":1050},"Priority E — Foundations & meta",{"type":11,"tag":98,"props":1052,"children":1054},{"id":1053},"accessibility-documentation-shipped-2026-05-21",[1055],{"type":17,"value":1056},"Accessibility documentation — ✅ shipped 2026-05-21",{"type":11,"tag":19,"props":1058,"children":1059},{},[1060,1062,1068,1070,1076],{"type":17,"value":1061},"All four foundation pages live under ",{"type":11,"tag":34,"props":1063,"children":1065},{"className":1064},[],[1066],{"type":17,"value":1067},"\u002Faccessibility\u002F*",{"type":17,"value":1069},". Each is\nreferenced from the ",{"type":11,"tag":29,"props":1071,"children":1073},{"href":1072},"..\u002Fapp\u002Fpages\u002Faccessibility\u002Findex.vue",[1074],{"type":17,"value":1075},"accessibility index",{"type":17,"value":1077},"\nwith a tile card.",{"type":11,"tag":110,"props":1079,"children":1080},{},[1081,1098,1115,1139],{"type":11,"tag":114,"props":1082,"children":1083},{},[1084,1096],{"type":11,"tag":118,"props":1085,"children":1086},{},[1087],{"type":11,"tag":122,"props":1088,"children":1089},{},[1090],{"type":11,"tag":34,"props":1091,"children":1093},{"className":1092},[],[1094],{"type":17,"value":1095},"\u002Faccessibility\u002Fskip-to-content",{"type":17,"value":1097}," — keyboard-first foundations\npage. WCAG 2.4.1 Bypass Blocks; how the skip link is wired, where it\nlands, how to verify.",{"type":11,"tag":114,"props":1099,"children":1100},{},[1101,1113],{"type":11,"tag":118,"props":1102,"children":1103},{},[1104],{"type":11,"tag":122,"props":1105,"children":1106},{},[1107],{"type":11,"tag":34,"props":1108,"children":1110},{"className":1109},[],[1111],{"type":17,"value":1112},"\u002Faccessibility\u002Ffocus-model",{"type":17,"value":1114}," — visible-focus reference,\nfocus-trap behavior in modals\u002Fslideovers\u002Fpopovers, tab-order rules,\nthree exceptions (inputs, linked cards, HC theme).",{"type":11,"tag":114,"props":1116,"children":1117},{},[1118,1130,1132,1138],{"type":11,"tag":118,"props":1119,"children":1120},{},[1121],{"type":11,"tag":122,"props":1122,"children":1123},{},[1124],{"type":11,"tag":34,"props":1125,"children":1127},{"className":1126},[],[1128],{"type":17,"value":1129},"\u002Faccessibility\u002Fcontrast-matrix",{"type":17,"value":1131}," — USWDS-style summary of\nthe top 10 token pairs by traffic across light\u002Fdark\u002FHC themes.\nFull 282-surface audit at ",{"type":11,"tag":34,"props":1133,"children":1135},{"className":1134},[],[1136],{"type":17,"value":1137},"\u002Fcontrast-audit",{"type":17,"value":162},{"type":11,"tag":114,"props":1140,"children":1141},{},[1142,1154],{"type":11,"tag":118,"props":1143,"children":1144},{},[1145],{"type":11,"tag":122,"props":1146,"children":1147},{},[1148],{"type":11,"tag":34,"props":1149,"children":1151},{"className":1150},[],[1152],{"type":17,"value":1153},"\u002Faccessibility\u002Fbreakpoints",{"type":17,"value":1155}," — six-breakpoint scale + the\ncontainer-query preference (ADR-0007) + 200% zoom reflow guarantees.",{"type":11,"tag":98,"props":1157,"children":1159},{"id":1158},"mobile-frames-shipped-2026-05-26-as-tuxmobileframe",[1160,1162],{"type":17,"value":1161},"Mobile frames — ✅ shipped 2026-05-26 as ",{"type":11,"tag":34,"props":1163,"children":1165},{"className":1164},[],[1166],{"type":17,"value":1167},"TuxMobileFrame",{"type":11,"tag":19,"props":1169,"children":1170},{},[1171,1173,1179,1181,1187],{"type":17,"value":1172},"CSS-only, doc-only nicety. The platform-awareness doctrine still\nstands for runtime: reach for ",{"type":11,"tag":34,"props":1174,"children":1176},{"className":1175},[],[1177],{"type":17,"value":1178},"TuxAppFrame",{"type":17,"value":1180}," + ",{"type":11,"tag":34,"props":1182,"children":1184},{"className":1183},[],[1185],{"type":17,"value":1186},"TuxTabBar",{"type":17,"value":1188}," when the\nchrome needs to be live.",{"type":11,"tag":110,"props":1190,"children":1191},{},[1192],{"type":11,"tag":114,"props":1193,"children":1194},{},[1195,1202,1204,1210,1212,1218,1220,1230],{"type":11,"tag":118,"props":1196,"children":1197},{},[1198],{"type":11,"tag":122,"props":1199,"children":1200},{},[1201],{"type":17,"value":1167},{"type":17,"value":1203}," — single component with\n",{"type":11,"tag":34,"props":1205,"children":1207},{"className":1206},[],[1208],{"type":17,"value":1209},"platform=\"ios\" | \"android\"",{"type":17,"value":1211}," prop. iPhone 16 Pro or Pixel 9\nproportions; per-platform color sets; Android nav-style options;\nshared ",{"type":11,"tag":34,"props":1213,"children":1215},{"className":1214},[],[1216],{"type":17,"value":1217},":width",{"type":17,"value":1219}," pivot for cross-platform mockups. See\n",{"type":11,"tag":29,"props":1221,"children":1223},{"href":1222},"..\u002Fapp\u002Fpages\u002Fcomponents\u002Fmobile-frame.vue",[1224],{"type":11,"tag":34,"props":1225,"children":1227},{"className":1226},[],[1228],{"type":17,"value":1229},"\u002Fcomponents\u002Fmobile-frame",{"type":17,"value":162},{"type":11,"tag":82,"props":1232,"children":1233},{},[],{"type":11,"tag":86,"props":1235,"children":1237},{"id":1236},"polish-queue-shipped-components",[1238],{"type":17,"value":1239},"Polish queue — shipped components",{"type":11,"tag":19,"props":1241,"children":1242},{},[1243],{"type":17,"value":1244},"Small follow-ups for components already in the catalog. Each one is\nworth less than a fresh component; collect them here so they don't\nget lost. Pick from the top when there's a slow afternoon.",{"type":11,"tag":110,"props":1246,"children":1247},{},[1248,1316,1351,1369],{"type":11,"tag":114,"props":1249,"children":1250},{},[1251,1283,1285,1291,1293,1299,1301,1306,1308,1314],{"type":11,"tag":118,"props":1252,"children":1253},{},[1254],{"type":11,"tag":122,"props":1255,"children":1256},{},[1257,1259,1265,1267,1273,1275,1281],{"type":17,"value":1258},"Wire ",{"type":11,"tag":34,"props":1260,"children":1262},{"className":1261},[],[1263],{"type":17,"value":1264},"TuxTOC",{"type":17,"value":1266}," into ",{"type":11,"tag":34,"props":1268,"children":1270},{"className":1269},[],[1271],{"type":17,"value":1272},"TuxReportWebFrame",{"type":17,"value":1274},"'s ",{"type":11,"tag":34,"props":1276,"children":1278},{"className":1277},[],[1279],{"type":17,"value":1280},"#toc",{"type":17,"value":1282}," slot.",{"type":17,"value":1284}," —\ndone 2026-05-21. ",{"type":11,"tag":34,"props":1286,"children":1288},{"className":1287},[],[1289],{"type":17,"value":1290},"\u002Freports\u002Fweb-frame",{"type":17,"value":1292}," example now uses\n",{"type":11,"tag":34,"props":1294,"children":1296},{"className":1295},[],[1297],{"type":17,"value":1298},"\u003CTuxTOC target=\".tux-report-web-frame article\" \u002F>",{"type":17,"value":1300}," inside the\n",{"type":11,"tag":34,"props":1302,"children":1304},{"className":1303},[],[1305],{"type":17,"value":1280},{"type":17,"value":1307}," slot for IntersectionObserver-driven active-section\ntracking. The fallback (plain anchor list from the ",{"type":11,"tag":34,"props":1309,"children":1311},{"className":1310},[],[1312],{"type":17,"value":1313},"toc",{"type":17,"value":1315}," prop)\nstill renders when the slot is empty.",{"type":11,"tag":114,"props":1317,"children":1318},{},[1319,1333,1335,1341,1343,1349],{"type":11,"tag":118,"props":1320,"children":1321},{},[1322],{"type":11,"tag":122,"props":1323,"children":1324},{},[1325,1327],{"type":17,"value":1326},"Refresh ",{"type":11,"tag":34,"props":1328,"children":1330},{"className":1329},[],[1331],{"type":17,"value":1332},"\u002Fexamples\u002Flandscape-dashboard",{"type":17,"value":1334}," — done 2026-05-21.\nNow uses the full sidebar layout + ",{"type":11,"tag":34,"props":1336,"children":1338},{"className":1337},[],[1339],{"type":17,"value":1340},"#aside",{"type":17,"value":1342}," slot for the activity\nrail + inline TuxSparkline next to the treemap header + KPI\ndeltas in factoid ",{"type":11,"tag":34,"props":1344,"children":1346},{"className":1345},[],[1347],{"type":17,"value":1348},"source",{"type":17,"value":1350}," fields.",{"type":11,"tag":114,"props":1352,"children":1353},{},[1354,1367],{"type":11,"tag":118,"props":1355,"children":1356},{},[1357],{"type":11,"tag":122,"props":1358,"children":1359},{},[1360,1361],{"type":17,"value":1326},{"type":11,"tag":34,"props":1362,"children":1364},{"className":1363},[],[1365],{"type":17,"value":1366},"\u002Fexamples\u002Fresearch-landing",{"type":17,"value":1368}," — done 2026-05-21.\nAdded a TuxStatComparison year-over-year delta row beneath the\nby-the-numbers factoid; one of the three uses inverted polarity\n(non-compliance going down = success tone).",{"type":11,"tag":114,"props":1370,"children":1371},{},[1372,1385,1387,1392],{"type":11,"tag":118,"props":1373,"children":1374},{},[1375],{"type":11,"tag":122,"props":1376,"children":1377},{},[1378,1379],{"type":17,"value":1326},{"type":11,"tag":34,"props":1380,"children":1382},{"className":1381},[],[1383],{"type":17,"value":1384},"\u002Fexamples\u002Ftti-ai-studio-session",{"type":17,"value":1386}," — done 2026-05-22\n(second polish queue commit). Spot-checked the message-action row\nvs ",{"type":11,"tag":34,"props":1388,"children":1390},{"className":1389},[],[1391],{"type":17,"value":890},{"type":17,"value":1393},"; left as-is per documented Conventions. Page\nnow exercises the full chat-surface cluster end-to-end.",{"type":11,"tag":82,"props":1395,"children":1396},{},[],{"type":11,"tag":86,"props":1398,"children":1400},{"id":1399},"recently-shipped-four-family-tti-expansion-dogfood-pass-2026-05-22",[1401],{"type":17,"value":1402},"Recently shipped — four-family TTI expansion + dogfood pass (2026-05-22)",{"type":11,"tag":19,"props":1404,"children":1405},{},[1406,1408,1413],{"type":17,"value":1407},"After closing the Figma absorption pipeline at 70\u002F70 triaged\n(51 absorbed + 19 in SKIP-RATIONALE), the user picked ",{"type":11,"tag":122,"props":1409,"children":1410},{},[1411],{"type":17,"value":1412},"all four",{"type":17,"value":1414},"\nproposed new component families. Each shipped as its own focused\nsprint with the full 6-step wiring (source + showcase + nav +\nindex + components.md + CHANGELOG). The catalog grew from ~110\nto ~130 Tux* components in one batch.",{"type":11,"tag":98,"props":1416,"children":1418},{"id":1417},"research-publishing-cluster-sprint-1-of-4",[1419],{"type":17,"value":1420},"Research-publishing cluster — sprint 1 of 4",{"type":11,"tag":19,"props":1422,"children":1423},{},[1424],{"type":17,"value":1425},"Editorial-research surfaces for the published-paper shape — what\nJOSS, eLife, Distill, and TRR pages all need. Eight components:",{"type":11,"tag":110,"props":1427,"children":1428},{},[1429,1442,1455,1468,1481,1494,1507,1520],{"type":11,"tag":114,"props":1430,"children":1431},{},[1432,1440],{"type":11,"tag":118,"props":1433,"children":1434},{},[1435],{"type":11,"tag":122,"props":1436,"children":1437},{},[1438],{"type":17,"value":1439},"TuxAbstract",{"type":17,"value":1441}," — structured abstract (Background \u002F Methods \u002F\nResults \u002F Conclusions) with optional plain-language summary.",{"type":11,"tag":114,"props":1443,"children":1444},{},[1445,1453],{"type":11,"tag":118,"props":1446,"children":1447},{},[1448],{"type":11,"tag":122,"props":1449,"children":1450},{},[1451],{"type":17,"value":1452},"TuxAuthorByline",{"type":17,"value":1454}," — author list with affiliations,\nORCID iDs, corresponding-author marker; compact\u002Ffull layouts.",{"type":11,"tag":114,"props":1456,"children":1457},{},[1458,1466],{"type":11,"tag":118,"props":1459,"children":1460},{},[1461],{"type":11,"tag":122,"props":1462,"children":1463},{},[1464],{"type":17,"value":1465},"TuxPaperMeta",{"type":17,"value":1467}," — DOI \u002F license \u002F received-accepted-published\ndates \u002F version history \u002F funder strip.",{"type":11,"tag":114,"props":1469,"children":1470},{},[1471,1479],{"type":11,"tag":118,"props":1472,"children":1473},{},[1474],{"type":11,"tag":122,"props":1475,"children":1476},{},[1477],{"type":17,"value":1478},"TuxFigureCaption",{"type":17,"value":1480}," — numbered figure wrapper with source\ncitation and inline alt-text reveal.",{"type":11,"tag":114,"props":1482,"children":1483},{},[1484,1492],{"type":11,"tag":118,"props":1485,"children":1486},{},[1487],{"type":11,"tag":122,"props":1488,"children":1489},{},[1490],{"type":17,"value":1491},"TuxTableCaption",{"type":17,"value":1493}," — numbered table caption sister.",{"type":11,"tag":114,"props":1495,"children":1496},{},[1497,1505],{"type":11,"tag":118,"props":1498,"children":1499},{},[1500],{"type":11,"tag":122,"props":1501,"children":1502},{},[1503],{"type":17,"value":1504},"TuxFootnote",{"type":17,"value":1506}," — inline marker + bottom-of-document list;\nscrollspy bidirectional linking.",{"type":11,"tag":114,"props":1508,"children":1509},{},[1510,1518],{"type":11,"tag":118,"props":1511,"children":1512},{},[1513],{"type":11,"tag":122,"props":1514,"children":1515},{},[1516],{"type":17,"value":1517},"TuxCitationExport",{"type":17,"value":1519}," — six-format export popover\n(BibTeX \u002F RIS \u002F EndNote \u002F APA \u002F MLA \u002F Chicago).",{"type":11,"tag":114,"props":1521,"children":1522},{},[1523,1531],{"type":11,"tag":118,"props":1524,"children":1525},{},[1526],{"type":11,"tag":122,"props":1527,"children":1528},{},[1529],{"type":17,"value":1530},"TuxAcknowledgments",{"type":17,"value":1532}," — gratitude block with role taxonomy.",{"type":11,"tag":98,"props":1534,"children":1536},{"id":1535},"tti-identity-brand-cluster-sprint-2-of-4",[1537],{"type":17,"value":1538},"TTI identity \u002F brand cluster — sprint 2 of 4",{"type":11,"tag":19,"props":1540,"children":1541},{},[1542],{"type":17,"value":1543},"The institutional-identity surfaces that map directly to TTI\norganizational structure. Five components:",{"type":11,"tag":110,"props":1545,"children":1546},{},[1547,1560,1573,1586,1599],{"type":11,"tag":114,"props":1548,"children":1549},{},[1550,1558],{"type":11,"tag":118,"props":1551,"children":1552},{},[1553],{"type":11,"tag":122,"props":1554,"children":1555},{},[1556],{"type":17,"value":1557},"TuxResearcher",{"type":17,"value":1559}," — researcher card with ORCID, h-index,\nactive grants, recent publications.",{"type":11,"tag":114,"props":1561,"children":1562},{},[1563,1571],{"type":11,"tag":118,"props":1564,"children":1565},{},[1566],{"type":11,"tag":122,"props":1567,"children":1568},{},[1569],{"type":17,"value":1570},"TuxLab",{"type":17,"value":1572}," — division\u002Flab hero with leaders, focus areas,\nproject\u002Fpeople counts, location.",{"type":11,"tag":114,"props":1574,"children":1575},{},[1576,1584],{"type":11,"tag":118,"props":1577,"children":1578},{},[1579],{"type":11,"tag":122,"props":1580,"children":1581},{},[1582],{"type":17,"value":1583},"TuxProgram",{"type":17,"value":1585}," — sponsored-research program card with funders,\nleads, and headline metrics.",{"type":11,"tag":114,"props":1587,"children":1588},{},[1589,1597],{"type":11,"tag":118,"props":1590,"children":1591},{},[1592],{"type":11,"tag":122,"props":1593,"children":1594},{},[1595],{"type":17,"value":1596},"TuxFundingSource",{"type":17,"value":1598}," — funder badge with abbreviation +\ngrant number; size sm\u002Fmd.",{"type":11,"tag":114,"props":1600,"children":1601},{},[1602,1610],{"type":11,"tag":118,"props":1603,"children":1604},{},[1605],{"type":11,"tag":122,"props":1606,"children":1607},{},[1608],{"type":17,"value":1609},"TuxCenterBadge",{"type":17,"value":1611}," — TTI center identity chip\n(mobility \u002F safety \u002F freight \u002F roadways \u002F policy \u002F operations).",{"type":11,"tag":98,"props":1613,"children":1615},{"id":1614},"geospatial-map-cluster-sprint-3-of-4",[1616],{"type":17,"value":1617},"Geospatial \u002F map cluster — sprint 3 of 4",{"type":11,"tag":19,"props":1619,"children":1620},{},[1621],{"type":17,"value":1622},"Closed the Priority B \"Map & geospatial\" roadmap section. Four\ncomponents:",{"type":11,"tag":110,"props":1624,"children":1625},{},[1626,1638,1650,1662],{"type":11,"tag":114,"props":1627,"children":1628},{},[1629,1636],{"type":11,"tag":118,"props":1630,"children":1631},{},[1632],{"type":11,"tag":122,"props":1633,"children":1634},{},[1635],{"type":17,"value":579},{"type":17,"value":1637}," — Mapbox\u002FLeaflet wrapper, deferred runtime\nvia lazy load, TTI-themed marker + popup chrome.",{"type":11,"tag":114,"props":1639,"children":1640},{},[1641,1648],{"type":11,"tag":118,"props":1642,"children":1643},{},[1644],{"type":11,"tag":122,"props":1645,"children":1646},{},[1647],{"type":17,"value":592},{"type":17,"value":1649}," — choropleth legend with editorial maroon\nrule and numeric \u002F categorical variants.",{"type":11,"tag":114,"props":1651,"children":1652},{},[1653,1660],{"type":11,"tag":118,"props":1654,"children":1655},{},[1656],{"type":11,"tag":122,"props":1657,"children":1658},{},[1659],{"type":17,"value":605},{"type":17,"value":1661}," — branded SVG marker with cluster + popup\naffordances.",{"type":11,"tag":114,"props":1663,"children":1664},{},[1665,1672],{"type":11,"tag":118,"props":1666,"children":1667},{},[1668],{"type":11,"tag":122,"props":1669,"children":1670},{},[1671],{"type":17,"value":618},{"type":17,"value":1673}," — linear strip-map for highway-\ncorridor reports (mile markers, segment tones, callouts).",{"type":11,"tag":98,"props":1675,"children":1677},{"id":1676},"forms-wrapper-cluster-sprint-4-of-4",[1678],{"type":17,"value":1679},"Forms wrapper cluster — sprint 4 of 4",{"type":11,"tag":19,"props":1681,"children":1682},{},[1683],{"type":17,"value":1684},"The \"TUX wrapper above Nuxt UI form primitives\" layer the original\nPriority A forms-as-primitives sprint had deliberately deferred —\nshipped now because the research-publishing dogfood surfaced two\nreal consumer-shape needs (markdown drafting + dropzone uploads).\nFive components:",{"type":11,"tag":110,"props":1686,"children":1687},{},[1688,1709,1722,1743,1756],{"type":11,"tag":114,"props":1689,"children":1690},{},[1691,1699,1701,1707],{"type":11,"tag":118,"props":1692,"children":1693},{},[1694],{"type":11,"tag":122,"props":1695,"children":1696},{},[1697],{"type":17,"value":1698},"TuxFormField",{"type":17,"value":1700}," — labeled wrapper with description, error,\nrequired marker, and ",{"type":11,"tag":34,"props":1702,"children":1704},{"className":1703},[],[1705],{"type":17,"value":1706},"TuxInfoLabel",{"type":17,"value":1708}," integration.",{"type":11,"tag":114,"props":1710,"children":1711},{},[1712,1720],{"type":11,"tag":118,"props":1713,"children":1714},{},[1715],{"type":11,"tag":122,"props":1716,"children":1717},{},[1718],{"type":17,"value":1719},"TuxMarkdownEditor",{"type":17,"value":1721}," — no-deps markdown source editor with\ntoolbar + preview + character counter. Chose markdown over Tiptap\nfor source-controllable editorial-research outputs.",{"type":11,"tag":114,"props":1723,"children":1724},{},[1725,1733,1735],{"type":11,"tag":118,"props":1726,"children":1727},{},[1728],{"type":11,"tag":122,"props":1729,"children":1730},{},[1731],{"type":17,"value":1732},"TuxFileDropzone",{"type":17,"value":1734}," — drag-and-drop file upload with progress\n",{"type":11,"tag":110,"props":1736,"children":1737},{},[1738],{"type":11,"tag":114,"props":1739,"children":1740},{},[1741],{"type":17,"value":1742},"per-file remove + validation slot.",{"type":11,"tag":114,"props":1744,"children":1745},{},[1746,1754],{"type":11,"tag":118,"props":1747,"children":1748},{},[1749],{"type":11,"tag":122,"props":1750,"children":1751},{},[1752],{"type":17,"value":1753},"TuxValidationSummary",{"type":17,"value":1755}," — inline form-level error summary with\nanchor links to each invalid field.",{"type":11,"tag":114,"props":1757,"children":1758},{},[1759,1767],{"type":11,"tag":118,"props":1760,"children":1761},{},[1762],{"type":11,"tag":122,"props":1763,"children":1764},{},[1765],{"type":17,"value":1766},"TuxConfirmDialog",{"type":17,"value":1768}," — sentence-cased confirmation modal with\ndestructive tone variant + keyboard-shortcut hints.",{"type":11,"tag":98,"props":1770,"children":1772},{"id":1771},"dogfood-pass-2-new-examples-3-refreshed",[1773],{"type":17,"value":1774},"Dogfood pass — 2 new examples + 3 refreshed",{"type":11,"tag":19,"props":1776,"children":1777},{},[1778],{"type":17,"value":1779},"After the four families shipped, the user requested a dogfood pass to\nprove the components compose under realistic constraints. Two new\npages exercise the new families end-to-end; three existing pages were\nrefreshed to sprinkle the new identity primitives into already-shipped\nsurfaces:",{"type":11,"tag":110,"props":1781,"children":1782},{},[1783,1800,1817,1835,1852],{"type":11,"tag":114,"props":1784,"children":1785},{},[1786,1798],{"type":11,"tag":118,"props":1787,"children":1788},{},[1789],{"type":11,"tag":122,"props":1790,"children":1791},{},[1792],{"type":11,"tag":34,"props":1793,"children":1795},{"className":1794},[],[1796],{"type":17,"value":1797},"\u002Fexamples\u002Fpaper-page",{"type":17,"value":1799}," — full editorial-research paper page\nexercising the research-publishing cluster end-to-end (12 Tux*\ncomponents, including a TuxChartLine inside TuxFigureCaption + an\ninline TuxFootnote × 3 with reverse-link list at document end).",{"type":11,"tag":114,"props":1801,"children":1802},{},[1803,1815],{"type":11,"tag":118,"props":1804,"children":1805},{},[1806],{"type":11,"tag":122,"props":1807,"children":1808},{},[1809],{"type":11,"tag":34,"props":1810,"children":1812},{"className":1811},[],[1813],{"type":17,"value":1814},"\u002Fexamples\u002Fcenter-landing",{"type":17,"value":1816}," — TTI Mobility Division landing\nusing the identity cluster end-to-end (TuxLab hero + TuxResearcher × 3\nwith stagger entrance + TuxProgram × 3 + TuxFundingSource × 7 +\ncross-division TuxCenterBadge links).",{"type":11,"tag":114,"props":1818,"children":1819},{},[1820,1833],{"type":11,"tag":118,"props":1821,"children":1822},{},[1823],{"type":11,"tag":122,"props":1824,"children":1825},{},[1826,1831],{"type":11,"tag":34,"props":1827,"children":1829},{"className":1828},[],[1830],{"type":17,"value":1366},{"type":17,"value":1832}," refresh",{"type":17,"value":1834}," — identity-cluster\nsprinkle (TuxCenterBadge + TuxAuthorByline + TuxFundingSource strip).",{"type":11,"tag":114,"props":1836,"children":1837},{},[1838,1850],{"type":11,"tag":118,"props":1839,"children":1840},{},[1841],{"type":11,"tag":122,"props":1842,"children":1843},{},[1844,1849],{"type":11,"tag":34,"props":1845,"children":1847},{"className":1846},[],[1848],{"type":17,"value":1332},{"type":17,"value":1832},{"type":17,"value":1851}," — corridor strip +\nmap markers + I-35 cross-link to the new paper page.",{"type":11,"tag":114,"props":1853,"children":1854},{},[1855,1867],{"type":11,"tag":118,"props":1856,"children":1857},{},[1858],{"type":11,"tag":122,"props":1859,"children":1860},{},[1861,1866],{"type":11,"tag":34,"props":1862,"children":1864},{"className":1863},[],[1865],{"type":17,"value":1384},{"type":17,"value":1832},{"type":17,"value":1868}," — TuxMarkdownEditor\ncomposer wired into the chat surface.",{"type":11,"tag":98,"props":1870,"children":1872},{"id":1871},"compositions-doctrine",[1873],{"type":17,"value":1874},"Compositions doctrine",{"type":11,"tag":110,"props":1876,"children":1877},{},[1878],{"type":11,"tag":114,"props":1879,"children":1880},{},[1881,1897,1899,1904,1906,1912],{"type":11,"tag":118,"props":1882,"children":1883},{},[1884],{"type":11,"tag":122,"props":1885,"children":1886},{},[1887],{"type":11,"tag":29,"props":1888,"children":1890},{"href":1889},".\u002Fcompositions.md",[1891],{"type":11,"tag":34,"props":1892,"children":1894},{"className":1893},[],[1895],{"type":17,"value":1896},"design\u002Fcompositions.md",{"type":17,"value":1898}," — \"X + Y\ncomposes more value than they do alone\" doctrine. Seven sections:\nlayout shells, headlines+summaries, chart surfaces, browse+detail,\nchat, cross-app nav, editorial-research. Pairs with ",{"type":11,"tag":34,"props":1900,"children":1902},{"className":1901},[],[1903],{"type":17,"value":52},{"type":17,"value":1905},"\n(catalog) and ",{"type":11,"tag":34,"props":1907,"children":1909},{"className":1908},[],[1910],{"type":17,"value":1911},"tux.md",{"type":17,"value":1913}," (manifesto) to make the three-doc design\ntriangle complete.",{"type":11,"tag":98,"props":1915,"children":1917},{"id":1916},"figma-absorption-closed-at-7070",[1918],{"type":17,"value":1919},"Figma absorption — closed at 70\u002F70",{"type":11,"tag":110,"props":1921,"children":1922},{},[1923],{"type":11,"tag":114,"props":1924,"children":1925},{},[1926,1934],{"type":11,"tag":118,"props":1927,"children":1928},{},[1929],{"type":11,"tag":122,"props":1930,"children":1931},{},[1932],{"type":17,"value":1933},"Coverage gap closure",{"type":17,"value":1935}," — five remaining stubs (shadcn_ui\noriginal, TailwindCSS v4.2.4, Airbnb UI Kit, Material UI ×2)\ngot proper NOTES.md. Skip-rationale rebased 22 → 21 entries.\nPipeline now closed: 51 absorbed + 19 in SKIP-RATIONALE = 70\u002F70.",{"type":11,"tag":98,"props":1937,"children":1939},{"id":1938},"carry-forwards",[1940],{"type":17,"value":1941},"Carry-forwards",{"type":11,"tag":19,"props":1943,"children":1944},{},[1945],{"type":17,"value":1946},"Deferred-with-criterion items surfaced in this batch:",{"type":11,"tag":110,"props":1948,"children":1949},{},[1950,1982,1999],{"type":11,"tag":114,"props":1951,"children":1952},{},[1953,1961,1963,1969,1971,1981],{"type":11,"tag":118,"props":1954,"children":1955},{},[1956],{"type":11,"tag":122,"props":1957,"children":1958},{},[1959],{"type":17,"value":1960},"TuxRichTextEditor",{"type":17,"value":1962}," — shipped 2026-05-26 as the canonical\nTUX rich-text surface; Tiptap-based WYSIWYG with 7 toolbar groups\nincluding tables, task lists, source-mode toggle, full-screen,\nword count, save event, and code-block syntax highlighting via\nlowlight. Feature set mirrors the ",{"type":11,"tag":34,"props":1964,"children":1966},{"className":1965},[],[1967],{"type":17,"value":1968},"docs-tti-tamu-edu",{"type":17,"value":1970}," admin-center\neditor so one component covers Landscape · tti-ai-studio · docs.\nSee\n",{"type":11,"tag":29,"props":1972,"children":1974},{"href":1973},"..\u002Fapp\u002Fpages\u002Fcomponents\u002Frich-text-editor.vue",[1975],{"type":11,"tag":34,"props":1976,"children":1978},{"className":1977},[],[1979],{"type":17,"value":1980},"\u002Fcomponents\u002Frich-text-editor",{"type":17,"value":162},{"type":11,"tag":114,"props":1983,"children":1984},{},[1985,1990,1992,1997],{"type":11,"tag":122,"props":1986,"children":1987},{},[1988],{"type":17,"value":1989},"Map runtime decision",{"type":17,"value":1991}," — ",{"type":11,"tag":34,"props":1993,"children":1995},{"className":1994},[],[1996],{"type":17,"value":579},{"type":17,"value":1998}," ships as a wrapper around\nMapbox + Leaflet; pick one when the first consumer surface forces\nthe question. Default lean: Leaflet for OSS-friendly + no token\nregistration.",{"type":11,"tag":114,"props":2000,"children":2001},{},[2002,2007],{"type":11,"tag":122,"props":2003,"children":2004},{},[2005],{"type":17,"value":2006},"Paper-page hardening",{"type":17,"value":2008}," — when a real journal consumer materializes,\naudit footnote bidirectional-scroll polish, citation-export format\ndetails, and figure number auto-incrementing.",{"type":11,"tag":82,"props":2010,"children":2011},{},[],{"type":11,"tag":19,"props":2013,"children":2014},{},[2015,2017,2022],{"type":17,"value":2016},"User shifted TUX target from web-only to ",{"type":11,"tag":122,"props":2018,"children":2019},{},[2020],{"type":17,"value":2021},"Tauri desktop shells on\nWindows \u002F macOS \u002F Linux",{"type":17,"value":2023}," plus future Tauri Mobile (iOS \u002F Android).\nDoctrine doc + 8 components + 2 composables + 1 CSS utility +\nsafe-area support landed in one sprint. Held the line on 5 visual-\nlanguage rejections (Liquid Glass surface, Mica wholesale, Material\ntonal palette, elevation-as-color, SF Symbols).",{"type":11,"tag":19,"props":2025,"children":2026},{},[2027],{"type":11,"tag":122,"props":2028,"children":2029},{},[2030],{"type":17,"value":2031},"Doctrine:",{"type":11,"tag":110,"props":2033,"children":2034},{},[2035],{"type":11,"tag":114,"props":2036,"children":2037},{},[2038,2051],{"type":11,"tag":122,"props":2039,"children":2040},{},[2041],{"type":11,"tag":29,"props":2042,"children":2044},{"href":2043},".\u002Fplatform-awareness.md",[2045],{"type":11,"tag":34,"props":2046,"children":2048},{"className":2047},[],[2049],{"type":17,"value":2050},"design\u002Fplatform-awareness.md",{"type":17,"value":2052}," —\n\"One component tree, platform-adaptive at the chrome layer.\" Two-\nlayer mental model; 8 dimensions of variation.",{"type":11,"tag":19,"props":2054,"children":2055},{},[2056],{"type":11,"tag":122,"props":2057,"children":2058},{},[2059],{"type":17,"value":2060},"Foundations:",{"type":11,"tag":110,"props":2062,"children":2063},{},[2064,2089,2099],{"type":11,"tag":114,"props":2065,"children":2066},{},[2067,2072,2074,2080,2082,2088],{"type":11,"tag":122,"props":2068,"children":2069},{},[2070],{"type":17,"value":2071},"useTuxPlatform()",{"type":17,"value":2073}," — composable; sets ",{"type":11,"tag":34,"props":2075,"children":2077},{"className":2076},[],[2078],{"type":17,"value":2079},"[data-platform]",{"type":17,"value":2081}," on\n",{"type":11,"tag":34,"props":2083,"children":2085},{"className":2084},[],[2086],{"type":17,"value":2087},"\u003Chtml>",{"type":17,"value":162},{"type":11,"tag":114,"props":2090,"children":2091},{},[2092,2097],{"type":11,"tag":122,"props":2093,"children":2094},{},[2095],{"type":17,"value":2096},"tux-scrollbar.css",{"type":17,"value":2098}," — per-platform scrollbar styles.",{"type":11,"tag":114,"props":2100,"children":2101},{},[2102,2107,2109,2115,2116,2122],{"type":11,"tag":122,"props":2103,"children":2104},{},[2105],{"type":17,"value":2106},"Safe-area-inset CSS",{"type":17,"value":2108}," on ",{"type":11,"tag":34,"props":2110,"children":2112},{"className":2111},[],[2113],{"type":17,"value":2114},"default.vue",{"type":17,"value":1180},{"type":11,"tag":34,"props":2117,"children":2119},{"className":2118},[],[2120],{"type":17,"value":2121},"sidebar.vue",{"type":17,"value":162},{"type":11,"tag":19,"props":2124,"children":2125},{},[2126],{"type":11,"tag":122,"props":2127,"children":2128},{},[2129],{"type":17,"value":2130},"Components shipped:",{"type":11,"tag":110,"props":2132,"children":2133},{},[2134,2143,2153,2163,2173,2182],{"type":11,"tag":114,"props":2135,"children":2136},{},[2137,2141],{"type":11,"tag":122,"props":2138,"children":2139},{},[2140],{"type":17,"value":1178},{"type":17,"value":2142}," — custom Tauri titlebar with platform-correct\ncontrols.",{"type":11,"tag":114,"props":2144,"children":2145},{},[2146,2151],{"type":11,"tag":122,"props":2147,"children":2148},{},[2149],{"type":17,"value":2150},"TuxFocusView",{"type":17,"value":2152}," — full-viewport content overlay (Teams Stage\nview analog).",{"type":11,"tag":114,"props":2154,"children":2155},{},[2156,2161],{"type":11,"tag":122,"props":2157,"children":2158},{},[2159],{"type":17,"value":2160},"TuxMenuBar",{"type":17,"value":2162}," — in-window File\u002FEdit\u002FView menu for Win\u002FLinux.",{"type":11,"tag":114,"props":2164,"children":2165},{},[2166,2171],{"type":11,"tag":122,"props":2167,"children":2168},{},[2169],{"type":17,"value":2170},"TuxSplashScreen",{"type":17,"value":2172}," — branded app-launch overlay.",{"type":11,"tag":114,"props":2174,"children":2175},{},[2176,2180],{"type":11,"tag":122,"props":2177,"children":2178},{},[2179],{"type":17,"value":1186},{"type":17,"value":2181}," — bottom-anchored 3-5 mobile tabs with maroon\ntop-edge active rule.",{"type":11,"tag":114,"props":2183,"children":2184},{},[2185,2190],{"type":11,"tag":122,"props":2186,"children":2187},{},[2188],{"type":17,"value":2189},"TuxFAB",{"type":17,"value":2191}," — Floating Action Button (Material pattern).",{"type":11,"tag":19,"props":2193,"children":2194},{},[2195],{"type":11,"tag":122,"props":2196,"children":2197},{},[2198],{"type":17,"value":2199},"Composables shipped:",{"type":11,"tag":110,"props":2201,"children":2202},{},[2203,2213],{"type":11,"tag":114,"props":2204,"children":2205},{},[2206,2211],{"type":11,"tag":122,"props":2207,"children":2208},{},[2209],{"type":17,"value":2210},"useTuxSwipe",{"type":17,"value":2212}," — pointer\u002Ftouch swipe with directional callbacks.",{"type":11,"tag":114,"props":2214,"children":2215},{},[2216,2221],{"type":11,"tag":122,"props":2217,"children":2218},{},[2219],{"type":17,"value":2220},"useTuxRipple",{"type":17,"value":2222}," — Material tap-feedback ripple, opt-in only.",{"type":11,"tag":19,"props":2224,"children":2225},{},[2226],{"type":11,"tag":122,"props":2227,"children":2228},{},[2229],{"type":17,"value":2230},"Enhancements:",{"type":11,"tag":110,"props":2232,"children":2233},{},[2234,2249],{"type":11,"tag":114,"props":2235,"children":2236},{},[2237,2241,2243,2248],{"type":11,"tag":122,"props":2238,"children":2239},{},[2240],{"type":17,"value":1011},{"type":17,"value":2242}," — extended for Super (Linux) \u002F Win (Windows) keys\nvia ",{"type":11,"tag":34,"props":2244,"children":2246},{"className":2245},[],[2247],{"type":17,"value":2071},{"type":17,"value":162},{"type":11,"tag":114,"props":2250,"children":2251},{},[2252,2257,2258,2264,2266,2272],{"type":11,"tag":122,"props":2253,"children":2254},{},[2255],{"type":17,"value":2256},"TuxModal",{"type":17,"value":1991},{"type":11,"tag":34,"props":2259,"children":2261},{"className":2260},[],[2262],{"type":17,"value":2263},"size",{"type":17,"value":2265}," prop + ",{"type":11,"tag":34,"props":2267,"children":2269},{"className":2268},[],[2270],{"type":17,"value":2271},"variant: 'standard' | 'sheet' | 'auto'",{"type":17,"value":2273}," (mobile sheet from iOS\u002FM3 patterns).",{"type":11,"tag":98,"props":2275,"children":2277},{"id":2276},"recently-shipped-next-sprint-batch-2026-05-22",[2278],{"type":17,"value":2279},"Recently shipped — next-sprint batch (2026-05-22)",{"type":11,"tag":110,"props":2281,"children":2282},{},[2283,2296,2309,2321],{"type":11,"tag":114,"props":2284,"children":2285},{},[2286,2294],{"type":11,"tag":118,"props":2287,"children":2288},{},[2289],{"type":11,"tag":122,"props":2290,"children":2291},{},[2292],{"type":17,"value":2293},"TuxAppSwitcher",{"type":17,"value":2295}," — shipped 2026-05-22. Waffle button +\npopover grid for hopping between TTI consumer apps.",{"type":11,"tag":114,"props":2297,"children":2298},{},[2299,2307],{"type":11,"tag":118,"props":2300,"children":2301},{},[2302],{"type":11,"tag":122,"props":2303,"children":2304},{},[2305],{"type":17,"value":2306},"TuxSplitPane",{"type":17,"value":2308}," — shipped 2026-05-22. In-page master-detail\nlayout with resizable list pane (localStorage-persistent),\noptional bottom pane, URL-bound selection.",{"type":11,"tag":114,"props":2310,"children":2311},{},[2312,2319],{"type":11,"tag":118,"props":2313,"children":2314},{},[2315],{"type":11,"tag":122,"props":2316,"children":2317},{},[2318],{"type":17,"value":458},{"type":17,"value":2320}," — shipped 2026-05-22. Second Priority B chart;\nsingle \u002F grouped \u002F stacked, vertical \u002F horizontal, comparison\noverlay for projections-vs-actuals.",{"type":11,"tag":114,"props":2322,"children":2323},{},[2324,2336],{"type":11,"tag":118,"props":2325,"children":2326},{},[2327],{"type":11,"tag":122,"props":2328,"children":2329},{},[2330],{"type":11,"tag":34,"props":2331,"children":2333},{"className":2332},[],[2334],{"type":17,"value":2335},"design\u002Ftauri-bindings.md",{"type":17,"value":2337}," — shipped 2026-05-22.\nCompanion doc enumerating which TUX components call which Tauri\nAPIs + the capability allowlist template.",{"type":11,"tag":98,"props":2339,"children":2341},{"id":2340},"native-chart-family-closed-2026-05-22",[2342],{"type":17,"value":2343},"Native chart family — closed 2026-05-22",{"type":11,"tag":19,"props":2345,"children":2346},{},[2347],{"type":17,"value":2348},"The Priority B chart family is now complete:",{"type":11,"tag":110,"props":2350,"children":2351},{},[2352,2364,2376,2396,2409,2421],{"type":11,"tag":114,"props":2353,"children":2354},{},[2355,2362],{"type":11,"tag":118,"props":2356,"children":2357},{},[2358],{"type":11,"tag":122,"props":2359,"children":2360},{},[2361],{"type":17,"value":471},{"type":17,"value":2363}," — shipped 2026-05-21 (end-of-line labels,\nprevious-period overlay, confidence band).",{"type":11,"tag":114,"props":2365,"children":2366},{},[2367,2374],{"type":11,"tag":118,"props":2368,"children":2369},{},[2370],{"type":11,"tag":122,"props":2371,"children":2372},{},[2373],{"type":17,"value":458},{"type":17,"value":2375}," — shipped 2026-05-22 (single \u002F grouped \u002F\nstacked \u002F horizontal \u002F comparison overlay).",{"type":11,"tag":114,"props":2377,"children":2378},{},[2379,2387,2389,2394],{"type":11,"tag":118,"props":2380,"children":2381},{},[2382],{"type":11,"tag":122,"props":2383,"children":2384},{},[2385],{"type":17,"value":2386},"TuxChartArea",{"type":17,"value":2388}," — shipped 2026-05-22 (overlay + stacked\nvariants; pairs with ",{"type":11,"tag":34,"props":2390,"children":2392},{"className":2391},[],[2393],{"type":17,"value":516},{"type":17,"value":2395}," for the KPI-strip composition).",{"type":11,"tag":114,"props":2397,"children":2398},{},[2399,2407],{"type":11,"tag":118,"props":2400,"children":2401},{},[2402],{"type":11,"tag":122,"props":2403,"children":2404},{},[2405],{"type":17,"value":2406},"TuxChartDonut",{"type":17,"value":2408}," — shipped 2026-05-22 (center stat slot,\nslice-label colored to wedge, auto-fold tiny slices into \"Other\").",{"type":11,"tag":114,"props":2410,"children":2411},{},[2412,2419],{"type":11,"tag":118,"props":2413,"children":2414},{},[2415],{"type":11,"tag":122,"props":2416,"children":2417},{},[2418],{"type":17,"value":495},{"type":17,"value":2420}," — shipped 2026-05-22 (linear-regression\ntrendline + R², bubble-chart mode via per-point size).",{"type":11,"tag":114,"props":2422,"children":2423},{},[2424,2432,2434],{"type":11,"tag":118,"props":2425,"children":2426},{},[2427],{"type":11,"tag":122,"props":2428,"children":2429},{},[2430],{"type":17,"value":2431},"TuxChartGauge",{"type":17,"value":2433}," — shipped 2026-05-22 (270° arc with needle\n",{"type":11,"tag":110,"props":2435,"children":2436},{},[2437],{"type":11,"tag":114,"props":2438,"children":2439},{},[2440],{"type":17,"value":2441},"bands, or radial-progress variant).",{"type":11,"tag":19,"props":2443,"children":2444},{},[2445,2447,2456,2458,2467],{"type":17,"value":2446},"Plus the pre-existing ",{"type":11,"tag":122,"props":2448,"children":2449},{},[2450],{"type":11,"tag":34,"props":2451,"children":2453},{"className":2452},[],[2454],{"type":17,"value":2455},"TuxChartGeographic",{"type":17,"value":2457}," (Texas map) and\n",{"type":11,"tag":122,"props":2459,"children":2460},{},[2461],{"type":11,"tag":34,"props":2462,"children":2464},{"className":2463},[],[2465],{"type":17,"value":2466},"TuxChartSunburst",{"type":17,"value":2468}," (two-ring radial) for specialized surfaces.",{"type":11,"tag":82,"props":2470,"children":2471},{},[],{"type":11,"tag":86,"props":2473,"children":2475},{"id":2474},"recently-shipped-figma-absorption-pass-2026-05-19-2026-05-20",[2476],{"type":17,"value":2477},"Recently shipped — Figma absorption pass (2026-05-19 \u002F 2026-05-20)",{"type":11,"tag":19,"props":2479,"children":2480},{},[2481,2483,2493],{"type":17,"value":2482},"Sequenced absorption of seven high-signal Figma reference systems\n(Windows UI kit, Aggie UX, shadcn_ui Jan 2026, Vercel AI Elements,\nPrimer Web, Microsoft Fluent 2 Web, Backstage). \"Absorb the thinking,\nskip the chrome\" — most findings confirmed TUX's architecture; the\nrest landed as net-new components, a layout, build-pipeline additions,\nand one MDC infrastructure fix. Per-file findings cached under\n",{"type":11,"tag":29,"props":2484,"children":2486},{"href":2485},"..\u002Freference\u002Ffigma-cache\u002F",[2487],{"type":11,"tag":34,"props":2488,"children":2490},{"className":2489},[],[2491],{"type":17,"value":2492},"reference\u002Ffigma-cache\u002F",{"type":17,"value":2494},"; each NOTES.md\nrecords the skip\u002Fabsorb\u002Ftension\u002Fdecisions framework.",{"type":11,"tag":98,"props":2496,"children":2498},{"id":2497},"new-components-8",[2499],{"type":17,"value":2500},"New components (8)",{"type":11,"tag":110,"props":2502,"children":2503},{},[2504,2517,2537,2558,2571,2584,2597,2617],{"type":11,"tag":114,"props":2505,"children":2506},{},[2507,2515],{"type":11,"tag":118,"props":2508,"children":2509},{},[2510],{"type":11,"tag":122,"props":2511,"children":2512},{},[2513],{"type":17,"value":2514},"TuxSuggestionChips",{"type":17,"value":2516}," — horizontal prompt chip row (Vercel)",{"type":11,"tag":114,"props":2518,"children":2519},{},[2520,2528,2529,2535],{"type":11,"tag":118,"props":2521,"children":2522},{},[2523],{"type":11,"tag":122,"props":2524,"children":2525},{},[2526],{"type":17,"value":2527},"TuxBranchNav",{"type":17,"value":1991},{"type":11,"tag":34,"props":2530,"children":2532},{"className":2531},[],[2533],{"type":17,"value":2534},"‹ N of M ›",{"type":17,"value":2536}," response-alternative nav (Vercel)",{"type":11,"tag":114,"props":2538,"children":2539},{},[2540,2548,2550,2556],{"type":11,"tag":118,"props":2541,"children":2542},{},[2543],{"type":11,"tag":122,"props":2544,"children":2545},{},[2546],{"type":17,"value":2547},"TuxInlineCitation",{"type":17,"value":2549}," — academic ",{"type":11,"tag":34,"props":2551,"children":2553},{"className":2552},[],[2554],{"type":17,"value":2555},"[N]",{"type":17,"value":2557}," pill + hover popover (Vercel)",{"type":11,"tag":114,"props":2559,"children":2560},{},[2561,2569],{"type":11,"tag":118,"props":2562,"children":2563},{},[2564],{"type":11,"tag":122,"props":2565,"children":2566},{},[2567],{"type":17,"value":2568},"TuxContextMeter",{"type":17,"value":2570}," — token-utilization badge + cost popover (Vercel)",{"type":11,"tag":114,"props":2572,"children":2573},{},[2574,2582],{"type":11,"tag":118,"props":2575,"children":2576},{},[2577],{"type":11,"tag":122,"props":2578,"children":2579},{},[2580],{"type":17,"value":2581},"TuxArtifact",{"type":17,"value":2583}," — container for AI-generated output (Vercel)",{"type":11,"tag":114,"props":2585,"children":2586},{},[2587,2595],{"type":11,"tag":118,"props":2588,"children":2589},{},[2590],{"type":11,"tag":122,"props":2591,"children":2592},{},[2593],{"type":17,"value":2594},"TuxRemovableChip",{"type":17,"value":2596}," — dismissible chip primitive (Primer)",{"type":11,"tag":114,"props":2598,"children":2599},{},[2600,2607,2609,2615],{"type":11,"tag":118,"props":2601,"children":2602},{},[2603],{"type":11,"tag":122,"props":2604,"children":2605},{},[2606],{"type":17,"value":1706},{"type":17,"value":2608}," — form-field label + ",{"type":11,"tag":34,"props":2610,"children":2612},{"className":2611},[],[2613],{"type":17,"value":2614},"(i)",{"type":17,"value":2616}," help popover (Fluent 2)",{"type":11,"tag":114,"props":2618,"children":2619},{},[2620,2628],{"type":11,"tag":118,"props":2621,"children":2622},{},[2623],{"type":11,"tag":122,"props":2624,"children":2625},{},[2626],{"type":17,"value":2627},"TuxTeachingPopover",{"type":17,"value":2629}," — onboarding\u002Fguided-tour tooltip (Fluent 2)",{"type":11,"tag":98,"props":2631,"children":2633},{"id":2632},"enhancements-5",[2634],{"type":17,"value":2635},"Enhancements (5)",{"type":11,"tag":110,"props":2637,"children":2638},{},[2639,2652,2680,2709,2727],{"type":11,"tag":114,"props":2640,"children":2641},{},[2642,2650],{"type":11,"tag":118,"props":2643,"children":2644},{},[2645],{"type":11,"tag":122,"props":2646,"children":2647},{},[2648],{"type":17,"value":2649},"TuxCodeBlock",{"type":17,"value":2651}," gained a download button + filename resolution",{"type":11,"tag":114,"props":2653,"children":2654},{},[2655,2662,2664,2670,2672,2678],{"type":11,"tag":118,"props":2656,"children":2657},{},[2658],{"type":11,"tag":122,"props":2659,"children":2660},{},[2661],{"type":17,"value":126},{"type":17,"value":2663}," gained ",{"type":11,"tag":34,"props":2665,"children":2667},{"className":2666},[],[2668],{"type":17,"value":2669},"compact",{"type":17,"value":2671}," (Primer) + ",{"type":11,"tag":34,"props":2673,"children":2675},{"className":2674},[],[2676],{"type":17,"value":2677},"kind",{"type":17,"value":2679}," preset library\nwith 5 named cases (Backstage)",{"type":11,"tag":114,"props":2681,"children":2682},{},[2683,2691,2693,2699,2701,2707],{"type":11,"tag":118,"props":2684,"children":2685},{},[2686],{"type":11,"tag":122,"props":2687,"children":2688},{},[2689],{"type":17,"value":2690},"TuxChatMessage",{"type":17,"value":2692}," gained a ",{"type":11,"tag":34,"props":2694,"children":2696},{"className":2695},[],[2697],{"type":17,"value":2698},"#header-trailing",{"type":17,"value":2700}," slot surfaced by\ndogfooding the ",{"type":11,"tag":34,"props":2702,"children":2704},{"className":2703},[],[2705],{"type":17,"value":2706},"tti-ai-studio-session.vue",{"type":17,"value":2708}," refactor",{"type":11,"tag":114,"props":2710,"children":2711},{},[2712,2720,2722],{"type":11,"tag":118,"props":2713,"children":2714},{},[2715],{"type":11,"tag":122,"props":2716,"children":2717},{},[2718],{"type":17,"value":2719},"TuxFilterPanel",{"type":17,"value":2721}," refactored to consume ",{"type":11,"tag":34,"props":2723,"children":2725},{"className":2724},[],[2726],{"type":17,"value":2594},{"type":11,"tag":114,"props":2728,"children":2729},{},[2730,2738,2740,2746,2748,2754,2755,2761,2763],{"type":11,"tag":118,"props":2731,"children":2732},{},[2733],{"type":11,"tag":122,"props":2734,"children":2735},{},[2736],{"type":17,"value":2737},"sidebar.vue layout",{"type":17,"value":2739}," rewritten on ",{"type":11,"tag":34,"props":2741,"children":2743},{"className":2742},[],[2744],{"type":17,"value":2745},"UDashboardGroup",{"type":17,"value":2747}," +\n",{"type":11,"tag":34,"props":2749,"children":2751},{"className":2750},[],[2752],{"type":17,"value":2753},"UDashboardSidebar",{"type":17,"value":1180},{"type":11,"tag":34,"props":2756,"children":2758},{"className":2757},[],[2759],{"type":17,"value":2760},"UDashboardPanel",{"type":17,"value":2762},"; new demo example at\n",{"type":11,"tag":29,"props":2764,"children":2766},{"href":2765},"..\u002Fapp\u002Fpages\u002Fexamples\u002Fsidebar-shell.vue",[2767],{"type":11,"tag":34,"props":2768,"children":2770},{"className":2769},[],[2771],{"type":17,"value":2772},"\u002Fexamples\u002Fsidebar-shell",{"type":11,"tag":98,"props":2774,"children":2776},{"id":2775},"build-pipeline-infrastructure",[2777],{"type":17,"value":2778},"Build pipeline + infrastructure",{"type":11,"tag":110,"props":2780,"children":2781},{},[2782,2830,2873],{"type":11,"tag":114,"props":2783,"children":2784},{},[2785,2793,2794,2800,2802,2808],{"type":11,"tag":118,"props":2786,"children":2787},{},[2788],{"type":11,"tag":122,"props":2789,"children":2790},{},[2791],{"type":17,"value":2792},"Breakpoint tokens",{"type":17,"value":1991},{"type":11,"tag":34,"props":2795,"children":2797},{"className":2796},[],[2798],{"type":17,"value":2799},"breakpoint",{"type":17,"value":2801}," block in ",{"type":11,"tag":34,"props":2803,"children":2805},{"className":2804},[],[2806],{"type":17,"value":2807},"design\u002Ftokens.json",{"type":11,"tag":110,"props":2809,"children":2810},{},[2811],{"type":11,"tag":114,"props":2812,"children":2813},{},[2814,2820,2822,2828],{"type":11,"tag":34,"props":2815,"children":2817},{"className":2816},[],[2818],{"type":17,"value":2819},"@theme --breakpoint-*",{"type":17,"value":2821}," in ",{"type":11,"tag":34,"props":2823,"children":2825},{"className":2824},[],[2826],{"type":17,"value":2827},"globals.css",{"type":17,"value":2829},". Sourced from Microsoft's\nWindows UI kit responsive ladder, rebased to TUX's editorial widths.",{"type":11,"tag":114,"props":2831,"children":2832},{},[2833,2841,2842,2848,2849,2855,2857,2863,2865,2871],{"type":11,"tag":118,"props":2834,"children":2835},{},[2836],{"type":11,"tag":122,"props":2837,"children":2838},{},[2839],{"type":17,"value":2840},"LaTeX math in MDC",{"type":17,"value":1991},{"type":11,"tag":34,"props":2843,"children":2845},{"className":2844},[],[2846],{"type":17,"value":2847},"remark-math",{"type":17,"value":1180},{"type":11,"tag":34,"props":2850,"children":2852},{"className":2851},[],[2853],{"type":17,"value":2854},"rehype-katex",{"type":17,"value":2856}," + KaTeX\nCSS imported globally. ",{"type":11,"tag":34,"props":2858,"children":2860},{"className":2859},[],[2861],{"type":17,"value":2862},"$inline$",{"type":17,"value":2864}," and ",{"type":11,"tag":34,"props":2866,"children":2868},{"className":2867},[],[2869],{"type":17,"value":2870},"$$display$$",{"type":17,"value":2872}," now render in\nany markdown surface.",{"type":11,"tag":114,"props":2874,"children":2875},{},[2876,2884,2885,2891,2893,2899,2901,2907,2909,2915],{"type":11,"tag":118,"props":2877,"children":2878},{},[2879],{"type":11,"tag":122,"props":2880,"children":2881},{},[2882],{"type":17,"value":2883},"MDC component resolution fix",{"type":17,"value":1991},{"type":11,"tag":34,"props":2886,"children":2888},{"className":2887},[],[2889],{"type":17,"value":2890},"nuxt.config.ts",{"type":17,"value":2892}," now sets\n",{"type":11,"tag":34,"props":2894,"children":2896},{"className":2895},[],[2897],{"type":17,"value":2898},"components: [{ ..., global: true }]",{"type":17,"value":2900}," so ",{"type":11,"tag":34,"props":2902,"children":2904},{"className":2903},[],[2905],{"type":17,"value":2906},"::tux-alert{...}",{"type":17,"value":2908}," and other\nTux* embeds in markdown actually resolve at runtime. Closes a\nlong-standing ",{"type":11,"tag":34,"props":2910,"children":2912},{"className":2911},[],[2913],{"type":17,"value":2914},"[Vue warn]: Failed to resolve component: TuxAlert",{"type":17,"value":2916},"\nthat fired on every markdown render.",{"type":11,"tag":98,"props":2918,"children":2920},{"id":2919},"conventions",[2921],{"type":17,"value":2922},"Conventions",{"type":11,"tag":19,"props":2924,"children":2925},{},[2926,2928,2937],{"type":17,"value":2927},"Added \"Conventions\" section to\n",{"type":11,"tag":29,"props":2929,"children":2930},{"href":52},[2931],{"type":11,"tag":34,"props":2932,"children":2934},{"className":2933},[],[2935],{"type":17,"value":2936},"design\u002Fcomponents.md",{"type":17,"value":2938}," with two documented standards:",{"type":11,"tag":110,"props":2940,"children":2941},{},[2942,2970],{"type":11,"tag":114,"props":2943,"children":2944},{},[2945,2953,2955,2960,2962,2968],{"type":11,"tag":118,"props":2946,"children":2947},{},[2948],{"type":11,"tag":122,"props":2949,"children":2950},{},[2951],{"type":17,"value":2952},"Chat-message actions",{"type":17,"value":2954}," — standard 5-icon set for\n",{"type":11,"tag":34,"props":2956,"children":2958},{"className":2957},[],[2959],{"type":17,"value":2690},{"type":17,"value":2961}," ",{"type":11,"tag":34,"props":2963,"children":2965},{"className":2964},[],[2966],{"type":17,"value":2967},"#tools",{"type":17,"value":2969},": Copy \u002F Regenerate \u002F Share \u002F Helpful \u002F Off",{"type":11,"tag":114,"props":2971,"children":2972},{},[2973,2981],{"type":11,"tag":118,"props":2974,"children":2975},{},[2976],{"type":11,"tag":122,"props":2977,"children":2978},{},[2979],{"type":17,"value":2980},"Form validation — when to use which",{"type":17,"value":2982}," — decision tree across\ninline field error \u002F inline form summary \u002F blocking dialog \u002F page\nbanner \u002F toast",{"type":11,"tag":98,"props":2984,"children":2986},{"id":2985},"carry-forwards-1",[2987],{"type":17,"value":1941},{"type":11,"tag":19,"props":2989,"children":2990},{},[2991],{"type":17,"value":2992},"Deferred-with-criterion items (in NOTES.md follow-ups; build when a\nconsumer surface forces the question):",{"type":11,"tag":110,"props":2994,"children":2995},{},[2996,3007,3018,3029,3034],{"type":11,"tag":114,"props":2997,"children":2998},{},[2999,3005],{"type":11,"tag":34,"props":3000,"children":3002},{"className":3001},[],[3003],{"type":17,"value":3004},"TuxSegmentedControl",{"type":17,"value":3006}," (Primer) — only if URadioGroup-as-buttons\ndoesn't compose cleanly for a real surface",{"type":11,"tag":114,"props":3008,"children":3009},{},[3010,3016],{"type":11,"tag":34,"props":3011,"children":3013},{"className":3012},[],[3014],{"type":17,"value":3015},"TuxCommentBox",{"type":17,"value":3017}," (Primer) — markdown editor with toolbar; bigger\nbuild, deferred to tti-ai-studio drafting\u002Fannotation context",{"type":11,"tag":114,"props":3019,"children":3020},{},[3021,3027],{"type":11,"tag":34,"props":3022,"children":3024},{"className":3023},[],[3025],{"type":17,"value":3026},"TuxSparkline.autoTone",{"type":17,"value":3028}," (Backstage) — auto-color by trend direction;\n~10 LOC if any consumer needs it",{"type":11,"tag":114,"props":3030,"children":3031},{},[3032],{"type":17,"value":3033},"TuxDataTable cross-check against Primer's 17 frames + Fluent 2's\nvariant matrix when next material update lands",{"type":11,"tag":114,"props":3035,"children":3036},{},[3037,3042,3044,3050],{"type":11,"tag":34,"props":3038,"children":3040},{"className":3039},[],[3041],{"type":17,"value":2690},{"type":17,"value":3043}," vs ",{"type":11,"tag":34,"props":3045,"children":3047},{"className":3046},[],[3048],{"type":17,"value":3049},"UChatMessage",{"type":17,"value":3051}," dead-code audit — verify the TUX\nwrapper still adds TTI-specific value once dust settles",{"type":11,"tag":19,"props":3053,"children":3054},{},[3055,3060],{"type":11,"tag":122,"props":3056,"children":3057},{},[3058],{"type":17,"value":3059},"Medium-signal pass (2026-05-21):",{"type":17,"value":3061}," Charts UI Kit + Data Viz Graphs",{"type":11,"tag":110,"props":3063,"children":3064},{},[3065],{"type":11,"tag":114,"props":3066,"children":3067},{},[3068,3070,3075,3077,3082],{"type":17,"value":3069},"Data Table + Snow Dashboard + Empty State Illustration Kit absorbed.\nNet new: ",{"type":11,"tag":122,"props":3071,"children":3072},{},[3073],{"type":17,"value":3074},"0 components shipped, 1 doc stance added",{"type":17,"value":3076}," (no decorative\nillustrations in ",{"type":11,"tag":34,"props":3078,"children":3080},{"className":3079},[],[3081],{"type":17,"value":126},{"type":17,"value":3083},"). New deferred-with-criterion items:",{"type":11,"tag":110,"props":3085,"children":3086},{},[3087,3119,3144,3153,3185,3203,3218,3239,3254],{"type":11,"tag":114,"props":3088,"children":3089},{},[3090,3094,3096,3102,3103,3109,3111,3117],{"type":11,"tag":122,"props":3091,"children":3092},{},[3093],{"type":17,"value":471},{"type":17,"value":3095}," (Priority B): default end-of-line value labels\ncolored to match series; support ",{"type":11,"tag":34,"props":3097,"children":3099},{"className":3098},[],[3100],{"type":17,"value":3101},"withBrush",{"type":17,"value":651},{"type":11,"tag":34,"props":3104,"children":3106},{"className":3105},[],[3107],{"type":17,"value":3108},"#range",{"type":17,"value":3110}," slot for\ntime-series scrubbing; support ",{"type":11,"tag":34,"props":3112,"children":3114},{"className":3113},[],[3115],{"type":17,"value":3116},"series.previous",{"type":17,"value":3118}," overlay + tooltip",{"type":11,"tag":114,"props":3120,"children":3121},{},[3122,3126,3128,3134,3136,3142],{"type":11,"tag":122,"props":3123,"children":3124},{},[3125],{"type":17,"value":458},{"type":17,"value":3127}," (Priority B): ",{"type":11,"tag":34,"props":3129,"children":3131},{"className":3130},[],[3132],{"type":17,"value":3133},"valuePlacement: \"in-bar\" | \"above\" | \"auto\"",{"type":17,"value":3135}," prop (auto: bar pixel-height ≥ 24px → in-bar); support a\n",{"type":11,"tag":34,"props":3137,"children":3139},{"className":3138},[],[3140],{"type":17,"value":3141},"comparison",{"type":17,"value":3143}," series with muted fill for projection-vs-actual",{"type":11,"tag":114,"props":3145,"children":3146},{},[3147,3151],{"type":11,"tag":122,"props":3148,"children":3149},{},[3150],{"type":17,"value":2386},{"type":17,"value":3152}," (Priority B): stacked variant; KPI strip\ncomposed above by parent template, not baked in",{"type":11,"tag":114,"props":3154,"children":3155},{},[3156,3164,3166,3172,3174,3184],{"type":11,"tag":118,"props":3157,"children":3158},{},[3159],{"type":11,"tag":122,"props":3160,"children":3161},{},[3162],{"type":17,"value":3163},"TuxRuleBuilder",{"type":17,"value":3165}," — shipped 2026-05-26; relational query UI\nwith five operator families, nestable groups (depth-bounded), and\ntype-aware value editors. Recursive ",{"type":11,"tag":34,"props":3167,"children":3169},{"className":3168},[],[3170],{"type":17,"value":3171},"TuxRuleBuilderGroup",{"type":17,"value":3173}," internal\nchild. See\n",{"type":11,"tag":29,"props":3175,"children":3177},{"href":3176},"..\u002Fapp\u002Fpages\u002Fcomponents\u002Frule-builder.vue",[3178],{"type":11,"tag":34,"props":3179,"children":3181},{"className":3180},[],[3182],{"type":17,"value":3183},"\u002Fcomponents\u002Frule-builder",{"type":17,"value":162},{"type":11,"tag":114,"props":3186,"children":3187},{},[3188,3201],{"type":11,"tag":122,"props":3189,"children":3190},{},[3191,3193,3199],{"type":17,"value":3192},"TuxRichDataGrid: per-column ",{"type":11,"tag":34,"props":3194,"children":3196},{"className":3195},[],[3197],{"type":17,"value":3198},"headerMenu",{"type":17,"value":3200}," slot",{"type":17,"value":3202}," for sort \u002F hide \u002F\npin \u002F filter from the column header (Snow + data-table kit)",{"type":11,"tag":114,"props":3204,"children":3205},{},[3206,3211,3213],{"type":11,"tag":122,"props":3207,"children":3208},{},[3209],{"type":17,"value":3210},"TuxRichDataGrid: inline column-header filter popover",{"type":17,"value":3212}," as a\nsecond filter mode alongside ",{"type":11,"tag":34,"props":3214,"children":3216},{"className":3215},[],[3217],{"type":17,"value":2719},{"type":11,"tag":114,"props":3219,"children":3220},{},[3221,3237],{"type":11,"tag":122,"props":3222,"children":3223},{},[3224,3229,3231,3236],{"type":11,"tag":34,"props":3225,"children":3227},{"className":3226},[],[3228],{"type":17,"value":2121},{"type":17,"value":3230},": ",{"type":11,"tag":34,"props":3232,"children":3234},{"className":3233},[],[3235],{"type":17,"value":1340},{"type":17,"value":3200},{"type":17,"value":3238}," for an optional right rail\n(notifications + activities). Defer until two surfaces request it.",{"type":11,"tag":114,"props":3240,"children":3241},{},[3242,3252],{"type":11,"tag":122,"props":3243,"children":3244},{},[3245,3250],{"type":11,"tag":34,"props":3246,"children":3248},{"className":3247},[],[3249],{"type":17,"value":545},{"type":17,"value":3251}," doc",{"type":17,"value":3253}," — series palette, axis\u002Fgrid\u002Flegend\ntokens, accessibility (alt-text + screen-reader summaries),\nin-bar vs above value-label decision, brush\u002Fprevious-period\npatterns. Ship alongside the first TuxChart* component.",{"type":11,"tag":114,"props":3255,"children":3256},{},[3257,3265,3267,3276,3278,3283],{"type":11,"tag":118,"props":3258,"children":3259},{},[3260],{"type":11,"tag":122,"props":3261,"children":3262},{},[3263],{"type":17,"value":3264},"\"Faceted vs relational filtering — when to use which\"",{"type":17,"value":3266}," —\nshipped 2026-05-26 in\n",{"type":11,"tag":29,"props":3268,"children":3270},{"href":3269},".\u002Fcomponents.md",[3271],{"type":11,"tag":34,"props":3272,"children":3274},{"className":3273},[],[3275],{"type":17,"value":2936},{"type":17,"value":3277}," Conventions alongside\n",{"type":11,"tag":34,"props":3279,"children":3281},{"className":3280},[],[3282],{"type":17,"value":3163},{"type":17,"value":162},{"type":11,"tag":19,"props":3285,"children":3286},{},[3287,3292,3294,3299],{"type":11,"tag":122,"props":3288,"children":3289},{},[3290],{"type":17,"value":3291},"AI-studio chat-surface pass (2026-05-21):",{"type":17,"value":3293}," Chat UI kit + Chat\nInput Box + ChatGPT UI Kit + MCP Apps for Claude absorbed. Net new:\n",{"type":11,"tag":122,"props":3295,"children":3296},{},[3297],{"type":17,"value":3298},"0 components shipped.",{"type":17,"value":3300}," The chat surface was saturated after the\nprior Vercel AI Elements + Fluent 2 + Primer pass. New deferred-\nwith-criterion items, mostly anchored on a future MCP integration\nin tti-ai-studio:",{"type":11,"tag":110,"props":3302,"children":3303},{},[3304,3338,3374,3404,3426],{"type":11,"tag":114,"props":3305,"children":3306},{},[3307,3319,3321,3326,3327,3337],{"type":11,"tag":118,"props":3308,"children":3309},{},[3310],{"type":11,"tag":122,"props":3311,"children":3312},{},[3313],{"type":11,"tag":34,"props":3314,"children":3316},{"className":3315},[],[3317],{"type":17,"value":3318},"TuxMcpEmbed",{"type":17,"value":3320}," — shipped 2026-05-26; ~340 LOC (came in over\nthe ~150 LOC estimate once the skeleton + reduced-motion fallback +\ncollapse-state-sync landed). Sister to ",{"type":11,"tag":34,"props":3322,"children":3324},{"className":3323},[],[3325],{"type":17,"value":2581},{"type":17,"value":518},{"type":11,"tag":29,"props":3328,"children":3330},{"href":3329},"..\u002Fapp\u002Fpages\u002Fcomponents\u002Fmcp-embed.vue",[3331],{"type":11,"tag":34,"props":3332,"children":3334},{"className":3333},[],[3335],{"type":17,"value":3336},"\u002Fcomponents\u002Fmcp-embed",{"type":17,"value":162},{"type":11,"tag":114,"props":3339,"children":3340},{},[3341,3353,3355,3361,3363,3373],{"type":11,"tag":118,"props":3342,"children":3343},{},[3344],{"type":11,"tag":122,"props":3345,"children":3346},{},[3347],{"type":11,"tag":34,"props":3348,"children":3350},{"className":3349},[],[3351],{"type":17,"value":3352},"TuxCardCarousel",{"type":17,"value":3354}," — shipped (predates this entry's\nauthorship; roadmap was stale). Horizontal scroll of cards with\nprev\u002Fnext + optional pagination dots. Eyebrow + display title.\nWraps ",{"type":11,"tag":34,"props":3356,"children":3358},{"className":3357},[],[3359],{"type":17,"value":3360},"UCarousel",{"type":17,"value":3362}," (embla). See\n",{"type":11,"tag":29,"props":3364,"children":3366},{"href":3365},"..\u002Fapp\u002Fpages\u002Fcomponents\u002Fcard-carousel.vue",[3367],{"type":11,"tag":34,"props":3368,"children":3370},{"className":3369},[],[3371],{"type":17,"value":3372},"\u002Fcomponents\u002Fcard-carousel",{"type":17,"value":162},{"type":11,"tag":114,"props":3375,"children":3376},{},[3377,3385,3387,3395,3397,3402],{"type":11,"tag":118,"props":3378,"children":3379},{},[3380],{"type":11,"tag":122,"props":3381,"children":3382},{},[3383],{"type":17,"value":3384},"MCP three-tier display taxonomy",{"type":17,"value":3386}," — done. Lives in\n",{"type":11,"tag":29,"props":3388,"children":3389},{"href":3269},[3390],{"type":11,"tag":34,"props":3391,"children":3393},{"className":3392},[],[3394],{"type":17,"value":2936},{"type":17,"value":3396}," § \"MCP tool output\".\nUpdated 2026-05-26 alongside ",{"type":11,"tag":34,"props":3398,"children":3400},{"className":3399},[],[3401],{"type":17,"value":3318},{"type":17,"value":3403}," ship to reflect the\nstatic-vs-interactive split on the inline-card tier.",{"type":11,"tag":114,"props":3405,"children":3406},{},[3407,3416,3418,3424],{"type":11,"tag":122,"props":3408,"children":3409},{},[3410],{"type":11,"tag":34,"props":3411,"children":3413},{"className":3412},[],[3414],{"type":17,"value":3415},"TuxComposer.cancelable",{"type":17,"value":3417}," (carry-forward, defer) — when a\nconsumer wraps TuxComposer in a modal and wants explicit\n",{"type":11,"tag":34,"props":3419,"children":3421},{"className":3420},[],[3422],{"type":17,"value":3423},"[Cancel] [Send]",{"type":17,"value":3425}," pair. Build only when forced.",{"type":11,"tag":114,"props":3427,"children":3428},{},[3429,3434,3436,3441,3443,3449],{"type":11,"tag":122,"props":3430,"children":3431},{},[3432],{"type":17,"value":3433},"First-run AI-surface taxonomy",{"type":17,"value":3435}," (\"Examples \u002F Capabilities \u002F\nLimitations\") — document in ",{"type":11,"tag":34,"props":3437,"children":3439},{"className":3438},[],[3440],{"type":17,"value":2936},{"type":17,"value":3442}," Conventions\nwhen a consumer surface needs richer first-run framing than\n",{"type":11,"tag":34,"props":3444,"children":3446},{"className":3445},[],[3447],{"type":17,"value":3448},"TuxEmptyState kind=\"first-run\"",{"type":17,"value":3450},". Compose with TuxFactoid 3-up\nor 3-up TuxCard grid; no new component.",{"type":11,"tag":82,"props":3452,"children":3453},{},[],{"type":11,"tag":86,"props":3455,"children":3457},{"id":3456},"recently-shipped-pecan-landscape-rebrand-2026-05-21",[3458],{"type":17,"value":3459},"Recently shipped — PECAN → Landscape rebrand (2026-05-21)",{"type":11,"tag":19,"props":3461,"children":3462},{},[3463,3465,3470,3472,3477],{"type":17,"value":3464},"The downstream consumer formerly named ",{"type":11,"tag":122,"props":3466,"children":3467},{},[3468],{"type":17,"value":3469},"PECAN",{"type":17,"value":3471}," is now ",{"type":11,"tag":122,"props":3473,"children":3474},{},[3475],{"type":17,"value":3476},"Landscape",{"type":17,"value":3478},".\nTUX touched ~50 files across pages, components, kits, and design docs;\nhistorical record (CHANGELOG, ADRs) was left intact by design.",{"type":11,"tag":19,"props":3480,"children":3481},{},[3482],{"type":11,"tag":122,"props":3483,"children":3484},{},[3485],{"type":17,"value":3486},"Renamed:",{"type":11,"tag":110,"props":3488,"children":3489},{},[3490,3532],{"type":11,"tag":114,"props":3491,"children":3492},{},[3493,3499,3501,3507,3509,3514,3516,3522,3524,3530],{"type":11,"tag":34,"props":3494,"children":3496},{"className":3495},[],[3497],{"type":17,"value":3498},"app\u002Fpages\u002Fexamples\u002Fpecan-dashboard.vue",{"type":17,"value":3500}," → ",{"type":11,"tag":34,"props":3502,"children":3504},{"className":3503},[],[3505],{"type":17,"value":3506},"landscape-dashboard.vue",{"type":17,"value":3508},"\n(file + route ",{"type":11,"tag":34,"props":3510,"children":3512},{"className":3511},[],[3513],{"type":17,"value":1332},{"type":17,"value":3515}," + body text + nav entry\nin ",{"type":11,"tag":34,"props":3517,"children":3519},{"className":3518},[],[3520],{"type":17,"value":3521},"app\u002Fapp.vue",{"type":17,"value":3523}," + index card in ",{"type":11,"tag":34,"props":3525,"children":3527},{"className":3526},[],[3528],{"type":17,"value":3529},"app\u002Fpages\u002Fexamples\u002Findex.vue",{"type":17,"value":3531},")",{"type":11,"tag":114,"props":3533,"children":3534},{},[3535,3541,3542,3548,3550,3556],{"type":11,"tag":34,"props":3536,"children":3538},{"className":3537},[],[3539],{"type":17,"value":3540},"public\u002Fkits\u002Fpecan\u002F",{"type":17,"value":3500},{"type":11,"tag":34,"props":3543,"children":3545},{"className":3544},[],[3546],{"type":17,"value":3547},"public\u002Fkits\u002Flandscape\u002F",{"type":17,"value":3549}," (folder + README +\nAppShell + Pages.jsx + index.html; ",{"type":11,"tag":34,"props":3551,"children":3553},{"className":3552},[],[3554],{"type":17,"value":3555},"app\u002Fpages\u002Fkits.vue",{"type":17,"value":3557}," slug + label)",{"type":11,"tag":19,"props":3559,"children":3560},{},[3561,3566],{"type":11,"tag":122,"props":3562,"children":3563},{},[3564],{"type":17,"value":3565},"Prose updated",{"type":17,"value":3567}," (first mention per file uses \"Landscape (formerly\nPECAN)\" for continuity; later mentions are bare \"Landscape\"):",{"type":11,"tag":110,"props":3569,"children":3570},{},[3571,3594,3607,3612,3636],{"type":11,"tag":114,"props":3572,"children":3573},{},[3574,3580,3582,3587,3588],{"type":11,"tag":34,"props":3575,"children":3577},{"className":3576},[],[3578],{"type":17,"value":3579},"README.md",{"type":17,"value":3581},", ",{"type":11,"tag":34,"props":3583,"children":3585},{"className":3584},[],[3586],{"type":17,"value":2936},{"type":17,"value":3581},{"type":11,"tag":34,"props":3589,"children":3591},{"className":3590},[],[3592],{"type":17,"value":3593},"design\u002Froadmap.md",{"type":11,"tag":114,"props":3595,"children":3596},{},[3597,3599,3605],{"type":17,"value":3598},"~30 showcase pages under ",{"type":11,"tag":34,"props":3600,"children":3602},{"className":3601},[],[3603],{"type":17,"value":3604},"app\u002Fpages\u002F",{"type":17,"value":3606}," (components, examples, forms,\nvisualizations, reports, kits)",{"type":11,"tag":114,"props":3608,"children":3609},{},[3610],{"type":17,"value":3611},"10 component JSDoc blocks (TuxDescriptionList, TuxCodeBlock,\nTuxFilterPanel, TuxPagination, TuxTeachingPopover, TuxTreemap,\nTuxSearch, TuxSiteNav, TuxRichDataGrid, TuxFooter)",{"type":11,"tag":114,"props":3613,"children":3614},{},[3615,3617,3622,3623,3628,3630],{"type":17,"value":3616},"Top-of-file comments in ",{"type":11,"tag":34,"props":3618,"children":3620},{"className":3619},[],[3621],{"type":17,"value":2890},{"type":17,"value":3581},{"type":11,"tag":34,"props":3624,"children":3626},{"className":3625},[],[3627],{"type":17,"value":3521},{"type":17,"value":3629},",\n",{"type":11,"tag":34,"props":3631,"children":3633},{"className":3632},[],[3634],{"type":17,"value":3635},"app\u002Flayouts\u002Fsidebar.vue",{"type":11,"tag":114,"props":3637,"children":3638},{},[3639,3641,3647,3649,3655],{"type":17,"value":3640},"All ",{"type":11,"tag":34,"props":3642,"children":3644},{"className":3643},[],[3645],{"type":17,"value":3646},"public\u002Fkits\u002Faggieux\u002F*.jsx",{"type":17,"value":3648}," demo content (banners default\n",{"type":11,"tag":34,"props":3650,"children":3652},{"className":3651},[],[3653],{"type":17,"value":3654},"productName",{"type":17,"value":3656},", footer demo text, breadcrumbs, overlays)",{"type":11,"tag":19,"props":3658,"children":3659},{},[3660],{"type":11,"tag":122,"props":3661,"children":3662},{},[3663],{"type":17,"value":3664},"Leave alone (historical record, by design):",{"type":11,"tag":110,"props":3666,"children":3667},{},[3668,3678],{"type":11,"tag":114,"props":3669,"children":3670},{},[3671,3676],{"type":11,"tag":34,"props":3672,"children":3674},{"className":3673},[],[3675],{"type":17,"value":78},{"type":17,"value":3677}," — entries refer to the project under its name at the\ntime the entry was written. Don't rewrite history.",{"type":11,"tag":114,"props":3679,"children":3680},{},[3681,3687],{"type":11,"tag":34,"props":3682,"children":3684},{"className":3683},[],[3685],{"type":17,"value":3686},"docs\u002Fadr\u002F*.md",{"type":17,"value":3688}," — architectural decisions reference the name as it\nwas when the decision was made.",{"type":11,"tag":19,"props":3690,"children":3691},{},[3692,3697,3698,3703,3705,3711,3713,3719],{"type":11,"tag":122,"props":3693,"children":3694},{},[3695],{"type":17,"value":3696},"Composition refresh shipped alongside:",{"type":17,"value":2961},{"type":11,"tag":34,"props":3699,"children":3701},{"className":3700},[],[3702],{"type":17,"value":3506},{"type":17,"value":3704},"\nwas rebuilt on the sidebar layout (left-rail nav with brand lockup +\ntwo nav groups + user chip) and gained a KPI row with delta-vs-\nprevious readings, an inline ingest-rate sparkline next to the\ntreemap section header, and a right-rail aside composing Recent-\nactivity + Active-agents tiles. Composes ~15 Tux* + Nuxt UI 4\nprimitives. Per the Snow Dashboard absorption notes\n(",{"type":11,"tag":34,"props":3706,"children":3708},{"className":3707},[],[3709],{"type":17,"value":3710},"reference\u002Ffigma-cache\u002Fsnow-dashboard-ui-kit\u002FNOTES.md",{"type":17,"value":3712},"). No new\ncomponents — the right rail is a host-driven grid, not a layout\nslot. The ",{"type":11,"tag":34,"props":3714,"children":3716},{"className":3715},[],[3717],{"type":17,"value":3718},"sidebar.vue#aside",{"type":17,"value":3720}," slot carry-forward waits for a second\nconsumer surface before being formalized.",{"type":11,"tag":82,"props":3722,"children":3723},{},[],{"type":11,"tag":86,"props":3725,"children":3727},{"id":3726},"recently-shipped-keyboard-shortcuts-prose-layer-drawer-tree-2026-05-14",[3728],{"type":17,"value":3729},"Recently shipped — keyboard shortcuts + prose layer + drawer + tree (2026-05-14)",{"type":11,"tag":19,"props":3731,"children":3732},{},[3733,3735,3740,3741,3746,3747,3752,3753,3758,3760,3765,3766,3772,3773,3779],{"type":17,"value":3734},"Sliced delivery of the Nuxt UI gap-analysis follow-through. Three of\nthe five components close explicit roadmap entries above (under\ndifferent working names — ",{"type":11,"tag":34,"props":3736,"children":3738},{"className":3737},[],[3739],{"type":17,"value":715},{"type":17,"value":3500},{"type":11,"tag":34,"props":3742,"children":3744},{"className":3743},[],[3745],{"type":17,"value":723},{"type":17,"value":3629},{"type":11,"tag":34,"props":3748,"children":3750},{"className":3749},[],[3751],{"type":17,"value":987},{"type":17,"value":3500},{"type":11,"tag":34,"props":3754,"children":3756},{"className":3755},[],[3757],{"type":17,"value":995},{"type":17,"value":3759},"); the other two\n(",{"type":11,"tag":34,"props":3761,"children":3763},{"className":3762},[],[3764],{"type":17,"value":1011},{"type":17,"value":3581},{"type":11,"tag":34,"props":3767,"children":3769},{"className":3768},[],[3770],{"type":17,"value":3771},"TuxProse",{"type":17,"value":3581},{"type":11,"tag":34,"props":3774,"children":3776},{"className":3775},[],[3777],{"type":17,"value":3778},"TuxTree",{"type":17,"value":3780},") emerged from the audit. Each one\nfollowed the four-surface nav wiring rule (sidebar \u002F index grid \u002F\ncatalog table \u002F doctrine table). See CHANGELOG for the full per-slice\ninventory.",{"type":11,"tag":110,"props":3782,"children":3783},{},[3784,3827,3862,3950,3992,4018,4036,4072],{"type":11,"tag":114,"props":3785,"children":3786},{},[3787,3794,3796,3802,3804,3810,3812,3818,3819,3825],{"type":11,"tag":118,"props":3788,"children":3789},{},[3790],{"type":11,"tag":122,"props":3791,"children":3792},{},[3793],{"type":17,"value":1011},{"type":17,"value":3795}," — token-styled ",{"type":11,"tag":34,"props":3797,"children":3799},{"className":3798},[],[3800],{"type":17,"value":3801},"\u003Ckbd>",{"type":17,"value":3803}," with Mac\u002FPC modifier\nnormalization, three sizes, built-in glyphs (",{"type":11,"tag":34,"props":3805,"children":3807},{"className":3806},[],[3808],{"type":17,"value":3809},"enter",{"type":17,"value":3811}," → ↵, arrows,\n",{"type":11,"tag":34,"props":3813,"children":3815},{"className":3814},[],[3816],{"type":17,"value":3817},"tab",{"type":17,"value":3581},{"type":11,"tag":34,"props":3820,"children":3822},{"className":3821},[],[3823],{"type":17,"value":3824},"space",{"type":17,"value":3826},", …). Slice 1.",{"type":11,"tag":114,"props":3828,"children":3829},{},[3830,3837,3839,3844,3846,3852,3854,3860],{"type":11,"tag":118,"props":3831,"children":3832},{},[3833],{"type":11,"tag":122,"props":3834,"children":3835},{},[3836],{"type":17,"value":995},{"type":17,"value":3838}," — modal overlay listing wired bindings,\ntriggered by ",{"type":11,"tag":34,"props":3840,"children":3842},{"className":3841},[],[3843],{"type":17,"value":1003},{"type":17,"value":3845},". Auto-classifies combo (",{"type":11,"tag":34,"props":3847,"children":3849},{"className":3848},[],[3850],{"type":17,"value":3851},"meta_k",{"type":17,"value":3853},") vs sequence\n(",{"type":11,"tag":34,"props":3855,"children":3857},{"className":3856},[],[3858],{"type":17,"value":3859},"g-c",{"type":17,"value":3861},") rows. Slice 1.",{"type":11,"tag":114,"props":3863,"children":3864},{},[3865,3880,3881,3886,3887,3893,3894,3899,3900,3905,3906,3912,3913,3919,3920,3926,3927,3932,3934,3940,3942,3948],{"type":11,"tag":118,"props":3866,"children":3867},{},[3868],{"type":11,"tag":122,"props":3869,"children":3870},{},[3871,3873,3878],{"type":17,"value":3872},"Global ",{"type":11,"tag":34,"props":3874,"children":3876},{"className":3875},[],[3877],{"type":17,"value":1039},{"type":17,"value":3879}," wiring",{"type":17,"value":1991},{"type":11,"tag":34,"props":3882,"children":3884},{"className":3883},[],[3885],{"type":17,"value":3851},{"type":17,"value":3581},{"type":11,"tag":34,"props":3888,"children":3890},{"className":3889},[],[3891],{"type":17,"value":3892},"\u002F",{"type":17,"value":3581},{"type":11,"tag":34,"props":3895,"children":3897},{"className":3896},[],[3898],{"type":17,"value":1003},{"type":17,"value":3629},{"type":11,"tag":34,"props":3901,"children":3903},{"className":3902},[],[3904],{"type":17,"value":3859},{"type":17,"value":3892},{"type":11,"tag":34,"props":3907,"children":3909},{"className":3908},[],[3910],{"type":17,"value":3911},"g-t",{"type":17,"value":3892},{"type":11,"tag":34,"props":3914,"children":3916},{"className":3915},[],[3917],{"type":17,"value":3918},"g-d",{"type":17,"value":3892},{"type":11,"tag":34,"props":3921,"children":3923},{"className":3922},[],[3924],{"type":17,"value":3925},"g-h",{"type":17,"value":2821},{"type":11,"tag":34,"props":3928,"children":3930},{"className":3929},[],[3931],{"type":17,"value":1019},{"type":17,"value":3933},". ",{"type":11,"tag":34,"props":3935,"children":3937},{"className":3936},[],[3938],{"type":17,"value":3939},"TuxCommandPalette",{"type":17,"value":3941},"\nrefactored onto the same composable; mounted globally with groups\nderived from ",{"type":11,"tag":34,"props":3943,"children":3945},{"className":3944},[],[3946],{"type":17,"value":3947},"navTree",{"type":17,"value":3949}," so sidebar and palette share a source of\ntruth. Slice 1.",{"type":11,"tag":114,"props":3951,"children":3952},{},[3953,3960,3962,3968,3970,3976,3977,3983,3984,3990],{"type":11,"tag":118,"props":3954,"children":3955},{},[3956],{"type":11,"tag":122,"props":3957,"children":3958},{},[3959],{"type":17,"value":3771},{"type":17,"value":3961}," — typographic shell for long-form markdown.\nConsolidates ~400 lines of duplicated ",{"type":11,"tag":34,"props":3963,"children":3965},{"className":3964},[],[3966],{"type":17,"value":3967},".prose-tux :deep(…)",{"type":17,"value":3969}," CSS\nthat lived inline in ",{"type":11,"tag":34,"props":3971,"children":3973},{"className":3972},[],[3974],{"type":17,"value":3975},"\u002Fchangelog",{"type":17,"value":3581},{"type":11,"tag":34,"props":3978,"children":3980},{"className":3979},[],[3981],{"type":17,"value":3982},"\u002Fdesign\u002F[doc]",{"type":17,"value":3581},{"type":11,"tag":34,"props":3985,"children":3987},{"className":3986},[],[3988],{"type":17,"value":3989},"\u002Fmarkdown",{"type":17,"value":3991},".\nSlice 2.",{"type":11,"tag":114,"props":3993,"children":3994},{},[3995,4008,4010,4016],{"type":11,"tag":118,"props":3996,"children":3997},{},[3998],{"type":11,"tag":122,"props":3999,"children":4000},{},[4001,4007],{"type":11,"tag":34,"props":4002,"children":4004},{"className":4003},[],[4005],{"type":17,"value":4006},"\u002Ftypography",{"type":17,"value":1832},{"type":17,"value":4009}," — four-family roster, ",{"type":11,"tag":34,"props":4011,"children":4013},{"className":4012},[],[4014],{"type":17,"value":4015},"heading--elegant",{"type":17,"value":4017},"\ndemo, style-variants triptych, TuxProse sample. Replaces the stale\nPublic-Sans-only foundation page. Slice 2.",{"type":11,"tag":114,"props":4019,"children":4020},{},[4021,4034],{"type":11,"tag":118,"props":4022,"children":4023},{},[4024],{"type":11,"tag":122,"props":4025,"children":4026},{},[4027,4029],{"type":17,"value":4028},"ContentSurround on ",{"type":11,"tag":34,"props":4030,"children":4032},{"className":4031},[],[4033],{"type":17,"value":3982},{"type":17,"value":4035}," — Nuxt-UI-style prev\u002Fnext\nsibling-doc navigation at article bottom. Slice 2.",{"type":11,"tag":114,"props":4037,"children":4038},{},[4039,4046,4048,4054,4056,4062,4064,4070],{"type":11,"tag":118,"props":4040,"children":4041},{},[4042],{"type":11,"tag":122,"props":4043,"children":4044},{},[4045],{"type":17,"value":3778},{"type":17,"value":4047}," — recursive hierarchical list (native, not a\n",{"type":11,"tag":34,"props":4049,"children":4051},{"className":4050},[],[4052],{"type":17,"value":4053},"UTree",{"type":17,"value":4055}," wrapper). Sitemap, corpus\u002Ffilesystem browser, BI dataset\nexplorer (per ",{"type":11,"tag":29,"props":4057,"children":4059},{"href":4058},"..\u002Fdocs\u002Fadr\u002F0009-bi-design-system-source-of-truth.md",[4060],{"type":17,"value":4061},"ADR-0009",{"type":17,"value":4063},").\nMono leaf labels, sand guide lines, sessionStorage persistence,\n",{"type":11,"tag":34,"props":4065,"children":4067},{"className":4066},[],[4068],{"type":17,"value":4069},"v-model:selected",{"type":17,"value":4071},". Slice 3.",{"type":11,"tag":114,"props":4073,"children":4074},{},[4075,4082,4084,4089,4091,4095],{"type":11,"tag":118,"props":4076,"children":4077},{},[4078],{"type":11,"tag":122,"props":4079,"children":4080},{},[4081],{"type":17,"value":723},{"type":17,"value":4083}," — edge-anchored ",{"type":11,"tag":34,"props":4085,"children":4087},{"className":4086},[],[4088],{"type":17,"value":731},{"type":17,"value":4090}," drawer (right \u002F\nleft \u002F bottom). Closes the ",{"type":11,"tag":122,"props":4092,"children":4093},{},[4094],{"type":17,"value":715},{"type":17,"value":4096}," roadmap entry. Slice 4.",{"type":11,"tag":98,"props":4098,"children":4100},{"id":4099},"carry-forwards-2",[4101],{"type":17,"value":1941},{"type":11,"tag":19,"props":4103,"children":4104},{},[4105],{"type":17,"value":4106},"Two items adjacent to this batch worth tracking:",{"type":11,"tag":110,"props":4108,"children":4109},{},[4110,4139],{"type":11,"tag":114,"props":4111,"children":4112},{},[4113,4115,4121,4123,4129,4131,4137],{"type":17,"value":4114},"The TuxTree selected-row background-color uncovered a Tailwind v4\n",{"type":11,"tag":34,"props":4116,"children":4118},{"className":4117},[],[4119],{"type":17,"value":4120},"@layer base",{"type":17,"value":4122}," cascade gotcha (button reset wins over scoped CSS\neven with ",{"type":11,"tag":34,"props":4124,"children":4126},{"className":4125},[],[4127],{"type":17,"value":4128},"!important",{"type":17,"value":4130},"). Documented in CLAUDE.md gotchas and the\n",{"type":11,"tag":34,"props":4132,"children":4134},{"className":4133},[],[4135],{"type":17,"value":4136},"feedback_tailwind_layer_button_reset",{"type":17,"value":4138}," memory.",{"type":11,"tag":114,"props":4140,"children":4141},{},[4142,4147,4149,4155,4157,4163,4165,4171,4173,4179,4180,4185],{"type":11,"tag":34,"props":4143,"children":4145},{"className":4144},[],[4146],{"type":17,"value":1039},{"type":17,"value":4148}," grammar: ",{"type":11,"tag":34,"props":4150,"children":4152},{"className":4151},[],[4153],{"type":17,"value":4154},"_",{"type":17,"value":4156}," for combos, ",{"type":11,"tag":34,"props":4158,"children":4160},{"className":4159},[],[4161],{"type":17,"value":4162},"-",{"type":17,"value":4164}," for sequences.\nDocumented in CLAUDE.md and the ",{"type":11,"tag":34,"props":4166,"children":4168},{"className":4167},[],[4169],{"type":17,"value":4170},"feedback_define_shortcuts_grammar",{"type":17,"value":4172},"\nmemory after burning a verification cycle on ",{"type":11,"tag":34,"props":4174,"children":4176},{"className":4175},[],[4177],{"type":17,"value":4178},"g_c",{"type":17,"value":3043},{"type":11,"tag":34,"props":4181,"children":4183},{"className":4182},[],[4184],{"type":17,"value":3859},{"type":17,"value":162},{"type":11,"tag":82,"props":4187,"children":4188},{},[],{"type":11,"tag":86,"props":4190,"children":4192},{"id":4191},"recently-shipped-data-density-geographic-charts-2026-05",[4193],{"type":17,"value":4194},"Recently shipped — data density + geographic charts (2026-05)",{"type":11,"tag":19,"props":4196,"children":4197},{},[4198],{"type":17,"value":4199},"Two batches plus the token-only prelude that should have shipped\nbefore them. Both batches were rebuilt from chat memory + the\nofficial source of truth (us-atlas + TxDOT MapServer) after a\nworktree got wiped pre-commit. See CHANGELOG entries.",{"type":11,"tag":19,"props":4201,"children":4202},{},[4203,4208],{"type":11,"tag":122,"props":4204,"children":4205},{},[4206],{"type":17,"value":4207},"Data density",{"type":17,"value":4209}," — neither was on the original roadmap; both were\npulled in because Landscape-class consumers needed them.",{"type":11,"tag":110,"props":4211,"children":4212},{},[4213,4245],{"type":11,"tag":114,"props":4214,"children":4215},{},[4216,4221,4223,4229,4230,4236,4237,4243],{"type":11,"tag":122,"props":4217,"children":4218},{},[4219],{"type":17,"value":4220},"TuxRichDataGrid",{"type":17,"value":4222}," — interactive grid for operational surfaces.\nSticky header, row selection (with indeterminate header\ncheckbox), expandable detail rows, sortable columns, active-\nfilter chip strip, bulk-action bar (visible only when ≥1 row\nselected), footer pagination. Host-driven via v-models +\nevents; ",{"type":11,"tag":34,"props":4224,"children":4226},{"className":4225},[],[4227],{"type":17,"value":4228},"cell-\u003Ckey>",{"type":17,"value":3581},{"type":11,"tag":34,"props":4231,"children":4233},{"className":4232},[],[4234],{"type":17,"value":4235},"expanded",{"type":17,"value":3581},{"type":11,"tag":34,"props":4238,"children":4240},{"className":4239},[],[4241],{"type":17,"value":4242},"bulk-actions",{"type":17,"value":4244}," slots.",{"type":11,"tag":114,"props":4246,"children":4247},{},[4248,4253,4255,4261,4263,4269,4271],{"type":11,"tag":122,"props":4249,"children":4250},{},[4251],{"type":17,"value":4252},"TuxDataTable",{"type":17,"value":4254}," — research-flavored static table for finished\ndeliverables. Numbered caption + Oswald display title +\ntabular figures, uncertainty cells (",{"type":11,"tag":34,"props":4256,"children":4258},{"className":4257},[],[4259],{"type":17,"value":4260},"value ± CI",{"type":17,"value":4262}," when ",{"type":11,"tag":34,"props":4264,"children":4266},{"className":4265},[],[4267],{"type":17,"value":4268},"ciKey",{"type":17,"value":4270},"\nis set), footnote anchors, optional row groups + sticky header\n",{"type":11,"tag":110,"props":4272,"children":4273},{},[4274],{"type":11,"tag":114,"props":4275,"children":4276},{},[4277],{"type":17,"value":4278},"totals row, source citation.",{"type":11,"tag":19,"props":4280,"children":4281},{},[4282,4287,4289,4294],{"type":11,"tag":122,"props":4283,"children":4284},{},[4285],{"type":17,"value":4286},"Geographic charts (real geometry)",{"type":17,"value":4288}," — adjacent to the still-\naspirational ",{"type":11,"tag":34,"props":4290,"children":4292},{"className":4291},[],[4293],{"type":17,"value":579},{"type":17,"value":4295}," line in Priority B (Mapbox\u002FLeaflet\nwrapper); these ship pre-projected static SVG geometry, not a\nslippy-map runtime.",{"type":11,"tag":110,"props":4297,"children":4298},{},[4299,4348,4366,4383],{"type":11,"tag":114,"props":4300,"children":4301},{},[4302,4306,4308,4314,4316,4322,4324,4330,4332,4338,4340,4346],{"type":11,"tag":122,"props":4303,"children":4304},{},[4305],{"type":17,"value":2455},{"type":17,"value":4307}," — five Texas-flavored map kinds in one\ncomponent (",{"type":11,"tag":34,"props":4309,"children":4311},{"className":4310},[],[4312],{"type":17,"value":4313},"county",{"type":17,"value":4315}," choropleth from real TIGER\u002FLine, ",{"type":11,"tag":34,"props":4317,"children":4319},{"className":4318},[],[4320],{"type":17,"value":4321},"districts",{"type":17,"value":4323},"\nfrom the TxDOT MapServer feature service, ",{"type":11,"tag":34,"props":4325,"children":4327},{"className":4326},[],[4328],{"type":17,"value":4329},"us-context",{"type":17,"value":4331}," via\nAlbersUsa, ",{"type":11,"tag":34,"props":4333,"children":4335},{"className":4334},[],[4336],{"type":17,"value":4337},"dot-density",{"type":17,"value":4339}," rejection-sampled inside the actual\nstate outline, ",{"type":11,"tag":34,"props":4341,"children":4343},{"className":4342},[],[4344],{"type":17,"value":4345},"flow",{"type":17,"value":4347}," OD arcs between primary metros).",{"type":11,"tag":114,"props":4349,"children":4350},{},[4351,4356,4358],{"type":11,"tag":122,"props":4352,"children":4353},{},[4354],{"type":17,"value":4355},"TuxMetroInset",{"type":17,"value":4357}," — 4-up neighborhood-grid companion (Houston \u002F\nDFW \u002F Austin \u002F SAT). Cell pattern seeded by metro name so SSR\n",{"type":11,"tag":110,"props":4359,"children":4360},{},[4361],{"type":11,"tag":114,"props":4362,"children":4363},{},[4364],{"type":17,"value":4365},"CSR match.",{"type":11,"tag":114,"props":4367,"children":4368},{},[4369,4373,4375,4381],{"type":11,"tag":122,"props":4370,"children":4371},{},[4372],{"type":17,"value":2466},{"type":17,"value":4374}," — two-ring radial breakdown sister to\n",{"type":11,"tag":34,"props":4376,"children":4378},{"className":4377},[],[4379],{"type":17,"value":4380},"TuxTreemap",{"type":17,"value":4382},". Container-queried legend collapse below 36rem.",{"type":11,"tag":114,"props":4384,"children":4385},{},[4386,4391,4393,4399],{"type":11,"tag":122,"props":4387,"children":4388},{},[4389],{"type":17,"value":4390},"TuxChartFrame",{"type":17,"value":4392}," — editorial wrapper used by ",{"type":11,"tag":34,"props":4394,"children":4396},{"className":4395},[],[4397],{"type":17,"value":4398},"\u002Fvisualizations\u002F*",{"type":17,"value":4400},"\nshowcase pages so a multi-exhibit report reads as one document.",{"type":11,"tag":19,"props":4402,"children":4403},{},[4404,4409,4410,4416,4418,4424,4426,4432,4433,4439,4440,4446,4448,4454,4456,4462,4464,4470,4471,4477,4478,4484,4485,4491],{"type":11,"tag":122,"props":4405,"children":4406},{},[4407],{"type":17,"value":4408},"Geometry pipeline (build-time only).",{"type":17,"value":2961},{"type":11,"tag":34,"props":4411,"children":4413},{"className":4412},[],[4414],{"type":17,"value":4415},"scripts\u002Fbuild-geo.mjs",{"type":17,"value":4417},"\nprojects us-atlas + the official TxDOT Boundaries MapServer GeoJSON\ninto static SVG path strings under ",{"type":11,"tag":34,"props":4419,"children":4421},{"className":4420},[],[4422],{"type":17,"value":4423},"app\u002Fassets\u002Fgeo\u002F",{"type":17,"value":4425},". New\ndevDependencies: ",{"type":11,"tag":34,"props":4427,"children":4429},{"className":4428},[],[4430],{"type":17,"value":4431},"d3-geo",{"type":17,"value":3581},{"type":11,"tag":34,"props":4434,"children":4436},{"className":4435},[],[4437],{"type":17,"value":4438},"topojson-client\u002Fserver\u002Fsimplify",{"type":17,"value":3629},{"type":11,"tag":34,"props":4441,"children":4443},{"className":4442},[],[4444],{"type":17,"value":4445},"us-atlas",{"type":17,"value":4447},". Outputs are checked in; re-run via ",{"type":11,"tag":34,"props":4449,"children":4451},{"className":4450},[],[4452],{"type":17,"value":4453},"npm run build:geo",{"type":17,"value":4455},"\nwhen upstream sources change. New tokens for chart palette\n(",{"type":11,"tag":34,"props":4457,"children":4459},{"className":4458},[],[4460],{"type":17,"value":4461},"--chart-1..8",{"type":17,"value":4463},") and map ramps (",{"type":11,"tag":34,"props":4465,"children":4467},{"className":4466},[],[4468],{"type":17,"value":4469},"--map-seq-maroon-1..5",{"type":17,"value":3629},{"type":11,"tag":34,"props":4472,"children":4474},{"className":4473},[],[4475],{"type":17,"value":4476},"--map-seq-slate-1..5",{"type":17,"value":3581},{"type":11,"tag":34,"props":4479,"children":4481},{"className":4480},[],[4482],{"type":17,"value":4483},"--map-outline",{"type":17,"value":3581},{"type":11,"tag":34,"props":4486,"children":4488},{"className":4487},[],[4489],{"type":17,"value":4490},"--map-flow",{"type":17,"value":4492},") across\nlight \u002F dark \u002F HC.",{"type":11,"tag":19,"props":4494,"children":4495},{},[4496,4501,4503,4509,4511,4517,4519,4525,4527,4533,4535,4541,4543,4552],{"type":11,"tag":122,"props":4497,"children":4498},{},[4499],{"type":17,"value":4500},"Visual-language evolution prelude.",{"type":17,"value":4502}," Token-only refresh; component\nfamilies inherit automatically. Two-ring focus token, transportation-\ntempo easings (",{"type":11,"tag":34,"props":4504,"children":4506},{"className":4505},[],[4507],{"type":17,"value":4508},"--ease-survey\u002Fcorridor\u002Farrival",{"type":17,"value":4510},"), four-tier\nelevation system (",{"type":11,"tag":34,"props":4512,"children":4514},{"className":4513},[],[4515],{"type":17,"value":4516},"--elevation-flat\u002Frest\u002Fhover\u002Foverlay\u002Fpinned",{"type":17,"value":4518},"),\nwarm-neutral ramp extension (12 → 18 stops), survey-rhythm density\ntokens (",{"type":11,"tag":34,"props":4520,"children":4522},{"className":4521},[],[4523],{"type":17,"value":4524},"--rhythm-tight\u002Fsnug\u002Fnormal\u002Floose\u002Froomy",{"type":17,"value":4526},"), and\n",{"type":11,"tag":34,"props":4528,"children":4530},{"className":4529},[],[4531],{"type":17,"value":4532},"public\u002Fidentity-primitives.svg",{"type":17,"value":4534}," (four ",{"type":11,"tag":34,"props":4536,"children":4538},{"className":4537},[],[4539],{"type":17,"value":4540},"\u003Csymbol>",{"type":17,"value":4542},"s: tux-star,\ntux-chevron, tux-compass, tux-row-grid). Documented in\n",{"type":11,"tag":29,"props":4544,"children":4546},{"href":4545},"visual-language-evolution.md",[4547],{"type":11,"tag":34,"props":4548,"children":4550},{"className":4549},[],[4551],{"type":17,"value":4545},{"type":17,"value":162},{"type":11,"tag":82,"props":4554,"children":4555},{},[],{"type":11,"tag":86,"props":4557,"children":4559},{"id":4558},"recently-shipped-reports-visualizations-sections",[4560],{"type":17,"value":4561},"Recently shipped — reports + visualizations sections",{"type":11,"tag":19,"props":4563,"children":4564},{},[4565],{"type":17,"value":4566},"Added 2026-04-28 after the design-kit port; rounded out 2026-04-29:",{"type":11,"tag":19,"props":4568,"children":4569},{},[4570,4575],{"type":11,"tag":122,"props":4571,"children":4572},{},[4573],{"type":17,"value":4574},"Reports",{"type":17,"value":4576}," — finished narrative deliverables (paper, PDF, print,\nor web-hosted long-form). The reader reads top-to-bottom.",{"type":11,"tag":110,"props":4578,"children":4579},{},[4580,4590,4600],{"type":11,"tag":114,"props":4581,"children":4582},{},[4583,4588],{"type":11,"tag":122,"props":4584,"children":4585},{},[4586],{"type":17,"value":4587},"TuxReportFrame",{"type":17,"value":4589}," — page-sized canvas (letter \u002F a4) for PDF + print.",{"type":11,"tag":114,"props":4591,"children":4592},{},[4593,4598],{"type":11,"tag":122,"props":4594,"children":4595},{},[4596],{"type":17,"value":4597},"TuxReportPrintSheet",{"type":17,"value":4599}," — drop-in print stylesheet.",{"type":11,"tag":114,"props":4601,"children":4602},{},[4603,4607,4609,4614],{"type":11,"tag":122,"props":4604,"children":4605},{},[4606],{"type":17,"value":1272},{"type":17,"value":4608}," — long-form web-hosted narrative (cover,\nbyline, lede, TOC, body, footer). Screen-native sibling to\n",{"type":11,"tag":34,"props":4610,"children":4612},{"className":4611},[],[4613],{"type":17,"value":4587},{"type":17,"value":4615},"; same family because it's still a finished\nnarrative read top-to-bottom.",{"type":11,"tag":19,"props":4617,"children":4618},{},[4619,4624],{"type":11,"tag":122,"props":4620,"children":4621},{},[4622],{"type":17,"value":4623},"Visualizations",{"type":17,"value":4625}," — interactive data surfaces (BI dashboards, R\nartifacts, native charts). The reader pivots, filters, drills in.",{"type":11,"tag":110,"props":4627,"children":4628},{},[4629,4646,4663,4673],{"type":11,"tag":114,"props":4630,"children":4631},{},[4632,4636,4638,4644],{"type":11,"tag":122,"props":4633,"children":4634},{},[4635],{"type":17,"value":429},{"type":17,"value":4637}," — branded chrome for Tableau · Power BI · Apache\nSuperset · Grafana iframes (renamed from ",{"type":11,"tag":34,"props":4639,"children":4641},{"className":4640},[],[4642],{"type":17,"value":4643},"TuxReportEmbed",{"type":17,"value":4645},").",{"type":11,"tag":114,"props":4647,"children":4648},{},[4649,4654,4656,4662],{"type":11,"tag":122,"props":4650,"children":4651},{},[4652],{"type":17,"value":4653},"TuxVizRPlot",{"type":17,"value":4655}," — branded chrome for R-language plot artifacts\n(PNG · SVG · htmlwidget; renamed from ",{"type":11,"tag":34,"props":4657,"children":4659},{"className":4658},[],[4660],{"type":17,"value":4661},"TuxReportRPlot",{"type":17,"value":4645},{"type":11,"tag":114,"props":4664,"children":4665},{},[4666,4671],{"type":11,"tag":122,"props":4667,"children":4668},{},[4669],{"type":17,"value":4670},"TuxVizGrid",{"type":17,"value":4672}," — small-multiples layout primitive (2\u002F3\u002F4-up) for\ncomparing several embeds or R plots side-by-side.",{"type":11,"tag":114,"props":4674,"children":4675},{},[4676,4680,4682,4687,4688,4694],{"type":11,"tag":122,"props":4677,"children":4678},{},[4679],{"type":17,"value":445},{"type":17,"value":4681}," — inline mini trend line, no axes; pairs with\n",{"type":11,"tag":34,"props":4683,"children":4685},{"className":4684},[],[4686],{"type":17,"value":516},{"type":17,"value":651},{"type":11,"tag":34,"props":4689,"children":4691},{"className":4690},[],[4692],{"type":17,"value":4693},"TuxFactoid",{"type":17,"value":4695}," for KPI rows.",{"type":11,"tag":19,"props":4697,"children":4698},{},[4699],{"type":17,"value":4700},"Plus the chat-primitive batch (TuxChatMessage · TuxCitations ·\nTuxComposer · TuxConversationList · TuxContextPanel).",{"title":4702,"searchDepth":4703,"depth":4703,"links":4704},"",2,[4705,4711,4715,4719,4723,4728,4729,4741,4748,4749,4752,4753],{"id":88,"depth":4703,"text":91,"children":4706},[4707,4709,4710],{"id":100,"depth":4708,"text":103},3,{"id":178,"depth":4708,"text":181},{"id":234,"depth":4708,"text":237},{"id":409,"depth":4703,"text":412,"children":4712},[4713,4714],{"id":415,"depth":4708,"text":418},{"id":557,"depth":4708,"text":560},{"id":626,"depth":4703,"text":629,"children":4716},[4717,4718],{"id":632,"depth":4708,"text":635},{"id":747,"depth":4708,"text":750},{"id":843,"depth":4703,"text":846,"children":4720},[4721,4722],{"id":849,"depth":4708,"text":852},{"id":906,"depth":4708,"text":909},{"id":1047,"depth":4703,"text":1050,"children":4724},[4725,4726],{"id":1053,"depth":4708,"text":1056},{"id":1158,"depth":4708,"text":4727},"Mobile frames — ✅ shipped 2026-05-26 as TuxMobileFrame",{"id":1236,"depth":4703,"text":1239},{"id":1399,"depth":4703,"text":1402,"children":4730},[4731,4732,4733,4734,4735,4736,4737,4738,4739,4740],{"id":1417,"depth":4708,"text":1420},{"id":1535,"depth":4708,"text":1538},{"id":1614,"depth":4708,"text":1617},{"id":1676,"depth":4708,"text":1679},{"id":1771,"depth":4708,"text":1774},{"id":1871,"depth":4708,"text":1874},{"id":1916,"depth":4708,"text":1919},{"id":1938,"depth":4708,"text":1941},{"id":2276,"depth":4708,"text":2279},{"id":2340,"depth":4708,"text":2343},{"id":2474,"depth":4703,"text":2477,"children":4742},[4743,4744,4745,4746,4747],{"id":2497,"depth":4708,"text":2500},{"id":2632,"depth":4708,"text":2635},{"id":2775,"depth":4708,"text":2778},{"id":2919,"depth":4708,"text":2922},{"id":2985,"depth":4708,"text":1941},{"id":3456,"depth":4703,"text":3459},{"id":3726,"depth":4703,"text":3729,"children":4750},[4751],{"id":4099,"depth":4708,"text":1941},{"id":4191,"depth":4703,"text":4194},{"id":4558,"depth":4703,"text":4561},1788285290249]