[{"data":1,"prerenderedAt":770},["ShallowReactive",2],{"navigation_docs":3,"-rendering-plain-text":191,"-rendering-plain-text-surround":765},[4,31,67,103,129,155,175],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":30},"Getting started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,15,20,25],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Quick start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-play",{"title":26,"path":27,"stem":28,"icon":29},"Agent Skill","\u002Fgetting-started\u002Fagent-skill","1.getting-started\u002F4.agent-skill","i-lucide-sparkles",false,{"title":32,"icon":33,"path":34,"stem":35,"children":36,"page":30},"Authoring","i-lucide-pen-line","\u002Fauthoring","2.authoring",[37,42,47,52,57,62],{"title":38,"path":39,"stem":40,"icon":41},"Comark syntax","\u002Fauthoring\u002Fcomark-syntax","2.authoring\u002F1.comark-syntax","i-lucide-file-code",{"title":43,"path":44,"stem":45,"icon":46},"Frontmatter","\u002Fauthoring\u002Ffrontmatter","2.authoring\u002F2.frontmatter","i-lucide-heading",{"title":48,"path":49,"stem":50,"icon":51},"Modules","\u002Fauthoring\u002Fmodules","2.authoring\u002F3.modules","i-lucide-blocks",{"title":53,"path":54,"stem":55,"icon":56},"Merge tags and bindings","\u002Fauthoring\u002Fmerge-tags-and-bindings","2.authoring\u002F4.merge-tags-and-bindings","i-lucide-braces",{"title":58,"path":59,"stem":60,"icon":61},"Actions and spans","\u002Fauthoring\u002Factions-and-spans","2.authoring\u002F5.actions-and-spans","i-lucide-mouse-pointer-click",{"title":63,"path":64,"stem":65,"icon":66},"Compile errors","\u002Fauthoring\u002Fcompile-errors","2.authoring\u002F6.compile-errors","i-lucide-circle-alert",{"title":68,"icon":69,"path":70,"stem":71,"children":72,"page":30},"Rendering","i-lucide-layout-template","\u002Frendering","3.rendering",[73,78,83,88,93,98],{"title":74,"path":75,"stem":76,"icon":77},"Families and streams","\u002Frendering\u002Ffamilies-and-streams","3.rendering\u002F1.families-and-streams","i-lucide-users",{"title":79,"path":80,"stem":81,"icon":82},"Themes","\u002Frendering\u002Fthemes","3.rendering\u002F2.themes","i-lucide-palette",{"title":84,"path":85,"stem":86,"icon":87},"Config and the renderer","\u002Frendering\u002Fconfig-and-renderer","3.rendering\u002F3.config-and-renderer","i-lucide-settings",{"title":89,"path":90,"stem":91,"icon":92},"Layout and spacing","\u002Frendering\u002Flayout-and-spacing","3.rendering\u002F4.layout-and-spacing","i-lucide-ruler",{"title":94,"path":95,"stem":96,"icon":97},"HTML output","\u002Frendering\u002Fhtml-output","3.rendering\u002F5.html-output","i-lucide-code-xml",{"title":99,"path":100,"stem":101,"icon":102},"Plain text","\u002Frendering\u002Fplain-text","3.rendering\u002F6.plain-text","i-lucide-file-text",{"title":104,"icon":105,"path":106,"stem":107,"children":108,"page":30},"Sending","i-lucide-send","\u002Fsending","4.sending",[109,114,119,124],{"title":110,"path":111,"stem":112,"icon":113},"Message and MIME","\u002Fsending\u002Fmessage-and-mime","4.sending\u002F1.message-and-mime","i-lucide-mail",{"title":115,"path":116,"stem":117,"icon":118},"Router and streams","\u002Fsending\u002Frouter-and-streams","4.sending\u002F2.router-and-streams","i-lucide-route",{"title":120,"path":121,"stem":122,"icon":123},"SMTP","\u002Fsending\u002Fsmtp","4.sending\u002F3.smtp","i-lucide-server",{"title":125,"path":126,"stem":127,"icon":128},"Maps","\u002Fsending\u002Fmaps","4.sending\u002F4.maps","i-lucide-map",{"title":130,"icon":131,"path":132,"stem":133,"children":134,"page":30},"Tooling","i-lucide-wrench","\u002Ftooling","5.tooling",[135,140,145,150],{"title":136,"path":137,"stem":138,"icon":139},"The lttr CLI","\u002Ftooling\u002Fcli","5.tooling\u002F1.cli","i-lucide-terminal",{"title":141,"path":142,"stem":143,"icon":144},"Live preview","\u002Ftooling\u002Flive-preview","5.tooling\u002F2.live-preview","i-lucide-eye",{"title":146,"path":147,"stem":148,"icon":149},"Screenshots","\u002Ftooling\u002Fscreenshots","5.tooling\u002F3.screenshots","i-lucide-camera",{"title":151,"path":152,"stem":153,"icon":154},"Goldens and testing","\u002Ftooling\u002Fgoldens-and-testing","5.tooling\u002F4.goldens-and-testing","i-lucide-flask-conical",{"title":156,"icon":157,"path":158,"stem":159,"children":160,"page":30},"Guides","i-lucide-book-open","\u002Fguides","6.guides",[161,166,170],{"title":162,"path":163,"stem":164,"icon":165},"The Quiet example","\u002Fguides\u002Fthe-quiet-example","6.guides\u002F1.the-quiet-example","i-lucide-mail-open",{"title":167,"path":168,"stem":169,"icon":82},"Your own family and theme","\u002Fguides\u002Fyour-own-family-and-theme","6.guides\u002F2.your-own-family-and-theme",{"title":171,"path":172,"stem":173,"icon":174},"Releasing","\u002Fguides\u002Freleasing","6.guides\u002F3.releasing","i-lucide-tag",{"title":176,"icon":177,"path":178,"stem":179,"children":180,"page":30},"Reference","i-lucide-library","\u002Freference","7.reference",[181,186],{"title":182,"path":183,"stem":184,"icon":185},"API reference","\u002Freference\u002Fapi-reference","7.reference\u002F1.api-reference","i-lucide-list-tree",{"title":187,"path":188,"stem":189,"icon":190},"Gallery","\u002Freference\u002Fgallery","7.reference\u002F2.gallery","i-lucide-images",{"id":192,"title":99,"body":193,"description":758,"extension":759,"links":760,"meta":761,"navigation":762,"path":100,"seo":763,"stem":101,"__hash__":764},"docs\u002F3.rendering\u002F6.plain-text.md",{"type":194,"value":195,"toc":748},"minimark",[196,209,214,221,232,254,258,262,301,305,348,352,355,362,405,408,415,419,654,665,669,675,682,724,728,735],[197,198,199,200,204,205,208],"p",{},"Every message carries a plain-text part in ",[201,202,203],"code",{},"Message.Text",", beside the HTML. lttr builds it from the compiled template, module by module, with ",[201,206,207],{},"github.com\u002Fsulv-io\u002Flttr\u002Frender\u002Ftext",". It never strips tags from the HTML, so the text part reads as if someone had written it by hand: actions are labelled, tables line up, and the chrome is reduced to what a text reader needs.",[210,211,213],"h2",{"id":212},"read-a-text-part","Read a text part",[197,215,216,217,220],{},"This is the text part of the Quiet order email, byte for byte from ",[201,218,219],{},"testdata\u002Fgolden\u002F",":",[222,223,230],"pre",{"className":224,"code":226,"filename":227,"language":228,"meta":229},[225],"language-text","CARIBHUBS\n\nORDER CH-20417\n\nOn its way.\n\nKareem picked up your order at 2:14 pm and will reach Frigate Bay by\n5:30 pm.\n\nTrack delivery:\nhttps:\u002F\u002Fcaribhubs.com\u002Forders\u002FCH-20417\n\nConfirmed ✓ > Packed ✓ > [On its way] > Delivered\n\nMahogany serving board x1 ....... EC$185\nScotch bonnet pepper sauce x2 ... EC$56\nDelivery, paid to your driver ... EC$15\nTotal ........................... EC$256\n                                 ≈ US$95\n\nDELIVER TO\nKeisha Browne\n12 Frigate Bay Road, St Kitts\n\nDRIVER\nKareem J. · ★ 4.9\nGrey Toyota Hiace\n\nPayment is held until you confirm delivery. Questions? Reply to this\nemail or visit the Help Centre (https:\u002F\u002Fcaribhubs.com\u002Fhelp).\n\n--\nCaribHubs · Basseterre, St Kitts\nNotification settings: https:\u002F\u002Fcaribhubs.com\u002Fpreferences\n","01-order.out_for_delivery.txt","text","",[201,231,226],{"__ignoreMap":229},[197,233,234,235,238,239,242,243,242,246,249,250,253],{},"It comes from this template: a ",[201,236,237],{},"statement"," with an eyebrow, a heading, a paragraph and a button; a ",[201,240,241],{},"progress","; a ",[201,244,245],{},"receipt",[201,247,248],{},"meta","; and a ",[201,251,252],{},"buyer"," family F2 footer whose note the template overrides.",[255,256],"email-preview",{"name":257,"tab":228},"01-order.out_for_delivery",[210,259,261],{"id":260},"follow-the-layout-rules","Follow the layout rules",[263,264,265,273,279,289,295],"ul",{},[266,267,268,272],"li",{},[269,270,271],"strong",{},"Blocks"," are separated by exactly one blank line, and the part ends with a newline.",[266,274,275,278],{},[269,276,277],{},"Lines"," wrap at 70 characters on spaces. A word longer than that, such as a URL, sits on its own line unbroken.",[266,280,281,284,285,288],{},[269,282,283],{},"The header"," is the brand name (",[201,286,287],{},"Theme.Brand.Name",") in capitals. An H2 family puts its banner in capitals on the line above; an H3 family puts its masthead in capitals on the line below.",[266,290,291,294],{},[269,292,293],{},"Eyebrows",", table header rows, meta labels, story eyebrows and quote cites are written in capitals.",[266,296,297,300],{},[269,298,299],{},"Bold, italic and spans"," contribute their text only. Code spans contribute their value.",[210,302,304],{"id":303},"write-actions-and-links","Write actions and links",[263,306,307,331,345],{},[266,308,309,312,313,316,317,320,321,324,325],{},[269,310,311],{},"An action"," (a ",[201,314,315],{},":button",", a ",[201,318,319],{},":link",", a story or product link) is its label and a colon on one line and the full URL on the next. A trailing ",[201,322,323],{},"›"," on the label is dropped.",[222,326,329],{"className":327,"code":328,"filename":227,"language":228,"meta":229},[225],"Track delivery:\nhttps:\u002F\u002Fcaribhubs.com\u002Forders\u002FCH-20417\n",[201,330,328],{"__ignoreMap":229},[266,332,333,336,337,340,341,344],{},[269,334,335],{},"A link in prose"," is written ",[201,338,339],{},"label (url)",", or just the URL when the label is empty or is the URL itself. An email autolink such as ",[201,342,343],{},"\u003Cops@acme.example>"," is written as the bare address.",[266,346,347],{},"Every URL is written in full, including merge values escaped as in the HTML (D34).",[210,349,351],{"id":350},"line-up-tables-with-dot-leaders","Line up tables with dot leaders",[197,353,354],{},"Two-column tables, breakdowns, receipts and stock lists use dot leaders:",[222,356,360],{"className":357,"code":358,"filename":359,"language":228,"meta":229},[225],"Sales · 14 orders ............... EC$1,085.00\nCommission · 6% ................. −EC$65.10\nReference ....................... PO-0923-114\n","02-payout.sent.txt",[201,361,358],{"__ignoreMap":229},[263,363,364,367,374,377,388,402],{},[266,365,366],{},"Values start in one column, at the longest label plus 5, clamped to columns 34–50; a label too long for that column still gets 3 dots, so its value starts further right.",[266,368,369,370,373],{},"A row is ",[201,371,372],{},"label + \" \" + dots + \" \" + value",".",[266,375,376],{},"A sub-value, such as the ≈ US$ total of a receipt, sits on the next line, right-aligned to the end of the value.",[266,378,379,380,383,384,387],{},"A receipt line's label is ",[201,381,382],{},"Name xQty",", with no ",[201,385,386],{}," x0"," when the quantity is zero (D30).",[266,389,390,391,394,395,398,399,373],{},"A stock row is ",[201,392,393],{},"Name · SKU"," against ",[201,396,397],{},"N left"," or ",[201,400,401],{},"Out of stock",[266,403,404],{},"A two-column table with a header row writes the header in capitals, padded with spaces instead of dots, so it reads as column headings (D30).",[197,406,407],{},"Tables with any other number of columns become padded columns, 3 spaces apart, each as wide as its widest cell. Columns the GFM table aligns right stay right-aligned:",[222,409,413],{"className":410,"code":411,"filename":412,"language":228,"meta":229},[225],"COMMISSION       NOW   FROM 1 NOV\nGoods             6%           6%\nServices          4%         3.5%\nDelivery fee   EC$15        EC$15\n","07-fees.change.txt",[201,414,411],{"__ignoreMap":229},[210,416,418],{"id":417},"know-each-modules-text-form","Know each module's text form",[420,421,422,435],"table",{},[423,424,425],"thead",{},[426,427,428,432],"tr",{},[429,430,431],"th",{},"Module",[429,433,434],{},"Text",[436,437,438,448,458,468,478,487,499,508,531,543,561,580,590,600,610,620,638],"tbody",{},[426,439,440,445],{},[441,442,443],"td",{},[201,444,237],{},[441,446,447],{},"The eyebrow, then each heading, paragraph, list and action as its own block",[426,449,450,455],{},[441,451,452],{},[201,453,454],{},"figure",[441,456,457],{},"The eyebrow; then the amount and its ≈ line as one block; then the copy",[426,459,460,465],{},[441,461,462],{},[201,463,464],{},"letter",[441,466,467],{},"Each paragraph, list and action as its own block",[426,469,470,475],{},[441,471,472],{},[201,473,474],{},"notice",[441,476,477],{},"The title and the text as one block; actions follow as their own blocks",[426,479,480,484],{},[441,481,482],{},[201,483,201],{},[441,485,486],{},"The code with its whitespace removed, then the copy",[426,488,489,493],{},[441,490,491],{},[201,492,241],{},[441,494,495,498],{},[201,496,497],{},"Confirmed ✓ > Packed ✓ > [On its way] > Delivered",": done steps ticked, the current one in brackets",[426,500,501,505],{},[441,502,503],{},[201,504,248],{},[441,506,507],{},"Each pair as a block: the label in capitals, then its lines, line breaks kept",[426,509,510,528],{},[441,511,512,514,515,514,518,521,522,524,525],{},[201,513,245],{},", ",[201,516,517],{},"breakdown",[201,519,520],{},"stock",", two-column ",[201,523,420],{}," and ",[201,526,527],{},"compare",[441,529,530],{},"Dot leaders",[426,532,533,540],{},[441,534,535,536,524,538],{},"Wider ",[201,537,420],{},[201,539,527],{},[441,541,542],{},"Padded columns",[426,544,545,550],{},[441,546,547],{},[201,548,549],{},"stories",[441,551,552,553,556,557,560],{},"Each story as a block: eyebrow in capitals, title, then ",[201,554,555],{},"Read:"," (or its ",[201,558,559],{},"cta",") and the URL",[426,562,563,568],{},[441,564,565],{},[201,566,567],{},"products",[441,569,570,571,574,575,556,578,560],{},"Each product as a block: ",[201,572,573],{},"Name · Price",", then ",[201,576,577],{},"Buy:",[201,579,559],{},[426,581,582,587],{},[441,583,584],{},[201,585,586],{},"quote",[441,588,589],{},"The quote, then the cite in capitals",[426,591,592,597],{},[441,593,594],{},[201,595,596],{},"offer",[441,598,599],{},"The eyebrow, the heading and the terms as three blocks",[426,601,602,607],{},[441,603,604],{},[201,605,606],{},"actions",[441,608,609],{},"Each action as its own block",[426,611,612,617],{},[441,613,614],{},[201,615,616],{},"signature",[441,618,619],{},"Name, role and contact as one block",[426,621,622,627],{},[441,623,624],{},[201,625,626],{},"signoff",[441,628,629,630,633,634,637],{},"The closing (default ",[201,631,632],{},"Thanks,",") and the name (default ",[201,635,636],{},"The {brand} team",") as one block",[426,639,640,651],{},[441,641,642,514,645,514,648],{},[201,643,644],{},"image",[201,646,647],{},"map",[201,649,650],{},"divider",[441,652,653],{},"Nothing",[197,655,656,657,660,661,664],{},"Lists keep their markers: ",[201,658,659],{},"- item"," for bullets and ",[201,662,663],{},"1. item"," for numbered lists, with a hanging indent when an item wraps (D30).",[210,666,668],{"id":667},"close-with-the-footer","Close with the footer",[197,670,671,672,220],{},"The footer is the lead line, a blank line, then a block starting with ",[201,673,674],{},"--",[222,676,680],{"className":677,"code":678,"filename":679,"language":228,"meta":229},[225],"You're getting this because you subscribed to CaribHubs updates for St\nKitts & Nevis.\n\n--\nCaribHubs · Basseterre, St Kitts\nUnsubscribe: https:\u002F\u002Fcaribhubs.com\u002Funsubscribe\nPreferences: https:\u002F\u002Fcaribhubs.com\u002Fpreferences\n","05-campaign.heritage_week.txt",[201,681,678],{"__ignoreMap":229},[263,683,684,691,709],{},[266,685,686,687,690],{},"The lead is the F1 reason, F2 note, F3 opt-out line or F3·i internal line, after any ",[201,688,689],{},"footer.*"," override.",[266,692,693,694,696,697,700,701,704,705,708],{},"Then ",[201,695,674],{},", the address line from the family's ",[201,698,699],{},"Address"," copy, and one ",[201,702,703],{},"Label: URL"," line per entry in the family's ",[201,706,707],{},"TextLinks",". A link whose URL evaluates to empty is left out.",[266,710,711,712,715,716,718,719,723],{},"The F1 nav row, the F1 ",[201,713,714],{},"Links"," and the F2 service line have no text form. That is why the URLs a reader needs go in ",[201,717,707],{}," (see ",[720,721,74],"a",{"href":722},"\u002Frendering\u002Ffamilies-and-streams#write-the-footer-copy",").",[210,725,727],{"id":726},"check-the-text-part","Check the text part",[197,729,730,731,734],{},"The text part is checked like the HTML: a merge tag with no value, an empty action URL or an empty bound list is a render error in both parts (D31). URLs shown in both parts are checked by the HTML renderer, and text-only footer URLs are checked by ",[201,732,733],{},"Render"," with the same rules before either part is written (D30, D34).",[197,736,737,738,741,742,745,746,373],{},"The nine Quiet text parts are goldens in ",[201,739,740],{},"testdata\u002Fgolden\u002F*.txt",", compared byte for byte by ",[201,743,744],{},"go test .\u002Fexamples\u002Fquiet",". See ",[720,747,151],{"href":152},{"title":229,"searchDepth":749,"depth":749,"links":750},2,[751,752,753,754,755,756,757],{"id":212,"depth":749,"text":213},{"id":260,"depth":749,"text":261},{"id":303,"depth":749,"text":304},{"id":350,"depth":749,"text":351},{"id":417,"depth":749,"text":418},{"id":667,"depth":749,"text":668},{"id":726,"depth":749,"text":727},"How lttr writes the plain-text part from the same compiled template, and the rules every text part follows.","md",null,{},{"icon":102},{"title":99,"description":758},"QOjg-DB5vr3FzujZ9ObmebrVwGhgyD3qtbvbL-HlS1g",[766,768],{"title":94,"path":95,"stem":96,"description":767,"icon":97,"children":-1},"What the HTML part looks like, and how it holds up in Outlook, dark mode and on phones.",{"title":110,"path":111,"stem":112,"description":769,"icon":113,"children":-1},"The rendered email as a Go value, the rules for adding your own headers, and the exact bytes MIME writes.",1790309825446]