[{"data":1,"prerenderedAt":1542},["ShallowReactive",2],{"bml-reference-tag-reference":3},{"data":4,"body":5},{},{"type":6,"children":7},"root",[8,17,32,39,169,175,327,333,689,696,708,798,804,816,825,844,850,1015,1021,1030,1099,1105,1121,1126,1151,1160,1165,1295,1325,1330,1342,1487,1526,1531],{"type":9,"tag":10,"props":11,"children":13},"element","h1",{"id":12},"bml-tag-syntax-reference",[14],{"type":15,"value":16},"text","BML tag & syntax reference",{"type":9,"tag":18,"props":19,"children":20},"p",{},[21,23,30],{"type":15,"value":22},"Bosca owns the entire tag vocabulary. See the ",{"type":9,"tag":24,"props":25,"children":27},"a",{"href":26},"\u002Fbml-reference\u002Fgrammar",[28],{"type":15,"value":29},"full grammar",{"type":15,"value":31},".",{"type":9,"tag":33,"props":34,"children":36},"h2",{"id":35},"expressions-text",[37],{"type":15,"value":38},"Expressions & text",{"type":9,"tag":40,"props":41,"children":42},"table",{},[43,62],{"type":9,"tag":44,"props":45,"children":46},"thead",{},[47],{"type":9,"tag":48,"props":49,"children":50},"tr",{},[51,57],{"type":9,"tag":52,"props":53,"children":54},"th",{},[55],{"type":15,"value":56},"Form",{"type":9,"tag":52,"props":58,"children":59},{},[60],{"type":15,"value":61},"Meaning",{"type":9,"tag":63,"props":64,"children":65},"tbody",{},[66,91,114,130,146],{"type":9,"tag":48,"props":67,"children":68},{},[69,80],{"type":9,"tag":70,"props":71,"children":72},"td",{},[73],{"type":9,"tag":74,"props":75,"children":77},"code",{"className":76},"",[78],{"type":15,"value":79},"{ expr }",{"type":9,"tag":70,"props":81,"children":82},{},[83,85],{"type":15,"value":84},"server-evaluated Kotlin expression, ",{"type":9,"tag":86,"props":87,"children":88},"strong",{},[89],{"type":15,"value":90},"HTML-escaped",{"type":9,"tag":48,"props":92,"children":93},{},[94,102],{"type":9,"tag":70,"props":95,"children":96},{},[97],{"type":9,"tag":74,"props":98,"children":99},{"className":76},[100],{"type":15,"value":101},"{@ expr }",{"type":9,"tag":70,"props":103,"children":104},{},[105,107,112],{"type":15,"value":106},"server expression, ",{"type":9,"tag":86,"props":108,"children":109},{},[110],{"type":15,"value":111},"raw",{"type":15,"value":113}," (trusted HTML)",{"type":9,"tag":48,"props":115,"children":116},{},[117,125],{"type":9,"tag":70,"props":118,"children":119},{},[120],{"type":9,"tag":74,"props":121,"children":122},{"className":76},[123],{"type":15,"value":124},"{# … #}",{"type":9,"tag":70,"props":126,"children":127},{},[128],{"type":15,"value":129},"build-only comment (never emitted)",{"type":9,"tag":48,"props":131,"children":132},{},[133,141],{"type":9,"tag":70,"props":134,"children":135},{},[136],{"type":9,"tag":74,"props":137,"children":138},{"className":76},[139],{"type":15,"value":140},"\u003C!-- … -->",{"type":9,"tag":70,"props":142,"children":143},{},[144],{"type":15,"value":145},"HTML comment (emitted)",{"type":9,"tag":48,"props":147,"children":148},{},[149,157],{"type":9,"tag":70,"props":150,"children":151},{},[152],{"type":9,"tag":74,"props":153,"children":154},{"className":76},[155],{"type":15,"value":156},"\\{ \\} \\\u003C \\\\",{"type":9,"tag":70,"props":158,"children":159},{},[160,162,167],{"type":15,"value":161},"literal ",{"type":9,"tag":74,"props":163,"children":164},{"className":76},[165],{"type":15,"value":166},"{ } \u003C \\",{"type":15,"value":168}," in text",{"type":9,"tag":33,"props":170,"children":172},{"id":171},"attributes",[173],{"type":15,"value":174},"Attributes",{"type":9,"tag":40,"props":176,"children":177},{},[178,192],{"type":9,"tag":44,"props":179,"children":180},{},[181],{"type":9,"tag":48,"props":182,"children":183},{},[184,188],{"type":9,"tag":52,"props":185,"children":186},{},[187],{"type":15,"value":56},{"type":9,"tag":52,"props":189,"children":190},{},[191],{"type":15,"value":61},{"type":9,"tag":63,"props":193,"children":194},{},[195,218,234,255,278],{"type":9,"tag":48,"props":196,"children":197},{},[198,206],{"type":9,"tag":70,"props":199,"children":200},{},[201],{"type":9,"tag":74,"props":202,"children":203},{"className":76},[204],{"type":15,"value":205},"name=\"literal\"",{"type":9,"tag":70,"props":207,"children":208},{},[209,211,216],{"type":15,"value":210},"static value (may interpolate: ",{"type":9,"tag":74,"props":212,"children":213},{"className":76},[214],{"type":15,"value":215},"class=\"c-{ size }\"",{"type":15,"value":217},")",{"type":9,"tag":48,"props":219,"children":220},{},[221,229],{"type":9,"tag":70,"props":222,"children":223},{},[224],{"type":9,"tag":74,"props":225,"children":226},{"className":76},[227],{"type":15,"value":228},"name",{"type":9,"tag":70,"props":230,"children":231},{},[232],{"type":15,"value":233},"boolean attribute (bare)",{"type":9,"tag":48,"props":235,"children":236},{},[237,245],{"type":9,"tag":70,"props":238,"children":239},{},[240],{"type":9,"tag":74,"props":241,"children":242},{"className":76},[243],{"type":15,"value":244},":name=\"expr\"",{"type":9,"tag":70,"props":246,"children":247},{},[248,253],{"type":9,"tag":86,"props":249,"children":250},{},[251],{"type":15,"value":252},"bound",{"type":15,"value":254}," — value is a server expression (no braces)",{"type":9,"tag":48,"props":256,"children":257},{},[258,266],{"type":9,"tag":70,"props":259,"children":260},{},[261],{"type":9,"tag":74,"props":262,"children":263},{"className":76},[264],{"type":15,"value":265},"{...expr}",{"type":9,"tag":70,"props":267,"children":268},{},[269,271,276],{"type":15,"value":270},"spread a ",{"type":9,"tag":74,"props":272,"children":273},{"className":76},[274],{"type":15,"value":275},"Map\u003CString, Any?>",{"type":15,"value":277}," of attributes",{"type":9,"tag":48,"props":279,"children":280},{},[281,289],{"type":9,"tag":70,"props":282,"children":283},{},[284],{"type":9,"tag":74,"props":285,"children":286},{"className":76},[287],{"type":15,"value":288},"@event=\"model.method(…)\"",{"type":9,"tag":70,"props":290,"children":291},{},[292,294,299,301,306,307,312,313,318,320,325],{"type":15,"value":293},"dispatch a live-model method for any DOM event; supports ",{"type":9,"tag":74,"props":295,"children":296},{"className":76},[297],{"type":15,"value":298},"debounce",{"type":15,"value":300},", ",{"type":9,"tag":74,"props":302,"children":303},{"className":76},[304],{"type":15,"value":305},"throttle",{"type":15,"value":300},{"type":9,"tag":74,"props":308,"children":309},{"className":76},[310],{"type":15,"value":311},"coalesce",{"type":15,"value":300},{"type":9,"tag":74,"props":314,"children":315},{"className":76},[316],{"type":15,"value":317},"keepalive",{"type":15,"value":319},", and ",{"type":9,"tag":74,"props":321,"children":322},{"className":76},[323],{"type":15,"value":324},"pagehide",{"type":15,"value":326}," modifiers",{"type":9,"tag":33,"props":328,"children":330},{"id":329},"special-tags-protected-cannot-be-overridden",[331],{"type":15,"value":332},"Special tags (protected — cannot be overridden)",{"type":9,"tag":40,"props":334,"children":335},{},[336,352],{"type":9,"tag":44,"props":337,"children":338},{},[339],{"type":9,"tag":48,"props":340,"children":341},{},[342,347],{"type":9,"tag":52,"props":343,"children":344},{},[345],{"type":15,"value":346},"Tag",{"type":9,"tag":52,"props":348,"children":349},{},[350],{"type":15,"value":351},"Purpose",{"type":9,"tag":63,"props":353,"children":354},{},[355,371,392,408,424,440,456,479,502,518,534,564,587,603,619,635,651,667],{"type":9,"tag":48,"props":356,"children":357},{},[358,366],{"type":9,"tag":70,"props":359,"children":360},{},[361],{"type":9,"tag":74,"props":362,"children":363},{"className":76},[364],{"type":15,"value":365},"\u003Cpage route=\"…\" [contentType=\"…\"] [requireAuth] [cache=\"shared\" maxAge=\"seconds\" staleWhileRevalidate=\"seconds\"]>",{"type":9,"tag":70,"props":367,"children":368},{},[369],{"type":15,"value":370},"a routable SSR response whose body owns the full document skeleton; shared caching renders a public\u002Fanonymous HTML shell and supports Cloudflare background revalidation",{"type":9,"tag":48,"props":372,"children":373},{},[374,382],{"type":9,"tag":70,"props":375,"children":376},{},[377],{"type":9,"tag":74,"props":378,"children":379},{"className":76},[380],{"type":15,"value":381},"\u003Croute path=\"…\" [contentType=\"…\"] [cache=\"shared\" maxAge=\"seconds\" staleWhileRevalidate=\"seconds\"]>",{"type":9,"tag":70,"props":383,"children":384},{},[385,387],{"type":15,"value":386},"a response-oriented route using the same renderer, cache policy, and route registry as ",{"type":9,"tag":74,"props":388,"children":389},{"className":76},[390],{"type":15,"value":391},"\u003Cpage>",{"type":9,"tag":48,"props":393,"children":394},{},[395,403],{"type":9,"tag":70,"props":396,"children":397},{},[398],{"type":9,"tag":74,"props":399,"children":400},{"className":76},[401],{"type":15,"value":402},"\u003Ctemplate name=\"…\">",{"type":9,"tag":70,"props":404,"children":405},{},[406],{"type":15,"value":407},"reserved syntax; template\u002Flayout code generation is not active",{"type":9,"tag":48,"props":409,"children":410},{},[411,419],{"type":9,"tag":70,"props":412,"children":413},{},[414],{"type":9,"tag":74,"props":415,"children":416},{"className":76},[417],{"type":15,"value":418},"\u003Cslot [name]>",{"type":9,"tag":70,"props":420,"children":421},{},[422],{"type":15,"value":423},"component children; named slots currently use the default children and emit a warning",{"type":9,"tag":48,"props":425,"children":426},{},[427,435],{"type":9,"tag":70,"props":428,"children":429},{},[430],{"type":9,"tag":74,"props":431,"children":432},{"className":76},[433],{"type":15,"value":434},"\u003Ccomponent tag=\"…\" [scope=\"page|site\"]>",{"type":9,"tag":70,"props":436,"children":437},{},[438],{"type":15,"value":439},"declare a custom tag or override a built-in; live state has page lifetime by default or site lifetime explicitly",{"type":9,"tag":48,"props":441,"children":442},{},[443,451],{"type":9,"tag":70,"props":444,"children":445},{},[446],{"type":9,"tag":74,"props":447,"children":448},{"className":76},[449],{"type":15,"value":450},"\u003Cprop name type [required] [default|:default]>",{"type":9,"tag":70,"props":452,"children":453},{},[454],{"type":15,"value":455},"a typed component input",{"type":9,"tag":48,"props":457,"children":458},{},[459,474],{"type":9,"tag":70,"props":460,"children":461},{},[462,467,469],{"type":9,"tag":74,"props":463,"children":464},{"className":76},[465],{"type":15,"value":466},"\u003Cfor item in expr>",{"type":15,"value":468}," \u002F ",{"type":9,"tag":74,"props":470,"children":471},{"className":76},[472],{"type":15,"value":473},"\u003Cfor (i, item) in expr>",{"type":9,"tag":70,"props":475,"children":476},{},[477],{"type":15,"value":478},"iteration",{"type":9,"tag":48,"props":480,"children":481},{},[482,490],{"type":9,"tag":70,"props":483,"children":484},{},[485],{"type":9,"tag":74,"props":486,"children":487},{"className":76},[488],{"type":15,"value":489},"\u003Cif expr> … \u003Celse-if expr> … \u003Celse> … \u003C\u002Fif>",{"type":9,"tag":70,"props":491,"children":492},{},[493,495,500],{"type":15,"value":494},"Kotlin conditionals (one ",{"type":9,"tag":74,"props":496,"children":497},{"className":76},[498],{"type":15,"value":499},"\u003C\u002Fif>",{"type":15,"value":501},"; bare separators)",{"type":9,"tag":48,"props":503,"children":504},{},[505,513],{"type":9,"tag":70,"props":506,"children":507},{},[508],{"type":9,"tag":74,"props":509,"children":510},{"className":76},[511],{"type":15,"value":512},"\u003Cif flag=\"key\" [variation=\"name\" | :when=\"expr\"]>",{"type":9,"tag":70,"props":514,"children":515},{},[516],{"type":15,"value":517},"feature-flag boolean, variation, or full-evaluation condition",{"type":9,"tag":48,"props":519,"children":520},{},[521,529],{"type":9,"tag":70,"props":522,"children":523},{},[524],{"type":9,"tag":74,"props":525,"children":526},{"className":76},[527],{"type":15,"value":528},"\u003Cdata provides=\"name\">{ expr }\u003C\u002Fdata>",{"type":9,"tag":70,"props":530,"children":531},{},[532],{"type":15,"value":533},"sugar for a server binding",{"type":9,"tag":48,"props":535,"children":536},{},[537,545],{"type":9,"tag":70,"props":538,"children":539},{},[540],{"type":9,"tag":74,"props":541,"children":542},{"className":76},[543],{"type":15,"value":544},"\u003Cinject [server] name=\"value\" type=\"Type\" [provider=\"key\"] [init=\"method\"] [scope=\"page|client-session|client-local|server-session\"] [clear-on-sign-out]\u002F>",{"type":9,"tag":70,"props":546,"children":547},{},[548,550,555,557,562],{"type":15,"value":549},"resolve Bosca DI ",{"type":9,"tag":74,"props":551,"children":552},{"className":76},[553],{"type":15,"value":554},"provide\u003CType>()",{"type":15,"value":556},"; ",{"type":9,"tag":74,"props":558,"children":559},{"className":76},[560],{"type":15,"value":561},"server",{"type":15,"value":563}," promotes a serializable injected view model to live server-action state; sign-out cleanup is opt-in for browser-backed state",{"type":9,"tag":48,"props":565,"children":566},{},[567,575],{"type":9,"tag":70,"props":568,"children":569},{},[570],{"type":9,"tag":74,"props":571,"children":572},{"className":76},[573],{"type":15,"value":574},"\u003Cisland name client hydrate render=\"request|prerender|deferred\" [:prop]>",{"type":9,"tag":70,"props":576,"children":577},{},[578,580,586],{"type":15,"value":579},"interactive island; deferred bodies render privately after shell load (see the ",{"type":9,"tag":24,"props":581,"children":583},{"href":582},"\u002Fbml-reference\u002Fislands",[584],{"type":15,"value":585},"islands reference",{"type":15,"value":217},{"type":9,"tag":48,"props":588,"children":589},{},[590,598],{"type":9,"tag":70,"props":591,"children":592},{},[593],{"type":9,"tag":74,"props":594,"children":595},{"className":76},[596],{"type":15,"value":597},"\u003Cfallback>",{"type":9,"tag":70,"props":599,"children":600},{},[601],{"type":15,"value":602},"initial\u002Ferror content for its direct deferred-island parent",{"type":9,"tag":48,"props":604,"children":605},{},[606,614],{"type":9,"tag":70,"props":607,"children":608},{},[609],{"type":9,"tag":74,"props":610,"children":611},{"className":76},[612],{"type":15,"value":613},"\u003Cscript server [provides=\"name\"] [scope=\"page|client-session|client-local|server-session\"] [clear-on-sign-out]>",{"type":9,"tag":70,"props":615,"children":616},{},[617],{"type":15,"value":618},"embedded Kotlin; live model scope defaults to the current page; sign-out cleanup is opt-in for browser-backed state",{"type":9,"tag":48,"props":620,"children":621},{},[622,630],{"type":9,"tag":70,"props":623,"children":624},{},[625],{"type":9,"tag":74,"props":626,"children":627},{"className":76},[628],{"type":15,"value":629},"\u003Cscript client>",{"type":9,"tag":70,"props":631,"children":632},{},[633],{"type":15,"value":634},"embedded TypeScript (island module)",{"type":9,"tag":48,"props":636,"children":637},{},[638,646],{"type":9,"tag":70,"props":639,"children":640},{},[641],{"type":9,"tag":74,"props":642,"children":643},{"className":76},[644],{"type":15,"value":645},"\u003Ccontract>",{"type":9,"tag":70,"props":647,"children":648},{},[649],{"type":15,"value":650},"a Kotlin interface for typed client↔server RPC",{"type":9,"tag":48,"props":652,"children":653},{},[654,662],{"type":9,"tag":70,"props":655,"children":656},{},[657],{"type":9,"tag":74,"props":658,"children":659},{"className":76},[660],{"type":15,"value":661},"\u003Cstyle>",{"type":9,"tag":70,"props":663,"children":664},{},[665],{"type":15,"value":666},"global CSS (inlined as written)",{"type":9,"tag":48,"props":668,"children":669},{},[670,678],{"type":9,"tag":70,"props":671,"children":672},{},[673],{"type":9,"tag":74,"props":674,"children":675},{"className":76},[676],{"type":15,"value":677},"\u003Cstyle scoped>",{"type":9,"tag":70,"props":679,"children":680},{},[681,683],{"type":15,"value":682},"component-scoped CSS — see ",{"type":9,"tag":24,"props":684,"children":686},{"href":685},"#scoped-styles",[687],{"type":15,"value":688},"Scoped styles",{"type":9,"tag":690,"props":691,"children":693},"h3",{"id":692},"feature-flag-conditions",[694],{"type":15,"value":695},"Feature flag conditions",{"type":9,"tag":697,"props":698,"children":703},"pre",{"className":699,"code":701,"filename":-1,"highlights":-1,"language":702,"meta":76},[700],"language-bml","\u003Cif flag=\"new-checkout\">\n  \u003Ccheckout-v2\u002F>\n\u003Celse>\n  \u003Ccheckout-v1\u002F>\n\u003C\u002Fif>\n\n\u003Cif flag=\"checkout-layout\" variation=\"compact\">\n  \u003Ccompact-checkout\u002F>\n\u003C\u002Fif>\n\n\u003Cif flag=\"checkout\" :when='flag.variationKey == \"compact\" && !flag.degraded'>\n  \u003Ccompact-checkout\u002F>\n\u003C\u002Fif>\n","bml",[704],{"type":9,"tag":74,"props":705,"children":706},{"__ignoreMap":76},[707],{"type":15,"value":701},{"type":9,"tag":18,"props":709,"children":710},{},[711,713,718,720,725,727,732,734,739,740,745,746,751,752,757,759,763,765,769,771,776,778,782,784,789,791,796],{"type":15,"value":712},"The simple form expects a JSON boolean. ",{"type":9,"tag":74,"props":714,"children":715},{"className":76},[716],{"type":15,"value":717},"variation",{"type":15,"value":719}," compares the selected variation key. ",{"type":9,"tag":74,"props":721,"children":722},{"className":76},[723],{"type":15,"value":724},":when",{"type":15,"value":726},"\naccepts an arbitrary Kotlin expression and binds ",{"type":9,"tag":74,"props":728,"children":729},{"className":76},[730],{"type":15,"value":731},"flag",{"type":15,"value":733}," to the complete evaluation, including\n",{"type":9,"tag":74,"props":735,"children":736},{"className":76},[737],{"type":15,"value":738},"value",{"type":15,"value":300},{"type":9,"tag":74,"props":741,"children":742},{"className":76},[743],{"type":15,"value":744},"variationKey",{"type":15,"value":300},{"type":9,"tag":74,"props":747,"children":748},{"className":76},[749],{"type":15,"value":750},"experimentId",{"type":15,"value":319},{"type":9,"tag":74,"props":753,"children":754},{"className":76},[755],{"type":15,"value":756},"degraded",{"type":15,"value":758},". Use either ",{"type":9,"tag":74,"props":760,"children":761},{"className":76},[762],{"type":15,"value":717},{"type":15,"value":764}," or ",{"type":9,"tag":74,"props":766,"children":767},{"className":76},[768],{"type":15,"value":724},{"type":15,"value":770},", not both.\nFlag and variation keys are literal values; ordinary ",{"type":9,"tag":74,"props":772,"children":773},{"className":76},[774],{"type":15,"value":775},"\u003Cif kotlinExpression>",{"type":15,"value":777}," remains unchanged.\nIf feature evaluation is unavailable, BML logs the failure and selects the ordinary fallback branch;\nthe failure does not abort page rendering. A ",{"type":9,"tag":74,"props":779,"children":780},{"className":76},[781],{"type":15,"value":724},{"type":15,"value":783}," predicate can inspect ",{"type":9,"tag":74,"props":785,"children":786},{"className":76},[787],{"type":15,"value":788},"flag.degraded",{"type":15,"value":790}," explicitly.\nFeature-flag conditions are unavailable in ",{"type":9,"tag":74,"props":792,"children":793},{"className":76},[794],{"type":15,"value":795},"\u003Cmessage>",{"type":15,"value":797}," renders because messages do not currently\ncarry a recipient feature identity.",{"type":9,"tag":690,"props":799,"children":801},{"id":800},"application-sitemap",[802],{"type":15,"value":803},"Application sitemap",{"type":9,"tag":18,"props":805,"children":806},{},[807,809,814],{"type":15,"value":808},"A site can provide a dynamic sitemap as a BML route at the conventional path. The server responds\nas ",{"type":9,"tag":74,"props":810,"children":811},{"className":76},[812],{"type":15,"value":813},"application\u002Fxml",{"type":15,"value":815}," and does not inject page CSS, client scripts,\nor development reload markup. Emit the XML as trusted raw output:",{"type":9,"tag":697,"props":817,"children":820},{"className":818,"code":819,"filename":-1,"highlights":-1,"language":702,"meta":76},[700],"\u003Croute path=\"\u002Fsitemap.xml\" contentType=\"application\u002Fxml\">\n  \u003Cscript server provides=\"sitemap\">\n    loadSitemapXml()\n  \u003C\u002Fscript>\n  {@ sitemap }\n\u003C\u002Froute>\n",[821],{"type":9,"tag":74,"props":822,"children":823},{"__ignoreMap":76},[824],{"type":15,"value":819},{"type":9,"tag":18,"props":826,"children":827},{},[828,830,835,837,842],{"type":15,"value":829},"When the project has no exact ",{"type":9,"tag":74,"props":831,"children":832},{"className":76},[833],{"type":15,"value":834},"\u002Fsitemap.xml",{"type":15,"value":836}," page or route, the server continues to serve the\nsitemap from ",{"type":9,"tag":74,"props":838,"children":839},{"className":76},[840],{"type":15,"value":841},"CompiledProject.discovery.sitemap",{"type":15,"value":843},". Parameterized routes do not capture the discovery URL.",{"type":9,"tag":33,"props":845,"children":847},{"id":846},"built-in-html-tags",[848],{"type":15,"value":849},"Built-in HTML tags",{"type":9,"tag":18,"props":851,"children":852},{},[853,855,859,860,865,866,870,871,875,877,882,883,888,890,895,897,901,902,906,907,911,912,917,918,923,924,929,930,935,937,941,942,946,947,952,953,958,959,964,965,969,971,976,977,982,983,988,989,994,995,1000,1001,1006,1008,1013],{"type":15,"value":854},"The standard HTML element set is built in (",{"type":9,"tag":74,"props":856,"children":857},{"className":76},[858],{"type":15,"value":24},{"type":15,"value":300},{"type":9,"tag":74,"props":861,"children":862},{"className":76},[863],{"type":15,"value":864},"div",{"type":15,"value":300},{"type":9,"tag":74,"props":867,"children":868},{"className":76},[869],{"type":15,"value":18},{"type":15,"value":300},{"type":9,"tag":74,"props":872,"children":873},{"className":76},[874],{"type":15,"value":10},{"type":15,"value":876},"–",{"type":9,"tag":74,"props":878,"children":879},{"className":76},[880],{"type":15,"value":881},"h6",{"type":15,"value":300},{"type":9,"tag":74,"props":884,"children":885},{"className":76},[886],{"type":15,"value":887},"ul",{"type":15,"value":889},"\u002F",{"type":9,"tag":74,"props":891,"children":892},{"className":76},[893],{"type":15,"value":894},"li",{"type":15,"value":896},",\n",{"type":9,"tag":74,"props":898,"children":899},{"className":76},[900],{"type":15,"value":40},{"type":15,"value":889},{"type":9,"tag":74,"props":903,"children":904},{"className":76},[905],{"type":15,"value":48},{"type":15,"value":889},{"type":9,"tag":74,"props":908,"children":909},{"className":76},[910],{"type":15,"value":70},{"type":15,"value":300},{"type":9,"tag":74,"props":913,"children":914},{"className":76},[915],{"type":15,"value":916},"form",{"type":15,"value":889},{"type":9,"tag":74,"props":919,"children":920},{"className":76},[921],{"type":15,"value":922},"input",{"type":15,"value":300},{"type":9,"tag":74,"props":925,"children":926},{"className":76},[927],{"type":15,"value":928},"img",{"type":15,"value":300},{"type":9,"tag":74,"props":931,"children":932},{"className":76},[933],{"type":15,"value":934},"br",{"type":15,"value":936},", …). Void elements (",{"type":9,"tag":74,"props":938,"children":939},{"className":76},[940],{"type":15,"value":934},{"type":15,"value":300},{"type":9,"tag":74,"props":943,"children":944},{"className":76},[945],{"type":15,"value":928},{"type":15,"value":896},{"type":9,"tag":74,"props":948,"children":949},{"className":76},[950],{"type":15,"value":951},"meta",{"type":15,"value":300},{"type":9,"tag":74,"props":954,"children":955},{"className":76},[956],{"type":15,"value":957},"link",{"type":15,"value":300},{"type":9,"tag":74,"props":960,"children":961},{"className":76},[962],{"type":15,"value":963},"hr",{"type":15,"value":300},{"type":9,"tag":74,"props":966,"children":967},{"className":76},[968],{"type":15,"value":922},{"type":15,"value":970},", …) take no children\u002Fclosing tag. The names BML reuses\nas special tags (",{"type":9,"tag":74,"props":972,"children":973},{"className":76},[974],{"type":15,"value":975},"data",{"type":15,"value":300},{"type":9,"tag":74,"props":978,"children":979},{"className":76},[980],{"type":15,"value":981},"inject",{"type":15,"value":300},{"type":9,"tag":74,"props":984,"children":985},{"className":76},[986],{"type":15,"value":987},"slot",{"type":15,"value":300},{"type":9,"tag":74,"props":990,"children":991},{"className":76},[992],{"type":15,"value":993},"template",{"type":15,"value":300},{"type":9,"tag":74,"props":996,"children":997},{"className":76},[998],{"type":15,"value":999},"script",{"type":15,"value":300},{"type":9,"tag":74,"props":1002,"children":1003},{"className":76},[1004],{"type":15,"value":1005},"style",{"type":15,"value":1007},") resolve to the special\ntag — reach the native element via the ",{"type":9,"tag":74,"props":1009,"children":1010},{"className":76},[1011],{"type":15,"value":1012},"html:",{"type":15,"value":1014}," namespace.",{"type":9,"tag":33,"props":1016,"children":1018},{"id":1017},"overriding-a-built-in-custom-tags",[1019],{"type":15,"value":1020},"Overriding a built-in & custom tags",{"type":9,"tag":697,"props":1022,"children":1025},{"className":1023,"code":1024,"filename":-1,"highlights":-1,"language":702,"meta":76},[700],"\u003Ccomponent tag=\"a\">\n  \u003Cprop name=\"href\" type=\"String\" required\u002F>\n  \u003Chtml:a :href=\"href\" rel=\"noopener\">\u003Cslot\u002F>\u003C\u002Fhtml:a>   \u003C!-- html:a = the native anchor -->\n\u003C\u002Fcomponent>\n",[1026],{"type":9,"tag":74,"props":1027,"children":1028},{"__ignoreMap":76},[1029],{"type":15,"value":1024},{"type":9,"tag":887,"props":1031,"children":1032},{},[1033,1070,1089],{"type":9,"tag":894,"props":1034,"children":1035},{},[1036,1038,1043,1045,1050,1052,1061,1063,1068],{"type":15,"value":1037},"Declaring ",{"type":9,"tag":74,"props":1039,"children":1040},{"className":76},[1041],{"type":15,"value":1042},"\u003Ccomponent tag=\"a\">",{"type":15,"value":1044}," overrides every ",{"type":9,"tag":74,"props":1046,"children":1047},{"className":76},[1048],{"type":15,"value":1049},"\u003Ca>",{"type":15,"value":1051},". Emit the native tag via\nthe ",{"type":9,"tag":86,"props":1053,"children":1054},{},[1055,1059],{"type":9,"tag":74,"props":1056,"children":1057},{"className":76},[1058],{"type":15,"value":1012},{"type":15,"value":1060}," namespace",{"type":15,"value":1062}," (",{"type":9,"tag":74,"props":1064,"children":1065},{"className":76},[1066],{"type":15,"value":1067},"\u003Chtml:a>",{"type":15,"value":1069},") to avoid recursion.",{"type":9,"tag":894,"props":1071,"children":1072},{},[1073,1075,1080,1082,1087],{"type":15,"value":1074},"Custom tags (",{"type":9,"tag":74,"props":1076,"children":1077},{"className":76},[1078],{"type":15,"value":1079},"\u003Ccomponent tag=\"card\">",{"type":15,"value":1081},") register a new tag with typed ",{"type":9,"tag":74,"props":1083,"children":1084},{"className":76},[1085],{"type":15,"value":1086},"\u003Cprop>",{"type":15,"value":1088},"s.",{"type":9,"tag":894,"props":1090,"children":1091},{},[1092,1097],{"type":9,"tag":86,"props":1093,"children":1094},{},[1095],{"type":15,"value":1096},"Protected",{"type":15,"value":1098}," tags (the special set above) cannot be overridden — it's a compile error.",{"type":9,"tag":33,"props":1100,"children":1102},{"id":1101},"resolution-order",[1103],{"type":15,"value":1104},"Resolution order",{"type":9,"tag":18,"props":1106,"children":1107},{},[1108,1113,1115,1119],{"type":9,"tag":74,"props":1109,"children":1110},{"className":76},[1111],{"type":15,"value":1112},"\u003Cname>",{"type":15,"value":1114}," resolves: special tag → registered custom\u002Foverride → built-in HTML → error.\nThe ",{"type":9,"tag":74,"props":1116,"children":1117},{"className":76},[1118],{"type":15,"value":1012},{"type":15,"value":1120}," namespace always resolves to the native HTML handler, bypassing overrides.",{"type":9,"tag":33,"props":1122,"children":1124},{"id":1123},"scoped-styles",[1125],{"type":15,"value":688},{"type":9,"tag":18,"props":1127,"children":1128},{},[1129,1131,1135,1137,1142,1144,1149],{"type":15,"value":1130},"A ",{"type":9,"tag":74,"props":1132,"children":1133},{"className":76},[1134],{"type":15,"value":677},{"type":15,"value":1136}," inside a ",{"type":9,"tag":74,"props":1138,"children":1139},{"className":76},[1140],{"type":15,"value":1141},"\u003Ccomponent>",{"type":15,"value":1143}," is ",{"type":9,"tag":86,"props":1145,"children":1146},{},[1147],{"type":15,"value":1148},"isolated to that component",{"type":15,"value":1150},", Nuxt-style —\nyou write plain selectors and BML guarantees they can't leak out and outside styles can't\nleak in:",{"type":9,"tag":697,"props":1152,"children":1155},{"className":1153,"code":1154,"filename":-1,"highlights":-1,"language":702,"meta":76},[700],"\u003Ccomponent tag=\"badge\">\n  \u003Cprop name=\"tone\" type=\"String\" default=\"info\"\u002F>\n  \u003Cstyle scoped>\n    .badge { padding: 2px 8px; border-radius: 4px; }\n    .badge-hot { background: #ffe0e0; color: #b00020; }\n  \u003C\u002Fstyle>\n  \u003Cspan class=\"badge badge-{ tone }\">\u003Cslot\u002F>\u003C\u002Fspan>\n\u003C\u002Fcomponent>\n",[1156],{"type":9,"tag":74,"props":1157,"children":1158},{"__ignoreMap":76},[1159],{"type":15,"value":1154},{"type":9,"tag":18,"props":1161,"children":1162},{},[1163],{"type":15,"value":1164},"How it works:",{"type":9,"tag":887,"props":1166,"children":1167},{},[1168,1253,1265,1277],{"type":9,"tag":894,"props":1169,"children":1170},{},[1171,1173,1178,1180,1185,1187,1192,1194,1199,1201,1206,1208,1213,1215,1220,1221,1226,1227,1232,1233,1238,1240,1245,1246,1251],{"type":15,"value":1172},"The compiler stamps a marker attribute (",{"type":9,"tag":74,"props":1174,"children":1175},{"className":76},[1176],{"type":15,"value":1177},"data-bml-c=\"badge\"",{"type":15,"value":1179},") onto ",{"type":9,"tag":86,"props":1181,"children":1182},{},[1183],{"type":15,"value":1184},"every element the\ncomponent renders",{"type":15,"value":1186},", and rewrites each selector to require it — ",{"type":9,"tag":74,"props":1188,"children":1189},{"className":76},[1190],{"type":15,"value":1191},".badge",{"type":15,"value":1193}," becomes\n",{"type":9,"tag":74,"props":1195,"children":1196},{"className":76},[1197],{"type":15,"value":1198},".badge[data-bml-c=\"badge\"]",{"type":15,"value":1200},". Descendant\u002Fchild combinators scope the last compound\n(",{"type":9,"tag":74,"props":1202,"children":1203},{"className":76},[1204],{"type":15,"value":1205},".list li",{"type":15,"value":1207}," → ",{"type":9,"tag":74,"props":1209,"children":1210},{"className":76},[1211],{"type":15,"value":1212},".list li[data-bml-c=\"badge\"]",{"type":15,"value":1214},"); ",{"type":9,"tag":74,"props":1216,"children":1217},{"className":76},[1218],{"type":15,"value":1219},"@media",{"type":15,"value":889},{"type":9,"tag":74,"props":1222,"children":1223},{"className":76},[1224],{"type":15,"value":1225},"@supports",{"type":15,"value":889},{"type":9,"tag":74,"props":1228,"children":1229},{"className":76},[1230],{"type":15,"value":1231},"@container",{"type":15,"value":889},{"type":9,"tag":74,"props":1234,"children":1235},{"className":76},[1236],{"type":15,"value":1237},"@layer",{"type":15,"value":1239},"\nrecurse; ",{"type":9,"tag":74,"props":1241,"children":1242},{"className":76},[1243],{"type":15,"value":1244},"@keyframes",{"type":15,"value":889},{"type":9,"tag":74,"props":1247,"children":1248},{"className":76},[1249],{"type":15,"value":1250},"@font-face",{"type":15,"value":1252}," are left untouched.",{"type":9,"tag":894,"props":1254,"children":1255},{},[1256,1258,1263],{"type":15,"value":1257},"Slotted content is scoped to the ",{"type":9,"tag":86,"props":1259,"children":1260},{},[1261],{"type":15,"value":1262},"caller",{"type":15,"value":1264},", not the component (it's the caller's markup).",{"type":9,"tag":894,"props":1266,"children":1267},{},[1268,1270,1275],{"type":15,"value":1269},"The scoped CSS is inlined ",{"type":9,"tag":86,"props":1271,"children":1272},{},[1273],{"type":15,"value":1274},"once per page",{"type":15,"value":1276}," even if the component renders many times.",{"type":9,"tag":894,"props":1278,"children":1279},{},[1280,1282,1286,1288,1293],{"type":15,"value":1281},"A plain ",{"type":9,"tag":74,"props":1283,"children":1284},{"className":76},[1285],{"type":15,"value":661},{"type":15,"value":1287}," (no ",{"type":9,"tag":74,"props":1289,"children":1290},{"className":76},[1291],{"type":15,"value":1292},"scoped",{"type":15,"value":1294},") stays global, exactly as written.",{"type":9,"tag":1296,"props":1297,"children":1298},"blockquote",{},[1299],{"type":9,"tag":18,"props":1300,"children":1301},{},[1302,1304,1309,1310,1315,1317,1323],{"type":15,"value":1303},"The scoped CSS is also exposed on the generated component object (",{"type":9,"tag":74,"props":1305,"children":1306},{"className":76},[1307],{"type":15,"value":1308},"BadgeComponent.styles",{"type":15,"value":896},{"type":9,"tag":74,"props":1311,"children":1312},{"className":76},[1313],{"type":15,"value":1314},".scope",{"type":15,"value":1316},") so the asset pipeline can serve it as a cached per-component stylesheet instead of\ninlining — see ",{"type":9,"tag":24,"props":1318,"children":1320},{"href":1319},"#asset-tiers",[1321],{"type":15,"value":1322},"Asset tiers",{"type":15,"value":1324}," below.",{"type":9,"tag":33,"props":1326,"children":1328},{"id":1327},"asset-tiers",[1329],{"type":15,"value":1322},{"type":9,"tag":18,"props":1331,"children":1332},{},[1333,1335,1340],{"type":15,"value":1334},"CSS and JS ship in ",{"type":9,"tag":86,"props":1336,"children":1337},{},[1338],{"type":15,"value":1339},"three tiers",{"type":15,"value":1341},", so a page loads only what it uses and shared chunks stay cached:",{"type":9,"tag":40,"props":1343,"children":1344},{},[1345,1366],{"type":9,"tag":44,"props":1346,"children":1347},{},[1348],{"type":9,"tag":48,"props":1349,"children":1350},{},[1351,1356,1361],{"type":9,"tag":52,"props":1352,"children":1353},{},[1354],{"type":15,"value":1355},"Tier",{"type":9,"tag":52,"props":1357,"children":1358},{},[1359],{"type":15,"value":1360},"What",{"type":9,"tag":52,"props":1362,"children":1363},{},[1364],{"type":15,"value":1365},"How it's delivered",{"type":9,"tag":63,"props":1367,"children":1368},{},[1369,1413,1448],{"type":9,"tag":48,"props":1370,"children":1371},{},[1372,1380,1396],{"type":9,"tag":70,"props":1373,"children":1374},{},[1375],{"type":9,"tag":86,"props":1376,"children":1377},{},[1378],{"type":15,"value":1379},"Global",{"type":9,"tag":70,"props":1381,"children":1382},{},[1383,1385,1390,1391],{"type":15,"value":1384},"site-wide ",{"type":9,"tag":74,"props":1386,"children":1387},{"className":76},[1388],{"type":15,"value":1389},"app.css",{"type":15,"value":468},{"type":9,"tag":74,"props":1392,"children":1393},{"className":76},[1394],{"type":15,"value":1395},"app.js",{"type":9,"tag":70,"props":1397,"children":1398},{},[1399,1401,1406,1407,1412],{"type":15,"value":1400},"linked on every page (",{"type":9,"tag":74,"props":1402,"children":1403},{"className":76},[1404],{"type":15,"value":1405},"\u002F_bml\u002Fapp.css",{"type":15,"value":300},{"type":9,"tag":74,"props":1408,"children":1409},{"className":76},[1410],{"type":15,"value":1411},"\u002F_bml\u002Fapp.js",{"type":15,"value":217},{"type":9,"tag":48,"props":1414,"children":1415},{},[1416,1424,1438],{"type":9,"tag":70,"props":1417,"children":1418},{},[1419],{"type":9,"tag":86,"props":1420,"children":1421},{},[1422],{"type":15,"value":1423},"Per-page",{"type":9,"tag":70,"props":1425,"children":1426},{},[1427,1429,1433,1434],{"type":15,"value":1428},"the page's own ",{"type":9,"tag":74,"props":1430,"children":1431},{"className":76},[1432],{"type":15,"value":661},{"type":15,"value":468},{"type":9,"tag":74,"props":1435,"children":1436},{"className":76},[1437],{"type":15,"value":629},{"type":9,"tag":70,"props":1439,"children":1440},{},[1441,1443],{"type":15,"value":1442},"page CSS inlined in document order; page JS bundled to ",{"type":9,"tag":74,"props":1444,"children":1445},{"className":76},[1446],{"type":15,"value":1447},"\u003CPage>.js",{"type":9,"tag":48,"props":1449,"children":1450},{},[1451,1459,1470],{"type":9,"tag":70,"props":1452,"children":1453},{},[1454],{"type":9,"tag":86,"props":1455,"children":1456},{},[1457],{"type":15,"value":1458},"Per-component",{"type":9,"tag":70,"props":1460,"children":1461},{},[1462,1464,1468],{"type":15,"value":1463},"a component's ",{"type":9,"tag":74,"props":1465,"children":1466},{"className":76},[1467],{"type":15,"value":677},{"type":15,"value":1469}," (and, later, its island JS)",{"type":9,"tag":70,"props":1471,"children":1472},{},[1473,1475,1480,1482],{"type":15,"value":1474},"served as a cached chunk (",{"type":9,"tag":74,"props":1476,"children":1477},{"className":76},[1478],{"type":15,"value":1479},"\u002F_bml\u002Fcss\u002F\u003Ctag>.css",{"type":15,"value":1481},"), linked ",{"type":9,"tag":86,"props":1483,"children":1484},{},[1485],{"type":15,"value":1486},"only on pages that render the component",{"type":9,"tag":18,"props":1488,"children":1489},{},[1490,1492,1497,1499,1504,1506,1511,1513,1517,1518,1524],{"type":15,"value":1491},"The compiler records, per page, the components it renders (",{"type":9,"tag":74,"props":1493,"children":1494},{"className":76},[1495],{"type":15,"value":1496},"BmlPageRenderer.componentTags",{"type":15,"value":1498},") and emits a\n",{"type":9,"tag":74,"props":1500,"children":1501},{"className":76},[1502],{"type":15,"value":1503},"bml.generated.BmlComponents",{"type":15,"value":1505}," registry. The server expands that list to the transitive closure (a\ncomponent can render other components) and links exactly those component stylesheets — nothing more. In\nthis ",{"type":9,"tag":86,"props":1507,"children":1508},{},[1509],{"type":15,"value":1510},"linked mode",{"type":15,"value":1512}," the per-component ",{"type":9,"tag":74,"props":1514,"children":1515},{"className":76},[1516],{"type":15,"value":661},{"type":15,"value":1143},{"type":9,"tag":1519,"props":1520,"children":1521},"em",{},[1522],{"type":15,"value":1523},"not",{"type":15,"value":1525}," inlined (the scope markers remain, so the\nlinked stylesheet still matches); zero-config SSR \u002F email rendering keeps inlining instead.",{"type":9,"tag":18,"props":1527,"children":1528},{},[1529],{"type":15,"value":1530},"Wire it up by handing the server the generated registries and your globals:",{"type":9,"tag":697,"props":1532,"children":1537},{"className":1533,"code":1535,"filename":-1,"highlights":-1,"language":1536,"meta":76},[1534],"language-kotlin","BmlServer(\n  project = CompiledProject(\"my-site\", \"1.0.0\"),\n  pages = bml.generated.BmlPages.all,\n  components = bml.generated.BmlComponents.all,   \u002F\u002F enables linked per-component CSS\n  globalCss = File(\"app.css\").readText(),\n  globalJs = File(\"app.js\").readText(),\n).start()\n","kotlin",[1538],{"type":9,"tag":74,"props":1539,"children":1540},{"__ignoreMap":76},[1541],{"type":15,"value":1535},1790541170517]